设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3030|回复: 3
打印 上一主题 下一主题

[原创发布] 【非卖品在商店不显示】新研究:0价格物品不显示

[复制链接]

Lv1.梦旅人

梦石
0
星屑
55
在线时间
71 小时
注册时间
2010-9-20
帖子
104
跳转到指定楼层
1
发表于 2015-1-6 15:47:56 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 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, 下载次数: 12)

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

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

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

002.jpg

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

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

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

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

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

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

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

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

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

Project1.rar

187.98 KB, 下载次数: 112

Lv1.梦旅人

梦石
0
星屑
55
在线时间
71 小时
注册时间
2010-9-20
帖子
104
2
 楼主| 发表于 2015-1-6 15:53:38 | 只看该作者
好奇怪啊贴出来的脚本变成斜体而且还在句末丢失了几个字符╮(╯_╰)╭

点评

用[code][/code]  发表于 2015-1-9 22:15
果然发帖还不太熟练啊,放到代码框里就好多了~  发表于 2015-1-8 13:53
请使用代码框  发表于 2015-1-6 17:17
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

3
发表于 2015-1-9 22:15:45 | 只看该作者
某种程度上感觉没原版好用···0R的东西有时候多了还是想清理下背包的···可你不让卖···

点评

无法买卖的东西自然无法查看价格,相比原脚本一个个输入id我觉得还是这样方便得多  发表于 2015-1-11 12:37
注意 if $data_items[i].price==0 这个判断句,不一定是0G,你可以设置成任意价格,然后把所有非买卖物品定义为那个价格,比如1G,999999G  发表于 2015-1-11 12:36
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

4
发表于 2015-1-10 10:04:11 | 只看该作者
本帖最后由 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?

点评

↓↓当然可以,只要你作为数据段的标志不同就可以。应该可以减小冲突。  发表于 2015-1-11 22:44
我现在倾向于Module···  发表于 2015-1-11 20:53
我在想是不是其他用到split的物品脚本都可以用这个方法改写呢?比如装备附带技能,在读取了装备名字中的技能代号之后再把这部分名字删除之类的  发表于 2015-1-11 19:53
这的确是一个更好的方法呢,也不用担心和split打架了 (~ ̄▽ ̄)→ 以前为了整合两个split硬生生让每个物品名字split两次orz。。。  发表于 2015-1-11 19:51
我记得我以前发的整合是很干脆的全部用了split······现在想想真是罪过(名字栏根本不够写啊)  发表于 2015-1-10 14:51
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-9-20 11:06

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表