From 485144792e0323a8467b83ab3e6da22e41f0b4b3 Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期二, 06 十一月 2018 14:13:56 +0800
Subject: [PATCH] 4592 【1.2】【开发】潜力技能升级增加流向记录升级成功率

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py |   50 ++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 36 insertions(+), 14 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 6b35dda..374823e 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" 
@@ -3908,7 +3919,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 +3927,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)
@@ -4016,7 +4033,7 @@
         mapID = FBCommon.GetRecordMapID(mapID)
         isGameBoss = ChConfig.IsGameBoss(curNPC)
         if isGameBoss:
-            GameWorld.Log("NPC开始掉落: npcID=%s,dropPlayerID=%s" % (npcID, dropPlayer.GetPlayerID()))
+            GameWorld.Log("NPC开始掉落: npcID=%s,dropPlayerID=%s" % (npcID, dropPlayer.GetPlayerID()), dropPlayer.GetPlayerID())
         if mapID == ChConfig.Def_FBMapID_MunekadoTrial:
             return
         ipyDrop = GetNPCDropIpyData(npcID)
@@ -4040,13 +4057,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为中心点开始掉落
@@ -4276,7 +4297,7 @@
         self.__AllKillerDict, curTeam, hurtType, hurtID = self.__FindNPCKillerInfo(isGameBoss)
         self.__OwnerHurtType, self.__OwnerHurtID = hurtType, hurtID
         if isGameBoss:
-            GameWorld.Log("npcID=%s,hurtType=%s,hurtID=%s" % (npcID, hurtType, hurtID))
+            GameWorld.Log("__GiveObjPrize npcID=%s,hurtType=%s,hurtID=%s" % (npcID, hurtType, hurtID))
         
         #最后一击处理
         self.__DoLastTimeHurtLogic()
@@ -4652,7 +4673,7 @@
                                        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(), curPlayer.GetPosX(), curPlayer.GetPosY()))
+                                      % (i, curTeamPlayer.GetPlayerID(), curNPC.GetPosX(), curNPC.GetPosY(), curTeamPlayer.GetPosX(), curTeamPlayer.GetPosY()))
                     continue
                 
                 hurtObjTuple = (None, curTeam)
@@ -4801,7 +4822,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
@@ -4833,13 +4854,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

--
Gitblit v1.8.0