Paste #29342: Untitled Paste

Date: 2016/01/29 06:54:29 UTC-08:00
Type: Denizen Script

View Raw Paste Download This Paste
Copy Link


################################################
# File containing the core scripts for dTitles #
################################################
# Written by PanteLegacy and Fortifier42 #
##########################################

###########################################################
# World script for managing the I/O of the dTitles plugin #
###########################################################
dTitles_Manager:
  type: world
  events:
    on server start:
    - if <server.has_flag[dTitlesDisable]> {
      - queue clear
      }
      else {

      - if <server.has_file[../dTitles/titles.yml].not> {
        - yaml create id:titles
        - yaml savefile:../dTitles/titles.yml id:titles
        }
        else {
        - yaml load:../dTitles/titles.yml id:titles
        }


      - if <server.has_file[../dTitles/players.yml].not> {
        - yaml create id:players
        - yaml savefile:../dTitles/players.yml id:players
        }
        else {
        - yaml load: ../dTitles/players.yml id:players
        }

      }
    on world save:
    - if <server.has_flag[dTitlesDisable]> {
      - queue clear
      }
      else {

      - if <yaml.list.contains[titles]> {
        - yaml savefile:../dTitles/titles.yml id:titles
        }
        else {
        - flag server dTitlesDisable:"Error: dTitles/titles.yml was not registered."
        }


      - if <yaml.list.contains[players]> {
        - yaml savefile:../dTitles/players.yml id:players
        }
        else {
        - flag server dTitlesDisable:"Error: dTitles/players.yml was not registered."
        }

      }
    on player joins:
    - if <yaml[players].contains[Players.<player.uuid>].not> {
      - yaml id:players set Players.<player.uuid>:

      - yaml savefile:../dTitles/players.yml id:players
      - yaml load:../dTitles/players.yml id:players
      }

      else {
      - queue clear
      }

####################################################################
# World script for handling players clicking items in an inventory #
####################################################################
dTitles_Inventory_Manager:
  type: world
  events:
    on player clicks in inventory:
    - if <context.inventory.title.contains["Titles"context.inventory.title.contains["Titles"].not> {
      - queue clear
      }

      else if "<context.inventory.title.contains[Titles - Categories]>" {
      - determine passively cancelled
      - define selectedCategory <context.item.lore.first>
      - run Open_Owned_Titles_Menu def:<def[selectedCategory]>|<player>
      }

      else if "<context.inventory.title.contains[Titles - Shop]>" {
      - determine passively cancelled
      }

      else if "<context.inventory.title.contains[Titles -]>" && "<context.inventory.title.contains[Categories].not>" && "<context.inventory.title.contains[Shop].not>" {
      - determine passively cancelled
      - define Category <context.item.lore.get[1]>
      - define TitleID <context.item.lore.get[2]>
      - run Set_Title def:<def[Category]>|<def[TitleID]>|<player>
      }

    on player drags in inventory:
    - if <context.inventory.title.contains["Titles"context.inventory.title.contains["Titles"].not> {
      - queue clear
      }

      else {
      - determine cancelled
      }

##############################################
# Generates the items in the categories menu #
##############################################
Generate_Category_Item:
  type: procedure
  definitions: Category
  script:
  - define Path Categories.<def[Category]>

  - adjust <yaml[titles].read[<def[Path]>.Item].as_item||i@Stone> display_name:<&r><yaml[titles].read[<def[Path]>.Display].parse_color> save:GeneratedItem
  - adjust <entry[GeneratedItem].result> "Lore:Category<&co> <def[Category]>" save:CategoryItem

  - determine <entry[CategoryItem].result>

#####################################################
# Opens the categories menu and fills it with items #
#####################################################
Open_Category_Menu:
  type: task
  script:
  - define Items li@
  - foreach <yaml[titles].list_keys[Categories]> {
    - define Item <proc[Generate_Category_Item].context[<def[value]>]>
    - define Items <def[Items].include[<def[Item]>]>
    }
  - inventory open "d:in@generic[size=<def[Items].size.div[9].round_up.mul[9]>;contents=<def[Items]>;title=Titles - Categories]"

###########################################
# Generates the items in the titles owned #
###########################################
Generate_Title_Item:
  type: procedure
  definitions: Category|ID
  script:
  - define Path Categories.<def[Category]>.Titles.<def[ID]>
  - if <yaml[titles].contains[<def[Path]>].not> {
    - determine "i@stone[display_name=Invalid Title]"
    }
  - define Item <yaml[titles].read[<def[Path]>.Item].as_item||i@stone>
  - adjust <def[Item]> display_name:<yaml[titles].read[<def[Path]>.Display].parse_color> save:item
  - adjust <entry[item].result> "lore:<&r>Category: <yaml[titles].read[Categories.<def[Category]>].parse_color>|<&0>ID<&co> %id%" save:generatedItem

  - determine <entry[generatedItem].result>

#######################################################
# Opens the owned titles menu and fills it with items #
#######################################################
Open_Owned_Titles_Menu:
  type: task
  definitions: Category|targetedPlayer
  script:
  - define Items li@
  - foreach <yaml[players].list_keys[Players.<def[targetedPlayer].uuid>.titles.<def[Category]>]> {
    - define Item <proc[Generate_Title_Item].context[<def[Category]>|<def[targetedPlayer]>]>
    - define Items <def[Items].include[<entry[generatedItem].result>]>
    }
  - inventory open "d:in@generic[size=<def[Items].size.div[9].round_up.mul[9]>;contents=<def[Items]>;title=Titles - <def[Category]>]"

###############################
# Sets the prefix of a player #
###############################
Set_Title:
  type: task
  definitions: Category|titleID|targetedPlayer
  script:
  - define Title <yaml[titles].read[Categories.<def[Category]>.titles.<def[titleID]>.display]>
  - team add:<def[targetedPlayer]> prefix:<def[Title].parse_color>

##############################################
# Task script for adding a title to a player #
##############################################
Titles_Player_Add:
  type: task
  definitions: category|titleID|targetedPlayer
  script:
  - define path Players.<def[targetedPlayer].uuid>.Categories.titles.<def[category]>.<def[titleID]>
  - if <yaml[players].contains[Path].not> {
    - yaml id:players set Players.<def[targetedPlayer].uuid>.Categories.titles.<def[category]>:->:<def[titleID]>
    - yaml savefile:../dTitles/players.yml id:players
    - yaml load:../dTitles/players.yml id:players
    }
    else {
    - determine passively cancelled
    - flag <player> error:Player bought a title that he already owns... Idiot.
    }
##################################################
# Task script for removing a title from a player #
##################################################
Titles_Player_Remove:
  type: task
  definitions: category|titleID|targetedPlayer
  script: 
  - define path Players.<def[targetedPlayer].uuid>.Categories.titles.<def[category]>.<def[titleID]>
  - if <yaml[players].contains[Path].not> {
    - yaml id:players set Players.<def[targetedPlayer]>.Categories.titles.<def[category]>:<-:<def[titleID]>

    - yaml savefile:../dTitles/players.yml id:players
    - yaml load:../dTitles/players.yml id:players
    }
    else {
    - determine cancelled
    }