コード例 #1
0
ファイル: aid_processor.py プロジェクト: hw233/test-2
    def _calc_respond(self, data, req, timer):
        """援助
        """
        if not data.is_valid():
            #联盟不存在
            res = self._pack_respond_response_invalid(union_pb2.UNION_NOT_MATCHED)
            return self._respond_succeed(data, req, res, timer)

        member = member_business.find_member(data, req.user_id)
        target_member = member_business.find_member(data, req.target_user_id)
        if member is None:
            res = self._pack_respond_response_invalid(union_pb2.UNION_MEMBER_INVALID)
        elif target_member is None:
            res = self._pack_respond_response_invalid(union_pb2.UNION_AID_INVALID)
        else:
            aid = aid_business.respond_aid(
                    data, member, target_member, req.item_basic_id, timer.now)
            if aid is None:
                res = self._pack_respond_response_invalid(union_pb2.UNION_AID_INVALID)
            else:
                res = self._pack_respond_response(aid, req.user_id)

        defer = DataBase().commit(data)
        defer.addCallback(self._respond_succeed, req, res, timer)
        return defer
コード例 #2
0
    def _calc_query_boss_reward(self, data, req, timer):
        res = internal_union_pb2.InternalUnionBossBossRewardRes()
        res.status = 0

        member = member_business.find_member(data, req.user_id)
        union = data.union.get()
        if member is None:
            res.ret = union_pb2.UNION_NOT_MATCHED
            return self._query_boss_reward_succeed(data, req, res, timer)

        boss_id = union.get_bosses_id()[req.boss_step]
        boss = boss_business.get_union_boss(data, boss_id)
        if boss is None:
            raise Exception("Boss is None[boss_id=%d]" % boss_id)

        reward_record = boss.get_reward_record()
        res.box.id = req.boss_step
        for user_id, user_name, icon_id, item_id, item_num, time in reward_record:
            member = res.box.members.add()
            member.user_id = user_id
            member.name = user_name
            member.headIconId = icon_id
            member.item_id = item_id
            member.item_num = item_num
            member.passedTime = timer.now - time

        return self._query_boss_reward_succeed(data, req, res, timer)
コード例 #3
0
ファイル: union_processor.py プロジェクト: hw233/test-2
    def _calc_query(self, data, req, timer, force):
        """
        """
        if not data.is_valid():
            #联盟不存在
            res = self._pack_invalid_query_response(
                union_pb2.UNION_NOT_MATCHED)
            return self._query_succeed(data, req, res, timer)

        #检查是否是联盟成员
        member = member_business.find_member(data, req.user_id)
        if member is None:  #玩家已经不属于此联盟
            if force:
                res = self._pack_query_response(data, req.user_id, timer)
            else:
                res = self._pack_invalid_query_response(
                    union_pb2.UNION_NOT_MATCHED)
        elif member.is_leader() or member.is_vice_leader():  #盟主和副盟主
            member_business.delete_not_available_application(data, timer.now)
            res = self._pack_query_response(data, req.user_id, timer, True)
        else:  #普通成员
            res = self._pack_query_response(data, req.user_id, timer)

        defer = DataBase().commit(data)
        defer.addCallback(self._query_succeed, req, res, timer)
        return defer
コード例 #4
0
    def _kickout(self, data, member, target_user_id, timer):
        """踢人
        """
        target_member = member_business.find_member(data, target_user_id)
        if target_member is None:
            logger.debug("User is not belong to union")
            return self._pack_manage_response(union_pb2.UNION_MEMBER_INVALID)

        if member.user_id == target_user_id:
            #任何人都不能踢自己
            logger.debug("User is not belong to union")
            return self._pack_manage_response(union_pb2.UNION_NO_AUTH)

        elif member.is_normal_member():
            #成员不能踢人
            return self._pack_manage_response(union_pb2.UNION_NO_AUTH)

        elif member.is_vice_leader() and not target_member.is_normal_member():
            #副盟主只可以踢成员
            return self._pack_manage_response(union_pb2.UNION_NO_AUTH)

        union = data.union.get()
        member_business.leave_union(data, target_member)

        app_req = internal_union_pb2.InternalUnionOperateReq()
        app_req.operator_user_id = member.user_id
        app_req.union_name = union.get_readable_name()
        app_req.union_id = union.id

        defer = GlobalObject().remote['app'].callRemote(
            "been_kickout_from_union", target_user_id,
            app_req.SerializeToString())
        defer.addCallback(self._post_kickout, data, timer)
        return defer
