Пример #1
0
def do_milestone_max_piety(c, mile):
  if query.record_max_piety(c, mile['name'], mile['start'], mile['noun']):
    assign_points(c, "champion", mile['name'], 10)
  if mile['noun'] == 'Ru':
    banner.award_banner(c, mile['name'], 'lugonu', 1)
  elif query.did_champion(c, 'Ru', mile['name'], mile['start'], mile['time']):
    banner.award_banner(c, mile['name'], 'lugonu', 2)
Пример #2
0
def crunch_misc(c, g):
  player = g['name']
  ktyp = g['ktyp']

  if g['xl'] >= 13:
    banner.award_banner(c, player, 'okawaru', 1)

  if g['goldfound'] >= 1000:
    banner.award_banner(c, player, 'gozag', 1)

  if g['xl'] >= 9 and nemelex.is_nemelex_choice(g['char'],g['start']):
    ban = 'nemelex:' + g['char']
    banner.award_banner(c, player, ban, 1)
  if g['xl'] >= 9 and query.check_xl9_streak(c, player, g['start']):
    banner.award_banner(c, player, 'cheibriados', 1)
  if g['sc'] >= 1000:
    og = query.previous_combo_highscore(c, g)
    if og and og[0] != player and og[1] >= 1000 and og[1] < g['sc']:
      banner.award_banner(c, player, 'dithmenos', 1)

  killer = loaddb.strip_unique_qualifier(g.get('killer') or '')
  if uniq.is_uniq(killer):
    query_do(c,
             '''INSERT INTO deaths_to_uniques
                            (player, uniq, start_time, end_time)
                     VALUES (%s, %s, %s, %s)''',
             player.lower(), killer, g['start'], g['end'])
    cuniqdeaths = query.count_deaths_to_distinct_uniques(c, player)
    olduniqdeaths = query.lookup_deaths_to_distinct_uniques(c, player)
    if cuniqdeaths > olduniqdeaths:
      query.update_deaths_to_distinct_uniques(c, player, cuniqdeaths,
                                              g['end'])
Пример #3
0
def do_milestone_unique(c, mile):
  """This function takes a parsed milestone known to commemorate the death of
  a unique, and assigns relevant banners."""
  unique = loaddb.extract_unique_name(mile['milestone'])
  if unique == 'Sigmund':
    if not query.did_enter_branch(c, 'Depths', mile['name'], mile['start'], mile['time']):
      banner.award_banner(c, mile['name'], 'the_shining_one', 1)
Пример #4
0
def do_milestone_max_piety(c, mile):
    if query.record_max_piety(c, mile["name"], mile["start"], mile["noun"]):
        assign_points(c, "champion", mile["name"], 10)
    if mile["noun"] == "Ru":
        banner.award_banner(c, mile["name"], "lugonu", 1)
    elif query.did_champion(c, "Ru", mile["name"], mile["start"], mile["time"]):
        banner.award_banner(c, mile["name"], "lugonu", 2)
Пример #5
0
def do_milestone_max_piety(c, mile):
  if query.record_max_piety(c, mile['name'], mile['start'], mile['noun']):
    assign_points(c, "champion", mile['name'], 10)
  if mile['noun'] == 'Ru':
    banner.award_banner(c, mile['name'], 'lugonu', 1)
  elif query.did_champion(c, 'Ru', mile['name'], mile['start'], mile['time']):
    banner.award_banner(c, mile['name'], 'lugonu', 2)
Пример #6
0
def crunch_misc(c, g):
  player = g['name']
  ktyp = g['ktyp']

  if g['xl'] >= 13:
    banner.award_banner(c, player, 'okawaru', 1)

  if g['goldfound'] >= 1000:
    banner.award_banner(c, player, 'gozag', 1)

  if g['xl'] >= 9 and nemelex.is_nemelex_choice(g['char'],g['start']):
    ban = 'nemelex:' + g['char']
    banner.award_banner(c, player, ban, 1)
  if g['xl'] >= 9 and query.check_xl9_streak(c, player, g['start']):
    banner.award_banner(c, player, 'cheibriados', 1)
  if g['sc'] >= 1000:
    og = query.previous_combo_highscore(c, g)
    if og and og[0] != player and og[1] >= 1000 and og[1] < g['sc']:
      banner.award_banner(c, player, 'dithmenos', 1)

  killer = loaddb.strip_unique_qualifier(g.get('killer') or '')
  if uniq.is_uniq(killer):
    query_do(c,
             '''INSERT INTO deaths_to_uniques
                            (player, uniq, start_time, end_time)
                     VALUES (%s, %s, %s, %s)''',
             player.lower(), killer, g['start'], g['end'])
    cuniqdeaths = query.count_deaths_to_distinct_uniques(c, player)
    olduniqdeaths = query.lookup_deaths_to_distinct_uniques(c, player)
    if cuniqdeaths > olduniqdeaths:
      query.update_deaths_to_distinct_uniques(c, player, cuniqdeaths,
                                              g['end'])
Пример #7
0
def check_temp_trophies(c, pmap):
    award_temp_trophy(c, pmap, query.player_hare_candidates(c), "last_win", [100])

    award_temp_trophy(c, pmap, query.get_top_unique_killers(c), "top_unique_killer:%d", [50, 20, 10])

    #  award_temp_trophy(c, pmap, query.player_dieselest_best(c),
    #                    'top_ac+ev_game:%d', [50, 20, 10],
    #                    team_points=True)

    #  award_temp_trophy(c, pmap, query.player_pacific_win_best(c),
    #                    'top_pacific_win:%d', [200, 100, 50],
    #                    team_points=True)

    # [snark] xl1 dive disabled for 2010 tourney.
    # award_temp_trophy(c, pmap, query.player_xl1_dive_best(c),
    #                  'xl1_dive_rank:%d', [50, 20, 10],
    #                  team_points=True)

    award_temp_trophy(
        c,
        pmap,
        query.player_hs_combo_best(c),
        "combo_scores_Nth:%d",
        [200, 100, 50],
        can_share_places=True,
        team_points=True,
    )

    award_temp_trophy(c, pmap, query.get_top_ziggurats(c), "zig_rank:%d", [100, 50, 20], team_points=True)

    award_temp_trophy(c, pmap, query.player_low_xl_win_best(c), "low_xl_win_rank:%d", [100, 50, 20], team_points=True)

    award_temp_trophy(c, pmap, query.player_rune_dive_best(c), "rune_dive_rank:%d", [50, 20, 10], team_points=True)

    award_temp_trophy(
        c,
        pmap,
        query.player_deaths_to_uniques_best(c),
        "deaths_to_uniques_Nth:%d",
        [50, 20, 10],
        can_share_places=False,
        team_points=True,
    )
    # streak handling
    all_streaks = query.list_all_streaks(c)
    # not currently giving top_streak points
    # award_temp_trophy(c, pmap, all_streaks, 'top_streak:%d', [200, 100, 50])
    # give out streak points and handle Chei III here so we don't have to
    # recompute all streaks yet again
    for streak in all_streaks:
        if streak[1] > 1:
            assign_points(c, "streak", streak[0], streak[1] * 100, False)
        if streak[1] < 4:
            continue
        l = len(streak[3])
        for i in range(l - 3):
            if query.compute_streak_length(streak[3][i : i + 4]) == 4:
                banner.award_banner(c, streak[0], "cheibriados", 3)
                break
Пример #8
0
def check_banners(c):
  award_player_banners(c, 'zin',
                       query_first_col(c, '''SELECT player
                                             FROM all_hellpan_kills'''),
                       3)
  award_player_banners(c, 'zin',
                       query_first_col(c, '''SELECT player
                                             FROM have_hellpan_kills'''),
                       2)
  award_player_banners(c, 'jiyva',
                       query_first_col(c,
                                       '''
SELECT player, COUNT(DISTINCT MID(charabbrev,1,2)) AS race_count,
               COUNT(DISTINCT MID(charabbrev,3,2)) AS class_count
FROM
(SELECT player, charabbrev FROM games WHERE xl>=9
UNION
SELECT player, charabbrev FROM milestones WHERE xl>=9) AS T
GROUP BY player
HAVING race_count >= 5 AND class_count >= 5'''),
                       1)
  award_player_banners(c, 'jiyva',
                       query_first_col(c,
                                       '''SELECT player FROM fivefives_rune'''),
                       2)
  award_player_banners(c, 'jiyva',
                       query_first_col(c,
                                       '''SELECT player FROM fivefives_win'''),
                       3)
  award_player_banners(c, 'fedhas',
                       query_first_col(c,
                                       '''SELECT player FROM orbrun_tomb'''),
                       3)
  award_player_banners(c, 'yredelemnul',
                       query_first_col(c,
                                       '''SELECT player FROM kunique_times
                                          WHERE nuniques >= 65'''),
                       3)
  award_player_banners(c, 'yredelemnul',
                       query_first_col(c,
                                       '''SELECT player FROM kunique_times
                                          WHERE nuniques >= 45'''),
                       2)
  award_player_banners(c, 'yredelemnul',
                       query_first_col(c,
                                       '''SELECT player FROM kunique_times
                                          WHERE nuniques >= 25'''),
                       1)
  rows = query_rows(c, '''SELECT * FROM nearby_uniques''')
  for r in rows:
    a = uniq.how_deep(r[1])
    b = uniq.how_deep(r[2])
    d = 3 - (r[4] - r[3])
    if b < a:
      a = b
    if d < a:
      a = d
    banner.award_banner(c, r[0], 'vehumet', a)
Пример #9
0
def update_clan_scores(c):
  banner.flush_clan_banners(c)
  query.update_all_clan_ranks(c)
  query.update_clan_scores(c)
  banner.assign_top_clan_banners(c)

  top_clan_player_banners = query.clan_player_banners(c)
  for banner_name, prestige, player in top_clan_player_banners:
    banner.award_banner(c, player, banner_name, prestige, temp=True)
Пример #10
0
def update_clan_scores(c):
  banner.flush_clan_banners(c)
  for clan in query.get_clans(c):
      info("Updating full score for clan %s" % clan)
      clan_additional_score(c, clan)
  banner.assign_top_clan_banners(c)

  top_clan_player_banners = query.clan_player_banners(c)
  for banner_name, prestige, player in top_clan_player_banners:
    banner.award_banner(c, player, banner_name, prestige, temp=True)
