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