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
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)
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))
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)
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
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 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
def processMarriageItem(itemObj, num): ret_msg = MsgDef.Item() from handler import ItemHandler ItemHandler.buildItem(ret_msg, itemObj) return ret_msg
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
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
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
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