CSCA Achievements Window Call Help

Wyn Wizard

Arcane Specialist
Veteran
Joined
Feb 23, 2013
Messages
979
Reaction score
80
First Language
English
Primarily Uses
RMVXA
So I'm trying to figure out how to call the achievements window display for this script so that the players can view the list of achievements available to them in the game. I searched over this code dozens of times but I cannot seem to find where to call the scene. Any thoughts?

Here is the code so you can study it just in case I missed something:
Code:
=begin
CSCA Achievements
version: 1.2.2
Created by: Casper Gaming (http://www.caspergaming.com/)

Compatibility:
Made for RPGVXAce
IMPORTANT: ALL CSCA Scripts should be compatible with each other unless
otherwise noted.
REQUIRES CSCA Core Script.
================================================================================
UPDATES:
version 1.1(September 6th, 2012):
- Optimized & Made more compatible

version 1.2(September 19th, 2012):
- Added support for encyclopedia completion % achievements

version 1.2.1(November 25th, 2012):
- Added score to achievements.

version 1.2.2(November 26th, 2012):
- Fixed bug with progress not tracking items, armors, and weapons properly.
- Added the ability to use different icons for each achievement.
================================================================================
INTRODUCTION:
This script creates an achievement system in your game.

FEATURES:
-Achievements!
-Score system similar to gamerscore.
-Can assign a reward for each achievement
-Can display a progress bar for each achievement
-Automatically earn achievements when progress bar gets to 100%.
-Can play an SE when achievement is unlocked
-Popup window when achievement is earned
-Able to use custom graphic in place of achievement window(size is 248x72),
image will be resized if bigger or smaller.

SETUP
Setup required. Instructions below.

To set an achievement as true, use the following script call:
$game_achievements[achievement_id] = true
where achievement_id would be the same number as ACHIEVEMENTS[achievement_id]

CREDIT:
Free to use in noncommercial games if credit is given to:
Casper Gaming (http://www.caspergaming.com/)

To use in a commercial game, please purchase a license here:
http://www.caspergaming.com/licenses.html

TERMS:
http://www.caspergaming.com/terms_of_use.html
=end
module CSCA # Don't touch
  module ACHIEVEMENTS # Don't touch
    #=======================================================================#
    # Declaring arrays, do not touch                                        #
    #=======================================================================#
    ACHIEVEMENTS = [] # Don't touch
    DESCRIPTION  = [] # Don't touch
    PROGRESS     = [] # Don't touch
    REWARDS      = [] # Don't touch
    #=======================================================================#
    # Description Setup                                                     #
    #=======================================================================#
    #DESCRIPTION[x] = ["Descriptive Text","Seperate lines with commas!"]
    DESCRIPTION[0] = ["Talk to the Sage to gain your first quest."]
    DESCRIPTION[1] = ["You gained your first quest!"]
    DESCRIPTION[2] = ["Find the Ghastly Caverns in the nearby forest."]
    DESCRIPTION[3] = ["You found the Ghastly Caverns."]
    DESCRIPTION[4] = ["Fix the bridge lift."]
    DESCRIPTION[5] = ["Bridge lift fixed."]
    DESCRIPTION[6] = ["This achievement is secret."]
    DESCRIPTION[7] = ["You are a master minner!"]
    DESCRIPTION[8] = ["Collect 1000 gold."]
    DESCRIPTION[9] = ["You collected 1000 gold!"]
    DESCRIPTION[10] = ["Collect 5000 gold."]
    DESCRIPTION[11] = ["You collected 5000 gold!"]
    DESCRIPTION[12] = ["Open ten treasure chests."]
    DESCRIPTION[13] = ["You found ten treasure chests!"]
   
    #=======================================================================#
    # Progress Setup                                                        #
    #=======================================================================#
    #PROGRESS[x] = [id, upper bound, "describe numbers", :type]
    # The type can be either:
    # :var = amount stored in $game_variables[id]
    # :item = amount of $data_items[id]
    # :weapon = amount of $data_weapons[id]
    # :armor = amount of $data_armors[id]
    # :gold = amount of gold, ignores id value
    # :step = amount of steps, ignores id value
    # :save = amount of saves, ignores id value
    # :battle = amount of battles, ignores id value
    # :playtime = playtime, ignores id value
    # * :loot = amount of gold looted, ignores id value
    # * :dtake = amount of damage taken, ignores id value
    # * :ddeal = amount of damage dealt, ignores id value
    # * :gspend = amount of gold spent at shops, ignores id value
    # * :gearn = amount of gold earned from selling to shops, ignores id value
    # * :iuse = amount of items used, ignores id value
    # * :ibuy = amount of items bought from shops, ignores id value
    # * :isell = amount of items sold to shops, ignores id value
    # ** :ebes = % of bestiary completed, ignores id value
    # ** :eitm = % of items completed, ignores id value
    # ** :ewep = % of weapons completed, ignores id value
    # ** :earm = % of armors completed, ignores id value
    # ** :eskl = % of skills completed, ignores id value
    # ** :esta = % of states completed, ignores id value
    # ** :etot = % of total encyclopedia completed, ignores id value
    # ** :ecst = % of custom encyclopedia category completed, use id value for
    #            the custom category's key value.
    # * Requires CSCA Extra Stats(1.1+) Get it here:
    # http://www.rpgmakervxace.net/topic/2030-csca-extra-stats/
    # ** Requires CSCA Encyclopedia(3.0+) Get it here:
    # http://www.rpgmakervxace.net/topic/2775-csca-encyclopedia-w-bestiary/
    PROGRESS[0] = [0, 1000, "Total Gold", :gold] # 100 max, tracks party's gold.
    PROGRESS[1] = [0, 5000, "Total Gold", :gold] # 100 max, tracks party's gold.
    PROGRESS[2] = [18, 20, "Total Ore", :item]
    PROGRESS[3] = [21, 1, "Total Tomes", :item]
    PROGRESS[4] = [22, 1, "Total Tomes", :item]
    PROGRESS[5] = [23, 1, "Total Tomes", :item]
    PROGRESS[6] = [4, 10, "Total Chests", :var]
    #=======================================================================#
    # Rewards Setup                                                         #
    #=======================================================================#
    #REWARDS[x] = [amount, id, type]
    # The type can be either:
    # :item = amount of $data_items[id]
    # :weapon = amount of $data_weapons[id]
    # :armor = amount of $data_armors[id]
    # :gold = amount of gold, ignores id value
    REWARDS[0] = CSCA_Item.new(4, 1, :item) # 4 potions.
    REWARDS[1] = CSCA_Item.new(5, 1, :item) # 5 potions.
    REWARDS[2] = CSCA_Item.new(2, 9, :item) # 2 life ups.
    REWARDS[3] = CSCA_Item.new(1, 25, :item) # 1 Scroll of power.
    #=======================================================================#
    # Achievement Setup                                                     #
    #=======================================================================#
    #ACHIEVEMENT[x] = ["Name After Unlock","Name Before Unlock"(optional),
    #Description, Description after unlock(optional),progress tracking(optional),
    #reward(optional),popup graphic(optional), points worth, completion icon,
    #incomplete icon]
    # If you are not using an optional feature, write: nil
    ACHIEVEMENTS[0] = ["The Adventure Begins!",nil,DESCRIPTION[0],DESCRIPTION[1],nil,REWARDS[0],
                      nil, 10, 516, 517]
    ACHIEVEMENTS[1] = ["A Haunted What?",nil,DESCRIPTION[2],DESCRIPTION[3],nil,REWARDS[1],
                      nil, 5, 516, 517]
    ACHIEVEMENTS[2] = ["Ancient Machines...",nil, DESCRIPTION[4], DESCRIPTION[5],nil,REWARDS[2],
                      nil, 15, 516, 517]
    ACHIEVEMENTS[3] = ["Minning Fool!", "??????", DESCRIPTION[6], DESCRIPTION[7], PROGRESS[2], nil,
                      nil, 20, 516, 517]
    ACHIEVEMENTS[4] = ["Treasure Hunter I", nil, DESCRIPTION[8], DESCRIPTION[9],PROGRESS[0], REWARDS[1],
                      nil, 5 , 516, 517]
    ACHIEVEMENTS[5] = ["Treasure Hunter II", nil, DESCRIPTION[10], DESCRIPTION[11],PROGRESS[1], REWARDS[2],
                      nil, 10, 516, 517]
    ACHIEVEMENTS[6] = ["Chest Finder I", nil, DESCRIPTION[12], DESCRIPTION[13],PROGRESS[6], REWARDS[0],
                      nil, 10, 516, 517]
    #=======================================================================#
    # Misc. Setup                                                           #
    #=======================================================================#
    HEADER = "Achievements" # Text shown in the head window.
    TOTAL = "Total Achievements Unlocked: " # Text shown before total numbers.
    SCORE = "Score: " # Text shown before score numbers.
    USE_SCORE = true # Use the score system?
    PROGRESS = "Progress:" # Text above progress bar
    REWARD = "Reward: " # Text shown before the reward amount/name.
    UNLOCKED = "Achievement Unlocked!" # Text shown when achievement unlocked.
   
    NUMBERED = false # If true, numbers achieve list. If false, uses icons.
    CENTER = false # Center the description text ? True/false
    STOP_TRACK = false # Stop tracking achievement progress after earned?
   
    COLOR1 = 20 # Color1 of the progress gauge.
    COLOR2 = 21 # Color2 of the progress gauge.
   
    SOUND = "Applause1" # SE Played when an achievement is earned. Set to nil to disable.
   
    POP_ALIGN = :bottom # Alignment of Popup on map when achievement is earned.
    # :bottom = bottom center, :middle = middle of screen, :top = top center
    # Set to nil to disable the Popup Window.
    #-----------------------------------------------------------------------#
    # END SETUP! DO NOT EDIT BELOW UNLESS YOU KNOW WHAT YOU ARE DOING       #
    #-----------------------------------------------------------------------#
  end
end
$imported = {} if $imported.nil?
$imported["CSCA-Achievements"] = true
msgbox('Missing Script: CSCA Core Script! CSCA Achievements requires this
script to work properly.') if !$imported["CSCA-Core"]
#==============================================================================
# ** DataManager
#------------------------------------------------------------------------------
# Handles achievement data.
# Aliases: make_save_contents, create_game_objects, extract_save_contents
#==============================================================================
module DataManager
  #--------------------------------------------------------------------------#
  # alias method.                                                            #
  #--------------------------------------------------------------------------#
  class <<self; alias csca_ach_create_game_objects create_game_objects; end
  def self.create_game_objects
    csca_ach_create_game_objects
    $game_achievements = Game_Achievements.new
  end
  #--------------------------------------------------------------------------#
  # overwrite method.                                                        #
  #--------------------------------------------------------------------------#
  class <<self; alias csca_ach_save_contents make_save_contents; end
  def self.make_save_contents
    contents = csca_ach_save_contents
    contents[:achievements]  = $game_achievements
    contents
  end
  #--------------------------------------------------------------------------#
  # alias method                                                             #
  #--------------------------------------------------------------------------#
  class <<self; alias csca_ach_extract_save_contents extract_save_contents; end
  def self.extract_save_contents(contents)
    csca_ach_extract_save_contents(contents)
    $game_achievements = contents[:achievements]
  end
end
#==============================================================================
# ** Game_Achievements
#------------------------------------------------------------------------------
# This class handles achievements.
# The instance of this class is referenced by $game_achievements
#==============================================================================
class Game_Achievements
  #--------------------------------------------------------------------------#
  # Object Initialization                                                    #
  #--------------------------------------------------------------------------#
  def initialize
    @data = []
  end
  #--------------------------------------------------------------------------#
  # Get Achievement                                                          #
  #--------------------------------------------------------------------------#
  def [](achievement_id)
    @data[achievement_id] || false
  end
  #--------------------------------------------------------------------------#
  # Set Achievement                                                          #
  #--------------------------------------------------------------------------#
  def []=(achievement_id, value)
    @data[achievement_id] = value
    on_change(achievement_id)
  end
  #--------------------------------------------------------------------------#
  # Processing When Setting Achievements                                     #
  #--------------------------------------------------------------------------#
  def on_change(achievement_id)
    $game_party.csca_achievement_reward(CSCA::ACHIEVEMENTS::ACHIEVEMENTS[achievement_id][5]) unless
      CSCA::ACHIEVEMENTS::ACHIEVEMENTS[achievement_id][5].nil?
    Audio.se_play("Audio/SE/" + CSCA::ACHIEVEMENTS::SOUND, 80, 100) unless
      CSCA::ACHIEVEMENTS::SOUND.nil?
    $game_map.achievement_id = achievement_id
    $game_map.achievement_earned = true
  end
end
#==============================================================================
# ** CSCA_Scene_Achievements
#------------------------------------------------------------------------------
# This class performs the achievement screen processing.
#==============================================================================
class CSCA_Scene_Achievements < Scene_MenuBase
  #--------------------------------------------------------------------------#
  # Start Processing                                                         #
  #--------------------------------------------------------------------------#
  def start
    super
    create_head_window
    create_achievement_window
    create_selection_window
    create_totals_window
  end
  #--------------------------------------------------------------------------#
  # Create Background                                                        #
  #--------------------------------------------------------------------------#
  def create_background
    super
    @background_sprite.tone.set(0, 0, 0, 128)
  end
  #--------------------------------------------------------------------------#
  # Create Header Window                                                     #
  #--------------------------------------------------------------------------#
  def create_head_window
    @head_window = CSCA_Window_Header.new(0, 0, CSCA::ACHIEVEMENTS::HEADER)
    @head_window.viewport = @viewport
  end
  #--------------------------------------------------------------------------#
  # Create Achievement Selection Window                                      #
  #--------------------------------------------------------------------------#
  def create_selection_window
    @command_window = CSCA_Window_AchievementSelect.new(0,@head_window.height,
      Graphics.width/2,Graphics.height-@head_window.height-48)
    @command_window.viewport = @viewport
    @command_window.help_window = @achievement_window
    @command_window.set_handler(:cancel, method(:return_scene))
    @command_window.activate
  end
  #--------------------------------------------------------------------------#
  # Create Achievement Window                                                #
  #--------------------------------------------------------------------------#
  def create_achievement_window
    @achievement_window = CSCA_Window_AchievementDisplay.new(Graphics.width/2,
      @head_window.height,Graphics.width/2,Graphics.height-@head_window.height-48)
    @achievement_window.viewport = @viewport
  end
  #--------------------------------------------------------------------------#
  # Create Achievement Totals Window                                         #
  #--------------------------------------------------------------------------#
  def create_totals_window
    @totals_window = CSCA_Window_AchievementTotals.new(0,@head_window.height+
      @achievement_window.height,Graphics.width,Graphics.height-@head_window.height-
      @achievement_window.height)
    @totals_window.viewport = @viewport
  end
end
#==============================================================================
# ** CSCA_Window_AchievementSelect
#------------------------------------------------------------------------------
# This window displays the achievement names, numbers, and icons.
#==============================================================================
class CSCA_Window_AchievementSelect < Window_Selectable
  #--------------------------------------------------------------------------#
  # Object Initialization                                                    #
  #--------------------------------------------------------------------------#
  def initialize(x,y,width,height)
    super
    @data = []
    refresh
    select(0)
  end
  #--------------------------------------------------------------------------#
  # Get Item Max                                                             #
  #--------------------------------------------------------------------------#
  def item_max
    @data ? @data.size : 1
  end
  #--------------------------------------------------------------------------#
  # Get Item                                                                 #
  #--------------------------------------------------------------------------#
  def item
    @data && index >= 0 ? @data[index] : nil
  end
  #--------------------------------------------------------------------------#
  # Populate item list                                                       #
  #--------------------------------------------------------------------------#
  def make_item_list
    @data = CSCA::ACHIEVEMENTS::ACHIEVEMENTS
  end
  #--------------------------------------------------------------------------#
  # Draw Items                                                               #
  #--------------------------------------------------------------------------#
  def draw_item(index)
    item = @data[index]
    if item
      rect = item_rect(index)
      CSCA::ACHIEVEMENTS::NUMBERED ? draw_item_id(rect, index) : draw_ach_icon(rect, index)
      if $game_achievements[index] || CSCA::ACHIEVEMENTS::ACHIEVEMENTS[index][1].nil?
        name = CSCA::ACHIEVEMENTS::ACHIEVEMENTS[index][0]
      else
        name = CSCA::ACHIEVEMENTS::ACHIEVEMENTS[index][1]
      end
      draw_text(rect.x + 32, rect.y, contents.width - 40, line_height, name)
    end
  end
  #--------------------------------------------------------------------------#
  # Draw Numbers                                                             #
  #--------------------------------------------------------------------------#
  def draw_item_id(rect, index)
    draw_text(rect, sprintf("%2d.", index + 1))
  end
  #--------------------------------------------------------------------------#
  # Draw Icons                                                               #
  #--------------------------------------------------------------------------#
  def draw_ach_icon(rect, index)
    $game_achievements[index] ? draw_icon(CSCA::ACHIEVEMENTS::ACHIEVEMENTS[index][8],rect.x+5,rect.y) :
    draw_icon(CSCA::ACHIEVEMENTS::ACHIEVEMENTS[index][9],rect.x+5,rect.y)
  end
  #--------------------------------------------------------------------------#
  # Refresh                                                                  #
  #--------------------------------------------------------------------------#
  def refresh
    make_item_list
    create_contents
    draw_all_items
  end
  #--------------------------------------------------------------------------#
  # Update Help Window                                                       #
  #--------------------------------------------------------------------------#
  def update_help
    @help_window.set_item(index)
  end
end
#==============================================================================
# ** CSCA_Window_AchievementTotals
#------------------------------------------------------------------------------
# This window displays the achievement header window.
#==============================================================================
class CSCA_Window_AchievementTotals < Window_Base
  #--------------------------------------------------------------------------#
  # Object Initialization                                                    #
  #--------------------------------------------------------------------------#
  def initialize(x, y, w, h)
    super(x, y, w, h)
    refresh
  end
  #--------------------------------------------------------------------------#
  # Refresh                                                                  #
  #--------------------------------------------------------------------------#
  def refresh
    contents.clear
    total_achieves = CSCA::ACHIEVEMENTS::ACHIEVEMENTS.size
    total_points = 0
    points = 0
    unlocked = 0
    for i in 0...CSCA::ACHIEVEMENTS::ACHIEVEMENTS.size
      if $game_achievements[i]
        unlocked += 1
        points += CSCA::ACHIEVEMENTS::ACHIEVEMENTS[i][7]
      end
      total_points += CSCA::ACHIEVEMENTS::ACHIEVEMENTS[i][7]
    end
    string1 = CSCA::ACHIEVEMENTS::TOTAL + unlocked.to_s + "/" + total_achieves.to_s
    string2 = CSCA::ACHIEVEMENTS::SCORE + points.to_s + "/" + total_points.to_s
    string = CSCA::ACHIEVEMENTS::USE_SCORE ? string1 + "     " + string2 : string1
    draw_text(0,0,contents.width,line_height,string,1)
  end
end
#==============================================================================
# ** CSCA_Window_AchievementDisplay
#------------------------------------------------------------------------------
# This window displays the achievement descriptions.
#==============================================================================
class CSCA_Window_AchievementDisplay < Window_Base
  #--------------------------------------------------------------------------#
  # Object Initialization                                                    #
  #--------------------------------------------------------------------------#
  def initialize(x,y,w,h)
    super(x,y,w,h)
  end
  #--------------------------------------------------------------------------#
  # Draw all info                                                            #
  #--------------------------------------------------------------------------#
  def set_item(achievement_id)
    contents.clear
    draw_description(0,contents.width,line_height,achievement_id)
    draw_progress(0,line_height*8,contents.width,line_height,achievement_id) unless
      CSCA::ACHIEVEMENTS::ACHIEVEMENTS[achievement_id][4].nil?
    draw_reward(0,line_height*11,contents.width,line_height,achievement_id) unless
      CSCA::ACHIEVEMENTS::ACHIEVEMENTS[achievement_id][5].nil?
  end
  #--------------------------------------------------------------------------#
  # Draw description                                                         #
  #--------------------------------------------------------------------------#
  def draw_description(x,w,h,achievement)
    if !$game_achievements[achievement] || CSCA::ACHIEVEMENTS::ACHIEVEMENTS[achievement][3].nil?
      description = CSCA::ACHIEVEMENTS::ACHIEVEMENTS[achievement][2]
    else
      description = CSCA::ACHIEVEMENTS::ACHIEVEMENTS[achievement][3]
    end
    for i in 0...description.size
      draw_text(x,h*i,w,h,description[i].to_s, centered_text?)
    end
  end
  #--------------------------------------------------------------------------#
  # Get centered option                                                      #
  #--------------------------------------------------------------------------#
  def centered_text?
    CSCA::ACHIEVEMENTS::CENTER ? 1 : 0
  end
  #--------------------------------------------------------------------------#
  # Draw Progress bar                                                        #
  #--------------------------------------------------------------------------#
  def draw_progress(x,y,w,h,achievement)
    color1 = text_color(CSCA::ACHIEVEMENTS::COLOR1)
    color2 = text_color(CSCA::ACHIEVEMENTS::COLOR2)
    contents.font.size = 20
    draw_text(x,y,w,h,CSCA::ACHIEVEMENTS::PROGRESS,1)
    if $game_achievements[achievement] && CSCA::ACHIEVEMENTS::STOP_TRACK
      draw_gauge(x,y+line_height-8,w,1/1,color1,color2)
      string = CSCA::ACHIEVEMENTS::ACHIEVEMENTS[achievement][4][1].to_s
      draw_text(x,y+line_height-4,w,h,string+"/"+string,1)
    else
      draw_gauge(x,y+line_height-8,w,csca_get_rate(achievement),color1,color2)
      draw_gauge_numbers(x,y+line_height-4,w,h,achievement)
    end
    draw_text(x,y+line_height*2-12,w,h,CSCA::ACHIEVEMENTS::ACHIEVEMENTS[achievement][4][2],1)
    contents.font.size = 24
  end
  #--------------------------------------------------------------------------#
  # Calculate Rate                                                           #
  #--------------------------------------------------------------------------#
  def csca_get_rate(achievement)
    csca_get_numerator(achievement).to_f/csca_get_denominator(achievement).to_f
  end
  #--------------------------------------------------------------------------#
  # Get Numerator                                                            #
  #--------------------------------------------------------------------------#
  def csca_get_numerator(achievement)
    case CSCA::ACHIEVEMENTS::ACHIEVEMENTS[achievement][4][3]
    when :var
      return $game_variables[CSCA::ACHIEVEMENTS::ACHIEVEMENTS[achievement][4][0]]
    when :item
      return $game_party.item_number($data_items[CSCA::ACHIEVEMENTS::ACHIEVEMENTS[achievement][4][0]])
    when :weapon
      return $game_party.item_number($data_weapons[CSCA::ACHIEVEMENTS::ACHIEVEMENTS[achievement][4][0]])
    when :armor
      return $game_party.item_number($data_armors[CSCA::ACHIEVEMENTS::ACHIEVEMENTS[achievement][4][0]])
    when :gold
      return $game_party.gold
    when :step
      return $game_party.steps
    when :save
      return $game_system.save_count
    when :battle
      return $game_system.battle_count
    when :playtime
      return Graphics.frame_count / Graphics.frame_rate
    when :loot
      return $game_variables[CSCA_EXTRA_STATS::LOOTED]
    when :dtake
      return $game_variables[CSCA_EXTRA_STATS::DAMAGE_TAKEN]
    when :ddeal
      return $game_variables[CSCA_EXTRA_STATS::DAMAGE_DEALT]
    when :gspend
      return $game_variables[CSCA_EXTRA_STATS::GOLDSPENT]
    when :gearn
      return $game_variables[CSCA_EXTRA_STATS::GOLDGAINED]
    when :iuse
      return $game_variables[CSCA_EXTRA_STATS::ITEMS_USED]
    when :ibuy
      return $game_variables[CSCA_EXTRA_STATS::ITEMSBOUGHT]
    when :isell
      return $game_variables[CSCA_EXTRA_STATS::ITEMSSOLD]
    when :ebes
      string = sprintf("%1.2f%%",$game_party.csca_completion_percentage_bestiary*100.00)
      return string
    when :eitm
      string = sprintf("%1.2f%%",$game_party.csca_completion_percentage_items*100.00)
      return string
    when :ewep
      string = sprintf("%1.2f%%",$game_party.csca_completion_percentage_weapons*100.00)
      return string
    when :earm
      string = sprintf("%1.2f%%",$game_party.csca_completion_percentage_armors*100.00)
      return string
    when :eskl
      string = sprintf("%1.2f%%",$game_party.csca_completion_percentage_skills*100.00)
      return string
    when :esta
      string = sprintf("%1.2f%%",$game_party.csca_completion_percentage_states*100.00)
      return string
    when :ecst
      string = sprintf("%1.2f%%",$game_party.completion_percentage_cust(CSCA::ACHIEVEMENTS::ACHIEVEMENTS[achievement][4][0])*100.00)
      return string
    when :etot
      string = sprintf("%1.2f%%",$game_party.csca_completion_percentage*100.00)
      return string
    end
    return 0
  end
  #--------------------------------------------------------------------------#
  # Get Denominator                                                          #
  #--------------------------------------------------------------------------#
  def csca_get_denominator(achievement)
    return CSCA::ACHIEVEMENTS::ACHIEVEMENTS[achievement][4][1]
  end
  #--------------------------------------------------------------------------#
  # Draw Gauge Values                                                        #
  #--------------------------------------------------------------------------#
  def draw_gauge_numbers(x,y,w,h,achievement)
    draw_text(x,y,w,h,csca_get_numerator(achievement).to_s+"/"+csca_get_denominator(achievement).to_s,1)
  end
  #--------------------------------------------------------------------------#
  # Draw Reward                                                              #
  #--------------------------------------------------------------------------#
  def draw_reward(x,y,w,h,achievement)
    reward = CSCA::ACHIEVEMENTS::ACHIEVEMENTS[achievement][5]
    case reward.type
    when :gold;   reward_s = Vocab::currency_unit
    when :item;   reward_s = " " + $data_items[reward.id].name
    when :weapon; reward_s = " " + $data_weapons[reward.id].name
    when :armor;  reward_s = " " + $data_armors[reward.id].name
    end
    draw_text(x,y,w,h,CSCA::ACHIEVEMENTS::REWARD+reward.amount.to_s+reward_s)
  end
end
#==============================================================================
# ** CSCA_Window_AchievementPop
#------------------------------------------------------------------------------
#  This window displays when an achievement is unlocked if no custom graphic
#  is available.
#==============================================================================
class CSCA_Window_AchievementPop < Window_Base
  #--------------------------------------------------------------------------#
  # Object Initialization                                                    #
  #--------------------------------------------------------------------------#
  def initialize
    case CSCA::ACHIEVEMENTS::POP_ALIGN
    when :bottom
      super(Graphics.width/4,Graphics.height-fitting_height(3),window_width,fitting_height(3))
    when :middle
      super(Graphics.width/4,Graphics.height/2-fitting_height(1),window_width,fitting_height(3))
    when :top
      super(Graphics.width/4,0,window_width,fitting_height(3))
    end
    self.opacity = 0
    self.contents_opacity = 0
    @show_count = 0
    refresh
  end
  #--------------------------------------------------------------------------#
  # Get Window Width                                                         #
  #--------------------------------------------------------------------------#
  def window_width
    return 272
  end
  #--------------------------------------------------------------------------#
  # Frame Update                                                             #
  #--------------------------------------------------------------------------#
  def update
    super
    if @show_count > 0
      update_fadein
      @show_count -= 1
    else
      update_fadeout
    end
  end
  #--------------------------------------------------------------------------#
  # Update Fadein                                                            #
  #--------------------------------------------------------------------------#
  def update_fadein
    unless $game_map.achievement_id.nil?
      self.opacity += 16 if CSCA::ACHIEVEMENTS::ACHIEVEMENTS[$game_map.achievement_id][6].nil?
    end
    self.contents_opacity += 16
  end
  #--------------------------------------------------------------------------#
  # Update Fadeout                                                           #
  #--------------------------------------------------------------------------#
  def update_fadeout
    unless $game_map.achievement_id.nil?
      self.opacity -= 16 if CSCA::ACHIEVEMENTS::ACHIEVEMENTS[$game_map.achievement_id][6].nil?
    end
    self.contents_opacity -= 16
  end
  #--------------------------------------------------------------------------#
  # Open Window                                                              #
  #--------------------------------------------------------------------------#
  def open
    refresh
    @show_count = 150
    self.contents_opacity = 0
    self.opacity = 0
    self
  end
  #--------------------------------------------------------------------------#
  # Close Window                                                             #
  #--------------------------------------------------------------------------#
  def close
    @show_count = 0
    self
  end
  #--------------------------------------------------------------------------#
  # Refresh                                                                  #
  #--------------------------------------------------------------------------#
  def refresh
    contents.clear
    unless $game_map.achievement_id.nil?
      if CSCA::ACHIEVEMENTS::ACHIEVEMENTS[$game_map.achievement_id][6].nil?
        contents.font.bold = true
        draw_text(0,0,contents.width,line_height,CSCA::ACHIEVEMENTS::UNLOCKED,1)
        contents.font.bold = false
        draw_text(0,line_height,contents.width,line_height,CSCA::ACHIEVEMENTS::ACHIEVEMENTS[$game_map.achievement_id][0],1)
        draw_reward($game_map.achievement_id) unless CSCA::ACHIEVEMENTS::ACHIEVEMENTS[$game_map.achievement_id][5].nil?
      else
        draw_custom_image
      end
    end
  end
  #--------------------------------------------------------------------------#
  # Draw Reward if Exist                                                     #
  #--------------------------------------------------------------------------#
  def draw_reward(achievement)
    reward = CSCA::ACHIEVEMENTS::ACHIEVEMENTS[achievement][5]
    case reward.type
    when :gold;   reward_s = Vocab::currency_unit
    when :item;   reward_s = " " + $data_items[reward.id].name
    when :weapon; reward_s = " " + $data_weapons[reward.id].name
    when :armor;  reward_s = " " + $data_armors[reward.id].name
    end
    draw_text(0,line_height*2,contents.width,line_height,
      CSCA::ACHIEVEMENTS::REWARD+reward.amount.to_s+reward_s,1)
  end
  #--------------------------------------------------------------------------#
  # Draw Popup Graphic if Exist                                              #
  #--------------------------------------------------------------------------#
  def draw_custom_image
    bitmap = Cache.picture(CSCA::ACHIEVEMENTS::ACHIEVEMENTS[$game_map.achievement_id][6])
    rect = Rect.new(0,0,bitmap.width,bitmap.height)
    target = Rect.new(0,0,contents.width,contents.height)
    contents.stretch_blt(target, bitmap, rect, 255)
  end
end
#==============================================================================
# ** Scene_Map
#------------------------------------------------------------------------------
# Overwrites: none
# Aliases: create_all_windows, update, pre_transfer
#==============================================================================
class Scene_Map < Scene_Base
  #--------------------------------------------------------------------------#
  # alias method.                                                            #
  #--------------------------------------------------------------------------#
  alias csca_create_all_windows create_all_windows
  def create_all_windows
    csca_create_all_windows
    csca_create_achievement_window unless CSCA::ACHIEVEMENTS::POP_ALIGN.nil?
  end
  #--------------------------------------------------------------------------#
  # new method; create achievement window                                    #
  #--------------------------------------------------------------------------#
  def csca_create_achievement_window
    @achievement_window = CSCA_Window_AchievementPop.new
    @achievement_window.viewport = @viewport
  end
  #--------------------------------------------------------------------------#
  # alias method.                                                            #
  #--------------------------------------------------------------------------#
  alias csca_ach_pre_transfer pre_transfer
  def pre_transfer
    @achievement_window.close unless CSCA::ACHIEVEMENTS::POP_ALIGN.nil?
    csca_ach_pre_transfer
  end
  #--------------------------------------------------------------------------#
  # alias method.                                                            #
  #--------------------------------------------------------------------------#
  alias csca_ach_update update
  def update
    csca_ach_update
    if $game_map.achievement_earned
      @achievement_window.open unless CSCA::ACHIEVEMENTS::POP_ALIGN.nil?
      $game_map.achievement_earned = false
    end
  end
end
#==============================================================================
# ** Game_Party
#------------------------------------------------------------------------------
# Overwrites: none
# Aliases: none
#==============================================================================
class Game_Party < Game_Unit
  #--------------------------------------------------------------------------#
  # new method; Gives Reward                                                 #
  #--------------------------------------------------------------------------#
  def csca_achievement_reward(reward)
    case reward.type
    when :gold;   gain_gold(reward.amount)
    when :item;   gain_item($data_items[reward.id], reward.amount)
    when :weapon; gain_item($data_weapons[reward.id], reward.amount)
    when :armor;  gain_item($data_armors[reward.id], reward.amount)
    end
  end
end
#==============================================================================
# ** Game_Map
#------------------------------------------------------------------------------
# Overwrites: none
# Aliases: initialize, update
#==============================================================================
class Game_Map
  attr_accessor :achievement_earned
  attr_accessor :achievement_id
  #--------------------------------------------------------------------------#
  # alias method.                                                            #
  #--------------------------------------------------------------------------#
  alias csca_ach_initialize initialize
  def initialize
    csca_ach_initialize
    @achievement_earned = false
    @achievement_id = 0
  end
  #--------------------------------------------------------------------------#
  # alias method.                                                            #
  #--------------------------------------------------------------------------#
  alias csca_ach_update update
  def update(main)
    csca_update_achievements
    csca_ach_update(main)
  end
  #--------------------------------------------------------------------------#
  # new method; automatically earn achievement if progress 100%              #
  #--------------------------------------------------------------------------#
  def csca_update_achievements
    data = CSCA::ACHIEVEMENTS::ACHIEVEMENTS
    for i in 0...data.size
      unless $game_achievements[i]
        if csca_get_progress_completion(data[i])
          $game_achievements[i] = true
        end
      end
    end
  end
  #--------------------------------------------------------------------------#
  # new method; determine progress completion                                #
  #--------------------------------------------------------------------------#
  def csca_get_progress_completion(achievement)
    return false if achievement[4].nil?
    return csca_ach_numerator(achievement)/csca_ach_denominator(achievement) >= 1
  end
  #--------------------------------------------------------------------------#
  # new method; determine rate numerator                                     #
  #--------------------------------------------------------------------------#
  def csca_ach_numerator(achievement)
    case achievement[4][3]
    when :var
      return $game_variables[achievement[4][0]]
    when :item
      return $game_party.item_number($data_items[achievement[4][0]])
    when :weapon
      return $game_party.item_number($data_weapons[achievement[4][0]])
    when :armor
      return $game_party.item_number($data_armors[achievement[4][0]])
    when :gold
      return $game_party.gold
    when :step
      return $game_party.steps
    when :save
      return $game_system.save_count
    when :battle
      return $game_system.battle_count
    when :playtime
      return Graphics.frame_count / Graphics.frame_rate
    when :loot
      return $game_variables[CSCA_EXTRA_STATS::LOOTED]
    when :dtake
      return $game_variables[CSCA_EXTRA_STATS::DAMAGE_TAKEN]
    when :ddeal
      return $game_variables[CSCA_EXTRA_STATS::DAMAGE_DEALT]
    when :gspend
      return $game_variables[CSCA_EXTRA_STATS::GOLDSPENT]
    when :gearn
      return $game_variables[CSCA_EXTRA_STATS::GOLDGAINED]
    when :iuse
      return $game_variables[CSCA_EXTRA_STATS::ITEMS_USED]
    when :ibuy
      return $game_variables[CSCA_EXTRA_STATS::ITEMSBOUGHT]
    when :isell
      return $game_variables[CSCA_EXTRA_STATS::ITEMSSOLD]
    when :ebes
      return $game_party.csca_completion_percentage_bestiary*100.00
    when :eitm
      return $game_party.csca_completion_percentage_items*100.00
    when :ewep
      return $game_party.csca_completion_percentage_weapons*100.00
    when :earm
      return $game_party.csca_completion_percentage_armors*100.00
    when :eskl
      return $game_party.csca_completion_percentage_skills*100.00
    when :esta
      return $game_party.csca_completion_percentage_states*100.00
    when :ecst
      return $game_party.completion_percentage_cust(achievement[4][0])*100.00
    when :etot
      return $game_party.csca_completion_percentage*100.00
    end
    return 0
  end
  #--------------------------------------------------------------------------#
  # new method; determine rate denominator                                   #
  #--------------------------------------------------------------------------#
  def csca_ach_denominator(achievement)
    return achievement[4][1]
  end
end
 

bgillisp

Global Moderators
Global Mod
Joined
Jul 2, 2014
Messages
13,522
Reaction score
14,255
First Language
English
Primarily Uses
RMVXA

I've moved this thread to RGSSx Script Support. Please be sure to post your threads in the correct forum next time. Thank you.

 

Sixth

Veteran
Veteran
Joined
Jul 4, 2014
Messages
2,162
Reaction score
822
First Language
Hungarian
Primarily Uses
RMVXA
That's because it is not in that script, but in his "Menu Organizer" script, at least if I remember right.
Check that script to see how to call the achievement menu or to add it to the main menu.

But to simply call it from an event, this should do it:
Code:
SceneManager.call(CSCA_Scene_Achievements)
 

Wyn Wizard

Arcane Specialist
Veteran
Joined
Feb 23, 2013
Messages
979
Reaction score
80
First Language
English
Primarily Uses
RMVXA
Thank you sixth! Question answered!
 

Users Who Are Viewing This Thread (Users: 0, Guests: 1)

Latest Threads

Latest Posts

Latest Profile Posts

How many parameters is 'too many'??
Yay, now back in action Happy Christmas time, coming back!






Back in action to develop the indie game that has been long overdue... Final Fallacy. A game that keeps on giving! The development never ends as the developer thinks to be the smart cookie by coming back and beginning by saying... "Oh bother, this indie game has been long overdue..." How could one resist such? No-one c
So I was playing with filters and this looked interesting...

Versus the normal look...

Kind of gives a very different feel. :LZSexcite:
To whom ever person or persons who re-did the DS/DS+ asset packs for MV (as in, they are all 48x48, and not just x2 the pixel scale) .... THANK-YOU!!!!!!!!! XwwwwX

Forum statistics

Threads
105,853
Messages
1,016,986
Members
137,561
Latest member
visploo100
Top