コード例 #1
0
def update_daily_energy_claim(quest, current_ts):
    energy_record = ema_energy_manager.get_energy_by_trainer(
        quest.player_address)
    if not energy_record:
        return 0
    return int(
        energy_record and get_start_time_of_the_day(current_ts) <=
        energy_record.last_claim_time <= get_end_time_of_the_day(current_ts))
コード例 #2
0
def update_practice_played(quest, current_ts):
    quest_info = QUEST_LIST[quest.quest_id]

    if quest.quest_type == QuestTypes.DAILY or quest_info.get(
            "is_daily", False):
        return ema_battle_manager.count_practice_battles_by_time(
            quest.player_address, get_start_time_of_the_day(current_ts),
            get_end_time_of_the_day(current_ts))
    else:
        if len(quest_info["quest_target"]) >= 2:
            prev_res = ema_battle_manager.count_practice_battles_by_time(
                quest.player_address, 0, QUEST_SYSTEM_START_TIME)
            curr_res = ema_battle_manager.count_practice_battles_by_time(
                quest.player_address, QUEST_SYSTEM_START_TIME + 1, current_ts)
            return min(
                prev_res, quest_info["quest_target"][0] +
                quest_info["quest_target"][1]) + curr_res
        else:
            return ema_battle_manager.count_practice_battles(
                quest.player_address)
コード例 #3
0
def update_consecutive_rank_won(quest, current_ts):
    player_bid = ema_player_manager.get_player_bid_by_address(
        quest.player_address)
    quest_info = QUEST_LIST[quest.quest_id]

    if quest.quest_type == QuestTypes.DAILY or quest_info.get(
            "is_daily", False):
        matches = ema_battle_manager.get_rank_attack_battles_by_time(
            player_bid, get_start_time_of_the_day(current_ts),
            get_end_time_of_the_day(current_ts))
    else:
        matches = ema_battle_manager.get_rank_attack_battles(player_bid)

    win_streak = 0
    longest_streak = 0
    for match in matches:
        if match.result == BattleResult.ATTACKER_WIN:
            win_streak += 1
            longest_streak = max(longest_streak, win_streak)
        else:
            win_streak = 0

    return longest_streak if longest_streak >= quest.quest_target else win_streak
コード例 #4
0
ファイル: quest_manager.py プロジェクト: pythexcel/ethermon
def create_or_update_quest(player_uid, player_address, quest_id, quest):
    current_ts = get_timestamp()
    today_start_time = get_start_time_of_the_day(current_ts)
    today_end_time = get_end_time_of_the_day(current_ts)

    # Get quest info
    quest_info = quest_config.QUEST_LIST[quest_id]
    quest_start_time = quest_info.get("start_time", 0)
    quest_end_time = quest_info.get("end_time", INFINITY_FUTURE)
    is_daily_quest = quest_info[
        'quest_type'] == QuestTypes.DAILY or quest_info.get('is_daily', False)

    # Case daily quest reset
    if quest and is_daily_quest:
        if current_ts > quest.end_time:
            quest.start_time = max(quest_start_time, today_start_time)
            quest.end_time = min(quest_end_time, today_end_time)
            quest.status = QuestStatus.TO_DO
            quest.quest_level = 0
            quest.quest_target = quest_info['quest_target'][0]
            quest.reward_type = quest_info['reward_type'][0]
            quest.reward_value = quest_info['reward_value'][0]

    # Case claimed / finished quest
    if quest and quest.status != QuestStatus.TO_DO:
        return quest

    # Case new quest
    if quest is None:
        quest = EtheremonDB.QuestTab(
            player_uid=player_uid,
            player_address=player_address,
            quest_id=quest_id,
            quest_type=quest_info['quest_type'],
            quest_level=0,
            quest_name=quest_info['quest_name'],
            quest_target=quest_info['quest_target'][0],
            quest_progress=0,
            reward_type=quest_info['reward_type'][0],
            reward_value=quest_info['reward_value'][0],
            status=QuestStatus.TO_DO,
            start_time=quest_start_time if not is_daily_quest else max(
                quest_start_time, today_start_time),
            end_time=quest_end_time if not is_daily_quest else min(
                quest_end_time, today_end_time),
            last_check=0,
            create_time=current_ts,
            extra="{}",
        )

    # Update progress
    temp = quest_info['update_progress_func'](quest, current_ts)
    quest_progress = temp if not isinstance(temp, tuple) else temp[0]
    quest.quest_progress = min(quest.quest_target, quest_progress)

    # Ready to claim
    if quest.quest_progress == quest.quest_target:
        quest.status = QuestStatus.TO_CLAIM

    quest_extra_data = None if not isinstance(temp, tuple) else temp[1]
    extra_data = json.loads(quest.extra or "{}")
    extra_data["info"] = quest_extra_data
    quest.extra = json.dumps(extra_data)

    quest.last_check = current_ts
    quest.update_time = current_ts
    quest.save()

    return quest