コード例 #5
0
    def _calc_start(self, data, req, timer):
        res = internal_union_pb2.InternalStartUnionDonateRes()
        res.status = 0
        if not data.is_valid():
            res.ret = union_pb2.UNION_NOT_MATCHED
            return self._start_succeed(data, req, res, timer)

        member = member_business.find_member(data, req.user_id)
        if member is None:
            res.ret = union_pb2.UNION_NOT_MATCHED
            return self._start_succeed(data, req, res, timer)

        if not donate_business.is_able_to_start_donate(data, req.box_id,
                                                       timer):
            res.ret = union_pb2.UNION_DONATE_BOX_INVALID
        else:
            (honor, donate_box) = donate_business.start_donate(
                data, req.box_id, req.user_id, req.user_name, req.donate_type,
                timer)

            res.ret = union_pb2.UNION_OK
            res.honor = honor
            pack.pack_donate_box_info(data, req.user_id, donate_box,
                                      res.box_info, timer)
            donate_records = donate_business.get_donate_records(data)
            for donate_record in donate_records:
                pack.pack_donate_record_info(donate_record,
                                             res.donate_records.add())

        defer = DataBase().commit(data)
        defer.addCallback(self._start_succeed, req, res, timer)
        return defer
コード例 #6
0
    def _calc_refresh(self, data, req, timer):
        res = internal_union_pb2.InternalRefreshBoxRes()
        res.status = 0
        if not data.is_valid():
            res.ret = union_pb2.UNION_NOT_MATCHED
            return self._refresh_succeed(data, req, res, timer)
        member = member_business.find_member(data, req.user_id)
        if member is None:
            res.ret = union_pb2.UNION_NOT_MATCHED
            return self._refresh_succeed(data, req, res, timer)

        ret = donate_business.is_able_to_refresh_donate_box(
            data, req.box_id, req.user_id, timer)
        if ret != 0:
            res.ret = ret
        else:
            new_donate_box = donate_business.refresh_donate_box(
                data, req.box_id, timer)

            res.ret = union_pb2.UNION_OK
            pack.pack_donate_box_info(data, req.user_id, new_donate_box,
                                      res.box_info, timer)

        defer = DataBase().commit(data)
        defer.addCallback(self._refresh_succeed, req, res, timer)
        return defer
コード例 #7
0
    def _calc_query(self, data, req, timer):
        if not data.is_valid():
            res = internal_union_pb2.InternalQueryUnionDonateRes()
            res.status = 0
            res.ret = union_pb2.UNION_NOT_MATCHED
            return self._query_succeed(data, req, res, timer)

        member = member_business.find_member(data, req.user_id)
        if member is None:
            res = internal_union_pb2.InternalQueryUnionDonateRes()
            res.status = 0
            res.ret = union_pb2.UNION_NOT_MATCHED
        else:
            donate_business.auto_refresh_donate_boxes(data, timer)

            res = internal_union_pb2.InternalQueryUnionDonateRes()
            res.status = 0
            res.ret = union_pb2.UNION_OK

            donate_boxes = data.donate_box_list.get_all(True)
            for donate_box in donate_boxes:
                pack.pack_donate_box_info(data, req.user_id, donate_box,
                                          res.boxes_info.add(), timer)

            donate_records = donate_business.get_donate_records(data)
            for donate_record in donate_records:
                pack.pack_donate_record_info(donate_record,
                                             res.donate_records.add())

        defer = DataBase().commit(data)
        defer.addCallback(self._query_succeed, req, res, timer)
        return defer
