From ec9f56f7fa1815c1fe32e016a302c00e6d7ad513 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 16 十二月 2025 19:19:08 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(孙策全部技能; 增加技能类型11-额外攻击;增加效果5505 6026 6027; 优化5504效果支持配置多个状态;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5504.py |   15 +++-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5505.py |   60 ++++++++++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5500.py |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6027.py |   19 ++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6026.py |   36 ++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py                    |    4 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py                      |   10 ++-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                             |    9 ++-
 8 files changed, 140 insertions(+), 15 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 9a1db09..4cf184c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -1458,7 +1458,7 @@
    Def_SkillType_Revive       ,  #复活     8
    Def_SkillType_Increment    ,  #增值技能(不可清除)9  
    Def_SkillType_Halo         ,  #光环技能  10
-   Def_SkillType_Equip        ,  #装备技能  11
+   Def_SkillType_AtkEx        ,  #额外攻击  (一般用于额外造成的伤害,区分直接攻击)11
    Def_SkillType_Area         ,  #场景技能(buff)  12
    Def_SkillType_Summon       ,  #召唤  13
    Def_SkillType_Action       ,  #影响行为BUFF 14
@@ -1492,7 +1492,7 @@
                        #Def_SkillType_Revive     : IPY_GameWorld.bfIncBuff,  #复活     8
                        Def_SkillType_Increment  : IPY_GameWorld.bfIncBuff,  #增值技能(不可清除)9
                        Def_SkillType_Aura       : IPY_GameWorld.bfAura   ,  #光环技能  10
-                       Def_SkillType_Equip      : IPY_GameWorld.bfEquipBuff,#装备技能  11
+                       #Def_SkillType_Equip      : IPY_GameWorld.bfEquipBuff,#装备技能  11
                        Def_SkillType_Area       : IPY_GameWorld.bfMapBuff , #场景技能(buff)  12
                        Def_SkillType_Action     : IPY_GameWorld.bfActionBuff , #影响行为BUFF 14
                        
@@ -4008,7 +4008,8 @@
 TriggerWay_WhenDie, # 死亡时(自己) 43
 TriggerWay_EnemyAction, # 敌方行动后 44
 TriggerWay_FriendAction, # 友方行动后(包含自己) 45
-) = range(1, 1 + 45)
+TriggerWay_HurtTag, # 对目标造成伤害时 46
+) = range(1, 1 + 46)
 
 # 不加载的被动触发方式,一般用于本技能固定触发逻辑用的
 TriggerWayNoLoadList = [TriggerWay_CurSkillEff, TriggerWay_CurSkillEffLst]
@@ -4047,6 +4048,8 @@
 PassiveEff_ChangeHurtTypeByBuff = 6023 # 变更本次伤害类型(可验证由xx状态buff触发的)
 PassiveEff_ReduceLayer5023 = 6024 # 减少5023效果所需的buff状态层数
 PassiveEff_AddCureMulti = 6025 # 提升治疗技能最终治疗效果(根据身上buff状态层数)
+PassiveEff_AddCheckPer5505 = 6026 # 增减5505效果验证生命百分比(根据目标身上buff状态层数)
+PassiveEff_AddHurtAtkPerMax = 6027 # 增加技能最大攻击万分比限制
 
 # 被动效果ID有触发值时就返回的
 PassiveEffHappenValueList = [PassiveEff_ChangeHurtType, PassiveEff_ImmuneControlBuff, PassiveEff_MustSuperHit, PassiveEff_SkillInvalid, 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5050.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5500.py
similarity index 96%
rename from ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5050.py
rename to ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5500.py
index 2f83ed0..e3c2d31 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5050.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5500.py
@@ -2,7 +2,7 @@
 # -*- coding: GBK -*-
 #-------------------------------------------------------------------------------
 #
-##@package Skill.PassiveTrigger.PassiveEff_5050
+##@package Skill.PassiveTrigger.PassiveEff_5500
 #
 # @todo:触发释放技能(按累计能量达到时释放)
 # @author hxp
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5504.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5504.py
index 33dede7..69e08b3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5504.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5504.py
@@ -17,17 +17,22 @@
 
 import TurnSkill
 import IpyGameDataPY
-import GameWorld
 
 def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs):
     skillID = curEffect.GetEffectValue(0) # 技能ID,为0时释放本技能
-    checkState = curEffect.GetEffectValue(1) # 可附加验证目标处于xx状态
+    checkStateList = curEffect.GetEffectValue(1) # 可附加验证目标处于xx状态
     checkOwner = curEffect.GetEffectValue(2) # 是否只限归属自己的状态buff
     
