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


