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

Project1

 找回密码
 注册会员
搜索
查看: 2065|回复: 32

[推荐问答] 【自问答】如何制作技能消耗物品的效果

[复制链接]

Lv4.逐梦者 (版主)

梦石
0
星屑
5283
在线时间
4646 小时
注册时间
2013-6-21
帖子
3483

开拓者贵宾剧作品鉴家

发表于 2015-9-28 19:49:06 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 RyanBern 于 2015-9-28 20:02 编辑

我要做一个技能消耗物品的效果,就是使用一个技能之前要判断相应物品的数量,如果相应物品数量充足,则可以正常发动此技能;如果相应物品的数量不足,那么在技能栏中此技能显示为灰色,不能发动。这样的效果我该如何去做?

此贴为自问答帖,楼主将自己给出一个完整的回答。自问答帖的规定在本区早已经写在发布指南中,但是至今没有这样的帖子。因此,我自己编写这样的帖子,也好让大家看看如何写这种帖子。由于自问答帖有教学性质,给出的解答一定要详细明确,当然,得到的奖励也是非常丰厚的。有关自问答帖详细的说明,请参考本区的发帖指南。


首先,你应该规定一个技能消耗哪一种道具,以及消耗的数量是多少,这一点并不难做到。为了简单起见,我们假设一个技能只消耗一种物品,对于消耗多种物品的情况在这里不予考虑。这些有关技能消耗物品的数据可以写在脚本编辑器中。打开脚本编辑器,在 Main 组脚本的上方插入一个新脚本,名称随意。之后输入下图的代码:
1.PNG
上图代码中,绿色的文字只是为了表示每一句话是什么意思,也是提示你如何书写一组技能消耗物品的对应关系,实际制作的时候可以不必写出。注意,图中每一行都表示一项设置,最后一项设置的后面没有逗号',',而其他的设置后面都跟一个逗号。
总之,如果你要新加入一组数据,就输入:

技能ID => {物品ID => 消耗数量}

并且注意上文中提到的逗号的事情,这样你就完成了数据的设置。

当然,只是设置了数据是不行的,我们必须加入更多的代码才行。现在使用技能的判定并没有考虑消耗物品的情况,我们必须手动加上。
在刚才的脚本后面,紧接着输入以下内容:
2.PNG
具体脚本的机制不用掌握,照着图中的代码输入,别输错了就行。
之后,找到脚本编辑器中名为 Game_Battler3 的脚本,点开马上就看到了有关技能使用的判定,我们加上下面这句话(新添加的话已经用高亮标出):
3.PNG
这句话的意思就是如果技能的物品条件不满足,则将此技能判定为不能使用。

设置完了使用判定,我们还需要补上最后一个地方。利用上文提到的办法,道具数量不足时,技能不能发动,显示为灰色。但是技能使用过后,对应的道具应该减少才是。这一部分的设计非常简单,我们只需要制作一个公共事件,事件的内容为消耗道具,然后把公共事件和技能关联即可。以“1号技能消耗3个2号物品”为例,我们应该进行的设置如下:
4.PNG
5.PNG

这样设置就大功告成了!打开你的RMXP测试看看有没有效果吧!

评分

参与人数 2星屑 +335 梦石 +1 收起 理由
怪蜀黍 + 300 + 1 发布奖励
无忧谷主幻 + 35 手动认可奖励(大雾)

查看全部评分

Lv2.观梦者

梦石
0
星屑
503
在线时间
789 小时
注册时间
2014-7-1
帖子
576

开拓者

发表于 2015-9-28 19:58:53 | 显示全部楼层
本帖最后由 jiushiainilip19 于 2015-9-28 20:32 编辑

测试 可以 {:2_268:}
学习使我疲劳,打工使我疲惫,恋爱使我伤身,吸烟伤我肺腑,饮酒损我形象,旅游使我破费,月底不见铜板,只有在论坛里面看看各种大佬才能使我进去
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止访问)

梦石
0
星屑
88
在线时间
631 小时
注册时间
2014-8-4
帖子
3600
发表于 2015-9-29 19:40:21 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
5
在线时间
21 小时
注册时间
2015-10-4
帖子
1
发表于 2015-10-6 00:23:47 | 显示全部楼层
不能用==

点评

请在本层说明一下报错原因或者是提供有问题的工程。  发表于 2015-10-6 09:15
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1062
在线时间
1005 小时
注册时间
2011-4-30
帖子
1510
发表于 2015-10-6 08:44:49 | 显示全部楼层
我觉得 一些脚本还是简单介绍一下这么写的原因比较好,讲清楚原理可以让人更方便使用.其实就是一句话的事情..


点评

好吧.其实原理看起来挺简单的,  发表于 2015-10-6 14:17
这种帖子类似于百度经验什么的,你只要照着做基本都能成功。鉴于本区伸手党略多,所以讲原理的效果比较差。当初发明【自问答】的初衷也是这个  发表于 2015-10-6 09:15
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
510
在线时间
387 小时
注册时间
2012-1-20
帖子
219

开拓者

发表于 2015-10-6 13:44:32 | 显示全部楼层
好东西!但是怎么不发代码出来……

点评

