Exemplo n.º 1
0
            static void Prefix(Character __instance, ref HitData hit)
            {
                if (!modEnabled.Value)
                {
                    return;
                }

                var attacker = hit.GetAttacker() ? Utils.GetPrefabName(hit.GetAttacker().gameObject) : "";
                var defender = Utils.GetPrefabName(__instance.gameObject);

                if (__instance.IsPlayer())
                {
                    hit.ApplyModifier(playerDamageMult.Value);
                }
                else if (__instance.IsTamed())
                {
                    hit.ApplyModifier(tameDamageMult.Value);
                }
                else
                {
                    hit.ApplyModifier(wildDamageMult.Value);
                }

                if (defenderMults.TryGetValue(defender, out float mult1))
                {
                    Dbgl($"Applying mult of {mult1} for defender {defender}");
                    hit.ApplyModifier(mult1);
                }
                else if (hit.GetAttacker() && attackerMults.TryGetValue(attacker, out float mult2))
                {
                    Dbgl($"Applying mult of {mult2} for attacker {attacker}");
                    hit.ApplyModifier(mult2);
                }
            }
Exemplo n.º 2
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);
        }
Exemplo n.º 3
0
 static void Prefix(ref HitData hit)
 {
     if (!modEnabled.Value)
     {
         return;
     }
     hit.ApplyModifier(globalArmorDurabilityLossMult.Value);
 }
Exemplo n.º 4
0
    // Token: 0x060003C2 RID: 962 RVA: 0x0001FD00 File Offset: 0x0001DF00
    public override void OnDamaged(HitData hit, Character attacker)
    {
        float totalDamage = hit.GetTotalDamage();

        this.m_damage += totalDamage;
        hit.ApplyModifier(0f);
        this.m_hitEffects.Create(hit.m_point, Quaternion.identity, null, 1f);
    }
Exemplo n.º 5
0
 private static void Prefix(Character __instance, HitData hit)
 {
     if (hit.GetAttacker() is Player player && player.HasActiveMagicEffect(MagicEffectType.Opportunist) && __instance.IsStaggering())
     {
         var chance = player.GetTotalActiveMagicEffectValue(MagicEffectType.Opportunist, 0.01f);
         if (Random.Range(0f, 1f) < chance)
         {
             __instance.m_backstabHitEffects.Create(hit.m_point, Quaternion.identity, __instance.transform);
             hit.ApplyModifier(hit.m_backstabBonus);
         }
     }
 }
Exemplo n.º 6
0
        private static void Prefix(Character __instance, HitData hit)
        {
            var attacker = hit.GetAttacker();

            if (attacker is Player player && __instance.IsStaggering())
            {
                if (HandlingProjectileDamage == null)
                {
                    HandlingProjectileDamage = ReadStaggerDamageValue(player);
                }
                hit.ApplyModifier((float)HandlingProjectileDamage);
            }
        }