Skip to content

Commit

Permalink
2.4.0
Browse files Browse the repository at this point in the history
  • Loading branch information
terminator-97 committed Jan 3, 2021
1 parent 94a5c79 commit 59eede6
Show file tree
Hide file tree
Showing 23 changed files with 481 additions and 82 deletions.
11 changes: 8 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,17 @@ This is the list of SCPUtils features with a brief description, i recomend to re

**Database will get created inside Exiled/SCPUtils folder.**<br /><br />
**You must add LiteDB.dll into Plugins/dependencies folder or plugin won't work**<br /><br />
**Minimum requirements: Exiled version: 2.1.8 and LiteDB 5.0.9**
**Minimum requirements: Exiled version: 2.1.22 and LiteDB 5.0.9**

### Configs:

You can see settings and edit them inside Exiled/port-config.yml file(example Exiled/7777-config.yml)

**Admin commands**
**Admin commands and Game console commands**

| Admin Commands | Args | Permission | Description |
| ------------- | ------------- | ------------- | ------------- |
| scputils_help | none | none | Show plugin info |
| scputils_help | none | scputils.help | Show plugin info |
| scputils_player_info | player / id / userid | scputils.playerinfo | Show player info |
| scputils_player_list | minimun percentage | scputils.playerlist | List all players with a percetage equal or higher of quits/suicides |
| scputils_player_reset | player / id / userid | scputils.playerreset | Reset warns,suicides,bans,kick and games played stats |
Expand All @@ -50,6 +50,10 @@ You can see settings and edit them inside Exiled/port-config.yml file(example Ex
| scputils_global_edit | <Total SCP Games to remove> <Suicides/Quits to remove> <Kicks to remove> <Bans to remove> | scputils.globaledit | Globally edits player stats (removes total scp games/suicides/kicks/bans) |
| scputils_player_edit | <id / userid> <Total SCP Games> <Suicides/Quits> <Kicks> <Bans>| scputils.playeredit | Edits player stats (total scp games/suicides/kicks/bans) by setting them to specified amount |
| scputils_player_delete | <userid / id> | scputils.playerdelete | Deletes a player from db, action is irreversible, do this when player is not in server. |
| scputils_preference_persist | <userid / id> | scputils.keep | If disabled by config players that lose the permission to change name,color,hide badge will have that setting resetted, by using this command you allow the player to use their preference even without permissions |
| scputils_player_restrict | <userid / id> | scputils.moderatecommands | <duration in minutes (0=permanent) <reason> | You can a specific player from change name and color feature |
| scputils_player_unrestrict | <userid / id> | scputils.moderatecommands | Unban a previously command banned player |
| scputils_show_command_bans | <userid / id> | scputils.moderatecommands | Show command ban history of a specific player |

**Console commands**

Expand All @@ -62,6 +66,7 @@ You can see settings and edit them inside Exiled/port-config.yml file(example Ex
| scputils_show_badge | none | scputils.badgevisibility | Permanently show your badge |
| scputils_hide_badge | none | scputils.badgevisibility | Permanently hide your badge |
| scputils_my_info | none | none | Show your preferences and temporarily badges info |
| scputils_play_time | none | none | Show your own playtime with a max range of 120 days |

**Speak permissions**

Expand Down
4 changes: 2 additions & 2 deletions SCPUtils/Commands/Help.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ public bool Execute(ArraySegment<string> arguments, ICommandSender sender, out s
{
string text = "";
text = $"<color=#1BBC9B>User commands:</color> \n" +
"<color=#1BBC9B>.scputils_info, .scputils_change_nickname, .scputils_change_color, .scputils_show_badge, .scputils_hide_badge, .scputils_my_info</color>";
"<color=#1BBC9B>.scputils_info, .scputils_change_nickname, .scputils_change_color, .scputils_show_badge, .scputils_hide_badge, .scputils_my_info, .scputils_play_time</color>";
if (CommandExtensions.IsAllowed(((CommandSender)sender).SenderId, "scputils.help") || ((CommandSender)sender).FullPermissions) text += "\n<color=#FFD700>Administration commands (Remote Admin): </color>\n" +
"<color=#FFD700>scputils_player_info, scputils_player_list, scputils_player_reset_preferences, scputils_player_reset, scputils_set_color, scputils_set_name, scputils_set_badge, scputils_revoke_badge, scputils_play_time, scputils_whitelist_asn, scputils_unwhitelist_asn, scputils_enable_suicide_warns, scputils_disable_suicide_warns, scputils_global_edit, scputils_player_edit, scputils_player_delete</color>";
"<color=#FFD700>scputils_player_info, scputils_player_list, scputils_player_reset_preferences, scputils_player_reset, scputils_set_color, scputils_set_name, scputils_set_badge, scputils_revoke_badge, scputils_play_time, scputils_whitelist_asn, scputils_unwhitelist_asn, scputils_enable_suicide_warns, scputils_disable_suicide_warns, scputils_global_edit, scputils_player_edit, scputils_player_delete, scputils_player_restrict, scputils_player_unrestrict, scputils_show_command_bans, scputils_preference_persist</color>";
response = text;
return true;
}
Expand Down
38 changes: 29 additions & 9 deletions SCPUtils/Commands/PlayTime.cs
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
using System;
using System.Linq;
using System.Text;
using CommandSystem;
using Log = Exiled.API.Features.Log;

namespace SCPUtils.Commands
{
[CommandHandler(typeof(RemoteAdminCommandHandler))]
[CommandHandler(typeof(GameConsoleCommandHandler))]
[CommandHandler(typeof(ClientCommandHandler))]
class PlayTime : ICommand
{

Expand All @@ -18,10 +21,24 @@ class PlayTime : ICommand
public bool Execute(ArraySegment<string> arguments, ICommandSender sender, out string response)
{
string target;
if (!CommandExtensions.IsAllowed(((CommandSender)sender).SenderId, "scputils.playtime") && !((CommandSender)sender).FullPermissions)
int range;
if (!CommandExtensions.IsAllowed(((CommandSender)sender).SenderId, "scputils.playerinfo") && !((CommandSender)sender).FullPermissions)
{
response = "<color=red> You need a higher administration level to use this command!</color>";
return false;
target = Exiled.API.Features.Player.Get(((CommandSender)sender).SenderId).ToString().Split(new string[] { " " }, StringSplitOptions.None)[2];

if (arguments.Count < 1)
{
response = $"<color=yellow>Usage: {Command} <days range> </color>";
return false;
}

else int.TryParse(arguments.Array[1], out range);

if (range > 120)
{
response = "<color=red>You can specify a range of max 120 days!</color>";
return false;
}
}
else
{
Expand All @@ -31,6 +48,9 @@ public bool Execute(ArraySegment<string> arguments, ICommandSender sender, out s
return false;
}
else target = arguments.Array[1].ToString();

int.TryParse(arguments.Array[2], out range);

}
var databasePlayer = target.GetDatabasePlayer();

Expand All @@ -41,8 +61,6 @@ public bool Execute(ArraySegment<string> arguments, ICommandSender sender, out s
}


int.TryParse(arguments.Array[2], out int range);

if (range < 0)
{
response = "<color=red>You have to specify a positive number!</color>";
Expand All @@ -54,15 +72,17 @@ public bool Execute(ArraySegment<string> arguments, ICommandSender sender, out s
response = "<color=yellow>Player not found on Database or Player is loading data!</color>";
return false;
}
string message = $"\n[{databasePlayer.Name} ({databasePlayer.Id}@{databasePlayer.Authentication})]\n\n" +
$"Total Playtime: [ { new TimeSpan(0, 0, databasePlayer.PlayTimeRecords.Values.Sum()).ToString() } ]\n";
StringBuilder message = new StringBuilder($"[{databasePlayer.Name} ({databasePlayer.Id}@{databasePlayer.Authentication})");
message.AppendLine();
message.Append($"Total Playtime: [ { new TimeSpan(0, 0, databasePlayer.PlayTimeRecords.Values.Sum()).ToString() } ]");


for (int i = 0; i <= range; i++)
{
message.AppendLine();
DateTime.TryParse((DateTime.Now.Date.AddDays(-i)).ToString(), out DateTime date);
if (databasePlayer.PlayTimeRecords.ContainsKey(date.Date.ToShortDateString())) message += $"{date.Date.ToShortDateString()} Playtime: [ { new TimeSpan(0, 0, databasePlayer.PlayTimeRecords[date.Date.ToShortDateString()]).ToString() } ]\n";
else message += $"{date.Date.ToShortDateString()} Playtime: [ No activity ]\n";
if (databasePlayer.PlayTimeRecords.ContainsKey(date.Date.ToShortDateString())) message.Append($"{date.Date.ToShortDateString()} Playtime: [ { new TimeSpan(0, 0, databasePlayer.PlayTimeRecords[date.Date.ToShortDateString()]).ToString() } ]");
else message.Append($"{date.Date.ToShortDateString()} Playtime: [ No activity ]");
}

response = $"{message}";
Expand Down
38 changes: 23 additions & 15 deletions SCPUtils/Commands/PlayerInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,21 +37,29 @@ public bool Execute(ArraySegment<string> arguments, ICommandSender sender, out s
return false;
}

response = $"<color=green>\n[{databasePlayer.Name} ({databasePlayer.Id}@{databasePlayer.Authentication})]\n\n" +
$"Total SCP Suicides/Quits: [ {databasePlayer.ScpSuicideCount} ]\n" +
$"Total SCP Suicides/Quits Kicks: [ {databasePlayer.TotalScpSuicideKicks} ]\n" +
$"Total SCP Suicides/Quits Bans: [ {databasePlayer.TotalScpSuicideBans} ]\n" +
$"Total Games played as SCP: [ {databasePlayer.TotalScpGamesPlayed} ]\n" +
$"Total Suicides/Quits Percentage: [ {Math.Round(databasePlayer.SuicidePercentage, 2)}% ]\n" +
$"First Join: [ {databasePlayer.FirstJoin} ]\n" +
$"Last Seen: [ {databasePlayer.LastSeen} ]\n" +
$"Custom Color: [ {databasePlayer.ColorPreference} ]\n" +
$"Custom Name: [ {databasePlayer.CustomNickName} ]\n" +
$"Temporarily Badge: [ {databasePlayer.BadgeName} ]\n" +
$"Badge Expire: [ {databasePlayer.BadgeExpire} ]\n" +
$"Hide Badge: [ {databasePlayer.HideBadge} ]\n" +
$"Asn Whitelisted: [ {databasePlayer.ASNWhitelisted} ]\n" +
$"Total Playtime: [ { new TimeSpan(0, 0, databasePlayer.PlayTimeRecords.Values.Sum()).ToString() } ]</color>";


string text = $"<color=green>\n[{databasePlayer.Name} ({databasePlayer.Id}@{databasePlayer.Authentication})]\n\n" +
$"Total SCP Suicides/Quits: [ {databasePlayer.ScpSuicideCount} ]\n" +
$"Total SCP Suicides/Quits Kicks: [ {databasePlayer.TotalScpSuicideKicks} ]\n" +
$"Total SCP Suicides/Quits Bans: [ {databasePlayer.TotalScpSuicideBans} ]\n" +
$"Total Games played as SCP: [ {databasePlayer.TotalScpGamesPlayed} ]\n" +
$"Total Suicides/Quits Percentage: [ {Math.Round(databasePlayer.SuicidePercentage, 2)}% ]\n" +
$"First Join: [ {databasePlayer.FirstJoin} ]\n" +
$"Last Seen: [ {databasePlayer.LastSeen} ]\n" +
$"Custom Color: [ {databasePlayer.ColorPreference} ]\n" +
$"Custom Name: [ {databasePlayer.CustomNickName} ]\n" +
$"Temporarily Badge: [ {databasePlayer.BadgeName} ]\n" +
$"Badge Expire: [ {databasePlayer.BadgeExpire} ]\n" +
$"Previous Badge: [ {databasePlayer.PreviousBadge} ]\n" +
$"Hide Badge: [ {databasePlayer.HideBadge} ]\n" +
$"Asn Whitelisted: [ {databasePlayer.ASNWhitelisted} ]\n" +
$"Keep Flag: [ {databasePlayer.KeepPreferences} ]\n" +
$"Total Playtime: [ { new TimeSpan(0, 0, databasePlayer.PlayTimeRecords.Values.Sum()).ToString() } ]</color>";

if (databasePlayer.IsRestricted()) text += $"\n<color=red>User account is currently restricted</color>\nReason: [ {databasePlayer.Restricted.Values.Last()} ]\nExpire: [ {databasePlayer.Restricted.Keys.Last()} ]";

response = text;

return true;
}
Expand Down
11 changes: 6 additions & 5 deletions SCPUtils/Commands/PlayerList.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Text;
using CommandSystem;

namespace SCPUtils.Commands
Expand Down Expand Up @@ -29,16 +30,16 @@ public bool Execute(ArraySegment<string> arguments, ICommandSender sender, out s
return false;
}
}
var playerListString = "[Quits/Suicides Percentage]\n";

StringBuilder playerListString = new StringBuilder("[Quits/Suicides Percentage]");
playerListString.AppendLine();
if (int.TryParse(arguments.Array[1].ToString(), out int minpercentage))
{
foreach (var databasePlayer in Database.LiteDatabase.GetCollection<Player>().Find(x => x.SuicidePercentage >= minpercentage))
{
playerListString += $"\n{databasePlayer.Name} ({databasePlayer.Id}@{databasePlayer.Authentication}) -[ {Math.Round(databasePlayer.SuicidePercentage, 2)}% ]";
playerListString.AppendLine();
playerListString.Append($"{databasePlayer.Name} ({databasePlayer.Id}@{databasePlayer.Authentication}) -[ {Math.Round(databasePlayer.SuicidePercentage, 2)}% ]");
}
if (playerListString == "[Quits/Suicides as SCP]\n") response = "No results found";
else response = $"{playerListString}";
response = $"{playerListString}";
}

else
Expand Down
64 changes: 64 additions & 0 deletions SCPUtils/Commands/PlayerRestrict.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
using System;
using CommandSystem;

namespace SCPUtils.Commands
{
[CommandHandler(typeof(RemoteAdminCommandHandler))]
[CommandHandler(typeof(GameConsoleCommandHandler))]
class PlayerRestrict : ICommand
{

public string Command { get; } = "scputils_player_restrict";

public string[] Aliases { get; } = new[] { "restrict", "susp" };

public string Description { get; } = "This command restrict a player from using change name and set color commands!";

public bool Execute(ArraySegment<string> arguments, ICommandSender sender, out string response)
{
string target;
string reason;
if (!CommandExtensions.IsAllowed(((CommandSender)sender).SenderId, "scputils.moderatecommands") && !((CommandSender)sender).FullPermissions)
{
response = "<color=red> You need a higher administration level to use this command!</color>";
return false;
}

else if (arguments.Count < 3)
{
response = $"Usage: {Command} <player name / id> <Minutes, 0 = permanent> <Reason>";
return false;
}
target = arguments.Array[1].ToString();

var player = Exiled.API.Features.Player.Get(target);
var databasePlayer = target.GetDatabasePlayer();

if (databasePlayer == null)
{
response = "<color=yellow>Player not found on Database or Player is loading data!</color>";
return false;
}

else if (databasePlayer.IsRestricted())
{
response = "Player is already suspended!";
return false;
}


else if (int.TryParse(arguments.Array[2], out int minutes))
{
reason = string.Join(" ", arguments.Array, 3, arguments.Array.Length - 3);
databasePlayer.Restricted.Add(DateTime.Now.AddMinutes(minutes), reason);
if (minutes == 0) databasePlayer.Restricted.Add(DateTime.Now.AddDays(20000), reason);
Database.LiteDatabase.GetCollection<Player>().Update(databasePlayer);
response = $"Player suspended!";

}
else response = "Duration must be integer!";

return true;
}
}
}
58 changes: 58 additions & 0 deletions SCPUtils/Commands/PlayerUnrestrict.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
using System;
using System.Linq;
using CommandSystem;


namespace SCPUtils.Commands
{
[CommandHandler(typeof(RemoteAdminCommandHandler))]
[CommandHandler(typeof(GameConsoleCommandHandler))]
public class PlayerUnrestrict : ICommand
{
public string Command { get; } = "scputils_player_unrestrict";

public string[] Aliases { get; } = new[] { "unrestrict", "unsusp" };

public string Description { get; } = "Removes a restriction from a player!";

public bool Execute(ArraySegment<string> arguments, ICommandSender sender, out string response)
{
string target;
if (!CommandExtensions.IsAllowed(((CommandSender)sender).SenderId, "scputils.moderatecommands") && !((CommandSender)sender).FullPermissions)
{
response = "<color=red> You need a higher administration level to use this command!</color>";
return false;
}

else if (arguments.Count < 1)
{
response = $"Usage: {Command} <player name/id>";
return false;
}


else target = arguments.Array[1].ToString();

var player = Exiled.API.Features.Player.Get(target);
var databasePlayer = target.GetDatabasePlayer();

if (databasePlayer == null)
{
response = "<color=yellow>Player not found on Database or Player is loading data!</color>";
return false;
}

else if (!databasePlayer.IsRestricted())
{
response = "Player is not suspended!";
return false;
}

databasePlayer.Restricted.Remove(databasePlayer.Restricted.Keys.Last());
Database.LiteDatabase.GetCollection<Player>().Update(databasePlayer);
response = "Player unsuspended!";
return true;

}
}
}
61 changes: 61 additions & 0 deletions SCPUtils/Commands/PreferencePersist.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
using System;
using System.Linq;
using CommandSystem;

namespace SCPUtils.Commands
{
[CommandHandler(typeof(RemoteAdminCommandHandler))]
[CommandHandler(typeof(GameConsoleCommandHandler))]
[CommandHandler(typeof(ClientCommandHandler))]
class PreferencePersist : ICommand
{

public string Command { get; } = "scputils_preference_persist";

public string[] Aliases { get; } = new[] { "pp" };

public string Description { get; } = "Use this to keep player badge and color even if he doesn't have access to that permission!";

public bool Execute(ArraySegment<string> arguments, ICommandSender sender, out string response)
{
string target;
if (!CommandExtensions.IsAllowed(((CommandSender)sender).SenderId, "scputils.keep") && !((CommandSender)sender).FullPermissions)
{
response = "<color=red> You need a higher administration level to use this command!</color>";
return false;
}
else
{
if (arguments.Count < 1)
{
response = $"<color=yellow>Usage: {Command} <player name/id></color>";
return false;
}
else target = arguments.Array[1].ToString();
}
var databasePlayer = target.GetDatabasePlayer();

if (databasePlayer == null)
{
response = $"<color=yellow>Player not found on Database or Player is loading data!</color>";
return false;
}

if (databasePlayer.KeepPreferences == false)
{
databasePlayer.KeepPreferences = true;
Database.LiteDatabase.GetCollection<Player>().Update(databasePlayer);
response = "Success, keep mode has been enabled!";
}
else
{
databasePlayer.KeepPreferences = false;
Database.LiteDatabase.GetCollection<Player>().Update(databasePlayer);
response = "Success, keep mode has been disabled!";
}


return true;
}
}
}
Loading

0 comments on commit 59eede6

Please sign in to comment.