Paste #11205: dwe beginnings v0.2

Date: 2014/11/12 16:06:19 UTC-08:00
Type: Denizen Script

View Raw Paste Download This Paste
Copy Link


################################################################################
#
#                            d W o r l d E d i t o r
#                                       &
#                                d R e g i o n s
#
#
#   Authors: |Anthony|
#   Version: 0.2
#   dScript Version: 0.9.6-DEV_b146
#
#
#
#--- About this script
#
#  This is the beginnings of recreating WorldGuard and WorldEdit in denizen
#
#
#
################################################################################
#
#  dRegions World Events Script
#
#  This should cover all dRegions related world events.
#
dRegions_Events:
  type: world
  debug: false
  events:
    on player clicks block:
      - if <c.item.scriptname.split[_].get[1].is[!=].to[dRegions]||true> queue clear
      - determine passively CANCELLED
      - inject <c.item.scriptname.as_script> instantly

#dRegions_Msg:
#  type: item
#  material: i@human_skull
#  display name: "<&4>[<&6>dRegions<&4>]"
#  lore:
#  - <&5>Click for Info
#  script:
#    - ^define text '<&4>[<&6>dRegions<&4>] <&co>'
#    - ^define hover '{<i@dRegionsMsg.json>}'
#    - ^define click '/dregions'
#    - ^define button "text:'%text%',clickEvent:{action:run_command,value:'%click%'},hoverEvent:{action:show_item,value:'%hover%'}"
#    - ^define spacer "text:'  '"
#    - ^define msg "text:'%1%'"
#    - ^execute as_server "tellraw <player.name> {text:'',extra:[{%button%},{%spacer%},{%msg%}]}"

dRegions_Tool:
  type: item
  debug: false
  material: m@wood_axe
  display name: dRegion Selector
  lore:
  - <&7><&o>Left<&7> click to set pos1
  - <&7><&o>Right<&7> click to set pos2

  script:
    - if !<player.has_permission[dRegions.tool]> {
      - take i@dRegions_Tool
      - run s@dRegions_Msg 'def:<&4><&l>ERROR<&co> <&a>You should not have this!' instantly
      - queue stop
      }
    - define pos '<tern[<c.click_type.is[==].to[LEFT]||false>]:1||2>'
    - define pos1 '<player.flag[dRegionTool].as_list.get[1]||null>'
    - define pos2 '<player.flag[dRegionTool].as_list.get[2]||null>'
    - if <context.location.is[==].to[pos%pos%]> {
      - run s@dRegions_Msg 'def:<&c>pos%pos% is already set'
      - queue clear
      }
    - define pos%pos% '<context.location.simple>'
    - flag player dRegionTool:!
    - flag player dRegionTool:|:%pos1%|%pos2%
    - run s@dRegions_Msg 'def:<&a>Set pos%pos% to <def[pos%pos%]>'

################################################################################
#
#  Denizen World Editor Command Script Container
#
# This script covers all dWE commands
#
#
#
#--------------------------------------
#
#  dWE Command Script Basics
#
# The basic stuff required in a command script container
#
dWE_Commands:
  type: command
  debug: false
  name: dwe
  description: Denizen World Editor
  usage: /dwe
  aliases: ''
  allowed help:
  - determine true
  script:
    - define arg1 '<c.args.get[1].escaped||help>'
    - define args 'li@help|tool|expand|contract|inset|outset|hpos1|hpos2|chunk|show|set|undo'
    - if !<def[args].contains[%arg1%]> inject locally help instantly
      else inject locally %arg1% instantly

