From 28389cb71e12d4bec085559355d54dd72ad43e36 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期三, 05 十二月 2018 00:26:32 +0800
Subject: [PATCH] 4999 【后端】【1.3.100】血量百分比不管有没被超过,哪怕一击秒杀也会强制触发,pvp强制触发

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py |  192 +++++++++++++++++++++++++++++++++--------------
 1 files changed, 135 insertions(+), 57 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
index 0d7b24c..0edc709 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
@@ -301,11 +301,14 @@
     if strengthenPlayerCnt:
         mapID = GameWorld.GetMap().GetMapID()
         dataMapID = FBCommon.GetRecordMapID(mapID)
+        formulaKey = "MapCoefficient_%s" % mapID
         playerCntAttrCoefficient = playerCntCoefficient.get(mapID, {})
         if not playerCntAttrCoefficient and dataMapID in playerCntCoefficient:
             playerCntAttrCoefficient = playerCntCoefficient[dataMapID]
+            formulaKey = "MapCoefficient_%s" % dataMapID
         if npcID in npcIDPlayerCntCoefficient:
             playerCntAttrCoefficient = npcIDPlayerCntCoefficient[npcID]
+            formulaKey = "NPCCoefficient_%s" % npcID
         for attrKey, coefficientDict in playerCntAttrCoefficient.items():
             if attrKey in attrDict:
                 attrValue = attrDict[attrKey]
@@ -316,7 +319,15 @@
                 if not hasattr(npcData, attrFuncName):
                     continue
                 attrValue = getattr(npcData, attrFuncName)()
-            coefficient = GameWorld.GetDictValueByRangeKey(coefficientDict, strengthenPlayerCnt, 1)
+            # 按字典配置
+            if isinstance(coefficientDict, dict):
+                coefficient = GameWorld.GetDictValueByRangeKey(coefficientDict, strengthenPlayerCnt, 1)
+            # 按公式配置
+            elif isinstance(coefficientDict, str):
+                formulaKey = "%s_%s" % (formulaKey, attrKey)
+                coefficient = eval(FormulaControl.GetCompileFormula(formulaKey, coefficientDict))
+            else:
+                coefficient = 1
             attrDict[attrKey] = int(attrValue * coefficient)
             
     #GameWorld.DebugLog("计算NPC属性成长: npcID=%s,strengthenLV=%s,strengthenPlayerCnt=%s,baseMaxHP=%s,attrDict=%s" 
@@ -1216,17 +1227,17 @@
         GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, "GlobalDropRate", msgInfo, len(msgInfo))
          
     # 4. 指定全服击杀次数必掉,算额外掉落
-    globalKillDropDict = IpyGameDataPY.GetFuncEvalCfg("GlobalDropCD", 2) # {NPCID:{击杀次数:[是否本职业, [物品ID, ...], [随机物品ID, ...]]}, ...}
+    globalKillDropDict = IpyGameDataPY.GetFuncEvalCfg("GlobalDropCD", 2) # {NPCID:{击杀次数:[是否本职业, {物品ID:个数, ...}, [[随机物品ID,个数], ...]]}, ...}
     if npcID in globalKillDropDict:
         killCountDropDict = globalKillDropDict[npcID]
         updNPCKilledCount = min(gw.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_NPCKilledCount % npcID) + 1, ShareDefine.Def_UpperLimit_DWord)
-        GameWorld.DebugLog("更新全服击杀次数: %s" % updNPCKilledCount)
+        GameWorld.Log("更新全服击杀次数:npcID=%s, %s" % (npcID, updNPCKilledCount))
         # 通知GameServer记录
         msgInfo = str([npcID, updNPCKilledCount])
         GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, "GlobalKillCount", msgInfo, len(msgInfo))
         if updNPCKilledCount in killCountDropDict:
-            isJobLimit, itemIDList, randItemIDList = killCountDropDict[updNPCKilledCount]
-            for itemID in itemIDList:
+            isJobLimit, itemIDCountDict, randItemIDCountList = killCountDropDict[updNPCKilledCount]
+            for itemID, itemCount in itemIDCountDict.items():
                 if isJobLimit:
                     itemData = GameWorld.GetGameData().GetItemByTypeID(itemID)
                     if not itemData:
