From 5b34b20562dab2b5e82b90be18285345057c12ce Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期二, 19 八月 2025 15:52:15 +0800 Subject: [PATCH] 129 【战斗】战斗系统-服务端(优化技能表字段,增加技能及buff常用配置字段;优化被动触发及效果配置方式;技能冷却、buff持续时长计算支持;持续性buff效果结算支持;pve默认玩家先手;战锤消耗仅普攻怒技消耗;) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py | 138 +++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 136 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..c1e7a9b 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,143 @@ 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, triggerType, connSkill=None): + ''' 触发被动效果,可能触发技能、buff,需根据优先级触发 + ''' + passiveEffMgr = batObj.GetPassiveEffManager() + effInfoList = passiveEffMgr.GetPassiveEffByTrigger(triggerType, connSkill=connSkill) + if not effInfoList: + return + # [["skill/buff", skillID/buffID, effIDList], ...] + GameWorld.DebugLog("触发被动: triggerType=%s,objID=%s,%s" % (triggerType, batObj.GetID(), effInfoList)) + for effInfo in effInfoList: + sign = effInfo[0] + if sign == "skill": + skillID, effIDList = effInfo[1:] + __doTriggerPassiveEffectBySkill(turnFight, batObj, skillID, effIDList, connSkill) + + elif sign == "buff": + buffID, effIDList = effInfo[1:] + __doTriggerPassiveEffectByBuff(turnFight, batObj, 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: + return + skillData = curBuff.GetSkillData() + + for effID in effIDList: + curEffect = skillData.GetEffectByID(effID) + 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) + + return + +def GetTriggerPassiveValue(batObj, triggerType, tagObj=None, useSkill=None): + ''' 获取触发被动的值,一般用于某种条件下才会产生的值,如xx情况下属性变化 或 xx情况下是否发生什么 + @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 -- Gitblit v1.8.0