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)
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)
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
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