Пример #1
0
 // Token: 0x06000385 RID: 901 RVA: 0x0001E770 File Offset: 0x0001C970
 public void ApplyDamageMods(ref HitData.DamageModifiers mods)
 {
     foreach (StatusEffect statusEffect in this.m_statusEffects)
     {
         statusEffect.ModifyDamageMods(ref mods);
     }
 }
Пример #2
0
    // Token: 0x06000DC1 RID: 3521 RVA: 0x00062640 File Offset: 0x00060840
    public void ApplyResistance(HitData.DamageModifiers modifiers, out HitData.DamageModifier significantModifier)
    {
        float damage = this.m_damage.m_damage;
        float num    = 0f;
        float num2   = 0f;
        float num3   = 0f;

        this.m_damage.m_blunt     = this.ApplyModifier(this.m_damage.m_blunt, modifiers.m_blunt, ref damage, ref num, ref num2, ref num3);
        this.m_damage.m_slash     = this.ApplyModifier(this.m_damage.m_slash, modifiers.m_slash, ref damage, ref num, ref num2, ref num3);
        this.m_damage.m_pierce    = this.ApplyModifier(this.m_damage.m_pierce, modifiers.m_pierce, ref damage, ref num, ref num2, ref num3);
        this.m_damage.m_chop      = this.ApplyModifier(this.m_damage.m_chop, modifiers.m_chop, ref damage, ref num, ref num2, ref num3);
        this.m_damage.m_pickaxe   = this.ApplyModifier(this.m_damage.m_pickaxe, modifiers.m_pickaxe, ref damage, ref num, ref num2, ref num3);
        this.m_damage.m_fire      = this.ApplyModifier(this.m_damage.m_fire, modifiers.m_fire, ref damage, ref num, ref num2, ref num3);
        this.m_damage.m_frost     = this.ApplyModifier(this.m_damage.m_frost, modifiers.m_frost, ref damage, ref num, ref num2, ref num3);
        this.m_damage.m_lightning = this.ApplyModifier(this.m_damage.m_lightning, modifiers.m_lightning, ref damage, ref num, ref num2, ref num3);
        this.m_damage.m_poison    = this.ApplyModifier(this.m_damage.m_poison, modifiers.m_poison, ref damage, ref num, ref num2, ref num3);
        this.m_damage.m_spirit    = this.ApplyModifier(this.m_damage.m_spirit, modifiers.m_spirit, ref damage, ref num, ref num2, ref num3);
        significantModifier       = HitData.DamageModifier.Immune;
        if (num3 >= num && num3 >= num2 && num3 >= damage)
        {
            significantModifier = HitData.DamageModifier.Immune;
        }
        if (damage >= num && damage >= num2 && damage >= num3)
        {
            significantModifier = HitData.DamageModifier.Normal;
        }
        if (num >= num2 && num >= num3 && num >= damage)
        {
            significantModifier = HitData.DamageModifier.Resistant;
        }
        if (num2 >= num && num2 >= num3 && num2 >= damage)
        {
            significantModifier = HitData.DamageModifier.Weak;
        }
    }
