精华区 [关闭][返回]

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

主题:Q3A脚本编写指南--完结篇
发信人: kenjo()
整理人: kenjo(2002-07-09 23:29:46), 站内信件
by nCut.Eli
是不是该讲一下什么是thinShraft呢?大家都知道,+zoom以后,我们用的是zoomfov。在Quake刚出的时候,cg_zoomfov是用来设定zoom的大小的。后来不知道哪个变态,把cg_zoomfov设定的和平是不zoom的时候一样大小,发现画面没什么区别,这时候将cg_fov调到很大,发现电枪变的出奇的细了!
其实这就是利用了这样一个道理,当+zoom的时候,id为了防止电枪太宽而挡住视线,按照cg_zoomfov和cg_fov的比例将电枪的位置大大后移,实际当然是往下移,电光于是变细了。当然,这一切都是在cg_drawgun 1的时候才有效。于是很多人开始使用这样的cfg,300左右的fov然后用zoomfov做普通视角,反正发大现在用的是直接切换,直接切换zoomfov也不会有什么问题。Z4就是其中一员。
thinShaft必需的命令:
cg_drawgun 1 or 2
cg_zoomfov 你原来fov的值 
cg_fov 300左右,你可以自己常试不同的值,如果和fov差不多,则控制枪口高低,如果非常大,就会看见从地面深处搞人家下半身的小棍棍。
Z4的cfg换lg是不抖的,因为它所有的枪都工作在+zoom状态下。而有些人则不喜欢这样,认为会影响手感,可是thinshaft太好瞄准了,怎么办呢?
他们换电枪的时候+zoom,其他枪-zoom。由于+zoom和-zoom都有一个画面拉动过程,cg_fov和cg_zoomfov值又不一样,换枪的时候就会产生抖动。
尽量减少抖动的方法是这样,争取在换枪的时候使得cg_zoomfov以及cg_fov值相等。那么是不是在+/-zoom以前重新设定cg_fov的值就可以了呢?
试过以后发现不行,因为这两个命令执行的太快,+/-zoom总是还有效果。我们唯一的方法只有让+/-zoom和fov的设定中间间隔的时间尽量远,才可能不抖动。
还记得wait不?
当我们用其它的枪换lg的时候,先使cg_zoomfov和cg_fov相等,都是平时用的视角,而此时是cg_fov的状态。然后+zoom这样不会有拉动的动做。等到枪也换了,zoom也+了,我们再将cg_fov设为300。为了防止cg_fov执行过快,我们要在它前面加上若干wait。
lg换其他枪呢?要先把cg_fov设回来,再-zoom。同样的道理,为了防止-zoom执行过快,应该在它前面也加些wait。
以下是RB公布的那个cfg的一部分:
bind 1 "weapon 1 ;cg_drawgun 0 ;cg_fov 107 ;-zoom ;sensitivity 12.8"
bind q "weapon 2 ;cg_drawgun 0 ;cg_fov 107 ;-zoom ;sensitivity 12.8"
bind r "weapon 3 ;cg_drawgun 0 ;cg_fov 107 ;-zoom ;sensitivity 12.8"
bind 3 "weapon 4 ;cg_drawgun 0 ;cg_fov 107 ;-zoom ;sensitivity 12.8"
bind 4 "weapon 4 ;cg_drawgun 0 ;cg_fov 107 ;-zoom ;sensitivity 12.8"
bind c "weapon 6 ;cg_drawgun 2 ;vstr fov_thin ;sensitivity 9.5"
bind e "weapon 7 ;cg_drawgun 0 ;cg_fov 107 ;-zoom ;sensitivity 12" 
bind f "weapon 8 ;cg_drawgun 0 ;cg_fov 107 ;-zoom ;sensitivity 12.8"
set fov_thin "cg_zoomfov 105 ;+zoom ;wait 37 ;cg_fov 200 ;+zoom" 
他的-zoom前面并没有放wait,而且这个cfg还是会抖动的。为什么RB不放更多的wait让抖动彻底消失呢?
因为wait这个命令有一个特性,在它执行的过程中,你控制的角色将保持上一个动作的状态,而你什么也不能干,放在这里就会影响开枪的速度,等于换枪间隔变的特别长。有兴趣的可以试试wait 999999999之类的:)。而少量wait则根本没有影响,因为你的反映比电脑慢多了。
无抖动的原理就是这个,如何真正实现无抖动呢?这个方法是有一天我喝多了不知道怎么想出来的,世界独一份哦,有了它,我就是世界上最有创意的Quake 3 config脚本大师了,哈哈哈哈,我真是太NB了!(.................)。
就象上面说的,人的反应要慢许多,所以想无抖动,还是要靠你自己。
换枪的时候是摁一个键,而一个键有摁下和放开两个状态,为了把时间拉长,我们把换电枪时候的+zoom放到摁下的时候,而cg_fov 200则放到松开的时候。同理,电枪换其他枪时,摁下则cg_fov 107,松开才-zoom。
首先我们要设置normal的状态和thinShaft的状态,先是切换zoomfov和fov时候的,也就是松开换枪键的时候:
set fov_thin "wait 15;cg_fov 200" set fov_normal "wait 15;-zoom"
然后是绑定在枪上的设置,譬如说从sg换到lg时,视角时cg_fov 107,现在要换到cg_fov 200,然后是cg_zoomfov 107。
set lg "weapon 6;cg_zoomfov 107;cg_fov 107;+zoom"
这是lg键位摁下去的状态,手里是lg,用的是cg_zoomfov,但是cg_fov还是107,所以+zoom无拉动过程。
从lg换sg呢?
set sg "weapon 3;cg_zoomfov 107;cg_fov 107"
不-zoom,因为此时-zoom就会有拉动过程,cg_fov 107没有执行完整。最终是这样绑定的:
bind c "+vstr lg fov_thin" bind r "+vstr sg fov_noramal" 
当你摁完换枪键的时候,视角的切换就完成了,但是需要注意一点,如果你摁住了换枪键不撒手(?),直到你松开之前,视角的切换都不会被执行,不过这没关系,首先是画面不会有差异,其次,你摁着它干嘛?一般人不都是点一下么。
把所有的枪都按这种方法处理,我们的工作就完成了。试试看,没有抖动吧!而且wait数减到了最小(不见得是15,10左右在有些机器上就行了),对战斗的影响几乎不存在了。
以下是RB公布的config的改动版:
//< Weapon Bindings >
bind 1 "+vstr gt fov_restore"
bind q "+vstr mg fov_restore"
bind r "+vstr sg fov_restore"
bind 3 "+vstr gl fov_restore"
bind 4 "+vstr gl fov_restore"
bind c "+vstr lg_change fov_thin"
bind e "+vstr rg fov_restore"
bind f "+vstr pg fov_restore"
set lg_change "cg_zoomfov 107;cg_fov 107;+zoom;weapon 6;cg_drawgun 2;sensitivity 9.5"
set fov_thin "wait 15;cg_fov 214"
set gt "weapon 1 ;cg_drawgun 0 ;cg_fov 107 ;cg_zoomfov 107;sensitivity 12.8"
set mg "weapon 2 ;cg_drawgun 0 ;cg_fov 107 ;cg_zoomfov 107;sensitivity 12.8"
set sg "weapon 3 ;cg_drawgun 0 ;cg_fov 107 ;cg_zoomfov 107;sensitivity 12.8"
set gl "weapon 4 ;cg_drawgun 0 ;cg_fov 107 ;cg_zoomfov 107;sensitivity 12.8"
set rl "weapon 5 ;cg_drawgun 0 ;cg_fov 107 ;cg_zoomfov 107;sensitivity 12.8"
set rg "weapon 7 ;cg_drawgun 0 ;cg_fov 107 ;cg_zoomfov 107;sensitivity 12.8"
set rgz "weapon 7 ;cg_drawgun 0 ;cg_fov 60 ;cg_zoomfov 60;sensitivity 6"
set pg "weapon 8 ;cg_drawgun 0 ;cg_fov 107 ;cg_zoomfov 107;sensitivity 12.8"
set fov_restore "wait 15;-zoom"
//< Mouse Settings >
bind MOUSE1 "+attack"
bind MOUSE2 "+vstr rl fov_restore"
bind MOUSE3 "+vstr rgz fov_restore" 
大功告成!kao,困死我了,现在已经是早上了,4点多的时候想起老马的威胁:“你可别晃点我。”造成了这种结果.......让我想想我还想说什么.............
对了,+vstr一定要放在bind里,放在其它的变量里是不管用的,如果你的cfg还有其他功能,譬如说结合了其它比较复杂的脚本和这些脚本有冲突,那么你就需要重新统筹安排了。没有做不到的,只有想不到的,想清楚再试着改,总能弄出自己想要的东西。
还有还有,捎带手说一下摁一次键切换一个武器的普通模式,再摁同一个键切换这个武器另外一个模式的脚本。一般都是normal和zoom之间的切换。
首先是每把枪都必须有模式的恢复,这个我说的简单一些,再论坛上都说过好几遍了,而且我太困了,5555555~~ 
set weaponRestore "bind 1 vstr gt;bind 2 vstr mg;bind 3 vstr sg"
把vstr weaponRestore绑定在所有的枪的变量里。譬如mg: 
set mg "weapon 2;cg_zoomfov(或fov) 110;sensitivity 11;vstr weaponRestore;bind 2 vstr mgz"
weaponRestore把所有的枪都恢复成换过去就是普通模式。最后一句话是掏出mg以后,将2键绑定为mg的zoom模式: 
set mgz "weapon 2;cg_zoomfov(或fov) 60;sensitivity 6;vstr weaponRestore"
这里不用再把2绑定回去了,因为再次执行了weaponRestore。所有枪都做相同处理即可。
我还有什么想说的?还有,有的时候实现更多的功能,主要是必须用变量的嵌套,这靠的都是基础的逻辑思维,谁也帮不了你,除非你花钱到我这里来定做,嗯($#@^&**$^#.....)。
然后我要说的就是我说了n遍的破事儿了,别太在乎config,没用,换来换去只能让你真正的水平没有进步,对各种各样的设置哪个好感到迷茫,甚至手感都破坏掉,我就是最好的例子,这可是现身说法啊!我写这个,是希望对大家有帮助,不是要坑害你们,一定要搞明白你玩Quake,你的提高,只有靠脚踏实地的东西,除了练习,什么都是虚的。
另外再说一个东西,我config里的,能省些麻烦: 
seta StartString "-zoom;in_restart"
seta cg_execVstr "StartString"
我现在不用thinShaft了,用的人改为+zoom,这样每次vid_restart就用再+zoom了,至于in_restart,是重置输入,如果有的键不管用,可以试试。
完。我可不能再写了,如果老想起东西来就睡不了觉了,不知道老马现在在做什么....因为状态不好,写的这些可能有错误,按照我们概率书的前言,请大家斧正,但不是用斧子砍我的说,西红柿就挺好的了,再来点儿蛋也行:P~~~~~。
另外,无抖动换lg有一种我想起一种非常简单的写法,不过不知道好不好用,等我试好了,下回再说。也要用到+vstr,可见+vstr是多么的有用。
嗯,睡觉,zzzzzzzZZZZZZzz..............
下午起床,又想起一个可以告诉大家的。那些用高sen和0加速的朋友,可以把cl_mouseaccel给一个0.1左右的负值,就如同那些rpg里的修正值,可以准确定位,不过到底多少还需要你自己去试,原则是尽量小一些,避免影响手感。
另外,在附上一段开一枪换一色的rg脚本。 
seta rgc "vstr rgc1"
seta rgc1 "set rgc vstr rgc2;color2 1"
seta rgc2 "set rgc vstr rgc3;color2 2"
seta rgc3 "set rgc vstr rgc4;color2 3"
seta rgc4 "set rgc vstr rgc5;color2 4"
seta rgc5 "set rgc vstr rgc6;color2 5"
seta rgc6 "set rgc vstr rgc7;color2 6"
seta rgc7 "set rgc vstr rgc1;color2 7"
...............
.........
方法就是这样,如果还要换color1,加上即可,也可以这样: 
seta rgc_1 "vstr rgc1"
seta rgc1 "set rgc vstr rgc2;color1 1"
seta rgc2 "set rgc vstr rgc3;color1 2"
seta rgc3 "set rgc vstr rgc4;color1 3"
seta rgc4 "set rgc vstr rgc5;color1 4"
seta rgc5 "set rgc vstr rgc6;color1 5"
seta rgc6 "set rgc vstr rgc7;color1 6"
seta rgc7 "set rgc vstr rgc1;color1 7"
...............
.........
然后绑定在rg的攻击上: 
seta rg_attack "+attack;vstr rgc;vstr rgc_1;-attack"
bind 7 "vstr rg;bind Mouse1 vstr rg_attack" 
放到变量里还是因为分号的原因。这样核心和外围的颜色都会分别循环变换。但是其它连续发射的枪就无法正常攻击了。所以要: 
bind 3 "vstr sg;bind Mouse1 +attack" 
所有的枪都用相同方法处理。另外,即使你用的是一段脚本并且直接 
bind 3 "+attack;vstr rgc" 
这样虽然所有的枪都没问题,但是即使是在局域网,也有可能会产生严重的Lag现象,所以还是要在其他枪的设定里将mouse1重新绑到+attack上。
也许这样可以? 
set attack_attack "+attack"
set attack_stop "vstr rgc;vstr rgc_1;-attack"
bind mouse1 "+vstr attack_attack attack_stop" 
这样在松手的时候才执行换颜色功能,可能就没有任何问题了吧!由于最近对这个不感兴趣,所以这段码是此时此刻想到的解决办法,还没有Test,大家帮忙看看有没有问题吧:)。
嗯,暂时到这里,如果我再想起什么,以后再说了,反正任务我是完成了,不知道能不能对同志们有所帮助?最近有朋友要包含所有功能的脚本,我看了看,不是不能做,是码太多了而且关系复杂,那样的话我认为只有坏处没有好处,不但难以修改,而且如果在关键比赛里突然出了意想不到的毛病,就划不来了。有工夫还是多练习比较实在,是不是?:)
P.S.
最后告诉那些机器强劲的人一个不算作弊的作弊方法,通过Quake的正常功能达到透视的效果。机器不是P4,显卡不是GFS3的就不要试了。将r_stencilbits设为8,而不是通常优化过的cfg里面的0,然后将cg_shadows设为2,当然必须在lightmap下。开始很可能不习惯,但这可是比赛里都不禁止的哦。

[关闭][返回]