赞 | 13 |
VIP | 9 |
好人卡 | 3 |
积分 | 50 |
经验 | 27577 |
最后登录 | 2024-4-5 |
在线时间 | 1004 小时 |
Lv4.逐梦者 【欧皇】
- 梦石
- 3
- 星屑
- 2046
- 在线时间
- 1004 小时
- 注册时间
- 2013-8-19
- 帖子
- 3486
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 欧买歌 于 2015-7-22 17:39 编辑
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
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
这个脚本原作者是@芯☆淡茹水 我本想私信他,但是他却说他工作忙没时间改,但我也只是个新手,所以来提问区伸手了。
这个脚本是类似网游的背包,99个物品为一组,满了99个,就会多出一格放相同的物品,以此类推。
但是我测试了下却发现了BUG
1.X物品为0时打开背包看却发现物品还在而且数量显示0
2.物品数大于99时不能买东西
3.一次性获得大于99的物品(或者购买),获得的东西将不会分组。
我这个新手不知道怎么改啊,求触~! |
|