-    if checkState:
+    if checkStateList:
         ownerID = batObj.GetID() if checkOwner else 0
-        if not tagObj.GetBuffManager().FindBuffByState(checkState, ownerID):
-            GameWorld.DebugLogEx("目标不在状态下不触发: tagID=%s,checkState=%s,ownerID=%s", tagObj.GetID(), checkState, ownerID)
+        inState = False
+        tagBuffMgr = tagObj.GetBuffManager()
+        for checkState in checkStateList:
+            if tagBuffMgr.FindBuffByState(checkState, ownerID):
+                inState = True
+                break
+        if not inState:
+            #GameWorld.DebugLogEx("目标不在状态下不触发: tagID=%s,checkStateList=%s,ownerID=%s", tagObj.GetID(), checkStateList, ownerID)
             return
         
     if not skillID:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5505.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5505.py
new file mode 100644
index 0000000..c9cdba0
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5505.py
@@ -0,0 +1,60 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Skill.PassiveTrigger.PassiveEff_5505
+#
+# @todo:触发释放技能(验证目标生命)
+# @author hxp
+# @date 2025-12-16
+# @version 1.0
+#
+# 详细描述: 触发释放技能(验证目标生命)
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-12-16 19:30"""
+#-------------------------------------------------------------------------------
+
+import TurnSkill
+import TurnPassive
+import IpyGameDataPY
+import GameWorld
+import ChConfig
+
+def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs):
+    skillID = curEffect.GetEffectValue(0) # 技能ID,为0时释放本技能
+    checkTagHPInfo = curEffect.GetEffectValue(1) # 可附加验证目标生命值[计算方式, 百分比]
+    if checkTagHPInfo:
+        checkType, checkHPPer = checkTagHPInfo
+        tagHP = tagObj.GetHP()
+        tagHPMax = tagObj.GetMaxHP()
+        nowPer = tagHP / float(tagHPMax) * 100
+        
+        effSkillTypeID = effSkill.GetSkillTypeID()
+        checkHPPer += TurnPassive.GetTriggerEffectValue(turnFight, batObj, tagObj, ChConfig.PassiveEff_AddCheckPer5505, connSkillTypeID=effSkillTypeID, **kwargs)
+        
+        GameWorld.DebugLogEx("5505验证目标生命! tagHP=%s/%s,nowPer=%s,checkHPPer=%s,checkType=%s,effSkillTypeID=%s", 
+                             tagHP, tagHPMax, nowPer, checkHPPer, checkType, effSkillTypeID)
+        
+        # 小于等于
+        if checkType == 0:
+            if nowPer > checkHPPer:
+                return
+        # 大于等于
+        else:
+            if nowPer < checkHPPer:
+                return
+            
+    if not skillID:
+        passiveSkill = effSkill
+    else:
+        passiveSkill = IpyGameDataPY.GetIpyGameData("Skill", skillID)
+    if not passiveSkill:
+        return
+    effectID = curEffect.GetEffectID()
+    effSkillID = effSkill.GetSkillID()
+    return TurnSkill.OnUsePassiveSkill(turnFight, batObj, tagObj, passiveSkill, connSkill, effSkillID, effectID, connBuff, **kwargs)
+
+def DoBuffEffectLogic(turnFight, batObj, tagObj, effBuff, curEffect, connSkill, connBuff, **kwargs):
+    effSkill = effBuff.GetSkillData().GetIpyData()
+    return DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6026.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6026.py
new file mode 100644
index 0000000..90d61d1
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6026.py
@@ -0,0 +1,36 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Skill.PassiveTrigger.PassiveEff_6026
+#
+# @todo:增减5505效果验证生命百分比(根据目标身上buff状态层数)
+# @author hxp
+# @date 2025-12-16
+# @version 1.0
+#
+# 详细描述: 增减5505效果验证生命百分比(根据目标身上buff状态层数)
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-12-16 19:30"""
+#-------------------------------------------------------------------------------
+
+def GetHappenValue(attacker, defender, curEffect, effSkill, effBuff, connSkill, **skillkwargs):
+    buffStateList = curEffect.GetEffectValue(0) # 目标buff [状态1, 状态2, ...]
+    addPer = curEffect.GetEffectValue(1) # 每层变化百分比(不需要验证状态则为固定值)
+    calcType = curEffect.GetEffectValue(2) # 变化是增还是减: 1-增;2-减
+    
+    if buffStateList:
+        layerTotal = 0
+        buffMgr = defender.GetBuffManager()
+        for buffState in buffStateList:
+            for buff in buffMgr.FindBuffListByState(buffState):
+                layerTotal += buff.GetLayer()
+        addTotal = layerTotal * addPer
+    else:
+        addTotal = addPer
+        
+    if calcType == 2:
+        addTotal = -addTotal
+        
+    return addTotal
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6027.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6027.py
new file mode 100644
index 0000000..fc4196d
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6027.py
@@ -0,0 +1,19 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Skill.PassiveTrigger.PassiveEff_6027
+#
+# @todo:增加技能最大攻击万分比限制
+# @author hxp
+# @date 2025-12-16
+# @version 1.0
+#
+# 详细描述: 增加技能最大攻击万分比限制
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-12-16 19:30"""
+#-------------------------------------------------------------------------------
+
+def GetHappenValue(attacker, defender, curEffect, effSkill, effBuff, connSkill, **skillkwargs):
+    return curEffect.GetEffectValue(0)
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
index 2aa5c13..dacd25b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
@@ -82,7 +82,7 @@
     if not effSkill:
         return
     
-    kwargs["triggerWay"] = triggerWay
+    kwargs["byTriggerWay"] = triggerWay
     for effID in effIDList:
         curEffect = effSkill.GetEffectByID(effID, triggerWay)
         if not curEffect:
@@ -111,7 +111,7 @@
         return
     skillData = effBuff.GetSkillData()
     
-    kwargs["triggerWay"] = triggerWay
+    kwargs["byTriggerWay"] = triggerWay
     for effID in effIDList:
         curEffect = skillData.GetEffectByID(effID, triggerWay)
         if not curEffect:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
index c77146a..669af57 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -59,13 +59,13 @@
     if not skillID:
         return
     
-    triggerWay = kwargs["triggerWay"] if "triggerWay" in kwargs else 0
+    byTriggerWay = kwargs["byTriggerWay"] if "byTriggerWay" in kwargs else 0 # 不使用参数名 triggerWay, 防止传递过程中参数混乱
     if not curBatObj.IsAlive():
         if useSkill.GetSkillType() == ChConfig.Def_SkillType_Revive and useSkill.GetTagAim() == ChConfig.SkillTagAim_Self:
             GameWorld.DebugLogEx("死亡时使用复活自己的技能! skillID=%s", skillID)
         else:
-            if triggerWay in ChConfig.DeadCanTriggerWayList:
-                GameWorld.DebugLogEx("死亡可触发的方式触发技能可释放! skillID=%s,triggerWay=%s", skillID, triggerWay)
+            if byTriggerWay in ChConfig.DeadCanTriggerWayList:
+                GameWorld.DebugLogEx("死亡可触发的方式触发技能可释放! skillID=%s,byTriggerWay=%s", skillID, byTriggerWay)
             elif batType == ChConfig.TurnBattleType_Enhance:
                 GameWorld.DebugLogEx("死亡状态额外技能不限制,主技能能放的话也就能放! skillID=%s", skillID)                
             else:
@@ -150,7 +150,7 @@
     useSkill.SetBatType(batType)
     useSkill.SetBySkill(bySkill)
     useSkill.SetByBuff(byBuff)
-    useSkill.SetByTriggerWay(triggerWay)
+    useSkill.SetByTriggerWay(byTriggerWay)
     
     isTurnNormalSkill = SkillCommon.isTurnNormalSkill(useSkill)
     if isTurnNormalSkill:
@@ -1463,6 +1463,7 @@
         # 掉血时
         if tagID in beHurtObjIDList:
             TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeHurt, curObj, connSkill=useSkill)
+            #TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_HurtTag, tagObj, connSkill=useSkill) 暂时用不到先屏蔽
             
         #  受到任意效果时(除直接攻击外的任意效果,如buff、dot、治疗、额外怒技)
         if not isAttackDirect:
@@ -2045,6 +2046,7 @@
         
     hurtAtkPerMax = curSkill.GetHurtAtkPerMax() # 最大万分比,限制最终伤害不超过攻击力万分率
     if hurtAtkPerMax:
+        hurtAtkPerMax += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddHurtAtkPerMax, curSkill)
         aAtk = atkObj.GetAtk()
         hurtValueMax = aAtk * hurtAtkPerMax / 10000.0
         hurtValue = min(hurtValue, hurtValueMax)

--
Gitblit v1.8.0