def pvp_top_rank_request_1501(data, player): response = pvp_rank_pb2.PlayerRankResponse() records = tb_pvp_rank.zrangebyscore(1, 20, withscores=True) for char_id, rank in records: char_id = int(char_id) rank = int(rank) rank_item = response.rank_items.add() rank_item.rank = rank _with_pvp_info(rank_item, char_id) response.pvp_score = player.finance[const.PVP] return response.SerializeToString()
def pvp_top_rank_request_1501(data, player): response = pvp_rank_pb2.PlayerRankResponse() columns = ['id', 'nickname', 'level', 'ap', 'hero_ids'] records = util.GetSomeRecordInfo(PVP_TABLE_NAME, 'id<=10', columns) for record in records: rank_item = response.rank_items.add() rank_item.level = record.get('level') rank_item.nickname = record.get('nickname') rank_item.rank = record.get('id') rank_item.ap = record.get('ap') hero_ids = cPickle.loads(record.get('hero_ids')) rank_item.hero_ids.extend([_ for _ in hero_ids]) return response.SerializeToString()
def pvp_player_rank_refresh_request(data, player): response = pvp_rank_pb2.PlayerRankResponse() prere = dict(character_id=player.base_info.id) record = util.GetOneRecordInfo(PVP_TABLE_NAME, prere, ['id']) if not record: cur_rank = 300 else: cur_rank = record.get('id') ranks = [] for v in arena_fight_config.values(): play_rank = v.get('play_rank') if cur_rank in range(play_rank[0], play_rank[1] + 1): para = dict(k=cur_rank) choose_fields = eval(v.get('choose'), para) logger.info('cur:%s choose:%s', cur_rank, choose_fields) for x, y, c in choose_fields: for _ in range(c): r = random.randint(int(x), int(y)) ranks.append(r) break if not ranks: raise Exception('rank field error!') caret = ',' prere = 'id in (%s)' % caret.join(str(_) for _ in ranks) logger.info('prere:%s', prere) columns = ['id', 'nickname', 'level', 'ap', 'hero_ids'] records = util.GetSomeRecordInfo(PVP_TABLE_NAME, prere, columns) for record in records: rank_item = response.rank_items.add() rank_item.level = record.get('level') rank_item.nickname = record.get('nickname') rank_item.rank = record.get('id') rank_item.ap = record.get('ap') hero_ids = cPickle.loads(record.get('hero_ids')) rank_item.hero_ids.extend([_ for _ in hero_ids]) return response.SerializeToString()
def pvp_player_rank_request_1502(data, player): response = pvp_rank_pb2.PlayerRankResponse() prere = dict(character_id=player.base_info.id) record = util.GetOneRecordInfo(PVP_TABLE_NAME, prere, ['id']) if not record: return pvp_player_rank_refresh_request(data, player) cur_rank = record.get('id') columns = ['id', 'nickname', 'level', 'ap', 'hero_ids'] prere = 'id>=%s and id<=%s' % (cur_rank - 9, cur_rank + 1) records = util.GetSomeRecordInfo(PVP_TABLE_NAME, prere, columns) for record in records: rank_item = response.rank_items.add() rank_item.level = record.get('level') rank_item.nickname = record.get('nickname') rank_item.rank = record.get('id') rank_item.ap = record.get('ap') hero_ids = cPickle.loads(record.get('hero_ids')) rank_item.hero_ids.extend([_ for _ in hero_ids]) return response.SerializeToString()
def pvp_player_rank_request_1502(data, player): response = pvp_rank_pb2.PlayerRankResponse() player_ranks = player.pvp.pvp_arena_players if player.pvp.pvp_upstage_challenge_rank != 0: _up_stage_rank = player.pvp.pvp_upstage_challenge_rank _id = int(tb_pvp_rank.zrangebyscore(_up_stage_rank, _up_stage_rank)[0]) response.pvp_upstage_challenge_id = _id char_obj = tb_character_info.getObj(_id) robot_obj = tb_character_info.getObj('robot') data = {} if _id >= 10000 and char_obj.exists(): response.pvp_upstage_challenge_nickname = char_obj.hget('nickname') elif robot_obj.hexists(_id): data = robot_obj.hget(_id) response.pvp_upstage_challenge_nickname = data.get('nickname') else: logger.error('no pvp info:%s', _id) rank = tb_pvp_rank.zscore(player.base_info.id) response.player_rank = int(rank) if rank else -1 response.pvp_score = player.finance[const.PVP] if not rank: rank = tb_pvp_rank.ztotal() # top_rank = [] # stage_info = get_player_pvp_stage(rank) # print stage_info, rank # if stage_info: # _choose = eval(stage_info.get('choose')) # if _choose: # _min, _max, count = _choose[0] # top_rank.extend(range(_min, _max)) # else: # logger.error('pvp stage not found choose:%s', stage_info) # print top_rank # if top_rank: # records = tb_pvp_rank.zrangebyscore(min(top_rank), max(top_rank), # withscores=True) # for char_id, _rank in records: # char_id = int(char_id) # _rank = int(_rank) # if _rank not in top_rank: # continue # rank_item = response.rank_items.add() # rank_item.rank = _rank # _with_pvp_info(rank_item, char_id) records = tb_pvp_rank.zrangebyscore(min(player_ranks), max(player_ranks), withscores=True) # print records, rank for char_id, _rank in records: char_id = int(char_id) _rank = int(_rank) if _rank not in player_ranks: continue # if _rank in top_rank: # continue rank_item = response.rank_items.add() rank_item.rank = _rank _with_pvp_info(rank_item, char_id) # print response return response.SerializeToString()
def fight_1502(self, message): response = pvp_rank_pb2.PlayerRankResponse() response.ParseFromString(message) print response self.on_command_finish()