[XP] Exp based skill shop(one actor only)

Started by gerrtunk, July 14, 2011, 02:05:35 pm

Previous topic - Next topic

gerrtunk

July 14, 2011, 02:05:35 pm Last Edit: July 27, 2011, 07:17:10 pm by ForeverZer0
Effectivity ratings for skills, defenses and attacks
Authors: gerrtunk,gerkrt
Version: 1.5
Type: Custom Skill System
Key Term: Custom Skill System



Introduction
The original game guys script is a very complete skill shop to improve buying skills in your game.
This is a modified version of the gameguys skill shop. It lets use exp rather than gold for buying, but only for one actor.


Features
Other features explained in original script.



Screenshots
No.


Demo
No.


Script

Spoiler: ShowHide



#===============================================================================
# Skill Shop
# Author: Game_guy, gerkt(exp based addition), mast3rshake2049(idea)
# Date: June 7th, 2009
# Version: 2.2z
# VERY IMPORTANT ADDITION: Edited to use exp and not gold. Only works with one actor in the
# party. The actor have to be the actor with the ID=1 of the database.
#===============================================================================
#
# Intro:
# What this script does is act as a shop but sells skills instead.
#
# Instructions:
# 1: First how do you want it setup? Theres two ways
# 1: -Any person can learn any skill
# or
# 2: -Classes learn different skills then other classes
#
# Go down to UseClasses and set it to false for 1: or true for 2:
#
# 2: Ok now that thats over lets move onto price. Go down to CONFIG PRICE and
# follow the instructions there.
#  
# 3: Skip this step if you set UseClasses to false.
# Go to CONFIG CLASS SKILLS and follow the instructions there.
#
# 4: Ok so everythings setup now. Time to actually find out how to open the
# skillshop right? You use this line
# $scene = SkillShop.new([skill id's go here])
# example
# $scene = SkillShop.new([1, 2]) will make a shop with the skills
# Heal and Great Heal
#
# 5: Ok the script now is able to make it where only skills are learnable at
# certain levels. Go to CONFIG LEVEL and follow instructions there.
#
# 6: Ok so now there's a new option that sorts the skills in the following.
# Alphabetical
# Reverse Alphabetical
# Numeric (Sorts it by Id)
# Reverse Numberic
# Price
# Reverse price
# At default its at numeric but to change it use this,
# $game_system.ssort = 0,1,2, or 3.
# 0 = Numeric, 1 = Reverse Numeric, 2 = Alphabetical,
# 3 = Reverse Alphabetical, 4 = Price, 5 = Reverse Price.
#===============================================================================
module GameGuy
 #==========================
 # BEGIN CONFIG
 #==========================
 UseClasses = true # if false anyone can learn any skill
# if true only classes can learn the defined skills
end
module RPG
 class Skill
def price
 case id
 #==========================
 # CONFIG PRICE
 #==========================
 # use
 # when skill_id then return price
 when 1 then return 50
 when 57 then return 75
 end
 return 10
end
def llevel
 case id
 #==========================
 # CONFIG LEVEL
 #==========================
 # use
 # when skill_id then return level
 when 57 then return 2
 end
 return 1
end
 end
 class Class
def learnskills
 case id
 #==========================
 # CONFIG CLASS SKILLS
 #==========================
 # use
 # when class_id then return [skill id's here]
 when 1 then return [1, 2, 57, 58, 59, 60]
 when 2 then return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 81]
 when 7 then return [69, 70, 71, 72, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80]
 when 8 then return [30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56]
 end
 return []
end
 #==========================
 # END CONFIG
 #==========================
 end
end
class Game_System
 attr_accessor :ssort
 alias sort_me_skillz initialize
 def initialize
@ssort = 0
sort_me_skillz
 end
end
class Window_SkillCommand < Window_Selectable
 def initialize
super(0, 64, 480, 64)
self.contents = Bitmap.new(width - 32, height - 32)
@item_max = 2
@column_max = 2
@commands = ["Learn", "Exit"]
refresh
self.index = 0
 end
 def refresh
self.contents.clear
for i in 0...@item_max
 draw_item(i)
end
 end
 def draw_item(index)
x = 4 + index * 240
self.contents.draw_text(x, 0, 128, 32, @commands[index])
 end
