#这里是我的一个解决方案,理论上可以插入任意数量的slot,
#只要在一开始slot名称定义数组里加进去就能自动识别。
#不过有个问题没解决,就是在装备列表里,超出画面的项就不会画出来,
#是个系统原来就没考虑的小bug,尚未解决,其他都OK了。
#使用方法:在数据库中装备的note里,加入这么一行:“<装备位置 x>”,
#其中x就是装备的slot id,这个id就是Vocab::ESlots数组里的序号。
module Vocab
# 替换系统装备部位,随意增加多少个都行
ESlots = ["0武器",
"1盾牌",
"2头盔",
"3铠甲",
"4饰品",
"5外套",
"6裤子",
"7内衣",
"8内裤",
"9鞋子"
]
end
module DataManager
#--------------------------------------------------------------------------
# ● 修改$data_armors
#--------------------------------------------------------------------------
def self.modify_data_armors
$data_armors.each_with_index {|armor,index|
if armor
armor.note =~ /<装备位置\W*\s+(\d+)>/
armor.etype_id = $1.to_i if $1
end
}
end
#--------------------------------------------------------------------------
# ● 修改self.init
#--------------------------------------------------------------------------
def self.init
@last_savefile_index = 0
load_database
create_game_objects
setup_battle_test if $BTEST
modify_data_armors # 修改数据
end
end
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ● 获取装备栏的数组
#--------------------------------------------------------------------------
def equip_slots
return Array.new(Vocab::ESlots.size) {|i| i==1 ? 0 : i} if dual_wield? # 双持武器
return Array.new(Vocab::ESlots.size) {|i| i} # 普通
end
end
class Window_EquipSlot < Window_Selectable
#--------------------------------------------------------------------------
# ● 获取列数
#--------------------------------------------------------------------------
def col_max
return 2
end
#--------------------------------------------------------------------------
# ● 获取项目数
#--------------------------------------------------------------------------
def item_max
return (get_item_slots.size)
end
#--------------------------------------------------------------------------
# ● 获取装备slot数组(跳过不可装备的slot)
#--------------------------------------------------------------------------
def get_item_slots
arr = []
if @actor
for i in ([email]0..@actor.equip_slots.size[/email]-1)
if enable?(i); arr.push(i); end
end
end #if @actor
return arr
end
#--------------------------------------------------------------------------
# ● 获取装备栏的名字
#--------------------------------------------------------------------------
def slot_name(index)
if @actor
return Vocab::ESlots[index]
else; return ""
end
end
#--------------------------------------------------------------------------
# ● 绘制所有项目
#--------------------------------------------------------------------------
def draw_all_items
return unless @actor
item_max.times {|index|
i = get_item_slots[index]
rect = item_rect_for_text(index)
#~ draw_icon(168, rect.x, rect.y) #画slot的图标
change_color(system_color)
draw_text(rect.x, rect.y, 48, line_height, slot_name(i)) #写slot名称
draw_item_name(@actor.equips[i], rect.x + 48, rect.y) #画装备的item
}
end
end