Paste #43194: Edit of P#43193 TopBalanceSigns

Date: 2017/07/25 21:32:28 UTC-07: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 (set|remove|update|list|help)
    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>>>
    {
        - if <context.args.size> == 0
        {
            - determine <li@set|remove|update|list>
        }
        else if <context.args.size> == 1 && !<li@set|remove.contains[<context.args.get[1]>]>
        {
            - determine <li@set|remove|update|list.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.contains[<player.location.cursor_on[5].material.name>]> && !<li@list|update|help.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@remove|update|help.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@remove|update|help.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 '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 '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 'update':
            - if <server.flag[top_balance_sign_locations].as_list.size> == 0
            {
                - if <def[rfc]>
                {
                    - narrate '<&c>There are no TopBalanceSigns!' 'format:top_balance_sign_format'
                }
                - queue clear
            }
            - 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><&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 'help':
            - narrate '<&6><&l>TopBalanceSign Help<&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 help<&7><&co> Displays this help page.'
        - 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]>]>'
            }
            - 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><&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]> has $<def[tb_player].as_player.money.as_money>.' 'format:top_balance_sign_format'
        }