Paste #128347: Unnamed Denizen Script Paste

Date: 2024/11/20 15:17:23 UTC-08:00
Type: Denizen Script

View Raw Paste Download This Paste
Copy Link


quest_assignment_gzk:
    type: assignment
    debug: false
    actions:
        on assignment:
            - trigger name:click state:true cooldown:1s
            - trigger name:proximity state:true radius:5
            - trigger name:chat state:true cooldown:0.2s
            - adjust <npc> lookclose:true
    interact scripts:
        - quest_interact_gzk

quest_interact_gzk:
    type: interact
    debug: false
    data:
        trait: none
        quest_id: gzk
        dialogue:
            proximity_enter: Hello!
            proximity_exit: Goodbye.
            exit_dialogue: Goodbye.
            quest_complete:
                - <&7>1.<&f> Do you have a job for me?
                - <&7>2.<&f> What's going on?
                - <&7>3. Leave
            quest_incomplete:
                - <&7>1.<&[yellow]> Do you have a job for me?
                - <&7>2.<&f> What's going on?
                - <&7>3. Leave
            quest_learn:
                1:
                    text: Yeah I have a job for you.
                    wait: 1.5s
                2:
                    text: There's an undead problem lately, real nasty stuff.
                    wait: 1.5s
                3:
                    text: Help us out and get rid of <&a><script[quest_data_<[qid]>].data_key[info.kill_amount]> <entity[<script[quest_data_<[qid]>].data_key[info.kill_type]>].translated_name>'s<&f> for me.
                    wait: 2s
            quest_prompt:
                - <&7>1. <&a>Accept Quest
                - <&7>2. <&c>Decline Quest
    subscripts:
        init_dialogue:
            - define S <&nl><script.parsed_key[data.dialogue.quest_incomplete].separated_by[<&nl>]>
            - define S <&nl><script.parsed_key[data.dialogue.quest_complete].separated_by[<&nl>]> if:<player.proc[player_quest_stage].context[<[qid]>].is_more_than_or_equal_to[<proc[quests_stage_max].context[<[qid]>]>]>
            - narrate <[S]>
    speed: 0
    steps:
        1:
            proximity trigger:
                entry:
                    script:
                        - narrate <script.parsed_key[data.dialogue.proximity_enter]> format:npc_format
            click trigger:
                script:
                    - stop if:<player.item_in_hand.equals[<item[stick]>]>
                    - define qid gzk
                    - narrate "What do you need?" format:npc_format
                    - inject <script.name>.subscripts.init_dialogue
                    - zap 2
        2:
            proximity trigger:
                exit:
                    script:
                        - disengage if:<npc.engaged[<player>]>
                        - narrate <script.parsed_key[data.dialogue.proximity_exit]> format:npc_format
                        - zap 1
            chat trigger:
                1:
                    trigger: /*/
                    hide trigger message: true
                    script:
                        - define qid gzk
                        - choose <context.message.split.get[1]>:
                            - case 1:
                                - choose <player.proc[player_quest_stage].context[<[qid]>]>:
                                    - case -1:
                                        - engage
                                        - foreach <script.list_keys[data.dialogue.quest_learn]> as:idx:
                                            - inject npc_dialogue_validity
                                            - narrate <script.parsed_key[data.dialogue.quest_learn.<[idx]>.text]> format:npc_format
                                            - wait <script.data_key[data.dialogue.quest_learn.<[idx]>.wait]>
                                        - disengage
                                        - inject npc_dialogue_validity
                                        - narrate <bold><&e><[qid].proc[quests_displayname]><&r><&nl><script[quest_data_<[qid]>].parsed_key[info.description]> format:quests_format
                                        - narrate <&nl><script.parsed_key[data.dialogue.quest_prompt].separated_by[<&nl>]>
                                        - zap 3
                                        - stop
                                    - case 0:
                                        - if <player.flag[quests.<[qid]>.kill_amount].if_null[0]> < 10:
                                            - narrate "The undead problem is still occuring, please finish the job." format:npc_format
                                            - wait 2s
                                            - inject npc_dialogue_validity
                                            - inject <script.name>.subscripts.init_dialogue
                                            - stop
                                        - narrate "You did it, you saved us from the horrible creatures." format:npc_format
                                        - wait 2s
                                        - run quests_complete def.qid:<[qid]>
                                        - wait 2s
                                        - inject <script.name>.subscripts.init_dialogue
                                    - case 1:
                                        - narrate "Unfortunately, I don't have any jobs for you." format:npc_format
                                    - default:
                                        - narrate "<&c>Missing message for stage: <&e><player.proc[player_quest_stage].context[<[qid]>]>"
                            - case 2:
                                - narrate "blah blah, social dialogue." format:npc_format
                                - wait 1s
                                - inject npc_dialogue_validity
                                - inject <script.name>.subscripts.init_dialogue
                            - case 3:
                                - disengage if:<npc.engaged[<player>]>
                                - narrate <script.parsed_key[data.dialogue.exit_dialogue]> format:npc_format
                                - zap 1
                            - default:
                                - narrate "I didn't understand what you mean by <&[yellow]><context.message.split.get[1]><&f>." format:npc_format

        3:
            proximity trigger:
                exit:
                    script:
                        - disengage if:<npc.engaged[<player>]>
                        - narrate <script.parsed_key[data.dialogue.proximity_exit]>  format:npc_format
                        - zap 1
            chat trigger:
                1:
                    trigger: /*/
                    hide trigger message: true
                    script:
                        - define qid gzk
                        - choose <context.message.split.get[1]>:
                            - case 1:
                                - narrate "Thank you." format:npc_format
                                - wait 1s
                                - run quests_start def.qid:<[qid]>
                                - wait 1s
                                - inject npc_dialogue_validity
                                - narrate "Is there anything else that you need?" format:npc_format
                                - inject <script.name>.subscripts.init_dialogue
                                - zap 2
                            - case 2:
                                - narrate "No? I see." format:npc_format
                                - wait 1s
                                - inject npc_dialogue_validity
                                - narrate "Is there anything else that you need?" format:npc_format
                                - inject <script.name>.subscripts.init_dialogue
                                - zap 2
                            - default:
                                - narrate "I didn't understand what you mean by <&[yellow]><context.message.split.get[1]><&f>." format:npc_format

quest_data_gzk:
    type: data
    debug: false
    info:
        type: kill
        kill_amount: 10
        kill_type: zombie
        name: Generic Zombie Kill
        stage_complete: 1
        # This is necessary because you can't <script.data_key> in a data container.
        description: <&e>Kill <&a><script[quest_data_gzk].data_key[info.kill_amount]> zombies.

quest_events_gzk:
    type: world
    debug: false
    events:
        on flagged:quests_active.gzk player kills zombie:
            - define qid gzk
            - flag <player> quests.<[qid]>.kill_amount:++
            - define kamt <player.flag[quests.<[qid]>.kill_amount]>
            - if <[kamt]> <= 10:
                - define S "<&e><[qid].proc[quests_displayname]><&nl><&7><italic><[kamt]> / 10 Zombies killed."
                - narrate <[S]> format:quests_format