Paste #46646: Untitled Paste

Date: 2018/02/12 21:06:27 UTC-08:00
Type: Denizen Script

View Raw Paste Download This Paste
Copy Link


#----------#
#ENPC TOOL | For giving and managing NPCS unique dialogue id's
#----------# +region support  +delete protected  +easy export
shelp_enpc:
  type: yaml data
  author: BloodEko
  name: NPC ID Tool
  usage: /enpc syntax
  version: 0.1
  link: none

#server enpcCounter.173  1
#npc    enpc             173_1
#server enpc.173.1       n@npc

#- run newENPC def:<n@npc>|173
newENPC:
  type: task
  speed: 0t
  script:
  - flag server enpcCounter.<def[2]>:++
  - define ID <server.flag[enpcCounter.<def[2]>].as_int>
  - flag <def[1]> enpc:<def[2]>_<def[ID]>
  - flag server enpc.<def[2]>.<def[ID]>:<def[1]>

#- run remENPC def:<n@npc>
remENPC:
  type: task
  speed: 0t
  script:
  - flag server enpc.<def[1].flag[enpc].before[_]>.<def[1].flag[enpc].after[_]>:!
  - flag <def[1]> enpc:!

# TODO:   testen
# TODO:   import/export funktion ?
# initENPC

dev_enpc:
  type: world
  enpc_false_syntax:
  - narrate "---[/ENPC syntax]---"
  - narrate " create [name] (assignment) | resetOwn (t) | count | id (t)"
  - narrate " list | overview | unbind (t) | tp [id] | setCounter [id]"
  - narrate " del (t) | bind (t) | cleanup "
  events:
    #pl flag: erpg_tag
    on enpc command:
    - determine passively fulfilled
    - if !<player.is_op> { - narrate no_permission - queue clear }
    - choose <context.args.size>:
      - case 1:
        - choose <context.args.get[1]>:
          - case bind:
            - define target <player.target||x>
            - inject locally checkTargetNotNpc
            - inject locally checkTargetHasID
            - run newENPC def:<proc[erpg_tag]>|<def[target]>
            - narrate "<&2>Set the ID for <&6><def[target].name> <&2>to <&6><def[flagname]>"

          - case id:
            - inject locally checkTargetNotNpc
            - narrate "<&2>ID <&6><player.target.flag[enpc]||<&4>unknown>"

          - case count:
            - define region <proc[erpg_tag]>
            - narrate "<&2>The next ENPC in <&6><def[region]> <&2>will be <&6><server.flag[enpcCounter.<def[region]>].add_int[1]>"

          - case resetOwn:
            - define target <player.target||x>
            - inject locally checkTargetHasNotID
            - narrate "<&2>Resetted your playerdata: <&6><def[target].flag[enpc]>"
            - flag player <def[target].flag[enpc]>:!

          - case list:
            - define region <proc[erpg_tag]>
            - define items li@
            - foreach <server.list_flag_keys[enpc.<def[region]>]> {
              - define items <def[items].include[<def[value]>[<server.flag[enpc.<def[region]>.<def[value]>].as_npc.name>]]>
              }
            - narrate "---[ENPC list: <def[region]>]---"
            - narrate "<def[items].separated_by[, ]>"

          - case overview:
            - narrate "---[ENPC overview]---"
            - foreach <server.list_flag_keys[enpc]> {
              - narrate "<def[value]>: <server.list_flag_keys[enpc.<def[value]>].size>"
              }

          - case cleanup:
            - narrate "---[ENPC cleanup...]---"
            - inject locally cleanupAll
            - narrate "ENPC cleanup done!"

          - case unbind:
            - define target <player.target||x>
            - inject locally checkTargetNotNpc
            - inject locally checkTargetHasNotID
            - narrate "<&2>Unbinded <&6><def[target].name> <&2>[<def[target].flag[enpc]>]"
            - run remENPC def:<def[target]>

          - case del:
            - wait 1t
            - define target <player.target||x>
            - inject locally checkTargetNotNpc
            - inject locally checkTargetHasNotID
            - narrate "<&2>Unbinded & deleted <&6><def[target].name> <&2>[<def[target].flag[enpc]>]"
            - run remENPC def:<def[target]>
            - remove <def[target]>
          - default:
            - inject locally enpc_false_syntax

      - case 2:
        - choose <context.args.get[1]>:
          - case setCounter:
            - define val <context.args.get[2]>
            - if <def[val]> matches number {
              - define region <proc[erpg_tag]>
              - flag server enpcCounter.<def[region]>:<def[val].sub_int[1]>
              - narrate "<&2>Set next ENPC <&2>to: <&6><def[region]>_<def[val]>"
              } else { - inject locally enpc_false_syntax }

          - case create:
            - create player <context.args.get[2]> <player.location> save:npc
            - run newENPC def:<entry[npc].created_npc>|<proc[erpg_tag]>
            - narrate "<&2>Created <&6><context.args.get[2]> <&2>[<entry[npc].created_npc.flag[enpc]>]"

          - case tp:
            - define ID <context.args.get[2]>
            - define region <proc[erpg_tag]>
            - if <def[ID]> matches number {
              - if <server.has_flag[enpc.<def[region]>.<def[ID]>]> {
                - teleport <player> <server.flag[enpc.<def[region]>.<def[ID]>].as_npc.location>
                } else {
                - narrate "<&4>ERROR npc with this ID not found!"
                }
            } else { - inject locally enpc_false_syntax }
          - default:
            - inject locally enpc_false_syntax
      - case 3:
        - choose <context.args.get[1]>:
          - case create:
            - define script <el@val[<proc[erpg_tag]>_<context.args.get[3]>_as].as_script||x>
            - if <def[script]> == x {
              - narrate "<&4>ERROR script <&6><def[script]> <&4>not found."
              - queue clear
              }
            - create player <context.args.get[2]> <player.location> save:npc
            - assignment set script:<def[script]> npc:<entry[npc].created_npc>
            - run newENPC def:<entry[npc].created_npc>|<proc[erpg_tag]>
            - narrate "<&2>Created & assigned <&6><context.args.get[2]> <&2>[<entry[npc].created_npc.flag[enpc]>]"
        - default:
          - inject locally enpc_false_syntax
      - default:
        - inject locally enpc_false_syntax
  cleanupAll:
  - foreach <server.list_flag_keys[enpc]> {
    - define r <def[value]>
    - foreach <server.list_flag_keys[enpc.<def[value]>]> {
      - if <server.flag[enpc.<def[r]>.<def[value]>].as_npc||x> == x {
        - flag server enpc.<def[r]>.<def[value]>:!
        - narrate "-remove enpc.<def[r]>.<def[value]>"
        }
      - wait 1t
      }
    }
  checkTargetHasNotID:
  - if !<def[target].has_flag[enpc]> {
    - narrate "<&4>ERROR Target has is no enpc!"
    - queue clear
    }
  checkTargetHasID:
  - if <def[target].has_flag[enpc]> {
    - narrate "<&4>ERROR Target has already the ID <&6><def[target].flag[enpc]||x>"
    - queue clear
    }
  checkTargetNotNpc:
  - if <def[target]> !matches npc {
    - narrate "<&4>ERROR Target is not an npc!"
    - queue clear
    }