Пример #11
0
def update_clan_scores(c):
    banner.flush_clan_banners(c)
    for clan in query.get_clans(c):
        info("Updating full score for clan %s" % clan)
        clan_additional_score(c, clan)
    banner.assign_top_clan_banners(c)

    top_clan_player_banners = query.clan_player_banners(c)
    for banner_name, prestige, player in top_clan_player_banners:
        banner.award_banner(c, player, banner_name, prestige, temp=True)
Пример #12
0
def do_milestone_abyss_exit(c, mile):
  god = mile.get('god') or 'No God'
  if god != 'Lugonu' and not query.did_worship_god(c, 'Lugonu', mile['name'], mile['start'], mile['time']):
    if query.did_get_rune(c, 'abyssal', mile['name'], mile['start'], mile['time']):
      if mile['xl'] < 13:
        prestige = 3
      else:
        prestige = 2
    else:
      prestige = 1
    banner.award_banner(c, mile['name'], 'lugonu', prestige)
Пример #13
0
def check_temp_trophies(c, pmap):
  award_temp_trophy(c, pmap, query.player_hare_candidates(c),
                    "last_win", [100])

  award_temp_trophy(c, pmap, query.get_top_unique_killers(c),
                    'top_unique_killer:%d', [50, 20, 10])

#  award_temp_trophy(c, pmap, query.player_dieselest_best(c),
#                    'top_ac+ev_game:%d', [50, 20, 10],
#                    team_points=True)

#  award_temp_trophy(c, pmap, query.player_pacific_win_best(c),
#                    'top_pacific_win:%d', [200, 100, 50],
#                    team_points=True)

  # [snark] xl1 dive disabled for 2010 tourney.
  #award_temp_trophy(c, pmap, query.player_xl1_dive_best(c),
  #                  'xl1_dive_rank:%d', [50, 20, 10],
  #                  team_points=True)

  award_temp_trophy(c, pmap, query.player_hs_combo_best(c),
                    'combo_scores_Nth:%d', [200, 100, 50],
                    can_share_places=True, team_points=True)

  award_temp_trophy(c, pmap, query.get_top_ziggurats(c),
                    'zig_rank:%d', [100, 50, 20], team_points=True)

  award_temp_trophy(c, pmap, query.player_low_xl_win_best(c),
                    'low_xl_win_rank:%d', [100, 50, 20], team_points=True)

  award_temp_trophy(c, pmap, query.player_rune_dive_best(c),
                    'rune_dive_rank:%d', [50, 20, 10], team_points=True)

  award_temp_trophy(c, pmap, query.player_deaths_to_uniques_best(c),
                    'deaths_to_uniques_Nth:%d', [50, 20, 10],
                    can_share_places=False,
                    team_points=True)
  # streak handling
  all_streaks = query.list_all_streaks(c)
  # not currently giving top_streak points
  #award_temp_trophy(c, pmap, all_streaks, 'top_streak:%d', [200, 100, 50])
  # give out streak points and handle Chei III here so we don't have to
  # recompute all streaks yet again
  for streak in all_streaks:
    if streak[1] > 1:
      assign_points(c, "streak", streak[0], streak[1]*100, False)
    if streak[1] < 4:
      continue
    l = len(streak[3])
    for i in range(l-3):
      if query.compute_streak_length(streak[3][i:i+4]) == 4:
        banner.award_banner(c, streak[0], 'cheibriados', 3)
        break
Пример #14
0
def do_milestone_unique(c, mile):
  """This function takes a parsed milestone known to commemorate the death of
  a unique, and checks to see if the player has already killed the unique.
  If so, it does nothing; if not, it marks that the player has killed the
  unique, and checks to see if the player has killed all uniques. If so,
  the player may be awarded points if they are one of the first to do so."""
  unique = loaddb.extract_unique_name(mile['milestone'])
  # DB already has the record for this kill, so == 1 => first kill.
  if query.count_player_unique_kills(c, mile['name'], unique) == 1:
    assign_points(c, "unique", mile['name'], 5)
  if unique == 'Sigmund':
    if not query.did_enter_branch(c, 'Depths', mile['name'], mile['start'], mile['time']):
      banner.award_banner(c, mile['name'], 'the_shining_one', 1)
Пример #15
0
def do_milestone_unique(c, mile):
  """This function takes a parsed milestone known to commemorate the death of
  a unique, and checks to see if the player has already killed the unique.
  If so, it does nothing; if not, it marks that the player has killed the
  unique, and checks to see if the player has killed all uniques. If so,
  the player may be awarded points if they are one of the first to do so."""
  unique = loaddb.extract_unique_name(mile['milestone'])
  # DB already has the record for this kill, so == 1 => first kill.
  if query.count_player_unique_kills(c, mile['name'], unique) == 1:
    assign_points(c, "unique", mile['name'], 5)
  if unique == 'Sigmund':
    if not query.did_enter_branch(c, 'Depths', mile['name'], mile['start'], mile['time']):
      banner.award_banner(c, mile['name'], 'the_shining_one', 1)
Пример #16
0
def check_banners(c):
  award_player_banners(c, 'zin',
                       query_first_col(c, '''SELECT player
                                             FROM all_hellpan_kills'''),
                       3)
  award_player_banners(c, 'zin',
                       query_first_col(c, '''SELECT player
                                             FROM have_hellpan_kills'''),
                       2)
  award_player_banners(c, 'jiyva',
                       query_first_col(c,
                                       '''SELECT player FROM fivefives_nine'''),
                       1)
  award_player_banners(c, 'jiyva',
                       query_first_col(c,
                                       '''SELECT player FROM fivefives_rune'''),
                       2)
  award_player_banners(c, 'jiyva',
                       query_first_col(c,
                                       '''SELECT player FROM fivefives_win'''),
                       3)
  award_player_banners(c, 'fedhas',
                       query_first_col(c,
                                       '''SELECT player FROM orbrun_tomb'''),
                       3)
  award_player_banners(c, 'yredelemnul',
                       query_first_col(c,
                                       '''SELECT player FROM kunique_times
                                          WHERE nuniques >= 65'''),
                       3)
  award_player_banners(c, 'yredelemnul',
                       query_first_col(c,
                                       '''SELECT player FROM kunique_times
                                          WHERE nuniques >= 45'''),
                       2)
  award_player_banners(c, 'yredelemnul',
                       query_first_col(c,
                                       '''SELECT player FROM kunique_times
                                          WHERE nuniques >= 25'''),
                       1)
  rows = query_rows(c, '''SELECT * FROM nearby_uniques''')
  for r in rows:
    a = uniq.how_deep(r[1])
    b = uniq.how_deep(r[2])
    d = 3 - (r[4] - r[3])
    if b < a:
      a = b
    if d < a:
      a = d
    banner.award_banner(c, r[0], 'vehumet', a)
Пример #17
0
def update_streaks(c):
  # streak handling
  all_streaks = query.list_all_streaks(c)
  # give out streak points and handle Chei III here so we don't have to
  # recompute all streaks yet again
  for streak in all_streaks:
    if streak['length'] > 1:
      query.update_streak(c,streak)
    if streak['length'] < 4:
      continue
    l = len(streak['games'])
    for i in range(l-3):
      if query.compute_streak_length(streak['games'][i:i+4]) == 4:
        banner.award_banner(c, streak['player'], 'cheibriados', 3)
        break
Пример #18
0
def do_milestone_br_enter(c, mile):
  """Five points for the first time you get each br.enter milestone (includes
  portal vaults). Also give out banners."""
  if query.player_count_br_enter(c, mile['name'], mile['noun']) == 1:
    assign_points(c, "branch:enter", mile['name'], 5)
  if mile['noun'] == 'Crypt':
    banner.award_banner(c, mile['name'], 'fedhas', 1)
  elif mile['noun'] in ['Vault', 'Snake', 'Swamp', 'Shoals', 'Spider', 'Pan', 'Slime',
                      'Tomb', 'Dis', 'Tar', 'Coc', 'Geh']:
    banner.award_banner(c, mile['name'], 'ashenzari', 1)
    if mile['noun'] in ['Pan', 'Dis', 'Tar', 'Coc', 'Geh']:
      banner.award_banner(c, mile['name'], 'zin', 1)
  elif mile['noun'] == 'Hell':
    if not query.game_did_visit_lair(c, mile['name'], mile['start'], mile['time']):
      banner.award_banner(c, mile['name'], 'kikubaaqudgha', 1)
    if mile['dur'] <= 1620:
      banner.award_banner(c, mile['name'], 'makhleb', 2)
Пример #19
0
def do_milestone_br_enter(c, mile):
    """Five points for the first time you get each br.enter milestone (includes
  portal vaults). Also give out banners."""
    if query.player_count_br_enter(c, mile["name"], mile["noun"]) == 1:
        assign_points(c, "branch:enter", mile["name"], 5)
    if mile["noun"] == "Crypt":
        banner.award_banner(c, mile["name"], "fedhas", 1)
    if mile["noun"] in ["Vaults", "Snake", "Swamp", "Shoals", "Spider", "Slime", "Tomb", "Dis", "Tar", "Coc", "Geh"]:
        banner.award_banner(c, mile["name"], "ashenzari", 1)
    if mile["noun"] in ["Pan", "Dis", "Tar", "Coc", "Geh"]:
        banner.award_banner(c, mile["name"], "zin", 1)
    if mile["noun"] == "Lair":
        if mile["sk"] == "Invocations":
            banner.award_banner(c, mile["name"], "qazlal", 1)
    if mile["noun"] == "Temple":
        if mile["potionsused"] == 0 and mile["scrollsused"] == 0:
            banner.award_banner(c, mile["name"], "ru", 1)
