精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>已关闭版区>>● Quake>>Quake设置篇>>Q3A脚本编写指南--进阶篇

主题:Q3A脚本编写指南--进阶篇
发信人: kenjo()
整理人: kenjo(2002-07-09 23:22:59), 站内信件
by nCut.Eli
很抱歉这篇文章这么晚才写成。首先是我对脚本的协助作用产生了怀疑,其次上面那句话是个借口,最重要的还是我比较懒。昨天晚上老马逼我交稿,再加上这事儿我早就答应了,所以只好在头昏脑胀的情况下把这部分赶出来了。如果有错误请大家尽量拽西红柿过来,我最喜欢吃的就是这玩意儿了:)。
还是从简单的说起。建议不太明白脚本使用的人复习一下+vstr的用法。
上次讲到,在+vstr、+modifX等osp命令出来以前,要做一些比较有帮助的功能,是比较困难的,而且用到的命令还会产生一些问题(当然是对自己不利的啦)。osp真是我们的好伙伴,不但体贴我们,还不要钱。当你用到这些命令的时候,最好选择+vstr。因为它不但用起来方便,还没有数量上的限制。
这些日子频繁的看到有人问如下问题:譬如e键是换RL,怎么才能让shift+e成为say_team某句话呢?Quake这玩意儿没有热键的设定,也不区分大小写,我们要达成这项功能,只能靠脚本了(废话)。为了让不太懂脚本的人也能看明白,我先说说思路。
说透了,这其实不过是两种状态:第一种状态就是正常状态,各个键位负责换枪;第二种状态,是发消息的状态,各个键位现在用来发消息。而Shift(或者别的键)呢,就是负责切换两种不同的状态。在没有+vstr等命令以前,一般来说脚本用的都是摁一下切换一次的方法。
首先,我们要设定设置两种状态的变量。
换枪状态:
set weaponReset "bind 1 weapon 1;bind 2 weapon 2;bind 3 weapon 3;bind 4 weapon 4;bind 5 weapon 5;bind 6 weapon 6;bind 7 weapon 7;bind 8 weapon 8" 
消息状态: 
set messageReset "bind 1 say_team 1;bind 2 say_team 2;bind 3 say_team 3;bind 4 say_team 4;bind 5 say_team 5;bind 6 say_team 6;bind 7 say_team 7;bind 8 say_team 8" 
这里面say_team后面的数字代表相应你想说的话。譬如你想说:“Quad..”就:say_team Quad..。其实这样把say_team xxx直接放到mesageReset里并不好,而是应该相应的设到变量里:
set Message1 "say_team 1"(譬如1就是你想说的话) 
然后将其绑定的语句改为以下样子,相应的每个消息都这么做: 
bind 1 vstr Message1
现在两个状态有了,如果是以前摁一次切换一次的功能,是这样(譬如说用shift): 
bind shift "vstr weaponReset"
同时在两个状态的变量里加上设置下一次摁Shift要执行什么。weaponReset里加上: 
bind shift vstr messageReset
而messageReset里要加上: 
bind shift vstr weaponReset
这样就可以切换了。很多人习惯象Windows里面的热键的摁法,现在我们有了+vstr。在shift摁下去的时候,我们要他发消息。如果没有摁,就换枪。这就是热键的实现方法: 
bind shift "+vstr messageReset weaponReset"
而两个状态的变量里无需添加任何多余的东西。这样,在shift摁下去的时候,所有的绑定的键位就重新被定义成说话用了。如果你换枪的时候还要换准星什么的,这样好象不行,因为Quake Script不允许嵌套,一个分号一个命令。这样你就需要把换枪时执行的命令,全部放进一个变量里,譬如说: 
set sg "weapon 3;cg_zoomfov(或cg_fov) 110;cg_drawgun 1;cg_drawCrosshair 8;cg_Crosshairsize 26;ch_crosshairColor blue" bind 3 "vstr sg"
在这种情况下,weaponReset里面放的就不是直接的weapon几,而是将weapon几的位置换成vstr相应的换枪变量。
简单吧,其实脚本的编写比较容易,只要你肯动脑子,不要象我们队的某个懒蛋和某些朋友一样,动不动就让别人给你做,这样不但会损害你勤劳的美德,最要命的是,如果你自己完全不明白,你的config复杂一些你就别想做改动了。哈哈,爽。
然后是上次说到的czm的狙击模式。最完美的脚本如下: 
bind MOUSE4 "+vstr quickrail_hold quickrail_release"
seta quickrail_hold "weapon 7;cg_drawCrosshair 5;cg_crosshairsize 36;cg_zoomfov 65(或cg_fov);sensitivity 5.525"
seta quickrail_release "+attack;vstr prevweapon;-attack"
当然prevweapon这个变量是要在换枪时设置的。在这里有一个小技巧: 
set sg "weapon 3;cg_zoomfov(或cg_fov) 110;sensitivity 10;set prevweapon vstr sg"
将prevweapon设向自己,这样就无需更多的变量了,这算是递归么??
现在你拿着shotgun摁下mouse4,执行hold状态,放大成65度,掏出RG,咦?那边满地乱走的是谁?aim it,松开mouse4,中了,执行换sg的变量,枪自动换回sg(或刚才你拿的枪),视角也换回刚才的110度了,手感也回去了,嘭!:)
当然了,如果你每把枪状态一样,完全可以直接再release里面设上你要的值,那样就更简单了。需要注意的是,如上脚本,如果你在zoom状态换了枪,恢复的时候也会恢复你最后换的那把枪的各种状态。
接下来贴一段不用低头的火箭跳脚本,过于简单,我就不说了,劳易结合一下:)。 
bind x "vstr rjump" 
seta www "wait;wait;wait;wait"
seta rjump_1 "set freelook 0;set cl_pitchspeed 99999;+lookdown;vstr www;+attack;+moveup"
seta rjump_2 "set cl_pitchspeed 140;set freelook 1;-attack;-moveup"
seta rjump "vstr rjump_1;vstr www;vstr rjump_2;vstr www;centerview;vstr www;centerview;vstr www;centerview;vstr www;centerview" 
就是拿RB公布的那个cfg加了一个+lookdown。快速转身也是同样的道理,用right或left就行,不过由于转身不象低头有个最低限度,根据各种不利因素,不是太准,不推荐使用。还有什么有用的?想不起来了,接下来就直接到高潮吧,也就是我说的thinShaft和NormalShaft切换不抖动的方法。

[关闭][返回]