Added atomic handling for storyboard operations and fixed various bugs #4

Merged
bqkitcat merged 2 commits from feature-storyboard-atomic into main 2026-01-09 12:25:07 +01:00
5 changed files with 39 additions and 24 deletions
Showing only changes of commit 01a4e7414c - Show all commits

View File

@@ -35,7 +35,7 @@ textbox_write:
- queue stop <[queue]> - queue stop <[queue]>
- run textbox_flush def.player:<[player]> - run textbox_flush def.player:<[player]>
- stop - stop
- define lines <[line3s].split[$$nl].parse_tag[<[parse_value].trim>]> - define lines <[line3s].split[$$nl].parse_tag[<[parse_value].trim.replace[<&0>].with[<&6>]>]>
- flag <[player]> textbox_state:writing - flag <[player]> textbox_state:writing
- flag <[player]> textbox_input:<[lines]> - flag <[player]> textbox_input:<[lines]>
- flag <[player]> textbox_lines:<[lines].size> - flag <[player]> textbox_lines:<[lines].size>
@@ -57,7 +57,7 @@ textbox_write:
- stop - stop
- if !<[player].is_online>: - if !<[player].is_online>:
- stop - stop
- bossbar update textbox_<[player].uuid>_<[loop_index]> title:<black><bold><[line].substring[1,<[value]>]> - bossbar update textbox_<[player].uuid>_<[loop_index]> title:<&6><&l><[line].substring[1,<[value]>]>
- if <[value].sub[1].mod[3]> == 0: - if <[value].sub[1].mod[3]> == 0:
- playsound sound:textbox.text <[player]> custom pitch:<util.random.decimal[0.98].to[1]> volume:<proc[settings_get].context[<[player]>|sound_textbox_volume].div[100].if_null[1]> - playsound sound:textbox.text <[player]> custom pitch:<util.random.decimal[0.98].to[1]> volume:<proc[settings_get].context[<[player]>|sound_textbox_volume].div[100].if_null[1]>
- wait <[write_speed]>t - wait <[write_speed]>t
@@ -100,7 +100,7 @@ textbox_skip:
- bossbar create textbox_<[player].uuid>_<[value]> players:<[player]> title:<empty> - bossbar create textbox_<[player].uuid>_<[value]> players:<[player]> title:<empty>
- define lines <[player].flag[textbox_input]> - define lines <[player].flag[textbox_input]>
- foreach <[lines]> as:line: - foreach <[lines]> as:line:
- bossbar update textbox_<[player].uuid>_<[loop_index]> title:<black><bold><[line]> - bossbar update textbox_<[player].uuid>_<[loop_index]> title:<&6><&l><[line]>
- flag <[player]> textbox_state:continue - flag <[player]> textbox_state:continue
# Clears textbox and flushes all flag memory values # Clears textbox and flushes all flag memory values
@@ -208,12 +208,12 @@ textbox_handle_click:
- ratelimit <player> 5t - ratelimit <player> 5t
- else if <[state]> == continue: - else if <[state]> == continue:
- determine cancelled passively - determine cancelled passively
- playsound sound:textbox.close <player> custom volume:<proc[settings_get].context[<[player]>|sound_textbox_volume].div[100].if_null[1]> - playsound sound:textbox.close <player> custom volume:<proc[settings_get].context[<player>|sound_textbox_volume].div[100].if_null[1]>
- ~run textbox_flush def.player:<player> - ~run textbox_flush def.player:<player>
- ratelimit <player> 10t - ratelimit <player> 10t
- else if <[state]> == choice: - else if <[state]> == choice:
- determine cancelled passively - determine cancelled passively
- playsound sound:input.ok <player> custom volume:<proc[settings_get].context[<[player]>|sound_textbox_volume].div[100].if_null[1]> - playsound sound:input.ok <player> custom volume:<proc[settings_get].context[<player>|sound_textbox_volume].div[100].if_null[1]>
- flag <player> textbox_choice_select:<player.flag[textbox_choices].get[current]> - flag <player> textbox_choice_select:<player.flag[textbox_choices].get[current]>
- ~run textbox_flush def.player:<player> - ~run textbox_flush def.player:<player>
- ratelimit <player> 10t - ratelimit <player> 10t
@@ -250,7 +250,13 @@ textbox_choice:
- teleport <[player]> <[player].location.below.above.with_y[<[player].location.below.above.y.round_down>]> - teleport <[player]> <[player].location.below.above.with_y[<[player].location.below.above.y.round_down>]>
- else: - else:
- stop - stop
- waituntil <[player].flag[textbox_state].if_null[null]> == null - waituntil <[player].flag[textbox_state].if_null[null]> == null || !<[player].is_online>
- if !<[player].is_online>:
- if <[queue].if_null[null]> != null:
- debug log "[Textbox] Choice; cancelled queue <[queue].numeric_id><&at><[queue].script.name> for <[player].name>; offline"
- queue stop <[queue]>
- run textbox_flush def.player:<[player]>
- stop
- ~run textbox_flush def.player:<[player]> - ~run textbox_flush def.player:<[player]>
- flag <[player]> textbox_state:choice - flag <[player]> textbox_state:choice
- flag <[player]> textbox_choices:<map[].with[data].as[<[choices]>].with[current].as[left]> - flag <[player]> textbox_choices:<map[].with[data].as[<[choices]>].with[current].as[left]>
@@ -284,35 +290,35 @@ textbox_internal_choice_select:
- bossbar create textbox_<[player].uuid>_bottom players:<[player]> title:<empty> - bossbar create textbox_<[player].uuid>_bottom players:<[player]> title:<empty>
- define choices <[player].flag[textbox_choices].get[data]> - define choices <[player].flag[textbox_choices].get[data]>
# #
- define left <&0><&l><[choices].get[left].get[text].if_null[null]> - define left <&6><&l><[choices].get[left].get[text].if_null[null]>
- define right <&0><&l><[choices].get[right].get[text].if_null[null]> - define right <&6><&l><[choices].get[right].get[text].if_null[null]>
- define top <&0><&l><[choices].get[top].get[text].if_null[null]> - define top <&6><&l><[choices].get[top].get[text].if_null[null]>
- define bottom <&0><&l><[choices].get[bottom].get[text].if_null[null]> - define bottom <&6><&l><[choices].get[bottom].get[text].if_null[null]>
# #
- if <[choice_dir]> == left: - if <[choice_dir]> == left:
- if <[left]> == <&0><&l>null: - if <[left]> == <&6><&l>null:
- stop - stop
- define left "<&4>❤ <&0><&l><[left]>" - define left "<&4>❤ <&6><&l><[left]>"
- else if <[choice_dir]> == right: - else if <[choice_dir]> == right:
- if <[right]> == <&0><&l>null: - if <[right]> == <&6><&l>null:
- stop - stop
- define right "<&4>❤ <&0><&l><[right]>" - define right "<&4>❤ <&6><&l><[right]>"
- else if <[choice_dir]> == top: - else if <[choice_dir]> == top:
- if <[top]> == <&0><&l>null: - if <[top]> == <&6><&l>null:
- stop - stop
- define top "<&4>❤ <&0><&l><[top]>" - define top "<&4>❤ <&6><&l><[top]>"
- else: - else:
- if <[bottom]> == <&0><&l>null: - if <[bottom]> == <&6><&l>null:
- stop - stop
- define bottom "<&4>❤ <&0><&l><[bottom]>" - define bottom "<&4>❤ <&6><&l><[bottom]>"
# #
- define mid_padding <element[<&sp>].repeat[<element[30].sub[<[left].strip_color.length>].sub[<[right].strip_color.length>]>]> - define mid_padding <element[<&sp>].repeat[<element[30].sub[<[left].strip_color.length>].sub[<[right].strip_color.length>]>]>
# #
- if <[top]> != <&0><&l>null: - if <[top]> != <&6><&l>null:
- bossbar update textbox_<[player].uuid>_top title:<[top]> - bossbar update textbox_<[player].uuid>_top title:<[top]>
- if <[left]> != <&0><&l>null || <[right]> != <&0><&l>null: - if <[left]> != <&6><&l>null || <[right]> != <&6><&l>null:
- bossbar update textbox_<[player].uuid>_mid title:<[left]><[mid_padding]><[right]> - bossbar update textbox_<[player].uuid>_mid title:<[left]><[mid_padding]><[right]>
- if <[bottom]> != <&0><&l>null: - if <[bottom]> != <&6><&l>null:
- bossbar update textbox_<[player].uuid>_bottom title:<[bottom]> - bossbar update textbox_<[player].uuid>_bottom title:<[bottom]>
- flag <[player]> textbox_choices:<map[].with[data].as[<[choices]>].with[current].as[<[choice_dir]>]> - flag <[player]> textbox_choices:<map[].with[data].as[<[choices]>].with[current].as[<[choice_dir]>]>
- playsound BLOCK_NOTE_BLOCK_BIT <[player]> pitch:2 volume:<proc[settings_get].context[<[player]>|sound_textbox_volume].div[100].if_null[1]> - playsound BLOCK_NOTE_BLOCK_BIT <[player]> pitch:2 volume:<proc[settings_get].context[<[player]>|sound_textbox_volume].div[100].if_null[1]>

