コード例 #1
0
ファイル: signin_process.py プロジェクト: hw233/test-2
    def _pack_signin_response(self, data, hero_list, item_list, now):
        """封装签到响应
        """
        #为了封装 response 构造 HeroInfo 和 ItemInfo
        win_hero = []
        for (basic_id, num) in hero_list:
            soldier_basic_id = HeroInfo.get_default_soldier_basic_id(basic_id)
            soldier_id = SoldierInfo.generate_id(data.id, soldier_basic_id)
            soldier = data.soldier_list.get(soldier_id, True)
            hero = HeroInfo.create(data.id, basic_id, soldier, [])
            for i in range(0, num):
                win_hero.append(hero)

        win_item = []
        for (basic_id, num) in item_list:
            item = ItemInfo.create(data.id, basic_id, num)
            win_item.append(item)

        res = user_pb2.SignInRes()
        res.status = 0
        if len(win_hero) > 0:
            assert len(win_hero) == 1
            pack.pack_hero_info(win_hero[0], res.hero, now)
        if len(win_item) > 0:
            assert len(win_item) == 1
            pack.pack_item_info(win_item[0], res.item)

        return res
コード例 #2
0
    def _calc_member_detail(self, matcher, data, req, timer):
        res = union_pb2.QueryUnionMemberRes()
        res.status = 0

        if matcher.union.union_id != req.union_id:
            logger.debug("User is not belong to union")
            res.ret = union_pb2.UNION_MEMBER_INVALID

        else:
            res.ret = union_pb2.UNION_OK

            #队伍 & 英雄
            for team in matcher.teams:
                pack.pack_team_info(team, res.teams.add())
            for team_msg in res.teams:
                for hero_msg in team_msg.heroes:
                    if hero_msg.basic_id != 0:
                        hero = matcher.heroes[hero_msg.basic_id]
                        pack.pack_hero_info(hero, hero_msg, timer.now)

            #战斗科技
            for tech in matcher.technologys:
                if tech.is_battle_technology():
                    res.battle_tech_ids.append(tech.basic_id)

        defer = DataBase().commit(data)
        defer.addCallback(self._query_member_succeed, req, res, timer)
        return defer
コード例 #3
0
ファイル: draw_process.py プロジェクト: hw233/test-2
    def _pack_draw_response(self, data, hero_list, item_list,
            resource, search_num, next_time, now):
        """封装响应
        返回客户端的是抽奖获得的英雄和物品(并未将已经拥有的英雄分解成将魂石)
        客户端会自行进行分解
        """
        win_hero = []
        for (basic_id, num) in hero_list:
            soldier_basic_id = HeroInfo.get_default_soldier_basic_id(basic_id)
            soldier_id = SoldierInfo.generate_id(data.id, soldier_basic_id)
            soldier = data.soldier_list.get(soldier_id, True)

            hero = HeroInfo.create(data.id, basic_id, soldier, technology_basic_ids = [])
            for i in range(0, num):
                win_hero.append(hero)

        win_item = []
        for (basic_id, num) in item_list:
            item = ItemInfo.create(data.id, basic_id, num)
            win_item.append(item)

        res = wineShop_pb2.WineShopDrawRes()
        res.status = 0

        for item in win_item:
            pack.pack_item_info(item, res.items.add())
        for hero in win_hero:
            pack.pack_hero_info(hero, res.heroes.add(), now)
        pack.pack_resource_info(resource, res.resource)
        res.draw.search_num = search_num
        res.draw.next_left_time = max(0, next_time - now)
        return res
コード例 #4
0
    def _pack_refine_cannt_upgrade(self, data, req, hero, timer):
        res = hero_pb2.RefineHeroRes()
        res.status = 0
        res.return_ret = res.Refine_CANNT_UPGRADE

        pack.pack_hero_info(hero, res.hero, timer.now)
        return self._refine_upgrade_succeed(data, req, res, timer)
コード例 #5
0
    def _pack_update_garrison_hero_exp_response(self, heroes, now):
        res = hero_pb2.HeroUpdateGarrisonExpRes()
        res.status = 0
        for hero in heroes:
            pack.pack_hero_info(hero, res.heroes.add(), now)

        return res
