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