public static void ActAttackEffects(ConfigEntityAttackEffect attackEffectConfig, BaseMonoEntity entity, Vector3 hitPoint, Vector3 hitForward) { if ((attackEffectConfig != null) && !attackEffectConfig.MuteAttackEffect) { if (attackEffectConfig.EffectPattern != null) { if (attackEffectConfig.AttackEffectTriggerPos == AttackEffectTriggerAt.TriggerAtHitPoint) { TriggerAttackEffectsTo(attackEffectConfig.EffectPattern, hitPoint, hitForward, Vector3.one, entity); } else if (attackEffectConfig.AttackEffectTriggerPos == AttackEffectTriggerAt.TriggerAtHitPointRandom) { float max = 0.25f; float num2 = 0.1f; Vector3 vector = Vector3.Cross(Vector3.up, new Vector3(hitForward.x, 0f, hitForward.y)); Vector3.Normalize(vector); vector = (Vector3)(vector * UnityEngine.Random.Range(-num2, num2)); Vector3 vector2 = new Vector3(0f, UnityEngine.Random.Range(-max, max), 0f); TriggerAttackEffectsTo(attackEffectConfig.EffectPattern, (hitPoint + vector2) + vector, hitForward, Vector3.one, entity); } else if (attackEffectConfig.AttackEffectTriggerPos == AttackEffectTriggerAt.TriggerAtEntity) { TriggerAttackEffectsTo(attackEffectConfig.EffectPattern, entity.XZPosition, entity.transform.forward, entity.transform.localScale, entity); } } if (!string.IsNullOrEmpty(attackEffectConfig.SwitchName)) { string switchName = attackEffectConfig.SwitchName; BaseMonoMonster monster = entity as BaseMonoMonster; if ((monster != null) && monster.hasArmor) { if (switchName == "Bullet") { switchName = "Bullet_Armor"; } else if (switchName == "Punch") { switchName = "Shield_Default"; } else if (switchName == "Sword") { switchName = "Shield_Sword"; } } Singleton <WwiseAudioManager> .Instance.SetSwitch("Damage_Type", switchName, entity.gameObject); Singleton <WwiseAudioManager> .Instance.Post("DR_IMP", entity.gameObject, null, null); } } }
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); }