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/PlayerControl.py |  183 ++++++++++++++++++++++++++-------------------
 1 files changed, 105 insertions(+), 78 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
index 6fc4016..94a8b74 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -82,6 +82,7 @@
 import GY_Query_CrossRealmReg
 import PlayerCrossRealmPK
 import FunctionNPCCommon
+import IPY_PlayerDefine
 import CrossRealmPlayer
 import CrossPlayerData
 import NPCHurtManager
@@ -593,7 +594,7 @@
 #  @remarks 检查玩家状态是否可以传送
 def CheckPlayerTransport(curPlayer):
     #死亡不可使用
-    if curPlayer.GetHP() <= 0:
+    if GameObj.GetHP(curPlayer) <= 0:
         return False
     
 #    if curPlayer.GetPKValue() > 0:
@@ -1615,8 +1616,8 @@
     # 从副本中切图
     if GameWorld.GetMap().GetMapFBType() != IPY_GameWorld.fbtNull:
         #默认回满血
-        if curPlayer.GetHP() > 0 and curPlayer.GetPlayerAction() != IPY_GameWorld.paDie and curPlayer.GetHP() < curPlayer.GetMaxHP():
-            curPlayer.SetHP(curPlayer.GetMaxHP())
+        if GameObj.GetHP(curPlayer) > 0 and curPlayer.GetPlayerAction() != IPY_GameWorld.paDie and GameObj.GetHP(curPlayer) < GameObj.GetMaxHP(curPlayer):
+            GameObj.SetHPFull(curPlayer)
             
     #2. 调用切换地图接口
     curPlayer.DoResetWorldPosAndClear()
@@ -1711,7 +1712,7 @@
     # #如果玩家是死亡状态,则先复活,手游策划不想复活退出
     # if curPlayer.GetPlayerAction() == IPY_GameWorld.paDie:
     #    curPlayer.Reborn(ChConfig.rebornType_System)
-    #    curPlayer.SetHP(curPlayer.GetMaxHP())
+    #    GameObj.SetHPFull(curPlayer)
     #    ChangePlayerAction(curPlayer, IPY_GameWorld.paNull)
     #===============================================================================================
     
@@ -1756,7 +1757,7 @@
         NotifyCode(curPlayer, "CrossMatching18")
         return
     
-    if curPlayer.GetHP() <= 0:
+    if GameObj.GetHP(curPlayer) <= 0:
         NotifyCode(curPlayer, "CrossMap4")
         return
     
@@ -1945,7 +1946,7 @@
     if ret != ShareDefine.EntFBAskRet_OK:
         return ret
     
-    if curPlayer.GetHP() <= 0:
+    if GameObj.GetHP(curPlayer) <= 0:
         GameWorld.Log("玩家已经死亡, 无法进入副本!")
         return ShareDefine.EntFBAskRet_Dead
     
@@ -2276,7 +2277,7 @@
 # @remarks 玩家切换地图
 def PlayerResetWorldPos(curPlayer, mapID, posX, posY, takeTruck, lineID=-1, msg='', canLock=True, exData1=0):
     #更改: 死亡允许切换地图, 在副本中被怪打死, 副本时间到, 回收副本
-#    if curPlayer.GetHP() <= 0 :
+#    if GameObj.GetHP(curPlayer) <= 0 :
 #        GameWorld.Log("死亡无法切换地图")
 #        return
     
@@ -2749,7 +2750,7 @@
             #    GameWorld.Log("    i=%s,成员不存在!" % (i))
             continue
         
-        if curTeamPlayer.GetHP() <= 0:
+        if GameObj.GetHP(curTeamPlayer) <= 0:
             #if isLog:
             #    GameWorld.Log("    i=%s,成员血量为0!playerID=%s" % (i, curTeamPlayer.GetPlayerID()))
             continue
@@ -2866,7 +2867,7 @@
         return
     if value < 0:
         value = GetPlayerCurrency(curPlayer, currencyType)
-    curPlayer.SendPropertyRefresh(refreshType, value, False)
+    SendPropertyRefresh(curPlayer, refreshType, value)
     return
 
 # 通知玩家所有自定义货币
@@ -2879,9 +2880,10 @@
             continue
         
         #此处根据需求若Value为0 可不通知客户端,具体功能制作者决定
+        value = GetPlayerCurrency(curPlayer, currencyType)
         notifyStruct = ChPyNetSendPack.tagRefreshType()
         notifyStruct.RefreshType = refreshType