@@ -1236,12 +1247,12 @@
                         # 非本职业可用,不掉落
                         GameWorld.DebugLog("全服击杀次数必掉,非本职业可用,不掉落! itemID=%s" % itemID)
                         continue
-                dropItemIDList.append(itemID)
-                GameWorld.DebugLog("全服击杀次数必掉物品: itemID=%s" % itemID)
-            if randItemIDList:
+                dropItemIDList += [itemID] * itemCount
+                GameWorld.Log("全服击杀次数必掉物品: itemID=%s,itemCount=%s" % (itemID, itemCount))
+            if randItemIDCountList:
                 if isJobLimit:
                     randJobItemList = []
-                    for rItemID in randItemIDList:
+                    for rItemID, rItemCount in randItemIDCountList:
                         itemData = GameWorld.GetGameData().GetItemByTypeID(rItemID)
                         if not itemData:
                             continue
@@ -1250,12 +1261,12 @@
                             # 非本职业可用,不掉落
                             GameWorld.DebugLog("全服击杀次数必掉随机,非本职业可用,不掉落! rItemID=%s" % rItemID)
                             continue
-                        randJobItemList.append(rItemID)
-                    randItemID = random.choice(randJobItemList)
+                        randJobItemList.append([rItemID, rItemCount])
+                    randItemID, randItemCount = random.choice(randJobItemList)
                 else:
-                    randItemID = random.choice(randItemIDList)
-                dropItemIDList.append(randItemID)
-                GameWorld.DebugLog("全服击杀次数必掉随机物品: randItemID=%s" % randItemID)
+                    randItemID, randItemCount = random.choice(randItemIDCountList)
+                dropItemIDList += [randItemID] * randItemCount
+                GameWorld.Log("全服击杀次数必掉随机物品: randItemID=%s,randItemCount=%s" % (randItemID, randItemCount))
                 
     return dropItemIDList
 
@@ -1975,9 +1986,8 @@
         # 设置npc死亡及自身处理
         SetDeadEx(summonNPC)
         
-    if curNPC.GetGameObjType() == IPY_GameWorld.gotNPC and \
-        curNPC.GetGameNPCObjType() == IPY_GameWorld.gnotSummon:
-        FBLogic.DoFB_SummonNPCDead(curNPC)
+    if curNPC.GetGameObjType() == IPY_GameWorld.gotNPC:
+        FBLogic.DoFB_NPCDead(curNPC)
     
     summonPlayerID = curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_SummonMapNPCPlayerID)
     if summonPlayerID > 0:
@@ -3643,7 +3653,7 @@
     #  @remarks 刷新NPC属性
     def RefreshNPCAttrState(self, canSyncClient=True, isReborn=False):
         curNPC = self.__Instance
-        curNPCMaxHP_Before = GameObj.GetMaxHP(curNPC)
+        #curNPCMaxHP_Before = GameObj.GetMaxHP(curNPC)
         #清空NPC战斗属性
         curNPC.ClearBattleEffect()
         #--------------------------------------------
@@ -3680,6 +3690,28 @@
             
         return
     