View File

@@ -22,7 +22,7 @@ compatibility_check_world:
after player joins: after player joins:
- if <proc[settings_get].context[<player>|general_ignore_version_compatibility_check]>: - if <proc[settings_get].context[<player>|general_ignore_version_compatibility_check]>:
- stop - stop
- define player_version <player.viaversion_version.split[-].get[1]> - define player_version <player.viaversion_version.split[-].get[2]>
- define server_version <server.version.split[(].get[2].split[:].get[2].split[)].get[1].trim> - define server_version <server.version.split[(].get[2].split[:].get[2].split[)].get[1].trim>
- if <proc[compatibility_check_compare_versions].context[<[player_version]>|<[server_version]>]> == -1: - if <proc[compatibility_check_compare_versions].context[<[player_version]>|<[server_version]>]> == -1:
- wait 5s - wait 5s

View File

@@ -78,6 +78,11 @@ intro_interact_laptop_task_name_callback:
script: script:
- define __player <[player]> - define __player <[player]>
- define name <[input].substring[1,24]> - define name <[input].substring[1,24]>
- if <server.flag[character_rpnames].contains[<[name]>]>:
- narrate targets:<[player]> "<&c>That RP name is already taken. Try a different one!"
- wait 1s
- run anvil_input def.player:<player> "def.prompt:Character Name" def.callback:intro_interact_laptop_task_name_callback
- stop
- execute as_player player:<[player]> "rpname <[name]>" - 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:<[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:How nice!"

View File

@@ -72,7 +72,6 @@ storyboard_player_begin_atomic_sequence:
type: task type: task
definitions: queue|player definitions: queue|player
script: script:
- announce to_ops <[queue].script.name>
- if <[player].flag[storyboard_atomic].if_null[<map[]>].contains[<[queue].script.name>]>: - if <[player].flag[storyboard_atomic].if_null[<map[]>].contains[<[queue].script.name>]>:
- queue <[queue]> stop - queue <[queue]> stop
- stop - stop
@@ -88,6 +87,8 @@ storyboard_player_end_atomic_sequence:
- if !<[player].flag[storyboard_atomic].if_null[<map[]>].contains[<[queue].script.name>]>: - if !<[player].flag[storyboard_atomic].if_null[<map[]>].contains[<[queue].script.name>]>:
- debug error "Tried ending storyboard atomic sequence <[queue].script.name> before storyboard_player_begin_atomic_sequence was called! (Player UUID <[player].uuid>)" - debug error "Tried ending storyboard atomic sequence <[queue].script.name> before storyboard_player_begin_atomic_sequence was called! (Player UUID <[player].uuid>)"
- stop - stop
- waituntil !<player.has_flag[textbox_state]>
- wait 5t
- flag <[player]> storyboard_atomic:<[player].flag[storyboard_atomic].if_null[<map[]>].exclude[<[queue].script.name>]> - flag <[player]> storyboard_atomic:<[player].flag[storyboard_atomic].if_null[<map[]>].exclude[<[queue].script.name>]>
## Internal only! ## Internal only!

View File

@@ -4,7 +4,10 @@ tabcomplete_config:
groups: groups:
default: default:
commands: commands:
# please keep these here...
- plugins - plugins
- denizenclickable
# anything else
- sit - sit
- lay - lay
- crawl - crawl