From 0c96af08f55d05ab40eae9f940467dd8eafae44c Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 16 九月 2025 14:07:53 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(增加属性ID技能增伤65、技能减伤66;曹轶技能;被动触发增加属性支持;)
---
PySysDB/生成IpyGameDataPY/IpyGameDataPYTemp.py | 4
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py | 4
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py | 32 ++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 4
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py | 150 +++++++++++-------------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py | 73 +++++------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 14 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_Attr.py | 30 +++++
8 files changed, 176 insertions(+), 135 deletions(-)
diff --git "a/PySysDB/\347\224\237\346\210\220IpyGameDataPY/IpyGameDataPYTemp.py" "b/PySysDB/\347\224\237\346\210\220IpyGameDataPY/IpyGameDataPYTemp.py"
index 185d462..9d5abc0 100644
--- "a/PySysDB/\347\224\237\346\210\220IpyGameDataPY/IpyGameDataPYTemp.py"
+++ "b/PySysDB/\347\224\237\346\210\220IpyGameDataPY/IpyGameDataPYTemp.py"
@@ -291,7 +291,7 @@
def __StrToList(self, strValue):
setList = []
- if ("[" in strValue and "]" in strValue) or ("(" in strValue and ")" in strValue):
+ if (strValue.startswith("[") and strValue.endswith("]")) or (strValue.startswith("(") and strValue.endswith(")")):
setList = eval(strValue)
elif strValue in ["0", "-", ""]:
pass
@@ -301,6 +301,8 @@
for value in strValue.split(ChConfig.Def_Str_Montant):
if value.isdigit():
value = int(value)
+ elif (value.startswith("[") and value.endswith("]")) or (value.startswith("(") and value.endswith(")")):
+ value = eval(value)
setList.append(value)
if setList:
setList = tuple(setList)
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 8b7a961..e49c8f3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
@@ -45,7 +45,7 @@
effList = []
# 优先取关联技能的
- if connSkillTypeID and connSkillTypeID not in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_Buff]:
+ if connSkillTypeID and connSkillTypeID not in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_Buff, ChConfig.TriggerSrc_SkillSelf, ChConfig.TriggerSrc_BuffSelf]:
# 技能
key = (triggerWay, connSkillTypeID)
if key in self._AffectSkillDict:
@@ -99,13 +99,19 @@
return
if triggerWay == ChConfig.TriggerWay_CurSkillEff:
return
- if triggerSrc == ChConfig.TriggerSrc_Buff:
+ if triggerSrc in [ChConfig.TriggerSrc_Buff, ChConfig.TriggerSrc_BuffSelf]:
# buff有效的不加进来
return
skillID = curSkill.GetSkillID()
effectID = effect.GetEffectID()
+ if triggerWay == ChConfig.TriggerWay_CalcEffValue:
+ triggerWay = "%s_%s" % (triggerWay, effectID)
+
+ if triggerSrc == ChConfig.TriggerSrc_SkillSelf:
+ triggerSrc = curSkill.GetSkillTypeID()
+
key = (triggerWay, triggerSrc)
if key not in self._AffectSkillDict:
self._AffectSkillDict[key] = {}
@@ -143,13 +149,19 @@
return
if triggerWay == ChConfig.TriggerWay_CurSkillEff:
return
- if triggerSrc == ChConfig.TriggerSrc_Skill:
+ if triggerSrc in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_SkillSelf]:
# 技能有效的不加进来
return
buffID = buff.GetBuffID()
effectID = effect.GetEffectID()
+ if triggerWay == ChConfig.TriggerWay_CalcEffValue:
+ triggerWay = "%s_%s" % (triggerWay, effectID)
+
+ if triggerSrc == ChConfig.TriggerSrc_BuffSelf:
+ triggerSrc = skillData.GetSkillTypeID()
+
key = (triggerWay, triggerSrc)
if key not in self._AffectBuffDict:
self._AffectBuffDict[key] = {}
@@ -720,8 +732,20 @@
# return False
return True
- def IsInState(self, state):
+ def CheckInState(self, checkInState):
## 是否处于某种状态下
+ if isinstance(checkInState, int):
+ checkInStateList = [checkInState]
+ elif isinstance(checkInState, list) or isinstance(checkInState, tuple):
+ checkInStateList = checkInState
+ else:
+ return False
+ for state in checkInStateList:
+ if self._buffMgr.IsInBuffState(state):
+ return True
+ return False
+ def IsInState(self, state):
+ ## 是否处于指定状态下
return self._buffMgr.IsInBuffState(state)
def IsInControlled(self):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index fc0c34a..98578b9 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -160,7 +160,9 @@
AttrID_WuFinalDamPerDef, # 对吴减伤 62
AttrID_QunFinalDamPer, # 对群增伤 63
AttrID_QunFinalDamPerDef, # 对群减伤 64
-) = range(1, 1 + 64)
+AttrID_SkillPer, # 技能增伤 65
+AttrID_SkillPerDef, # 技能减伤 66
+) = range(1, 1 + 66)
# 需要计算的武将战斗属性ID列表
CalcBattleAttrIDList = [AttrID_Atk, AttrID_Def, AttrID_MaxHP, AttrID_StunRate, AttrID_StunRateDef,
@@ -4270,8 +4272,8 @@
TriggerWay_HeroTurnEnd, # 武将回合开始时 5
TriggerWay_HeroActionStart, # 武将行动前 6
TriggerWay_HeroActionEnd, # 武将行动后 7
-TriggerWay_CalcTagInState, # 攻击计算时对方处于xx状态时(参数:状态1|2|...)一般用于攻击时属性计算 8
-TriggerWay_AttackOverTagInState, # 攻击计算后对方处于xx状态时(参数:状态1|2|...)一般用于攻击后触发效果 9
+TriggerWay_CalcEffValue, # 统计计算效果值时 8
+TriggerWay_9, # 9
TriggerWay_AttackOverDirect, # 直接攻击后 (非buff攻击)10
TriggerWay_BeAttackedDirect, # 受到直接攻击时 (非buff攻击)11
TriggerWay_ShieldBroken, # 承伤盾被击破时 12
@@ -4279,8 +4281,10 @@
) = range(1, 1 + 13)
# 被动触发有效来源
-TriggerSrc_Skill = 1
-TriggerSrc_Buff = 2
+TriggerSrc_Skill = 1 # 身上技能有效
+TriggerSrc_Buff = 2 # 身上buff有效
+TriggerSrc_SkillSelf = 3 # 本技能有效
+TriggerSrc_BuffSelf = 4 # 本buff有效
(
TriggerType_BeSuperHit, # 被暴击触发技能 1
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index ac11826..f345268 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -6915,7 +6915,7 @@
def __StrToList(self, strValue):
setList = []
- if ("[" in strValue and "]" in strValue) or ("(" in strValue and ")" in strValue):
+ if (strValue.startswith("[") and strValue.endswith("]")) or (strValue.startswith("(") and strValue.endswith(")")):
setList = eval(strValue)
elif strValue in ["0", "-", ""]:
pass
@@ -6925,6 +6925,8 @@
for value in strValue.split(ChConfig.Def_Str_Montant):
if value.isdigit():
value = int(value)
+ elif (value.startswith("[") and value.endswith("]")) or (value.startswith("(") and value.endswith(")")):
+ value = eval(value)
setList.append(value)
if setList:
setList = tuple(setList)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_Attr.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_Attr.py
new file mode 100644
index 0000000..2cdd501
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_Attr.py
@@ -0,0 +1,30 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Skill.PassiveTrigger.PassiveEff_Attr
+#
+# @todo:被动触发属性
+# @author hxp
+# @date 2025-09-16
+# @version 1.0
+#
+# 详细描述: 被动触发属性
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-09-16 14:30"""
+#-------------------------------------------------------------------------------
+
+def GetHappenValue(attacker, defender, curEffect, effSkill, **skillkwargs):
+
+ checkInStateList = curEffect.GetEffectValue(2)
+ if checkInStateList:
+ if not defender.CheckInState(checkInStateList):
+ return 0
+
+ attrValue = curEffect.GetEffectValue(0)
+ calcType = curEffect.GetEffectValue(1)
+ if calcType == 2: # 减少,其他默认增加
+ attrValue = -attrValue
+
+ return attrValue
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 4d70727..fdf6480 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
@@ -179,7 +179,7 @@
continue
if curEffect.GetTriggerWay():
- if curEffect.GetTriggerSrc() != ChConfig.TriggerSrc_Skill:
+ if curEffect.GetTriggerSrc() not in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_SkillSelf]:
passiveEffMgr.AddBuffPassiveEffect(addBuff, buffSkill, curEffect)
elif effectID in ChConfig.AttrIDList:
@@ -240,7 +240,7 @@
continue
if curEffect.GetTriggerWay():
- if curEffect.GetTriggerSrc() != ChConfig.TriggerSrc_Skill:
+ if curEffect.GetTriggerSrc() not in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_SkillSelf]:
haveBuffPassiveEff = True
elif effectID in ChConfig.AttrIDList:
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 03f9397..9891021 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
@@ -106,86 +106,74 @@
callFunc(turnFight, batObj, tagObj, effBuff, curEffect, connSkill)
return
-def GetTriggerPassiveValue(batObj, triggerType, tagObj=None, useSkill=None):
+def GetTriggerEffectValue(turnFight, atkObj, defObj, calcEffID, connSkill=None):
''' 获取触发被动的值,一般用于某种条件下才会产生的值,如xx情况下属性变化 或 xx情况下是否发生什么
- @return: 触发的值,0-没有触发或本身触发的值为0;大于0-触发的具体值
+ @param calcEffID: 需要统计的效果ID,可以是属性ID或者其他自定义效果ID
+ @return: 触发的值,0-没有触发或本身触发的值为0;非0-触发的具体值
'''
- return 0
-# attacker = FindRealAttacker(attacker)
-# if not attacker:
-# return 0
-#
-# stopPassiveSkill = False # 被动技能不能再触发被动技能,但可以触发天赋技能
-# if useSkill and SkillCommon.isPassiveSkill(useSkill) and isStopPassiveSkill:
-# #GameWorld.DebugLog("被动技能不能再次触发被动技能")
-# #return 0
-# if not PassPassiveLimit(useSkill):
-# stopPassiveSkill = True
-#
-#
-# passiveEff = GetPassiveEffManager().GetPassiveEff(attacker)
-# if not passiveEff:
-# return 0
-# buffDict = passiveEff.GetBuffsByTriggerType(triggerType)
-# if not buffDict:
-# return 0
-#
-# # 当前战斗关系 pvp pve
-# battleRelationType = AttackCommon.GetBattleRelationType(attacker, defender)
-# if not AttackCommon.CheckBattleRelationType(attacker, defender, useSkill, battleRelationType):
-# return 0
-#
-# useSkillID = useSkill.GetSkillID() if useSkill else 0
-# #tick = GameWorld.GetGameWorld().GetTick()
-# curValue = 0
-#
-# for skillID, effectList in buffDict.items():
-# if skillID == useSkillID:
-# continue
-# curSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID)
-# if not curSkill:
-# continue
-#
-# if not IsValidPassiveSkill(curSkill):
-# continue
-#
-# triggerCount = 0 # 成功触发次数
-# for effectInfo in effectList:
-# if stopPassiveSkill and curSkill.GetFuncType() != ChConfig.Def_SkillFuncType_GiftSkill:
-# # 只有天赋才可以再次被触发
-# continue
-# passiveEffect = effectInfo[0]
-# # 被动触发的技能
-# pyName = "PassiveBuff_%s"%passiveEffect.GetEffectID()
-#
-# callFunc = GameWorld.GetExecFunc(PassiveBuff, "%s.%s" % (pyName, "CheckCanHappen"))
-# if not callFunc:
-# continue
-#
-# # 条件不满足
-# if not callFunc(attacker, defender, passiveEffect, skillID, useSkill=useSkill, ownerID=effectInfo[1], ownerType=effectInfo[2]):
-# continue
-#
-# callFunc = GameWorld.GetExecFunc(PassiveBuff, "%s.%s" % (pyName, "GetValue"))
-# if callFunc is None:
-# continue
-#
-# # 如被动技能:千幻冥炎真实伤害从2变4倍
-# #curValue += GetPassiveSkillValueByTriggerType(attacker, defender, curSkill, ChConfig.TriggerType_PassiveBuffValue)
-# value = callFunc(attacker, defender, passiveEffect)
-# if triggerType in TriggerValueMaxList:
-# curValue = max(curValue, value) # 取最大值
-# elif triggerType in TriggerValueMinList:
-# if not curValue:
-# curValue = value
-# elif value > 0:
-# curValue = min(curValue, value) # 取最小值
-# else:
-# curValue += value
-#
-# triggerCount += 1
-#
-# if triggerCount:
-# OnTriggerBuffDel(attacker, curSkill, triggerCount)
-#
-# return curValue
+
+ triggerWay = ChConfig.TriggerWay_CalcEffValue
+ passiveEffMgr = atkObj.GetPassiveEffManager()
+ connSkillTypeID = connSkill.GetSkillTypeID() if connSkill else 0
+ effInfoList = passiveEffMgr.GetPassiveEffByTrigger("%s_%s" % (triggerWay, calcEffID), connSkillTypeID)
+ if not effInfoList:
+ return 0
+
+ curValue = 0
+ skillMgr = atkObj.GetSkillManager()
+ 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":
+ skillID, effIDList = effInfo[1:]
+ effSkill = skillMgr.FindSkillByID(skillID)
+ elif sign == "buff":
+ buffID, effIDList = effInfo[1:]
+ effBuff = buffMgr.GetBuff(buffID)
+ if not effBuff:
+ continue
+ effSkill = effBuff.GetSkillData()
+ else:
+ continue
+
+ if not effSkill:
+ continue
+
+ for effID in effIDList:
+ effect = effSkill.GetEffectByID(effID, triggerWay)
+ if not effect:
+ continue
+ effID = effect.GetEffectID()
+ if not effID or effID != calcEffID:
+ continue
+
+ if effID in ChConfig.AttrIDList:
+ pyName = "PassiveEff_Attr"
+ else:
+ pyName = "PassiveEff_%s" % effID
+
+ callFunc = GameWorld.GetExecFunc(PassiveTrigger, "%s.%s" % (pyName, "GetHappenValue"))
+ if not callFunc:
+ continue
+ value = callFunc(atkObj, defObj, effect, effSkill)
+ if value is None:
+ continue
+
+ #if triggerType in TriggerValueMaxList:
+ # curValue = max(curValue, value) # 取最大值
+ #elif triggerType in TriggerValueMinList:
+ # if not curValue:
+ # curValue = value
+ # elif value > 0:
+ # curValue = min(curValue, value) # 取最小值
+ #else:
+ curValue += value
+ #if skillTypeID not in Def_PassiveSkillValueNoCD:
+ # if curSkill.GetCoolDownTime():
+ # SkillCommon.SetSkillRemainTime(curSkill, 0, tick, attacker)
+
+ 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 3231fc0..d1042eb 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -562,7 +562,7 @@
DoBeAttackResult(turnFight, curBatObj, useSkill, True)
return
-def DoCombo(turnFight, curBatObj, useSkill):
+def DoCombo(turnFight, atkObj, useSkill):
'''
格挡、反击、连击规则
1. 所有武将或怪物均可能产生格挡,群攻时格挡一对一判断,均可能产生格挡
@@ -586,7 +586,7 @@
tagFriendly = useSkill.GetTagFriendly()
if tagFriendly:
- tagObj = GetRelativeObj(turnFight, curBatObj)
+ tagObj = GetRelativeObj(turnFight, atkObj)
else:
tagObjList = useSkill.GetTagObjList()
if not tagObjList:
@@ -596,18 +596,31 @@
if atkBackSkill:
# 可以反击,打断连击
GameWorld.DebugLog("● %s 【反击】" % TurnAttack.GetObjName(tagObj))
- OnUseSkill(turnFight, tagObj, atkBackSkill, [curBatObj], ChConfig.TurnBattleType_AtkBack)
+ OnUseSkill(turnFight, tagObj, atkBackSkill, [atkObj], ChConfig.TurnBattleType_AtkBack)
return
if not tagObj:
return
- if CanCombo(curBatObj, tagObj):
- # 连击根据技能目标配置逻辑重新选择目标
- GameWorld.DebugLog("● %s 【连击】" % TurnAttack.GetObjName(curBatObj))
- DoHeroSpecialty(turnFight, curBatObj, ChConfig.HeroSpecialty_Combo, useSkill.GetSkillID())
- OnUseSkill(turnFight, curBatObj, useSkill, batType=ChConfig.TurnBattleType_Combo)
-
+ comboNum = atkObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnComboNum)
+ aComboRate = atkObj.GetBatAttrValue(ChConfig.AttrID_ComboRate)
+ aComboRate += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, tagObj, ChConfig.AttrID_ComboRate, useSkill)
+
+ dComboRateDef = tagObj.GetBatAttrValue(ChConfig.AttrID_ComboRateDef)
+ happenRate = eval(IpyGameDataPY.GetFuncCompileCfg("ComboCfg", 1))
+ if not GameWorld.CanHappen(happenRate):
+ GameWorld.DebugLog("无法连击! atkID=%s,happenRate=%s,aComboRate=%s,dComboRateDef=%s,comboNum=%s"
+ % (atkObj.GetID(), happenRate, aComboRate, dComboRateDef, comboNum))
+ return
+ GameWorld.DebugLog("● %s 【连击】 happenRate=%s,aComboRate=%s,dComboRateDef=%s,comboNum=%s"
+ % (TurnAttack.GetObjName(atkObj), happenRate, aComboRate, dComboRateDef, comboNum))
+ atkObj.SetDict(ChConfig.Def_Obj_Dict_TurnComboNum, comboNum + 1)
+
+ # 连击特长
+ DoHeroSpecialty(turnFight, atkObj, ChConfig.HeroSpecialty_Combo, useSkill.GetSkillID())
+
+ # 连击根据技能目标配置逻辑重新选择目标
+ OnUseSkill(turnFight, atkObj, useSkill, batType=ChConfig.TurnBattleType_Combo)
return
def __getCanAtkBackSkill(useSkill, tagObj):
@@ -642,21 +655,6 @@
GameWorld.DebugLog("可以反击! tagID=%s" % tagID)
return useSkill
return
-
-def CanCombo(atkObj, defObj):
- ## 可否连击
- comboNum = atkObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnComboNum)
- aComboRate = atkObj.GetBatAttrValue(ChConfig.AttrID_ComboRate)
- dComboRateDef = defObj.GetBatAttrValue(ChConfig.AttrID_ComboRateDef)
- happenRate = eval(IpyGameDataPY.GetFuncCompileCfg("ComboCfg", 1))
- if GameWorld.CanHappen(happenRate):
- GameWorld.DebugLog("可以连击! atkID=%s,happenRate=%s,aComboRate=%s,dComboRateDef=%s,comboNum=%s"
- % (atkObj.GetID(), happenRate, aComboRate, dComboRateDef, comboNum))
- atkObj.SetDict(ChConfig.Def_Obj_Dict_TurnComboNum, comboNum + 1)
- return True
- GameWorld.DebugLog("无法连击! atkID=%s,happenRate=%s,aComboRate=%s,dComboRateDef=%s,comboNum=%s"
- % (atkObj.GetID(), happenRate, aComboRate, dComboRateDef, comboNum))
- return False
def DoBeAttackResult(turnFight, curObj, useSkill, isUseSkill=False):
'''被攻击结果
@@ -880,9 +878,6 @@
# return
enhanceSkillID = curEffect.GetEffectValue(0)
checkInStateList = curEffect.GetEffectValue(1)
- if checkInStateList:
- if isinstance(checkInStateList, int):
- checkInStateList = [checkInStateList]
GameWorld.DebugLog("额外触发的技能: enhanceSkillID=%s,checkInStateList=%s" % (enhanceSkillID, checkInStateList))
tagObjList = useSkill.GetTagObjList()
@@ -905,12 +900,7 @@
GameWorld.DebugLog(" 闪避的不触发: tagID=%s" % (tagID))
continue
if checkInStateList:
- inState = False
- for state in checkInStateList:
- if tagObj.IsInState(state):
- inState = True
- break
- if not inState:
+ if not tagObj.CheckInState(checkInStateList):
GameWorld.DebugLog(" 不在状态下不触发: tagID=%s not in state:%s" % (tagID, checkInStateList))
continue
if enhanceRate and enhanceRate != ChConfig.Def_MaxRateValue and not GameWorld.CanHappen(enhanceRate, ChConfig.Def_MaxRateValue):
@@ -929,11 +919,8 @@
if checkInStateList:
inState = False
for tagObj in tagObjList:
- for state in checkInStateList:
- if not state or tagObj.IsInState(state):
- inState = True
- break
- if inState:
+ if tagObj.CheckInState(checkInStateList):
+ inState = True
break
if not inState:
GameWorld.DebugLog(" 没有目标在状态下不触发: tagObj not in state:%s" % str(checkInStateList))
@@ -1102,7 +1089,10 @@
if isAngerSkill:
aAngerSkillPer = atkObj.GetBatAttrValue(ChConfig.AttrID_AngerSkillPer) # 普技增伤
dAngerSkillPerDef = defObj.GetBatAttrValue(ChConfig.AttrID_AngerSkillPerDef) # 普技减伤
-
+
+ aAddSkillPer = 0 # 技能增伤
+ aAddSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.AttrID_SkillPer, curSkill)
+
# 物法增减伤
if pmType == IPY_GameWorld.ghtMag: # 法伤
aPMDamPer = atkObj.GetBatAttrValue(ChConfig.AttrID_MagDamPer)
@@ -1117,6 +1107,7 @@
dNormalSkillPerDef /= 10000.0
aAngerSkillPer /= 10000.0
dAngerSkillPerDef /= 10000.0
+ aAddSkillPer /= 10000.0
aPMDamPer /= 10000.0
dPMDamPerDef /= 10000.0
aSuperDamPer /= 10000.0
@@ -1124,8 +1115,8 @@
aFinalDamPer /= 10000.0
dFinalDamPerDef /= 10000.0
- GameWorld.DebugLog("伤血计算: atkID=%s,defID=%s,skillID=%s,atkSkillPer=%s,aAtk=%s,dDef=%s,dHP=%s,hurtTypes=%s"
- % (atkID, defID, skillID, atkSkillPer, aAtk, dDef, dHP, hurtTypes))
+ GameWorld.DebugLog("伤血计算: atkID=%s,defID=%s,skillID=%s,atkSkillPer=%s,aAtk=%s,dDef=%s,dHP=%s,hurtTypes=%s,aAddSkillPer=%s"
+ % (atkID, defID, skillID, atkSkillPer, aAtk, dDef, dHP, hurtTypes, aAddSkillPer))
# 持续性伤害
if isDot:
--
Gitblit v1.8.0