你要的话我可以给你  发表于 2015-10-8 12:17
因为至少需要你照着做一遍,代码都很少。  发表于 2015-10-6 14:28
支持一下下我的这个游戏吧~~
大雄与空间军团
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
71 小时
注册时间
2010-9-20
帖子
104
发表于 2015-10-8 11:40:00 | 显示全部楼层
本帖最后由 Mr.Faint 于 2015-10-7 19:42 编辑

做出了乾坤一掷的判定{:2_265:}
2.jpg
3.jpg

点评

这个改起来比较麻烦,你可以查看一下Window_Skill里面是怎么描述的。如果还是不行那就发帖询问吧  发表于 2015-10-9 16:50
噗。。。粗心之下少了一个return ORZ 第八、第九行中间应增加一条 return true  发表于 2015-10-8 11:45
不过想请问一下关于金钱消耗替换sp消耗应该怎么做呢?就是技能栏内显示的消耗数值为金钱。  发表于 2015-10-8 11:43
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
163
在线时间
45 小时
注册时间
2015-11-8
帖子
20
发表于 2016-1-13 19:50:24 | 显示全部楼层
本帖最后由 RyanBern 于 2016-1-13 21:43 编辑

问一下,为什么在战斗测试的时候提示第46行发生错误 nomethod Error undefined nomethod '□' for nil :nilclass
代码如下:
RUBY 代码复制打印
  1. skill_items = {
  2.   28 => {41=>1},              #28号技能消耗41号物品1个
  3.   29 => {41=>2},              #29号技能消耗41号物品2个
  4.   30 => {41=>1},              #30号技能消耗41号物品1个
  5.   31 => {41=>2},              #31号技能消耗41号物品2个
  6.   32 => {46=>1},              #32号技能消耗46号物品1个,以此类推
  7.   38 => {41=>2},
  8.   39 => {41=>4},
  9.   40 => {41=>2},
  10.   41 => {41=>4},
  11.   42 => {46=>2},
  12.   49 => {40=>1},
  13.   55 => {40=>1},
  14.   60 => {42=>1,46=>1},        #60号技能消耗42号物品1个和46号物品1个
  15.   61 => {42=>2},
  16.   62 => {46=>3},
  17.   66 => {42=>2,46=>2},
  18.   67 => {42=>4},
  19.   68 => {46=>5},
  20.   71 => {41=>1},
  21.   72 => {46=>1},
  22.   73 => {40=>1},
  23.   74 => {48=>1},
  24.   75 => {46=>2},
  25.   77 => {41=>2},
  26.   78 => {46=>2},
  27.   79 => {40=>2},
  28.   80 => {48=>2},
  29.   81 => {46=>4},
  30.   86 => {49=>1},
  31.   87 => {49=>1},
  32.   91 => {40=>2},
  33.   92 => {42=>1},
  34.   93 => {43=>1},
  35.   94 => {41=>1},
  36.   95 => {44=>1},
  37.   96 => {49=>2},
  38.   97 => {49=>2},
  39.   98 => {40=>1},
  40.   101 => {40=>4}
  41. }
  42.  
  43. class Game_Battler
  44.   def item_condition?(skill_id)
  45.     skill_items = skill_items[skill_id]
  46.     return true if skill_items.nil?
  47.     skill_items.keys.each do |key|
  48.       return false if $game_party.item_number(key) < skill_items[key]
  49.     end
  50.     return true
  51.   end
  52. end

点评

常量的设定请首字母大写,否则不能成功设置。Skill_Items = {...}  发表于 2016-1-13 21:44
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
163
在线时间
45 小时
注册时间
2015-11-8
帖子
20
发表于 2016-1-14 14:18:40 | 显示全部楼层
灰色的 发表于 2016-1-13 19:50
问一下,为什么在战斗测试的时候提示第46行发生错误 nomethod Error undefined nomethod '□' for nil :nil ...

非常感谢您能帮助我解决这个问题
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1283
在线时间
63 小时
注册时间
2014-6-21
帖子
67
发表于 2017-11-2 10:18:10 | 显示全部楼层
skill_Items = {
  25 => {32 => 2},              #25号技能消耗32号物品2个
  29 => {41 => 2 },              #29号技能消耗41号物品2个
  30 => {41 => 1},              #30号技能消耗41号物品1个
  40 => {40 => 4}
}

class Game_Battler
  def item_condition?(skill_id)
    skill_items = Skill_Items[skill_id]
    return true if skill_Items.nil?
    skill_items.keys.each do |key|
      return false if $game_party.item_number(key) < skill_items[key]
    end
    return true
  end
end

我的是第十行报错

点评

不用看了。skill_Items = {这里要是大写的才能使用。下面的 skill_items = Skill_Items[skill_id]等号后面和上面那个是一个  发表于 2017-11-2 12:23
我下面截图了 你在看看 有点懵  发表于 2017-11-2 11:12
我知道了。你上面的skill_Items没大写所以报错  发表于 2017-11-2 11:00
为什么你后面是大写的  发表于 2017-11-2 10:58
skill_items = Skill_Items[skill_id] 说这行报错  发表于 2017-11-2 10:28
回复 支持 反对

使用道具 举报

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

本版积分规则

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

站长信箱:fux2@moe9th.com|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2020-1-24 18:57

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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