示例#1
0
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()
示例#2
0
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()
示例#3
0
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()
示例#4
0
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()
示例#5
0
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()
示例#6
0
 def fight_1502(self, message):
     response = pvp_rank_pb2.PlayerRankResponse()
     response.ParseFromString(message)
     print response
     self.on_command_finish()