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/PassiveTrigger/PassiveEff_6004.py | 40 ++++++++++++++++++++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py | 33 ++++++++++++++++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py | 11 +++-- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py | 16 ++++++-- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 1 5 files changed, 91 insertions(+), 10 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py index b11f819..59773b3 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py @@ -37,13 +37,40 @@ self._AffectBuffDict = {} # 被动buff {(触发方式, 有效来源):{buffID:[effID, ...], ...}, ...} return - def GetPassiveEffByTrigger(self, triggerWay, connSkillTypeID=0): + def GetPassiveEffByTrigger(self, triggerWay, connSkill=None, connSkillTypeID=0): '''获取可触发的效果列表,技能跟buff根据触发优先级按顺序触发,优先级越高越先执行,相同时技能优先 优先级之后有需要再扩展 @return: [["skill/buff", skillID/buffID, effIDList], ...] ''' effList = [] + if not connSkillTypeID and connSkill: + connSkillTypeID = connSkill.GetSkillTypeID() + + if connSkill: + skillID = connSkill.GetSkillID() + skillManager = self._batObj.GetSkillManager() + # 非对象身上的技能,读取本技能被动触发的效果,一般是主技能拆分的子技能 + if not skillManager.FindSkillByID(skillID): + effIDList = [] + for index in xrange(connSkill.GetEffectCount()): + effect = connSkill.GetEffect(index) + effectID = effect.GetEffectID() + if effectID == 0: + continue + triggerWay = effect.GetTriggerWay() + triggerSrc = effect.GetTriggerSrc() + if not triggerWay: + continue + if triggerWay == ChConfig.TriggerWay_CurSkillEff: + continue + if triggerSrc != ChConfig.TriggerSrc_SkillSelf: + # 仅添加本技能的 + continue + effIDList.append(effectID) + if effIDList: + effList.append(["skill", skillID, effIDList]) + # 优先取关联技能的 if connSkillTypeID and connSkillTypeID not in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_Buff, ChConfig.TriggerSrc_SkillSelf, ChConfig.TriggerSrc_BuffSelf]: # 技能 @@ -641,6 +668,7 @@ self._buffMgr = ObjPool.GetPoolMgr().acquire(BuffManager, self) self._passiveEffMgr = ObjPool.GetPoolMgr().acquire(PassiveEffManager, self) self._lastHurtValue = 0 + self._mainTagIDList = [] # 主技能目标ID列表,一般用于技能拆分成多个技能效果时,子技能可能会用到主技能的对象做逻辑 # 统计 self.hurtStat = 0 # 输出统计 @@ -832,6 +860,9 @@ def GetLastHurtValue(self): return self._lastHurtValue def SetLastHurtValue(self, lastHurtValue): self._lastHurtValue = lastHurtValue + def GetMainTagIDList(self): return self._mainTagIDList + def SetMainTagIDList(self, mainTagIDList): self._mainTagIDList = mainTagIDList + def StatHurtValue(self, hurtValue): ## 统计输出 self.hurtStat += hurtValue diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py index c21574c..8d63b64 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py @@ -4291,6 +4291,7 @@ PassiveEff_AddBuffLayerByWeight = 6001 # 根据权重随机添加buff层数 数值1-[[权重,层级], ...] PassiveEff_ChangeHurtType = 6002 # 变更伤害类型: 值1-伤害类型;值2-可附加验证处于xx状态 [状态1, 状态2, ...] PassiveEff_ChangeHurtMulti = 6003 # 变更伤害倍值(可增可减): 值1-变更倍值;值2-可附加验证处于xx状态 [状态1, 状态2, ...] +PassiveEff_AddSkillPer = 6004 # 增加本次技能万分比: 值1-增加的万分比;值2-可附加验证处于xx状态 [状态1, 状态2, ...] # 被动效果ID有触发值时就返回的 PassiveEffHappenValueList = [PassiveEff_ChangeHurtType] diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6004.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6004.py new file mode 100644 index 0000000..218145c --- /dev/null +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6004.py @@ -0,0 +1,40 @@ +#!/usr/bin/python +# -*- coding: GBK -*- +#------------------------------------------------------------------------------- +# +##@package Skill.PassiveTrigger.PassiveEff_6004 +# +# @todo:增加本次技能万分比 +# @author hxp +# @date 2025-09-17 +# @version 1.0 +# +# 详细描述: 增加本次技能万分比 +# +#------------------------------------------------------------------------------- +#"""Version = 2025-09-17 17:30""" +#------------------------------------------------------------------------------- + +import BattleObj +#import GameWorld + +def GetHappenValue(attacker, defender, curEffect, effSkill, **skillkwargs): + checkInStateList = curEffect.GetEffectValue(1) + if checkInStateList: + checkMainSkillTag = curEffect.GetEffectValue(2) + if checkMainSkillTag: + inState = False + objMgr = BattleObj.GetBatObjMgr() + for tagID in attacker.GetMainTagIDList(): + tagObj = objMgr.getBatObj(tagID) + if tagObj.CheckInState(checkInStateList): + inState = True + #GameWorld.DebugLog("主技能的目标在状态中! tagID=%s,%s" % (tagID, checkInStateList)) + break + if not inState: + #GameWorld.DebugLog("主技能的目标都不在状态中! tagID=%s,%s" % (attacker.GetMainTagIDList(), checkInStateList)) + return + else: + if not defender.CheckInState(checkInStateList): + return + return curEffect.GetEffectValue(0) 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 d8537a5..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 @@ -114,8 +114,7 @@ triggerWay = ChConfig.TriggerWay_CalcEffValue passiveEffMgr = atkObj.GetPassiveEffManager() - connSkillTypeID = connSkill.GetSkillTypeID() if connSkill else 0 - effInfoList = passiveEffMgr.GetPassiveEffByTrigger("%s_%s" % (triggerWay, calcEffID), connSkillTypeID) + effInfoList = passiveEffMgr.GetPassiveEffByTrigger("%s_%s" % (triggerWay, calcEffID), connSkill) if not effInfoList: return 0 @@ -130,6 +129,8 @@ 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) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py index 25b07f3..c571d8c 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py @@ -94,8 +94,14 @@ useSkill.SetBySkill(bySkill) curBatObj.ClearSkillTempAttr() + tagIDList = [] for tagObj in tagObjList: + tagIDList.append(tagObj.GetID()) tagObj.ClearSkillTempAttr() + + # 有功能分类的技能都认为是主技能 + if useSkill.GetFuncType(): + curBatObj.SetMainTagIDList(tagIDList) objID = curBatObj.GetID() useTag = "" @@ -448,7 +454,7 @@ skillID = useSkill.GetSkillID() for tagBatObj in useSkill.GetTagObjList(): - cureHP = CalcCureHP(curBatObj, tagBatObj, useSkill, largeNum=True) + cureHP = CalcCureHP(turnFight, curBatObj, tagBatObj, useSkill, largeNum=True) if cureHP <= 0: continue @@ -858,7 +864,7 @@ continue effID = curEffect.GetEffectID() - GameWorld.DebugLog("执行额外技能效果: %s, triggerWay=%s,missObjIDList=%s" % (effID, triggerWay, missObjIDList)) + GameWorld.DebugLog("◆执行额外技能效果: %s, triggerWay=%s,missObjIDList=%s" % (effID, triggerWay, missObjIDList)) if effID == 5010: # 额外技能效果 __doUseEnhanceSkill(turnFight, curObj, useSkill, curEffect, missObjIDList) @@ -1088,6 +1094,8 @@ dHP = defObj.GetHP() dDef = 0 if ignoreDef else defObj.GetDef() # 防守方防御力 + atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPer, curSkill) + aFinalDamPer = atkObj.GetBatAttrValue(ChConfig.AttrID_FinalDamPer) # 最终加成 dFinalDamPerDef = defObj.GetBatAttrValue(ChConfig.AttrID_FinalDamPerDef) # 最终减伤 @@ -1313,7 +1321,7 @@ TurnAttack.AddTurnObjCureHP(atkObj, atkObj, suckHP, cureHP) return -def CalcCureHP(userObj, tagObj, curSkill, largeNum=False): +def CalcCureHP(turnFight, userObj, tagObj, curSkill, largeNum=False): ''' 计算治疗值 ''' cureType = curSkill.GetCalcType() @@ -1322,7 +1330,7 @@ cureBaseValue = GetCalcBaseValue(cureType, userObj, tagObj) - #skillPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(userObj, None, curSkill, ChConfig.TriggerType_AddHP) + skillPer += TurnPassive.GetTriggerEffectValue(turnFight, userObj, tagObj, ChConfig.PassiveEff_AddSkillPer, curSkill) # 回合制 curePer = 0 # 治疗加成 -- Gitblit v1.8.0