129 【战斗】战斗系统-服务端(孙策全部技能; 增加技能类型11-额外攻击;增加效果5505 6026 6027; 优化5504效果支持配置多个状态;)
| | |
| | | Def_SkillType_Revive , #复活 8
|
| | | Def_SkillType_Increment , #增值技能(不可清除)9
|
| | | Def_SkillType_Halo , #光环技能 10
|
| | | Def_SkillType_Equip , #装备技能 11
|
| | | Def_SkillType_AtkEx , #额外攻击 (一般用于额外造成的伤害,区分直接攻击)11
|
| | | Def_SkillType_Area , #场景技能(buff) 12
|
| | | Def_SkillType_Summon , #召唤 13
|
| | | Def_SkillType_Action , #影响行为BUFF 14
|
| | |
| | | #Def_SkillType_Revive : IPY_GameWorld.bfIncBuff, #复活 8
|
| | | Def_SkillType_Increment : IPY_GameWorld.bfIncBuff, #增值技能(不可清除)9
|
| | | Def_SkillType_Aura : IPY_GameWorld.bfAura , #光环技能 10
|
| | | Def_SkillType_Equip : IPY_GameWorld.bfEquipBuff,#装备技能 11
|
| | | #Def_SkillType_Equip : IPY_GameWorld.bfEquipBuff,#装备技能 11
|
| | | Def_SkillType_Area : IPY_GameWorld.bfMapBuff , #场景技能(buff) 12
|
| | | Def_SkillType_Action : IPY_GameWorld.bfActionBuff , #影响行为BUFF 14
|
| | |
|
| | |
| | | TriggerWay_WhenDie, # 死亡时(自己) 43
|
| | | TriggerWay_EnemyAction, # 敌方行动后 44
|
| | | TriggerWay_FriendAction, # 友方行动后(包含自己) 45
|
| | | ) = range(1, 1 + 45)
|
| | | TriggerWay_HurtTag, # 对目标造成伤害时 46
|
| | | ) = range(1, 1 + 46)
|
| | |
|
| | | # 不加载的被动触发方式,一般用于本技能固定触发逻辑用的
|
| | | TriggerWayNoLoadList = [TriggerWay_CurSkillEff, TriggerWay_CurSkillEffLst]
|
| | |
| | | PassiveEff_ChangeHurtTypeByBuff = 6023 # 变更本次伤害类型(可验证由xx状态buff触发的)
|
| | | PassiveEff_ReduceLayer5023 = 6024 # 减少5023效果所需的buff状态层数
|
| | | PassiveEff_AddCureMulti = 6025 # 提升治疗技能最终治疗效果(根据身上buff状态层数)
|
| | | PassiveEff_AddCheckPer5505 = 6026 # 增减5505效果验证生命百分比(根据目标身上buff状态层数)
|
| | | PassiveEff_AddHurtAtkPerMax = 6027 # 增加技能最大攻击万分比限制
|
| | |
|
| | | # 被动效果ID有触发值时就返回的
|
| | | PassiveEffHappenValueList = [PassiveEff_ChangeHurtType, PassiveEff_ImmuneControlBuff, PassiveEff_MustSuperHit, PassiveEff_SkillInvalid,
|
| File was renamed from ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5050.py |
| | |
| | | # -*- coding: GBK -*-
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | ##@package Skill.PassiveTrigger.PassiveEff_5050
|
| | | ##@package Skill.PassiveTrigger.PassiveEff_5500
|
| | | #
|
| | | # @todo:触发释放技能(按累计能量达到时释放)
|
| | | # @author hxp
|
| | |
| | |
|
| | | import TurnSkill
|
| | | import IpyGameDataPY
|
| | | import GameWorld
|
| | |
|
| | | def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs):
|
| | | skillID = curEffect.GetEffectValue(0) # 技能ID,为0时释放本技能
|
| | | checkState = curEffect.GetEffectValue(1) # 可附加验证目标处于xx状态
|
| | | checkStateList = curEffect.GetEffectValue(1) # 可附加验证目标处于xx状态
|
| | | checkOwner = curEffect.GetEffectValue(2) # 是否只限归属自己的状态buff
|
| | |
|
| | | if checkState:
|
| | | if checkStateList:
|
| | | ownerID = batObj.GetID() if checkOwner else 0
|
| | | if not tagObj.GetBuffManager().FindBuffByState(checkState, ownerID):
|
| | | GameWorld.DebugLogEx("目标不在状态下不触发: tagID=%s,checkState=%s,ownerID=%s", tagObj.GetID(), checkState, ownerID)
|
| | | inState = False
|
| | | tagBuffMgr = tagObj.GetBuffManager()
|
| | | for checkState in checkStateList:
|
| | | if tagBuffMgr.FindBuffByState(checkState, ownerID):
|
| | | inState = True
|
| | | break
|
| | | if not inState:
|
| | | #GameWorld.DebugLogEx("目标不在状态下不触发: tagID=%s,checkStateList=%s,ownerID=%s", tagObj.GetID(), checkStateList, ownerID)
|
| | | return
|
| | |
|
| | | if not skillID:
|
| New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | ##@package Skill.PassiveTrigger.PassiveEff_5505
|
| | | #
|
| | | # @todo:触发释放技能(验证目标生命)
|
| | | # @author hxp
|
| | | # @date 2025-12-16
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: 触发释放技能(验证目标生命)
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2025-12-16 19:30"""
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | import TurnSkill
|
| | | import TurnPassive
|
| | | import IpyGameDataPY
|
| | | import GameWorld
|
| | | import ChConfig
|
| | |
|
| | | def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs):
|
| | | skillID = curEffect.GetEffectValue(0) # 技能ID,为0时释放本技能
|
| | | checkTagHPInfo = curEffect.GetEffectValue(1) # 可附加验证目标生命值[计算方式, 百分比]
|
| | | if checkTagHPInfo:
|
| | | checkType, checkHPPer = checkTagHPInfo
|
| | | tagHP = tagObj.GetHP()
|
| | | tagHPMax = tagObj.GetMaxHP()
|
| | | nowPer = tagHP / float(tagHPMax) * 100
|
| | | |
| | | effSkillTypeID = effSkill.GetSkillTypeID()
|
| | | checkHPPer += TurnPassive.GetTriggerEffectValue(turnFight, batObj, tagObj, ChConfig.PassiveEff_AddCheckPer5505, connSkillTypeID=effSkillTypeID, **kwargs)
|
| | | |
| | | GameWorld.DebugLogEx("5505验证目标生命! tagHP=%s/%s,nowPer=%s,checkHPPer=%s,checkType=%s,effSkillTypeID=%s", |
| | | tagHP, tagHPMax, nowPer, checkHPPer, checkType, effSkillTypeID)
|
| | | |
| | | # 小于等于
|
| | | if checkType == 0:
|
| | | if nowPer > checkHPPer:
|
| | | return
|
| | | # 大于等于
|
| | | else:
|
| | | if nowPer < checkHPPer:
|
| | | 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):
|
| | | effSkill = effBuff.GetSkillData().GetIpyData()
|
| | | return DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs)
|
| New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | ##@package Skill.PassiveTrigger.PassiveEff_6026
|
| | | #
|
| | | # @todo:增减5505效果验证生命百分比(根据目标身上buff状态层数)
|
| | | # @author hxp
|
| | | # @date 2025-12-16
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: 增减5505效果验证生命百分比(根据目标身上buff状态层数)
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2025-12-16 19:30"""
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | def GetHappenValue(attacker, defender, curEffect, effSkill, effBuff, connSkill, **skillkwargs):
|
| | | buffStateList = curEffect.GetEffectValue(0) # 目标buff [状态1, 状态2, ...]
|
| | | addPer = curEffect.GetEffectValue(1) # 每层变化百分比(不需要验证状态则为固定值)
|
| | | calcType = curEffect.GetEffectValue(2) # 变化是增还是减: 1-增;2-减
|
| | | |
| | | if buffStateList:
|
| | | layerTotal = 0
|
| | | buffMgr = defender.GetBuffManager()
|
| | | for buffState in buffStateList:
|
| | | for buff in buffMgr.FindBuffListByState(buffState):
|
| | | layerTotal += buff.GetLayer()
|
| | | addTotal = layerTotal * addPer
|
| | | else:
|
| | | addTotal = addPer
|
| | | |
| | | if calcType == 2:
|
| | | addTotal = -addTotal
|
| | | |
| | | return addTotal
|
| New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | ##@package Skill.PassiveTrigger.PassiveEff_6027
|
| | | #
|
| | | # @todo:增加技能最大攻击万分比限制
|
| | | # @author hxp
|
| | | # @date 2025-12-16
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: 增加技能最大攻击万分比限制
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2025-12-16 19:30"""
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | def GetHappenValue(attacker, defender, curEffect, effSkill, effBuff, connSkill, **skillkwargs):
|
| | | return curEffect.GetEffectValue(0) |
| | |
| | | if not effSkill:
|
| | | return
|
| | |
|
| | | kwargs["triggerWay"] = triggerWay
|
| | | kwargs["byTriggerWay"] = triggerWay
|
| | | for effID in effIDList:
|
| | | curEffect = effSkill.GetEffectByID(effID, triggerWay)
|
| | | if not curEffect:
|
| | |
| | | return
|
| | | skillData = effBuff.GetSkillData()
|
| | |
|
| | | kwargs["triggerWay"] = triggerWay
|
| | | kwargs["byTriggerWay"] = triggerWay
|
| | | for effID in effIDList:
|
| | | curEffect = skillData.GetEffectByID(effID, triggerWay)
|
| | | if not curEffect:
|
| | |
| | | if not skillID:
|
| | | return
|
| | |
|
| | | triggerWay = kwargs["triggerWay"] if "triggerWay" in kwargs else 0
|
| | | byTriggerWay = kwargs["byTriggerWay"] if "byTriggerWay" in kwargs else 0 # 不使用参数名 triggerWay, 防止传递过程中参数混乱
|
| | | if not curBatObj.IsAlive():
|
| | | if useSkill.GetSkillType() == ChConfig.Def_SkillType_Revive and useSkill.GetTagAim() == ChConfig.SkillTagAim_Self:
|
| | | GameWorld.DebugLogEx("死亡时使用复活自己的技能! skillID=%s", skillID)
|
| | | else:
|
| | | if triggerWay in ChConfig.DeadCanTriggerWayList:
|
| | | GameWorld.DebugLogEx("死亡可触发的方式触发技能可释放! skillID=%s,triggerWay=%s", skillID, triggerWay)
|
| | | if byTriggerWay in ChConfig.DeadCanTriggerWayList:
|
| | | GameWorld.DebugLogEx("死亡可触发的方式触发技能可释放! skillID=%s,byTriggerWay=%s", skillID, byTriggerWay)
|
| | | elif batType == ChConfig.TurnBattleType_Enhance:
|
| | | GameWorld.DebugLogEx("死亡状态额外技能不限制,主技能能放的话也就能放! skillID=%s", skillID)
|
| | | else:
|
| | |
| | | useSkill.SetBatType(batType)
|
| | | useSkill.SetBySkill(bySkill)
|
| | | useSkill.SetByBuff(byBuff)
|
| | | useSkill.SetByTriggerWay(triggerWay)
|
| | | useSkill.SetByTriggerWay(byTriggerWay)
|
| | |
|
| | | isTurnNormalSkill = SkillCommon.isTurnNormalSkill(useSkill)
|
| | | if isTurnNormalSkill:
|
| | |
| | | # 掉血时
|
| | | if tagID in beHurtObjIDList:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeHurt, curObj, connSkill=useSkill)
|
| | | #TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_HurtTag, tagObj, connSkill=useSkill) 暂时用不到先屏蔽
|
| | |
|
| | | # 受到任意效果时(除直接攻击外的任意效果,如buff、dot、治疗、额外怒技)
|
| | | if not isAttackDirect:
|
| | |
| | |
|
| | | hurtAtkPerMax = curSkill.GetHurtAtkPerMax() # 最大万分比,限制最终伤害不超过攻击力万分率
|
| | | if hurtAtkPerMax:
|
| | | hurtAtkPerMax += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddHurtAtkPerMax, curSkill)
|
| | | aAtk = atkObj.GetAtk()
|
| | | hurtValueMax = aAtk * hurtAtkPerMax / 10000.0
|
| | | hurtValue = min(hurtValue, hurtValueMax)
|