本文将以cs1.5精简第二版中的一个脚本(cstrike下的valve.rc)为例通过注释来讲解一些功能的实现和脚本的技巧。
//此脚本由TeMplaR.S编辑
//最后编辑时间:18:09 2003-6-13
//
// 游戏自动加载文件
//
//我们的主页:tcno.x168.net并获得其它信息。
//我们的转向域名:tcno.yeah.net(以备不测,呵呵)
//你可以免费获得并无限制的使用本脚本,但请不要修改和去掉本信息。
//当然,如果是仅为你自己使用的话则可以任意的处理。
//由于本人能力有限,出现任何不足请写信来告知我,以便共同解决。
//本脚本适合800×600分辨率(这样能正常显示我的LOGO,嘿嘿)
前面加有“//”号的文本为注释性文本,在游戏中不起作用。只是给编辑人员看的。
//开启控制台
console 1
console "1"
目前在玩CS的朋友应该都知道console的重要性,加上会很方便,即使有一个强大的H菜单。
//执行可能有的autoexec.cfg
exec autoexec.cfg
autoexec.cfg是最广泛的功能添加方式,所以有个支持,这个就具体情况决定要不要。它本身没有什么,不像1.6版里面的userconfig.cfg一样名字不能随便改。
//设定控制台弹出收回速度
scr_conspeed "9999"
我想大家都不喜欢原版的慢慢腾腾的console吧。
//下面是我个人的广告,可以换成你的。呵呵
echo ""
echo ""
echo "================================================================="
echo " You are playing Counter-Strike 1.5 Mini 2.0"
echo "================================================================="
echo " Welcome To tcno.x168.net"
echo "================================================================="
echo " This is make by TeMplaR.S E-Mail To xxxxxxxx@xxxx.com"
echo "================================================================="
echo ""
echo ""
echo+"要显示的东西"。
这将会在console上显示引号内的文字。如果设定了“developer 1”的话将会在屏幕也显示出来(1.5版以前,1.6不支持)。
//开关持久语音通讯项
这就是一个开关性的脚本。 下面三个小单元和它原理相同。
alias change_voice_speak(A) "+voicerecord(B); alias change_voice_key change_voice_mute(C)"
定义命令A=命令B+命令C(B和C以“;”隔开)。同时C的意义为将命令X定义为命令D。
alias change_voice_mute(D) "-voicerecord(E); alias change_voice_key change_voice_speak(F)"
接上注释。定义命令D=命令E+命令F。同时F的意义为将命令X定义为命令A。
alias change_voice_key(X) change_voice_speak(F)
定义命令X在一开始时(脚本刚刚载入时)的内容是A还是D。也就是初始化。
通过这样一个奇妙的嵌套,只需反复执行一个指令(就是x),它就会在两个功能间切换,同时执行附着其上的、我们需要的指令。
//开关显示FPS项
alias change_showfps_show "cl_showfps 1; alias change_showfps_key change_showfps_hide"
alias change_showfps_hide "cl_showfps 0; alias change_showfps_key change_showfps_show"
alias change_showfps_key change_showfps_show
//一键换手
alias change_hand_left "cl_righthand 0; alias change_hand_key change_hand_right"
alias change_hand_right "cl_righthand 1; alias change_hand_key change_hand_left"
alias change_hand_key change_hand_left
//开关雷达项
alias change_radar_show "drawradar; alias change_radar_key change_radar_hide"
alias change_radar_hide "hideradar; alias change_radar_key change_radar_show"
alias change_radar_key change_radar_hide
//切换准星变色模式项
这个有些复杂,但也是alias嵌套的结果。更改其末端起作用的命令很容易,只需要将alias的嵌套运用熟练,能根据要实现的目的而设计其结构即可。
下面这个单元实现的是在游戏中准星边颜色的方式的切换。
首先,把具体工作的指令通过alias定义为简单的代码。
alias cca1 "bind mouse1 +attack_cca"
alias cca2 "bind a +moveleft_cca"
alias cca3 "bind d +moveright_cca"
alias cca4 "bind w +forward_cca"
alias cca5 "bind s +back_cca"
下小节同上,为上面服务
alias +attack_cca "+attack; adjust_crosshair"
alias +moveleft_cca "+moveleft; adjust_crosshair"
alias +moveright_cca "+moveright; adjust_crosshair"
alias +forward_cca "+forward; adjust_crosshair"
alias +back_cca "+back; adjust_crosshair"
以下小节同上面。
alias ccm1 "bind mouse1 +attack"
alias ccm2 "bind a +moveleft"
alias ccm3 "bind d +moveright"
alias ccm4 "bind w +forward"
alias ccm5 "bind s +back"
下面的小节是为“+”开头的指令定义其“-”部分,不然后出现“unknow command”的错误。
alias -attack_cca -attack
alias -moveleft_cca -moveleft
alias -moveright_cca -moveright
alias -forward_cca -forward
alias -back_cca -back
alias change_cross_color_manual "ccm1; ccm2; ccm3; ccm4; ccm5; alias change_cross_color_key change_cross_color_auto"
上面这句定义了手动变色指令的含义:首先依次执行刚才定义的指令;最后将开关指令的内容定义为自动变色。本句和下面三句同上面的开关是一样的原理,只是来回切换中附着的指令不同而已。
alias change_cross_color_auto "cca1; cca2; cca3; cca4; cca5; alias change_cross_color_key change_cross_color_manual"
alias change_cross_color_key change_cross_color_auto
最后,不要忘了初始化这个开关指令的内容。这也是我开始时常犯的错误。
//一键变文字颜色项
本单元是一个循环的指令,其实也就是一个把周期变长的开关指令。由A→B→A变为A→B→C→D..→A而已。
alias change_text_color_a "con_color 255+128+128; alias change_text_color_key change_text_color_b"
它的每一句都非常简单。结构为:
定义 命令B 为:颜色变为.. ;命令X为命令C
alias change_text_color_b "con_color 255+0+0; alias change_text_color_key change_text_color_c"
alias change_text_color_c "con_color 255+90+0; alias change_text_color_key change_text_color_d"
alias change_text_color_d "con_color 255+255+0; alias change_text_color_key change_text_color_e"
alias change_text_color_e "con_color 0+255+0; alias change_text_color_key change_text_color_f"
alias change_text_color_f "con_color 0+0+255; alias change_text_color_key change_text_color_g"
alias change_text_color_g "con_color 255+0+255; alias change_text_color_key change_text_color_h"
alias change_text_color_h "con_color 255+255+255; alias change_text_color_key change_text_color_i"
alias change_text_color_i "con_color 0+0+0; alias change_text_color_key change_text_color_j"
alias change_text_color_j "con_color 0+150+100; alias change_text_color_key change_text_color_k"
alias change_text_color_k "con_color 100+150+100; alias change_text_color_key change_text_color_l"
alias change_text_color_l "con_color 70+236+79; alias change_text_color_key change_text_color_m"
alias change_text_color_m "con_color 52+98+254; alias change_text_color_key change_text_color_n"
alias change_text_color_n "con_color 190+120+116; alias change_text_color_key change_text_color_o"
alias change_text_color_o "con_color 0+150+150; alias change_text_color_key change_text_color_p"
alias change_text_color_p "con_color 255+155+50; alias change_text_color_key change_text_color_a"
alias change_text_color_key change_text_color_a
初始化。
//调节音量
这个单元的脚本是在上个的基础发展而来。由单向循环变为双向循环,另外由于要在屏幕上显示,加上了“developer 0/1”来打开开发模式。
alias vol0 "volume 0.0; developer 1; echo [----------]; developer 0; alias volup vol1; alias voldown vol0"
单句结构为:定义 命令1 为: 执行指令1; 执行指令2(开屏显); 命令3(图形化直观的显示音量比例); 命令4(关屏显); 定义此时向上循环的意义; 定义此时向下循环的意义。
alias vol1 "volume 0.1; developer 1; echo [|---------]; developer 0; alias volup vol2; alias voldown vol0"
alias vol2 "volume 0.2; developer 1; echo [-|--------]; developer 0; alias volup vol3; alias voldown vol1"
alias vol3 "volume 0.3; developer 1; echo [--|-------]; developer 0; alias volup vol4; alias voldown vol2"
alias vol4 "volume 0.4; developer 1; echo [---|------]; developer 0; alias volup vol5; alias voldown vol3"
alias vol5 "volume 0.5; developer 1; echo [----|-----]; developer 0; alias volup vol6; alias voldown vol4"
alias vol6 "volume 0.6; developer 1; echo [-----|----]; developer 0; alias volup vol7; alias voldown vol5"
alias vol7 "volume 0.7; developer 1; echo [------|---]; developer 0; alias volup vol8; alias voldown vol6"
alias vol8 "volume 0.8; developer 1; echo [-------|--]; developer 0; alias volup vol9; alias voldown vol7"
alias vol9 "volume 0.9; developer 1; echo [--------|-]; developer 0; alias volup vol10; alias voldown vol8"
alias vol10 "volume 1.0; developer 1; echo [---------|]; developer 0; alias volup vol10; alias voldown vol9"
alias volup "vol9"
初始化音量增加。
alias voldown "vol7"
初始化音量减小。
初始化过音量增加和减小的命令后就可以把它们具体的绑到键位上用了。
//一键买枪简化命令
这也许是最古老的脚本了。其基本部分没有什么难点,主要内容是一键执行预先设定的多个指令而已。
由于增加了许多新功能才使得它有内容可说。
下面的小节是简化指令,把系统里面长些的指令简化。
alias w wait
定义下面要等的间隙,如果你在游戏中发现菜单不能很好的关闭就可以适当增加wait的数量。比如alias w "wait; wait"
alias ms1 "menuselect 1"
alias ms2 "menuselect 2"
alias ms3 "menuselect 3"
alias ms4 "menuselect 4"
alias ms5 "menuselect 5"
alias ms6 "menuselect 6"
alias ms7 "menuselect 7"
alias ms8 "menuselect 8"
alias ms9 "menuselect 9"
//购买定义
具体的为每种要买的物品定义一个购买命令。
alias +ammop "buy; ms6"
alias -ammop "w; slot10"
这种“+”“-”的模式的功能是按下键(+命令所绑到的键)时执行“+”定义的命令,松开时执行对应同名的“-”的命令。
alias +ammos "buy; ms7"
本句含义:定义+ammos为buy和ms7,就是执行+ammos时就顺序执行buy和ms7。也就是买手枪的子弹。
alias -ammos "w; slot10"
本句含义:定义-ammos为w和slot10,就是执行-ammos时就顺序执行w和slot10。也就是等一个很短的时间后执行slot10(关闭任何数字键控制的菜单菜单)。
alias +o1 "buyequip; ms1"
alias -o1 "w; slot10"
alias +o2 "buyequip; ms2"
alias -o2 "w; slot10"
alias +o3 "buyequip; ms3; w; buyequip; ms3"
alias -o3 "w; slot10"
alias +o4 "buyequip; ms4"
alias -o4 "w; slot10"
alias +o5 "buyequip; ms5"
alias -o5 "w; slot10"
alias +o6 "buyequip; ms6"
alias -o6 "w; slot10"
alias +o7 "buyequip; ms7"
alias -o7 "w; slot10"
alias +11 "buy; ms1; ms1; +ammos"
alias -11 "w; slot10"
alias +12 "buy; ms1; ms2; +ammos"
alias -12 "w; slot10"
alias +13 "buy; ms1; ms3; +ammos"
alias -13 "w; slot10"
alias +14 "buy; ms1; ms4; +ammos"
alias -14 "w; slot10"
alias +156 "buy; ms1; ms5; w; buy; ms1; ms6; +ammos"
这种买两个的语句是同时买两个分别为CT和T特有的武器,以节省用来绑定命令的键位。
alias -15 "w; slot10"
alias +21 "buy; ms2; ms1; +ammop"
alias -21 "w; slot10"
alias +22 "buy; ms2; ms2; +ammop"
alias -22 "w; slot10"
alias +31 "buy; ms3; ms1; +ammop"
alias -31 "w; slot10"
alias +324 "buy; ms3; ms2; w; buy; ms3; ms4; +ammop"
alias -324 "w; slot10"
alias +33 "buy; ms3; ms3; +ammop"
alias -33 "w; slot10"
alias +35 "buy; ms3; ms5; +ammop"
alias -35 "w; slot10"
alias +413 "buy; ms4; ms1; w; buy; ms4; ms3; +ammop"
alias -413 "w; slot10"
alias +414 "buy; ms4; ms1; w; buy; ms4; ms4; +ammop"
alias -414 "w; slot10"
alias +424 "buy; ms4; ms2; w; buy; ms4; ms4 +ammop"
alias -424 "w; slot10"
alias +423 "buy; ms4; ms2; w; buy; ms4; ms3 +ammop"
alias -423 "w; slot10"
上面四个物品的购买语句中增加了不常见的41、44和42、43组合,你也可以如此这般增加其他例如O6和41的组合等你喜欢的东西。
alias +45 "buy; ms4; ms5; +ammop"
alias -45 "w; slot10"
alias +46 "buy; ms4; ms6; +ammop"
alias -46 "w; slot10"
alias +478 "buy; ms4; ms7; w; buy; ms4; ms8; +ammop"
alias -478 "w; slot10"
alias +51 "buy; ms5; ms1; +ammop"
alias -51 "w; slot10"
//三个套装
这里的套装是一上面的单件购买为基础的,可随便增删。采用简单的堆叠的方法,如果你发现它不能很好的关闭菜单可以在每句后面加wait和slot10。
alias fuzhu "+ammop; +ammos; +o2; +o3; +o4; +o6"
alias fullct "+413; +ammos; +o2; +o3; +o4; +o6"
alias fullt "+413; +11; +o2; +o3; +o4"
//预定义购买开始
本脚本中的预定义购买的原理是先设一个没有什么作用的命令(感觉称之为变量更合适),然后在游戏中改变它的指向来达到我们的目的,当然是不限于买装备的。
alias 11_d "alias buy_d_2 +11"
这个语句就是指定11_d等于buy_d_2和+11。就是说在执行11_d时会买装备和一个+11指令。而+11这个指令就是我们上面说的变量,它将在后面的脚本中被定义。
alias 12_d "alias buy_d_2 +12"
alias 13_d "alias buy_d_2 +13"
alias 14_d "alias buy_d_2 +14"
alias 156_d "alias buy_d_2 +156"
alias 21_d "alias buy_d_1 +21"
alias 22_d "alias buy_d_1 +22"
alias 31_d "alias buy_d_1 +31"
alias 324_d "alias buy_d_1 +324"
alias 33_d "alias buy_d_1 +33"
alias 35_d "alias buy_d_1 +35"
alias 413_d "alias buy_d_1 +413"
alias 414_d "alias buy_d_1 +414"
alias 423_d "alias buy_d_1 +423"
alias 424_d "alias buy_d_1 +424"
alias 45_d "alias buy_d_1 +45"
alias 46_d "alias buy_d_1 +46"
alias 478_d "alias buy_d_1 +478"
alias 51_d "alias buy_d_1 +51"
alias o1_d "alias buy_d_3 +o1"
alias o2_d "alias buy_d_4 +o2"
alias o3_d "alias buy_d_5 +o3"
alias o4_d "alias buy_d_6 +o4"
alias o5_d "alias buy_d_7 +o5"
alias o6_d "alias buy_d_8 +o6"
alias o7_d "alias buy_d_9 +o7"
alias b6_d "alias buy_d_10 +ammop"
alias b7_d "alias buy_d_11 +ammos"
通过上面的脚本大家也可以看出,装备和附带指令的参数并不是和谐的变化的。因为在预定义购买中,执行购买时每个装备的位置只买一个。因此,后者的变化是随着前者的位置属性而变的。
alias buy_d_go "buy_d_1; buy_d_2; buy_d_3; buy_d_4; buy_d_5; buy_d_6; buy_d_7; buy_d_8; buy_d_9; buy_d_10; buy_d_11; buy_d_initialize; w; slot10"
此句将依次执行这些预先设定的变量。
alias buy_d_initialize "alias buy_d_1 buy_d_echo; alias buy_d_2 buy_d_echo; alias buy_d_3 buy_d_echo; alias buy_d_4 buy_d_echo; buy_d_initialize2"
此句将每个变量都定义为无关紧要或无实际意义的指令。注意:由于语句太长,后面用了一个指令转到下句执行。
alias buy_d_initialize2 "alias buy_d_5 buy_d_echo; alias buy_d_6 buy_d_echo; alias buy_d_7 buy_d_echo; alias buy_d_8 buy_d_echo; buy_d_initialize3"
同上,后面部分转到下句。
alias buy_d_initialize3 "alias buy_d_9 buy_d_echo; alias buy_d_10 buy_d_echo; alias buy_d_11 buy_d_echo"
这一长句结束。
alias buy_d_echo "echo "
这里告诉我们这个变量被绑定的无关紧要的命令是在console上显示空白。
下面一小节是将这十一个变量初始化为那个无关紧要的命令。
alias buy_d_1 buy_d_echo
alias buy_d_2 buy_d_echo
alias buy_d_3 buy_d_echo
alias buy_d_4 buy_d_echo
alias buy_d_5 buy_d_echo
alias buy_d_6 buy_d_echo
alias buy_d_7 buy_d_echo
alias buy_d_8 buy_d_echo
alias buy_d_9 buy_d_echo
alias buy_d_10 buy_d_echo
alias buy_d_11 buy_d_echo
//预定义购买结束
这样一个预定义购买单元就结束了。大家可以进行改造以更适应自己。
//以下为图形化控制菜单中自定义命令的服务
这小节的内容与上面个部分都没有关系。由于H键菜单受格式限制不能在其中定义其需要的指令。所以在本文件内对这些做了定义。这也是valve.rc的基本功能,其他游戏中用到的东西都可以在此装载。
alias statement "developer 1; echo ****** This Script Edited by TeMplaR.S ******; echo **** E-Mail to me zxcslove@hotmail.com ****; echo ********** Welcome To tcno.x168.net **********; developer 0"