From a410c052ad4992ca846e3e30f0ccf9ab0b85a1d7 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期三, 17 九月 2025 17:14:32 +0800 Subject: [PATCH] 129 【战斗】战斗系统-服务端(甄姬、曹操技能;增加本次技能万分比效果ID6004;) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py | 162 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 160 insertions(+), 2 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 24321a0..f91000e 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py @@ -17,9 +17,167 @@ import GameWorld import PassiveTrigger +import ChConfig GameWorld.ImportAll("Script\\Skill\\", "PassiveTrigger") - def RefreshPassive(batObj): - return \ No newline at end of file + ''' 刷新被动效果,一般可能存在于技能或buff中 + ''' + passiveEffMgr = batObj.GetPassiveEffManager() + skillEffInfo = passiveEffMgr.RefreshSkillPassiveEffect() + buffEffInfo = passiveEffMgr.RefreshBuffPassiveEffect() + skillEffInfo and GameWorld.DebugLog(" 被动技能效果: %s" % skillEffInfo) + buffEffInfo and GameWorld.DebugLog(" 被动Buff效果: %s" % buffEffInfo) + return + +def OnTriggerPassiveEffect(turnFight, batObj, triggerWay, tagObj=None, connSkill=None, connSkillTypeID=0): + ''' 触发被动效果,可能触发技能、buff,需根据优先级触发 + ''' + passiveEffMgr = batObj.GetPassiveEffManager() + effInfoList = passiveEffMgr.GetPassiveEffByTrigger(triggerWay, connSkill, connSkillTypeID) + if not effInfoList: + return + # [["skill/buff", skillID/buffID, effIDList], ...] + tagID = tagObj.GetID() if tagObj else 0 + GameWorld.DebugLog("触发被动: triggerWay=%s,objID=%s,tagID=%s,%s" % (triggerWay, batObj.GetID(), tagID, effInfoList)) + for effInfo in effInfoList: + sign = effInfo[0] + if sign == "skill": + skillID, effIDList = effInfo[1:] + __doTriggerPassiveEffectBySkill(turnFight, batObj, tagObj, triggerWay, skillID, effIDList, connSkill) + + elif sign == "buff": + buffID, effIDList = effInfo[1:] + __doTriggerPassiveEffectByBuff(turnFight, batObj, tagObj, triggerWay, buffID, effIDList, connSkill) + + return + +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 + + for effID in effIDList: + curEffect = effSkill.GetEffectByID(effID, triggerWay) + if not curEffect: + continue + DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill) + + return + +def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill): + effID = curEffect.GetEffectID() + if not effID: + return + pyName = "PassiveEff_%s" % effID + callFunc = GameWorld.GetExecFunc(PassiveTrigger, "%s.%s" % (pyName, "DoSkillEffectLogic")) + if not callFunc: + return + callFunc(turnFight, batObj, tagObj, effSkill, curEffect, connSkill) + return + +def __doTriggerPassiveEffectByBuff(turnFight, batObj, tagObj, triggerWay, buffID, effIDList, connSkill=None): + buffMgr = batObj.GetBuffManager() + effBuff = buffMgr.GetBuff(buffID) + if not effBuff: + return + skillData = effBuff.GetSkillData() + + for effID in effIDList: + curEffect = skillData.GetEffectByID(effID, triggerWay) + if not curEffect: + continue + DoBuffEffectLogic(turnFight, batObj, tagObj, effBuff, curEffect, connSkill) + + return + +def DoBuffEffectLogic(turnFight, batObj, tagObj, effBuff, curEffect, connSkill): + effID = curEffect.GetEffectID() + if not effID: + return + pyName = "PassiveEff_%s" % effID + callFunc = GameWorld.GetExecFunc(PassiveTrigger, "%s.%s" % (pyName, "DoBuffEffectLogic")) + if not callFunc: + return + callFunc(turnFight, batObj, tagObj, effBuff, curEffect, connSkill) + return + +def GetTriggerEffectValue(turnFight, atkObj, defObj, calcEffID, connSkill=None): + ''' 获取触发被动的值,一般用于某种条件下才会产生的值,如xx情况下属性变化 或 xx情况下是否发生什么 + @param calcEffID: 需要统计的效果ID,可以是属性ID或者其他自定义效果ID + @return: 触发的值,0-没有触发或本身触发的值为0;非0-触发的具体值 + ''' + + 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