+    def SetHelpBattleRobotRebornAttr(self, fightPower):
+        '''助战机器人只设置血量属性
+                        血量算法,(助战玩家=助战机器人):每个副本配置伤害*(助战玩家战力/副本规定战力)*系数值  系数值暂定为50
+        '''
+        curNPC = self.__Instance
+        mapID = FBCommon.GetRecordMapID(GameWorld.GetMap().GetMapID())
+        funcLineID = FBCommon.GetFBPropertyMark()
+        ipyData = IpyGameDataPY.GetIpyGameData("FBHelpBattle", mapID, funcLineID)
+        if not ipyData:
+            return
+        
+        SetSuppressFightPower(curNPC, fightPower)
+        fbFightPower = ipyData.GetFightPowerMin()
+        baseHurt = ipyData.GetRobotBaseHurt()
+        hpCoefficient = ipyData.GetRobotHPCoefficient()
+        maxHP = int(eval(IpyGameDataPY.GetFuncCompileCfg("HelpBattleRobot", 2)))
+        GameWorld.DebugLog("设置助战机器人属性: objID=%s,fightPower=%s,maxHP=%s" % (curNPC.GetID(), fightPower, maxHP))
+        GameObj.SetMaxHP(curNPC, maxHP)
+        GameObj.SetHP(curNPC, maxHP)
+        curNPC.Notify_HPEx()
+        curNPC.Notify_MaxHPEx()
+        return
     
     # NPC移动速度特殊处理,只处理百分比不能处理固定值 
     # 因为 ChConfig.TYPE_Calc_AttrSpeed 非服务端移动速度,偷懒处理法
@@ -3704,7 +3736,6 @@
     #  @remarks 刷新NPC行为属性
     def RefreshNPCActionState(self):
         curNPC = self.__Instance
-        
         OperControlManager.ClearObjActionState(curNPC)
         
         #根据BUFF 加上状态
@@ -3908,7 +3939,7 @@
                 return moneyID
         return moneyItemList[-1][1]
     