#
#  END dWE Command Script Basics
#--------------------------------------
#
#  dWE Command Arguments
#
# Each of these subscripts is an argument for the root command.
#
  help:
    - if <player.has_permission[dRegions.admin]> inject locally msgsHelpAdmin instantly
      else inject locally msgsHelpUser instantly
    - inject locally msgsFooter instantly
    - queue stop

  tool:
    - if <player.has_permission[dRegions.tool]> {
      - give i@dRestaurantTool
      - run s@dRegions_Msg 'def:<&a>Left click to select pos1'
      - run s@dRegions_Msg 'def:<&a>Right click to select pos2'
      - queue stop
      }

  show:
    - define pos1 '<player.flag[dRegionTool].get[1].as_location||null>'
    - define pos2 '<player.flag[dRegionTool].get[2].as_location||null>'
    - if <def[pos1].is[==].to[null]> run s@dRegions_Msg 'def:<&c>Must select corner 1 with left-click.'
      else if <def[pos2].is[==].to[null]> run s@dRegions_Msg 'def:<red>Must select corner 2 with right-click.'
      else showfake m@wool <cu@%pos1%|%pos2%.get_outline> to:<player> d:10s

  pos1:
    - define pos1 '<player.flag[dRegionTool].as_list.get[1]||null>'
    - if <player.location.simple.is[==].to[pos1]> {
      - run s@dRegions_Msg 'def:<&c>pos1 is already set'
      - queue clear
      }
    - define pos1 '<player.location.simple>'
    - define pos2 '<player.flag[dRegionTool].as_list.get[2]||null>'
    - run s@dRegions_Msg 'def:<&a>Set pos1 to <def[pos1].replace[l@]>'
    - flag player dRegionTool:!
    - flag player dRegionTool:|:%pos1%|%pos2%

  pos2:
    - define pos2 '<player.flag[dRegionTool].as_list.get[2]||null>'
    - if <player.location.simple.is[==].to[pos1]> {
      - run s@dRegions_Msg 'def:<&c>pos2 is already set'
      - queue clear
      }
    - define pos1 '<player.flag[dRegionTool].as_list.get[2]||null>'
    - define pos2 '<player.location.simple>'
    - run s@dRegions_Msg 'def:<&a>Set pos2 to <def[pos2].replace[l@]>'
    - flag player dRegionTool:!
    - flag player dRegionTool:|:%pos1%|%pos2%

  hpos1:
    - define pos1 '<player.flag[dRegionTool].as_list.get[1]||null>'
    - if <player.location.simple.is[==].to[pos1]> {
      - run s@dRegions_Msg 'def:<&c>pos1 is already set'
      - queue clear
      }
    - define pos1 '<player.location.cursor_on.simple>'
    - define pos2 '<player.flag[dRegionTool].as_list.get[2]||null>'
    - run s@dRegions_Msg 'def:<&a>Set pos1 to <def[pos1].replace[l@]>'
    - flag player dRegionTool:!
    - flag player dRegionTool:|:%pos1%|%pos2%

  hpos2:
    - define pos2 '<player.flag[dRegionTool].as_list.get[2]||null>'
    - if <player.location.simple.is[==].to[pos1]> {
      - run s@dRegions_Msg 'def:<&c>pos2 is already set'
      - queue clear
      }
    - define pos1 '<player.flag[dRegionTool].as_list.get[2]||null>'
    - define pos2 '<player.location.cursor_on.simple>'
    - run s@dRegions_Msg 'def:<&a>Set pos2 to <def[pos2].replace[l@]>'
    - flag player dRegionTool:!
    - flag player dRegionTool:|:%pos1%|%pos2%

  chunk:
    - run s@dRegions_Msg 'def:<&a>Chunk selected<&co> <player.location.get_chunk.replace[ch@].split[,].get[1|2].comma_separated>'
    - define pos1 '<player.location.get_chunk.cuboid.min>'
    - define pos2 '<player.location.get_chunk.cuboid.max>'
    - flag player dRegionTool:!
    - flag player dRegionTool:|:%pos1%|%pos2%

  expand:
  # /dwe expand <number> (direction)
    - define pos1 '<player.flag[dRegionTool].get[1].as_location||null>'
    - define pos2 '<player.flag[dRegionTool].get[2].as_location||null>'
    - if <def[pos1].is[==].to[null]> {
      - run s@dRegions_Msg 'def:<&c>Left Click to select pos1'
      - queue clear
      }
    - if <def[pos2].is[==].to[null]> {
      - run s@dRegions_Msg 'def:<&c>Right Click to select pos2'
      - queue clear
      }
    - define n '<c.args.get[2].escaped.round_up||0>'
    - define d '<c.args.get[3].escaped||0>'
    - if <def[n].is[OR_LESS].than[0]||true> {
      - run s@dRegions_Msg 'def:<&c>SYNTAX<&co> <&e>/dwe expand <&6><&lb><&7><&ns><&6><&rb> <&6>(<&7>direction<&6>)'
      - queue clear
      }
    - if <el@[li@n|e|s|w|u|d].contains[%d%].not||true> define d '<proc[getFacing].context[<player.location.pitch>|<player.location.yaw>]>'
    - if <el@[li@n|e|s|w|u|d].contains[%d%].not||true> {
      - run s@dRegions_Msg 'def:<&4><&l>ERROR<&co> <&c>Unknown direction!'
      - queue clear
      }
    - if <def[d].is[==].to[n]||false> {
      - narrate "north subtracts from Z"
      - if <def[pos1].z.is[OR_LESS].than[<def[pos2].z>]> define pos1 '<def[pos1].sub[0,0,%n%]>'
        else define pos2 '<def[pos2].sub[0,0,%n%]>'
      }
      else if <def[d].is[==].to[e]||false> {
      - narrate "east adds to X"
      - if <def[pos1].x.is[OR_MORE].than[<def[pos2].x>]> define pos1 '<def[pos1].add[%n%,0,0]>'
        else define pos2 '<def[pos2].add[%n%,0,0]>'
      }
      else if <def[d].is[==].to[s]||false> {
      - narrate "south adds to Z"
      - if <def[pos1].z.is[OR_MORE].than[<def[pos2].z>]> define pos1 '<def[pos1].add[0,0,%n%]>'
        else define pos2 '<def[pos2].add[0,0,%n%]>'
      }
      else if <def[d].is[==].to[w]||false> {
      - narrate "west subtracts from X"
      - if <def[pos1].x.is[OR_LESS].than[<def[pos2].x>]> define pos1 '<def[pos1].sub[%n%,0,0]>'
        else define pos2 '<def[pos2].sub[%n%,0,0]>'
      }
      else if <def[d].is[==].to[u]||false> {
      - narrate "up adds to Y"
      - if <def[pos1].y.is[OR_MORE].than[<def[pos2].y>]> define pos1 '<def[pos1].add[0,%n%,0]>'
        else define pos2 '<def[pos2].add[0,%n%,0]>'
      }
      else if <def[d].is[==].to[d]||false> {
      - narrate "down subtracts from Y"
      - if <def[pos1].y.is[OR_LESS].than[<def[pos2].y>]> define pos1 '<def[pos1].sub[0,%n%,0]>'
        else define pos2 '<def[pos2].sub[0,%n%,0]>'
      }
      else {
      - narrate "dafuq just happened!?!"
      - queue clear
      }
    - flag player dRegionTool:!
    - flag player dRegionTool:|:%pos1%|%pos2%


  contract:
  # /dwe contract <number> <direction>
    - narrate "stub"


  inset:
  # /dwe inset <number> <direction>
    - narrate "stub"


  outset:
  # /dwe outset <number> <direction>
    - narrate "stub"





  set:
  # Need config options for maxblocks to change
  # Need config option for undo history size
    - define material '<c.args.get[2]||null>'
    - define pos1 '<player.flag[dRegionToolpos1].as_location||null>'
    - define pos2 '<player.flag[dRegionToolpos2].as_location||null>'
    - if %material% == null || %material% !matches material run s@dRegions_Msg 'def:<&c>Must specify a valid material.'
      else if <def[pos1].is[==].to[null]> run s@dRegions_Msg 'def:<&c>Must select corner 1 with left-click.'
      else if <def[pos1].is[==].to[null]> run s@dRegions_Msg 'def:<red>Must select corner 2 with right-click.'
      else {
      - define blocks <cu@%pos1%|%pos2%.get_blocks>
      - define undoMaterials <def[blocks].parse[material.full]>
      - modifyblock %blocks% %material%
      - flag player 'dWE_UndoHistory:->:set_blocks;<cu@%pos1%|%pos2%>;%undoMaterials%'
      }


  undo:
    - define last_action '<player.flag[dWE_UndoHistory].as_list.last||null>'
    - if <def[last_action].is[==].to[null]> run s@dRegions_Msg 'def:<&6>Nothing to undo!'
      else {
      - inject locally 'p:undo_<def[last_action].split[;].get[1]>'
      - flag player 'dWE_UndoHistory:<-:%last_action%'
      }

  undo_set_blocks:
    - define cuboid '<def[last_action].split[;].get[2].as_cuboid.get_blocks||null>'
    - define materials '<def[last_action].split[;].get[3]||li@>'
    - modifyblock %cuboid% %materials%
    - run s@dRegions_Msg 'def:<&a>Undo complete!'



