#!/usr/bin/python # -*- coding: GBK -*- #--------------------------------------------------------------------- # #--------------------------------------------------------------------- ##@package PlayerQuery # @todo: MapServerÇëÇó # # @author: panwei # @date 2010-3-31 # @version 3.0 # # @change: "2015-07-10 17:30" ljd ÅÅÐаñ¼ÓÍæ¼Òƽ̨²ÎÊýName2 # @change: "2015-07-28 13:50" xdh Ôö¼ÓÊØ»¤ÅÅÐаñ # @change: "2015-09-18 19:30" hxp Ôö¼Ó¿ç·þ¹ã²¥×Ó·þ # @change: "2015-10-28 00:00" hxp Ôö¼Ó¿ç·þPK # @change: "2015-11-06 16:30" hxp Ôö¼ÓpyÀ®°È£¬Ö§³Ö¿ç·þ # @change: "2015-11-18 10:30" hxp Ôö¼ÓÍõÕßÕù°Ô # @change: "2016-02-29 17:30" hxp ¶ñħÊÔÁ¶ÅÅÐаñ # @change: "2016-06-08 16:00" hxp ÓÀºãÕ½Ã˿Ƽ¼°æ±¾ # @change: "2016-06-16 11:00" hxp ³èÎï×ÜÕ½Á¦°ñ # @change: "2016-06-30 21:30" hxp È¥³ý¾É°æ¿ª·þ»î¶¯Ïà¹Ø # @change: "2016-08-22 18:00" hxp ÐéÄâ·ÖÏßÈËÊýͬ²½ # @change: "2016-08-29 23:30" hxp ºé»ÄÖ®Á¦ # @change: "2016-09-27 15:30" xdh ¼«ÏÞÌôÕ½ # @change: "2016-10-31 16:00" hxp ÆÁ±ÎÕ½Ã˿Ƽ¼, ¸ÄΪ´¿µØÍ¼´¦Àíģʽ # @change: "2017-06-14 11:00" hxp »¹Ô­ÌØ»ÝÏû·Ñ·µÀû°ñ # @change: "2017-06-22 15:00" hxp ¿ç·þºé»ÄÖ®Á¦ #--------------------------------------------------------------------- #"""Version = 2017-07-17 15:00""" #--------------------------------------------------------------------- import IPY_GameServer import GameWorld import ChConfig import GMCommon import DirtyList import PlayerBillboard import PlayerExam import PlayerControl import PlayerRecall import PlayerFamilyAction import PlayerUniversalGameRec import PlayerFamily import GameWorldOpenServerCampaign import ShareDefine import GameDataRecord import PlayerCompensation import PlayerFB import UpdatePlayerName import PlayerFamilyBoss import GameWorldBoss import GameWorldFamilyWar #import PlayerFamilyTech import PlayerFamilyRedPacket import PlayerFBHelpBattle import PlayerHorsePetBoss #import PlayerFamilyStore import PlayerFamilySWRH import GameWorldProcess import PlayerLVAward import PlayerDuJie import PlayerTeam import PlayerBourse import PlayerXMZZ import ChPlayer import PyDataManager import PyGameData import PlayerTalk import PlayerStore import CrossRealmPlayer import CrossRealmMsg import CrossRealmPK import ChPyNetSendPack import NetPackCommon import AuctionHouse import time import datetime #--------------------------------------------------------------------- #È«¾Ö±äÁ¿ #--------------------------------------------------------------------- #--------------------------------------------------------------------- #Âß¼­ÊµÏÖ #--------------------------------------------------------------------- #////////////////////////////////////////////////////////////// #//06 03 ¸ù¾ÝID²éÑ¯Íæ¼Ò#tagGFindPlayer #tagGFindPlayer * GettagGFindPlayer(); # #class IPY_GFindPlayer #{ #public: # # int GetQueryType(); # # int GetQueryID(); # # int GetCallNameLen(); # //size = CallNameLen # char * GetCallName(); # # int GetCmdLen(); # //size = CmdLen # char * GetCmd(); #}; #ÏìÓ¦_·¢ËÍÇëÇóµØÍ¼·þÎñÆ÷,²éÕÒ²éѯĿ±êµØÍ¼·þÎñÆ÷ ## ÏìÓ¦µØÍ¼·þÎñÆ÷µÄÇëÇó£¬ÓÐЩ²Ù×÷µØÍ¼·þÎñÆ÷ÎÞ·¨´¦Àí # @param index µ±Ç°ÇëÇóµÄÍæ¼ÒÔÚgameserverÖеÄindex # @param tick µ±Ç°Ê±¼ä´Á # @return ÎÞ·µ»ØÖµ # @remarks º¯ÊýÏêϸ˵Ã÷£ºÏìÓ¦µØÍ¼·þÎñÆ÷µÄÇëÇó£¬ÓÐЩ²Ù×÷µØÍ¼·þÎñÆ÷ÎÞ·¨´¦Àí # ÐèÒªÇëÇóÆäËûµØÍ¼·þÎñÆ÷´¦ÀíµÈ ÐèÒªGameServerͬ²½µÄ»òÐèÒªÇëÇóÏà¹ØÐÅÏ¢µÄ def MapServer_QueryPlayer(index, tick): GameWorld.GetPsycoFunc(__Func_MapServer_QueryPlayer)(index, tick) return #ÏìÓ¦_·¢ËÍÇëÇóµØÍ¼·þÎñÆ÷,²éÕÒ²éѯĿ±êµØÍ¼·þÎñÆ÷ ## ÏìÓ¦µØÍ¼·þÎñÆ÷µÄÇëÇó£¬ÓÐЩ²Ù×÷µØÍ¼·þÎñÆ÷ÎÞ·¨´¦Àí # @param index µ±Ç°ÇëÇóµÄÍæ¼ÒÔÚgameserverÖеÄindex # @param tick µ±Ç°Ê±¼ä´Á # @return ÎÞ·µ»ØÖµ # @remarks º¯ÊýÏêϸ˵Ã÷£ºÏìÓ¦µØÍ¼·þÎñÆ÷µÄÇëÇó£¬ÓÐЩ²Ù×÷µØÍ¼·þÎñÆ÷ÎÞ·¨´¦Àí # ÐèÒªÇëÇóÆäËûµØÍ¼·þÎñÆ÷´¦ÀíµÈ ÐèÒªGameServerͬ²½µÄ»òÐèÒªÇëÇóÏà¹ØÐÅÏ¢µÄ def __Func_MapServer_QueryPlayer(index, tick): playerManager = GameWorld.GetPlayerManager() curPlayer = playerManager.GetPlayerByIndex(index) #---------------»ñÈ¡·â°üÊý¾Ý pack = IPY_GameServer.IPY_GFindPlayer() #±»ÇëÇóµÄ¶ÔÏóµÄid queryID = pack.GetQueryID() #ÇëÇóÀàÐÍ queryType = pack.GetQueryType() #»Øµ÷º¯ÊýÃû queryCallName = pack.GetCallName() #ÇëÇóµÄÃüÁî ¸ù¾ÝÇëÇóÀàÐͺÍÇëÇóÃüÁîÀ´¾ö¶¨×îÖÕ²Ù×÷ sendCMD = pack.GetCmd() #----------------------------- tagMapID = 0 tagPlayer = None if queryType == ChConfig.queryType_sqtPlayer: #Íæ¼Ò²éѯ(ͨ¹ýID) tagPlayer = playerManager.FindPlayerByID(queryID) tagMapID = GameWorld.GetQueryPlayerMapID(tagPlayer) elif queryType == ChConfig.queryType_sqtPlayerByAccID: #Íæ¼Ò²éѯ(ͨ¹ýÕʺÅ) tagPlayer = playerManager.FindPlayerByAccID(sendCMD) tagMapID = GameWorld.GetQueryPlayerMapID(tagPlayer) elif queryType == ChConfig.queryType_sqtPlayerByName: #Íæ¼Ò²éѯ(ͨ¹ýÃû×Ö) tagPlayer = playerManager.FindPlayerByName(sendCMD) tagMapID = GameWorld.GetQueryPlayerMapID(tagPlayer) elif queryType == ChConfig.queryType_sqtTruck: #æô³µ²éѯ curTruck = GameWorld.GetTruckMananger().FindTruckByTruckID(queryID) tagMapID = __GetQueryTruckMapID(curTruck) tagPlayer = curPlayer elif queryType == ChConfig.queryType_sqtMission_2010031: #¼Ò×åµÈ¼¶ÈËÊý²éѯ tagMapID = GameWorld.GetQueryPlayerMapID(curPlayer) sendCMD = '%s' % (__GetPlayerFamilyProperty(curPlayer)) tagPlayer = curPlayer elif queryType == ChConfig.queryType_sqtDataServer_GMCommand: #ÍÑ»ú¹¤¾ßÇëÇó²éѯ·µ»Ø GMCommon.DoLogic_sqtDataServer_GMCommand(queryCallName , queryID , sendCMD) return elif queryType == ChConfig.queryType_FamilyBattle: #±¨Ãû¼Ò×åÕù°ÔÕ½ # __DoLogic_JionFamilyBattle(curPlayer, tick) GameWorld.ErrLog('²»ÄÜÊÖ¶¯±¨Ãû¼Ò×åÕù°ÔÕ½curPlayer=%s' % curPlayer) return #=============================================================================== # elif queryType == ChConfig.queryType_sqtSend_Family_Item: # tagMapID = __GetQueryPlayerMapID(curPlayer , curPlayer) # #¼Ò×åËÍÎï×ÊÇëÇó # result = __DoLogic_Send_Family_Item(curPlayer , queryID , tick , sendCMD) # sendCMD = '%s'%result #=============================================================================== elif queryType == ChConfig.queryType_CheckNameHasDirty: resultStr = __GetCheckDirtyResultStrList(queryID, sendCMD) curPlayer.MapServer_QueryPlayerResult(queryType, queryID, queryCallName, resultStr, len(resultStr)) return elif queryType == ChConfig.queryType_JionExam: PlayerExam.MapServer_JoinAction(curPlayer, queryID, tick) return elif queryType == ChConfig.queryType_AddFamilyAction: #¼Ò×åÐÐΪ¼Ç¼ PlayerFamilyAction.MapServer_PlayerFamilyActionNote(curPlayer, queryID, sendCMD, tick) return elif queryType == ChConfig.queryType_GmOpenFB: #GM¿ªÆô¸±±¾ tagPlayer = curPlayer infoList = sendCMD.split(',') tagMapID = int(infoList[0]) elif queryType == ChConfig.queryType_FamilyArrest: #¼Ò×åÐüÉÍÈÎÎñÊÇ·ñÍê³É overState = PlayerFamilyAction.GetFamilyArrestOverState(curPlayer, int(sendCMD)) sendCMD = "%s" % [overState, int(sendCMD)] curPlayer.MapServer_QueryPlayerResult(queryType, queryID, queryCallName, sendCMD, len(sendCMD)) return elif queryType == ChConfig.queryType_DelFamilyAction: #Çå³ýÉêÇë¼ÓÈë¼Ò×åµÄÐÐΪÊý¾Ý familyId = int(sendCMD) PlayerFamilyAction.ClearFamilyAction(familyId, queryID, playerID=curPlayer.GetID()) return elif queryType == ChConfig.queryType_RequestIsFamily: #²éѯÊÇ·ñ»¹ÔÚÉêÇëµÄ°ï»áÉóºËÁбíÖÐ tagPlayer = playerManager.FindPlayerByID(queryID) tagMapID = GameWorld.GetQueryPlayerMapID(tagPlayer) sendCMD = '%s' % PlayerFamily.QueryRequestIsFamily(curPlayer, eval(sendCMD)) elif queryType == ChConfig.queryType_NoteTruckOwnerInfo: #ÇëÇó²éÕÒÍæ¼ÒïÚ³µ²¢¼Ç¼²¿·ÖÊôÐÔ tagPlayer = playerManager.FindPlayerByID(queryID) curPlayerTruck = GameWorld.GetTruckMananger().FindTruckByOwner(tagPlayer.GetPlayerID()) if not curPlayerTruck: #ûÓÐïÚ³µ return tagMapID = __GetQueryTruckMapID(curPlayerTruck) truckID = curPlayerTruck.GetTruckID() sendCMD = '%s' % ([truckID] + eval(sendCMD)) elif queryType == ChConfig.queryType_FamilyImpeach: #Íæ¼ÒʹÓõ¯ÛÀ·û PlayerFamily.PlayerExecLeaderImpeach(curPlayer, tick) return #½ÇÉ«¸ÄÃû elif queryType == ChConfig.queryType_UpdatePlayerName: UpdatePlayerName.MapServer_UpdatePlayerName(curPlayer, sendCMD, tick) return # ½øÈ븱±¾ elif queryType == ChConfig.queryType_EnterFB: PlayerFB.EnterFBLine(curPlayer, queryCallName, sendCMD, tick) return # ²éѯµØÍ¼NPCÐÅÏ¢ elif queryType == ChConfig.queryType_NPCInfo: __QueryMapNPCInfo(curPlayer, queryCallName, sendCMD) return # ²éѯµØÍ¼NPCÊýÁ¿ elif queryType == ChConfig.queryType_NPCCnt: __QueryMapNPCCntInfo(curPlayer, queryCallName, sendCMD, tick) return else: GameWorld.ErrLog('unKnow queryType = %s' % (queryType)) if not tagMapID: #ÎÞ·¨²éÕÒµ½Ä¿±êËùÔÚµØÍ¼,´ò»ØÇëÇó curPlayer.MapServer_QueryPlayerResult(queryType, queryID, queryCallName, '', 0) return #·¢ËÍÇëÇóÖÁÄ¿±êµØÍ¼ playerManager.MapServer_QueryPlayer(curPlayer.GetPlayerID(), queryType, queryID, tagMapID, queryCallName, sendCMD, len(sendCMD), tagPlayer.GetRouteServerIndex()) return ## ²éѯĿ±êµØÍ¼NPCÐÅÏ¢ # @param curPlayer: ÇëÇóÍæ¼Ò # @param queryCallName: ÇëÇ󻨵÷Ãû # @param sendCMD: ÇëÇóµÄÃüÁî ¸ù¾ÝÇëÇóÀàÐͺÍÇëÇóÃüÁîÀ´¾ö¶¨×îÖÕ²Ù×÷ # @return None def __QueryMapNPCInfo(curPlayer, queryCallName, sendCMD): playerManager = GameWorld.GetPlayerManager() try: mapInfo = eval(sendCMD) except BaseException: GameWorld.ErrLog("__QueryMapNPCInfo() sendCMD=%s error" % sendCMD) return if not mapInfo: return tagMapID = mapInfo[0] playerManager.MapServer_QueryPlayer(curPlayer.GetPlayerID(), ChConfig.queryType_NPCInfo, 0, tagMapID, queryCallName, sendCMD, len(sendCMD), curPlayer.GetRouteServerIndex()) return ## ²éѯĿ±êµØÍ¼NPCÊýÁ¿ # @param curPlayer: ÇëÇóÍæ¼Ò # @param queryCallName: ÇëÇ󻨵÷Ãû # @param sendCMD: ÇëÇóµÄÃüÁî ¸ù¾ÝÇëÇóÀàÐͺÍÇëÇóÃüÁîÀ´¾ö¶¨×îÖÕ²Ù×÷ # @return None def __QueryMapNPCCntInfo(curPlayer, queryCallName, sendCMD, tick): playerManager = GameWorld.GetPlayerManager() try: mapInfo = eval(sendCMD) except BaseException: GameWorld.ErrLog("__QueryMapNPCCntInfo() sendCMD=%s error" % sendCMD) return if not mapInfo: return tagMapID = mapInfo[0] npcIDList = mapInfo[2] # ±¾·þ²éѯ¿ç·þµØÍ¼¹ÖÎïÊý if tagMapID in ChConfig.Def_CrossMapIDList and not GameWorld.IsCrossServer(): __QueryCrossServerMapNPCCntInfo(curPlayer, tagMapID, npcIDList, tick) return playerManager.MapServer_QueryPlayer(curPlayer.GetPlayerID(), ChConfig.queryType_NPCCnt, 0, tagMapID, queryCallName, sendCMD, len(sendCMD), curPlayer.GetRouteServerIndex()) return def __QueryCrossServerMapNPCCntInfo(curPlayer, mapID, npcIDList, tick): ## ²éѯ¿ç·þµØÍ¼NPC¸öÊýÐÅÏ¢ if mapID in PyGameData.g_crossMapNPCInfo: infoTick, mapNPCInfoDict = PyGameData.g_crossMapNPCInfo[mapID] if tick - infoTick < 60 * 1000: #GameWorld.DebugLog("Ö±½Óͬ²½±¾·þ»º´æµÄ¿ç·þµØÍ¼NPCÐÅÏ¢") SyncPlayerCrossMapNPCInfo(curPlayer, mapID, npcIDList, mapNPCInfoDict) return # ±¾·þ»º´æ³¬Ê±£¬·¢ËÍ¿ç·þ·þÎñÆ÷²éѯ playerID = curPlayer.GetPlayerID() CrossRealmMsg.SendMsgToCrossServer(ShareDefine.ClientServerMsg_QueryNPCInfo, {"PlayerID":playerID, "MapID":mapID, "NPCIDList":npcIDList}) return def ClientServerMsg_QueryNPCInfo(serverGroupID, msgData): ## ÊÕµ½×Ó·þÇëÇó²é¿´¿ç·þµØÍ¼NPC¸öÊýÐÅÏ¢ mapID = msgData["MapID"] zoneIpyData = CrossRealmPlayer.GetServerCrossZoneMapIpyData(mapID, serverGroupID) if not zoneIpyData: return realMapID = zoneIpyData.GetMapID() copyMapID = zoneIpyData.GetCopyMapID() sendCMD = {"ServerGroupID":serverGroupID, "CopyMapID":copyMapID} sendCMD.update(msgData) sendCMD = str(sendCMD) GameWorld.GetPlayerManager().MapServer_QueryPlayer(0, 0, 0, realMapID, "NPCCntCross", sendCMD, len(sendCMD)) return def CrossServerMsg_NPCInfoRet(msgData, tick): ## ÊÕµ½¿ç·þ·þÎñÆ÷ͬ²½µÄµØÍ¼NPCÐÅÏ¢ mapID = msgData["MapID"] playerID = msgData["PlayerID"] npcIDList = msgData["NPCIDList"] mapNPCInfoDict = msgData["Result"] PyGameData.g_crossMapNPCInfo[mapID] = [tick, mapNPCInfoDict] curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID) if curPlayer: SyncPlayerCrossMapNPCInfo(curPlayer, mapID, npcIDList, mapNPCInfoDict) return def SyncPlayerCrossMapNPCInfo(curPlayer, mapID, npcIDList, mapNPCInfoDict): ## ͬ²½¸øÍæ¼Ò¿ç·þµØÍ¼NPCÐÅÏ¢ npcInfoPack = ChPyNetSendPack.tagMCNPCCntList() npcInfoPack.Clear() npcInfoPack.MapID = mapID npcInfoPack.NPCInfoList = [] for npcID in npcIDList: npcInfo = ChPyNetSendPack.tagMCNPCCntInfo() npcInfo.Clear() npcInfo.NPCID = npcID npcInfo.Cnt = mapNPCInfoDict.get(npcID, 0) npcInfoPack.NPCInfoList.append(npcInfo) npcInfoPack.NPCInfoCnt = len(npcInfoPack.NPCInfoList) NetPackCommon.SendFakePack(curPlayer, npcInfoPack) return ## »ñµÃ¼Ò×åÊôÐÔ£¨µÈ¼¶£¬ÈËÊý£©»ñµÃ×Ô¼ºËùÔÚ¼Ò×åµÄÊôÐÔ # @param curPlayer ÇëÇóµÄÍæ¼Ò # @return ³É¹¦Ôò·µ»ØÏàÓ¦µÄÐÅÏ¢£¬¼Ò×åµÈ¼¶ºÍ³ÉÔ±ÊýÁ¿£¬Èç¹û²»ÔÚ¼Ò×åÖÐÔò·µ»ØNone # @remarks º¯ÊýÏêϸ˵Ã÷£º#»ñµÃ¼Ò×åÊôÐÔ£¨µÈ¼¶£¬ÈËÊý£© def __GetPlayerFamilyProperty(curPlayer): curFamily = curPlayer.GetFamily() if not curFamily: GameWorld.Log("###´ËÍæ¼Ò%sûÓмÒ×å" % curPlayer.GetPlayerID()) return 0 #¼Ò×åµÈ¼¶ familyLV = curFamily.GetLV() #¼Ò×åÈËÊý familyCount = curFamily.GetCount() return [familyLV, familyCount] ## »ñµÃ²éѯµÄïÚ³µËùÔڵĵØÍ¼ID # @param curTruck ±»²éѯµÄïÚ³µ # @return Èç¹ûÓÐïÚ³µÔò·µ»ØïÚ³µµØÍ¼ID ·ñÔò·µ»Ø0 # @remarks º¯ÊýÏêϸ˵Ã÷£º##»ñµÃ²éѯµÄïÚ³µËùÔڵĵØÍ¼ID def __GetQueryTruckMapID(curTruck): if not curTruck: return 0 return curTruck.GetMapID() #--------------------------------------------------------------------- #////////////////////////////////////////////////////////////// #//06 04 Íæ¼ÒλÖÃÐÅÏ¢#tagGMapPlayerPos #tagGMapPlayerPos * GettagGMapPlayerPos(); # #class IPY_GMapPlayerPos #{ #public: # # int GetSrcPlayerID(); # # int GetQueryType(); # # int GetQueryID(); # # int GetCallNameLen(); # //size = CallNameLen # char * GetCallName(); # # int GetResultNameLen(); # //size = ResultNameLen # char * GetResultName(); #}; g_callCostTime = {} #{callname:[cnt,costtime,maxtime]} g_lastPrintCostTime = 0 ## »ØÓ¦_·¢ËÍÇëÇó·þÎñÆ÷²éѯ½á¹û # @param index ÇëÇóµÄÍæ¼ÒÔÚgameServerÖеÄindex # @param tick µ±Ç°µÄtick # @return ÎÞ·µ»ØÖµ # @remarks º¯ÊýÏêϸ˵Ã÷£º#»ØÓ¦_·¢ËÍÇëÇó·þÎñÆ÷²éѯ½á¹û # Èç¹ûMapServer->GameServer²éѯ½á¹ûÐèÒª»ØÓ¦Ô­ÇëÇóÕßµÄ # ÐèÒªÔÚÕâÀïÌí¼ÓÏàÓ¦µÄ»Øµ÷ def MapServer_QueryPlayerResult(index, tick): global g_lastPrintCostTime global g_callCostTime startTime = time.time() pack = IPY_GameServer.IPY_GMapPlayerPos() callName = pack.GetCallName() GameWorld.GetPsycoFunc(__Func_MapServer_QueryPlayerResult)(index, tick) costTime = time.time() - startTime if callName in g_callCostTime: g_callCostTime[callName][0] += 1 g_callCostTime[callName][1] +=costTime if costTime > g_callCostTime[callName][2]: g_callCostTime[callName][2] = costTime else: g_callCostTime[callName] = [1, costTime, costTime] if not g_lastPrintCostTime: g_lastPrintCostTime = tick if tick - g_lastPrintCostTime > 120000: GameWorld.Log(' QueryPlayerResultºÄʱ g_callCostTime=%s'%g_callCostTime) g_lastPrintCostTime = tick return ## »ØÓ¦_·¢ËÍÇëÇó·þÎñÆ÷²éѯ½á¹û # @param index ÇëÇóµÄÍæ¼ÒÔÚgameServerÖеÄindex # @param tick µ±Ç°µÄtick # @return ÎÞ·µ»ØÖµ # @remarks º¯ÊýÏêϸ˵Ã÷£º#»ØÓ¦_·¢ËÍÇëÇó·þÎñÆ÷²éѯ½á¹û # Èç¹ûMapServer->GameServer²éѯ½á¹ûÐèÒª»ØÓ¦Ô­ÇëÇóÕßµÄ # ÐèÒªÔÚÕâÀïÌí¼ÓÏàÓ¦µÄ»Øµ÷ def __Func_MapServer_QueryPlayerResult(index, tick): pack = IPY_GameServer.IPY_GMapPlayerPos() srcPlayerID = pack.GetSrcPlayerID() callName = pack.GetCallName() resultName = pack.GetResultName() #[queryid, ÈËÆøÖµ£¬ ÎïÆ·ID] if callName == "SendMail": title, content, getDays, playerIDList, addItemList, gold, goldPaper, silver, detail, moneySource = eval(resultName) limitTime = str(GameWorld.GetDatetimeByDiffDays(getDays)) limitTime = limitTime.split(".")[0] PlayerCompensation.SendPersonalItemMail(title, content, limitTime, playerIDList, addItemList, gold, goldPaper, silver, detail=detail, moneySource=moneySource) return if callName == "SendMailBatch": PlayerCompensation.SendPersonalItemMailBatch(eval(resultName)) return if callName == "SendMsgToCrossServer": msgType, dataMsg = eval(resultName) CrossRealmMsg.SendMsgToCrossServer(msgType, dataMsg) return if callName == "SendMsgToClientServer": msgType, dataMsg, serverGroupIDList = eval(resultName) CrossRealmMsg.SendMsgToClientServer(msgType, dataMsg, serverGroupIDList) return if callName == "SetCrossPlayerAttrValue": CrossRealmPlayer.SetCrossPlayerAttrValue(eval(resultName), tick) return if callName == 'CrossNotify': serverGroupIDList, crossNotifyList = eval(resultName) PlayerControl.CrossNotify(serverGroupIDList, crossNotifyList) return if callName == "CommMapServerInitOK": dataMapID, lineID, realMapID, copyMapID = eval(resultName) PyGameData.g_commMapLineInfo[(dataMapID, lineID)] = (realMapID, copyMapID) GameWorld.Log("CommMapServerInitOK dataMapID=%s,lineID=%s,realMapID=%s,copyMapID=%s" % (dataMapID, lineID, realMapID, copyMapID)) return if callName == "UpdateBillboard": #µØÍ¼·þÎñÆ÷¸üÐÂÅÅÐаñ PlayerBillboard.MapServer_UpdateBillboard(eval(resultName), tick) return if callName == 'PyAddFamilyInfoValue': #µØÍ¼·þÎñÆ÷Ôö¼ÓÕ½ÃËÐÅÏ¢Öµ curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID) if not curPlayer: return PlayerFamily.MapServer_PyAddFamilyInfoValue(curPlayer, eval(resultName)) return if callName == 'UpdateTotalRechargeBillboard': #µØÍ¼·þÎñÆ÷¸üÐÂÍæ¼Ò³äÖµ×ÜÊýÅÅÐаñ PlayerBillboard.MapServer_UpdateTotalRechargeBillboard(eval(resultName)) return if callName == 'ExitExam': #µØÍ¼·þÎñÆ÷Íæ¼ÒÍ˳ö´ðÌâ PlayerExam.MapServer_ExitAction(srcPlayerID) return if callName == 'TeamNotify': #¶ÓÎé֪ͨ teamID = pack.GetQueryID() msg, msgList = eval(resultName) PlayerControl.TeamNotify(teamID, msg, msgList) return if callName == 'ReveiveRecallAward': #Õٻؽ±ÀøÁìÈ¡Çé¿ö PlayerRecall.ReveiveRecallAwardResult(srcPlayerID, resultName) return if callName == "NotifyTruckDestroy": killTruckPlayerName, exp, zhenQi, prestige, moneyCnt, moneyType = eval(resultName) curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID) if not curPlayer: return if killTruckPlayerName: #Truck_hgg_492527 ÄúµÄïÚ³µ±»XXXX´ò½Ù,ËðʧXXX¾­Ñé,XXX½ð±Ò,xxxħ»ê PlayerControl.NotifyCode(curPlayer, "Truck_hgg_492527", [killTruckPlayerName, exp, moneyCnt, zhenQi]) else: #Truck_hgg_887936 ÄúµÄïÚ³µ²ÒÔâÏ´½Ù,ËðʧXXX¾­Ñé,XXX½ð±Ò,xxxħ»ê PlayerControl.NotifyCode(curPlayer, "Truck_hgg_887936", [exp, moneyCnt, zhenQi]) return if callName == "GMToolResult": # gmÃüÁî»Ø¸´ÐÅÏ¢ result = eval(resultName) gmResult = GMCommon.Def_Success if len(result) > 3: gmResult = result[3] gmCmdDict = {GMCommon.Def_GMKey_Type:result[2]} resultName = GMCommon.GMCommandResult(result[0], gmCmdDict, gmResult, result[1]) return # ÓÃÓڼǼȫ·þ³äÖµµÄµãȯÊý if callName == "RecordChangeCoin": GameDataRecord.ChangeCoinCnt(eval(resultName)) return #¿ç·þÆ¥ÅäPKÕ½¶·½áËã if callName == "CrossPKOver": CrossRealmPK.MapServer_CrossPKOver(eval(resultName), tick) return #¿ç·þÆ¥Åä·¿¼ä¿ªÆô if callName == "CrossPKRoomOpen": CrossRealmPK.MapServer_CrossPKRoomOpen(eval(resultName), tick) return #¿ç·þÆ¥ÅäPKÈ¡ÏûÆ¥Åä if callName == "CrossRealmPKCancel": curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID) if not curPlayer: return CrossRealmPK.SendCancelCrossRealmPKMatch(curPlayer, resultName) return #¿ç·þPKÇëÇóÍæ¼Òµ±Ç°ÅÅÃû if callName == "CrossPKSeasonOrder": curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID) if not curPlayer: return CrossRealmPK.MapServer_QueryCrossPKSeasonOrder(curPlayer, eval(resultName)) return #¿ç·þ×¢²á½á¹û if callName == "CrossRealmReg": CrossRealmPlayer.OnCrossRealmRegOK(srcPlayerID, eval(resultName), tick) return #pyÀ®°ÈÁÄÌì if callName == 'PYSpeaker': curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID) if not curPlayer: return PlayerTalk.ChatPYSpeaker(curPlayer, eval(resultName)) return #ˢб¾·þ½ÇÉ«ÐÅÏ¢ if callName == 'RefreshMainServerRole': curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID) if not curPlayer: return ChPlayer.DoRefreshMainServerRole(curPlayer) return # Õ½ÃËÁªÈü if callName =="FamilyWarOver": GameWorldFamilyWar.MapServer_FamilyWarOver(eval(resultName)) return # ɾ³ýͨÓÃÍæ¼ÒRecÊý¾Ý if callName == "AddUniversalGameRec": curPlayer = None if not srcPlayerID else GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID) recType, valueList, strValueList, notifyType, isSort = eval(resultName) GameWorld.Log("AddUniversalGameRec recType=%s, valueList=%s, strValueList=%s, notifyType=%s, isSort=%s" % (recType, valueList, strValueList, notifyType, isSort)) PlayerUniversalGameRec.MapServer_UniversalGameRec(curPlayer, recType, valueList, strValueList, notifyType, isSort) return # ɾ³ýͨÓÃÍæ¼ÒRecÊý¾Ý if callName == "DelUniversalGameRec": recType, notifyType = eval(resultName) curPlayer = None if not srcPlayerID else GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID) if recType in ShareDefine.Def_UniversalGameRecTypeList: GameWorld.Log("DelUniversalGameRec recType=%s" % recType) GameWorld.GetUniversalRecMgr().Delete(recType) if notifyType == 1: PlayerUniversalGameRec.SendUniversalGameRecInfo(curPlayer, recType) elif notifyType == 2: PlayerUniversalGameRec.SendUniversalGameRecInfo(None, recType) return # Õ½Ã˸±±¾boss¿ªÊ¼¡¢±»»÷ɱ if callName =="FamilyBossFBState": PlayerFamilyBoss.FamilyBossOnKilled(eval(resultName), tick) return # »÷ɱbossµôÂäºÃÎïÆ· if callName =="BossDropGoodItem": GameWorldBoss.OnKillBossDropGoodItem(eval(resultName), tick) return # »÷ɱÊÀ½çboss if callName =="KillGameWorldBoss": GameWorldBoss.DoGameWorldBossOnKilled(eval(resultName), tick) return # ÊÀ½çboss״̬ if callName =="GameWorldBossState": GameWorldBoss.OnGameWorldBossStateChange(eval(resultName), tick) return # ÏÉÃ˹éÊôbossÐÅϢͬ²½ if callName =="FamilyOwnerBossInfo": GameWorldBoss.MapServer_FamilyOwnerBossInfo(eval(resultName)) return # Æï³èÕù¶áÉËÑªÍæ¼Òͬ²½ if callName =="HorsePetRobBossHurtPlayer": GameWorldBoss.MapServer_HorsePetRobBossHurtPlayer(eval(resultName)) return # È«¾ÖµôÂäCD if callName =="GlobalDropCD": GameWorldProcess.UpdGlobalDropCD(eval(resultName)) return # È«¾Ö»÷ɱÊý»»ËãµôÂä¸ÅÂÊ if callName =="GlobalDropRate": GameWorldProcess.UpdGlobalDropRate(eval(resultName)) return # È«¾Ö»÷ɱÊýͳ¼Æ if callName =="GlobalKillCount": GameWorldProcess.UpdGlobalKillCount(eval(resultName)) return # ÐÂÊÖÖ¸µ¼Ô±ÌìÊý if callName =="FreshmanGuiderDay": curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID) if not curPlayer: return guiderDay = eval(resultName)[0] PlayerControl.SetFreshmanGuiderDay(curPlayer, guiderDay) return #Éú³ÉÏÉÃ˺ì°ü if callName == "MapServer_CreatRedPacket": PlayerFamilyRedPacket.MapServer_CreatRedPacket(eval(resultName)) return #·¢ÏÉÃ˺ì°ü if callName == 'SendFamilyRedPacket': PlayerFamilyRedPacket.SendFamilyRedPacket(eval(resultName)) return #ÇÀÏÉÃ˺ì°ü if callName == 'GrabFamilyRedPacket': curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID) if not curPlayer: return PlayerFamilyRedPacket.DoGrabFamilyRedPacket(curPlayer, eval(resultName)) return #¾³½ç¶É½ÙÇëÇóÃËÓÑ»¤·¨ if callName == 'GetMemberForHelpDujie': curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID) if not curPlayer: return PlayerDuJie.GetMemberForHelpDujie(curPlayer, eval(resultName)) return #¾³½ç¶É½Ù¸±±¾½áÊø if callName =="DuJieFBOver": PlayerDuJie.DoDuJieFBOver(eval(resultName)) return #¾³½çÌáÉýÈ«·þbuff if callName =="RealmUpAddBuff": PlayerDuJie.DoRealmUpAddBuff(resultName) return # ×é¶Ó¸±±¾¶Ó³¤ÇëÇó½øÈëѯÎʽá¹û if callName == "EnterFBTeamAsk": if not resultName: return curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID) if not curPlayer: return PlayerTeam.OnEnterFBTeamAskResult(curPlayer, eval(resultName), tick) return # ½»Ò×Ëù¸øÍêÍæ¼ÒÊÕÒæ if callName == "GivePlayerBourseGainsResult": curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID) if not curPlayer: return PlayerBourse.OnGivePlayerBourseGainsResult(curPlayer, eval(resultName)) return # ÅÄÂôÐÐ if callName == "AuctionHouse": curPlayer = None if srcPlayerID: curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID) if not curPlayer: return AuctionHouse.MapServer_AuctionHouseLogic(curPlayer, eval(resultName), tick) return if callName == "TeamMemFuncData": PlayerTeam.MapServer_TeamMemFuncData(srcPlayerID, eval(resultName)) return #·âħ̳½áÊø if callName == "SealDemonOver": playerID, lineID, rank = eval(resultName) PyDataManager.GetSealDemonRecordManager().UpdateSealDemonRecord(playerID,lineID,rank) return #²éѯ¸±±¾¹¦ÄÜÏß·ÈËÊý if callName == "FBLinePlayerCnt": curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID) if not curPlayer: return ChPlayer.QueryFBLinePlayerCntResult(curPlayer, eval(resultName)) return #¸ü¸ÄÏÉÃËÃû×Ö if callName == "UpdateFamilyName": curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID) if not curPlayer: return PlayerFamily.RenameFamily(curPlayer, resultName) return #ÏÉħ֮ÕùPK½áËã if callName == "XMZZPKOver": curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID) if not curPlayer: return vsName, isWin, isEnd, HPPer = eval(resultName) PlayerXMZZ.XMZZPKOver(curPlayer, vsName, isWin, isEnd, HPPer) return #ÏÉħ֮ÕùÆ¥Åä¶ÔÊÖ if callName == "XMZZStartFight": curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID) if not curPlayer: return ret = PlayerXMZZ.XMZZStartFight(curPlayer, eval(resultName)) if ret == None: return resultName = '%s' % ret #·þÎñ¶ËË¢¹Ö°æ±¾ÔÝʱֱ½Ó·µ»Ø return #ÊØÎÀÈ˻ʸ±±¾½áÊø if callName =="SWRHFBOver": PlayerFamilySWRH.SWRHFBOver(eval(resultName)) return #ÊÀ½çboss·ÖÁ÷Íæ¼Ò if callName =="WorldBossShuntInfo": GameWorldBoss.MapServer_WorldBossShuntInfo(eval(resultName), tick) return #Ôö¼Óboss¸´»îµã if callName =="AddBossRebornPoint": GameWorldBoss.AddBossRebornPoint(eval(resultName)) return #¶àÏÉÃËBOSS½áÊø if callName =="AllFamilyBossOver": PlayerFamilyBoss.AllFamilyBossKilled() return #Æï³èBOSS½áÊø if callName =="HorsePetBossOver": PlayerHorsePetBoss.HorsePetBossKilled(int(resultName)) return #---return·Ö¸îÏß----------------------------------------------------------------- #---ÓпÉÄÜreturn----------------------------------------------------------------- #É̳ÇÈ«·þ¹ºÂòÏÞÖÆ if callName == "GetStoreServerBuyCnt": curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID) if not curPlayer: return ret = PlayerStore.DoStoreServerBuyQueryResult(curPlayer, eval(resultName)) if ret == None: resultName = '' else: resultName = '%s' % ret #Íæ¼ÒµÈ¼¶½±Àø if callName == "GetPlayerLVAward": curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID) if not curPlayer: return ret = PlayerLVAward.DoLVAwardQueryResult(curPlayer, eval(resultName)) resultName = '%s' % ret # ÏÉħ֮Õùʤ³¡½±Àø if callName == "GetXMZZWinPrize": curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID) if not curPlayer: return ret = PlayerXMZZ.OnGetXMZZWinPrize(curPlayer, eval(resultName)) if ret == None: return resultName = '%s' % ret #ÏÉħ֮ÕùѺע if callName == "XMZZBet": curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID) if not curPlayer: return ret = PlayerXMZZ.OnXMZZBet(curPlayer, eval(resultName)) if ret == None: return resultName = '%s' % ret if callName == 'SendInviteCode': #ÑûÇëÂëÑéÖ¤»Ø¸´ resultName = PlayerRecall.PlayerRecall_InviteCode(srcPlayerID, pack.GetQueryID()) if callName == 'OpenServerCampaignAward': #¿É·ñÁìÈ¡¿ª·þ»î¶¯½±Àø curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID) resultName = '%s' % GameWorldOpenServerCampaign.CanGiveCampaignAward(curPlayer, eval(resultName)) # Íæ¼Ò×ÔÉíÕ½Ã˿Ƽ¼µÈ¼¶ÌáÉý, ¸ÄΪµØÍ¼Ö±½Ó´¦Àí, ÔÝÆÁ±Î # if callName == 'PlayerFamilyTechLVUP': # curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID) # resultName = '%s' % PlayerFamilyTech.OnQuery_PlayerFamilyTechLVUP(curPlayer, eval(resultName)) # ¸±±¾ÖúÕ½ if callName =="FBHelpBattle": curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID) if not curPlayer: return ret = PlayerFBHelpBattle.MapServer_FBHelpBattle(curPlayer, eval(resultName)) if ret == None: return resultName = '%s' % ret # # Õ½Ã˲ֿâ # if callName == "FamilyStore": # curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID) # if not curPlayer: # return # resultName = '%s' % PlayerFamilyStore.DoMapServerFamilyStore(curPlayer, eval(resultName), tick) srcPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID) if not srcPlayer: return srcPlayer.MapServer_QueryPlayerResult(pack.GetQueryType(), pack.GetQueryID(), callName, resultName, len(resultName)) return #--------------------------------------------------------------------- ##»ñÈ¡³èÎï¸ÄÃûÑéÖ¤ºóµÄÁбí # @param petID ³èÎïID # @param checkName ³èÎïÐèÒª¸ÄµÄÃû×Ö # @return [³èÎïID, ³èÎïÃû×Ö] # @remarks def __GetCheckDirtyResultStrList(petID, checkName): #Èç¹ûÔà»°Ôò ·µ»ØµÄÃû×ÖΪ¿Õ´® ÒòmapServer²»»á·¢¿Õ´®À´ÇëÇóÄÜ·ñ¸ÄÃû ÒÔ´ËÔ¼¶¨ Èç¹ûÊÕµ½µÄÃû×ÖΪ¿Õ´® ÔòÈÏΪÊÇÔà»°²»ÄÜͨ¹ý if DirtyList.IsWordForbidden(checkName): checkName = '' return '%s' % [petID, checkName] ## »ñµÃÖÐÁ¢µØÍ¼É±ËÀÍæ¼ÒÊý¾Ý # @param curPlayer: Íæ¼ÒʵÀý # @param killedPlayerID: ±»É±Íæ¼Òid # @return: None def GetFamilyMemberKillData(curPlayer, killedPlayerID): killPlayerCnt = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_KillFamilyPlayerCnt) # ѰÕÒÊÇ·ñÒѾ­ÓмǼ curData = 0 killCnt = 0 for index in range(killPlayerCnt): curDictKey = ChConfig.Def_PlayerKey_KillFamilyPlayer % index killData = curPlayer.GetDictByKey(curDictKey) # ¼Ç¼ÖÐ×îºóÁ½Î»Ê±»÷ɱ´ÎÊý,Íæ¼Òid*100+´ÎÊý if killData / 100 == killedPlayerID: curData = killData break if curData != 0: # ÉèÖû÷ɱÊýÁ¿ killCnt = curData % 100 # ÓÐÐÂÊý¾Ý else: curDictKey = ChConfig.Def_PlayerKey_KillFamilyPlayer % killPlayerCnt curPlayer.SetDict(ChConfig.Def_PlayerKey_KillFamilyPlayerCnt, killPlayerCnt + 1) curPlayer.SetDict(curDictKey, killedPlayerID * 100 + killCnt + 1) return curDictKey, killCnt ## Çå³ýÖÐÁ¢µØÍ¼É±ËÀÍæ¼ÒÊý¾Ý # @param curPlayer: Íæ¼ÒʵÀý # @param killedPlayerID: ±»É±Íæ¼Òid # @return: None def ClearFamilyMemberKillData(curPlayer): killPlayerCnt = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_KillFamilyPlayerCnt) curPlayer.SetDict(ChConfig.Def_PlayerKey_KillFamilyPlayerCnt, 0) for index in range(killPlayerCnt): curPlayer.SetDict(ChConfig.Def_PlayerKey_KillFamilyPlayer % killPlayerCnt, 0) return