コード例 #8
0
    def _calc_approve(self, data, req, timer):
        """审批
        """
        if not data.is_valid():
            #联盟不存在
            res = self._pack_approve_response(union_pb2.UNION_NOT_MATCHED)
            return self._approve_succeed(data, req, res, timer)

        member = member_business.find_member(data, req.user_id)
        target_member = member_business.find_member(data, req.target_user_id)
        application = member_business.find_application(data,
                                                       req.target_user_id,
                                                       timer.now)
        if member is None:
            res = self._pack_approve_response(union_pb2.UNION_NOT_MATCHED)
        elif member.is_normal_member():
            #普通成员没有权限
            res = self._pack_approve_response(union_pb2.UNION_NO_AUTH)
        elif target_member is not None:
            #待审批玩家已经加入联盟
            res = self._pack_approve_response(union_pb2.UNION_OK)
        elif application is None:
            #申请已经失效
            res = self._pack_approve_response(
                union_pb2.UNION_APPLICATION_INVALID)
        elif not req.agree:
            #拒绝申请
            member_business.disagree_application(data, application)
            res = self._pack_approve_response(union_pb2.UNION_OK)
        elif req.agree:
            #同意申请
            union = data.union.get()
            if union.is_member_full():
                #已满员,拒绝申请
                member_business.disagree_application(data, application)
                res = self._pack_approve_response(
                    union_pb2.UNION_APPLICATION_INVALID)
            else:
                return self._accept(data, member, application, req, timer)

        defer = DataBase().commit(data)
        defer.addCallback(self._approve_succeed, req, res, timer)
        return defer
コード例 #9
0
    def _calc_join(self, data, req, timer):
        """加入
        """
        if not data.is_valid():
            #联盟不存在
            res = self._pack_join_response_invalid(
                union_pb2.UNION_JOIN_INVALID)
            return self._join_succeed(data, req, res, timer)

        member = member_business.find_member(data, req.user_id)
        if member is not None:
            #已经加入此联盟
            logger.debug("User is belong to union")
            res = self._pack_join_response(data, req.user_id, timer)
        else:
            union = data.union.get()
            if union.is_member_full():
                #联盟已满员
                logger.debug("Union is full")
                res = self._pack_join_response_invalid(
                    union_pb2.UNION_JOIN_FULL)

            elif req.user_level < union.join_level_limit:
                #玩家等级不满足要求
                logger.debug("User level is not satisfy")
                res = self._pack_join_response_invalid(
                    union_pb2.UNION_JOIN_LEVEL_ERROR)

            elif union.join_status == union.JOIN_STATUS_DISABLE:
                #不允许加入
                logger.debug("Union is disable join")
                res = self._pack_join_response_invalid(
                    union_pb2.UNION_JOIN_INVALID)

            elif union.join_status == union.JOIN_STATUS_VERIFY:
                #需要验证,添加申请
                logger.debug("Add join application")
                member_business.add_application(
                    data, req.user_id, req.user_name, req.user_icon_id,
                    req.user_level, req.user_battle_score, timer.now)
                res = self._pack_join_response_invalid(
                    union_pb2.UNION_JOIN_WAIT_VERIFY)

            else:
                #允许加入,添加成员
                if member_business.join_union(data, req.user_id, timer.now):
                    res = self._pack_join_response(data, req.user_id, timer)
                else:
                    res = self._pack_join_response_invalid(
                        union_pb2.UNION_JOIN_INVALID)

        defer = DataBase().commit(data)
        defer.addCallback(self._join_succeed, req, res, timer)
        return defer