Пример #20
0
def act_on_milestone(c, mile):
  """This function takes a milestone line, which is a string composed of key/
  value pairs separated by colons, and parses it into a dictionary.
  Then, depending on what type of milestone it is (key "type"), another
  function may be called to finish the job on the milestone line. Milestones
  have the same broken :: behavior as logfile lines, yay."""

  player = game_player(mile)

  if mile['goldfound'] >= 1000:
    banner.award_banner(c, player, 'gozag', 1)

  if mile['xl'] >= 9 and nemelex.is_nemelex_choice(mile['char'],mile['start']):
    banner.award_banner(c, player, 'nemelex', 1)

  # hack to handle milestones with no potions_used/scrolls_used fields
  if not mile.has_key('potionsused'):
    mile['potionsused'] = -1
    mile['scrollsused'] = -1

  miletype = milestone_type(mile)
  if miletype == 'uniq' and not milestone_desc(mile).startswith('banished '):
    do_milestone_unique(c, mile)
  elif miletype == 'rune':
    do_milestone_rune(c, mile)
  elif miletype == 'ghost':
    do_milestone_ghost(c, mile)
  elif miletype == 'br.enter':
    do_milestone_br_enter(c, mile)
  elif miletype == 'br.end':
    do_milestone_br_end(c, mile)
  elif miletype == 'god.maxpiety':
    do_milestone_max_piety(c, mile)
  elif miletype == 'zig' or miletype == 'zig.enter':
    do_milestone_zig(c, mile)
  elif miletype == 'zig.exit':
    do_milestone_zig_exit(c, mile)
  elif miletype == 'abyss.enter':
    do_milestone_abyss_enter(c, mile)
  elif miletype == 'abyss.exit':
    do_milestone_abyss_exit(c, mile)
  elif miletype == 'god.mollify':
    do_milestone_mollify(c, mile)
  elif miletype == 'orb':
    do_milestone_orb(c, mile)
Пример #21
0
def do_milestone_br_enter(c, mile):
  """Five points for the first time you get each br.enter milestone (includes
  portal vaults). Also give out banners."""
  if query.player_count_br_enter(c, mile['name'], mile['noun']) == 1:
    assign_points(c, "branch:enter", mile['name'], 5)
  if mile['noun'] == 'Crypt':
    banner.award_banner(c, mile['name'], 'fedhas', 1)
  if mile['noun'] in ['Vaults', 'Snake', 'Swamp', 'Shoals', 'Spider', 'Slime',
                      'Tomb', 'Dis', 'Tar', 'Coc', 'Geh']:
    banner.award_banner(c, mile['name'], 'ashenzari', 1)
  if mile['noun'] in ['Pan', 'Dis', 'Tar', 'Coc', 'Geh']:
    banner.award_banner(c, mile['name'], 'zin', 1)
  if mile['noun'] == 'Lair':
    if mile['sk'] == 'Invocations':
      banner.award_banner(c, mile['name'], 'qazlal', 1)
  if mile['noun'] == 'Temple':
    if mile['potionsused'] == 0 and mile['scrollsused'] == 0:
      banner.award_banner(c, mile['name'], 'ru', 1)
Пример #22
0
def act_on_milestone(c, mile):
  """This function takes a milestone line, which is a string composed of key/
  value pairs separated by colons, and parses it into a dictionary.
  Then, depending on what type of milestone it is (key "type"), another
  function may be called to finish the job on the milestone line. Milestones
  have the same broken :: behavior as logfile lines, yay."""

  player = game_player(mile)

  if mile['xl'] >= 13:
    banner.award_banner(c, player, 'okawaru', 1)

  if mile['xl'] >= 9 and nemelex.is_nemelex_choice(mile['char'],mile['start']):
    ban = 'nemelex:' + mile['char']
    banner.award_banner(c, player, ban, 1)

  # hack to handle milestones with no potions_used/scrolls_used fields
  if not mile.has_key('potionsused'):
    mile['potionsused'] = -1
    mile['scrollsused'] = -1

  miletype = milestone_type(mile)
  if miletype == 'uniq' and not milestone_desc(mile).startswith('banished '):
    do_milestone_unique(c, mile)
  elif miletype == 'rune':
    do_milestone_rune(c, mile)
  elif miletype == 'ghost':
    do_milestone_ghost(c, mile)
  elif miletype == 'br.enter':
    do_milestone_br_enter(c, mile)
  elif miletype == 'br.end':
    do_milestone_br_end(c, mile)
  elif miletype == 'god.maxpiety':
    do_milestone_max_piety(c, mile)
  elif miletype == 'zig':
    do_milestone_zig(c, mile)
  elif miletype == 'zig.exit':
    do_milestone_zig_exit(c, mile)
  elif miletype == 'abyss.enter':
    do_milestone_abyss_enter(c, mile)
  elif miletype == 'abyss.exit':
    do_milestone_abyss_exit(c, mile)
  elif miletype == 'god.mollify':
    do_milestone_mollify(c, mile)
Пример #23
0
def clan_additional_score(c, owner):
  additional = 0
  query.audit_flush_clan(c, owner)

  combo_pos = query.clan_combo_pos(c, owner)
  additional += log_temp_clan_points( c, owner,
                                      'clan_combo_scores_Nth:%d' % (combo_pos + 1),
                                      get_points(
                                              combo_pos,
                                              200, 100, 50 ) )

  uscore_pos = query.clan_unique_pos(c, owner)
  additional += log_temp_clan_points( c, owner,
                                      'clan_top_unique_killer:%d' % (uscore_pos + 1),
                                      get_points(
                                              uscore_pos,
                                              100, 50, 20 ) )

  zig_depth = int((query.clan_zig_depth(c, owner) + 1)/2)
  additional += log_temp_clan_points( c, owner,
                                      'zig_dive:%d' % zig_depth,
                                      5 * zig_depth)

# Now we give race/class points to clans.
  for g in query.clan_race_wins(c, owner):
    key = 'species_win:' + g[0]
    points = query.clan_max_points(c, owner, key)
    additional += log_temp_clan_points(c, owner, key, points)
  for g in query.clan_class_wins(c, owner):
    key = 'class_win:' + g[0]
    points = query.clan_max_points(c, owner, key)
    additional += log_temp_clan_points(c, owner, key, points)
  for g in query.clan_god_wins(c, owner):
    banner_god = g[0].lower().replace(' ', '_')
    key = 'god_win:' + banner_god
    points = query.clan_max_points(c, owner, key)
    additional += log_temp_clan_points(c, owner, key, points)

  query.set_clan_points(c, owner, additional)
  # A clan-based banner.
  for player in query.get_saints(c, owner):
    banner.award_banner(c, player, 'beogh', 1, temp=True)
Пример #24
0
def crunch_misc(c, g):
    player = g["name"]
    ktyp = g["ktyp"]

    if g["xl"] >= 13:
        banner.award_banner(c, player, "okawaru", 1)

    if g["goldfound"] >= 1000:
        banner.award_banner(c, player, "gozag", 1)

    if g["xl"] >= 9 and nemelex.is_nemelex_choice(g["char"], g["start"]):
        ban = "nemelex:" + g["char"]
        banner.award_banner(c, player, ban, 1)
    if g["xl"] >= 9 and query.check_xl9_streak(c, player, g["start"]):
        banner.award_banner(c, player, "cheibriados", 1)
    if g["sc"] >= 1000:
        og = query.previous_combo_highscore(c, g)
        if og and og[0] != player and og[1] >= 1000 and og[1] < g["sc"]:
            banner.award_banner(c, player, "dithmenos", 1)

    killer = loaddb.strip_unique_qualifier(g.get("killer") or "")
    if uniq.is_uniq(killer):
        query_do(
            c,
            """INSERT INTO deaths_to_uniques
                            (player, uniq, start_time, end_time)
                     VALUES (%s, %s, %s, %s)""",
            player.lower(),
            killer,
            g["start"],
            g["end"],
        )
        cuniqdeaths = query.count_deaths_to_distinct_uniques(c, player)
        olduniqdeaths = query.lookup_deaths_to_distinct_uniques(c, player)
        if cuniqdeaths > olduniqdeaths:
            query.update_deaths_to_distinct_uniques(c, player, cuniqdeaths, g["end"])
Пример #25
0
def do_milestone_br_end(c, mile):
  """Five points for the first time you get each br.enter milestone (includes
  portal vaults)."""
  banner.award_banner(c, mile['name'], 'okawaru', 1)
  if mile['noun'] == 'D':
    if mile['dur'] <= 1620:
      if mile['raceabbr'] in ['Ce','Fe','Sp']:
        banner.award_banner(c, mile['name'], 'makhleb', 2)
      else:
        banner.award_banner(c, mile['name'], 'makhleb', 3)
  if query.player_count_br_end(c, mile['name'], mile['noun']) > 1:
    return
  assign_points(c, "branch_end", mile['name'], 5)
Пример #26
0
def do_milestone_br_end(c, mile):
  """Five points for the first time you get each br.enter milestone (includes
  portal vaults)."""
  if mile['noun'] == 'D':
    if mile['dur'] <= 1620:
      banner.award_banner(c, mile['name'], 'makhleb', 3)
  if mile['noun'] == 'Lair':
    if mile['sklev'] < 13:
      if not query.did_worship_god(c, 'Ashenzari', mile['name'], mile['start'], mile['time']):
        banner.award_banner(c, mile['name'], 'sif', 1)
    if query.is_unbeliever(c, mile):
      banner.award_banner(c, mile['name'], 'lugonu', 1)
  if query.player_count_br_end(c, mile['name'], mile['noun']) <= 1:
    assign_points(c, "branch:end", mile['name'], 5)
Пример #27
0
def do_milestone_br_end(c, mile):
  """Five points for the first time you get each br.enter milestone (includes
  portal vaults)."""
  if mile['noun'] == 'D':
    if mile['dur'] <= 1620:
      if mile['raceabbr'] in ['Ce','Fe','Sp']:
        banner.award_banner(c, mile['name'], 'makhleb', 2)
      else:
        banner.award_banner(c, mile['name'], 'makhleb', 3)
  if mile['noun'] == 'Lair':
    if not banner.player_has_banner(c, mile['name'], 'ashenzari', 1):
      if not query.did_exit_branch(c, 'Lair', mile['name'], mile['start'], mile['time']):
        banner.award_banner(c, mile['name'], 'ashenzari', 1)
  if query.player_count_br_end(c, mile['name'], mile['noun']) <= 1:
    assign_points(c, "branch:end", mile['name'], 5)
