RMRK is retiring.
Registration is disabled. The site will remain online, but eventually become a read-only archive. More information.

RMRK.net has nothing to do with Blockchains, Cryptocurrency or NFTs. We have been around since the early 2000s, but there is a new group using the RMRK name that deals with those things. We have nothing to do with them.
NFTs are a scam, and if somebody is trying to persuade you to buy or invest in crypto/blockchain/NFT content, please turn them down and save your money. See this video for more information.
Exp based skill shop(one actor only)

0 Members and 1 Guest are viewing this topic.

**
Rep: +0/-0Level 68
RMRK Junior
This is a modified version of the gameguys skill shop. It lets use exp rather than gold for buying, but only for one actor.

Code: [Select]
#===============================================================================
# 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