diff --git a/README.md b/README.md index 5d8da42..17b1b0d 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,7 @@ You can still use old plugins without any changes/recompilation/updates. - [ ] RocketMod Fixes: - [x] Fix UnturnedPlayer.SteamProfile, current implementation cause so many lags (fixed, but still requires fixes). - [x] Fix UnturnedPlayerComponent is not being added and removed automatically. + - [x] /admin /unadmin doesn't work when use offline player (now it possible to use steam id of the offline player). - [ ] Assembly Resolve fixes (don't spam with not found library or make a option to disable it, load all libraries at rocketmod start instead of searching for them only on OnAssemblyResolve) - [ ] Commands fixes: - [ ] Fix /vanish. diff --git a/Rocket.Unturned/Commands/CommandAdmin.cs b/Rocket.Unturned/Commands/CommandAdmin.cs index b676fde..10754c7 100644 --- a/Rocket.Unturned/Commands/CommandAdmin.cs +++ b/Rocket.Unturned/Commands/CommandAdmin.cs @@ -3,6 +3,9 @@ using Rocket.Unturned.Chat; using Rocket.Unturned.Player; using System.Collections.Generic; +using Rocket.API.Extensions; +using Rocket.Unturned.Helpers; +using SDG.Unturned; namespace Rocket.Unturned.Commands { @@ -28,7 +31,7 @@ public string Help public string Syntax { - get { return ""; } + get { return ""; } } public List Permissions @@ -48,19 +51,29 @@ public void Execute(IRocketPlayer caller, string[] command) { if (!R.Settings.Instance.WebPermissions.Enabled) { - UnturnedPlayer player = command.GetUnturnedPlayerParameter(0); - if (player == null) + var playerName = command.GetStringParameter(0); + if (playerName == null) { UnturnedChat.Say(caller, U.Translate("command_generic_invalid_parameter")); - throw new WrongUsageOfCommandException(caller,this); + throw new WrongUsageOfCommandException(caller, this); } - - if (!player.IsAdmin) + if (RocketUtilities.TryGetSteamIdFromText(playerName, out var steamId) == false) + { + UnturnedChat.Say(caller, U.Translate("command_admin_player_invalid", playerName)); + throw new WrongUsageOfCommandException(caller, this); + } + var targetPlayer = UnturnedPlayer.FromCSteamID(steamId!.Value); + var targetPlayerName = targetPlayer?.Player != null + ? targetPlayer.CharacterName + : steamId.Value.ToString(); + if (SteamAdminlist.checkAdmin(steamId!.Value)) { - UnturnedChat.Say(caller, "Successfully admined "+player.CharacterName); - player.Admin(true); + UnturnedChat.Say(caller, U.Translate("command_admin_player_is_admin", targetPlayerName)); + return; } - } + + UnturnedChat.Say(caller, U.Translate("command_admin_success", targetPlayerName)); + } } } } \ No newline at end of file diff --git a/Rocket.Unturned/Commands/CommandUnadmin.cs b/Rocket.Unturned/Commands/CommandUnadmin.cs index e4f2f7a..fd87d9a 100644 --- a/Rocket.Unturned/Commands/CommandUnadmin.cs +++ b/Rocket.Unturned/Commands/CommandUnadmin.cs @@ -3,6 +3,10 @@ using Rocket.Unturned.Chat; using Rocket.Unturned.Player; using System.Collections.Generic; +using Rocket.API.Extensions; +using Rocket.Unturned.Helpers; +using SDG.Unturned; +using Steamworks; namespace Rocket.Unturned.Commands { @@ -28,7 +32,7 @@ public string Help public string Syntax { - get { return ""; } + get { return ""; } } public List Aliases @@ -45,18 +49,29 @@ public void Execute(IRocketPlayer caller, string[] command) { if (!R.Settings.Instance.WebPermissions.Enabled) { - UnturnedPlayer player = command.GetUnturnedPlayerParameter(0); - if (player == null) + var playerName = command.GetStringParameter(0); + if (playerName == null) { UnturnedChat.Say(caller, U.Translate("command_generic_invalid_parameter")); throw new WrongUsageOfCommandException(caller, this); } - - if (player.IsAdmin) + if (RocketUtilities.TryGetSteamIdFromText(playerName, out var steamId) == false) { - UnturnedChat.Say(caller, "Successfully unadmined " + player.CharacterName); - player.Admin(false); + UnturnedChat.Say(caller, U.Translate("command_unadmin_player_invalid", playerName)); + throw new WrongUsageOfCommandException(caller, this); } + var targetPlayer = UnturnedPlayer.FromCSteamID(steamId!.Value); + var targetPlayerName = targetPlayer?.Player != null + ? targetPlayer.CharacterName + : steamId.Value.ToString(); + if (SteamAdminlist.checkAdmin(steamId!.Value) == false) + { + UnturnedChat.Say(caller, U.Translate("command_unadmin_player_is_not_admin", targetPlayerName)); + return; + } + + SteamAdminlist.unadmin(steamId.Value); + UnturnedChat.Say(caller, U.Translate("command_unadmin_success", targetPlayerName)); } } } diff --git a/Rocket.Unturned/Helpers/RocketUtilities.cs b/Rocket.Unturned/Helpers/RocketUtilities.cs new file mode 100644 index 0000000..23549dc --- /dev/null +++ b/Rocket.Unturned/Helpers/RocketUtilities.cs @@ -0,0 +1,42 @@ +using SDG.Unturned; +using Steamworks; + +namespace Rocket.Unturned.Helpers; + +public static class RocketUtilities +{ + public static bool TryGetSteamIdFromText(string text, out CSteamID? steamId) + { + steamId = null; + if (text.StartsWith("7656")) + { + if (ulong.TryParse(text, out var parsedSteamId) == false) + { + return false; + } + steamId = new CSteamID(parsedSteamId); + return true; + } + var player = GetPlayerFromName(text); + if (player == null) + { + return false; + } + + steamId = player.channel.owner.playerID.steamID; + return true; + } + public static SDG.Unturned.Player? GetPlayerFromName(string targetPlayerName) + { + SDG.Unturned.Player? targetPlayer = null; + if (targetPlayerName.StartsWith("7656")) + { + targetPlayer = PlayerTool.getPlayer(new CSteamID(ulong.Parse(targetPlayerName))); + } + if (targetPlayer == null) + { + targetPlayer = PlayerTool.getPlayer(targetPlayerName); + } + return targetPlayer; + } +} \ No newline at end of file diff --git a/Rocket.Unturned/U.cs b/Rocket.Unturned/U.cs index a3b7884..7b3a31d 100644 --- a/Rocket.Unturned/U.cs +++ b/Rocket.Unturned/U.cs @@ -35,6 +35,13 @@ public class U : MonoBehaviour, IRocketImplementation, IModuleNexus { "command_generic_failed_find_player","Failed to find player"}, { "command_generic_invalid_parameter","Invalid parameter"}, { "command_generic_target_player_not_found","Target player not found"}, + { "command_generic_teleport_while_driving_error","You cannot teleport while driving or riding in a vehicle."}, + { "command_admin_player_invalid","Player {0} is not invalid or not found."}, + { "command_admin_player_is_admin","Player {0} is an admin."}, + { "command_admin_success","Successfully admined {0}."}, + { "command_unadmin_player_invalid","Player {0} is not invalid or not found."}, + { "command_unadmin_player_is_not_admin","Player {0} is not an admin."}, + { "command_unadmin_success","Successfully unadmined {0}"}, //{ "command_generic_teleport_while_driving_error","You cannot teleport while driving or riding in a vehicle."}, { "command_god_enable_console","{0} enabled Godmode"}, { "command_god_enable_private","You can feel the strength now..."},