Project1

标题: 【非卖品在商店不显示】新研究:0价格物品不显示 [打印本页]

作者: Mr.Faint    时间: 2015-1-6 15:47
标题: 【非卖品在商店不显示】新研究:0价格物品不显示
本帖最后由 Mr.Faint 于 2015-1-6 03:30 编辑

原脚本只能在非卖品的三个类别(道具、物品、防具)中写入对应的id编号才能实现在商店中不显示。
这点对于制作中途才开始使用这个脚本的朋友没来说很辛苦,如果非卖品较多,输入id很容易遗漏,工作量也大。
于是我在原脚本的基础上修改处了这个【买卖价格为0的物品不在商店中显示】的脚本。

脚本内容:

RUBY 代码复制
  1. #==============================================================================
  2. # 本脚本来自[url]www.66rpg.com[/url],转载和使用请保留此声明
  3. #==============================================================================
  4. # ■ Window_ShopSell
  5. #------------------------------------------------------------------------------
  6. #  商店画面、浏览显示可以卖掉的商品的窗口。
  7. #==============================================================================
  8.  
  9. class Window_ShopSell < Window_Selectable
  10. #--------------------------------------------------------------------------
  11. # ● 初始化对像
  12. #--------------------------------------------------------------------------
  13.  
  14.    def initialize
  15.  
  16.      item=[]
  17.      @not_for_sell_item=[]
  18.      for i in 1...$data_items.size
  19.      if $data_items[i].price==0
  20.        @not_for_sell_item=@not_for_sell_item+[i]
  21.      end
  22.    end
  23.  
  24.      weapon=[]
  25.      @not_for_sell_weapon=[]
  26.      for i in 1...$data_weapons.size
  27.      if $data_weapons[i].price==0
  28.        @not_for_sell_weapon=@not_for_sell_weapon+[i]
  29.      end
  30.    end
  31.  
  32.      armor=[]
  33.      @not_for_sell_armor=[]
  34.      for i in 1...$data_armors.size
  35.      if $data_armors[i].price==0
  36.        @not_for_sell_armor=@not_for_sell_armor+[i]
  37.      end
  38.    end
  39.  
  40.   super(0, 128, 640, 352)
  41.   @column_max = 2
  42.   refresh
  43.   self.index = 0
  44. end
  45.  
  46. #--------------------------------------------------------------------------
  47. # ● 刷新
  48. #--------------------------------------------------------------------------
  49. def refresh
  50.   if self.contents != nil
  51.     self.contents.dispose
  52.     self.contents = nil
  53.   end
  54.   @data = []
  55.   for i in 1...$data_items.size
  56.     if $game_party.item_number(i) > 0
  57.     @data.push($data_items[i]) unless @not_for_sell_item.include?(i)
  58.     end
  59.   end
  60.   for i in 1...$data_weapons.size
  61.     if $game_party.weapon_number(i) > 0
  62.     @data.push($data_weapons[i]) unless @not_for_sell_weapon.include?(i)
  63.     end
  64.   end
  65.   for i in 1...$data_armors.size
  66.     if $game_party.armor_number(i) > 0
  67.     @data.push($data_armors[i]) unless @not_for_sell_armor.include?(i)
  68.     end
  69.   end
  70.   # 如果项目数不是 0 就生成位图、描绘全部项目
  71.   @item_max = @data.size
  72.   if @item_max > 0
  73.     self.contents = Bitmap.new(width - 32, row_max * 32)
  74.     for i in 0...@item_max
  75.     draw_item(i)
  76.     end
  77.   end
  78. end
  79. end
  80. #==============================================================================
  81. # 本脚本来自[url]www.66rpg.com[/url],转载和使用请保留此声明
  82. #==============================================================================

001.jpg (113.39 KB, 下载次数: 13)

第三个道具【完全恢复剂】的价格为0

第三个道具【完全恢复剂】的价格为0

002.jpg (202.23 KB, 下载次数: 13)

002.jpg

003.jpg (201.35 KB, 下载次数: 17)

第一个防具【铜盾】的价格为0

第一个防具【铜盾】的价格为0

004.jpg (92.23 KB, 下载次数: 15)

身上有回复剂、超回复剂、完全回复剂、铜剑、铁剑、铜盾、铁盾

身上有回复剂、超回复剂、完全回复剂、铜剑、铁剑、铜盾、铁盾

005.jpg (756.76 KB, 下载次数: 14)

只有价格不为0的回复剂、超回复剂、铁剑、铁盾在出售时显示

只有价格不为0的回复剂、超回复剂、铁剑、铁盾在出售时显示

Project1.rar

187.98 KB, 下载次数: 112


作者: Mr.Faint    时间: 2015-1-6 15:53
好奇怪啊贴出来的脚本变成斜体而且还在句末丢失了几个字符╮(╯_╰)╭
作者: chd114    时间: 2015-1-9 22:15
某种程度上感觉没原版好用···0R的东西有时候多了还是想清理下背包的···可你不让卖···
作者: RyanBern    时间: 2015-1-10 10:04
本帖最后由 RyanBern 于 2015-1-10 10:05 编辑

首先对插件脚本的改动值得鼓励。
在RGSS1系统中,价格为0的物品本来就是不让卖的,如果在卖出物品的窗口的话,你会发现这种物品显示为灰色,点击会发出冻结SE。
不过,即使是这样,这种不能卖的东西还会是在窗口中显示出来,要想让它不显示,就要用原来的那个脚本。
LZ解决的问题无非就是一个,就是把在Window_ShopSell中不显示的物品的定义从脚本编辑器中转移到了数据库中,其实这个工作还是有必要的。在编辑数据时会反复从数据库和脚本之间切换,确实很麻烦。
不过,如果把价格作为是否可以卖出的标志,会导致这样一个问题,如果你希望只允许买入某个物品(当然这个物品的价格不能是0),但是又不允许卖出它,那这种方法就有些问题,因此应该寻找其他的办法。
我们利用数据编辑器,将物品的名称或者说明上附加这个物品是否能卖出的标志,就可以完成任务。下面的脚本可以参考。
RUBY 代码复制
  1. module RPG
  2.   class Item
  3.     Regex_NFS = /%\[nfs\]/
  4.     alias rb_name_20150110 name
  5.     def name
  6.       text = rb_name_20150110
  7.       return text.gsub(Regex_NFS, "")
  8.     end
  9.     def not_for_sell?
  10.       return Regex_NFS === @name
  11.     end
  12.   end
  13. end

这里只做了物品的情况,使用的话,将不允许被卖出的物品名称上附加%[nfs]即可。
在窗口上显示的话就可以这样:
RUBY 代码复制
  1. @data << $data_items[i] if $game_party.item_number(i) > 0 && !$data_items[i].not_for_sell?





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1