前言
我入转换器的时间并不长,在下载脚本的时候,发现几乎都是.py或.gpc的格式,出于好奇心理就进行了一些研究。这次给大家分享GPC脚本指南,主要是GPC脚本是什么与GPC脚本应当如何去写。
我并非技术出生,认知会比较浅薄,本贴主要是针对我这类的小白学习与认知,大佬估计不会带来多少收益。
注:本帖的脚本我将使用titan two设备提供的Gtuner IV软件演示。其中使用到的GPC指令符,请阅读GPC指令符的结尾。
什么是GPC?
使用Titan、Cronus、ReaSnow设备的用户下载脚本,都会得到.gpc后缀的文件。它是游戏控制器的协议,转换器使用的脚本语言,被广泛认为是游戏模组和宏的脚本语言。
“指令”不言自明,新手或专家,任何人都可以快速掌握,GPC的基本语法是借鉴C语言,基本结构与函数对于用过C语言的编程人员来说很熟悉。
GPC只是Titan、Cronus、ReaSnow等设备使用代码的可读版本,它实际上使用的字节码系统。每当你编写或编译GPC脚本时,这些软件中内置的编码器会将脚本发送到设备之前,将其转换为字节码。
GPC脚本现在可用于16位和32位,16与32位都是单独运行的,它们可以是1亦或是0。
16 位:0000 0000 0000 0000
32 位:0000 0000 0000 0000 0000 0000 0000 0000
16 位最多有 2 ^ 16 个可能值,32 位最多有 2 ^ 32 个可能值。
Titan、Cronus、ReaSnow等最新的设备都使用了32位,如果你希望编译旧的16位脚本,需要使用16位编码器。
什么是32位?
32位脚本支持进行更加强大的计算,实现更高的精度、准确性和更多的自动化,特别是对于瞄准辅助和反后坐力等MODS。
以前变量计算范围是16位(-32,768到32,767),现在的32位,这个范围更大(-2,147,483,648 到 2,147,483,647),可以允许更加复杂的计算,可以按照比例放大与缩小,同时保留高精度。
位数 | 最小值 | 最大值 |
8位 | -(2 ^ 8) = -128 | 2 ^ 8 - 1 = 127 |
16位 | -(2 ^ 16) = -32,768 | 2 ^ 16 - 1 = 32,767 |
32位 | -(2 ^ 32) = -2,147,483,648 | 2 ^ 32 - 1 = 2,147,483,647 |
基本语法
这是一个.gpc的基本语法
define titan= 120;
int two= 100;
main {
if (get_val(BUTTON_4)) {
combo_run(jump);
}
}
combo jump {
set_val(BUTTON_4, 100);
wait(titan);
set_val(BUTTON_4, 0);
wait(two);
}
指令分离
与C语言一样,GPC要求指令在每个语句结尾以分号分离,但是块代码的结束会自动标记分号,因此种植GPC块时最后一行不需要分号。
main {
sensitivity(BUTTON_4, NOT_USE, 80);
a = b * ( c + 20 )
}
嵌套代码
嵌套代码或是创建逻辑块,将代码绑定在一起,块以{开始,以}结束。
main
{ //父级开始
if(get_val(BUTTON_4))
{ //区块1开始
if(get_val(BUTTON_5))
{ //区块2开始
combo_run(RAPID_FIRE_ADS);
} //区块2结束
else
{ //区块3开始
combo_run(RAPID_FIRE);
} //区块3结束
} //区块1结束
} //父级结束
上面的示例中,除非区块1处于激活状态,否则区块2和区块将会被忽略掉。
如果未按下BUTTON_4按钮,则不会有任何运行。如果按下BUTTON_4,则会往下运行区块2。如果按下BUTTON_5,将运行组合RAPID_FIRE_ADS并忽略区块3。但是当你未按下BUTTON_5,它将忽略区块2,并执行区块3,然后运行RAPID_FIRE组合。
如果语句只有一行代码,则隐含嵌套。
main {
if(get_val(BUTTON_4) > 95)
combo_run(RAPID_FIRE);
}
编译时,combo_run(RAPID_FIRE); 将自动嵌套在if语句中。如果你希望多行代码仅在它们之前的语句处于激活状态是执行,那么必须使用{
与}
。
注释代码
注释代码是为了避免代码过多时,我们忘记他们所表达的意思。注释代码分为单行注释与多行注释。
单行注释,使用//字符创建,后面可以使用任何字符序列。
main {
//单行注释
if(get_val(BUTTON_4) > 95)
// 另外一条单行单行注释
combo_run(RAPID_FIRE);
}
多行注释,使用/*
字符开始,以*/
结束。
main {
/* 多行注释
另外一条多行注释
*/
if(get_val(BUTTON_4) > 95)
combo_run(RAPID_FIRE);
}