From 0975094f2661551929ce86ad4951229bfc887ee6 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 28 三月 2024 18:17:39 +0800
Subject: [PATCH] 10019 【砍树】回合战斗(增加强化暴伤、弱化暴伤属性;增加1308通用持续性回血buff逻辑,支持单次回血超20E;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1308.py |   64 ++++++++++++++++++++++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py                  |    2 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py                      |    8 +++-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py                    |    2 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py                |    6 ++-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py                          |   17 ++++++++
 ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py                                           |    8 +++-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py  |    2 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                         |    8 +++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py       |    2 +
 10 files changed, 112 insertions(+), 7 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index d0c8612..6d43612 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -703,6 +703,8 @@
 Def_Effect_CureDefPer = 216 # 弱化治疗
 Def_Effect_PetStrengthenPer = 217 # 强化灵兽
 Def_Effect_PetWeakenPer = 218 # 弱化灵兽
+Def_Effect_SuperHitHurtPer = 219 # 强化暴伤
+Def_Effect_SuperHitHurtDefPer = 220 # 弱化暴伤
 
 #增加%d物理伤害值,其中a值为伤害值
 Def_Effect_AddAtk = 1005
@@ -1079,9 +1081,11 @@
 CDBPlayerRefresh_Xiantao, # 仙桃  254
 CDBPlayerRefresh_CurePer, # 强化治疗 255
 CDBPlayerRefresh_CureDefPer, # 弱化治疗 256
-CDBPlayerRefresh_PetStrengthenPer, # 弱化灵兽 257
+CDBPlayerRefresh_PetStrengthenPer, # 强化灵兽 257
 CDBPlayerRefresh_PetWeakenPer, # 弱化灵兽 258
-) = range(146, 259)
+CDBPlayerRefresh_SuperHitHurtPer, # 强化暴伤 259
+CDBPlayerRefresh_SuperHitHurtDefPer, # 弱化暴伤 260
+) = range(146, 261)
 
 TYPE_Price_Gold_Paper_Money = 5    # 金钱类型,(先用礼券,再用金子)
 TYPE_Price_Family_Contribution = 6 # 战盟贡献度(活跃度转换得来)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
index 123ca00..cea0fbf 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
@@ -2155,6 +2155,8 @@
     
     # 重击和暴击互斥,并且使用同一个参数
     isSuperHit, aSuperHit, dSuperHitReduce = hurtTypeResultDict[ChConfig.Def_HurtType_ThumpHit] 
+    aSuperHitHurtPer = GameObj.GetSuperHitHurtPer(atkObj)
+    dSuperHitHurtDefPer = GameObj.GetSuperHitHurtPer(defObj)
     if not isSuperHit:
         isSuperHit, aSuperHit, dSuperHitReduce = hurtTypeResultDict[ChConfig.Def_HurtType_SuperHit] 
         
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
index 935554f..49e36b9 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
@@ -581,9 +581,11 @@
                           GameObj.GetAtkBackRate(gameObj), GameObj.GetAtkBackDefRate(gameObj),
                           GameObj.GetSuckHPPer(gameObj), GameObj.GetSuckHPDefPer(gameObj),
                           ))
-    GameWorld.DebugLog("    XP=%s/%s,强疗=%s,弱疗=%s,强灵=%s,弱灵=%s" 
+    GameWorld.DebugLog("    XP=%s/%s,强疗=%s,弱疗=%s,强灵=%s,弱灵=%s,强暴=%s,弱暴=%s" 
                        % (GameObj.GetXP(gameObj), GameObj.GetMaxXP(gameObj), GameObj.GetCurePer(gameObj), GameObj.GetCureDefPer(gameObj), 
-                          GameObj.GetPetStrengthenPer(gameObj), GameObj.GetPetWeakenPer(gameObj)))
+                          GameObj.GetPetStrengthenPer(gameObj), GameObj.GetPetWeakenPer(gameObj),
+                          GameObj.GetSuperHitHurtPer(gameObj), GameObj.GetSuperHitHurtDefPer(gameObj),
+                          ))
     return
 
 def TurnFightObjPerTurnStart(gameObj, tagObj, turnNum, tick):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 5feca62..f0fb001 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -79,7 +79,7 @@
 Def_BuffValue_Count = 3     # buff记录的value个数
 
 #游戏对象属性--------------------------------------------
