From c35e176a3b05f745600c6e60f168313d2b9e7b30 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期三, 17 九月 2025 12:00:19 +0800 Subject: [PATCH] 129 【战斗】战斗系统-服务端(司马懿技能;增加按层级结算持续buff效果5003;增加非按攻击力计算伤害支持;技能伤害增加可限制最大攻击力百分比上限配置;) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py | 165 ++++++++++++++++++++++++++----------------------------- 1 files changed, 78 insertions(+), 87 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 6dd05ed..d8537a5 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py @@ -82,20 +82,20 @@ def __doTriggerPassiveEffectByBuff(turnFight, batObj, tagObj, triggerWay, buffID, effIDList, connSkill=None): buffMgr = batObj.GetBuffManager() - curBuff = buffMgr.GetBuff(buffID) - if not curBuff: + effBuff = buffMgr.GetBuff(buffID) + if not effBuff: return - skillData = curBuff.GetSkillData() + skillData = effBuff.GetSkillData() for effID in effIDList: curEffect = skillData.GetEffectByID(effID, triggerWay) if not curEffect: continue - DoBuffEffectLogic(turnFight, batObj, tagObj, curBuff, curEffect, connSkill) + DoBuffEffectLogic(turnFight, batObj, tagObj, effBuff, curEffect, connSkill) return -def DoBuffEffectLogic(turnFight, batObj, tagObj, curBuff, curEffect, connSkill): +def DoBuffEffectLogic(turnFight, batObj, tagObj, effBuff, curEffect, connSkill): effID = curEffect.GetEffectID() if not effID: return @@ -103,89 +103,80 @@ callFunc = GameWorld.GetExecFunc(PassiveTrigger, "%s.%s" % (pyName, "DoBuffEffectLogic")) if not callFunc: return - callFunc(turnFight, batObj, tagObj, curBuff, curEffect, connSkill) + 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 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