Exemplo n.º 1
0
    def _try_forward_season_for_user_not_belong_to_union(self):
        """让不属于任何联盟的玩家,且参加过上个赛季联盟战争的玩家,进入下一个赛季
        """
        users = []

        flag = True
        begin = 0
        gap = 50
        while flag:
            proxy = DataProxy()
            proxy.search_by_rank("union", "season_score", begin, begin + gap)
            defer = proxy.execute()

            for i, indiv_info in enumerate(
                    proxy.get_rank_result("union", "season_score", begin,
                                          begin + gap)):
                if indiv_info.season_score > 0:
                    if indiv_info.user_id not in users:
                        users.append(indiv_info.user_id)
                else:
                    flag = False
                    break

            begin += gap

        for user_id in users:
            req = internal_pb2.UnionBattleForwardReq()
            defer = GlobalObject().root.callChild(
                "portal", "forward_union_battle_season_forward", user_id,
                req.SerializeToString())
            defer.addCallback(
                self._check_forward_season_for_user_not_belong_to_union)
Exemplo n.º 2
0
 def match(self, now):
     proxy = DataProxy()
     proxy.search_by_rank("unionunion", "recent_prosperity",
                          self.RANK_START, self.RANK_STOP)
     defer = proxy.execute()
     defer.addCallback(self._calc_result)
     return defer
Exemplo n.º 3
0
def update_last_user_level():
    """更新第50名用户的等级"""
    proxy = DataProxy()
    proxy.search_by_rank("battle_score", "score", 0, 49)

    defer = proxy.execute()
    defer.addCallback(_update_last_user_level_rank)
    return defer
Exemplo n.º 4
0
    def _calc_union_season_battle_individual(self, data, req, timer):
        if req.start_index < 1 or req.start_index > req.end_index:
            raise Exception("Ranking req error")

        req.end_index = 50  #TODO 客户端赋值错误,临时方案,待客户端修复
        proxy = DataProxy()
        proxy.search_ranking("union", "season_score", data.id)
        proxy.search_by_rank("union", "season_score", req.start_index - 1,
                             min(20, req.end_index - 1))
        defer = proxy.execute()

        defer.addCallback(self._calc_union_season_battle_individual_post, data,
                          req, timer)
        defer.addCallback(self._query_succeed, req, timer)
        return defer
Exemplo n.º 5
0
    def _query_worldboss_ranking(self, user_id, req, timer):
        if req.start_index < 1 or req.start_index > req.end_index:
            raise Exception("Ranking req error")

        proxy = DataProxy()

        proxy.search("worldboss", user_id)  #先查玩家自己的worldboss
        proxy.search_ranking("worldboss", "merit", user_id)  #先查玩家自己的排名
        proxy.search_by_rank("worldboss", "merit", req.start_index - 1,
                             req.end_index - 1)
        defer = proxy.execute()

        defer.addCallback(self._calc_query_worldboss_ranking, user_id, req,
                          timer)
        defer.addErrback(self._query_worldboss_ranking_failed, req, timer)
        return defer
Exemplo n.º 6
0
    def _query_activity_hero_ranking(self, user_id, req, timer):
        if req.start_index < 1 or req.start_index > req.end_index:
            raise Exception("Ranking req error")

        proxy = DataProxy()

        proxy.search("draw", user_id)  #先查玩家自己的draw
        proxy.search_ranking("draw", "activity_scores", user_id)  #先查玩家自己的排名
        proxy.search_by_rank("draw", "activity_scores", req.start_index - 1,
                             req.end_index - 1)
        defer = proxy.execute()

        defer.addCallback(self._calc_query_activity_hero_ranking, user_id, req,
                          timer)
        defer.addErrback(self._query_activity_hero_ranking_failed, req, timer)
        return defer