Пример #28
0
def act_on_milestone(c, mile):
    """This function takes a milestone line, which is a string composed of key/
  value pairs separated by colons, and parses it into a dictionary.
  Then, depending on what type of milestone it is (key "type"), another
  function may be called to finish the job on the milestone line. Milestones
  have the same broken :: behavior as logfile lines, yay."""

    player = game_player(mile)

    if mile["xl"] >= 13:
        banner.award_banner(c, player, "okawaru", 1)

    if mile["goldfound"] >= 1000:
        banner.award_banner(c, player, "gozag", 1)

    if mile["xl"] >= 9 and nemelex.is_nemelex_choice(mile["char"], mile["start"]):
        ban = "nemelex:" + mile["char"]
        banner.award_banner(c, player, ban, 1)

    # hack to handle milestones with no potions_used/scrolls_used fields
    if not mile.has_key("potionsused"):
        mile["potionsused"] = -1
        mile["scrollsused"] = -1

    miletype = milestone_type(mile)
    if miletype == "uniq" and not milestone_desc(mile).startswith("banished "):
        do_milestone_unique(c, mile)
    elif miletype == "rune":
        do_milestone_rune(c, mile)
    elif miletype == "ghost":
        do_milestone_ghost(c, mile)
    elif miletype == "br.enter":
        do_milestone_br_enter(c, mile)
    elif miletype == "br.end":
        do_milestone_br_end(c, mile)
    elif miletype == "god.maxpiety":
        do_milestone_max_piety(c, mile)
    elif miletype == "zig":
        do_milestone_zig(c, mile)
    elif miletype == "zig.exit":
        do_milestone_zig_exit(c, mile)
    elif miletype == "abyss.enter":
        do_milestone_abyss_enter(c, mile)
    elif miletype == "abyss.exit":
        do_milestone_abyss_exit(c, mile)
    elif miletype == "god.mollify":
        do_milestone_mollify(c, mile)
Пример #29
0
def award_player_banners(c, banner_name, players, prestige=0, temp=False):
  if players:
    for p in players:
      banner.award_banner(c, p, banner_name, prestige, temp)
Пример #30
0
def crunch_winner(c, game, filename):
  """A game that wins could assign a variety of irrevocable points for a
  variety of different things. This function needs to calculate them all."""

  player = game['name']
  charabbrev = game_character(game)
  game_start = game_start_time(game)
  game_end = game_end_time(game)

  if game['dur'] <= 10800:
    banner.award_banner(c, player, 'makhleb', 3)

  if game['sk'] == 'Invocations':
    banner.award_banner(c, player, 'qazlal', 2)
    if query.player_count_invo_titles(c, player) >= 3:
      banner.award_banner(c, player, 'qazlal', 3)

  if query.check_ru_abandonment_game(c, player, game_start_time(game)):
    banner.award_banner(c, player, 'lugonu', 3)

  if not query.game_did_visit_lair(c, player, game_start_time(game)):
    if not query.game_did_visit_branch(c, player, game_start_time(game)):
      banner.award_banner(c, player, 'kikubaaqudgha', 3)

  if game['race'] != 'Gnoll' and game['sklev'] < 20:
    if not query.did_worship_god(c, 'Ashenzari', player, game['start'], game['end']):
      if game['sklev'] < 13:
        banner.award_banner(c, player, 'sif', 3)
      else:
        banner.award_banner(c, player, 'sif', 2)

  if game['xl'] < 19:
    if not query.did_sacrifice(c, 'experience', player, game['start'], game['end']) and not query.did_worship_god(c, 'Hepliaklqana',
                      game['name'], game['start'], game['end']) and not game['race'] == 'Felid':
      banner.award_banner(c, player, 'vehumet', 3)

  #cutoff = query.time_from_str(game['end']) - datetime.timedelta(hours=27)
  #if query.time_from_str(game['start']) > cutoff:
  #  if query.count_wins(c, player = game['name'], before = game_end, after = cutoff) > 0:
  #    banner.award_banner(c, player, 'oldbanner', 3)
  #  else:
  #    banner.award_banner(c, player, 'oldbanner', 2)

  ogame = query.previous_combo_highscore(c, game)
  if ogame and ogame[0] != player and ogame[2] == 'winning' and ogame[1] < game['sc']:
    banner.award_banner(c, player, 'dithmenos', 2)
  if game['sc'] >= 10000000:
    ogame = query.previous_species_highscore(c, game)
    if ogame and ogame[1] >= 10000000 and ogame[1] < game['sc'] and ogame[0] != player:
      banner.award_banner(c, player, 'dithmenos', 3)
    ogame = query.previous_class_highscore(c, game)
    if ogame and ogame[1] >= 10000000 and ogame[1] < game['sc'] and ogame[0] != player:
      banner.award_banner(c, player, 'dithmenos', 3)

  debug("%s win (%s), runes: %d" % (player, charabbrev, game.get('urune') or 0))

  if nemelex.is_nemelex_choice(charabbrev, game_end) \
       and not nemelex.player_has_nemelex_win(c, player, charabbrev):
    nemelex.award_nemelex_win(c, game, filename)
    banner.award_banner(c, player, 'nemelex', 3)

  if query.is_unbeliever(c, game):
    banner.award_banner(c, player, 'trog', 3)

  if query.did_use_ecumenical_altar(c, game['name'], game['start'], game['end']) \
      and not query.did_renounce_god(c, game['name'], game['start'], game['end']):
    banner.award_banner(c, game['name'], 'hepliaklqana', 3)

  if is_all_runer(game):
    all_allruners = number_of_allruners_before(c, game)

  previous_wins = query.count_wins(c, before = game_end)

  my_wins = query.get_winning_games(c, player = game['name'],
                                    before = game_end)
  n_my_wins = len(my_wins)

  if n_my_wins == 0:
    # First win!
    query.assign_nonrep_win(c, game['name'], 1)
  else:
    for x in my_wins:
      if repeat_race_class(x['charabbrev'], game['char']) == 0:
        query.assign_nonrep_win(c, game['name'], 2)

  did_streak = query.win_is_streak(c, game['name'], game_start)
  if did_streak:
    # Award banner.
    banner.award_banner(c, player, 'cheibriados', 2)

  game_god = query.get_game_god(c, game)
  banner_god = game_god.lower().replace(' ', '_')
  if (not game_god == 'faithless'):
    query.record_won_god(c, game['name'], game_god)
Пример #31
0
def crunch_misc(c, g):
  player = g['name']
  ktyp = g['ktyp']


  if g['sc'] >= 27000000:
    banner.award_banner(c, player, 'okawaru', 3)
  elif g['sc'] >= 9000000:
    banner.award_banner(c, player, 'okawaru', 2)
  elif g['sc'] >= 1000000:
    banner.award_banner(c, player, 'okawaru', 1)

  if g['goldfound'] >= 1000:
    banner.award_banner(c, player, 'gozag', 1)

  if g['xl'] >= 9 and nemelex.is_nemelex_choice(g['char'],g['start']):
    banner.award_banner(c, player, 'nemelex', 1)
  if g['xl'] >= 9 and query.check_xl9_streak(c, player, g['start']):
    banner.award_banner(c, player, 'cheibriados', 1)
  if g['sc'] >= 1000:
    og = query.previous_combo_highscore(c, g)
    if og and og[0] != player and og[1] >= 1000 and og[1] < g['sc']:
      banner.award_banner(c, player, 'dithmenos', 1)

  killer = loaddb.strip_unique_qualifier(g.get('killer') or '')
Пример #32
0
def do_milestone_orb(c, mile):
  if mile['turn'] - query.branch_end_turn(c, 'Zot', mile['name'],
          mile['start']) <= 270:
    banner.award_banner(c, mile['name'], 'uskayaw', 3)
Пример #33
0
def do_milestone_abyss_enter(c, mile):
  banner.award_banner(c, mile['name'], 'xom', 1)
Пример #34
0
def do_milestone_zig(c, mile):
  if mile['place'] == 'Zig:14':
    banner.award_banner(c, mile['name'], 'xom', 2)
Пример #35
0
def do_milestone_rune(c, mile):
  """Give out 30/N points for the Nth time a player finds a rune, and also give out banners."""
  # Check if this player already found this kind of rune. Remember the db
  # is already updated, so for the first rune the count will be 1.
  rune = loaddb.extract_rune(mile['milestone'])
  num_rune = query.player_count_runes(c, mile['name'], rune)
  rune_points = (30 + num_rune - 1) / num_rune
  assign_points(c, "rune:" + rune, mile['name'], rune_points)
  player = mile['name']
  runes_found = query.player_count_distinct_runes(c, player)
  if runes_found == crawl.NRUNES:
    banner.award_banner(c, player, 'ashenzari', 3)
  elif runes_found >= 5:
    banner.award_banner(c, player, 'ashenzari', 2)
  if rune == 'golden' and num_rune == 1:
    banner.award_banner(c, player, 'fedhas', 2)
  if nemelex.is_nemelex_choice(mile['char'], mile['time']):
    ban = 'nemelex:' + mile['char']
    banner.award_banner(c, player, ban, 2)
  if not query.did_reach_d14(c, player, mile['start'], mile['time']):
    if mile['urune'] >= 4:
      banner.award_banner(c, player, 'the_shining_one', 3)
    elif mile['urune'] >= 2:
      banner.award_banner(c, player, 'the_shining_one', 2)
    else:
      banner.award_banner(c, player, 'the_shining_one', 1)
Пример #36
0
def do_milestone_br_enter(c, mile):
  """Five points for the first time you get each br.enter milestone (includes
  portal vaults). Also give out banners."""
  if query.player_count_br_enter(c, mile['name'], mile['noun']) == 1:
    assign_points(c, "branch:enter", mile['name'], 5)
  if mile['noun'] == 'Crypt':
    banner.award_banner(c, mile['name'], 'fedhas', 1)
  if mile['noun'] in ['Vaults', 'Snake', 'Swamp', 'Shoals', 'Spider', 'Slime',
                      'Tomb', 'Dis', 'Tar', 'Coc', 'Geh']:
    banner.award_banner(c, mile['name'], 'ashenzari', 1)
  if mile['noun'] in ['Pan', 'Dis', 'Tar', 'Coc', 'Geh']:
    banner.award_banner(c, mile['name'], 'zin', 1)
  if mile['noun'] == 'Lair':
    if mile['sk'] == 'Invocations':
      banner.award_banner(c, mile['name'], 'qazlal', 1)
    if query.did_use_ecumenical_altar(c, mile['name'], mile['start'], mile['time']) \
        and not query.did_renounce_god(c, mile['name'], mile['start'], mile['time']):
      banner.award_banner(c, mile['name'], 'hepliaklqana', 1)
  if mile['noun'] == 'Temple':
    if mile['potionsused'] == 0 and mile['scrollsused'] == 0:
      banner.award_banner(c, mile['name'], 'ru', 1)
    if mile['turn'] < 3000:
      banner.award_banner(c, mile['name'], 'uskayaw', 1)
