From 78f005e3fe86b6033255b37b03061cb491812dcb Mon Sep 17 00:00:00 2001 From: xdh <xiefantasy@qq.com> Date: 星期四, 24 一月 2019 15:07:35 +0800 Subject: [PATCH] 2936 【1.5.100】诛仙塔挑战失败也会给予奖励并扣除次数 --- ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py | 141 +++++++++++++++++++++++++++++++++-------------- 1 files changed, 99 insertions(+), 42 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py index 2f5eb69..d72f77f 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py @@ -46,19 +46,14 @@ import ShareDefine import GameDataRecord import GameWorldShopItem -import PlayerMergeRegister import PlayerCompensation import PlayerFB import UpdatePlayerName import PlayerFamilyBoss import PlayerManorWar import GameWorldBoss -import MergeBroadcast import GameWorldFamilyWar -import GameWorldMergeKing -import GameWorldMergePK #import PlayerFamilyTech -import MergeChildMsg import PlayerFamilyRedPacket import PlayerFBHelpBattle import PlayerFamilyStore @@ -77,6 +72,8 @@ import CrossRealmPlayer import CrossRealmMsg import CrossRealmPK +import ChPyNetSendPack +import NetPackCommon import time import datetime @@ -263,7 +260,7 @@ return # 查询地图NPC数量 elif queryType == ChConfig.queryType_NPCCnt: - __QueryMapNPCCntInfo(curPlayer, queryCallName, sendCMD) + __QueryMapNPCCntInfo(curPlayer, queryCallName, sendCMD, tick) return else: GameWorld.ErrLog('unKnow queryType = %s' % (queryType)) @@ -304,7 +301,7 @@ # @param queryCallName: 请求回调名 # @param sendCMD: 请求的命令 根据请求类型和请求命令来决定最终操作 # @return None -def __QueryMapNPCCntInfo(curPlayer, queryCallName, sendCMD): +def __QueryMapNPCCntInfo(curPlayer, queryCallName, sendCMD, tick): playerManager = GameWorld.GetPlayerManager() try: mapInfo = eval(sendCMD) @@ -316,9 +313,78 @@ 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 请求的玩家 @@ -439,9 +505,13 @@ CrossRealmMsg.SendMsgToClientServer(msgType, dataMsg, serverGroupIDList) return - if callName == 'MergeWorldNotify': - country, msgMark, msgParamList, lineID, mergeMinOSD, mergeMaxOSD, mergeMapInfo = eval(resultName) - PlayerControl.MergeWorldNotify(country, msgMark, msgParamList, lineID, mergeMinOSD, mergeMaxOSD, mergeMapInfo, 1) + if callName == "SetCrossPlayerAttrValue": + CrossRealmPlayer.SetCrossPlayerAttrValue(eval(resultName), tick) + return + + if callName == 'CrossNotify': + serverGroupIDList, crossNotifyList = eval(resultName) + PlayerControl.CrossNotify(serverGroupIDList, crossNotifyList) return if callName == "CommMapServerInitOK": @@ -532,30 +602,14 @@ GameDataRecord.ChangeCoinCnt(eval(resultName)) return - #跨服广播子服 - if callName == 'SendBroadcastMergeClient': - operType, mapID, dataDict, isRepeat = eval(resultName) - MergeBroadcast.SendBroadcastMerge(operType, mapID, dataDict, isRepeat) - return - - #跨服赛报名获得新账号 - #if callName == 'MergeRegister': - # PlayerMergeRegister.MergeWarRegisterNewAcc(srcPlayerID, eval(resultName), tick) - # return - - #跨服王者争霸 - if callName == 'MergeKingFB': - GameWorldMergeKing.MapServer_MergeKingFB(eval(resultName)) - return - #跨服匹配PK战斗结算 if callName == "CrossPKOver": - CrossRealmPK.MapServer_MergePKOver(eval(resultName)) + CrossRealmPK.MapServer_CrossPKOver(eval(resultName), tick) return #跨服匹配房间开启 if callName == "CrossPKRoomOpen": - CrossRealmPK.MapServer_CrossPKRoomOpen(eval(resultName)) + CrossRealmPK.MapServer_CrossPKRoomOpen(eval(resultName), tick) return #跨服匹配PK取消匹配 @@ -564,6 +618,14 @@ 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 #跨服注册结果 @@ -577,6 +639,14 @@ 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 # 战盟联赛 @@ -782,11 +852,7 @@ if callName =="AddBossRebornPoint": GameWorldBoss.AddBossRebornPoint(eval(resultName)) return - #通知神兽副本NPC刷新时间 - if callName =="DogzNPCTime": - PyGameData.g_dogzNPCRefreshTimeDict = eval(resultName) - GameWorldBoss.Sync_DogzNPCRefreshTime() - return + #---return分割线----------------------------------------------------------------- @@ -844,15 +910,6 @@ curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID) resultName = '%s' % GameWorldOpenServerCampaign.CanGiveCampaignAward(curPlayer, eval(resultName)) - # 跨服PK奖励 - if callName == 'MergePKAward': - curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID) - resultName = '%s' % GameWorldMergePK.MapServer_QueryMergePKAward(curPlayer, eval(resultName)) - - # 跨服王者争霸 - if callName == 'MergeKing': - curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID) - resultName = '%s' % GameWorldMergeKing.MapServer_MergeKingQuery(curPlayer, eval(resultName)) # 玩家自身战盟科技等级提升, 改为地图直接处理, 暂屏蔽 # if callName == 'PlayerFamilyTechLVUP': -- Gitblit v1.8.0