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.
129 lines
4.2 KiB
129 lines
4.2 KiB
/** |
|
* 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 <https://www.gnu.org/licenses/>. |
|
*/ |
|
class ACommandUserData extends Command; |
|
|
|
var private array<EPlayer> 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" |
|
} |