From 57d60ef7648868c76189d3a127dc3e5f0800f6f3 Mon Sep 17 00:00:00 2001 From: xdh <xiefantasy@qq.com> Date: 星期四, 27 六月 2019 14:27:31 +0800 Subject: [PATCH] 7589 【2.0.100】【后端】资源找回优化 --- ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py | 58 ++++++++++++++++++++++++++++++++++------------------------ 1 files changed, 34 insertions(+), 24 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py index b83b6f9..e35ab19 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py @@ -48,10 +48,9 @@ import PlayerGeTui import IPY_GameServer import CrossBoss +import PlayerFB import time -import json - ''' ShareDefine.Def_UniversalGameRecType_BossInfo @@ -104,12 +103,12 @@ if bossID <= 0: return - bossID, killPlayerName, hurtValue, isNotify, realMapID, dataMapID, copyMapID, killerIDList = msgList + bossID, killPlayerName, hurtValue, isNotify, mapID, realMapID, copyMapID, killerIDList = msgList + mapID = PlayerFB.GetRecordMapID(mapID) if GameWorld.IsCrossServer(): - CrossBoss.DoCrossBossOnKilled(bossID, killPlayerName, realMapID, dataMapID, copyMapID, killerIDList) + CrossBoss.DoCrossBossOnKilled(bossID, killPlayerName, mapID, realMapID, copyMapID, killerIDList) return - mapID = dataMapID isAddKillCnt = False isMapNeedShunt = IsMapNeedBossShunt(mapID) @@ -160,13 +159,14 @@ ## 世界boss状态变更 if len(msgList) <= 0: return - - bossID, isAlive, dataMapID, realMapID, copyMapID = msgList + + bossID, isAlive, mapID, realMapID, copyMapID = msgList + mapID = PlayerFB.GetRecordMapID(mapID) if GameWorld.IsCrossServer(): - CrossBoss.DoCrossBossStateChange(bossID, isAlive, dataMapID, realMapID, copyMapID) + CrossBoss.DoCrossBossStateChange(bossID, isAlive, mapID, realMapID, copyMapID) return - mapID, lineID = dataMapID, copyMapID + lineID = copyMapID GameWorld.Log("世界boss状态变更: mapID=%s,lineID=%s,bossID=%s,state=%s,tick=%s" % (mapID, lineID, bossID, isAlive, tick)) if bossID <= 0: @@ -323,7 +323,19 @@ def OnQueryBossInfo(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) bossIDList = clientData.BossIDList - Sync_BossInfo(curPlayer, bossIDList) + if not bossIDList: + Sync_BossInfo(curPlayer) + CrossBoss.Sync_CrossBossInfo(curPlayer) + return + bossID = bossIDList[0] + ipyData = IpyGameDataPY.GetIpyGameData('BOSSInfo', bossID) + if not ipyData: + return + mapID = ipyData.GetMapID() + if mapID in ChConfig.Def_CrossMapIDList: + CrossBoss.Sync_CrossBossInfo(curPlayer, bossIDList) + else: + Sync_BossInfo(curPlayer, bossIDList) return @@ -484,9 +496,8 @@ isAlive = __GetIsAlive(bossID) if not isAlive: continue - mapID = ipyData.GetMapID() - if mapID not in ChConfig.WorldBossFBMapIDList: - GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_GameWorldBossReborn % bossID, 1) + #if mapID not in ChConfig.WorldBossFBMapIDList: + GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_GameWorldBossReborn % bossID, 1) return ## 玩家登录通知 @@ -537,9 +548,9 @@ def OnKillBossDropGoodItem(msgList, tick): # playerName, mapID, npcID, itemID, userData - if len(msgList) != 8: + if len(msgList) != 10: return - playerID, killerName, mapID, npcID, itemID, userData, weightValue, serverGroupID = msgList + playerID, killerName, mapID, lineID, npcID, itemID, userData, weightValue, serverGroupID, playerLV = msgList GameWorld.DebugLog("击杀Boss掉落好物品: mapID=%s,npcID=%s,killerName=%s,itemID=%s, userData=%s, weightValue=%s, serverGroupID=%s" % (mapID, npcID, killerName, itemID, userData, weightValue, serverGroupID)) maxRecordCnt = IpyGameDataPY.GetFuncCfg('DropRecordNum') @@ -550,7 +561,7 @@ # 同步到玩家对应子服 if not serverGroupID: return - zoneIpyData = CrossRealmPlayer.GetCrossCommZoneIpyDataByServerGroupID(serverGroupID) + zoneIpyData = CrossRealmPlayer.GetCrossZoneIpyDataByServerGroupID(mapID, serverGroupID) if not zoneIpyData: return serverGroupIDList = zoneIpyData.GetServerGroupIDList() @@ -584,10 +595,10 @@ if commonList and commonList[0][0] != -1: recordList.Delete(commonList[0][0]) - PlayerUniversalGameRec.MapServer_UniversalGameRec(None, recType, [mapID, npcID, itemID, playerID, weightValue], - [killerName, "", userData]) + PlayerUniversalGameRec.MapServer_UniversalGameRec(None, recType, [mapID*100+lineID, npcID, itemID, playerID, weightValue], + [killerName, '%s|%s'%(serverGroupID, playerLV), userData]) - msgList = [killerName, playerID, mapID, npcID, itemID, userData] + msgList = [killerName, playerID, mapID, npcID, itemID, userData, serverGroupID, playerLV, lineID] PlayerControl.WorldNotify(0, 'DropRecord' , msgList) return @@ -719,10 +730,9 @@ # RecordData改json记录 bossid存为字符串 def UpdateBossAttention(self, playerid, bossid, isAdd): - bossid = str(bossid) if playerid in self.bossAttentionDict: bossAttentionData = self.bossAttentionDict[playerid] - recordDict = json.loads(bossAttentionData.RecordData) + recordDict = eval(bossAttentionData.RecordData) if isAdd: recordDict[bossid] = isAdd else: @@ -733,7 +743,7 @@ self.bossAttentionDict.pop(playerid) else: - bossAttentionData.RecordData = json.dumps(recordDict, ensure_ascii=False) + bossAttentionData.RecordData = str(recordDict) bossAttentionData.DataLen = len(bossAttentionData.RecordData) else: if not isAdd: @@ -741,7 +751,7 @@ bossAttention = PyGameDataStruct.tagDBPyBossAttention() bossAttention.clear() bossAttention.PlayerID = playerid - bossAttention.RecordData = json.dumps({bossid:isAdd}, ensure_ascii=False) + bossAttention.RecordData = str({bossid:isAdd}) bossAttention.DataLen = len(bossAttention.RecordData) self.bossAttentionDict[playerid] = bossAttention @@ -755,7 +765,7 @@ attentionData = self.bossAttentionDict.get(curPlayer.GetPlayerID()) if not attentionData: return - bttentionDict = json.loads(attentionData.RecordData) + bttentionDict = eval(attentionData.RecordData) packData = ChPyNetSendPack.tagGCBossAttentionInfo() packData.BossList = [] for bossid, addState in bttentionDict.items(): -- Gitblit v1.8.0