-Def_Calc_AllAttrType_MAX = 174
+Def_Calc_AllAttrType_MAX = 176
 #基本属性BUFF计算,顺序与 ObjProperty_AttrByIndex 对应,同时也为buff效果ID同步通知策划
 TYPE_Calc_AttrList = (
 TYPE_Calc_Metal,                        # 金 1
@@ -267,6 +267,8 @@
 TYPE_Calc_CureDefPer,                    # 弱化对方治疗效果
 TYPE_Calc_PetStrengthenPer,              # 强化灵兽
 TYPE_Calc_PetWeakenPer,                  # 弱化灵兽
+TYPE_Calc_SuperHitHurtPer,               # 强化暴伤
+TYPE_Calc_SuperHitHurtDefPer,            # 弱化暴伤 175
 ) = range(1, Def_Calc_AllAttrType_MAX)
 
 ## 支持大数值属性,超过20E
@@ -4554,6 +4556,8 @@
 AttrName_CureDefPer = "CureDefPer"  # 弱化治疗
 AttrName_PetStrengthenPer = "PetStrengthenPer"  # 强化灵兽
 AttrName_PetWeakenPer = "PetWeakenPer"  # 弱化灵兽
+AttrName_SuperHitHurtPer = "SuperHitHurtPer"  # 强化暴伤
+AttrName_SuperHitHurtDefPer = "SuperHitHurtDefPer"  # 弱化暴伤
 
 #物品效果(ID或指定类型)对应的属性计算信息 {效果(ID/指定类型):[[属性索引, ...], 是否基础属性,(非)线性]}
 #对应 Def_Calc_AllAttrType_MAX
@@ -4756,6 +4760,8 @@
     ShareDefine.Def_Effect_CureDefPer:[[TYPE_Calc_CureDefPer], False, TYPE_Linear],
     ShareDefine.Def_Effect_PetStrengthenPer:[[TYPE_Calc_PetStrengthenPer], False, TYPE_Linear],
     ShareDefine.Def_Effect_PetWeakenPer:[[TYPE_Calc_PetWeakenPer], False, TYPE_Linear],
+    ShareDefine.Def_Effect_SuperHitHurtPer:[[TYPE_Calc_SuperHitHurtPer], False, TYPE_Linear],
+    ShareDefine.Def_Effect_SuperHitHurtDefPer:[[TYPE_Calc_SuperHitHurtDefPer], False, TYPE_Linear],
     
     #战斗非线性
     ShareDefine.Def_Effect_SuperHitPer:[[TYPE_Calc_SuperHit], False, TYPE_NoLinear],
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py
index 7709a2d..afe72f7 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameObj.py
@@ -235,6 +235,8 @@
     SetPetStrengthenPer(gameObj, 0)
     SetPetWeakenPer(gameObj, 0)
     SetDamageBackRate(gameObj, 0)
+    SetSuperHitHurtPer(gameObj, 0)
+    SetSuperHitHurtDefPer(gameObj, 0)
     return
 
 def GetPetDamPer(gameObj): return gameObj.GetDictByKey(ChConfig.Def_PlayerKey_AttrPetDamPer)
@@ -423,6 +425,21 @@
         PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_PetWeakenPer, value)
     return
 
