Paste #11999: Untitled Paste

Date: 2014/12/11 20:41:52 UTC-08:00
Type: Denizen Script

View Raw Paste Download This Paste
Copy Link


dRegions_Commands_List:
  type: task
  script: no thanks

  list:
  # /drg list (page#) -r region -w world -p player

    - define args '<c.args.remove[1]>'
    # Check the specified player
    - if <def[args].find[-p].is[OR_MORE].than[0]||false> {
      - if !<player.has_permission[dregions.admin]||true> {
        - run s@dRegions_Msg 'def:<&c>You may not list other players regions!'
        - queue clear
        }
      - define player '<def[args].get[<def[args].find[-p].add[1].as_int>].escaped||null>'
      - if <util.player_is_valid[<def[player]>].not||true> {
        - run s@dRegions_Msg 'def:<&c>Invalid player specfied!'
        - queue clear
        }
      - define filterPlayer ''
      - define args '<def[args].remove[<def[args].find[-p].add[1].as_int>].exclude[-p]||li@>'
      }
#      else define player '<player.name||null>'
      else {
      - if <context.server.not> define player '<player.name>'
        else define player 'null'
      }

    # Check the specified world
    - if <def[args].find[-w].is[OR_MORE].than[0]||false> {
      - define world '<def[args].get[<def[args].find[-w].add[1].as_int>].as_world.name.escaped||null>'
      - if <def[world].is[==].to[null]||true> {
        - run s@dRegions_Msg 'def:<&c>Invalid world specfied!'
        - queue clear
        }
      - define filterWorld ''
      - define args '<def[args].remove[<def[args].find[-w].add[1].as_int>].exclude[-w]||li@>'
      }
#      else define world '<player.world.name||null>'
      else {
      - if <context.server.not> define world '<player.world.name>'
        else define world 'null'
      }

    # Do we want to show results for ALL worlds?
    - if <def[args].find[-a].is[OR_MORE].than[0]||false> {
      - define worlds '<server.list_worlds.parse[name]>'
      - define getAll ''
      - define args '<def[args].remove[<def[args].find[-a]>]||li@>'
      }

    # Check the specified region name
    - if <def[args].find[-r].is[OR_MORE].than[0]||false> {
      - define region '<def[args].get[<def[args].find[-r].add[1].as_int>].escaped||null>'
      - if <def[region].is[!=].to[null]||true> {
        - define exists '<proc[dRegions_RegionExists].context[<def[region]>|<def[world]>]>'
        - if <def[exists].is[==].to[orphan]> {
          - run s@dRegions_Msg 'def:<&c>There is an orphaned region by this name!'
          - run s@dRegions_Msg 'def:<&c>Please notify an admin!'
          - queue clear
          }
          else if <def[exists].not> {
          - run s@dRegions_Msg 'def:<&c>There is no region by this name!'
          - queue clear
          }
        - if !<player.has_permission[dregions.admin]||true> {
          - if <proc[dRegions_IsOwner].context[<def[region]>|<def[world]>|<player>].not> {
            - run s@dRegions_Msg 'def:<&c>You are not an owner of this region!'
            - queue clear
            }
          }
        }
        else {
        - run s@dRegions_Msg 'def:<&c>You must specify a valid region ID when using the -r switch!'
        - queue clear
        }
      - define filterRegion ''
      - define args '<def[args].remove[<def[args].find[-r].add[1].as_int>].exclude[-r]||li@>'
      }

    # OK, we've validated all the user input, let's get the regions and apply filters
    - if <def[getAll].exists> {
      - define regions li@
      - foreach %worlds% {
        - define world %value%
        - define worldRegions '<yaml[dRegions_%world%_regions].list_keys[regions].exclude[__global__].alphanumeric||li@>'
        - if <def[filterRegion].exists||false> {
          - foreach %worldRegions% {
            - define worldRegion '%value%'
            - if <yaml[dRegions_%world%_regions].read[regions.%worldRegion%.parent].is[!=].to[<def[region%]>||false> {
              - define worldRegions '<def[worldRegions].remove[%loop_index%]||<def[worldRegions]>>'
              }
            }
          }
        - if <def[filterPlayer].exists||false> {
          - foreach %worldRegions% {
            - define worldRegion '%value%'
            - if <proc[dRegions_IsOwner].context[<def[worldRegion]>|<def[world]>|<def[player].as_player>]> {
              - define regions '<def[regions].include[<def[world]>/<def[worldRegion]>/owner]||<def[regions]>>'
              }
              else if <proc[dRegions_IsMember].context[<def[worldRegion]>|<def[world]>|<def[player].as_player>]> {
              - define regions '<def[regions].include[<def[world]>/<def[worldRegion]>/member]||<def[regions]>>'
              }
            }
          }
        }
      }

    - define regions <yaml[dRegions_%world%_regions].list_keys[regions].exclude[__global__].alphanumeric||li@>

    # Display the list
    - define page '<def[args].get[1].replace[-].escaped||1>'
    - if <def[page].is[MATCHES].to[number].not> {
      - define page '1'
      }
    - define pages '<def[regions].size.div[14].round_up>'
    - if <def[page].is[MORE].than[%pages%]> {
      - define page '%pages%'
      }
    - define highNumber '<def[page].mul[14].as_int>'
    - define lowNumber '<def[highNumber].sub[13].as_int>'
    - define msgsHeaderTitle '<&e>Region List   <el@val[<&7><&o>Page <&f><&o>%page% <&7><&o>of %pages%].pad_left[30]>'
    - inject locally msgsHeader instantly
    - foreach <def[regions].get[%lowNumber%].to[%highNumber%]||li@> {
      - narrate "<&5>|<&sp><&7><el@val[<el@val[<def[lowNumber].add[<def[loop_index].sub[1]>].as_int>.].pad_left[4].with[<&sp>]>].pad_right[5].with[<&sp>]> <&f>%value%"
      }
    - narrate "<&5>|"
    - inject locally msgsFooter instantly