Пример #37
0
def crunch_winner(c, game):
  """A game that wins could assign a variety of irrevocable points for a
  variety of different things. This function needs to calculate them all."""

  player = game['name']
  charabbrev = game_character(game)
  game_start = game_start_time(game)
  game_end = game_end_time(game)

  # 20 clan points for first win for a particular combo in the tournament.
  if query.first_win_for_combo(c, charabbrev, game_end):
    assign_team_points(c, "combo_first_win:" + charabbrev, player, 20)

  # Award Okawaru banners for wins.
  banner.award_banner(c, player, 'okawaru', 2)
  if game['turn'] < 50000:
    banner.award_banner(c, player, 'okawaru', 3)

  if game['dur'] <= 10800:
    banner.award_banner(c, player, 'makhleb', 3)

  if game['sk'] == 'Invocations':
    banner.award_banner(c, player, 'qazlal', 2)
    if query.player_count_invo_titles(c, player) >= 3:
      banner.award_banner(c, player, 'qazlal', 3)

  #gods_abandoned = query.count_gods_abandoned(c, player, game_start_time(game))
  #if gods_abandoned >= 9:
  #  assign_points(c, 'heretical_win', player, 25)
  #  banner.award_banner(c, player, 'lugonu', 3)
  #elif gods_abandoned >= 3:
  #  banner.award_banner(c, player, 'lugonu', 2)

  if query.check_ru_abandonment_game(c, player, game_start_time(game)):
    banner.award_banner(c, player, 'lugonu', 3)

  if not query.game_did_visit_lair(c, player, game_start_time(game)):
    if not query.game_did_visit_branch(c, player, game_start_time(game)):
      # 50 bonus points for winning without doing any branches.
      assign_points(c, 'branchless_win', player, 50, False)
      # And the banner:
      banner.award_banner(c, player, 'kikubaaqudgha', 3)
    # else:
      # Just 20 bonus points for winning without doing Lair.
      # assign_points(c, 'lairless_win', player, 20)

  if game['sklev'] < 20:
    if not query.did_worship_god(c, 'Ashenzari', player, game['start'], game['end']):
      if game['sklev'] < 13:
        banner.award_banner(c, player, 'sif', 3)
      else:
        banner.award_banner(c, player, 'sif', 2)

  if game['xl'] < 19:
    if not query.did_sacrifice(c, 'experience', player, game['start'], game['end']):
      assign_points(c, 'ruthless_efficiency', player, 25, False)
      banner.award_banner(c, player, 'vehumet', 3)

  #cutoff = query.time_from_str(game['end']) - datetime.timedelta(hours=27)
  #if query.time_from_str(game['start']) > cutoff:
  #  if query.count_wins(c, player = game['name'], before = game_end, after = cutoff) > 0:
  #    banner.award_banner(c, player, 'oldbanner', 3)
  #  else:
  #    banner.award_banner(c, player, 'oldbanner', 2)

  ogame = query.previous_combo_highscore(c, game)
  if ogame and ogame[0] != player and ogame[2] == 'winning' and ogame[1] < game['sc']:
    banner.award_banner(c, player, 'dithmenos', 2)
  if game['sc'] >= 10000000:
    ogame = query.previous_species_highscore(c, game)
    if ogame and ogame[1] >= 10000000 and ogame[1] < game['sc'] and ogame[0] != player:
      banner.award_banner(c, player, 'dithmenos', 3)
    ogame = query.previous_class_highscore(c, game)
    if ogame and ogame[1] >= 10000000 and ogame[1] < game['sc'] and ogame[0] != player:
      banner.award_banner(c, player, 'dithmenos', 3)

  debug("%s win (%s), runes: %d" % (player, charabbrev, game.get('urune') or 0))

  if nemelex.is_nemelex_choice(charabbrev, game_end):
    ban = 'nemelex:' + charabbrev
    if banner.count_recipients(c, ban, 3) < 8:
      if not banner.player_has_banner(c, player, ban, 3):
        query.assign_stepdown_points(c, ban, player, 75)
        banner.award_banner(c, player, ban, 3)

  if query.is_unbeliever(c, game):
    banner.award_banner(c, player, 'trog', 3)

  if query.did_use_ecumenical_altar(c, game['name'], game['start'], game['end']) \
      and not query.did_renounce_god(c, game['name'], game['start'], game['end']):
    banner.award_banner(c, game['name'], 'hepliaklqana', 3)

  if is_all_runer(game):
    all_allruners = number_of_allruners_before(c, game)
    assign_points(c, "nth_allrune_win:%d" % (all_allruners + 1),
                  game['name'],
                  get_points(all_allruners, 200, 100, 50))

    # If this is my first all-rune win, 50 points!
    #if query.count_wins(c, player = game['name'],
    #                    runes = query.MAX_RUNES,
    #                    before = game_end) == 0:
    #  assign_points(c, "my_1st_all_rune_win", game['name'], 50)

  previous_wins = query.count_wins(c, before = game_end)
  assign_points(c,
                "nth_win:%d" % (previous_wins + 1),
                game['name'], get_points(previous_wins, 200, 100, 50))

  my_wins = query.get_winning_games(c, player = game['name'],
                                    before = game_end)
  n_my_wins = len(my_wins)

  if n_my_wins == 0:
    # First win!
    assign_points(c, "my_1st_win", game['name'], 100)

  else:
    # If the new win is a different race/class from a previous win, bonus!
    for x in my_wins:
      if repeat_race_class(x['charabbrev'], game['char']) == 0:
        assign_points(c, "my_2nd_win_norep", game['name'], 50, False)

  did_streak = query.win_is_streak(c, game['name'], game_start)
  if did_streak:
    # Award banner.
    banner.award_banner(c, player, 'cheibriados', 2)

  # Assign points for new personal records.
  assign_points(c, 'my_low_turncount_win', game['name'], 5000000/game['turn'], False)
  assign_points(c, 'my_low_realtime_win', game['name'], 1250000/game['dur'], False)
  assign_points(c, 'my_highscore_win', game['name'], game['sc']/120000, False)

  # Assign race/class points, based on the games won before the start
  # of the given win.
  game_start = game_start_time(game)
  wins_before = query.count_wins(c, before=game_start)
  species_wins_before = query.count_wins(c, before=game_start, raceabbr=game['char'][0:2])
  class_wins_before = query.count_wins(c, before=game_start, classabbr=game['char'][2:])
  query.assign_stepdown_points(c, 'species_win:' + game['char'][0:2], game['name'], query.race_formula(wins_before, species_wins_before), False)
  query.assign_stepdown_points(c, 'background_win:' + game['char'][2:], game['name'], query.class_formula(wins_before, class_wins_before), False)
  # and gods also
  game_god = query.get_game_god(c, game)
  banner_god = game_god.lower().replace(' ', '_')
  if (not game_god == 'faithless'):
    query.record_won_god(c, game['name'], game['end'], game_god)
    god_wins_before = query.count_god_wins(c, game_god, game_start)
    query.assign_stepdown_points(c, 'god_win:' + banner_god, game['name'], query.god_formula(wins_before, god_wins_before), False)
Пример #38
0
def do_milestone_br_end(c, mile):
  if mile['noun'] == 'Orc':
    if not query.game_did_visit_lair(c, mile['name'], mile['start'], mile['time']):
      banner.award_banner(c, mile['name'], 'kikubaaqudgha', 1)
  if mile['noun'] == 'Depths':
    if not query.game_did_visit_lair(c, mile['name'], mile['start'], mile['time']):
      banner.award_banner(c, mile['name'], 'kikubaaqudgha', 2)
  if mile['noun'] == 'D':
    if mile['dur'] <= 1620 and mile['race'] != 'Formicid':
      banner.award_banner(c, mile['name'], 'makhleb', 1)
  if mile['noun'] == 'Lair':
    if mile['sklev'] < 13 and mile['race'] != 'Formicid':
      if not query.did_worship_god(c, 'Ashenzari', mile['name'], mile['start'], mile['time']):
        banner.award_banner(c, mile['name'], 'sif', 1)
    if mile['xl'] < 12 and mile['race'] != 'Formicid':
      if not query.did_sacrifice(c, 'experience', mile['name'], mile['start'], mile['time']):
        banner.award_banner(c, mile['name'], 'vehumet', 1)
    if query.is_unbeliever(c, mile):
      banner.award_banner(c, mile['name'], 'trog', 1)
    if mile['potionsused'] == 0 and mile['scrollsused'] == 0:
      banner.award_banner(c, mile['name'], 'ru', 2)
  if mile['noun'] == 'Elf' and mile['turn'] < 9000:
    banner.award_banner(c, mile['name'], 'uskayaw', 2)
  if mile['noun'] == 'Geh' and mile['turn'] < 27000:
    banner.award_banner(c, mile['name'], 'uskayaw', 3)
  if query.player_count_br_end(c, mile['name'], mile['noun']) <= 1:
    assign_points(c, "branch:end", mile['name'], 5)
