/// <summary> /// Initializes a new instance of the <see cref="FlashGrenade"/> class. /// </summary> /// <param name="itemBase"><inheritdoc cref="Throwable.Base"/></param> public FlashGrenade(ThrowableItem itemBase) : base(itemBase) { FlashbangGrenade grenade = (FlashbangGrenade)Base.Projectile; BlindCurve = grenade._blindingOverDistance; SurfaceDistanceIntensifier = grenade._surfaceZoneDistanceIntensifier; DeafenCurve = grenade._deafenDurationOverDistance; FuseTime = grenade._fuseTime; }
private static void ProcessPlayers(FlashbangGrenade grenade, List <Player> players) { foreach (Player player in players) { if (HitboxIdentity.CheckFriendlyFire(grenade.PreviousOwner.Role, player.ReferenceHub.characterClassManager.CurClass)) { grenade.ProcessPlayer(player.ReferenceHub); } } }
/// <summary> /// Spawns an active grenade on the map at the specified location. /// </summary> /// <param name="position">The location to spawn the grenade.</param> /// <param name="owner">Optional: The <see cref="Player"/> owner of the grenade.</param> public void SpawnActive(Vector3 position, Player owner = null) { #if DEBUG Log.Debug($"Spawning active grenade: {FuseTime}"); #endif FlashbangGrenade grenade = (FlashbangGrenade)Object.Instantiate(Base.Projectile, position, Quaternion.identity); grenade.PreviousOwner = new Footprint(owner != null ? owner.ReferenceHub : Server.Host.ReferenceHub); grenade._blindingOverDistance = BlindCurve; grenade._surfaceZoneDistanceIntensifier = SurfaceDistanceIntensifier; grenade._deafenDurationOverDistance = DeafenCurve; grenade._fuseTime = FuseTime; NetworkServer.Spawn(grenade.gameObject); grenade.ServerActivate(); }
private static bool PlayExplosionEffects(FlashbangGrenade __instance) { try { float time = __instance._blindingOverDistance.keys[__instance._blindingOverDistance.length - 1].time; float num = time * time; foreach (KeyValuePair <GameObject, ReferenceHub> keyValuePair in ReferenceHub.GetAllHubs()) { if (!(keyValuePair.Value == null) && (__instance.transform.position - keyValuePair.Value.transform.position).sqrMagnitude <= num && !(keyValuePair.Value == __instance.PreviousOwner.Hub) && HitboxIdentity.CheckFriendlyFire(__instance.PreviousOwner.Hub, keyValuePair.Value, false)) { __instance.ProcessPlayer(keyValuePair.Value); } } return(false); } catch (Exception ex) { Logger.Get.Error($"Synapse-FF: PlayExplosionFlash failed!!\n{ex}"); return(true); } }