コード例 #10
0
ファイル: donate.py プロジェクト: hw233/test-2
def is_able_to_initiate_donate(union_data, user_id, box_id, timer):
    """是否可以发起捐献"""
    member = member_business.find_member(union_data, user_id)
    donate_box = get_donate_box(union_data, box_id, True)
    if donate_box is None:
        return union_pb2.UNION_DONATE_BOX_INVALID
    is_leader = member.position != UnionMemberInfo.POSITION_MEMBER
    is_box_status = donate_box.get_status(timer.now) == UnionDonateBox.IDLE
    
    if not is_leader:
        return union_pb2.UNION_NO_AUTH
    if not is_box_status:
        return union_pb2.UNION_DONATE_BOX_INVALID
    return 0
コード例 #11
0
    def _calc_query(self, data, req, timer):
        res = internal_union_pb2.InternalQueryUnionBossRes()
        res.status = 0
        res.ret = union_pb2.UNION_OK

        member = member_business.find_member(data, req.user_id)
        if member is None:
            res.ret = union_pb2.UNION_NOT_MATCHED
            return self._query_succeed(data, req, res, timer)

        boss_business.try_change_unionboss(data, timer.now)
        boss_business.try_reset_unionboss(data, timer.now)

        union = data.union.get(True)
        res.last_update_time = union.boss_last_update_time

        bosses_id = union.get_bosses_id()
        for boss_id in bosses_id:
            res.bosses_id.append(boss_id)

        boss_id = union.get_attacking_unionboss()
        if boss_id != 0:
            attack_boss = boss_business.get_union_boss(data, boss_id, True)
            res.attack_id = attack_boss.boss_id
            res.attack_soldier_num = attack_boss.current_soldier_num
            res.attack_total_soldier_num = attack_boss.total_soldier_num

        for step, boss_id in enumerate(bosses_id):
            box = res.boxes.add()
            boss = boss_business.get_union_boss(data, boss_id, True)
            if boss.status != UnionBossInfo.KILLED:
                box.id = -1
                continue

            box.id = step
            reward_record = boss.get_reward_record()
            for user_id, user_name, icon_id, item_id, item_num, time in reward_record:
                member = box.members.add()
                member.user_id = user_id
                member.name = user_name
                member.headIconId = icon_id
                member.item_id = item_id
                member.item_num = item_num
                member.passedTime = timer.now - time

        defer = DataBase().commit(data)
        defer.addCallback(self._query_succeed, req, res, timer)
        return defer
コード例 #12
0
ファイル: aid_processor.py プロジェクト: hw233/test-2
    def _calc_query(self, data, req, timer):
        """查询
        """
        if not data.is_valid():
            #联盟不存在
            res = self._pack_query_response_invalid(union_pb2.UNION_NOT_MATCHED)
            return self._query_succeed(data, req, res, timer)

        member = member_business.find_member(data, req.user_id)
        if member is None:
            res = self._pack_query_response_invalid(union_pb2.UNION_MEMBER_INVALID)
        else:
            res = self._pack_query_response(data, req.user_id, timer)

        defer = DataBase().commit(data)
        defer.addCallback(self._query_succeed, req, res, timer)
        return defer
コード例 #13
0
    def _calc_add_honor(self, data, req, timer):
        if not data.is_valid():
            #联盟不存在
            res = self._pack_add_honor_response(union_pb2.UNION_NOT_MATCHED)
            return self._add_honor_succeed(data, req, res, timer)

        member = member_business.find_member(data, req.user_id)
        if member is None:
            #已经不在此联盟中
            logger.debug("User is not belong to union")
            res = self._pack_add_honor_response(union_pb2.UNION_NOT_MATCHED)
        else:
            member.gain_honor(req.honor)
            res = self._pack_add_honor_response(union_pb2.UNION_OK)

        defer = DataBase().commit(data)
        defer.addCallback(self._add_honor_succeed, req, res, timer)
        return defer
