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