#==============================================================================
#
# ▼ Yanfly Engine Ace - 装备系统 v1.06
# -- 最后更新: 2014.05.01
# -- 使用难度: 普通, 困难
# -- 需要脚本: 无
#
#==============================================================================
$imported = {} if $imported.nil?
$imported["YEA-AceEquipEngine"] = true
#==============================================================================
# ▼ Updates
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# 2014.05.01 - Bug Fixed: Refresh Equip Item List when change slot.
# 2012.02.02 - Bug Fixed: Crash when changing classes to different equip slots.
# 2012.01.22 - Bug Fixed: <equip slot> notetags updated to factor in spaces.
# 2012.01.05 - Compatibility Update: Equip Dynamic Stats
# 2011.12.30 - Bug Fixed: Stats didn't update.
# 2011.12.23 - Script efficiency optimized.
# 2011.12.18 - Script efficiency optimized.
# 2011.12.13 - Started Script and Finished.
#
#==============================================================================
# ▼ 介绍
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# 默认的装备系统十分基础,本脚本为装备系统添加诸多功能,如指定角色装备类型(包
# 括角色可以拥有多个相同的装备类型)、设定新的装备类型(这里说的装备类型不同于
# 于数据库中的武器类型、护甲类型,可以说装备类型包括武器、防具、饰品等)。
#
#==============================================================================
# ▼ 安装方式
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# 打开脚本编辑器,将本脚本拷贝/复制到一个在▼ 插件脚本之下▼ Main之上的新
# 脚本页/槽中.记得保存你的工程以使脚本生效.
#
# -----------------------------------------------------------------------------
# 角色备注 - 在数据库-角色中可以使用的备注.
# -----------------------------------------------------------------------------
# <装备槽>
# 内容
# 内容
# </装备槽>
# 设定该角色可装备的装备类型,及装备类型的顺序。将"内容"替换为该角色可用的装备
# 类型名称(本脚本下面),该设定的优先级大于数据库中设定的优先级。为了说明清楚,
# 你也可以将"内容"替换为"装备类型: x"x为0-4间的任意一个数字,数字代表的意思下面
# 有讲。
#
# <初始装备: x>
# <初始装备: x, x>
# 设定该角色的初始装备类型,x为装备类型的id。在数据库中没有新装备槽的初始装备设
# 定时可以使用。
#
# <固定装备: x>
# <固定装备: x, x>
# 固定该角色的x号装备类型。
#
# <禁用装备: x>
# <禁用装备: x, x>
# 禁用该角色的x号装备类型。意思是装备无法放置在该装备槽中。
#
# -----------------------------------------------------------------------------
# 职业备注 - 在数据库-职业中可以使用的备注.
# -----------------------------------------------------------------------------
# <装备槽>
# 内容
# 内容
# </装备槽>
# 设定该职业可装备的装备类型,及装备类型的顺序。将"内容"替换为该职业可用的装备
# 类型名称(本脚本下面),该设定的优先级大于数据库中设定的优先级。为了说明清楚,
# 你也可以将"内容"替换为"装备类型: x"x为0-4间的任意一个数字,数字代表的意思下面
# 有讲
#
# <固定装备: x>
# <固定装备: x, x>
# 固定该职业的x号装备类型。
#
# <禁用装备: x>
# <禁用装备: x, x>
# 禁用该职业的x号装备类型。意思是装备无法放置在该装备槽中。
#
# -----------------------------------------------------------------------------
# 武器备注 - 在数据库-武器中可以使用的备注.
# -----------------------------------------------------------------------------
# <固定装备: x>
# <固定装备: x, x>
# 装备该武器后固定x号装备类型。
#
# <禁用装备: x>
# <禁用装备: x, x>
# 装备该武器后禁用该武器的x号装备类型。意思是装备无法放置在该装备槽中。
#
# -----------------------------------------------------------------------------
# 护甲备注 - 在数据库-护甲中可以使用的备注.
# -----------------------------------------------------------------------------
# <装备类型: x>
# <装备类型: 文本>
# x替换为装备名称(本脚本下面)或装备类型ID,此备注将该护甲归类/视为x号装备类型
#
# <固定装备: x>
# <固定装备: x, x>
# 装备该护甲后固定x号装备类型。
#
# <禁用装备: x>
# <禁用装备: x, x>
# 装备该护甲后禁用该武器的x号装备类型。意思是装备无法放置在该装备槽中。
#
# -----------------------------------------------------------------------------
# 状态备注 - 在数据库-状态中可以使用的备注.
# -----------------------------------------------------------------------------
# <固定装备: x>
# <固定装备: x, x>
# 获得该状态后固定x号装备类型。(配合脚本"战斗中更换装备")
#
# <禁用装备: x>
# <禁用装备: x, x>
# 获得该状态后禁用x号装备类型。意思是装备无法放置在该装备槽中。(配合脚本"战斗中
# 更换装备")
#
#==============================================================================
# ▼ 兼容性
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# 本脚本仅为RPG Maker VX Ace编写.极不可能在无任何修改的情况下运行于RPG Maker VX.
#
#==============================================================================
module YEA
module EQUIP
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# - 通用装备设置 -
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# 调整默认装备设置,你可以添加新的装备类型,建议不要改得太多,以免出现问题。
# 下面是默认id对应的装备类型
#
# ID 装备类型
# --- ------------
# 0 武器
# 1 盾牌
# 2 头盔
# 3 铠甲
# 4 饰品
#
# 无论你怎么修改以下顺序,武器双持的情况都是不变的:第二个装备类型变为武器(0).
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# 下面这个数组是默认的可用装备槽即其顺序,应用于一切未通过备注自定义装备槽
# 的角色。
DEFAULT_BASE_SLOTS = [0,0,0,0,0,1,2,3,4,5,5,5,5,5]
# 下面这个哈希表用来添加新的装备类型(id为 4+). 你还可以设定其能否被移除,
# 是否能通过"最强装备"自动选择最强的装备。
TYPES ={
# TypeID => ["类型名称", 能否移除?, 能否使用"最强装备"?],
0 => [ "心灵", true, false],
1 => [ "上衣", false, false],
2 => [ "下装", false, false],
3 => [ "袜子", false, false],
4 => [ "鞋子", false, false],
5 => [ "其它", false, false],
8 => [ "N技能", true, false],
9 => [ "M技能", true, false],
10 => [ "G技能", true, false],
11 => [ "品质", false, false],
} # 别动这个括号.
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# - 装备指令列表 -
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# 在这里调整装备指令列表(甚至是移除某些指令)下面是指令的解释:
#
# -------------------------------------------------------------------------
# :指令 解释
# -------------------------------------------------------------------------
# :equip 激活装备选择窗口. 默认.
# :optimize 自动为角色选择最强装备. 默认.
# :clear 移除角色身上的全部装备. 默认
#
# 以上为默认的全部可用指令。
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# 在数组中放置可用的指令.
COMMAND_LIST =[
:equip,
# :optimize,
:clear,
# :custom1,
# :custom2,
] # 不要动这个括号.
#--------------------------------------------------------------------------
# - 装备自定义指令 -
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# 对于那些希望通过本脚本来为装备场景添加特殊效果的人,可以使用下面的哈希表
# 来管理装备场景中的指令。你可以使用开关来禁用/隐藏指令。如果你不想把指令与
# 开关相关联,把开关设定为0就行。
#--------------------------------------------------------------------------
CUSTOM_EQUIP_COMMANDS ={
# :指令 => [ "文本", 启用开关, 显示开关, 处理方法],
:custom1 => [ "自定义名称", 0, 0, :command_name1],
:custom2 => [ "自定义文本", 0, 0, :command_name2],
} # 不要动这个括号.
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# - 其他窗口设置 -
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# 调整装备窗口的视觉效果.
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# 改变右下角能力值数字的字体大小
STATUS_FONT_SIZE = 20
# 在更换装备指令中,移除装备指令的图标和文本设定
REMOVE_EQUIP_ICON = 0
REMOVE_EQUIP_TEXT = "<移除装备>"
# 装备槽中,无装备的图标和文本.
NOTHING_ICON = 0
NOTHING_TEXT = "<空>"
end # EQUIP
end # YEA
#==============================================================================
# ▼ 编辑以下内容可能会出现电脑损坏、死机,电脑主人脑袋爆炸、昏迷、死亡或口臭
# 所以编辑了后果自负。
#==============================================================================
module YEA
module REGEXP
module BASEITEM
EQUIP_SLOTS_ON = /<(?:EQUIP_SLOTS|装备槽)>/i
EQUIP_SLOTS_OFF = /<\/(?:EQUIP_SLOTS|装备槽)>/i
EQUIP_TYPE_INT = /<(?:EQUIP_TYPE|装备类型):[ ]*(\d+)>/i
EQUIP_TYPE_STR = /<(?:EQUIP_TYPE|装备类型):[ ]*(.*)>/i
STARTING_GEAR = /<(?:STARTING_GEAR|初始装备):[ ](\d+(?:\s*,\s*\d+)*)>/i
FIXED_EQUIP = /<(?:FIXED_EQUIP|固定装备):[ ](\d+(?:\s*,\s*\d+)*)>/i
SEALED_EQUIP = /<(?:SEALED_EQUIP|禁用装备):[ ](\d+(?:\s*,\s*\d+)*)>/i
end # BASEITEM
end # REGEXP
end # YEA
#==============================================================================
# ■ Vocab
#==============================================================================
module Vocab
#--------------------------------------------------------------------------
# overwrite method: self.etype
#--------------------------------------------------------------------------
def self.etype(etype)
return $data_system.terms.etypes[etype] if [0,1,2,3,4].include?(etype)
return YEA::EQUIP::TYPES[etype][0] if YEA::EQUIP::TYPES.include?(etype)
return ""
end
end # Vocab
#==============================================================================
# ■ Icon
#==============================================================================
module Icon
#--------------------------------------------------------------------------
# self.remove_equip
#--------------------------------------------------------------------------
def self.remove_equip; return YEA::EQUIP::REMOVE_EQUIP_ICON; end
#--------------------------------------------------------------------------
# self.nothing_equip
#--------------------------------------------------------------------------
def self.nothing_equip; return YEA::EQUIP::NOTHING_ICON; end
end # Icon
#==============================================================================
# ■ Numeric
#==============================================================================
class Numeric
#--------------------------------------------------------------------------
# new method: group_digits
#--------------------------------------------------------------------------
unless $imported["YEA-CoreEngine"]
def group; return self.to_s; end
end # $imported["YEA-CoreEngine"]
end # Numeric
#==============================================================================
# ■ DataManager
#==============================================================================
module DataManager
#--------------------------------------------------------------------------
# alias method: load_database
#--------------------------------------------------------------------------
class <<self; alias load_database_aee load_database; end
def self.load_database
load_database_aee
load_notetags_aee
end
#--------------------------------------------------------------------------
# new method: load_notetags_aee
#--------------------------------------------------------------------------
def self.load_notetags_aee
groups = [$data_actors, $data_classes, $data_weapons, $data_armors,
$data_states]
for group in groups
for obj in group
next if obj.nil?
obj.load_notetags_aee
end
end
end
end # DataManager
#==============================================================================
# ■ RPG::BaseItem
#==============================================================================
class RPG::BaseItem
#--------------------------------------------------------------------------
# public instance variables
#--------------------------------------------------------------------------
attr_accessor :base_equip_slots
attr_accessor :fixed_equip_type
attr_accessor :sealed_equip_type
attr_accessor :extra_starting_equips
#--------------------------------------------------------------------------
# common cache: load_notetags_aee
#--------------------------------------------------------------------------
def load_notetags_aee
@base_equip_slots = []
@equip_slots_on = false
@fixed_equip_type = []
@sealed_equip_type = []
@extra_starting_equips = []
#---
self.note.split(/[\r\n]+/).each { |line|
case line
#---
when YEA::REGEXP::BASEITEM::EQUIP_SLOTS_ON
next unless self.is_a?(RPG::Actor) ||self.is_a?(RPG::Class)
@equip_slots_on = true
when YEA::REGEXP::BASEITEM::EQUIP_SLOTS_OFF
next unless self.is_a?(RPG::Actor) ||self.is_a?(RPG::Class)
@equip_slots_on = false
#---
when YEA::REGEXP::BASEITEM::STARTING_GEAR
next unless self.is_a?(RPG::Actor)
$1.scan(/\d+/).each { |num|
@extra_starting_equips.push(num.to_i) if num.to_i > 0 }
when YEA::REGEXP::BASEITEM::FIXED_EQUIP
$1.scan(/\d+/).each { |num|
@fixed_equip_type.push(num.to_i) if num.to_i > 0 }
when YEA::REGEXP::BASEITEM::SEALED_EQUIP
$1.scan(/\d+/).each { |num|
@sealed_equip_type.push(num.to_i) if num.to_i > 0 }
#---
when YEA::REGEXP::BASEITEM::EQUIP_TYPE_INT
next unless self.is_a?(RPG::Armor)
@etype_id = [1, $1.to_i].max
when YEA::REGEXP::BASEITEM::EQUIP_TYPE_STR
next unless self.is_a?(RPG::Armor)
for key in YEA::EQUIP::TYPES
id = key[0]
next if YEA::EQUIP::TYPES[id][0].upcase != $1.to_s.upcase
@etype_id = [1, id].max
break
end
#---
else
if @equip_slots_on
case line.upcase
when /装备类型[ ](\d+)/i, /装备类型:[ ](\d+)/i
id = $1.to_i
@base_equip_slots.push(id) if [0,1,2,3,4].include?(id)
@base_equip_slots.push(id) if YEA::EQUIP::TYPES.include?(id)
when /WEAPON/i
@base_equip_slots.push(0)
when /SHIELD/i
@base_equip_slots.push(1)
when /HEAD/i
@base_equip_slots.push(2)
when /BODY/i, /ARMOR/i, /ARMOUR/i
@base_equip_slots.push(3)
when /ETC/i, /OTHER/i, /ACCESSOR/i
@base_equip_slots.push(4)
else
text = line.upcase.delete(" ")
for key in YEA::EQUIP::TYPES
id = key[0]
next if YEA::EQUIP::TYPES[id][0].upcase.delete(" ")!= text
@base_equip_slots.push(id)
break
end
end
end
end
} # self.note.split
#---
return unless self.is_a?(RPG::Class)
if @base_equip_slots.empty?
@base_equip_slots = YEA::EQUIP::DEFAULT_BASE_SLOTS.clone
end
end
end # RPG::BaseItem
#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
#--------------------------------------------------------------------------
# public instance variables
#--------------------------------------------------------------------------
attr_accessor :eds_actor
attr_accessor :scene_equip_index
attr_accessor :scene_equip_oy
end # Game_Temp
#==============================================================================
# ■ Game_BaseItem
#==============================================================================
class Game_BaseItem
#--------------------------------------------------------------------------
# public instance variables
#--------------------------------------------------------------------------
attr_accessor :item_id
end # Game_BaseItem
#==============================================================================
# ■ Game_BattlerBase
#==============================================================================
class Game_BattlerBase
#--------------------------------------------------------------------------
# alias method: equip_type_fixed?
#--------------------------------------------------------------------------
alias game_battlerbase_equip_type_fixed_aee equip_type_fixed?
def equip_type_fixed?(etype_id)
return true if fixed_etypes.include?(etype_id) if actor?
return game_battlerbase_equip_type_fixed_aee(etype_id)
end
#--------------------------------------------------------------------------
# alias method: equip_type_sealed?
#--------------------------------------------------------------------------
alias game_battlerbase_equip_type_sealed_aee equip_type_sealed?
def equip_type_sealed?(etype_id)
return true if sealed_etypes.include?(etype_id) if actor?
return game_battlerbase_equip_type_sealed_aee(etype_id)
end
end # Game_BattlerBase
#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# alias method: init_equips
#--------------------------------------------------------------------------
alias game_actor_init_equips_aee init_equips
def init_equips(equips)
game_actor_init_equips_aee(equips)
equip_extra_starting_equips
end
#--------------------------------------------------------------------------
# new method: equip_extra_starting_equips
#--------------------------------------------------------------------------
def equip_extra_starting_equips
for equip_id in actor.extra_starting_equips
armour = $data_armors[equip_id]
next if armour.nil?
etype_id = armour.etype_id
next unless equip_slots.include?(etype_id)
slot_id = empty_slot(etype_id)
@equips[slot_id].set_equip(etype_id == 0, armour.id)
end
refresh
end
#--------------------------------------------------------------------------
# overwrite method: equip_slots
#--------------------------------------------------------------------------
def equip_slots
return equip_slots_dual if dual_wield?
return equip_slots_normal
end
#--------------------------------------------------------------------------
# new method: equip_slots_normal
#--------------------------------------------------------------------------
def equip_slots_normal
return self.actor.base_equip_slots if self.actor.base_equip_slots != []
return self.class.base_equip_slots
end
#--------------------------------------------------------------------------
# new method: equip_slots_dual
#--------------------------------------------------------------------------
def equip_slots_dual
array = equip_slots_normal.clone
array[1] = 0 if array.size >= 2
return array
end
#--------------------------------------------------------------------------
# new method: fixed_etypes
#--------------------------------------------------------------------------
def fixed_etypes
array = []
array |= self.actor.fixed_equip_type
array |= self.class.fixed_equip_type
for equip in equips
next if equip.nil?
array |= equip.fixed_equip_type
end
for state in states
next if state.nil?
array |= state.fixed_equip_type
end
return array
end
#--------------------------------------------------------------------------
# new method: sealed_etypes
#--------------------------------------------------------------------------
def sealed_etypes
array = []
array |= self.actor.sealed_equip_type
array |= self.class.sealed_equip_type
for equip in equips
next if equip.nil?
array |= equip.sealed_equip_type
end
for state in states
next if state.nil?
array |= state.sealed_equip_type
end
return array
end
#--------------------------------------------------------------------------
# alias method: change_equip
#--------------------------------------------------------------------------
alias game_actor_change_equip_aee change_equip
def change_equip(slot_id, item)
if item.nil? && !@optimize_clear
etype_id = equip_slots[slot_id]
return unless YEA::EQUIP::TYPES[etype_id][1]
elsif item.nil? && @optimize_clear
etype_id = equip_slots[slot_id]
return unless YEA::EQUIP::TYPES[etype_id][2]
end
@equips[slot_id] = Game_BaseItem.new if @equips[slot_id].nil?
game_actor_change_equip_aee(slot_id, item)
end
#--------------------------------------------------------------------------
# overwrite method: optimize_equipments
#--------------------------------------------------------------------------
def optimize_equipments
$game_temp.eds_actor = self
@optimize_clear = true
clear_equipments
@optimize_clear = false
equip_slots.size.times do |i|
next if !equip_change_ok?(i)
next unless can_optimize?(i)
items = $game_party.equip_items.select do |item|
item.etype_id == equip_slots[i] &&
equippable?(item) && item.performance >= 0
end
change_equip(i, items.max_by {|item| item.performance })
end
$game_temp.eds_actor = nil
end
#--------------------------------------------------------------------------
# new method: can_optimize?
#--------------------------------------------------------------------------
def can_optimize?(slot_id)
etype_id = equip_slots[slot_id]
return YEA::EQUIP::TYPES[etype_id][2]
end
#--------------------------------------------------------------------------
# alias method: force_change_equip
#--------------------------------------------------------------------------
alias game_actor_force_change_equip_aee force_change_equip
def force_change_equip(slot_id, item)
@equips[slot_id] = Game_BaseItem.new if @equips[slot_id].nil?
game_actor_force_change_equip_aee(slot_id, item)
end
#--------------------------------------------------------------------------
# alias method: weapons
#--------------------------------------------------------------------------
alias game_actor_weapons_aee weapons
def weapons
anti_crash_equips
return game_actor_weapons_aee
end
#--------------------------------------------------------------------------
# alias method: armors
#--------------------------------------------------------------------------
alias game_actor_armors_aee armors
def armors
anti_crash_equips
return game_actor_armors_aee
end
#--------------------------------------------------------------------------
# alias method: equips
#--------------------------------------------------------------------------
alias game_actor_equips_aee equips
def equips
anti_crash_equips
return game_actor_equips_aee
end
#--------------------------------------------------------------------------
# new method: equips
#--------------------------------------------------------------------------
def anti_crash_equips
for i in 0...@equips.size
next unless @equips[i].nil?
@equips[i] = Game_BaseItem.new
end
end
end # Game_Actor
#==============================================================================
# ■ Game_Interpreter
#==============================================================================
class Game_Interpreter
#--------------------------------------------------------------------------
# overwrite method: change equip
#--------------------------------------------------------------------------
def command_319
actor = $game_actors[@params[0]]
return if actor.nil?
if @params[1] == 0 && @params[2] != 0
item = $data_weapons[@params[2]]
return unless actor.equip_slots.include?(0)
slot_id = actor.empty_slot(0)
elsif @params[2] != 0
item = $data_armors[@params[2]]
return unless actor.equip_slots.include?(item.etype_id)
slot_id = actor.empty_slot(item.etype_id)
else
slot_id = @params[1]
end
actor.change_equip_by_id(slot_id, @params[2])
end
end # Game_Interpreter
#==============================================================================
# ■ Window_EquipStatus
#==============================================================================
class Window_EquipStatus < Window_Base
#--------------------------------------------------------------------------
# overwrite method: initialize
#--------------------------------------------------------------------------
def initialize(dx, dy)
super(dx, dy, window_width, Graphics.height - dy)
@actor = nil
@temp_actor = nil
refresh
end
#--------------------------------------------------------------------------
# overwrite method: window_width
#--------------------------------------------------------------------------
def window_width; return Graphics.width * 2 / 5; end
#--------------------------------------------------------------------------
# overwrite method: refresh
#--------------------------------------------------------------------------
def refresh
contents.clear
8.times {|i| draw_item(0, line_height * i, i) }
end
#--------------------------------------------------------------------------
# overwrite method: draw_item
#--------------------------------------------------------------------------
def draw_item(dx, dy, param_id)
draw_background_colour(dx, dy)
draw_param_name(dx + 4, dy, param_id)
draw_current_param(dx + 4, dy, param_id) if @actor
drx = (contents.width + 22) / 2
draw_right_arrow(drx, dy)
draw_new_param(drx + 22, dy, param_id) if @temp_actor
reset_font_settings
end
#--------------------------------------------------------------------------
# new method: draw_background_colour
#--------------------------------------------------------------------------
def draw_background_colour(dx, dy)
colour = Color.new(0, 0, 0, translucent_alpha/2)
rect = Rect.new(dx+1, dy+1, contents.width - 2, line_height - 2)
contents.fill_rect(rect, colour)
end
#--------------------------------------------------------------------------
# overwrite method: draw_param_name
#--------------------------------------------------------------------------
def draw_param_name(dx, dy, param_id)
contents.font.size = YEA::EQUIP::STATUS_FONT_SIZE
change_color(system_color)
draw_text(dx, dy, contents.width, line_height, Vocab::param(param_id))
end
#--------------------------------------------------------------------------
# overwrite method: draw_current_param
#--------------------------------------------------------------------------
def draw_current_param(dx, dy, param_id)
change_color(normal_color)
dw = (contents.width + 22) / 2
draw_text(0, dy, dw, line_height, @actor.param(param_id).group, 2)
reset_font_settings
end
#--------------------------------------------------------------------------
# overwrite method: draw_new_param
#--------------------------------------------------------------------------
def draw_new_param(dx, dy, param_id)
contents.font.size = YEA::EQUIP::STATUS_FONT_SIZE
new_value = @temp_actor.param(param_id)
change_color(param_change_color(new_value - @actor.param(param_id)))
draw_text(0, dy, contents.width-4, line_height, new_value.group, 2)
reset_font_settings
end
end # Window_EquipStatus
#==============================================================================
# ■ Window_EquipCommand
#==============================================================================
class Window_EquipCommand < Window_HorzCommand
#--------------------------------------------------------------------------
# overwrite method: make_command_list
#--------------------------------------------------------------------------
def make_command_list
for command in YEA::EQUIP::COMMAND_LIST
case command
when :equip
add_command(Vocab::equip2, :equip)
# when :optimize
# add_command(Vocab::optimize, :optimize)
when :clear
add_command(Vocab::clear, :clear)
else
process_custom_command(command)
end
end
end
#--------------------------------------------------------------------------
# process_ok
#--------------------------------------------------------------------------
def process_ok
$game_temp.scene_equip_index = index
$game_temp.scene_equip_oy = self.oy
super
end
#--------------------------------------------------------------------------
# new method: process_custom_command
#--------------------------------------------------------------------------
def process_custom_command(command)
return unless YEA::EQUIP::CUSTOM_EQUIP_COMMANDS.include?(command)
show = YEA::EQUIP::CUSTOM_EQUIP_COMMANDS[command][2]
continue = show <= 0 ? true : $game_switches[show]
return unless continue
text = YEA::EQUIP::CUSTOM_EQUIP_COMMANDS[command][0]
switch = YEA::EQUIP::CUSTOM_EQUIP_COMMANDS[command][1]
enabled = switch <= 0 ? true : $game_switches[switch]
add_command(text, command, enabled)
end
#--------------------------------------------------------------------------
# overwrite method: window_width
#--------------------------------------------------------------------------
def window_width; return 160; end
#--------------------------------------------------------------------------
# overwrite method: contents_width
#--------------------------------------------------------------------------
def contents_width; return width - standard_padding * 2; end
#--------------------------------------------------------------------------
# overwrite method: contents_height
#--------------------------------------------------------------------------
def contents_height
ch = height - standard_padding * 2
return [ch - ch % item_height, row_max * item_height].max
end
#--------------------------------------------------------------------------
# overwrite method: visible_line_number
#--------------------------------------------------------------------------
def visible_line_number; return 4; end
#--------------------------------------------------------------------------
# overwrite method: col_max
#--------------------------------------------------------------------------
def col_max; return 1; end
#--------------------------------------------------------------------------
# overwrite method: item_rect
#--------------------------------------------------------------------------
def item_rect(index)
rect = Rect.new
rect.width = item_width
rect.height = item_height
rect.x = index % col_max * (item_width + spacing)
rect.y = index / col_max * item_height
rect
end
#--------------------------------------------------------------------------
# overwrite method: ensure_cursor_visible
#--------------------------------------------------------------------------
def ensure_cursor_visible
self.top_row = row if row < top_row
self.bottom_row = row if row > bottom_row
end
#--------------------------------------------------------------------------
# overwrite method: cursor_down
#--------------------------------------------------------------------------
def cursor_down(wrap = false)
if index < item_max - col_max || (wrap && col_max == 1)
select((index + col_max) % item_max)
end
end
#--------------------------------------------------------------------------
# overwrite method: cursor_up
#--------------------------------------------------------------------------
def cursor_up(wrap = false)
if index >= col_max || (wrap && col_max == 1)
select((index - col_max + item_max) % item_max)
end
end
#--------------------------------------------------------------------------
# overwrite method: process_pageup
#--------------------------------------------------------------------------
def process_pageup
Sound.play_cursor
Input.update
deactivate
call_handler(:pageup)
end
#--------------------------------------------------------------------------
# overwrite method: process_pagedown
#--------------------------------------------------------------------------
def process_pagedown
Sound.play_cursor
Input.update
deactivate
call_handler(:pagedown)
end
end # Window_EquipCommand
#==============================================================================
# ■ Window_EquipSlot
#==============================================================================
class Window_EquipSlot < Window_Selectable
#--------------------------------------------------------------------------
# overwrite method: initialize
#--------------------------------------------------------------------------
def initialize(dx, dy, dw)
super(dx, dy, dw, Graphics.height - dy)
@actor = nil
refresh
end
#--------------------------------------------------------------------------
# overwrite method: window_height
#--------------------------------------------------------------------------
def window_height; return self.height; end
#--------------------------------------------------------------------------
# overwrite method: visible_line_number
#--------------------------------------------------------------------------
def visible_line_number; return item_max; end
#--------------------------------------------------------------------------
# overwrite method: refresh
#--------------------------------------------------------------------------
def refresh
create_contents
super
end
#--------------------------------------------------------------------------
# overwrite method: draw_item
#--------------------------------------------------------------------------
def draw_item(index)
return unless @actor
rect = item_rect_for_text(index)
change_color(system_color, enable?(index))
draw_text(rect.x, rect.y, 92, line_height, slot_name(index))
item = @actor.equips[index]
dx = rect.x + 92
dw = contents.width - dx - 24
if item.nil?
draw_nothing_equip(dx, rect.y, false, dw)
else
draw_item_name(item, dx, rect.y, enable?(index), dw)
end
end
#--------------------------------------------------------------------------
# new method: draw_nothing_equip
#--------------------------------------------------------------------------
def draw_nothing_equip(dx, dy, enabled, dw)
change_color(normal_color, enabled)
draw_icon(Icon.nothing_equip, dx, dy, enabled)
text = YEA::EQUIP::NOTHING_TEXT
draw_text(dx + 24, dy, dw - 24, line_height, text)
end
end # Window_EquipSlot
#==============================================================================
# ■ Window_EquipItem
#==============================================================================
class Window_EquipItem < Window_ItemList
#--------------------------------------------------------------------------
# overwrite method: col_max
#--------------------------------------------------------------------------
def col_max; return 1; end
#--------------------------------------------------------------------------
# overwrite method: slot_id=
#--------------------------------------------------------------------------
def slot_id=(slot_id)
return if @slot_id == slot_id
@slot_id = slot_id
@last_item = nil
self.oy = 0
refresh
end
#--------------------------------------------------------------------------
# overwrite method: draw_item
#--------------------------------------------------------------------------
def draw_item(index)
item = @data[index]
rect = item_rect(index)
rect.width -= 4
if item.nil?
draw_remove_equip(rect)
return
end
dw = contents.width - rect.x - 24
draw_item_name(item, rect.x, rect.y, enable?(item), dw)
draw_item_number(rect, item)
end
#--------------------------------------------------------------------------
# new method: draw_remove_equip
#--------------------------------------------------------------------------
def draw_remove_equip(rect)
draw_icon(Icon.remove_equip, rect.x, rect.y)
text = YEA::EQUIP::REMOVE_EQUIP_TEXT
rect.x += 24
rect.width -= 24
draw_text(rect, text)
end
#--------------------------------------------------------------------------
# overwrite method: include?
#--------------------------------------------------------------------------
def include?(item)
if item.nil? && !@actor.nil?
etype_id = @actor.equip_slots[@slot_id]
return YEA::EQUIP::TYPES[etype_id][1]
end
return true if item.nil?
return false unless item.is_a?(RPG::EquipItem)
return false if @slot_id < 0
return false if item.etype_id != @actor.equip_slots[@slot_id]
return @actor.equippable?(item)
end
#--------------------------------------------------------------------------
# overwrite method: enable?
#--------------------------------------------------------------------------
def enable?(item)
if item.nil? && !@actor.nil?
etype_id = @actor.equip_slots[@slot_id]
return YEA::EQUIP::TYPES[etype_id][1]
end
return @actor.equippable?(item)
end
#--------------------------------------------------------------------------
# new method: show
#--------------------------------------------------------------------------
def show
@last_item = 0
update_help
super
end
#--------------------------------------------------------------------------
# overwrite method: update_help
#--------------------------------------------------------------------------
def update_help
super
return if @actor.nil?
return if @status_window.nil?
return if @last_item == item
@last_item = item
temp_actor = Marshal.load(Marshal.dump(@actor))
temp_actor.force_change_equip(@slot_id, item)
@status_window.set_temp_actor(temp_actor)
end
end # Window_EquipItem
#==============================================================================
# ■ Window_EquipActor
#==============================================================================
class Window_EquipActor < Window_Base
#--------------------------------------------------------------------------
# initialize
#--------------------------------------------------------------------------
def initialize(dx, dy)
super(dx, dy, window_width, fitting_height(4))
@actor = nil
end
#--------------------------------------------------------------------------
# window_width
#--------------------------------------------------------------------------
def window_width; return Graphics.width - 160; end
#--------------------------------------------------------------------------
# actor=
#--------------------------------------------------------------------------
def actor=(actor)
return if @actor == actor
@actor = actor
refresh
end
#--------------------------------------------------------------------------
# refresh
#--------------------------------------------------------------------------
def refresh
contents.clear
return unless @actor
draw_actor_face(@actor, 0, 0)
draw_actor_simple_status(@actor, 108, line_height / 2)
end
end # Window_EquipActor
#==============================================================================
# ■ Scene_Equip
#==============================================================================
class Scene_Equip < Scene_MenuBase
#--------------------------------------------------------------------------
# overwrite method: create_status_window
#--------------------------------------------------------------------------
def create_status_window
wx = Graphics.width - (Graphics.width * 2 / 5)
wy = @help_window.height + 120
@status_window = Window_EquipStatus.new(wx, wy)
@status_window.viewport = @viewport
@status_window.actor = @actor
end
#--------------------------------------------------------------------------
# overwrite method: create_command_window
#--------------------------------------------------------------------------
def create_command_window
wx = 0
wy = @help_window.height
ww = 160
@command_window = Window_EquipCommand.new(wx, wy, ww)
@command_window.viewport = @viewport
@command_window.help_window = @help_window
if !$game_temp.scene_equip_index.nil?
@command_window.select($game_temp.scene_equip_index)
@command_window.oy = $game_temp.scene_equip_oy
end
$game_temp.scene_equip_index = nil
$game_temp.scene_equip_oy = nil
@command_window.set_handler(:equip, method(:command_equip))
# @command_window.set_handler(:optimize, method(:command_optimize))
@command_window.set_handler(:clear, method(:command_clear))
@command_window.set_handler(:cancel, method(:return_scene))
@command_window.set_handler(:pagedown, method(:next_actor))
@command_window.set_handler(:pageup, method(:prev_actor))
process_custom_equip_commands
create_actor_window
end
#--------------------------------------------------------------------------
# new method: create_actor_window
#--------------------------------------------------------------------------
def create_actor_window
wy = @help_window.height
@actor_window = Window_EquipActor.new(@command_window.width, wy)
@actor_window.viewport = @viewport
@actor_window.actor = @actor
end
#--------------------------------------------------------------------------
# new method: process_custom_equip_commands
#--------------------------------------------------------------------------
def process_custom_equip_commands
for command in YEA::EQUIP::COMMAND_LIST
next unless YEA::EQUIP::CUSTOM_EQUIP_COMMANDS.include?(command)
called_method = YEA::EQUIP::CUSTOM_EQUIP_COMMANDS[command][3]
@command_window.set_handler(command, method(called_method))
end
end
#--------------------------------------------------------------------------
# overwrite method: create_slot_window
#--------------------------------------------------------------------------
def create_slot_window
wx = 0
wy = @command_window.y + @command_window.height
ww = Graphics.width - @status_window.width
@slot_window = Window_EquipSlot.new(wx, wy, ww)
@slot_window.viewport = @viewport
@slot_window.help_window = @help_window
@slot_window.status_window = @status_window
@slot_window.actor = @actor
@slot_window.set_handler(:ok, method(:on_slot_ok))
@slot_window.set_handler(:cancel, method(:on_slot_cancel))
end
#--------------------------------------------------------------------------
# overwrite method: create_item_window
#--------------------------------------------------------------------------
def create_item_window
wx = @slot_window.x
wy = @slot_window.y
ww = @slot_window.width
wh = @slot_window.height
@item_window = Window_EquipItem.new(wx, wy, ww, wh)
@item_window.viewport = @viewport
@item_window.help_window = @help_window
@item_window.status_window = @status_window
@item_window.actor = @actor
@item_window.set_handler(:ok, method(:on_item_ok))
@item_window.set_handler(:cancel, method(:on_item_cancel))
@slot_window.item_window = @item_window
@item_window.hide
end
#--------------------------------------------------------------------------
# alias method: command_optimize
#--------------------------------------------------------------------------
# alias scene_equip_command_optimize_aee command_optimize
# def command_optimize
# scene_equip_command_optimize_aee
# @actor_window.refresh
# end
#--------------------------------------------------------------------------
# alias method: command_clear
#--------------------------------------------------------------------------
alias scene_equip_command_clear_aee command_clear
def command_clear
scene_equip_command_clear_aee
@actor_window.refresh
end
#--------------------------------------------------------------------------
# alias method: on_slot_ok
#--------------------------------------------------------------------------
alias scene_equip_on_slot_ok_aee on_slot_ok
def on_slot_ok
scene_equip_on_slot_ok_aee
@slot_window.hide
@item_window.refresh
@item_window.show
end
#--------------------------------------------------------------------------
# alias method: on_item_ok
#--------------------------------------------------------------------------
alias scene_equip_on_item_ok_aee on_item_ok
def on_item_ok
scene_equip_on_item_ok_aee
@actor_window.refresh
@slot_window.show
@item_window.hide
end
#--------------------------------------------------------------------------
# alias method: on_item_cancel
#--------------------------------------------------------------------------
alias scene_equip_on_item_cancel_aee on_item_cancel
def on_item_cancel
scene_equip_on_item_cancel_aee
@slot_window.show
@item_window.hide
end
#--------------------------------------------------------------------------
# alias method: on_actor_change
#--------------------------------------------------------------------------
alias scene_equip_on_actor_change_aee on_actor_change
def on_actor_change
scene_equip_on_actor_change_aee
@actor_window.actor = @actor
end
#--------------------------------------------------------------------------
# new method: command_name1
#--------------------------------------------------------------------------
def command_name1
# Do nothing.
end
#--------------------------------------------------------------------------
# new method: command_name2
#--------------------------------------------------------------------------
def command_name2
# Do nothing.
end
end # Scene_Equip
#==============================================================================
#
# ▼ End of File
#
#==============================================================================