/** * Command for changing amount of money players have. * Copyright 2022-2023 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 ACommandUserData extends Command; var private array playerQueue; protected function BuildData(CommandDataBuilder builder) { builder.Group(P("admin")); builder.Summary(P("Allows to read and write custom user data for players.")); builder.RequireTarget(); builder.ParamText(P("groupName")); builder.OptionalParams(); builder.ParamText(P("dataName")); builder.Describe(F("Reads user data stored for targeted user under group" @ "{$TextEmphasis `groupName`} and name" @ "{$TextEmphasis `dataName`}. If {$TextEmphasis `dataName`} is" @ "omitted, the data inside the whole group will be read.")); builder.SubCommand(P("write")); builder.ParamText(P("groupName")); builder.ParamText(P("dataName")); builder.ParamJSON(P("newData")); builder.Describe(F("Stores new user data {$TextEmphasis `newData`} for" @ "targeted user under group {$TextEmphasis `groupName`} and name" @ "{$TextEmphasis `dataName`}.")); } protected function ExecutedFor( EPlayer target, CallData arguments, EPlayer instigator, CommandPermissions permissions ) { local AcediaObject userData; local Text groupName, dataName; groupName = arguments.parameters.GetText(P("groupName")); dataName = arguments.parameters.GetText(P("dataName")); userData = arguments.parameters.GetItem(P("newData")); if (arguments.subCommandName.IsEmpty()) { ReadUserData(target, groupName, dataName); } else { WriteUserData(target, groupName, dataName, userData); } _.memory.Free(dataName); _.memory.Free(groupName); } private final function ReadUserData( EPlayer targetPlayer, BaseText groupName, BaseText dataName) { local User identity; local AcediaObject rawData; local MutableText dataAsJSON; local Text targetPlayerName; identity = targetPlayer.GetIdentity(); if (identity == none) { return; } targetPlayerName = targetPlayer.GetName(); rawData = identity.GetPersistentData(groupName, dataName); dataAsJSON = _.json.PrettyPrint(rawData); targetPlayer.BorrowConsole() .Write(F("User data for player ")) .Write(targetPlayerName) .Write(P(": ")) .WriteLine(dataAsJSON); _.memory.Free(dataAsJSON); _.memory.Free(rawData); _.memory.Free(targetPlayerName); _.memory.Free(identity); } private final function WriteUserData( EPlayer targetPlayer, BaseText groupName, BaseText dataName, AcediaObject rawData) { local User identity; local Text targetPlayerName; identity = targetPlayer.GetIdentity(); if (identity == none) { return; } targetPlayerName = targetPlayer.GetName(); if (identity.SetPersistentData(groupName, dataName, rawData)) { targetPlayer.BorrowConsole() .Write(P("User data for player ")) .Write(targetPlayerName) .WriteLine(F(" was {$TextPositive successfully} changed!")); } else { targetPlayer.BorrowConsole() .Write(P("User data for player ")) .Write(targetPlayerName) .WriteLine(F(" has {$TextPositive failed} to change!")); } _.memory.Free(targetPlayerName); _.memory.Free(identity); } defaultproperties { preferredName = "userdata" }