private static void Postfix(PlayerStats __instance, ref PlayerStats.HitInfo info, GameObject go) { try { API.Features.Player attacker = API.Features.Player.Get(__instance.gameObject); API.Features.Player target = API.Features.Player.Get(go); if ((target != null && (target.Role != RoleType.Spectator || target.IsGodModeEnabled || target.IsHost)) || attacker == null) { return; } var ev = new DiedEventArgs(API.Features.Player.Get(__instance.gameObject), target, info); target.Position = Vector3.zero; Player.OnDied(ev); info = ev.HitInformations; } catch (Exception e) { Exiled.API.Features.Log.Error($"Exiled.Events.Patches.Events.Player.Died: {e}\n{e.StackTrace}"); } }
private static void Postfix(NicknameSync __instance) { if (__instance.hub.characterClassManager.IsHost || string.IsNullOrEmpty(__instance.hub.characterClassManager.UserId)) { return; } if (!API.Features.Player.Dictionary.TryGetValue(__instance.gameObject, out API.Features.Player player)) { player = new API.Features.Player(ReferenceHub.GetHub(__instance.gameObject)); API.Features.Player.Dictionary.Add(__instance.gameObject, player); } API.Features.Log.Debug($"Player {player?.Nickname} ({player?.UserId}) connected with the IP: {player?.IPAddress}"); if (PlayerManager.players.Count >= CustomNetworkManager.slots) { API.Features.Log.Debug($"Server is full!"); } Timing.CallDelayed(0.25f, () => { if (player != null && player.IsMuted) { player.ReferenceHub.characterClassManager.SetDirtyBit(1UL); } }); var ev = new JoinedEventArgs(API.Features.Player.Get(__instance.gameObject)); Player.OnJoined(ev); }
private static void Prefix(ReferenceHub __instance) { try { API.Features.Player player = API.Features.Player.Get(__instance.gameObject); if (player == null || player.IsHost) { return; } var ev = new LeftEventArgs(player); API.Features.Log.Debug($"Player {ev.Player.Nickname} ({ev.Player.UserId}) disconnected"); Player.OnLeft(ev); API.Features.Player.IdsCache.Remove(player.Id); API.Features.Player.UserIdsCache.Remove(player.UserId); API.Features.Player.Dictionary.Remove(player.GameObject); } catch (Exception e) { Exiled.API.Features.Log.Error($"Exiled.Events.Patches.Events.Player.Left: {e}\n{e.StackTrace}"); } }
private static void Prefix(ReferenceHub __instance) { API.Features.Player player = API.Features.Player.Get(__instance.gameObject); if (player.IsHost || string.IsNullOrEmpty(player.UserId)) { return; } var ev = new LeftEventArgs(player); API.Features.Log.Debug($"Player {ev.Player?.Nickname} ({ev.Player?.UserId}) disconnected"); Player.OnLeft(ev); if (API.Features.Player.IdsCache.ContainsKey(__instance.queryProcessor.PlayerId)) { API.Features.Player.IdsCache.Remove(__instance.queryProcessor.PlayerId); } if (API.Features.Player.UserIdsCache.ContainsKey(__instance.characterClassManager.UserId)) { API.Features.Player.UserIdsCache.Remove(__instance.characterClassManager.UserId); } if (API.Features.Player.Dictionary.ContainsKey(__instance.gameObject)) { API.Features.Player.Dictionary.Remove(__instance.gameObject); } }
internal static void CallEvent(ReferenceHub hub, out API.Features.Player player) { try { #if DEBUG API.Features.Log.Debug("Creating new player object"); #endif player = new API.Features.Player(hub); #if DEBUG API.Features.Log.Debug($"Object exists {player is not null}"); API.Features.Log.Debug($"Creating player object for {hub.nicknameSync.Network_displayName}", true); #endif API.Features.Player.UnverifiedPlayers.Add(hub, player); API.Features.Player p = player; Timing.CallDelayed(0.25f, () => { if (p.IsMuted) { p.ReferenceHub.characterClassManager.SetDirtyBit(2UL); } }); Handlers.Player.OnJoined(new JoinedEventArgs(player)); } catch (Exception e) { API.Features.Log.Error($"{nameof(CallEvent)}: {e}\n{e.StackTrace}"); player = null; } }
private static void Prefix(PlayerStats __instance, ref PlayerStats.HitInfo info, GameObject go) { if (go == null) { return; } API.Features.Player attacker = API.Features.Player.Get(__instance.gameObject); API.Features.Player target = API.Features.Player.Get(go); if (attacker == null || target == null || attacker.IsHost || target.IsHost) { return; } var ev = new HurtingEventArgs(API.Features.Player.Get(__instance.gameObject), API.Features.Player.Get(go), info); if (ev.Target.IsHost) { return; } Player.OnHurting(ev); info = ev.HitInformations; }
private static void Prefix(PlayerStats __instance, ref PlayerStats.HitInfo info, GameObject go, bool noTeamDamage = false) { try { if (go == null) { return; } API.Features.Player attacker = API.Features.Player.Get(__instance.gameObject); API.Features.Player target = API.Features.Player.Get(go); if (attacker == null || target == null || attacker.IsHost || target.IsHost) { return; } var ev = new HurtingEventArgs(API.Features.Player.Get(__instance.gameObject), API.Features.Player.Get(go), info); if (ev.Target.IsHost) { return; } Handlers.Player.OnHurting(ev); info = ev.HitInformations; } catch (Exception e) { Exiled.API.Features.Log.Error($"Exiled.Events.Patches.Events.Player.Hurting: {e}\n{e.StackTrace}"); } }
private static void Postfix(GameObject player) { try { if (!API.Features.Player.Dictionary.TryGetValue(player, out API.Features.Player newPlayer)) { newPlayer = new API.Features.Player(ReferenceHub.GetHub(player)); API.Features.Player.Dictionary.Add(player, newPlayer); } API.Features.Log.Debug($"Player {newPlayer?.Nickname} ({newPlayer?.UserId}) connected with the IP: {newPlayer?.IPAddress}"); if (PlayerManager.players.Count >= CustomNetworkManager.slots) { API.Features.Log.Debug($"Server is full!"); } Timing.CallDelayed(0.25f, () => { if (newPlayer != null && newPlayer.IsMuted) { newPlayer.ReferenceHub.characterClassManager.SetDirtyBit(1UL); } }); var ev = new JoinedEventArgs(API.Features.Player.Get(player)); Player.OnJoined(ev); } catch (Exception exception) { API.Features.Log.Error($"Exiled.Events.Patches.Events.Player.Joined: {exception}\n{exception.StackTrace}"); } }
private static bool Prefix(PlayerStats __instance, ref PlayerStats.HitInfo info, GameObject go) { try { if (go == null) { return(true); } API.Features.Player attacker = API.Features.Player.Get(info.IsPlayer ? info.RHub.gameObject : __instance.gameObject); API.Features.Player target = API.Features.Player.Get(go); if (attacker == null || target == null || attacker.IsHost || target.IsHost) { return(true); } var ev = new HurtingEventArgs(attacker, target, info); if (ev.Target.IsHost) { return(true); } Player.OnHurting(ev); info = ev.HitInformations; if (!ev.IsAllowed) { return(false); } if (ev.Amount >= ev.Target.Health + ev.Target.AdrenalineHealth) { var dyingEventArgs = new DyingEventArgs(ev.Attacker, ev.Target, ev.HitInformations); Player.OnDying(dyingEventArgs); if (!dyingEventArgs.IsAllowed) { return(false); } } return(true); } catch (Exception e) { Exiled.API.Features.Log.Error($"Exiled.Events.Patches.Events.Player.Hurting: {e}\n{e.StackTrace}"); return(true); } }
private static bool Prefix(string cmd) { (string name, string[] arguments) = cmd.ExtractCommand(); API.Features.Player player = API.Features.Player.Get(Console._ccs.SenderId); var ev = new SendingRemoteAdminCommandEventArgs(player?.CommandSender ?? API.Features.Server.Host.CommandSender, player ?? API.Features.Server.Host, name, arguments.ToList()); Server.OnSendingRemoteAdminCommand(ev); return(ev.IsAllowed); }
private static bool Prefix(Scp096 __instance, GameObject target) { ReferenceHub hub = ReferenceHub.GetHub(target); if (!__instance.CanReceiveTargets || hub == null || __instance._targets.Contains(hub)) { return(false); } API.Features.Player scp096 = API.Features.Player.Get(__instance.Hub.gameObject); API.Features.Player targetPlayer = API.Features.Player.Get(target); if (scp096 == null) { Log.Error("SCP-096.AddTarget: Could not get SCP-096 player object."); return(true); } if (targetPlayer == null) { Log.Error("SCP-096.AddTarget: Could not get Target player object."); return(true); } AddingTargetEventArgs ev = new AddingTargetEventArgs(scp096, targetPlayer, 70, __instance.EnrageTimePerReset); Exiled.Events.Handlers.Scp096.OnAddingTarget(ev); if (ev.IsAllowed) { if (!__instance._targets.IsEmpty() || __instance.Enraged) { if (__instance.AddedTimeThisRage + ev.EnrageTimeToAdd >= __instance.MaximumAddedEnrageTime) { ev.EnrageTimeToAdd = 0f; } else if (__instance.AddedTimeThisRage + ev.EnrageTimeToAdd > __instance.MaximumAddedEnrageTime) { ev.EnrageTimeToAdd = __instance.AddedTimeThisRage + ev.EnrageTimeToAdd - __instance.MaximumAddedEnrageTime; } __instance.EnrageTimeLeft += ev.EnrageTimeToAdd; __instance.AddedTimeThisRage += ev.EnrageTimeToAdd; } __instance._targets.Add(hub); __instance.AdjustShield(ev.AhpToAdd); NetworkServer.SendToClientOfPlayer <Scp096ToTargetMessage>(hub.characterClassManager.netIdentity, new Scp096ToTargetMessage(hub)); } return(false); }
private static void Postfix(PlayerStats __instance, ref PlayerStats.HitInfo info, GameObject go) { API.Features.Player attacker = API.Features.Player.Get(__instance.gameObject); API.Features.Player target = API.Features.Player.Get(go); if ((target != null && (target.Role != RoleType.Spectator || target.IsGodModeEnabled || target.IsHost)) || attacker == null) { return; } var ev = new DiedEventArgs(API.Features.Player.Get(__instance.gameObject), target, info); Player.OnDied(ev); info = ev.HitInformations; }
private static bool Prefix(Scp096 __instance, GameObject target) { ReferenceHub hub = ReferenceHub.GetHub(target); if (!__instance.CanReceiveTargets || hub == null || __instance._targets.Contains(hub)) { return(false); } API.Features.Player scp096 = API.Features.Player.Get(__instance.Hub.gameObject); API.Features.Player targetPlayer = API.Features.Player.Get(target); if (scp096 == null) { Log.Error("SCP-096.AddTarget: Could not get SCP-096 player object."); return(true); } if (targetPlayer == null) { Log.Error("SCP-096.AddTarget: Could not get Target player object."); return(true); } AddingTargetEventArgs ev = new AddingTargetEventArgs(scp096, targetPlayer, 200, __instance.EnrageTimePerReset); if (targetPlayer.Role == RoleType.Tutorial && !Exiled.Events.Events.Instance.Config.CanTutorialTriggerScp096) { ev.IsAllowed = false; } Exiled.Events.Handlers.Scp096.OnAddingTarget(ev); if (ev.IsAllowed) { if (!__instance._targets.IsEmpty()) { __instance.EnrageTimeLeft += ev.EnrageTimeToAdd; } __instance._targets.Add(hub); __instance.AdjustShield(ev.AhpToAdd); } return(false); }
private static void Prefix(ReferenceHub __instance) { try { if (__instance.characterClassManager.IsHost) { return; } API.Features.Player player = API.Features.Player.Get(__instance.gameObject); if (player == null || string.IsNullOrEmpty(player.UserId)) { return; } var ev = new LeftEventArgs(player); API.Features.Log.Debug($"Player {ev.Player?.Nickname} ({ev.Player?.UserId}) disconnected"); Player.OnLeft(ev); if (API.Features.Player.IdsCache.ContainsKey(__instance.queryProcessor.PlayerId)) { API.Features.Player.IdsCache.Remove(__instance.queryProcessor.PlayerId); } if (API.Features.Player.UserIdsCache.ContainsKey(__instance.characterClassManager.UserId)) { API.Features.Player.UserIdsCache.Remove(__instance.characterClassManager.UserId); } if (API.Features.Player.Dictionary.ContainsKey(__instance.gameObject)) { API.Features.Player.Dictionary.Remove(__instance.gameObject); } } catch (Exception e) { Exiled.API.Features.Log.Error($"Exiled.Events.Patches.Events.Player.Left: {e}\n{e.StackTrace}"); } }
private static void Prefix(CharacterClassManager __instance, bool value) { try { if (!value || string.IsNullOrEmpty(__instance?.UserId)) { return; } if (!API.Features.Player.Dictionary.TryGetValue(__instance.gameObject, out API.Features.Player player)) { player = new API.Features.Player(ReferenceHub.GetHub(__instance.gameObject)); API.Features.Player.Dictionary.Add(__instance.gameObject, player); } API.Features.Log.SendRaw($"Player {player?.Nickname} ({player?.UserId}) ({player?.Id}) connected with the IP: {player?.IPAddress}", ConsoleColor.Green); if (PlayerManager.players.Count >= CustomNetworkManager.slots) { API.Features.Log.Debug($"Server is full!"); } Timing.CallDelayed(0.25f, () => { if (player != null && player.IsMuted) { player.ReferenceHub.characterClassManager.SetDirtyBit(1UL); } }); var ev = new JoinedEventArgs(API.Features.Player.Get(__instance.gameObject)); Player.OnJoined(ev); } catch (Exception exception) { API.Features.Log.Error($"Exiled.Events.Patches.Events.Player.Joined: {exception}\n{exception.StackTrace}"); } }
private static bool Prefix(Generator079 __instance, GameObject person, PlayerInteract.Generator079Operations command) { try { API.Features.Player player = API.Features.Player.Get(person); switch (command) { case PlayerInteract.Generator079Operations.Door: bool isAllowed = true; switch (__instance.isDoorOpen) { case false: var openingEventArgs = new OpeningGeneratorEventArgs(player, __instance, isAllowed); Player.OnOpeningGenerator(openingEventArgs); isAllowed = openingEventArgs.IsAllowed; break; case true: var closingEventArgs = new ClosingGeneratorEventArgs(player, __instance, isAllowed); Player.OnClosingGenerator(closingEventArgs); isAllowed = closingEventArgs.IsAllowed; break; } if (isAllowed) { __instance.OpenClose(person); } else { __instance.RpcDenied(); } break; case PlayerInteract.Generator079Operations.Tablet: if (__instance.isTabletConnected || !__instance.isDoorOpen || (__instance._localTime <= 0.0 || Generator079.mainGenerator.forcedOvercharge)) { break; } Inventory component = person.GetComponent <Inventory>(); using (SyncList <Inventory.SyncItemInfo> .SyncListEnumerator enumerator = component.items.GetEnumerator()) { while (enumerator.MoveNext()) { Inventory.SyncItemInfo current = enumerator.Current; if (current.id == ItemType.WeaponManagerTablet) { var insertingEventArgs = new InsertingGeneratorTabletEventArgs(player, __instance); Player.OnInsertingGeneratorTablet(insertingEventArgs); if (insertingEventArgs.IsAllowed) { component.items.Remove(current); __instance.NetworkisTabletConnected = true; } break; } } break; } case PlayerInteract.Generator079Operations.Cancel: var ejectingEventArgs = new EjectingGeneratorTabletEventArgs(player, __instance); Player.OnEjectingGeneratorTablet(ejectingEventArgs); if (ejectingEventArgs.IsAllowed) { __instance.EjectTablet(); } break; } return(false); } catch (Exception exception) { API.Features.Log.Error($"Exiled.Events.Patches.Events.Player.InsertingGeneratorTablet: {exception}\n{exception.StackTrace}"); return(true); } }
private static ItemBase GetItem(API.Features.Player player, ushort serial) => player.TryGetItem(serial, out ItemBase item) ? item : null;
private static bool Prefix(GameObject user, int duration, string reason, string issuer, bool isGlobalBan) { try { if (isGlobalBan && ConfigFile.ServerConfig.GetBool("gban_ban_ip", false)) { duration = int.MaxValue; } string userId = null; string address = user.GetComponent <NetworkIdentity>().connectionToClient.address; API.Features.Player targetPlayer = API.Features.Player.Get(user); API.Features.Player issuerPlayer = API.Features.Player.Get(issuer) ?? API.Features.Server.Host; try { if (ConfigFile.ServerConfig.GetBool("online_mode", false)) { userId = targetPlayer.UserId; } } catch { ServerConsole.AddLog("Failed during issue of User ID ban (1)!"); return(false); } string message = $"You have been {((duration > 0) ? "banned" : "kicked")}. "; if (!string.IsNullOrEmpty(reason)) { message = message + "Reason: " + reason; } if (!ServerStatic.PermissionsHandler.IsVerified || !targetPlayer.IsStaffBypassEnabled) { if (duration > 0) { var ev = new BanningEventArgs(targetPlayer, issuerPlayer, duration, reason, message); Player.OnBanning(ev); duration = ev.Duration; reason = ev.Reason; message = ev.FullMessage; if (!ev.IsAllowed) { return(false); } string originalName = string.IsNullOrEmpty(targetPlayer.Nickname) ? "(no nick)" : targetPlayer.Nickname; long issuanceTime = TimeBehaviour.CurrentTimestamp(); long banExpieryTime = TimeBehaviour.GetBanExpirationTime((uint)duration); try { if (userId != null && !isGlobalBan) { BanHandler.IssueBan( new BanDetails { OriginalName = originalName, Id = userId, IssuanceTime = issuanceTime, Expires = banExpieryTime, Reason = reason, Issuer = issuer, }, BanHandler.BanType.UserId); if (!string.IsNullOrEmpty(targetPlayer.CustomUserId)) { BanHandler.IssueBan( new BanDetails { OriginalName = originalName, Id = targetPlayer.CustomUserId, IssuanceTime = issuanceTime, Expires = banExpieryTime, Reason = reason, Issuer = issuer, }, BanHandler.BanType.UserId); } } } catch { ServerConsole.AddLog("Failed during issue of User ID ban (2)!"); return(false); } try { if (ConfigFile.ServerConfig.GetBool("ip_banning", false) || isGlobalBan) { BanHandler.IssueBan( new BanDetails { OriginalName = originalName, Id = address, IssuanceTime = issuanceTime, Expires = banExpieryTime, Reason = reason, Issuer = issuer, }, BanHandler.BanType.IP); } } catch { ServerConsole.AddLog("Failed during issue of IP ban!"); return(false); } } else if (duration == 0) { var ev = new KickingEventArgs(targetPlayer, issuerPlayer, reason, message); Player.OnKicking(ev); reason = ev.Reason; message = ev.FullMessage; if (!ev.IsAllowed) { return(false); } } } ServerConsole.Disconnect(targetPlayer.ReferenceHub.gameObject, message); return(false); } catch (Exception e) { Exiled.API.Features.Log.Error($"Exiled.Events.Patches.Events.Player.BanningAndKicking: {e}\n{e.StackTrace}"); return(true); } }
private static bool Prefix(PlayerStats __instance, ref PlayerStats.HitInfo info, GameObject go) { try { if (go == null) { return(true); } API.Features.Player attacker = API.Features.Player.Get(info.IsPlayer ? info.RHub.gameObject : __instance.gameObject); API.Features.Player target = API.Features.Player.Get(go); if (target == null || target.IsHost) { return(true); } if (info.GetDamageType() == DamageTypes.Recontainment && target.Role == RoleType.Scp079) { Scp079.OnRecontained(new RecontainedEventArgs(target)); var eventArgs = new DiedEventArgs(null, target, info); Player.OnDied(eventArgs); } if (attacker == null || attacker.IsHost) { return(true); } var ev = new HurtingEventArgs(attacker, target, info); if (ev.Target.IsHost) { return(true); } Player.OnHurting(ev); info = ev.HitInformations; if (!ev.IsAllowed) { return(false); } if (!ev.Target.IsGodModeEnabled && (ev.Amount == -1 || ev.Amount >= ev.Target.Health + ev.Target.AdrenalineHealth)) { var dyingEventArgs = new DyingEventArgs(ev.Attacker, ev.Target, ev.HitInformations); Player.OnDying(dyingEventArgs); if (!dyingEventArgs.IsAllowed) { return(false); } } return(true); } catch (Exception e) { Exiled.API.Features.Log.Error($"Exiled.Events.Patches.Events.Player.Hurting: {e}\n{e.StackTrace}"); return(true); } }