end

class Window_SkillBuy < Window_Selectable
 def initialize(shop_goods)
super(0, 128, 368, 352)
@skill_shop_goods = shop_goods
self.active = false
refresh
self.index = 0
 end
 def skill
return @data[self.index]
 end
 def refresh
if self.contents != nil
 self.contents.dispose
 self.contents = nil
end
@data = []
for i in 0...@skill_shop_goods.size
 skill = $data_skills[@skill_shop_goods[i]]
 if skill != nil
@data.push(skill)
 end
end
case $game_system.ssort
when 0
 [@data].each {|ary| ary.sort! {|a, b| a.id <=> b.id}}
when 1
 [@data].each {|ary| ary.sort! {|a, b| a.id <=> b.id}}
 [@data].each {|ary| ary.reverse!}
when 2
 [@data].each {|ary| ary.sort! {|a, b| a.name <=> b.name}}
when 3
 [@data].each {|ary| ary.sort! {|a, b| a.name <=> b.name}}
 [@data].each {|ary| ary.reverse!}
when 4
 [@data].each {|ary| ary.sort! {|a, b| a.price <=> b.price}}
when 5
 [@data].each {|ary| ary.sort! {|a, b| a.price <=> b.price}}
 [@data].each {|ary| ary.reverse!}
else
 [@data].each {|ary| ary.sort! {|a, b| a.id <=> b.id}}
end
@item_max = @data.size
if @item_max > 0
 self.contents = Bitmap.new(width - 32, row_max * 32)
 for i in 0...@item_max
draw_item(i)
 end
end
 end
 def draw_item(index)
skill = @data[index]
price = skill.price
enabled = (price <= $game_actors[1].exp)
if enabled
 self.contents.font.color = normal_color
else
 self.contents.font.color = disabled_color
