From d69d0cd898405aa741ae65ad4458fe81afef9f32 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 18 十二月 2025 17:26:38 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(庞统所有技能;目标范围增加8-继承主技能友军;目标细分增加9-仅流血目标;增加触发方式48 49 50;增效效果5506;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5501.py | 15 +++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5506.py | 71 +++++++++++++++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py | 45 ++++++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 11 ++-
5 files changed, 138 insertions(+), 6 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
index ae30896..0fc0d02 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
@@ -723,7 +723,7 @@
def GetLayerMax(self): return self._skillData.GetLayerMax()
def GetBuffRepeat(self): return self._skillData.GetBuffRepeat() # Buff叠加规则
def GetDispersedLimit(self): return self._skillData.GetDispersedLimit() # 驱散限制
- def GetBuffRetain(self): return self._ipyData.GetBuffRetain()
+ def GetBuffRetain(self): return self._skillData.GetBuffRetain()
def GetFightPower(self): return self._skillData.GetFightPower()
## ---------------------------------- 非技能表内容 ----------------------------------
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index e737e03..118e099 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -1347,7 +1347,8 @@
SkillTagAim_Self, # 自己 5
SkillTagAim_MainSkill, # 继承主技能目标 6
SkillTagAim_MainSkillEx, # 继承主技能目标一次性处理 7
-) = range(8)
+SkillTagAim_MainSkillFriend, # 继承主技能友军 8
+) = range(9)
# 技能目标 - 细分
(
@@ -1360,7 +1361,8 @@
SkillTagAffect_Burn, # 灼烧/玄火目标优先 6
SkillTagAffect_PoisonCure, # 仅焚血(毒奶)目标 7
SkillTagAffect_DamShield, # 承伤盾目标优先 8
-) = range(9)
+SkillTagAffect_Bleeding, # 仅流血目标 9
+) = range(10)
#技能施法目标
Def_UseSkillAim_Type = 3
@@ -4010,7 +4012,10 @@
TriggerWay_FriendAction, # 友方行动后(包含自己) 45
TriggerWay_HurtTag, # 对目标造成伤害时 46
TriggerWay_BeControlledHard, # 受控时(硬控) 47
-) = range(1, 1 + 47)
+TriggerWay_FriendCombo, # 友军连击时(包含自己) 48
+TriggerWay_FriendPursue, # 友军追击时(包含自己) 49
+TriggerWay_FriendAttackOverDirectOne, # 友方使用技能后(多目标仅触发一次,包含自己) 50
+) = range(1, 1 + 50)
# 不加载的被动触发方式,一般用于本技能固定触发逻辑用的
TriggerWayNoLoadList = [TriggerWay_CurSkillEff, TriggerWay_CurSkillEffLst]
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5501.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5501.py
index 61d768a..478798a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5501.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5501.py
@@ -21,6 +21,21 @@
def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs):
skillID = curEffect.GetEffectValue(0) # 技能ID,为0时释放本技能
setLayerCnt = curEffect.GetEffectValue(1) # 指定buff层级
+ byTagStateList = curEffect.GetEffectValue(2) # 或根据目标xx状态 [状态1, 状态2, ...]总层级
+ if byTagStateList:
+ layerTotal = 0
+ tagBuffMgr = tagObj.GetBuffManager()
+ for index in range(tagBuffMgr.GetBuffCount()):
+ buff = tagBuffMgr.GetBuffByIndex(index)
+ skillData = buff.GetSkillData()
+ if skillData.GetCurBuffState() not in byTagStateList:
+ continue
+ layerTotal += buff.GetLayer()
+ setLayerCnt = layerTotal
+
+ if setLayerCnt <= 0:
+ return
+
if not skillID:
passiveSkill = effSkill
else:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5506.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5506.py
new file mode 100644
index 0000000..f6fe95d
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5506.py
@@ -0,0 +1,71 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Skill.PassiveTrigger.PassiveEff_5506
+#
+# @todo:触发释放技能(验证目标状态层级)
+# @author hxp
+# @date 2025-12-18
+# @version 1.0
+#
+# 详细描述: 触发释放技能(验证目标状态层级)
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-12-18 17:30"""
+#-------------------------------------------------------------------------------
+
+import TurnSkill
+import GameWorld
+import IpyGameDataPY
+import BattleObj
+import TurnBuff
+
+def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs):
+ if not tagObj:
+ return
+
+ skillID = curEffect.GetEffectValue(0) # 技能ID,为0时释放本技能
+ checkStateList = curEffect.GetEffectValue(1) # 可附加验证目标处于xx状态
+ needLayers = curEffect.GetEffectValue(2) # 达到x层时才触发
+ isDelBuff = curEffect.GetEffectValue(3) # 层数不足时是否删除释放技能对应buff
+
+ layerTotal = 0
+ tagBuffMgr = tagObj.GetBuffManager()
+ for index in range(tagBuffMgr.GetBuffCount()):
+ buff = tagBuffMgr.GetBuffByIndex(index)
+ skillData = buff.GetSkillData()
+ if skillData.GetCurBuffState() not in checkStateList:
+ continue
+ layerTotal += buff.GetLayer()
+
+ if layerTotal < needLayers:
+ GameWorld.DebugLogEx("buff状态总层数不足不触发5506! checkStateList=%s,layerTotal=%s < %s,isDelBuff=%s", checkStateList, layerTotal, needLayers, isDelBuff)
+ if isDelBuff:
+ delBuffSkillID = skillID if skillID else effSkill.GetSkillID()
+ if not delBuffSkillID:
+ return
+ buff = tagBuffMgr.FindBuffBySkillID(delBuffSkillID)
+ if buff:
+ TurnBuff.DoBuffDel(turnFight, tagObj, buff, connSkill)
+ 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):
+ ownerID = effBuff.GetOwnerID()
+ if not ownerID:
+ return
+ buffOwner = BattleObj.GetBatObjMgr().getBatObj(ownerID)
+ if not buffOwner:
+ return
+ effSkill = effBuff.GetSkillData().GetIpyData()
+ return DoSkillEffectLogic(turnFight, buffOwner, batObj, effSkill, curEffect, connSkill, connBuff, **kwargs)
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 912d3cb..b67c3c9 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -443,6 +443,14 @@
for aimObj in aimObjList[::-1]:
if not aimObj.CheckInState(ChConfig.BatObjState_PoisonCure):
aimObjList.remove(aimObj)
+
+ # 仅流血目标
+ elif tagAffect == ChConfig.SkillTagAffect_Bleeding:
+ atkBackTagFrist = False
+ for aimObj in aimObjList[::-1]:
+ if not aimObj.CheckInState(ChConfig.BatObjState_Bleeding):
+ aimObjList.remove(aimObj)
+
else:
# 范围目标超过个数,则随机取
if tagCount and len(aimObjList) > tagCount:
@@ -1282,13 +1290,14 @@
return useSkill
return
-def DoBeAttackResult(turnFight, curObj, useSkill, curBuff=None):
+def DoBeAttackResult(turnFight, curObj, useSkill, timeBuff=None):
'''被攻击结果
@param curObj: 施法方或buff归属方
+ @param timeBuff: 持续结算的buff,如持续攻击、持续治疗等
'''
#curID = curObj.GetID()
- isUseSkill = False if curBuff else True # buff的视为持续性的,否则为直接使用技能的攻击结果
+ isUseSkill = False if timeBuff else True # buff的视为持续性的,否则为直接使用技能的攻击结果
isTurnNormalSkill = SkillCommon.isTurnNormalSkill(useSkill)
isAngerSkill = SkillCommon.isAngerSkill(useSkill)
@@ -1456,6 +1465,7 @@
triggerOne = False
batType = useSkill.GetBatType()
isAttackDirect = (isUseSkill and SkillCommon.isAttackDirectSkill(useSkill)) # 是否直接攻击
+ curBatLineup = None
for tagObj in tagObjListAll:
tagID = tagObj.GetID()
@@ -1528,6 +1538,29 @@
TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_AtkBack, tagObj, connSkill=useSkill)
TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeAtkBack, curObj, connSkill=useSkill)
+
+ # 敌友方
+ if isAttackDirect or batType in [ChConfig.TurnBattleType_Combo, ChConfig.TurnBattleType_Pursue]:
+ if not curBatLineup:
+ curBatLineup = curObj.GetBatLineup()
+ for lineupObjID in curBatLineup.posObjIDDict.values():
+ lineupObj = batObjMgr.getBatObj(lineupObjID)
+ if not lineupObj.IsAlive():
+ continue
+
+ # 直接攻击
+ if isAttackDirect:
+ if not triggerOne:
+ TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendAttackOverDirectOne, tagObj, connSkill=useSkill, byFriendObj=curObj)
+
+ # 连击
+ if batType == ChConfig.TurnBattleType_Combo:
+ TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendCombo, tagObj, connSkill=useSkill, byFriendObj=curObj)
+
+ # 追击
+ elif batType == ChConfig.TurnBattleType_Pursue:
+ TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendPursue, tagObj, connSkill=useSkill, byFriendObj=curObj)
+
triggerOne = True # 设置已经触发过一次
# 验证是否结算,最后处理
@@ -1836,6 +1869,14 @@
return
passiveTagObjList = connSkill.GetTagObjList()
isOK = OnUseSkill(turnFight, batObj, passiveSkill, passiveTagObjList, batType=ChConfig.TurnBattleType_Passive, bySkill=connSkill, byBuff=connBuff, **kwargs)
+ elif tagAim == ChConfig.SkillTagAim_MainSkillFriend:
+ if "byFriendObj" not in kwargs:
+ return
+ byFriendObj = kwargs["byFriendObj"]
+ passiveTagObjList = [byFriendObj]
+ GameWorld.DebugLogEx("被动触发技能,针对来源友军! effSkillID=%s,effectID=%s,passiveSkillID=%s,bySkillID=%s,byFriendID=%s",
+ effSkillID, effectID, passiveSkillID, bySkillID, byFriendObj.GetID())
+ isOK = OnUseSkill(turnFight, batObj, passiveSkill, passiveTagObjList, batType=ChConfig.TurnBattleType_Passive, bySkill=connSkill, byBuff=connBuff, **kwargs)
else:
GameWorld.DebugLogEx("被动触发技能,重新锁定目标! effSkillID=%s,effectID=%s,passiveSkillID=%s,bySkillID=%s", effSkillID, effectID, passiveSkillID, bySkillID)
isOK = OnUseSkill(turnFight, batObj, passiveSkill, batType=ChConfig.TurnBattleType_Passive, bySkill=connSkill, byBuff=connBuff, **kwargs)
--
Gitblit v1.8.0