This commit is contained in:
Player Name 2026-07-13 08:06:56 +02:00
parent be744e73b3
commit 710db177a8

View file

@ -66,22 +66,40 @@ class QuestCommandSet : CommandSet(Privilege.ADMIN){
/**
* Sets stage of quest
*/
define("setqueststage", usage = "::setqueststage <lt>quest-index<gt> <lt>stage<gt>", description = "Sets quest <lt>quest-index<gt> to stage <lt>stage<gt>; use ::quest to find indices."){player,args ->
if (args.size < 3) {
define("setqueststage", usage = "::setqueststage [-p <lt>username<gt>] <lt>quest-index<gt> <lt>stage<gt>", description = "Sets quest <lt>quest-index<gt> to stage <lt>stage<gt> for player <lt>player<gt> (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 <username> <quest-index> <stage>")
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, "<col=209dff>Setting " + questObject.quest + " to stage $stage</col>")
}
}