-        notifyStruct.Value = GetPlayerCurrency(curPlayer, currencyType)
+        notifyStruct.Value = value
         notifyList.append(notifyStruct)
         
     #属性组合包 通知自己
@@ -4087,7 +4089,7 @@
     def PlayerLvUp(self, handLvUp=False):
         curPlayer = self.__Player
         
-        if curPlayer.GetHP() <= 0:
+        if GameObj.GetHP(curPlayer) <= 0:
             #玩家死亡不可升级
             return
         
@@ -4219,7 +4221,7 @@
             #放在功能开启后面
             PlayerWorldAverageLv.UpdatePlayerWorldAverageLv(curPlayer)
             #将血设置为最大
-            curPlayer.SetHP(curPlayer.GetMaxHP())
+            GameObj.SetHPFull(curPlayer)
             if curPlayer.GetMaxMP() > 0:
                 curPlayer.SetMP(curPlayer.GetMaxMP())
             
@@ -4356,7 +4358,11 @@
                 continue
             notifyStruct = ChPyNetSendPack.tagRefreshType()
             notifyStruct.RefreshType = attrType
-            notifyStruct.Value = curPlayerState
+            if attrType in [IPY_PlayerDefine.CDBPlayerRefresh_HP, IPY_PlayerDefine.CDBPlayerRefresh_MaxHP]:
+                notifyStruct.Value = curPlayerState % ShareDefine.Def_PerPointValue
+                notifyStruct.ValueEx = curPlayerState / ShareDefine.Def_PerPointValue
+            else:
+                notifyStruct.Value = curPlayerState               
             if notifySelf:
                 notifySelfList.append(notifyStruct)
             if notifyAll:
@@ -4453,7 +4459,7 @@
             return
         
         GameWorld.DebugLog("Start RefreshPlayerAttrByBuffEx!!!")
-        beforeMaxHP = curPlayer.GetMaxHP()
+        beforeMaxHP = GameObj.GetMaxHP(curPlayer)
         beforeMoveSpeedValue = GetSpeedValue(curPlayer)
         #构建玩家刷新通知客户端字典, 缓存[索引, 数值]
         playerStateDict = {}
@@ -4546,7 +4552,7 @@
         GameWorld.DebugLog("Start RefreshPlayerAttrStateEx!!!")
         
         #beforeAtkInterval = curPlayer.GetAtkInterval()
-        beforeMaxHP = curPlayer.GetMaxHP()
+        beforeMaxHP = GameObj.GetMaxHP(curPlayer)
         beforeMoveSpeedValue = GetSpeedValue(curPlayer)
         beforeMaxProDef = GetMaxProDef(curPlayer)
         #[金木水火土]
@@ -4729,7 +4735,7 @@
             mfpSkill = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPSkill % mfpObj.mfpType)
             mfpEx = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPEx % mfpObj.mfpType)
             mfpTotal = mfpValue + mfpSkill + mfpEx
-            mfpDict[mfpObj.mfpType] = mfpTotal
+            mfpDict[mfpObj.mfpType] = min(mfpTotal, ChConfig.Def_UpperLimit_DWord)
             
             if mfpType == ShareDefine.Def_MFPType_Plus:
                 OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_Plus, mfpTotal)
@@ -4810,12 +4816,13 @@
         curPlayer = self.__Player
         if GetProDefHPPer(curPlayer) == 0:
             return
-        maxHP = curPlayer.GetMaxHP()
+        maxHP = GameObj.GetMaxHP(curPlayer)
         proDefPer = GetProDefHPPer(curPlayer)
         
         #获取策划配置的表格
         GodWeapon4 = IpyGameDataPY.GetFuncCfg("GodWeapon4", 2)
         maxProDef = eval(FormulaControl.GetCompileFormula("GodWeapon4", GodWeapon4))
+        maxProDef = min(maxProDef, ChConfig.Def_UpperLimit_DWord)
         
         SetMaxProDef(curPlayer, int(maxProDef))
         
