From 70cbc5b6eb5744691be6d36a843d89166add9d7c Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 26 三月 2024 19:08:37 +0800
Subject: [PATCH] 10019 【砍树】回合战斗(增加神通部分技能支持;增加部分属性;优化伤血公式;) 1. 增加强化灵兽(属性ID 217)、弱化灵兽属性(属性ID 218); 2. 去除反击必命中设定;优化反击灵兽协同释放方式46支持配置是否重新进入技能CD; 3. 细化回合战斗伤血公式分类;技能表HurtType字段增加十位数表示原攻击类型(1-物理攻击;2-魔法攻击;新增3-额外攻击),个位数保留目前设定; 4. 增加xp道法攻击被动增伤,道法技能释放被动触发; 5. NPC支持反弹伤害; 6. 灵宠释放技能、灵宠攻击触发被动支持区分(每次、每只独立首次,所有灵宠共享首次) 7. 治疗支持强化治疗、弱化治疗属性;区分主角主动治疗、灵宠治疗;强化灵兽及弱化灵兽属性对灵宠治疗有效; 8. 技能释放方式增加 恢复妖气-47;扣除妖气-48;

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py |   60 ++++++++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 46 insertions(+), 14 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py
index 1a436c0..c42569e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py
@@ -1253,11 +1253,7 @@
         # 禁止治疗
         return
     
-    # 治疗加成
-    curePer = GameObj.GetCurePer(curObj) + ChConfig.Def_MaxRateValue
-    curePerReduce = TurnAttack.GetEnemyCureDefPer(curObj) # 弱化治疗,取对方的
-    curePerFinal = max(0, curePer - curePerReduce)
-    addValueFianl = int(addValue*curePerFinal*1.0/ChConfig.Def_MaxRateValue)
+    addValueFianl = addValue
     
     maxHP = GameObj.GetMaxHP(curObj)
     
@@ -1292,8 +1288,8 @@
     if isNotify:
         AttackCommon.ChangeHPView(curObj, curObj, skillTypeID, addValueFianl, ChConfig.Def_HurtTYpe_Recovery)
         
-    GameWorld.DebugLog("        治疗: curID=%s,skillTypeID=%s,curePerFinal=%s(%s-%s),addValue=%s,addValueFianl=%s,HP=%s" 
-                       % (curObj.GetID(), skillTypeID, curePerFinal, curePer, curePerReduce, addValue, addValueFianl, remainHP))
+    GameWorld.DebugLog("        治疗: curID=%s,skillTypeID=%s,addValue=%s,addValueFianl=%s,HP=%s" 
+                       % (curObj.GetID(), skillTypeID, addValue, addValueFianl, remainHP))
     return addValueFianl
 
 ## 直接扣血不走公式
@@ -1974,11 +1970,21 @@
     
     return
 
+def GetBattleType(curSkill):
+    ## 攻击类型
+    if not curSkill:
+        return ChConfig.ghtPhy
+    battleType = curSkill.GetHurtType() / 10
+    if not battleType:
+        # 没有配置,默认物理攻击
+        return ChConfig.ghtPhy
+    return battleType
+
 def GetSkillBattleType(curSkill):
     if not curSkill:
         return ChConfig.Def_BattleRelationType_Comm
     #0通哟  1 PVP类型  2PVE类型  
-    return curSkill.GetHurtType()
+    return curSkill.GetHurtType() % 10
 
 ## 检查技能是否为被动技能, 用于控制不可释放技能
 def isPassiveSkill(curSkill):
@@ -2245,21 +2251,47 @@
     #获得技能的计算参数值
     if cureType == ChConfig.Def_Cure_PHY:
         # 根据敏捷,力量差值及效果系数计算恢复比例
-        skillPer = max(0, userObj.GetPHY() - userObj.GetSTR()) / float(curSkill.GetEffect(0).GetEffectValue(0))
+        skillPer = max(0, userObj.GetPHY() - userObj.GetSTR()) / float(curSkill.GetEffect(0).GetEffectValue(0)) * ChConfig.Def_MaxRateValue
         GameWorld.DebugLog("英勇复苏: 敏=%s,力=%s,skillPer=%s" % (userObj.GetPHY(), userObj.GetSTR(), skillPer))
     else: 
-        skillPer = curSkill.GetEffect(0).GetEffectValue(0) / float(ChConfig.Def_MaxRateValue)
+        skillPer = curSkill.GetEffect(0).GetEffectValue(0)
     #技能附加
     skillValue = curSkill.GetEffect(0).GetEffectValue(1)
     
-    skillPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(userObj, None, curSkill, ChConfig.TriggerType_AddHP)/float(ChConfig.Def_MaxRateValue)
+    skillPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(userObj, None, curSkill, ChConfig.TriggerType_AddHP)
+    
+    # 回合制
+    curePer = 0 # 治疗加成、强化灵兽
+    cureDefPer = 0 # 敌方的弱化治疗、弱化灵兽
+    if userObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnFightTimeline):
+        isPetNPC = PetControl.IsPetNPC(userObj)
+        enemyObj = None
+        
+        if isPetNPC:
+            petOwner = PetControl.GetPetNPCOwner(userObj)
+            enemyObj = TurnAttack.GetEnemyObj(petOwner)
+            
+            curePer += GameObj.GetCurePer(petOwner)
+            curePer += GameObj.GetPetStrengthenPer(petOwner) # 强化灵兽
+        else:
+            enemyObj = TurnAttack.GetEnemyObj(userObj)
+            
+            curePer += GameObj.GetCurePer(userObj)
+        
+        if enemyObj:
+            cureDefPer += GameObj.GetCureDefPer(enemyObj)
+            if isPetNPC:
+                cureDefPer += GameObj.GetPetWeakenPer(enemyObj) # 弱化灵兽
+                
+    skillPer += (curePer - cureDefPer) # 可能负值
     #公式计算治疗值 
-    cureHP = int((cureBaseValue * skillPer + skillValue + addExValue) * curePercent)
+    cureHP = int((cureBaseValue * skillPer / float(ChConfig.Def_MaxRateValue) + skillValue + addExValue) * curePercent)
     if not largeNum:
         cureHP = min(cureHP, ChConfig.Def_UpperLimit_DWord)
+    cureHP = max(1, cureHP) # 保底1点
     
-    #GameWorld.DebugLog("获取治疗值(%s):cureType=%s,cureBaseValue=%s,skillPer=%s,skillValue=%s" 
-    #                   % (cureHP, cureType, cureBaseValue, skillPer, skillValue))
+    #GameWorld.DebugLog("获取治疗值(%s):skillID=%s,cureType=%s,cureBaseValue=%s,skillPer=%s,skillValue=%s,curePer=%s,cureDefPer=%s" 
+    #                   % (cureHP, curSkill.GetSkillID(), cureType, cureBaseValue, skillPer, skillValue, curePer, cureDefPer))
     return cureHP
 
 

--
Gitblit v1.8.0