You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
220 lines
7.7 KiB
220 lines
7.7 KiB
2 years ago
|
/**
|
||
|
* Command for managing (displaying + adding and removing to/items from it)
|
||
|
* player's inventory.
|
||
|
* Copyright 2021 - 2022 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 <https://www.gnu.org/licenses/>.
|
||
|
*/
|
||
|
class ACommandInventory extends Command;
|
||
|
|
||
|
var protected const int TINVENTORY, TADD, TREMOVE, TITEMS, TEQUIP, TALL, TKEEP;
|
||
|
var protected const int THIDDEN, TFORCE, TAMMO, TALL_WEAPONS;
|
||
|
|
||
|
protected function BuildData(CommandDataBuilder builder)
|
||
|
{
|
||
|
builder.Name(T(TINVENTORY))
|
||
|
.Summary(P("Manages player's inventory."))
|
||
|
.Describe(P("Command for displaying and editing players' inventories."
|
||
|
@ "If called without specifying subcommand - simply displays"
|
||
|
@ "targeted player's inventory."));
|
||
|
builder.RequireTarget();
|
||
|
builder.SubCommand(T(TADD))
|
||
|
.OptionalParams()
|
||
|
.ParamTextList(T(TITEMS))
|
||
|
.Describe(P("This command adds items (based on listed templates) to"
|
||
|
@ "the targeted player's inventory."
|
||
|
@ "Instead of templates item aliases can be specified."));
|
||
|
builder.SubCommand(T(TREMOVE))
|
||
|
.OptionalParams()
|
||
|
.ParamTextList(T(TITEMS))
|
||
|
.Describe(P("This command removes items (based on listed templates)"
|
||
|
@ "from the targeted player's inventory."
|
||
|
@ "Instead of templates item aliases can be specified."));
|
||
|
builder.Option(T(TEQUIP))
|
||
|
.Describe(F("Affect items currently equipped by the targeted player."
|
||
|
@ "Releveant for a {$TextEmphasis remove} subcommand."));
|
||
|
builder.Option(T(TALL))
|
||
|
.Describe(F("This flag tells editing commands to affect all items."
|
||
|
@ "When adding items it means \"all available weapons in the game\""
|
||
|
@ "and when removing it means \"all weapons in"
|
||
|
@ "the player's inventory\"."));
|
||
|
builder.Option(T(TKEEP))
|
||
|
.Describe(F("Removing items by default means simply destroying them."
|
||
|
@ "This flag makes command to try and keep them in some form."
|
||
|
@ "Success for all items is not guaranteed."));
|
||
|
builder.Option(T(THIDDEN))
|
||
|
.Describe(F("Some of the items in the inventory are"
|
||
|
@ "{$TextEmphasis hidden} and are not supposed to be seem by"
|
||
|
@ "the player. To avoid weird behavior, {$TextEmphasis inventory}"
|
||
|
@ "command by default ignores them when affecting groups of items"
|
||
|
@ "(like when removing all items) unless they're directly"
|
||
|
@ "specified. This flag tells it to also affect hidden items."));
|
||
|
builder.Option(T(TFORCE))
|
||
|
.Describe(P("Sometimes adding and removing items is impossible due to"
|
||
|
@ "the limitations imposed by the game. This option allows to"
|
||
|
@ "ignore some of those limitation."));
|
||
|
builder.Option(T(TAMMO), P("A"))
|
||
|
.Describe(P("When adding weapons - signals that their"
|
||
|
@ "ammo / charge / whatever has to be filled after addition."));
|
||
|
}
|
||
|
|
||
|
protected function ExecutedFor(
|
||
|
EPlayer player,
|
||
|
CallData result,
|
||
|
EPlayer callerPlayer)
|
||
|
{
|
||
|
local ConsoleWriter publicWriter;
|
||
|
local InventoryTool tool;
|
||
|
tool = class'InventoryTool'.static.CreateFor(player);
|
||
|
if (tool == none) {
|
||
|
return;
|
||
|
}
|
||
|
if (result.subCommandName.IsEmpty())
|
||
|
{
|
||
|
tool.ReportInventory( callerPlayer.BorrowConsole(),
|
||
|
result.options.HasKey(T(THIDDEN)));
|
||
|
}
|
||
|
else if (result.subCommandName.Compare(T(TADD)))
|
||
|
{
|
||
|
SubCommandAdd( tool, result.parameters.GetDynamicArray(T(TITEMS)),
|
||
|
result.options.HasKey(T(TALL)),
|
||
|
result.options.HasKey(T(TFORCE)),
|
||
|
result.options.HasKey(T(TAMMO)));
|
||
|
}
|
||
|
else if (result.subCommandName.Compare(T(TREMOVE)))
|
||
|
{
|
||
|
SubCommandRemove( tool,
|
||
|
result.parameters.GetDynamicArray(T(TITEMS)),
|
||
|
result.options.HasKey(T(TALL)),
|
||
|
result.options.HasKey(T(TFORCE)),
|
||
|
result.options.HasKey(T(TKEEP)),
|
||
|
result.options.HasKey(T(TEQUIP)),
|
||
|
result.options.HasKey(T(THIDDEN)));
|
||
|
}
|
||
|
tool.ReportChanges(callerPlayer, player.BorrowConsole(), false);
|
||
|
publicWriter = _.console.ForAll().ButPlayer(callerPlayer);
|
||
|
tool.ReportChanges(callerPlayer, publicWriter, true);
|
||
|
_.memory.Free(tool);
|
||
|
_.memory.Free(publicWriter);
|
||
|
}
|
||
|
|
||
|
protected function SubCommandAdd(
|
||
|
InventoryTool tool,
|
||
|
DynamicArray templateList,
|
||
|
bool flagAll,
|
||
|
bool doForce,
|
||
|
bool doFillAmmo)
|
||
|
{
|
||
|
if (flagAll) {
|
||
|
AddAllItems(tool, doForce, doFillAmmo);
|
||
|
}
|
||
|
else {
|
||
|
AddGivenTemplates(tool, templateList, doForce, doFillAmmo);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
protected function SubCommandRemove(
|
||
|
InventoryTool tool,
|
||
|
DynamicArray templateList,
|
||
|
bool flagAll,
|
||
|
bool doForce,
|
||
|
bool doKeep,
|
||
|
bool flagEquip,
|
||
|
bool flagHidden)
|
||
|
{
|
||
|
if (flagAll)
|
||
|
{
|
||
|
tool.RemoveAllItems(doKeep, doForce, flagHidden);
|
||
|
return;
|
||
|
}
|
||
|
if (flagEquip) {
|
||
|
tool.RemoveEquippedItems(doKeep, doForce, flagHidden);
|
||
|
}
|
||
|
RemoveGivenTemplates(tool, templateList, doForce, doKeep);
|
||
|
}
|
||
|
|
||
|
protected function AddAllItems(
|
||
|
InventoryTool tool,
|
||
|
bool doForce,
|
||
|
bool doFillAmmo)
|
||
|
{
|
||
|
local int i;
|
||
|
local array<Text> allTempaltes;
|
||
|
if (tool == none) {
|
||
|
return;
|
||
|
}
|
||
|
allTempaltes = _.kf.templates.GetItemList(T(TALL_WEAPONS));
|
||
|
for (i = 0; i < allTempaltes.length; i += 1) {
|
||
|
tool.AddItem(allTempaltes[i], doForce, doFillAmmo);
|
||
|
}
|
||
|
_.memory.FreeMany(allTempaltes);
|
||
|
}
|
||
|
|
||
|
protected function AddGivenTemplates(
|
||
|
InventoryTool tool,
|
||
|
DynamicArray templateList,
|
||
|
bool doForce,
|
||
|
bool doFillAmmo)
|
||
|
{
|
||
|
local int i;
|
||
|
if (tool == none) return;
|
||
|
if (templateList == none) return;
|
||
|
|
||
|
for (i = 0; i < templateList.GetLength(); i += 1) {
|
||
|
tool.AddItem(templateList.GetText(i), doForce, doFillAmmo);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
protected function RemoveGivenTemplates(
|
||
|
InventoryTool tool,
|
||
|
DynamicArray templateList,
|
||
|
bool doForce,
|
||
|
bool doKeep)
|
||
|
{
|
||
|
local int i;
|
||
|
if (tool == none) return;
|
||
|
if (templateList == none) return;
|
||
|
|
||
|
for (i = 0; i < templateList.GetLength(); i += 1) {
|
||
|
tool.RemoveItem(templateList.GetText(i), doKeep, doForce);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
defaultproperties
|
||
|
{
|
||
|
TINVENTORY = 0
|
||
|
stringConstants(0) = "inventory"
|
||
|
TADD = 1
|
||
|
stringConstants(1) = "add"
|
||
|
TREMOVE = 2
|
||
|
stringConstants(2) = "remove"
|
||
|
TITEMS = 3
|
||
|
stringConstants(3) = "items"
|
||
|
TEQUIP = 4
|
||
|
stringConstants(4) = "equip"
|
||
|
TALL = 5
|
||
|
stringConstants(5) = "all"
|
||
|
TKEEP = 6
|
||
|
stringConstants(6) = "keep"
|
||
|
THIDDEN = 7
|
||
|
stringConstants(7) = "hidden"
|
||
|
TFORCE = 8
|
||
|
stringConstants(8) = "force"
|
||
|
TAMMO = 9
|
||
|
stringConstants(9) = "ammo"
|
||
|
TALL_WEAPONS = 10
|
||
|
stringConstants(10) = "all weapons"
|
||
|
}
|