Пример #1
0
 public static void AfterDamage_AddShred(DamageAccumulation __instance, DamageAccumulation.TargetData __result)
 {
     try {
         var damage    = __result.DamageResult;
         var mitigated = damage.ArmorMitigatedDamage;
         if (mitigated <= 0)
         {
             return;
         }
         var shred = Mathf.Max(Config.Min_Shred, Mathf.Round(mitigated * Config.Convert_Ratio));
         var orig  = damage.ArmorDamage;
         //Trace( "Shred {0}+{1} = {2}", orig, shred, orig + shred ); // Triggered by damage preview. Pretty hot code.
         damage.ArmorDamage    += shred;
         __instance.ArmorShred += shred;
     } catch (Exception ex) { Api("log e", ex); }
 }
Пример #2
0
        public static bool Prefix(AcidDamageEffect __instance, DamageAccumulation accum, IDamageReceiver recv, Vector3 damageOrigin, Vector3 impactForce, CastHit impactHit)
        {
            try
            {
                if (!Mod.Settings.Acid)
                {
                    return(true);
                }
                var currentArmor = recv.GetArmor().Value;
                var hasArmor     = currentArmor > 0;
                var totalDamage  = accum.Amount * accum.SourceMultiplier;
                var armorDamage  = 0f;
                if (hasArmor)
                {
                    armorDamage = Math.Min(totalDamage, currentArmor);
                }


                var healthDamage = totalDamage - armorDamage;
                //FileLog.Log($"({accum.Amount} * {accum.SourceMultiplier}) hit on {recv.GetDisplayName()}\ncurrentArmor {currentArmor}\ntotalDamage {totalDamage}\narmorDamage {armorDamage}\nhealthDamage {healthDamage}");
                var data = new DamageAccumulation.TargetData
                {
                    Target        = recv,
                    AmountApplied = totalDamage,
                    DamageResult  = new DamageResult
                    {
                        Source        = __instance.Source,
                        ArmorDamage   = armorDamage,
                        HealthDamage  = healthDamage,
                        ImpactForce   = impactForce,
                        ImpactHit     = impactHit,
                        DamageOrigin  = damageOrigin,
                        DamageTypeDef = __instance.AcidDamageEffectDef.DamageTypeDef
                    }
                };
                accum.AddGeneratedTarget(data);
            }
            catch (Exception e)
            {
                FileLog.Log(e.ToString());
            }

            return(false);
        }