Initial commit
This commit is contained in:
238
scripts/storyboard/ch1/ch1_1_preassign.dsc
Normal file
238
scripts/storyboard/ch1/ch1_1_preassign.dsc
Normal file
@@ -0,0 +1,238 @@
|
||||
ch1_1_preassign:
|
||||
debug: false
|
||||
type: world
|
||||
events:
|
||||
on player joins:
|
||||
- if <proc[storyboard_player_state_get].context[<player>|preassign]> == null:
|
||||
- run storyboard_npc_memalloc "def:<player>|marie|player|<location[-4,2,-15,world]>|Marie Ayashibayomi|true|<script[storyboard_skin_dump].data_key[marie].get[a]>"
|
||||
- run storyboard_npc_set_assignment def.player:<player> def.name:marie def.assignment:ch1_1_marie_assign
|
||||
- run storyboard_player_state_set def.player:<player> def.key:preassign def.value:true
|
||||
|
||||
ch1_1_marie_assign:
|
||||
debug: false
|
||||
type: assignment
|
||||
actions:
|
||||
on assignment:
|
||||
- trigger name:click state:true
|
||||
interact scripts:
|
||||
- ch1_1_marie_interact
|
||||
|
||||
# TODO: this seems like the wrong place
|
||||
ch1_1_define_phone:
|
||||
debug: false
|
||||
type: task
|
||||
script:
|
||||
- define phone <item[glistering_melon_slice]>
|
||||
- adjust def:phone "display:<&e>Flip Phone"
|
||||
- adjust def:phone custom_model_data:2
|
||||
- flag <[phone]> phones:true
|
||||
- determine <[phone]>
|
||||
|
||||
ch1_1_marie_interact:
|
||||
debug: false
|
||||
type: interact
|
||||
steps:
|
||||
1:
|
||||
click trigger:
|
||||
script:
|
||||
- if <player.flag[textbox_state].if_null[null]> != null:
|
||||
- stop
|
||||
- engage player duration:999999s
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Hey there, <proc[storyboard_character_first_name].context[<player>]>!" def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[normal]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* I'm so happy to see ya!" def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[happy]>
|
||||
- definemap choices:
|
||||
left:
|
||||
text: Likewise
|
||||
right:
|
||||
text: My name?
|
||||
- ~run textbox_choice def.player:<player> def.queue:<queue> def.choices:<[choices]> save:result
|
||||
- define choice <entry[result].created_queue.determination.get[1]>
|
||||
- if <[choice]> == right:
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Oh, right." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[sweat]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Let's just say a little bird$$nltold me it, wink wink!" def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[happy]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* So, what do you think?$$nlThis town's looking neat, no?" def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[normal]>
|
||||
- definemap choices:
|
||||
left:
|
||||
text: Yeah
|
||||
right:
|
||||
text: Don't know
|
||||
- ~run textbox_choice def.player:<player> def.queue:<queue> def.choices:<[choices]> save:result
|
||||
- define choice <entry[result].created_queue.determination.get[1]>
|
||||
- if <[choice]> == left:
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Right???$$nlOh man." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[happy]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Golly me! I just love$$nlit here." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[happy]>
|
||||
- else:
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* That's alright, you got this!$$nlYou'll fit right in, I'm sure of it." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[sweat]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* I'm actually really fond of this$$nltown, although it's a little small." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[normal]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* You're new anyway, you probably need$$nlsomebody to show you around a little,$$nlno?" def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[normal]>
|
||||
- definemap choices:
|
||||
top:
|
||||
text: It would help
|
||||
bottom:
|
||||
text: You talk a lot
|
||||
- ~run textbox_choice def.player:<player> def.queue:<queue> def.choices:<[choices]> save:result
|
||||
- define choice <entry[result].created_queue.determination.get[1]>
|
||||
- define displeased false
|
||||
- if <[choice]> == top:
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Oh welp, I had a feeling." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[normal]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Don't worry dearie, I've gotcha$$nlaaaall covered!" def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[happy]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* I'll be in front of the Academy." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[normal]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* You know, like... the big building." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[normal]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* The one with the big gates." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[normal]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* You cannot miss it!$$nlSee you there!" def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[happy]>
|
||||
- else:
|
||||
- define displeased true
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Oh.." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[ummm]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Um.." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[neutral]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Yeah, I, uh.." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[neutral]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Actually.." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[neutral]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* I'll be in front of the Academy." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[oof]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Sorry." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[oof]>
|
||||
- run storyboard_player_freeze def.player:<player>
|
||||
- ~walk <npc> <location[-4,2,-33,world]>
|
||||
- run storyboard_npc_movement_commit def.player:<player> def.name:marie def.new_location:<location[-5,2,-78,world]>
|
||||
- run storyboard_player_unfreeze def.player:<player>
|
||||
- if !<[displeased]>:
|
||||
- run storyboard_npc_state_set def.player:<player> def.name:marie def.key:opinion def.value:1
|
||||
- else:
|
||||
- run storyboard_npc_state_set def.player:<player> def.name:marie def.key:opinion def.value:-1
|
||||
- zap 2
|
||||
- disengage player
|
||||
2:
|
||||
click trigger:
|
||||
script:
|
||||
- if <player.flag[textbox_state].if_null[null]> != null:
|
||||
- stop
|
||||
- engage player duration:999999s
|
||||
- define displeased false
|
||||
- define opinion <proc[storyboard_npc_state_get].context[<player>|marie|opinion]>
|
||||
- ~run ch1_1_define_phone save:result
|
||||
- define phone <entry[result].created_queue.determination.get[1]>
|
||||
- if <[opinion]> == null:
|
||||
- define opinion 1
|
||||
- if <[opinion]> == 1:
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Alrighty, here we are!!" def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[happy]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Sorry, sorry." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[sweat]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* I'll calm myself down now." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[oof]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* I've got to show ya things$$nland I can't be all jumpy!" def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[happy]>
|
||||
- else:
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Oh. Hey." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[upset]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Need something?" def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[upset]>
|
||||
- definemap choices:
|
||||
left:
|
||||
text: I'm sorry
|
||||
right:
|
||||
text: No, bye
|
||||
- ~run textbox_choice def.player:<player> def.queue:<queue> def.choices:<[choices]> save:result
|
||||
- define choice <entry[result].created_queue.determination.get[1]>
|
||||
- if <[choice]> == right:
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Mkay." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[upset]>
|
||||
- wait 1s
|
||||
- disengage player
|
||||
- stop
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Hm. Are you now?" def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[upset]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* You know, that was kind of$$nlmean of you." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[upset]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Why should I help you, anyway?" def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[upset]>
|
||||
- definemap choices:
|
||||
top:
|
||||
text: I'll change my ways
|
||||
bottom:
|
||||
text: You're right, I'm pretending
|
||||
- ~run textbox_choice def.player:<player> def.queue:<queue> def.choices:<[choices]> save:result
|
||||
- define choice <entry[result].created_queue.determination.get[1]>
|
||||
- if <[choice]> == top:
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Well." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[upset]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* . . ." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[neutral]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Okay, look, if you insist." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[oof]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* I'll try to pretend that$$nlnever happened." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[neutral]>
|
||||
- else:
|
||||
- define displeased true
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Well." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[ugh]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* I should've guessed." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[upset]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* So look, I'll cut it short." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[upset]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* I was going to show you around$$nland then give you a flip phone." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[upset]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* But honestly, I don't care$$nlabout that anymore, so why don't$$nlyou just take the phone instead?" def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[upset]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Makes things easier." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[upset]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:$$nl(You got the flip phone.)"
|
||||
- give <[phone]>
|
||||
- run storyboard_player_freeze def.player:<player>
|
||||
- ~walk <npc> <location[-6,2,-83,world]>
|
||||
- run storyboard_npc_memfree def.player:<player> def.name:marie
|
||||
- run storyboard_player_unfreeze def.player:<player>
|
||||
- goto done
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* As promised, I'll show you around." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[neutral]>
|
||||
- if <[opinion]> == 1:
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* You should pay attention$$nlbecause it's going to help you out!" def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[normal]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* I hope so at least!" def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[happy]>
|
||||
- else:
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* You can pay attention, but$$nlhonestly I don't care." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[neutral]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Anyway, follow me." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[normal]>
|
||||
- ~walk <npc> <location[2,2,-130,world]> speed:1
|
||||
- ~run storyboard_waituntil_safe def.player:<player> def.queue:<queue> def.condition:[player].location.distance_squared[<location[2,2,-130,world]>].is_less_than[10]
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* So this is the academy." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[normal]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Really big place." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[happy]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Nobody really likes the <&4><&l>dean<&0><&l>, or$$nlwell, so I hear." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[neutral]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Grumpy, rich... You get the idea." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[neutral]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Although, they did something right." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[normal]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Behind this building, there are$$nlsome <&o>sport fields." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[normal]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* A lot of people really enjoy them." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[normal]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* I'll take you there soon, but$$nllet's walk through the academy a bit." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[normal]>
|
||||
- ~walk <npc> <location[23,2,-174,world]> speed:1
|
||||
- ~walk <npc> <location[2,2,-197,world]> speed:1
|
||||
- ~walk <npc> <location[2,5,-225,world]> speed:1
|
||||
- ~run storyboard_waituntil_safe def.player:<player> def.queue:<queue> def.condition:[player].location.distance_squared[<location[2,5,-225,world]>].is_less_than[10]
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* So, anyway, the <&4><&l>dean<&0><&l> really went$$nlextra with this." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[normal]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* No, but really...$$nlA decorative garden at the$$nlentrance...?" def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[surprised]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Anyway, let's keep going." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[normal]>
|
||||
- ~walk <npc> <location[12,5,-240,world]> speed:1
|
||||
- ~walk <npc> <location[2,5,-254,world]> speed:1
|
||||
- ~walk <npc> <location[2,4,-314,world]> speed:1
|
||||
- ~run storyboard_waituntil_safe def.player:<player> def.queue:<queue> def.condition:[player].location.distance_squared[<location[2,4,-314,world]>].is_less_than[10]
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* It is pretty, is it not?" def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[happy]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Maybe they had a point." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[surprised]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Though I think people would appreciate$$nlit if they stopped being as snarky." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[normal]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Not everyone in this town is kind and$$nlnice to you, you know?" def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[neutral]>
|
||||
- if <[opinion]> != 1:
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* <&o>I can think of one, at least." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[upset]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* So it's best you are careful." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[normal]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* You never know who you'll run into." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[normal]>
|
||||
- ~walk <npc> <location[2,2,-333,world]> speed:1
|
||||
- ~walk <npc> <location[-34,2,-359,world]> speed:1
|
||||
- ~walk <npc> <location[-24,2,-398,world]> speed:1
|
||||
- ~walk <npc> <location[2,2,-419,world]> speed:1
|
||||
- ~run storyboard_waituntil_safe def.player:<player> def.queue:<queue> def.condition:[player].location.distance_squared[<location[2,2,-419,world]>].is_less_than[10]
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Well, here are the sport fields." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[happy]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* I heard they're quite fun to play at!" def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[normal]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Though I suppose you'll need a friend,$$nlso maybe go together with someone!" def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[neutral]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* I'm sure you can call someone on$$nlthe phone!" def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[happy]>
|
||||
- define should_give_phone <player.inventory.map_slots.values.filter[has_flag[phones]].is_empty>
|
||||
- if <[should_give_phone]>:
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* ..." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[ummm]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* What?!" def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[ummm]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* You don't have a phone?" def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[ummm]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Hey, I know." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[normal]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* I'll just give you a flip phone!" def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[normal]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* You can call, text, play music..." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[normal]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Give it a try!" def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[happy]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:$$nl(You got the flip phone.)"
|
||||
- fakeitem <[phone]> slot:hand
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Oh, and..." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[normal]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* We can continue at the Central Park." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[normal]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* I hear it's really easy to get there!" def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[normal]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:$$nl(You remember something about /spawn)"
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Well then, toodles!" def.avatar_unicode:<script[storyboard_avatar_dump].data_key[marie].get[happy]>
|
||||
- run storyboard_player_freeze def.player:<player>
|
||||
- ~walk <npc> <location[-44,2,-378,world]> speed:2
|
||||
- run storyboard_player_unfreeze def.player:<player>
|
||||
- run storyboard_npc_movement_commit def.player:<player> def.name:marie def.new_location:<location[-4,2,-15,world]>
|
||||
- inventory update
|
||||
- if <[should_give_phone]>:
|
||||
- give <[phone]>
|
||||
- mark done
|
||||
- if !<[displeased]>:
|
||||
- run storyboard_npc_state_set def.player:<player> def.name:marie def.key:opinion def.value:<[opinion].add[1]>
|
||||
- else:
|
||||
- run storyboard_npc_state_set def.player:<player> def.name:marie def.key:opinion def.value:<[opinion].sub[1]>
|
||||
- inventory update
|
||||
- zap 3
|
||||
- disengage player
|
||||
24
scripts/storyboard/data/storyboard_npc_dump.dsc
Normal file
24
scripts/storyboard/data/storyboard_npc_dump.dsc
Normal file
@@ -0,0 +1,24 @@
|
||||
storyboard_skin_dump:
|
||||
debug: false
|
||||
type: data
|
||||
marie:
|
||||
a: ewogICJ0aW1lc3RhbXAiIDogMTcwNjgwNTQ4MjM3OSwKICAicHJvZmlsZUlkIiA6ICJhODJkZTliNjZhYjE0OGZhOTQ3OGY0OWJiZjg5OTk1YyIsCiAgInByb2ZpbGVOYW1lIiA6ICJmdWhyM3JibDRiIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2Q5OTI3MTA4ZDI4MmQ0NTYxMmM5YWZmZGQ4NDA2ODAzYWNjYmY5ZWY5N2MyMzA4NDgwNGQ3YzYwNjAyNTlkZGMiLAogICAgICAibWV0YWRhdGEiIDogewogICAgICAgICJtb2RlbCIgOiAic2xpbSIKICAgICAgfQogICAgfQogIH0KfQ==;to+5mawLkRklTI+r+N5HE/aMJPRtBYAzccTCAWfDhcH/6qpV3t25tsokGhZIfwyzn34ckycN0+Qo/HwIHpK4BYljf4TfnEI1/zLoH7V4oPnVjlwOuZuFT30OVlTo6z2vaWm3ZvhzAYsW6prt51CBZY2sGu76cBtbck7qOVUCdVzo+998dXWz19NF6mfZk11wKEsMeTWId9xB6KsNhZeqYrUr1R+PTzLl9fgsexPJ2WqZFpk1sGVzxdsxdjDxB4tDin9hulfnCq3Ar4xP+N8d1k6DMeudFaD6HltNRyfRr5nxIq7IyBU4dLG/aakUyasgVsU00v68+yzTA90sga8NSv9b1C0YTv91HcCIGbwmAoqGxuDibafkDTpEMfLAjRSIA4lxzJqZXCXssuTCzWnQVgS4OCm+MAwB08uX6uPMdL0EJwX3vMeiajQrX4P0oViKO4H0KwQnMXMOx5PqLDdFtWiBOE0NGTdJ1BqBfNbg4h3tNIv08y3hqUgUj/owfRnJ9X5EXibH2qk5+p4pHa15oDgM2Q6mSn4tkofR5nymvV8/YhtQLG9LJgeHsn6gY4ndWWk3zM3Gx3TOsDozrYs0hIfBSdLo6FJ0+7I2N/ga1Zj3Rj40d8EwGzrJrIY7v5Cz3zLnH8b70eUdAtGwW67/Qx1x/tmykKS1nfS9CGQW91M=;Marie
|
||||
|
||||
storyboard_avatar_dump:
|
||||
debug: false
|
||||
type: data
|
||||
marie:
|
||||
normal: 錁
|
||||
neutral: 錂
|
||||
happy: 錃
|
||||
upset: 錄
|
||||
surprised: 錅
|
||||
ummm: 錆
|
||||
sweat: 錇
|
||||
ugh: 錈
|
||||
oof: 錉
|
||||
emika:
|
||||
normal: 錑
|
||||
smirk: 錒
|
||||
smile: 錓
|
||||
unimpressed: 錔
|
||||
47
scripts/storyboard/dialogue/dialogue_npc_kobayashi.dsc
Normal file
47
scripts/storyboard/dialogue/dialogue_npc_kobayashi.dsc
Normal file
@@ -0,0 +1,47 @@
|
||||
dialogue_npc_kobayashi_assign:
|
||||
debug: false
|
||||
type: assignment
|
||||
actions:
|
||||
on assignment:
|
||||
- trigger name:click state:true
|
||||
interact scripts:
|
||||
- dialogue_npc_kobayashi
|
||||
|
||||
dialogue_npc_kobayashi:
|
||||
debug: false
|
||||
type: interact
|
||||
steps:
|
||||
1:
|
||||
click trigger:
|
||||
script:
|
||||
- if <player.flag[textbox_state].if_null[null]> != null:
|
||||
- stop
|
||||
- engage player
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:Heya, sorry luv."
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:We're currently under renovations, luv."
|
||||
- definemap choices:
|
||||
left:
|
||||
text: Why?
|
||||
right:
|
||||
text: Unfortunate
|
||||
- ~run textbox_choice def.player:<player> def.queue:<queue> def.choices:<[choices]> save:result
|
||||
- define choice <entry[result].created_queue.determination.get[1]>
|
||||
- if <[choice]> == left:
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:What?$$nlWhy?"
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:Well, look, I can't tell you that, luv.$$nl It's against Hospital Policy."
|
||||
- definemap choices:
|
||||
left:
|
||||
text: Sorry
|
||||
right:
|
||||
text: Don't care
|
||||
- ~run textbox_choice def.player:<player> def.queue:<queue> def.choices:<[choices]> save:result
|
||||
- define choice <entry[result].created_queue.determination.get[1]>
|
||||
- if <[choice]> == left:
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:No worries, luv!"
|
||||
- else:
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:What?$$nlYou don't care?"
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:I'm afraid I can't treat that, luv."
|
||||
- else:
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:Indeed, luv."
|
||||
- wait 1s
|
||||
- disengage player
|
||||
25
scripts/storyboard/dialogue/dialogue_npc_patchouli.dsc
Normal file
25
scripts/storyboard/dialogue/dialogue_npc_patchouli.dsc
Normal file
@@ -0,0 +1,25 @@
|
||||
dialogue_npc_patchouli_assign:
|
||||
debug: false
|
||||
type: assignment
|
||||
actions:
|
||||
on assignment:
|
||||
- trigger name:click state:true
|
||||
interact scripts:
|
||||
- dialogue_npc_patchouli
|
||||
|
||||
dialogue_npc_patchouli:
|
||||
debug: false
|
||||
type: interact
|
||||
steps:
|
||||
1:
|
||||
click trigger:
|
||||
script:
|
||||
- if <player.flag[textbox_state].if_null[null]> != null:
|
||||
- stop
|
||||
- engage player
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:. . ."
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:. . ."
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:She is fast asleep."
|
||||
- wait 1s
|
||||
- disengage player
|
||||
- ratelimit <player> 10t
|
||||
31
scripts/storyboard/dialogue/dialogue_npc_ryuko.dsc
Normal file
31
scripts/storyboard/dialogue/dialogue_npc_ryuko.dsc
Normal file
@@ -0,0 +1,31 @@
|
||||
dialogue_npc_ryuko_assign:
|
||||
debug: false
|
||||
type: assignment
|
||||
actions:
|
||||
on assignment:
|
||||
- trigger name:click state:true
|
||||
interact scripts:
|
||||
- dialogue_npc_ryuko
|
||||
|
||||
dialogue_npc_ryuko:
|
||||
debug: false
|
||||
type: interact
|
||||
steps:
|
||||
1:
|
||||
click trigger:
|
||||
script:
|
||||
- if <player.flag[textbox_state].if_null[null]> != null:
|
||||
- stop
|
||||
- engage player
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Hey, what's up?!"
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* I hang out here a lot.$$nlI love to stay fit, be athletic."
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Kicking balls is great!$$nl $$nl* uh.."
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Anyway, the Academy sorta ran out of$$nlof tennis rackets."
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Something about them being broken$$nland rusty, apparently."
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* If you ask me, that's a bunch of crap!$$nlI think <&4><&l>the dean<&0><&l> is just no fun."
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* I think they don't want us playing.$$nlIt wouldn't be the first time."
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* I also haven't seen anyone play any$$nlbasketball recently, so I'm not sure$$nlwhat that's about."
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* They should resolve this as soon as$$nlpossible before the students start a$$nlrebellion."
|
||||
- wait 1s
|
||||
- disengage player
|
||||
- ratelimit <player> 10t
|
||||
10
scripts/storyboard/intro/intro_books.dsc
Normal file
10
scripts/storyboard/intro/intro_books.dsc
Normal file
@@ -0,0 +1,10 @@
|
||||
intro_book:
|
||||
debug: false
|
||||
type: book
|
||||
title: Intro Book
|
||||
author: bqkitcat
|
||||
signed: true
|
||||
text:
|
||||
- <bold>Welcome to SakuraFalls<n><n><reset>We encourage you to enable the resource pack for the best experience.<n><n>Please read the next page for more information.
|
||||
- <bold>Tutorial<n><n><reset>You are going through the introductory tutorial. We will help you pick a character name and description, as well as your starting role.<n><n>Please read everything! It will help a lot.
|
||||
- <bold>Questions<n><n><reset>Please type <bold>/ticket create<reset> in chat if you are having issues with the tutorial.<n><n>Send messages with <bold>/ooc (message)<reset> for everyone online.<n><n>You can also contact us on Discord, too, by <blue><underline><&click[https://discord.gg/bvDvQbT4s8].type[OPEN_URL]>clicking here<&end_click>
|
||||
200
scripts/storyboard/intro/intro_interactions.dsc
Normal file
200
scripts/storyboard/intro/intro_interactions.dsc
Normal file
@@ -0,0 +1,200 @@
|
||||
# Posters
|
||||
intro_interact_posters:
|
||||
debug: false
|
||||
type: world
|
||||
events:
|
||||
on player right clicks block:
|
||||
- if !<context.location.note_name.if_null[null].starts_with[intro_interact_posters]>:
|
||||
- stop
|
||||
- determine cancelled passively
|
||||
- if <player.has_flag[textbox_state]>:
|
||||
- stop
|
||||
- run intro_interact_posters_task
|
||||
|
||||
intro_interact_posters_task:
|
||||
debug: false
|
||||
type: task
|
||||
script:
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:Book-related posters are on the wall."
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:<&o><&dq>Screw that. I'm running away.<&dq>"
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:<&o><&dq>Where?<&dq>"
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:<&o><&dq>Dunno. Do you want to come?<&dq>"
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:<&o><&dq>Yes,<&dq> I said without thinking."
|
||||
|
||||
# Cirno
|
||||
intro_interact_cirno:
|
||||
debug: false
|
||||
type: world
|
||||
events:
|
||||
on player right clicks block:
|
||||
- if !<context.location.note_name.if_null[null].starts_with[intro_interact_cirno]>:
|
||||
- stop
|
||||
- determine cancelled passively
|
||||
- if <player.has_flag[textbox_state]>:
|
||||
- stop
|
||||
- run intro_interact_cirno_task
|
||||
|
||||
intro_interact_cirno_task:
|
||||
debug: false
|
||||
type: task
|
||||
script:
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:A quality, soft plushie of a beloved$$nlcharacter."
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:It seems familiar, as if there are a$$nlsubstantial amount of images circulating$$nlaround with this character."
|
||||
|
||||
# Laptop
|
||||
intro_interact_laptop:
|
||||
debug: false
|
||||
type: world
|
||||
events:
|
||||
on player right clicks block:
|
||||
- if !<context.location.note_name.if_null[null].starts_with[intro_interact_laptop]>:
|
||||
- stop
|
||||
- determine cancelled passively
|
||||
- if <player.has_flag[textbox_state]>:
|
||||
- stop
|
||||
- run intro_interact_laptop_task
|
||||
|
||||
intro_interact_laptop_task:
|
||||
debug: false
|
||||
type: task
|
||||
script:
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:It looks like a game is booted up.$$nlYou can see a city, and it looks like..."
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:. . ."
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:It's <bold>you!$$nl. . .$$nlWell, it's your character."
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:You should give your character$$nla cool name, right?"
|
||||
- waituntil <player.has_flag[textbox_state].not> max:5s
|
||||
- ~run textbox_flush def.player:<player>
|
||||
- run anvil_input def.player:<player> "def.prompt:Character Name" def.callback:intro_interact_laptop_task_name_callback
|
||||
|
||||
intro_interact_laptop_task_name_callback:
|
||||
debug: false
|
||||
type: task
|
||||
definitions: player|input
|
||||
script:
|
||||
- define __player <[player]>
|
||||
- define name <[input].substring[1,24]>
|
||||
- execute as_player player:<[player]> "rpname <[name]>"
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:<[name]>"
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:How nice!"
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:Let's give them a description.$$nlDescribe their physical attributes."
|
||||
- waituntil <player.has_flag[textbox_state].not> max:5s
|
||||
- ~run textbox_flush def.player:<player>
|
||||
- run anvil_input def.player:<player> "def.prompt:Description" def.callback:intro_interact_laptop_task_description_callback
|
||||
|
||||
intro_interact_laptop_task_description_callback:
|
||||
debug: false
|
||||
type: task
|
||||
definitions: player|input
|
||||
script:
|
||||
- define __player <[player]>
|
||||
- execute as_player player:<[player]> "setdesc <[input]>"
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:Great, your character's almost ready."
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:Lastly, your character can start$$nlout as a student or as$$nlan <bold>adult."
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:Both options are great, and it's$$nlmostly a matter of preference."
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:For complete beginners, we recommend$$nlstarting out as a student."
|
||||
- waituntil <player.has_flag[textbox_state].not> max:5s
|
||||
- ~run textbox_flush def.player:<player>
|
||||
- run intro_interact_laptop_task_role_menu def.player:<player>
|
||||
|
||||
intro_interact_laptop_task_role_menu:
|
||||
debug: false
|
||||
type: task
|
||||
definitions: player
|
||||
script:
|
||||
- definemap contents:
|
||||
1:
|
||||
item: <item[paper[display=<&6><&l>» <&e>Choose your starting role;lore=<&7>Your role gives you different roleplay opportunities and gameplay.|<&7>You can make a new character after the tutorial if you are unsure.]]>
|
||||
4:
|
||||
item: <item[book[display=<&f>鐀;lore=<&7><&o>A new student at Tatsuru Academy, ready to learn|<&7><&o>and live a highschooler's life.]]>
|
||||
script: intro_interact_laptop_task_role_callback
|
||||
definitions:
|
||||
player: <[player]>
|
||||
input: no
|
||||
6:
|
||||
item: <item[book[display=<&f>鐃;lore=<&7><&o>Freshly moved into Atarashikibo, on your way to|<&7><&o>find a job and a meaning.]]>
|
||||
script: intro_interact_laptop_task_role_callback
|
||||
definitions:
|
||||
player: <[player]>
|
||||
input: yes
|
||||
- run menu_open def.player:<[player]> "def.title:<&f>邑邑邑邑酐<&a><&sp><&b><&sp><&c><&sp>" def.size:9 def.contents:<[contents]>
|
||||
|
||||
intro_interact_laptop_task_role_callback:
|
||||
debug: false
|
||||
type: task
|
||||
definitions: player|input
|
||||
script:
|
||||
- inventory close player:<[player]>
|
||||
- define __player <[player]>
|
||||
- define adult <[input].to_lowercase.trim.equals[yes]>
|
||||
- if <[adult]>:
|
||||
- execute as_server "lp user <player.name> parent add adult"
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:An adult it shall be.$$nlIf this is wrong, let us know."
|
||||
- else:
|
||||
- execute as_server "lp user <player.name> parent add grade-10"
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:A student it shall be.$$nlIf this is wrong, let us know."
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:You should now be ready to start!"
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:Have fun!"
|
||||
- waituntil <player.has_flag[textbox_state].not> max:5s
|
||||
- cast BLINDNESS duration:infinite <player> no_ambient hide_particles no_icon
|
||||
- wait 1s
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Though..." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[normal]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* I feel obligated to ask." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[smile]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Have you heard of <&o>IC<&0><&l> and <&o>OOC<&0><&l>?" def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[normal]>
|
||||
- definemap choices:
|
||||
left:
|
||||
text: Not really
|
||||
right:
|
||||
text: Yeah
|
||||
- ~run textbox_choice def.player:<player> def.queue:<queue> def.choices:<[choices]> save:result
|
||||
- define choice <entry[result].created_queue.determination.get[1]>
|
||||
- if <[choice]> == left:
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Ah..." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[normal]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* You see, this WORLD..." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[normal]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* This... <&o>representation<&0><&l>." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[normal]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* You exist beyond it." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[smile]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* I'm talking about you, <player.name>." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[smirk]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Your character.$$nlYour VESSEL.$$nl<player.flag[character_rpname]>" def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[normal]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* They do not." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[smirk]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* You, <player.name>, are <&o>out of character<&0><&l>." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[normal]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Your VESSEL...$$nl<player.flag[character_rpname]>$$nlThey are <&o>in character<&0><&l>." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[normal]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* So, when your VESSEL speaks..." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[normal]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* That is not <&o>you<&0><&l>." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[smile]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Your VESSEL has different feelings,$$nlemotions, and experiences." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[smile]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* What those are is for you to decide." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[smirk]>
|
||||
- else:
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Ah..." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[unimpressed]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* So you know they stand for$$nl<&o>in character<&0><&l> and <&o>out of character." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[normal]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* You are probably familiar with$$nlthis WORLD." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[normal]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* You are probably familiar with$$nlroleplaying, too." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[normal]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* I apologise for doubting you$$nllike that." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[smile]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* . . ." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[unimpressed]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* In this world, we get to choose who$$nlwe are, at least sort of." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[smile]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Maybe we cannot decide what the$$nloutcome will be, but we can try." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[smile]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* <player.flag[character_rpname]>, I..." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[normal]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* I think your choices are important,$$nlregardless." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[smile]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* I think you should try your best to$$nldo what your heart tells you." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[smile]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Wouldn't you agree?" def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[smile]>
|
||||
- definemap choices:
|
||||
left:
|
||||
text: Correct
|
||||
right:
|
||||
text: ...
|
||||
- ~run textbox_choice def.player:<player> def.queue:<queue> def.choices:<[choices]> save:result
|
||||
- define choice <entry[result].created_queue.determination.get[1]>
|
||||
- if <[choice]> == left:
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* I'm glad you understand." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[smile]>
|
||||
- else:
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Ah..." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[unimpressed]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* I see." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[smirk]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* Very well. You are truly ready." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[smile]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* When you are finally linked to$$nlour WORLD, you will see <&o>Marie<&0><&l>." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[smile]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* She has talked to many others just$$nllike you." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[smile]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* So, you should probably talk to her." def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[smile]>
|
||||
- ~run textbox_write def.player:<player> def.queue:<queue> "def.line3s:* I'll be on my way.$$nlGood luck!" def.avatar_unicode:<script[storyboard_avatar_dump].data_key[emika].get[smile]>
|
||||
- waituntil <player.has_flag[textbox_state].not> max:5s
|
||||
- ~run textbox_flush def.player:<player>
|
||||
- adjust <player> remove_effects
|
||||
- adjust <player> show_to_players
|
||||
- flag <player> intro:done
|
||||
- execute as_player player:<player> "spawn"
|
||||
|
||||
18
scripts/storyboard/intro/intro_world.dsc
Normal file
18
scripts/storyboard/intro/intro_world.dsc
Normal file
@@ -0,0 +1,18 @@
|
||||
intro_world:
|
||||
debug: false
|
||||
type: world
|
||||
events:
|
||||
after player joins:
|
||||
- define intro <player.flag[intro].if_null[null]>
|
||||
- if <[intro]> != done:
|
||||
- adjust <player> hide_from_players
|
||||
- adjust <player> remove_effects
|
||||
- run textbox_flush def.player:<player>
|
||||
- if <[intro]> == null:
|
||||
- teleport <player> <location[313.5,3,258.5,0,270,world]>
|
||||
- flag <player> intro:progress
|
||||
- adjust <player> show_book:intro_book
|
||||
on player teleports bukkit_priority:lowest:
|
||||
- if <player.flag[intro].if_null[null]> == progress:
|
||||
- determine cancelled passively
|
||||
- narrate "<&c>You may not teleport at this time."
|
||||
255
scripts/storyboard/tasks/storyboard_npc_tasks.dsc
Normal file
255
scripts/storyboard/tasks/storyboard_npc_tasks.dsc
Normal file
@@ -0,0 +1,255 @@
|
||||
#
|
||||
# Storyboard NPC Tasks
|
||||
#
|
||||
# Adds a complex set of per-player state managed NPC routines which
|
||||
# allow for the creation of RPG-like stories, similar to Undertale.
|
||||
#
|
||||
# The routines and state system is also as memory efficient and lazy
|
||||
# as possible. It utilizes Denizen and Citizens to their best, taking
|
||||
# advantage of Denizen's innate scripting possibilites.
|
||||
#
|
||||
|
||||
# Allocates an NPC with a given name at some location for the current player.
|
||||
#
|
||||
# Optionally, specify a display name, display name visibility, and a skin_blob.
|
||||
# Generate Skin Blobs using https://mineskin.org - it cannot be done automatically
|
||||
# at this time.
|
||||
#
|
||||
# If the NPC is reallocated from player state, it will try to re-fill these values.
|
||||
# You can specify new values to change these.
|
||||
# Note it will only try to fill these optional values, not "name", "type", and "at".
|
||||
#
|
||||
# The name of the NPC must be unique - this is not the same as the display
|
||||
# name of the NPC; rather it is an internal name, so it's recommended to
|
||||
# keep it lowercase.
|
||||
#
|
||||
# If the NPC is not allocated but was saved in the player's mem state, it
|
||||
# will be created and its state will be restored.
|
||||
# If the NPC is already allocated, it will simply teleport the NPC.
|
||||
#
|
||||
# All NPCs are memfree'd when a player leaves, which does not reduce storage
|
||||
# overhead, but does greatly reduce overhead when hiding/showing per-player NPCs.
|
||||
# They are automatically memalloc'ed when a player rejoins.
|
||||
storyboard_npc_memalloc:
|
||||
debug: false
|
||||
type: task
|
||||
definitions: player|name|type|at|display_name|show_name|skin_blob
|
||||
script:
|
||||
- define registry registry_<[player].uuid>
|
||||
- define npc_id npc_<[player].uuid>_<[name]>
|
||||
- if !<server.npcs[<[registry]>].if_null[<list[]>].contains[<[npc_id]>]>:
|
||||
- define npcs <[player].flag[storyboard_state].get[npcs].if_null[<map[]>]>
|
||||
- create <[type]> <[npc_id]> <[at]> registry:<[registry]> save:npc
|
||||
- define npc <entry[npc].created_npc>
|
||||
- define npc_state <map[]>
|
||||
- define assignment null
|
||||
- if <[npcs].contains[<[name]>]>:
|
||||
- define npc_data <[npcs].get[<[name]>]>
|
||||
- define npc_state <[npc_data].get[state]>
|
||||
- if <[display_name].if_null[null]> == null:
|
||||
- define display_name <[npc_data].get[display_name]>
|
||||
- if <[show_name].if_null[null]> == null:
|
||||
- define show_name <[npc_data].get[show_name]>
|
||||
- if <[skin_blob].if_null[null]> == null:
|
||||
- define skin_blob <[npc_data].get[skin_blob]>
|
||||
- define assignment <[npc_data].get[assignment].if_null[null]>
|
||||
- else:
|
||||
- if <[display_name].if_null[null]> == null:
|
||||
- define display_name <[display_name].if_null[<[name].to_sentence_case>]>
|
||||
- if <[show_name].if_null[null]> == null:
|
||||
- define show_name <[show_name].if_null[true]>
|
||||
- if <[skin_blob].if_null[null]> == null:
|
||||
- define skin_blob <[skin_blob].if_null[null]>
|
||||
- definemap npc_data:
|
||||
name: <[name]>
|
||||
type: <[type]>
|
||||
at: <[at]>
|
||||
state: <[npc_state]>
|
||||
display_name: <[display_name]>
|
||||
show_name: <[show_name]>
|
||||
skin_blob: <[skin_blob]>
|
||||
allocated: true
|
||||
assignment: <[assignment]>
|
||||
- define npcs <[npcs].with[<[name]>].as[<[npc_data]>]>
|
||||
- flag <[player]> storyboard_state:<[player].flag[storyboard_state].if_null[<map[]>].with[npcs].as[<[npcs]>]>
|
||||
- adjust <[npc]> auto_update_skin:false
|
||||
- adjust <[npc]> name_visible:false
|
||||
- lookclose <[npc]> state:true range:4
|
||||
- if !<[show_name]>:
|
||||
- adjust <[npc]> hologram_lines:<list[]>
|
||||
- else:
|
||||
- adjust <[npc]> "hologram_lines:<&f>鐓 <[display_name]>"
|
||||
- if <[skin_blob]> != null:
|
||||
- adjust <[npc]> skin_blob:<[skin_blob]>
|
||||
- if <[assignment]> != null:
|
||||
- assignment set script:<[assignment]> to:<[npc]>
|
||||
- wait 2t
|
||||
- run storyboard_npc_internal_show_to_player def.player:<[player]> def.npc:<[npc]>
|
||||
- else:
|
||||
- define index <server.npcs[<[registry]>].find[<[npc_id]>]>
|
||||
- define npc <npc[<[index]>,<[registry]>]>
|
||||
- teleport <[npc]> <[at]>
|
||||
|
||||
# Retrieves an NPC from the player's unique NPC registry by name.
|
||||
storyboard_npc_by_name:
|
||||
debug: false
|
||||
type: procedure
|
||||
definitions: player|name
|
||||
script:
|
||||
- define registry registry_<[player].uuid>
|
||||
- define npc_id npc_<[player].uuid>_<[name]>
|
||||
- determine <server.npcs[<[registry]>].filter_tag[<[filter_value].name.equals[<[npc_id]>]>].get[1]>
|
||||
|
||||
# Frees an NPC from memory, but does not destroy its state.
|
||||
#
|
||||
# This is often done automatically when the player leaves the server, however it may
|
||||
# be useful for programmers to manually call this routine for optimization purposes.
|
||||
#
|
||||
# If you don't want the server to reallocate the NPC on player join, provide
|
||||
# the reallocate definition as 'reallocate' (or just don't provide it).
|
||||
storyboard_npc_memfree:
|
||||
debug: false
|
||||
type: task
|
||||
definitions: player|name|reallocate
|
||||
script:
|
||||
- define npc <proc[storyboard_npc_by_name].context[<[player]>|<[name]>]>
|
||||
- define reallocate <[reallocate].if_null[false]>
|
||||
- define npcs <[player].flag[storyboard_state].get[npcs].if_null[<map[]>]>
|
||||
- define npc_data <[npcs].get[<[name]>]>
|
||||
- define npc_data <[npc_data].with[allocated].as[<[reallocate]>]>
|
||||
- define npcs <[npcs].with[<[name]>].as[<[npc_data]>]>
|
||||
- flag <[player]> storyboard_state:<[player].flag[storyboard_state].if_null[<map[]>].with[npcs].as[<[npcs]>]>
|
||||
- remove <[npc]>
|
||||
|
||||
# Destroys an NPC from memory, which destroys its state.
|
||||
# Further memalloc's will re-create the NPC with new state data.
|
||||
# Use this when you are 100% done with using an NPC.
|
||||
# If you only want to remove an NPC until later, but keep its state,
|
||||
# consider calling storyboard_npc_memfree instead.
|
||||
storyboard_npc_memdestroy:
|
||||
debug: false
|
||||
type: task
|
||||
definitions: player|name
|
||||
script:
|
||||
- define npcs <[player].flag[storyboard_state].get[npcs].if_null[<map[]>]>
|
||||
- define npcs <[npcs].exclude[<[name]>]>
|
||||
- flag <[player]> storyboard_state:<[player].flag[storyboard_state].if_null[<map[]>].with[npcs].as[<[npcs]>]>
|
||||
- define npc <proc[storyboard_npc_by_name].context[<[player]>|<[name]>]>
|
||||
- remove <[npc]>
|
||||
|
||||
# Flags the NPC by name, mapping the given key to the given value.
|
||||
storyboard_npc_state_set:
|
||||
debug: false
|
||||
type: task
|
||||
definitions: player|name|key|value
|
||||
script:
|
||||
- define npc <proc[storyboard_npc_by_name].context[<[player]>|<[name]>]>
|
||||
- define npcs <[player].flag[storyboard_state].get[npcs].if_null[<map[]>]>
|
||||
- define npc_data <[npcs].get[<[name]>]>
|
||||
- define state <[npc_data].get[state].if_null[<map[]>]>
|
||||
- define state <[state].with[<[key]>].as[<[value]>]>
|
||||
- define npc_data <[npc_data].with[state].as[<[state]>]>
|
||||
- define npcs <[npcs].with[<[name]>].as[<[npc_data]>]>
|
||||
- flag <[player]> storyboard_state:<[player].flag[storyboard_state].if_null[<map[]>].with[npcs].as[<[npcs]>]>
|
||||
|
||||
# Gets a state value from the NPC by name and key; effectively like reading a flag.
|
||||
# If the given key does not exist/is not set, determines null.
|
||||
storyboard_npc_state_get:
|
||||
debug: false
|
||||
type: procedure
|
||||
definitions: player|name|key
|
||||
script:
|
||||
- define npcs <[player].flag[storyboard_state].get[npcs].if_null[<map[]>]>
|
||||
- define npc_data <[npcs].get[<[name]>]>
|
||||
- define state <[npc_data].get[state].if_null[<map[]>]>
|
||||
- determine <[state].get[<[key]>].if_null[null]>
|
||||
|
||||
# Deletes a flag from the NPC by name and key.
|
||||
storyboard_npc_state_clear:
|
||||
debug: false
|
||||
type: task
|
||||
definitions: player|name|key
|
||||
script:
|
||||
- define npc <proc[storyboard_npc_by_name].context[<[player]>|<[name]>]>
|
||||
- define npcs <[player].flag[storyboard_state].get[npcs].if_null[<map[]>]>
|
||||
- define npc_data <[npcs].get[<[name]>]>
|
||||
- define state <[npc_data].get[state].if_null[<map[]>]>
|
||||
- define state <[state].exclude[<[key]>]>
|
||||
- define npc_data <[npc_data].with[state].as[<[state]>]>
|
||||
- define npcs <[npcs].with[<[name]>].as[<[npc_data]>]>
|
||||
- flag <[player]> storyboard_state:<[player].flag[storyboard_state].if_null[<map[]>].with[npcs].as[<[npcs]>]>
|
||||
|
||||
# Sets an NPCs assignment, which also persists across memfrees.
|
||||
storyboard_npc_set_assignment:
|
||||
debug: false
|
||||
type: procedure
|
||||
definitions: player|name|assignment
|
||||
script:
|
||||
- define npc <proc[storyboard_npc_by_name].context[<[player]>|<[name]>]>
|
||||
- define npcs <[player].flag[storyboard_state].get[npcs].if_null[<map[]>]>
|
||||
- define npc_data <[npcs].get[<[name]>]>
|
||||
- define npc_data <[npc_data].with[assignment].as[<[assignment]>]>
|
||||
- define npcs <[npcs].with[<[name]>].as[<[npc_data]>]>
|
||||
- flag <[player]> storyboard_state:<[player].flag[storyboard_state].if_null[<map[]>].with[npcs].as[<[npcs]>]>
|
||||
- assignment set script:<[assignment]> to:<[npc]>
|
||||
|
||||
# Moves an NPC to a new location, both physically, and in memory also.
|
||||
# When an NPC is moved by normal teleports or the walk command, its location isn't stored.
|
||||
# Use this to either commit its final position, or teleport it after a cutscene.
|
||||
storyboard_npc_movement_commit:
|
||||
debug: false
|
||||
type: procedure
|
||||
definitions: player|name|new_location
|
||||
script:
|
||||
- define npc <proc[storyboard_npc_by_name].context[<[player]>|<[name]>]>
|
||||
- define npcs <[player].flag[storyboard_state].get[npcs].if_null[<map[]>]>
|
||||
- define npc_data <[npcs].get[<[name]>]>
|
||||
- define npc_data <[npc_data].with[at].as[<[new_location]>]>
|
||||
- define npcs <[npcs].with[<[name]>].as[<[npc_data]>]>
|
||||
- flag <[player]> storyboard_state:<[player].flag[storyboard_state].if_null[<map[]>].with[npcs].as[<[npcs]>]>
|
||||
- teleport <[npc]> <[new_location]>
|
||||
|
||||
## Internal only!
|
||||
storyboard_npc_internal_auto_memory_management:
|
||||
debug: false
|
||||
type: world
|
||||
events:
|
||||
after player joins:
|
||||
- define npcs <player.flag[storyboard_state].get[npcs].if_null[<map[]>]>
|
||||
- foreach <[npcs]> key:name as:data:
|
||||
- if <[data].get[allocated]> == reallocate:
|
||||
- define name <[data].get[name]>
|
||||
- define type <[data].get[type]>
|
||||
- define at <[data].get[at]>
|
||||
- run storyboard_npc_memalloc def.player:<player> def.name:<[name]> def.type:<[type]> def.at:<[at]>
|
||||
on player quits:
|
||||
- define registry registry_<player.uuid>
|
||||
- define npcs <server.npcs[<[registry]>].if_null[<list[]>]>
|
||||
- define substr_length <element[npc_<player.uuid>_].length.add[1]>
|
||||
- foreach <[npcs]> as:npc:
|
||||
- define name <[npc].name.substring[<[substr_length]>]>
|
||||
- run storyboard_npc_memfree def.player:<player> def.name:<[name]> def.reallocate:reallocate
|
||||
|
||||
storyboard_npc_internal_show_to_player:
|
||||
debug: false
|
||||
type: task
|
||||
definitions: player|npc
|
||||
script:
|
||||
- adjust <[npc]> hide_from_players
|
||||
- adjust <[player]> show_entity:<[npc]>
|
||||
- foreach <[npc].hologram_npcs.if_null[<list[]>]> as:hologram:
|
||||
- adjust <[hologram]> hide_from_players
|
||||
- adjust <[player]> show_entity:<[hologram]>
|
||||
|
||||
storyboard_npc_internal_auto_display_entities:
|
||||
debug: false
|
||||
type: world
|
||||
events:
|
||||
on player joins bukkit_priority:high:
|
||||
- foreach <server.online_players.exclude[<player>]> as:target:
|
||||
- define registry registry_<[target].uuid>
|
||||
- define npcs <server.npcs[<[registry]>].if_null[<list[]>]>
|
||||
- foreach <[npcs]> as:npc:
|
||||
- adjust <player> hide_entity:<[npc]>
|
||||
- foreach <[npc].hologram_npcs.if_null[<list[]>]> as:hologram:
|
||||
- adjust <player> hide_entity:<[hologram]>
|
||||
70
scripts/storyboard/tasks/storyboard_player_tasks.dsc
Normal file
70
scripts/storyboard/tasks/storyboard_player_tasks.dsc
Normal file
@@ -0,0 +1,70 @@
|
||||
#
|
||||
# Storyboard Player Tasks
|
||||
#
|
||||
# Adds a set of tasks for managing player storyboard state.
|
||||
# Pretty common in use.
|
||||
#
|
||||
# Note: These actions are **committed** - so should be executed LAST in a script.
|
||||
# This allows the actions to "rollback" in case the server crashes/player disconnects.
|
||||
#
|
||||
|
||||
# Sets a named key to any value in the player state.
|
||||
storyboard_player_state_set:
|
||||
debug: false
|
||||
type: task
|
||||
definitions: player|key|value
|
||||
script:
|
||||
- define state <[player].flag[storyboard_state].get[state].if_null[<map[]>]>
|
||||
- define state <[state].with[<[key]>].as[<[value]>]>
|
||||
- flag <[player]> storyboard_state:<[player].flag[storyboard_state].if_null[<map[]>].with[state].as[<[state]>]>
|
||||
|
||||
# Removes a named key from player state.
|
||||
# If the key doesn't exist, silently fails.
|
||||
storyboard_player_state_clear:
|
||||
debug: false
|
||||
type: task
|
||||
definitions: player|key
|
||||
script:
|
||||
- define state <[player].flag[storyboard_state].get[state].if_null[<map[]>]>
|
||||
- define state <[state].exclude[<[key]>]>
|
||||
- flag <[player]> storyboard_state:<[player].flag[storyboard_state].if_null[<map[]>].with[state].as[<[state]>]>
|
||||
|
||||
# Gets a named key from player state.
|
||||
# If the key doesn't exist, "null" is returned.
|
||||
storyboard_player_state_get:
|
||||
debug: false
|
||||
type: procedure
|
||||
definitions: player|key
|
||||
script:
|
||||
- define state <[player].flag[storyboard_state].get[state].if_null[<map[]>]>
|
||||
- determine <[state].get[<[key]>].if_null[null]>
|
||||
|
||||
# Freezes a player in place by setting their speed to 0.
|
||||
# On relogs, automatically 'unfreezes' them.
|
||||
# See the complementary task storyboard_player_unfreeze
|
||||
storyboard_player_freeze:
|
||||
debug: false
|
||||
type: task
|
||||
definitions: player
|
||||
script:
|
||||
- flag <player> storyboard_freeze_speed:<player.walk_speed>
|
||||
- adjust <player> walk_speed:0
|
||||
|
||||
# Unfreezes a player. Always happens automatically on relogs.
|
||||
# See the complementary task storyboard_player_freeze
|
||||
storyboard_player_unfreeze:
|
||||
debug: false
|
||||
type: task
|
||||
definitions: player
|
||||
script:
|
||||
- adjust <player> walk_speed:<player.flag[storyboard_freeze_speed]>
|
||||
- flag <player> storyboard_freeze_speed:!
|
||||
|
||||
## Internal only!
|
||||
storyboard_player_freeze_check:
|
||||
debug: false
|
||||
type: world
|
||||
events:
|
||||
on player joins:
|
||||
- if <player.has_flag[storyboard_freeze_speed]>:
|
||||
- run storyboard_player_unfreeze def.player:<player>
|
||||
27
scripts/storyboard/util/storyboard_player_utils.dsc
Normal file
27
scripts/storyboard/util/storyboard_player_utils.dsc
Normal file
@@ -0,0 +1,27 @@
|
||||
#
|
||||
# Storyboard Player Utils
|
||||
# Various optional utils which tend to be pretty helpful.
|
||||
#
|
||||
|
||||
# Gets the player character's first name (or what should be the first name).
|
||||
storyboard_character_first_name:
|
||||
debug: false
|
||||
type: procedure
|
||||
definitions: player
|
||||
script:
|
||||
- determine <[player].flag[character_rpname].split.first.to_sentence_case.if_null[<<>?<>>]>
|
||||
|
||||
# Effectively like a permanent waituntil, except checks if player's online, etc.; if not, kills the queue.
|
||||
storyboard_waituntil_safe:
|
||||
debug: false
|
||||
type: task
|
||||
definitions: player|queue|condition
|
||||
script:
|
||||
- while true:
|
||||
- define condition_parsed <element[<<><[condition]><>>].parsed>
|
||||
- if <[condition_parsed]> || !<[player].is_online>:
|
||||
- while stop
|
||||
- wait 10t
|
||||
- if !<[player].is_online>:
|
||||
- queue stop <[queue]>
|
||||
- debug log "[Storyboard] Cancelled queue <[queue].numeric_id><&at><[queue].script.name> for <[player].name>; offline"
|
||||
Reference in New Issue
Block a user