From d33b1530147a412e88a32bf1168ca3ac6e9718c6 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 20 三月 2026 10:35:50 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(左慈所有技能;技能目标细分增加11-受控目标优先;敌友目标增加3-友方(一定不含自己);7011效果改为无技能目标时触发;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py | 1 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py | 24 +++++++++++++++++-------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 5 +++--
3 files changed, 21 insertions(+), 9 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 572c1cf..afc8275 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
@@ -1095,6 +1095,7 @@
def IsInControlled(self): return self.IsInBuffStateGroup([1, 2]) # 是否被控制中
def IsInControlledHard(self): return self.IsInBuffStateGroup([1]) # 是否被硬控中
+ def IsInControlledSoft(self): return self.IsInBuffStateGroup([2]) # 是否被软控中
def IsInBuffStateGroup(self, buffStateGroups):
'''是否在某个状态组中
已定义的组: 1 - 硬控组;2 - 软控组;3 - 限制普攻组;4 - 限制怒技组;5 - 限制被动动态组
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index c5cb00e..d1f14b7 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -1361,7 +1361,8 @@
SkillTagAffect_DamShield, # 承伤盾目标优先 8
SkillTagAffect_Bleeding, # 仅流血目标 9
SkillTagAffect_HPPerLowest, # 血量百分比最低 10
-) = range(11)
+SkillTagAffect_IncontrolledPriority, # 受控目标优先 11
+) = range(12)
#技能施法目标
Def_UseSkillAim_Type = 3
@@ -3969,7 +3970,7 @@
SkillEff_UseSkillHarmSelf = 7008 # 释放技能时自残(先扣血)
SkillEff_SkillUseCntLimit = 7009 # 限制技能最多触发次数
SkillEff_UseSkillStealBuff = 7010 # 释放技能前偷取buff
-SkillEff_ReviveNoUse = 7011 # 没有复活目标时释放其他技能
+SkillEff_NoTagUse = 7011 # 没有技能设定的目标时释放其他技能
SkillEff_LearnSkillEx = 7012 # 额外学习技能(用于拆分完全独立的技能,视为已学习)
(
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 04d2139..3ce8ef6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -130,18 +130,19 @@
if not tagObjList:
# 可扩展其他目标选择,如复活技能没有死亡单位时则使用另外的效果
+ isOK = None
GameWorld.DebugLogEx("找不到技能目标! skillID=%s,mapID=%s,funcLineID=%s", skillID, turnFight.mapID, turnFight.funcLineID, turnFight.getReqPlayerID())
- if skillType == ChConfig.Def_SkillType_Revive and not isinstance(useSkill, IpyGameDataPY.IPY_Skill):
- otherEff = useSkill.GetEffectByID(ChConfig.SkillEff_ReviveNoUse)
+ if not isinstance(useSkill, IpyGameDataPY.IPY_Skill):
+ otherEff = useSkill.GetEffectByID(ChConfig.SkillEff_NoTagUse)
if otherEff:
otherSkillID = otherEff.GetEffectValue(0)
- GameWorld.DebugLogEx("没有可复活的目标,释放其他技能! otherSkillID=%s", otherSkillID)
+ GameWorld.DebugLogEx("没有目标时释放其他技能! otherSkillID=%s", otherSkillID)
otherSkill = curBatObj.GetSkillManager().FindSkillByID(otherSkillID)
if not otherSkill:
otherSkill = IpyGameDataPY.GetIpyGameData("Skill", otherSkillID)
if otherSkill:
- OnUseSkill(turnFight, curBatObj, otherSkill, None, batType, bySkill, byBuff, comboLimit, atkBackTag, **kwargs)
- return
+ isOK = OnUseSkill(turnFight, curBatObj, otherSkill, None, batType, bySkill, byBuff, comboLimit, atkBackTag, **kwargs)
+ return isOK
oneActionUseCnt = turnFight.GetOneActionUseSkillCnt(objID)
if oneActionUseCnt >= 20:
@@ -312,7 +313,11 @@
if SkillCommon.isAttackDirectSkill(useSkill):
isNoSelf = True
#GameWorld.DebugLogEx("特殊不包含自己")
-
+
+ #0=敌对方; 1-友好方; 2-友好方(一定包含自己) ;3-友好方(一定不含自己)
+ if tagFriendly == 3:
+ isNoSelf = True
+
# 根据敌友关系确定阵营及一些敌友关系的特殊逻辑
sneerObjFirst = True # 嘲讽目标是否优先
sneerTagObj = None # 嘲讽目标
@@ -470,7 +475,12 @@
sneerObjFirst = False
aimObjList.sort(key=lambda o:(o.IsInControlled()))
GameWorld.DebugLogEx("未被控制优先: %s", [[o.GetID(), o.IsInControlled()] for o in aimObjList])
-
+
+ # 受控目标优先(硬控>软控>其他)
+ elif tagAffect == ChConfig.SkillTagAffect_IncontrolledPriority:
+ aimObjList.sort(key=lambda o:(o.IsInControlledHard(), o.IsInControlledSoft()), reverse=True)
+ GameWorld.DebugLogEx("受控目标优先: %s", [[o.GetID(), o.IsInControlledHard(), o.IsInControlledSoft()] for o in aimObjList])
+
# 灼烧/玄火目标优先
elif tagAffect == ChConfig.SkillTagAffect_Burn:
atkBackTagFrist = False
--
Gitblit v1.8.0