From 54b3ca452de08e8cf5723a0715cc0c3853c2df3a Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期六, 01 十二月 2018 16:35:48 +0800
Subject: [PATCH] 2549 【BUG】【1.3】玩家登录时过天处理离线期间所获得的助战仙缘币异常

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py |   47 ++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 42 insertions(+), 5 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 e5d8b03..da6762a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -3494,8 +3494,9 @@
         DamagePerPVPReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_DamagePerPVPReduce) * fpParam.GetCftDamagePerPVPReduce() # 伤害输出计算百分比PVP减少
         ComboRate = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_ComboRate) # 连击几率
         ComboDamPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_ComboDamPer) # 连击伤害
-        MaxProDef = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_MaxProDef) # 最大防护值
-        ProDefAbsorb = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_ProDefAbsorb) # 防护值吸收伤害比率
+        #MaxProDef = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_MaxProDef) # 最大防护值
+        #ProDefAbsorb = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_ProDefAbsorb) # 防护值吸收伤害比率
+        ProDefPer = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_ProDefHPPer) # 防护转化百分比
         
         OnlyFinalHurt = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_OnlyFinalHurt) # 额外输出伤害
         PVPAtkBackHP = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_PVPAtkBackHP) # PVP攻击回血
@@ -3915,6 +3916,10 @@
             # 升级需要执行的游戏功能处理
             GameFuncComm.DoFuncOpenLogic(curPlayer)
             ChEquip.CalcEquips_OutOfPrint(curPlayer)    # 缓存绝版属性
+            if aftLV%10 == 0:
+                # 控制下刷新次数
+                PlayerPet.CalcPetItemAddPlayerAttr(curPlayer)   # 宠物有随等级变化的技能
+            
             self.RefreshPlayerAttrState(billboardFunc=PlayerBillboard.UpdatePlayerLVBillboard)
             #放在功能开启后面
             PlayerWorldAverageLv.UpdatePlayerWorldAverageLv(curPlayer)
@@ -4205,6 +4210,7 @@
         #beforeAtkInterval = curPlayer.GetAtkInterval()
         beforeMaxHP = curPlayer.GetMaxHP()
         beforeMoveSpeedValue = GetSpeedValue(curPlayer)
+        beforeMaxProDef = GetMaxProDef(curPlayer)
         #构建玩家刷新通知客户端字典, 缓存[索引, 数值]
         playerStateDict = {}
         for index in xrange(1, ChConfig.Def_Calc_AllAttrType_MAX):
@@ -4399,6 +4405,9 @@
         CalcLineEffect.ChangePlayerAttrInLineEffectList(curPlayer, skillNoFightPowerAttrList[ChConfig.CalcAttr_Battle])
         #self.PrintAttr(curPlayer, "固定层级")
         
+        #护盾值刷新
+        self.__RefreshMaxProDef(beforeMaxProDef)
+        
         # 【到此所有功能属性都已刷新处理完毕,复制一份 功能属性的刷新结果,用于BUFF属性单独刷新】
         EffGetSet.CopyPlayerFuncAttr(curPlayer)
         
@@ -4426,6 +4435,33 @@
         GameWorld.DebugLog("End RefreshPlayerAttrStateEx!!!")
         return True
     
+    
+    # 生命转化为防护值
+    def __RefreshMaxProDef(self, beforeMaxProDef):
+        curPlayer = self.__Player
+        if GetProDefHPPer(curPlayer) == 0:
+            return
+        maxHP = curPlayer.GetMaxHP()
+        proDefPer = GetProDefHPPer(curPlayer)
+        
+        #获取策划配置的表格
+        GodWeapon4 = IpyGameDataPY.GetFuncCfg("GodWeapon4", 2)
+        maxProDef = eval(FormulaControl.GetCompileFormula("GodWeapon4", GodWeapon4))
+        
+        SetMaxProDef(curPlayer, int(maxProDef))
+        
+        afterMaxProDef = GetMaxProDef(curPlayer)
+        addValue = max(0, afterMaxProDef - beforeMaxProDef)
+        curProDef = GetProDef(curPlayer)
+        
+        if beforeMaxProDef > 0 and addValue > 0 and curPlayer.GetPlayerAction() != IPY_GameWorld.paDie:
+            # 同步增加 (死亡状态下不刷)
+            SetProDef(curPlayer, min(curProDef + addValue, afterMaxProDef))
+        elif curProDef > afterMaxProDef:
+            # 做一次防范纠正
+            SetProDef(curPlayer, min(curProDef, afterMaxProDef))
+            
+        return
     
     def __RefreshBuffAttr(self):
         ## 刷新buff层属性,该层属性只会改变玩家最终属性,不会影响战力等
@@ -5680,6 +5716,7 @@
 
 ## 玩家今日已获得仙缘币
 def GetTodayXianyuanCoin(curPlayer): return curPlayer.GetExAttr11()
+def SetTodayXianyuanCoin(curPlayer, value): return curPlayer.SetExAttr11(value, False, True)
 def AddTodayXianyuanCoin(curPlayer, addValue): return curPlayer.SetExAttr11(curPlayer.GetExAttr11() + addValue, False, True)
 
 ##VIP到期时间, 需要同步GameServer
@@ -6483,17 +6520,17 @@
 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, True) # 周围玩家需要通知
+    curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_MaxProDef, value, False) # 周围玩家需要通知
 #---生命上限换算为防护值的百分比----
 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)
+    #curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_ProDefHPPer, value, False)
 #---防护值吸收伤害比率----
 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)
+    #curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_ProDefAbsorb, value, False)
     
 #---宠物攻击提升值----
 def GetPetMinAtk(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrPetMinAtk)

--
Gitblit v1.8.0