Пример #39
0
def crunch_winner(c, game):
  """A game that wins could assign a variety of irrevocable points for a
  variety of different things. This function needs to calculate them all."""

  player = game['name']
  charabbrev = game_character(game)
  game_start = game_start_time(game)
  game_end = game_end_time(game)

  # 20 clan points for first win for a particular combo in the tournament.
  if query.first_win_for_combo(c, charabbrev, game_end):
    assign_team_points(c, "combo_first_win:" + charabbrev, player, 20)

  # Award Okawaru banners for wins.
  banner.award_banner(c, player, 'okawaru', 2)
  if (game['turn'] < 50000):
    banner.award_banner(c, player, 'okawaru', 3)

  if game['dur'] <= 10800:
    banner.award_banner(c, player, 'makhleb', 3)

  if game['sk'] == 'Invocations':
    banner.award_banner(c, player, 'qazlal', 2)
    if query.player_count_invo_titles(c, player) >= 3:
      banner.award_banner(c, player, 'qazlal', 3)

  #gods_abandoned = query.count_gods_abandoned(c, player, game_start_time(game))
  #if gods_abandoned >= 9:
  #  assign_points(c, 'heretical_win', player, 25)
  #  banner.award_banner(c, player, 'lugonu', 3)
  #elif gods_abandoned >= 3:
  #  banner.award_banner(c, player, 'lugonu', 2)

  if query.check_ru_abandonment_game(c, player, game_start_time(game)):
    banner.award_banner(c, player, 'lugonu', 3)

  if not query.game_did_visit_lair(c, player, game_start_time(game)):
    if not query.game_did_visit_branch(c, player, game_start_time(game)):
      # 50 bonus points for winning without doing any branches.
      assign_points(c, 'branchless_win', player, 50, False)
      # And the banner:
      banner.award_banner(c, player, 'kikubaaqudgha', 3)
    # else:
      # Just 20 bonus points for winning without doing Lair.
      # assign_points(c, 'lairless_win', player, 20)

  if game['sklev'] < 20:
    if not query.did_worship_god(c, 'Ashenzari', player, game['start'], game['end']):
      if game['sklev'] < 13:
        banner.award_banner(c, player, 'sif', 3)
      else:
        banner.award_banner(c, player, 'sif', 2)

  if game['xl'] < 19:
    if not query.did_sacrifice(c, 'experience', player, game['start'], game['end']):
      assign_points(c, 'ruthless_efficiency', player, 25, False)
      banner.award_banner(c, player, 'vehumet', 3)

  #cutoff = query.time_from_str(game['end']) - datetime.timedelta(hours=27)
  #if query.time_from_str(game['start']) > cutoff:
  #  if query.count_wins(c, player = game['name'], before = game_end, after = cutoff) > 0:
  #    banner.award_banner(c, player, 'oldbanner', 3)
  #  else:
  #    banner.award_banner(c, player, 'oldbanner', 2)

  ogame = query.previous_combo_highscore(c, game)
  if ogame and ogame[0] != player and ogame[2] == 'winning' and ogame[1] < game['sc']:
    banner.award_banner(c, player, 'dithmenos', 2)
  if game['sc'] >= 10000000:
    ogame = query.previous_species_highscore(c, game)
    if ogame and ogame[1] >= 10000000 and ogame[1] < game['sc'] and ogame[0] != player:
      banner.award_banner(c, player, 'dithmenos', 3)
    ogame = query.previous_class_highscore(c, game)
    if ogame and ogame[1] >= 10000000 and ogame[1] < game['sc'] and ogame[0] != player:
      banner.award_banner(c, player, 'dithmenos', 3)

  debug("%s win (%s), runes: %d" % (player, charabbrev, game.get('urune') or 0))

  if nemelex.is_nemelex_choice(charabbrev, game_end):
    ban = 'nemelex:' + charabbrev
    if banner.count_recipients(c, ban, 3) < 8:
      if not banner.player_has_banner(c, player, ban, 3):
        query.assign_stepdown_points(c, ban, player, 75)
        banner.award_banner(c, player, ban, 3)

  if query.is_unbeliever(c, game):
    banner.award_banner(c, player, 'trog', 3)

  if is_all_runer(game):
    all_allruners = number_of_allruners_before(c, game)
    assign_points(c, "nth_allrune_win:%d" % (all_allruners + 1),
                  game['name'],
                  get_points(all_allruners, 200, 100, 50))

    # If this is my first all-rune win, 50 points!
    #if query.count_wins(c, player = game['name'],
    #                    runes = query.MAX_RUNES,
    #                    before = game_end) == 0:
    #  assign_points(c, "my_1st_all_rune_win", game['name'], 50)

  previous_wins = query.count_wins(c, before = game_end)
  assign_points(c,
                "nth_win:%d" % (previous_wins + 1),
                game['name'], get_points(previous_wins, 200, 100, 50))

  my_wins = query.get_winning_games(c, player = game['name'],
                                    before = game_end)
  n_my_wins = len(my_wins)

  if n_my_wins == 0:
    # First win!
    assign_points(c, "my_1st_win", game['name'], 100)

  else:
    # If the new win is a different race/class from a previous win, bonus!
    for x in my_wins:
      if repeat_race_class(x['charabbrev'], game['char']) == 0:
        assign_points(c, "my_2nd_win_norep", game['name'], 50, False)

  did_streak = query.win_is_streak(c, game['name'], game_start)
  if did_streak:
    # Award banner.
    banner.award_banner(c, player, 'cheibriados', 2)

  # Assign points for new personal records.
  assign_points(c, 'my_low_turncount_win', game['name'], 5000000/game['turn'], False)
  assign_points(c, 'my_low_realtime_win', game['name'], 1250000/game['dur'], False)
  assign_points(c, 'my_highscore_win', game['name'], game['sc']/120000, False)

  # Assign race/class points, based on the games won before the start
  # of the given win.
  game_start = game_start_time(game)
  wins_before = query.count_wins(c, before=game_start)
  species_wins_before = query.count_wins(c, before=game_start, raceabbr=game['char'][0:2])
  class_wins_before = query.count_wins(c, before=game_start, classabbr=game['char'][2:])
  query.assign_stepdown_points(c, 'species_win:' + game['char'][0:2], game['name'], query.race_formula(wins_before, species_wins_before), False)
  query.assign_stepdown_points(c, 'background_win:' + game['char'][2:], game['name'], query.class_formula(wins_before, class_wins_before), False)
  # and gods also
  game_god = query.get_game_god(c, game)
  banner_god = game_god.lower().replace(' ', '_')
  if (not game_god == 'faithless'):
    query.record_won_god(c, game['name'], game['end'], game_god)
    god_wins_before = query.count_god_wins(c, game_god, game_start)
    query.assign_stepdown_points(c, 'god_win:' + banner_god, game['name'], query.god_formula(wins_before, god_wins_before), False)
Пример #40
0
def do_milestone_rune(c, mile):
  """Give out 24/N points for the Nth time a player finds a rune, and also give out banners."""
  # Check if this player already found this kind of rune. Remember the db
  # is already updated, so for the first rune the count will be 1.
  rune = loaddb.extract_rune(mile['milestone'])
  num_rune = query.player_count_runes(c, mile['name'], rune)
  rune_points = (24 + num_rune - 1) / num_rune
  assign_points(c, "rune:" + rune, mile['name'], rune_points)
  player = mile['name']
  runes_found = query.player_count_distinct_runes(c, player)
  if mile['dur'] <= 4860:
    banner.award_banner(c, mile['name'], 'makhleb', 2)
  if runes_found == crawl.NRUNES:
    banner.award_banner(c, player, 'ashenzari', 3)
  elif runes_found >= 5:
    banner.award_banner(c, player, 'ashenzari', 2)
  if rune == 'golden' and num_rune == 1:
    banner.award_banner(c, player, 'fedhas', 2)
  if rune == 'silver' and num_rune == 1:
    banner.award_banner(c, player, 'gozag', 2)

  # The abyssal rune is the only rune that the player can get before the iron
  # rune for Avarice 3.
  if rune == 'iron' and mile['urune'] <= 2:
    other_rune_branches = ['Vaults', 'Shoals', 'Snake', 'Spider', 'Swamp', 'Slime', 'Pan', 'Coc', 'Geh', 'Tar']
    eligible = True
    for br in other_rune_branches:
      if query.did_enter_branch(c, br, player, mile['start'], mile['time']):
        eligible = False
        break
    if eligible:
      assign_points(c, 'avarice', player, 25, False)
      banner.award_banner(c, player, 'gozag', 3)

  if nemelex.is_nemelex_choice(mile['char'], mile['time']):
    ban = 'nemelex:' + mile['char']
    banner.award_banner(c, player, ban, 2)
  if not query.did_enter_branch(c, 'Depths', player, mile['start'], mile['time']):
    if mile['urune'] == 6:
      assign_points(c, 'vow_of_courage', player, 25, False)
      banner.award_banner(c, player, 'the_shining_one', 3)
    elif mile['urune'] >= 4:
      banner.award_banner(c, player, 'the_shining_one', 2)
  #if query.time_from_str(mile['time']) - query.time_from_str(mile['start']) <= datetime.timedelta(hours=27):
  #  banner.award_banner(c, mile['name'], 'oldbanner', 1)
  if query.is_unbeliever(c, mile):
    banner.award_banner(c, mile['name'], 'trog', 2)
  if mile['urune'] == 1:
    if rune != 'slimy' and rune != 'abyssal':
      if mile['potionsused'] == 0 and mile['scrollsused'] == 0:
        assign_points(c, 'ascetic', player, 25, False)
        banner.award_banner(c, mile['name'], 'ru', 3)
    if mile['xl'] < 14:
      if not query.did_sacrifice(c, 'experience', mile['name'], mile['start'], mile['time']):
        banner.award_banner(c, mile['name'], 'vehumet', 2)