@@ -4962,12 +4969,11 @@
         '''
         curPlayer = self.__Player
         #------------------------------计算完毕--------------------------------
-        afterMaxHP = curPlayer.GetMaxHP()
+        afterMaxHP = GameObj.GetMaxHP(curPlayer)
         addMaxHP = max(0, afterMaxHP - beforeMaxHP)
         if beforeMaxHP > 0 and addMaxHP > 0 and curPlayer.GetPlayerAction() != IPY_GameWorld.paDie:
             # 最大血量增加时,同步增加等量的当前血量 (死亡状态下不刷当前血量)
-            curPlayer.SetHP(min(curPlayer.GetHP() + addMaxHP, afterMaxHP))
-            
+            GameObj.SetHP(curPlayer, min(GameObj.GetHP(curPlayer) + addMaxHP, afterMaxHP))
         #self.PrintAttr(curPlayer, "最终的")
         curPlayer.EndRefreshState() # 统一在刷属性结束逻辑中调用
         #---------------------------------------------------------------------
@@ -5113,31 +5119,33 @@
             mfpDataList.append(mfpData)
             totalFightPower += fightPower # 累加总战斗力
             
-        if totalFightPower > ShareDefine.Def_UpperLimit_DWord:
-            GameWorld.ErrLog("总战力超过数值上限!totalFightPower=%s" % totalFightPower, curPlayer.GetPlayerID())
-            totalFightPower = ShareDefine.Def_UpperLimit_DWord
-            
         # //A3 A1 各功能模块战斗力信息 #tagMCModuleFightPowerInfo
         mfpInfo = ChPyNetSendPack.tagMCModuleFightPowerInfo()
         mfpInfo.Clear()
         
-        mfpInfo.TotalFightPower = totalFightPower
+        mfpInfo.TotalFightPower = totalFightPower % ChConfig.Def_PerPointValue
+        mfpInfo.TotalFightPoweEx = totalFightPower / ChConfig.Def_PerPointValue
         mfpInfo.MFPCnt = len(mfpDataList)
         mfpInfo.MFPList = mfpDataList
         NetPackCommon.SendFakePack(curPlayer, mfpInfo)
-        beforeFightPower = curPlayer.GetFightPower()
-        curPlayer.SetFightPower(totalFightPower, False)
+        beforeFightPower = GetFightPower(curPlayer)
+        SetFightPower(curPlayer, totalFightPower)
         if totalFightPower < beforeFightPower:
             DataRecordPack.DR_FightPowerChangeInfo(curPlayer, beforeFightPower)
         highestFightPower = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FightPower_Highest, 0,
                                                            ChConfig.Def_PDictType_FightPower)
+        highestFightPower += curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FightPower_HighestEx, 0, 
+                                                            ChConfig.Def_PDictType_FightPower) * ChConfig.Def_PerPointValue
         if totalFightPower > highestFightPower:
-            NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FightPower_Highest, totalFightPower,
+            highestFightPower = totalFightPower
+            NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FightPower_Highest, highestFightPower % ChConfig.Def_PerPointValue,
+                                 ChConfig.Def_PDictType_FightPower)
+            NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FightPower_HighestEx, highestFightPower / ChConfig.Def_PerPointValue,
                                  ChConfig.Def_PDictType_FightPower)
         GameWorld.DebugLog("总战力: %s, 历史最高战力: %s, beforeFightPower=%s" % (totalFightPower, highestFightPower, beforeFightPower))
         PlayerBillboard.UpdatePlayerFPTotalBillboard(curPlayer)
-        # 记录开服活动数据
-        OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_FightPower, totalFightPower)
+        # 记录开服活动数据,开服活动前X天理论上不会超过20E,暂不处理
+        OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_FightPower, min(totalFightPower, ChConfig.Def_UpperLimit_DWord))
         if beforeFightPower != totalFightPower:
             CrossPlayerData.OnPlayerFightPowerChange(curPlayer)
         return
@@ -5227,15 +5235,15 @@
             #玩家未初始化成功, 不修正血量和魔法值, 因此时有可能因为某些影响主角的物品未初始化完毕(如宠物装备)
             return
         
-        curPlayerHP = curPlayer.GetHP()
-        curPlayerMaxHP = curPlayer.GetMaxHP()
+        curPlayerHP = GameObj.GetHP(curPlayer)
+        curPlayerMaxHP = GameObj.GetMaxHP(curPlayer)
         #=======================================================================
         # curPlayerMP = curPlayer.GetMP()
         # curPlayerMaxMP = curPlayer.GetMaxMP()
         #=======================================================================
         
         if curPlayerHP > curPlayerMaxHP:
-            curPlayer.SetHP(curPlayerMaxHP)
+            GameObj.SetHPFull(curPlayer)
         
         #=======================================================================
         # if curPlayerMP > curPlayerMaxMP:
@@ -5388,8 +5396,8 @@
 #        self.RefreshAllState()
 #===============================================================================
         
-        if curPlayer.GetHP() != 0:
-            curPlayer.SetHP(0)
+        if GameObj.GetHP(curPlayer) != 0:
+            GameObj.SetHP(curPlayer, 0)
         
         #清空移动错误距离
         GameWorld.ClearPlayerPosCount(curPlayer)
@@ -5973,12 +5981,23 @@
 #     同步前端及GameServer需要自己写通知,设置函数自身不带通知参数
 #
 # 发送0418包
-# SendPropertyRefresh(int inputType, int inputValue, bool boardCast, bool includeSelf = true)
+# SendPropertyRefresh(int inputType, int inputValue, int inputValueEx, bool boardCast, bool includeSelf = true)
 # @param : boardCast-是否广播周围玩家;includeSelf-是否包含自己
 #
 # 通知GsmeServer; 
-# SendGameServerRefreshState(int inputType, int inputValue)
+# SendGameServerRefreshState(int inputType, int inputValue, int inputValueEx)
 
+def SendPropertyRefresh(curPlayer, inputType, value, boardCast=False):
+    ''' 发送0418包
+    @param boardCast: 是否广播周围玩家,一定会发给自己
+    '''
+    curPlayer.SendPropertyRefresh(inputType, value % ShareDefine.Def_PerPointValue, value / ShareDefine.Def_PerPointValue, boardCast)
+    return
+
+def SendGameServerRefreshState(curPlayer, inputType, value):
+    ## 同步属性到GameServer IPY_GRefreshPlayerProperty
+    curPlayer.SendGameServerRefreshState(inputType, value % ShareDefine.Def_PerPointValue, value / ShareDefine.Def_PerPointValue)
+    return
 
 # 禁言 通知gameServer
 def SetGMForbidenTalk(curPlayer, value):
@@ -6014,16 +6033,16 @@
 
 def __SetGMForbidenTalkValue(curPlayer, value):
     curPlayer.SetGMForbidenTalk(value)
-    curPlayer.SendGameServerRefreshState(ShareDefine.CDBPlayerRefresh_ForbidenTalk, value)
-    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_ForbidenTalk, value, False)
+    SendGameServerRefreshState(curPlayer, ShareDefine.CDBPlayerRefresh_ForbidenTalk, value)
+    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_ForbidenTalk, value)
     GameWorld.DebugLog("__SetGMForbidenTalkValue %s" % value, curPlayer.GetPlayerID())
     return
 
 def SetPlayerAccState(curPlayer, accState):
     curPlayer.SetAccState(accState)
     curPlayer.SetExAttr17(accState) # 同步设置该值 0309 封包登录时需要用到
-    curPlayer.SendGameServerRefreshState(ShareDefine.CDBPlayerRefresh_ExAttr17, accState)
-    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_ExAttr17, accState, False)
+    SendGameServerRefreshState(curPlayer, ShareDefine.CDBPlayerRefresh_ExAttr17, accState)
+    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_ExAttr17, accState)
     GameWorld.DebugLog("SetPlayerAccState %s" % (accState), curPlayer.GetPlayerID())
     return
 
@@ -6039,7 +6058,7 @@
         GameWorld.Log("上线时角色为被禁言状态!", curPlayer.GetPlayerID())
         __SetGMForbidenTalkValue(curPlayer, 1)
     else:
-        curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_ForbidenTalk, 0, False)
+        SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_ForbidenTalk, 0)
     return
 
 ## 协助目标玩家ID
@@ -6138,9 +6157,15 @@
 def GetPrestige(curPlayer): return 0
 def SetPrestige(curPlayer, value): return
 
-## 设置模块战斗力
+##总战斗力,支持超过20E
+def GetFightPower(curPlayer): return curPlayer.GetFightPowerEx() * ChConfig.Def_PerPointValue + curPlayer.GetFightPower()
+def SetFightPower(curPlayer, value):
+    curPlayer.SetFightPower(value % ChConfig.Def_PerPointValue, value / ChConfig.Def_PerPointValue, False) # 不通知GameServer bNotifyGameServer False
+    return
+
+## 设置模块战斗力,最大20E
 def SetMFPFightPower(curPlayer, mfpType, fightPower):
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPFightPower % mfpType, fightPower)
+    curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPFightPower % mfpType, min(fightPower, ChConfig.Def_UpperLimit_DWord))
     return
 
 ## 获取模块战斗力
@@ -6545,7 +6570,7 @@
 def GetSpeedValue(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SpeedValue)
 def SetSpeedValue(curPlayer, value):
     curPlayer.SetDict(ChConfig.Def_PlayerKey_SpeedValue, value)
-    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_SpeedValue, value, True) # 移动速度值暂定广播周围玩家
+    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_SpeedValue, value, True) # 移动速度值暂定广播周围玩家
 
 ##获取玩家攻击速度,用于计算攻击间隔
 # @param curPlayer 玩家实例
@@ -6592,7 +6617,7 @@
 def GetNPCHurtAddPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_NPCHurtAddPer)
 def SetNPCHurtAddPer(curPlayer, value):
     curPlayer.SetDict(ChConfig.Def_PlayerKey_NPCHurtAddPer, value)
-    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_NPCHurtAddPer, value, False)
+    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_NPCHurtAddPer, value)
     
 #---职业伤害加成---
 ## 目标战士伤害加成
@@ -6624,7 +6649,7 @@
 def GetLuckyHitReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_LuckyHitReduce)
 def SetLuckyHitReduce(curPlayer, value): 
     curPlayer.SetDict(ChConfig.Def_PlayerKey_LuckyHitReduce, value)
-    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_LuckyHitReduce, value, False)
+    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_LuckyHitReduce, value)
     
 ## 卓越一击伤害减免
 def GetGreatHitReducePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_GreatHitReducePer)
@@ -6633,7 +6658,7 @@
 def GetSuperHitReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SuperHitReduce)
 def SetSuperHitReduce(curPlayer, value):
     curPlayer.SetDict(ChConfig.Def_PlayerKey_SuperHitReduce, value)
-    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_SuperHitReduce, value, False)
+    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_SuperHitReduce, value)
 ## 无视防御伤害减免
 def GetIgnoreDefReducePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_IgnoreDefReducePer)
 def SetIgnoreDefReducePer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_IgnoreDefReducePer, value)
@@ -6643,7 +6668,7 @@
 def GetLuckyHitRateReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_LuckyHitRateReduce)
 def SetLuckyHitRateReduce(curPlayer, value):
     curPlayer.SetDict(ChConfig.Def_PlayerKey_LuckyHitRateReduce, value)
-    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_LuckyHitRateReduce, value, False)
+    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_LuckyHitRateReduce, value)
 ## 抗卓越一击概率
 def GetGreatHitRateReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_GreatHitRateReduce)
 def SetGreatHitRateReduce(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_GreatHitRateReduce, value)
@@ -6651,12 +6676,12 @@
 def GetSuperHitRateReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SuperHitRateReduce)
 def SetSuperHitRateReduce(curPlayer, value): 
     curPlayer.SetDict(ChConfig.Def_PlayerKey_SuperHitRateReduce, value)
-    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_SuperHitRateReduce, value, False)
+    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_SuperHitRateReduce, value)
 ## 抗无视防御概率
 def GetIgnoreDefRateReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_IgnoreDefRateReduce)
 def SetIgnoreDefRateReduce(curPlayer, value):
     curPlayer.SetDict(ChConfig.Def_PlayerKey_IgnoreDefRateReduce, value)
-    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_IgnoreDefRateReduce, value, False)
+    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_IgnoreDefRateReduce, value)
     
 #---特殊伤害概率---
 ## 富豪一击概率
@@ -6667,30 +6692,30 @@
 def GetBleedDamage(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_BleedDamage)
 def SetBleedDamage(curPlayer, value):
     curPlayer.SetDict(ChConfig.Def_PlayerKey_BleedDamage, value)
-    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_BleedDamage, value, False)
+    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_BleedDamage, value)
     
 ## 最终伤害百分比
 def GetFinalHurtPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FinalHurtPer)
 def SetFinalHurtPer(curPlayer, value):
     curPlayer.SetDict(ChConfig.Def_PlayerKey_FinalHurtPer, value)
-    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_FinalHurtPer, value, False)
+    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_FinalHurtPer, value)
     
 ## 最终伤害减免百分比
 def GetFinalHurtReducePer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FinalHurtReducePer)
 def SetFinalHurtReducePer(curPlayer, value):
     curPlayer.SetDict(ChConfig.Def_PlayerKey_FinalHurtReducePer, value)
-    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_FinalHurtReducePer, value, False)
+    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_FinalHurtReducePer, value)
     
 ## 最终固定伤害增加
 def GetFinalHurt(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FinalHurt)
 def SetFinalHurt(curPlayer, value):
     curPlayer.SetDict(ChConfig.Def_PlayerKey_FinalHurt, value)
-    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_FinalHurt, value, False)
+    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_FinalHurt, value)
 ## 最终固定伤害减少
 def GetFinalHurtReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FinalHurtReduce)
 def SetFinalHurtReduce(curPlayer, value):
     curPlayer.SetDict(ChConfig.Def_PlayerKey_FinalHurtReduce, value)
-    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_FinalHurtReduce, value, False)
+    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_FinalHurtReduce, value)
 ## 对指定boss伤害加成固定值
 def GetBossIDHurt(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_BossIDHurt)
 def SetBossIDHurt(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_BossIDHurt, value)
@@ -6736,7 +6761,7 @@
 def GetOnlyFinalHurt(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_OnlyFinalHurt)
 def SetOnlyFinalHurt(curPlayer, value):
     curPlayer.SetDict(ChConfig.Def_PlayerKey_OnlyFinalHurt, value)
-    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_OnlyFinalHurt, value, False)
+    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_OnlyFinalHurt, value)
     return
 
 # PVP攻击回血
@@ -6812,13 +6837,13 @@
 def GetFaintRate(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrFaintRate)
 def SetFaintRate(curPlayer, value):
     curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrFaintRate, value)
-    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_FaintRate, value, False)
+    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_FaintRate, value)
 #---击晕抵抗----
 def GetFaintDefRate(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrFaintDefRate)
 def SetFaintDefRate(curPlayer, value):
     curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrFaintDefRate, value)
-    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_FaintDefRate, value, False)
-
+    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_FaintDefRate, value)
+    
 #---触发定身----
 def GetAtkerFreezed(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrAtkerFreezed)
 def SetAtkerFreezed(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrAtkerFreezed, value)
@@ -6831,43 +6856,43 @@
 def GetComboRate(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrComboRate)
 def SetComboRate(curPlayer, value):
     curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrComboRate, value)
-    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_ComboRate, value, False)
+    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_ComboRate, value)
 #---连击伤害----
 def GetComboDamPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrComboDamPer)
 def SetComboDamPer(curPlayer, value):
     curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrComboDamPer, value)
-    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_ComboDamPer, value, False)
+    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_ComboDamPer, value)
     
 #---技能攻击比例减少----
 def GetSkillAtkRateReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_SkillAtkRateReduce)
 def SetSkillAtkRateReduce(curPlayer, value):
     curPlayer.SetDict(ChConfig.Def_PlayerKey_SkillAtkRateReduce, value)
-    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_SkillAtkRateReduce, value, False)
+    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_SkillAtkRateReduce, value)
 #---PVP固定伤害----
 def GetDamagePVP(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrDamagePVP)
 def SetDamagePVP(curPlayer, value):
     curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrDamagePVP, value)
-    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_DamagePVP, value, False)
+    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_DamagePVP, value)
 #---PVP固定伤害减少----
 def GetDamagePVPReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrDamagePVPReduce)
 def SetDamagePVPReduce(curPlayer, value):
     curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrDamagePVPReduce, value)
-    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_DamagePVPReduce, value, False)
+    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_DamagePVPReduce, value)
 #---伤害输出固定值计算对NPC附加----
 def GetDamagePVE(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrDamagePVE)
 def SetDamagePVE(curPlayer, value): 
     curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrDamagePVE, value)
-    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_DamagePVE, value, False)
+    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_DamagePVE, value)
     
 #---伤害输出计算百分比对玩家附加----
 def GetDamagePerPVP(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrDamagePerPVP)
 def SetDamagePerPVP(curPlayer, value):
     curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrDamagePerPVP, value)
-    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_DamagePerPVP, value, False)
+    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_DamagePerPVP, value)
 def GetDamagePerPVPReduce(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrDamagePerPVPReduce)
 def SetDamagePerPVPReduce(curPlayer, value):
     curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrDamagePerPVPReduce, value)
-    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_DamagePerPVPReduce, value, False)
+    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_DamagePerPVPReduce, value)
     
 #---受伤计算百分比----
 def GetHurtPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrHurtPer)
@@ -6885,7 +6910,7 @@
 def GetDamChanceDef(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrDamChanceDef)
 def SetDamChanceDef(curPlayer, value):
     curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrDamChanceDef, value)
-    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_DamChanceDef, value, False)
+    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_DamChanceDef, value)
     
 #---当前防护值,需存DB----
 def GetProDef(curPlayer): return curPlayer.GetExAttr4()
@@ -6899,17 +6924,19 @@
 def GetMaxProDef(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrMaxProDef)
 def SetMaxProDef(curPlayer, value):
     curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrMaxProDef, value)
-    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_MaxProDef, value, False) # 周围玩家需要通知
+    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_MaxProDef, value) # 周围玩家需要通知
+    
 #---生命上限换算为防护值的百分比----
 def GetProDefHPPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrProDefHPPer)
 def SetProDefHPPer(curPlayer, value):
     curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrProDefHPPer, value)
-    #curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_ProDefHPPer, value, False)
+    #SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_ProDefHPPer, value)
+    
 #---防护值吸收伤害比率----
 def GetProDefAbsorb(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrProDefAbsorb)
 def SetProDefAbsorb(curPlayer, value):
     curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrProDefAbsorb, value)
-    #curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_ProDefAbsorb, value, False)
+    #SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_ProDefAbsorb, value)
     
 #---宠物攻击提升值----
 def GetPetMinAtk(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrPetMinAtk)
@@ -6922,7 +6949,7 @@
 # def GetPetDamPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrPetDamPer)
 # def SetPetDamPer(curPlayer, value): 
 #    curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrPetDamPer, value)
-#    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_PetDamPer, value, False)
+#    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_PetDamPer, value)
 #===============================================================================
 #---宠物技能伤害百分比提升----
 def GetPetSkillAtkRate(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_PetSkillAtkRate)
@@ -6940,8 +6967,8 @@
 def SetDropEquipPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrDropEquipPer, value)
 
 #---功能层防御值----
-def GetFuncDef(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_CopyFuncAttr % (ChConfig.TYPE_Calc_AttrDEF - 1))
-def SetFuncDef(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_CopyFuncAttr % (ChConfig.TYPE_Calc_AttrDEF - 1), value)
+def GetFuncDef(curPlayer): return EffGetSet.GetCopyFuncAttrValue(curPlayer, ChConfig.TYPE_Calc_AttrDEF)
+def SetFuncDef(curPlayer, value): EffGetSet.SetCopyFuncAttrValue(curPlayer, ChConfig.TYPE_Calc_AttrDEF, value)
 
 #普通攻击增伤:普通攻击附加的固定值伤害
 def GetNormalHurt(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_NormalHurt)
@@ -6960,13 +6987,13 @@
 def GetLostYinjiTime(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_LostYinjiTime)
 def SetLostYinjiTime(curPlayer, value): 
     curPlayer.SetDict(ChConfig.Def_PlayerKey_LostYinjiTime, value)
-    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_YinjiTime, value, False)
+    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_YinjiTime, value)
 
 # 当前印记数
 def GetYinjiCnt(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_YinjiCnt)
 def SetYinjiCnt(curPlayer, value): 
     curPlayer.SetDict(ChConfig.Def_PlayerKey_YinjiCnt, value)
-    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_YinjiCnt, value, False)
+    SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_YinjiCnt, value)
 
 # 减少指定技能组CD XX%
 def GetTheFBSkillsCD(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_TheFBSkillsCD)
@@ -7138,7 +7165,7 @@
 ## 设置玩家字典值, 存库
 def NomalDictSetProperty(curPlayer, key, value, dType=0):
     if CrossPlayerData.IsNeedProcessCrossPlayer(curPlayer) and key not in \
-        [ChConfig.Def_PDict_FightPower_Total, ChConfig.Def_PlayerKey_CrossRegisterMap]:
+        [ChConfig.Def_PDict_FightPower_Total, ChConfig.Def_PDict_FightPower_TotalEx, ChConfig.Def_PlayerKey_CrossRegisterMap]:
         playerID = curPlayer.GetPlayerID()
         changeDict = PyGameData.g_crossPlayerDictChangeInfo.get(playerID, {})
         changeDict[(key, dType)] = value

--
Gitblit v1.8.0