Ejemplo n.º 1
0
def giveDailyAwardByIndex(player, index):
    cfg = DAILY_AWARD_CFG[index]
    args = cfg.split('(')
    ffext.dump('args', args[0])
    if args[0] == '经验':
        param = args[1].split('倍')
        timesstr = param[0]
        val = int(BASE_EXP * float(timesstr))
        player.addExp(val, True)
        return 0
    elif args[0] == '金币':
        param = args[1].split('倍')
        timesstr = param[0]
        val = int(BASE_GOLD * float(timesstr))
        player.addGold(val, True)
        return 1
    elif args[0] == '大补丸':
        ffext.dump('args 11', args[0])
        itemCfg = ItemModel.getItemMgr().getCfgByName('大补丸(小)')
        if itemCfg:
            ffext.dump('args 22', args[0])
            player.itemCtrl.getItemByCfgId(itemCfg.cfgId)
            from handler import ItemHandler
            ItemHandler.processQueryPkg(player.session)
            return itemCfg.cfgId
    else:
        itemCfg = ItemModel.getItemMgr().getCfgByName(cfg)
        if itemCfg:
            player.itemCtrl.getItemByCfgId(itemCfg.cfgId)
            from handler import ItemHandler
            ItemHandler.processQueryPkg(player.session)
            return itemCfg.cfgId
        return 2060121
Ejemplo n.º 2
0
def additembyid(session, args):
    num = 1
    if len(args) >= 3:
        num = int(args[2])
    session.player.itemCtrl.addItemByCfgId(int(args[1]), num)
    from handler import ItemHandler
    ItemHandler.processQueryPkg(session)
Ejemplo n.º 3
0
def randsuit(session, args):
    xiongJiaCfgId = 0
    xiongJiaItem = session.player.itemCtrl.allEquiped.get(
        Base.EQUIP_XIONGJIA_POS, None)
    from handler import ItemHandler
    if xiongJiaItem:
        ffext.dump('randsuit...', xiongJiaItem.uid)
        ItemHandler.processUnEquipItem(session,
                                       MsgDef.EquipOpsReq(xiongJiaItem.uid))
        session.player.itemCtrl.delItem(xiongJiaItem.uid)
    itemCfgId = 30111113
    canUseCfgId = []
    needlv = 10  #session.player.level
    randomLv = [1, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50]
    lv = randomLv[random.randint(0, len(randomLv) - 1)]
    sql = "SELECT cfgid FROM  equipprop  WHERE itemtype = 103 AND job = " + str(
        session.player.job) + " and name like '%" + str(lv) + "级-品质1-1套'"
    db = ffext.allocDbConnection('cfg', ffext.getConfig('-cfg'))
    ret = db.queryResult(sql)
    if ret:
        result = ret.result
        ffext.dump('result:', result)
        randRow = result[random.randint(0, len(result) - 1)]
        itemCfgId = int(randRow[0])
    item = session.player.itemCtrl.addItemByCfgId(itemCfgId)

    ItemHandler.processEquipItem(session, MsgDef.EquipOpsReq(item.uid))
Ejemplo n.º 4
0
 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)
Ejemplo n.º 5
0
def teste(session, args):
    if len(args) < 3:
        ret_msg.chatMsg = '参数 @teste destuid itemid'
        session.player.sendMsg(MsgDef.ServerCmd.CHAT_MSG, ret_msg)
        return
    from handler import ItemHandler
    ItemHandler.processExchangeOps(
        session, MsgDef.ExchangeOpsReq(3, 0, 10, {long(args[2]): 1}))
    return
Ejemplo n.º 6
0
        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
Ejemplo n.º 7
0
def finishTaskCallback(player, arg):
    ffext.dump('finishTaskCallback', arg[0], arg[1])
    taskId = arg[0]
    npccfgid = arg[1]
    taskCtrl = player.taskCtrl
    task = taskCtrl.getTask(taskId)
    cfg = task.taskCfg
    try:
        if cfg.action == Base.Action.COLLECT:
            num = player.itemCtrl.countItemNumbyCfgId(cfg.object)
            if num < cfg.value:
                player.sendMsg(
                    MsgDef.ServerCmd.ERROR_MSG,
                    buildErrMsg(MsgDef.ClientCmd.UPDATE_TASK_STATUS,
                                '任务道具没有收集齐'))
                return
            else:
                player.itemCtrl.subItemNumByCfgId(cfg.object, cfg.value)
                from handler import ItemHandler
                ItemHandler.processQueryPkg(player.session)
    except:
        pass
    newTask = taskCtrl.finishTask(taskId)
    sendTaskList(player)
    #if newTask and newTask.__class__ != str:
    #    taskCtrl.whenClickNpc(npcName)
    ffext.dump('finishTaskCallback info', arg[0], arg[1], cfg.finishplay,
               cfg.finishdialog)
    if cfg.finishdialog:
        player.sendMsg(MsgDef.ServerCmd.SHOW_PLAY,
                       MsgDef.ShowPlayRet(cfg.finishdialog))
    elif cfg.finishplay:
        player.sendMsg(MsgDef.ServerCmd.SHOW_PLAY,
                       MsgDef.ShowPlayRet(cfg.finishplay))

    return