Пример #3
0
        public static void RPC_Damage_RP(this Character __instance, long sender, HitData hit)
        {
            if (__instance.IsDebugFlying() || !__instance.m_nview.IsOwner() || __instance.GetHealth() <= 0f || __instance.IsDead() || __instance.IsTeleporting() || __instance.InCutscene() || (hit.m_dodgeable && __instance.IsDodgeInvincible()))
            {
                return;
            }
            Character attacker = hit.GetAttacker();

            if ((hit.HaveAttacker() && attacker == null) || (__instance.IsPlayer() && !__instance.IsPVPEnabled() && attacker != null && attacker.IsPlayer()))
            {
                return;
            }
            if (attacker != null && !attacker.IsPlayer())
            {
                float difficultyDamageScale = Game.instance.GetDifficultyDamageScale(__instance.transform.position);
                hit.ApplyModifier(difficultyDamageScale);
            }
            __instance.m_seman.OnDamaged(hit, attacker);
            if (__instance.m_baseAI != null && !__instance.m_baseAI.IsAlerted() && hit.m_backstabBonus > 1f && Time.time - __instance.m_backstabTime > 300f)
            {
                __instance.m_backstabTime = Time.time;
                hit.ApplyModifier(hit.m_backstabBonus);
                __instance.m_backstabHitEffects.Create(hit.m_point, Quaternion.identity, __instance.transform);
            }
            if (__instance.IsStaggering() && !__instance.IsPlayer())
            {
                hit.ApplyModifier(2f);
                __instance.m_critHitEffects.Create(hit.m_point, Quaternion.identity, __instance.transform);
            }
            if (hit.m_blockable && __instance.IsBlocking())
            {
                __instance.BlockAttack(hit, attacker);
            }
            __instance.ApplyPushback(hit);
            if (!string.IsNullOrEmpty(hit.m_statusEffect))
            {
                StatusEffect statusEffect = __instance.m_seman.GetStatusEffect(hit.m_statusEffect);
                if (statusEffect == null)
                {
                    statusEffect = __instance.m_seman.AddStatusEffect(hit.m_statusEffect);
                }
                if (statusEffect != null && attacker != null)
                {
                    statusEffect.SetAttacker(attacker);
                }
            }
            HitData.DamageModifiers damageModifiers = __instance.GetDamageModifiers();
            hit.ApplyResistance(damageModifiers, out var significantModifier);
            if (__instance.IsPlayer())
            {
                float bodyArmor = __instance.GetBodyArmor();
                hit.ApplyArmor(bodyArmor);
                __instance.DamageArmorDurability(hit);
            }
            __instance.ApplyDamage(hit, showDamageText: true, triggerEffects: true, significantModifier);
        }
Пример #4
0
            static void Postfix(Player __instance, ref HitData.DamageModifiers mods, ItemDrop.ItemData ___m_utilityItem)
            {
                if (!modEnabled.Value)
                {
                    return;
                }


                var list = __instance.GetInventory().GetAllItems().FindAll(i => i.m_equiped && i.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Utility && i != ___m_utilityItem);

                foreach (var item in list)
                {
                    mods.Apply(item.m_shared.m_damageModifiers);
                }
            }
Пример #5
0
        public override void Setup(Character character)
        {
            TTL = 5f;
            Log.LogMessage($"Hit {character.m_name} w/ vulnerable damage! Pinned!");
            List <HitData.DamageModPair> mods = new List <HitData.DamageModPair>();

            m_baseMods = character.m_damageModifiers;
            mods.Add(new HitData.DamageModPair()
            {
                m_type = HitData.DamageType.Blunt, m_modifier = HitData.DamageModifier.Weak
            });
            mods.Add(new HitData.DamageModPair()
            {
                m_type = HitData.DamageType.Pierce, m_modifier = HitData.DamageModifier.Weak
            });
            mods.Add(new HitData.DamageModPair()
            {
                m_type = HitData.DamageType.Slash, m_modifier = HitData.DamageModifier.Weak
            });
            mods.Add(new HitData.DamageModPair()
            {
                m_type = HitData.DamageType.Fire, m_modifier = HitData.DamageModifier.Weak
            });
            mods.Add(new HitData.DamageModPair()
            {
                m_type = HitData.DamageType.Frost, m_modifier = HitData.DamageModifier.Weak
            });
            mods.Add(new HitData.DamageModPair()
            {
                m_type = HitData.DamageType.Lightning, m_modifier = HitData.DamageModifier.Weak
            });
            mods.Add(new HitData.DamageModPair()
            {
                m_type = HitData.DamageType.Poison, m_modifier = HitData.DamageModifier.Weak
            });
            mods.Add(new HitData.DamageModPair()
            {
                m_type = HitData.DamageType.Spirit, m_modifier = HitData.DamageModifier.Weak
            });
            character.m_damageModifiers.Apply(mods);

            m_startEffects = new EffectList();
            m_startEffects.m_effectPrefabs = new EffectList.EffectData[] { Data.VFXPinned };
            base.Setup(character);
        }
