diff --git a/README.md b/README.md index c8fab4a..b2055ee 100644 --- a/README.md +++ b/README.md @@ -19,12 +19,13 @@ This is the list of SCPUtils features with a brief description, i recomend to re - **Playtime statistics:** You can see each user playtime day per day or total playtime using a simple command! - **ASNs Bans:** You can ban specific ASNs to avoid ban evaders and cheaters, you can whitelist legit users to bypass the ASNs bans using a simple command, to add an ASN to blacklist add it inside server config setting. - **Team protection:** Editing configs you can set protection to the teams you want against the teams you want on specific zones or entire map. - +- **SCP-096 Target:** Players gets notified via hint when they become a SCP-096 Target. +- **Last Player:** Players gets notified via hint when they are the last player of the Team. **Database will get created inside Exiled/SCPUtils folder.**

**Each server must have it's own database, you cannot use one database on multiple servers!**

**You must add LiteDB.dll into Plugins/dependencies folder or plugin won't work**

-**Minimum requirements: Exiled version: 2.1.29 and LiteDB 5.0.9** +**Minimum requirements: Exiled version: 2.8.0 and LiteDB 5.0.9** ### Configs: @@ -58,6 +59,8 @@ You can see settings and edit them inside Exiled/port-config.yml file(example Ex | scputils_player_unrestrict | | scputils.moderatecommands | Unban a previously command banned player | | scputils_show_command_bans | | scputils.moderatecommands | Show command ban history of a specific player | | scputils_remove_previous_badge | | scputils.handlebadges | Removes previous badge from database for that player | +| scputils_round_info | | See bellow | Show round info | +| scputils_online_list | | See bellow | Show online player list | **Console commands** @@ -95,6 +98,35 @@ Pro tip: use scputils_speak.* to allow someone to speak with all the SCPs, set p Console commands must be executed like .scputils_help in game console (press ò to open it) +**Round Info** + +This command allows to show advanced round info and users are able to use it by default to see informations about their own team (using user console), if you don't like that just edit configs. +It has also the following permissions (those bypass server config): + +| Permisssion | Description | +| ------------- | ------------- | +| scputils.roundinfo.execute | Needed to simply executing the command, doesnt show any info | +| scputils.roundinfo.roundtime | Show roundtime | +| scputils.roundinfo.tickets | Show tickets of all teams | +| scputils.roundinfo.nextrespawnteam | Show which team respawn next and when | +| scputils.roundinfo.respawncount | Show how many times MTF/Chaos respawned | +| scputils.roundinfo.lastrespawn | Show when MTF/Chaos respawned | + +**Online List** + +This command show online player list, it's also usable by users on normal console, it uses advanced permissions like past command. + + +| Permisssion | Description | +| ------------- | ------------- | +| scputils.onlinelist.basic | Allows to execute the command, see total players online and player nicknames | +| scputils.onlinelist.userid | Show UserIDs | +| scputils.onlinelist.badge | Show badges (hidden or not) | +| scputils.onlinelist.role | Show roles | +| scputils.onlinelist.health | Show players health | +| scputils.onlinelist.flags | Show player flags (God, DNT, Muted etc...) | + + **Config Example** To edit your configs you must go into EXILED folder and edit port-config.yml file (example 7777-config.yml), and edit them
diff --git a/SCPUtils/Commands/OnlineList.cs b/SCPUtils/Commands/OnlineList.cs new file mode 100644 index 0000000..3a4eb2a --- /dev/null +++ b/SCPUtils/Commands/OnlineList.cs @@ -0,0 +1,68 @@ +using System; +using System.Text; +using CommandSystem; +using Exiled.Permissions.Extensions; + +namespace SCPUtils.Commands +{ + [CommandHandler(typeof(RemoteAdminCommandHandler))] + [CommandHandler(typeof(GameConsoleCommandHandler))] + [CommandHandler(typeof(ClientCommandHandler))] + class OnlineList : ICommand + { + public string Command { get; } = "scputils_online_list"; + + public string[] Aliases { get; } = new[] { "ol", "onlinelist" }; + + public string Description { get; } = "Show online player list"; + + + public bool Execute(ArraySegment arguments, ICommandSender sender, out string response) + { + if (!sender.CheckPermission("scputils.onlinelist.basic")) + { + response = "You need a higher administration level to use this command!"; + return false; + } + StringBuilder message = new StringBuilder($"Online Players ({CountOnlineMembers()})"); + + foreach (var player in Exiled.API.Features.Player.List) + { + message.AppendLine(); + message.Append($"({player.Id}) {player.Nickname}"); + if (sender.CheckPermission("scputils.onlinelist.userid")) message.Append($" ({player.UserId})"); + if (sender.CheckPermission("scputils.onlinelist.badge") && player.Group.BadgeText!=null) message.Append($" [{player.Group.BadgeText}]"); + if (sender.CheckPermission("scputils.onlinelist.role")) message.Append($" [{player.Role}]"); + if (sender.CheckPermission("scputils.onlinelist.health")) message.Append($" HP {player.Health} / {player.MaxHealth}"); + if (sender.CheckPermission("scputils.onlinelist.flags")) + { + if (player.IsOverwatchEnabled) message.Append(" [OVERWATCH]"); + if (player.NoClipEnabled) message.Append(" [NOCLIP]"); + if (player.IsGodModeEnabled) message.Append(" [GODMODE]"); + if (player.IsStaffBypassEnabled) message.Append(" [BYPASS MODE]"); + if (player.IsIntercomMuted) message.Append(" [INTERCOM MUTED]"); + if (player.IsMuted) message.Append(" [SERVER MUTED]"); + if (player.DoNotTrack) message.Append(" [DO NOT TRACK]"); + if (player.RemoteAdminAccess) message.Append(" [RA]"); + } + } + if (CountOnlineMembers() == 0) + { + response = "No player online!"; + return true; + } + response = $"{message}"; + return true; + } + + private static int CountOnlineMembers() + { + var value = 0; + foreach (var player in Exiled.API.Features.Player.List) + { + value++; + } + return value; + } + } +} \ No newline at end of file diff --git a/SCPUtils/Commands/PlayerInfo.cs b/SCPUtils/Commands/PlayerInfo.cs index 9d2ee2b..ad9caa9 100644 --- a/SCPUtils/Commands/PlayerInfo.cs +++ b/SCPUtils/Commands/PlayerInfo.cs @@ -38,7 +38,7 @@ public bool Execute(ArraySegment arguments, ICommandSender sender, out s return false; } - + string text = $"\n[{databasePlayer.Name} ({databasePlayer.Id}@{databasePlayer.Authentication})]\n\n" + $"Total SCP Suicides/Quits: [ {databasePlayer.ScpSuicideCount} ]\n" + diff --git a/SCPUtils/Commands/RoundInfo.cs b/SCPUtils/Commands/RoundInfo.cs new file mode 100644 index 0000000..7d93ebe --- /dev/null +++ b/SCPUtils/Commands/RoundInfo.cs @@ -0,0 +1,86 @@ +using System; +using System.Text; +using CommandSystem; +using Exiled.Permissions.Extensions; + +namespace SCPUtils.Commands +{ + [CommandHandler(typeof(RemoteAdminCommandHandler))] + [CommandHandler(typeof(GameConsoleCommandHandler))] + [CommandHandler(typeof(ClientCommandHandler))] + class RoundInfo : ICommand + { + public string Command { get; } = "scputils_round_info"; + + public string[] Aliases { get; } = new[] { "ri", "roundinfo", "round_info" }; + public string Description { get; } = "Show round info"; + + public bool Execute(ArraySegment arguments, ICommandSender sender, out string response) + { + var player = Exiled.API.Features.Player.Get(Exiled.API.Features.Player.Get(((CommandSender)sender).SenderId).ToString().Split(new string[] { " " }, StringSplitOptions.None)[2]); + if (!sender.CheckPermission("scputils.roundinfo.execute") && !ScpUtils.StaticInstance.Config.AllowedMtfInfoTeam.Contains(player.Team) && !ScpUtils.StaticInstance.Config.AllowedChaosInfoTeam.Contains(player.Team)) + { + response = "You need a higher administration level to use this command!"; + return false; + } + + if (!Exiled.API.Features.Round.IsStarted) + { + response = "Round is not started yet!"; + return true; + } + else + { + StringBuilder message = new StringBuilder($"Round Info:"); + if (sender.CheckPermission("scputils.roundinfo.roundtime")) + { + message.AppendLine($"Round time: {Exiled.API.Features.Round.ElapsedTime.ToString(@"hh\:mm\:ss")}"); + } + if (sender.CheckPermission("scputils.roundinfo.tickets") || ScpUtils.StaticInstance.Config.AllowedChaosInfoTeam.Contains(player.Team)) + { + message.AppendLine($"Number of Chaos Tickets: {Exiled.API.Features.Respawn.ChaosTickets}"); + } + if (sender.CheckPermission("scputils.roundinfo.tickets") || ScpUtils.StaticInstance.Config.AllowedMtfInfoTeam.Contains(player.Team)) + { + message.AppendLine($"Number of MTF Tickets: {Exiled.API.Features.Respawn.NtfTickets}"); + } + + if (sender.CheckPermission("scputils.roundinfo.nextrespawnteam") || ScpUtils.StaticInstance.Config.AllowedChaosInfoTeam.Contains(player.Team) || ScpUtils.StaticInstance.Config.AllowedMtfInfoTeam.Contains(player.Team)) + { + message.AppendLine($"Next known Respawn Team: {Exiled.API.Features.Respawn.NextKnownTeam}"); + message.AppendLine($"Time until respawn: {TimeSpan.FromSeconds(Exiled.API.Features.Respawn.TimeUntilRespawn).ToString(@"hh\:mm\:ss")}"); + } + + if (sender.CheckPermission("scputils.roundinfo.respawncount") || ScpUtils.StaticInstance.Config.AllowedChaosInfoTeam.Contains(player.Team)) + { + message.AppendLine($"Number of Chaos Respawn Waves: {ScpUtils.StaticInstance.EventHandlers.ChaosRespawnCount}"); + } + if (sender.CheckPermission("scputils.roundinfo.respawncount") || ScpUtils.StaticInstance.Config.AllowedMtfInfoTeam.Contains(player.Team)) + { + message.AppendLine($"Number of Mtf Respawn Waves: {ScpUtils.StaticInstance.EventHandlers.MtfRespawnCount}"); + } + if (sender.CheckPermission("scputils.roundinfo.lastrespawn") || ScpUtils.StaticInstance.Config.AllowedChaosInfoTeam.Contains(player.Team)) + { + if (ScpUtils.StaticInstance.EventHandlers.ChaosRespawnCount >= 1) + { + var timespan = (DateTime.Now - ScpUtils.StaticInstance.EventHandlers.LastChaosRespawn); + message.AppendLine($"Last Chaos wave respawn elapsed time: { timespan.ToString(@"hh\:mm\:ss")} ").AppendLine(); + + } + } + if (sender.CheckPermission("scputils.roundinfo.lastrespawn") || ScpUtils.StaticInstance.Config.AllowedMtfInfoTeam.Contains(player.Team)) + { + if (ScpUtils.StaticInstance.EventHandlers.MtfRespawnCount >= 1) + { + var timespan = (DateTime.Now - ScpUtils.StaticInstance.EventHandlers.LastMtfRespawn); + + message.AppendLine($"Last MTF wave respawn elapsed time: { timespan.ToString(@"hh\:mm\:ss")}"); + } + } + response = $"{message}"; + + } + return true; + } + } +} diff --git a/SCPUtils/Commands/StaffList.cs b/SCPUtils/Commands/StaffList.cs index 90e10e9..fb3c64c 100644 --- a/SCPUtils/Commands/StaffList.cs +++ b/SCPUtils/Commands/StaffList.cs @@ -14,8 +14,7 @@ class StaffList : ICommand public string[] Aliases { get; } = new[] { "sl", "stafflist" }; public string Description { get; } = "Show staff list"; - - public static int Count { get; private set; } + public bool Execute(ArraySegment arguments, ICommandSender sender, out string response) { @@ -24,7 +23,7 @@ public bool Execute(ArraySegment arguments, ICommandSender sender, out s response = "You need a higher administration level to use this command!"; return false; } - StringBuilder message = new StringBuilder($"Online Staffers( {CountStaffMembers()} )"); + StringBuilder message = new StringBuilder($"Online Staffers ({CountStaffMembers()})"); foreach (var player in Exiled.API.Features.Player.List) { @@ -43,6 +42,7 @@ public bool Execute(ArraySegment arguments, ICommandSender sender, out s if (player.IsOverwatchEnabled) message.Append(" [OVERWATCH]"); if (player.NoClipEnabled) message.Append(" [NOCLIP]"); if (player.IsGodModeEnabled) message.Append(" [GODMODE]"); + if (player.IsStaffBypassEnabled) message.Append(" [BYPASS MODE]"); } } if (CountStaffMembers()==0) @@ -55,12 +55,13 @@ public bool Execute(ArraySegment arguments, ICommandSender sender, out s } private static int CountStaffMembers() - { + { + var value = 0; foreach (var player in Exiled.API.Features.Player.List) { - if (player.ReferenceHub.serverRoles.RaEverywhere || player.ReferenceHub.serverRoles.Staff || player.RemoteAdminAccess) Count++; + if (player.ReferenceHub.serverRoles.RaEverywhere || player.ReferenceHub.serverRoles.Staff || player.RemoteAdminAccess) value++; } - return Count; + return value; } } } \ No newline at end of file diff --git a/SCPUtils/Configs.cs b/SCPUtils/Configs.cs index e012adc..86c2d5e 100644 --- a/SCPUtils/Configs.cs +++ b/SCPUtils/Configs.cs @@ -59,6 +59,12 @@ public class Configs : IConfig [Description("Should the badge visibility gets resetted if the user when joins doesn't have the permission to execute the command? You can bypass it using scputils_preference_persist command")] public bool KeepBadgeVisibilityWithoutPermission { get; private set; } = false; + [Description("Is 096 target feature enabled?")] + public bool Scp096TargetEnabled { get; private set; } = true; + + [Description("Notify last player alive?")] + public bool NotifyLastPlayerAlive { get; private set; } = true; + [Description("Autowarn message for suiciding as SCP")] public string SuicideWarnMessage { get; private set; } = "WARN:\nAs per server rules SCP's suicide is an offence, doing it too much will result in a ban!"; @@ -107,6 +113,12 @@ public class Configs : IConfig [Description("Auto-warn message duration (if enabled)")] public ushort AutoWarnMessageDuration { get; private set; } = 30; + [Description("SCP-096 target message duration (if enabled)")] + public ushort Scp096TargetMessageDuration { get; private set; } = 12; + + [Description("Last player alive message duration (if enabled)")] + public ushort LastPlayerAliveMessageDuration { get; private set; } = 12; + [Description("Which is the minimun number of suicides before the player may not receive any kick o ban ignoring the SCP suicides / quit percentage? (if enabled)")] public int ScpSuicideTollerance { get; private set; } = 5; @@ -138,6 +150,17 @@ public class Configs : IConfig [Description("Which message non-whitelisted players should get while connecting from blacklisted ASN?")] public string AsnKickMessage { get; private set; } = "The ASN you are connecting from is blacklisted from this server, please contact server staff to request to being whitelisted"; + [Description("Which message should be shown to who become SCP-096 target?")] + public string Scp096TargetText { get; private set; } = "Attention:\nYou became a target of SCP-096!"; + + [Description("Which message should be shown to last player alive of a team?")] + public string LastPlayerAliveNotificationText { get; private set; } = "Attention:\nYou are the last player alive of your team!"; + + [Description("Allowed classes to see MTF and Next respawn info")] + public List AllowedMtfInfoTeam { get; private set; } = new List() { Team.MTF, Team.RSC, Team.RIP }; + + [Description("Allowed classes to see Chaos info and Next respawn info")] + public List AllowedChaosInfoTeam { get; private set; } = new List() { Team.CDP, Team.CHI, Team.RIP }; /* diff --git a/SCPUtils/Functions/EventHandlers.cs b/SCPUtils/Functions/EventHandlers.cs index f4ff853..fda1fab 100644 --- a/SCPUtils/Functions/EventHandlers.cs +++ b/SCPUtils/Functions/EventHandlers.cs @@ -6,6 +6,7 @@ using Round = Exiled.API.Features.Round; using System.Collections.Generic; using System.Linq; +using Exiled.API.Extensions; namespace SCPUtils { @@ -17,8 +18,17 @@ public class EventHandlers public static bool TemporarilyDisabledWarns; + public int ChaosRespawnCount { get; set; } + + public int MtfRespawnCount { get; set; } + + public DateTime LastChaosRespawn { get; set; } + + public DateTime LastMtfRespawn { get; set; } + public EventHandlers(ScpUtils pluginInstance) => this.pluginInstance = pluginInstance; + internal void OnPlayerDeath(DyingEventArgs ev) { @@ -30,6 +40,18 @@ internal void OnPlayerDeath(DyingEventArgs ev) else if ((ev.HitInformation.GetDamageType() == DamageTypes.Wall && ev.HitInformation.Amount == -1f) && ev.Killer == ev.Target && pluginInstance.Config.QuitEqualsSuicide) pluginInstance.Functions.OnQuitOrSuicide(ev.Target); } } + + if(pluginInstance.Config.NotifyLastPlayerAlive) + { + var team = Exiled.API.Features.Player.Get(ev.Target.Team).ToList(); + if (team.Count - 1 == 1) + { + if (team[0] == ev.Target) + team[1].ShowHint(pluginInstance.Config.LastPlayerAliveNotificationText, pluginInstance.Config.LastPlayerAliveMessageDuration); + else + team[0].ShowHint(pluginInstance.Config.LastPlayerAliveNotificationText, pluginInstance.Config.LastPlayerAliveMessageDuration); + } + } } internal void OnRoundEnded(RoundEndedEventArgs _) @@ -41,11 +63,33 @@ internal void OnRoundEnded(RoundEndedEventArgs _) TemporarilyDisabledWarns = true; } + internal void OnTeamRespawn(RespawningTeamEventArgs ev) + { + + if (ev.NextKnownTeam.ToString() == "ChaosInsurgency") + { + ChaosRespawnCount++; + LastChaosRespawn = DateTime.Now; + } + + else if (ev.NextKnownTeam.ToString() == "NineTailedFox") + { + MtfRespawnCount++; + LastMtfRespawn = DateTime.Now; + } + + } + internal void OnPlayerDestroy(DestroyingEventArgs ev) { pluginInstance.Functions.SaveData(ev.Player); } + internal void On096AddTarget(AddingTargetEventArgs ev) + { + if (pluginInstance.Config.Scp096TargetEnabled) ev.Target.ShowHint(pluginInstance.Config.Scp096TargetText, pluginInstance.Config.Scp096TargetMessageDuration); + } + internal void OnWaitingForPlayers() { TemporarilyDisabledWarns = false; diff --git a/SCPUtils/Functions/Functions.cs b/SCPUtils/Functions/Functions.cs index 491ceb4..6ae6fe7 100644 --- a/SCPUtils/Functions/Functions.cs +++ b/SCPUtils/Functions/Functions.cs @@ -75,6 +75,7 @@ public void PostLoadPlayer(Exiled.API.Features.Player player) if (!string.IsNullOrEmpty(databasePlayer.PreviousBadge)) { var group = ServerStatic.GetPermissionsHandler()._groups[databasePlayer.PreviousBadge]; + ServerStatic.PermissionsHandler._members.Remove(player.UserId); player.ReferenceHub.serverRoles.SetGroup(group, false, true, true); ServerStatic.PermissionsHandler._members.Add(player.UserId, databasePlayer.PreviousBadge); } @@ -138,6 +139,8 @@ public bool CheckNickname(string name) return false; } + + public void SaveData(Exiled.API.Features.Player player) { if (player.Nickname != "Dedicated Server" && player != null && Database.PlayerData.ContainsKey(player)) diff --git a/SCPUtils/Plugin.cs b/SCPUtils/Plugin.cs index d285843..4abf3eb 100644 --- a/SCPUtils/Plugin.cs +++ b/SCPUtils/Plugin.cs @@ -2,6 +2,7 @@ using ServerEvents = Exiled.Events.Handlers.Server; using PlayerEvents = Exiled.Events.Handlers.Player; using MapEvents = Exiled.Events.Handlers.Map; +using Handlers = Exiled.Events.Handlers; using Features = Exiled.API.Features; using MEC; using HarmonyLib; @@ -14,13 +15,13 @@ public class ScpUtils : Features.Plugin { public override string Author { get; } = "Terminator_97#0507"; public override string Name { get; } = "SCPUtils"; - public override Version Version { get; } = new Version(2, 4, 6); - public override Version RequiredExiledVersion { get; } = new Version(2, 3, 4); + public override Version Version { get; } = new Version(2, 5, 0); + public override Version RequiredExiledVersion { get; } = new Version(2, 8, 0); public EventHandlers EventHandlers { get; private set; } public Functions Functions { get; private set; } public Player Player { get; private set; } public Database DatabasePlayerData { get; private set; } - public int PatchesCounter { get; private set; } + public int PatchesCounter { get; private set; } public Harmony Harmony { get; private set; } @@ -41,9 +42,12 @@ public void LoadEvents() PlayerEvents.Spawning += EventHandlers.OnPlayerSpawn; PlayerEvents.Dying += EventHandlers.OnPlayerDeath; PlayerEvents.Hurting += EventHandlers.OnPlayerHurt; - Exiled.Events.Handlers.Scp079.InteractingTesla += EventHandlers.On079TeslaEvent; + Handlers.Scp079.InteractingTesla += EventHandlers.On079TeslaEvent; ServerEvents.WaitingForPlayers += EventHandlers.OnWaitingForPlayers; - ServerEvents.RoundEnded += EventHandlers.OnRoundEnded; + ServerEvents.RoundEnded += EventHandlers.OnRoundEnded; + Handlers.Scp096.AddingTarget += EventHandlers.On096AddTarget; + ServerEvents.RespawningTeam += EventHandlers.OnTeamRespawn; + } public override void OnEnabled() @@ -77,9 +81,11 @@ public override void OnDisabled() PlayerEvents.Spawning -= EventHandlers.OnPlayerSpawn; PlayerEvents.Dying -= EventHandlers.OnPlayerDeath; PlayerEvents.Hurting -= EventHandlers.OnPlayerHurt; - Exiled.Events.Handlers.Scp079.InteractingTesla -= EventHandlers.On079TeslaEvent; + Handlers.Scp079.InteractingTesla -= EventHandlers.On079TeslaEvent; ServerEvents.WaitingForPlayers -= EventHandlers.OnWaitingForPlayers; - ServerEvents.RoundEnded -= EventHandlers.OnRoundEnded; + ServerEvents.RoundEnded -= EventHandlers.OnRoundEnded; + Handlers.Scp096.AddingTarget -= EventHandlers.On096AddTarget; + ServerEvents.RespawningTeam -= EventHandlers.OnTeamRespawn; EventHandlers = null; Functions = null; Functions.LastWarn.Clear(); diff --git a/SCPUtils/Properties/AssemblyInfo.cs b/SCPUtils/Properties/AssemblyInfo.cs index 0e6f160..ff490ca 100644 --- a/SCPUtils/Properties/AssemblyInfo.cs +++ b/SCPUtils/Properties/AssemblyInfo.cs @@ -5,7 +5,7 @@ // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("SCPUtils")] -[assembly: AssemblyDescription("SCPUtils 2.4.6 - https://github.com/terminator-97/SCPUtils")] +[assembly: AssemblyDescription("SCPUtils 2.5.0 - https://github.com/terminator-97/SCPUtils")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("SCPUtils")] @@ -31,5 +31,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("2.4.6.0")] -[assembly: AssemblyFileVersion("2.4.6.0")] \ No newline at end of file +[assembly: AssemblyVersion("2.5.0.0")] +[assembly: AssemblyFileVersion("2.5.0.0")] \ No newline at end of file diff --git a/SCPUtils/SCPUtils.csproj b/SCPUtils/SCPUtils.csproj index 58005bd..eafeb44 100644 --- a/SCPUtils/SCPUtils.csproj +++ b/SCPUtils/SCPUtils.csproj @@ -49,26 +49,29 @@ False ..\..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\SCP Secret Laboratory Dedicated Server\SCPSL_Data\Managed\CommandSystem.Core.dll - - ..\packages\EXILED.2.3.4\lib\net472\Exiled.API.dll + + ..\packages\EXILED.2.8.0\lib\net472\Exiled.API.dll - - ..\packages\EXILED.2.3.4\lib\net472\Exiled.Bootstrap.dll + + ..\packages\EXILED.2.8.0\lib\net472\Exiled.Bootstrap.dll - - ..\packages\EXILED.2.3.4\lib\net472\Exiled.CreditTags.dll + + ..\packages\EXILED.2.8.0\lib\net472\Exiled.CreditTags.dll - - ..\packages\EXILED.2.3.4\lib\net472\Exiled.Events.dll + + ..\packages\EXILED.2.8.0\lib\net472\Exiled.CustomItems.dll - - ..\packages\EXILED.2.3.4\lib\net472\Exiled.Loader.dll + + ..\packages\EXILED.2.8.0\lib\net472\Exiled.Events.dll - - ..\packages\EXILED.2.3.4\lib\net472\Exiled.Permissions.dll + + ..\packages\EXILED.2.8.0\lib\net472\Exiled.Loader.dll + + + ..\packages\EXILED.2.8.0\lib\net472\Exiled.Permissions.dll - ..\packages\EXILED.2.3.4\lib\net472\Exiled.Updater.dll + ..\packages\EXILED.2.8.0\lib\net472\Exiled.Updater.dll ..\packages\LiteDB.5.0.9\lib\net45\LiteDB.dll @@ -98,6 +101,7 @@ + @@ -111,6 +115,7 @@ + diff --git a/SCPUtils/packages.config b/SCPUtils/packages.config index 84a6ecb..e88dc48 100644 --- a/SCPUtils/packages.config +++ b/SCPUtils/packages.config @@ -1,5 +1,5 @@  - + \ No newline at end of file