Ejemplo n.º 8
0
def processMarriageItem(itemObj, num):
    ret_msg = MsgDef.Item()
    from handler import ItemHandler
    ItemHandler.buildItem(ret_msg, itemObj)
    return ret_msg
Ejemplo n.º 9
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
Ejemplo n.º 10
0
def processMarryOPS(session, msg):
    ffext.dump('processMailOPS', msg)
    opstype = msg.opstype
    cmd = MsgDef.ClientCmd.MAIL_OPS
    player = session.player

    mailId = msg.mailId
    sendToUid = msg.sendToUid
    sendTgtType = msg.sendTgtType
    title = msg.title
    if not title:
        title = ''
    msg = msg.msg
    if not msg:
        msg = ''
    if opstype == MsgDef.MailOpsCmd.MAIL_OP_ALL:
        # 获取个人所有邮件
        listAllM = []
        for kk, mail in player.mailCtrl.allMail.items():
            mailNode = mail.convertToSendMailData()
            listAllM.append(mailNode)
            pass
        session.sendMsg(
            MsgDef.ServerCmd.MAIL_OPS_MSG,
            MailModel.processMailOpsRet(opstype, player, listAllM, mailId))
        pass

    elif opstype == MsgDef.MailOpsCmd.MAIL_OP_SEND:
        # 发送邮件
        if sendTgtType == MsgDef.MailMsgType.MAIL_MSG_FRIEND:
            ## 好友目标...
            tgtFriend = player.friendCtrl.getFriendByUid(sendToUid)
            if not tgtFriend:
                session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                                processErrorMsgRet(opstype, cmd, "目标不是好友!"))
                return
            MailModel.doSendMailToPlayer(player, sendToUid, sendTgtType, title,
                                         msg)
            session.sendMsg(
                MsgDef.ServerCmd.MAIL_OPS_MSG,
                MailModel.processMailOpsRet(opstype, player, [], mailId))
            pass
        elif sendTgtType == MsgDef.MailMsgType.MAIL_MSG_GUILD:
            tgtGuildMember = player.guildCtrl.guildInfo.allGuildMember
            for member in tgtGuildMember.iteritems():
                ffext.dump('member', member[0])
                if member[0] != player.uid:
                    MailModel.doSendMailToPlayer(player, member[0],
                                                 sendTgtType, title, msg)
                    session.sendMsg(
                        MsgDef.ServerCmd.MAIL_OPS_MSG,
                        MailModel.processMailOpsRet(opstype, player, [],
                                                    mailId))
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, "邮件已发出!"))
            #session.sendMsg(MsgDef.ServerCmd.ERROR_MSG, processErrorMsgRet(opstype, cmd, "目前只支持发给好友!"))
        #pass

    elif opstype == MsgDef.MailOpsCmd.MAIL_OP_DEL:
        # 删除邮件
        mail = player.mailCtrl.getMail(mailId)
        if not mail:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, "邮件不存在!"))
            return
        player.mailCtrl.delMail(mailId)
        session.sendMsg(
            MsgDef.ServerCmd.MAIL_OPS_MSG,
            MailModel.processMailOpsRet(opstype, player, [], mailId))
        pass

    elif opstype == MsgDef.MailOpsCmd.MAIL_OP_BACK:
        # 回复邮件

        mail = player.mailCtrl.getMail(mailId)
        if not mail:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, "邮件不存在!"))
            return
        if mail.status == MsgDef.MailStatusType.MAIL_STATUS_BACKED:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, "邮件已回复!"))
            return
        backUid = mail.sender.uid
        backType = mail.type
        if sendTgtType == MsgDef.MailMsgType.MAIL_MSG_FRIEND:
            ## 好友目标...
            tgtFriend = player.friendCtrl.getFriendByUid(backUid)
            if not tgtFriend:
                session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                                processErrorMsgRet(opstype, cmd, "回复目标不是好友!"))
                return
            MailModel.doSendMailToPlayer(player, backUid, backType, title, msg)
            mail.status = MsgDef.MailStatusType.MAIL_STATUS_BACKED
            session.sendMsg(
                MsgDef.ServerCmd.MAIL_OPS_MSG,
                MailModel.processMailOpsRet(opstype, player, [], mailId))
            pass
        elif sendTgtType == MsgDef.MailMsgType.MAIL_MSG_GUILD:
            ## 工会发送者目标...
            guildInfo = player.guildCtrl.guildInfo
            if not guildInfo:
                session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                                processErrorMsgRet(opstype, cmd, "你不在公会中!"))
                return
            backGuildMem = guildInfo.getGuildMemberByUid(backUid)
            if not backGuildMem:
                session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                                processErrorMsgRet(opstype, cmd, "回复目标不在公会中!"))
                return
            MailModel.doSendMailToPlayer(player, backUid, backType, title, msg)
            mail.status = MsgDef.MailStatusType.MAIL_STATUS_BACKED
            session.sendMsg(
                MsgDef.ServerCmd.MAIL_OPS_MSG,
                MailModel.processMailOpsRet(opstype, player, [], mailId))
            pass
        else:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, "目前只支持回复好友或工会!"))
            pass
        pass

    elif opstype == MsgDef.MailOpsCmd.MAIL_OP_TAKE_ATTACH:
        # 收取附件
        mail = player.mailCtrl.getMail(mailId)
        if not mail:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, "邮件不存在!"))
            return
        if len(mail.listAttach) <= 0:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, "邮件没有附件!"))
            return
        # 1. 发送附件的内容到“背包”
        for attachNode in mail.listAttach:
            mailAttachToPlayer(player, attachNode, opstype, cmd)
            pass

        # 2. 删除邮件里的附件内容
        mail.removeAttach()

        from handler import ItemHandler
        ItemHandler.processQueryPkg(session)
        # 3. 更新邮件数据
        player.mailCtrl.updateMailData()

        session.sendMsg(
            MsgDef.ServerCmd.MAIL_OPS_MSG,
            MailModel.processMailOpsRet(opstype, player, [], mailId))
        pass

    elif opstype == MsgDef.MailOpsCmd.MAIL_OP_MARK_READ:
        # 标记邮件已读
        mail = player.mailCtrl.getMail(mailId)
        if not mail:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, "邮件不存在!"))
            return
        if mail.status != MsgDef.MailStatusType.MAIL_STATUS_UNREAD:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            processErrorMsgRet(opstype, cmd, "邮件已读!"))
            return
        mail.status = MsgDef.MailStatusType.MAIL_STATUS_READ
        player.mailCtrl.updateMailData()
        session.sendMsg(
            MsgDef.ServerCmd.MAIL_OPS_MSG,
            MailModel.processMailOpsRet(opstype, player, [], mailId))
        pass

    pass
