设为首页收藏本站新闻投稿

MOD中国同盟社

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1543|回复: 0

[教程] cs制图技术 [复制链接]

Rank: 7Rank: 7Rank: 7

帖子
82
精华
0
声望
1066 点
金币
253 Mold
被赞许
17 次
注册时间
2011-3-27

可爱小猫

发表于 2011-7-19 14:23:23 |显示全部楼层
                                                        Cs制图技术

★以下所有技术都是在这个fgd(cs16_0.8.1.4_vl.fgd)与vluzacn修改的编译程序zhlt vl23上得到的
★并且只是为了让大家知道这些技术,并非都是我原创的.
★有任何问题不要来问我,自己求助去,我是不会回答的.
★初学者可能看起来有点难度,那就先去学会作图再说
★实体不理解的请参考x-man天书
★由于时间上的限制加上本人比较懒,很多技术只讲方法不讲具体原理了

★★★★★
几个应该知道的东西:
game_playerjoin 玩家加入游戏的时候触发
game_playerspawn 每局开始玩家重生的时候触发
game_playerkill 玩家杀人的时候触发
game_playerdie 玩家死亡的时候触发
game_playerleave玩家离开游戏的时候触发
以上为实体的名字,当满足条件的时候就会触发有相应名称的实体
比如,一个game_text点实体,名称填game_playerspawn,这样每局开始玩家重生的时候就会触发这个game_text点实体.
可以实现玩家进入与离开游戏时出现文字信息提示;玩家杀人加血,加子弹,加分数,或者杀人者扣血,甚至瞬间死亡;玩家死亡显示文字信息,玩家死亡武器消失等等效果

★★★★★
awp辅助准心
用game_text在屏幕中央显示”.”看看,你就知道了.
可以通过与其它实体一起运用,来让”.”一直显示在屏幕中心.
要注意的是,选择好频道,不然相同频道的信息会把这个点给刷掉的.

★★★★★
如何实现开与关任何实体
用trigger_relay控制func_wall_toggle固体实体,你会发现引发为开那这个固体实体就出现,引发为关这个固体实体就消失;用trigger_relay控制trigger_push你会发现不管你引发为开或关或锁定,你引发一次,它就会在开与关之间切换一次,再引发,它就会再切换,也就是说它的开与关与它的初始状态与你引发的次数有关,而与trigger_relay的引发状态无关.
那么哪些实体是属于前者,哪些是属于后者,你可能不清楚,不过以下的方法可实现任何实体的开与关.
首先你需要确定的是这个实体只有两种状态,你将其中一种状态定为开,另一种状态定为关,并保证实体在引发前的初始状态是关.
实现的原理是这样的:玩家引发一下后就用trigger_changetarget把两个trigger_relay的目标值改了,这样再次引发相同状态就无效,只有引发不同的状态才有效.
具体实现:
trigger_relay,名称a1,目标a2,引发为开
trigger_relay,名称a2,目标t,引发为开
trigger_changetarget,名称a2,目标a1,新目标none
trigger_changetarget,名称a2,目标a3,新目标a4
trigger_relay,名称a3,目标none,引发为开
trigger_relay,名称a4,目标t,引发为关
trigger_changetarget,名称a4,目标a3,新目标none
trigger_changetarget,名称a4,目标a1,新目标a2
注:地图中不能有名称为none的实体;
建立这些实体后,使用方法为:用a1来开名称为t的实体,用a2来关名称为t的实体
比如,你在一个func_button的目标栏上填上a1,那么引发这个button就会打开名称为t的实体.

★★★★★
防止地图被改名的一个方法
随便新建一个env_shooter实体,然后在喷射的模型栏里填
maps/xxx.bsp
其中xxx是你的地图名

如果地图被改名,就会出现
Fatal Error
Mod_NumForName:maps/xxx.bsp not found
错误

除此之外不会对地图效果有任何影响.

