5 保存打包的指令 alias - eLecCap1taL/CS2-CFG-Wiki GitHub Wiki
我们来制作一个这样的 cfg:
- 按 1 切主武器,并在聊天栏发送消息:
我切武器了
- 按 2 切副武器,并在聊天栏发送消息:
我切武器了
- 按 3 切刀,并在聊天栏发送消息:
我切武器了
- 按 4 切道具,并在聊天栏发送消息:
我切武器了
- 按 5 切 C4,并在聊天栏发送消息:
我切武器了
你可能会说:这太简单了!转人工!我会写!😡
bind 1 "slot1;say 我切武器了"
bind 2 "slot2;say 我切武器了"
bind 3 "slot3;say 我切武器了"
bind 4 "slot4;say 我切武器了"
bind 5 "slot5;say 我切武器了"
没有问题,但如果我要求你给更多键添加……😦
难道我们不得不把 say 我切武器了
在每个 bind 里都写一遍?😭
答案当然是否定的。我们来学习 alias
的用法。
在 cfg 文件夹内新建一个 cfg 文件。使用任何文本编辑器(比如记事本)打开它,输入以下内容:
alias saytext say 我切武器了
bind 1 "slot1;saytext"
bind 2 "slot2;saytext"
bind 3 "slot3;saytext"
bind 4 "slot4;saytext"
bind 5 "slot5;saytext"
游戏内 exec
就可以看到效果。
alias 打包名 要打包的指令
:组合指令,生成一个新的指令不同于
bind
,alias
不是永久性的,关闭游戏之后,打包的指令就不存在了,需要每次开游戏后重新读取 cfg。你可以通过上文提到的自动加载 cfg 来做到这一点。
alias
非常重要,是 cfg 的核心指令alias 的名字不区分大小写
如果不填写要打包的指令,会创建一个空的指令打包。
你可能会说,这也没短多少嘛 😒 但 alias
的强大之处在于,它可以组合多个指令。
我们现在要求,不单在聊天栏中发送,也要在控制台中发送。使用如下 cfg 可以简洁地做到这一点:
alias saytext "say 我切武器了;echo 我切武器了"
bind 1 "slot1;saytext"
bind 2 "slot2;saytext"
bind 3 "slot3;saytext"
bind 4 "slot4;saytext"
bind 5 "slot5;saytext"
alias
也支持嵌套。我们可以写出如下 cfg,和上面的效果一样:
alias echotext echo 我切武器了
alias saytext "say 我切武器了;echotext"
bind 1 "slot1;saytext"
bind 2 "slot2;saytext"
bind 3 "slot3;saytext"
bind 4 "slot4;saytext"
bind 5 "slot5;saytext"
甚至,我们可以在 alias
中使用 alias
。
⚡⚡⚡ 现在要开始变得有趣起来了 ⚡⚡⚡ 我们来做这样一个的 cfg:
- 第一次按 p,在队内聊天发送信息:
哈喽
- 第二次按 p,在队内聊天发送信息:
怎么打
- 第三次按 p,在队内聊天发送信息:
OK
- 第四次按 p,在队内聊天发送信息:
哈喽
- 第五次按 p,在队内聊天发送信息:
怎么打
- ……
- 以此类推,重复,以三个消息为一个循环
新建一个 cfg 文件,输入以下指令:
alias hello_1 "say_team 哈喽;alias hello hello_2"
alias hello_2 "say_team 怎么打;alias hello hello_3"
alias hello_3 "say_team OK;alias hello hello_1"
alias hello hello_1
bind p hello
在游戏内 exec
,看看效果!😎
有些复杂?我们来仔细分析一下过程。
过程分析:
刚刚加载完的时候:
hello_1
的内容是say_team 哈喽;alias hello hello_2
hello_2
的内容是say_team 怎么打;alias hello hello_3
hello_3
的内容是say_team OK;alias hello hello_1
hello
的内容是hello_1
- p 键绑定了
hello
我们现在第 1 次按下 p 键,发生了什么?
- 由于
bind p hello
- hello 被触发了
- 由于 hello 的内容是 hello_1
- hello_1 被触发了
- 由于 hello_1 的内容是 "say_team 哈喽;alias hello hello_2"
say_team 哈喽
左下角发送了哈喽
alias hello hello_2
把 hello 的内容改为了 hello_2
于是现在的情况是:
hello_1
的内容是say_team 哈喽;alias hello hello_2
hello_2
的内容是say_team 怎么打;alias hello hello_3
hello_3
的内容是say_team OK;alias hello hello_1
hello
的内容是hello_2
- p 键绑定了 hello
有些明白了吗?🤔我们再往下推
我们现在第 2 次按下 p 键,发生了什么?
- 由于
bind p hello
- hello 被触发了
- 由于 hello 的内容是 hello_2
- hello_2 被触发了
- 由于 hello_2 的内容是 "say_team 怎么打;alias hello hello_3"
say_team 怎么打
左下角发送了怎么打
alias hello hello_2
把 hello 的内容改为了 hello_3
于是现在的情况是:
hello_1
的内容是say_team 哈喽;alias hello hello_2
hello_2
的内容是say_team 怎么打;alias hello hello_3
hello_3
的内容是say_team OK;alias hello hello_1
hello
的内容是hello_3
- p 键绑定了 hello
有点懂了?😦我们再往下推
我们现在第 3 次按下 p 键,发生了什么?
- 由于
bind p hello
- hello 被触发了
- 由于 hello 的内容是 hello_3
- hello_3 被触发了
- 由于 hello_3 的内容是 "say_team OK;alias hello hello_1"
say_team OK
左下角发送了OK
alias hello hello_1
把 hello 的内容改为了 hello_1
于是现在的情况是:
hello_1
的内容是say_team 哈喽;alias hello hello_2
hello_2
的内容是say_team 怎么打;alias hello hello_3
hello_3
的内容是say_team OK;alias hello hello_1
hello
的内容是hello_1
- p 键绑定了 hello
发现了什么?和刚刚加载的情况一模一样!😦😦于是之后就是循环了😎😎
如果还是不懂,可以再仔细阅读一下,进行理解。这种 alias
内改变 alias
的情况将会非常多见。
这好像就是
EZ.cfg
,现在你已经掌握了书写EZ.cfg
所需要的全部知识!🤪🤪
关于 alias
,还有一些事情必须知道。
alias
不能覆盖游戏自带的大部分指令。
例如说,下面这样的 cfg 不能生效,因为 say
是游戏自带的关键字:
alias say "你的指令……"
引号不存在 "嵌套"
你可能会写这样的指令:
alias A "alias B "echo B1;echo B2";echo A1;echo A2"
你也许会想:
- 执行
alias A "alias B "echo B1;echo B2";echo A1;echo A2"
- 此时
A
被定义为alias B "echo B1;echo B2";echo A1;echo A2
- 此时
- 再执行
A
- 触发
alias B "echo B1;echo B2"
,此时B
被定义为"echo B1;echo B2"
- 触发
echo A1
,控制台输出 A1 - 触发
echo A2
,控制台输出 A2
- 触发
- 再执行
B
- 触发
echo B1
,控制台输出 B1 - 触发
echo B2
,控制台输出 B2
- 触发
事实上完全不是这样,这条指令相当于:
alias A alias B echo B1
echo B2
echo A1
echo A2
实际上就是第一个和第二个引号搭配,第三个和第四个引号搭配。CS2 的 cfg 系统并没有你想象的那么聪明 🤡
那么该如何达到我们想要的效果呢?使用如下指令:
alias B1B2 "echo B1;echo B2"
alias A "alias B B1B2;echo A1;echo A2"
这就是完全可以的。请牢记引号不存在嵌套。
引号不会被保存进 alias
意思是,引号只在指令执行时判断是否结束指令,并不会被保存进 alias。CS2 的 cfg 系统并没有你想象的那么聪明 🤡
你可能会写出这样的指令:
alias A alias B "echo B1;echo B2"
你也许会想:
- 执行
alias A alias B "echo B1;echo B2"
- 此时
A
被定义为alias B "echo B1;echo B2"
- 此时
- 再执行
A
- 触发
alias B "echo B1;echo B2"
,此时B
被定义为"echo B1;echo B2"
- 触发
- 再执行
B
- 触发
echo B1
,控制台输出 B1 - 触发
echo B2
,控制台输出 B2
- 触发
事实上是这样:
- 执行
alias A alias B "echo B1;echo B2"
- 此时
A
被定义为alias B echo B1;echo B2
(注意看这一行和上面的区别,仔细想这句话:引号不会被保存进alias)
- 此时
- 再执行
A
- 触发
alias B echo B1
,此时B
被定义为echo B1
- 触发
echo B2
,控制台输出 B2
- 触发
- 再执行
B
- 触发
echo B1
,控制台输出 B1
- 触发
可以反复阅读,自行理解,正确的写法应该是:
alias B1B2 "echo B1;echo B2"
alias A alias B B1B2
特殊的 alias
在 alias 的名字前面加上 +
或 -
可以有特殊的效果。
在大部分时候,它们是正常的,不会有什么特殊效果。
但当它们与 bind
一起使用时就有特殊效果:按键时触发 +
的,松键时触发 -
的。
说的可能比较抽象,看实际的 cfg:
alias +A echo 我按下了按键
alias -A echo 我松开了按键
bind p +A
尝试一下,观察效果。
如果 bind 绑定到的第一个指令是以 +
开头的指令,它会在松键时尝试寻找相同名字的且以 -
开头的指令,并执行。
如果寻找不到,则不做任何事。
如果把 -
开头的指令绑给按键,也不会有特殊效果。
需要注意的是,绑定了多个指令时,只有第一个会尝试触发特殊效果。看以下 cfg:
alias +A echo +A
alias -A echo -A
alias +B echo +B
alias -B echo -B
bind p "+A;+B"
按下 p 时会控制台输出 +A
和 +B
,松开时会只输出 -A
。正确写法为:
alias +A echo +A
alias -A echo -A
alias +B echo +B
alias -B echo -B
alias +C "+A;+B"
alias -C "-A;-B"
bind p +C
如果第一个指令不是以 +
开头,后面的也没有特殊效果。看以下 cfg:
alias +A echo +A
alias -A echo -A
alias B echo B
bind p "B;+A"
按下 p 时会控制台输出 B
和 +A
,松开时什么也不会输出。
只有第一个指令以 +
开头时会尝试寻找对应的以 -
开头的 cfg。
现在你可以了解更多的指令了 🤪🤪🤪 不过需要先看一个例子。
+attack
:攻击指令计数+1-attack
:攻击指令计数-1
计数又是啥?😡
这是 CS2 自带指令的特性,只有自带的部分指令有这个特性,你自己定义的 alias 是没有的
这是 CS2 自带指令的特性,只有自带的部分指令有这个特性,你自己定义的 alias 是没有的
这是 CS2 自带指令的特性,只有自带的部分指令有这个特性,你自己定义的 alias 是没有的
这是 CS2 自带指令的特性,只有自带的部分指令有这个特性,你自己定义的 alias 是没有的
实际上是这样的:attack x 0 0
给攻击的指令计数 +x。例如 attack 5 0 0
将会给攻击指令计数 +5。attack -3 0 0
将会给攻击指令计数 -3。
当指令的指令计数大于 0
时,指令就会生效。对于 attack
,就是会开火。
指令计数不能小于 0
。小于 0
会强制变成 0
。例如,假如此时的攻击指令计数为 1
,你正在开火,执行 attack -9 0 0
不会让它变成 -8
,而是变成 0
你可以理解为:
+attack
只是对于attack 1 0 0
的一个 alias-attack
只是对于attack -1 0 0
的一个 alias
现在你可以了解更多的指令了 🤪🤪🤪 下面会省略对应的 -
指令
+forward
:向前走+back
:向后走+right
:向右走+left
:向左走+attack
:第一开火+attack2
:第二开火,比如开镜+use
:使用,例如拆包,捡东西,开门+sprint
:静步+duck
:下蹲+jump
:跳跃+voicerecord
:开麦+lookatweapon
:检视+radialradio
:打开第一无线电轮盘+radialradio1
:打开第二无线电轮盘+radialradio2
:打开第三无线电轮盘+quickgrenaderadial
:道具快捷切换轮盘+reload
:换弹+spray_menu
:喷漆菜单
更多控制台指令可以在 官方控制台指令和变量列表 查看。
一个获取指令的小技巧:控制台输入 bind p
就可以知道 p
绑定的指令是什么。利用这个技巧,可以从设置中找到想要的功能,绑键之后通过控制台来查看其指令。
需要特别注意:+jump
似乎有问题。如果 +jump
后不 -jump
就 +jump
会导致再也跳不起来,清空计数也不行。只能重进游戏。
attack
和 jump
一起使用也有奇怪的问题。不要把他们定义在一个 alias 内。应该把他们放在一个独立的 cfg 里,通过 exec
来调用。
到目前为止,你已经基本学会了 cfg 所需要的一切。😎 是的,bind
,alias
,和一些游戏内置的动作指令,就是这些。cfg
并没有什么复杂的语法,它是逻辑的盛宴。
假设 alias 的数量没有上限的话,cfg 就是图灵完备的。alias
给 cfg 带来了无限可能,非常重要。在后面的学习中,你还会经常见到它