Пример #41
0
def do_milestone_rune(c, mile):
  """Give out 24/N points for the Nth time a player finds a rune, and also give out banners."""
  # Check if this player already found this kind of rune. Remember the db
  # is already updated, so for the first rune the count will be 1.
  rune = loaddb.extract_rune(mile['milestone'])
  num_rune = query.player_count_runes(c, mile['name'], rune)
  rune_points = (24 + num_rune - 1) / num_rune
  assign_points(c, "rune:" + rune, mile['name'], rune_points)
  player = mile['name']
  runes_found = query.player_count_distinct_runes(c, player)
  if mile['dur'] <= 4860:
    banner.award_banner(c, mile['name'], 'makhleb', 2)
  if runes_found == crawl.NRUNES:
    banner.award_banner(c, player, 'ashenzari', 3)
  elif runes_found >= 5:
    banner.award_banner(c, player, 'ashenzari', 2)
  if rune == 'golden' and num_rune == 1:
    banner.award_banner(c, player, 'fedhas', 2)
  if rune == 'silver' and num_rune == 1:
    banner.award_banner(c, player, 'gozag', 2)
  did_ecu = query.did_use_ecumenical_altar(c, mile['name'], mile['start'],
		mile['time'])
  did_renounce = query.did_renounce_god(c, mile['name'], mile['start'],
			mile['time'])
  if (did_ecu and not did_renounce):
    banner.award_banner(c, player, 'hepliaklqana', 2)

  # The abyssal rune is the only rune that the player can get before the iron
  # rune for Avarice 3.
  if rune == 'iron' and mile['urune'] <= 2:
    other_rune_branches = ['Vaults', 'Shoals', 'Snake', 'Spider', 'Swamp', 'Slime', 'Pan', 'Coc', 'Geh', 'Tar']
    eligible = True
    for br in other_rune_branches:
      if query.did_enter_branch(c, br, player, mile['start'], mile['time']):
        eligible = False
        break
    if eligible:
      assign_points(c, 'avarice', player, 25, False)
      banner.award_banner(c, player, 'gozag', 3)

  if nemelex.is_nemelex_choice(mile['char'], mile['time']):
    ban = 'nemelex:' + mile['char']
    banner.award_banner(c, player, ban, 2)
  if not query.did_enter_branch(c, 'Depths', player, mile['start'], mile['time']):
    if mile['urune'] == 6:
      assign_points(c, 'vow_of_courage', player, 25, False)
      banner.award_banner(c, player, 'the_shining_one', 3)
    elif mile['urune'] >= 4:
      banner.award_banner(c, player, 'the_shining_one', 2)
  #if query.time_from_str(mile['time']) - query.time_from_str(mile['start']) <= datetime.timedelta(hours=27):
  #  banner.award_banner(c, mile['name'], 'oldbanner', 1)
  if query.is_unbeliever(c, mile):
    banner.award_banner(c, mile['name'], 'trog', 2)
  if mile['urune'] == 1:
    if rune != 'slimy' and rune != 'abyssal':
      if mile['potionsused'] == 0 and mile['scrollsused'] == 0:
        assign_points(c, 'ascetic', player, 25, False)
        banner.award_banner(c, mile['name'], 'ru', 3)
    if mile['xl'] < 14:
      if not query.did_sacrifice(c, 'experience', mile['name'], mile['start'], mile['time']):
        banner.award_banner(c, mile['name'], 'vehumet', 2)
Пример #42
0
def do_milestone_rune(c, mile):
  """Give out 30/N points for the Nth time a player finds a rune, and also give out banners."""
  # Check if this player already found this kind of rune. Remember the db
  # is already updated, so for the first rune the count will be 1.
  rune = loaddb.extract_rune(mile['milestone'])
  num_rune = query.player_count_runes(c, mile['name'], rune)
  rune_points = (30 + num_rune - 1) / num_rune
  assign_points(c, "rune:" + rune, mile['name'], rune_points)
  player = mile['name']
  runes_found = query.player_count_distinct_runes(c, player)
  if runes_found == crawl.NRUNES:
    banner.award_banner(c, player, 'ashenzari', 3)
  elif runes_found >= 5:
    banner.award_banner(c, player, 'ashenzari', 2)
  if rune == 'golden' and num_rune == 1:
    banner.award_banner(c, player, 'fedhas', 2)
  if nemelex.is_nemelex_choice(mile['char'], mile['time']):
    ban = 'nemelex:' + mile['char']
    banner.award_banner(c, player, ban, 2)
  if not query.did_reach_d14(c, player, mile['start'], mile['time']):
    if mile['urune'] == 4:
      assign_points(c, 'vow_of_courage', player, 25)
      banner.award_banner(c, player, 'the_shining_one', 3)
    elif mile['urune'] >= 2:
      banner.award_banner(c, player, 'the_shining_one', 2)
    else:
      banner.award_banner(c, player, 'the_shining_one', 1)
  if not query.game_did_visit_lair(c, mile['name'], mile['start'], mile['time']):
    banner.award_banner(c, mile['name'], 'kikubaaqudgha', 2)
  if query.time_from_str(mile['time']) - query.time_from_str(mile['start']) <= datetime.timedelta(hours=27):
    banner.award_banner(c, mile['name'], 'vehumet', 1)
  if query.is_unbeliever(c, mile):
    banner.award_banner(c, mile['name'], 'lugonu', 2)
Пример #43
0
def award_player_banners(c, banner_name, players, prestige=0, temp=False):
  if players:
    for p in players:
      banner.award_banner(c, p, banner_name, prestige, temp)
Пример #44
0
def do_milestone_br_mid(c, mile):
  if mile['dur'] <= 1620:
    banner.award_banner(c, mile['name'], 'makhleb', 1)
Пример #45
0
def do_milestone_rune(c, mile):
  """Give out banners for certain special rune finds."""
  # Check if this player already found this kind of rune. Remember the db
  # is already updated, so for the first rune the count will be 1.
  rune = loaddb.extract_rune(mile['milestone'])
  num_rune = query.player_count_runes(c, mile['name'], rune)
  player = mile['name']
  runes_found = query.player_count_distinct_runes(c, player)
  if mile['dur'] <= 4860:
    banner.award_banner(c, mile['name'], 'makhleb', 2)
  if runes_found == crawl.NRUNES:
    banner.award_banner(c, player, 'ashenzari', 3)
  elif runes_found >= 5:
    banner.award_banner(c, player, 'ashenzari', 2)
  if rune == 'golden' and num_rune == 1:
    banner.award_banner(c, player, 'fedhas', 2)
  if rune == 'silver' and num_rune == 1:
    banner.award_banner(c, player, 'gozag', 2)
  did_ecu = query.did_use_ecumenical_altar(c, mile['name'], mile['start'],
		mile['time'])
  did_renounce = query.did_renounce_god(c, mile['name'], mile['start'],
			mile['time'])
  if (did_ecu and not did_renounce):
    banner.award_banner(c, player, 'hepliaklqana', 2)

  # The abyssal rune is the only rune that the player can get before the iron
  # rune for Avarice 3.
  if rune == 'iron' and mile['urune'] <= 2:
    other_rune_branches = ['Vaults', 'Shoals', 'Snake', 'Spider', 'Swamp', 'Slime', 'Pan', 'Coc', 'Geh', 'Tar']
    eligible = True
    for br in other_rune_branches:
      if query.did_enter_branch(c, br, player, mile['start'], mile['time']):
        eligible = False
        break
    if eligible:
      banner.award_banner(c, player, 'gozag', 3)

  if nemelex.is_nemelex_choice(mile['char'], mile['time']):
    banner.award_banner(c, player, 'nemelex', 2)
  if not query.did_enter_branch(c, 'Depths', player, mile['start'], mile['time']):
    if mile['urune'] == 6:
      banner.award_banner(c, player, 'the_shining_one', 3)
    elif mile['urune'] >= 4:
      banner.award_banner(c, player, 'the_shining_one', 2)
  #if query.time_from_str(mile['time']) - query.time_from_str(mile['start']) <= datetime.timedelta(hours=27):
  #  banner.award_banner(c, mile['name'], 'oldbanner', 1)
  if query.is_unbeliever(c, mile):
    banner.award_banner(c, mile['name'], 'trog', 2)
  if rune != 'slimy' and rune != 'abyssal':
    if mile['potionsused'] == 0 and mile['scrollsused'] == 0:
      banner.award_banner(c, mile['name'], 'ru', 3)
  if mile['urune'] == 1:
    if mile['xl'] < 14:
      if not query.did_sacrifice(c, 'experience', mile['name'], mile['start'], mile['time']) and not query.did_worship_god(c, 'Hepliaklqana',
                      mile['name'], mile['start'], mile['time']) and not mile['race'] == 'Felid':
        banner.award_banner(c, mile['name'], 'vehumet', 2)

  if mile['br'] in [ 'Shoals', 'Slime', 'Snake', 'Spider', 'Swamp'] and mile['turn'] - query.branch_end_turn(c, mile['br'], mile['name'], mile['start']) <= 810:
      banner.award_banner(c, mile['name'], 'uskayaw', 1)
  if rune == 'silver' and mile['turn'] - query.branch_end_turn(c, 'Vaults', mile['name'], mile['start']) <= 540:
      banner.award_banner(c, mile['name'], 'uskayaw', 2)
Пример #46
0
def do_milestone_zig_enter(c, mile):
  banner.award_banner(c, mile['name'], 'xom', 1)
Пример #47
0
def do_milestone_br_enter(c, mile):
  """Give out banners for branch entry."""
  if mile['noun'] == 'Crypt':
    banner.award_banner(c, mile['name'], 'fedhas', 1)
  if mile['noun'] in ['Vaults', 'Snake', 'Swamp', 'Shoals', 'Spider', 'Slime',
                      'Tomb', 'Dis', 'Tar', 'Coc', 'Geh']:
    banner.award_banner(c, mile['name'], 'ashenzari', 1)
  if mile['noun'] in ['Pan', 'Dis', 'Tar', 'Coc', 'Geh']:
    banner.award_banner(c, mile['name'], 'zin', 1)
  if mile['noun'] == 'Lair':
    if mile['sk'] == 'Invocations':
      banner.award_banner(c, mile['name'], 'qazlal', 1)
    if query.did_use_ecumenical_altar(c, mile['name'], mile['start'], mile['time']) \
        and not query.did_renounce_god(c, mile['name'], mile['start'], mile['time']):
      banner.award_banner(c, mile['name'], 'hepliaklqana', 1)
  if mile['noun'] == 'Temple':
    if mile['potionsused'] == 0 and mile['scrollsused'] == 0:
      banner.award_banner(c, mile['name'], 'ru', 1)
    if mile['turn'] < 3000:
      banner.award_banner(c, mile['name'], 'wu_jian', 1)
Пример #48
0
def do_milestone_zig_exit(c, mile):
  if mile['place'] == 'Zig:27':
    banner.award_banner(c, mile['name'], 'xom', 3)
