From 9684c4b7c4fdad50a85e506207239ac89545d06c Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期四, 20 五月 2021 18:22:45 +0800 Subject: [PATCH] 5071 【BT2】【主干】【gt_1.100.6】外网出现boss无法死亡。(添加死亡检查日志明细) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCHurtManager.py | 49 +++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 45 insertions(+), 4 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCHurtManager.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCHurtManager.py index 6147fab..916e36e 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCHurtManager.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCHurtManager.py @@ -79,6 +79,7 @@ self.__assistAwardItemID = 0 # 协助奖励礼盒ID self.__assistAwardResult = {} # {playerID:{assistPlayerID:{协助玩家信息数据字典}, ...}} + self.logDetail = False # 是否输出日志明细 return def Clear(self): @@ -450,12 +451,13 @@ return - def RefreshHurtList(self, tick, refreshInterval=3000, isDead=False): + def RefreshHurtList(self, tick, refreshInterval=3000, isDead=False, checkCanDead=False): ## 刷新伤血列表 # @return: atkPlayer, hurtID, hurtType curNPC = self.curNPC - + self.logDetail = (isDead or checkCanDead) + if not isDead: if refreshInterval and tick - curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_LastRefreshHurtTick) < refreshInterval: return self.__GetAtkObjByHurtList(isDead) @@ -467,6 +469,9 @@ for hurtKey in self.__hurtDict.keys(): #获得伤血对象 hurtID, hurtType = hurtKey + if self.logDetail: + GameWorld.Log(" hurtID=%s, hurtType=%s" % (hurtID, hurtType)) + if not hurtID: continue @@ -483,6 +488,9 @@ if self.__UnAssistPlayerHurtValidLogic(teamPlayerID, refreshPoint, tick): hurtPlayerDict[teamPlayerID] = teamID + if self.logDetail: + GameWorld.Log(" hurtPlayerDict=%s" % str(hurtPlayerDict)) + mapID = GameWorld.GetMap().GetMapID() if NPCCommon.IsMapNeedBossShunt(mapID): self.__UpdBossShuntInfo(mapID, hurtPlayerDict, tick) @@ -513,11 +521,15 @@ ## 玩家伤血是否还有效 if playerID not in self.__hurtPlayerDict: + if self.logDetail: + GameWorld.Log(" playerID=%s not in self.__hurtPlayerDict" % playerID) return False hurtPlayer = self.__GetHurtPlayer(playerID) hurtValue = hurtPlayer.GetHurtValue() if not hurtValue: + if self.logDetail: + GameWorld.Log(" playerID=%s not hurtValue" % playerID) return False player = GameWorld.GetMapCopyPlayerManager().FindPlayerByID(playerID) @@ -525,20 +537,28 @@ if playerID in self.__noAssitPlayerIDDict: if not AttackCommon.CheckKillNPCByCnt(player, self.curNPC, False): GameWorld.DebugLog("非协助伤血玩家没有攻击boss次数,不计!playerID=%s" % playerID, self.npcID, self.lineID) + if self.logDetail: + GameWorld.Log(" 非协助伤血玩家没有攻击boss次数,不计!playerID=%s" % playerID, self.npcID, self.lineID) return False if player.GetInitOK() and (not player.GetVisible() or player.GetSightLevel() != self.curNPC.GetSightLevel()): GameWorld.DebugLog("伤血玩家不可见,不计!playerID=%s" % playerID, self.npcID, self.lineID) + if self.logDetail: + GameWorld.Log(" 伤血玩家不可见,不计!playerID=%s" % playerID, self.npcID, self.lineID) return False if GameObj.GetHP(player) <= 0 or player.GetPlayerAction() == IPY_GameWorld.paDie: deadTime = player.NomalDictGetProperty(ChConfig.Def_Player_Dict_DeadTime) if time.time() - deadTime >= IpyGameDataPY.GetFuncCfg("BossHurtValue", 1): GameWorld.DebugLog("伤血玩家死亡超过伤血保护时长,不计!playerID=%s" % playerID, self.npcID, self.lineID) + if self.logDetail: + GameWorld.Log(" 伤血玩家死亡超过伤血保护时长,不计!playerID=%s" % playerID, self.npcID, self.lineID) return False if not self.__GetIsInRefreshPoint(player.GetPosX(), player.GetPosY(), refreshPoint): GameWorld.DebugLog("伤血玩家不在boss范围内,不计!playerID=%s" % playerID, self.npcID, self.lineID) + if self.logDetail: + GameWorld.DebugLog(" 伤血玩家不在boss范围内,不计!playerID=%s" % playerID, self.npcID, self.lineID) return False return True @@ -550,14 +570,20 @@ leavePos = PlayerControl.GetPlayerLeaveServerPos(playerID) if not leaveTick or not leavePos: GameWorld.DebugLog("伤血玩家不在本地图或已长久离线,不计!playerID=%s" % playerID, self.npcID, self.lineID) + if self.logDetail: + GameWorld.DebugLog(" 伤血玩家不在本地图或已长久离线,不计!playerID=%s" % playerID, self.npcID, self.lineID) return False if tick - leaveTick > ChConfig.Def_PlayerOfflineProtectTime: GameWorld.DebugLog("伤血离线玩家超过保护时长,不计!playerID=%s,tick=%s,leaveTick=%s" % (playerID, tick, leaveTick), self.npcID, self.lineID) + if self.logDetail: + GameWorld.DebugLog(" 伤血离线玩家超过保护时长,不计!playerID=%s,tick=%s,leaveTick=%s" % (playerID, tick, leaveTick), self.npcID, self.lineID) return False if not self.__GetIsInRefreshPoint(leavePos[0], leavePos[1], refreshPoint): GameWorld.DebugLog("伤血离线玩家不在保护区域内,不计!playerID=%s,leavePos=%s" % (playerID, leavePos), self.npcID, self.lineID) + if self.logDetail: + GameWorld.DebugLog(" 伤血离线玩家不在保护区域内,不计!playerID=%s,leavePos=%s" % (playerID, leavePos), self.npcID, self.lineID) return False return True @@ -620,11 +646,18 @@ atkPlayer, atkHurtType, atkHurtID = None, 0, 0 curNPC = self.curNPC refreshPoint = curNPC.GetRefreshPosAt(curNPC.GetCurRefreshPointIndex()) + + if self.logDetail: + GameWorld.Log("__GetAtkObjByHurtList: %s" % len(self.__hurtSortList)) + for rank, hurtObj in enumerate(self.__hurtSortList, 1): hurtID = hurtObj.GetValueID() hurtType = hurtObj.GetValueType() + if self.logDetail: + GameWorld.Log(" hurtID=%s,hurtType=%s" % (hurtID, hurtType)) + playerIDList = [] if hurtType == ChConfig.Def_NPCHurtTypePlayer: assistPlayerIDList = self.__noAssitPlayerIDDict.get(hurtID, []) @@ -649,6 +682,7 @@ player = GameWorld.GetObj(playerID, IPY_GameWorld.gotPlayer) if player == None: + playerDisableReason[playerID] = "none" continue if GameObj.GetHP(player) <= 0 or player.GetPlayerAction() == IPY_GameWorld.paDie: @@ -672,11 +706,18 @@ maxHurtValue = hurtValue atkPlayer, atkHurtType, atkHurtID = player, hurtType, hurtID + if self.logDetail: + GameWorld.Log(" atkHurtType=%s,atkHurtID=%s,playerDisableReason=%s" % (atkHurtType, atkHurtID, str(playerDisableReason))) + if maxHurtValue: return atkPlayer, atkHurtType, atkHurtID if rank == 1 and isDead: GameWorld.Log("boss死亡时,第一名团队没有归属权! playerDisableReason=%s" % playerDisableReason) + + if self.logDetail: + GameWorld.Log(" 团队没有归属权! rank=%s,hurtID=%s,hurtType=%s,playerDisableReason=%s" + % (rank, hurtID, hurtType, playerDisableReason)) return atkPlayer, atkHurtType, atkHurtID @@ -1046,13 +1087,13 @@ defendHurtList.AddPlayerHurtValue(atkPlayerID, atkPlayer.GetPlayerName(), value, atkPlayer.GetTeamID()) return True -def RefreshHurtList(curNPC, tick, refreshInterval=3000, isDead=False): +def RefreshHurtList(curNPC, tick, refreshInterval=3000, isDead=False, checkCanDead=False): ## 刷新伤血列表 # @return: atkPlayer, ownerType, ownerID defendHurtList = GetPlayerHurtList(curNPC) if not defendHurtList: return - return defendHurtList.RefreshHurtList(tick, refreshInterval, isDead) + return defendHurtList.RefreshHurtList(tick, refreshInterval, isDead, checkCanDead) def IsAssistPlayer(playerID, defNPC): ## 是否协助中的玩家 -- Gitblit v1.8.0