/* * Has to be redone * * public void ChangeIP(Exiled.API.Features.Player player) * { * Player databasePlayer = player.GetDatabasePlayer(); * var accounts = Database.LiteDatabase.GetCollection<Player>().FindAll() * .Where(ip => ip.Ip == databasePlayer.Ip).ToList(); * StringBuilder message = * new StringBuilder( * $"<color=green>[Player {databasePlayer.Name} ({databasePlayer.Id}@{databasePlayer.Authentication}) has changed IP ({accounts.Count})]</color>") * .AppendLine(); * foreach (var ips in accounts) * { * message.AppendLine(); * message.Append( * $"Old IP: <color=yellow>{databasePlayer.Ip}</color>\nNew IP: <color=yellow>{player.IPAddress}</color>\nPlayer: <color=yellow>{ips.Name} ({ips.Id}{ips.Authentication})</color>\nFirst Join: <color=yellow>{ips.FirstJoin}</color>\nIsRestricted: <color=yellow>{ips.IsRestricted()}</color>\nIsBanned: <color=yellow>{ips.IsBanned()}</color>\nTotal played as SCP: <color=yellow>{ips.TotalScpGamesPlayed}</color>\nTotal suicide: <color=yellow>{ips.ScpSuicideCount}</color>") * .AppendLine(); * } * * foreach (var staffer in Exiled.API.Features.Player.List.Where(x => x.RemoteAdminAccess)) * { * if (pluginInstance.Config.AlertStaffBroadcastChangeIP.Show) * { * staffer.ClearBroadcasts(); * staffer.Broadcast(pluginInstance.Config.AlertStaffBroadcastChangeIP.Duration, * pluginInstance.Config.AlertStaffBroadcastChangeIP.Content * .Replace("{player}", player.Nickname + " " + player.UserId) * .Replace("{oldIP}", databasePlayer.Ip).Replace("{newIP}", player.IPAddress)); * staffer.SendConsoleMessage(message.ToString(), "default"); * } * } * databasePlayer.Ip = player.IPAddress; * Database.LiteDatabase.GetCollection<Player>().Update(databasePlayer); * } */ public void ReplacePlayer(Exiled.API.Features.Player player) { Player databasePlayer = player.GetDatabasePlayer(); var list = Exiled.API.Features.Player.List.ToList(); list.Remove(player); list.RemoveAll(x => x.IsScp); list.RemoveAll(x => x.Role == RoleType.Tutorial); if (list.Count() == 0) { Log.Info("[SCPUtils] Couldnt find a player to replace the banned one!"); return; } var id = UnityEngine.Random.Range(0, list.Count - 1); var role = player.Role; ReplacePlayerEvent args = new ReplacePlayerEvent(); args.BannedPlayer = player; args.ReplacedPlayer = list[id]; args.ScpRole = player.Role; args.NormalRole = list[id].Role; player.SetRole(list[id].Role); list[id].SetRole(role); pluginInstance.Events.OnReplacePlayerEvent(args); databasePlayer.RoundBanLeft--; if (pluginInstance.Config.RoundBanNotification.Show) { player.ClearBroadcasts(); var message = pluginInstance.Config.RoundBanSpawnNotification.Content; message = message.Replace("%roundnumber%", databasePlayer.RoundBanLeft.ToString()); player.Broadcast(pluginInstance.Config.RoundBanSpawnNotification.Duration, message, pluginInstance.Config.RoundBanSpawnNotification.Type, false); } }
public void AttemptRevive(SendingConsoleCommandEventArgs ev, SubClass subClass, bool necro = false) { Log.Debug($"Player {ev.Player.Nickname} {(necro ? "necromancy" : "revive")} attempt", Subclass.Instance.Config.Debug); AbilityType ability = necro ? AbilityType.Necromancy : AbilityType.Revive; if (TrackingAndMethods.OnCooldown(ev.Player, ability, subClass)) { Log.Debug($"Player {ev.Player.Nickname} {(necro ? "necromancy" : "revive")} on cooldown", Subclass.Instance.Config.Debug); TrackingAndMethods.DisplayCooldown(ev.Player, necro ? AbilityType.Necromancy : AbilityType.Revive, subClass, necro ? "necromancy" : "revive", Time.time); return; } List <Collider> colliders = Physics.OverlapSphere(ev.Player.Position, 3f).Where(e => e.gameObject.GetComponentInParent <Ragdoll>() != null).ToList(); colliders.Sort((Collider x, Collider y) => { return(Vector3.Distance(x.gameObject.transform.position, ev.Player.Position).CompareTo(Vector3.Distance(y.gameObject.transform.position, ev.Player.Position))); }); if (colliders.Count == 0) { ev.Player.Broadcast(2, Subclass.Instance.Config.ReviveFailedNoBodyMessage); Log.Debug($"Player {ev.Player.Nickname} {(necro ? "necromancy" : "revive")} overlap did not hit a ragdoll", Subclass.Instance.Config.Debug); return; } Ragdoll doll = colliders[0].gameObject.GetComponentInParent <Ragdoll>(); if (doll.owner == null) { Log.Debug($"Player {ev.Player.Nickname} {(necro ? "necromancy" : "revive")} failed", Subclass.Instance.Config.Debug); ev.Player.Broadcast(2, Subclass.Instance.Config.CantReviveMessage); return; } if (doll.owner.DeathCause.GetDamageType() == DamageTypes.Lure) { Log.Debug($"Player {ev.Player.Nickname} {(necro ? "necromancy" : "revive")} failed", Subclass.Instance.Config.Debug); ev.Player.Broadcast(2, Subclass.Instance.Config.CantReviveMessage); return; } EPlayer owner = EPlayer.Get(colliders[0].gameObject.GetComponentInParent <Ragdoll>().owner.PlayerId); if (owner != null && !owner.IsAlive) { bool revived = false; if (!necro && TrackingAndMethods.GetPreviousTeam(owner) != null && TrackingAndMethods.GetPreviousTeam(owner) == ev.Player.Team) { if (TrackingAndMethods.PlayersThatJustGotAClass.ContainsKey(owner)) { TrackingAndMethods.PlayersThatJustGotAClass[owner] = Time.time + 3f; } else { TrackingAndMethods.PlayersThatJustGotAClass.Add(owner, Time.time + 3f); } owner.SetRole((RoleType)TrackingAndMethods.GetPreviousRole(owner), true); if (TrackingAndMethods.PreviousSubclasses.ContainsKey(owner) && TrackingAndMethods.PreviousSubclasses[owner].AffectsRoles.Contains((RoleType)TrackingAndMethods.GetPreviousRole(owner))) { TrackingAndMethods.AddClass(owner, TrackingAndMethods.PreviousSubclasses[owner], false, true); } owner.Inventory.Clear(); revived = true; } else if (necro) { owner.Role = RoleType.Scp0492; TrackingAndMethods.AddZombie(ev.Player, owner); owner.IsFriendlyFireEnabled = true; revived = true; } if (revived) { Timing.CallDelayed(0.2f, () => { owner.ReferenceHub.playerMovementSync.OverridePosition(ev.Player.Position + new Vector3(0.3f, 1f, 0), 0, true); }); UnityEngine.Object.DestroyImmediate(doll.gameObject, true); TrackingAndMethods.AddCooldown(ev.Player, ability); TrackingAndMethods.UseAbility(ev.Player, ability, subClass); Log.Debug($"Player {ev.Player.Nickname} {(necro ? "necromancy" : "revive")} succeeded", Subclass.Instance.Config.Debug); } else { Log.Debug($"Player {ev.Player.Nickname} {(necro ? "necromancy" : "revive")} failed", Subclass.Instance.Config.Debug); ev.Player.Broadcast(2, Subclass.Instance.Config.CantReviveMessage); } } else { Log.Debug($"Player {ev.Player.Nickname} {(necro ? "necromancy" : "revive")} failed", Subclass.Instance.Config.Debug); ev.Player.Broadcast(2, Subclass.Instance.Config.CantReviveMessage); } }