Paste #139501: Quiz script

Date: 2026/03/18 22:19:00 UTC+00:00
Type: Denizen Script

View Raw Paste Download This Paste
Copy Link


cfg_quiz:
    type: data
    config:
        time_remind: 10s
        time_restart: 1s
        time_expire: 30s
    questions:
        q_diamond:
            ask: What is the name of the <&b>bright blue<&f> ore?
            # Answers can have spaces in them, and multiple answers can be taken.
            answer: diamond|diamond ore
        q_redstone:
            ask: What is the name of the <&4>magical red<&f> ore?
            answer: redstone|redstone ore
        q_stick:
            ask: What is the most <&a>common item<&f> involved in tool and weapon recipes?
            answer: stick|sticks
        q_netherwart:
            ask: Where can <&4>nether wart<&f> be naturally found?
            answer: nether|the nether
        q_herobrine:
            ask: Who is the <&7>fictional character<&f> constantly potrayed in minecraft creepy pastas?
            answer: herobrine
    rewards:
        items:
            ironore:
                item: iron_ore
                # Min/max quantity
                quantity: 1|6
            emerald:
                item: emerald
                quantity: 1|3
            dirt:
                item: dirt
                quantity: 8|64
        money:
            1k: 100|1000
            10k: 1000|10000
            100k: 10000|100000
        scripts:
            # Subscripts in quiz_events
            - scriptreward_special

quiz_prefix:
    type: format
    debug: false
    format: <&f>[<&a>Quiz<&f>]<&r> <[text]>

quiz_events:
    type: world
    debug: false
    scripts:
        scriptreward_special:
            - narrate <element[Yipee! A winner is you!].rainbow>
            - firework <player.eye_location> random primary:Red fade:white
        quiz_start:
            - define ids <script[cfg_quiz].data_key[questions].keys>
            # Don't run previous questions asked, reset if all used up.
            - if <server.flag[quiz.ids_used].if_null[<list>]>:
                - define ids <[ids].exclude[<server.flag[quiz.ids_used]>]>
                - if <server.flag[quiz.ids_used].contains[<script[cfg_quiz].data_key[questions].keys>]>:
                    - flag SERVER quiz.ids_used:<list>
                    - define ids <script[cfg_quiz].data_key[questions].keys>
            - define id <[ids].random>
            - flag SERVER quiz.end:!
            - flag SERVER quiz.id:<[id]>
            - flag SERVER quiz.start:<util.time_now>
            - flag SERVER quiz.reminder:<util.time_now>
            - define dur <server.flag[quiz.start].add[<[expire_time]>].from_now>
            - announce "<script[cfg_quiz].parsed_key[questions.<[id]>.ask]><&nl><&c><&7><[dur].formatted_words> left to answer!" format:quiz_prefix
            - stop
        quiz_remind:
            - define dur <server.flag[quiz.start].add[<[expire_time]>].from_now>
            - announce "<script[cfg_quiz].parsed_key[questions.<[id]>.ask]><&nl><&c><&7><[dur].formatted_words> left to answer!" format:quiz_prefix
            - flag SERVER quiz.reminder:<util.time_now>
        quiz_expire:
            - define ans <script[cfg_quiz].data_key[questions.<[id]>.answer]>
            - announce "<&c>No one answered the quiz in time! <&nl>The answer was: <&e><bold><[ans].as[list].parse[to_titlecase].separated_by[ <&f>or<&e><bold> ]>" format:quiz_prefix
            - flag SERVER quiz.end:<util.time_now>
            - flag SERVER quiz.ids_used:->:<[id]>
            - stop
        quiz_reward:
            - define reward_types <script[cfg_quiz].data_key[rewards].keys>
            # Don't give money when it doesn't exist.
            - define reward_types:<-:money if:<server.plugins.parse[name].contains_single[vault].not>
            - define type <[reward_types].random>
            - if <[type]> == scripts:
                - define reward <script[cfg_quiz].data_key[rewards.<[type]>].random>
            - else:
                - define reward <script[cfg_quiz].data_key[rewards.<[type]>].keys.random>
            - choose <[type]>:
                - case items:
                    - define i <script[cfg_quiz].data_key[rewards.<[type]>.<[reward]>.item].as[item].if_null[<item[stick]>]>
                    - define quant <script[cfg_quiz].data_key[rewards.<[type]>.<[reward]>.quantity].as[list]>
                    - define quant <util.random.int[<[quant].first>].to[<[quant].get[2]>]>
                    - give <[i]> quantity:<[quant]>
                    - narrate "<&a>You recieved <&e><[i].material.translated_name> <&f>(<&d>x<[quant]><&f>)<&a> as a reward!"
                - case money:
                    - define amt <script[cfg_quiz].data_key[rewards.<[type]>.<[reward]>].as[list]>
                    - define amt <util.random.int[<[amt].first>].to[<[amt].get[2]>]>
                    - narrate "<&a>You recieved <&e><server.economy.format[<[amt]>]><&a> as a reward!"
                - case scripts:
                    - inject <script.name>.scripts.<[reward]>
    events:
        on delta time secondly:
            - define remind_time <script[cfg_quiz].data_key[config.time_remind]>
            - define expire_time <script[cfg_quiz].data_key[config.time_expire]>
            - define restart_time <script[cfg_quiz].data_key[config.time_restart]>
            - if NOT <server.has_flag[quiz]> OR ( <server.has_flag[quiz.end]> AND <util.time_now.is_after[<server.flag[quiz.end].add[<[restart_time]>]>]> ):
                - inject <script.name>.scripts.quiz_start

            - define id <server.flag[quiz.id]>
            - stop if:<server.has_flag[quiz.end]>

            # Two checks are needed to check on the dot and if the script gets reloaded causing latency, might not be necessary?
            - if <server.flag[quiz.start].add[<[expire_time]>].from_now.in_seconds> <= 0 or <util.time_now.is_after[<server.flag[quiz.start].add[<[expire_time]>]>]>:
                - inject <script.name>.scripts.quiz_expire

            - if <server.flag[quiz.reminder].add[<[remind_time]>].from_now.in_seconds> <= 0 or <util.time_now.is_after[<server.flag[quiz.reminder].add[<[remind_time]>]>]>:
                - inject <script.name>.scripts.quiz_remind
        after player chats:
            - if <server.has_flag[quiz]> AND NOT <server.has_flag[quiz.end]>:
                - define id <server.flag[quiz.id]>
                - define ans <script[cfg_quiz].data_key[questions.<[id]>.answer]>
                - if <[ans].as[list].contains_any[<context.message.to_lowercase.split>]>:
                    - announce "<&e><player.display_name><&a> won the quiz!" format:quiz_prefix
                    - flag SERVER quiz.end:<util.time_now>
                    - flag SERVER quiz.ids_used:->:<[id]>
                    - inject <script.name>.scripts.quiz_reward