From 2350f87cbba3da859d02632aa8116c1511d6d60b Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 24 九月 2025 18:54:13 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(马超所有技能;增加触发方式20 21 22;增加效果5006 6010 6011 6012 6013;修复非学习的子技能加载触发效果bug;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py                       |   15 +-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6010.py |   30 ++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py                     |   27 ++++-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py                    |    3 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6013.py |   24 ++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5006.py |   41 ++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6012.py |   19 +++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6011.py |   30 ++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py                      |   52 +++++++--
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                             |   24 +++-
 10 files changed, 231 insertions(+), 34 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 8af1cb2..e0ce407 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
@@ -63,14 +63,18 @@
                     effectID = effect.GetEffectID()
                     if effectID == 0:
                         continue
-                    triggerWay = effect.GetTriggerWay()
-                    triggerSrc = effect.GetTriggerSrc()
-                    if not triggerWay:
+                    tWay = effect.GetTriggerWay()
+                    tSrc = effect.GetTriggerSrc()
+                    if not tWay:
                         continue
-                    if triggerWay in ChConfig.TriggerWayNoLoadList:
+                    if tWay in ChConfig.TriggerWayNoLoadList:
                         continue
-                    if triggerSrc != ChConfig.TriggerSrc_SkillSelf:
+                    if tSrc != ChConfig.TriggerSrc_SkillSelf:
                         # 仅添加本技能的
+                        continue
+                    if tWay == ChConfig.TriggerWay_CalcEffValue:
+                        tWay = "%s_%s" % (tWay, effectID)
+                    if tWay != triggerWay:
                         continue
                     effIDList.append(effectID)
                 if effIDList:
@@ -468,6 +472,15 @@
             return
         buffID = buffIDList[0]
         return self._buffIDDict.get(buffID, None)
+    def FindBuffListByState(self, state):
+        ## 查找某种buff状态的buff列表
+        buffIDList = self._buffStateDict.get(state, [])
+        buffs = []
+        for buffID in buffIDList:
+            if buffID not in self._buffIDDict:
+                continue
+            buffs.append(self._buffIDDict[buffID])
+        return buffs
     
     def AddBuffState(self, state, buffID):
         ## 添加buff影响的状态,ChConfig.BatObjStateList
@@ -503,6 +516,7 @@
         self._remainTime = 0
         self._batType = 0 # 战斗类型,普通、连击、反击、追击等
         self._tagObjList = [] # 本次技能目标列表 [BatObj, ...]
+        self._killObjList = [] # 本次技能击杀目标列表 [BatObj, ...]
         self._hurtList = [] # 本次伤血列表,可能同一个对象有多个伤害,如弹射等 [HurtObj, ...]
         self._bySkill = None # 由哪个技能触发的
         self._byBuff = None # 由哪个buff触发的
@@ -518,6 +532,7 @@
     def ResetUseRec(self):
         self._batType = 0
         self._tagObjList = []
+        self._killObjList = []
         self._bySkill = None
         self._byBuff = None
         self._afterLogicList = []
@@ -572,6 +587,8 @@
     def SetByBuff(self, byBuff): self._byBuff = byBuff
     def GetTagObjList(self): return self._tagObjList # 技能目标列表
     def SetTagObjList(self, tagObjList): self._tagObjList = tagObjList
+    def GetKillObjList(self): return self._killObjList # 击杀目标列表
+    def SetKillObjList(self, killObjList): self._killObjList = killObjList
     def GetAfterLogicList(self): return self._afterLogicList
     def AddAfterLogic(self, logicType, logicData):
         '''添加技能释放后需要处理额外逻辑
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index ff9a710..390ea1a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -4294,7 +4294,10 @@
 TriggerWay_BuffDel, # buff消失后  17
 TriggerWay_BeCombo, # 被连击时 18
 TriggerWay_BePursue, # 被追击时 19
-) = range(1, 1 + 19)
+TriggerWay_UseSkillOverOne, # 使用技能后(多目标仅触发一次)20
+TriggerWay_AttackOverDirectOne, # 直接攻击后(除dot或buff外的攻击,多目标仅触发一次)21
+TriggerWay_BeAnyEffect, # 受到任意效果时(除直接攻击外的任意效果,如buff、dot、治疗、额外怒技)22
+) = range(1, 1 + 22)
 
 # 不加载的被动触发方式,一般用于本技能固定触发逻辑用的
 TriggerWayNoLoadList = [TriggerWay_CurSkillEff, TriggerWay_CurSkillEffLst]
@@ -4307,13 +4310,18 @@
 
 # 被动效果ID,属性类的直接使用属性ID当做效果ID
 PassiveEff_AddBuffLayerByWeight = 6001 # 根据权重随机添加buff层数 数值1-[[权重,层级], ...]
-PassiveEff_ChangeHurtType = 6002 # 变更伤害类型: 值1-伤害类型;值2-可附加验证处于xx状态 [状态1, 状态2, ...]
-PassiveEff_ChangeHurtMulti = 6003 # 变更伤害倍值(可增可减): 值1-变更倍值;值2-可附加验证处于xx状态 [状态1, 状态2, ...]
-PassiveEff_AddSkillPer = 6004 # 增加本次技能万分比: 值1-增加的万分比;值2-可附加验证处于xx状态 [状态1, 状态2, ...]
-PassiveEff_AddSkillPerByJob = 6006 # 增加本次技能万分比: 值1-增加的万分比;值2-验证目标职业
-PassiveEff_AddSkillTagCnt = 6007 # 增加技能目标数:值1-增加目标个数
-PassiveEff_ImmuneControlBuff = 6008 # 生命值低于x%时免疫控制效果:值1-百分比
-PassiveEff_MustSuperHit = 6009 # 生命值低于x%时必定暴击:值1-百分比
+PassiveEff_ChangeHurtType = 6002 # 变更本次伤害类型
+PassiveEff_ChangeHurtMulti = 6003 # 变更伤害倍值(可增可减)
+PassiveEff_AddSkillPer = 6004 # 增加本次技能万分比(验证目标状态)
+PassiveEff_AddSkillPerByJob = 6006 # 增加本次技能万分比(验证目标职业)
+# 6005 增加本次技能万分比(按buff状态层数算)
+PassiveEff_AddSkillTagCnt = 6007 # 增加技能目标数
+PassiveEff_ImmuneControlBuff = 6008 # 生命值低于x%时免疫控制效果
+PassiveEff_MustSuperHit = 6009 # 生命值低于x%时必定暴击
+PassiveEff_AddSkillPerByHP = 6010 # 增加本次技能万分比(验证当前生命)
+PassiveEff_AddSkillPerByBuffLayer = 6011 # 增加本次技能万分比(根据buff层级)
+PassiveEff_AddBuffLayerMax = 6012 # 添加buff层级上限:  数值1-增加层级上限
+PassiveEff_AddFinalDamPer = 6013 # 增加最终增伤(根据属性转化)
 
 # 被动效果ID有触发值时就返回的
 PassiveEffHappenValueList = [PassiveEff_ChangeHurtType, PassiveEff_ImmuneControlBuff, PassiveEff_MustSuperHit]
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5006.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5006.py
new file mode 100644
index 0000000..39e8ae8
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5006.py
@@ -0,0 +1,41 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Skill.PassiveTrigger.PassiveEff_5006
+#
+# @todo:移除目标身上某种状态buff
+# @author hxp
+# @date 2025-09-24
+# @version 1.0
+#
+# 详细描述: 移除目标身上某种状态buff
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-09-24 19:00"""
+#-------------------------------------------------------------------------------
+
+import GameWorld
+import TurnBuff
+
+def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs):
+    buffState = curEffect.GetEffectValue(0) # buff状态
+    if not buffState:
+        return
+    killObjNotEff = curEffect.GetEffectValue(2) # 有击杀时该效果不生效,默认0-均生效;1-有击杀不生效
+    if killObjNotEff:
+        # 判断是否击杀有个小问题,如果关联技能没有击杀目标,但是额外触发的伤害击杀了目标,这个是否算击杀
+        # 如马超的怒技,这个可以到时看表现再看是否优化,待优化方案:同步效果技能的目标判断目标是否有死亡来判断是否有击杀
+        if connSkill and connSkill.GetKillObjList():
+            GameWorld.DebugLog("本次有击杀不触发该效果: effID=%s" % (curEffect.GetEffectID()))
+            return
+        
+    tagChoose = curEffect.GetEffectValue(1) # 目标:0-继承技能目标;1-自己
+    delObj = batObj if tagChoose == 1 else tagObj
+    
+    buffMgr = delObj.GetBuffManager()
+    for buff in buffMgr.FindBuffListByState(buffState):
+        GameWorld.DebugLog("    移除buff状态: tagID=%s,buffID=%s" % (delObj.GetID(), buff.GetBuffID()))
+        TurnBuff.DoBuffDel(turnFight, delObj, buff)
+        
+    return True
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6010.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6010.py
new file mode 100644
index 0000000..6ccb464
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6010.py
@@ -0,0 +1,30 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Skill.PassiveTrigger.PassiveEff_6010
+#
+# @todo:增加本次技能万分比(验证当前生命)
+# @author hxp
+# @date 2025-09-24
+# @version 1.0
+#
+# 详细描述: 增加本次技能万分比(验证当前生命)
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-09-24 19:00"""
+#-------------------------------------------------------------------------------
+
+def GetHappenValue(attacker, defender, curEffect, effSkill, effBuff, **skillkwargs):
+    checkHPPer = curEffect.GetEffectValue(1)
+    checkType = curEffect.GetEffectValue(2)
+    nowPer = attacker.GetHP() / float(attacker.GetMaxHP()) * 100
+    # 小于等于
+    if checkType == 0:
+        if nowPer > checkHPPer:
+            return
+    # 大于等于
+    else:
+        if nowPer < checkHPPer:
+            return
+    return curEffect.GetEffectValue(0)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6011.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6011.py
new file mode 100644
index 0000000..50abc29
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6011.py
@@ -0,0 +1,30 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Skill.PassiveTrigger.PassiveEff_6011
+#
+# @todo:增加本次技能万分比(根据buff层级)
+# @author hxp
+# @date 2025-09-24
+# @version 1.0
+#
+# 详细描述: 增加本次技能万分比(根据buff层级)
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-09-24 19:00"""
+#-------------------------------------------------------------------------------
+
+
+def GetHappenValue(attacker, defender, curEffect, effSkill, effBuff, **skillkwargs):
+    layerPer = curEffect.GetEffectValue(0) # 每层增加的万分比
+    buffState = curEffect.GetEffectValue(1) # buff状态
+    if not buffState:
+        return
+    
+    layerTotal = 0
+    buffMgr = attacker.GetBuffManager()
+    for buff in buffMgr.FindBuffListByState(buffState):
+        layerTotal += buff.GetLayer()
+        
+    return layerTotal * layerPer
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6012.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6012.py
new file mode 100644
index 0000000..62d8379
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6012.py
@@ -0,0 +1,19 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Skill.PassiveTrigger.PassiveEff_6012
+#
+# @todo:添加buff层级上限
+# @author hxp
+# @date 2025-09-24
+# @version 1.0
+#
+# 详细描述: 添加buff层级上限
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-09-24 19:00"""
+#-------------------------------------------------------------------------------
+
+def GetHappenValue(attacker, defender, curEffect, effSkill, effBuff, **skillkwargs):
+    return curEffect.GetEffectValue(0)
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6013.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6013.py
new file mode 100644
index 0000000..06f3a13
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6013.py
@@ -0,0 +1,24 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Skill.PassiveTrigger.PassiveEff_6013
+#
+# @todo:增加最终增伤(根据属性转化)
+# @author hxp
+# @date 2025-09-24
+# @version 1.0
+#
+# 详细描述: 增加最终增伤(根据属性转化)
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-09-24 19:00"""
+#-------------------------------------------------------------------------------
+
+def GetHappenValue(attacker, defender, curEffect, effSkill, effBuff, **skillkwargs):
+    perAttr = curEffect.GetEffectValue(0) # 每万分比
+    attrID = curEffect.GetEffectValue(1) # 属性ID
+    toPer = curEffect.GetEffectValue(2) # 转化为x万分比最终增伤
+    attrValue = attacker.GetBatAttrValue(attrID)
+    changeValue = attrValue / perAttr * toPer
+    return changeValue
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 bd8ae78..b319418 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
@@ -74,16 +74,21 @@
             return False
         
     buffValueList = GetAddBuffValue(turnFight, buffOwner, batObj, buffSkill)
-    GameWorld.DebugLog("OnAddBuff: curID=%s,skillID=%s,atkType=%s,buffValueList=%s,ownerID=%s,relatedSkillID=%s" 
-                       % (curID, skillID, buffSkill.GetAtkType(), buffValueList, ownerID, relatedSkillID))
     
     skillTypeID = buffSkill.GetSkillTypeID()
     buffRepeat = buffSkill.GetBuffRepeat()
     addLayerCnt = buffSkill.GetLayerCnt()
     addLayerEff = buffSkill.GetEffectByID(ChConfig.PassiveEff_AddBuffLayerByWeight)
     if addLayerEff:
-        addLayerCnt = GameWorld.GetResultByWeightList(addLayerEff.GetEffectValues(), addLayerCnt)
+        # 可指定来源技能技能才生效,不指定的话默认生效
+        if not addLayerEff.GetTriggerSrc() or addLayerEff.GetTriggerSrc() == relatedSkillID:
+            addLayerCnt = GameWorld.GetResultByWeightList(addLayerEff.GetEffectValues(), addLayerCnt)
+    maxLayerCnt = buffSkill.GetLayerMax()
+    if maxLayerCnt:
+        maxLayerCnt += TurnPassive.GetTriggerEffectValue(turnFight, buffOwner, batObj, ChConfig.PassiveEff_AddBuffLayerMax, buffSkill)
         
+    GameWorld.DebugLog("OnAddBuff: curID=%s,skillID=%s,atkType=%s,buffValueList=%s,addLayerCnt=%s/%s,ownerID=%s,relatedSkillID=%s" 
+                       % (curID, skillID, buffSkill.GetAtkType(), buffValueList, addLayerCnt, maxLayerCnt, ownerID, relatedSkillID))
     #buff重复获得时的叠加规则
     #以下规则默认针对的是相同施法者,即相同来源的处理
     #如果有针对不同施法者的规则会说明
@@ -97,7 +102,6 @@
     buffMgr = batObj.GetBuffManager()
     
     if buffRepeat == 4: # 4 独立:回合、效果独立计算
-        maxLayerCnt = buffSkill.GetLayerMax()
         # 如果有限制最大层数,达到上限时如果有新的层数进来,就替换掉持续时间最短的,只算相同来源
         if maxLayerCnt:
             buffList = buffMgr.FindBuffListBySkillTypeID(skillTypeID)
@@ -136,11 +140,10 @@
             
             updLayerCnt = addLayerCnt
             if buffRepeat == 3: # 叠加层级
-                maxLayerCnt = buffSkill.GetLayerMax()
                 updLayerCnt = nowLayerCnt + addLayerCnt
                 if maxLayerCnt and updLayerCnt > maxLayerCnt:
                     updLayerCnt = maxLayerCnt
-                GameWorld.DebugLog("        叠加层级: nowLayerCnt=%s,addLayerCnt=%s,updLayerCnt=%s" % (nowLayerCnt, addLayerCnt, updLayerCnt))
+                GameWorld.DebugLog("        叠加层级: nowLayerCnt=%s,addLayerCnt=%s,updLayerCnt=%s,maxLayerCnt=%s" % (nowLayerCnt, addLayerCnt, updLayerCnt, maxLayerCnt))
             else:
                 GameWorld.DebugLog("        默认覆盖")
                 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
index ef57875..fd3b51a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
@@ -125,7 +125,6 @@
     buffMgr = atkObj.GetBuffManager()
     # [["skill/buff", skillID/buffID, effIDList], ...]
     tagID = defObj.GetID() if defObj else 0
-    GameWorld.DebugLog("统计被动效果值: calcEffID=%s,objID=%s,tagID=%s,%s" % (calcEffID, atkObj.GetID(), tagID, effInfoList))
     for effInfo in effInfoList:
         sign = effInfo[0]
         if sign == "skill":
@@ -168,6 +167,7 @@
             
             if effID in ChConfig.PassiveEffHappenValueList:
                 if value:
+                    GameWorld.DebugLog("统计被动效果值: calcEffID=%s,objID=%s,tagID=%s,%s,curValue=%s" % (calcEffID, atkObj.GetID(), tagID, effInfoList, value))
                     return value
             elif effID in ChConfig.PassiveEffValueMaxList:
                 curValue = max(curValue, value) # 取最大值
@@ -182,5 +182,6 @@
             #    if curSkill.GetCoolDownTime():
             #        SkillCommon.SetSkillRemainTime(curSkill, 0, tick, attacker)
             
+    GameWorld.DebugLog("统计被动效果值: calcEffID=%s,objID=%s,tagID=%s,%s,curValue=%s" % (calcEffID, atkObj.GetID(), tagID, effInfoList, curValue))
     return curValue
 
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 1ee372c..5492ff9 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -710,7 +710,7 @@
     @param isUseSkill: 是否是直接使用技能的攻击结果,否则视为持续性的
     '''
     
-    curID = curObj.GetID()
+    #curID = curObj.GetID()
     isTurnNormalSkill = SkillCommon.isTurnNormalSkill(useSkill)
     isAngerSkill = SkillCommon.isAngerSkill(useSkill)
     
@@ -746,6 +746,7 @@
         if tagObj.IsAlive() and tagObj.GetHP() <= 0 and tagObj.GetFaction() != curObj.GetFaction():
             killObjList.append(tagObj)
             TurnAttack.SetObjKilled(turnFight, tagObj, curObj, useSkill)
+    useSkill.SetKillObjList(killObjList)
     if curObj.IsAlive() and curObj.GetHP() <= 0:
         TurnAttack.SetObjKilled(turnFight, curObj)
         
@@ -813,19 +814,33 @@
         tagObj = batObjMgr.getBatObj(tagObjID)
         TurnPassive.OnTriggerPassiveEffect(turnFight, buffObj, ChConfig.TriggerWay_ShieldBroken, tagObj, connSkillTypeID=buffSkillTypeID)
         
+    # 有击杀时
+    for index, tagObj in enumerate(killObjList):
+        if index == 0:
+            TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_KillOneObj, tagObj, connSkill=useSkill)
+        TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_KillTagObj, tagObj, connSkill=useSkill)
+        
+    triggerOne = False
     batType = useSkill.GetBatType()
