public static bool Prefix(FlashGrenade __instance, ref bool __result) { Exiled.API.Features.Log.Debug($"Flash grenade explosion", Subclass.Instance.Config.Debug); foreach (GameObject obj2 in PlayerManager.players) { Player target = Player.Get(obj2); Vector3 position = ((EffectGrenade)__instance).transform.position; ReferenceHub hub = ReferenceHub.GetHub(obj2); Flashed effect = hub.playerEffectsController.GetEffect <Flashed>(); Deafened deafened = hub.playerEffectsController.GetEffect <Deafened>(); Exiled.API.Features.Log.Debug($"Flash target is: {target?.Nickname}", Subclass.Instance.Config.Debug); if ((effect != null) && ((((EffectGrenade)__instance).thrower != null) && (__instance._friendlyFlash || effect.Flashable(ReferenceHub.GetHub(((EffectGrenade)__instance).thrower.gameObject), position, __instance._ignoredLayers)))) { if (!Tracking.PlayersWithSubclasses.ContainsKey(target) || !Tracking.PlayersWithSubclasses[target].Abilities.Contains(AbilityType.FlashImmune)) { float num = __instance.powerOverDistance.Evaluate((float)(Vector3.Distance(obj2.transform.position, position) / ((position.y > 900f) ? __instance.distanceMultiplierSurface : __instance.distanceMultiplierFacility))) * __instance.powerOverDot.Evaluate(Vector3.Dot(hub.PlayerCameraReference.forward, (hub.PlayerCameraReference.position - position).normalized)); byte intensity = (byte)Mathf.Clamp(Mathf.RoundToInt((float)((num * 10f) * __instance.maximumDuration)), 1, 0xff); if ((intensity >= effect.Intensity) && (num > 0f)) { hub.playerEffectsController.ChangeEffectIntensity <Flashed>(intensity); if (deafened != null) { hub.playerEffectsController.EnableEffect(deafened, num * __instance.maximumDuration, true); } } } else { Concussed concussedEffect = hub.playerEffectsController.GetEffect <Concussed>(); concussedEffect.Intensity = 3; hub.playerEffectsController.EnableEffect(concussedEffect, 5); Disabled disabledEffect = hub.playerEffectsController.GetEffect <Disabled>(); disabledEffect.Intensity = 2; hub.playerEffectsController.EnableEffect(disabledEffect, 5); } } } if (((EffectGrenade)__instance).serverGrenadeEffect != null) { Transform transform = ((Grenade)__instance).transform; Object.Instantiate <GameObject>(((EffectGrenade)__instance).serverGrenadeEffect, transform.position, transform.rotation); } string str = (((Grenade)__instance).thrower != null) ? ((Grenade)__instance).thrower.hub.LoggedNameFromRefHub() : ((string)"(UNKNOWN)"); string[] textArray1 = new string[] { "Player ", (string)str, "'s ", (string)((Grenade)__instance).logName, " grenade exploded." }; ServerLogs.AddLog(ServerLogs.Modules.Logger, string.Concat((string[])textArray1), ServerLogs.ServerLogType.GameEvent, false); __result = true; return(false); }
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"]; } }