Project1

标题: 和我一起读脚本--state_full?(state_id) [打印本页]

作者: miantouchi    时间: 2022-10-7 15:29
标题: 和我一起读脚本--state_full?(state_id)
本帖最后由 miantouchi 于 2022-10-7 15:36 编辑

很久没有发新帖子了,最近重拾XP部分,发现以前很多地方都忘记了。
所以,今天和大家一起读下大家常见的一段代码。感谢之前菜刀大大的指点。
以下内容大部分是菜刀大大的讲解加上个人在细节上面的完善,
算是给我们这些小白的学习笔记了。

首先贴上今天要研究的代码部分如下图。

我一直以来对于这一段算是一知半解,没有理解透彻。注释里面写的判断状态是否为full?
我开始从字面理解,判断状态是否为 full,状态是否是满的?
为了能详解了解,我们先看下这段代码里面一些重要组成部分。


我们发现,
@states是数组类型、
@states_turn是哈希表

hold_trun回合经过后 auto_release_prob % 的概率解除。
首先我们看下第一段代码
  def state?(state_id)
    # 如果符合被附加的状态的条件就返回 ture
    return @states.include?(state_id)
  end
从这里看出来传入了状态ID,返回@states里面是否包含了这个状态ID,包含则返回true反之则false。至此第一段解读完毕。

下面看下第二段代码如下:
@states_turn是哈希表格式,但是就是保存数据格式是什么样的还不是太清楚,下面我测试下看看。

我让怪物使用火炎,状态变化里面加上 毒、睡眠、呆滞这3种状态。

上图加入打印出内容。


由此可见,@states_turn是按 状态=>持续回合 这样的方式保存
那 @states_turn[state_id] == -1 在什么时候等于-1呢?
全局搜索下。

然后我们再看看force是什么东西,什么时候变成ture的。继续全局搜索。


我们发现add_state和remove_state这两个方法用到了force,最后发现用于装备自动状态处。
也就是说:当持续回合 == -1 的时候, 这个-1是用于装备赋予的状态, 也就是自动状态, 此时不会重复赋予, 因此不会中状态

下面看下第三段代码如下:
return @states_turn[state_id] == $data_states[state_id].hold_turn
持续回合 == 设定的回合数时, 返回 true, 也就是,不能中状态

最后总结下,3种情况。
1、当没有中该状态的时候, 返回false,  也就是, 此时就可以中状态
2、当持续回合 == -1 的时候, 这个-1是用于装备赋予的状态, 也就是自动状态, 此时不会重复赋予, 因此不会中状态
3、持续回合 == 设定的回合数时, 返回 true, 也就是,不能中状态
所以得到个结果,  什么情况下可以中状态,  没有中该状态的时候,  以及中了该状态, 但是不是刚刚中(也就是持续回
合不等于设定回合)的时候, 就可以中。

知道这些个人感觉还是有用的,最起码知道内部数据构造及原理,并且可以改造他,其他的大家发挥想象了。
预计下次还是读关于这部分的,个人感觉教程也不能写的太细,太细反而啰嗦,看得迷糊。









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