Files
denizen-scripts/scripts/phones/phones_world.dsc
2025-11-29 22:53:32 +02:00

186 lines
9.1 KiB
Plaintext

phones_world:
debug: false
type: world
events:
## assign new random number & handle notifications
after player joins:
- run phones_notify_text_messages def.player:<player> def.delayseconds:5
#
- if <player.has_flag[phones]>:
- stop
- define number <util.random.int[1000000].to[9999999]>
- while <server.flag[phones].if_null[<map[]>].contains[377<[number]>]>:
- define number <util.random.int[1000000].to[9999999]>
- define number 377<[number]>
- flag <player> phones:<map[].with[number].as[<[number]>]>
- flag server phones:<server.flag[phones].if_null[<map[]>].with[<[number]>].as[<player>]>
## phone drop, phone unequip, player logs off etc.
on player drops item:
- if <player.has_flag[phones_chat_input]>:
- if <context.item.has_flag[phones].if_null[false]>:
- determine cancelled
- if <context.item.has_flag[phones].if_null[false]>:
- nbs stop targets:<player>
- inject phones_inject_end_call
on player scrolls their hotbar:
- if <player.inventory.slot[<context.previous_slot>].has_flag[phones]>:
- inject phones_inject_end_call
on player quits:
- inject phones_inject_end_call
after player clicks in inventory:
- if !<player.item_in_hand.flag[phones].if_null[false]>:
- inject phones_inject_end_call
## boot up/down phone
on player left clicks block:
- if !<player.item_in_hand.has_flag[phones].if_null[false]>:
- stop
- if <player.open_inventory> != <player.inventory>:
- stop
- determine cancelled passively
- if <player.has_flag[phones_chat_input]>:
- flag <player> phones_chat_input:!
- define state <player.item_in_hand.flag[phones].not>
- inventory flag slot:hand phones:<[state]>
- if <[state]>:
- narrate format:formats_prefix "Powered <&a>on <&7>your phone."
#
- run phones_notify_text_messages def.player:<player> def.delayseconds:2
- else:
- narrate format:formats_prefix "Powered <&c>off <&7>your phone."
- nbs stop targets:<player>
- inject phones_inject_end_call
## phone GUI
on player right clicks block:
- if !<player.item_in_hand.has_flag[phones].if_null[false]>:
- stop
- determine cancelled passively
- if <player.has_flag[phones_call]>:
- narrate "<&c>You are currently in the middle of a call (stop holding the phone to end the call)."
- stop
- if <player.has_flag[phones_chat_input]>:
- flag <player> phones_chat_input:!
- if !<player.item_in_hand.flag[phones]>:
- narrate "<&c>Please turn on your phone (left click) to view the home screen."
- stop
- run phones_gui_home def.player:<player>
# used in ending a call because code repeats a lot
phones_inject_end_call:
debug: false
type: task
script:
- if <player.has_flag[phones_is_maybe_called]>:
- flag <player> phones_is_maybe_called:!
- nbs stop
- if !<player.has_flag[phones_call]>:
- stop
- define callwho <player.flag[phones_call]>
- define iswaiting <player.has_flag[phones_call_clickable]>
- flag <player> phones_call:!
- if <[iswaiting]>:
- clickable cancel:<player.flag[phones_call_clickable]>
- flag <player> phones_call_clickable:!
- if <[callwho].flag[phones_call].if_null[null]> == <player>:
- narrate targets:<[callwho]> format:formats_prefix "Call was ended by the other side."
- flag <[callwho]> phones_call:!
- else:
- nbs stop targets:<[callwho]>
- narrate targets:<[callwho]> format:formats_prefix "The person on the other side hung up before you answered."
- narrate format:formats_prefix "You ended the call."
## only gui handling
phones_world_gui:
debug: false
type: world
events:
on player clicks in inventory:
- if !<context.inventory.title.contains[鄀]>:
- stop
- determine cancelled passively
- if <context.slot> > <context.inventory.size>:
- stop
- define title <context.inventory.title.substring[8]>
# Home Page
- if <[title]> == <&0>邒:
- if <context.slot> == 13:
- run phones_gui_settings def.player:<player>
- if <context.slot> == 14:
- inventory close
- run phones_contacts_print def.player:<player> def.page:0
- else if <context.slot> == 15:
- flag <player> phones_gui_page:0
- run phones_gui_texts def.player:<player> def.page:0
- else if <context.slot> == 22:
- flag <player> phones_gui_page:0
- run phones_gui_music def.player:<player> def.page:0 def.ringtone:false
- else if <[title]> == <&1>邒:
- if <context.item.material.name> == ender_pearl:
- define page <player.flag[phones_gui_page].sub_int[1]>
- flag <player> phones_gui_page:<[page]>
- run phones_gui_texts def.player:<player> def.page:<[page]>
- else if <context.item.material.name> == ender_eye:
- define page <player.flag[phones_gui_page].add_int[1]>
- flag <player> phones_gui_page:<[page]>
- run phones_gui_texts def.player:<player> def.page:<[page]>
- else if <context.slot> == 50:
- run phones_gui_home def.player:<player>
- else if <context.item.material.name> == player_head:
- inventory close
- run phones_texts_print def.player:<player> def.target:<context.item.flag[phones]> def.page:0
# Music
- else if <[title]> == <&2>邒:
- if <context.item.material.name> == ender_pearl:
- define page <player.flag[phones_gui_page].sub_int[1]>
- flag <player> phones_gui_page:<[page]>
- run phones_gui_music def.player:<player> def.page:<[page]> def.ringtone:false
- else if <context.item.material.name> == ender_eye:
- define page <player.flag[phones_gui_page].add_int[1]>
- flag <player> phones_gui_page:<[page]>
- run phones_gui_music def.player:<player> def.page:<[page]> def.ringtone:false
- else if <context.slot> == 50:
- run phones_gui_home def.player:<player>
- else if <context.slot> == 42:
- inventory close
- run phones_music_stop def.player:<player>
- else if <context.item.material.name> == jukebox:
- inventory close
- run phones_music_play def.player:<player> def.songfile:<context.item.flag[phones]>
# Settings
- else if <[title]> == <&3>邒:
- if <context.slot> == 4:
- flag <player> phones_gui_page:0
- run phones_gui_music def.player:<player> def.page:0 def.ringtone:true
- if <context.slot> == 5:
- flag <player> phones_gui_page:0
- run phones_gui_settings_blocked def.player:<player> def.page:0
- else if <context.slot> == 50:
- run phones_gui_home def.player:<player>
# Ringtone Select
- else if <[title]> == <&4>邒:
- if <context.item.material.name> == ender_pearl:
- define page <player.flag[phones_gui_page].sub_int[1]>
- flag <player> phones_gui_page:<[page]>
- run phones_gui_music def.player:<player> def.page:<[page]> def.ringtone:true
- else if <context.item.material.name> == ender_eye:
- define page <player.flag[phones_gui_page].add_int[1]>
- flag <player> phones_gui_page:<[page]>
- run phones_gui_music def.player:<player> def.page:<[page]> def.ringtone:true
- else if <context.slot> == 50:
- run phones_gui_settings def.player:<player>
- else if <context.item.material.name> == jukebox:
- flag <player> phones:<player.flag[phones].with[ringtone].as[<context.item.flag[phones]>]>
- run phones_gui_settings def.player:<player>
- narrate format:formats_prefix "Changed your ringtone to <&e><context.item.display.strip_color><&7>."
# Blocked
- else if <[title]> == <&5>邒:
- if <context.item.material.name> == ender_pearl:
- define page <player.flag[phones_gui_page].sub_int[1]>
- flag <player> phones_gui_page:<[page]>
- run phones_gui_settings_blocked def.player:<player> def.page:<[page]>
- else if <context.item.material.name> == ender_eye:
- define page <player.flag[phones_gui_page].add_int[1]>
- flag <player> phones_gui_page:<[page]>
- run phones_gui_settings_blocked def.player:<player> def.page:<[page]>
- else if <context.slot> == 50:
- run phones_gui_settings def.player:<player>