+def GetSuperHitHurtPer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_SuperHitHurtPer)
+def SetSuperHitHurtPer(gameObj, value):
+    ## 强化暴伤
+    gameObj.SetDict(ChConfig.AttrName_SuperHitHurtPer, value)
+    if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
+        PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_SuperHitHurtPer, value)
+    return
+def GetSuperHitHurtDefPer(gameObj): return gameObj.GetDictByKey(ChConfig.AttrName_SuperHitHurtDefPer)
+def SetSuperHitHurtDefPer(gameObj, value):
+    ## 弱化暴伤
+    gameObj.SetDict(ChConfig.AttrName_SuperHitHurtDefPer, value)
+    if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
+        PlayerControl.SendPropertyRefresh(gameObj, ShareDefine.CDBPlayerRefresh_SuperHitHurtDefPer, value)
+    return
+
 def GetDamageBackRate(gameObj):
     if gameObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
         return gameObj.GetDamageBackRate()
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
index d9a28d1..05fe156 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
@@ -4203,6 +4203,8 @@
         GameObj.SetCureDefPer(curNPC, PropDict.get("CureDefPer", 0))
         GameObj.SetPetStrengthenPer(curNPC, PropDict.get("PetStrengthenPer", 0))
         GameObj.SetPetWeakenPer(curNPC, PropDict.get("PetWeakenPer", 0))
+        GameObj.SetSuperHitHurtPer(curNPC, PropDict.get("SuperHitHurtPer", 0))
+        GameObj.SetSuperHitHurtDefPer(curNPC, PropDict.get("SuperHitHurtDefPer", 0))
         GameObj.SetFinalHurtPer(curNPC, PropDict.get("FinalHurtPer", 0))
         GameObj.SetFinalHurtReducePer(curNPC, PropDict.get("FinalHurtReducePer", 0))
         
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py
index a403547..2fc0bf9 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py
@@ -233,6 +233,8 @@
     curPlayerPropDict["CureDefPer"] = GameObj.GetCureDefPer(curPlayer) # 弱化治疗
     curPlayerPropDict["PetStrengthenPer"] = GameObj.GetPetStrengthenPer(curPlayer) # 强化灵兽
     curPlayerPropDict["PetWeakenPer"] = GameObj.GetPetWeakenPer(curPlayer) # 弱化灵兽
+    curPlayerPropDict["SuperHitHurtPer"] = GameObj.GetSuperHitHurtPer(curPlayer) # 强化暴伤
+    curPlayerPropDict["SuperHitHurtDefPer"] = GameObj.GetSuperHitHurtDefPer(curPlayer) # 弱化暴伤
     
     #-----------
     #扩展属性缓存
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 7001a75..3944e17 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -703,6 +703,8 @@
 Def_Effect_CureDefPer = 216 # 弱化治疗
 Def_Effect_PetStrengthenPer = 217 # 强化灵兽
 Def_Effect_PetWeakenPer = 218 # 弱化灵兽
+Def_Effect_SuperHitHurtPer = 219 # 强化暴伤
+Def_Effect_SuperHitHurtDefPer = 220 # 弱化暴伤
 
 #增加%d物理伤害值,其中a值为伤害值
 Def_Effect_AddAtk = 1005
@@ -1079,9 +1081,11 @@
 CDBPlayerRefresh_Xiantao, # 仙桃  254
 CDBPlayerRefresh_CurePer, # 强化治疗 255
 CDBPlayerRefresh_CureDefPer, # 弱化治疗 256
-CDBPlayerRefresh_PetStrengthenPer, # 弱化灵兽 257
+CDBPlayerRefresh_PetStrengthenPer, # 强化灵兽 257
 CDBPlayerRefresh_PetWeakenPer, # 弱化灵兽 258
-) = range(146, 259)
+CDBPlayerRefresh_SuperHitHurtPer, # 强化暴伤 259
+CDBPlayerRefresh_SuperHitHurtDefPer, # 弱化暴伤 260
+) = range(146, 261)
 
 TYPE_Price_Gold_Paper_Money = 5    # 金钱类型,(先用礼券,再用金子)
 TYPE_Price_Family_Contribution = 6 # 战盟贡献度(活跃度转换得来)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py
