From a464c80b1d44bdca78684f0bb5f5eba58d2fd87d Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 27 五月 2019 19:43:18 +0800
Subject: [PATCH] 6861 【后端】【2.0】暴击、会心战力计算优化

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py        |    6 ++++++
 PySysDB/PySysDBPY.h                                                                         |    2 ++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py |   19 ++++++++++++++-----
 3 files changed, 22 insertions(+), 5 deletions(-)

diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 4d17a62..d18f9fb 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -470,6 +470,8 @@
 	DWORD		CftBleedDamage;	//流血伤害系数
 	DWORD		CftFaintRate;	//击晕系数
 	DWORD		CftSuperHitReduce;	//暴击抗性系数
+	DWORD		CftSuperHitRate;	//暴击率系数
+	DWORD		CftLuckyHitRate;	//会心一击率系数
 	DWORD		CftLuckyHitRateReduce;	//会心一击抗性系数
 	DWORD		CftSkillAtkRate;	//技能伤害系数
 	DWORD		CftSkillAtkRateReduce;	//技能减伤系数
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 3943116..74a5e84 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -389,6 +389,8 @@
                         ("DWORD", "CftBleedDamage", 0),
                         ("DWORD", "CftFaintRate", 0),
                         ("DWORD", "CftSuperHitReduce", 0),
+                        ("DWORD", "CftSuperHitRate", 0),
+                        ("DWORD", "CftLuckyHitRate", 0),
                         ("DWORD", "CftLuckyHitRateReduce", 0),
                         ("DWORD", "CftSkillAtkRate", 0),
                         ("DWORD", "CftSkillAtkRateReduce", 0),
@@ -2201,6 +2203,8 @@
         self.CftBleedDamage = 0
         self.CftFaintRate = 0
         self.CftSuperHitReduce = 0
+        self.CftSuperHitRate = 0
+        self.CftLuckyHitRate = 0
         self.CftLuckyHitRateReduce = 0
         self.CftSkillAtkRate = 0
         self.CftSkillAtkRateReduce = 0
@@ -2232,6 +2236,8 @@
     def GetCftBleedDamage(self): return self.CftBleedDamage # 流血伤害系数
     def GetCftFaintRate(self): return self.CftFaintRate # 击晕系数
     def GetCftSuperHitReduce(self): return self.CftSuperHitReduce # 暴击抗性系数
+    def GetCftSuperHitRate(self): return self.CftSuperHitRate # 暴击率系数
+    def GetCftLuckyHitRate(self): return self.CftLuckyHitRate # 会心一击率系数
     def GetCftLuckyHitRateReduce(self): return self.CftLuckyHitRateReduce # 会心一击抗性系数
     def GetCftSkillAtkRate(self): return self.CftSkillAtkRate # 技能伤害系数
     def GetCftSkillAtkRateReduce(self): return self.CftSkillAtkRateReduce # 技能减伤系数
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 d5dc3a8..bd5cfad 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -3570,7 +3570,7 @@
             attrName = self.__AttrName % attrIndex
             setattr(self, attrName, getattr(self, attrName) + value)
     
-    def GetModuleFightPower(self, fpParam, job):
+    def GetModuleFightPower(self, fpParam, curPlayer):
         MaxHP = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_AttrMaxHP) # 最大血量
         MinAtk = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_AttrATKMin) # 最小攻击
         MaxAtk = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_AttrATKMax) # 最大攻击
@@ -3578,11 +3578,11 @@
         Hit = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_AttrHit) * fpParam.GetCftHit() # 命中值
         Miss = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_AttrMiss) * fpParam.GetCftMiss() # 闪避值
         AtkSpeed = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_AttrAtkSpeed) # 攻击速度(数值非攻击间隔)
-        SuperHitRate = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_SuperHitRate) # 暴击率
+        SuperHitRate = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_SuperHitRate) * fpParam.GetCftSuperHitRate() # 暴击率
         SuperHitRateReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_SuperHitRateReduce) # 暴击概率抗性
         SuperHit = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_SuperHit) # 暴击伤害固定值
         SuperHitReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_SuperHitReduce) * fpParam.GetCftSuperHitReduce() # 暴击固定减伤
-        LuckyHitRate = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_LuckyHitRate) # 会心一击
+        LuckyHitRate = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_LuckyHitRate) * fpParam.GetCftLuckyHitRate() # 会心一击
         LuckyHitRateReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_LuckyHitRateReduce) * fpParam.GetCftLuckyHitRateReduce() # 会心一击概率抗性
         LuckyHit = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_LuckyHit) # 会心一击伤害固定值
         LuckyHitReduce = getattr(self, self.__AttrName % ChConfig.TYPE_Calc_LuckyHitReduce) # 会心一击伤害固定减伤
@@ -3640,6 +3640,11 @@
         AtkSpeedParameter = fpParam.GetCftAtkSpeed()
         LuckyHitParameter = fpParam.GetCftLuckyHit()
         
+        #取总属性的
+        SuperHitRateTotal = curPlayer.GetSuperHitRate()
+        LuckyHitRateTotal = curPlayer.GetLuckyHitRate()
+        
+        job = curPlayer.GetJob()
         diffAttrDict = self.__GetAttrFightPowerParamDiff(job)
         for paramName, diffValue in diffAttrDict.items():
             exec("%s = max(0, %s - %s)" % (paramName, paramName, diffValue))
@@ -4533,6 +4538,7 @@
         curLV = curPlayer.GetLV()
         fpParam = IpyGameDataPY.GetIpyGameData("FightPowerParam", curLV)
         mfpDict = {} # 模块战斗力
+        mfpObjDict = {}
         for mfpType, attrFuncIndexList in ChConfig.MFPTypeAttrFuncIndexDict.items():
             mfpAttrList = [{} for _ in range(4)]
             mfpAttrExDict = {}
@@ -4558,8 +4564,11 @@
             mfpObj.SetCalcMFPBattleAttr(mfpAttrList)
             for attrIndex, value in mfpAttrExDict.items():
                 mfpObj.AddCalcMFPAttr(attrIndex, value)
-                
-            mfpValue = 0 if not fpParam else mfpObj.GetModuleFightPower(fpParam, curPlayer.GetJob())
+            mfpObjDict[mfpType] = mfpObj
+            
+        # 因为计算战力需要取到总属性,所以等各功能点属性累加完后再计算
+        for mfpType, mfpObj in mfpObjDict.items():
+            mfpValue = 0 if not fpParam else mfpObj.GetModuleFightPower(fpParam, curPlayer)
             mfpSkill = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPSkill % mfpObj.mfpType)
             mfpEx = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPEx % mfpObj.mfpType)
             mfpTotal = mfpValue + mfpSkill + mfpEx

--
Gitblit v1.8.0