Exemplo n.º 1
0
    def _match_one_pve(self, rival):
        """根据战力范围,匹配出一个 PVE 敌人
        """
        enemy = PVEEnemyPool().get(rival.score_min, rival.score_max)
        name = NameGenerator().gen()  #随机一个名字
        spoils = reward_module.random_pve_spoils(enemy.level)

        rival.set_pve_enemy(enemy, name, spoils)
Exemplo n.º 2
0
    def _match_one_pve(self, rival, rival_id, country):
        """根据战力范围,匹配出一个 PVE 敌人
        """
        enemy = PVEEnemyPool().get(rival.score_min, rival.score_max)
        name = NameGenerator().gen() #随机一个名字
        icon = IconGenerator().gen() #随机一个icon
        spoils = reward_module.random_pve_spoils(enemy.level)

        rival_country = rival_id % 3 + 1
        #获得特殊物品:将军令
        if rival_country != country:
            items_country = reward_module.random_country_spoils()
            spoils.extend(items_country)
        rival.set_pve_enemy(enemy, name, spoils, rival_id, icon, rival_country)
Exemplo n.º 3
0
def _update_worldboss_rival(data, worldboss, node_id=None):
    user = data.user.get(True)
    rival_id = node_id if node_id is not None else worldboss.node_id
    rival = data.rival_list.get(rival_id)
    if rival is None:
        rival = RivalInfo.create(rival_id, data.id)
        data.rival_list.add(rival)

    #enemy的level
    spoils = reward_module.random_pve_spoils(user.level)
    rival.set_worldboss(user.level, spoils)
    logger.debug("update worldboss rival[rival_id=%d]" % rival_id)

    return True
Exemplo n.º 4
0
    def _set_rivals_info(self, proxy, data, arena, rivals, users, heroes_id, tech_basic_ids):

        rivals_user_id = []
        rivals_battle_score = []
        rivals_score = []
        rivals_info = []
        for i in rivals:
            rival = rivals[i]
            #对手阵容中英雄信息
            rival_heroes = []
            heroes_id = rival.get_heroes_id()
            for hero_id in heroes_id:
                if hero_id == 0:
                    rival_heroes.append(None)
                else:
                    hero = proxy.get_result("hero", hero_id)
                    rival_heroes.append(hero)

            spoils = reward_module.random_pve_spoils(users[rival.rival_id].level)
            rival.set_pvp_enemy_detail(users[rival.rival_id], rival_heroes,
                    items = spoils,
                    technology_basic_ids = tech_basic_ids[rival.rival_id])
            rivals_user_id.append(rival.rival_id)
            rivals_battle_score.append(rival.score)
            rivals_score.append(rival.win_score)
            rivals_info.append(rival)

        #演武场搜出来的对手不足3人,pve补上
        rivals_id = arena.generate_arena_rivals_id()
        pve_user_id = 0    #rival为pve类型的user_id
        for i in range(3 - len(rivals)):
            rival_id = rivals_id[i + len(rivals)]
            rival = data.rival_list.get(rival_id)
            if rival is None:
                rival = RivalInfo.create(rival_id, data.id)
                data.rival_list.add(rival)

            #pve匹配的战力范围
            key = data.user.get(True).level - 3 #演武场需主公17级才开启
            match_info = data_loader.KeyNodeMatchBasicInfo_dict[key]

            rival.set_pve_matching_condition(NodeInfo.ENEMY_TYPE_ARENA,
                    match_info.enemyScoreMin, match_info.enemyScoreMax)

            #创建pve arena数据
            self_score = ArenaInfo.get_real_score(arena.score)
            pve_rival_score = random.randint(int(0.8 * self_score), int(1.2 * self_score)) #pve对手随机积分
            pve_arena = ArenaInfo()
            pve_arena.add_score(pve_rival_score)
            pve_arena.update_index(data.user.get(True).level)
            pve_arena_ranking = 9999 #pve的rival排名随意给个很大的名次
            arena_buff_id = pve_arena.calc_arena_buff_id(pve_arena_ranking)

            #只计算我方积分变化
            (self_win_score, self_lose_score) = arena_business.calc_battle_score(arena, pve_rival_score)
            rival.set_arena(pve_user_id, 0, '', pve_rival_score,
                    pve_arena_ranking, arena_buff_id,
                    self_win_score, self_lose_score)
            logger.debug("arena rival(pve):[user_id=%d][arena_score=%d][arena_ranking=%d]"
                    "[arena_buff_id=%d][self_win_score=%d][self_lose_score=%d]"
                    % (pve_user_id, pve_rival_score,
                        pve_arena_ranking, arena_buff_id,
                        self_win_score, self_lose_score))

            self._match_one_pve(rival, pve_user_id)

            rivals_user_id.append(pve_user_id)
            rivals_battle_score.append(rival.score)
            rivals_score.append(rival.win_score)
            rivals_info.append(rival)
            pve_user_id += 1    #若pve有多个,保证user_id不重

        rivals_user_id_origin = copy.copy(rivals_user_id)

        #rivals_user_id按照rivals_score的高低排序
        for i in range(len(rivals_score)):
            for j in range(i + 1, len(rivals_score)):
                if rivals_score[i] < rivals_score[j]:
                    #互换积分
                    tmp1 = rivals_score[j]
                    rivals_score[j] = rivals_score[i]
                    rivals_score[i] = tmp1
                    #互换rival user id
                    tmp2 = rivals_user_id[j]
                    rivals_user_id[j] = rivals_user_id[i]
                    rivals_user_id[i] = tmp2
                    #互换rival battle_score
                    tmp3 = rivals_battle_score[j]
                    rivals_battle_score[j] = rivals_battle_score[i]
                    rivals_battle_score[i] = tmp3

        arena.set_arena_rivals_user_id(rivals_user_id_origin)
        #根据情况从三个对手中选择出一个对手
        if not arena.choose_rival((data.guard_list.get_all(True))[0].get_team_score(),
                rivals_user_id, rivals_score, rivals_user_id_origin, rivals_battle_score):
            logger.warning("Arena choose rival error")
            return False

        return True