9
0
mirror of https://github.com/Auxilor/EcoQuests.git synced 2025-12-21 16:09:16 +00:00

Compare commits

..

5 Commits
1.2.1 ... 1.4.0

Author SHA1 Message Date
Auxilor
9db9f542c9 libreforge-updater 2023-08-30 11:31:41 +01:00
Auxilor
75a091624c Dynamic experience requirements now lock in when a task starts 2023-08-30 11:09:09 +01:00
Auxilor
17c81ea5b8 Added use-local-storage 2023-08-30 09:50:00 +01:00
Auxilor
81d4faaf0c libreforge-updater 2023-08-26 18:11:44 +01:00
Auxilor
03110e36b1 libreforge-updater 2023-08-23 15:31:59 +01:00
4 changed files with 38 additions and 4 deletions

View File

@@ -286,6 +286,11 @@ class Quest(
player.profile.write(hasStartedKey, true) player.profile.write(hasStartedKey, true)
player.profile.write(startedTimeKey, currentTimeMinutes) player.profile.write(startedTimeKey, currentTimeMinutes)
// Reset tasks to generate new xp requirements
for (task in tasks) {
task.reset(player)
}
Bukkit.getPluginManager().callEvent(PlayerQuestStartEvent(player, this)) Bukkit.getPluginManager().callEvent(PlayerQuestStartEvent(player, this))
} }

View File

@@ -32,6 +32,12 @@ class Task(
0.0 0.0
) )
private val xpRequiredKey = PersistentDataKey(
plugin.createNamespacedKey("${quest.id}_task_${template.id}_xp_required"),
PersistentDataKeyType.DOUBLE,
0.0
)
private val hasCompletedKey = PersistentDataKey( private val hasCompletedKey = PersistentDataKey(
plugin.createNamespacedKey("${quest.id}_task_${template.id}_has_completed"), plugin.createNamespacedKey("${quest.id}_task_${template.id}_has_completed"),
PersistentDataKeyType.BOOLEAN, PersistentDataKeyType.BOOLEAN,
@@ -89,7 +95,7 @@ class Task(
return player.profile.read(hasCompletedKey) return player.profile.read(hasCompletedKey)
} }
fun getExperienceRequired(player: Player): Double { private fun generateExperienceRequired(player: Player): Double {
return evaluateExpression( return evaluateExpression(
xpExpr, xpExpr,
placeholderContext( placeholderContext(
@@ -98,6 +104,24 @@ class Task(
) )
} }
fun getExperienceRequired(player: Player): Double {
val required = player.profile.read(xpRequiredKey)
return if (required <= 0) {
val newRequired = generateExperienceRequired(player)
if (newRequired <= 0) {
throw IllegalStateException("Invalid XP Required for task ${template.id} in quest ${quest.id}" +
"(Requirement was $newRequired, which is less than or equal to 0)")
}
player.profile.write(xpRequiredKey, newRequired)
newRequired
} else {
required
}
}
fun getExperience(player: OfflinePlayer): Double { fun getExperience(player: OfflinePlayer): Double {
return player.profile.read(xpKey) return player.profile.read(xpKey)
} }

View File

@@ -3,6 +3,11 @@
# by Auxilor # by Auxilor
# #
# Even if eco is set up to use a database, you can
# force EcoQuests to save to local storage to disable
# cross-server sync.
use-local-storage: false
scan-interval: 20 # How often to scan for quests auto-starting (in ticks) scan-interval: 20 # How often to scan for quests auto-starting (in ticks)
gui: gui:

View File

@@ -1,5 +1,5 @@
#libreforge-updater #libreforge-updater
#Sat Aug 19 15:32:52 BST 2023 #Wed Aug 30 11:31:41 BST 2023
kotlin.code.style=official kotlin.code.style=official
libreforge-version=4.29.1 libreforge-version=4.32.0
version=1.2.1 version=1.4.0