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); } }
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); }
static void Prefix(ref HitData hit) { if (!modEnabled.Value) { return; } hit.ApplyModifier(globalArmorDurabilityLossMult.Value); }
// 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); }
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); } } }
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); } }