主题贴:【 物品合成系统物品分类增强版 v1.1 [8月17日更新] 】(原帖)(目录
叶子  (2005-12-31 14:28:32)
[B]物品合成系统完美版[/B]原作者:Deke



(-_-||)废话不多说...介绍一下这个系统的功能(抑或是这个增强版扩展的功能?)
原来的完美版脚本的制作界面是把所有东西都放在同一个界面。
这个完美版增强版脚本可以自定义不同分类界面,召唤特定界面时只会显示特定分类的成品。
例如可以把物品分成裁缝成品,制皮成品等几类,召唤特定界面,就只会显示本分类成品。
当然也可以召唤全物品界面,显示全部成品。



v1.1更新说明:
修正了返回界面时不显示成品的BUG
修正了材料大于8个不显示的BUG
描绘物品美化
自动检测能否合成




使用方法:
复制全部脚本内容,在Main脚本之前按insert,插入此脚本全部内容



设置方法:
看脚本注释说明



冲突可能:
[B]物品合成系统完美版[/B],都用了这个就不用那个了吧◎_◎
其余未知,冲突可能不大



[HTML]#==============================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
# 欢迎访问www.66RPG.com
# 梦想世界,在你手中
#==============================================================================
#
# Sample master list for crafting script (物品分类增强版) v1.1
# written by Deke
# 增强:叶子
#
# 12-30-2005 v1.0
# 8-17-2006 v1.1
# 修正了返回界面时不显示成品的BUG
# 修正了材料大于8个不显示的BUG
# 描绘物品美化
# 自动检测能否合成
#============================================================================================
# 简介:
# 这是一个很不错的合成物品系统,可以通过游戏的过程,不断学习可以合成的
# 物品方法。
# ------
# 增强版补充说明:
# 在这个增强版中,可以对成品进行手动分类。
# 成品增加了一个分类属性。
# 这个分类纯粹是按自己的意愿,没有规定第几类必须是什么。
# 召唤特定分类的界面,就只会看到特定分类的成品。
#
# 例如:
# 使用脚本$scene = Scene_Craft.new(1),
# 出来的界面就只会显示成品分类为1的东西
# 同样道理,使用脚本$scene = Scene_Craft.new(2),
# 出来的界面就只会显示成品分类为2的东西
#
# 如果使用脚本$scene = Scene_Craft.new或$scene = Scene_Craft.new(0)来召唤界面
# 就可以看到所有成品。
#
# 注意:不要弄混淆“成品种类”和“成品分类”
# 成品种类是指成品是普通物品(0),防具(1)或武器(2)
# 成品分类是指此物品的自定义分类
#
#
# 使用方法:
# 1、召唤界面:使用脚本$scene = Scene_Craft.new(分类的数字)
# 例如:使用脚本$scene = Scene_Craft.new(1),出来分类1的界面
#
# 2、学习合成:$game_party.learn_recipe(合成项目)
#
# 2.1、其实这个脚本可以使同一成品有不同配方
#
# 就这样说可能解释得不清楚,先来解释一下脚本学习配方的原理:
# $game_party.learn_recipe(合成项目)的处理过程并不是直接学习这个配方,
# 而是在配方库中找到和合成项目成品相同的配方。
#
# 如果配方库中有两个配方成品相同的话,配方版本就变得重要。
# $game_party.learn_recipe(合成项目,配方版本)
# 配方版本为1的话,学到的配方就是@recipe_list[xx]中与合成项目成品相同且数字最小的配方
# 配方版本为2的话,学到的配方就是数字第二小的配方
# 在上面这个脚本语句中,不填配方版本的话就默认为1
#
# 2.2、忘记配方:$game_party.forget_recipe(合成项目)
# 2.21、同样道理,这个语句也可以写配方版本
# $game_party.forget_recipe(合成项目,配方版本)
# 配方版本定义见2.1
#
# 2.3、配方版本不能乱填!例如游戏中某一个配方的成品是唯一的,与所有其它配方的成品都不相同
# 那么学习的时候就不用填配方版本。
# 如果这时在配方版本填了2的话,就有可能学不到或者忘不了(-_-||)
#
#
# 3、合成定义:
# 这个合成脚本可以定义两种合成物品。一种是预先定义好了的,就像下面这样,
# 直接写在这里就可以,另一种是在学习之前现场定义。
#
# 4、举例
# 4.1、学会recipe_list[1]定义的合成:$game_party.learn_recipe($game_temp.recipe_list[1])
# 注意,一行如果输入不下,在(的后面或[的后面按回车换行,否则可能出错
#
# 4.2、在游戏中临时定义一种合成,让玩家学会。使用事件中的脚本如下,
# 脚本:
# 材料 = [$game_variables[1],$game_variables[2]] #——材料编号是变量1、2的编号
# 材料种类 = [0,0] #——材料是物品
# 材料数量 = [$game_variables[3],$game_variables[4]] #——需要材料数量是变量3、4的编号
# 成品 = $game_variables[5] #——获得结果编号是5
# 成品种类 = 1 #——成品是防具类
# 成品分类 = 1 #——这一项不写的话默认为0
# $game_party.learn_recipe(Game_Recipe.new(材料,材料种类,材料数量,成品,成品种类,成品分类))
# 上面这条语句的成品分类这一项不写也行,这样它就默认为0了。
# (也就是此物品没有分类,不会在分类菜单中出现)
# 省略成品分类的脚本语句可以像下面这样写:
# $game_party.learn_recipe(Game_Recipe.new(材料,材料种类,材料数量,成品,成品种类))
#
#===========================================================================================
……
长篇帖子,完整版请原地址查看

叶子 :
[b]以下引用[u]golden124于2007-9-26 11:30:58[/u]的发言:[/b]

紧急求助!!
有问题!!!!
测试的时候提示:

见自由提问区回答..
>golden124 :
紧急求助!!
有问题!!!!
测试的时候提示:
[CODE] #----------------------------------------------------------
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@data = []
for i in 0...$game_party.recipes.size
#@craft_type为0时就显示全部物品
#不为0时就显示对应物品
if @craft_type == 0
@data.push($game_party.recipes[i])
elsif $game_party.recipes[i].craft_type == @craft_type
@data.push($game_party.recipes[i])
end
end
@item_max = @data.size
if @item_max > 0
self.contents = Bitmap.new(width - 32, row_max * 32)
self.contents.font.name = "黑体" # = "黑体"
self.contents.font.size = 18 # = 18
for i in 0...@item_max
x = 16
y = i * 32
able = true
for ingredient in 0...@data[i].ingredients.size
case @data[i].ingredient_types[ingredient]
when 0
count = $game_party.item_number(@data[i].ingredients[ingredient])
when 1
count = $game_party.armor_number(@data[i].ingredients[ingredient])
when 2
count = $game_party.weapon_number(@data[i].ingredients[ingredient])
end
if count < @data[i].quantities[ingredient]
able = false
break
end
end
draw_item_name(@data[i].item, x, y, able)
end
end
end[/CODE]
里面的方式SIZE未定义,应该是指for i in 0...$game_party.recipes.size
>gpra8764 :
不明白的人飘过!
>as15 :
397行发生了NoMethodError
我用了:任务窗口、敌我血槽、得失物品提示、菜单存档、显示地图名字
>叶子 :
[b]以下引用[u]Dark乾坤于2007-4-7 15:57:25[/u]的发言:[/b]

为什么只能显示5个配方

测试了一下,能显示不止5个o.o
看一下是不是没有学习到那个配方?只有学习到的配方才显示
>Dark乾坤 :
为什么只能显示5个配方[B][/B]
>幻の飞鱼 :
开始还说是谁在挖坟- -
看了一下
原来是我自己挖的
不过这东西满好用

PS:有一个小问题
材料全部用完的时候不会立刻刷新成灰色
尤其是用了鼠标系统以后
偶稍微修改以下刷新就完美
>白起 :
为什么没范例?
>幻の飞鱼 :
研究注释了许久
终于在漏了的地方发现怎么用的 - -1
>cyzy1987 :
一个很郁闷的问题




叶子把 # 2 号合成物品设定表中的[成品分类][成]字写成了[物]

好像会引起分类混乱吧
>z391xyrs :
哦哦..
原来如此..
抱歉抱歉,
原来我把原本的合成完美版和这个搞混了..
真的很不好意思^^"
谢谢大大~
>叶子 :
[b]以下引用[i]z391xyrs于2006-1-5 18:29:38[/i]的发言:[/b]

请问有没有能够单独显示类型1(道具)的状态呢?
本脚本似乎只有全部.防具.武器这三种单独形式的物品分类状态。
[/quote]
汗...是不是因为注释比较乱呢...
先看这个:
[QUOTE]# 注意:不要弄混淆“成品种类”和“成品分类”
# 成品种类是指成品是普通物品(0),防具(1)或武器(2)
# 成品分类是指此物品的自定义分类
例如:
$scene = Scene_Craft.new(10)
召唤出来的界面只会显示成品分类(注意!不是种类)为10的物品。
成品分类你分多少类也可以,没有限制。
>沉默的米饭团 :
有的.你在显示后面不加括号和数字就行了
>z391xyrs :
请问有没有能够单独显示类型1(道具)的状态呢?
本脚本似乎只有全部.防具.武器这三种单独形式的物品分类状态。
>ZhengMC :
个人验证,这套脚本运行现在已经没有问题。很实用!

至今暂未见脚本冲突。

谢谢叶子为我们提供如此好的脚本。
>叶子 :
(-_-||)
非常不好意思............
那是我为了测试DEBUG用的东东.............
立刻编辑一下主题..改回正确的

>ZhengMC :
可以用!谢谢楼主!

但有一个问题。在每次调用合成窗口会出现类似的对话框
http://bbs.boxbbs.com/PostAttachment.aspx?PostID=2269094&AttachmentID=119279&guid=95bc4f83

http://bbs.boxbbs.com/PostAttachment.aspx?PostID=2269096&AttachmentID=119280&guid=41139fc3

如果是分类的也是差不多这类提示会闪现一下再进入窗口。有什么办法解决吗?
>叶子 :
[b]以下引用[i]orochi2k于2005-12-31 15:18:00[/i]的发言:[/b]

偶依旧冲突着...继续郁闷地自己造脚本中-_-0

这个脚本的冲突可能性貌似很小...只是Game_Temp和Game_Party的初始化方法用了别名,其余都是新类..
整合也应该很容易...

>orochi2k :
偶依旧冲突着...继续郁闷地自己造脚本中-_-0