Paste #29338: Untitled Paste

Date: 2016/01/29 06:24:52 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."
        }

      }

####################################################################
# 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>