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