Advertisement
Guest User

Achievement System

a guest
Apr 15th, 2015
2,778
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 53.80 KB | None | 0 0
  1. #========================================================================
  2. #    Author:   Calestian
  3. #    Name:     Achievement System
  4. #    Created:  02-04-2015
  5. #    Version:  1.4
  6. #---------------------------------------------------------------------------
  7. #                       VERSION HISTORY
  8. #
  9. #    v1.0 - Initial Release
  10. #    v1.1 - Quick Bug Fix
  11. #    v1.2 - Added Repeatable Achievements
  12. #    v1.3 - Added Notification Sounds - Updated Prerequisites
  13. #    v1.4 - Quick Fixes - Updated Event Methods
  14. #---------------------------------------------------------------------------
  15. #                       FEATURES
  16. #    
  17. #    * Achievement Categories
  18. #    * Locked Achievements (Prerequisites)
  19. #    * Completed Achievements (Colored)
  20. #    * Achievement Rewards
  21. #    * Achievement Point Rewards
  22. #    * Achievement Progression Track
  23. #    * Achievement Notification (Completed | Unlocked | Achievement Points Reached)
  24. #---------------------------------------------------------------------------
  25. #                       How to Setup
  26. #
  27. #    * Set in the Achievement_Categories array your Categories:
  28. #         Achievement_Categories[index] = ["CategoryName", "CategoryDescription"]
  29. #
  30. #    * Set in the Achievements hash your achievement info:
  31. #         :Prerequisite
  32. #             Set to :none means there is no prerequisite
  33. #             Set to [AchievementID, Repeated, Objective]
  34. #                e.g [0, 5, 200]
  35. #         :Item => [ItemType, ItemID, Amount]
  36. #             ItemType: 0 -> Item | 1 -> Armor | 2 -> Weapon
  37. #             ItemID: Taken from Database
  38. #             Amount: How many of the selected item to be given as a reward
  39. #         :Repeatable => false | value
  40. #             false -> One time Achievement
  41. #             value (eg. 50) -> Repeatable value(50) times
  42. #    
  43. #    * Set in the Achievement_Point_Rewards array your AP rewards:
  44. #         Achievement_Point_Rewards[index] = [[ItemType, ItemID, Amount], [ItemType, ItemID, Amount], ... , [ItemType, ItemID, Amount]
  45. #  
  46. #    * Edit Settings
  47. #---------------------------------------------------------------------------
  48. #                       How to Use
  49. #
  50. #    In the Event -> Script:
  51. #       * gain_achievement(amount, index)     # Index -> Achievements Hash Index
  52. #       * lose_achievement(amount, index)
  53. #       *  set_achievement(amount, index)
  54. #      
  55. #       * gain_achievement_points(amount)
  56. #       * lose_achievement_points(amount)
  57. #       *  set_achievement_points(amount)
  58. #
  59. #       * achievement_name(index)
  60. #       * achievement_item(index)
  61. #       * achievement_gold(index)
  62. #       * achievement_points(index)
  63. #       * achievement_title(index)
  64. #       * achievement_repeated(index)
  65. #       * achievement_progress(index)
  66. #       * achievement_status(index)
  67. #       * party_achievement_points
  68. #---------------------------------------------------------------------------
  69. #                       LICENSE INFO
  70. #
  71. #    Free for non-commercial & commercial use, as long as credit is given
  72. #    to Calestian
  73. #===========================================================================
  74.  
  75. #===========================================================================
  76. # *** Editable Region
  77. #===========================================================================
  78. module Clstn_Achievement_System
  79.  
  80.   #--------------------------------------------------------------------------
  81.   # * Achievement Categories
  82.   #--------------------------------------------------------------------------
  83.   Achievement_Categories = []
  84.  
  85.   Achievement_Categories[0] = ["General"      , "General Category Description"]
  86.   Achievement_Categories[1] = ["Explore"      , "Explore the World"           ]
  87.   Achievement_Categories[2] = ["Slayer"       , "Slay Stuff"                  ]
  88.   Achievement_Categories[3] = ["Weapon Master", "Use Weapons"                 ]
  89.   Achievement_Categories[4] = ["Competitive"  , "Be the best"                 ]
  90.   Achievement_Categories[5] = ["PvP"          , "PvP Achievements"            ]
  91.  
  92.   #--------------------------------------------------------------------------
  93.   # * Achievements
  94.   #--------------------------------------------------------------------------
  95.   Achievements = {
  96.  
  97.     0 => {
  98.       :Name              => "Be awesome",
  99.       :Tiers             => [5],
  100.       :Help              => "Just be awesome",
  101.       :Title             => "Awesome Guy",
  102.       :RewardItem        => [0, 005, 50],
  103.       :RewardGold        => 100,
  104.       :Category          => "General",
  105.       :AchievementPoints => 100,
  106.       :Prerequisite      => :none,
  107.       :Repeatable        => 5,
  108.     },
  109.    
  110.     1 => {
  111.       :Name              => "Treasure Hunter",
  112.       :Tiers             => [50, 100, 150, 200, 250],
  113.       :Help              => "Find Treasures",
  114.       :Title             => :none,
  115.       :RewardItem        => :none,
  116.       :RewardGold        => :none,
  117.       :Category          => "General",
  118.       :AchievementPoints => :none,
  119.       :Prerequisite      => [0, 2, 4],
  120.       :Repeatable        => 10,
  121.     },
  122.    
  123.     2 => {
  124.       :Name              => "Key Collector",
  125.       :Tiers             => [50, 100, 150, 200, 250],
  126.       :Help              => "Find Keys",
  127.       :Title             => "Key Collector",
  128.       :RewardItem        => [0, 001, 50],
  129.       :RewardGold        => 100,
  130.       :Category          => "General",
  131.       :AchievementPoints => 100,
  132.       :Prerequisite      => :none,
  133.       :Repeatable        => false,
  134.     },
  135.    
  136.     3 => {
  137.       :Name              => "House Explorer",
  138.       :Tiers             => [50],
  139.       :Help              => "Explore Houses",
  140.       :Title             => "House Explorer",
  141.       :RewardItem        => [0, 001, 50],
  142.       :RewardGold        => 100,
  143.       :Category          => "Explore",
  144.       :AchievementPoints => 100,
  145.       :Prerequisite      => :none,
  146.       :Repeatable        => false,
  147.     },
  148.    
  149.     4 => {
  150.       :Name              => "Cave Explorer",
  151.       :Tiers             => [50],
  152.       :Help              => "Explore Caves",
  153.       :Title             => "Cave Explorer",
  154.       :RewardItem        => [0, 001, 50],
  155.       :RewardGold        => 100,
  156.       :Category          => "Explore",
  157.       :AchievementPoints => 100,
  158.       :Prerequisite      => :none,
  159.       :Repeatable        => false,
  160.     },
  161.    
  162.     5 => {
  163.       :Name              => "Sea Explorer",
  164.       :Tiers             => [50, 100, 150, 200],
  165.       :Help              => "Explore Seas",
  166.       :Title             => "Sea Explorer",
  167.       :RewardItem        => [0, 001, 50],
  168.       :RewardGold        => 100,
  169.       :Category          => "Explore",
  170.       :AchievementPoints => 100,
  171.       :Prerequisite      => :none,
  172.       :Repeatable        => 50,
  173.     },
  174.    
  175.    
  176.     6 => {
  177.       :Name              => "Mountain Explorer",
  178.       :Tiers             => [50, 100, 150],
  179.       :Help              => "Explore Mountains",
  180.       :Title             => "Mountain Explorer",
  181.       :RewardItem        => [0, 001, 50],
  182.       :RewardGold        => 100,
  183.       :Category          => "Explore",
  184.       :AchievementPoints => 100,
  185.       :Prerequisite      => :none,
  186.       :Repeatable        => 50,
  187.     },
  188.  
  189.     7 => {
  190.       :Name              => "Dragon Slayer",
  191.       :Tiers             => [50, 100, 150, 200, 250],
  192.       :Help              => "Kill Dragons",
  193.       :Title             => "Dragon Slayer",
  194.       :RewardItem        => [0, 001, 50],
  195.       :RewardGold        => 100,
  196.       :Category          => "Slayer",
  197.       :AchievementPoints => 100,
  198.       :Prerequisite      => :none,
  199.       :Repeatable        => 50,
  200.     },
  201.    
  202.     8 => {
  203.       :Name              => "Demon Slayer",
  204.       :Tiers             => [50, 100, 150, 200, 250],
  205.       :Help              => "Kill Demons",
  206.       :Title             => "Demon Slayer",
  207.       :RewardItem        => [1, 001, 50],
  208.       :RewardGold        => 100,
  209.       :Category          => "Slayer",
  210.       :AchievementPoints => 100,
  211.       :Prerequisite      => :none,
  212.       :Repeatable        => 50,
  213.     },
  214.    
  215.     9 => {
  216.       :Name              => "God Slayer",
  217.       :Tiers             => [50, 100, 150, 200, 250],
  218.       :Help              => "Kill Gods",
  219.       :Title             => "God Slayer",
  220.       :RewardItem        => [2, 001, 50],
  221.       :RewardGold        => 100,
  222.       :Category          => "Slayer",
  223.       :AchievementPoints => 100,
  224.       :Prerequisite      => :none,
  225.       :Repeatable        => 50,
  226.     },
  227.    
  228.     10 => {
  229.       :Name              => "Rabbit Slayer",
  230.       :Tiers             => [50, 100, 150, 200, 250],
  231.       :Help              => "Kill Rabbits",
  232.       :Title             => "Rabbit Slayer",
  233.       :RewardItem        => [0, 001, 50],
  234.       :RewardGold        => 100,
  235.       :Category          => "Slayer",
  236.       :AchievementPoints => 100,
  237.       :Prerequisite      => :none,
  238.       :Repeatable        => 50,
  239.     },
  240.    
  241.   }
  242.  
  243.   Achievement_Point_Rewards    = []
  244.   Achievement_Point_Rewards[0] = [1000,   [[1, 001, 50], [0, 001, 10], [2, 001, 30]]]
  245.   Achievement_Point_Rewards[1] = [5000,   [[1, 001, 50], [0, 001, 10], [2, 001, 30]]]
  246.   Achievement_Point_Rewards[2] = [10000,  [[1, 001, 50], [0, 001, 10], [2, 001, 30]]]
  247.   Achievement_Point_Rewards[3] = [50000,  [[1, 001, 50], [0, 001, 10], [1, 001, 30]]]
  248.   Achievement_Point_Rewards[4] = [100000, [[1, 001, 50], [0, 001, 10], [1, 001, 30]]]
  249.  
  250.    
  251.   #-----------------------------------------------------------------------
  252.   # * Settings
  253.   #-----------------------------------------------------------------------
  254.   Achievement_Display        = :Both     # :Color | :Icon | :Both
  255.   Category_Icon_Disabled     = 337       # Category Icon when not Expanded
  256.   Category_Icon_Enabled      = 345       # Category Icon when Expanded
  257.   Achievement_Points_Icon    = 361       # Achievement_Points_Icon = IconID
  258.   Achievement_Unlocked_Icon  = 359       # Achievement_Unlocked_Icon = IconID
  259.   Achievement_Locked_Icon    = 243       # Achievement_Locked_Icon = IconID
  260.   Achievement_Completed_Icon = 431       # Achievement_Completed_Icon = IconID
  261.   Achievement_Points_color   = 21        # Achievement_Points_Color = ColorID
  262.   Notification_Sound         = "Absorb2" # "SoundName"
  263.   Notification_Window        = true      # Notification Window Enabled
  264.    
  265. #===========================================================================
  266. # *** End of Editable Region
  267. #===========================================================================
  268.  
  269.   #--------------------------------------------------------------------------
  270.   # * Get Achievement Categories
  271.   #--------------------------------------------------------------------------
  272.   def self.get_achievement_categories
  273.     @achievement_categories = []
  274.     Achievement_Categories.each { |value|
  275.       @achievement_categories.push(value[0])
  276.     }
  277.     return @achievement_categories
  278.   end
  279.  
  280.   #--------------------------------------------------------------------------
  281.   # * Get Category Achievements
  282.   #--------------------------------------------------------------------------
  283.   def self.get_category_achievements
  284.     category = []
  285.     Achievement_Categories.each { |key|
  286.       temp = []
  287.       Achievements.each_value { |value|
  288.         temp.push(value[:Name]) if value[:Category] == key[0]
  289.       }
  290.       category.push(temp.empty? ? 0 : temp)
  291.     }
  292.     return category
  293.   end
  294.  
  295.   #--------------------------------------------------------------------------
  296.   # * Tier?
  297.   #--------------------------------------------------------------------------
  298.   def self.tier?(item)
  299.     progress = $game_party.achievements[find_achievement_index(item[:Name])]
  300.     item[:Tiers].size.times { |i|
  301.       return item[:Tiers].size - 1 if item[:Tiers][-1] == progress
  302.       return i if item[:Tiers][i] > progress
  303.     }
  304.   end
  305.  
  306.   #--------------------------------------------------------------------------
  307.   # * Locked?
  308.   #--------------------------------------------------------------------------
  309.   def self.locked?(item)
  310.     item = Achievements[find_achievement_index(item)] if item.is_a?(String)
  311.     return false if item[:Prerequisite] == :none
  312.     return completed?(item) ? false : true
  313.   end
  314.  
  315.   #--------------------------------------------------------------------------
  316.   # * Completed?
  317.   #--------------------------------------------------------------------------
  318.   def self.completed?(item)
  319.     index = item[:Prerequisite][0]
  320.     limit = item[:Prerequisite][1]
  321.     tier  = item[:Prerequisite][2]
  322.     return $game_party.achievement_repeated[index] >= limit && $game_party.achievements[index] >= tier ? true : false
  323.   end
  324.  
  325.  
  326.   #--------------------------------------------------------------------------
  327.   # * Find Achievement Index
  328.   #--------------------------------------------------------------------------
  329.   def self.find_achievement_index(item)
  330.     Achievements.size.times { |index|
  331.       return index if item == Achievements[index][:Name]
  332.     }
  333.   end
  334.  
  335.   #--------------------------------------------------------------------------
  336.   # * Find Category Index
  337.   #--------------------------------------------------------------------------
  338.   def self.find_category_index(item)
  339.     Achievement_Categories.size.times { |index|
  340.       return index if item[index][0] == Achievement_Categories[index]
  341.     }
  342.   end
  343.  
  344.   #--------------------------------------------------------------------------
  345.   # * Get Achievement Point Rewards
  346.   #--------------------------------------------------------------------------
  347.   def self.get_point_rewards
  348.     Achievement_Point_Rewards.each { |value|
  349.       return value[0] if value[0] > $game_party.achievement_points
  350.     }
  351.     return Achievement_Point_Rewards[-1][0]
  352.   end
  353.  
  354.   #--------------------------------------------------------------------------
  355.   # * Get Achievement Status
  356.   #--------------------------------------------------------------------------
  357.   def self.get_achievement_status
  358.     status = []
  359.     Achievements.each_value { |value|
  360.       value[:Prerequisite] == :none ? status.push(:Unlocked) : status.push(:Locked)
  361.     }
  362.     return status
  363.   end
  364.  
  365. end
  366.  
  367. #===========================================================================
  368. # *** Window Menu Command
  369. #===========================================================================
  370. class Window_MenuCommand < Window_Command
  371.  
  372.   #--------------------------------------------------------------------------
  373.   # * Aliases
  374.   #--------------------------------------------------------------------------
  375.   alias :clstn_achievements_add_original_commands :add_original_commands
  376.   alias :clstn_achievements_initialize            :initialize
  377.  
  378.   #--------------------------------------------------------------------------
  379.   # * Initialize
  380.   #--------------------------------------------------------------------------
  381.   def initialize
  382.     clstn_achievements_initialize
  383.     $game_party.notifications.clear
  384.     $game_party.notification_enabled = false
  385.   end
  386.  
  387.   #--------------------------------------------------------------------------
  388.   # * Original Command
  389.   #--------------------------------------------------------------------------
  390.   def add_original_commands
  391.     clstn_achievements_add_original_commands
  392.     add_command("Achievements", :achievements, true)
  393.   end
  394.  
  395. end
  396.  
  397. #===========================================================================
  398. # *** Window Achievement Header
  399. #===========================================================================
  400. class Window_AchievementHeader < Window_Base
  401.  
  402.   #--------------------------------------------------------------------------
  403.   # * Initialize
  404.   #--------------------------------------------------------------------------
  405.   def initialize
  406.     super(0, 0, Graphics.width, 50)
  407.     refresh
  408.   end
  409.  
  410.   #--------------------------------------------------------------------------
  411.   # * Refresh
  412.   #--------------------------------------------------------------------------
  413.   def refresh
  414.     contents.font.size = 22
  415.     next_reward = Clstn_Achievement_System::get_point_rewards
  416.     change_color(text_color(Clstn_Achievement_System::Achievement_Points_color))
  417.     draw_icon(Clstn_Achievement_System::Achievement_Points_Icon, 10, 0)
  418.     draw_text(35, 1, contents.width, contents.height, $game_party.achievement_points)
  419.     change_color(text_color(0))
  420.     draw_text( 0, 1, contents.width, contents.height, "Next Reward: ", 1)
  421.     change_color(text_color(Clstn_Achievement_System::Achievement_Points_color))
  422.     draw_icon(Clstn_Achievement_System::Achievement_Points_Icon, 315, 1)
  423.     draw_text(340, 2, contents.width, contents.height, next_reward)
  424.   end
  425.  
  426. end
  427.  
  428. #===========================================================================
  429. # *** Window Achievement Info
  430. #===========================================================================
  431. class Window_AchievementInfo < Window_Base
  432.  
  433.   #--------------------------------------------------------------------------
  434.   # * Initialize
  435.   #--------------------------------------------------------------------------
  436.   def initialize
  437.     super(Graphics.width - 250, 50, Graphics.width - 295, Graphics.height - 50)
  438.   end
  439.  
  440.   #--------------------------------------------------------------------------
  441.   # * Refresh
  442.   #--------------------------------------------------------------------------
  443.   def refresh(item, symbol)
  444.     contents.clear
  445.     @item = item
  446.     if symbol == :category
  447.       draw_name
  448.     elsif symbol == :achievement
  449.       @index = Clstn_Achievement_System::find_achievement_index(item[:Name])
  450.       draw_name(false)
  451.       draw_progress
  452.       draw_reward
  453.     end
  454.   end
  455.  
  456.   #--------------------------------------------------------------------------
  457.   # * Draw Name
  458.   #--------------------------------------------------------------------------
  459.   def draw_name(enabled = true)
  460.     draw_information(22, enabled ? 16 : 0, 0, 0, enabled ? @item[0] : @item[:Name], 1)
  461.     draw_information(20, enabled ? 0 : 16, 0, 30, enabled ? @item[1] : @item[:Help])
  462.   end
  463.  
  464.   #--------------------------------------------------------------------------
  465.   # * Draw Progress
  466.   #--------------------------------------------------------------------------
  467.   def draw_progress
  468.     tier = Clstn_Achievement_System::tier?(@item)
  469.     draw_information(22,  0,  0,  60, "Progression")
  470.     draw_horz_line(75)
  471.     draw_information(20,  0,  0,  90,      "Tier: ")
  472.     draw_information(20, 16, 50,  90,          tier)
  473.     draw_information(20,  0,  0, 120, "Objective: ")
  474.     draw_information(20, 16, 90, 120, $game_party.achievements[@index].to_s + "/" + @item[:Tiers][tier].to_s)
  475.     draw_gauge(0, 142, contents.width, get_achievement_rate(@item[:Tiers][tier], @index), text_color(22), text_color(23))
  476.   end
  477.  
  478.   #--------------------------------------------------------------------------
  479.   # * Draw Rewards
  480.   #--------------------------------------------------------------------------
  481.   def draw_reward
  482.     repeatable  = check_variable_condition(@item[:Repeatable],        false)
  483.     gold        = check_variable_condition(@item[:RewardGold],        :none)
  484.     points      = check_variable_condition(@item[:AchievementPoints], :none)
  485.     title       = check_variable_condition(@item[:Title],             :none)
  486.     item_reward = check_variable_condition(@item[:RewardItem],        :none)
  487.     draw_horz_line(185)
  488.     draw_information(22, 0, 0, 170, "Rewards")
  489.     draw_information(20, 0, 0, 200,  "Item: ")
  490.     if item_reward == "-"
  491.       draw_information(20, 16, 50, 200, "-")
  492.     else
  493.       draw_item_name($game_party.get_item(item_reward), 50, 204, true, 172)
  494.     end
  495.     draw_information(20,  0,  0, 230,     "Gold: ")
  496.     draw_information(20, 16, 50, 230,         gold)
  497.     draw_information(20,  0,  0, 260,    "Title: ")
  498.     draw_information(20, 16, 60, 260,        title)
  499.     draw_information(20, 21, 25, 289,       points)
  500.     draw_icon(Clstn_Achievement_System::Achievement_Points_Icon, 0, 290)
  501.     draw_prerequisites(repeatable)
  502.   end
  503.  
  504.   #--------------------------------------------------------------------------
  505.   # * Draw Prerequisites
  506.   #--------------------------------------------------------------------------
  507.   def draw_prerequisites(repeatable)
  508.     draw_information(18, 16,  0, 320, "Repeatable") if repeatable && $game_party.achievement_repeated[@index] == -1 && $game_party.achievement_status[@index] != :Locked
  509.     draw_information(18, 16,  0, 320, "Repeated" + "  " + $game_party.achievement_repeated[@index].to_s + "/" + Clstn_Achievement_System::Achievements[@index][:Repeatable].to_s) if repeatable && $game_party.achievement_repeated[@index] >= 0
  510.     pre_achievement = Clstn_Achievement_System::Achievements
  511.     if $game_party.achievement_status[@index] == :Locked
  512.       pre_achievement = Clstn_Achievement_System::Achievements
  513.       current_information = $game_party.achievement_repeated[@item[:Prerequisite][0]] >= @item[:Prerequisite][1] ? 2 : 1
  514.       time = (@item[:Prerequisite][current_information] - pre_achievement[@index][:Prerequisite][current_information]) == 1  ? "once" : " times"
  515.       prerequisite = time == "once" ? "" : @item[:Prerequisite][current_information]
  516.       draw_information(18, 16,  0, 320, line = current_information == 1 ? "Repeat " : "Update ")
  517.       draw_information(18, 21, text_size(line).width, 320, name = pre_achievement[@item[:Prerequisite][0]][:Name])
  518.       draw_information(18, 16, text_size(line).width + text_size(name).width, 320, " " + prerequisite.to_s + time)
  519.     end
  520.   end
  521.  
  522.   #--------------------------------------------------------------------------
  523.   # * Check Variable Condition
  524.   #--------------------------------------------------------------------------
  525.   def check_variable_condition(variable, condition)
  526.     return variable == condition ? condition == false ? false : "-" : condition == false ? true : variable
  527.   end
  528.  
  529.   #--------------------------------------------------------------------------
  530.   # * Draw Information
  531.   #--------------------------------------------------------------------------
  532.   def draw_information(font_size, color_id, x, y, text, allignment = 0)
  533.     contents.font.size = font_size
  534.     change_color(text_color(color_id))
  535.     draw_text(x, y, contents.width, 30, text, allignment)
  536.   end
  537.  
  538.   #--------------------------------------------------------------------------
  539.   # * Draw Item Name
  540.   #--------------------------------------------------------------------------
  541.   def draw_item_name(item, x, y, enabled = true, width = 172)
  542.     return unless item
  543.     draw_icon(item.icon_index, x, y, enabled)
  544.     change_color(text_color(16), enabled)
  545.     draw_text(x + 24, y, width, line_height, item.name)
  546.   end
  547.  
  548.   #--------------------------------------------------------------------------
  549.   # * To Tier Number
  550.   #--------------------------------------------------------------------------
  551.   def to_tier(tier)
  552.     case tier
  553.     when 0
  554.       return "I"
  555.     when 1
  556.       return "II"
  557.     when 2
  558.       return "III"
  559.     when 3
  560.       return "IV"
  561.     when 4
  562.       return "V"
  563.     when 5
  564.       return "VI"
  565.     when 6
  566.       return "VII"
  567.     when 7
  568.       return "VIII"
  569.     when 8
  570.       return "IX"
  571.     when 9
  572.       return "X"
  573.     end
  574.   end
  575.  
  576.   #--------------------------------------------------------------------------
  577.   # * Get Achievement Rate
  578.   #--------------------------------------------------------------------------
  579.   def get_achievement_rate(objective, index)
  580.     return ($game_party.achievements[index].to_f / objective.to_f)
  581.   end
  582.  
  583.   #--------------------------------------------------------------------------
  584.   # * Draw Horizontal Line
  585.   #--------------------------------------------------------------------------
  586.   def draw_horz_line(y)
  587.     line_y = y + line_height / 2 - 1
  588.     contents.fill_rect(0, line_y, contents_width, 2, text_color(16))
  589.   end
  590.  
  591. end
  592.  
  593. #===========================================================================
  594. # *** Window Achievements
  595. #===========================================================================
  596. class Window_Achievements < Window_Selectable
  597.  
  598.   #--------------------------------------------------------------------------
  599.   # * Initialize
  600.   #--------------------------------------------------------------------------
  601.   def initialize(x, y, width, height)
  602.     super
  603.     @achievement_info_window = Window_AchievementInfo.new
  604.     @data = []
  605.     @category = []
  606.     @achievements = []
  607.     @category_icons = []
  608.     set_category_icons
  609.     refresh
  610.     select(0)
  611.   end
  612.  
  613.   #--------------------------------------------------------------------------
  614.   # * Category Icons
  615.   #--------------------------------------------------------------------------
  616.   def set_category_icons
  617.     Clstn_Achievement_System::Achievement_Categories.each { |value|
  618.       @category_icons.push(Clstn_Achievement_System::Category_Icon_Disabled)
  619.     }
  620.   end
  621.  
  622.   #--------------------------------------------------------------------------
  623.   # * Get Item
  624.   #--------------------------------------------------------------------------
  625.   def item
  626.     @data && index >= 0 ? @data[index] : nil
  627.   end
  628.  
  629.   #--------------------------------------------------------------------------
  630.   # * Get Item Max
  631.   #--------------------------------------------------------------------------
  632.   def item_max
  633.     @data ? @data.size : 1
  634.   end
  635.  
  636.   #--------------------------------------------------------------------------
  637.   # * Make Item List
  638.   #--------------------------------------------------------------------------
  639.   def make_item_list
  640.     @category = Clstn_Achievement_System::get_achievement_categories     unless !@category.empty?
  641.     @achievements = Clstn_Achievement_System::get_category_achievements  unless !@achievements.empty?
  642.     @data = Clstn_Achievement_System::get_achievement_categories         unless !@data.empty?
  643.   end
  644.  
  645.   #--------------------------------------------------------------------------
  646.   # * Draw Item
  647.   #--------------------------------------------------------------------------
  648.   def draw_item(index)
  649.     contents.font.size = 22
  650.     @category_helper = index == 0 ? index : @category_helper
  651.     item = @data[index]
  652.     rect = item_rect(index)
  653.     change_color(text_color(0))
  654.     if item && category?(item)
  655.       draw_icon(@category_icons[@category_helper], rect.x + 10, rect.y)
  656.       draw_text(rect.x + 40, rect.y, contents.width - 40, line_height, item)
  657.       @category_helper += 1
  658.     elsif item
  659.       id = Clstn_Achievement_System::find_achievement_index(item)
  660.       temp = find_item_achievement(item)
  661.       change_color(text_color(21)) if $game_party.achievement_status[id] == :Completed && (Clstn_Achievement_System::Achievement_Display == :Color || Clstn_Achievement_System::Achievement_Display == :Both)
  662.       if Clstn_Achievement_System::Achievement_Display == :Icon || Clstn_Achievement_System::Achievement_Display == :Both
  663.         if $game_party.achievement_status[id] == :Completed
  664.           icon = Clstn_Achievement_System::Achievement_Completed_Icon
  665.         elsif $game_party.achievement_status[id] == :Locked
  666.           icon = Clstn_Achievement_System::Achievement_Locked_Icon
  667.         else
  668.           icon = Clstn_Achievement_System::Achievement_Unlocked_Icon
  669.         end
  670.         draw_icon(icon, rect.x + 7, rect.y)
  671.       else
  672.         draw_icon(Clstn_Achievement_System::Achievement_Unlocked_Icon, rect.x + 7, rect.y)
  673.       end
  674.       draw_text(rect.x + 35, rect.y, rect.width, line_height, item)
  675.       contents.font.size = 15
  676.       change_color(text_color(16))
  677.       draw_text(227, rect.y + 1, rect.width, line_height, "Locked") if $game_party.achievement_status[id] == :Locked
  678.       change_color(text_color(0))
  679.     end
  680.   end
  681.  
  682.   #--------------------------------------------------------------------------
  683.   # * Item Rect
  684.   #--------------------------------------------------------------------------
  685.   def item_rect(index)
  686.     update_info_window(@data[index])
  687.     x_spacing = category?(@data[index]) ? 0 : 20
  688.     rect = Rect.new
  689.     rect.width = item_width - x_spacing
  690.     rect.height = item_height
  691.     rect.x = index % col_max * (item_width + spacing) + x_spacing
  692.     rect.y = index / col_max * item_height
  693.     rect
  694.   end
  695.  
  696.   #--------------------------------------------------------------------------
  697.   # * Update Info Window
  698.   #--------------------------------------------------------------------------
  699.   def update_info_window(item)
  700.     if category?(item)
  701.       item = find_item_category(item)
  702.       symbol = :category
  703.     else
  704.       item = find_item_achievement(item)
  705.       symbol = :achievement
  706.     end
  707.     @achievement_info_window.refresh(item, symbol)
  708.   end
  709.  
  710.   #--------------------------------------------------------------------------
  711.   # * Find Item Achievement
  712.   #--------------------------------------------------------------------------
  713.   def find_item_achievement(item)
  714.     Clstn_Achievement_System::Achievements.each_value { |value|
  715.       return value if value[:Name] == item
  716.     }
  717.   end
  718.  
  719.   #--------------------------------------------------------------------------
  720.   # * Find Item Category
  721.   #--------------------------------------------------------------------------
  722.   def find_item_category(item)
  723.     Clstn_Achievement_System::Achievement_Categories.each { |value|
  724.       return value if value[0] == item
  725.     }
  726.   end
  727.  
  728.   #--------------------------------------------------------------------------
  729.   # * Expand
  730.   #--------------------------------------------------------------------------
  731.   def expand
  732.     data_index = get_data_index(item)
  733.     @category_index = get_category_index(item)
  734.     if category?(item)
  735.       @category_icons[@category_index] = @category_icons[@category_index] == Clstn_Achievement_System::Category_Icon_Enabled ? Clstn_Achievement_System::Category_Icon_Disabled : Clstn_Achievement_System::Category_Icon_Enabled
  736.       if @achievements[@category_index] != 0
  737.         @achievements[@category_index].size.times { |i|
  738.           expanded?(@category_index) ? @data.insert(data_index + 1 + i, @achievements[@category_index][i]) : @data.delete_at(data_index + 1)
  739.         }
  740.       end
  741.     end
  742.     refresh
  743.   end
  744.  
  745.   #--------------------------------------------------------------------------
  746.   # * Get Category Index
  747.   #--------------------------------------------------------------------------
  748.   def get_category_index(item)
  749.     @category.size.times { |index|
  750.       return index if @category[index] == item
  751.     }
  752.   end
  753.  
  754.   #--------------------------------------------------------------------------
  755.   # * Get Data Index
  756.   #--------------------------------------------------------------------------
  757.   def get_data_index(item)
  758.     @data.size.times { |index|
  759.       return index if @data[index] == item
  760.     }
  761.   end
  762.  
  763.   #--------------------------------------------------------------------------
  764.   # * Expanded?
  765.   #--------------------------------------------------------------------------
  766.   def expanded?(index)
  767.     return @category_icons[index] == Clstn_Achievement_System::Category_Icon_Enabled && @category[index] != 0 ? true : false
  768.   end
  769.  
  770.   #--------------------------------------------------------------------------
  771.   # * Category?
  772.   #--------------------------------------------------------------------------
  773.   def category?(item)
  774.     return @category.include?(item)
  775.   end
  776.  
  777.   #--------------------------------------------------------------------------
  778.   # * Refresh
  779.   #--------------------------------------------------------------------------
  780.   def refresh
  781.     make_item_list
  782.     create_contents
  783.     draw_all_items
  784.   end
  785.  
  786.   #--------------------------------------------------------------------------
  787.   # * Dispose
  788.   #--------------------------------------------------------------------------
  789.   def dispose
  790.     super
  791.     @achievement_info_window.dispose
  792.   end
  793.  
  794. end
  795.  
  796. #===========================================================================
  797. # *** Class Window_AchievementNotification
  798. #===========================================================================
  799. class Window_AchievementNotification < Window_Base
  800.  
  801.   #--------------------------------------------------------------------------
  802.   # * Initialize
  803.   #--------------------------------------------------------------------------
  804.   def initialize
  805.     @window = $game_party.notifications[0][1]
  806.     @item   = $game_party.notifications[0][0]
  807.     super(x, 0, width, height)
  808.     $game_party.notification_enabled = false
  809.     refresh
  810.   end
  811.  
  812.   #--------------------------------------------------------------------------
  813.   # * Aliases
  814.   #--------------------------------------------------------------------------
  815.   alias :clstn_update_windowbase :update
  816.  
  817.   #--------------------------------------------------------------------------
  818.   # * Get x
  819.   #--------------------------------------------------------------------------
  820.   def x
  821.     case @window
  822.     when :completed
  823.       return Graphics.width / 4
  824.     when :unlocked
  825.       return Graphics.width / 4 + 28
  826.     when :points
  827.       return Graphics.width / 4 - 3
  828.     end
  829.   end
  830.  
  831.   #--------------------------------------------------------------------------
  832.   # * Get Width
  833.   #--------------------------------------------------------------------------
  834.   def width
  835.     case @window
  836.     when :completed
  837.       return Graphics.width / 2
  838.     when :unlocked
  839.       return Graphics.width / 2 - 56
  840.     when :points
  841.       return Graphics.width / 2 + 6
  842.     end
  843.   end
  844.  
  845.   #--------------------------------------------------------------------------
  846.   # * Get Height
  847.   #--------------------------------------------------------------------------
  848.   def height
  849.     case @window
  850.     when :completed
  851.       return Graphics.height - 310
  852.     when :unlocked
  853.       return 0 if @item.empty?
  854.       return 50 + @item.size * 25
  855.     when :points
  856.       return 50 + @item[1].size * 26
  857.     end
  858.   end
  859.  
  860.   #--------------------------------------------------------------------------
  861.   # * Refresh
  862.   #--------------------------------------------------------------------------
  863.   def refresh
  864.     contents.clear
  865.     RPG::SE.new(Clstn_Achievement_System::Notification_Sound, 80, 100).play
  866.     case @window
  867.     when :completed
  868.       draw_completed
  869.     when :unlocked
  870.       draw_unlocked
  871.     when :points
  872.       draw_points
  873.     end
  874.   end
  875.  
  876.   #--------------------------------------------------------------------------
  877.   # * Notification: Achievement Completed
  878.   #--------------------------------------------------------------------------
  879.   def draw_completed
  880.     title = @item[:Title] == :none ? "-" : @item[:Title].to_s
  881.     points =  @item[:AchievementPoints] == :none ? "-" : @item[:AchievementPoints]
  882.     contents.font.size = 20
  883.     draw_text(0, 0, contents.width, 20, "Achievement Completed!", 1)
  884.     draw_horz_line(10)
  885.     contents.font.size = 19
  886.     draw_text(0, 20, contents.width, 30, @item[:Name], 1)
  887.     draw_text(0, 40, contents.width, 30, "Title: " + title, 1)
  888.     change_color(text_color(16))
  889.     draw_icon(Clstn_Achievement_System::Achievement_Points_Icon, 90, 60)
  890.     change_color(text_color(21))
  891.     draw_text(115, 60, contents.width, 30, points, 0)
  892.   end
  893.  
  894.   #--------------------------------------------------------------------------
  895.   # * Notification: Achievement Unlocked
  896.   #--------------------------------------------------------------------------
  897.   def draw_unlocked
  898.     contents.font.size = 20
  899.     draw_text(0, 0, contents.width, 20, "Achievements Unlocked", 1)
  900.     draw_horz_line(10)
  901.     @item.size.times { |i|
  902.       draw_text(0, 30 + 25 * i, contents.width, 20, @item[i], 1)
  903.     }
  904.   end
  905.  
  906.   #--------------------------------------------------------------------------
  907.   # * Notification: Achievement Points Reached
  908.   #--------------------------------------------------------------------------
  909.   def draw_points
  910.     draw_text(0, 0, contents.width, 20, "Achievement Point Rewards", 1)
  911.     draw_horz_line(13)
  912.     i = 0
  913.     @item[1].each { |key|
  914.       item = key
  915.       draw_item_name($game_party.get_item(item), key[2], 0, 30 + 25 * i)
  916.       i += 1
  917.     }
  918.   end
  919.  
  920.   #--------------------------------------------------------------------------
  921.   # * Draw Item Name
  922.   #--------------------------------------------------------------------------
  923.   def draw_item_name(item, amount, x, y)
  924.     return unless item
  925.     contents.font.size = 21
  926.     draw_icon(item.icon_index, x, y)
  927.     draw_text(x + 24, y, contents.width, line_height, item.name)
  928.     change_color(text_color(16))
  929.     contents.font.size = 18
  930.     draw_text(0, y - 1, contents.width, 30, "x" + amount.to_s, 2)
  931.     change_color(text_color(0))
  932.   end
  933.  
  934.   #--------------------------------------------------------------------------
  935.   # * Draw Horizontal Line
  936.   #--------------------------------------------------------------------------
  937.   def draw_horz_line(y)
  938.     line_y = y + line_height / 2 - 1
  939.     contents.fill_rect(0, line_y, contents_width, 2, text_color(16))
  940.   end
  941.  
  942.   #--------------------------------------------------------------------------
  943.   # * Frame Update
  944.   #--------------------------------------------------------------------------
  945.   def update
  946.     if !disposed? && self.opacity > 0
  947.       self.opacity -= 1
  948.       self.contents_opacity -= 1
  949.       self.back_opacity -= 1
  950.     else
  951.       $game_party.notifications.delete_at(0) unless $game_party.notifications.empty?
  952.       if !$game_party.notifications.empty?
  953.         $game_party.notification_enabled = true
  954.         SceneManager.call(Scene_Map)
  955.       else
  956.         $game_party.notification_enabled = false
  957.       end
  958.     end
  959.   end
  960.  
  961. end
  962.  
  963. #===========================================================================
  964. # *** Scene Menu
  965. #===========================================================================
  966. class Scene_Menu < Scene_MenuBase
  967.  
  968.   #--------------------------------------------------------------------------
  969.   # * Aliases
  970.   #--------------------------------------------------------------------------
  971.   alias :clstn_create_command_window :create_command_window
  972.  
  973.   #--------------------------------------------------------------------------
  974.   # * Create Command Window
  975.   #--------------------------------------------------------------------------
  976.   def create_command_window
  977.     clstn_create_command_window
  978.     @command_window.set_handler(:achievements, method(:command_achievements))
  979.   end
  980.  
  981.   #--------------------------------------------------------------------------
  982.   # * Command Achievements
  983.   #--------------------------------------------------------------------------
  984.   def command_achievements
  985.     SceneManager.call(Scene_Achievements)
  986.   end
  987.  
  988. end
  989.  
  990. #===========================================================================
  991. # *** Scene Achievements
  992. #===========================================================================
  993. class Scene_Achievements < Scene_Base
  994.  
  995.   #--------------------------------------------------------------------------
  996.   # * Start Processing
  997.   #--------------------------------------------------------------------------
  998.   def start
  999.     create_main_viewport
  1000.     create_achievement_windows
  1001.   end
  1002.  
  1003.   #--------------------------------------------------------------------------
  1004.   # * Create Achievement Window
  1005.   #--------------------------------------------------------------------------
  1006.   def create_achievement_windows
  1007.     create_achievement_header_window
  1008.     create_achievement_window
  1009.   end
  1010.  
  1011.   #--------------------------------------------------------------------------
  1012.   # * Create Achievement Header Window
  1013.   #--------------------------------------------------------------------------
  1014.   def create_achievement_header_window
  1015.      @achievementheader_window = Window_AchievementHeader.new
  1016.   end
  1017.  
  1018.   #--------------------------------------------------------------------------
  1019.   # * Create Achievement Window
  1020.   #--------------------------------------------------------------------------
  1021.   def create_achievement_window
  1022.     @achievement_window = Window_Achievements.new(0, 50, Graphics.width - 250, Graphics.height - 50)
  1023.     @achievement_window.set_handler(:ok,     method(:expand_ok   ))
  1024.     @achievement_window.set_handler(:cancel, method(:return_scene))
  1025.     @achievement_window.activate
  1026.   end
  1027.  
  1028.   #--------------------------------------------------------------------------
  1029.   # * Expand [OK]
  1030.   #--------------------------------------------------------------------------
  1031.   def expand_ok
  1032.     @achievement_window.expand
  1033.     @achievement_window.activate
  1034.   end
  1035.  
  1036. end
  1037.  
  1038. #===========================================================================
  1039. # *** Class Scene_Map
  1040. #===========================================================================
  1041. class Scene_Map < Scene_Base
  1042.  
  1043.   #--------------------------------------------------------------------------
  1044.   # * Aliases
  1045.   #--------------------------------------------------------------------------
  1046.   alias :clstn_create_all_windows_scene_map :create_all_windows
  1047.  
  1048.   #--------------------------------------------------------------------------
  1049.   # * Create All Windows
  1050.   #--------------------------------------------------------------------------
  1051.   def create_all_windows
  1052.     clstn_create_all_windows_scene_map
  1053.     create_notification_window unless Clstn_Achievement_System::Notification_Window == false || $game_party.notification_enabled == false
  1054.   end
  1055.  
  1056.   #--------------------------------------------------------------------------
  1057.   # * Create Notification Window
  1058.   #--------------------------------------------------------------------------
  1059.   def create_notification_window
  1060.     @notification_window = Window_AchievementNotification.new
  1061.     @notification_window.viewport = @viewport
  1062.   end
  1063.  
  1064. end
  1065.  
  1066. #===========================================================================
  1067. # *** Class Game_Party
  1068. #===========================================================================
  1069. class Game_Party < Game_Unit
  1070.  
  1071.   attr_accessor :achievements
  1072.   attr_accessor :achievement_points
  1073.   attr_accessor :achievement_repeated
  1074.   attr_accessor :achievement_status
  1075.   attr_accessor :notification_enabled
  1076.   attr_accessor :notifications
  1077.   #--------------------------------------------------------------------------
  1078.   # * Aliased
  1079.   #--------------------------------------------------------------------------
  1080.   alias :clstn_achievements_gameparty_initialize :initialize
  1081.  
  1082.   #--------------------------------------------------------------------------
  1083.   # * Initialize
  1084.   #--------------------------------------------------------------------------
  1085.   def initialize
  1086.     clstn_achievements_gameparty_initialize
  1087.     @notification_enabled = false
  1088.     @achievement_points = 0
  1089.     @notifications = []
  1090.     @achievements = []
  1091.     @achievement_repeated = []
  1092.     @achievement_status = []
  1093.     init_achievements
  1094.     init_achievement_repeated
  1095.     init_achievement_status
  1096.   end
  1097.  
  1098.   #--------------------------------------------------------------------------
  1099.   # * Initialize Achievements
  1100.   #--------------------------------------------------------------------------
  1101.   def init_achievements
  1102.     Clstn_Achievement_System::Achievements.each_value { |value|
  1103.       @achievements.push(0)
  1104.     }
  1105.   end
  1106.  
  1107.   #--------------------------------------------------------------------------
  1108.   # * Initialize Achievement Repeated
  1109.   #--------------------------------------------------------------------------
  1110.   def init_achievement_repeated
  1111.     Clstn_Achievement_System::Achievements.each_value { |value|
  1112.       @achievement_repeated.push(-1)
  1113.     }
  1114.   end
  1115.  
  1116.   #--------------------------------------------------------------------------
  1117.   # * Initialize Achievement Status
  1118.   #--------------------------------------------------------------------------
  1119.   def init_achievement_status
  1120.     @achievement_status = Clstn_Achievement_System::get_achievement_status
  1121.   end
  1122.  
  1123.   #--------------------------------------------------------------------------
  1124.   # * Achievement Completed
  1125.   #--------------------------------------------------------------------------
  1126.   def achievement_completed(index)
  1127.     array = Clstn_Achievement_System::Achievements[index]
  1128.     if @achievements[index] >= array[:Tiers][-1]
  1129.       check_status_completed(index)
  1130.       @achievements[index] = array[:Tiers][array[:Tiers].size - 1]
  1131.       next_reward = Clstn_Achievement_System::get_point_rewards
  1132.       gain_gold(array[:RewardGold])                                     unless array[:RewardGold]        == :none
  1133.       gain_item(get_item(array[:RewardItem]), array[:RewardItem][2])    unless array[:RewardItem]        == :none
  1134.       @achievement_points += array[:AchievementPoints]                  unless array[:AchievementPoints] == :none
  1135.       notification(array, :completed)
  1136.       next_achievement(next_reward)
  1137.     end
  1138.     unlocked = check_unlock(index)
  1139.     notification(unlocked, :unlocked) unless unlocked.empty?
  1140.   end
  1141.  
  1142.   #--------------------------------------------------------------------------
  1143.   # * Next Achievement
  1144.   #--------------------------------------------------------------------------
  1145.   def next_achievement(next_reward)
  1146.     if @achievement_points >= next_reward
  1147.       array = Clstn_Achievement_System::Achievement_Point_Rewards
  1148.       index = find_achievement_reward_index(next_reward)
  1149.       array[index][1].each { |key|
  1150.         item = key
  1151.         gain_item(get_item(item), key[2])
  1152.       }    
  1153.       notification(array[index], :points)
  1154.     end
  1155.   end
  1156.  
  1157.   #--------------------------------------------------------------------------
  1158.   # * Find Achievement Reward Index
  1159.   #--------------------------------------------------------------------------
  1160.   def find_achievement_reward_index(next_reward)
  1161.     array = Clstn_Achievement_System::Achievement_Point_Rewards
  1162.     array.size.times { |index|
  1163.       return index if array[index][0] == next_reward
  1164.     }
  1165.   end
  1166.  
  1167.   #--------------------------------------------------------------------------
  1168.   # * Check Status Completed
  1169.   #--------------------------------------------------------------------------
  1170.   def check_status_completed(index)
  1171.     array = Clstn_Achievement_System::Achievements[index]
  1172.     if array[:Repeatable] == false
  1173.       @achievement_status[index] = :Completed if array[:Tiers][-1] == @achievements[index]
  1174.     else
  1175.       @achievement_status[index] = :Completed if array[:Tiers][-1] == @achievements[index] && @achievement_repeated[index] == array[:Repeatable]
  1176.     end
  1177.   end
  1178.  
  1179.   #--------------------------------------------------------------------------
  1180.   # * Check Unlocked
  1181.   #--------------------------------------------------------------------------
  1182.   def check_unlock(index)
  1183.     unlocked = []
  1184.     item = Clstn_Achievement_System::Achievements
  1185.     Clstn_Achievement_System::Achievements.size.times { |i|
  1186.       unlocked.push(item[i][:Name]) if completed?(item[i], index, i)
  1187.     }
  1188.     return unlocked
  1189.   end
  1190.  
  1191.   #--------------------------------------------------------------------------
  1192.   # * Completed?
  1193.   #--------------------------------------------------------------------------
  1194.   def completed?(item, index, i)
  1195.     return false if item[:Prerequisite] == :none
  1196.     if item[:Prerequisite][0] == index
  1197.       limit = item[:Prerequisite][1]
  1198.       tier  = item[:Prerequisite][2]
  1199.       if @achievements[index] >= tier && @achievement_repeated[index] >= limit && @achievement_status[i] == :Locked
  1200.         @achievement_status[i] = :Unlocked
  1201.         return true
  1202.       else
  1203.         return false
  1204.       end
  1205.     end
  1206.   end
  1207.  
  1208.   #--------------------------------------------------------------------------
  1209.   # * Get Item
  1210.   #--------------------------------------------------------------------------
  1211.   def get_item(item)
  1212.     case item[0]
  1213.     when 0; item = $data_items[item[1]]
  1214.     when 1; item = $data_weapons[item[1]]
  1215.     when 2; item = $data_armors[item[1]]
  1216.     end
  1217.     return item
  1218.   end
  1219.  
  1220.   #--------------------------------------------------------------------------
  1221.   # * Notifications [Trigger]
  1222.   #--------------------------------------------------------------------------
  1223.   def notification(item, symbol)
  1224.     @notification_enabled = true
  1225.     temp = [item, symbol]
  1226.     @notifications.push(temp)
  1227.     SceneManager.call(Scene_Map) unless @notifications.size > 1
  1228.   end
  1229.  
  1230. end
  1231.  
  1232. #===========================================================================
  1233. # *** Class Game_Interpreter
  1234. #===========================================================================
  1235. class Game_Interpreter
  1236.  
  1237.   #--------------------------------------------------------------------------
  1238.   # * Increase Achievements
  1239.   #--------------------------------------------------------------------------
  1240.   def gain_achievement(amount, index)
  1241.     item = Clstn_Achievement_System::Achievements[index]
  1242.     tier = Clstn_Achievement_System::tier?(Clstn_Achievement_System::Achievements[index])
  1243.     if $game_party.achievements[index] != item[:Tiers][-1]
  1244.       if !Clstn_Achievement_System::locked?(item)
  1245.         if amount <= item[:Tiers][tier]
  1246.           $game_party.achievements[index] += amount
  1247.           set_achievement(item[:Tiers][tier], index) if $game_party.achievements[index] > Clstn_Achievement_System::Achievements[index][:Tiers][tier]
  1248.         else
  1249.           set_achievement(item[:Tiers][tier], index)
  1250.         end
  1251.       end
  1252.       $game_party.achievement_completed(index)
  1253.       if $game_party.achievements[index] == item[:Tiers][-1] && item[:Repeatable] != false && item[:Repeatable] > $game_party.achievement_repeated[index]
  1254.         $game_party.achievements[index] = 0
  1255.         $game_party.achievement_repeated[index] += 1
  1256.       end
  1257.     end
  1258.   end
  1259.  
  1260.   #--------------------------------------------------------------------------
  1261.   # * Decrease Achievements
  1262.   #--------------------------------------------------------------------------
  1263.   def lose_achievement(amount, index)
  1264.     item = Clstn_Achievement_System::Achievements[index]
  1265.     if $game_party.achievements[index] != item[:Tiers][-1]
  1266.       $game_party.achievements[index] -= amount unless Clstn_Achievement_System::locked?(Clstn_Achievement_System::Achievements[index])
  1267.     end
  1268.   end
  1269.  
  1270.   #--------------------------------------------------------------------------
  1271.   # * Set Achievements
  1272.   #--------------------------------------------------------------------------
  1273.   def set_achievement(amount, index)
  1274.     item = Clstn_Achievement_System::Achievements[index]
  1275.     if $game_party.achievements[index] != item[:Tiers][-1]
  1276.       $game_party.achievements[index] = amount unless Clstn_Achievement_System::locked?(Clstn_Achievement_System::Achievements[index])
  1277.       $game_party.achievement_completed(index)
  1278.       if $game_party.achievements[index] == item[:Tiers][-1] && item[:Repeatable] != false && item[:Repeatable] > $game_party.achievement_repeated[index]
  1279.         $game_party.achievements[index] = 0
  1280.         $game_party.achievement_repeated[index] += 1
  1281.       end
  1282.     end
  1283.   end
  1284.  
  1285.   #--------------------------------------------------------------------------
  1286.   # * Gain Achievement Points
  1287.   #--------------------------------------------------------------------------
  1288.   def gain_achievement_points(amount)
  1289.     $game_party.achievement_points += amount
  1290.   end
  1291.  
  1292.   #--------------------------------------------------------------------------
  1293.   # * Lose Achievement Points
  1294.   #--------------------------------------------------------------------------
  1295.   def lose_achievement_points(amount)
  1296.     $game_party.achievement_points -= amount
  1297.   end
  1298.  
  1299.   #--------------------------------------------------------------------------
  1300.   # * Set Achievement Points
  1301.   #--------------------------------------------------------------------------
  1302.   def set_achievement_points(amount)
  1303.     $game_party.achievement_points = amount
  1304.   end
  1305.  
  1306.   #--------------------------------------------------------------------------
  1307.   # * Get Achievement Name
  1308.   #--------------------------------------------------------------------------
  1309.   def achievement_name(index)
  1310.     return Clstn_Achievement_System::Achievements[index][:Name]
  1311.   end
  1312.  
  1313.   #--------------------------------------------------------------------------
  1314.   # * Get Achievement Item Reward
  1315.   #--------------------------------------------------------------------------
  1316.   def achievement_item(index)
  1317.     return $game_party.get_item(Clstn_Achievement_System::Achievements[index][:RewardItem]).name
  1318.   end
  1319.  
  1320.   #--------------------------------------------------------------------------
  1321.   # * Get Achievement Gold Reward
  1322.   #--------------------------------------------------------------------------
  1323.   def achievement_gold(index)
  1324.     return Clstn_Achievement_System::Achievements[index][:RewardGold]
  1325.   end
  1326.  
  1327.   #--------------------------------------------------------------------------
  1328.   # * Get Achievement Points Reward
  1329.   #--------------------------------------------------------------------------
  1330.   def achievement_points(index)
  1331.     return Clstn_Achievement_System::Achievements[index][:AchievementPoints]
  1332.   end
  1333.  
  1334.   #--------------------------------------------------------------------------
  1335.   # * Disable Achievements
  1336.   #--------------------------------------------------------------------------
  1337.   def achievement_title(index)
  1338.     return Clstn_Achievement_System::Achievements[index][:Title]
  1339.   end
  1340.  
  1341.   #--------------------------------------------------------------------------
  1342.   # * Get Achievement Times Repeated
  1343.   #--------------------------------------------------------------------------
  1344.   def achievement_repeated(index)
  1345.     return $game_party.achievement_repeated[index]
  1346.   end
  1347.  
  1348.   #--------------------------------------------------------------------------
  1349.   # * Get Achievement Progress
  1350.   #--------------------------------------------------------------------------
  1351.   def achievement_progress(index)
  1352.     return $game_party.achievements[index]
  1353.   end
  1354.  
  1355.   #--------------------------------------------------------------------------
  1356.   # * Get Achievement Status
  1357.   #--------------------------------------------------------------------------
  1358.   def achievement_status(index)
  1359.     return false if Clstn_Achievement_System::Achievement[index][:Repeatable] == false
  1360.     return $game_party.achievement_status[index]
  1361.   end
  1362.  
  1363.   #--------------------------------------------------------------------------
  1364.   # * Get Party Achievement Points
  1365.   #--------------------------------------------------------------------------
  1366.   def party_achievement_points
  1367.     return $game_party.achievement_points
  1368.   end
  1369.  
  1370. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement