CS > 经验交流 > [经验] CS-DIY宝典之脚本的编写

[经验] CS-DIY宝典之脚本的编写

07-12-20 我要评论 来源:解放日报

CS打久了,经常会听说脚本这个词,听起来似乎十分神秘,其实说起来十分简单,脚本实际就是命令的集合,放在*.cfg(或者valve.rc)文件里,在需要的时候使用,下面就按照我的经验给大家分析分析,能力有限,错误难免:)
实际上,脚本中使用的都脱不出bind和alias这2样东西,下面介绍一下
alias就是给一组命令定义一个名称,当你定义过后,CS就认为此alias为一个普通的命
令,定义以后,你可以在脚本的任何地方使用它。
说的通俗点,alias就相当于一个等于号
举个例子,如果脚本中有了这么一句话:
alias 88 say bye bye!
//say 命令你不会不知道吧-_-’
那么在游戏中就相当于有了88这个命令,而这个命令实际上就是say bye bye!这个命令
bind就是分配一个命令到指定的键(鼠标/键盘),命令也可以包含alias定义的命令(不能包含还玩个屁呀^^)
举个例子,如过脚本里有这样一句话
bind p say bye bye!,就是绑定p键为实现命令:say bye bye!效果就是在游戏中如果你按了键盘的p键,那么你会在游戏中给所有
人打字:bye bye!
结合上面的alias,我们搞复杂一些:先用alias定义一个命令,再用bind绑定
alias 88 say bye bye!
bind p 88//(注意由于上句的alias 88 say bye bye!,使得88==say bye bye!)
这样,在游戏中你按住p键,会和前一个例子一样,给所有人打字:bye bye!
也就是说由于alias 88 say bye bye!这句的存在,使bind p 88==bind p say bye bye!
怎么样,是不是相当简单?好现在我们再增加些难度
alias是可以定义多个命令的,不同的命令用引号(;)隔开,这些命令会按先后的顺序执行,象这样
alias ll say hello;say i am marco;say don’t kill me
就表示当你执行新定义的ll命令时,你就会在游戏中现和所有人说:hello,然后说i am marco,然后是don’t kill me(谁在扔西红柿?)
当然,你也可以把他绑定到一个键上:bind v ll ,以后想挨吃西红柿的时候,按v键就可以了:)
同样,bind里面也可以按照这样的格式使用
OK,准备工作作完了,下面开始正式内容,晕,这才是准备工作啊)
------------
啊,差点忘了,还有一个命令,wait命令。wait命令在脚本中也是十分常用的,它的作用是在执行脚本时做一个极小的暂停,当你的延迟情况
不是很严重时可以只使用几个wait命令,当你的延迟情况比较糟糕时可以多用几个wait命令来使你的脚本得以完整/正确的执行
当然,如果编写的时候,需要使用多个wait,你也可以使用alias命令事先定义,简化你的输入
alias w wait,那么编脚本的时候输入w就代表wait了,当然也可以定义需要2个wait的情况alias 2w wait;wait
如果需要4个wait呢? alias 4w wait;wait;wait;wait?呵呵,灵活一点,前面已经有alias 2w wait;wait了,所以我们只
需要alias 2w;2w就可以了。(仔细想想,呵呵)
3个wait就可以用alias w;2w
好,再次进入正题,,讲讲脚本的分类,先介绍最简单的,按顺序执行的,这种脚本最普遍的就是用在1.5的买枪了,举个例子,在1.5中,假
设我要先买AK,然后买一个usp,下面就看看如何写这个脚本:
要买AK,我们平时的动作是b41,就是先按b也就是执行了buy命令,然后选数字4,也就是执行menuselect 4命令,然后选数字1,也就是执
行menuselect 1命令,这样,AK就买好了,然后买usp,还是先按b,也就是buy命令,然后选数字1,也就是执行menuselect 1命令,然后选
数字1,也就是执行menuselect 1命令,最后清除买枪菜单,这样我们的目的就达到了。命令的顺序就是这样:
buy---> menuselect 4 --> menuselect 1 --> buy --> menuselect 1 --> menuselect 1 -->clmenu(清除菜单命令)
写成脚本形式就是
alias akusp buy;menuselect 4;menuselect 1;buy;menuselect 1;menuselect 1;clmenu这里面akusp这个命令名字是随便取的
当然,你可以把这个命令绑定在键盘上
bind akusp p,那么按p就是买ak和usp了。顺序脚本介绍完毕 下面介绍开关式脚本,这个就复杂一点,恩,具体的来说就是要实现这样一个功能,按一下某个键,实现功能A,再按一下这个键,实现功能
B,再按又是A,这样A-->B-->A-->B-->A的循环。
还是用例子来说明,比如我们要实现一个雷达的开关,按TAB键来打开/关闭雷达,需要的2个命令: hideradar(关闭雷达)drawradar(打开雷达),
难点在于,只有一个键,要么bind TAB hideradar,要么bind TAB drawradar,可是TAB键只有一个。怎么实现按一次用hideradar命令,再按一
次又换成drawradar命令?,解决的方法就是增加一个变量,让这个变量在需要开雷达的时候等于drawradar,需要关雷达的时候等于hideradar。
为了说明的清楚,这次我们用中文来说明整个流程:同时后面用数学等式的方法更直观的说明
alias 雷达开关 关 (定义 雷达开关==关)
alias 关 hideradar;alias 雷达开关 开 (定义 执行雷达关命令,然后定义雷达开关==开)还记得分号的作用吧?
alias 开 drawradar;alias 雷达开关 关 (定义 执行雷达开命令,然后定义雷达开关==关)
这样, “雷达开关”这个变量就不停的在(雷达开关==开/雷达开关==关)之间切换,最后,我们把它定义到键上就可以
bind TAB 雷达开关
整个脚本按正常情况写就是这样:
alias radar_key radar_off
alias radar_off hideradar;alias radar_key radar_on
alias radar_on drawradar;alias radar_key radar_off
bind TAB radar_key
这里面radar_key ,radar_off ,radar_on三个变量的名字可以随便取
下面就是开关式脚本的一个模板:
alias 开关变量 关闭变量
alias 关闭变量 alias 开关变量 打开变量;关闭的命令
alias 打开变量 alias 开关变量 关闭变量;打开的命令
bind 键位 开关变量
熟练了以后你会发现语句的顺序,还有其中的alias语句中的命令的顺序都是任意的,不过初学还是不要变了吧,免得搞混
下面介绍循环式脚本
实际上循环脚本和开关脚本非常类似,开关脚本实际上就是A --> B -->A -->B的只有两项的循环式脚本,循环脚本只是变成
A --> B --> C --> D........-->N -->A所以理解起
来很容易,我们直接看一个模板:
alias 循环开关变量 循环第1步变量
alias 循环第1步变量 循环第1步需执行的命令;alias 循环开关变量 循环第2步变量;
alias 循环第2步变量 循环第2步需执行的命令;alias 循环开关变量 循环第3步变量;
. . .
. . .
. . .
. . .
. . .
alias 循环第N步变量 循环第N步需执行的命令;alias 循环开关变量 循环第1步变量;
然后bind 键位 循环开关变量即可
需要注意的就是最后一个alias一定要定义回第一个变量,这样才能形成一个回环,否则循环一轮以后就进行不下去了。
最后用一个实际的例子说明
alias graph graph1
alias graph1 net_graph 1; alias graph graph2
alias graph2 net_graph 2; alias graph graph3
alias graph3 net_graph 3; alias graph graph4
alias graph4 net_graph 0; alias graph graph1
bind v graph
这个以后按v键即可实现网络状况图形的切换显示没按一下,就按照1,2,3,4,1,2,。。。的方式循环
/////////////////////////////////////////////////////////////////////
循环脚本按理说算结束了,实际上,我们还可以把它强化一下,增加一个按键,也就是再增加一个中间变量来进行双向循环控制
比如在我的CS版本中的MP3播放控制还有游戏中的音量控制就是采用的这种方法,大家有兴趣可以研究一下,音量控制和MP3控制
都是双向循环脚本,但是如果你可以看出它们之间的区别,说明你已经完全理解这一部分了,篇幅所限,这次讲到这里,大家也看累了吧?我也休息一下先
注:本人学习CFG,是拜读了www.modchina.com脚本区斑竹o1m的教程(不知是不是传说中的小凡前辈),在本文中也摘取了其中的经典范例进行讲解,再次表示深深的感谢
附录:DcOo cs 1.6中关于MP3播放和声音控制的循环脚本
//调节游戏音量
alias volume0 "volume 0.0; alias volume_up volume1; alias volume_down volume0"
alias volume1 "volume 0.1; alias volume_up volume2; alias volume_down volume0"
alias volume2 "volume 0.2; alias volume_up volume3; alias volume_down volume1"
alias volume3 "volume 0.3; alias volume_up volume4; alias volume_down volume2"
alias volume4 "volume 0.4; alias volume_up volume5; alias volume_down volume3"
alias volume5 "volume 0.5; alias volume_up volume6; alias volume_down volume4"
alias volume6 "volume 0.6; alias volume_up volume7; alias volume_down volume5"
alias volume7 "volume 0.7; alias volume_up volume8; alias volume_down volume6"
alias volume8 "volume 0.8; alias volume_up volume9; alias volume_down volume7"
alias volume9 "volume 0.9; alias volume_up volume10; alias volume_down volume8"
alias volume10 "volume 1.0; alias volume_up volume10; alias volume_down volume9"
alias volume_up "volume8"
alias volume_down "volume6"

