全文仅代表个人摸索出来的主观理解,有不对的地方请见谅指正。
同时打个广告,有改、拼mod的需求也可以在我的帖子下留言,让我能挣一点点钱吃饭o(╥﹏╥)o。
以我以前做过的,樱佬星见雅mod为例子
简单来说,我们是想要实现一个去掉衣服的动作。
而通常情况,我们是通过按键切换来实现这一目的的。
而按键切换是怎么实现的呢,也很简单,
一眼就能看出来,按下键(key = VK_DOWN),$Shoes这个变量在0和1之间循环(type = cycle)。
然后我们追踪$Shoes
会发现当$Shoes为0,就有drawindexed = 13680, 195045, 0,也就是从195045开始的总共13680个顶点出现(实际上就是鞋子的所有顶点)。而如果$Shoes为1,不满足if $Shoes == 0这个条件,这些顶点不出现,鞋子自然就消失了。
我们可以在每个drawindexed 前面打分号注释,看看这些顶点组分别代表哪些部位。(当然樱佬的mod已经用注释标注了很多)。
那很明显,我们要让衣服消失,本质上就是让这些顶点组们不起作用。这时候我们可以再嵌套一层条件。
加入if $opens == 0这个条件,这样如果$opens == 0,不影响原来的逻辑,而如果$opens不为0,里面的全都不起作用,就意味着全部消失了。
(不过注意不要把身体之类的顶点组放到条件里面,不然消失了还是有点吓人)
当然,任何添加的变量都别忘记在开头的[Constants]进行声明。
现在新的问题是,怎么控制这个opens,让它在一般情况下为0,在闪避、弹刀的情况下就不是0?
细心的同学玩游戏时肯定会发现这样一点,当我们闪避、弹刀的时候,会有一层特殊的滤镜,看起来灰蒙蒙的。
既然这样,那如果这种滤镜出现的时候让opens不为0不就行了吗。
那怎么用代码实现呢?
值得注意的一点是,游戏里所有东西,物体也好特效也好,都有自己的名字,这些名字一般都是一串英文+数字,也就是所谓的hash。
我们可以用hunting模式抓取到各自的hash(详情见猫特佬帖子)。
最后我们抓取到这层滤镜的hash是hash = 8d4acd4ab5b2be9f
那就简单了!
我们新建一个变量$shift (记得在开头的[Constants]进行声明global $shift = 0),然后这样写:
表示当这个hash出现,$shift就为1,然后在[Present]的部分让$opens = $shift,这样的话:滤镜出现→hash出现→$shift = 1→$opens = 1→顶点组不生效→衣服消失,整个就串联起来了。
不过另外需要注意的一点是,$shift变成1后不会自动变成0,所以[Present]的部分还要加上post $shift = 0,这样当滤镜的hash消失,$shift 也会变回0。
这样,简单的自动去衣也就做好了。