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/Player/ChPlayer.py |   51 +++++++++++++++++++++++++++------------------------
 1 files changed, 27 insertions(+), 24 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
index 1fe5657..eb8cffc 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -129,6 +129,7 @@
 import PlayerFB
 import SkillShell
 import PlayerYinji
+import GameObj
 
 import datetime
 import time
@@ -252,7 +253,7 @@
     Sync_DBPlayer(curPlayer)
     
     # 死亡复活
-    if curPlayer.GetHP() <=0 or curPlayer.GetPlayerAction() == IPY_GameWorld.paDie:
+    if GameObj.GetHP(curPlayer) <=0 or curPlayer.GetPlayerAction() == IPY_GameWorld.paDie:
         PlayerRebornByType(curPlayer, ChConfig.rebornType_System, tick)
         
     # 强刷一次属性,刷之前重置还没同步过所有属性
@@ -317,6 +318,7 @@
     dbPlayer.RebornPosY = curPlayer.GetRebornPosY()
     dbPlayer.State = curPlayer.GetState()
     dbPlayer.HP = curPlayer.GetHP()
+    dbPlayer.HPEx = curPlayer.GetHPEx()
     dbPlayer.XP = curPlayer.GetXP()
     dbPlayer.HPRestoreSetting = curPlayer.GetHPRestoreSetting()
     dbPlayer.MPRestoreSetting = curPlayer.GetMPRestoreSetting()
@@ -764,7 +766,7 @@
     curPlayer.SetFacePic(0) # 通知数据库是否保存还是下线,做一次恢复,1为保存 0为正常下线
     tjgTime = PlayerTJG.GetTJGTime(curPlayer)
     if tjgTime:
-        curPlayer.SendGameServerRefreshState(IPY_GameWorld.CDBPlayerRefresh_HappyPoint, tjgTime)
+        PlayerControl.SendGameServerRefreshState(curPlayer, IPY_GameWorld.CDBPlayerRefresh_HappyPoint, tjgTime)
         
     PlayerControl.DoGMForbidenTalkOnLogin(curPlayer)
     
@@ -1267,7 +1269,7 @@
     #    #刷新NPC状态/buff
     #    summonControl.RefreshNPCState()
     #    #因当前血量先刷,最大血量后刷,有可能当前血量大于最大血量
-    #    curSummon.SetHP(min(curSummon.GetHP() , curSummon.GetMaxHP()))
+    #    GameObj.SetHPFull(curSummon)
     #===========================================================================
     
     #初始化宠物 通知客户端
@@ -1445,7 +1447,7 @@
         curPlayer.SetVisible(True)
         
     #如果玩家hp为0,设置玩家为死亡状态
-    if curPlayer.GetHP() <= 0:
+    if GameObj.GetHP(curPlayer) <= 0:
         curPlayer.SetPlayerAction(IPY_GameWorld.paDie)
         #curPlayer.SetDead()
         
@@ -1532,7 +1534,7 @@
             
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_IsReBorn, 0)
     
-    if curPlayer.GetHP() <= 0 or curPlayer.GetPlayerAction() == IPY_GameWorld.paDie:
+    if GameObj.GetHP(curPlayer) <= 0 or curPlayer.GetPlayerAction() == IPY_GameWorld.paDie:
         #如果玩家上线后死亡,回程复活
         isLogin = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_LoadMapIsLogin)
         rebornType = ChConfig.rebornType_City if isLogin else ChConfig.rebornType_System
@@ -1891,7 +1893,7 @@
     #无法验证目标
     #===========================================================================
     # curTag = GameWorld.GetObj(clientData.ObjID, IPY_GameWorld.gotNPC)
-    # if not curTag or curTag.GetHP() ==0:
+    # if not curTag or GameObj.GetHP(curTag) ==0:
     #    return
     # 
     # #与目标相差太远
@@ -2162,7 +2164,7 @@
         return False
     
     #玩家已经死亡
-    if curPlayer.GetHP() <= 0:
+    if GameObj.GetHP(curPlayer) <= 0:
         return False
     
 #    #眩晕时,不可移动 zhengyang 2010-6-2
@@ -2326,7 +2328,7 @@
 #        curObj = mapObj.GetObjByIndex(i)
 #        #只有一种情况特殊:死亡的NPC可以让玩家走过去
 #        if curObj.GetGameObjType() == IPY_GameWorld.gotNPC and \
-#           curObj.GetHP() <= 0 :
+#           GameObj.GetHP(curObj) <= 0 :
 #            continue
 #        curPlayer.MoveFail()
 #        GameWorld.Log("移动失败,目标点有玩家或者NPC")
@@ -2670,7 +2672,7 @@
     #    #获取玩家详细信息成功
     #    if canGetDetail:
     #        extendDataDict = {}
-    #        extendDataDict['maxHP'] = tagObj.GetMaxHP()
+    #        extendDataDict['maxHP'] = GameObj.GetMaxHP(tagObj)
     #        extendDataDict['maxMP'] = tagObj.GetMaxMP()
     #        extendDataDict['hit'] = tagObj.GetHit()
     #        extendDataDict['miss'] = tagObj.GetMiss()
@@ -2733,7 +2735,7 @@
     #功能开启判断换成
     #GameFuncComm.GetFuncCanUse(curPlayer, funcID)
     
-    if curPlayer.GetHP() <= 0:
+    if GameObj.GetHP(curPlayer) <= 0:
         return
     sendPack = IPY_GameWorld.IPY_CSit()
     setType = sendPack.GetType()
@@ -3142,7 +3144,7 @@
         return
     curPlayer.SetHPRestoreSetting(curValue)
     #玩家活着的时候调用
