public void OnHurting(HurtingEventArgs ev) { if (!Tracking.AllowedToDamage(ev.Target, ev.Attacker)) { Log.Debug("Not allowed to damage", Subclass.Instance.Config.Debug); ev.IsAllowed = false; return; } if (ev.DamageType != DamageTypes.Falldown && Tracking.PlayersWithSubclasses.ContainsKey(ev.Attacker) && (Tracking.PlayersWithSubclasses[ev.Attacker].OnHitEffects.Count > 0)) { if (Tracking.PlayersWithSubclasses[ev.Attacker].OnHitEffects.Count > 0) { foreach (string effect in Tracking.PlayersWithSubclasses[ev.Attacker].OnHitEffects) { if ((rnd.NextDouble() * 100) < Tracking.PlayersWithSubclasses[ev.Attacker].FloatOptions[("OnHit" + effect + "Chance")]) { ev.Target.ReferenceHub.playerEffectsController.EnableByString(effect, Tracking.PlayersWithSubclasses[ev.Attacker].FloatOptions.ContainsKey(("OnHit" + effect + "Duration")) ? Tracking.PlayersWithSubclasses[ev.Attacker].FloatOptions[("OnHit" + effect + "Duration")] : -1); } } } } if (Tracking.PlayersWithSubclasses.ContainsKey(ev.Target)) { if (Tracking.PlayersWithSubclasses[ev.Target].Abilities.Contains(AbilityType.NoSCP207Damage) && ev.DamageType == DamageTypes.Scp207) { ev.IsAllowed = false; } if (Tracking.PlayersWithSubclasses[ev.Target].Abilities.Contains(AbilityType.NoHumanDamage) && ev.DamageType.isWeapon) { ev.IsAllowed = false; } if (Tracking.PlayersWithSubclasses[ev.Target].Abilities.Contains(AbilityType.NoSCPDamage) && ev.DamageType.isScp) { ev.IsAllowed = false; } if (Tracking.PlayersWithSubclasses[ev.Target].Abilities.Contains(AbilityType.Nimble) && (rnd.NextDouble() * 100) < (Tracking.PlayersWithSubclasses[ev.Target].FloatOptions.ContainsKey("NimbleChance") ? Tracking.PlayersWithSubclasses[ev.Target].FloatOptions["NimbleChance"] : 15f)) { ev.IsAllowed = false; } if (Tracking.PlayersWithZombies.ContainsKey(ev.Target) && Tracking.PlayersWithZombies[ev.Target].Contains(ev.Attacker)) { ev.IsAllowed = false; } if (ev.DamageType == DamageTypes.Grenade && Tracking.PlayersWithSubclasses[ev.Target].Abilities.Contains(AbilityType.GrenadeImmune)) { Concussed concussedEffect = ev.Target.ReferenceHub.playerEffectsController.GetEffect <Concussed>(); concussedEffect.Intensity = 3; ev.Target.ReferenceHub.playerEffectsController.EnableEffect(concussedEffect, 8); Disabled disabledEffect = ev.Target.ReferenceHub.playerEffectsController.GetEffect <Disabled>(); disabledEffect.Intensity = 2; ev.Target.ReferenceHub.playerEffectsController.EnableEffect(disabledEffect, 5); ev.IsAllowed = false; } } if (ev.DamageType == DamageTypes.Falldown) { return; } if (Tracking.PlayersWithSubclasses.ContainsKey(ev.Attacker) && Tracking.PlayersWithSubclasses[ev.Attacker].Abilities.Contains(AbilityType.LifeSteal)) { ev.Attacker.Health += Mathf.Clamp(ev.Amount * ((Tracking.PlayersWithSubclasses[ev.Attacker].FloatOptions.ContainsKey("LifeStealPercent") ? Tracking.PlayersWithSubclasses[ev.Attacker].FloatOptions["LiftStealPercent"] : 2f) / 100), 0, ev.Attacker.MaxHealth); } if (Tracking.PlayersWithSubclasses.ContainsKey(ev.Attacker) && Tracking.PlayersWithSubclasses[ev.Attacker].FloatOptions.ContainsKey("OnHitDamageMultiplier")) { ev.Amount *= Tracking.PlayersWithSubclasses[ev.Attacker].FloatOptions["OnHitDamageMultiplier"]; } }