Date: 2024/11/20 15:17:23 UTC-08:00
Type: Denizen Script
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
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