129 【战斗】战斗系统-服务端(庞统所有技能;目标范围增加8-继承主技能友军;目标细分增加9-仅流血目标;增加触发方式48 49 50;增效效果5506;)
| | |
| | | def GetLayerMax(self): return self._skillData.GetLayerMax()
|
| | | def GetBuffRepeat(self): return self._skillData.GetBuffRepeat() # Buff叠加规则
|
| | | def GetDispersedLimit(self): return self._skillData.GetDispersedLimit() # 驱散限制
|
| | | def GetBuffRetain(self): return self._ipyData.GetBuffRetain()
|
| | | def GetBuffRetain(self): return self._skillData.GetBuffRetain()
|
| | | def GetFightPower(self): return self._skillData.GetFightPower()
|
| | |
|
| | | ## ---------------------------------- 非技能表内容 ----------------------------------
|
| | |
| | | SkillTagAim_Self, # 自己 5
|
| | | SkillTagAim_MainSkill, # 继承主技能目标 6
|
| | | SkillTagAim_MainSkillEx, # 继承主技能目标一次性处理 7
|
| | | ) = range(8)
|
| | | SkillTagAim_MainSkillFriend, # 继承主技能友军 8
|
| | | ) = range(9)
|
| | |
|
| | | # 技能目标 - 细分
|
| | | (
|
| | |
| | | SkillTagAffect_Burn, # 灼烧/玄火目标优先 6
|
| | | SkillTagAffect_PoisonCure, # 仅焚血(毒奶)目标 7
|
| | | SkillTagAffect_DamShield, # 承伤盾目标优先 8
|
| | | ) = range(9)
|
| | | SkillTagAffect_Bleeding, # 仅流血目标 9
|
| | | ) = range(10)
|
| | |
|
| | | #技能施法目标
|
| | | Def_UseSkillAim_Type = 3
|
| | |
| | | TriggerWay_FriendAction, # 友方行动后(包含自己) 45
|
| | | TriggerWay_HurtTag, # 对目标造成伤害时 46
|
| | | TriggerWay_BeControlledHard, # 受控时(硬控) 47
|
| | | ) = range(1, 1 + 47)
|
| | | TriggerWay_FriendCombo, # 友军连击时(包含自己) 48
|
| | | TriggerWay_FriendPursue, # 友军追击时(包含自己) 49
|
| | | TriggerWay_FriendAttackOverDirectOne, # 友方使用技能后(多目标仅触发一次,包含自己) 50
|
| | | ) = range(1, 1 + 50)
|
| | |
|
| | | # 不加载的被动触发方式,一般用于本技能固定触发逻辑用的
|
| | | TriggerWayNoLoadList = [TriggerWay_CurSkillEff, TriggerWay_CurSkillEffLst]
|
| | |
| | | def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs):
|
| | | skillID = curEffect.GetEffectValue(0) # 技能ID,为0时释放本技能
|
| | | setLayerCnt = curEffect.GetEffectValue(1) # 指定buff层级
|
| | | byTagStateList = curEffect.GetEffectValue(2) # 或根据目标xx状态 [状态1, 状态2, ...]总层级
|
| | | if byTagStateList:
|
| | | layerTotal = 0
|
| | | tagBuffMgr = tagObj.GetBuffManager()
|
| | | for index in range(tagBuffMgr.GetBuffCount()):
|
| | | buff = tagBuffMgr.GetBuffByIndex(index)
|
| | | skillData = buff.GetSkillData()
|
| | | if skillData.GetCurBuffState() not in byTagStateList:
|
| | | continue
|
| | | layerTotal += buff.GetLayer()
|
| | | setLayerCnt = layerTotal
|
| | | |
| | | if setLayerCnt <= 0:
|
| | | return
|
| | | |
| | | if not skillID:
|
| | | passiveSkill = effSkill
|
| | | else:
|
| New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | ##@package Skill.PassiveTrigger.PassiveEff_5506
|
| | | #
|
| | | # @todo:触发释放技能(验证目标状态层级)
|
| | | # @author hxp
|
| | | # @date 2025-12-18
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: 触发释放技能(验证目标状态层级)
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2025-12-18 17:30"""
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | import TurnSkill
|
| | | import GameWorld
|
| | | import IpyGameDataPY
|
| | | import BattleObj
|
| | | import TurnBuff
|
| | |
|
| | | def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs):
|
| | | if not tagObj:
|
| | | return
|
| | | |
| | | skillID = curEffect.GetEffectValue(0) # 技能ID,为0时释放本技能
|
| | | checkStateList = curEffect.GetEffectValue(1) # 可附加验证目标处于xx状态
|
| | | needLayers = curEffect.GetEffectValue(2) # 达到x层时才触发
|
| | | isDelBuff = curEffect.GetEffectValue(3) # 层数不足时是否删除释放技能对应buff
|
| | | |
| | | layerTotal = 0
|
| | | tagBuffMgr = tagObj.GetBuffManager()
|
| | | for index in range(tagBuffMgr.GetBuffCount()):
|
| | | buff = tagBuffMgr.GetBuffByIndex(index)
|
| | | skillData = buff.GetSkillData()
|
| | | if skillData.GetCurBuffState() not in checkStateList:
|
| | | continue
|
| | | layerTotal += buff.GetLayer()
|
| | | |
| | | if layerTotal < needLayers:
|
| | | GameWorld.DebugLogEx("buff状态总层数不足不触发5506! checkStateList=%s,layerTotal=%s < %s,isDelBuff=%s", checkStateList, layerTotal, needLayers, isDelBuff)
|
| | | if isDelBuff:
|
| | | delBuffSkillID = skillID if skillID else effSkill.GetSkillID()
|
| | | if not delBuffSkillID:
|
| | | return
|
| | | buff = tagBuffMgr.FindBuffBySkillID(delBuffSkillID)
|
| | | if buff:
|
| | | TurnBuff.DoBuffDel(turnFight, tagObj, buff, connSkill)
|
| | | return
|
| | | |
| | | if not skillID:
|
| | | passiveSkill = effSkill
|
| | | else:
|
| | | passiveSkill = IpyGameDataPY.GetIpyGameData("Skill", skillID)
|
| | | if not passiveSkill:
|
| | | return
|
| | | effectID = curEffect.GetEffectID()
|
| | | effSkillID = effSkill.GetSkillID()
|
| | | return TurnSkill.OnUsePassiveSkill(turnFight, batObj, tagObj, passiveSkill, connSkill, effSkillID, effectID, connBuff, **kwargs)
|
| | |
|
| | | def DoBuffEffectLogic(turnFight, batObj, tagObj, effBuff, curEffect, connSkill, connBuff, **kwargs):
|
| | | ownerID = effBuff.GetOwnerID()
|
| | | if not ownerID:
|
| | | return
|
| | | buffOwner = BattleObj.GetBatObjMgr().getBatObj(ownerID)
|
| | | if not buffOwner:
|
| | | return
|
| | | effSkill = effBuff.GetSkillData().GetIpyData()
|
| | | return DoSkillEffectLogic(turnFight, buffOwner, batObj, effSkill, curEffect, connSkill, connBuff, **kwargs)
|
| | |
| | | for aimObj in aimObjList[::-1]:
|
| | | if not aimObj.CheckInState(ChConfig.BatObjState_PoisonCure):
|
| | | aimObjList.remove(aimObj)
|
| | | |
| | | # 仅流血目标
|
| | | elif tagAffect == ChConfig.SkillTagAffect_Bleeding:
|
| | | atkBackTagFrist = False
|
| | | for aimObj in aimObjList[::-1]:
|
| | | if not aimObj.CheckInState(ChConfig.BatObjState_Bleeding):
|
| | | aimObjList.remove(aimObj)
|
| | | |
| | | else:
|
| | | # 范围目标超过个数,则随机取
|
| | | if tagCount and len(aimObjList) > tagCount:
|
| | |
| | | return useSkill
|
| | | return
|
| | |
|
| | | def DoBeAttackResult(turnFight, curObj, useSkill, curBuff=None):
|
| | | def DoBeAttackResult(turnFight, curObj, useSkill, timeBuff=None):
|
| | | '''被攻击结果
|
| | | @param curObj: 施法方或buff归属方
|
| | | @param timeBuff: 持续结算的buff,如持续攻击、持续治疗等
|
| | | '''
|
| | |
|
| | | #curID = curObj.GetID()
|
| | | isUseSkill = False if curBuff else True # buff的视为持续性的,否则为直接使用技能的攻击结果
|
| | | isUseSkill = False if timeBuff else True # buff的视为持续性的,否则为直接使用技能的攻击结果
|
| | | isTurnNormalSkill = SkillCommon.isTurnNormalSkill(useSkill)
|
| | | isAngerSkill = SkillCommon.isAngerSkill(useSkill)
|
| | |
|
| | |
| | | triggerOne = False
|
| | | batType = useSkill.GetBatType()
|
| | | isAttackDirect = (isUseSkill and SkillCommon.isAttackDirectSkill(useSkill)) # 是否直接攻击
|
| | | curBatLineup = None
|
| | | for tagObj in tagObjListAll:
|
| | | tagID = tagObj.GetID()
|
| | |
|
| | |
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_AtkBack, tagObj, connSkill=useSkill)
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeAtkBack, curObj, connSkill=useSkill)
|
| | |
|
| | | |
| | | # 敌友方
|
| | | if isAttackDirect or batType in [ChConfig.TurnBattleType_Combo, ChConfig.TurnBattleType_Pursue]:
|
| | | if not curBatLineup:
|
| | | curBatLineup = curObj.GetBatLineup()
|
| | | for lineupObjID in curBatLineup.posObjIDDict.values():
|
| | | lineupObj = batObjMgr.getBatObj(lineupObjID)
|
| | | if not lineupObj.IsAlive():
|
| | | continue
|
| | | |
| | | # 直接攻击
|
| | | if isAttackDirect:
|
| | | if not triggerOne:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendAttackOverDirectOne, tagObj, connSkill=useSkill, byFriendObj=curObj)
|
| | | |
| | | # 连击
|
| | | if batType == ChConfig.TurnBattleType_Combo:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendCombo, tagObj, connSkill=useSkill, byFriendObj=curObj)
|
| | | |
| | | # 追击
|
| | | elif batType == ChConfig.TurnBattleType_Pursue:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendPursue, tagObj, connSkill=useSkill, byFriendObj=curObj)
|
| | | |
| | | triggerOne = True # 设置已经触发过一次
|
| | |
|
| | | # 验证是否结算,最后处理
|
| | |
| | | return
|
| | | passiveTagObjList = connSkill.GetTagObjList()
|
| | | isOK = OnUseSkill(turnFight, batObj, passiveSkill, passiveTagObjList, batType=ChConfig.TurnBattleType_Passive, bySkill=connSkill, byBuff=connBuff, **kwargs)
|
| | | elif tagAim == ChConfig.SkillTagAim_MainSkillFriend:
|
| | | if "byFriendObj" not in kwargs:
|
| | | return
|
| | | byFriendObj = kwargs["byFriendObj"]
|
| | | passiveTagObjList = [byFriendObj]
|
| | | GameWorld.DebugLogEx("被动触发技能,针对来源友军! effSkillID=%s,effectID=%s,passiveSkillID=%s,bySkillID=%s,byFriendID=%s", |
| | | effSkillID, effectID, passiveSkillID, bySkillID, byFriendObj.GetID())
|
| | | isOK = OnUseSkill(turnFight, batObj, passiveSkill, passiveTagObjList, batType=ChConfig.TurnBattleType_Passive, bySkill=connSkill, byBuff=connBuff, **kwargs)
|
| | | else:
|
| | | GameWorld.DebugLogEx("被动触发技能,重新锁定目标! effSkillID=%s,effectID=%s,passiveSkillID=%s,bySkillID=%s", effSkillID, effectID, passiveSkillID, bySkillID)
|
| | | isOK = OnUseSkill(turnFight, batObj, passiveSkill, batType=ChConfig.TurnBattleType_Passive, bySkill=connSkill, byBuff=connBuff, **kwargs)
|