end
x = 4
y = index * 32
rect = Rect.new(x, y, self.width - 32, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
bitmap = RPG::Cache.icon(skill.icon_name)
opacity = self.contents.font.color == normal_color ? 255 : 128
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
self.contents.draw_text(x + 28, y, 212, 32, skill.name, 0)
self.contents.draw_text(x + 240, y, 88, 32, price.to_s, 2)
 end
 def update_help
@help_window.set_text(skill == nil ? "" : skill.description)
 end
end

class Window_SkillStatus2 < Window_Selectable
 def initialize
super(368, 128, 272, 352)
self.contents = Bitmap.new(width - 32, height - 32)
refresh
self.z = 200
self.active = false
self.index = -1
 end
 def refresh
self.contents.clear
@item_max = $game_party.actors.size
for i in 0...$game_party.actors.size
 x = 64
 y = i * 80
 actor = $game_party.actors[i]
 classs = $data_classes[$game_actors[actor.id].class_id]
 draw_actor_graphic(actor, x - 40, y + 60)
 draw_actor_name(actor, x - 13, y + 10)
 if actor.skill_learn?($thing.id)
self.contents.font.color = crisis_color
$text = "Aquired"
 elsif GameGuy::UseClasses
if classs.learnskills.include?($thing.id) && $thing.llevel <= actor.level
 self.contents.font.color = normal_color
 $text = "Can Learn"
elsif classs.learnskills.include?($thing.id) && $thing.llevel > actor.level
 self.contents.font.color = disabled_color
 $text = "Can Learn At Level " + $thing.llevel.to_s
else
 self.contents.font.color = disabled_color
 $text = "Can't Learn"
end
 else
if actor.level >= $thing.llevel
 self.contents.font.color = normal_color
 $text = "Can Learn"
else
 self.contents.font.color = disabled_color
 $text = "Can Learn At Level " + $thing.llevel.to_s
end
 end
 self.contents.draw_text(x - 13, y + 40, 200, 32, $text)
end
 end
 def update_cursor_rect
if @index < 0
 self.cursor_rect.empty
else
 self.cursor_rect.set(0, @index * 80, self.width - 32, 80)
end
 end
end

class SkillShop
 def initialize(skills)
@skills = skills
 end
 def main
@command = Window_SkillCommand.new
@help_window = Window_Help.new
@skillbuy = Window_SkillBuy.new(@skills)
@skillbuy.active = false
@skillbuy.help_window = @help_window
$thing = @skillbuy.skill
@status = Window_SkillStatus2.new
#@status.visible = false
@gold = Window_Exp.new
@gold.x = 480
@gold.y = 64

Graphics.transition
loop do
 Graphics.update
 Input.update
 update
 if $scene != self
break
 end
end
Graphics.freeze
@gold.dispose
@skillbuy.dispose
@help_window.dispose
@command.dispose
@status.dispose
 end
 def update
@gold.update
@status.update
@gold.refresh
@command.update
@skillbuy.update
@help_window.update
$thing = @skillbuy.skill
@status.refresh
if @command.active
 update_command
 return
end

if @status.active
 update_status
 return
end

if @skillbuy.active
 update_buy
 return
end
 end
 
 def update_buy
if Input.trigger?(Input::B)
 $game_system.se_play($data_system.cancel_se)
 @skillbuy.active = false
 @skillbuy.index = -1
 @command.active = true
 @command.index = 0
 return
end
if Input.trigger?(Input::C)
 $game_system.se_play($data_system.decision_se)
 @skillbuy.active = false
 @status.active = true
 @status.visible = true
 @status.index = 0 if @status.index == -1
end
 end
 
 def update_command
if Input.trigger?(Input::B)
 $game_system.se_play($data_system.cancel_se)
 $scene = Scene_Map.new
 return
end
if Input.trigger?(Input::C)
 $game_system.se_play($data_system.decision_se)
 case @command.index
 when 0
@command.active = false
@command.index = -1
@skillbuy.active = true
@skillbuy.index = 0
 when 1
$game_system.se_play($data_system.cancel_se)
$scene = Scene_Map.new
 end
 return
end
 end
 
 def update_status
if Input.trigger?(Input::B)
 @status.active = false
 @status.index = -1
 @skillbuy.active = true
 return
end
if Input.trigger?(Input::C)
 price = @skillbuy.skill.price
 @actort = $game_party.actors[@status.index]
 enabled = (price <= $game_actors[1].exp)
 
 if enabled
if @actort.skill_learn?(@skillbuy.skill.id)
 $game_system.se_play($data_system.buzzer_se)
 return
end
if GameGuy::UseClasses
 if $data_classes[@actort.class_id].learnskills.include?(@skillbuy.skill.id) && @actort.level >= @skillbuy.skill.llevel
@actort.learn_skill(@skillbuy.skill.id)
$game_actors[1].exp -= (@skillbuy.skill.price)
$game_system.se_play($data_system.decision_se)
@status.refresh
@skillbuy.refresh
return
 else
$game_system.se_play($data_system.buzzer_se)
return
 end
else
 if @actort.level >= @skillbuy.skill.llevel
@actort.learn_skill(@skillbuy.skill.id)
$game_actors[1].exp -= (@skillbuy.skill.price)
$game_system.se_play($data_system.decision_se)
@status.refresh
@skillbuy.refresh
 else
$game_system.se_play($data_system.buzzer_se)
return
 end
 return
end

 else
$game_system.se_play($data_system.buzzer_se)
return
 end
end
 end

end

#==============================================================================
# ** Window_Exp
#------------------------------------------------------------------------------
#  This window displays amount of gold.
#==============================================================================

class Window_Exp < Window_Base
 #--------------------------------------------------------------------------
 # * Object Initialization
 #--------------------------------------------------------------------------
 def initialize
super(0, 0, 160, 64)
self.contents = Bitmap.new(width - 32, height - 32)
refresh
 end
 #--------------------------------------------------------------------------
 # * Refresh
 #--------------------------------------------------------------------------
 def refresh
self.contents.clear
cx = contents.text_size('Exp').width
self.contents.font.color = normal_color
self.contents.draw_text(4, 0, 120-cx-2, 32, $game_actors[1].exp.to_s, 2)
self.contents.font.color = system_color
self.contents.draw_text(124-cx, 0, cx, 32, 'Exp', 2)

 end
end




Instructions
In the script.


Compatibility
Any other enemy troop script.


Credits and Thanks
No.


Author's Notes

I will add more things when i need them in my projects(or i have time), so it will be updated. Again, feedback, bugs,retc, i will listen.