| #!/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 CrossBillboard  | 
| import PlayerBillboard  | 
| import PlayerExam  | 
| import PlayerControl  | 
| 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 PlayerFamilyZhenfa  | 
| 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 CrossYaomoBoss  | 
| import CrossRealmPlayer  | 
| import CrossRealmMsg  | 
| import CrossRealmPK  | 
| import CrossChampionship  | 
| import CrossBattlefield  | 
| import CrossActAllRecharge  | 
| import ChPyNetSendPack  | 
| import NetPackCommon  | 
| import AuctionHouse  | 
| import PlayerFairyDomain  | 
| import GameWorldSkyTower  | 
| import GameWorldArena  | 
| import GameWorldItem  | 
| import PlayerAssist  | 
| import PlayerLove  | 
|   | 
| import time  | 
| import datetime  | 
| import json  | 
| #---------------------------------------------------------------------  | 
| #È«¾Ö±äÁ¿  | 
| #---------------------------------------------------------------------  | 
|   | 
| #---------------------------------------------------------------------  | 
| #Â߼ʵÏÖ  | 
|   | 
| #---------------------------------------------------------------------  | 
| #//////////////////////////////////////////////////////////////  | 
| #//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  | 
|           | 
|     serverGroupID = GameWorld.GetServerGroupID()  | 
|     zoneIpyData = CrossRealmPlayer.GetCrossZoneIpyDataByServerGroupID(mapID, serverGroupID)  | 
|     if not zoneIpyData:  | 
|         return  | 
|     zoneID = zoneIpyData.GetZoneID()  | 
|       | 
|     # ±¾·þ»º´æ³¬Ê±£¬·¢ËÍ¿ç·þ·þÎñÆ÷²éѯ  | 
|     playerID = curPlayer.GetPlayerID()  | 
|     dataMsg = {"PlayerID":playerID, "ZoneID":zoneID, "MapID":mapID, "NPCIDList":npcIDList}  | 
|     CrossRealmMsg.SendMsgToCrossServer(ShareDefine.ClientServerMsg_QueryNPCInfo, dataMsg)  | 
|     return  | 
|   | 
| def ClientServerMsg_QueryNPCInfo(serverGroupID, msgData):  | 
|     ## ÊÕµ½×Ó·þÇëÇó²é¿´¿ç·þµØÍ¼NPC¸öÊýÐÅÏ¢  | 
|       | 
|     zoneID = msgData["ZoneID"]  | 
|     mapID = msgData["MapID"]  | 
|       | 
|     zoneIpyData = CrossRealmPlayer.GetServerCrossZoneMapIpyData(zoneID, mapID)  | 
|     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 == "PlayerRealLoginOK":  | 
|         curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)  | 
|         if not curPlayer:  | 
|             return  | 
|         loginMsg = eval(resultName)  | 
|         ChPlayer.DoPlayerRealLoginOK(curPlayer, loginMsg, tick)  | 
|         return  | 
|       | 
|     if callName == "SendMail":  | 
|         title, content, getDays, playerIDList, addItemList, gold, goldPaper, silver, detail, moneySource, crossMail = 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, crossMail=crossMail)  | 
|         return  | 
|       | 
|     if callName == "SendMailBatch":  | 
|         PlayerCompensation.SendPersonalItemMailBatch(eval(resultName))  | 
|         return  | 
|       | 
|     if callName == "SendEntireMail":  | 
|         mailTypeKey, getDays, limitLV, limitLVType, addItemList, paramList, gold, goldPaper, silver, detail, moneySource = eval(resultName)  | 
|         PlayerCompensation.SendEntireMail(mailTypeKey, getDays, limitLV, limitLVType, addItemList, paramList, gold, goldPaper, silver, detail, moneySource)  | 
|         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 == "DynamicLineMapStateChange":  | 
|         PlayerFB.OnCrossDynamicLineStateChange(eval(resultName))  | 
|         return  | 
|       | 
|     if callName == "DynamicLineMapInitOK":  | 
|         PlayerFB.OnCrossDynamicMapReset(eval(resultName))  | 
|         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 == "UpdateCrossBillboard":     #µØÍ¼·þÎñÆ÷¸üпç·þÅÅÐаñ  | 
|         CrossBillboard.MapServer_UpdateCrossBillboard(eval(resultName))  | 
|         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 == 'FuncOpen':  | 
|         curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)  | 
|         if not curPlayer:  | 
|             return  | 
|         PlayerControl.DoFuncOpenLogic(curPlayer, eval(resultName))  | 
|         return  | 
|       | 
|     if  callName == 'TeamNotify':  | 
|         #¶ÓÎé֪ͨ  | 
|         teamID = pack.GetQueryID()  | 
|         msg, msgList = eval(resultName)  | 
|           | 
|         PlayerControl.TeamNotify(teamID, msg, msgList)  | 
|         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 == "CrossChampionshipPKOver":  | 
|         CrossChampionship.MapServer_CrossChampionshipPKOver(eval(resultName), tick)  | 
|         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  | 
|       | 
|     # ¿ç·þÕ½³¡½áËã  | 
|     if callName =="CrossBattlefieldOver":  | 
|         CrossBattlefield.MapServer_CrossBattlefieldOver(eval(resultName))  | 
|         return  | 
|       | 
|     # ¿ç·þÑýħbossÉ˺¦½áËã  | 
|     if callName =="CrossYaomoBossHurtInfo":  | 
|         CrossYaomoBoss.MapServer_CrossYaomoBossHurtInfo(eval(resultName))  | 
|         return  | 
|       | 
|     # ¿ç·þÈ«Ãñ³äÖµ  | 
|     if callName == "CrossActAllRecharge":  | 
|         curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)  | 
|         if not curPlayer:  | 
|             return  | 
|         CrossActAllRecharge.MapServer_CrossActAllRecharge(curPlayer, eval(resultName))  | 
|         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 =="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 == "NotifyEquipDetailInfo":  | 
|         GameWorldItem.OnCacheNotifyEquipDetailInfo(json.loads(resultName), tick)  | 
|         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 == "PlayerAssist":  | 
|         curPlayer = None  | 
|         if srcPlayerID:  | 
|             curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)  | 
|             if not curPlayer:  | 
|                 return  | 
|         PlayerAssist.MapServer_PlayerAssistLogic(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  | 
|     #ÏÉÃËÕó·¨  | 
|     if callName =="FamilyZhenfa":  | 
|         curPlayer = None  | 
|         if srcPlayerID:  | 
|             curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)  | 
|             if not curPlayer:  | 
|                 return  | 
|         PlayerFamilyZhenfa.MapServer_FamilyZhenfa(curPlayer, eval(resultName))  | 
|         return  | 
|     #ÏÉÃË´«¹¦  | 
|     if callName =="FamilyChuangong":  | 
|         curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)  | 
|         if not curPlayer:  | 
|             return  | 
|         PlayerFamily.MapServer_FamilyChuangong(curPlayer, eval(resultName))  | 
|         return  | 
|     #Æï³èBOSS½áÊø  | 
|     if callName =="HorsePetBossOver":  | 
|         PlayerHorsePetBoss.HorsePetBossKilled(int(resultName))  | 
|         return  | 
|     #çÎç¿ÏÉÓòʼþ³öÏÖ  | 
|     if callName =="AddFairyDomainEvent":  | 
|         PlayerFairyDomain.AddFairyDomainEvent(eval(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 == '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 =="Arena":  | 
|         curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)  | 
|         if not curPlayer:  | 
|             return  | 
|         ret = GameWorldArena.MapServer_Arena(curPlayer, eval(resultName))  | 
|         resultName = '%s' % ret if ret != None else '' # ÐèÒªÖØÖüä¸ô£¬Ã¿´Î¶¼»Ø¸´  | 
|           | 
|     # ÏÉÃËboss  | 
|     if callName =="FamilyBoss":  | 
|         ret = PlayerFamilyBoss.MapServer_FamilyBoss(eval(resultName), tick)  | 
|         if ret == None:  | 
|             return  | 
|         resultName = '%s' % ret  | 
|           | 
|     # ÇéÔµ  | 
|     if callName =="Love":  | 
|         curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)  | 
|         if not curPlayer:  | 
|             return  | 
|         ret = PlayerLove.MapServer_Love(curPlayer, eval(resultName))  | 
|         if ret == None:  | 
|             return  | 
|         resultName = '%s' % ret  | 
|           | 
|     # ÌìÐÇËþ  | 
|     if callName == "SkyTower":  | 
|         curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)  | 
|         if not curPlayer:  | 
|             return  | 
|         ret = GameWorldSkyTower.MapServer_SkyTowerInfo(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)  | 
|       | 
|     if not srcPlayerID:  | 
|         return  | 
|       | 
|     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  | 
|   | 
|       |