From cc904c71374e5fa2d2a7040d272606c316509865 Mon Sep 17 00:00:00 2001 From: Rares Bozga Date: Thu, 25 Dec 2025 02:04:19 +0200 Subject: [PATCH] Integrate new settings into existing codebase --- scripts/automoney/automoney_world.dsc | 3 +- scripts/chat/chat_commands.dsc | 6 +- scripts/chat/chat_tasks.dsc | 125 +++++++++++++++--- scripts/chat/chat_world.dsc | 7 +- scripts/lib/textbox.dsc | 23 ++-- .../liteprofilesutils_world.dsc | 6 +- scripts/misc/compatibility_check.dsc | 2 + scripts/phones/phones_commands.dsc | 3 +- scripts/settings/settings_config.dsc | 9 +- scripts/settings/settings_tasks.dsc | 6 +- scripts/vehicles/vehicles_world.dsc | 3 +- 11 files changed, 150 insertions(+), 43 deletions(-) diff --git a/scripts/automoney/automoney_world.dsc b/scripts/automoney/automoney_world.dsc index c5df9a3..a4c2344 100644 --- a/scripts/automoney/automoney_world.dsc +++ b/scripts/automoney/automoney_world.dsc @@ -9,4 +9,5 @@ automoney_world: - if <[time_passed].is_more_than[]>: - flag <[player]> automoney_last: - money give players:<[player]> quantity:500 - - narrate format:formats_prefix targets:<[player]> "Thanks for being online! You have received ¥500." + - if |game_see_auto_money_announcements]>: + - narrate format:formats_prefix targets:<[player]> "Thanks for being online! You have received ¥500." diff --git a/scripts/chat/chat_commands.dsc b/scripts/chat/chat_commands.dsc index e8b2d1a..f4e3abb 100644 --- a/scripts/chat/chat_commands.dsc +++ b/scripts/chat/chat_commands.dsc @@ -378,14 +378,14 @@ chat_command_channelswitch: - define channel - choose <[channel]>: - case ic: - - flag chat_channel:ic + - run settings_set def.player: def.key:text_rp_chat_channel def.value:ic - narrate format:formats_prefix "Changed channel to IC." - stop - case ooc: - if : - narrate "<&c>You currently have OOC disabled. Use /ooc first to enable it." - stop - - flag chat_channel:ooc + - run settings_set def.player: def.key:text_rp_chat_channel def.value:oocz - narrate format:formats_prefix "Changed channel to OOC." - stop - narrate "<&c>Unknown channel <[channel]>. Please try: ic, ooc." @@ -414,5 +414,5 @@ chat_command_chatcolor: - if !]>: - narrate "<&c>You must choose a color from this list: " - stop - - flag chat_color:].hex>].parse_color> + - run settings_set def.player: def.key:text_rp_chat_color def.value:<[color]> - narrate format:formats_prefix "Changed chat color to ].hex>].parse_color><[color]>." diff --git a/scripts/chat/chat_tasks.dsc b/scripts/chat/chat_tasks.dsc index d1ca7dd..54c0d73 100644 --- a/scripts/chat/chat_tasks.dsc +++ b/scripts/chat/chat_tasks.dsc @@ -29,7 +29,8 @@ chat_channel_ooc: script: - define message <[message].strip_color.replace[&\].with[&].unescaped> - define final "<&8>[<&7><&l>OOC<&8>] ]>]><&7>: <&l><[message]>" - - narrate targets:]> <[final]> + - define targets ]> + - narrate targets:<[targets]> <[final]> - announce to_console <[final]> chat_channel_looc: @@ -39,7 +40,8 @@ chat_channel_looc: script: - define message <[message].strip_color.replace[&\].with[&].unescaped> - define final "<&8>[<&7>LOOC<&8>] ]><&7>]> ]><&7>: <[message]>" - - narrate targets:<[player].location.find_players_within[10]> <[final]> + - define targets <[player].location.find_players_within[10]> + - narrate targets:<[targets]> <[final]> - announce to_console <[final]> chat_allowed_colors: @@ -71,6 +73,40 @@ chat_tokenize_actions: - define index <[index].add[1]> - determine <[result].trim> +chat_channel_check_targets: + debug: false + type: task + script: + - if <[targets].size> <= 1: + - if |text_rp_chat_distance_warning]>: + - narrate "<&6>* <&7><&o>It seemed like nobody could hear you." targets:<[player]> + +chat_channel_check_targets_language: + debug: false + type: task + script: + - if <[all].size> <= 1: + - if |text_rp_chat_distance_warning]>: + - narrate "<&6>* <&7><&o>It seemed like nobody could hear you." targets:<[player]> + +chat_accessibility_space_message_inject_define: + debug: false + type: task + script: + - define space_targets <[targets].filter_tag[|accessibility_rp_chat_space_messages]>]> + +chat_accessibility_space_message_inject_define_language: + debug: false + type: task + script: + - define space_targets <[all].filter_tag[|accessibility_rp_chat_space_messages]>]> + +chat_accessibility_space_message_inject_apply: + debug: false + type: task + script: + - narrate targets:<[space_targets]> <&f> + chat_channel_ic: debug: false type: task @@ -84,9 +120,14 @@ chat_channel_ic: - stop - if !<[player].has_permission[chat.colors]>: - define message <[message].strip_color> - - define tokenized |]>says<&7>:|]>|<&f>|<&f><&dq><&f>|false].replace[&\].with[&].unescaped> + - define tokenized ||text_rp_chat_color]>].hex>].parse_color>says<&7>:||text_rp_chat_color]>].hex>].parse_color>|<&f>|<&f><&dq><&f>|false].replace[&\].with[&].unescaped> - define final "<&color[#b8b9ba]>]> <&f>]>]> ]> <[tokenized]>" - - narrate targets:<[player].location.find_players_within[10]> <[final]> + - define targets <[player].location.find_players_within[10]> + - inject chat_accessibility_space_message_inject_define + - inject chat_accessibility_space_message_inject_apply + - inject chat_channel_check_targets + - narrate targets:<[targets]> <[final]> + - inject chat_accessibility_space_message_inject_apply - announce to_console <[final]> chat_channel_ic_me: @@ -97,8 +138,13 @@ chat_channel_ic_me: - define message <[message].replace[&\].with[&].unescaped> - if !<[player].has_permission[chat.colors]>: - define message <[message].strip_color> - - define final "<&e>*** <&f>]> ]>]> ]> ]><&o><[message]>" - - narrate targets:<[player].location.find_players_within[10]> <[final]> + - define final "<&e>*** <&f>]> ]>]> ]> |text_rp_chat_color]>].hex>].parse_color><&o><[message]>" + - define targets <[player].location.find_players_within[10]> + - inject chat_accessibility_space_message_inject_define + - inject chat_accessibility_space_message_inject_apply + - inject chat_channel_check_targets + - narrate targets:<[targets]> <[final]> + - inject chat_accessibility_space_message_inject_apply - announce to_console <[final]> chat_channel_ic_mec: @@ -109,8 +155,13 @@ chat_channel_ic_mec: - define message <[message].replace[&\].with[&].unescaped> - if !<[player].has_permission[chat.colors]>: - define message <[message].strip_color> - - define final "<&e>* <&f>]> ]>]> ]> ]><&o><[message]>" - - narrate targets:<[player].location.find_players_within[3]> <[final]> + - define final "<&e>* <&f>]> ]>]> ]> |text_rp_chat_color]>].hex>].parse_color><&o><[message]>" + - define targets <[player].location.find_players_within[3]> + - inject chat_accessibility_space_message_inject_define + - inject chat_accessibility_space_message_inject_apply + - inject chat_channel_check_targets + - narrate targets:<[targets]> <[final]> + - inject chat_accessibility_space_message_inject_apply - announce to_console <[final]> chat_channel_ic_mel: @@ -121,8 +172,13 @@ chat_channel_ic_mel: - define message <[message].replace[&\].with[&].unescaped> - if !<[player].has_permission[chat.colors]>: - define message <[message].strip_color> - - define final "<&e>**** <&f>]> ]>]> ]> ]><&o><[message]>" - - narrate targets:<[player].location.find_players_within[25]> <[final]> + - define final "<&e>**** <&f>]> ]>]> ]> |text_rp_chat_color]>].hex>].parse_color><&o><[message]>" + - define targets <[player].location.find_players_within[25]> + - inject chat_accessibility_space_message_inject_define + - inject chat_accessibility_space_message_inject_apply + - inject chat_channel_check_targets + - narrate targets:<[targets]> <[final]> + - inject chat_accessibility_space_message_inject_apply - announce to_console <[final]> chat_channel_ic_whisper: @@ -140,7 +196,12 @@ chat_channel_ic_whisper: - define message <[message].strip_color> - define tokenized |whispers|<&8>|<&7>|<&6><&sq>|false].replace[&\].with[&].unescaped> - define final "<&color[#d1d1d1]>]> <&f>]>]> ]> <[tokenized]>" - - narrate targets:<[player].location.find_players_within[3]> <[final]> + - define targets <[player].location.find_players_within[3]> + - inject chat_accessibility_space_message_inject_define + - inject chat_accessibility_space_message_inject_apply + - inject chat_channel_check_targets + - narrate targets:<[targets]> <[final]> + - inject chat_accessibility_space_message_inject_apply - announce to_console <[final]> chat_channel_ic_yell: @@ -158,7 +219,11 @@ chat_channel_ic_yell: - define message <[message].strip_color> - define tokenized |yells|<&6>|<&f>|<&6><&sq>|true].replace[&\].with[&].unescaped> - define final "<&f>]> ]>]> ]> <[tokenized]>" - - narrate targets:<[player].location.find_players_within[25]> <[final]> + - define targets <[player].location.find_players_within[25]> + - inject chat_accessibility_space_message_inject_define + - inject chat_accessibility_space_message_inject_apply + - narrate targets:<[targets]> <[final]> + - inject chat_accessibility_space_message_inject_apply - announce to_console <[final]> chat_channel_ic_my: @@ -175,7 +240,11 @@ chat_channel_ic_my: - else: - define possession_name <[possession_name]><&sq>s - define final "<&e>*** <&f>]> ]>]> <[possession_name]> <&f><[message]>" - - narrate targets:<[player].location.find_players_within[10]> <[final]> + - define targets <[player].location.find_players_within[10]> + - inject chat_accessibility_space_message_inject_define + - inject chat_accessibility_space_message_inject_apply + - narrate targets:<[targets]> <[final]> + - inject chat_accessibility_space_message_inject_apply - announce to_console <[final]> chat_channel_ic_it: @@ -187,7 +256,11 @@ chat_channel_ic_it: - if !<[player].has_permission[chat.colors]>: - define message <[message].strip_color> - define final "<&6>*** <&e><[message]> <&7>(]>)" - - narrate targets:<[player].location.find_players_within[10]> <[final]> + - define targets <[player].location.find_players_within[10]> + - inject chat_accessibility_space_message_inject_define + - inject chat_accessibility_space_message_inject_apply + - narrate targets:<[targets]> <[final]> + - inject chat_accessibility_space_message_inject_apply - announce to_console <[final]> chat_channel_ic_itc: @@ -199,7 +272,11 @@ chat_channel_ic_itc: - if !<[player].has_permission[chat.colors]>: - define message <[message].strip_color> - define final "<&6>* <&e><[message]> <&7>(]>)" - - narrate targets:<[player].location.find_players_within[3]> <[final]> + - define targets <[player].location.find_players_within[3]> + - inject chat_accessibility_space_message_inject_define + - inject chat_accessibility_space_message_inject_apply + - narrate targets:<[targets]> <[final]> + - inject chat_accessibility_space_message_inject_apply - announce to_console <[final]> chat_channel_ic_itl: @@ -211,7 +288,11 @@ chat_channel_ic_itl: - if !<[player].has_permission[chat.colors]>: - define message <[message].strip_color> - define final "<&6>**** <&e><[message]> <&7>(]>)" - - narrate targets:<[player].location.find_players_within[25]> <[final]> + - define targets <[player].location.find_players_within[25]> + - inject chat_accessibility_space_message_inject_define + - inject chat_accessibility_space_message_inject_apply + - narrate targets:<[targets]> <[final]> + - inject chat_accessibility_space_message_inject_apply - announce to_console <[final]> chat_channel_ic_language: @@ -225,10 +306,14 @@ chat_channel_ic_language: - define final_known "<&6>[<&7>L<&6>] <&f>]> ]>]> ]> ]>says <&f><&dq><&o><[message]><&f><&dq> in <[language]>" - define final_unknown "<&6>[<&7>L<&6>] <&f>]> ]>]> ]> ]>says something in <[language]>" - define all <[player].location.find_players_within[10]> + - inject chat_accessibility_space_message_inject_define_language + - inject chat_accessibility_space_message_inject_apply + - inject chat_channel_check_targets_language - define speakers <[all].filter_tag[<[filter_value].flag[chat_languages].contains[<[language]>].if_null[false]>]> - define others <[all].exclude[<[speakers]>]> - narrate targets:<[speakers]> <[final_known]> - narrate targets:<[others]> <[final_unknown]> + - inject chat_accessibility_space_message_inject_apply - announce to_console <[final_known]> chat_channel_ic_languagewhisper: @@ -242,10 +327,14 @@ chat_channel_ic_languagewhisper: - define final_known "<&6>[<&7>L<&6>] <&f>]> ]>]> ]> <&f>whispers <&dq><&o><[message]><&f><&dq> in <[language]>" - define final_unknown "<&6>[<&7>L<&6>] <&f>]> ]>]> ]> <&f>whispers something in <[language]>" - define all <[player].location.find_players_within[3]> + - inject chat_accessibility_space_message_inject_define_language + - inject chat_accessibility_space_message_inject_apply + - inject chat_channel_check_targets_language - define speakers <[all].filter_tag[<[filter_value].flag[chat_languages].contains[<[language]>].if_null[false]>]> - define others <[all].exclude[<[speakers]>]> - narrate targets:<[speakers]> <[final_known]> - narrate targets:<[others]> <[final_unknown]> + - inject chat_accessibility_space_message_inject_apply - announce to_console <[final_known]> chat_channel_ic_languageyell: @@ -259,8 +348,12 @@ chat_channel_ic_languageyell: - define final_known "<&6>[<&7>L<&6>] <&f>]> ]>]> ]> <&f>yells <&dq><&o><[message].to_uppercase><&f><&dq> in <[language]>" - define final_unknown "<&6>[<&7>L<&6>] <&f>]> ]>]> ]> <&f>yells something in <[language]>" - define all <[player].location.find_players_within[25]> + - inject chat_accessibility_space_message_inject_define_language + - inject chat_accessibility_space_message_inject_apply + - inject chat_channel_check_targets_language - define speakers <[all].filter_tag[<[filter_value].flag[chat_languages].contains[<[language]>].if_null[false]>]> - define others <[all].exclude[<[speakers]>]> - narrate targets:<[speakers]> <[final_known]> - narrate targets:<[others]> <[final_unknown]> + - inject chat_accessibility_space_message_inject_apply - announce to_console <[final_known]> diff --git a/scripts/chat/chat_world.dsc b/scripts/chat/chat_world.dsc index 4c23dab..0518f7e 100644 --- a/scripts/chat/chat_world.dsc +++ b/scripts/chat/chat_world.dsc @@ -4,8 +4,13 @@ chat_world: events: on player chats: - determine cancelled passively - - define channel + - define channel |text_rp_chat_channel]> - if <[channel]> == ic: - run chat_channel_ic def.player: def.message: - else if <[channel]> == ooc: - run chat_channel_ooc def.player: def.message: + on player receives message: + ## yes, we will sync the chat thread and live dangerously + # manual settings_get because this event is very finnicky and dangerous + - if : + - determine MESSAGE: diff --git a/scripts/lib/textbox.dsc b/scripts/lib/textbox.dsc index 8612fbd..2b47816 100644 --- a/scripts/lib/textbox.dsc +++ b/scripts/lib/textbox.dsc @@ -44,6 +44,7 @@ textbox_write: - bossbar create textbox_<[player].uuid>_2 players:<[player]> title: - bossbar create textbox_<[player].uuid>_3 players:<[player]> title: - wait 1t + - define write_speed |text_textbox_write_speed].if_null[1]> - if <[avatar_unicode]> != null: - bossbar create textbox_<[player].uuid>_avatar players:<[player]> title:<[avatar_unicode]> - foreach <[lines]> as:line: @@ -58,20 +59,20 @@ textbox_write: - stop - bossbar update textbox_<[player].uuid>_<[loop_index]> title:<[line].substring[1,<[value]>]> - if <[value].sub[1].mod[3]> == 0: - - playsound sound:textbox.text <[player]> custom pitch: - - wait 1t + - playsound sound:textbox.text <[player]> custom pitch: volume:|sound_textbox_volume].div[100].if_null[1]> + - wait <[write_speed]>t - if <[line].substring[<[value].add[1]>,<[value].add[1]>].trim.length.if_null[1]> == 0: - if <[line].substring[<[value]>,<[value]>]> == .: - - wait 2t + - wait <[write_speed].add[1]>t - if <[line].substring[<[value]>,<[value]>]> == !: - - wait 2t + - wait <[write_speed].add[1]>t - if <[line].substring[<[value]>,<[value]>]> == ?: - - wait 2t + - wait <[write_speed].add[1]>t - if <[line].substring[<[value]>,<[value]>]> == -: - - wait 2t + - wait <[write_speed].add[1]>t - if <[line].substring[<[value]>,<[value]>]> == ,: - - wait 2t - - wait + - wait <[write_speed].add[1]>t + - wait t]> - if <[player].flag[textbox_state].if_null[null]> != writing: - if <[queue].if_null[null]> != null && <[player].flag[textbox_state].if_null[null]> != continue: - debug log "[Textbox] Write; cancelled queue <[queue].numeric_id><&at><[queue].script.name> for <[player].name>; state mismatch." @@ -207,12 +208,12 @@ textbox_handle_click: - ratelimit 5t - else if <[state]> == continue: - determine cancelled passively - - playsound sound:textbox.close custom + - playsound sound:textbox.close custom volume:|sound_textbox_volume].div[100].if_null[1]> - ~run textbox_flush def.player: - ratelimit 10t - else if <[state]> == choice: - determine cancelled passively - - playsound sound:input.ok custom + - playsound sound:input.ok custom volume:|sound_textbox_volume].div[100].if_null[1]> - flag textbox_choice_select: - ~run textbox_flush def.player: - ratelimit 10t @@ -314,4 +315,4 @@ textbox_internal_choice_select: - if <[bottom]> != <&0><&l>null: - bossbar update textbox_<[player].uuid>_bottom title:<[bottom]> - flag <[player]> textbox_choices:].with[current].as[<[choice_dir]>]> - - playsound BLOCK_NOTE_BLOCK_BIT <[player]> pitch:2 + - playsound BLOCK_NOTE_BLOCK_BIT <[player]> pitch:2 volume:|sound_textbox_volume].div[100].if_null[1]> diff --git a/scripts/liteprofilesutils/liteprofilesutils_world.dsc b/scripts/liteprofilesutils/liteprofilesutils_world.dsc index be7d75d..bd2271e 100644 --- a/scripts/liteprofilesutils/liteprofilesutils_world.dsc +++ b/scripts/liteprofilesutils/liteprofilesutils_world.dsc @@ -16,7 +16,8 @@ liteprofilesutils_world: - flag server liteprofilesutils_lastbestlimit:<[lastbestlimit].with[<[masteruuid]>].as[<[profilelimit].max[<[lastbestlimit].get[<[masteruuid]>].if_null[1]>]>]> # - define joinleavedata - - announce <[joinleavedata].get[leave].parsed> + - define setting_enabled_players |general_see_player_join_leave]>]> + - narrate <[joinleavedata].get[leave].parsed> targets:<[setting_enabled_players]> on player joins: - define masteruuid ]> # sync groups, O(scary) @@ -61,7 +62,8 @@ liteprofilesutils_world: - if ].contains[]>: - announce <[joinleavedata].get[welcome].parsed> - flag server liteprofilesutils_welcome:].include[]> - - announce <[joinleavedata].get[join].parsed> + - define setting_enabled_players |general_see_player_join_leave]>]> + - narrate <[joinleavedata].get[join].parsed> targets:<[setting_enabled_players]> ## prevent /profile remove on command: - if == profile || == account || == pf: diff --git a/scripts/misc/compatibility_check.dsc b/scripts/misc/compatibility_check.dsc index eb1ea3e..92515da 100644 --- a/scripts/misc/compatibility_check.dsc +++ b/scripts/misc/compatibility_check.dsc @@ -20,6 +20,8 @@ compatibility_check_world: type: world events: after player joins: + - if !|general_ignore_version_compatibility_check]>: + - stop - define player_version - define server_version - if |<[server_version]>]> == -1: diff --git a/scripts/phones/phones_commands.dsc b/scripts/phones/phones_commands.dsc index 52ca6c2..e6014a0 100644 --- a/scripts/phones/phones_commands.dsc +++ b/scripts/phones/phones_commands.dsc @@ -83,7 +83,8 @@ phones_commands_phonecall: # # before accepted - if !<[target].has_flag[phones_is_maybe_called]>: - - nbs file:data/phones/songs/<[target].flag[phones].get[ringtone].if_null[Bad Apple]> play targets:<[target]> + - if !|game_disable_phone_ringtone]>: + - nbs file:data/phones/songs/<[target].flag[phones].get[ringtone].if_null[Bad Apple]> play targets:<[target]> - narrate targets:<[target]> "<&6>*** <&e>You're being called by <&e><[relative]><&7>." - narrate targets:<[target]> <&hover[<&a>Click to accept call from <[relative]>...]><&l>[ ACCEPT ]].on_click[]><&end_hover> # wait... diff --git a/scripts/settings/settings_config.dsc b/scripts/settings/settings_config.dsc index 1d3d1d8..3bd5f3b 100644 --- a/scripts/settings/settings_config.dsc +++ b/scripts/settings/settings_config.dsc @@ -86,7 +86,7 @@ settings_config: name: Textbox volume description: Changes the volume when the textbox is writing. type: number - default: 80 + default: 50 min: 0 max: 100 increment: 5 @@ -98,11 +98,12 @@ settings_config: default: 50 min: 0 max: 100 + increment: 5 ## - accessibility_rp_chat_disable_colors: + accessibility_chat_disable_colors: tab: Accessibility - name: Disable colors in chat channels - description: If enabled, hides all colors in chat channels, instead using plain white. + name: Disable colors in chat + description: If enabled, hides all colors in chat, instead using plain white. type: boolean default: false accessibility_rp_chat_space_messages: diff --git a/scripts/settings/settings_tasks.dsc b/scripts/settings/settings_tasks.dsc index e1be9fb..aea5d98 100644 --- a/scripts/settings/settings_tasks.dsc +++ b/scripts/settings/settings_tasks.dsc @@ -98,7 +98,7 @@ settings_menu_set_text_callback: - define error - if <[error]> != null: - narrate targets:<[player]> <&c><[error]> - - wait 1t + - wait 4t - run settings_menu def.player:<[player]> def.tab:<[temp_state].get[tab]> def.page:<[temp_state].get[page]> settings_menu_set_text_helper: @@ -166,7 +166,7 @@ settings_menu_render_tabs: type: task script: - foreach <[tabs]> as:t: - - define tab_button <[t]>]]> + - define tab_button ]>].pass[enchanted_book].fail[book]>[display=<&b><[t]>]]> - definemap content_entry_value: item: <[tab_button]> script: settings_menu @@ -182,7 +182,7 @@ settings_menu_render_settings: type: task script: - foreach |<[page]>]> as:setting_key: - - define setting_item <[keys].get[<[setting_key]>].get[name]>;lore=<[keys].get[<[setting_key]>].get[description].split_lines_by_width[128].split[<&nl>].parse_tag[<&7><[parse_value]>]>]]> + - define setting_item <[keys].get[<[setting_key]>].get[name]>;lore=<[keys].get[<[setting_key]>].get[description].split_lines_by_width[<[keys].get[<[setting_key]>].get[name].text_width>].split[<&nl>].parse_tag[<&7><[parse_value]>]>]]> - definemap content_entry_value: item: <[setting_item]> - define position <[loop_index].mul[9].add[1]> diff --git a/scripts/vehicles/vehicles_world.dsc b/scripts/vehicles/vehicles_world.dsc index 5864677..2b9b8b0 100644 --- a/scripts/vehicles/vehicles_world.dsc +++ b/scripts/vehicles/vehicles_world.dsc @@ -156,7 +156,8 @@ vehicle_world_parallel_loop: - teleport <[vehicle]> <[new_location]> cause:plugin offthread_repeat:8 - flag <[vehicle]> vehicles_speed:<[speed]> - if <[vehicle].flag[vehicles_data].get[driver_entity].has_passenger>: - - playsound <[new_location]> custom sound:vehicle.engine pitch:]> + - foreach <[vehicle].location.find_players_within[15]> as:listener: + - playsound <[new_location]> <[listener]> custom sound:vehicle.engine pitch:]> volume:|sound_vehicles_volume].div[200]> - if <[vehicle].flag[vehicles_last_location]> == <[new_location]>: - stop - define driver_entity <[vehicle].flag[vehicles_data].get[driver_entity]> -- 2.49.1