////////////////////////////////////////////////////////////

MP3选择,注:CS1.6中可以使用mp3 play cstrike目录中的文件夹名/MP3文件名.mp3来播放MP3
alias mp3_play1 "mp3 play mp3/1.mp3; alias mp3_play_next mp3_play2; alias mp3_play_last mp3_play20"
alias mp3_play2 "mp3 play mp3/2.mp3; alias mp3_play_next mp3_play3; alias mp3_play_last mp3_play1"
alias mp3_play3 "mp3 play mp3/3.mp3; alias mp3_play_next mp3_play4; alias mp3_play_last mp3_play2"
alias mp3_play4 "mp3 play mp3/4.mp3; alias mp3_play_next mp3_play5; alias mp3_play_last mp3_play3"
alias mp3_play5 "mp3 play mp3/5.mp3; alias mp3_play_next mp3_play6; alias mp3_play_last mp3_play4"
alias mp3_play6 "mp3 play mp3/6.mp3; alias mp3_play_next mp3_play7; alias mp3_play_last mp3_play5"
alias mp3_play7 "mp3 play mp3/7.mp3; alias mp3_play_next mp3_play8; alias mp3_play_last mp3_play6"
alias mp3_play8 "mp3 play mp3/8.mp3; alias mp3_play_next mp3_play9; alias mp3_play_last mp3_play7"
alias mp3_play9 "mp3 play mp3/9.mp3; alias mp3_play_next mp3_play10; alias mp3_play_last mp3_play8"
alias mp3_play10 "mp3 play mp3/10.mp3; alias mp3_play_next mp3_play11; alias mp3_play_last mp3_play9"
alias mp3_play11 "mp3 play mp3/11.mp3; alias mp3_play_next mp3_play12; alias mp3_play_last mp3_play10"
alias mp3_play12 "mp3 play mp3/12.mp3; alias mp3_play_next mp3_play13; alias mp3_play_last mp3_play11"
alias mp3_play13 "mp3 play mp3/13.mp3; alias mp3_play_next mp3_play14; alias mp3_play_last mp3_play12"
alias mp3_play14 "mp3 play mp3/14.mp3; alias mp3_play_next mp3_play15; alias mp3_play_last mp3_play13"
alias mp3_play15 "mp3 play mp3/15.mp3; alias mp3_play_next mp3_play16; alias mp3_play_last mp3_play14"
alias mp3_play16 "mp3 play mp3/16.mp3; alias mp3_play_next mp3_play17; alias mp3_play_last mp3_play15"
alias mp3_play17 "mp3 play mp3/17.mp3; alias mp3_play_next mp3_play18; alias mp3_play_last mp3_play16"
alias mp3_play18 "mp3 play mp3/18.mp3; alias mp3_play_next mp3_play19; alias mp3_play_last mp3_play17"
alias mp3_play19 "mp3 play mp3/19.mp3; alias mp3_play_next mp3_play20; alias mp3_play_last mp3_play18"
alias mp3_play20 "mp3 play mp3/20.mp3; alias mp3_play_next mp3_play1; alias mp3_play_last mp3_play19"
alias mp3_play_next "mp3_play1" //播放MP3下一曲
alias mp3_play_last "mp3_play20" //播放MP3上一曲