Paste #65949: Untitled Paste

Date: 2020/03/06 20:24:34 UTC-08:00
Type: Denizen Script

View Raw Paste Download This Paste
Copy Link


top_balance_sign_cmd:
    type: command
    debug: false
    name: topbalancesign
    description: Makes a sign display the user with the highest balance (money).
    usage: /topbalancesign (help #|set #|remove|update|list|togglenick)
    aliases:
    - tbs
    - topbalsign
    allowed help:
    - determine <player.is_op||<player.has_permission[topbalancesign.use]||<context.server>>>
    tab complete:
    - if <player.is_op||<player.has_permission[topbalancesign.use]||<context.server>>>
    {
        - define argList li@help|set|remove|update|list|togglenick
        - if <context.args.size> == 0
        {
            - determine <def[argList]>
        }
        else if <context.args.size> == 1 && !<li@set|remove.contains[<context.args.get[1]>]>
        {
            - determine <def[argList].filter[starts_with[<context.args.get[1]>]]>
        }
    }
    script:
    - if <context.server>
    {
        - narrate '<&c>You must use this command in-game!' 'format:top_balance_sign_format'
        - queue clear
    }
    - if !<player.is_op||<player.has_permission[topbalancesign.use]>>
    {
        - queue clear
    }
    - if !<li@wall_sign|sign_post_sign|sign_post_sign|sign_post_sign|sign_post.contains[<player.location.cursor_on[5].material.name>]> && !<li@help|update|list|togglenick.contains[<context.args.get[1]||null>]>
    {
        - narrate '<&c>You must be looking at a sign to run this command!' 'format:top_balance_sign_format'
        - queue clear
    }
    - if <context.args.size> > 1 && <li@help|update|list|togglenick.contains[<context.args.get[1]||null>]>
    {
        - narrate '<&c>Too many arguments!' 'format:top_balance_sign_format'
        - queue clear
    }
    else if <context.args.size> > 2 && !<li@help|update|list|togglenick.contains[<context.args.get[1]||null>]>
    {
        - narrate '<&c>Too many arguments!' 'format:top_balance_sign_format'
        - queue clear
    }
    - define loc_display <player.location.cursor_on[5].simple>
    - run top_balance_sign_task 'def:true|<context.args.get[1]>|<def[loc_display]>|<context.args.get[2]||null>' 'player:<player>'

top_balance_sign_task:
    type: task
    debug: false
    speed: 0
    definitions: rfc|act|loc|page
    script:
    - choose '<def[act]>':
        - case 'help':
            - narrate '<&6><&l>TopBalanceSign Help<&r><&nl><&e>/topbalancesign help<&7><&co> Displays this help page.<&r><&nl><&e>/topbalancesign set #<&7><&co> Sets a sign to display the #th highest balance.<&r><&nl><&e>/topbalancesign remove<&7><&co> Removes a TopBalanceSign.<&r><&nl><&e>/topbalancesign update<&7><&co> Updates all TopBalanceSigns.<&r><&nl><&e>/topbalancesign list #<&7><&co> Lists current TopBalanceSigns.<&r><&nl><&e>/topbalancesign togglenick<&7><&co> Toggles whether to display nicknames or usernames.'
        - case 'remove':
            - define loc_retrieve <server.flag[top_balance_sign.locations].as_list.map_get[<def[loc]>]||null>
            - if <server.flag[top_balance_sign.locations].as_list.contains[<def[loc]>/<def[loc_retrieve]>]>
            {
                - flag server 'top_balance_sign.locations:<-:<def[loc]>/<def[loc_retrieve]>'
                - if <def[rfc]>
                {
                    - narrate '<&a>Removed TopBalanceSign sign at <def[loc]>!' 'format:top_balance_sign_format'
                    - sign '|||' <def[loc]>
                }
            }
            - queue clear
        - case 'update':
            - if <server.flag[top_balance_sign.locations].as_list.size||0> == 0
            {
                - if <def[rfc]>
                {
                    - narrate '<&c>There are no TopBalanceSigns!' 'format:top_balance_sign_format'
                }
                - queue clear
            }
            - if <server.flag[top_balance_sign.toggle_nick]||false>
            {
                - define name_type name.display
            }
            else
            {
                - define name_type name
            }
            - foreach <server.flag[top_balance_sign.locations].as_list>
            {
                - define tb_player <server.list_players.sort_by_number[money].reverse.get[<def[value].split[/].get[2]>]>
                - sign '<&6><&l>[Top Balance]<&r>|<&e>= #<def[value].split[/].get[2]> <&e>=<&r>|<&a><def[tb_player].%name_type%><&r>|<&2>Right click to see balance!<&r>' '<def[value].split[/].get[1]>'
            }
            - if <def[rfc]>
            {
                - narrate '<&a>Updated all TopBalanceSigns!' 'format:top_balance_sign_format'
            }
        - case 'list':
            - define disp_list <server.flag[top_balance_sign.locations].as_list.get_sub_items[1]>
            - if <server.flag[top_balance_sign.locations].as_list.size||0> == 0
            {
                - narrate '<&c>There are no TopBalanceSigns!' 'format:top_balance_sign_format'
                - queue clear
            }
            - if <def[page].as_decimal||null> == null
            {
                - define page 1
            }
            else if <def[page].mod[1]> != 0 || <def[page]> <= 0
            {
                - define page 1
            }
            - define disp_list <def[disp_list].get[<def[page].mul[10].sub[9]>].to[<def[page].mul[10]>]||null>
            - if <def[disp_list]> == null
            {
                - define page 1
                - define disp_list <server.flag[top_balance_sign.locations].as_list.get_sub_items[1].get[1].to[10]>
            }
            - narrate '<&e>== <&6><&l>List of TopBalanceSigns (<def[page]>/<server.flag[top_balance_sign.locations].as_list.get_sub_items[1].size.div[10].round_up>)<&r> <&e>==<&r><&nl>- <def[disp_list].separated_by[<&nl>- ]><&nl><&7>To see more locations, use /topbalancesign list #'
            - queue clear
        - case 'togglenick':
            - if <server.flag[top_balance_sign.toggle_nick]||false>
            {
                - flag server 'top_balance_sign.toggle_nick:false'
                - define stat Disabled
            }
            else
            {
                - flag server 'top_balance_sign.toggle_nick:true'
                - define stat Enabled
            }
            - if <def[rfc]>
            {
                - narrate '<&a><def[stat]> nicknames for all TopBalanceSigns.' 'format:top_balance_sign_format'
            }
        - default:
            - if <def[page].as_decimal||null> == null
            {
                - define page 1
            }
            else if <def[page].mod[1]> != 0 || <def[page]> <= 0
            {
                - define page 1
            }
            - if <def[page]> > <server.list_players.size>
            {
                - narrate '<&c>You can<&sq>t create a TopBalanceSign for a user who doesn<&sq>t exist!' 'format:top_balance_sign_format'
                - queue clear
            }
            - if <server.flag[top_balance_sign.locations].as_list.contains[<def[loc]>/<def[page]>]>
            {
                - narrate '<&c>This is already a TopBalanceSign for #<def[page]>!' 'format:top_balance_sign_format'
                - queue clear
            }
            - if <server.flag[top_balance_sign.locations].as_list.get_sub_items[1].contains[<def[loc]>]>
            {
                - define rem_loc '<server.flag[top_balance_sign.locations].as_list.get_sub_items[1].find_all[<def[loc]>]>'
                - flag server 'top_balance_sign.locations:<-:<server.flag[top_balance_sign.locations].as_list.get[<def[rem_loc]>]>'
            }
            - if <server.flag[top_balance_sign.toggle_nick]||false>
            {
                - define name_type name.display
            }
            else
            {
                - define name_type name
            }
            - define tb_player <server.list_players.sort_by_number[money].reverse.get[<def[page]>]>
            - flag server 'top_balance_sign.locations:->:<def[loc]>/<def[page]>'
            - if <def[rfc]>
            {
                - narrate '<&a>Set a sign at <def[loc]> as a TopBalanceSign!' 'format:top_balance_sign_format'
            }
            - sign '<&6><&l>[Top Balance]<&r>|<&e>= #<def[page]> <&e>=<&r>|<&a><def[tb_player].%name_type%><&r>|<&2>Right click to see balance!<&r>' '<def[loc]>'
            - queue clear

top_balance_sign_format:
    type: format
    debug: false
    format: '<&a>[<&2><&l>TopBalanceSigns<&r><&a>]<&r> <text>'

top_balance_sign_events:
    type: world
    debug: false
    events:
        on system time minutely:
        - repeat 14
        {
            - run top_balance_sign_task 'def:false|update'
            - wait '4s'
        }
        on player breaks sign_post:
        - inject locally 'events.on player breaks wall_sign'
        on player breaks wall_sign:
        - run top_balance_sign_task 'def:true|remove|<context.location.simple>' 'player:<player>'
        on player right clicks sign_post:
        - inject locally 'events.on player right clicks wall_sign'
        on player right clicks wall_sign:
        - if <server.flag[top_balance_sign.locations].as_list.get_sub_items[1].contains[<context.location.simple>]>
        {
            - define tb_player <context.location.sign_contents.get[3].strip_color>
            - narrate '<&f><def[tb_player].as_player.name.display> has $<def[tb_player].as_player.money.as_money>.' 'format:top_balance_sign_format'