コード例 #6
0
ファイル: ranking_process.py プロジェクト: hw233/test-2
    def _query_ranking_player_powerful_teams_succeed(self, proxy,
                                                     technology_basic_ids, req,
                                                     timer, teams):
        heroes = proxy.get_all_result("hero")

        res = ranking_pb2.QueryRankingPlayerPowerfulTeamsRes()
        res.status = 0

        i = 0
        for team in teams:
            team_res = res.teams.add()
            pack.pack_team_info(team, team_res)
            team_res.index = i
            i += 1
            for team_hero_res in team_res.heroes:
                if team_hero_res.basic_id == 0:
                    continue

                for hero in heroes:
                    if hero.basic_id == team_hero_res.basic_id:
                        pack.pack_hero_info(hero, team_hero_res, timer.now)

        for basic_id in technology_basic_ids:
            res.battle_tech_ids.append(basic_id)

        response = res.SerializeToString()
        log = log_formater.output2(
            req.user_id, "Query ranking player powerful teams succeed", req,
            res, timer.count_ms())
        logger.notice(log)
        return response
コード例 #7
0
    def _calc_own_finish_result(self, union_response, rival_union_res, win,
                                own_soldier_info, enemy_soldier_info, data,
                                skip, heroes, req, timer):
        union_res = internal_union_pb2.InternalFinishUnionBattleRes()
        union_res.ParseFromString(union_response)
        if union_res.status != 0:
            raise Exception("Query union battle res error")

        score = 0
        if union_res.HasField("individual_battle_score_add"):
            score = union_res.individual_battle_score_add

        #结束战斗
        if win:
            if not union_battle_business.win_battle(data, enemy_soldier_info,
                                                    own_soldier_info, score,
                                                    timer.now):
                raise Exception("Win battle failed")
        else:
            if not union_battle_business.lose_battle(data, enemy_soldier_info,
                                                     own_soldier_info, score,
                                                     timer.now):
                raise Exception("Lose battle failed")

        #检查请求
        if win:
            compare.check_user(data, req.monarch, with_level=True)
            for info in req.battle.attack_heroes:
                compare.check_hero(data, info.hero, with_level=True)
            for item_info in req.items:
                compare.check_item(data, item_info)

        res = union_battle_pb2.FinishUnionBattleRes()
        res.status = 0
        if union_res.ret != union_pb2.UNION_OK:
            res.ret = union_res.ret
        else:
            res.ret = rival_union_res.ret

        if skip:
            pack.pack_monarch_info(data.user.get(True), res.monarch)
            if win:
                res.battle_output.result = battle_pb2.BattleOutputInfo.WIN
            else:
                res.battle_output.result = battle_pb2.BattleOutputInfo.LOSE

            for i, hero in enumerate(heroes):
                attack_hero = res.battle_output.attack_heroes.add()
                pack.pack_hero_info(hero, attack_hero.hero, timer.now)
                attack_hero.soldier_survival = own_soldier_info[i][2]

        if union_res.HasField("battle") and rival_union_res.HasField("battle"):
            defer = UnionBattlePatcher().patch_by_both_message(
                res.battle, union_res.battle, rival_union_res.battle, data,
                timer.now)
            defer.addCallback(self._calc_finish_post, data, req, res, timer)
            return defer

        return self._calc_finish_post(None, data, req, res, timer)
コード例 #8
0
    def _pack_refine_upgrade_succeed(self, data, req, hero, timer):
        res = hero_pb2.RefineHeroRes()
        res.status = 0
        res.return_ret = res.Refine_SUCCESS

        pack.pack_hero_info(hero, res.hero, timer.now)

        defer = DataBase().commit(data)
        defer.addCallback(self._refine_upgrade_succeed, req, res, timer)
        return defer
コード例 #9
0
ファイル: event_process.py プロジェクト: hw233/test-2
    def _finish_visit_succeed(self, data, req, timer):
        res = event_pb2.FinishEventVisitRes()
        res.status = 0
        if req.HasField("hero"):
            hero = hero_business.get_hero_by_id(data, req.hero.basic_id, True)
            pack.pack_hero_info(hero, res.hero, timer.now)
        pack.pack_resource_info(data.resource.get(True), res.resource)

        response = res.SerializeToString()
        log = log_formater.output(data, "Finish visit succeed", req, res,
                                  timer.count_ms())
        logger.notice(log)
        return response
コード例 #10
0
    def _pack_refine_succeed(self, data, req, hero, timer):
        res = hero_pb2.RefineHeroRes()
        res.status = 0
        res.return_ret = res.Refine_SUCCESS

        pack.pack_hero_info(hero, res.hero, timer.now)
        (item_id, item_num) = hero.refine_item()
        item = item_business.get_item_by_id(data, item_id)
        pack.pack_item_info(item, res.items.add())

        defer = DataBase().commit(data)
        defer.addCallback(self._refine_succeed, req, res, timer)
        return defer
