011 PBEffects
这期教程,我们来讲解PBEffects。
你如果去翻特性效果文件的话,可能会翻到“PBEffects”,比如说这个特性——

这个是恶作剧之心。
那么,PBEffects到底是什么呢?
PBEffects其实就是一类效果。
这里的这个PBEffects效果,它本质上其实也是一种基于battler的变量,按理来说,我们应该是在前面讲基于battler的变量的时候就讲到它的,但是我们并没有。
之所以把它单独分出来,是为了更好的分类和管理。
我们打开\Pokemon Essentials v21.1 2023-07-30\Data\Scripts\011_Battle\007_Other battle code里的001_PBEffects.rb。
可以看到,它也是通过模块进行管理的——

你如果再稍微翻一下,你就会发现其实有4类PBEffects,分别是——
针对battler的,也就是精灵的——

针对position的,也就是精灵所在的位置的——

针对side的,也就是队伍的,或者说某一方全体的——

针对field的,也就是全场的——

而我们用的最多的,也就是第一类了,所以在这里我们也只会讲解第一类,另外的三类,请自行研究。
那么,怎么新加一个PBEffects呢?
很简单,照着它的格式来,不要问为什么,做就对了。
往下拉到第一类的最后面,找到这里——

接着在下面加上你的PBEffects,我们就随便加个Test吧——

那么,这样就好了吗?
还不行,你还需要初始化。
那么,在哪里初始化呢?
还记得我们前面讲基于battler的变量的时候,是在哪里初始化的吗?
没错,就在那里,是相同的地方。
那么,我们就打开“那个文件”进行初始化,找到这里——

按照格式,添加上我们这里新增加的这个PBEffects——

这个时候,要初始化到什么,就要根据你的这个效果来了。
你想做什么样的效果,决定了你该怎么初始化。
比如说,我想用这个effects[PBEffects::Test]效果来控制精灵的特性一次出场只能发动一次。
关于如何做特性一次出场只能发动一次的效果,因为我们前面已经讲过了,相信大家已经很熟悉了,那我们这里的话就是用PBEffects的方式再做一遍——

现在,effects[PBEffects::Test]已经可以用了,那么怎么用呢?
请回忆一下之前的教程,这里我就不再过多解释了。
这是我们用之前的方式实现的活力焕发的代码——

现在——

可以看到,这里的话我们需要用到两行代码,这是因为我们用前面的方式做的时候是新写了一个方法,所以只需要调用方法就好了。
而这里的话,我们并没有新写方法,我们是在直接改变变量的值,当然这里说“变量”实际上是不对的。
总之就是,先检查这个PBEffects是不是true,是就直接跳过,不是的话,先标记为true,接着发动特性。
当然,我们也可以按照之前写的格式新写一个方法——

这样的话,就变成了这样——

那么,请自行进入游戏测试,看一下用PBEffects,并且新写一个方法,或者不写新的方法,是否能实现相同的效果。
我希望你真的自己动手去尝试过再看下面的内容。
在前面的教程中,我说过我额外安装了Deluxe Battle Kit和Enhanced Battle UI这两个插件。
如果你也安装了Deluxe Battle Kit这个插件,这个插件也叫做DBK,那么实际上活力焕发这个特性根本就不会发动。
为什么呢?
因为在DBK里有一个方法覆盖了原始的ESS中的方法,就是这个方法——

而我们就是在这个方法里把活力焕发所用到的StartOfRoundEffect接入到战斗系统中的。
这是在ESS中的这个方法——

也就是说,同名的方法只能有一个,如果有多个同名的方法,后面的方法将会覆盖前面的方法,前面的方法就失效了。
因为游戏在启动时,会先加载原始的代码,再加载插件的代码,所以原始的ESS中的方法就会被插件中的同名方法覆盖了。
所以,我们需要在新的pbCommandPhase方法里,重新把StartOfRoundEffect接入到战斗系统中——

这样就好了。
同时,这其实也引出了一个思考,那就是,你在安装新的插件的时候,一定要看过插件的代码,注意好兼容性问题。
通常来说,插件里面新写的方法一般不会有问题,但是,如果插件里有原始ESS中的同名方法,那你就需要留个心眼了。
还有一种是alias,往上面就能看到——

alias的一般也是不会有问题的。
alias就是别名,就是为原始的方法取了一个别名,因为已经取了别名,就不是原始的名字了,自然也不会覆盖原始的方法。
那么现在,请再次自行进入游戏测试。
那么这期教程就到此为止,下期教程我们将会讲解破格。
视频预览(0722)——
浏览附件2024-07-22 21-24-39.mp4
感谢阅读。
这期教程,我们来讲解PBEffects。
你如果去翻特性效果文件的话,可能会翻到“PBEffects”,比如说这个特性——

