本帖最后由 gonglinyuan 于 2015-8-24 22:44 编辑
物品本身就是按照在数据库中的ID号来排序的,最简单的实现方式是把稀有度大的物品排在数据库的前面。
如果真的要改变默认排序方式的话可以这样:
#-------------------------------------------------------------------------- # ● 刷新 #-------------------------------------------------------------------------- def refresh if self.contents != nil self.contents.dispose self.contents = nil end @data = [] # 添加报务 for i in 1...$data_items.size if $game_party.item_number(i) > 0 @data.push($data_items[i]) end end # 在战斗中以外添加武器、防具 unless $game_temp.in_battle for i in 1...$data_weapons.size if $game_party.weapon_number(i) > 0 @data.push($data_weapons[i]) end end for i in 1...$data_armors.size if $game_party.armor_number(i) > 0 @data.push($data_armors[i]) end end end # 按照价格排序开始 @data.sort! do |a, b| if a.price > b.price -1 elsif a.price < b.price +1 else a <=> b end 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
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@data = []
# 添加报务
for i in 1...$data_items.size
if $game_party.item_number(i) > 0
@data.push($data_items[i])
end
end
# 在战斗中以外添加武器、防具
unless $game_temp.in_battle
for i in 1...$data_weapons.size
if $game_party.weapon_number(i) > 0
@data.push($data_weapons[i])
end
end
for i in 1...$data_armors.size
if $game_party.armor_number(i) > 0
@data.push($data_armors[i])
end
end
end
# 按照价格排序开始
@data.sort! do |a, b|
if a.price > b.price
-1
elsif a.price < b.price
+1
else
a <=> b
end
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
用这段代码替换Window_Item的Refresh方法(应该在29行附近)。这是按照价格从大到小排序(price),如果要按照别的排序(比如你说的稀有度),将price一栏改成对应的即可。 |