★★★★★
开局自动得武器的一个简便方法
player_weaponstrip,名称game_playerspawn
multi_manager,名称game_playerspawn,点优化模式,加入 键值giveall,变量0.05,勾上多线程
game_player_equip,名称giveall,勾上只能引发,武器自己选
这样不管上回合结束时你手里拿的是什么武器,都会在开局重生的时候手里拿上指定的武器.
注意:玩家重生点的地上最好不要有任何武器装备,不然可能出错,放稍远一点就没问题了,只要不让玩家一掉到地上就捡到地上的武器就行;这个方法会使双方都得到相同的武器,如果要要双方武器不同,那就只能用其它方法了.

★★★★★
一种计时器制作
Func_door,弄小点,放在地图某个墙的里面,只要不要让玩家可以触发到就行,目标填m1,其它不用改
multi_manager,名称m1,勾上多线程,点优化模式,加入 键值cs变量0.01(这样这个地图里每局重新开始的时候就会引发启动m1一次,如果还有其它实体需要在每局开始的时候引发就在这个multi_manager里自己添加)
game_counter_set,名称cs,目标jishi,新值0
trigger_auto,目标m2,引发方式开
multi_manager,名称m2,勾上多线程,点优化模式,加入 键值jishi变量1,键值m2变量1
game_counter,名称jishi,目标自己填,初始值0,限定值自己填
这样在每局开始的时候计时器就会重新计数,并且每个game_counter的目标只会在一局内引发零次或一次
比如你要在每局开始10秒钟后引发一个game_text,就可以在game_counter目标里填上game_text的名称,限定值填10.如果你还要在60秒种后再引发另一个game_text,方法也很简单,把上面那个game_counter实体复制一份,然后只需改目标与限定值就可以了,以此类推.

注:multi_manager里加入的键值的变量最大不要超过1秒,这样可以防止意外,因为multi_manager开启的线程是不会结束的,即使新的一局开始.而这样就可能与你的原意相反,比如你想要在每一局开始10秒钟后引发一个实体,于是你在multi_manager里加入一个键值,变量设为10,每局开始的时候触发一下这个multi_manager实体,这样比如一局开始了,5秒钟后如果又重新开局,那在这新的一局的第5秒与第10秒都会触发那个实体一次,如果这不是你想要看到的,那就采取上面的计时器方法吧.
另外,cs里时间精确度是0.01秒

★★★★★
伪随机效果的一种实现方法
比如你要玩家按一个开关,随机引发不同的目标,比如,我这此按一下,引发了a,下次再按一次,引发的却是b,然而你不想引发是有规律的,比如引发一下a,再引发是b,再引发又是a,再引发又是b,你不想这么有规律,希望更加地随机一些.
方法很简单,你在地图里放上一些trigger_multiple固体实体,目标是trigger_changetarget点实体,这个trigger_changetarget把开关的目标值改为a,再放一些trigger_multiple固体实体,目标是trigger_changetarget点实体,而这个trigger_changetarget则是把开关的目标值改为b,这样由于玩家随机在地图上走动,就会使开关的目标值随机地变化了.
trigger_multiple越多,复位前延时越短,随机效果就越显著.
当然,这个方法有个限制就是实体要有个目标值来使trigger_changetarget可以改变,如果没有,那有时可以加个中继实体trigger_relay.

★★★★★
如何提高地图FPS
FPS 对一张地图起着很大的影响,有着较高的 FPS 是一张地图成功的关键之一, 当然影响地图 FPS 的原因有很多,处理不当会有很大的不同,总结下主要有以下的几个因素:
1. 尽量避免过于宽阔的场景,视野宽阔,FPS就直线下降,这个是最大的因素
2. 光线的强弱也有很大的影响,光线越强,FPS越低,所以,一般不是很必要,只要保证能看清楚就可以了,不要要求过分的光线强度
3. 地图制作的布局也有很大影响,场景复杂很容易降低FPS,比如你把两个箱子紧紧放一起和留裂缝,留了裂缝的就会相对比较慢,这样一个两个当然影响不大,但是一旦多了你就会发现有了变化
4. 地图编译时的vis优化,试着用快速和完全两个设置去编译一张图,你就可以体会到了
5.没事少转可见固体实体比如func_wall
6.没事少缩放纹理,尤其是大于2倍或小于0.5倍之类的缩放
7.固体能用透明纹理表现就尽量用透明纹理
8.一定要过VIS的full和RAD的extra
9.少用有透明度的固体实体
10.可以用固体挡住在游戏中某些位置不必要看到的地方,这样就可以增加这个位置的fps。固体必须有一部分与外界宇宙接触,因为编译后与宇宙接触的固体会被挖得只剩下表面一层,挖掉的地方用宇宙代替。游戏中处理图像的时候会处理没有宇宙遮挡的视界(即使有----不与宇宙接触的墙---挡住视界),而不会处理宇宙遮挡的视界。只要用与宇宙接触的固体挡住游戏中某位置不应该看到的地方,就可以减少游戏处理的图像数量从而提高该位置的fps。要提高整张地图的fps则建议将地图做成一个一个“小房间”,然后再用通道连接。【这条很重要】
10.同一画面内的可见面尽量少
11. 一些其他的因素:玻璃,水,复杂模型,天空过高...

