Project1

标题: 【自问答】如何制作技能消耗物品的效果 [打印本页]

作者: RyanBern    时间: 2015-9-28 19:49
标题: 【自问答】如何制作技能消耗物品的效果
本帖最后由 RyanBern 于 2015-9-28 20:02 编辑

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

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


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

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

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

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

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

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

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

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



这样设置就大功告成了!打开你的RMXP测试看看有没有效果吧!
作者: jiushiainilip19    时间: 2015-9-28 19:58
本帖最后由 jiushiainilip19 于 2015-9-28 20:32 编辑

测试 可以 {:2_268:}
作者: 冷峻逸    时间: 2015-9-29 19:40
提示: 作者被禁止或删除 内容自动屏蔽
作者: 火狼王    时间: 2015-10-6 00:23
不能用==
作者: 汪汪    时间: 2015-10-6 08:44
我觉得 一些脚本还是简单介绍一下这么写的原因比较好,讲清楚原理可以让人更方便使用.其实就是一句话的事情..



作者: 哆啦溯    时间: 2015-10-6 13:44
好东西!但是怎么不发代码出来……
作者: Mr.Faint    时间: 2015-10-8 11:40
本帖最后由 Mr.Faint 于 2015-10-7 19:42 编辑

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

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

2.jpg

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

3.jpg

作者: 灰色的    时间: 2016-1-13 19:50
本帖最后由 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

作者: 灰色的    时间: 2016-1-14 14:18
灰色的 发表于 2016-1-13 19:50
问一下,为什么在战斗测试的时候提示第46行发生错误 nomethod Error undefined nomethod '□' for nil :nil ...

非常感谢您能帮助我解决这个问题
作者: link756367658    时间: 2017-11-2 10:18
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

我的是第十行报错
作者: link756367658    时间: 2017-11-2 11:11
有点懵啊

作者: link756367658    时间: 2017-11-2 11:12
link756367658 发表于 2017-11-2 10:18
skill_Items = {
  25 => {32 => 2},              #25号技能消耗32号物品2个
  29 => {41 => 2 },         ...

我下面截图了 你在看看 有点实力懵B
作者: soulsaga    时间: 2017-11-2 11:18
本帖最后由 soulsaga 于 2017-11-2 11:19 编辑

原来循环..
作者: 步兵中尉    时间: 2017-11-2 16:35
个人感觉不用那么复杂啊!

在脚本中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
复制代码


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





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