示例#1
0
def processCheckMacTeamNum(session, memberSession, opstype, cmd):
    if session.player.uid == session.player.teamCtrl.teamID and TeamModel.getTeamMgr(
    ).getTeamById(session.player.teamCtrl.teamID).getLenTeamMember(
    ) >= TeamModel.MAX_TEAM_NUM:
        session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                        processErrorMsgRet(opstype, cmd, '您的队伍已满,不能再加入队员'))
        return False
    if memberSession.player.uid == memberSession.player.teamCtrl.teamID and TeamModel.getTeamMgr(
    ).getTeamById(memberSession.player.teamCtrl.teamID).getLenTeamMember(
    ) >= TeamModel.MAX_TEAM_NUM:
        session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                        processErrorMsgRet(opstype, cmd, '对方的队伍已满,不能再加入队员'))
        return False
    return True
示例#2
0
    def get(self) -> Response:
        teams = TeamModel.get_all_teams()
        result = [{
            'name':
            team.team_name,
            'member':
            [user.name for user in UserModel.get_users_by_team(team)],
        } for team in teams]

        return jsonify(result)
示例#3
0
def processBrotherDel(session, opstype):
    brotherInfo = session.player.brotherCtrl.brotherInfo
    #if brotherInfo.flag:
    #    return
    for key, val in brotherInfo.getBrotherMember().iteritems():
        memberSession = ffext.getSessionMgr().findByUid(val.uid)
        if None != memberSession:
            memberSession.player.brotherCtrl.delBrother(memberSession.player)
            memberSession.sendMsg(
                MsgDef.ServerCmd.BROTHER_OPS_MSG,
                processBrotherOpsMsgRet(opstype, memberSession.player, [],
                                        True, 0))
            sendBroList(memberSession)
    TeamModel.getBrotherMgr().delBrother(brotherInfo.bid)
    #此处为及时自行数据库删除操作
    #########
    #########
    #########
    #########
    #########
    return
示例#4
0
def processTeamList(session, msg):
    opstype = msg.opstype
    ret_msg = MsgDef.TeamListMsgRet()
    ret_msg.allTeamInfo = []
    ret_msg.opstype = opstype
    teamID = session.player.teamCtrl.teamID
    #获取队伍成员信息
    if opstype == MsgDef.TeamListClientCmd.GET_TEAMLIST:
        if 0 != teamID:
            #遍历allFriend字典,获取好友属性
            for uid, val in TeamModel.getTeamMgr().getTeamById(
                    teamID).getTeamMember().iteritems():
                if teamID == val.uid:
                    leader = True
                else:
                    leader = False
                ret_msg.allTeamInfo.append(
                    processTeamPlayerMsg(val.uid, val.name, val.job,
                                         val.gender, val.level, val.hp,
                                         val.hpMax, val.mp, val.mpMax,
                                         val.anger, val.angerMax, leader))
        session.sendMsg(MsgDef.ServerCmd.TEAMLIST_MSG, ret_msg)
        return
示例#5
0
    def __init__(self, dbRow=None):
        Player.NUM += 1
        ffext.dump('Player new', Player.NUM)
        #各个模块增加的属性
        self.allPropByModule = {}
        self.mapObj = None
        self.session = None
        self.last_move_tm = time.time()
        self.friendCtrl = FriendModel.FriendCtrl()
        self.teamCtrl = TeamModel.PersonTeamCtrl(self)
        self.guildCtrl = GuildModel.PersonGuildCtrl(self)
        self.skillCtrl = SkillModel.SkillCtrl(self)
        self.taskCtrl = TaskModel.TaskCtrl(self)
        self.itemCtrl = ItemModel.ItemCtrl(self)
        self.buffCtrl = MonsterModel.BuffCtrl(self)
        self.petCtrl = PetModel.PetCtrl(self)
        self.brotherCtrl = TeamModel.PersonBrotherCtrl()
        self.mailCtrl = MailModel.MailCtrl(self)
        self.loginActCtrl = LoginRewardModel.LoginActCtrl(self)
        #竞技场相关的
        self.arenaCtrl = ArenaCtrl()
        self.marriageCtrl = MarryModel.PersonMarryCtrl(self)
        self.moneyBankCtrl = MoneyBankCtrl()
        self.tmpInfo = {}  #临时数据
        self.uid = 0
        self.name = ''
        self.job = 0
        self.gender = 0
        self.gold = 0
        self.mapname = ''
        self.x = 0
        self.y = 0
        self.level = 1
        self.exp = 0
        self.direction = 0
        #self.powerFight      = 0#战斗力 实时计算

        self.hp = 0
        self.mp = 0
        self.hpMax = 0
        self.mpMax = 0
        self.physicAttackMin = 0  #最小物理攻击
        self.physicAttackMax = 0  #最大物理攻击
        #法术攻击
        self.magicAttackMin = 0  #最小法术攻击
        self.magicAttackMax = 0  #最大法术攻击
        #物理防御
        self.physicDefendMin = 0  #最小物理防御
        self.physicDefendMax = 0  #最大物理防御
        #法术防御
        self.magicDefendMin = 0  #最小法术防御
        self.magicDefendMax = 0  #最大法术防御
        #暴击
        self.crit = 0  #暴击 影响暴击的概率	浮点数
        self.hit = 0  #命中 影响攻击时的命中率	浮点数
        self.avoid = 0  #躲避 被攻击时,影响降低被命中的概率	浮点数
        self.attackSpeed = 0  #攻击速度
        self.attackSing = 0  #攻击吟唱时间 影响释放攻击动作前的吟唱时间 吟唱时间内被攻击,有50%概率被打断,打断后需要重新吟唱,单位:秒  精确到毫秒
        self.attackInterval = 0  #两次攻击之间间隔时间,单位:秒  精确到毫秒
        self.attackDistance = 0  #攻击距离	以单位为中心的圆内可以攻击,近战标准值:100,远程值:600
        self.moveSpeed = 0  #移动速度 影响地图上移动速度,标准值:100 精确到毫秒
        self.hurtAbsorb = 0  #伤害吸收 受到伤害时,一定比例转换为生命值 百分比
        self.hpAbsorb = 0  #吸血 当对敌人造成伤害时,吸取血量恢复自身生命值 百分比
        self.pkSinValue = 0  #pk 罪恶值 即杀人数量 白:无杀人记录 橙:杀一个人后在线时间12小时内显示,被人杀死后0.1%掉落身上任一装备 红色:在线时间12小时内杀2个人以上,被人杀死后1%掉落身上任一装备
        self.modeAttack = 0  #攻击模式

        self.hurtAbsorbLimit = 0  #伤害吸收量

        #战斗力
        self.fightPower = 0
        self.sumAngerTmp = 0  #技能累计怒气是小数
        self.anger = 0  #怒气
        self.angerMax = Base.MAX_ANGER
        #名字颜色
        self.nameColor = 0
        #NPC相关的
        self.npcInfo = NpcInfo()
        #用于回调的函数容器
        self.callbackFuncs = {}
        #记录当前切磋的目标玩家
        self.ctrlQieCuo = QieCuoCtrl(self)

        self.last_logout = 0  #登出时间
        #在线时间
        self.logintime = ffext.getTime()  #不存DB
        self.gametime = 0  #离线时计算,并存DB

        #状态机
        self.fsm = None  #MonsterAI.FSM(self)
        #if dbRow:
        self.assignFromDB(dbRow)
        #安全密码验证状态
        self.isVerified = False
