Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix admin/unadmin not work with offline player (steamid/nickname) #75

Merged
merged 3 commits into from
Jun 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
31 changes: 22 additions & 9 deletions Rocket.Unturned/Commands/CommandAdmin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
Expand All @@ -28,7 +31,7 @@ public string Help

public string Syntax
{
get { return ""; }
get { return "<player>"; }
}

public List<string> Permissions
Expand All @@ -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));
}
}
}
}
29 changes: 22 additions & 7 deletions Rocket.Unturned/Commands/CommandUnadmin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
Expand All @@ -28,7 +32,7 @@ public string Help

public string Syntax
{
get { return ""; }
get { return "<player>"; }
}

public List<string> Aliases
Expand All @@ -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));
}
}
}
Expand Down
42 changes: 42 additions & 0 deletions Rocket.Unturned/Helpers/RocketUtilities.cs
Original file line number Diff line number Diff line change
@@ -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;
}
}
7 changes: 7 additions & 0 deletions Rocket.Unturned/U.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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..."},
Expand Down
Loading