From bda000f2204ade08f3452d86a377b242e03c6640 Mon Sep 17 00:00:00 2001 From: Oven Bread Date: Sat, 29 Jul 2023 04:25:23 +0000 Subject: [PATCH] Added admin commands for getting and setting attributes ::getattribute [playername] attributename ::setattribute [playername] attributename value --- .../command/sets/PlayerAttributeCommandSet.kt | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 Server/src/main/core/game/system/command/sets/PlayerAttributeCommandSet.kt diff --git a/Server/src/main/core/game/system/command/sets/PlayerAttributeCommandSet.kt b/Server/src/main/core/game/system/command/sets/PlayerAttributeCommandSet.kt new file mode 100644 index 000000000..fa25eb4b5 --- /dev/null +++ b/Server/src/main/core/game/system/command/sets/PlayerAttributeCommandSet.kt @@ -0,0 +1,99 @@ +package core.game.system.command.sets + +import core.api.getAttribute +import core.api.setAttribute +import core.game.node.entity.player.Player +import core.game.system.command.Privilege +import core.game.world.repository.Repository +import core.plugin.Initializable + +/** + * In game setting of simple attributes. Not for complex objects or enums. + * @author ovenbread + */ +@Initializable +class PlayerAttributeCommandSet : CommandSet(Privilege.ADMIN) { + override fun defineCommands() { + + /** + * Gets the value of an attribute on a player. + */ + define("getattribute") { player, args -> + if (args.size < 2) { + reject(player, "Usage ::getattribute [playername] attributename") + } + var attributeName = "" + + // If stats is called without a username, return self. + var queryPlayer: Player? = null + if(args.size == 2){ + queryPlayer = player + attributeName = args[1] + } + // If stats is called with a username, find the player or set to null. + if(args.size == 3) { + queryPlayer = Repository.getPlayerByName(args[1]) + attributeName = args[2] + } + // If player is not found, return error. + if(queryPlayer == null){ + reject(player,"Invalid player or player not online.") + return@define + } + + notify(player,"Attribute: " + attributeName + " Value: " + getAttribute(queryPlayer!!, attributeName, "").toString()) + return@define + } + + /** + * Sets the value of an attribute on a player. + */ + define("setattribute") { player, args -> + if (args.size < 2) { + reject(player, "Usage ::setattribute [playername] attributename value") + } + var attributeName = "" + var value = "" + + // If stats is called without a username, return self. + var queryPlayer: Player? = null + if(args.size == 3){ + queryPlayer = player + attributeName = args[1] + value = args[2] + } + // If stats is called with a username, find the player or set to null. + if(args.size == 4) { + queryPlayer = Repository.getPlayerByName(args[1]) + attributeName = args[2] + value = args[3] + } + // If player is not found, return error. + if(queryPlayer == null){ + reject(player,"Invalid player or player not online.") + return@define + } + // Please be careful when editing attributes. + // If string input is an integer, convert to an integer and set it to the attribute. + if (value.toIntOrNull() != null){ + setAttribute(queryPlayer!!, attributeName, value.toIntOrNull()) + return@define + } + // If string input is a float(decimal number), convert to a float and set it to the attribute. + if (value.toFloatOrNull() != null){ + setAttribute(queryPlayer!!, attributeName, value.toFloatOrNull()) + return@define + } + // If string matches the text "true", set the attribute value to the boolean true. + if (value == "true"){ + setAttribute(queryPlayer!!, attributeName, true) + return@define + } + // If string matches the text "false", set the attribute value to the boolean false. + if (value == "false"){ + setAttribute(queryPlayer!!, attributeName, false) + return@define + } + } + } +}