Delayed Quest Steps
Schedules can also unlock quest progress later. This is different from a personal delay timer: a schedule runs at a fixed server time for everyone. That makes it useful for quests where the world changes at a known time, such as "the bridge repair continues after the nightly maintenance".
In this tutorial, an engineer asks players to donate stone for a bridge. Players can donate during the day. At 18:00, a schedule unlocks the next step and the engineer starts accepting final inspection reports.
Requirements
It is helpful to understand tags, points, and schedules before starting this tutorial.
1. Creating the folder structure for the example quest🔗
Create a new quest package called "bridgeRepair".
The file structure should look like this:
- bridgeRepair
- package.yml
- actions.yml
- conditions.yml
- items.yml
- conversations
- engineer.yml
Download the files for this tutorial
Instead of manually creating / filling the files, just download them using the command below:
/bq download BetonQuest/Quest-Tutorials refs/tags/v3.1.0 QuestPackages /Features/Schedules/Delayed-Quest-Steps/1-Setup /bridgeRepair overwrite
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
1 2 3 4 5 | |
- Replace
32with the Citizens ID of your Engineer NPC. - This links the NPC to the
Engineerconversation.
2. Track donations before the scheduled unlock🔗
We store two kinds of progress:
- The player's own donation tag, so they cannot donate repeatedly in this simple example.
- A global point counter, so the server can track how much stone was donated in total.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | |
- The scheduled unlock option is checked first. Donation and missing-item responses are checked before the intro.
- The normal introduction is only available before inspection opens.
- This keeps the same player from donating twice and requires the 16 cobblestone before the donate option appears.
- The global point placeholder shows the shared server donation total.
- This option appears after the schedule adds the global tag.
- This player action is still protected by the item condition, then takes items and updates progress.
1 2 3 4 5 6 | |
- The donation is split into small actions so each part is easy to reuse or change.
- Takes the required cobblestone from the player.
abortprevents partial item removal if something changed. - Adds to the server-wide donation counter.
- Stores that this player already donated.
1 2 3 4 | |
- A normal tag stores one player's personal donation state.
- Checks whether the player currently has 16 cobblestone to donate.
- A global tag stores the server-wide inspection phase.
1 2 | |
The global point category bridgeStone is shared by the entire server. The player tag donatedBridgeStone belongs
to one player. This separation is important: schedules can change server-wide progress, while conversations still use
player progress to decide what one player has already done.
Is the example not working?
Get the correct configs by running the following command.
This will overwrite any changes (including NPC ID's and locations) you have made to the example.
Linking NPCs to conversations is explained in the basics tutorial.
/bq download BetonQuest/Quest-Tutorials refs/tags/v3.1.0 QuestPackages /Features/Schedules/Delayed-Quest-Steps/2-DonationProgress /bridgeRepair overwrite
3. Unlock the next step at a fixed time🔗
Now add the schedule. At 18:00, the server sets a global tag called bridgeInspectionOpen. After that, the engineer
uses a different conversation option.
1 2 3 4 5 6 7 8 9 10 11 | |
- This schedule controls the global unlock.
- The schedule runs once per day.
- At 18:00 server time, donations close and inspection opens.
- The action is executed player independent.
1 2 3 4 5 6 7 8 9 | |
- The schedule calls this folder so the unlock and announcement happen together.
- This global tag changes the NPC dialogue for everyone.
notifyalltells online players that the new phase is available.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | |
inspectionReadystays first because it should win after the scheduled unlock.- The NPC can read the final global donation total.
- The inspection can be done only after the schedule opened it and before this player completed it.
- This personal tag stores that the player already finished the inspection step.
- This action rewards the player and saves their inspection progress.
1 2 3 4 5 6 7 8 9 10 11 12 | |
- The finish folder groups progress and reward.
- This is a player tag because each player can finish the inspection separately.
- Gives the reward item defined in
items.yml.
1 2 3 4 5 | |
- This condition checks the player's personal inspection completion.
1 2 3 | |
- The reward action gives two of this item with
give inspectionReward:2.
This pattern is useful when a quest step should unlock at a known time, not after an individual player's timer. If you need a personal timer like "24 hours after this player finished", use a delay objective instead.
Download this part of the tutorial
Enter this command in the chat to download this part of the tutorial:
/bq download BetonQuest/Quest-Tutorials refs/tags/v3.1.0 QuestPackages /Features/Schedules/Delayed-Quest-Steps/3-FullExample /bridgeRepair overwrite