#
#  END dWE Command Arguments
#--------------------------------------
#
#  dWE Command Messages
#
# These are not complete! They are mostly just stubs till the rest is fleshed out!
#
  msgsHeader:
    - narrate "<&5>|----------------------------------------|"
    - narrate "<&5>|<&sp><&sp><&sp><&6>dWorldEditor   <&7>%msgsHeaderTitle%"
    - narrate "<&5>|<&f>"

#  msgsFooter:
#    - define anthony "text:'<&7>|Anthony|',clickEvent:{action:open_url,value:'http://mineconomy.org'},hoverEvent:{action:show_item,value:'{<i@AnthonyBanner.json>}'}"
#    - define morphan "text:'<&7>Morphan1',clickEvent:{action:open_url,value:'http://google.com'},hoverEvent:{action:show_item,value:'{<i@Morphan1Banner.json>}'}"
#    - define spacer "text:'  '"
#    - define prefix "text:'<&5>|  <&f>Authors:  '"
#    - execute as_server "tellraw <player.name> {text:'',extra:[{%prefix%},{%anthony%},{%spacer%},{%morphan%}]}"
#    - narrate "<&d>|-----------S-c-r-o-l-l---U-p-------------|"

  msgsHelpAdmin:
    - define msgsHeaderTitle 'Admin Help'
    - inject locally msgsHeader instantly
    - narrate "<&5>|<&sp><&sp><&sp><&f>"
    - narrate "<&5>|<&sp><&sp><&f>"
    - narrate "<&5>|<&sp><&sp><&f>"
    - narrate "<&5>|<&sp><&sp><&f>"
    - narrate "<&5>|<&sp><&sp><&f>"
    - narrate "<&5>|<&sp><&sp><&f>"
    - narrate "<&5>|<&sp><&f>"

  msgsHelpUser:
    - define msgsHeaderTitle 'User Help'
    - inject locally msgsHeader instantly
    - narrate "<&5>|<&sp><&sp><&sp><&sp><&f>"
    - narrate "<&5>|<&sp><&sp><&f>"
    - narrate "<&5>|<&sp><&sp><&f>"
    - narrate "<&5>|<&sp><&f>"