+    isAttackDirect = (isUseSkill and not SkillCommon.IsBuff(useSkill) and useSkill.GetSkillType() in [ChConfig.Def_SkillType_Atk])
     for tagObj in useSkill.GetTagObjList():
         tagID = tagObj.GetID()
         if tagID in effIgnoreObjIDList:
             continue
         
         # 直接攻击
-        if isUseSkill and not SkillCommon.IsBuff(useSkill) and useSkill.GetSkillType() in [ChConfig.Def_SkillType_Atk]:
+        if isAttackDirect:
+            if not triggerOne:
+                TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_AttackOverDirectOne, tagObj, connSkill=useSkill)
             TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_AttackOverDirect, tagObj, connSkill=useSkill)
             TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeAttackedDirect, curObj, connSkill=useSkill)
+        else:
+            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeAnyEffect, curObj, connSkill=useSkill)
             
         # 使用技能后
         if isUseSkill:
+            if not triggerOne:
+                TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_UseSkillOverOne, tagObj, connSkill=useSkill)
             TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_UseSkillOver, tagObj, connSkill=useSkill)
             
         # 连击
@@ -835,11 +850,7 @@
         elif batType == ChConfig.TurnBattleType_Pursue:
             TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BePursue, 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)
+        triggerOne = True # 设置已经触发过一次
         
     return
 
