Filtered commands for console that are InGameOnly, improved output for console.

This commit is contained in:
Lucca Faria Ferri 2023-02-13 09:48:38 -08:00
parent 6907cebcc6
commit 5ac2ca9e2b
31 changed files with 131 additions and 195 deletions

View File

@ -464,5 +464,29 @@ namespace DiIiS_NA.LoginServer.AccountsSystem
Admin,
Owner
}
public static class UserLevelsExtensions
{
public static UserLevels? FromString(string str)
{
if (string.IsNullOrWhiteSpace(str))
return null;
switch (str.ToLower())
{
case "user":
return UserLevels.User;
case "tester":
return UserLevels.Tester;
case "gm":
return UserLevels.GM;
case "admin":
return UserLevels.Admin;
case "owner":
return UserLevels.Owner;
default:
return null;
}
}
}
}
}

View File

@ -124,6 +124,9 @@
<Compile Update="D3-GameServer\MessageSystem\GameAttribute.List.cs">
<DependentUpon>GameAttribute.cs</DependentUpon>
</Compile>
<Compile Update="D3-GameServer\CommandManager\InvalidParametersException.cs">
<DependentUpon>CommandException.cs</DependentUpon>
</Compile>
</ItemGroup>
</Project>

View File

@ -66,12 +66,12 @@ namespace DiIiS_NA.GameServer.CommandManager
#if DEBUG
return $"You don't have enough privileges to invoke that command (Min. level: {Attributes.MinUserLevel}).";
#else
return "You don't have enough privileges to invoke that command.";
return "Unknown command.";
#endif
if (invokerClient?.InGameClient == null && Attributes.InGameOnly)
if (invokerClient?.InGameClient?.Player == null && Attributes.InGameOnly)
return "You can only use this command in-game.";
string[] @params = null;
CommandAttribute target = null;
CommandAttribute target;
if (parameters == string.Empty)
target = GetDefaultSubcommand();
@ -89,9 +89,9 @@ namespace DiIiS_NA.GameServer.CommandManager
#if DEBUG
return $"You don't have enough privileges to invoke that command (Min. level: {Attributes.MinUserLevel}).";
#else
return "You don't have enough privileges to invoke that command.";
return "Unknown command.";
#endif
if (invokerClient?.InGameClient == null && target.InGameOnly)
if (invokerClient?.InGameClient?.Player == null && target.InGameOnly)
return "This command can only be invoked in-game.";
try
@ -124,7 +124,7 @@ namespace DiIiS_NA.GameServer.CommandManager
{
var output = _commands
.Where(pair => pair.Key.Name.Trim() != string.Empty)
.Where(pair => invokerClient == null || pair.Key.MinUserLevel <= invokerClient.Account.UserLevel)
.Where(pair => (invokerClient == null && pair.Key.InGameOnly) || (invokerClient != null && pair.Key.MinUserLevel <= invokerClient.Account.UserLevel))
.Aggregate("Available subcommands: ", (current, pair) => current + (pair.Key.Name + ", "));
return output.Substring(0, output.Length - 2) + ".";

View File

@ -28,13 +28,18 @@ namespace DiIiS_NA.GameServer.CommandManager
if (attributes.Length == 0) continue;
var groupAttribute = attributes[0];
if (groupAttribute.Name == null) continue;
if (groupAttribute.Name.Contains(" "))
{
Logger.Warn($"Command group name '{groupAttribute.Name}' contains spaces (which is $[red]$not$[/]$ allowed). Command group will be ignored.");
}
if (CommandsConfig.Instance.DisabledGroupsData.Contains(groupAttribute.Name))
{
Logger.Trace($"Command group {groupAttribute.Name} is disabled.");
Logger.Warn($"Command group name '{groupAttribute.Name}' is disabled.");
continue;
}
if (CommandGroups.ContainsKey(groupAttribute))
Logger.Warn("There exists an already registered command group named '{0}'.", groupAttribute.Name);
Logger.Warn($"There exists an already registered command group named '{groupAttribute.Name}'.");
var commandGroup = (CommandGroup)Activator.CreateInstance(type);
if (commandGroup != null)
@ -44,7 +49,7 @@ namespace DiIiS_NA.GameServer.CommandManager
}
else
{
Logger.Warn("Failed to create an instance of command group '{0}'.", groupAttribute.Name);
Logger.Warn($"Failed to create an instance of command group '{groupAttribute.Name}'.");
}
}
}
@ -63,8 +68,8 @@ namespace DiIiS_NA.GameServer.CommandManager
if (!ExtractCommandAndParameters(line, out var command, out var parameters))
{
output = "Unknown command: " + line;
Logger.Error(output);
output = "Unknown command.";
Logger.Warn(output);
return;
}
@ -77,11 +82,11 @@ namespace DiIiS_NA.GameServer.CommandManager
if (found == false)
{
Logger.Error("Unknown command: " + command.SafeAnsi());
Logger.Warn("Unknown command.");
return;
}
Logger.Success(output != string.Empty ? output : "Command executed successfully.");
Logger.Success(output != string.Empty ? "\n-----------------------------------------------------\n" + output + "\n-----------------------------------------------------\n" : "Command executed successfully.");
}
@ -110,8 +115,12 @@ namespace DiIiS_NA.GameServer.CommandManager
}
if (found == false)
#if DEBUG
output = $"Unknown command: {command} {parameters}";
#else
output = $"Unknown command.";
#endif
if (output == string.Empty)
return true;
@ -151,23 +160,23 @@ namespace DiIiS_NA.GameServer.CommandManager
{
public override string Fallback(string[] parameters = null, BattleClient invokerClient = null)
{
var output = "Available commands: ";
var output = "Available commands:\n";
output =
invokerClient != null
? CommandGroups.Where(pair => pair.Key.MinUserLevel > invokerClient?.Account.UserLevel)
.Aggregate(output, (current, pair) => current + ($"{CommandsConfig.Instance.CommandPrefix}{pair.Key.Name}: {pair.Key.Help}\n\n"))
: CommandGroups
.Where(s=>!s.Key.InGameOnly)
.Aggregate(output, (current, pair) => current + (($"$[underline green]${CommandsConfig.Instance.CommandPrefix}{pair.Key.Name}$[/]$: {pair.Key.Help}\n\n")));
.Aggregate(output, (current, pair) => current + (($"$[underline green]${CommandsConfig.Instance.CommandPrefix}{pair.Key.Name}$[/]$: $[white]${pair.Key.Help}$[/]$\n")));
return output + "Type 'help <command>' to get help about a specific command.";
return output + $"Type '{CommandsConfig.Instance.CommandPrefix}help <command>' to get help about a specific command.";
}
}
[CommandGroup("help", "usage: help <command>\nType 'commands' to get a list of available commands.")]
public class HelpCommandGroup : CommandGroup
{
public override string Fallback(string[] parameters = null, BattleClient invokerClient = null) => "usage: help <command>\nType 'commands' to get a list of available commands.";
public override string Fallback(string[] parameters = null, BattleClient invokerClient = null) => $"usage: {CommandsConfig.Instance.CommandPrefix}help <command>\nType 'commands' to get a list of available commands.";
public override string Handle(string parameters, BattleClient invokerClient = null)
{
@ -180,7 +189,7 @@ namespace DiIiS_NA.GameServer.CommandManager
var group = @params[0];
var command = @params.Length > 1 ? @params[1] : string.Empty;
foreach (var pair in CommandGroups.Where(pair => group == pair.Key.Name))
foreach (var pair in CommandGroups.Where(pair => group == pair.Key.Name && ((invokerClient == null && !pair.Key.InGameOnly) || (invokerClient != null && pair.Key.MinUserLevel <= invokerClient.Account.UserLevel))))
{
if (command == string.Empty)
return pair.Key.Help;

View File

@ -38,27 +38,10 @@ public class AccountCommands : CommandGroup
if (@params.Length == 4)
{
var level = @params[3].ToLower();
switch (level)
{
case "owner":
userLevel = Account.UserLevels.Owner;
break;
case "admin":
userLevel = Account.UserLevels.Admin;
break;
case "gm":
userLevel = Account.UserLevels.GM;
break;
case "tester":
userLevel = Account.UserLevels.Tester;
break;
case "user":
userLevel = Account.UserLevels.User;
break;
default:
return level + " is not a valid user level.";
}
var level = Account.UserLevelsExtensions.FromString(@params[3]);
if (level == null)
return "Invalid user level.";
userLevel = level.Value;
}
if (!email.Contains('@'))
@ -131,34 +114,16 @@ public class AccountCommands : CommandGroup
return "Invalid arguments. Type 'help account setuserlevel' to get help.";
var email = @params[0];
var level = @params[1].ToLower();
Account.UserLevels userLevel;
var account = AccountManager.GetAccountByEmail(email);
if (account == null)
return $"No account with email '{email}' exists.";
switch (level)
{
case "owner":
userLevel = Account.UserLevels.Owner;
break;
case "admin":
userLevel = Account.UserLevels.Admin;
break;
case "gm":
userLevel = Account.UserLevels.GM;
break;
case "tester":
userLevel = Account.UserLevels.Tester;
break;
case "user":
userLevel = Account.UserLevels.User;
break;
default:
return level + " is not a valid user level.";
}
var level = Account.UserLevelsExtensions.FromString(@params[1]);
if (level == null)
return "Invalid user level.";
Account.UserLevels userLevel = level.Value;
account.UpdateUserLevel(userLevel);
return $"Updated user level for account {email} [user-level: {userLevel}].";

View File

@ -8,15 +8,13 @@ namespace DiIiS_NA.GameServer.CommandManager;
[CommandGroup("actors",
"Actors info (does not include Players, Minions and Monsters). This is useful for testing purposes.",
Account.UserLevels.Tester)]
Account.UserLevels.Tester, inGameOnly: true)]
public class ActorsCommand : CommandGroup
{
[Command("all", "Lists all actors in world sorted by distance to you.", Account.UserLevels.Tester)]
[Command("all", "Lists all actors in world sorted by distance to you.", Account.UserLevels.Tester, inGameOnly: true)]
public string All(string[] @params, BattleClient invokerClient)
{
if (invokerClient?.InGameClient?.Player is not {} player)
return "You are not in game.";
var player = invokerClient.InGameClient.Player;
return $"World [{player.World.SNO}]\nAll actors:" + string.Join("\n", player.World.Actors
.OrderBy(a =>
{
@ -32,12 +30,10 @@ public class ActorsCommand : CommandGroup
}));
}
[Command("revealed", "Lists all revealed actors sorted by distance to you.", Account.UserLevels.Tester)]
[Command("revealed", "Lists all revealed actors sorted by distance to you.", Account.UserLevels.Tester, inGameOnly: true)]
public string Revealed(string[] @params, BattleClient invokerClient)
{
if (invokerClient?.InGameClient?.Player is not {} player)
return "You are not in game.";
var player = invokerClient.InGameClient.Player;
return $"World [{player.World.SNO}]\nVisible actors:" + string.Join("\n", player.World.Actors
.Where(a => a.Value.IsRevealedToPlayer(player))
.OrderBy(a =>
@ -54,12 +50,10 @@ public class ActorsCommand : CommandGroup
}));
}
[Command("all-usable", "Sets all actors operable in world sorted by distance to you.e (not the wisest invention).", Account.UserLevels.Tester)]
[Command("all-usable", "Sets all actors operable in world sorted by distance to you.e (not the wisest invention).", Account.UserLevels.Tester, inGameOnly: true)]
public string Usable(string[] @params, BattleClient invokerClient)
{
if (invokerClient?.InGameClient?.Player is not {} player)
return "You are not in game.";
var player = invokerClient.InGameClient.Player;
if (@params is { Length: > 0 })
{
if (!Enum.TryParse<ActorSno>(@params[0].AsSpan(), out var actorSno))

View File

@ -5,18 +5,12 @@ using DiIiS_NA.LoginServer.Battle;
namespace DiIiS_NA.GameServer.CommandManager;
[CommandGroup("conversation", "Starts a conversation. \n Usage: conversation snoConversation")]
[CommandGroup("conversation", "Starts a conversation. \n Usage: conversation snoConversation", inGameOnly: true)]
public class ConversationCommand : CommandGroup
{
[DefaultCommand]
[DefaultCommand(inGameOnly: true)]
public string Conversation(string[] @params, BattleClient invokerClient)
{
if (invokerClient == null)
return "You cannot invoke this command from console.";
if (invokerClient.InGameClient == null)
return "You can only invoke this command while in-game.";
if (@params.Length != 1)
return "Invalid arguments. Type 'help conversation' to get help.";

View File

@ -3,10 +3,10 @@ using DiIiS_NA.LoginServer.Battle;
namespace DiIiS_NA.GameServer.CommandManager;
[CommandGroup("difficulty", "Changes difficulty of the game", Account.UserLevels.GM)]
[CommandGroup("difficulty", "Changes difficulty of the game", Account.UserLevels.GM, inGameOnly: true)]
public class DifficultyCommand : CommandGroup
{
[Command("max", "Sets difficulty to max", Account.UserLevels.GM)]
[Command("max", "Sets difficulty to max", Account.UserLevels.GM, inGameOnly: true)]
public string Max(string[] @params, BattleClient invokerClient)
{
if (invokerClient?.InGameClient is null)
@ -17,7 +17,7 @@ public class DifficultyCommand : CommandGroup
return $"Difficulty set to max - {invokerClient.InGameClient.Player.World.Game.Difficulty}";
}
[Command("min", "Sets difficulty to min", Account.UserLevels.GM)]
[Command("min", "Sets difficulty to min", Account.UserLevels.GM, inGameOnly: true)]
public string Min(string[] @params, BattleClient invokerClient)
{
if (invokerClient?.InGameClient is null)
@ -28,7 +28,7 @@ public class DifficultyCommand : CommandGroup
return $"Difficulty set to min - {invokerClient.InGameClient.Player.World.Game.Difficulty}";
}
[Command("up", "Increases difficulty of the game", Account.UserLevels.GM)]
[Command("up", "Increases difficulty of the game", Account.UserLevels.GM, inGameOnly: true)]
public string Up(string[] @params, BattleClient invokerClient)
{
if (invokerClient?.InGameClient is null)
@ -39,7 +39,7 @@ public class DifficultyCommand : CommandGroup
return $"Difficulty increased - set to {invokerClient.InGameClient.Player.World.Game.Difficulty}";
}
[Command("down", "Decreases difficulty of the game", Account.UserLevels.GM)]
[Command("down", "Decreases difficulty of the game", Account.UserLevels.GM, inGameOnly: true)]
public string Down(string[] @params, BattleClient invokerClient)
{
if (invokerClient?.InGameClient is null)
@ -50,7 +50,7 @@ public class DifficultyCommand : CommandGroup
return $"Difficulty decreased - set to {invokerClient.InGameClient.Player.World.Game.Difficulty}";
}
[Command("set", "Sets difficulty of the game", Account.UserLevels.GM)]
[Command("set", "Sets difficulty of the game", Account.UserLevels.GM, inGameOnly: true)]
public string Set(string[] @params, BattleClient invokerClient)
{
if (invokerClient?.InGameClient is null)
@ -61,7 +61,7 @@ public class DifficultyCommand : CommandGroup
return $"Difficulty set to {invokerClient.InGameClient.Player.World.Game.Difficulty}";
}
[DefaultCommand]
[DefaultCommand(inGameOnly: true)]
public string Default(string[] @params, BattleClient invokerClient)
{
if (invokerClient?.InGameClient is null)

View File

@ -5,10 +5,10 @@ using DiIiS_NA.LoginServer.AccountsSystem;
namespace DiIiS_NA.GameServer.CommandManager;
[CommandGroup("doors", "Information about all doors in the vicinity. This is useful for testing purposes.", Account.UserLevels.Tester)]
[CommandGroup("doors", "Information about all doors in the vicinity. This is useful for testing purposes.", Account.UserLevels.Tester, inGameOnly: true)]
public class DoorsCommand : CommandGroup
{
[Command("all", "Activate all doors. This is useful for testing purposes.\nUsage: !open all", Account.UserLevels.Tester)]
[Command("all", "Activate all doors. This is useful for testing purposes.\nUsage: !open all", Account.UserLevels.Tester, inGameOnly: true)]
public string OpenAllDoors(string[] @params, BattleClient invokerClient)
{
if (invokerClient?.InGameClient?.Player is not { } player)
@ -20,7 +20,7 @@ public class DoorsCommand : CommandGroup
return $"Opened {openedDoors.Length} doors: {string.Join(", ", openedDoors.Select(d => (int)d.SNO + " - " + d.SNO))}";
}
[Command("near", "Activate all nearby doors in the vicinity. This is useful for testing purposes.\nUsage: !open near [distance:50]", Account.UserLevels.Tester)]
[Command("near", "Activate all nearby doors in the vicinity. This is useful for testing purposes.\nUsage: !open near [distance:50]", Account.UserLevels.Tester, inGameOnly: true)]
public string OpenAllDoorsNear(string[] @params, BattleClient invokerClient)
{
if (invokerClient?.InGameClient?.Player is not { } player)
@ -41,7 +41,7 @@ public class DoorsCommand : CommandGroup
return $"Opened {openedDoors.Count()} in a distance of {distance:0.0000} doors: {string.Join(", ", openedDoors)}";
}
[Command("info", "Retrieve all world doors in proximity, sorted in descending order.\nUsage: !open info [distance:50]", Account.UserLevels.Tester)]
[Command("info", "Retrieve all world doors in proximity, sorted in descending order.\nUsage: !open info [distance:50]", Account.UserLevels.Tester, inGameOnly: true)]
public string InfoDoorsNear(string[] @params, BattleClient invokerClient)
{
if (invokerClient?.InGameClient?.Player is not { } player)
@ -65,7 +65,7 @@ public class DoorsCommand : CommandGroup
}))}";
}
[DefaultCommand()]
[DefaultCommand(inGameOnly: true)]
public string DefaultCommand(string[] @params, BattleClient invokerClient)
{
return "!doors all - Activate all doors. This is useful for testing purposes.\n" +

View File

@ -4,10 +4,10 @@ using DiIiS_NA.LoginServer.Battle;
namespace DiIiS_NA.GameServer.CommandManager;
[CommandGroup("drop", "Drops an epic item for your class.\nOptionally specify the number of items: !drop [1-20]", Account.UserLevels.Owner)]
[CommandGroup("drop", "Drops an epic item for your class.\nOptionally specify the number of items: !drop [1-20]", Account.UserLevels.Owner, inGameOnly: true)]
public class DropCommand : CommandGroup
{
[DefaultCommand]
[DefaultCommand(inGameOnly: true)]
public string Drop(string[] @params, BattleClient invokerClient)
{
if (invokerClient?.InGameClient?.Player is not { } player)

View File

@ -5,10 +5,10 @@ using DiIiS_NA.LoginServer.Battle;
namespace DiIiS_NA.GameServer.CommandManager;
[CommandGroup("followers", "Manage your followers.", Account.UserLevels.Tester)]
[CommandGroup("followers", "Manage your followers.", Account.UserLevels.Tester, inGameOnly: true)]
public class FollowersCommand : CommandGroup
{
[Command("list", "List all followers.")]
[Command("list", "List all followers.", inGameOnly: true)]
public string List(string[] @params, BattleClient invokerClient)
{
if (invokerClient?.InGameClient?.Player is not { } player)
@ -21,7 +21,7 @@ public class FollowersCommand : CommandGroup
return string.Join('\n', followers);
}
[Command("dismiss", "Dismisses all followers.")]
[Command("dismiss", "Dismisses all followers.", inGameOnly: true)]
public string DismissAllCommand(string[] @params, BattleClient invokerClient)
{
if (invokerClient?.InGameClient?.Player is not { } player)

View File

@ -4,18 +4,12 @@ using DiIiS_NA.LoginServer.Battle;
namespace DiIiS_NA.GameServer.CommandManager;
[CommandGroup("gold", "Gold for your character.\nOptionally specify the number of gold: !gold [count]",
Account.UserLevels.GM)]
Account.UserLevels.GM, inGameOnly: true)]
public class GoldCommand : CommandGroup
{
[DefaultCommand]
[DefaultCommand(inGameOnly: true)]
public string Gold(string[] @params, BattleClient invokerClient)
{
if (invokerClient == null)
return "You cannot invoke this command from console.";
if (invokerClient.InGameClient == null)
return "You can only invoke this command while in-game.";
var player = invokerClient.InGameClient.Player;
var amount = 1;

View File

@ -3,16 +3,13 @@ using DiIiS_NA.LoginServer.Battle;
namespace DiIiS_NA.GameServer.CommandManager;
[CommandGroup("heal", "Heals yourself", Account.UserLevels.Tester)]
[CommandGroup("heal", "Heals yourself", Account.UserLevels.Tester, inGameOnly: true)]
public class HealCommand : CommandGroup
{
[DefaultCommand]
[DefaultCommand(inGameOnly: true)]
public string Heal(string[] @params, BattleClient invokerClient)
{
if (invokerClient?.InGameClient?.Player is not { } player)
return "You are not in game";
player.Heal();
invokerClient.InGameClient.Player.Heal();
return "You have been healed";
}
}

View File

@ -5,15 +5,13 @@ using DiIiS_NA.LoginServer.Battle;
namespace DiIiS_NA.GameServer.CommandManager;
[CommandGroup("identify", "Identifies all items in your inventory.", Account.UserLevels.Tester)]
[CommandGroup("identify", "Identifies all items in your inventory.", Account.UserLevels.Tester, inGameOnly: true)]
public class IdentifyCommand
{
[DefaultCommand()]
[DefaultCommand(inGameOnly: true)]
public string Identify(string[] @params, BattleClient invokerClient)
{
if (invokerClient?.InGameClient?.Player is not { } player)
return "You must be in game to use this command.";
var player = invokerClient.InGameClient.Player;
var unidentified = player.Inventory.GetBackPackItems().Where(i => i.Unidentified).ToArray();
var count = unidentified.Length;
player.StartCasting(60 * 2, new Action(() =>

View File

@ -8,10 +8,10 @@ using DiIiS_NA.LoginServer.Battle;
namespace DiIiS_NA.GameServer.CommandManager;
[CommandGroup("info", "Get current game information.")]
[CommandGroup("info", "Get current game information.", inGameOnly: true)]
public class InfoCommand : CommandGroup
{
[DefaultCommand]
[DefaultCommand(inGameOnly: true)]
public string Info(string[] @params, BattleClient invokerClient)
{
if (invokerClient?.InGameClient?.Game is not { } game || invokerClient.InGameClient.Player is not { } player ||

View File

@ -5,14 +5,13 @@ using DiIiS_NA.LoginServer.Battle;
namespace DiIiS_NA.GameServer.CommandManager;
[CommandGroup("invulnerable", "Makes you invulnerable", Account.UserLevels.GM)]
[CommandGroup("invulnerable", "Makes you invulnerable", Account.UserLevels.GM, inGameOnly: true)]
public class InvulnerableCommand : CommandGroup
{
[DefaultCommand]
public string Invulnerable(string[] @params, BattleClient invokerClient)
{
if (invokerClient?.InGameClient?.Player is not { } player)
return "You cannot invoke this command from console.";
var player = invokerClient.InGameClient.Player;
if (player.Attributes.FixedMap.Contains(FixedAttribute.Invulnerable))
{

View File

@ -9,10 +9,10 @@ using DiIiS_NA.LoginServer.Battle;
namespace DiIiS_NA.GameServer.CommandManager;
[CommandGroup("item", "Spawns an item (with a name or type).\nUsage: item [type <type>|<name>] [amount]",
Account.UserLevels.GM)]
Account.UserLevels.GM, inGameOnly: true)]
public class ItemCommand : CommandGroup
{
[DefaultCommand]
[DefaultCommand(inGameOnly: true)]
public string Spawn(string[] @params, BattleClient invokerClient)
{
if (invokerClient == null)

View File

@ -6,10 +6,10 @@ using DiIiS_NA.LoginServer.Battle;
namespace DiIiS_NA.GameServer.CommandManager;
[CommandGroup("levelup", "Levels your character.\nOptionally specify the number of levels: !levelup [count]",
Account.UserLevels.GM)]
Account.UserLevels.GM, inGameOnly: true)]
public class LevelUpCommand : CommandGroup
{
[DefaultCommand]
[DefaultCommand(inGameOnly: true)]
public string LevelUp(string[] @params, BattleClient invokerClient)
{
if (invokerClient == null)

View File

@ -5,18 +5,12 @@ using DiIiS_NA.LoginServer.Battle;
namespace DiIiS_NA.GameServer.CommandManager;
[CommandGroup("achiplatinum",
"Platinum for your character.\nOptionally specify the number of levels: !platinum [count]", Account.UserLevels.GM)]
"Platinum for your character.\nOptionally specify the number of levels: !platinum [count]", Account.UserLevels.GM, inGameOnly: true)]
public class PlatinumAchiCommand : CommandGroup
{
[DefaultCommand]
[DefaultCommand(inGameOnly: true)]
public string Platinum(string[] @params, BattleClient invokerClient)
{
if (invokerClient == null)
return "You cannot invoke this command from console.";
if (invokerClient.InGameClient == null)
return "You can only invoke this command while in-game.";
var player = invokerClient.InGameClient.Player;
var amount = 1;
var achiid = 74987243307074;

View File

@ -6,18 +6,12 @@ namespace DiIiS_NA.GameServer.CommandManager;
[CommandGroup("platinum",
"Platinum for your character.\nOptionally specify the number of levels: !platinum [count]",
Account.UserLevels.Tester)]
Account.UserLevels.Tester, inGameOnly: true)]
public class PlatinumCommand : CommandGroup
{
[DefaultCommand]
[DefaultCommand(inGameOnly: true)]
public string Platinum(string[] @params, BattleClient invokerClient)
{
if (invokerClient == null)
return "You cannot invoke this command from console.";
if (invokerClient.InGameClient == null)
return "You can only invoke this command while in-game.";
var player = invokerClient.InGameClient.Player;
var amount = 1;

View File

@ -4,18 +4,12 @@ using DiIiS_NA.LoginServer.Battle;
namespace DiIiS_NA.GameServer.CommandManager;
[CommandGroup("eff", "Platinum for your character.\nOptionally specify the number of levels: !eff [count]",
Account.UserLevels.GM)]
Account.UserLevels.GM, inGameOnly: true)]
public class PlayEffectGroup : CommandGroup
{
[DefaultCommand]
[DefaultCommand(inGameOnly: true)]
public string PlayEffectCommand(string[] @params, BattleClient invokerClient)
{
if (invokerClient == null)
return "You cannot invoke this command from console.";
if (invokerClient.InGameClient == null)
return "You can only invoke this command while in-game.";
var player = invokerClient.InGameClient.Player;
var id = 1;

View File

@ -6,15 +6,13 @@ using DiIiS_NA.LoginServer.Battle;
namespace DiIiS_NA.GameServer.CommandManager;
[CommandGroup("powerful", "Makes your character with absurd amount of damage. Useful for testing.",
Account.UserLevels.Tester)]
Account.UserLevels.Tester, inGameOnly: true)]
public class PowerfulCommand : CommandGroup
{
[DefaultCommand]
[DefaultCommand(inGameOnly: true)]
public string Powerful(string[] @params, BattleClient invokerClient)
{
if (invokerClient?.InGameClient?.Player is not { } player)
return "You must be in game to use this command.";
var player = invokerClient.InGameClient.Player;
if (player.Attributes.FixedMap.Contains(FixedAttribute.Powerful))
{
player.Attributes.FixedMap.Remove(FixedAttribute.Powerful);

View File

@ -39,7 +39,7 @@ public class QuestCommand : CommandGroup
}
}
[Command("event", "Launches chosen side-quest by snoID\n Usage: event snoId")]
[Command("event", "Launches chosen side-quest by snoID\n Usage: event snoId", inGameOnly: true)]
public string Event(string[] @params, BattleClient invokerClient)
{
if (@params == null)
@ -61,7 +61,7 @@ public class QuestCommand : CommandGroup
}
}
[Command("timer", "Send broadcast text message.\n Usage: public 'message'")]
[Command("timer", "Send broadcast text message.\n Usage: public 'message'", inGameOnly: true)]
public string Timer(string[] @params, BattleClient invokerClient)
{
if (@params == null)
@ -78,7 +78,7 @@ public class QuestCommand : CommandGroup
return "Message sent.";
}
[Command("set", "Advance to a specific quest step.\n Usage: quest to [questId] [step]")]
[Command("set", "Advance to a specific quest step.\n Usage: quest to [questId] [step]", inGameOnly: true)]
public string Set(string[] @params, BattleClient invokerClient)
{
if (@params == null)

View File

@ -6,10 +6,10 @@ using DiIiS_NA.LoginServer.Battle;
namespace DiIiS_NA.GameServer.CommandManager;
[CommandGroup("resourceful", "Makes your character with full resource. Useful for testing.",
Account.UserLevels.Tester)]
Account.UserLevels.Tester, inGameOnly: true)]
public class ResourcefulCommand : CommandGroup
{
[DefaultCommand]
[DefaultCommand(inGameOnly: true)]
public string Resourceful(string[] @params, BattleClient invokerClient)
{
if (invokerClient?.InGameClient?.Player is not { } player)

View File

@ -9,7 +9,7 @@ namespace DiIiS_NA.GameServer.CommandManager;
[CommandGroup("spawn", "Spawns a mob.\nUsage: spawn [actorSNO] [amount]", Account.UserLevels.GM)]
public class SpawnCommand : CommandGroup
{
[DefaultCommand]
[DefaultCommand(inGameOnly: true)]
public string Spawn(string[] @params, BattleClient invokerClient)
{
if (invokerClient == null)

View File

@ -5,15 +5,12 @@ using DiIiS_NA.LoginServer.Battle;
namespace DiIiS_NA.GameServer.CommandManager;
[CommandGroup("speed", "Modify speed walk of you character.\nUsage: !speed <value>\nReset: !speed")]
[CommandGroup("speed", "Modify speed walk of you character.\nUsage: !speed <value>\nReset: !speed", inGameOnly: true)]
public class SpeedCommand : CommandGroup
{
[DefaultCommand]
[DefaultCommand(inGameOnly: true)]
public string ModifySpeed(string[] @params, BattleClient invokerClient)
{
if (invokerClient?.InGameClient == null)
return "This command can only be used in-game.";
if (@params == null)
return
"Change the movement speed. Min 0 (Base), Max 2.\n You can use decimal values like 1.3 for example.";

View File

@ -3,18 +3,12 @@ using DiIiS_NA.LoginServer.Battle;
namespace DiIiS_NA.GameServer.CommandManager;
[CommandGroup("stashup", "Upgrade Stash.", Account.UserLevels.Tester)]
[CommandGroup("stashup", "Upgrade Stash.", Account.UserLevels.Tester, inGameOnly: true)]
public class StashUpCommand : CommandGroup
{
[DefaultCommand]
public string Stashup(string[] @params, BattleClient invokerClient)
{
if (invokerClient == null)
return "You cannot invoke this command from console.";
if (invokerClient.InGameClient == null)
return "You can only invoke this command while in-game.";
var player = invokerClient.InGameClient.Player;
player.Inventory.OnBuySharedStashSlots(null);

View File

@ -3,10 +3,10 @@ using DiIiS_NA.LoginServer.Battle;
namespace DiIiS_NA.GameServer.CommandManager;
[CommandGroup("tag", "Switch private Tag for connect")]
[CommandGroup("tag", "Switch private Tag for connect", inGameOnly: true)]
class TagCommand : CommandGroup
{
[DefaultCommand(Account.UserLevels.User)]
[DefaultCommand(Account.UserLevels.User, inGameOnly: true)]
public string Tag(string[] @params, BattleClient invokerClient)
{
if(@params == null)

View File

@ -7,18 +7,12 @@ using DiIiS_NA.LoginServer.Battle;
namespace DiIiS_NA.GameServer.CommandManager;
[CommandGroup("tp", "Transfers your character to another world.")]
[CommandGroup("tp", "Transfers your character to another world.", inGameOnly: true)]
public class TeleportCommand : CommandGroup
{
[DefaultCommand]
[DefaultCommand(inGameOnly: true)]
public string Portal(string[] @params, BattleClient invokerClient)
{
if (invokerClient == null)
return "You cannot invoke this command from console.";
if (invokerClient.InGameClient == null)
return "You can only invoke this command while in-game.";
if (@params != null && @params.Any())
{
int.TryParse(@params[0], out var worldId);

View File

@ -4,18 +4,12 @@ using DiIiS_NA.LoginServer.Battle;
namespace DiIiS_NA.GameServer.CommandManager;
[CommandGroup("unlockart", "Unlock all artisans: !unlockart", Account.UserLevels.Tester)]
[CommandGroup("unlockart", "Unlock all artisans: !unlockart", Account.UserLevels.Tester, inGameOnly: true)]
public class UnlockArtCommand : CommandGroup
{
[DefaultCommand]
[DefaultCommand(inGameOnly: true)]
public string UnlockArt(string[] @params, BattleClient invokerClient)
{
if (invokerClient == null)
return "You cannot invoke this command from console.";
if (invokerClient.InGameClient == null)
return "You can only invoke this command while in-game.";
var player = invokerClient.InGameClient.Player;
player.BlacksmithUnlocked = true;

View File

@ -6,10 +6,10 @@ using DiIiS_NA.LoginServer.Battle;
namespace DiIiS_NA.GameServer.CommandManager;
[CommandGroup("world", "World commands", Account.UserLevels.Tester)]
[CommandGroup("world", "World commands", Account.UserLevels.Tester, inGameOnly: true)]
public class WorldCommand : CommandGroup
{
[Command("info", "Current World Info")]
[Command("info", "Current World Info", inGameOnly: true)]
public string Info(string[] @params, BattleClient invokerClient)
{
if (invokerClient?.InGameClient?.Player is not {} player)