コード例 #14
0
    def _calc_manage(self, data, req, timer):
        if not data.is_valid():
            #联盟不存在
            res = self._pack_manage_response(union_pb2.UNION_NOT_MATCHED)
            return self._manage_succeed(data, req, res, timer)

        member = member_business.find_member(data, req.user_id)
        if member is None:
            if req.op == union_pb2.ManageUnionReq.DISMISSFORCE:
                self._pack_manage_response(union_pb2.UNION_OK)
            else:
                #玩家已经不属于联盟
                logger.warning("Member is not exist")
                res = self._pack_manage_response(union_pb2.UNION_NOT_MATCHED)
                defer = DataBase().commit(data)
                defer.addCallback(self._manage_succeed, req, res, timer)
                return defer

        defer = Deferred()

        if req.op == union_pb2.ManageUnionReq.KICKOUT:
            defer.addCallback(self._kickout, member, req.target_user_id, timer)
        elif req.op == union_pb2.ManageUnionReq.PROMOTION:
            defer.addCallback(self._promotion, member, req.target_user_id,
                              timer)
        elif req.op == union_pb2.ManageUnionReq.DEMOTION:
            defer.addCallback(self._demotion, member, req.target_user_id,
                              timer)
        elif req.op == union_pb2.ManageUnionReq.DEMISE:
            defer.addCallback(self._demise, member, req.target_user_id, timer)
        elif req.op == union_pb2.ManageUnionReq.DISMISS:
            defer.addCallback(self._dismiss, member, timer)
        elif req.op == union_pb2.ManageUnionReq.DISMISSFORCE:
            defer.addCallback(self._dismiss, member, timer, True)
        elif req.op == union_pb2.ManageUnionReq.EXIT:
            defer.addCallback(self._exit, member, timer)
        else:
            raise Exception("Invalid operation[op=%d]" % req.op)

        defer.addCallback(self._post_manage, data, req, timer)
        defer.callback(data)
        return defer
コード例 #15
0
ファイル: union_processor.py プロジェクト: hw233/test-2
    def _calc_start_chat(self, data, req, timer):
        """
        """
        if not data.is_valid():
            #联盟不存在
            res = self._pack_invalid_start_chat_response(
                union_pb2.UNION_NOT_MATCHED)
            return self._start_chat_succeed(data, req, res, timer)

        #检查是否是联盟成员
        member = member_business.find_member(data, req.user_id)
        if member is None:  #玩家已经不属于此联盟
            res = self._pack_invalid_start_chat_response(
                union_pb2.UNION_NOT_MATCHED)
        else:  #普通成员
            res = self._pack_start_chat_response(data)

        defer = DataBase().commit(data)
        defer.addCallback(self._start_chat_succeed, req, res, timer)
        return defer
コード例 #16
0
ファイル: aid_processor.py プロジェクト: hw233/test-2
    def _calc_finish(self, data, req, timer):
        """结束
        """
        if not data.is_valid():
            #联盟不存在
            res = self._pack_finish_response_invalid(union_pb2.UNION_NOT_MATCHED)
            return self._finish_succeed(data, req, res, timer)

        member = member_business.find_member(data, req.user_id)
        if member is None:
            res = self._pack_finish_response_invalid(union_pb2.UNION_MEMBER_INVALID)
        else:
            aid = aid_business.finish_aid(data, req.user_id, timer.now)
            if aid is None:
                raise Exception("Finish union aid failed")
            res = self._pack_finish_response(aid, req.user_id)

        defer = DataBase().commit(data)
        defer.addCallback(self._finish_succeed, req, res, timer)
        return defer
コード例 #17
0
ファイル: donate.py プロジェクト: hw233/test-2
def start_donate(union_data, box_id, user_id, user_name, donate_tpye, timer):
    """进行捐献"""
    (probability, honor, prosperity, progress) = get_donate_info_by_grade(box_id, donate_tpye)

    donate_box = get_donate_box(union_data, box_id)
    member = member_business.find_member(union_data, user_id)
    union = union_data.union.get()
    donate_box.gain_donate_progress(progress, timer.now)
    member.gain_honor(honor)
    union.gain_prosperity(prosperity, timer.now)

    #如果这次捐献导致宝箱捐满,就生成一个新宝箱
    if donate_box.get_status(timer.now) == UnionDonateBox.UNLOCKED:       
        new_donate_box = create_new_donate_box(union_data)
        add_donate_box(union_data, new_donate_box)
    
    add_donate_record(
        union_data, user_id, user_name, box_id, donate_tpye, honor, progress, prosperity)

    return honor, donate_box