示例#6
0
def processChat(session, msg):
    ffext.dump('processChat', msg)
    uid = msg.uid
    #if session.isWebDebug:
    #    msg.chatMsg = msg.chatMsg.encode('utf-8')
    retVal = MsgDef.ChatMsgRet()
    ret_msg = retVal
    ret_msg.name = session.player.name
    ret_msg.uid = session.player.uid
    ret_msg.opstype = msg.opstype
    ret_msg.chatMsg = msg.chatMsg
    if len(msg.chatMsg) > 0 and msg.chatMsg[0] == '@':
        msg.opstype = MsgDef.ChatMsgCmd.MapCHAT
    #用户一对一聊天
    if msg.opstype == MsgDef.ChatMsgCmd.PERSONCHAT:
        friendSession = ffext.getSessionMgr().findByUid(msg.uid)
        if None != friendSession:
            friendSession.sendMsg(MsgDef.ServerCmd.CHAT_MSG, ret_msg)
            session.sendMsg(MsgDef.ServerCmd.CHAT_MSG, ret_msg)
            return
        ret_msg.chatMsg = '对方不在线!%d' % (msg.uid)
        session.sendMsg(MsgDef.ServerCmd.CHAT_MSG, ret_msg)
        return
    #用户世界聊天
    if msg.opstype == MsgDef.ChatMsgCmd.WORLDCHAT:
        session.broadcast(MsgDef.ServerCmd.CHAT_MSG, ret_msg)
        return
    #用户组队聊天
    if msg.opstype == MsgDef.ChatMsgCmd.TEAMCHAT:
        teamID = session.player.teamCtrl.teamID
        if 0 == teamID:
            ret_msg.chatMsg = '没有参与组队'
            session.sendMsg(MsgDef.ServerCmd.CHAT_MSG, ret_msg)
            return
        for uid, val in TeamModel.getTeamMgr().getTeamById(
                teamID).getTeamMember().iteritems():
            memberSession = ffext.getSessionMgr().findByUid(uid)
            if None != memberSession:
                memberSession.sendMsg(MsgDef.ServerCmd.CHAT_MSG, ret_msg)
        return
    #用户行会聊天
    if msg.opstype == MsgDef.ChatMsgCmd.GUILDCHAT:
        guildInfo = session.player.guildCtrl.guildInfo
        if None == guildInfo:
            ret_msg.chatMsg = '没有参与组队'
            session.sendMsg(MsgDef.ServerCmd.CHAT_MSG, ret_msg)
            return
        ret_msg.chatMsg = msg.chatMsg
        for uid, val in guildInfo.getGuildMember().iteritems():
            memberSession = ffext.getSessionMgr().findByUid(uid)
            if None != memberSession:
                memberSession.sendMsg(MsgDef.ServerCmd.CHAT_MSG, ret_msg)
        return
    #系统广播
    if msg.opstype == MsgDef.ChatMsgCmd.SYSTEMCHAT:
        ret_msg.uid = 0
        ret_msg.name = '系统管理员'
        session.broadcast(MsgDef.ServerCmd.CHAT_MSG, ret_msg)
        return
    #用户地图广播
    if msg.opstype == MsgDef.ChatMsgCmd.MapCHAT or msg.chatMsg[0] == '@':
        data = msg.chatMsg

        print(data)
        if len(data) > 1 and data[0] == '@':  #GM
            argsSrc = data.split(' ')

            args = []
            for k in argsSrc:
                if k != '':
                    args.append(k)
            ffext.dump(args)

            func = GM2FUNC.get(args[0], None)
            if func:
                func(session, args)
            ffext.dump("chat", retVal)
            session.player.broadcast(MsgDef.ServerCmd.CHAT_MSG, retVal)
            return

            #下面代码注释掉
        """
示例#7
0
def processMarryOPS(session, msg):
    #ffext.dump('processMarryOPS', msg)
    opstype = msg.opstype
    cmd = MsgDef.ClientCmd.MARRIAGE_OPS
    player = session.player

    if opstype == MsgDef.MarriageClientCmd.MARRY_QUERY_STATUS:  #查询结婚状态
        retMsg = processMarryOpsMsgRet(opstype, player,
                                       player.marriageCtrl.marryFlag, 0, '', 0)
        #print(retMsg)
        session.sendMsg(MsgDef.ServerCmd.MARRIAGE_OPS_MSG, retMsg)
        return
    elif opstype == MsgDef.MarriageClientCmd.MARRY_APPLY_TASK:
        marryTotalInfo = player.marriageCtrl.marryTotalInfo
        nextTaskId = MARRY_TASK_ID
        # if marryTotalInfo:#直接接任务
        #     if session.player.marriageCtrl.getStatus() != MsgDef.MarryStatusCmd.MARRY_STATUS_NOT:
        #         session.sendMsg(MsgDef.ServerCmd.ERROR_MSG, processErrorMsgRet(opstype, cmd, '不能领取任务!'))
        #         return
        #     session.player.marriageCtrl.setStatus(MsgDef.MarryStatusCmd.MARRY_STATUS_TASK_GO)
        #
        #     for taskid, task in session.player.taskCtrl.allTask.iteritems():
        #         session.player.taskCtrl.delTaskById(taskid)
        #         newTask = session.player.taskCtrl.addTaskById(nextTaskId, False)
        #         if newTask:
        #             DbService.getPlayerService().replaceTask(session.player, newTask, taskid)
        #         break
        #     from handler import  TaskHandler
        #     TaskHandler.processQueryTask(session)
        #     session.sendMsg(MsgDef.ServerCmd.MARRIAGE_OPS_MSG, processMarryOpsMsgRet(opstype, session.player, MsgDef.MarryStatusCmd.MARRY_STATUS_TASK_GO))
        #     DbService.getPlayerService().updateMarry(marryTotalInfo)
        #     return
        team = TeamModel.getTeamMgr().getTeamById(
            session.player.teamCtrl.teamID)
        if not team:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '请先组队!'))
            return
        if len(team.getTeamMember()) != 2:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '请先组队2人!'))
            return
        if player.isMarry():
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '你已经结婚!'))
            return
        destPlayer = None
        mateSession = None
        marryTotalInfo = None
        for key, valdata in team.getTeamMember().iteritems():
            mateSession = ffext.getSessionMgr().findByUid(valdata.uid)
            if not mateSession:
                session.sendMsg(
                    MsgDef.ServerCmd.ERROR_MSG,
                    processErrorMsgRet(opstype, cmd,
                                       '队伍异常:%d' % (valdata.uid)))
                continue
            val = mateSession.player
            if val.uid != session.player.uid:
                if val.gender == player.gender:
                    session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                                    processErrorMsgRet(opstype, cmd, '性别不符!'))
                    return
                mateUid = val.uid
                destPlayer = val
                if destPlayer.isMarry():
                    session.sendMsg(
                        MsgDef.ServerCmd.ERROR_MSG,
                        processErrorMsgRet(opstype, cmd, '对方已经结婚!'))
                    return
                husbend = player
                wife = val
                if player.gender == Base.Gender.FEMAIL:
                    husbend = val
                    wife = player
                strFlag = player.tmpInfo.get('_marry_task_apply_')
                marryTotalInfo = None
                if strFlag == None:
                    flag2 = destPlayer.tmpInfo.get('_marry_task_apply_')
                    if flag2 != None:
                        marryTotalInfo = flag2
                    else:
                        marryTotalInfo = MarryModel.getMarryMgr(
                        ).allocMarryTotalInfo(husbend, wife)
                    player.tmpInfo['_marry_task_apply_'] = marryTotalInfo
                    session.player.marriageCtrl.setStatus(
                        MsgDef.MarryStatusCmd.MARRY_STATUS_TASK_GO)

                if destPlayer.tmpInfo.get('_marry_task_apply_') == None:
                    session.sendMsg(
                        MsgDef.ServerCmd.ERROR_MSG,
                        processErrorMsgRet(opstype, cmd, '等待对方确认!'))
                    husbend.sendMsg(
                        MsgDef.ServerCmd.MARRIAGE_OPS_MSG,
                        processMarryOpsMsgRet(
                            opstype, session.player,
                            MsgDef.MarryStatusCmd.MARRY_STATUS_TASK_GO, 0, '',
                            0, 0, marryTotalInfo))
                    wife.sendMsg(
                        MsgDef.ServerCmd.MARRIAGE_OPS_MSG,
                        processMarryOpsMsgRet(
                            opstype, session.player,
                            MsgDef.MarryStatusCmd.MARRY_STATUS_TASK_GO, 0, '',
                            0, 0, marryTotalInfo))
                    return

                # marryTotalInfo = MarryModel.allockMarryInfo()

                #wife.marriageCtrl.setStatus(MsgDef.MarryStatusCmd.MARRY_STATUS_TASK_GO)
                ffext.dump('dump marry', marryTotalInfo)
                break
        #领取结婚任务         | 未婚-结婚进行中任务
        nextTaskId = MARRY_TASK_ID
        for taskid, task in session.player.taskCtrl.allTask.iteritems():
            session.player.taskCtrl.delTaskById(taskid)
            newTask = session.player.taskCtrl.addTaskById(nextTaskId, False)
            if newTask:
                DbService.getPlayerService().replaceTask(
                    session.player, newTask, taskid)
            break
        for taskid, task in destPlayer.taskCtrl.allTask.iteritems():
            destPlayer.taskCtrl.delTaskById(taskid)
            newTask = destPlayer.taskCtrl.addTaskById(nextTaskId, False)
            if newTask:
                DbService.getPlayerService().replaceTask(
                    destPlayer, newTask, taskid)
            break
        from handler import TaskHandler
        TaskHandler.processQueryTask(session)
        TaskHandler.processQueryTask(destPlayer.session)

        session.sendMsg(
            MsgDef.ServerCmd.MARRIAGE_OPS_MSG,
            processMarryOpsMsgRet(opstype, session.player,
                                  MsgDef.MarryStatusCmd.MARRY_STATUS_TASK_GO))
        destPlayer.sendMsg(
            MsgDef.ServerCmd.MARRIAGE_OPS_MSG,
            processMarryOpsMsgRet(opstype, session.player,
                                  MsgDef.MarryStatusCmd.MARRY_STATUS_TASK_GO))

        DbService.getPlayerService().addMarry(player,
                                              player.marriageCtrl.marryId,
                                              mateSession.player.uid,
                                              ffext.getTime())
        DbService.getPlayerService().updateMarry(marryTotalInfo)
        player.tmpInfo['_marry_task_apply_'] = None
        destPlayer.tmpInfo['_marry_task_apply_'] = None
        return

    elif opstype == MsgDef.MarriageClientCmd.MARRY_GIVEUP_TASK:  #13:放弃结婚任务
        if not player.marriageCtrl:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, 'CTRL错误!'))
            return
        marryTotalInfo = player.marriageCtrl.marryTotalInfo
        if not marryTotalInfo or marryTotalInfo.coupleData[
                0].status != MsgDef.MarryStatusCmd.MARRY_STATUS_TASK_GO:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '未领取任务!'))
            return
        anotherInfo = marryTotalInfo.getInfoByAnotherGender(player.gender)
        destPlayer = player.mapObj.getPlayerById(anotherInfo.uid)
        mateSession = None
        if destPlayer:
            mateSession = destPlayer.session

        marryTotalInfo.getInfoByGender(
            player.gender).status = MsgDef.MarryStatusCmd.MARRY_STATUS_NOT
        marryTotalInfo.getInfoByAnotherGender(
            player.gender).status = MsgDef.MarryStatusCmd.MARRY_STATUS_NOT

        MarryModel.getMarryMgr().delMarryById(marryTotalInfo.marryId)
        DbService.getPlayerService().updateMarryDivorce(marryTotalInfo.marryId)
        DbService.getPlayerService().updateMarryDivorcePlayer(player.uid)
        DbService.getPlayerService().updateMarryDivorcePlayer(anotherInfo.uid)

        # 提交任务             | 结婚进行中任务 - 已婚
        task = session.player.taskCtrl.getTask(MARRY_TASK_ID)
        if task:
            from model import TaskModel
            task.status = TaskModel.TaskStatus.FINISH
            session.player.taskCtrl.checkNewTask(task)
            from handler import TaskHandler
            TaskHandler.processQueryTask(session)

            ffext.dump('dump marry', marryTotalInfo)

        player.marriageCtrl.divorceForce()
        player.tmpInfo['_marry_task_apply_'] = None
        # 发送回包
        ret_msg = processMarryOpsMsgRet(opstype, session.player,
                                        MsgDef.MarryStatusCmd.MARRY_STATUS_NOT)
        session.sendMsg(MsgDef.ServerCmd.MARRIAGE_OPS_MSG, ret_msg)

        if destPlayer:
            task2 = destPlayer.taskCtrl.getTask(MARRY_TASK_ID)
            if task2:
                from model import TaskModel
                task2.status = TaskModel.TaskStatus.FINISH
                destPlayer.taskCtrl.checkNewTask(task2)
                from handler import TaskHandler
                TaskHandler.processQueryTask(mateSession)

            destPlayer.marriageCtrl.divorceForce()
            # 发送回包
            ret_msg = processMarryOpsMsgRet(
                opstype, destPlayer, MsgDef.MarryStatusCmd.MARRY_STATUS_NOT)
            mateSession.sendMsg(MsgDef.ServerCmd.MARRIAGE_OPS_MSG, ret_msg)

            destPlayer.tmpInfo['_marry_task_apply_'] = None

        return
    elif opstype == MsgDef.MarriageClientCmd.MARRY_COMMIT_TASK:
        if not player.marriageCtrl:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, 'CTRL错误!'))
            return
        marryTotalInfo = player.marriageCtrl.marryTotalInfo
        if not marryTotalInfo:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '未领取任务!'))
            return
        anotherInfo = marryTotalInfo.getInfoByAnotherGender(player.gender)
        destPlayer = player.mapObj.getPlayerById(anotherInfo.uid)
        #ffext.dump('MARRRRRRRRRRRRR!')
        task = player.taskCtrl.getTask(MARRY_TASK_ID)
        ffext.dump('MARRYTASK', task)
        if task:
            from model import TaskModel
            task.status = TaskModel.TaskStatus.FINISH
            player.taskCtrl.checkNewTask(task)
            from handler import TaskHandler
            TaskHandler.processQueryTask(session)

            ffext.dump('dump marry', marryTotalInfo)
            marryTotalInfo.getInfoByGender(
                player.gender
            ).status = MsgDef.MarryStatusCmd.MARRY_STATUS_TASK_FINISH

        mateSession = None
        if destPlayer:
            mateSession = destPlayer.session

        status1 = marryTotalInfo.getInfoByGender(player.gender).status
        status2 = marryTotalInfo.getInfoByAnotherGender(player.gender).status
        #ffext.dump('STATUS1',status1)
        #ffext.dump('STATUS2',status2)
        #ffext.dump('MARRRRRRRRRRRRR!')
        if status1 == MsgDef.MarryStatusCmd.MARRY_STATUS_TASK_FINISH and status1 == status2:
            marryTotalInfo.getInfoByGender(
                player.gender
            ).status = MsgDef.MarryStatusCmd.MARRY_STATUS_MARRIED
            marryTotalInfo.getInfoByAnotherGender(
                player.gender
            ).status = MsgDef.MarryStatusCmd.MARRY_STATUS_MARRIED
        DbService.getPlayerService().updateMarry(marryTotalInfo)
        session.sendMsg(
            MsgDef.ServerCmd.MARRIAGE_OPS_MSG,
            processMarryOpsMsgRet(
                opstype, destPlayer,
                MsgDef.MarryStatusCmd.MARRY_STATUS_TASK_FINISH))
        destPlayer.sendMsg(
            MsgDef.ServerCmd.MARRIAGE_OPS_MSG,
            processMarryOpsMsgRet(
                opstype, destPlayer,
                MsgDef.MarryStatusCmd.MARRY_STATUS_TASK_FINISH))

        return
    elif opstype == MsgDef.MarriageClientCmd.MARRY_SEND:
        # 发请帖
        friends = session.player.friendCtrl.getFriend()
        friends_lst = []
        for k, v in friends.iteritems():
            friends_lst.append(v.name)
        #ffext.dump('Friends_lst', friends_lst)
        msg.visitors = friends_lst
        ffext.dump('QINGTIEMSG', msg)
        if msg.visitors == None:
            return
        if len(msg.visitors) > WEDDING_SEND_MAX_PLAYER:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '邀请人数太多了!'))
            return
        if len(msg.msg) > WEDDING_SEND_MAX_STR:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '请帖文字太长了!'))
            return
        marryTotalInfo = session.player.marriageCtrl.marryTotalInfo
        marryTotalInfo.flagXiTie += 1
        hasSend = []
        for k in msg.visitors:
            if k in hasSend:
                continue
            hasSend.append(k)
            #查找所有的被邀请者的“姓名”
            otherSession = ffext.getSessionMgr().getSessionByName(k)
            if otherSession:
                toPlayer = otherSession.player
                msg = msg.msg + '\n\n\n\n' + '系统提醒:请去结婚界面确认是否参加婚礼!'
                title = None
                #ffext.dump('喜帖!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!')
                session.player.mailCtrl.sendMail(toPlayer.uid, 0, title, msg)
                otherSession.sendMsg(
                    MsgDef.ServerCmd.MARRIAGE_OPS_MSG,
                    processMarryOpsMsgRet(
                        opstype, session.player,
                        MsgDef.MarryStatusCmd.MARRY_STATUS_MARRIED, 0,
                        msg.msg))
        #状态变化,更新数据库
        DbService.getPlayerService().updateMarry(marryTotalInfo)
        session.sendMsg(
            MsgDef.ServerCmd.MARRIAGE_OPS_MSG,
            processMarryOpsMsgRet(opstype, session.player,
                                  MsgDef.MarryStatusCmd.MARRY_STATUS_MARRIED,
                                  0, msg.msg))
        return
    elif opstype == MsgDef.MarriageClientCmd.MARRY_APPLY_WEDDING:  #申请结婚
        marryTotalInfo = player.marriageCtrl.marryTotalInfo
        if not marryTotalInfo:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '先完成結婚任務!'))
            return
        if marryTotalInfo.flagWeding != MsgDef.WeddingFlagCmd.WEDDING_NOT_APPLY and marryTotalInfo.flagWeding != MsgDef.WeddingFlagCmd.WEDDING_FAIL:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '已经申请过!'))
            return

        mate = marryTotalInfo.getInfoByAnotherGender(player.gender)
        otherPlayer = player.mapObj.getPlayerById(mate.uid)
        if not otherPlayer:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '配有没有在线!'))
            return
        strFlag = player.tmpInfo.get('_wedding_apply_')
        if strFlag == None:
            player.tmpInfo['_wedding_apply_'] = True
        strFlag2 = otherPlayer.tmpInfo.get('_wedding_apply_')
        if strFlag2 == None:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '等待配偶确认!'))
            ret_msg = processMarryOpsMsgRet(opstype, player)
            session.sendMsg(MsgDef.ServerCmd.MARRIAGE_OPS_MSG, ret_msg)
            ret_msg = processMarryOpsMsgRet(opstype, otherPlayer)
            otherPlayer.sendMsg(MsgDef.ServerCmd.MARRIAGE_OPS_MSG, ret_msg)
            return
        player.tmpInfo['_wedding_apply_'] = None
        otherPlayer.tmpInfo['_wedding_apply_'] = None

        marryTotalInfo.flagWeding = MsgDef.WeddingFlagCmd.WEDDING_APPLYED
        leftSec = WEDDING_INTERVAL
        marryTotalInfo.tmWedding = ffext.getTime() + leftSec  #1 分钟后开始

        marryId = marryTotalInfo.marryId

        def cb():
            MarryModel.handleTimerWedding(marryId)

        ffext.timer(leftSec * 1000, cb)
        ret_msg = processMarryOpsMsgRet(opstype, player)
        session.sendMsg(MsgDef.ServerCmd.MARRIAGE_OPS_MSG, ret_msg)
        #状态变化,更新数据库
        DbService.getPlayerService().updateMarry(marryTotalInfo)

        if mate:
            marryPlayer = ffext.getSessionMgr().findByUid(mate.uid)
            if marryPlayer:
                marryPlayer.sendMsg(MsgDef.ServerCmd.MARRIAGE_OPS_MSG, ret_msg)
        return
    elif opstype == MsgDef.MarriageClientCmd.MARRY_QUERY_ALL_MARRIAGE:  ##12:查询所有夫妻,方便参加婚礼
        allMarriage = MarryModel.getAllMarriage()
        ret_msg = processMarryOpsMsgRet(opstype, None)
        ret_msg.allMarriageInfo = []
        num = 0
        for k, marryTotalInfo in allMarriage.iteritems():
            num += 1
            if num >= 100:
                break
            if marryTotalInfo.flagWeding != MsgDef.WeddingFlagCmd.WEDDING_APPLYED:
                continue
            baseInfo = MsgDef.MarriageBaseInfo(marryTotalInfo.marryId, [], [])
            for k in marryTotalInfo.coupleData:
                num += 1
                if num >= 100:
                    break
                tmpmsg = MsgDef.MarriagePlayerMsg()
                tmpmsg.uid = k.uid
                tmpmsg.name = k.name
                tmpmsg.job = k.job
                tmpmsg.gender = k.gender
                tmpmsg.level = k.level
                tmpmsg.status = k.status
                baseInfo.coupleData.append(tmpmsg)
            for k in marryTotalInfo.listAttends:
                num += 1
                if num >= 100:
                    break
                tmpmsg = MsgDef.MarriagePlayerMsg()
                tmpmsg.uid = k.uid
                tmpmsg.name = k.name
                tmpmsg.job = k.job
                tmpmsg.gender = k.gender
                tmpmsg.level = k.level
                tmpmsg.status = k.status
                baseInfo.listAttends.append(tmpmsg)
            ret_msg.allMarriageInfo.append(baseInfo)
        session.sendMsg(MsgDef.ServerCmd.MARRIAGE_OPS_MSG, ret_msg)
    elif opstype == MsgDef.MarriageClientCmd.MARRY_ATTEND_WEEDING:
        # 参加婚礼,扣礼金,发道具
        marryTotalInfo = MarryModel.getMarryMgr().getMarryTotalInfo(
            msg.marryId)
        #marryPlayer = ffext.getSessionMgr().findByUid(msg.marryUid)
        if not marryTotalInfo:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, "对方还未结婚!"))
            return
        gold = 500
        item1 = 1040188
        item2 = 1040189
        if player.gold < gold:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, "金币不足500!"))
            return
        for k in marryTotalInfo.listAttends:
            if k.uid == player.uid:
                session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                                processErrorMsgRet(opstype, cmd, '不可重复报名!'))
                return
        player.addGold(gold * -1, True)
        itemObj = player.itemCtrl.addItemByCfgId(item1)
        if not itemObj:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '系统忙!'))
        # return
        itemObj2 = player.itemCtrl.addItemByCfgId(item2)
        if not itemObj2:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '系统忙!'))
            #return

        ItemHandler.processQueryPkg(session)
        # 增加总礼金,添加到列表
        marryTotalInfo.totalGold += gold
        #playerTmpInfo = MarryModel.PlayerMarryInfo()
        #playerTmpInfo.setPlayerMarryInfo(player)
        playerTmpInfo = MsgDef.MarriagePlayerMsg(player.uid, player.name,
                                                 player.job, player.gender,
                                                 player.level)
        marryTotalInfo.listAttends.append(playerTmpInfo)
        DbService.getPlayerService().updateMarry(marryTotalInfo)

        #(opstype, player, flag = 0, delTime = 0, msg = '', gold = 0, skillId = 0, marryTotalInfo = None):
        ret_msg = processMarryOpsMsgRet(
            opstype, session.player,
            MsgDef.MarryStatusCmd.MARRY_STATUS_MARRIED, 0, '', gold, 0,
            marryTotalInfo)
        addItem2MarryPlayerMsg(ret_msg, itemObj, 1)
        addItem2MarryPlayerMsg(ret_msg, itemObj2, 1)

        session.sendMsg(MsgDef.ServerCmd.MARRIAGE_OPS_MSG, ret_msg)
        return
    elif opstype == MsgDef.MarriageClientCmd.MARRY_NEW_LIST:
        # 新房列表
        retMsg = processMarryOpsMsgRet(
            opstype, session.player,
            MsgDef.MarryStatusCmd.MARRY_STATUS_MARRIED, 0, '', 0)
        allMarriage = MarryModel.getAllMarriage()
        for k, marryTotalInfo in allMarriage.iteritems():
            #if marryTotalInfo.flagWeding != MsgDef.WeddingFlagCmd.WEDDING_APPLYED and marryTotalInfo.flagWeding != MsgDef.WeddingFlagCmd.WEDDING_FINISH:
            #    continue
            if len(marryTotalInfo.coupleData
                   ) == 2 and marryTotalInfo.coupleData[
                       0].status == MsgDef.MarryStatusCmd.MARRY_STATUS_MARRIED:
                marryMsg = processMarriageVisitListBaseInfo(
                    marryTotalInfo.marryId, marryTotalInfo.coupleData[0],
                    marryTotalInfo.coupleData[1], marryTotalInfo.tmWedding)
                retMsg.listVisitHouseInfo.append(marryMsg)
            pass
        session.sendMsg(MsgDef.ServerCmd.MARRIAGE_OPS_MSG, retMsg)
        return
    elif opstype == MsgDef.MarriageClientCmd.MARRY_VISIT_HOUSE:
        # 我要参观其他新房
        mId = msg.marryId
        allMarriage = MarryModel.getAllMarriage()
        marryInfo = allMarriage.get(mId)
        if not marryInfo:
            session.sendMsg(
                MsgDef.ServerCmd.ERROR_MSG,
                processErrorMsgRet(opstype, cmd, '结婚ID:%d不存在!' % (mId)))
            return
        mItems = []
        for k, xItem in marryInfo.listSetItems.iteritems():
            #mItems.append(xItem)
            mItems.append(MsgDef.MarriageItem(k, xItem.get('itemCfgId', 0)))
        marryMsg = processMarriageVisitListBaseInfo(mId,
                                                    marryInfo.coupleData[0],
                                                    marryInfo.coupleData[1],
                                                    marryInfo.tmWedding,
                                                    mItems)

        retMsg = processMarryOpsMsgRet(
            opstype, session.player,
            MsgDef.MarryStatusCmd.MARRY_STATUS_MARRIED, 0, '', 0)
        retMsg.otherHouseInfo = marryMsg
        session.sendMsg(MsgDef.ServerCmd.MARRIAGE_OPS_MSG, retMsg)
        ffext.dump('xxx', retMsg)
        return
    elif opstype == MsgDef.MarriageClientCmd.MARRY_SET_HOUSE_ITEM:
        # 装点新房
        if not player.isMarry():
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, "请先结婚!"))
            return
        if msg.housePos < MsgDef.MarriageHousePos.MARRY_HOUSE_POS_1 or \
            msg.housePos > MsgDef.MarriageHousePos.MARRY_HOUSE_POS_6:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, "位置错误!"))
            return

        itemToSetCfgId = 0
        item = player.itemCtrl.getItem(msg.houseItemId)
        if item:
            itemToSetCfgId = item.itemCfg.cfgId
            player.itemCtrl.delItem(msg.houseItemId)
        else:
            itemToSetCfgId = msg.houseItemId
            setItemCfg = ItemModel.getItemMgr().getCfgByCfgId(itemToSetCfgId)
            if not setItemCfg:
                session.sendMsg(
                    MsgDef.ServerCmd.ERROR_MSG,
                    processErrorMsgRet(
                        opstype, cmd,
                        "Item Id not exists! %d" % (msg.houseItemId)))
                return
            setItemHaveNum = player.itemCtrl.countItemNumbyCfgId(
                itemToSetCfgId)
            if setItemHaveNum < 1:
                session.sendMsg(
                    MsgDef.ServerCmd.ERROR_MSG,
                    processErrorMsgRet(opstype, cmd, "You do not have Item!"))
                return
            # 删除道具
            player.itemCtrl.subItemNumByCfgId(itemToSetCfgId, 1)
        # 设置到marriageCtl.marryTotalInfo
        player.marriageCtrl.marryTotalInfo.addSetItem(msg.housePos,
                                                      itemToSetCfgId)

        ret_msg = processMarryOpsMsgRet(
            opstype, session.player,
            MsgDef.MarryStatusCmd.MARRY_STATUS_MARRIED, 0, '', 0)
        #addItem2MarryPlayerMsgEx(ret_msg, msg.housePos, itemToSetCfgId)
        session.sendMsg(MsgDef.ServerCmd.MARRIAGE_OPS_MSG, ret_msg)

        #更新数据库
        itemStr = player.marriageCtrl.marryTotalInfo.toJson4SetItems()
        extraStr = player.marriageCtrl.marryTotalInfo.toJson4Extra()
        DbService.getPlayerService().updateMarryItem(
            player.uid, player.marriageCtrl.marryId, itemStr, extraStr)
        return
    elif opstype == MsgDef.MarriageClientCmd.MARRY_LEARN_COUPLE_SKILL:
        # 学习夫妻技能
        skillLevel = 1
        retErr = player.skillCtrl.learnSkill(WEDDING_SKILL_ID, skillLevel)
        if retErr:
            session.sendMsg(
                MsgDef.ServerCmd.ERROR_MSG,
                processErrorMsgRet(
                    opstype, cmd,
                    '学习技能%d失败,原因:%s!' % (WEDDING_SKILL_ID, retErr)))
            return
        session.sendMsg(MsgDef.ServerCmd.LEARN_SKILL,
                        MsgDef.LearnSkillRet(WEDDING_SKILL_ID, skillLevel))
        retMsg = processMarryOpsMsgRet(
            opstype, session.player,
            MsgDef.MarryStatusCmd.MARRY_STATUS_MARRIED, 0, '', 0,
            WEDDING_SKILL_ID)
        session.sendMsg(MsgDef.ServerCmd.MARRIAGE_OPS_MSG, retMsg)
        return
    elif opstype == MsgDef.MarriageClientCmd.MARRY_DIVORCE_NORMAL:
        # 和谐离婚             | 已婚-离婚中-(update消息)-未婚
        if player.marriageCtrl.marryFlag != MsgDef.MarryStatusCmd.MARRY_STATUS_MARRIED:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '不可以离婚!'))
            return
        marryTotalInfo = player.marriageCtrl.marryTotalInfo
        myMarryInfo = player.marriageCtrl.marryTotalInfo.getInfoByGender(
            player.gender)
        if not myMarryInfo:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '未知错误!'))
            return
        mateMarryInfo = player.marriageCtrl.marryTotalInfo.getInfoByAnotherGender(
            player.gender)
        if not mateMarryInfo:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '未知错误!!'))
            return
        matePlayer = player.mapObj.getPlayerById(mateMarryInfo.uid)
        #ffext.dump('mateplayer', matePlayer)
        if not matePlayer:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '配偶没有在线!'))
            return
        player.tmpInfo['_marry_divorce_apply_'] = True
        if matePlayer.tmpInfo.get('_marry_divorce_apply_') == None:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '等待配偶确认!'))
            ret_msg = processMarryOpsMsgRet(
                opstype, session.player,
                MsgDef.MarryStatusCmd.MARRY_STATUS_DIVORCING, 0, '', 0)
            if ret_msg.baseInfo.coupleData[0].uid == player.uid:
                ret_msg.baseInfo.coupleData[
                    0].status = MsgDef.MarryStatusCmd.MARRY_STATUS_DIVORCING
            else:
                ret_msg.baseInfo.coupleData[
                    1].status = MsgDef.MarryStatusCmd.MARRY_STATUS_DIVORCING
            #if ret_msg.baseInfo.coupleData[0].statu != ret_msg.baseInfo.coupleData[1].statu:
            #ret_msg.baseInfo.coupleData[0].status = MsgDef.MarryStatusCmd.MARRY_STATUS_MARRIED
            #ret_msg.baseInfo.coupleData[1].status = MsgDef.MarryStatusCmd.MARRY_STATUS_MARRIED
            session.sendMsg(MsgDef.ServerCmd.MARRIAGE_OPS_MSG, ret_msg)
            matePlayer.sendMsg(MsgDef.ServerCmd.MARRIAGE_OPS_MSG, ret_msg)
            return

        player.tmpInfo['_marry_divorce_apply_'] = None
        matePlayer.tmpInfo['_marry_divorce_apply_'] = None

        myMarryInfo.status = MsgDef.MarryStatusCmd.MARRY_STATUS_DIVORCING
        mateMarryInfo.status = MsgDef.MarryStatusCmd.MARRY_STATUS_DIVORCING

        allFlag = True
        delTime = ffext.getTime() + WEDDING_END_INTERVAL
        # 发送回包
        ret_msg = processMarryOpsMsgRet(
            opstype, session.player,
            MsgDef.MarryStatusCmd.MARRY_STATUS_DIVORCING, 0, '', 0)
        if allFlag:
            ret_msg.delTime = delTime
        player.skillCtrl.deleteSkill(WEDDING_SKILL_ID, True)
        matePlayer.skillCtrl.deleteSkill(WEDDING_SKILL_ID, True)
        from handler import SkillHandler
        SkillHandler.processQuerySkill(session)
        SkillHandler.processQuerySkill(matePlayer.session)
        session.sendMsg(MsgDef.ServerCmd.MARRIAGE_OPS_MSG, ret_msg)
        matePlayer.sendMsg(MsgDef.ServerCmd.MARRIAGE_OPS_MSG, ret_msg)

        #离婚确定定时器
        def divorceCB():
            MarryModel.handleTimerDivorce(marryTotalInfo.marryId)

        if allFlag:
            # 对方也和谐离婚, 定时器开始
            if WEDDING_END_INTERVAL == 1:
                ffext.timer(WEDDING_END_INTERVAL * 100, divorceCB)
            else:
                ffext.timer(WEDDING_END_INTERVAL * 1000, divorceCB)
            marryTotalInfo.tmEndWedding = delTime
            DbService.getPlayerService().updateMarry(
                player.marriageCtrl.marryTotalInfo)
    elif opstype == MsgDef.MarriageClientCmd.MARRY_DIVORCE_QUIT:  #取消离婚
        myMarryInfo = player.marriageCtrl.marryTotalInfo.getInfoByGender(
            player.gender)
        if myMarryInfo.status != MsgDef.MarryStatusCmd.MARRY_STATUS_DIVORCING:
            if player.tmpInfo.get('_marry_divorce_apply_') != None:
                player.tmpInfo['_marry_divorce_apply_'] = None
                ret_msg = processMarryOpsMsgRet(
                    opstype, session.player,
                    MsgDef.MarryStatusCmd.MARRY_STATUS_MARRIED, 0, '')
                session.sendMsg(MsgDef.ServerCmd.MARRIAGE_OPS_MSG, ret_msg)

                mateInfo = player.marriageCtrl.marryTotalInfo.getInfoByAnotherGender(
                    player.gender)
                matePlayer = player.mapObj.getPlayerById(mateInfo.uid)
                if matePlayer:
                    matePlayer.sendMsg(MsgDef.ServerCmd.MARRIAGE_OPS_MSG,
                                       ret_msg)
                return
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '未申请和谐离婚!'))
            return
        myMarryInfo.status = MsgDef.MarryStatusCmd.MARRY_STATUS_MARRIED
        mateInfo = player.marriageCtrl.marryTotalInfo.getInfoByAnotherGender(
            player.gender)
        mateInfo.status = MsgDef.MarryStatusCmd.MARRY_STATUS_MARRIED
        DbService.getPlayerService().updateMarry(
            player.marriageCtrl.marryTotalInfo)
        # 发送回包
        ret_msg = processMarryOpsMsgRet(
            opstype, session.player,
            MsgDef.MarryStatusCmd.MARRY_STATUS_MARRIED, 0, '')
        session.sendMsg(MsgDef.ServerCmd.MARRIAGE_OPS_MSG, ret_msg)
        return
    elif opstype == MsgDef.MarriageClientCmd.MARRY_DIVORCE_FORCE:
        # 强制离婚             | 已婚-未婚
        if player.marriageCtrl.marryFlag != MsgDef.MarryStatusCmd.MARRY_STATUS_MARRIED:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '不可以离婚!'))
            return
        needGold = 1000000
        if player.gold < needGold:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, "金币不足!"))
            return
        marryTotalInfo = player.marriageCtrl.marryTotalInfo
        if not marryTotalInfo:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '未领取任务!'))
            return
        oldMarryId = marryTotalInfo.marryId
        anotherInfo = marryTotalInfo.getInfoByAnotherGender(player.gender)
        oldMateId = anotherInfo.uid
        matePlayer = player.mapObj.getPlayerById(anotherInfo.uid)
        player.addGold(needGold * -1, True)
        matePlayer.addGold(needGold, True)
        MarryModel.getMarryMgr().delMarryById(marryTotalInfo.marryId)

        mateSession = None
        from handler import SkillHandler
        if matePlayer:
            mateSession = matePlayer.session
            matePlayer.marriageCtrl.divorceForce()
            matePlayer.skillCtrl.deleteSkill(WEDDING_SKILL_ID, True)
            SkillHandler.processQuerySkill(mateSession)
        player.marriageCtrl.divorceForce()

        player.skillCtrl.deleteSkill(WEDDING_SKILL_ID, True)
        SkillHandler.processQuerySkill(session)

        # 发送回包
        ret_msg = processMarryOpsMsgRet(opstype, session.player,
                                        MsgDef.MarryStatusCmd.MARRY_STATUS_NOT,
                                        0, '', needGold)
        session.sendMsg(MsgDef.ServerCmd.MARRIAGE_OPS_MSG, ret_msg)

        if mateSession:
            #up_msg = processMarriageUpdateRet(opstype, player, MsgDef.MarryStatusCmd.MARRY_STATUS_NOT, None)
            mateSession.sendMsg(MsgDef.ServerCmd.MARRIAGE_OPS_MSG, ret_msg)
            return

        # 更新数据库
        DbService.getPlayerService().updateMarryDivorce(oldMarryId)
        DbService.getPlayerService().updateMarryDivorcePlayer(player.uid)
        DbService.getPlayerService().updateMarryDivorcePlayer(oldMateId)
        return
示例#8
0
    def handleDrop(self, objAttackKill):
        if objAttackKill.getType() != Base.PLAYER:
            return

        objAttack = objAttackKill

        #击杀血量最多的人,给装备奖励
        maxObj = objAttackKill
        maxHurt = 0
        for uid, data in self.allHurtCount.iteritems():
            player = self.mapObj.getPlayerById(uid)
            if not player:
                continue
            if data.hurt > maxHurt:
                maxObj = player
                maxHurt = data.hurt
        maxTeam = None
        maxTeamHurt = 0
        for uid, data in self.allTeamHurtCount.iteritems():
            from model import TeamModel
            team = TeamModel.getTeamMgr().getTeamById(uid)
            if not team:
                continue
            if data.hurt > maxTeamHurt:
                maxTeam = team
                maxTeamHurt = data.hurt
        #初始化数据,方便复活
        self.allHurtCount = {}
        self.allTeamHurtCount = {}

        objAttack.addExp(self.propCfg.expval, True)
        burstItemList = []
        from handler import ItemHandler

        def burstItemCallBack(itemCfgId, num):
            burstItemList.append((itemCfgId, num))

        def giveItemById(obj, retMsg, itemCfgId, num):
            if itemCfgId == 0:  # 金币
                obj.addGold(num, True)
                return
            item = obj.itemCtrl.addItemByCfgId(itemCfgId, num)
            if item:
                ffext.dump('whenDie itemEnterMap', item.itemCfg.name, num)

                # self.mapObj.itemEnterMap(item, self.x + 1, self.y + 1)
                if item.__class__ == list:
                    for k in item:
                        retItem = MsgDef.Item()
                        ItemHandler.buildItem(retItem, k)
                        retMsg.items.append(retItem)
                else:
                    retItem = MsgDef.Item()
                    ItemHandler.buildItem(retItem, item)
                    retMsg.items.append(retItem)
            return

        def burstItemCallBackName(name, num):
            from model import ItemModel
            itemCfg = ItemModel.getItemMgr().getCfgByName(name)
            if itemCfg:
                burstItemCallBack(itemCfg.cfgId, num)
            else:
                ffext.error('burstItemCallBackName %s %d' % (name, num))
            return

        for k in self.propCfg.allBurstCfg:
            k.genBurst(burstItemCallBackName)

        burstBagCfg = getMonsterMgr().cfgLevel2Drop.get(self.propCfg.level)
        if burstBagCfg:
            ffext.dump('burstBagCfg', burstBagCfg)
            # 1	根据表【怪物掉落包个数】获得该等级怪物的掉落物品的个数
            # 2	每个包掉落概率:根据怪物的等级和类型,获得是否该包是否掉落
            # 3	金币数目:怪物实际掉落金币=怪物等级金币*怪物的金币倍数
            # 4	物品:每一个掉落包从【金币/物品1/物品2/物品3/物品4】中随机一个
            # 5	若随机到【/物品1/物品2/物品3/物品4】,寻找制定的掉落包ID内物品
            monType = self.propCfg.getMonDifficultyType()
            num = burstBagCfg.numList[monType]
            rate = burstBagCfg.rateList[monType]
            dropBagList = burstBagCfg.bagIdList
            for k in range(num):
                rand = random.randint(1, 100)
                ffext.dump('rate trace', rate, rand, len(dropBagList))
                if rate >= rand and len(dropBagList) > 0:  # 爆落
                    destBagId = dropBagList[rand % len(dropBagList)]
                    ffext.dump('rate trace', rate, rand, len(dropBagList),
                               destBagId)
                    if destBagId == 0:  # 金币
                        gold = random.randint(burstBagCfg.goldMin,
                                              burstBagCfg.goldMax)
                        burstItemCallBack(
                            destBagId,
                            gold * self.propCfg.expgoldtimes)  # *怪物的金币倍数
                        continue
                    destBagCfg = getMonsterMgr().bagid2cfg.get(destBagId)
                    if destBagCfg:
                        for itemCfgId in destBagCfg.itemIdList:
                            burstItemCallBack(itemCfgId, 1)
        ffext.dump('handledrop', burstItemList, objAttack.name, maxHurt,
                   maxTeamHurt)
        if maxHurt >= maxTeamHurt:  #个人获得道具
            objAttack = maxObj
            retMsg = MsgDef.MonserBurstItemsRet(self.uid, objAttack.uid, [],
                                                self.propCfg.expval, 0)
            for k in burstItemList:
                giveItemById(objAttack, retMsg, k[0], k[1])
            if len(retMsg.items) > 0:
                ItemHandler.processQueryPkg(objAttack.session)
            objAttack.sendMsg(MsgDef.ServerCmd.MONSTER_BURST_ITEMS, retMsg)
            return
        else:  #团队获得道具
            allPlayers = []
            for k, v in maxTeam.getTeamMember().iteritems():
                p = self.mapObj.getPlayerById(k)
                if p:
                    allPlayers.append(p)
            if not allPlayers:
                return
            objPrize = allPlayers[random.randint(0, len(allPlayers) - 1)]
            retMsg = MsgDef.MonserBurstItemsRet(self.uid, objPrize.uid, [], 0,
                                                0)
            objPrizeRef = weakref.ref(objPrize)

            def tmpPrizeCallBack():
                objPrize = objPrizeRef()
                if not objPrize:
                    return
                for k in burstItemList:
                    giveItemById(objPrize, retMsg, k[0], k[1])
                if len(retMsg.items) > 0:
                    ItemHandler.processQueryPkg(objPrize.session)

            retMsg.teamBurstInfo = []
            callbackArg = {'players': {}, 'prizecallback': tmpPrizeCallBack}
            for arg in allPlayers:
                randNum = 1
                if arg == objPrize:
                    randNum = 6
                else:
                    randNum = random.randint(1, 5)
                retMsg.teamBurstInfo.append(
                    MsgDef.BurstRandInfo(arg.uid, arg.name, randNum))
                callbackArg[arg.uid] = arg.name
            for k in burstItemList:
                ffext.dump('busrt info', k)
                from model import ItemModel
                itemCfg = ItemModel.getItemMgr().getCfgByCfgId(k[0])
                if itemCfg:
                    retItem = MsgDef.Item()
                    ItemModel.tmpBuildItem(retItem, itemCfg)
                    retMsg.items.append(retItem)

            def timercb():
                ffext.dump("timercb teamburst...")
                cb = callbackArg['prizecallback']
                if cb:
                    callbackArg['prizecallback'] = None
                    cb()
                return

            ffext.timer(5 * 1000, timercb)
            ffext.dump('monter burst items', retMsg)
            for objAttack in allPlayers:
                retMsg.callbackId = objPrize.addCallBack(
                    burstCallBack, callbackArg)
                objAttack.sendMsg(MsgDef.ServerCmd.MONSTER_BURST_ITEMS, retMsg)
        return
示例#9
0
def processBrotherOps2(session, msg):  #0表示邀请别人一起结义
    opstype = msg.opstype
    cmd = MsgDef.ClientCmd.BROTHER_OPS
    #ffext.dump('processBrotherrOps', msg)
    if opstype == MsgDef.BrotherClientCmd.INVITE_ADD_BROTHER:
        #获取用户邀请结义的ID
        uid1 = msg.uid1
        uid2 = msg.uid2
        uid = session.player.uid
        memberSession1 = ffext.getSessionMgr().findByUid(uid1)
        memberSession2 = ffext.getSessionMgr().findByUid(uid2)
        #判断用户是否满足结义条件
        if not processCheckAddBrother(session, memberSession1, memberSession2,
                                      opstype, cmd):
            return
        if TeamModel.BrotherFlag.flag1 != session.player.brotherCtrl.brotherFlag or TeamModel.BrotherFlag.flag1 != memberSession1.player.brotherCtrl.brotherFlag or TeamModel.BrotherFlag.flag1 != memberSession2.player.brotherCtrl.brotherFlag:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '用户不满足结义条件。'))
            return
        #执行邀请代码,将用户加入至待验证列表
        session.player.brotherCtrl.AddBrotherInviter(uid1, uid2)
        memberSession1.player.brotherCtrl.AddBrotherInviter(uid, uid2)
        memberSession2.player.brotherCtrl.AddBrotherInviter(uid1, uid)
        #将邀请信息发给对方
        allBrotherInfo = []
        allBrotherInfo.append(processBrotherOpsMsg(session.player, True))
        allBrotherInfo.append(processBrotherOpsMsg(memberSession1.player,
                                                   True))
        allBrotherInfo.append(processBrotherOpsMsg(memberSession2.player,
                                                   True))
        session.sendMsg(
            MsgDef.ServerCmd.BROTHER_OPS_MSG,
            processBrotherOpsMsgRet(opstype, session.player, allBrotherInfo,
                                    True, 0))
        memberSession1.sendMsg(
            MsgDef.ServerCmd.BROTHER_OPS_MSG,
            processBrotherOpsMsgRet(opstype, session.player, allBrotherInfo,
                                    True, 0))
        memberSession2.sendMsg(
            MsgDef.ServerCmd.BROTHER_OPS_MSG,
            processBrotherOpsMsgRet(opstype, session.player, allBrotherInfo,
                                    True, 0))

        #15秒后如果用户未确定结义状态改变,则将结义状态初始化(以后添加)
        def cb():
            processBrotherDelay(session, TeamModel.BrotherFlag.flag2, opstype,
                                cmd, '存在用户未及时同意结义,所有结义归零')
            return

        #ffext.timer(15 * 1000, cb)
        return
    if msg.opstype == MsgDef.BrotherClientCmd.VERIFY_INVIT_ADD_BROTHER:
        #判断用户是否满足结义条件
        memberSession1 = ffext.getSessionMgr().findByUid(
            session.player.brotherCtrl.inviter[0])
        memberSession2 = ffext.getSessionMgr().findByUid(
            session.player.brotherCtrl.inviter[1])
        if not processCheckAddBrother(session, memberSession1, memberSession2,
                                      opstype, cmd):
            return
        #同意结义
        session.player.brotherCtrl.verifyBrotherInviter()
        session.sendMsg(
            MsgDef.ServerCmd.BROTHER_OPS_MSG,
            processBrotherOpsMsgRet(opstype, session.player, [], True, 0))
        memberSession1.sendMsg(
            MsgDef.ServerCmd.BROTHER_OPS_MSG,
            processBrotherOpsMsgRet(opstype, session.player, [], True, 0))
        memberSession2.sendMsg(
            MsgDef.ServerCmd.BROTHER_OPS_MSG,
            processBrotherOpsMsgRet(opstype, session.player, [], True, 0))

        #15秒后如果用户未确定结义状态改变,则将结义状态初始化(以后添加)
        def cb():
            processBrotherDelay(session, TeamModel.BrotherFlag.flag3, opstype,
                                cmd, '存在用户未及时确认结义,所有结义归零')
            return

        #ffext.timer(15 * 1000, cb)
        return
    if msg.opstype == MsgDef.BrotherClientCmd.REFUSE_INVITT_ADD_BROTHER:
        #此处应判断是否满足同意结义的条件
        #拒绝结义
        memberSession1 = ffext.getSessionMgr().findByUid(
            session.player.brotherCtrl.inviter[0])
        memberSession2 = ffext.getSessionMgr().findByUid(
            session.player.brotherCtrl.inviter[1])
        session.player.brotherCtrl.refuseBrotherInviter()
        session.sendMsg(
            MsgDef.ServerCmd.BROTHER_OPS_MSG,
            processBrotherOpsMsgRet(opstype, session.player, [], True, 0))
        memberSession1.player.brotherCtrl.refuseBrotherInviter()
        memberSession1.sendMsg(
            MsgDef.ServerCmd.BROTHER_OPS_MSG,
            processBrotherOpsMsgRet(opstype, session.player, [], True, 0))
        memberSession2.player.brotherCtrl.refuseBrotherInviter()
        memberSession2.sendMsg(
            MsgDef.ServerCmd.BROTHER_OPS_MSG,
            processBrotherOpsMsgRet(opstype, session.player, [], True, 0))
        return
    #用户确认结义
    if msg.opstype == MsgDef.BrotherClientCmd.CONFIRM_INVIT_ADD_BROTHER:
        #判断用户是否满足结义条件
        memberSession1 = ffext.getSessionMgr().findByUid(
            session.player.brotherCtrl.inviter[0])
        memberSession2 = ffext.getSessionMgr().findByUid(
            session.player.brotherCtrl.inviter[1])
        if not processCheckAddBrother(session, memberSession1, memberSession2,
                                      opstype, cmd):
            return
        if TeamModel.BrotherFlag.flag4 != session.player.brotherCtrl.brotherFlag:
            session.player.brotherCtrl.confirmBrotherInviter()
            session.sendMsg(
                MsgDef.ServerCmd.BROTHER_OPS_MSG,
                processBrotherOpsMsgRet(opstype, session.player, [], True, 0))
            memberSession1.sendMsg(
                MsgDef.ServerCmd.BROTHER_OPS_MSG,
                processBrotherOpsMsgRet(opstype, session.player, [], True, 0))
            memberSession2.sendMsg(
                MsgDef.ServerCmd.BROTHER_OPS_MSG,
                processBrotherOpsMsgRet(opstype, session.player, [], True, 0))
        if TeamModel.BrotherFlag.flag4 == memberSession1.player.brotherCtrl.brotherFlag and TeamModel.BrotherFlag.flag4 == memberSession2.player.brotherCtrl.brotherFlag:
            bid = TeamModel.getBrotherMgr().addBrotherList(
                session.player, memberSession1.player, memberSession2.player)
            session.player.brotherCtrl.AddBrother(bid)
            memberSession1.player.brotherCtrl.AddBrother(bid)
            memberSession2.player.brotherCtrl.AddBrother(bid)
            sendBroList(session)
            sendBroList(memberSession1)
            sendBroList(memberSession2)
        return
    #用户强制退出结义
    if opstype == MsgDef.BrotherClientCmd.QUIT_BROTHER:
        #先判断用户是否有结义
        brotherInfo = session.player.brotherCtrl.brotherInfo
        if None == brotherInfo:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '用户没有结义信息。'))
            return
        if session.player.gold < TeamModel.BROTHER_QUIT_GOLD:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '金钱不足,不能强制退出。'))
            return
        #扣除金钱
        session.player.addGold(-TeamModel.BROTHER_QUIT_GOLD)
        bid = brotherInfo.bid
        for key, val in brotherInfo.getBrotherMember().iteritems():
            memberSession = ffext.getSessionMgr().findByUid(val.uid)
            if None != memberSession:
                memberSession.sendMsg(
                    MsgDef.ServerCmd.BROTHER_OPS_MSG,
                    processBrotherOpsMsgRet(opstype, session.player, [], True,
                                            0))
                memberSession.player.brotherCtrl.delBrother(
                    memberSession.player)
                if val.uid == session.player.uid:
                    continue
                else:
                    memberSession.player.addGold(TeamModel.BROTHER_QUIT_GOLD /
                                                 2)
            else:
                DbService.getPlayerService().updateGold(
                    val, TeamModel.BROTHER_QUIT_GOLD / 2)
        TeamModel.getBrotherMgr().delBrother(bid)
        return
    #发送结义列表

    if opstype == MsgDef.BrotherClientCmd.GET_BROTHERLIST:
        sendBroList(session, opstype)
        return
    #用户协商退出结义(必须三个人同时在线)
    if opstype == MsgDef.BrotherClientCmd.CONSULT_QUIT_BROTHER:
        #先判断用户是否有结义
        brotherInfo = session.player.brotherCtrl.brotherInfo
        if None == brotherInfo:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '用户没有结义信息。'))
            return
        #判断三个人是否同时在线
        for key, val in brotherInfo.getBrotherMember().iteritems():
            memberSession = ffext.getSessionMgr().findByUid(val.uid)
            if None == memberSession:
                session.sendMsg(
                    MsgDef.ServerCmd.ERROR_MSG,
                    processErrorMsgRet(opstype, cmd, '用户协议取消结义时,必须同时在线!'))
                return
        if TeamModel.BrotherFlag.flag5 != session.player.brotherCtrl.brotherFlag:
            session.player.brotherCtrl.consultBrotherQuit()
            for key, val in brotherInfo.getBrotherMember().iteritems():
                memberSession = ffext.getSessionMgr().findByUid(val.uid)
                memberSession.sendMsg(
                    MsgDef.ServerCmd.BROTHER_OPS_MSG,
                    processBrotherOpsMsgRet(opstype, session.player, [], False,
                                            0))
        for key, val in brotherInfo.getBrotherMember().iteritems():
            memberSession = ffext.getSessionMgr().findByUid(val.uid)
            if TeamModel.BrotherFlag.flag5 != memberSession.player.brotherCtrl.brotherFlag:
                return
        delTimeSec = 1
        #修改结义状态
        time = ffext.getTime() + delTimeSec
        #time = ffext.getTime() + 2 * 3600 * 24
        session.player.brotherCtrl.brotherInfo.addTime(time)
        for key, val in brotherInfo.getBrotherMember().iteritems():
            memberSession = ffext.getSessionMgr().findByUid(val.uid)
            memberSession.sendMsg(
                MsgDef.ServerCmd.BROTHER_OPS_MSG,
                processBrotherOpsMsgRet(opstype, session.player, [], False,
                                        time))

        def cb():
            processBrotherDel(session, opstype)
            return

        ffext.timer(1 * 1000, cb)
        #ffext.timer(2 * 3600 * 24 * 1000, cb)
        return
    #用户取消退出结义
    if opstype == MsgDef.BrotherClientCmd.CANCLE_QUIT_BROTHER:
        #先判断用户是否有结义
        brotherInfo = session.player.brotherCtrl.brotherInfo
        if None == brotherInfo:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '用户没有结义信息。'))
            return
        #判断是否需要取消
        if brotherInfo.flag:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '用户没有协议解除结义信息。'))
            return
        brotherInfo.flag = True
        for key, val in brotherInfo.getBrotherMember().iteritems():
            memberSession = ffext.getSessionMgr().findByUid(val.uid)
            if None != memberSession:
                memberSession.sendMsg(
                    MsgDef.ServerCmd.BROTHER_OPS_MSG,
                    processBrotherOpsMsgRet(opstype, session.player, [], True,
                                            0))
                memberSession.player.brotherCtrl.brotherFlag = TeamModel.BrotherFlag.flag4
        #将倒计时数据从数据库中和session中删除
        brotherInfo.delTime()
        return
示例#10
0
def processTeamOps(session, msg):
    opstype = msg.opstype
    cmd = MsgDef.ClientCmd.TEAMLIST_OPS
    uid = msg.uid
    memberSession = ffext.getSessionMgr().findByUid(uid)
    #邀请别人进行组队
    if opstype == MsgDef.TeamClientCmd.INVITE_ADD_TEAM:
        if not (processCheckAddTeam(session, memberSession, opstype, cmd) and
                processCheckMacTeamNum(session, memberSession, opstype, cmd)):
            return
        memberSession.sendMsg(
            MsgDef.ServerCmd.TEAM_MSG,
            processTeamPlayerMsgByPlayerRet(opstype, session.player, False))
    #同意别人邀请,进行组队
    if opstype == MsgDef.TeamClientCmd.VERIFY_INVIT_ADD_TEAM:
        if not (processCheckAddTeam(session, memberSession, opstype, cmd) and
                processCheckMacTeamNum(session, memberSession, opstype, cmd)):
            return
        #判断是加入队伍还是同意别人加入
        if 0 != session.player.teamCtrl.teamID:
            teamID = session.player.teamCtrl.teamID
            #同意别人加入
            memberSession.player.teamCtrl.setTeamID(teamID)
            #将用户信息广播给已有成员
            for key, val in TeamModel.getTeamMgr().getTeamById(
                    teamID).getTeamMember().iteritems():
                teamMemberSession = ffext.getSessionMgr().findByUid(val.uid)
                if None != teamMemberSession:
                    teamMemberSession.sendMsg(
                        MsgDef.ServerCmd.TEAM_MSG,
                        processTeamPlayerMsgByPlayerRet(
                            opstype, memberSession.player, False))
                if val.uid == teamID:
                    leader = True
                else:
                    leader = False
                memberSession.sendMsg(
                    MsgDef.ServerCmd.TEAM_MSG,
                    processTeamPlayerMsgByPlayerRet(opstype, val, leader))
            memberSession.player.teamCtrl.setTeamID(teamID)
            TeamModel.getTeamMgr().getTeamById(teamID).addTeamMember(
                memberSession.player)
        else:
            if 0 == memberSession.player.teamCtrl.teamID:
                #两人均没有队伍,给对方创建队伍,并任命对方为队长
                TeamModel.getTeamMgr().addTeam(memberSession.player)
                memberSession.player.teamCtrl.setTeamID(
                    memberSession.player.uid)
            teamID = memberSession.player.teamCtrl.teamID
            #同意加入别人
            session.player.teamCtrl.setTeamID(teamID)
            #将用户信息广播给已有成员
            for key, val in TeamModel.getTeamMgr().getTeamById(
                    teamID).getTeamMember().iteritems():
                teamMemberSession = ffext.getSessionMgr().findByUid(val.uid)
                if None != teamMemberSession:
                    teamMemberSession.sendMsg(
                        MsgDef.ServerCmd.TEAM_MSG,
                        processTeamPlayerMsgByPlayerRet(
                            opstype, session.player, False))
                if val.uid == teamID:
                    leader = True
                else:
                    leader = False
                session.sendMsg(
                    MsgDef.ServerCmd.TEAM_MSG,
                    processTeamPlayerMsgByPlayerRet(opstype, val, leader))
            session.player.teamCtrl.setTeamID(teamID)
            TeamModel.getTeamMgr().getTeamById(teamID).addTeamMember(
                session.player)
        return
    #拒绝别人邀请
    if opstype == MsgDef.TeamClientCmd.REFUSE_INVITT_ADD_TEAM:
        memberSession = ffext.getSessionMgr().findByUid(uid)
        #session.sendMsg(MsgDef.ServerCmd.TEAM_MSG, processTeamPlayerMsgRet(opstype, uid, '', 0, 0, 0, 0, 0, 0, 0, 0, 0, False))
        if None != memberSession:
            if session.player.uid == session.player.teamCtrl.teamID:
                leader = True
            else:
                leader = False
            memberSession.sendMsg(
                MsgDef.ServerCmd.TEAM_MSG,
                processTeamPlayerMsgByPlayerRet(opstype, session.player,
                                                leader))
        return
    #删除队友CONFIRM_INVIT_ADD_BROTHER
    if opstype == MsgDef.TeamClientCmd.DEL_TEAMPLAYER:
        teamID = session.player.teamCtrl.teamID
        if session.player.uid != teamID:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '您不是队长,进行队伍成员操作'))
            return
        if session.player.uid == uid:
            session.sendMsg(
                MsgDef.ServerCmd.ERROR_MSG,
                processErrorMsgRet(opstype, cmd, '不能对自己进行操作,如想退出队伍,请使用退出队伍选项'))
            return
        #判断用户是否在队伍中(理论上应该客户端判断)
        if None == TeamModel.getTeamMgr().getTeamById(
                teamID).getTeamMemberByUid(uid):
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '用户不在队伍中,无法删除。'))
            return
        #将队友从session中删除
        TeamModel.getTeamMgr().getTeamById(teamID).delTeamMember(uid)
        if None != memberSession:
            memberSession.player.teamCtrl.setTeamID(0)
            memberSession.sendMsg(
                MsgDef.ServerCmd.TEAM_MSG,
                processTeamPlayerMsgByPlayerRet(opstype, session.player, True))
        for key, val in TeamModel.getTeamMgr().getTeamById(
                teamID).getTeamMember().iteritems():
            teamMemberSession = ffext.getSessionMgr().findByUid(val.uid)
            if None != teamMemberSession:
                teamMemberSession.sendMsg(
                    MsgDef.ServerCmd.TEAM_MSG,
                    processTeamPlayerMsgByPlayerRet(opstype,
                                                    memberSession.player,
                                                    False))
        return


#退出组队(用户下线时也执行相同代码,如)
    if opstype == MsgDef.TeamClientCmd.QUIT_TEAM:
        teamID = session.player.teamCtrl.teamID
        #判断自己是否加入队伍(理论上应该客户端判断teamID=0,不需要给客户端返回语句)
        if 0 == teamID:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '没有队伍,不需要退出。'))
            return
        #判断自己是否为队长(队长退出时默认为队伍解散)
        if session.player.uid == teamID:
            for key, val in TeamModel.getTeamMgr().getTeamById(
                    teamID).getTeamMember().iteritems():
                teamMemberSession = ffext.getSessionMgr().findByUid(val.uid)
                if None != teamMemberSession:
                    teamMemberSession.player.teamCtrl.setTeamID(0)
                    teamMemberSession.sendMsg(
                        MsgDef.ServerCmd.TEAM_MSG,
                        processTeamPlayerMsgByPlayerRet(
                            opstype, session.player, True))
            TeamModel.getTeamMgr().delTeam(teamID)
        else:
            for key, val in TeamModel.getTeamMgr().getTeamById(
                    teamID).getTeamMember().iteritems():
                teamMemberSession = ffext.getSessionMgr().findByUid(val.uid)
                if None != teamMemberSession:
                    teamMemberSession.sendMsg(
                        MsgDef.ServerCmd.TEAM_MSG,
                        processTeamPlayerMsgByPlayerRet(
                            opstype, session.player, False))
            TeamModel.getTeamMgr().getTeamById(teamID).delTeamMember(
                session.player.uid)
            session.player.teamCtrl.setTeamID(0)
        return
    #更换队长
    if opstype == MsgDef.TeamClientCmd.REPLACE_TEAMLEADER:
        teamID = session.player.teamCtrl.teamID
        if session.player.uid != teamID:
            session.sendMsg(
                MsgDef.ServerCmd.ERROR_MSG,
                processErrorMsgRet(opstype, cmd, '您不是队长,无权进行更换队长操作'))
            return
        if None == TeamModel.getTeamMgr().getTeamById(
                teamID).getTeamMemberByUid(uid):
            session.sendMsg(
                MsgDef.ServerCmd.ERROR_MSG,
                processErrorMsgRet(opstype, cmd, '新任命的队长不在队伍中,无法任命'))
            return
        #向所有队员广播变更队长消息
        for key, val in TeamModel.getTeamMgr().getTeamById(
                teamID).getTeamMember().iteritems():
            teamMemberSession = ffext.getSessionMgr().findByUid(val.uid)
            if None != teamMemberSession:
                teamMemberSession.player.teamCtrl.setTeamID(uid)
                teamMemberSession.sendMsg(
                    MsgDef.ServerCmd.TEAM_MSG,
                    processTeamPlayerMsgRet(opstype, uid, '', 0, 0, 0, 0, 0, 0,
                                            0, 0, 0, False))
        #变更session中存储的队长
        TeamModel.getTeamMgr().setTeamLeader(teamID, uid)
        return
示例#11
0
def processBrotherOps(session, msg):  #0表示邀请别人一起结义
    opstype = msg.opstype
    cmd = MsgDef.ClientCmd.BROTHER_OPS
    #ffext.dump('processBrotherrOps', msg)
    player = session.player

    uid = player.uid
    uid1 = msg.uid1
    uid2 = msg.uid2

    if opstype == MsgDef.BrotherClientCmd.INVITE_ADD_BROTHER:
        #获取用户邀请结义的ID
        player2 = player.mapObj.getPlayerById(uid1)
        player3 = player.mapObj.getPlayerById(uid2)
        if False == checkPlayerCanBeBro(opstype, player, player2, player3):
            return False
        brotherInfo = TeamModel.BrotherCtrl()
        brotherInfo.addBrotherMember(player, player2, player3)
        player.brotherCtrl.tmpBrotherInfo = brotherInfo
        player2.brotherCtrl.tmpBrotherInfo = brotherInfo
        player3.brotherCtrl.tmpBrotherInfo = brotherInfo
        #将邀请信息发给对方
        allBrotherInfo = []
        allBrotherInfo.append(processBrotherOpsMsg(player, True))
        allBrotherInfo.append(processBrotherOpsMsg(player2, True))
        allBrotherInfo.append(processBrotherOpsMsg(player3, True))
        session.sendMsg(
            MsgDef.ServerCmd.BROTHER_OPS_MSG,
            processBrotherOpsMsgRet(opstype, player, allBrotherInfo, True, 0))
        player2.sendMsg(
            MsgDef.ServerCmd.BROTHER_OPS_MSG,
            processBrotherOpsMsgRet(opstype, player, allBrotherInfo, True, 0))
        player3.sendMsg(
            MsgDef.ServerCmd.BROTHER_OPS_MSG,
            processBrotherOpsMsgRet(opstype, player, allBrotherInfo, True, 0))

        brotherInfo.getMemberInfo(
            player.uid
        ).status = TeamModel.BrotherStatus.BRO_VERIFY_INVIT  #自动确认
        return
    if msg.opstype == MsgDef.BrotherClientCmd.VERIFY_INVIT_ADD_BROTHER:
        brotherInfo = player.brotherCtrl.tmpBrotherInfo
        if not brotherInfo:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '结义状态已经解除。'))
            return
        playerList = brotherInfo.getPlayers()
        player1 = playerList[0]
        player2 = playerList[1]
        player3 = playerList[2]

        if False == checkPlayerCanBeBro(opstype, player1, player2, player3):
            return False

        brotherInfo.getMemberInfo(
            player.uid).status = TeamModel.BrotherStatus.BRO_VERIFY_INVIT
        player1.sendMsg(MsgDef.ServerCmd.BROTHER_OPS_MSG,
                        processBrotherOpsMsgRet(opstype, player, [], True, 0))
        player2.sendMsg(MsgDef.ServerCmd.BROTHER_OPS_MSG,
                        processBrotherOpsMsgRet(opstype, player, [], True, 0))
        player3.sendMsg(MsgDef.ServerCmd.BROTHER_OPS_MSG,
                        processBrotherOpsMsgRet(opstype, player, [], True, 0))
        return
    if msg.opstype == MsgDef.BrotherClientCmd.REFUSE_INVITT_ADD_BROTHER:
        brotherInfo = player.brotherCtrl.tmpBrotherInfo
        if not brotherInfo:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '结义状态已经解除。'))
            return
        playerList = brotherInfo.getPlayers()

        for k in playerList:
            if k:
                k.brotherCtrl.tmpBrotherInfo = None
            k.sendMsg(MsgDef.ServerCmd.BROTHER_OPS_MSG,
                      processBrotherOpsMsgRet(opstype, player, [], True, 0))
        return
    #用户确认结义
    if msg.opstype == MsgDef.BrotherClientCmd.CONFIRM_INVIT_ADD_BROTHER:
        brotherInfo = player.brotherCtrl.tmpBrotherInfo
        if not brotherInfo:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '结义状态已经解除。'))
            return
        playerList = brotherInfo.getPlayers()
        player1 = playerList[0]
        player2 = playerList[1]
        player3 = playerList[2]

        brotherInfo.getMemberInfo(
            player.uid).status = TeamModel.BrotherStatus.BRO_CONFIRM
        player1.sendMsg(MsgDef.ServerCmd.BROTHER_OPS_MSG,
                        processBrotherOpsMsgRet(opstype, player, [], True, 0))
        player2.sendMsg(MsgDef.ServerCmd.BROTHER_OPS_MSG,
                        processBrotherOpsMsgRet(opstype, player, [], True, 0))
        player3.sendMsg(MsgDef.ServerCmd.BROTHER_OPS_MSG,
                        processBrotherOpsMsgRet(opstype, player, [], True, 0))

        allConfirm = True
        for k in playerList:
            if k == None or brotherInfo.getMemberInfo(
                    k.uid).status != TeamModel.BrotherStatus.BRO_CONFIRM:
                allConfirm = False
                break
        if allConfirm:
            bid = TeamModel.getBrotherMgr().addBrotherInfo(brotherInfo)
            player1.brotherCtrl.tmpBrotherInfo = None
            player2.brotherCtrl.tmpBrotherInfo = None
            player3.brotherCtrl.tmpBrotherInfo = None

            player1.brotherCtrl.brotherInfo = brotherInfo
            player2.brotherCtrl.brotherInfo = brotherInfo
            player3.brotherCtrl.brotherInfo = brotherInfo

            sendBroList(player1.session)
            sendBroList(player2.session)
            sendBroList(player3.session)
        return
    #用户强制退出结义
    if opstype == MsgDef.BrotherClientCmd.QUIT_BROTHER:
        #先判断用户是否有结义
        brotherInfo = session.player.brotherCtrl.brotherInfo
        if None == brotherInfo:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '用户没有结义信息。'))
            return
        if session.player.gold < TeamModel.BROTHER_QUIT_GOLD:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '金钱不足,不能强制退出。'))
            return
        #扣除金钱
        session.player.addGold(-1 * TeamModel.BROTHER_QUIT_GOLD)
        bid = brotherInfo.bid
        for key, val in brotherInfo.getBrotherMember().iteritems():
            memberSession = ffext.getSessionMgr().findByUid(val.uid)
            memberSession.player.skillCtrl.deleteSkill(Base.BRO_SKILL_ID, True)
            SkillHandler.processQuerySkill(memberSession)
            if None != memberSession:
                memberSession.sendMsg(
                    MsgDef.ServerCmd.BROTHER_OPS_MSG,
                    processBrotherOpsMsgRet(opstype, session.player, [], True,
                                            0))
                memberSession.player.brotherCtrl.delBrother(
                    memberSession.player)
                if val.uid == session.player.uid:
                    continue
                else:
                    memberSession.player.addGold(
                        int(TeamModel.BROTHER_QUIT_GOLD / 2))
            else:
                DbService.getPlayerService().updateGold(
                    val, int(TeamModel.BROTHER_QUIT_GOLD / 2))
        TeamModel.getBrotherMgr().delBrother(bid)

        return
    #发送结义列表

    if opstype == MsgDef.BrotherClientCmd.GET_BROTHERLIST:
        sendBroList(session, opstype)
        return
    #用户协商退出结义(必须三个人同时在线)
    if opstype == MsgDef.BrotherClientCmd.CONSULT_QUIT_BROTHER:
        #先判断用户是否有结义
        brotherInfo = session.player.brotherCtrl.brotherInfo
        if None == brotherInfo:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '用户没有结义信息。'))
            return
        #判断三个人是否同时在线
        for key, val in brotherInfo.getBrotherMember().iteritems():
            memberSession = ffext.getSessionMgr().findByUid(val.uid)
            if None == memberSession:
                session.sendMsg(
                    MsgDef.ServerCmd.ERROR_MSG,
                    processErrorMsgRet(opstype, cmd, '用户协议取消结义时,必须同时在线!'))
                return
        brotherInfo.getMemberInfo(
            player.uid).status = TeamModel.BrotherStatus.BRO_QUIT
        allQuit = True
        for key, val in brotherInfo.getBrotherMember().iteritems():
            if val.status != TeamModel.BrotherStatus.BRO_QUIT:
                allQuit = False
                break
        delTime = 0
        delTimeSec = 1
        if allQuit:
            delTime = ffext.getTime() + delTimeSec
        for key, val in brotherInfo.getBrotherMember().iteritems():
            memberSession = ffext.getSessionMgr().findByUid(val.uid)
            memberSession.player.skillCtrl.deleteSkill(Base.BRO_SKILL_ID, True)
            SkillHandler.processQuerySkill(memberSession)
            memberSession.sendMsg(
                MsgDef.ServerCmd.BROTHER_OPS_MSG,
                processBrotherOpsMsgRet(opstype, player, [], False, delTime))

        if allQuit:

            def cb():
                processBrotherDel(session, opstype)
                return

            ffext.timer(delTimeSec * 1000, cb)
        return
    #用户取消退出结义
    if opstype == MsgDef.BrotherClientCmd.CANCLE_QUIT_BROTHER:
        #先判断用户是否有结义
        brotherInfo = session.player.brotherCtrl.brotherInfo
        if None == brotherInfo:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '用户没有结义信息。'))
            return
        if brotherInfo.getMemberInfo(
                player.uid).status != TeamModel.BrotherStatus.BRO_QUIT:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '不需要取消。'))
            return
        brotherInfo.getMemberInfo(
            player.uid).status = TeamModel.BrotherStatus.BRO_OK
        for key, val in brotherInfo.getBrotherMember().iteritems():
            memberSession = ffext.getSessionMgr().findByUid(val.uid)
            if None != memberSession:
                memberSession.sendMsg(
                    MsgDef.ServerCmd.BROTHER_OPS_MSG,
                    processBrotherOpsMsgRet(opstype, session.player, [], True,
                                            0))
        return
    elif opstype == MsgDef.BrotherClientCmd.LEARN_BRO_SKILL:  #9学习结义技能
        brotherInfo = session.player.brotherCtrl.brotherInfo
        if None == brotherInfo:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, '用户没有结义信息。'))
            return
        skillLevel = 1
        retErr = player.skillCtrl.learnSkill(Base.BRO_SKILL_ID, skillLevel)  #
        if retErr:
            session.sendMsg(
                MsgDef.ServerCmd.ERROR_MSG,
                processErrorMsgRet(
                    opstype, cmd,
                    '学习技能%d失败,原因:%s!' % (Base.BRO_SKILL_ID, retErr)))
            return
        session.sendMsg(MsgDef.ServerCmd.LEARN_SKILL,
                        MsgDef.LearnSkillRet(Base.BRO_SKILL_ID, skillLevel))
        session.sendMsg(MsgDef.ServerCmd.BROTHER_OPS_MSG,
                        processBrotherOpsMsgRet(opstype, player, [], False, 0))