From 3d7d4a003455176e07b517068608a999796fdf6e Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 27 十一月 2018 22:25:02 +0800
Subject: [PATCH] 4762 【后端】修复两个非好友玩家都没有仙盟时被视为同仙盟的bug;

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py |   57 +++++++++++++++++++++++++++++++++++----------------------
 1 files changed, 35 insertions(+), 22 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 ef41edc..68a3307 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攻击回血
@@ -4205,6 +4206,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 +4401,9 @@
         CalcLineEffect.ChangePlayerAttrInLineEffectList(curPlayer, skillNoFightPowerAttrList[ChConfig.CalcAttr_Battle])
         #self.PrintAttr(curPlayer, "固定层级")
         
+        #护盾值刷新
+        self.__RefreshMaxProDef(beforeMaxProDef)
+        
         # 【到此所有功能属性都已刷新处理完毕,复制一份 功能属性的刷新结果,用于BUFF属性单独刷新】
         EffGetSet.CopyPlayerFuncAttr(curPlayer)
         
@@ -4426,6 +4431,26 @@
         GameWorld.DebugLog("End RefreshPlayerAttrStateEx!!!")
         return True
     
+    
+    # 生命转化为防护值
+    def __RefreshMaxProDef(self, beforeMaxProDef):
+        curPlayer = self.__Player
+        if GetProDefHPPer(curPlayer) == 0:
+            return
+        SetMaxProDef(curPlayer, curPlayer.GetMaxHP()*GetProDefHPPer(curPlayer)/ChConfig.Def_MaxRateValue)
+        
+        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层属性,该层属性只会改变玩家最终属性,不会影响战力等
@@ -5678,6 +5703,11 @@
         curPlayer.SetExAttr6(silverPoint)
     return
 
+## 玩家今日已获得仙缘币
+def GetTodayXianyuanCoin(curPlayer): return curPlayer.GetExAttr11()
+def SetTodayXianyuanCoin(curPlayer, value): return curPlayer.SetExAttr11(value)
+def AddTodayXianyuanCoin(curPlayer, addValue): return curPlayer.SetExAttr11(curPlayer.GetExAttr11() + addValue, False, True)
+
 ##VIP到期时间, 需要同步GameServer
 def GetVIPExpireTime(curPlayer): return curPlayer.GetExAttr9()
 def SetVIPExpireTime(curPlayer, expireTime): return curPlayer.SetExAttr9(expireTime, False, True)
@@ -5889,23 +5919,6 @@
 #  @return: 威望值
 def GetMergeWarRank(curPlayer):
     return 0
-
-
-## 设置玩家官爵星级
-#  @param curPlayer: 玩家实例
-#  @param value: 星级
-#  @return: 
-def SetOfficeStar(curPlayer, value):
-    curPlayer.SetExAttr11(value)
-    return
-
-    
-## 获取玩家玩家官爵星级
-#  @param curPlayer: 玩家实例
-#  @return: 星级
-def GetOfficeStar(curPlayer):
-    return curPlayer.GetExAttr11()
-
 
 ##获取可免费开启的格子数
 # @param curPlayer 玩家对象
@@ -6496,17 +6509,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