コード例 #18
0
ファイル: union_processor.py プロジェクト: hw233/test-2
    def _do_calc_update(self, is_name_exist, data, req, timer):
        """更新
        """
        member = member_business.find_member(data, req.user_id)
        if member is None:
            #玩家已经不属于此联盟
            res = self._pack_invalid_query_response(
                union_pb2.UNION_NOT_MATCHED)
        elif is_name_exist:
            #名字重复
            logger.debug("Union name is conflict[name=%s]" % req.name)
            res = self._pack_invalid_query_response(
                union_pb2.UNION_NAME_CONFLICT)
        else:
            name = None
            icon_id = None
            need_level = None
            join_status = None
            announcement = None
            if req.HasField("name"):
                name = req.name
            if req.HasField("icon_id"):
                icon_id = req.icon_id
            if req.HasField("need_level"):
                need_level = req.need_level
            if req.HasField("join_status"):
                join_status = req.join_status
            if req.HasField("announcement"):
                announcement = req.announcement

            if union_business.update_union(data, member, name, icon_id,
                                           need_level, join_status,
                                           announcement):
                res = self._pack_query_response(data, req.user_id, timer, True)
            else:
                res = self._pack_invalid_query_response(
                    union_pb2.UNION_NO_AUTH)

        defer = DataBase().commit(data)
        defer.addCallback(self._update_succeed, req, res, timer)
        return defer
コード例 #19
0
    def _demise(self, data, member, target_user_id, timer):
        """转让盟主
        """
        target_member = member_business.find_member(data, target_user_id)
        if target_member is None:
            return self._pack_manage_response(union_pb2.UNION_MEMBER_INVALID)

        if not member.is_leader() or member.user_id == target_user_id:
            #只有盟主可以操作,不能操作自己
            return self._pack_manage_response(union_pb2.UNION_NO_AUTH)

        member_business.demise_leader(data, member, target_member)

        union = data.union.get(True)
        notice_content = data_loader.ServerDescKeyInfo_dict[
            "union_promote_leader"].value.encode("utf-8")
        notice_content = notice_content.replace("@union_name",
                                                union.get_readable_name())
        notice_content = notice_content.replace("@union_id", str(union.id))
        self._manage_notice(target_user_id, notice_content)
        return self._pack_manage_response(union_pb2.UNION_OK)
コード例 #20
0
ファイル: donate.py プロジェクト: hw233/test-2
def is_able_to_refresh_donate_box(union_data, box_id, user_id, timer):
    """是否可以刷新捐献箱"""
    member = member_business.find_member(union_data, user_id)
    donate_box = get_donate_box(union_data, box_id)
    if donate_box is None:
        return union_pb2.UNION_DONATE_BOX_INVALID

    if member is None:
        is_leader = False
    else:
        is_leader = member.position != UnionMemberInfo.POSITION_MEMBER
    is_box_status = donate_box.get_status(timer.now) == UnionDonateBox.IDLE
    is_refresh = donate_box.is_refresh(union_data, timer.now)

    if not is_leader:
        return union_pb2.UNION_NO_AUTH
    if not is_box_status:
        return union_pb2.UNION_DONATE_BOX_INVALID
    if not is_refresh:
        return union_pb2.UNION_DONATE_NO_CONDITION
    return 0
