From f6e55772b80bf536223e6e949e28fb7b1812a54d Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期五, 19 九月 2025 12:02:36 +0800 Subject: [PATCH] 129 【战斗】战斗系统-服务端(甘夫人潜能1、3;增加使用技能后触发方式9;层级buff属性支持;) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py | 160 +++++++++++++++++++++++++---------------------------- 1 files changed, 76 insertions(+), 84 deletions(-) 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..f91000e 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py @@ -35,9 +35,7 @@ ''' 触发被动效果,可能触发技能、buff,需根据优先级触发 ''' passiveEffMgr = batObj.GetPassiveEffManager() - if not connSkillTypeID and connSkill: - connSkillTypeID = connSkill.GetSkillTypeID() - effInfoList = passiveEffMgr.GetPassiveEffByTrigger(triggerWay, connSkillTypeID) + effInfoList = passiveEffMgr.GetPassiveEffByTrigger(triggerWay, connSkill, connSkillTypeID) if not effInfoList: return # [["skill/buff", skillID/buffID, effIDList], ...] @@ -58,6 +56,8 @@ def __doTriggerPassiveEffectBySkill(turnFight, batObj, tagObj, triggerWay, skillID, effIDList, connSkill=None): skillMgr = batObj.GetSkillManager() effSkill = skillMgr.FindSkillByID(skillID) + if not effSkill and connSkill and connSkill.GetSkillID() == skillID: + effSkill = connSkill if not effSkill: return @@ -106,86 +106,78 @@ 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() + effInfoList = passiveEffMgr.GetPassiveEffByTrigger("%s_%s" % (triggerWay, calcEffID), connSkill) + 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) + if not effSkill and connSkill and connSkill.GetSkillID() == skillID: + effSkill = connSkill + 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 effID in ChConfig.PassiveEffHappenValueList: + if value: + return value + elif effID in ChConfig.PassiveEffValueMaxList: + curValue = max(curValue, value) # 取最大值 + elif effID in ChConfig.PassiveEffValueMinList: + 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 + -- Gitblit v1.8.0