Exemplo n.º 7
0
    def _match_melee(self, status, data, melee):
        """匹配副本对手
        """
        assert status is True

        x = self.rank
        players_rank = []
        #根据规则,挑选出要选作对手的玩家排名
        if x <= 10:
            if x == 1:
                players_rank += random.sample(range(2, x + 50), 3)
            elif x == 2:
                players_rank.append(1)
                players_rank += random.sample(range(3, x + 50), 2)
            else:
                players_rank += random.sample(range(1, x), 1)
                players_rank += random.sample(range(x, x + 50), 2)
        elif x > 10 and x <= 100:
            players_rank += random.sample(
                range(int(math.ceil(0.5 * x - 5)), x), 1)
            players_rank += random.sample(range(x, x + 100), 2)
        elif x > 100 and x <= 1000:
            #players_rank += random.sample(range(int(math.ceil(0.5 * x - 10)), int(math.ceil(0.5 * x + 10))), 1)
            players_rank += random.sample(
                range(int(math.ceil(0.5 * x - 10)), x), 1)
            #players_rank += random.sample(range(x-30, x), 1)
            players_rank += random.sample(range(x, x + 100), 2)
        elif x > 1000:
            #players_rank += random.sample(range(int(math.ceil(0.5 * x - 50)), int(math.ceil(0.5 * x + 50))), 1)
            players_rank += random.sample(
                range(int(math.ceil(0.5 * x - 50)), x), 1)
            #players_rank += random.sample(range(int(math.ceil(0.9 * x - 100)), x), 1)
            players_rank += random.sample(range(x, x + 100), 2)
        assert len(players_rank) == 3
        logger.debug("match players by rank[self_rank=%d][match rank=[%d, %d, %d]" %\
                (x, players_rank[0], players_rank[1], players_rank[2]))

        cache_proxy = DataProxy()
        for rank in players_rank:
            if rank > self.users_count:  #超过本房间人数则跳过
                continue
            cache_proxy.search_by_rank("melee", "score",
                                       self.rank_base + rank - 1,
                                       self.rank_base + rank - 1)
        defer = cache_proxy.execute()
        defer.addCallback(self._select_players_info, data, melee, players_rank)
        return defer
Exemplo n.º 8
0
    def _query_anneal_hard_mode_ranking(self, user_id, req, timer):
        if req.start_index < 1 or req.start_index > req.end_index:
            raise Exception("Ranking req error")

        proxy = DataProxy()

        proxy.search("anneal", user_id)  #先查玩家自己的anneal
        proxy.search_ranking("anneal", "hard_floor", user_id)  #先查玩家自己的排名
        proxy.search_by_rank("anneal", "hard_floor", req.start_index - 1,
                             req.end_index - 1)
        defer = proxy.execute()

        defer.addCallback(self._calc_query_anneal_hard_mode_ranking, user_id,
                          req, timer)
        defer.addErrback(self._query_anneal_hard_mode_ranking_failed, req,
                         timer)
        return defer
Exemplo n.º 9
0
    def _query_kill_enemy_ranking(self, user_id, req, timer):
        if req.start_index < 1 or req.start_index > req.end_index:
            raise Exception("Ranking req error")

        proxy = DataProxy()

        proxy.search("trainer", user_id)  #先查玩家自己的battle
        proxy.search_ranking("trainer", "kills", user_id)  #先查玩家自己的排名
        proxy.search_by_rank("trainer", "kills", req.start_index - 1,
                             req.end_index - 1)
        defer = proxy.execute()

        defer.addCallback(self._calc_query_kill_enemy_ranking, user_id, req,
                          timer)
        defer.addErrback(self._query_kill_enemy_ranking_failed, user_id, req,
                         timer)
        return defer
Exemplo n.º 10
0
    def _calc_union_season_battle(self, data, req, timer):
        if req.start_index < 1 or req.start_index > req.end_index:
            raise Exception("Ranking req error")

        union = data.union.get(True)

        proxy = DataProxy()
        if union.is_belong_to_union():
            proxy.search_ranking("unionseason", "score", union.union_id)
            proxy.search("unionseason", union.union_id)
        proxy.search_by_rank("unionseason", "score", req.start_index - 1,
                             req.end_index - 1)
        defer = proxy.execute()

        defer.addCallback(self._calc_union_season_battle_post, data, req,
                          timer)
        defer.addCallback(self._query_succeed, req, timer)
        return defer
Exemplo n.º 11
0
    def try_forward_season(self, user_id, request):
        """尝试进入下一个赛季
        """
        timer = Timer(user_id)

        req = union_battle_pb2.TryForwardUnionBattleSeasonReq()
        req.ParseFromString(request)

        #查询一下当前赛季排名(联盟排名、个人排名)
        union_min = min(data_loader.UnionSeasonBattleAwardInfo_dict.keys()) - 1
        union_max = max(data_loader.UnionSeasonBattleAwardInfo_dict.keys()) - 1
        indiv_min = min(
            data_loader.UnionSeasonBattleIndivAwardInfo_dict.keys()) - 1
        indiv_max = max(
            data_loader.UnionSeasonBattleIndivAwardInfo_dict.keys()) - 1

        proxy = DataProxy()
        proxy.search_by_rank("unionseason", "score", union_min, union_max)
        proxy.search_by_rank("union", "season_score", indiv_min, indiv_max)
        defer = proxy.execute()
        defer.addCallback(self._calc_season_result, req, union_min, union_max,
                          indiv_min, indiv_max, timer)
        defer.addErrback(self._try_forward_season_failed, req, timer)
        return defer