Пример #49
0
def do_milestone_br_end(c, mile):
  if mile['noun'] == 'Orc':
    if not query.game_did_visit_lair(c, mile['name'], mile['start'], mile['time']):
      banner.award_banner(c, mile['name'], 'kikubaaqudgha', 1)
  if mile['noun'] == 'Depths':
    if not query.game_did_visit_lair(c, mile['name'], mile['start'], mile['time']):
      banner.award_banner(c, mile['name'], 'kikubaaqudgha', 2)
  if mile['noun'] == 'D':
    if mile['dur'] <= 1620 and mile['race'] != 'Formicid':
      banner.award_banner(c, mile['name'], 'makhleb', 1)
  if mile['noun'] == 'Lair':
    if mile['sklev'] < 13 and mile['race'] != 'Formicid' and mile['race'] != 'Gnoll':
      if not query.did_worship_god(c, 'Ashenzari', mile['name'], mile['start'], mile['time']):
        banner.award_banner(c, mile['name'], 'sif', 1)
    if mile['xl'] < 12 and mile['race'] != 'Formicid':
      if not query.did_sacrifice(c, 'experience', mile['name'], mile['start'],
              mile['time']) and not query.did_worship_god(c, 'Hepliaklqana',
                      mile['name'], mile['start'], mile['time']) and not mile['race'] == 'Felid':
        banner.award_banner(c, mile['name'], 'vehumet', 1)
    if query.is_unbeliever(c, mile):
      banner.award_banner(c, mile['name'], 'trog', 1)
    if mile['potionsused'] == 0 and mile['scrollsused'] == 0:
      banner.award_banner(c, mile['name'], 'ru', 2)
  if mile['noun'] == 'Elf' and mile['turn'] < 9000:
    banner.award_banner(c, mile['name'], 'wu_jian', 2)
  if mile['noun'] == 'Geh' and mile['turn'] < 27000:
    banner.award_banner(c, mile['name'], 'wu_jian', 3)
Пример #50
0
def crunch_winner(c, game):
  """A game that wins could assign a variety of irrevocable points for a
  variety of different things. This function needs to calculate them all."""

  player = game['name']
  charabbrev = game_character(game)
  game_end = game_end_time(game)

  # 20 clan points for first win for a particular combo in the tournament.
  if query.first_win_for_combo(c, charabbrev, game_end):
    assign_team_points(c, "combo_first_win:" + charabbrev, player, 20)

  # Award Okawaru banners for wins.
  banner.award_banner(c, player, 'okawaru', 2)
  if (game['turn'] < 50000):
    banner.award_banner(c, player, 'okawaru', 3)

  if not query.game_did_visit_lair(c, player, game_start_time(game)):
    # assign_points(c, 'lairless_win', player, 20)
    if not query.game_did_visit_branch(c, player, game_start_time(game)):
      # 50 bonus points for winning without doing any branches.
      assign_points(c, 'branchless_win', player, 50)
      # And the banner:
      banner.award_banner(c, player, 'kikubaaqudgha', 3)
    else:
      banner.award_banner(c, player, 'kikubaaqudgha', 2)

  ogame = query.previous_combo_highscore(c, game)
  if ogame and ogame[0] != player and ogame[2] == 'winning' and ogame[1] < game['sc']:
    banner.award_banner(c, player, 'trog', 2)
  if game['sc'] >= 10000000:
    ogame = query.previous_species_highscore(c, game)
    if ogame and ogame[1] >= 10000000 and ogame[1] < game['sc'] and ogame[0] != player:
      banner.award_banner(c, player, 'trog', 3)
    ogame = query.previous_class_highscore(c, game)
    if ogame and ogame[1] >= 10000000 and ogame[1] < game['sc'] and ogame[0] != player:
      banner.award_banner(c, player, 'trog', 3)

  debug("%s win (%s), runes: %d" % (player, charabbrev, game.get('urune') or 0))

  if nemelex.is_nemelex_choice(charabbrev, game_end):
    ban = 'nemelex:' + charabbrev
    if banner.count_recipients(c, ban, 3) < 5:
      if not banner.player_has_banner(c, player, ban, 3):
        assign_points(c, ban, player, 75)
        banner.award_banner(c, player, ban, 3)

  if is_all_runer(game):
    all_allruners = number_of_allruners_before(c, game)
    assign_points(c, "nth_all_rune_win:%d" % (all_allruners + 1),
                  game['name'],
                  get_points(all_allruners, 200, 100, 50))

    # If this is my first all-rune win, 50 points!
    #if query.count_wins(c, player = game['name'],
    #                    runes = query.MAX_RUNES,
    #                    before = game_end) == 0:
    #  assign_points(c, "my_1st_all_rune_win", game['name'], 50)

  previous_wins = query.count_wins(c, before = game_end)
  assign_points(c,
                "nth_win:%d" % (previous_wins + 1),
                game['name'], get_points(previous_wins, 200, 100, 50))

  my_wins = query.get_winning_games(c, player = game['name'],
                                    before = game_end)
  n_my_wins = len(my_wins)

  repeated = 0
  if n_my_wins > 0:
    repeated = repeat_race_class([x['charabbrev'] for x in my_wins],
                                 game['char'])

  if n_my_wins == 0:
    # First win! I bet you don't have a streak
    assign_points(c, "my_1st_win", game['name'], 100)

  elif n_my_wins == 1 and repeated == 0:
    # Second win! If neither repeated race or class, bonus!
    assign_points(c, "my_2nd_win_norep", game['name'], 50)

  #else:
    # Any win gets 10 points at this point.
    #assign_points(c, "my_win", game['name'], 10)

  streak_wins = query.wins_in_streak_before(c, game['name'], game_end)
  debug("%s win (%s), previous games in streak: %s" %
        (game['name'], game['char'], streak_wins))
  if not streak_wins:
    query.kill_active_streak(c, player)
    streak_len = -1
  else:
    # Award banner.
    banner.award_banner(c, player, 'cheibriados', 2)
    # This length could be 1 even though it involves at least two games, beware!
    streak_len = compute_streak_length(streak_wins, game['char'])
    if len(streak_wins) >= 2:
      if compute_streak_length(streak_wins[-2:], game['char']) == 3:
        banner.award_banner(c, player, 'cheibriados', 3)
    streak_species = 'streak_species:'+(game['char'][0:2])
    streak_class = 'streak_class:'+(game['char'][2:])
    # 75 points for streak games, but only if they are with a new race and class.
    assign_points(c, streak_species, game['name'], 60, False)
    assign_points(c, streak_class, game['name'], 30, False)
  query.update_active_streak(c, player, game_end, streak_len)

  if streak_len > 1:
    # Update the streaks table. We're still in the logfile transaction
    # here, so it's safe.
    if streak_len > loaddb.longest_streak_count(c, game['name']):
      loaddb.update_streak_count(c, game, streak_len)

  # Assign points for new personal records.
  assign_points(c, 'my_low_turncount_win', game['name'], 5000000/game['turn'], False)
  assign_points(c, 'my_low_realtime_win', game['name'], 1250000/game['dur'], False)
  assign_points(c, 'my_highscore_win', game['name'], game['sc']/120000, False)

  # Assign race/class points, based on the games won before the start
  # of the given win.
  game_start = game_start_time(game)
  wins_before = query.count_wins(c, before=game_start)
  species_wins_before = query.count_wins(c, before=game_start, raceabbr=game['char'][0:2])
  class_wins_before = query.count_wins(c, before=game_start, classabbr=game['char'][2:])
  assign_points(c, 'species_win:' + game['char'][0:2], game['name'], query.race_formula(wins_before, species_wins_before), False)
  assign_points(c, 'class_win:' + game['char'][2:], game['name'], query.class_formula(wins_before, class_wins_before), False)
  # and gods also
  game_god = query.get_game_god(c, game)
  banner_god = game_god.lower().replace(' ', '_')
  if (not game_god == 'faithless'):
    query.record_won_god(c, game['name'], game['end'], game_god)
    god_wins_before = query.count_god_wins(c, game_god, game_start)
    assign_points(c, 'god_win:' + banner_god, game['name'], query.god_formula(wins_before, god_wins_before), False)
  if game['goldspent'] == 0:
    if game_god == 'No God':
      banner.award_banner(c, game['name'], 'sif', 3)
    else:
      banner.award_banner(c, game['name'], 'sif', 2)
Пример #51
0
def do_milestone_zig(c, mile):
  banner.award_banner(c, mile['name'], 'xom', 1)
  if mile['place'] == 'Zig:10':
    banner.award_banner(c, mile['name'], 'xom', 2)
Пример #52
0
def do_milestone_zig_exit(c, mile):
  if mile['place'] == 'Zig:27':
    banner.award_banner(c, mile['name'], 'xom', 3)
Пример #53
0
def do_milestone_br_end(c, mile):
  if mile['noun'] == 'Orc':
    if not query.game_did_visit_lair(c, mile['name'], mile['start'], mile['time']):
      banner.award_banner(c, mile['name'], 'kikubaaqudgha', 1)
  if mile['noun'] == 'Depths':
    if not query.game_did_visit_lair(c, mile['name'], mile['start'], mile['time']):
      banner.award_banner(c, mile['name'], 'kikubaaqudgha', 2)
  if mile['noun'] == 'D':
    if mile['dur'] <= 1620 and mile['race'] != 'Formicid':
      banner.award_banner(c, mile['name'], 'makhleb', 1)
  if mile['noun'] == 'Lair':
    if mile['sklev'] < 13 and mile['race'] != 'Formicid':
      if not query.did_worship_god(c, 'Ashenzari', mile['name'], mile['start'], mile['time']):
        banner.award_banner(c, mile['name'], 'sif', 1)
    if mile['xl'] < 12 and mile['race'] != 'Formicid':
      if not query.did_sacrifice(c, 'experience', mile['name'], mile['start'], mile['time']):
        banner.award_banner(c, mile['name'], 'vehumet', 1)
    if query.is_unbeliever(c, mile):
      banner.award_banner(c, mile['name'], 'trog', 1)
    if mile['potionsused'] == 0 and mile['scrollsused'] == 0:
      banner.award_banner(c, mile['name'], 'ru', 2)
  if query.player_count_br_end(c, mile['name'], mile['noun']) <= 1:
    assign_points(c, "branch:end", mile['name'], 5)