diff --git a/sources/Commands/BuiltInCommands/ACommandDosh.uc b/sources/Commands/BuiltInCommands/ACommandDosh.uc
deleted file mode 100644
index 8c0fb8f..0000000
--- a/sources/Commands/BuiltInCommands/ACommandDosh.uc
+++ /dev/null
@@ -1,110 +0,0 @@
-/**
- * Command for changing amount of money players have.
- * Copyright 2021 Anton Tarasenko
- *------------------------------------------------------------------------------
- * This file is part of Acedia.
- *
- * Acedia is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License, or
- * (at your option) any later version.
- *
- * Acedia is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Acedia. If not, see .
- */
-class ACommandDosh extends Command;
-
-var protected const int TGOTTEN, TLOST, TDOSH;
-
-protected function BuildData(CommandDataBuilder builder)
-{
- builder.Name(P("dosh")).Summary(P("Changes amount of money."));
- builder.RequireTarget();
- builder.ParamInteger(P("amount"))
- .Describe(P("Gives (or takes if negative) players a specified "
- @ "of money."));
- builder.SubCommand(P("set"))
- .ParamInteger(P("amount"))
- .Describe(P("Sets player's money to a specified ."));
- builder.Option(P("silent"))
- .Describe(P("If specified - players won't receive a notification about"
- @ "obtaining/losing dosh."));
- builder.Option(P("min"))
- .ParamInteger(P("minValue"))
- .Describe(F("Players will retain at least this amount of dosh after"
- @ "the command's execution. In case of conflict, overrides"
- @ "'{$TextEmphasis --max}' option. `0` is assumed by default."));
- builder.Option(P("max"), P("M"))
- .ParamInteger(P("maxValue"))
- .Describe(F("Players will have at most this amount of dosh after"
- @ "the command's execution. In case of conflict, it is overridden"
- @ "by '{$TextEmphasis --min}' option."));
-}
-
-protected function ExecutedFor(APlayer player, CommandCall result)
-{
- local int oldAmount, newAmount;
- local int amount, minValue, maxValue;
- local AssociativeArray commandOptions;
- // Find min and max value boundaries
- commandOptions = result.GetOptions();
- minValue = commandOptions.GetIntBy(P("/min/minValue"), 0);
- maxValue = commandOptions.GetIntBy(P("/max/maxValue"), MaxInt);
- if (minValue > maxValue) {
- maxValue = minValue;
- }
- // Change dosh
- oldAmount = player.GetDosh();
- amount = result.GetParameters().GetInt(P("amount"));
- if (result.GetSubCommand().IsEmpty()) {
- newAmount = oldAmount + amount;
- }
- else {
- // This has to be "dosh set"
- newAmount = amount;
- }
- newAmount = Clamp(newAmount, minValue, maxValue);
- // Announce dosh change, if necessary
- if (!commandOptions.HasKey(P("silent"))) {
- AnnounceDoshChange(player.Console(), oldAmount, newAmount);
- }
- player.SetDosh(newAmount);
-}
-
-protected function AnnounceDoshChange(
- ConsoleWriter console,
- int oldAmount,
- int newAmount)
-{
- local Text amountDeltaAsText;
- if (newAmount > oldAmount)
- {
- amountDeltaAsText = _.text.FromInt(newAmount - oldAmount);
- console.Write(T(TGOTTEN))
- .Write(amountDeltaAsText)
- .WriteLine(T(TDOSH));
- }
- if (newAmount < oldAmount)
- {
- amountDeltaAsText = _.text.FromInt(oldAmount - newAmount);
- console.Write(T(TLOST))
- .Write(amountDeltaAsText)
- .WriteLine(T(TDOSH));
- }
- _.memory.Free(amountDeltaAsText);
-}
-
-defaultproperties
-{
- TGOTTEN = 0
- stringConstants(0) = "You've {$TextPositive gotten} "
- TLOST = 1
- stringConstants(1) = "You've {$TextNegative lost} "
- TDOSH = 2
- stringConstants(2) = " dosh!"
-}
\ No newline at end of file
diff --git a/sources/Commands/BuiltInCommands/ACommandNick.uc b/sources/Commands/BuiltInCommands/ACommandNick.uc
deleted file mode 100644
index 7ddf8d4..0000000
--- a/sources/Commands/BuiltInCommands/ACommandNick.uc
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Command for changing nickname of the player.
- * Copyright 2021 Anton Tarasenko
- *------------------------------------------------------------------------------
- * This file is part of Acedia.
- *
- * Acedia is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License, or
- * (at your option) any later version.
- *
- * Acedia is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Acedia. If not, see .
- */
-class ACommandNick extends Command;
-
-protected function BuildData(CommandDataBuilder builder)
-{
- builder.Name(P("nick")).Summary(P("Changes nickname."));
- builder.RequireTarget();
- builder.ParamRemainder(P("nick"))
- .Describe(P("Changes nickname of targeted players to ."));
-}
-
-protected function ExecutedFor(APlayer player, CommandCall result)
-{
- player.SetName(result.GetParameters().GetText(P("nick")));
-}
-
-defaultproperties
-{
-}
\ No newline at end of file
diff --git a/sources/Commands/BuiltInCommands/ACommandTrader.uc b/sources/Commands/BuiltInCommands/ACommandTrader.uc
deleted file mode 100644
index 2604dfb..0000000
--- a/sources/Commands/BuiltInCommands/ACommandTrader.uc
+++ /dev/null
@@ -1,570 +0,0 @@
-/**
- * Command for managing trader time and traders.
- * Copyright 2021 Anton Tarasenko
- *------------------------------------------------------------------------------
- * This file is part of Acedia.
- *
- * Acedia is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License, or
- * (at your option) any later version.
- *
- * Acedia is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Acedia. If not, see .
- */
-class ACommandTrader extends Command;
-
-var protected const int TLIST, TOPEN, TCLOSE, TENABLE, TDISABLE, TAUTO_OPEN;
-var protected const int TTRADER, TTRADERS, TALL, TAUTO_OPEN_QUESTION, TQUOTE;
-var protected const int TAUTO_OPEN_FLAG, TDISABLED_FLAG, TUNKNOWN_TRADERS;
-var protected const int TLIST_TRADERS, TCOMMA_SPACE, TSELECTED_FLAG;
-var protected const int TPARENTHESIS_OPEN, TPARENTHESIS_CLOSE;
-var protected const int TSELECT, TIGNORE_DOORS, TBOOT, TTRADER_TIME, TTIME;
-var protected const int TIGNORE_PLAYERS, TPAUSE, TUNPAUSE, TCANNOT_PARSE_PARAM;
-var protected const int TCLOSEST, TSPACE;
-
-protected function BuildData(CommandDataBuilder builder)
-{
- builder.Name(T(TTRADER))
- .Summary(P("Manages trader time and available traders."))
- .Describe(P("Enables of disables trading."))
- .ParamBoolean(T(TENABLE));
- builder.SubCommand(T(TTIME))
- .Describe(F("Changes current trader time if numeric value is specified."
- @ "You can also pause trader countdown by specifying"
- @ "{$TextEmphasis pause} or turn it back on with"
- @ "{$TextEmphasis unpause}."))
- .ParamText(T(TTRADER_TIME));
- builder.SubCommand(T(TLIST))
- .Describe(P("Lists names of all available traders and"
- @ "marks closest one to the caller."));
- builder.SubCommand(T(TOPEN))
- .Describe(P("Opens specified traders."))
- .OptionalParams()
- .ParamTextList(T(TTRADERS));
- builder.SubCommand(T(TCLOSE))
- .Describe(P("Closes specified traders."))
- .OptionalParams()
- .ParamTextList(T(TTRADERS));
- builder.SubCommand(T(TAUTO_OPEN))
- .Describe(P("Sets whether specified traders are open automatically."))
- .ParamBoolean(T(TAUTO_OPEN_QUESTION))
- .OptionalParams()
- .ParamTextList(T(TTRADERS));
- builder.SubCommand(T(TSELECT))
- .Describe(P("Selects specified trader."))
- .OptionalParams()
- .ParamText(T(TTRADER));
- builder.SubCommand(T(TBOOT))
- .Describe(P("Boots all players from specified traders. If no traders"
- @ "were specified - assumes that all of them should be affected."))
- .OptionalParams()
- .ParamTextList(T(TTRADERS));
- builder.SubCommand(T(TENABLE))
- .Describe(P("Enables specified traders."))
- .OptionalParams()
- .ParamTextList(T(TTRADERS));
- builder.SubCommand(T(TDISABLE))
- .Describe(P("Disables specified traders."))
- .OptionalParams()
- .ParamTextList(T(TTRADERS));
- builder.Option(T(TALL))
- .Describe(P("If sub-command targets shops, this flag will make it"
- @ "target all the available shops."));
- builder.Option(T(TCLOSEST))
- .Describe(P("If sub-command targets shops, this flag will make it also"
- @ "target closest shop to the caller."));
- builder.Option(T(TIGNORE_DOORS))
- .Describe(F("When used with {$TextEmphasis select} sub-command, it will"
- @ "neither open or close doors."));
- builder.Option(T(TIGNORE_PLAYERS), P("I"))
- .Describe(P("Normally commands that close doors will automatically boot"
- @ "players from inside to prevent locking them in. This flag forces"
- @ "this command to leave players inside. However they can still be"
- @ "booted out at the end of trading time. Also it is impossible to"
- @ "disable the trader and not boot players inside it."));
-}
-
-protected function Executed(CommandCall result)
-{
- local Text subCommand;
- local AssociativeArray commandParameters, commandOptions;
- subCommand = result.GetSubCommand();
- commandParameters = result.GetParameters();
- commandOptions = result.GetOptions();
- if (subCommand.IsEmpty()) {
- _.kf.trading.SetTradingStatus(commandParameters.GetBool(T(TENABLE)));
- }
- else if (subCommand.Compare(T(TLIST))) {
- ListTradersFor(result.GetCallerPlayer());
- }
- else if (subCommand.Compare(T(TTIME), SCASE_INSENSITIVE)) {
- HandleTraderTime(result);
- }
- else if (subCommand.Compare(T(TOPEN), SCASE_INSENSITIVE)) {
- SetTradersOpen(true, result);
- }
- else if (subCommand.Compare(T(TCLOSE), SCASE_INSENSITIVE)) {
- SetTradersOpen(false, result);
- }
- else if (subCommand.Compare(T(TSELECT), SCASE_INSENSITIVE)) {
- SelectTrader(result);
- }
- else if (subCommand.Compare(T(TBOOT), SCASE_INSENSITIVE)) {
- BootFromTraders(result);
- }
- else if (subCommand.Compare(T(TENABLE), SCASE_INSENSITIVE)) {
- SetTradersEnabled(true, result);
- }
- else if (subCommand.Compare(T(TDISABLE), SCASE_INSENSITIVE)) {
- SetTradersEnabled(false, result);
- }
- else if (subCommand.Compare(T(TAUTO_OPEN), SCASE_INSENSITIVE)) {
- SetTradersAutoOpen(result);
- }
- subCommand.FreeSelf();
-}
-
-protected function ListTradersFor(APlayer target)
-{
- local int i;
- local ATrader closestTrader;
- local ConsoleWriter console;
- local array availableTraders;
- if (target == none) {
- return;
- }
- availableTraders = _.kf.trading.GetTraders();
- console = target.Console();
- console.Flush()
- .UseColor(_.color.TextEmphasis)
- .Write(T(TLIST_TRADERS))
- .ResetColor();
- closestTrader = FindClosestTrader(target);
- for (i = 0; i < availableTraders.length; i += 1)
- {
- WriteTrader(availableTraders[i], availableTraders[i] == closestTrader,
- console);
- if (i != availableTraders.length - 1) {
- console.Write(T(TCOMMA_SPACE));
- }
- }
- console.Flush();
-}
-
-protected function HandleTraderTime(CommandCall result)
-{
- local int countDownValue;
- local Text parameter;
- local Parser parser;
- local APlayer callerPlayer;
- parameter = result.GetParameters().GetText(T(TTRADER_TIME));
- if (parameter.Compare(T(TPAUSE), SCASE_INSENSITIVE))
- {
- _.kf.trading.SetCountDownPause(true);
- return;
- }
- else if (parameter.Compare(T(TUNPAUSE), SCASE_INSENSITIVE))
- {
- _.kf.trading.SetCountDownPause(false);
- return;
- }
- parser = _.text.Parse(parameter);
- if (parser.MInteger(countDownValue).Ok()) {
- _.kf.trading.SetCountDown(countDownValue);
- }
- else
- {
- callerPlayer = result.GetCallerPlayer();
- if (callerPlayer != none)
- {
- callerPlayer.Console()
- .UseColor(_.color.TextFailure)
- .Write(T(TCANNOT_PARSE_PARAM))
- .WriteLine(parameter)
- .ResetColor();
- }
- }
- parser.FreeSelf();
-
-}
-
-protected function SetTradersOpen(bool doOpen, CommandCall result)
-{
- local int i;
- local bool needToBootPlayers;
- local array selectedTraders;
- selectedTraders = GetTradersArray(result);
- needToBootPlayers = !doOpen
- && !result.GetOptions().HasKey(T(TIGNORE_PLAYERS));
- for (i = 0; i < selectedTraders.length; i += 1)
- {
- selectedTraders[i].SetOpen(doOpen);
- if (needToBootPlayers) {
- selectedTraders[i].BootPlayers();
- }
- }
-}
-
-protected function SelectTrader(CommandCall result)
-{
- local int i;
- local APlayer callerPlayer;
- local ConsoleWriter console;
- local Text selectedTraderName, nextTraderName;
- local ATrader previouslySelectedTrader;
- local array availableTraders;
- selectedTraderName = result.GetParameters().GetText(T(TTRADER));
- previouslySelectedTrader = _.kf.trading.GetSelectedTrader();
- // Corner case: no new trader
- if (selectedTraderName == none)
- {
- _.kf.trading.SelectTrader(none);
- HandleTraderSwap(result, none, availableTraders[i]);
- return;
- }
- // Find new trader among available ones
- availableTraders = _.kf.trading.GetTraders();
- for (i = 0; i < availableTraders.length; i += 1)
- {
- nextTraderName = availableTraders[i].GetName();
- if (selectedTraderName.Compare(nextTraderName))
- {
- availableTraders[i].Select();
- HandleTraderSwap( result, previouslySelectedTrader,
- availableTraders[i]);
- nextTraderName.FreeSelf();
- return;
- }
- nextTraderName.FreeSelf();
- }
- // If we have reached here: given trader name was invalid.
- callerPlayer = result.GetCallerPlayer();
- if (callerPlayer != none) {
- console = callerPlayer.Console();
- }
- if (console != none)
- {
- console.Flush()
- .UseColor(_.color.TextNegative).Write(T(TUNKNOWN_TRADERS))
- .ResetColor().WriteLine(selectedTraderName);
- }
-}
-
-// Boot players from the old trader iff
-// 1. It's different from the new one (otherwise swapping means nothing);
-// 2. Option "ignore-players" was not specified.
-protected function HandleTraderSwap(
- CommandCall result,
- ATrader oldTrader,
- ATrader newTrader)
-{
- if (oldTrader == none) return;
- if (oldTrader == newTrader) return;
- if (result.GetOptions().HasKey(T(TIGNORE_DOORS))) return;
- if (result.GetOptions().HasKey(T(TIGNORE_PLAYERS))) return;
-
- oldTrader.Close().BootPlayers();
- if (newTrader != none) {
- newTrader.Open();
- }
-}
-
-protected function BootFromTraders(CommandCall result)
-{
- local int i;
- local array selectedTraders;
- selectedTraders = GetTradersArray(result);
- if (selectedTraders.length <= 0) {
- selectedTraders = _.kf.trading.GetTraders();
- }
- for (i = 0; i < selectedTraders.length; i += 1) {
- selectedTraders[i].BootPlayers();
- }
-}
-
-protected function SetTradersEnabled(bool doEnable, CommandCall result)
-{
- local int i;
- local array selectedTraders;
- selectedTraders = GetTradersArray(result);
- for (i = 0; i < selectedTraders.length; i += 1) {
- selectedTraders[i].SetEnabled(doEnable);
- }
-}
-
-protected function SetTradersAutoOpen(CommandCall result)
-{
- local int i;
- local bool doAutoOpen;
- local array selectedTraders;
- doAutoOpen = result.GetParameters().GetBool(T(TAUTO_OPEN_QUESTION));
- selectedTraders = GetTradersArray(result);
- for (i = 0; i < selectedTraders.length; i += 1) {
- selectedTraders[i].SetAutoOpen(doAutoOpen);
- }
-}
-
-// Reads traders specified for the command (if any).
-// Assumes `result != none`.
-protected function array GetTradersArray(CommandCall result)
-{
- local int i, j;
- local APLayer callerPlayer;
- local Text nextTraderName;
- local DynamicArray specifiedTrades;
- local array resultTraders;
- local array availableTraders;
- // Boundary cases: all traders and no traders at all
- availableTraders = _.kf.trading.GetTraders();
- if (result.GetOptions().HasKey(T(TALL))) {
- return availableTraders;
- }
- // Add closest one, if flag tells us to
- callerPlayer = result.GetCallerPlayer();
- if (result.GetOptions().HasKey(T(TCLOSEST)))
- {
- resultTraders =
- InsertTrader(resultTraders, FindClosestTrader(callerPlayer));
- }
- specifiedTrades = result.GetParameters().GetDynamicArray(T(TTRADERS));
- if (specifiedTrades == none) {
- return resultTraders;
- }
- // We iterate over `availableTraders` in the outer loop because:
- // 1. Each `ATrader` from `availableTraders` will be matched only once,
- // ensuring that result will not contain duplicate instances;
- // 2. `availableTraders.GetName()` creates a new `Text` copy and
- // `specifiedTrades.GetText()` does not.
- for (i = 0; i < availableTraders.length; i += 1)
- {
- nextTraderName = availableTraders[i].GetName();
- for (j = 0; j < specifiedTrades.GetLength(); j += 1)
- {
- if (nextTraderName.Compare(specifiedTrades.GetText(j)))
- {
- resultTraders =
- InsertTrader(resultTraders, availableTraders[i]);
- specifiedTrades.Remove(j, 1);
- break;
- }
- }
- nextTraderName.FreeSelf();
- if (specifiedTrades.GetLength() <= 0) {
- break;
- }
- }
- // Some of the remaining trader names inside `specifiedTrades` do not
- // match any actual traders. Report it.
- if (callerPlayer != none && specifiedTrades.GetLength() > 0) {
- ReportUnknowTraders(specifiedTrades, callerPlayer.Console());
- }
- return resultTraders;
-}
-
-// Auxiliary method that adds `newTrader` into existing array of traders
-// if it is still missing.
-protected function array InsertTrader(
- array traders,
- ATrader newTrader)
-{
- local int i;
- if (newTrader == none) {
- return traders;
- }
- for (i = 0; i < traders.length; i += 1)
- {
- if (traders[i] == newTrader) {
- return traders;
- }
- }
- traders[traders.length] = newTrader;
- return traders;
-}
-
-protected function ReportUnknowTraders(
- DynamicArray specifiedTrades,
- ConsoleWriter console)
-{
- local int i;
- if (console == none) return;
- if (specifiedTrades == none) return;
-
- console.Flush()
- .UseColor(_.color.TextNegative)
- .Write(T(TUNKNOWN_TRADERS))
- .ResetColor();
- for (i = 0; i < specifiedTrades.GetLength(); i += 1)
- {
- console.Write(specifiedTrades.GetText(i));
- if (i != specifiedTrades.GetLength() - 1) {
- console.Write(T(TCOMMA_SPACE));
- }
- }
- console.Flush();
-}
-
-// Find closest trader to the `target` player
-protected function ATrader FindClosestTrader(APlayer target)
-{
- local int i;
- local float newDistance, bestDistance;
- local ATrader bestTrader;
- local array availableTraders;
- local Vector targetLocation;
- if (target == none) {
- return none;
- }
- targetLocation = target.GetLocation();
- availableTraders = _.kf.trading.GetTraders();
- for (i = 0; i < availableTraders.length; i += 1)
- {
- newDistance =
- VSizeSquared(availableTraders[i].GetLocation() - targetLocation);
- if (bestTrader == none || newDistance < bestDistance)
- {
- bestTrader = availableTraders[i];
- bestDistance = newDistance;
- }
- }
- return bestTrader;
-}
-
-// Writes a trader name along with information on whether it's
-// disabled / auto-open
-protected function WriteTrader(
- ATrader traderToWrite,
- bool isClosestTrader,
- ConsoleWriter console)
-{
- local Text traderName;
- if (traderToWrite == none) return;
- if (console == none) return;
-
- console.Write(T(TQUOTE));
- if (traderToWrite.IsOpen()) {
- console.UseColor(_.color.TextPositive);
- }
- else {
- console.UseColor(_.color.TextNegative);
- }
- traderName = traderToWrite.GetName();
- console.Write(traderName)
- .ResetColor()
- .Write(T(TQUOTE));
- traderName.FreeSelf();
- WriteTraderTags(traderToWrite, isClosestTrader, console);
-}
-
-protected function WriteTraderTags(
- ATrader traderToWrite,
- bool isClosest,
- ConsoleWriter console)
-{
- local bool hasTagsInFront;
- local bool isAutoOpen, isSelected;
- if (traderToWrite == none) {
- return;
- }
- if (!traderToWrite.IsEnabled())
- {
- console.Write(T(TDISABLED_FLAG));
- return;
- }
- isAutoOpen = traderToWrite.IsAutoOpen();
- isSelected = traderToWrite.IsSelected();
- if (!isAutoOpen && !isSelected && !isClosest) {
- return;
- }
- console.Write(T(TSPACE)).Write(T(TPARENTHESIS_OPEN));
- if (isClosest)
- {
- console.Write(T(TCLOSEST));
- hasTagsInFront = true;
- }
- if (isAutoOpen)
- {
- if (hasTagsInFront) {
- console.Write(T(TCOMMA_SPACE));
- }
- console.Write(T(TAUTO_OPEN_FLAG));
- hasTagsInFront = true;
- }
- if (isSelected)
- {
- if (hasTagsInFront) {
- console.Write(T(TCOMMA_SPACE));
- }
- console.Write(T(TSELECTED_FLAG));
- }
- console.Write(T(TPARENTHESIS_CLOSE));
-}
-
-defaultproperties
-{
- TLIST = 0
- stringConstants(0) = "list"
- TOPEN = 1
- stringConstants(1) = "open"
- TCLOSE = 2
- stringConstants(2) = "close"
- TENABLE = 3
- stringConstants(3) = "enable"
- TDISABLE = 4
- stringConstants(4) = "disable"
- TAUTO_OPEN = 5
- stringConstants(5) = "autoopen"
- TTRADER = 6
- stringConstants(6) = "trader"
- TTRADERS = 7
- stringConstants(7) = "traders"
- TALL = 8
- stringConstants(8) = "all"
- TAUTO_OPEN_QUESTION = 9
- stringConstants(9) = "autoOpen?"
- TQUOTE = 10
- stringConstants(10) = "\""
- TAUTO_OPEN_FLAG = 11
- stringConstants(11) = "auto-open"
- TDISABLED_FLAG = 12
- stringConstants(12) = " (disabled)"
- TUNKNOWN_TRADERS = 13
- stringConstants(13) = "Could not find some of the traders: "
- TLIST_TRADERS = 14
- stringConstants(14) = "List of available traders: "
- TCOMMA_SPACE = 15
- stringConstants(15) = ", "
- TPARENTHESIS_OPEN = 16
- stringConstants(16) = "("
- TPARENTHESIS_CLOSE = 17
- stringConstants(17) = ")"
- TSELECTED_FLAG = 18
- stringConstants(18) = "selected"
- TSELECT = 19
- stringConstants(19) = "select"
- TIGNORE_DOORS = 20
- stringConstants(20) = "ignore-doors"
- TBOOT = 21
- stringConstants(21) = "boot"
- TTIME = 22
- stringConstants(22) = "time"
- TTRADER_TIME = 23
- stringConstants(23) = "traderTime"
- TIGNORE_PLAYERS = 24
- stringConstants(24) = "ignore-players"
- TPAUSE = 25
- stringConstants(25) = "pause"
- TUNPAUSE = 26
- stringConstants(26) = "unpause"
- TCANNOT_PARSE_PARAM = 27
- stringConstants(27) = "Cannot parse parameter: "
- TCLOSEST = 28
- stringConstants(28) = "closest"
- TSPACE = 29
- stringConstants(29) = " "
-}
\ No newline at end of file