#==============================================================================
# RMVX魔法技能商店 Ver 2.0
#==============================================================================
# 作者: Nechigawara Sanzenin 翻译:一塌糊涂
# 警告!! : 仅限RMVX使用!! 不支持RMXP!!
#==============================================================================
# RMVX版 魔法技能商店
#==============================================================================
#Version Log
#==============================================================================
#2.0 Add Level requirement - Change Hero Select Window
#==============================================================================
=begin
使用方法:
使用脚本 "$skill_shop =[Id of Skill]"
用于设定可出售的技能.
使用脚本 "$scene = Scene_Skill_Shop.new"
呼出魔法商店.
举例:
$skill_shop = [1,2,3,6,7]
$scene = Scene_Skill_Shop.new
即,12367号技能出售,并且呼出该魔法商店
可以在 "# Learn Text" 下面修改适合您游戏的文字.
可以在 "# Price Data" 下面修改技能价格.
(Add Price Here处添加价格,未设定技能的默认出售价格为100)
可以在 "# Hero Data" 下面设定角色可习得的技能及学习必要等级.
例如可以这样设定Hero Date
[技能编号, 学习必要等级]
=end
#==============================================================================
#module SKILL_SHOP
#==============================================================================
module SKILL_SHOP
# Learn Text
How_Learn = "队伍信息"
Can_Learn = "可学习"
Can_Learn_Lv = "必要等级"
Cant_Learn = "不可学习"
Learnt = "已习得"
Teach = "学习技能"
Cancel = "离开"
# Price Data
PRICE = {
# for No Set Price
0 => 100,
# Add Price Here
1 => 150,
2 => 550,
3 => 450,
# End
}
# Hero Data
SKILL_BUY = {
# Add what skill can hero buy Here
# [ID of skill,Level]
1 => [
[1,4],[2,3],[3,1],
],
2 => [
[1,4],[2,3],[3,1],
],
# End
}
# Add Price
def self.skill_price(id)
if PRICE.include?(id)
return PRICE[id]
else
return PRICE[0]
end
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 learn?(skill)
learn = skill_learn?(skill)
if learn == true
return false
else
return true
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 [email]0...@skill_shop_goods.size[/email]
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
name = actor.character_name
index = actor.character_index
size = contents.text_size(actor.name).width
draw_character(name, index, x + 20 + size , y + 30)
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 [url=home.php?mod=space&uid=370741]@Index[/url] < 0
self.cursor_rect.empty
elsif [url=home.php?mod=space&uid=370741]@Index[/url] < @item_max
y = WLH * (2 + @index * 2)
self.cursor_rect.set(0, y - 4, contents.width,34)
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)
[url=home.php?mod=space&uid=95897]@actor[/url] = $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
@actor.learn_skill(skill_id)
$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