index 09d32bc..4545fe2 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/EffGetSet.py
@@ -213,6 +213,8 @@
    [lambda curObj:GameObj.GetCureDefPer(curObj), lambda curObj, value:GameObj.SetCureDefPer(curObj, value), ShareDefine.CDBPlayerRefresh_CureDefPer, 1, 0],          # 弱化对方治疗
    [lambda curObj:GameObj.GetPetStrengthenPer(curObj), lambda curObj, value:GameObj.SetPetStrengthenPer(curObj, value), ShareDefine.CDBPlayerRefresh_PetStrengthenPer, 1, 0],          # 强化灵兽
    [lambda curObj:GameObj.GetPetWeakenPer(curObj), lambda curObj, value:GameObj.SetPetWeakenPer(curObj, value), ShareDefine.CDBPlayerRefresh_PetWeakenPer, 1, 0],          # 弱化灵兽
+   [lambda curObj:GameObj.GetSuperHitHurtPer(curObj), lambda curObj, value:GameObj.SetSuperHitHurtPer(curObj, value), ShareDefine.CDBPlayerRefresh_SuperHitHurtPer, 1, 0],          # 强化暴伤
+   [lambda curObj:GameObj.GetSuperHitHurtDefPer(curObj), lambda curObj, value:GameObj.SetSuperHitHurtDefPer(curObj, value), ShareDefine.CDBPlayerRefresh_SuperHitHurtDefPer, 1, 0],          # 弱化暴伤
 ]
 
 ## 通过索引获得属性值
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1308.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1308.py
new file mode 100644
index 0000000..e2d4daf
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1308.py
@@ -0,0 +1,64 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Skill.GameBuffs.BuffProcess_1308
+#
+# @todo:持继回血触发的buff逻辑实现
+# @author hxp
+# @date 2024-03-28
+# @version 1.0
+#
+# 详细描述: 持继回血触发的buff逻辑实现
+# 效果1:    A值-百分比;B值-附加值;C值-恢复类型(同释放方式8的恢复类型)
+# 效果2:    一般搭配效果ID 9999 处理间隔使用
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2024-03-28 18:30"""
+#-------------------------------------------------------------------------------
+
+import ChConfig
+import GameWorld
+import SkillCommon
+import SkillShell
+import GameObj
+
+def ProcessBuff(defender, curBuff, curEffect, processBuffTick, tick):
+    if curBuff.GetValue2() == 0:
+        return
+    curBuff.SetValue2(max(curBuff.GetValue2() - 1, 0))
+    
+    curBuffSkillID = curBuff.GetSkill().GetSkillTypeID()
+    singleAddHP = curBuff.GetValue() + curBuff.GetValue1() * ChConfig.Def_PerPointValue
+    
+    SkillCommon.SkillAddHP(defender, curBuffSkillID, singleAddHP)
+    return
+
+# 消失前如有未执行次数则补上
+#  @param defender 承受者
+def OnBuffDisappear(defender, curSkill, curBuff, curEffect, tick):
+    count = curBuff.GetValue2()
+    #无剩余
+    if count <= 0:
+        return
+    
+    #已经死亡不触发
+    if GameObj.GetHP(defender) <= 0:
+        return
+    
+    singleAddHP = curBuff.GetValue() + curBuff.GetValue1() * ChConfig.Def_PerPointValue
+    SkillCommon.SkillAddHP(defender, curSkill.GetSkillTypeID(), singleAddHP * count)
+    return
+
+def CalcBuffValue(attacker, defender, curSkill, changeBuffValueDict):
+    curEffect = curSkill.GetEffect(0)
+    cureType = curEffect.GetEffectValue(2)
+    cureHP = SkillCommon.GetCureHP(attacker, defender, curSkill, cureType, largeNum=True) # 支持超20E
+    
+    buffTime = curSkill.GetLastTime() 
+    buffTick = SkillShell.GetProcessBuffTick(curSkill, defender)
+    count = int(buffTime / buffTick)
+    
+    GameWorld.DebugLog("BuffProcess_1308.CalcBuffValue: cureHP=%s,count=%s,atkID=%s,defID=%s" % (cureHP, count, attacker.GetID(), defender.GetID()))
+    return [cureHP % ChConfig.Def_PerPointValue, cureHP / ChConfig.Def_PerPointValue, count]
+

--
Gitblit v1.8.0