//private CDamageInfo _damage = null; public override void AppliedFrom(IGameplayAbilityUnit instigator) { base.AppliedFrom(instigator); //buff自己销毁自己 //CBuff beh = CBuff.Create(m_meta.Behavior, m_owner.gameObject); //beh.Apply(from, to); }
/// <summary> /// target的分组是否匹配 /// </summary> protected bool IsTargetGroupMatch(IGameplayAbilityUnit target) { bool b = false; switch (MetaBase.TargetTeamRequire) { case CAbilityUnitTeamType.All: b = true; break; case CAbilityUnitTeamType.Me: b = (target == m_owner); break; case CAbilityUnitTeamType.Friend: b = m_owner.IsFriendTeam(target); break; case CAbilityUnitTeamType.Enemy: b = m_owner.IsEnemyTeam(target); break; } return(b); }
public override void Execute(IGameplayAbilityUnit instigator, IGameplayAbilityUnit victim) { base.Execute(instigator, victim); var sourceCtrl = victim as ActorController; var targetCtrl = instigator as ActorController; var source = sourceCtrl.Pawn as ActorEntity; var target = targetCtrl.Pawn as ActorEntity; var srcAttr = source.AttributeSet; var targAttr = target.AttributeSet; SwordDamagePacket damagePacket = new SwordDamagePacket(); //damagePacket.MinRawAttackPower damagePacket.TargetDodgeChance = targAttr.DodgeChance; //1. 计算无敌, 如果无敌就无伤 //2. 计算是否miss //2.1 先计算是否有无视闪避--必定命中 //2.2 产生随机数来判定是否miss float dodgeChance = m_rand.Next(); if (dodgeChance < damagePacket.TargetDodgeChance) { damagePacket.OutIsDodged = true; SendDamageEvent(); return; } //3. 计算攻击属性包 }
/// <summary> /// 给目标添加效果 /// </summary> public void ApplyGameplayEffectToTarget(CEffectMeta effectMeta, IGameplayAbilityUnit target) { if (target == null) { return; } target.AbilitySystem.ApplyGameplayEffectToSelf(effectMeta, m_owner); }
//普攻, 那只能对敌人使用 public override AffectDectectResult CanAffectOnTarget(IGameplayAbilityUnit target) { AffectDectectResult result = base.CanAffectOnTarget(target); if (result != AffectDectectResult.Success) { return(result); } return(AffectDectectResult.Success); }
/// <summary> /// 给自己添加效果, 要指定效果来源 /// </summary> private void ApplyGameplayEffectToSelf(CEffectMeta effectMeta, IGameplayAbilityUnit instigator) { var effect = GetSleepingEffectOnSelf(effectMeta); if (effect == null) { Debug.Log("Effect MUST NOT Null here. Check the code or config"); return; } effect.AppliedFrom(instigator); }
/// <summary> /// 对传入的目标施法 /// </summary> public AffectDectectResult TryActivateAbility(IGameplayAbilityUnit target) { AffectDectectResult result = CanAffectOnTarget(target); if (result != AffectDectectResult.Success) { ReportNotReady(); return(result); } m_target = target; Activate(); return(result); }
/// <summary> /// 给owner创建一个Effect组件, 并挂在Effect Child Layer身上 /// </summary> public static CEffect Create(string meta, IGameplayAbilityUnit owner) { CEffect eff = null; CEffectMeta emeta = CEffectMetaManager.GetMeta(meta); if (owner == null) { Debug.LogError("We can not get GameObject which effect attach on " + meta); return(null); } GameObject go = owner.EffectLayer; switch (emeta.Type) { case CEffectMeta.EffectType.LaunchMissle: eff = go.AddComponent <CEffectLaunchMissile>(); eff.EffectName = meta; break; case CEffectMeta.EffectType.Damage: eff = go.AddComponent <CEffectDamage>(); eff.EffectName = meta; break; case CEffectMeta.EffectType.ApplyBehaviour: eff = go.AddComponent <CEffectApplyBuff>(); eff.EffectName = meta; break; case CEffectMeta.EffectType.IssueOrder: eff = go.AddComponent <CEffectIssueOrder>(); eff.EffectName = meta; break; case CEffectMeta.EffectType.EnumArea: eff = go.AddComponent <CEffectEnumArea>(); eff.EffectName = meta; break; case CEffectMeta.EffectType.EffectSet: eff = go.AddComponent <CEffectSet>(); eff.EffectName = meta; break; } return(eff); }
/// <summary> /// 技能是否能够对目标施展 /// </summary> public virtual AffectDectectResult CanAffectOnTarget(IGameplayAbilityUnit target) { if (!CD_Ready) { return(AffectDectectResult.CDNotReady); } if (m_running) { return(AffectDectectResult.StillRunning); } if (target == null || target.InValid) { return(AffectDectectResult.TargetDeadOrNull); } bool b = IsTargetGroupMatch(target); if (!b) { return(AffectDectectResult.TargetGroupNotMatch); } b = IsActivationTagMatchForSelf(); if (!b) { return(AffectDectectResult.OwnerTagInvalid); } b = IsActivationTagMatchForTarget(target); if (!b) { return(AffectDectectResult.TargetTagInvalid); } float range2 = m_owner.GetSquaredXZDistanceTo_NoRadius(target); b = range2 <= (MetaBase.DectectRange * MetaBase.DectectRange); if (!b) { return(AffectDectectResult.OutOfRange); } return(AffectDectectResult.Success); }
public override AffectDectectResult CanAffectOnTarget(IGameplayAbilityUnit target) { AffectDectectResult result = base.CanAffectOnTarget(target); if (result != AffectDectectResult.Success) { return(result); } if (m_meta.Range > 0) { float dist = m_owner.GetSquaredXZDistanceTo_NoRadius(target); if (dist > (m_meta.Range * m_meta.Range)) { return(AffectDectectResult.OutOfRange); } } return(AffectDectectResult.Success); }
public override void AppliedFrom(IGameplayAbilityUnit instigator) { base.AppliedFrom(instigator); ApplyToPosition(m_owner.LocalPosition); }
protected bool IsActivationTagMatchForTarget(IGameplayAbilityUnit target) { return(false); }
/// <summary> /// 效果作用于某个坐标 /// </summary> public virtual void ApplyToPosition(Vector3 localPosition) { m_instigator = m_owner; m_targetLocalPos = localPosition; }
public void InitAbilityActorInfo(IGameplayAbilityUnit actor) { m_owner = actor; }
public virtual void AppliedFrom(IGameplayAbilityUnit instigator) { m_instigator = instigator; }
/// <summary> /// 使用已经选中的技能 /// </summary> public void Launch(IGameplayAbilityUnit target) { m_selectedAbility.TryActivateAbility(target); }
public void Launch(int index, IGameplayAbilityUnit target) { SelectAbility(0); Launch(target); }
/// <summary> /// 传入本技能的owner和avatar /// </summary> public void InitAbilityActorInfo(IGameplayAbilityUnit actor, IGameplayAbilityUnit avatar) { m_owner = actor; m_avatar = avatar; }
/// <summary> /// 两者是否敌人 /// </summary> public bool IsEnemyTeam(IGameplayAbilityUnit target) { ActorController ac = target as ActorController; return(m_pawn.IsEnemyTeam(ac.Pawn)); }
public float GetSquaredXZDistanceTo_NoRadius(IGameplayAbilityUnit target) { return(GetSquaredXZDistanceTo_NoRadius(target.LocalPosition)); }
/// <summary> /// victim 攻击 instigator /// </summary> public virtual void Execute(IGameplayAbilityUnit instigator, IGameplayAbilityUnit victim) { }