CS > 最新下载 > [问答] DIY宝典:脚本的编写

[问答] DIY宝典:脚本的编写

07-10-09 我要评论 来源:52pk整理
CS打久了,经常会听说脚本这个词,听起来似乎十分神秘,其实说起来十分简单,脚本实际就是命令的集合,放在*.cfg(或者valve.rc)文件里,在需要的时候使用,下面就按照我的经验给大家分析分析,能力有限,错误难免:)

  实际上,脚本中使用的都脱不出bind和alias这2样东西,下面介绍一下

  alias就是给一组命令定义一个名称,当你定义过后,CS就认为此alias为一个普通的命

  令,定义以后,你可以在脚本的任何地方使用它。

  说的通俗点,alias就相当于一个等于号

  举个例子,如果脚本中有了这么一句话:

  alias88saybyebye!

  //say命令你不会不知道吧-_-'

  那么在游戏中就相当于有了88这个命令,而这个命令实际上就是saybyebye!这个命令

  bind就是分配一个命令到指定的键(鼠标/键盘),命令也可以包含alias定义的命令(不能包含还玩个屁呀^^)

  举个例子,如过脚本里有这样一句话

  bindpsaybyebye!,就是绑定p键为实现命令:saybyebye!效果就是在游戏中如果你按了键盘的p键,那么你会在游戏中给所有

  人打字:byebye!

  结合上面的alias,我们搞复杂一些:先用alias定义一个命令,再用bind绑定

  alias88saybyebye!

  bindp88//(注意由于上句的alias88saybyebye!,使得88==saybyebye!)

  这样,在游戏中你按住p键,会和前一个例子一样,给所有人打字:byebye!

  也就是说由于alias88saybyebye!这句的存在,使bindp88==bindpsaybyebye!

  怎么样,是不是相当简单?好现在我们再增加些难度

  alias是可以定义多个命令的,不同的命令用引号(;)隔开,这些命令会按先后的顺序执行,象这样

  aliasllsayhello;sayiammarco;saydon'tkillme

  就表示当你执行新定义的ll命令时,你就会在游戏中现和所有人说:hello,然后说iammarco,然后是don'tkillme(谁在扔西红柿?)

  当然,你也可以把他绑定到一个键上:bindvll,以后想挨吃西红柿的时候,按v键就可以了:)

  同样,bind里面也可以按照这样的格式使用

  ================================================================

  OK,准备工作作完了,下面开始正式内容,晕,这才是准备工作啊)

  ------------

  啊,差点忘了,还有一个命令,wait命令。wait命令在脚本中也是十分常用的,它的作用是在执行脚本时做一个极小的暂停,当你的延迟情况

  不是很严重时可以只使用几个wait命令,当你的延迟情况比较糟糕时可以多用几个wait命令来使你的脚本得以完整/正确的执行

  当然,如果编写的时候,需要使用多个wait,你也可以使用alias命令事先定义,简化你的输入

  aliaswwait,那么编脚本的时候输入w就代表wait了,当然也可以定义需要2个wait的情况alias2wwait;wait

  如果需要4个wait呢?alias4wwait;wait;wait;wait?呵呵,灵活一点,前面已经有alias2wwait;wait了,所以我们只

  需要alias2w;2w就可以了。(仔细想想,呵呵)

  3个wait就可以用aliasw;2w

  ================================================

  好,再次进入正题,,讲讲脚本的分类,先介绍最简单的,按顺序执行的,这种脚本最普遍的就是用在1.5的买枪了,举个例子,在1.5中,假

  设我要先买AK,然后买一个usp,下面就看看如何写这个脚本:

  要买AK,我们平时的动作是b41,就是先按b也就是执行了buy命令,然后选数字4,也就是执行menuselect4命令,然后选数字1,也就是执

  行menuselect1命令,这样,AK就买好了,然后买usp,还是先按b,也就是buy命令,然后选数字1,也就是执行menuselect1命令,然后选

  数字1,也就是执行menuselect1命令,最后清除买枪菜单,这样我们的目的就达到了。命令的顺序就是这样:

  buy--->menuselect4-->menuselect1-->buy-->menuselect1-->menuselect1-->clmenu(清除菜单命令)

  写成脚本形式就是

  aliasakuspbuy;menuselect4;menuselect1;buy;menuselect1;menuselect1;clmenu这里面akusp这个命令名字是随便取的

  当然,你可以把这个命令绑定在键盘上

  bindakuspp,那么按p就是买ak和usp了。顺序脚本介绍完毕

  ---------------------------------------

  下面介绍开关式脚本,这个就复杂一点,恩,具体的来说就是要实现这样一个功能,按一下某个键,实现功能A,再按一下这个键,实现功能

  B,再按又是A,这样A-->B-->A-->B-->A的循环。

  还是用例子来说明,比如我们要实现一个雷达的开关,按TAB键来打开/关闭雷达,需要的2个命令:

  hideradar(关闭雷达)drawradar(打开雷达),

  难点在于,只有一个键,要么bindTABhideradar,要么bindTABdrawradar,可是TAB键只有一个。怎么实现按一次用hideradar命令,再按一

  次又换成drawradar命令?,解决的方法就是增加一个变量,让这个变量在需要开雷达的时候等于drawradar,需要关雷达的时候等于hideradar。

  为了说明的清楚,这次我们用中文来说明整个流程:同时后面用数学等式的方法更直观的说明

  alias雷达开关关(定义雷达开关==关)

  alias关hideradar;alias雷达开关开(定义执行雷达关命令,然后定义雷达开关==开)还记得分号的作用吧?

  alias开drawradar;alias雷达开关关(定义执行雷达开命令,然后定义雷达开关==关)

  这样,“雷达开关”这个变量就不停的在(雷达开关==开/雷达开关==关)之间切换,最后,我们把它定义到键上就可以

  bindTAB雷达开关

  整个脚本按正常情况写就是这样:

  aliasradar_keyradar_off

  aliasradar_offhideradar;aliasradar_keyradar_on

  aliasradar_ondrawradar;aliasradar_keyradar_off

  bindTABradar_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一定要定义回第一个变量,这样才能形成一个回环,否则循环一轮以后就进行不下去了。

  最后用一个实际的例子说明

  aliasgraphgraph1

  aliasgraph1net_graph1;aliasgraphgraph2

  aliasgraph2net_graph2;aliasgraphgraph3

  aliasgraph3net_graph3;aliasgraphgraph4

  aliasgraph4net_graph0;aliasgraphgraph1

  bindvgraph

  这个以后按v键即可实现网络状况图形的切换显示没按一下,就按照1,2,3,4,1,2,。。。的方式循环

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

  循环脚本按理说算结束了,实际上,我们还可以把它强化一下,增加一个按键,也就是再增加一个中间变量来进行双向循环控制

  比如在我的CS版本中的MP3播放控制还有游戏中的音量控制就是采用的这种方法,大家有兴趣可以研究一下,音量控制和MP3控制

  都是双向循环脚本,但是如果你可以看出它们之间的区别,说明你已经完全理解这一部分了,篇幅所限,这次讲到这里,大家也看累了吧?我也休息一下先

  注:本人学习CFG,是拜读了www.modchina.com脚本区斑竹o1m的教程(不知是不是传说中的小凡前辈),在本文中也摘取了其中的经典范例进行讲解,再次表示深深的感谢

  附录:DcOocs1.6中关于MP3播放和声音控制的循环脚本

  //调节游戏音量

  aliasvolume0"volume0.0;aliasvolume_upvolume1;aliasvolume_downvolume0"

  aliasvolume1"volume0.1;aliasvolume_upvolume2;aliasvolume_downvolume0"

  aliasvolume2"volume0.2;aliasvolume_upvolume3;aliasvolume_downvolume1"

  aliasvolume3"volume0.3;aliasvolume_upvolume4;aliasvolume_downvolume2"

  aliasvolume4"volume0.4;aliasvolume_upvolume5;aliasvolume_downvolume3"

  aliasvolume5"volume0.5;aliasvolume_upvolume6;aliasvolume_downvolume4"

  aliasvolume6"volume0.6;aliasvolume_upvolume7;aliasvolume_downvolume5"

  aliasvolume7"volume0.7;aliasvolume_upvolume8;aliasvolume_downvolume6"

  aliasvolume8"volume0.8;aliasvolume_upvolume9;aliasvolume_downvolume7"

  aliasvolume9"volume0.9;aliasvolume_upvolume10;aliasvolume_downvolume8"

  aliasvolume10"volume1.0;aliasvolume_upvolume10;aliasvolume_downvolume9"

  aliasvolume_up"volume8"

  aliasvolume_down"volume6"

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

  MP3选择,注:CS1.6中可以使用mp3playcstrike目录中的文件夹名/MP3文件名.mp3来播放MP3

  aliasmp3_play1"mp3playmp3/1.mp3;aliasmp3_play_nextmp3_play2;aliasmp3_play_lastmp3_play20"

  aliasmp3_play2"mp3playmp3/2.mp3;aliasmp3_play_nextmp3_play3;aliasmp3_play_lastmp3_play1"

  aliasmp3_play3"mp3playmp3/3.mp3;aliasmp3_play_nextmp3_play4;aliasmp3_play_lastmp3_play2"

  aliasmp3_play4"mp3playmp3/4.mp3;aliasmp3_play_nextmp3_play5;aliasmp3_play_lastmp3_play3"

  aliasmp3_play5"mp3playmp3/5.mp3;aliasmp3_play_nextmp3_play6;aliasmp3_play_lastmp3_play4"

  aliasmp3_play6"mp3playmp3/6.mp3;aliasmp3_play_nextmp3_play7;aliasmp3_play_lastmp3_play5"

  aliasmp3_play7"mp3playmp3/7.mp3;aliasmp3_play_nextmp3_play8;aliasmp3_play_lastmp3_play6"

  aliasmp3_play8"mp3playmp3/8.mp3;aliasmp3_play_nextmp3_play9;aliasmp3_play_lastmp3_play7"

  aliasmp3_play9"mp3playmp3/9.mp3;aliasmp3_play_nextmp3_play10;aliasmp3_play_lastmp3_play8"

  aliasmp3_play10"mp3playmp3/10.mp3;aliasmp3_play_nextmp3_play11;aliasmp3_play_lastmp3_play9"

  aliasmp3_play11"mp3playmp3/11.mp3;aliasmp3_play_nextmp3_play12;aliasmp3_play_lastmp3_play10"

  aliasmp3_play12"mp3playmp3/12.mp3;aliasmp3_play_nextmp3_play13;aliasmp3_play_lastmp3_play11"

  aliasmp3_play13"mp3playmp3/13.mp3;aliasmp3_play_nextmp3_play14;aliasmp3_play_lastmp3_play12"

  aliasmp3_play14"mp3playmp3/14.mp3;aliasmp3_play_nextmp3_play15;aliasmp3_play_lastmp3_play13"

  aliasmp3_play15"mp3playmp3/15.mp3;aliasmp3_play_nextmp3_play16;aliasmp3_play_lastmp3_play14"

  aliasmp3_play16"mp3playmp3/16.mp3;aliasmp3_play_nextmp3_play17;aliasmp3_play_lastmp3_play15"

  aliasmp3_play17"mp3playmp3/17.mp3;aliasmp3_play_nextmp3_play18;aliasmp3_play_lastmp3_play16"

  aliasmp3_play18"mp3playmp3/18.mp3;aliasmp3_play_nextmp3_play19;aliasmp3_play_lastmp3_play17"

  aliasmp3_play19"mp3playmp3/19.mp3;aliasmp3_play_nextmp3_play20;aliasmp3_play_lastmp3_play18"

  aliasmp3_play20"mp3playmp3/20.mp3;aliasmp3_play_nextmp3_play1;aliasmp3_play_lastmp3_play19"

  aliasmp3_play_next"mp3_play1"//播放MP3下一曲

  aliasmp3_play_last"mp3_play20"//播放MP3上一曲