From a569a7bb683bb01edb14be508e123ba556305f9f Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 26 十二月 2025 14:00:40 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(曹操所有技能;增加触发方式50-敌方受控时(硬控);)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py |   25 +++++++++++++++++++++++--
 1 files changed, 23 insertions(+), 2 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 e389169..d7b8c8e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
@@ -33,6 +33,7 @@
         self._batObj = batObj
         self._objID = batObj.GetID() if batObj else 0
         self._skillIDList = [] # 已有技能ID列表,获取被动中快速判断已学技能用
+        self.noDeadSkill = None # 不死技能效果,暂时只支持最多1个这种技能
         
         # 技能
         self._AffectSkillDict = {} # 被动技能 {(触发方式, 有效来源):{技能ID:[effID, ...], ...}, ...}
@@ -189,6 +190,11 @@
         effDict[skillID].append(effectID)
         if triggerWay not in self._skillTriggerWayList:
             self._skillTriggerWayList.append(triggerWay)
+            
+        # 加载不死技能效果
+        if triggerWay == ChConfig.TriggerWay_NoDead:
+            self.noDeadSkill = curSkill
+            
         return
         
     def RefreshBuffPassiveEffect(self):
@@ -509,7 +515,7 @@
         return
     
     def GetBuffCount(self): return len(self._buffList)
-    def GetBuffByIndex(self, index): return self._buffList[index]
+    def GetBuffByIndex(self, index): return self._buffList[index] if len(self._buffList) > index else None
     
     def AddBuff(self, skillID):
         buff = None
@@ -906,6 +912,7 @@
         self._hp = 0 # 当前生命值
         self._xp = 0 # 当前怒气值
         self._isAlive = True # 是否活着
+        self._killer = None # 被谁击杀的
         self._initAttrDict = {} # 初始化时的属性,固定不变,初始化时已经算好的属性  {attrID:value, ...}
         self._batAttrDict = {} # 实际战斗属性,包含buff层级的实际属性 {attrID:+-value, ...} value可能是负值
         self._skillTempAttrDict = {} # 某次技能释放中临时的属性增减 {attrID:+-value, ...} value可能是负值
@@ -1086,6 +1093,17 @@
             return False
         return True
     
+    def CanNoDead(self):
+        '''是否还可触发不死效果
+        暂定单个武将最多只支持配置1个不死效果,且单场战斗最多触发x次,即按技能cd判断即可
+        '''
+        noDeadSkill = self._passiveEffMgr.noDeadSkill # 固定有被动触发
+        if not noDeadSkill:
+            return
+        if noDeadSkill.GetRemainTime():
+            return
+        return True
+    
     def GetSneerTagObj(self):
         ## 获取被嘲讽的目标,如果存在则一定是活着的目标
         buffIDList = self._buffMgr.GetStateBuffIDList(ChConfig.BatObjState_Sneer)
@@ -1103,12 +1121,15 @@
     
     # 战斗属性
     def IsAlive(self): return self._isAlive # 是否活着
-    def SetDead(self):
+    def SetDead(self, killer=None):
+        self._killer = killer
         self._isAlive = False
         self._hp = 0
     def SetRevive(self, hp):
+        self._killer = None
         self._isAlive = True
         self._hp = hp
+    def GetKiller(self): return self._killer
     def GetMaxHP(self): return int(self._batAttrDict.get(ChConfig.AttrID_MaxHP, 0))
     def SetMaxHP(self, maxHP, isNotify=False):
         maxHP = int(maxHP)

--
Gitblit v1.8.0