★★★★★
经验与教训:

可以让多个实体的名称相同,这样触发这个名称时就会触发多个实体了.
不过要注意的是,如果给多个门相同的名称,那么触发时所有的门都会被触发,但如果一个门复位了,其它门也会复位,也就是说如果这样子来给僵尸加血,就会导致只有一个僵尸被加血,然后所有的门都复位了,所以僵尸加血还得实实在在地把门的名字设的不一样.

如果要准确地加血最好不要用激光,因为激光射到头上与身体上的伤害是不同的

如果要准确地加血最好不要涉及到手动控制时间,比如,你用trigger_hurt,测试得到每一秒种可以扣多少血,但在网上多人游戏时这是不准确的,扣血速度会变快,或者变慢,当然,如果是不需要那么精确,比如trigger_hurt伤害填-10000,让玩家血瞬间回复到100,是没啥关系的.

用trigger_multiple需注意,这个实体可能会出问题,当多个玩家在相差很短的时间内进入这个固体实体范围的时候,即使你把复位前延时设为10,然而实际上你会发现可能多个玩家都在小于10秒钟内触发了这个固体实体设定的目标.

改变重力与摩擦力的这两个固体实体需知道的是,重力可以调大,也可以调小,摩擦力也可以调大与调小

trigger_push固体实体的效果实现比较麻烦,得多试试.

game_player_equip点实体可以给玩家武器,不过用的不好,出错的可能性也很大,在玩家引发得到这个武器前你最好确保玩家手中无武器.此外,如果得到的是刀或防弹衣或子弹这样的东西就不大会出错,而得到枪出错的可能性就大了.

env_explosion是产生爆炸的点实体,但也可能出错. 比如太多的这个env_explosion同时触发.

有些不合逻辑的东西也会可能出错.
比如一个multi_manager点实体,名称a,勾上多线程,你加入键值a变量0,那你可以想象一下,它会在瞬间产生无限多个线程,当然就会出错.如果把变量0改为1,那就没事了.再比如隐藏的深一点的,上面的点实体你加入键值a变量1,键值b变量10,那线程会越来越多,越来越多,最后还是会出错.

还要注意的是,地图中实体的数量也是有限制的,太多了也可能会出错.

地图中如果只放一个手雷或防弹衣,那么在实际玩的时候你会发现有多个手雷或防弹衣,解决办法也很简单,就是放多个手雷或防弹衣,别只放一个,如果你想玩家只拿到一个,那就把其它的放在墙里或其它玩家拿不到的地方吧.

编译程序最大的接受范围为一个固体30个面

sky纹理只能使用于固体贴图,不能用于固体实体的贴图,否则编译将会出错。

如何不出现移动一个固体或者实体一动就是一个格的问题:alt+鼠标左健 移动  。

如果要复制东西请熟练掌握用“shift+鼠标拖动”来复制东西,这样可比“复制”“粘贴”快捷多了!

游戏中用的声音文件必须是:.wav格式,11025Hz,8bit,单声道,一般用系统自带的录音机就可以制作了。

Ps:咦,仔细一看,发现没写多少东西吗.
       
2011.7.19
By 2021
       
个人主页:hi.baidu.com/帝国_回归
地图下载网盘:fyxridd.ys168.com
qq:441774110
[/col

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

回顶部