コード例 #21
0
    def _calc_boss_reward(self, data, req, timer):
        res = internal_union_pb2.InternalUnionBossBossRewardRes()
        res.status = 0

        union = data.union.get()
        member = member_business.find_member(data, req.user_id)
        if member is None:
            res.ret = union_pb2.UNION_NOT_MATCHED
            return self._boss_reward_succeed(data, req, res, timer)

        boss_id = union.get_bosses_id()[req.boss_step]
        boss = boss_business.get_union_boss(data, boss_id)
        if boss is None:
            raise Exception("Boss is None[boss_id=%d]" % boss_id)

        if boss_business.is_able_to_accept_boss_reward(data, member, boss):
            logger.debug(
                "Accept boss box reward[union_id=%d][user_id=%d][boss_id=%d]" %
                (data.id, member.user_id, boss_id))
            boss_business.accept_boss_reward(data, req.user_id, req.user_name,
                                             req.icon_id, boss, timer.now)
        else:
            logger.debug(
                "Query boss box reward[union_id=%d][user_id=%d][boss_id=%d]" %
                (data.id, member.user_id, boss_id))

        reward_record = boss.get_reward_record()
        res.box.id = req.boss_step
        for user_id, user_name, icon_id, item_id, item_num, time in reward_record:
            member = res.box.members.add()
            member.user_id = user_id
            member.name = user_name
            member.headIconId = icon_id
            member.item_id = item_id
            member.item_num = item_num
            member.passedTime = timer.now - time

        defer = DataBase().commit(data)
        defer.addCallback(self._boss_reward_succeed, req, res, timer)
        return defer
コード例 #22
0
    def _pack_join_response(self, data, user_id, timer):
        res = internal_union_pb2.InternalQueryUnionRes()
        res.status = 0
        res.ret = union_pb2.UNION_OK

        union = data.union.get(True)
        pack.pack_union_info(union, res.union)

        for member in data.member_list.get_all(True):
            pack.pack_member_info(member, res.union.members.add())

        for aid in data.aid_list.get_all(True):
            if aid.is_active_for(data.id, timer.now):
                pack.pack_aid_info(aid, res.union.aids.add(), user_id,
                                   timer.now)

        #战争基础信息
        season = data.season.get(True)
        battle = battle_business.update_battle(data, timer.now)
        pack.pack_battle_info(union, season, battle, res.union.battle,
                              timer.now)

        #个人数据
        member = member_business.find_member(data, user_id)
        pack.pack_battle_individual_info(member, res.union.battle.user)

        #己方防守地图信息
        nodes = battle_business.get_battle_map(data)
        pack.pack_battle_map_info(union, season, battle, nodes,
                                  res.union.battle.own_map, timer.now)

        #战斗记录
        records = data.battle_record_list.get_all(True)
        for record in records:
            pack.pack_battle_record_info(record,
                                         res.union.battle.records.add(),
                                         timer.now)

        return res
コード例 #23
0
    def _calc_reward(self, data, req, timer):
        res = internal_union_pb2.InternalGetBoxRewardRes()
        res.status = 0
        if not data.is_valid():
            res.ret = union_pb2.UNION_NOT_MATCHED
            return self._reward_succeed(data, req, res, timer)
        member = member_business.find_member(data, req.user_id)
        if member is None:
            res.ret = union_pb2.UNION_NOT_MATCHED
            return self._reward_succeed(data, req, res, timer)

        if not donate_business.is_able_to_reward_donate_box(
                data, req.box_id, timer):
            res.ret = union_pb2.UNION_DONATE_NO_CONDITION
        else:
            res.ret = union_pb2.UNION_OK
            pack.pack_donate_reward_info(
                UnionDonateBox.get_reward_item_list(req.box_id),
                UnionDonateBox.get_reward_resource_list(req.box_id),
                res.reward)

        defer = DataBase().commit(data)
        defer.addCallback(self._reward_succeed, req, res, timer)
        return defer