コード例 #11
0
    def _calc_receive_deploy_force(self, data, req, timer):
        union = data.union.get(True)
        if not union.is_belong_to_target_union(req.union_id):
            #玩家不属于联盟
            res = union_battle_pb2.DeployUnionBattleForceRes()
            res.status = 0
            res.ret = union_pb2.UNION_NOT_MATCHED

            defer = DataBase().commit(data)
            defer.addCallback(self._receive_deploy_succeed, req, res, timer)
            return defer

        battle_score = data.battle_score.get()
        teams_index = battle_score.get_powerful_teams_id()[0:3]  #取前三队
        teams = []
        for team_index in teams_index:
            team_id = TeamInfo.generate_id(data.id, team_index)
            team = data.team_list.get(team_id, True)
            teams.append(team)
        if not union_battle_business.is_able_to_deploy(data, req.node_index,
                                                       teams, True):
            raise Exception("Team deploy invalid")

        union_req = internal_union_pb2.InternalDeployUnionBattleReq()
        user = data.user.get(True)
        union_req.user_id = data.id
        union_req.defender_user_id = data.id
        union_req.defender_user_name = user.get_readable_name()
        union_req.defender_user_icon = user.icon_id
        union_req.defender_user_level = user.level
        union_req.node_index = req.node_index
        for team in teams:
            team_msg = union_req.teams.add()
            team_msg.index = team.index
            for hero_id in team.get_heroes():
                if hero_id != 0:
                    hero = data.hero_list.get(hero_id, True)
                    pack.pack_hero_info(hero, team_msg.heroes.add(), timer.now)
        for tech in data.technology_list.get_all(True):
            if tech.is_battle_technology() and not tech.is_upgrade:
                union_req.battle_tech_ids.append(tech.basic_id)

        defer = GlobalObject().remote['gunion'].callRemote(
            "deploy_battle", req.union_id, union_req.SerializeToString())
        defer.addCallback(self._calc_receive_deploy_result, data, req, timer)
        return defer