#
#  END dWE Command Messages
#--------------------------------------



# Usage: <proc[getFacing].context[%x%|%y%|%z%]>
getFacing_Defunct:
  type: procedure
  definitions: x|y|z
  script:
    - if <def[y].is[OR_MORE].than[0.75]||false> determine u
      else if <def[y].is[OR_LESS].than[-0.75]||false> determine d
      else if <def[x].is[OR_MORE].than[0.70]||false> determine e
      else if <def[x].is[OR_LESS].than[-0.70]||false> determine w
      else if <def[z].is[OR_MORE].than[0.70]||false> determine s
      else if <def[z].is[OR_LESS].than[-0.70]||false> determine n
      else determine 0

#

# Usage: <proc[getFacing].context[%pitch%|%yaw%]>
getFacing:
  type: procedure
  definitions: pitch|yaw
  script:
    - if <def[pitch].is[OR_MORE].than[45]||false> determine d
      else if <def[pitch].is[OR_LESS].than[-45]||false> determine u
      else if <def[yaw].is[OR_MORE].than[337.5]||false> || <def[yaw].is[LESS].than[22.5]||false> determine s
      else if <def[yaw].is[OR_MORE].than[292.5]||false> determine se
      else if <def[yaw].is[OR_MORE].than[247.5]||false> determine e
      else if <def[yaw].is[OR_MORE].than[202.5]||false> determine ne
      else if <def[yaw].is[OR_MORE].than[157.5]||false> determine n
      else if <def[yaw].is[OR_MORE].than[112.5]||false> determine nw
      else if <def[yaw].is[OR_MORE].than[67.5]||false> determine w
      else if <def[yaw].is[OR_MORE].than[22.5]||false> determine sw
      else determine 0




#