From f2aeecf0a02b97418b762bd6ee518c33d3ae2685 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期五, 12 九月 2025 10:22:35 +0800 Subject: [PATCH] 129 【战斗】战斗系统-服务端(新增演武场;支持机器人;支持PVP战斗;每场战斗结束后支持查看战斗回放;榜单优化存储玩家形象Value5;主线关卡榜支持;支持查看玩家;) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py | 70 +++++++++++++++++++++++++--------- 1 files changed, 51 insertions(+), 19 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 c1e7a9b..03f9397 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py @@ -31,49 +31,81 @@ buffEffInfo and GameWorld.DebugLog(" 被动Buff效果: %s" % buffEffInfo) return -def OnTriggerPassiveEffect(turnFight, batObj, triggerType, connSkill=None): +def OnTriggerPassiveEffect(turnFight, batObj, triggerWay, tagObj=None, connSkill=None, connSkillTypeID=0): ''' 触发被动效果,可能触发技能、buff,需根据优先级触发 ''' passiveEffMgr = batObj.GetPassiveEffManager() - effInfoList = passiveEffMgr.GetPassiveEffByTrigger(triggerType, connSkill=connSkill) + if not connSkillTypeID and connSkill: + connSkillTypeID = connSkill.GetSkillTypeID() + effInfoList = passiveEffMgr.GetPassiveEffByTrigger(triggerWay, connSkillTypeID) if not effInfoList: return # [["skill/buff", skillID/buffID, effIDList], ...] - GameWorld.DebugLog("触发被动: triggerType=%s,objID=%s,%s" % (triggerType, batObj.GetID(), effInfoList)) + 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, skillID, effIDList, connSkill) + __doTriggerPassiveEffectBySkill(turnFight, batObj, tagObj, triggerWay, skillID, effIDList, connSkill) elif sign == "buff": buffID, effIDList = effInfo[1:] - __doTriggerPassiveEffectByBuff(turnFight, batObj, buffID, effIDList, connSkill) + __doTriggerPassiveEffectByBuff(turnFight, batObj, tagObj, triggerWay, buffID, effIDList, connSkill) return -def __doTriggerPassiveEffectBySkill(turnFight, batObj, skillID, effIDList, connSkill=None): - return - -def __doTriggerPassiveEffectByBuff(turnFight, batObj, buffID, effIDList, connSkill=None): - buffMgr = batObj.GetBuffManager() - curBuff = buffMgr.GetBuff(buffID) - if not curBuff: +def __doTriggerPassiveEffectBySkill(turnFight, batObj, tagObj, triggerWay, skillID, effIDList, connSkill=None): + skillMgr = batObj.GetSkillManager() + effSkill = skillMgr.FindSkillByID(skillID) + if not effSkill: return - skillData = curBuff.GetSkillData() for effID in effIDList: - curEffect = skillData.GetEffectByID(effID) + curEffect = effSkill.GetEffectByID(effID, triggerWay) if not curEffect: continue - pyName = "PassiveEff_%s" % effID - callFunc = GameWorld.GetExecFunc(PassiveTrigger, "%s.%s" % (pyName, "DoBuffEffectLogic")) - if not callFunc: - continue - callFunc(turnFight, batObj, curBuff, curEffect, connSkill) + 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 GetTriggerPassiveValue(batObj, triggerType, tagObj=None, useSkill=None): ''' 获取触发被动的值,一般用于某种条件下才会产生的值,如xx情况下属性变化 或 xx情况下是否发生什么 @return: 触发的值,0-没有触发或本身触发的值为0;大于0-触发的具体值 -- Gitblit v1.8.0