Wow you sure did reply quick, thanks for the script.
I've been testing it out for about 2 hours and for some odd reason, it didn't work on my game.
I assumed this was because of YERD scripts, so I placed it with only YERD scripts and it worked.
This confused me so I tried each individual script I had to narrow it down.
Guess what the problem is?
Shanghai's script clashes with a Skill shop script.. makes no sense.
With both of these scripts, it basically skips the actor's turn if you hit click attack.
Here is the Skill shop script, do you have any idea how I could keep both working in the same game?
If not, I suppose I'll just scrap the skill shop.
Thanks again for the shanghai script!
#==============================================================================
# Skill Shop for RMVX Ver 3.0
#==============================================================================
# By Nechigawara Sanzenin
# WARNING!! : This script can use on RPG Maker VX Only!! (XP Not Support)
#==============================================================================
# Buy Skill Option For RMVX
#==============================================================================
#Version Log
#==============================================================================
#2.0 Add Level requirement - Change Hero Select Window
#3.0 Change How to set Price , Add wait Level Up option
#==============================================================================
=begin
How to Use:
You will add "$skill_shop =[Id of Skill]"
To Call Script to set id of skill for sell.
You will add "$scene = Scene_Skill_Shop.new"
To Call Skill Shop Windows.
Example:
$skill_shop = [1,2,3,6,7]
$scene = Scene_Skill_Shop.new
You can turn on/off option under "# Setting".
You can set text to use in Skill Shop under "# Learn Text".
You can add "\p[Price]" for set Skill Price at Note in Skill Database.
You can set Skill that the fighter each person can learn under "# Hero Data".
You will setting look like this in Hero Data
[ID of skill, Level requirement for learn]
Example : if you want actor id 1 can learn skill id 1 at Lv 4
and can learn skill id 2 at lv 3. You will setting look like this
1 => [ #Id of Actor
[1,4],[2,3],
],
=end
#==============================================================================
#module SKILL_SHOP
#==============================================================================
module SKILL_SHOP
# Setting
Wait_Lv_Up = true # Wait 1 Lv up for use skill from buy
Show_cha = false # Show Charactor Graphic in Select Window
# Learn Text
How_Learn = "What 's hero can learn?"
Can_Learn = "Can Learn"
Can_Learn_Lv = "On Lv"
Cant_Learn = "Can't Learn"
Learnt = "Learnt"
Teach = "Teach"
Cancel = "Cancel"
Next_Lv = "Next Lv"
Can_use = "%s can use now!"
# Price Data For Non Set
PRICE = 100
# Hero Data
SKILL_BUY = {
# Add what skill can hero buy Here
# [ID of skill,Level]
1 => [ #Id of Actor
[38,4],[59,10],[3,1],
],
2 => [ #Id of Actor
[1,4],[2,3],[3,1],
],
# End
}
# Add Price
def self.skill_price(id)
text = $data_skills[id].note
if (/\A\\[Pp]\[([0-9]+)\]/.match(text)) != nil then
price = $1.to_i
else
price = PRICE
end
return price
end
# Add Hero id
def self.skill_buy(id)
if SKILL_BUY.include?(id)
return SKILL_BUY[id]
else
return []
end
end
end
#==============================================================================
#class Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
def setup(actor_id)
actor = $data_actors[actor_id]
@actor_id = actor_id
@name = actor.name
@character_name = actor.character_name
@character_index = actor.character_index
@face_name = actor.face_name
@face_index = actor.face_index
@class_id = actor.class_id
@weapon_id = actor.weapon_id
@armor1_id = actor.armor1_id
@armor2_id = actor.armor2_id
@armor3_id = actor.armor3_id
@armor4_id = actor.armor4_id
@level = actor.initial_level
@exp_list = Array.new(101)
make_exp_list
@exp = @exp_list[@level]
@skills = []
@le_skills = []
@le = []
for i in self.class.learnings
learn_skill(i.skill_id) if i.level <= @level
end
clear_extra_values
recover_all
end
#--------------------------------------------------------------------------
def le_skills
result = []
for i in @le_skills
result.push($data_skills[i])
end
return result
end
#--------------------------------------------------------------------------
def learn_le_skill(skill_id)
unless skill_learn?($data_skills[skill_id])
@le_skills.push(skill_id)
@le_skills.sort!
end
end
#--------------------------------------------------------------------------
def forget_skill(skill_id)
@skills.delete(skill_id)
@le_skills.delete(skill_id)
end
#--------------------------------------------------------------------------
def skill_learn?(skill)
if @skills.include?(skill.id)
return true
elsif @le_skills.include?(skill.id)
return true
else
return false
end
end
#--------------------------------------------------------------------------
def le_learn_skill(skill_id)
unless @skills.include?(skill_id)
@skills.push(skill_id)
@skills.sort!
end
end
#--------------------------------------------------------------------------
def skill_can_use?(skill)
return false if @le_skills.include?(skill.id)
return false unless skill_learn?(skill)
return super
end
#--------------------------------------------------------------------------
def learn?(skill)
learn = skill_learn?(skill)
if learn == true
return false
else
return true
end
end
#--------------------------------------------------------------------------
def le_skill?(skill)
return @le_skills.include?(skill.id)
end
#--------------------------------------------------------------------------
def display_level_up(new_skills)
$game_message.new_page
text = sprintf(Vocab::LevelUp, @name, Vocab::level, @level)
$game_message.texts.push(text)
for skill in new_skills
unless @le.include?(skill.id)
text = sprintf(Vocab::ObtainSkill, skill.name)
$game_message.texts.push(text)
end
end
for i in 0...@le.size
id = @le[i]
name = $data_skills[id].name
text = sprintf(SKILL_SHOP::Can_use, name)
$game_message.texts.push(text)
end
@le = []
end
#--------------------------------------------------------------------------
alias inc_level_up level_up
def level_up
inc_level_up
@le = []
for i in 0...@le_skills.size
id = @le_skills[i]
le_learn_skill(id)
@le.push(id)
end
@le_skills = []
end
end
#==============================================================================
#class Window_Skill_ShopBuy
#==============================================================================
class Window_Skill < Window_Selectable
#--------------------------------------------------------------------------
def refresh
@data = []
for skill in @actor.skills
@data.push(skill)
if skill.id == @actor.last_skill_id
self.index = @data.size - 1
end
end
for skill in @actor.le_skills
@data.push(skill)
end
@item_max = @data.size
create_contents
for i in 0...@item_max
draw_item(i)
end
end
#--------------------------------------------------------------------------
def draw_item(index)
rect = item_rect(index)
self.contents.clear_rect(rect)
skill = @data[index]
if skill != nil
rect.width -= 4
enabled = @actor.skill_can_use?(skill)
draw_item_name(skill, rect.x, rect.y, enabled)
if @actor.le_skill?(skill)
text = SKILL_SHOP::Next_Lv
else
text = @actor.calc_mp_cost(skill)
end
self.contents.draw_text(rect, text, 2)
end
end
end
#==============================================================================
#class Window_Skill_ShopBuy
#==============================================================================
class Window_Skill_ShopBuy < Window_Selectable
#--------------------------------------------------------------------------
def initialize(x, y)
super(x, y, 304, 304)
@skill_shop_goods = $skill_shop
refresh
self.index = 0
end
#--------------------------------------------------------------------------
def skill
return @data[self.index]
end
#--------------------------------------------------------------------------
def refresh
@data = []
for i in 0...@skill_shop_goods.size
skill = $data_skills[@skill_shop_goods[i]]
if skill != nil
@data.push(skill)
end
end
@item_max = @data.size
create_contents
for i in 0...@item_max
draw_item(i)
end
end
#--------------------------------------------------------------------------
def draw_item(index)
skill = @data[index]
price = SKILL_SHOP.skill_price(skill.id)
enabled = (price <= $game_party.gold)
rect = item_rect(index)
self.contents.clear_rect(rect)
draw_item_name(skill, rect.x, rect.y, enabled)
rect.width -= 4
self.contents.draw_text(rect, price, 2)
end
#--------------------------------------------------------------------------
def update_help
@help_window.set_text(skill == nil ? "" : skill.description)
end
end
#==============================================================================
#class Window_Skill_ShopStatus
#==============================================================================
class Window_Skill_ShopStatus < Window_Selectable
#--------------------------------------------------------------------------
def initialize(x, y)
super(x, y, 240, 304)
@item = nil
refresh
self.active = false
self.index = -1
end
#--------------------------------------------------------------------------
def refresh
self.contents.clear
@item_max = $game_party.members.size
if @item != nil
self.contents.font.color = system_color
self.contents.draw_text(4, 0, 200, WLH, SKILL_SHOP::How_Learn)
for actor in $game_party.members
x = 4
y = WLH * (2 + actor.index * 2)
draw_actor_can_learn(actor, x, y)
end
end
end
#--------------------------------------------------------------------------
def draw_actor_can_learn(actor, x, y)
can = false
lv = false
ac_lv = 0
can_learn = SKILL_SHOP.skill_buy(actor.id)
id = @item.id
for i in 0...can_learn.size
if can_learn[i][0] == id
can = true
if can_learn[i][1] <= actor.level
lv = true
else
lv = false
ac_lv = can_learn[i][1]
end
break
else
can = false
end
end
enabled = (can and lv and actor.learn?(@item))
self.contents.font.color = normal_color
self.contents.font.color.alpha = enabled ? 255 : 128
if SKILL_SHOP::Show_cha
name = actor.character_name
index = actor.character_index
size = contents.text_size(actor.name).width
draw_character(name, index, x + 20 + size , y + 30)
end
self.contents.draw_text(x, y, 200, WLH, actor.name)
if can == false
text = SKILL_SHOP::Cant_Learn
elsif can == true and lv == false
ac = ac_lv.to_s
text = SKILL_SHOP::Can_Learn_Lv + " " + ac + "+"
elsif actor.learn?(@item) == false
text = SKILL_SHOP::Learnt
else
text = SKILL_SHOP::Can_Learn
end
self.contents.draw_text(x, y, 200, WLH, text, 2)
end
#--------------------------------------------------------------------------
def item=(item)
if @item != item
@item = item
refresh
end
end
#--------------------------------------------------------------------------
def update_cursor
if @index < 0
self.cursor_rect.empty
elsif @index < @item_max
y = WLH * (2 + @index * 2)
unless SKILL_SHOP::Show_cha
self.cursor_rect.set(0, y , contents.width, WLH)
else
self.cursor_rect.set(0, y - 4, contents.width,34)
end
end
end
end
#==============================================================================
#class Scene_Skill_Shop
#==============================================================================
class Scene_Skill_Shop < Scene_Base
#--------------------------------------------------------------------------
def start
super
create_menu_background
create_command_window
@viewport = Viewport.new(0, 0, 544, 416)
@help_window = Window_Help.new
@gold_window = Window_Gold.new(384, 56)
@dummy_window = Window_Base.new(0, 112, 544, 304)
@buy_window = Window_Skill_ShopBuy.new(0, 112)
@buy_window.active = false
@buy_window.visible = false
@buy_window.help_window = @help_window
@status_window = Window_Skill_ShopStatus.new(304, 112)
@status_window.visible = false
@status_window.active = false
end
#--------------------------------------------------------------------------
def terminate
super
dispose_menu_background
dispose_command_window
@help_window.dispose
@gold_window.dispose
@dummy_window.dispose
@buy_window.dispose
@status_window.dispose
end
#--------------------------------------------------------------------------
def update
super
update_menu_background
@help_window.update
@command_window.update
@gold_window.update
@dummy_window.update
@buy_window.update
@status_window.update
if @command_window.active
update_command_selection
elsif @buy_window.active
update_buy_selection
elsif @status_window.active
update_target_selection
end
end
#--------------------------------------------------------------------------
def create_command_window
s1 = SKILL_SHOP::Teach
s2 = SKILL_SHOP::Cancel
@command_window = Window_Command.new(384, [s1, s2], 2)
@command_window.y = 56
end
#--------------------------------------------------------------------------
def dispose_command_window
@command_window.dispose
end
#--------------------------------------------------------------------------
def update_command_selection
@help_window.set_text("")
if Input.trigger?(Input::B)
Sound.play_cancel
$scene = Scene_Map.new
elsif Input.trigger?(Input::C)
case @command_window.index
when 0
Sound.play_decision
@command_window.active = false
@dummy_window.visible = false
@buy_window.active = true
@buy_window.visible = true
@buy_window.refresh
@status_window.visible = true
when 1
Sound.play_decision
$scene = Scene_Map.new
end
end
end
#--------------------------------------------------------------------------
def update_buy_selection
@status_window.item = @buy_window.skill
if Input.trigger?(Input::B)
Sound.play_cancel
@command_window.active = true
@dummy_window.visible = true
@buy_window.active = false
@buy_window.visible = false
@status_window.visible = false
@status_window.item = nil
return
end
if Input.trigger?(Input::C)
@item = @buy_window.skill
@price = SKILL_SHOP.skill_price(@item.id)
enabled = (@price <= $game_party.gold)
if not enabled
Sound.play_buzzer
else
Sound.play_decision
show_target_window
end
end
end
#--------------------------------------------------------------------------
def update_target_selection
if Input.trigger?(Input::B)
Sound.play_cancel
hide_target_window
elsif Input.trigger?(Input::C)
@actor = $game_party.members[@status_window.index]
can = false
lv = false
can_learn = SKILL_SHOP.skill_buy(@actor.id)
id = @item.id
for i in 0...can_learn.size
if can_learn[i][0] == id
can = true
if can_learn[i][1] <= @actor.level
lv = true
else
lv = false
end
break
else
can = false
end
end
enabled = (can and lv and @actor.learn?(@item))
if not enabled
Sound.play_buzzer
else
learn_target(@item.id)
end
end
end
#--------------------------------------------------------------------------
def learn_target(skill_id)
Sound.play_shop
unless SKILL_SHOP::Wait_Lv_Up
@actor.learn_skill(skill_id)
else
@actor.learn_le_skill(skill_id)
end
$game_party.lose_gold(@price)
@buy_window.refresh
@gold_window.refresh
@status_window.refresh
hide_target_window
end
#--------------------------------------------------------------------------
def show_target_window
@buy_window.active = false
@status_window.active = true
@status_window.index = 0
end
#--------------------------------------------------------------------------
def hide_target_window
@buy_window.active = true
@status_window.active = false
@status_window.index =- 1
end
end