예제 #1
0
        public static AttackData CreateAttackDataFromAttackProperty(BaseActor from, ConfigEntityAttackProperty attackProperty, ConfigEntityAttackEffect attackEffect, ConfigEntityCameraShake cameraShake)
        {
            AttackData data = new AttackData();

            if (from is AvatarActor)
            {
                AvatarActor actor = (AvatarActor)from;
                data.attackCategoryTag      = attackProperty.CategoryTagCombined;
                data.attackerClass          = actor.config.CommonArguments.Class;
                data.attackerNature         = (EntityNature)actor.avatarDataItem.Attribute;
                data.attackerCategory       = 3;
                data.attackerAniDamageRatio = attackProperty.AniDamageRatio;
                data.frameHalt                       = attackProperty.FrameHalt;
                data.hitType                         = attackProperty.HitType;
                data.hitEffect                       = attackProperty.HitEffect;
                data.hitEffectAux                    = attackProperty.HitEffectAux;
                data.attackerLevel                   = (int)actor.level;
                data.retreatVelocity                 = attackProperty.RetreatVelocity;
                data.attackerCritChance              = ((actor.critical + actor.GetProperty("Actor_CriticalDelta")) * (1f + actor.GetProperty("Actor_CriticalRatio"))) / ((float)(0x4b + (actor.level * 5)));
                data.attackerCritDamageRatio         = 2f;
                data.attackerAttackValue             = (float)actor.attack;
                data.attackerAttackPercentage        = attackProperty.DamagePercentage;
                data.attackerAddedAttackValue        = attackProperty.AddedDamageValue;
                data.attackerNormalDamage            = attackProperty.NormalDamage;
                data.attackerNormalDamagePercentage  = attackProperty.NormalDamagePercentage;
                data.addedAttackerNormalDamageRatio  = actor.GetProperty("Actor_NormalAttackRatio");
                data.attackerFireDamage              = attackProperty.FireDamage;
                data.attackerFireDamagePercentage    = attackProperty.FireDamagePercentage;
                data.addedAttackerFireDamageRatio    = actor.GetProperty("Actor_FireAttackRatio");
                data.attackerThunderDamage           = attackProperty.ThunderDamage;
                data.attackerThunderDamagePercentage = attackProperty.ThunderDamagePercentage;
                data.addedAttackerThunderDamageRatio = actor.GetProperty("Actor_ThunderAttackRatio");
                data.attackerIceDamage               = attackProperty.IceDamage;
                data.attackerIceDamagePercentage     = attackProperty.IceDamagePercentage;
                data.addedAttackerIceDamageRatio     = actor.GetProperty("Actor_IceAttackRatio");
                data.attackerAlienDamage             = attackProperty.AlienDamage;
                data.attackerAlienDamagePercentage   = attackProperty.AlienDamagePercentage;
                data.addedAttackerAlienDamageRatio   = actor.GetProperty("Actor_AllienAttackRatio");
                data.killEffect                      = attackProperty.KillEffect;
                data.hitEffectPattern                = AttackResult.HitEffectPattern.Normal;
                data.isInComboCount                  = attackProperty.IsInComboCount;
                data.isAnimEventAttack               = attackProperty.IsAnimEventAttack;
                data.noBreakFrameHaltAdd             = attackProperty.NoBreakFrameHaltAdd;
                data.attackEffectPattern             = attackEffect;
                if (data.attackEffectPattern == null)
                {
                    data.attackEffectPattern = (data.attackerAniDamageRatio < 0.8f) ? InLevelData.InLevelMiscData.DefaultAvatarAttackSmallEffect : InLevelData.InLevelMiscData.DefaultAvatarAttackBigEffect;
                }
                if (Singleton <AvatarManager> .Instance.IsLocalAvatar(actor.runtimeID))
                {
                    data.attackCameraShake = cameraShake;
                }
                data.attackerAniDamageRatio   += actor.GetProperty("Actor_AniDamageDelta");
                data.attackerCritChance       += actor.GetProperty("Actor_CriticalChanceDelta");
                data.attackerCritDamageRatio  += actor.GetProperty("Actor_CriticalDamageRatio");
                data.attackerAttackValue       = (data.attackerAttackValue + actor.GetProperty("Actor_AttackDelta")) * (1f + actor.GetProperty("Actor_AttackRatio"));
                data.addedDamageRatio          = actor.GetProperty("Actor_AddedDamageRatio");
                data.addedAttackRatio          = actor.GetProperty("Actor_AddedAttackRatio");
                data.attackerShieldDamageRatio = 1f + actor.GetProperty("Actor_ShieldDamageRatio");
                data.attackerShieldDamageDelta = actor.GetProperty("Actor_ShieldDamageDelta");
                data.retreatVelocity          *= 1f + actor.GetProperty("Actor_RetreatRatio");
            }
            else if (from is MonsterActor)
            {
                MonsterActor actor2 = (MonsterActor)from;
                data.attackCategoryTag      = attackProperty.CategoryTagCombined;
                data.attackerClass          = actor2.config.CommonArguments.Class;
                data.attackerNature         = (EntityNature)actor2.metaConfig.nature;
                data.attackerCategory       = 4;
                data.attackerAniDamageRatio = attackProperty.AniDamageRatio;
                data.frameHalt                       = attackProperty.FrameHalt;
                data.hitType                         = attackProperty.HitType;
                data.hitEffect                       = attackProperty.HitEffect;
                data.hitEffectAux                    = attackProperty.HitEffectAux;
                data.hitEffectPattern                = AttackResult.HitEffectPattern.Normal;
                data.retreatVelocity                 = attackProperty.RetreatVelocity;
                data.attackerLevel                   = (int)actor2.level;
                data.attackerAttackValue             = (float)actor2.attack;
                data.attackerAttackPercentage        = attackProperty.DamagePercentage;
                data.attackerAddedAttackValue        = attackProperty.AddedDamageValue;
                data.attackerNormalDamage            = attackProperty.NormalDamage;
                data.attackerNormalDamagePercentage  = attackProperty.NormalDamagePercentage;
                data.addedAttackerNormalDamageRatio  = actor2.GetProperty("Actor_NormalAttackRatio");
                data.attackerFireDamage              = attackProperty.FireDamage;
                data.attackerFireDamagePercentage    = attackProperty.FireDamagePercentage;
                data.addedAttackerFireDamageRatio    = actor2.GetProperty("Actor_FireAttackRatio");
                data.attackerThunderDamage           = attackProperty.ThunderDamage;
                data.attackerThunderDamagePercentage = attackProperty.ThunderDamagePercentage;
                data.addedAttackerThunderDamageRatio = actor2.GetProperty("Actor_ThunderAttackRatio");
                data.attackerIceDamage               = attackProperty.IceDamage;
                data.attackerIceDamagePercentage     = attackProperty.IceDamagePercentage;
                data.addedAttackerIceDamageRatio     = actor2.GetProperty("Actor_IceAttackRatio");
                data.attackerAlienDamage             = attackProperty.AlienDamage;
                data.attackerAlienDamagePercentage   = attackProperty.AlienDamagePercentage;
                data.addedAttackerAlienDamageRatio   = actor2.GetProperty("Actor_AllienAttackRatio");
                data.noTriggerEvadeAndDefend         = attackProperty.NoTriggerEvadeAndDefend;
                data.attackEffectPattern             = attackEffect;
                if (data.attackEffectPattern == null)
                {
                    data.attackEffectPattern = InLevelData.InLevelMiscData.DefaultMonsterAttackEffect;
                }
                data.attackCameraShake         = cameraShake;
                data.isAnimEventAttack         = attackProperty.IsAnimEventAttack;
                data.attackerAniDamageRatio   += actor2.GetProperty("Actor_AniDamageDelta");
                data.attackerAttackValue       = (data.attackerAttackValue + actor2.GetProperty("Actor_AttackDelta")) * (1f + actor2.GetProperty("Actor_AttackRatio"));
                data.addedAttackRatio          = actor2.GetProperty("Actor_AddedAttackRatio");
                data.attackerShieldDamageRatio = 1f + actor2.GetProperty("Actor_ShieldDamageRatio");
                data.attackerShieldDamageDelta = actor2.GetProperty("Actor_ShieldDamageDelta");
                data.retreatVelocity          *= 1f + actor2.GetProperty("Actor_RetreatRatio");
            }
            else if (from is BaseAbilityActor)
            {
                BaseAbilityActor actor3 = (BaseAbilityActor)from;
                data.attackCategoryTag      = attackProperty.CategoryTagCombined;
                data.attackerClass          = EntityClass.Default;
                data.attackerNature         = EntityNature.Pure;
                data.attackerCategory       = 7;
                data.attackerAniDamageRatio = attackProperty.AniDamageRatio;
                data.frameHalt                       = attackProperty.FrameHalt;
                data.hitType                         = attackProperty.HitType;
                data.hitEffect                       = attackProperty.HitEffect;
                data.hitEffectAux                    = attackProperty.HitEffectAux;
                data.retreatVelocity                 = attackProperty.RetreatVelocity;
                data.attackerLevel                   = 0;
                data.attackerAttackPercentage        = attackProperty.DamagePercentage;
                data.attackerAttackValue             = (float)actor3.attack;
                data.attackerAttackPercentage        = attackProperty.DamagePercentage;
                data.attackerAddedAttackValue        = attackProperty.AddedDamageValue;
                data.attackerNormalDamage            = attackProperty.NormalDamage;
                data.attackerNormalDamagePercentage  = attackProperty.NormalDamagePercentage;
                data.addedAttackerNormalDamageRatio  = actor3.GetProperty("Actor_NormalAttackRatio");
                data.attackerFireDamage              = attackProperty.FireDamage;
                data.attackerFireDamagePercentage    = attackProperty.FireDamagePercentage;
                data.addedAttackerFireDamageRatio    = actor3.GetProperty("Actor_FireAttackRatio");
                data.attackerThunderDamage           = attackProperty.ThunderDamage;
                data.attackerThunderDamagePercentage = attackProperty.ThunderDamagePercentage;
                data.addedAttackerThunderDamageRatio = actor3.GetProperty("Actor_ThunderAttackRatio");
                data.attackerIceDamage               = attackProperty.IceDamage;
                data.attackerIceDamagePercentage     = attackProperty.IceDamagePercentage;
                data.addedAttackerIceDamageRatio     = actor3.GetProperty("Actor_IceAttackRatio");
                data.attackerAlienDamage             = attackProperty.AlienDamage;
                data.attackerAlienDamagePercentage   = attackProperty.AlienDamagePercentage;
                data.addedAttackerAlienDamageRatio   = actor3.GetProperty("Actor_AllienAttackRatio");
                data.attackEffectPattern             = attackEffect;
                if (data.attackEffectPattern == null)
                {
                    data.attackEffectPattern = InLevelData.InLevelMiscData.DefaultMonsterAttackEffect;
                }
                data.attackCameraShake         = cameraShake;
                data.isAnimEventAttack         = attackProperty.IsAnimEventAttack;
                data.attackerAniDamageRatio   += actor3.GetProperty("Actor_AniDamageDelta");
                data.attackerAttackValue       = (data.attackerAttackValue + actor3.GetProperty("Actor_AttackDelta")) * (1f + actor3.GetProperty("Actor_AttackRatio"));
                data.addedAttackRatio          = actor3.GetProperty("Actor_AddedAttackRatio");
                data.attackerShieldDamageRatio = 1f + actor3.GetProperty("Actor_ShieldDamageRatio");
                data.attackerShieldDamageDelta = actor3.GetProperty("Actor_ShieldDamageDelta");
                data.retreatVelocity          *= 1f + actor3.GetProperty("Actor_RetreatRatio");
            }
            data.resolveStep = AttackData.AttackDataStep.AttackerResolved;
            return(data);
        }
 public AbilityDamageByAttackerDamageMixin(ActorAbility instancedAbility, ActorModifier instancedModifier, ConfigAbilityMixin config) : base(instancedAbility, instancedModifier, config)
 {
     this._attackProperty = new ConfigEntityAttackProperty();
     this.config          = (DamageByAttackerDamageMixin)config;
 }