class Game_Party
Item = Struct.new(:id, :n, :type)
attr_reader :items
alias add_initialize_xdrs initialize
def initialize
add_initialize_xdrs
@items = [nil]
end
#--------------------------------------------------------------------------
# ● 获取物品的所持数
# item_id : 物品 ID
#--------------------------------------------------------------------------
def item_number(item_id)
n = 0
for item in @items
next if item.nil?
n += item.n if item.id == item_id and item.type == 0
end
return n
end
#--------------------------------------------------------------------------
# ● 增加物品 (减少)
# item_id : 物品 ID
# n : 个数
#--------------------------------------------------------------------------
def gain_item(item_id, n)
return if n == 0
if item_id > 0
if n > 0
1.upto(@items.size-1){|i|
item = @items[i]
next if item.type != 0
if item.id == item_id
add = [99 - item.n, n].min;item.n += add;n -= add;break if n == 0
end}
@items.push(Item.new(item_id, n, 0)) if n > 0
else
(@items.size-1).downto(1){|i|
item = @items[i]
next if item.type != 0
if item.id == item_id
add = [n.abs, item.n].min;item.n -= add;n += add; break if n == 0
@items.delete(item) if item.n == 0
end}
end
end
end
end
#=============================================================================
class Window_Item < Window_Selectable
#--------------------------------------------------------------------------
# ● 获取物品
#--------------------------------------------------------------------------
def item
case @data[self.index].type
when 0 :$data_items[@data[self.index].id]
end
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@data = []
# 添加物品
for item in $game_party.items
next if item.nil?
next if $game_temp.in_battle and item.type != 0
@data.push(item)
end
# 如果项目数不是 0 就生成位图、重新描绘全部项目
@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
#--------------------------------------------------------------------------
# ● 描绘项目
# index : 项目编号
#--------------------------------------------------------------------------
def draw_item(index)
number = @data[index].n
item = case @data[index].type
when 0 :$data_items[@data[index].id]
end
if item.is_a?(RPG::Item) and
$game_party.item_can_use?(item.id)
self.contents.font.color = normal_color
else
self.contents.font.color = disabled_color
end
x = 4 + index % 2 * (288 + 32)
y = index / 2 * 32
rect = Rect.new(x, y, self.width / @column_max - 32, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
bitmap = RPG::Cache.icon(item.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, item.name, 0)
self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
end
end