-    def __NPCSpecialDropItem(self, ownerPlayerList, ipyDrop):
+    def __NPCSpecialDropItem(self, dropPlayer, ownerPlayerList, ipyDrop):
         '''特殊掉落 (私有特殊掉落 + 击杀次数特殊掉落), 支持摸怪
         @return: None
         @return: [[ownerPlayer, itemID, isBind, isDropInItemPack], ...]
@@ -3916,6 +3947,12 @@
         curNPC = self.__Instance
         npcID = curNPC.GetNPCID()
         specDropItemList = []
+        
+        playerLV = dropPlayer.GetLV()
+        maxDropLV = ipyDrop.GetMaxDropLV()
+        if maxDropLV and playerLV > maxDropLV:
+            GameWorld.DebugLog("超过最大可掉落等级,不掉落物品,特殊掉落!npcID=%s,playerLV(%s) > maxDropLV(%s)" % (npcID, playerLV, maxDropLV))
+            return specDropItemList
         
         # 私有掉落
         fbGradePriItemIDDropDict = IpyGameDataPY.GetFuncEvalCfg("FBGradeEquipDropRate", 3)
@@ -4014,10 +4051,16 @@
         npcID = curNPC.GetNPCID()
         mapID = GameWorld.GetMap().GetMapID()
         mapID = FBCommon.GetRecordMapID(mapID)
+        isGameBoss = ChConfig.IsGameBoss(curNPC)
+        if isGameBoss:
+            GameWorld.Log("NPC开始掉落: npcID=%s,dropPlayerID=%s" % (npcID, dropPlayer.GetPlayerID()), dropPlayer.GetPlayerID())
         if mapID == ChConfig.Def_FBMapID_MunekadoTrial:
             return
         ipyDrop = GetNPCDropIpyData(npcID)
         if not ipyDrop:
+            if isGameBoss:
+                curWorldLV = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv)
+                GameWorld.ErrLog("取不到NPC掉落信息!npcID=%s,curWorldLV=%s" % (npcID, curWorldLV))
             return
         
         #if mapID == ChConfig.Def_FBMapID_MunekadoTrial:
@@ -4034,13 +4077,17 @@
             dropIDList += [moneyID] * dropMoneyCnt
             
         specItemSign = "SpecItem"
-        playerSpecDropList = self.__NPCSpecialDropItem(ownerPlayerList, ipyDrop) # 特殊掉落 [[ownerPlayer, itemID, isBind, isDropInItemPack], ...]  私有特殊掉落 + 击杀次数特殊掉落
+        playerSpecDropList = self.__NPCSpecialDropItem(dropPlayer, ownerPlayerList, ipyDrop) # 特殊掉落 [[ownerPlayer, itemID, isBind, isDropInItemPack], ...]  私有特殊掉落 + 击杀次数特殊掉落
         dropIDList += [specItemSign] * len(playerSpecDropList)
         
         if len(dropIDList) > 5:
             #打乱物品顺序
             random.shuffle(playerSpecDropList)
             random.shuffle(dropIDList)
+            
+        if not dropIDList and isGameBoss:
+            GameWorld.ErrLog("Boss没有掉落: dropPlayerLV=%s,ipyWorldLV=%s,maxDropLV=%s" 
+                             % (dropPlayer.GetLV(), ipyDrop.GetMaxWorldLV(), ipyDrop.GetMaxDropLV()), dropPlayer.GetPlayerID())
             
         gameMap = GameWorld.GetMap()
         dropPosX, dropPosY = curNPC.GetPosX(), curNPC.GetPosY() # 以NPC为中心点开始掉落
@@ -4266,9 +4313,11 @@
         self.__LastHurtPlayer = self.__FindLastTimeHurtObjEx()
         self.__MaxHurtPlayer = self.__FindBossMaxHurtObj() # py自定义伤血所得到的Boss最大伤血玩家
         
-        self.__AllKillerDict, curTeam, hurtType, hurtID = self.__FindNPCKillerInfo()
-        self.__OwnerHurtType, self.__OwnerHurtID = hurtType, hurtID
         isGameBoss = ChConfig.IsGameBoss(curNPC)
+        self.__AllKillerDict, curTeam, hurtType, hurtID = self.__FindNPCKillerInfo(isGameBoss)
+        self.__OwnerHurtType, self.__OwnerHurtID = hurtType, hurtID
+        if isGameBoss:
+            GameWorld.Log("__GiveObjPrize npcID=%s,hurtType=%s,hurtID=%s" % (npcID, hurtType, hurtID))
         
         #最后一击处理
         self.__DoLastTimeHurtLogic()
@@ -4377,7 +4426,7 @@
     ## NPC死亡, 分享经验逻辑
     #  @param self 类实例
     #  @return 返回击杀玩家信息元组, (玩家列表实例,队伍实例,归属类型,归属ID)
-    def __FindNPCKillerInfo(self):
+    def __FindNPCKillerInfo(self, isGameBoss):
         curNPC = self.__Instance
         npcID = curNPC.GetNPCID()
         objID = curNPC.GetID()
@@ -4396,36 +4445,39 @@
         
         #isLog = self.__GetIsLog()
         dropOwnerType = GetDropOwnerType(curNPC)
-        #GameWorld.DebugLog("NPC击杀者信息...npcID=%s,dropOwnerType=%s" % (npcID, dropOwnerType))
-        
+        if isGameBoss:
+            GameWorld.Log("NPC被击杀, key=%s,dropOwnerType=%s" % (key, dropOwnerType))
+            
         # 最大伤血 - 伤血可能被重置
         if dropOwnerType == ChConfig.DropOwnerType_MaxHurt:
             npcHurtList = curNPC.GetPlayerHurtList()
             npcHurtList.Sort()
-            #if isLog:
-            #    GameWorld.DebugLog("NPC被击杀,npcID=%s,dropOwnerType=%s,hurtCount=%s" % (npcID, dropOwnerType, npcHurtList.GetHurtCount()))
+            if isGameBoss:
+                GameWorld.Log("hurtCount=%s" % (npcHurtList.GetHurtCount()))
             for i in xrange(npcHurtList.GetHurtCount()):
                 #获得最大伤血对象
                 maxHurtObj = npcHurtList.GetHurtAt(i)
-                #if isLog:
-                #    GameWorld.DebugLog("    i=%s,hurtValueType=%s,valueID=%s" % (i, maxHurtObj.GetValueType(), maxHurtObj.GetValueID()))
-                curPlayer, curTeam = self.__GetTagByHurtObj(maxHurtObj)
+                if isGameBoss:
+                    GameWorld.Log("hurtIndex=%s,hurtValueType=%s,valueID=%s" % (i, maxHurtObj.GetValueType(), maxHurtObj.GetValueID()))
+                curPlayer, curTeam = self.__GetTagByHurtObj(maxHurtObj, isLog=isGameBoss)
                 #当前伤血对象超出指定范围或已经死亡
                 if curPlayer == None and curTeam == None:
-                    #if isLog:
-                    #    GameWorld.DebugLog("        当前伤血对象超出指定范围或已经死亡")
+                    if isGameBoss:
+                        GameWorld.Log("    当前伤血对象超出指定范围或已经死亡")
                     continue
                 
                 if curPlayer:
                     playerID = curPlayer.GetPlayerID()
                     if playerID not in killerDict:
                         killerDict[playerID] = curPlayer
-                    GameWorld.Log("    归属最大伤血玩家: npcID=%s,dropOwnerType=%s,playerID=%s" % (npcID, dropOwnerType, playerID))
+                    if isGameBoss:
+                        GameWorld.Log("    归属最大伤血玩家: npcID=%s,dropOwnerType=%s,playerID=%s" % (npcID, dropOwnerType, playerID))
                     return killerDict, None, ChConfig.Def_NPCHurtTypePlayer, playerID
                 
                 if curTeam:
                     killTeam = curTeam
-                    GameWorld.Log("    归属最大伤血队伍: npcID=%s,dropOwnerType=%s,teamID=%s" % (npcID, dropOwnerType, curTeam.GetTeamID()))
+                    if isGameBoss:
+                        GameWorld.Log("    归属最大伤血队伍: npcID=%s,dropOwnerType=%s,teamID=%s" % (npcID, dropOwnerType, curTeam.GetTeamID()))
                     return killerDict, curTeam, ChConfig.Def_NPCHurtTypeTeam, curTeam.GetTeamID()
         # 最大伤血玩家 - 伤血不会被重置
         elif dropOwnerType == ChConfig.DropOwnerType_MaxHurtPlayer:
@@ -4455,8 +4507,8 @@
         if self.__LastHurtPlayer:
             lastHurtPlayerID = self.__LastHurtPlayer.GetPlayerID()
             teamID = self.__LastHurtPlayer.GetTeamID()
-            #if isLog:
-            #    GameWorld.DebugLog("    归属最后一击,npcID=%s,lastHurtPlayerID=%s,teamID=%s" % (npcID, lastHurtPlayerID, teamID))
+            if isGameBoss:
+                GameWorld.Log("    归属最后一击,npcID=%s,lastHurtPlayerID=%s,teamID=%s" % (npcID, lastHurtPlayerID, teamID))
             if teamID:
                 killTeam = GameWorld.GetTeamManager().FindTeam(teamID)
             if not killTeam and lastHurtPlayerID not in killerDict:
@@ -4464,9 +4516,8 @@
                 
         if dropOwnerType == ChConfig.DropOwnerType_All:
             hurtType = ChConfig.Def_NPCHurtTypeAll
-            #if isLog:
-            #    GameWorld.DebugLog("    无归属...npcID=%s" % npcID)
-            #GameWorld.DebugLog("    无归属...")
+            if isGameBoss:
+                GameWorld.Log("    无归属...npcID=%s" % npcID)
             
         elif dropOwnerType == ChConfig.DropOwnerType_Faction:
             #阵营归属
@@ -4474,23 +4525,22 @@
             if protectFaction > 0:
                 hurtType = ChConfig.Def_NPCHurtTypeFaction
                 hurtID = protectFaction
-                #GameWorld.DebugLog("    阵营归属...factionID=%s" % protectFaction)
+                if isGameBoss:
+                    GameWorld.Log("    阵营归属...factionID=%s" % protectFaction)
                 
         if hurtType == 0:
             #归属队伍
             if killTeam:
                 hurtType = ChConfig.Def_NPCHurtTypeTeam
                 hurtID = killTeam.GetTeamID()
-                #if isLog:
-                #    GameWorld.DebugLog("    归属默认队伍, npcID=%s,teamID=%s" % (npcID, hurtID))
-                #GameWorld.DebugLog("    归属默认队伍, teamID=%s" % hurtID)
+                if isGameBoss:
+                    GameWorld.Log("    归属默认队伍, npcID=%s,teamID=%s" % (npcID, hurtID))
             #伤血归属玩家
             elif killerDict:
                 hurtType = ChConfig.Def_NPCHurtTypePlayer
                 hurtID = killerDict.keys()[0]
-                #if isLog:
-                #    GameWorld.DebugLog("    归属默认玩家, npcID=%s,playerID=%s" % (npcID, hurtID))
-                #GameWorld.DebugLog("    归属默认玩家, playerID=%s" % hurtID)
+                if isGameBoss:
+                    GameWorld.Log("    归属默认玩家, npcID=%s,playerID=%s" % (npcID, hurtID))
                 
         return killerDict, killTeam, hurtType, hurtID
     
@@ -4561,9 +4611,10 @@
     #  @param maxHurtObj 最大伤血对象
     #  @return 返回值, 伤血对象
     #  @remarks 获得伤血对象,支持抢怪
-    def __GetTagByHurtObj(self, maxHurtObj, isCheckRefreshArea=False):
+    def __GetTagByHurtObj(self, maxHurtObj, isCheckRefreshArea=False, isLog=False):
         #获得死亡的NPC
         curNPC = self.__Instance
+        npcID = curNPC.GetNPCID()
         # 伤害的obj类型元组(玩家, 队伍)
         hurtObjTuple = (None, None)
         if maxHurtObj == None:
@@ -4578,18 +4629,28 @@
             curPlayer = GameWorld.GetObj(maxHurtObj.GetValueID(), IPY_GameWorld.gotPlayer)
             
             if curPlayer == None:
+                if isLog:
+                    GameWorld.Log("找不到该目标伤血玩家: npcID=%s,playerID=%s" % (npcID, maxHurtObj.GetValueID()))
                 return hurtObjTuple
             
             #支持抢怪,个人杀死,但自己死亡,不算
             if curPlayer.GetHP() <= 0 or curPlayer.GetPlayerAction() == IPY_GameWorld.paDie:
+                if isLog:
+                    GameWorld.Log("该目标伤血玩家已死亡: npcID=%s,playerID=%s" % (npcID, maxHurtObj.GetValueID()))
                 return hurtObjTuple
             
             if isCheckRefreshArea:
                 if not self.GetIsInRefreshPoint(curPlayer.GetPosX(), curPlayer.GetPosY(), refreshPoint):
+                    if isLog:
+                        GameWorld.Log("该目标伤血玩家不在NPC区域内: npcID=%s,playerID=%s,pos(%s,%s)" 
+                                      % (npcID, maxHurtObj.GetValueID(), curPlayer.GetPosX(), curPlayer.GetPosY()))
                     return hurtObjTuple
             #如果玩家已经超出指定距离,不加经验
             elif GameWorld.GetDist(curNPC.GetPosX(), curNPC.GetPosY(),
                                      curPlayer.GetPosX(), curPlayer.GetPosY()) > ChConfig.Def_Team_GetExpScreenDist:
+                if isLog:
+                    GameWorld.Log("该目标伤血玩家超出指定距离: npcID=%s,playerID=%s,npcPos(%s,%s),playerPos(%s,%s)" 
+                                  % (npcID, maxHurtObj.GetValueID(), curNPC.GetPosX(), curNPC.GetPosY(), curPlayer.GetPosX(), curPlayer.GetPosY()))
                 return hurtObjTuple
             
             #正常返回
@@ -4600,23 +4661,39 @@
             #获得当前队伍
             teamID = maxHurtObj.GetValueID()
             curTeam = GameWorld.GetTeamManager().FindTeam(teamID)
+            if isLog:
+                GameWorld.Log("目标伤血队伍: npcID=%s,teamID=%s" % (npcID, teamID))
             if curTeam == None:
+                if isLog:
+                    GameWorld.Log("找不到目标队伍, teamID=%s" % (teamID))
                 return hurtObjTuple
             
+            if isLog:
+                GameWorld.Log("队伍成员数: GetMemberCount=%s" % (curTeam.GetMemberCount()))                
             #遍历队伍,半径为一屏半的距离内的所有队伍/团队成员,可以获得经验
             for i in xrange(curTeam.GetMemberCount()):
                 curTeamPlayer = curTeam.GetMember(i)
                 if curTeamPlayer == None or curTeamPlayer.GetPlayerID() == 0:
+                    if isLog:
+                        GameWorld.Log("    i=%s, 无该队员!" % (i))
                     continue
                 
                 if curTeamPlayer.GetHP() <= 0 or curTeamPlayer.GetPlayerAction() == IPY_GameWorld.paDie:
+                    if isLog:
+                        GameWorld.Log("    i=%s, 队员已死亡!memPlayerID=%s" % (i, curTeamPlayer.GetPlayerID()))
                     continue
                 
                 if isCheckRefreshArea:
                     if not self.GetIsInRefreshPoint(curTeamPlayer.GetPosX(), curTeamPlayer.GetPosY(), refreshPoint):
+                        if isLog:
+                            GameWorld.Log("    i=%s, 队员不在NPC区域内!memPlayerID=%s,pos(%s,%s)" 
+                                          % (i, curTeamPlayer.GetPlayerID(), curTeamPlayer.GetPosX(), curTeamPlayer.GetPosY()))
                         continue
                 elif GameWorld.GetDist(curNPC.GetPosX(), curNPC.GetPosY(), curTeamPlayer.GetPosX(),
                                        curTeamPlayer.GetPosY()) > ChConfig.Def_Team_GetExpScreenDist:
+                    if isLog:
+                        GameWorld.Log("    i=%s, 队员超出指定距离!memPlayerID=%s,npcPos(%s,%s),playerPos(%s,%s)" 
+                                      % (i, curTeamPlayer.GetPlayerID(), curNPC.GetPosX(), curNPC.GetPosY(), curTeamPlayer.GetPosX(), curTeamPlayer.GetPosY()))
                     continue
                 
                 hurtObjTuple = (None, curTeam)
@@ -4765,7 +4842,7 @@
         npcID = curNPC.GetNPCID()
         defObjType = curNPC.GetGameObjType() 
         mapFBType = GameWorld.GetMap().GetMapFBType()
-        mapID = GameWorld.GetMap().GetMapID()
+        mapID = FBCommon.GetRecordMapID(GameWorld.GetMap().GetMapID())
         playerID = curPlayer.GetPlayerID()
         
         # 如果是NPC
@@ -4797,13 +4874,14 @@
                     PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_WorldBOSS)
                     PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_WorldBOSS, 1)
                     PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_WorldBoss, 1)
-                elif limitIndex == 1: #BOSS之家
-                    # BOSS之家BOSS击杀成就
-                    PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_KillBossHomeBoss, 1)
-                    # 每日活动
-                    PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_BOSSHome)
-                    PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_BOSSHome, 1)
-                    PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_BossHome, 1)
+            if ChConfig.IsGameBoss(curNPC) and mapID == ChConfig.Def_FBMapID_BossHome:
+                #BOSS之家
+                # BOSS之家BOSS击杀成就
+                PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_KillBossHomeBoss, 1)
+                # 每日活动
+                PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_BOSSHome)
+                PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_BOSSHome, 1)
+                PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_BossHome, 1)
             
             
         return
@@ -4849,7 +4927,7 @@
     def __GetIsLog(self):
         ## 测试查错日志,临时用
         ## 相关bug: 仙界秘境无经验、boss无掉落
-        return False
+        return ChConfig.IsGameBoss(self.__Instance)
         #return GameWorld.GetMap().GetMapID() == ChConfig.Def_FBMapID_BZZD or ChConfig.IsGameBoss(self.__Instance)
 
     #---------------------------------------------------------------------

--
Gitblit v1.8.0