From 0b52fea0c2dec053c44678d94bd66c10db1b0b91 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 06 四月 2021 17:27:57 +0800
Subject: [PATCH] 8870 【BT2】【后端】战力、伤害、玩家生命的数值调整为大数值(超21亿)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py |   59 +++++++++++++++++++++++------------------------------------
 1 files changed, 23 insertions(+), 36 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 bea0c2a..37bb8af 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
@@ -228,8 +228,8 @@
             # 动态刷新属性的,血量按百分比继承
             aftHP = int(aftMaxHP * befHP / befMaxHP)
             GameObj.SetHP(curNPC, aftHP)
-            curNPC.Notify_HPEx()
-            curNPC.Notify_MaxHPEx()
+            curNPC.Notify_HP()
+            curNPC.Notify_MaxHP()
             #GameWorld.DebugLog("    aftHP=%s,aftMaxHP=%s" % (aftHP, aftMaxHP))
     
     # 机器人复活初始化给技能
@@ -305,7 +305,7 @@
     attrStrengthenDict = attrStrengthenInfo[NPCAttr_AttrStrengthenList] # 属性成长公式字典
     playerCntCoefficient = attrStrengthenInfo[NPCAttr_PlayerCntCoefficient] # 人数系数
     npcIDPlayerCntCoefficient = attrStrengthenInfo[NPCAttr_NPCPlayerCntCoefficient] # 特殊NPC人数系数
-    baseMaxHP = npcData.GetHPEx() * ShareDefine.Def_PerPointValue + npcData.GetHP()
+    baseMaxHP = GameObj.GetHP(npcData) # NPCData 没有提供Max接口,对应使用GetHP
     
     if strengthenLV:
         if not strengthenIpyData:
@@ -1993,7 +1993,7 @@
 #            continue
 #        
 #        angryObjType = curAngry.GetObjType()
-#        angryObjValue = curAngry.GetAngryValue()
+#        angryObjValue = GameObj.GetAngryValue(curAngry)
 #        
 #        #删除旧的仇恨,添加新的仇恨
 #        if angryObjID == tagID and angryObjType == tagType:
@@ -2259,10 +2259,9 @@
         summonNPC.Reborn(summonPos.GetPosX(), summonPos.GetPosY(), False)
         NPCControl(summonNPC).ResetNPC_Init(isReborn=True)
         if hp or hpEx:
-            summonNPC.SetHP(hp)
-            summonNPC.SetHPEx(hpEx)
-            summonNPC.SetMaxHP(hp)
-            summonNPC.SetMaxHPEx(hpEx)
+            hpTotal = hpEx * ShareDefine.Def_PerPointValue + hp
+            GameObj.SetHP(summonNPC, hpTotal)
+            GameObj.SetMaxHP(summonNPC, hpTotal)
         summonNPC.NotifyAppear() # 最终统一通知NPC出现
         playerPriWoodNPCList.append(summonNPC)
         
@@ -2717,7 +2716,7 @@
         npcAngry = curNPC.GetNPCAngry()
         angryValue = npcAngry.FindNPCAngry(seeObjID, seeObjType)
         
-        if angryValue != None and angryValue.GetAngryValue() != 0 :
+        if angryValue != None and GameObj.GetAngryValue(angryValue) != 0 :
             #该对象已经在仇恨列表中,不重复添加
             return False
         
@@ -2963,9 +2962,6 @@
                 curPlayer = GameWorld.GetObj(curObjID, curObjType)
                 if curPlayer and curPlayer.GetTeamID() > 0:
                     addAngryTeam = GameWorld.GetTeamManager().FindTeam(curPlayer.GetTeamID())
-        
-        #总血量有超过DWORD的情况
-        plusAngryValue = FixValueByValueEx(curNPC.GetMaxHPEx(), plusAngryValue)
             
         #最小添加仇恨值为1
         plusAngryValue = max(plusAngryValue , 1)
@@ -2997,12 +2993,13 @@
         angryValue = npcAngry.FindNPCAngry(curObjID, curObjType)
     
         #未发现,添加
-        if angryValue == None or angryValue.GetAngryValue() == 0:
-            npcAngry.AddAngry(curObjID, curObjType, plusAngryValue)
+        if angryValue == None or GameObj.GetAngryValue(angryValue) == 0:
+            npcAngry.AddAngry(curObjID, curObjType, plusAngryValue % ShareDefine.Def_PerPointValue, plusAngryValue / ShareDefine.Def_PerPointValue)
         
         #如果需要,叠加
         elif canPile:
-            angryValue.SetAngryValue(min(angryValue.GetAngryValue() + plusAngryValue, ChConfig.Def_UpperLimit_DWord))
+            updAngryValue = GameObj.GetAngryValue(angryValue) + plusAngryValue
+            GameObj.SetAngryValue(angryValue, updAngryValue)
         return
     
     #---------------------------------------------------------------------
@@ -3219,7 +3216,7 @@
             return None
         
         #仇恨值