这个是恶作剧之心。
那么,PBEffects到底是什么呢?
PBEffects其实就是一类效果。
这里的这个PBEffects效果,它本质上其实也是一种基于battler的变量,按理来说,我们应该是在前面讲基于battler的变量的时候就讲到它的,但是我们并没有。
之所以把它单独分出来,是为了更好的分类和管理。
我们打开\Pokemon Essentials v21.1 2023-07-30\Data\Scripts\011_Battle\007_Other battle code里的001_PBEffects.rb。
可以看到,它也是通过模块进行管理的——

你如果再稍微翻一下,你就会发现其实有4类PBEffects,分别是——
针对battler的,也就是精灵的——

针对position的,也就是精灵所在的位置的——

针对side的,也就是队伍的,或者说某一方全体的——

针对field的,也就是全场的——

而我们用的最多的,也就是第一类了,所以在这里我们也只会讲解第一类,另外的三类,请自行研究。
那么,怎么新加一个PBEffects呢?
很简单,照着它的格式来,不要问为什么,做就对了。
往下拉到第一类的最后面,找到这里——

接着在下面加上你的PBEffects,我们就随便加个Test吧——

那么,这样就好了吗?
还不行,你还需要初始化。
那么,在哪里初始化呢?
还记得我们前面讲基于battler的变量的时候,是在哪里初始化的吗?
没错,就在那里,是相同的地方。
那么,我们就打开“那个文件”进行初始化,找到这里——

按照格式,添加上我们这里新增加的这个PBEffects——

这个时候,要初始化到什么,就要根据你的这个效果来了。
你想做什么样的效果,决定了你该怎么初始化。
比如说,我想用这个effects[PBEffects::Test]效果来控制精灵的特性一次出场只能发动一次。
关于如何做特性一次出场只能发动一次的效果,因为我们前面已经讲过了,相信大家已经很熟悉了,那我们这里的话就是用PBEffects的方式再做一遍——

现在,effects[PBEffects::Test]已经可以用了,那么怎么用呢?
请回忆一下之前的教程,这里我就不再过多解释了。
这是我们用之前的方式实现的活力焕发的代码——

现在——

可以看到,这里的话我们需要用到两行代码,这是因为我们用前面的方式做的时候是新写了一个方法,所以只需要调用方法就好了。
而这里的话,我们并没有新写方法,我们是在直接改变变量的值,当然这里说“变量”实际上是不对的。
总之就是,先检查这个PBEffects是不是true,是就直接跳过,不是的话,先标记为true,接着发动特性。
当然,我们也可以按照之前写的格式新写一个方法——

这样的话,就变成了这样——

那么,请自行进入游戏测试,看一下用PBEffects,并且新写一个方法,或者不写新的方法,是否能实现相同的效果。
我希望你真的自己动手去尝试过再看下面的内容。
在前面的教程中,我说过我额外安装了Deluxe Battle Kit和Enhanced Battle UI这两个插件。
如果你也安装了Deluxe Battle Kit这个插件,这个插件也叫做DBK,那么实际上活力焕发这个特性根本就不会发动。
为什么呢?
因为在DBK里有一个方法覆盖了原始的ESS中的方法,就是这个方法——

而我们就是在这个方法里把活力焕发所用到的StartOfRoundEffect接入到战斗系统中的。
这是在ESS中的这个方法——

也就是说,同名的方法只能有一个,如果有多个同名的方法,后面的方法将会覆盖前面的方法,前面的方法就失效了。
因为游戏在启动时,会先加载原始的代码,再加载插件的代码,所以原始的ESS中的方法就会被插件中的同名方法覆盖了。
所以,我们需要在新的pbCommandPhase方法里,重新把StartOfRoundEffect接入到战斗系统中——

这样就好了。
同时,这其实也引出了一个思考,那就是,你在安装新的插件的时候,一定要看过插件的代码,注意好兼容性问题。
通常来说,插件里面新写的方法一般不会有问题,但是,如果插件里有原始ESS中的同名方法,那你就需要留个心眼了。
还有一种是alias,往上面就能看到——

alias的一般也是不会有问题的。
alias就是别名,就是为原始的方法取了一个别名,因为已经取了别名,就不是原始的名字了,自然也不会覆盖原始的方法。
那么现在,请再次自行进入游戏测试。
那么这期教程就到此为止,下期教程我们将会讲解破格。
视频预览(0722)——
浏览附件2024-07-22 21-24-39.mp4
感谢阅读。