| | |
| | | import CrossRealmPlayer
|
| | | import CrossRealmMsg
|
| | | import CrossRealmPK
|
| | | import ChPyNetSendPack
|
| | | import NetPackCommon
|
| | |
|
| | | import time
|
| | | import datetime
|
| | |
| | | return
|
| | | # 查询地图NPC数量
|
| | | elif queryType == ChConfig.queryType_NPCCnt:
|
| | | __QueryMapNPCCntInfo(curPlayer, queryCallName, sendCMD)
|
| | | __QueryMapNPCCntInfo(curPlayer, queryCallName, sendCMD, tick)
|
| | | return
|
| | | else:
|
| | | GameWorld.ErrLog('unKnow queryType = %s' % (queryType))
|
| | |
| | | # @param queryCallName: 请求回调名
|
| | | # @param sendCMD: 请求的命令 根据请求类型和请求命令来决定最终操作
|
| | | # @return None
|
| | | def __QueryMapNPCCntInfo(curPlayer, queryCallName, sendCMD):
|
| | | def __QueryMapNPCCntInfo(curPlayer, queryCallName, sendCMD, tick):
|
| | | playerManager = GameWorld.GetPlayerManager()
|
| | | try:
|
| | | mapInfo = eval(sendCMD)
|
| | |
| | | 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.GetServerCrossZoneIpyData(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 请求的玩家
|
| | |
| | | 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))
|