From af884d1dcc3f2854356bd258216f841ff4796333 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 18 九月 2025 11:26:32 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(关兴技能;增加击杀目标触发方式支持;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py | 3 ++-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py | 13 ++++++++-----
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py | 12 +++++++++---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 4 +++-
4 files changed, 22 insertions(+), 10 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 6203538..c2e9bc6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
@@ -47,7 +47,7 @@
if not connSkillTypeID and connSkill:
connSkillTypeID = connSkill.GetSkillTypeID()
- if connSkill:
+ if connSkill and self._batObj.GetID() == connSkill.GetObjID():
skillID = connSkill.GetSkillID()
skillManager = self._batObj.GetSkillManager()
# 非对象身上的技能,读取本技能被动触发的效果,一般是主技能拆分的子技能
@@ -493,7 +493,8 @@
class PySkill():
- def __init__(self, ipyData):
+ def __init__(self, ipyData, objID):
+ self._objID = objID # 该技能谁的
self._skillData = ObjPool.GetPoolMgr().acquire(SklllData, ipyData)
self._calcTime = 0
self._remainTime = 0
@@ -518,6 +519,7 @@
self.ClearHurtObj()
return
+ def GetObjID(self): return self._objID
def GetSkillID(self): return self._skillData.GetSkillID()
def GetSkillTypeID(self): return self._skillData.GetSkillTypeID()
def GetSkillLV(self): return self._skillData.GetSkillLV()
@@ -622,7 +624,8 @@
class SkillManager():
## 战斗对象技能管理器
- def __init__(self):
+ def __init__(self, batObj):
+ self._batObj = batObj
self._skillList = [] # 技能列表 [PySkill, ...]
self._skillDict = {} # {skillID:PySkill, ...}
return
@@ -661,7 +664,7 @@
self.__deleteSkill(curSkill)
# 学新技能
- curSkill = ObjPool.GetPoolMgr().acquire(PySkill, ipyData)
+ curSkill = ObjPool.GetPoolMgr().acquire(PySkill, ipyData, self._batObj.GetID())
self._skillDict[skillID] = curSkill
self._skillList.append(curSkill)
return curSkill
@@ -703,7 +706,7 @@
self._kvDict = {} # 自定义kv字典
self._skillUseCntDict = {} # 技能累计使用次数 {skillID:useCnt, ...}
self._skillTurnUseCntDict = {} # 技能单回合累计使用次数 {skillID:useCnt, ...}
- self._skillMgr = ObjPool.GetPoolMgr().acquire(SkillManager)
+ self._skillMgr = ObjPool.GetPoolMgr().acquire(SkillManager, self)
self._buffMgr = ObjPool.GetPoolMgr().acquire(BuffManager, self)
self._passiveEffMgr = ObjPool.GetPoolMgr().acquire(PassiveEffManager, self)
self._lastHurtValue = 0
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 9487696..f775536 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -4276,7 +4276,9 @@
TriggerWay_ShieldBroken, # 承伤盾被击破时 12
TriggerWay_CurSkillEff, # 本技能/buff释放后,一般用于本技能/buff释放后触发,仅该技能释放后有效 13
TriggerWay_CurSkillEffLst, # 本持续buff结算后额外触发效果,仅该持续buff结算后有效 14
-) = range(1, 1 + 14)
+TriggerWay_KillOneObj, # 击杀目标后(单次击杀多目标只触发一次) 15
+TriggerWay_KillTagObj, # 击杀每目标后(单次击杀多目标每个目标触发一次) 16
+) = range(1, 1 + 16)
# 被动触发有效来源
TriggerSrc_Skill = 1 # 身上技能有效
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
index 1fb3da3..0db2ee1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
@@ -38,9 +38,10 @@
skillIpyData = IpyGameDataPY.GetIpyGameData("Skill", skillID)
if not skillIpyData:
return
+ ownerID = buffOwner.GetID() if buffOwner else 0
tagObjList = [batObj]
poolMgr = ObjPool.GetPoolMgr()
- useSkill = poolMgr.acquire(BattleObj.PySkill, skillIpyData)
+ useSkill = poolMgr.acquire(BattleObj.PySkill, skillIpyData, ownerID)
useSkill.SetTagObjList(tagObjList)
OnAddBuff(turnFight, batObj, useSkill, buffOwner, bySkill, afterLogic)
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 d52db40..4470358 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -84,7 +84,7 @@
oneActionUseCnt = turnFight.SetOneActionUseSkillCnt(objID, oneActionUseCnt + 1)
bySkillID = bySkill.GetSkillID() if bySkill else 0
- GameWorld.DebugLog("使用技能: curID=%s,skillID=%s,tagCnt=%s,batType=%s,bySkillID=%s,HP:%s/%s,oneActionUseCnt=%s"
+ GameWorld.DebugLog("●使用技能: curID=%s,skillID=%s,tagCnt=%s,batType=%s,bySkillID=%s,HP:%s/%s,oneActionUseCnt=%s"
% (objID, skillID, len(tagObjList), batType, bySkillID, curBatObj.GetHP(), curBatObj.GetMaxHP(), oneActionUseCnt))
# 以下为技能可以使用的处理,之后的逻辑默认技能使用成功
@@ -93,7 +93,7 @@
if isinstance(useSkill, IpyGameDataPY.IPY_Skill):
usePoolSkill = True
# 统一使用 BattleObj.PySkill
- useSkill = poolMgr.acquire(BattleObj.PySkill, useSkill)
+ useSkill = poolMgr.acquire(BattleObj.PySkill, useSkill, objID)
useSkill.ResetUseRec()
useSkill.SetTagObjList(tagObjList)
@@ -775,6 +775,12 @@
TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_AttackOverDirect, tagObj, connSkill=useSkill)
TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeAttackedDirect, curObj, connSkill=useSkill)
+ if killObjList:
+ tagObj = killObjList[0]
+ TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_KillOneObj, tagObj, connSkill=useSkill)
+ for tagObj in killObjList:
+ TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_KillTagObj, tagObj, connSkill=useSkill)
+
return
def __doCostZhanchui(turnFight, curBatObj, useSkill):
@@ -1403,7 +1409,7 @@
tagObjList = [defObj]
poolMgr = ObjPool.GetPoolMgr()
- useSkill = poolMgr.acquire(BattleObj.PySkill, skillIpyData)
+ useSkill = poolMgr.acquire(BattleObj.PySkill, skillIpyData, atkID)
useSkill.SetTagObjList(tagObjList)
useSkill.ClearHurtObj()
hurtObj = useSkill.AddHurtObj(defID)
--
Gitblit v1.8.0