-        curAngryValue = curAngry.GetAngryValue()
+        curAngryValue = GameObj.GetAngryValue(curAngry)
         
         if curAngryValue == 0:
             return None
@@ -3311,7 +3308,7 @@
         self.RefreshNPCState(isReborn=isReborn)
         #通知血量, 复活的情况不通知血量,由NPC出现包通知
         if not isReborn:
-            curNPC.Notify_HPEx()
+            curNPC.Notify_HP()
 
         #这里不设置为慢速处理,因为NPC有可能未满血 
         #改为在空闲回血,如果满血的时候设置为慢速处理
@@ -3870,7 +3867,7 @@
         self.RefreshNPCSpeed(allAttrList)
         #检查血量是否变化, 暂不做血量增加上限通知,仅属性上限支持;
         #客户端自己算血量上限
-#        if curNPC.GetMaxHP() != curNPCMaxHP_Before:
+#        if GameObj.GetMaxHP(curNPC) != curNPCMaxHP_Before:
 #            curNPC.Notify_MaxHP()
             
         return
@@ -3894,8 +3891,8 @@
         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()
+        curNPC.Notify_HP()
+        curNPC.Notify_MaxHP()
         return
     
     # NPC移动速度特殊处理,只处理百分比不能处理固定值 
@@ -4411,7 +4408,7 @@
     #    for index in range(curNPC.GetAngryNPCCount()):
     #        angryNPC = curNPC.GetAngryNPCByIndex(index)
     #        #已经死亡
-    #        if angryNPC.GetHP() <= 0:
+    #        if GameObj.GetHP(angryNPC) <= 0:
     #            continue
     #        
     #        angryNPCList.append(angryNPC)
@@ -4481,7 +4478,7 @@
 #===============================================================================
 #        curNPC = self.__Instance
 #        
-#        if curNPC.GetHP() == curNPC.GetMaxHP():
+#        if GameObj.GetHP(curNPC) == GameObj.GetMaxHP(curNPC):
 #            #满血了
 #            return
 #        
@@ -4789,7 +4786,7 @@
                 return hurtObjTuple
             
             #支持抢怪,个人杀死,但自己死亡,不算
-            if curPlayer.GetHP() <= 0 or curPlayer.GetPlayerAction() == IPY_GameWorld.paDie:
+            if GameObj.GetHP(curPlayer) <= 0 or curPlayer.GetPlayerAction() == IPY_GameWorld.paDie:
                 if isLog:
                     GameWorld.Log("该目标伤血玩家已死亡: npcID=%s,playerID=%s" % (npcID, maxHurtObj.GetValueID()))
                 return hurtObjTuple
@@ -4833,7 +4830,7 @@
                         GameWorld.Log("    i=%s, 无该队员!" % (i))
                     continue
                 
-                if curTeamPlayer.GetHP() <= 0 or curTeamPlayer.GetPlayerAction() == IPY_GameWorld.paDie:
+                if GameObj.GetHP(curTeamPlayer) <= 0 or curTeamPlayer.GetPlayerAction() == IPY_GameWorld.paDie:
                     if isLog:
                         GameWorld.Log("    i=%s, 队员已死亡!memPlayerID=%s" % (i, curTeamPlayer.GetPlayerID()))
                     continue
@@ -5282,7 +5279,7 @@
             GameWorld.DebugLog("竞争归属玩家不可见,移除归属!playerID=%s" % ownerID)
             return
         
-        if owner.GetHP() <= 0 or owner.GetPlayerAction() == IPY_GameWorld.paDie:
+        if GameObj.GetHP(owner) <= 0 or owner.GetPlayerAction() == IPY_GameWorld.paDie:
             GameWorld.DebugLog("竞争归属玩家死亡,移除归属!playerID=%s" % ownerID)
             return
         
@@ -5309,7 +5306,7 @@
                     if isDead:
                         GameWorld.Log("    i=%s, 队员为空!" % i)
                     continue
-                if curTeamPlayer.GetHP() <= 0:
+                if GameObj.GetHP(curTeamPlayer) <= 0:
                     if isDead:
                         GameWorld.Log("    i=%s, 队员血量为0!, memPlayerID=%s" % (i, curTeamPlayer.GetPlayerID()))
                     continue
@@ -5597,16 +5594,6 @@
     
     callFunc(curNPC, curPlayer, skill) 
 #---------------------------------------------------------------------
-# 目标总值超过DWORD记录,需修正数值
-# 如:伤血和仇恨超过20E的情况,按高位记录取余, 最低1
-def FixValueByValueEx(valueEx, value):
-    if valueEx == 0:
-        return value
-    
-    # 取高位记录的数字长度,按10N次方求余
-    nlen = len(str(valueEx))
-    return max(value / pow(10, nlen), 1)
-
 
 def CheckCanCollectByNPCID(curPlayer, npcID, collectNPCIpyData):
     # 根据NPCID判断是否可以采集

--
Gitblit v1.8.0