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

Project1

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

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

[复制链接]

Lv4.逐梦者 (版主)

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

开拓者贵宾剧作品鉴家

跳转到指定楼层
1
发表于 2015-9-28 19:49:06 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

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

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

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

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

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


首先,你应该规定一个技能消耗哪一种道具,以及消耗的数量是多少,这一点并不难做到。为了简单起见,我们假设一个技能只消耗一种物品,对于消耗多种物品的情况在这里不予考虑。这些有关技能消耗物品的数据可以写在脚本编辑器中。打开脚本编辑器,在 Main 组脚本的上方插入一个新脚本,名称随意。之后输入下图的代码:

上图代码中,绿色的文字只是为了表示每一句话是什么意思,也是提示你如何书写一组技能消耗物品的对应关系,实际制作的时候可以不必写出。注意,图中每一行都表示一项设置,最后一项设置的后面没有逗号',',而其他的设置后面都跟一个逗号。
总之,如果你要新加入一组数据,就输入:

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

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

当然,只是设置了数据是不行的,我们必须加入更多的代码才行。现在使用技能的判定并没有考虑消耗物品的情况,我们必须手动加上。
在刚才的脚本后面,紧接着输入以下内容:

具体脚本的机制不用掌握,照着图中的代码输入,别输错了就行。
之后,找到脚本编辑器中名为 Game_Battler3 的脚本,点开马上就看到了有关技能使用的判定,我们加上下面这句话(新添加的话已经用高亮标出):

这句话的意思就是如果技能的物品条件不满足,则将此技能判定为不能使用。

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



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

评分

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

查看全部评分

Lv3.寻梦者

梦石
0
星屑
3832
在线时间
1580 小时
注册时间
2006-5-5
帖子
2743
14
发表于 2017-11-2 16:35:29 | 只看该作者
个人感觉不用那么复杂啊!

在脚本中ctrl+shift+F搜索“可以使用特技判定”,找到位于Game_Actor的此段定义。
然后添加:
如果  技能ID==123 并且 物品47号的数量少于5个
   那么不能使用

翻译为脚本:
  1.    if skill_id == 123 and $game_party.item_number(47) <= 5
  2.      return false
  3.    end
复制代码


这样就可以了。然后你在技能的公共事件里面添加物品消耗即可。

点评

添加到game actor里确实更合适,原来的脚本会导致敌人释放技能的时候消耗物品  发表于 2017-11-2 17:25

评分

参与人数 1+1 收起 理由
guoxiaomi + 1 我很赞同

查看全部评分

步兵中尉
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36119
在线时间
10712 小时
注册时间
2009-3-15
帖子
4806
13
发表于 2017-11-2 11:18:36 | 只看该作者
本帖最后由 soulsaga 于 2017-11-2 11:19 编辑

原来循环..

点评

突然很想吐槽一下,为啥这个大小写能搞错这么多次……rb叔的代码有着特殊的魔力吧?  发表于 2017-11-2 14:25
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2055
在线时间
162 小时
注册时间
2014-6-21
帖子
120
12
发表于 2017-11-2 11:12:17 | 只看该作者
link756367658 发表于 2017-11-2 10:18
skill_Items = {
  25 => {32 => 2},              #25号技能消耗32号物品2个
  29 => {41 => 2 },         ...

我下面截图了 你在看看 有点实力懵B

点评

非常感谢 这会明白了  发表于 2017-11-2 11:31
第一行的Skill_Items = {里面的Skill_Items和下面的Skill_Items[skill_id]里面的Skill_Items大小写要完全一致否则会报错..  发表于 2017-11-2 11:24
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2055
在线时间
162 小时
注册时间
2014-6-21
帖子
120
11
发表于 2017-11-2 11:11:43 | 只看该作者
有点懵啊
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2055
在线时间
162 小时
注册时间
2014-6-21
帖子
120
10
发表于 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

我的是第十行报错
回复 支持 反对

使用道具 举报

Lv1.梦旅人

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

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

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
215
在线时间
51 小时
注册时间
2015-11-8
帖子
20
8
发表于 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
回复 支持 反对

使用道具 举报

Lv1.梦旅人

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

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

2.jpg (243.99 KB, 下载次数: 19)

2.jpg

3.jpg (78.79 KB, 下载次数: 22)

3.jpg
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
590
在线时间
392 小时
注册时间
2012-1-20
帖子
223

开拓者

6
发表于 2015-10-6 13:44:32 | 只看该作者
好东西!但是怎么不发代码出来……
支持一下下我的这个游戏吧~~
大雄与空间军团
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-9-20 21:35

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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