Пример #6
0
        public static void Postfix(Player __instance, ref HitData.DamageModifiers mods)
        {
            var damageMods = new List <HitData.DamageModPair>();

            if (__instance.HasActiveMagicEffect(MagicEffectType.AddFireResistance))
            {
                damageMods.Add(new HitData.DamageModPair()
                {
                    m_type = HitData.DamageType.Fire, m_modifier = HitData.DamageModifier.Resistant
                });
            }
            if (__instance.HasActiveMagicEffect(MagicEffectType.AddFrostResistance))
            {
                damageMods.Add(new HitData.DamageModPair()
                {
                    m_type = HitData.DamageType.Frost, m_modifier = HitData.DamageModifier.Resistant
                });
            }
            if (__instance.HasActiveMagicEffect(MagicEffectType.AddLightningResistance))
            {
                damageMods.Add(new HitData.DamageModPair()
                {
                    m_type = HitData.DamageType.Lightning, m_modifier = HitData.DamageModifier.Resistant
                });
            }
            if (__instance.HasActiveMagicEffect(MagicEffectType.AddPoisonResistance))
            {
                damageMods.Add(new HitData.DamageModPair()
                {
                    m_type = HitData.DamageType.Poison, m_modifier = HitData.DamageModifier.Resistant
                });
            }
            if (__instance.HasActiveMagicEffect(MagicEffectType.AddSpiritResistance))
            {
                damageMods.Add(new HitData.DamageModPair()
                {
                    m_type = HitData.DamageType.Spirit, m_modifier = HitData.DamageModifier.Resistant
                });
            }

            mods.Apply(damageMods);
        }
Пример #7
0
        public void SetBaseMods(HitData.DamageModifiers baseMods)
        {
            List <HitData.DamageModPair> mods = new List <HitData.DamageModPair>();

            mods.Add(new HitData.DamageModPair()
            {
                m_type = HitData.DamageType.Blunt, m_modifier = baseMods.m_blunt
            });
            mods.Add(new HitData.DamageModPair()
            {
                m_type = HitData.DamageType.Pierce, m_modifier = baseMods.m_pierce
            });
            mods.Add(new HitData.DamageModPair()
            {
                m_type = HitData.DamageType.Slash, m_modifier = baseMods.m_slash
            });
            mods.Add(new HitData.DamageModPair()
            {
                m_type = HitData.DamageType.Fire, m_modifier = baseMods.m_fire
            });
            mods.Add(new HitData.DamageModPair()
            {
                m_type = HitData.DamageType.Frost, m_modifier = baseMods.m_frost
            });
            mods.Add(new HitData.DamageModPair()
            {
                m_type = HitData.DamageType.Lightning, m_modifier = baseMods.m_lightning
            });
            mods.Add(new HitData.DamageModPair()
            {
                m_type = HitData.DamageType.Poison, m_modifier = baseMods.m_poison
            });
            mods.Add(new HitData.DamageModPair()
            {
                m_type = HitData.DamageType.Spirit, m_modifier = baseMods.m_spirit
            });
            m_character.m_damageModifiers.Apply(mods);
        }
Пример #8
0
 // Token: 0x060003CD RID: 973 RVA: 0x0002013B File Offset: 0x0001E33B
 public override void ModifyDamageMods(ref HitData.DamageModifiers modifiers)
 {
     modifiers.Apply(this.m_mods);
 }
Пример #9
0
 // Token: 0x060003EF RID: 1007 RVA: 0x000027E0 File Offset: 0x000009E0
 public virtual void ModifyDamageMods(ref HitData.DamageModifiers modifiers)
 {
 }