コード例 #12
0
ファイル: account_process.py プロジェクト: hw233/test-2
    def _pack_user_info(self,
                        data,
                        basic_data,
                        req,
                        timer,
                        first_init,
                        arena_matcher=None,
                        melee_matcher=None):
        """打包所有用户数据
        Args:
            data[UserData]: 用户数据
            req[protobuf]: 请求
        Returns:
            res[protobuf]
        """
        res = init_pb2.InitRes()
        res.status = 0
        res.first_init = first_init
        info = res.info

        user = data.user.get(True)
        pay = data.pay.get(True)
        pack.pack_monarch_info(user, info.monarch)
        union = data.union.get(True)
        resource = data.resource.get(True)
        if union.is_belong_to_union():
            info.monarch.union_id = union.union_id
            info.union_battle_stage = UnionBattleStagePatcher().patch(
                union.union_id)

        pack.pack_resource_info(data.resource.get(True), info.resource)
        for item in data.item_list.get_all(True):
            pack.pack_item_info(item, info.items.add())
        for hero in data.hero_list.get_all(True):
            pack.pack_hero_info(hero, info.heroes.add(), timer.now)
        for team in data.team_list.get_all(True):
            pack.pack_team_info(team, info.teams.add())

        pack.pack_map_info(data, data.map.get(True), info.map, timer.now)

        for city in data.city_list.get_all(True):
            pack.pack_city_info(city, info.cities.add())
        for building in data.building_list.get_all(True):
            pack.pack_building_info(building, info.buildings.add(), timer.now)
        for technology in data.technology_list.get_all(True):
            pack.pack_technology_info(technology, info.techs.add(), timer.now)
        for conscript in data.conscript_list.get_all(True):
            pack.pack_conscript_info(conscript, info.conscripts.add(),
                                     timer.now)
        assert len(data.defense_list) == 1

        pack.pack_money_draw_info(data.draw.get(True), info.money_draw,
                                  timer.now)
        pack.pack_gold_draw_info(data.draw.get(True), info.gold_draw,
                                 timer.now)

        for mission in data.mission_list:
            pack.pack_mission_info(mission.get(True), info.missions.add())

        #邮件看产生时间顺序给出
        # data.mail.sort(cmp = None, key=lambda x:x.time, reverse = False)
        for mail in data.mail_list.get_all(True):
            pack.pack_mail_info(mail, info.mails.add(), timer.now)

        pack.pack_sign_info(data.sign.get(True), info.sign_in)

        #演武场
        arena = data.arena.get(True)
        arena_ranking = 0
        if arena_matcher is not None:
            arena_ranking = arena_matcher.rank
        pack.pack_arena_info(user, arena, info.arena, timer.now, arena_ranking)
        #if user.allow_pvp_arena and arena.is_arena_active(timer.now):
        #    #胜场奖励
        #    if arena.is_able_to_get_win_num_reward():
        #        pack.pack_arena_reward_info(arena, info.arena.win_num_reward)
        #    #对手信息
        #    if arena.rivals_user_id != '':
        #        rivals_id = arena.generate_arena_rivals_id()
        #        for rival_id in rivals_id:
        #            rival = data.rival_list.get(rival_id, True)
        #            pack.pack_arena_player(rival, info.arena.rivals.add())
        #        #系统选定的对战对手
        #        choose_rival_id = arena.get_choose_rival_id()
        #        choose_rival = data.rival_list.get(choose_rival_id, True)
        #        info.arena.choosed_user_id = choose_rival.rival_id

        #    #对战记录
        #    record_list = data.arena_record_list.get_all(True)
        #    for record in record_list:
        #        pack.pack_arena_record(record, info.arena.records.add())

        flags = account_business.get_flags()
        if 'is_open_melee' in flags:
            #乱斗场
            melee = data.melee.get(True)
            melee_ranking = 0
            if melee_matcher is not None:
                melee_ranking = melee_matcher.rank
            pack.pack_melee_info(user, melee, info.melee_arena, timer.now,
                                 melee_ranking)
            #if melee.is_able_to_unlock(user) and melee.is_arena_active(timer.now):
            #    #胜场奖励
            #    if melee.is_able_to_get_win_num_reward():
            #        pack.pack_arena_reward_info(melee, info.melee_arena.win_num_reward)
            #    #对手信息
            #    if melee.rivals_user_id != '':
            #        rivals_id = melee.generate_arena_rivals_id()
            #        for rival_id in rivals_id:
            #            rival = data.rival_list.get(rival_id, True)
            #            pack.pack_melee_player(rival, info.melee_arena.rivals.add())

            #    #对战记录
            #    record_list = data.melee_record_list.get_all(True)
            #    for record in record_list:
            #        pack.pack_arena_record(record, info.melee_arena.records.add())
            ##乱斗场阵容
            #(heroes_list, positions_list) = melee.get_heroes_position()
            #if len(heroes_list) > 0:
            #    info.melee_team.index = 0
            #for hero_basic_id in heroes_list:
            #    (info.melee_team.heroes.add()).basic_id = hero_basic_id
            #for position in positions_list:
            #    info.melee_team.hero_positions.append(position)

        #政令
        energy = data.energy.get(True)
        pack.pack_energy_info(energy, info.energy_info, timer.now)

        #祈福
        pray = data.pray.get(True)
        pack.pack_pray_info(pray, info.pray, timer.now)

        #红包
        chest = data.chest.get(True)
        pack.pack_chest_info(chest, info.chest, timer.now)

        #试炼场
        anneal = data.anneal.get(True)
        pack.pack_anneal_info(data, anneal, info.anneal, timer.now)

        #打包新手引导进度信息
        pack.pack_guide_info(data.user.get(True), info.guide)

        #将星盘
        herostar_list = data.herostar_list.get_all(True)
        for herostar in herostar_list:
            info.hero_star.append(herostar.star_id)

        #世界boss
        #pack.pack_worldboss_info(data.worldboss.get(True), user, info.world_boss, timer.now)

        #功能开关
        #flags = account_business.get_flags()
        pack.pack_flag_info(flags, info.flags)

        #扩展副本
        dungeons = data.expand_dungeon_list.get_all()
        for dungeon in dungeons:
            dungeon.daily_update(timer.now)
            pack.pack_expand_dungeon_info(dungeon,
                                          user,
                                          info.expand_dungeons.add(),
                                          0,
                                          timer.now,
                                          brief=True)

        #主界面的按钮提示
        pack.pack_button_tips(basic_data, data, info, timer.now)

        #lua
        #pack.pack_luas(info.luas)

        logger.notice(
            "Submit Role[user_id=%d][level=%d][name=%s][vip=%d][status=LOGIN][create_time=%d][last_login_time=%d][money=%d][food=%d][gold=%d][pay_count=%d][pay_amount=%.2f]"
            % (user.id, user.level, user.name, user.vip_level,
               user.create_time, user.last_login_time, resource.money,
               resource.food, resource.gold, pay.pay_count, pay.pay_amount))

        #log = log_formater.output_gold(data, 0, log_formater.INIT_RESOURCE_GOLD,
        #       "Gain gold from init resource", before_gold = data.resource.get(True).gold)
        #logger.notice(log)

        return self._init_succeed(data, req, res, timer)