Ejemplo n.º 11
0
def processArenaReq(session, msg=None):
    player = session.player
    arenaCtrl = player.arenaCtrl
    if msg.opstype == 0 or msg.opstype == 1:  #0表示显示竞技场数据
        retMsg = MsgDef.ArenaOpsRet(
            msg.opstype, arenaCtrl.leftChallengeTimes, arenaCtrl.score,
            ArenaModel.getArenaMgr().getRankByUid(player.uid), [])
        retMsg.listPlayers = ArenaModel.getArenaMgr().allRank
        session.sendMsg(MsgDef.ServerCmd.ARENA_OPS, retMsg)
    elif msg.opstype == 2:  #显示积分兑换
        retMsg = MsgDef.ArenaOpsRet(msg.opstype, arenaCtrl.leftChallengeTimes,
                                    arenaCtrl.score, arenaCtrl.rank, [], [])

        for k, itemCfgPair in ItemModel.getItemMgr().arenaScoreItem.iteritems(
        ):
            item = MsgDef.Item()
            itemCfg = itemCfgPair[0]
            ItemModel.tmpBuildItem(item, itemCfg)
            retMsg.listItems.append(
                MsgDef.ArenaScore2Item(itemCfgPair[1], item))
        session.sendMsg(MsgDef.ServerCmd.ARENA_OPS, retMsg)
        return
    elif msg.opstype == 3:  #积分兑换
        cfgid = msg.idArg
        destCfg = None
        if msg.numArg < 0:
            msg.numArg = 1
        for k, itemCfgPair in ItemModel.getItemMgr().arenaScoreItem.iteritems(
        ):
            itemCfg = itemCfgPair[0]
            if itemCfg.cfgId == cfgid:
                destCfg = itemCfgPair
                break
        if None == destCfg:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            buildErrMsg(MsgDef.ClientCmd.ARENA_OPS, '参数有误'))
            return
        score = destCfg[1] * msg.numArg
        if player.arenaCtrl.score < score:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            buildErrMsg(MsgDef.ClientCmd.ARENA_OPS, '积分不足'))
            return
        needPkgNum = msg.numArg
        if destCfg[0].flagDieJia:
            needPkgNum = 1
        if player.itemCtrl.getFreePkgSize() < needPkgNum:
            session.sendMsg(MsgDef.ServerCmd.ERROR_MSG,
                            buildErrMsg(MsgDef.ClientCmd.ARENA_OPS, '包裹不足'))
            return
        player.AddScoreArena(-1 * score)
        itemObj = player.itemCtrl.addItemByCfgId(cfgid)
        from handler import ItemHandler
        ItemHandler.processQueryPkg(session)
        retMsg = MsgDef.ArenaOpsRet(msg.opstype, arenaCtrl.leftChallengeTimes,
                                    arenaCtrl.score, arenaCtrl.rank, [], [])
        session.sendMsg(MsgDef.ServerCmd.ARENA_OPS, retMsg)

        return
    elif msg.opstype == 4:  #挑战某人
        if player.arenaCtrl.leftChallengeTimes <= 0:
            session.sendMsg(
                MsgDef.ServerCmd.ERROR_MSG,
                buildErrMsg(MsgDef.ClientCmd.ARENA_OPS, '每天最多挑战10次'))
            return
        ArenaModel.getArenaMgr().createArena(session.player, msg.destuid)
    return
Ejemplo n.º 12
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