コード例 #24
0
ファイル: union_processor.py プロジェクト: hw233/test-2
    def _pack_query_response(self,
                             data,
                             user_id,
                             timer,
                             enable_application=False):
        """打包结果
        Args:
            data: 联盟数据
            user_id: 玩家 user id
            enable_application: 是否需要打包申请(盟主和副盟主有权处理)
        """
        res = internal_union_pb2.InternalQueryUnionRes()
        res.status = 0
        res.ret = union_pb2.UNION_OK

        union = data.union.get(True)
        pack.pack_union_info(union, res.union)

        for member in data.member_list.get_all(True):
            pack.pack_member_info(member, res.union.members.add())

        if enable_application:
            for application in data.application_list.get_all(True):
                if application.is_available(timer.now):
                    pack.pack_application_info(application,
                                               res.union.applications.add())

        for aid in data.aid_list.get_all(True):
            if aid.is_active_for(user_id, timer.now):
                if aid.user_id == user_id:
                    pack.pack_aid_info(aid, res.union.aid_own, user_id,
                                       timer.now)
                else:
                    pack.pack_aid_info(aid, res.union.aids.add(), user_id,
                                       timer.now)

        #战争基础信息
        season = data.season.get(True)
        battle = battle_business.update_battle(data, timer.now)
        pack.pack_battle_info(union, season, battle, res.union.battle,
                              timer.now)

        #个人数据
        member = member_business.find_member(data, user_id)
        if member is not None:
            pack.pack_battle_individual_info(member, res.union.battle.user)

        #己方防守地图信息
        nodes = battle_business.get_battle_map(data)
        pack.pack_battle_map_info(union, season, battle, nodes,
                                  res.union.battle.own_map, timer.now)

        #战斗记录
        records = data.battle_record_list.get_all(True)
        for record in records:
            pack.pack_battle_record_info(record,
                                         res.union.battle.records.add(),
                                         timer.now)

        #联盟捐献信息
        donate_boxes = data.donate_box_list.get_all(True)
        for donate_box in donate_boxes:
            if donate_box.status != UnionDonateBox.NULL:
                pack.pack_donate_box_info(data, user_id, donate_box,
                                          res.boxes_info.add(), timer)

        donate_records = donate_business.get_donate_records(data)
        for donate_record in donate_records:
            pack.pack_donate_record_info(donate_record,
                                         res.donate_records.add())

        return res
コード例 #25
0
    def _calc_sync(self, data, req, timer):
        res = internal_union_pb2.InternalSyncBossRes()
        res.status = 0

        member = member_business.find_member(data, req.user_id)
        if member is None:
            res.ret = union_pb2.UNION_NOT_MATCHED
            return self._sync_succeed(data, req, res, timer)

        union = data.union.get()
        bosses_id = union.get_bosses_id()

        status = None
        boss_id = None
        boss_step = None
        now_boss_step = None
        total_soldier_num = None
        current_soldier_num = None

        if req.HasField("boss_step"):
            assert not req.HasField("boss_id")
            if req.boss_step < 0 or req.boss_step > len(bosses_id) - 1:
                res.ret = union_pb2.UNION_BOSS_INACTIVE
                return self._sync_succeed(data, req, res, timer)

            boss_id = bosses_id[req.boss_step]
            boss_step = req.boss_step
            boss = boss_business.get_union_boss(data, boss_id)

        if req.HasField("boss_id"):
            assert not req.HasField("boss_step")
            boss_id = req.boss_id
            boss_step = bosses_id.index(boss_id)
            boss = boss_business.get_union_boss(data, boss_id)

        if req.HasField("kill_addition"):
            assert req.HasField("user_name")
            assert req.HasField("boss_id") or req.HasField("boss_step")
            assert boss_id is not None

            boss = boss_business.get_union_boss(data, boss_id)

            if boss.is_able_to_attack():
                boss_business.attack_boss(data, boss, req.kill_addition,
                                          req.user_id, req.user_name)

        now_boss_step = union.boss_step
        status = boss.status
        total_soldier_num = boss.total_soldier_num
        current_soldier_num = boss.current_soldier_num

        res.ret = union_pb2.UNION_OK
        res.boss_step = boss_step
        res.now_boss_step = now_boss_step
        res.boss_id = boss_id
        res.boss_status = status
        res.total_soldier_num = total_soldier_num
        res.current_soldier_num = current_soldier_num

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