-    if curPlayer.GetHP() > 0 :
+    if GameObj.GetHP(curPlayer) > 0 :
         #调用自动回血
         PlayerControl.PlayerAutoRestoreHP(curPlayer, tick)
     return
@@ -3174,7 +3176,7 @@
     curPlayer.SetMPRestoreSetting(curValue)
     
     #玩家活着的时候调用
-    if curPlayer.GetHP() > 0 :
+    if GameObj.GetHP(curPlayer) > 0 :
         #调用自动回魔
         PlayerControl.PlayerAutoRestoreMP(curPlayer, tick)
         
@@ -3388,7 +3390,7 @@
     #游戏事件 Type = TGameEvent
     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
     
-    if curPlayer.GetHP() == 0:
+    if GameObj.GetHP(curPlayer) == 0:
         #GameWorld.Log("玩家死亡,没有事件")
         return
     
@@ -3508,7 +3510,7 @@
     if tick - curPlayer.GetShowFaceTick() < ChConfig.Def_ShowEventTime:
         return
     
-    if curPlayer.GetHP() <= 0:
+    if GameObj.GetHP(curPlayer) <= 0:
         return
     
     #表情行为, 客户端限制
@@ -3548,7 +3550,7 @@
         #GameWorld.Log("玩家地图读取没有成功")
         return
     
-    if curPlayer.GetHP() == 0:
+    if GameObj.GetHP(curPlayer) == 0:
         #玩家已经死亡
         #GameWorld.Log("玩家停止移动,玩家已经死亡")
         return
@@ -3692,7 +3694,7 @@
 #    #找到这个召唤兽
 #    summonNPC = curPlayer.FindSummonByID(summonID)
 #    #无法查找到这个召唤兽
-#    if summonNPC == None or summonNPC.GetHP() <= 0:
+#    if summonNPC == None or GameObj.GetHP(summonNPC) <= 0:
 #        GameWorld.Log('无法查找到这个召唤兽 summonID=%d'%summonID)
 #        return
 #    
@@ -3769,7 +3771,7 @@
 #    #找到这个召唤兽
 #    summonNPC = curPlayer.FindSummonByID(summonID)
 #    #无法查找到这个召唤兽
-#    if summonNPC == None or summonNPC.GetHP() <= 0:
+#    if summonNPC == None or GameObj.GetHP(summonNPC) <= 0:
 #        GameWorld.Log('找不到召唤兽')
 #        return
 #    
@@ -3872,7 +3874,7 @@
 #    summonNPC = curPlayer.FindSummonByID(summonID)
 #    
 #    #无法查找到这个召唤兽
-#    if summonNPC == None or summonNPC.GetHP() <= 0:
+#    if summonNPC == None or GameObj.GetHP(summonNPC) <= 0:
 #        return
 #    
 #    if ChConfig.Def_ClientControlSummonNPCID.count(summonNPC.GetFunctionType()) == 0:
@@ -4110,7 +4112,7 @@
     '''
     
     # 非死亡状态下,也就是哪个服务器角色死亡由哪个服务器判断
-    if curPlayer.GetHP() > 0 and curPlayer.GetPlayerAction() != IPY_GameWorld.paDie:
+    if GameObj.GetHP(curPlayer) > 0 and curPlayer.GetPlayerAction() != IPY_GameWorld.paDie:
         return 0
     
     # 回城复活的才需要CD
@@ -4153,7 +4155,7 @@
                 本函数不验证玩家死亡状态等,因为有可能前后端复活状态不一致,如果这里拦住可能导致前端躺尸复活不了
     '''
     
-    if checkHPState and curPlayer.GetHP() > 0 and curPlayer.GetPlayerAction() != IPY_GameWorld.paDie:
+    if checkHPState and GameObj.GetHP(curPlayer) > 0 and curPlayer.GetPlayerAction() != IPY_GameWorld.paDie:
         # 当血量大于0收到复活请求时,一般是前后端复活状态不一致的情况下导致的
         # 由于前端需要根据复活状态判断复活界面相关逻辑,所以这里需要做一些特殊处理,防止某些情况下前后端复活状态不一致导致的一些异常问题
         # 后端非死亡状态的情况,补同步一次复活包给前端
@@ -4255,7 +4257,7 @@
     playerControl.RefreshAllState()
     
     #设置血量
-    curPlayer.SetHP(curPlayer.GetMaxHP() * resetHpPercent / ChConfig.Def_MaxRateValue)
+    GameObj.SetHP(curPlayer, GameObj.GetMaxHP(curPlayer) * resetHpPercent / ChConfig.Def_MaxRateValue)
     #curPlayer.SetMP(curPlayer.GetMaxMP() * resetMpPercent / ChConfig.Def_MaxRateValue)
     #护盾
     PlayerControl.SetProDef(curPlayer, PlayerControl.GetMaxProDef(curPlayer))
@@ -5953,17 +5955,18 @@
 #{
 #    tagHead        Head;
 #    DWORD        LostHP;
+#    DWORD        LostHPEx;
 #};
 def OnRoleLostHP(index, clientData, tick):
     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    lostHP = clientData.LostHP
-    curHP = curPlayer.GetHP()
+    lostHP = clientData.LostHP + clientData.LostHPEx * ShareDefine.Def_PerPointValue
+    curHP = GameObj.GetHP(curPlayer)
     updHP = curHP - lostHP
     if updHP <= 0:
         #玩家已经死亡
         playerControl = PlayerControl.PlayerControl(curPlayer)
         playerControl.SetDead()
     else:
-        curPlayer.SetHP(updHP)
+        GameObj.SetHP(curPlayer, updHP)
         
     return

--
Gitblit v1.8.0