@@ -942,7 +953,7 @@
                 continue
             
         effID = curEffect.GetEffectID()
-        GameWorld.DebugLog("●执行额外技能效果: %s, triggerWay=%s,effIgnoreObjIDList=%s" % (effID, triggerWay, effIgnoreObjIDList))
+        GameWorld.DebugLog("●执行额外技能效果: skillID=%s,effID=%s, triggerWay=%s,effIgnoreObjIDList=%s" % (useSkill.GetSkillID(), effID, triggerWay, effIgnoreObjIDList))
         if effID == 5010:
             # 额外技能效果
             __doUseEnhanceSkill(turnFight, curObj, useSkill, curEffect, effIgnoreObjIDList)
@@ -1025,12 +1036,21 @@
     '''
     if not passiveSkill:
         return
-    isOK = False
+    bySkillID = 0
+    if connSkill:
+        bySkillID = connSkill.GetSkillID()
+    elif connBuff:
+        bySkillID = connBuff.GetSkillID()
     passiveSkillID = passiveSkill.GetSkillID()
+    if passiveSkillID == bySkillID:
+        #GameWorld.DebugLog("###被动触发技能不触发自身,防止死循环! effSkillID=%s,effectID=%s,passiveSkillID=%s" % (effSkillID, effectID, passiveSkillID))
+        return
+    
+    isOK = False
     # 继承主技能目标
     if passiveSkill.GetTagAim() == ChConfig.SkillTagAim_MainSkill:
         happenRate = passiveSkill.GetHappenRate()
-        GameWorld.DebugLog("被动触发技能,继承主技能目标! effSkillID=%s,effectID=%s,passiveSkillID=%s,happenRate=%s" % (effSkillID, effectID, passiveSkillID, happenRate))
+        GameWorld.DebugLog("被动触发技能,继承主技能目标! effSkillID=%s,effectID=%s,passiveSkillID=%s,happenRate=%s,bySkillID=%s" % (effSkillID, effectID, passiveSkillID, happenRate, bySkillID))
         if not tagObj:
             return
         tagID = tagObj.GetID()
@@ -1043,7 +1063,7 @@
         passiveTagObjList = [tagObj]
         isOK = OnUseSkill(turnFight, batObj, passiveSkill, passiveTagObjList, batType=ChConfig.TurnBattleType_Passive, bySkill=connSkill, byBuff=connBuff)
     else:
-        GameWorld.DebugLog("被动触发技能,重新锁定目标! effSkillID=%s,effectID=%s,passiveSkillID=%s" % (effSkillID, effectID, passiveSkillID))
+        GameWorld.DebugLog("被动触发技能,重新锁定目标! 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)
         
     return isOK
@@ -1168,14 +1188,18 @@
     
     aAtk = atkObj.GetAtk() # 攻击方最大攻击
     
-    dHP = defObj.GetHP()
+    dHP, dMaxHP = defObj.GetHP(), defObj.GetMaxHP()
     dDef = 0 if ignoreDef else defObj.GetDef() # 防守方防御力
     
     atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPer, curSkill)
+    atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPerByHP, curSkill)
     atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPerByJob, curSkill)
+    atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPerByBuffLayer, curSkill)
     
     aFinalDamPer = atkObj.GetBatAttrValue(ChConfig.AttrID_FinalDamPer) # 最终加成
     dFinalDamPerDef = defObj.GetBatAttrValue(ChConfig.AttrID_FinalDamPerDef) # 最终减伤
+    
+    aFinalDamPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddFinalDamPer, curSkill)
     
     aNormalSkillPer, dNormalSkillPerDef = 0, 0
     if isTurnNormalSkill:
@@ -1224,8 +1248,8 @@
     
     if calcType != ChConfig.Def_Calc_Attack:
         aAtk = GetCalcBaseValue(calcType, atkObj, defObj, curSkill)
-    GameWorld.DebugLog("伤血计算: atkID=%s,defID=%s,skillID=%s,atkSkillPer=%s,calcType=%s,aAtk=%s,dDef=%s,dHP=%s,hurtTypes=%s,aAddSkillPer=%s" 
-                       % (atkID, defID, skillID, atkSkillPer, calcType, aAtk, dDef, dHP, hurtTypes, aAddSkillPer))
+    GameWorld.DebugLog("伤血计算: atkID=%s,defID=%s,skillID=%s,atkSkillPer=%s,calcType=%s,aAtk=%s,dDef=%s,dHP=%s/%s,hurtTypes=%s,aAddSkillPer=%s" 
+                       % (atkID, defID, skillID, atkSkillPer, calcType, aAtk, dDef, dHP, dMaxHP, hurtTypes, aAddSkillPer))
     
     # 持续性伤害
     if isTurnNormalSkill:

--
Gitblit v1.8.0