From 710db177a800c938cd8489b8f16b4a59a8615b67 Mon Sep 17 00:00:00 2001 From: Player Name Date: Mon, 13 Jul 2026 08:06:56 +0200 Subject: [PATCH] v1 --- .../system/command/sets/QuestCommandSet.kt | 40 ++++++++++++++----- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/Server/src/main/core/game/system/command/sets/QuestCommandSet.kt b/Server/src/main/core/game/system/command/sets/QuestCommandSet.kt index c8c414c38..e9ac26a39 100644 --- a/Server/src/main/core/game/system/command/sets/QuestCommandSet.kt +++ b/Server/src/main/core/game/system/command/sets/QuestCommandSet.kt @@ -66,22 +66,40 @@ class QuestCommandSet : CommandSet(Privilege.ADMIN){ /** * Sets stage of quest */ - define("setqueststage", usage = "::setqueststage quest-index stage", description = "Sets quest quest-index to stage stage; use ::quest to find indices."){player,args -> - if (args.size < 3) { + define("setqueststage", usage = "::setqueststage [-p username] quest-index stage", description = "Sets quest quest-index to stage stage for player player (self if omitted); use ::quest to find indices.") { player,args -> + var target = player + var otherArgs = args.drop(1) + + if (args[1].equals("-p", ignoreCase = true)) { + // need at least 5 arguments if -p is used: command, -p, username, quest-index, stage + if (args.size < 5) { + reject(player, "ERROR: Missing player name. Usage: ::setqueststage -p ") + return@define + } + val playerLength = args.size - 4 + + val playerName = args.slice(2 until playerLength + 2).joinToString("_").lowercase() + target = Repository.getPlayerByName(playerName) ?: run { + reject(player, "ERROR: Username '$playerName' not found.") + return@define + } + otherArgs = args.drop(args.size - 2) + } + + if (otherArgs.size < 2) { reject(player,"You must specify the index# of a quest, and a stage number") } - val quest = args[1].toIntOrNull() ?: reject(player,"INVALID QUEST") - val stage = args[2].toIntOrNull() ?: reject(player,"INVALID STAGE") - val questObject = player.questRepository.forIndex(quest as Int) - if (questObject == null){ + val quest = otherArgs[0].toIntOrNull() ?: reject(player,"INVALID QUEST") + val stage = otherArgs[1].toIntOrNull() ?: reject(player,"INVALID STAGE") + val questObject = target.questRepository.forIndex(quest as Int) + if (questObject == null) { reject(player, "$quest did not match anything in the quest repository") - } - else{ - player.questRepository.setStageNonmonotonic(questObject, stage as Int) + } else { + target.questRepository.setStageNonmonotonic(questObject, stage as Int) if (stage == 0) { - questObject.reset(player) + questObject.reset(target) } - questObject.updateVarps(player) + questObject.updateVarps(target) notify(player, "Setting " + questObject.quest + " to stage $stage") } }