Sanny Builder一款非常简答的CLEO编写器,专为GTA 3D系列游戏设计,它包含一个反编译器,允许用户快速地反编译游戏脚本文件(MAIN.SCM)和外部脚本(SCRIPT.IMG)。
功能特色:
1.Sanny Builder包含一个反编译器,允许用户快速地反编译游戏脚本文件(MAIN.SCM)和外部脚本(SCRIPT.IMG)
2.Sanny Builder提供了一个非常方便的编辑器。这个编辑器包含了大量实用的功能和工具,有语法高亮、错误检查、快速跳转、高级搜索工具、玩家位置读取工具等,并且可以添加自己的外部工具
3.Sanny Builder提供一种类似于现代编程语言的高级代码语法。这种语法包含可改变的类、关键字和高级语句
4.Sanny Builder的另外一个主要功能是编写和修改CLEO脚本
使用方法:
怎么让CLEO横向发展,举几个例子就知道了:
1、先举一个最简单的:你想在四龙赌场门前停一辆NRG500摩托车,每次打开存档都能看到它,怎么实现呢?
有一个“军警车辆”CLEO,作用是把爆爆工厂里停了各种各样的警车及军车。
用Sanny Builder软件打开军警车辆CLEO的Poli_Arm_Cars.cs文件,可以看到有一大段这样的语句:
$PC006 = init_parked_car_generator #BARRACKS color -1 -1 1 alarm 0 door_lock 0 0 10000 at -2141.971 -102.694 36.419 angle 270.0
这是计算机语言,翻译成人话就是:在(-2141.971,-102.694,36.419)这个点上产生一辆警笛关闭的默认颜色的车头朝东的没锁门的运兵车。
“BARRACKS”是车名,想增加哪个车停放点就改成相应车名,改成NRG500就变成停放NRG500摩托了。在刷车工具里有各种车辆的中英文名称和图片的对照。
“color -1 -1 1”表示车的颜色,这个如果不会改就不要改。
“alarm 0”表示报警器关闭,不知道有什么用。
“door_lock 0”表示没锁门,也不要改。
10000可能是生命值吧,没改过。
“at”后面的三个数字就是车辆停放点的坐标,先跑到四龙赌场门前测一下坐标然后把坐标值改一下,这样就在四龙赌场增加了NRG500停车点。GTASA疯狂作弊器能测坐标。Z坐标不要直接套用,采用“进一法”,要比站着的坐标高出0.5米左右,不要让车轮钻地下去了。
“angle”后面的数字是车头方向,数值在0~359.9999度之间,正北为0度,正西为90度,正南为180度,正东为270度,就这样转。
改完了不要点保存,那只是保存为一个txt文档,要按F6编译,这就保存到cs文件里了。
在四龙赌场门前就增加了一个NRG500摩托车的停放点了。
上面说的只是纯修改的方法,若想在原有的cs文件的基础上再增加一辆车,那就不仅要把这一行复制了排到后面,还要把它后面紧跟的这一行:014C: set_parked_car_generator $PC006 cars_to_generate_to 101
也复制到后面去,因为所有车都是两行,需要修改的是只是第一行。自己想加车就要和上面的格式统一。
不行的话,那就试试看“比赛随意选车”里面的ZAZ_PICKUP_SAVE.cs(这个也有增车的功能),普通车辆和警车的格式好像不太一样,上面举的例子只是一个大致的思路,我自己并不是按照军警车辆来改的,我是用比赛随意选车那个改出来的,在黑白旗的地方弄些车,正好可以玩各种比赛。
增车的cs文件有很多,“新增停车点”里面就有N多、“老家有装备”这里面也有停车点、“汽车展厅增车”等等这些都有增加刷车点的功能,皆可拿来参考,放一起比较就知道该怎么增车了。
改了cs文件之后并非当场生效,要重新打开存档。还有一点要特别注意:一定要用原生态的存档(没有使用过CLEO补丁的),用CLEO保存过的存档可能看不到修改cs文件的效果,包括下面这些修改。
2、你想在沙漠机场的空地上增加一些武器,怎么实现呢?
有一个“老家有装备”CLEO(感谢jiangao0627提供的这个CLEO),在MoreWeapons.cs文件里面有一大段这样的语句:
032B: $3139 = create_weapon_pickup #AK47 group 15 ammo 9999 at 2483.6 -1689.0 13.5
这个翻译成人话就是:在(2483.6,-1689.0,13.5)这个点上增加一个子弹数为9999的AK47冲锋枪的拾取点。
其中肉搏类的武器没有子弹数,格式不太一样,往下拉可以看到关于武士刀的语句:
$3212 = Pickup.Create(#KATANA, 15, 2476.8, -1701.0, 13.5)
KATANA就是武士刀,15不知道干什么的,后面的三个数字是坐标。花朵、振荡器这些跟肉搏类武器的格式一样。
各种装备的名称在data文件夹里的weapon.dat里就有,武器栏每行第一项就是,肉搏类的武器在melee.dat里。
跑到沙漠机场测一下坐标填到里面去,再把枪名改了,按F6就好了,以后在沙漠机场都能看到这个武器了。
3、有些CLEO你觉得按键不方便,想把按键改了,怎么做?
先把按键的编码发上来吧:
凡是看到这样的语句“key_pressed”,后面所跟的数字就是按键(一般都用的是十进制的编码)
①、固定按键(每一行的第一个表示按键名称,第二个是键盘的十进制编码,第三个是十六进制编码)
鼠标左键 1 1
鼠标右键 2 2
鼠标中键 4 4
退格键 8 8
Tab 9 9
回车键 13 D
Shift (两边一样) 16 10
Ctrl (两边一样) 17 11
Alt (两边一样) 18 12
Pause 19 13
Caps Lock 20 14
Esc 27 1B
空格键 32 20
Page Up 33 21
Page Down 34 22
End 35 23
Home 36 24
方向键左 37 25
方向键上 38 26
方向键右 39 27
方向键下 40 28
Insert 45 2D
Delete 46 2E
0 48 30
1 49 31
2 50 32
3 51 33
4 52 34
5 53 35
6 54 36
7 55 37
8 56 38
9 57 39
A 65 41
B 66 42
C 67 43
D 68 44
E 69 45
F 70 46
G 71 47
H 72 48
I 73 49
J 74 4A
K 75 4B
L 76 4C
M 77 4D
N 78 4E
O 79 4F
P 80 50
Q 81 51
R 82 52
S 83 53
T 84 54
U 85 55
V 86 56
W 87 57
X 88 58
Y 89 59
Z 90 5A
左Windows键 91 5B
右Windows键 92 5C
属性键(右Windows和右Ctrl之间那个) 93 5D
小键盘0 96 60
小键盘1 97 61
小键盘2 98 62
小键盘3 99 63
小键盘4 100 64
小键盘5 101 65
小键盘6 102 66
小键盘7 103 67
小键盘8 104 68
小键盘9 105 69
小键盘* 106 6A
小键盘+ 107 6B
小键盘- 109 6D
小键盘. 110 6E
小键盘/ 111 6F
F1 112 70
F2 113 71
F3 114 72
F4 115 73
F5 116 74
F6 117 75
F7 118 76
F8 119 77
F9 120 78
F10 121 79
F11 122 7A(一般别用,这键是中英文切换)
F12 123 7B
Num Lock 144 90
Scroll Lock 145 91
; 186 BA
= 187 BB
, 188 BC
- 189 BD
. 190 BE
/ 191 BF
` 192 C0
[ 219 DB
\ 220 DC
] 221 DD
' 222 DE
②、游戏中的功能键
1、步行时
0 向左、向右
1 向前、向后
2 Q、E
3 未知
4 行动(接电话、买房)
5 鼠标滚轮向上
6 武器瞄准
7 鼠标滚轮向下
8 团队控制前进
9 团队控制后退
10 否定回答
11 肯定回答
12 不存在此编码
13 走静步
14 跳跃
15 开车
16 快跑
17 开枪、搏斗
18 蹲下
19 向后看
开车时:
0 左转、右转
1 前进
2 特殊控制左、右
3 特殊控制上、下
4 次级武器
5 开车向左看
6 手动刹车
7 开车向右看
8 下一个电台
9 上一个电台
10 否定回答
11 肯定回答
12 不存在此编码
13 切换视角
14 倒车
15 跳车
16 未知
17 主武器
18 喇叭
19 次级任务
比如你觉得“随时随地改车”的快捷键是T,和汽车转向灯CLEO有冲突,想改,怎么办?
打开transfender.cs,有这一句:
0AB0: key_pressed 84
凡是看到key_pressed,后面跟的数字就是键盘编码,84表示T,改成66就成了按B改车。
如果是双键齐按的CLEO,肯定有两句key_pressed连在一起,都改了就行了。
双键齐按的,在两个key_pressed的上面还有一个if and,这个一定要注意,if是指的单键,if and就是双键。
比如潜艇的代码是按Ctrl+S,它的编码就是:
if and
0AB0: key_pressed 17 (17就是Ctrl)
0AB0: key_pressed 83 (83就是S)
而导弹补丁是按退格键发导弹,它的编码是:
if
0AB0: key_pressed 8 (8就是退格键)
在车上用的CLEO,按键格式是player 0 pressed_key 11(11要和开车时的功能键对应),徒步使用的好像也是这种格式,规律我没记,但全都是key和press连在一起后面跟个数字。若都是车辆CLEO或步行CLEO,把按键代码一改就行了,要想把CLEO从“车上用”转换成“走路用”,改按键时可从同类CLEO复制过来改。
固定按键就是说不管游戏中键盘怎么设置,CLEO的按键都不变,编辑CLEO时用如果用的是第二大类(游戏中的功能键)那就会随着键盘设置而变化。固定按键对于开车或走路都是通用的。
如果想把某项功能“如果按什么键就如何”给去掉而又不知道该删哪一段,就把按键改成五百多(一个不存在的键),这项功能就被去掉了,因为根本不可能按到那个键。
4、有个“武装越野车”CLEO,开一辆沙滩越野车BF Inject时配备一把隐形的机枪。如果你开别的车也想有隐形机枪怎么做呢?
“按K武装汽车”就不必说了,武器不是隐形,有些制作精美的MOD装了武器就不好看了,装个隐形的最理想了。
把武装越野车的cs文件打开,有这么一句:
Actor.DrivingVehicleType($PLAYER_ACTOR, #BFINJECT)
不用去琢磨怎么把车加上机枪,只要看到BFINJECT那就知道这一句的意思肯定是限制车型,要怎么改那就很明显了。
每辆的车的高度不一样,想改变子弹发射的位置怎么办呢?
往下拉有这么一段:
0407: store_coords_to 6@ 7@ 8@ from_car 0@ with_offset 0.33 0.7 1.08
06BC: create_M4_shoot_from 6@ 7@ 8@ target 3@ 4@ 5@ energy 100
09F1: play_audio_at_actor $PLAYER_ACTOR event 1157
066C: 9@ = attach_particle "GUNFLASH" to_car 0@ with_offset 0.33 0.7 1.08 rotation 0.0 1.0 0.0 flag 1
凡是看到offset这个词(offset是偏移的意思),后面跟的就是相对坐标值,是相对于车辆中心的位置。X正表示左、负表示右,Y正表示前、负表示后,Z正表示上、负表示下。
有两个这样的语句,如果不知道哪个是,就先把第二个offset后面那个的X值改成0,进游戏一看,子弹仍然是从右边射出的,而发射时所喷的火焰却在车的正中间,这样就知道后面那个offset是火焰的位置,前面那个肯定就是子弹的位置,试着改了下,果然是。
这些都是自己琢磨的,没有统一的固定模式。自己多改改就知道了。
凡是包含车名的CLEO都能以一当百。
5、大家想必都见过这个MOD:尾翼能升降的布加迪威龙,我所发的“尾翼升降”CLEO正是从这个MOD里提取出来的:开一辆子弹头赛车Bullet时能升降尾翼。
如果开别的车时也想升降尾翼,如何做呢?
打开veyron.cs,里面关于车名的部分就不再说了,改个名字就完了。
下面还有更关键的内容:改成别的车名,开车之后尾翼可能不在尾部而是在车的中间,或是在车的后面悬空放置。
那这就需要改尾翼的位置了,往下拉必然会有尾翼的坐标。
里面先是有这么一句:
0681: attach_object 2@ to_car 5@ with_offset 0.0 -1.83 0.011 rotation 28.0 0.0 0.0
这一句表示刚开车时尾翼所在的位置。
offset后面的三个数字的含义和上面的武装越野车一样,该改成多少,要由车的形状而定,先改一下进游戏看看,不行再调整,这个不太可能一次就成功的。
rotation后面的三个数字分别表示对X、Y、Z轴的转角,这个不要改,尾翼都是设计好了的。
在“0AB0: key_pressed 73”的后面有一大段这样的语句不断重复:
0682: detach_object 2@ 0.0 0.0 0.0 collision_detection 0
0681: attach_object 2@ to_car 5@ with_offset 0.0 -1.82 0.013 rotation 28.0 0.0 0.0
wait 100
0682: detach_object 2@ 0.0 0.0 0.0 collision_detection 0
0681: attach_object 2@ to_car 5@ with_offset 0.0 -1.81 0.015 rotation 28.0 0.0 0.0
wait 100
0682: detach_object 2@ 0.0 0.0 0.0 collision_detection 0
0681: attach_object 2@ to_car 5@ with_offset 0.0 -1.81 0.02 rotation 28.0 0.0 0.0
…………………………………………
这段话是一个动画片的编码,表示按下字母I之后升起尾翼
73就是字母I的编码,后面的一大段就是尾翼在各个时刻不同的位置,可以看到Z坐标不断升高。其中“wait 100”表示“等100毫秒后”,这个数字改小了那么尾翼升的速度就快了。
这一段的最后一句就是完全升起时所在位置,如果改了尾翼的位置,那么这一大段的坐标也要跟着平移过来。
在“0AB0: key_pressed 75”的后面还有一大段这种语句不断重复,这个表示按K收回尾翼。最后一句是完全降下时所在位置,和尾翼的初始位置要尽可能一致,就算不一致也要接近,免得画面不连续。
6、想在雷达图上增加一个图标,怎么做?
在“比赛随意选车”CLEO里,秋名山山顶也有比赛点,但是雷达图上却只显示在山脚下的游乐场有黑白旗任务点。
这个CLEO有个功能:在洛杉矶西南游乐场新增一个汽车锦标赛,既然有这个功能那么cs文件中必然会有描述。打开Race_and_Tuning_Starter.cs之后看到有这么一句:
0570: 1@ = create_asset_radar_marker_with_icon 53 at -1643.1 1288.6 7.1
如果有一定英语基础,一见radar就知道这是雷达,marker是标记,icon是图标,那么增加任务点的图标肯定就是这一句了,跑不了了。
icon 53肯定就是说黑白旗任务标志的编号是53(骷髅点的编号可参考“黑手党任务”,问号点可参考“黑社会任务”,其它就不知道了)。
飞到秋名山顶走进红圈测得坐标是-20.69,-2430.016,324.256
那这就好办了,把原来那一句复制一下紧跟着它粘贴到下一行,坐标一改。进游戏果然在秋名山顶的地方雷达图上显示有个汽车锦标赛。
至于如何在某地增加一个存档点方法也类似,“比赛随意选车”CLEO里有一个ZAZ_PICKUP_SAVE.cs,它能增加存档点,可参考此文件。
这只是增加图标的方法,如果想在地图上增加一个红圈圈的话,可以看看这个:直线赛道。它在地图上增了个任务点。新版收费站CLEO就是这样弄出来的,按此方法在收费站里加了四个红圈。
7、你想在做了某一件事之后增加个警星,怎么办?
可参考“恐怖袭击”,有这一句:爆炸过后得到六星通缉
既然有此功能那么cs文件里肯定就有增加警星的语句。
如果知道wantedlevle就是警星,那就很容易找了,这一句就是增加警星的:
Player.WantedLevel($PLAYER_CHAR) = 6
“警星调整”CLEO就是根据“时钟控制”的CLEO改出来的,把设置时间的语句改成警星,按键再一改就行了。(警星调整CLEO已更新,现在用的不是下面这种循环方式了,不过下面这一段仍然可以说明问题)
改这类CLEO(如果按××就……,如果按××就……,几个并列),还有一个很重要的问题:循环封闭。
前面是计算机语言,后面是翻译的人话
:NONAME_2 循环2(只是个编号,改成几都行)
wait 0 等待0秒
if and 如果(if and 是指下面的条件全都要满足才会启动后续的内容)
0AB0: key_pressed 46 按下Delete
0AB0: key_pressed 48 按下0
jf @NONAME_39 要不然就直接跳转到循环39
Player.WantedLevel($PLAYER_CHAR) = 0 那么警星数是0 (接住if语句)
jump @NONAME_39 跳转到循环39
:NONAME_39 循环39
wait 0 等待0秒
if and 如果
0AB0: key_pressed 46 按下Delete
0AB0: key_pressed 49 按下1
jf @NONAME_76 要不然就直接跳转到循环76
Player.WantedLevel($PLAYER_CHAR) = 1 那么警星数是1
jump @NONAME_76 跳转到循环76
接下来的“循环76”,就是关于设置二星级的语句了,如此循环,最后六星级的完了之后一定要跳转到开头,不然按F6肯定会出现错误,编译不了。
六星级的那一段:
:NONAME_224 循环224
wait 0 等待0毫秒
if and 如果
0AB0: key_pressed 46 按下Delete
0AB0: key_pressed 54 按下6
jf @NONAME_2 要不然就直接跳转到循环2
Player.WantedLevel($PLAYER_CHAR) = 6 那么警星变为6
jump @NONAME_2 跳转到循环2
最后跳转到了循环2,这就没有语法问题了。什么都不按的话这样循环一圈之后又回到出发点了,也就是游戏里没有发生任何变化。
每一段循环都是@加一串字母开头,这是因为一开始在main这一行下面有个thread '×××',循环语句都要和此名称保持一致,不然编译不了,如果没有就默认为@NONAME。
8、有些CLEO你想改里面刷出的人物和他的武器,怎么实现?
先把武器的代码和名称发上来吧:
武器代号 中文名称 dff和txd文件名
0 拳头
1 指节套环 brassknuckle
2 高尔夫球杆 golfclub
3 警棍 nitestick
4 小刀 knifecur
5 棒球棒 bat
6 铁铲 shovel
7 桌球棍 poolcue
8 武士刀 katana
9 电锯 chnsaw
10 紫色橡胶棒 gun_dildo1
11 银色振荡器 gun_dildo2
12 仿真阳具1 gun_vibe1
13 仿真阳具2 gun_vibe2
14 花 flowera
15 拐杖 gun_cane
16 手榴弹 grenade
17 催泪瓦斯(烟雾弹) teargas
18 燃烧弹 molotov
22 9mm警用手枪 colt45
23 9mm消音手枪 silenced
24 沙漠之鹰手枪 desert_eagle
25 长管散弹枪 chromegun
26 短管散弹枪(双截散弹枪) sawnoff
27 连发散弹枪 shotgspa
28 Micro SMG微型冲锋枪[UZI(乌兹)] micro_uzi
29 SMG轻型冲锋枪(MP5) mp5lng
30 AK-47突击步枪 ak47
31 M4卡宾枪 m4
32 TEC-9型步枪 tec9
33 打猎步枪(来复步枪) cuntgun
34 狙击枪 sniper
35 火箭筒(RPG-1) rocketla
36 跟踪式火箭筒(AT-4) heatseek
37 火焰喷射器 flame
38 转轮机枪 minigun
39 遥控炸弹(C4炸弹) satchel
40 遥控器 bomb
41 喷漆罐 spraycan
42 灭火器 fire_ex
43 照相机 camera
44 微光夜视镜
45 红外夜视镜
46 降落伞 gun_para
呼叫军人小弟CLEO是改的呼叫警察小弟。
呼叫警察小弟,叫的警察是拿的沙漠之鹰手枪,在cs文件里用查找替换命令把desert_eagle全替换成minigun,改了枪的名称之后不要忘了改这句:
01B2: give_actor 11@ weapon 24 ammo 9999 // Load the weapon model before using this
给某人24号武器,弹药数9999,要把weapon 24(这指的是24号武器沙漠之鹰)替换成weapon 38
这样武器就改好了,剩下的就是把警车改悍马、警察改军人了。改车的方法在前面已经列举过,那就只剩改人了,人物的名称在data文件夹下的ped.ide里有,每行数字后第一项就是,由于不是所有的人物我都能把模样和名称对应起来,所以这个不好弄。不过只要下载过军队MOD那肯定就知道军人叫army,在ped.ide的最后面单独列出了警察、军人,所以cs文件里一看LAPD1就知道是警察,于是就把LAPD1替换为army,这就改成了呼叫军人拿着转轮机枪开着悍马过来了。
9、有些CLEO限制了车型,如果想改成很多车都能用,怎么办?
飞机特技CLEO,开鹞式战斗机按X放烟,如果想开别的飞机也放烟,复制几份cs文件然后全都改车名再把几个文件合用也行,不过有个更节省资源的方法:
打开之后有这一句:
if
Actor.DrivingVehicleType($PLAYER_ACTOR, #HYDRA)
它的意思是“如果开鹞式战机”(下文肯定就是关于放烟的了)
如果改成开运输机也能放烟,那就是几个条件选一个了,要用if or语句,if or 和if and 正好相反,if and是几个条件同时成立,if or的意思是“如果……,或……”
把这句改成
if or
Actor.DrivingVehicleType($PLAYER_ACTOR, #HYDRA)
Actor.DrivingVehicleType($PLAYER_ACTOR, #adrom)
这就成了“如果开鹞式战机或开运输机”
那么这样就改成了。
if or 这种语句有限制,最多九个条件并列,但是如果想改成开任何飞机都能放烟,怎么办?游戏里的飞机可不止九种,省事的办法就是复制cs文件,再设定九种交通工具然后合用。但这个也有更节省资源的方法:
在武装飞机CLEO里有限制CJ开飞机的语句,把它搬过来:
04C8: actor $PLAYER_ACTOR driving_flying_vehicle
用这一句替换限定鹞式战斗机那一句,这样一改,就变成了“如果CJ开飞机”
那么所有双翼飞机都能用了。如果想把直升机包括进来,可以去找限定直升机的CLEO:武装直升机。
CJ开直升的语句:
04A9: actor $PLAYER_ACTOR driving_heli
在武装摩托车、武装汽车这一系列CLEO中都能找到这些语句:
骑摩托:
047A: actor $PLAYER_ACTOR driving_bike
开所有交通工具:
0449: actor $PLAYER_ACTOR in_a_car
开船:
04A7: actor $PLAYER_ACTOR driving_boat
开火车:
09AE: actor $PLAYER_ACTOR driving_train
都可以用来替换那一句,地狱导弹CLEO一开始只能在鹞式战斗机上用,我就是用此方法把地狱导弹改成了无论什么飞机都能用,比飞机投弹补丁要好得多。
曾经有人发了个汽车烟雾CLEO,有好多个cs文件,每个文件都对应一种车,里面都有这句:“如果CJ开××车”(就按哪个键放烟),
用if or语句就可以将它们合并成一个文件,“如果CJ开××车,或××车,或××车……”,这样就合并了。
10、有些CLEO一进游戏就启动或者一开车就启动,如果想改成按一个键来启动,怎么改?
武装飞机CLEO一上飞机就启动,如果想改成在飞机上按个键启动,怎么办?
一开头是这样:
:AFW_12 循环12
wait 0 等待0毫秒
if 如果
Player.Defined($PLAYER_CHAR) CJ被定义了(也就是CJ开始活动,游戏开始了)
else_jump @AFW_12 不然就跳到开头(也就是如果游戏没开始就不启动)
if 如果
04C8: actor $PLAYER_ACTOR driving_flying_vehicle CJ开飞机
有几句是废话:如果游戏启动就如何如何,这三行完全可以不要,有些CLEO里就没有。
就从这句来改:“如果CJ开飞机就如何”
从别处找一个按键的句子复制过来加到后面,再把if变成if and:
if and
04C8: actor $PLAYER_ACTOR driving_flying_vehicle
0AB0: key_pressed 36
这就变成了“如果CJ开飞机而且按了Home键”,这样就改成了开飞机按Home键来启动此CLEO了。
有人提出要把仇家追杀改成按一个键来启动,就可以用此方法来改。
if
Player.Defined($PLAYER_CHAR)
else_jump @AFW_12
如果CJ开始活动(就如何如何),要不然就跳转回去
改成
if and
Player.Defined($PLAYER_CHAR)
0AB0: key_pressed 36
else_jump @AFW_12 (这个名称不一定是AFW,数字也不一定是12,要看开头是什么,总之这个是要跳到开头的)
这就改成了进游戏按End键来启动了。
要是没找到Player.Defined这样的句子,就自己添一个key pressed句子,用if(不是if and了),效果一样的。
如果把按键盘的句子改成限制开车的句子那么就把一个CLEO从按键启动改成了开车启动了。
相应的语句都能在别的CLEO中找出来,复制粘贴就可以了。
有些CLEO是以警星数来启动的,超级六星通缉:如果CJ达到六星通缉,就%$&%^%^$%$#%%&^&%^$
这个CLEO里就有这样的句子:
if 如果
Player.WantedLevel($PLAYER_CHAR) > 5 通缉度大于5颗星
else_jump @LV6_2503 不然就跳转到循环2503
想要哪个功能的语句,就先想想哪个CLEO有这个功能,那就去里面找,肯定能找得到。都可以改成各种各样的启动方式,也没有一个固定模式。常见的启动方式除了游戏一开始就启动、按键启动、开车启动(以及它们的任意组合)之外,还有这些:
如果CJ接近某点就如何 (参见骷髅士兵CLEO)
if
00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -1317.184 2525.606 87.5162 radius 50.0 50.0 50.0
jf @SKELETON_THREAD_19 sphere是球,后面三个数字是球心坐标,radius后面三个数分别是X、Y、Z方向的半径
如果时间达到几点就如何 ( 骷髅士兵CLEO里也有这个)
if and 如果
00BF: 29@ = current_time_hours, 30@ = current_time_minutes 这是定义29@和30@,29@是小时,30@是分钟
29@ >= 2 小时数大于或等于2
20 > 29@ 20大于小时数(这两句就是说在晚上8点和凌晨2点之间)
jf @SKELETON_THREAD_145 要不然就跳转到循环145
凡是具有限定作用的句子都可用来作为CLEO的启动条件,像闪电球CLEO,就有“如果CJ拿着SMG按右键,再按中键”。这种有很多,举都举不完,要自己慢慢去发现。那个烈火战车以前只是骑摩托能冒火,我就是用这种方法把它改成了任何交通工具都冒火。
11、有些CLEO刷出来的敌人太厉害了,想把他改得笨一点,或者想把某些CLEO中刷的小弟或车改成无敌,怎么改?
由于人物和车辆的定义都是一大段,所以如果把某个句子单独挑出来的话不好作说明,下面以一个具体的例子来说明,杀手补丁(千年山照相的小木屋里有杀手那个)的cs程序全文及翻译如下:
// This file was decompiled using sascm.ini published by Seemann (http://sannybuilder.com/files/SASCM.rar) on 13.10.2007
{$VERSION 3.1.0027}
{$CLEO .cs}
//-------------MAIN--------------- 这一行以及它之前的部分是限定此文件编译出来之后它的后缀名为.cs,这个不要改
thread 'KILLER' 这一行是定义名称,下面每段都要以此名称开头,这一行不要也没关系,名称会默认为NONAME
:KILLER_11 循环11
wait 0 等待0毫秒
00BF: 20@ = current_time_hours, 21@ = current_time_minutes 定义20@为当前的小时数、21@为当前的分钟数
if or 如果(if or表示下列条件只要满足一个就启动后续的方案)
20@ > 23 小时数大于23(也就是过了晚上11点钟)
not 20@ >= 5 小时数不大于5(也就是早上5点钟之前)
else_jump @KILLER_11 如果上述条件不满足,就跳回开头去(也就是不在这个时段就不会启动后续的方案)
if 如果
00FE: actor $PLAYER_ACTOR sphere 0 in_sphere -2815.76 -1523.98 140.84 radius 80.0 100.0 60.0 玩家接近 -2815.76 -1523.98 140.84 这个点的横向80米内、纵向100米内、垂向60米内的范围(这个坐标就是千年山那个小木屋)
else_jump @KILLER_11 如果上述条件不满足,就跳回开头去(也就是如果CJ没有接近这个点就不会启动后续的方案)
Model.Load(#DWMOLC2) 加载DWMOLC2这个人物模型(这一句至关重要,如果没有,调出此人物时会死机)
Model.Load(#HEATSEEK) 加载跟踪式火箭筒HEATSEEK的模型(这一句也重要,如果没有,调出此武器时会死机)
038B: load_requested_models 加载相应的一切需要的模型(这个主要是开枪时的火花、人死时的尸体、血迹等)
:KILLER_107 循环107
if and 如果(if and表示下面条件全都要满足,不然不会启动后续的方案)
Model.Available(#DWMOLC2) DWMOLC2这个人物模型可用
Model.Available(#HEATSEEK) 跟踪式火箭筒HEATSEEK的模型可用
else_jump @KILLER_107 如果上述条件不满足,就跳回到循环107(就是重新开始这一段)
04C4: store_coords_to 3@ 4@ 5@ from_actor $PLAYER_ACTOR with_offset 0.0 0.0 0.0 把从CJ偏移0.0 0.0 0.0的坐标位置储存为3@ 4@ 5@
0@ = Actor.Create(Gang1, #DWMOLC2, -2815.76, -1523.98, 140.84) 在-2815.76, -1523.98, 140.84这个点上创建一个人物DWMOLC2,并把他定义为0@,Gang1可能表示敌人吧(刷小弟的好像是Gang2,我没记,刷敌人的CLEO我都是从刷敌人CLEO来改的,刷小弟的就是用刷小弟CLEO改的,这个Gang1从来没动过)
01B2: give_actor 0@ weapon 36 ammo 9999 // Load the weapon model before using this 给人物0@一把弹药数9999的36号武器(36号武器就是跟踪式火箭筒),两个斜杠后面的内容是作者的注释,编译时自动忽略掉,只是方便自己看程序之用
081A: set_actor 0@ weapon_skill_to 0 把人物0@的武器技能设置为0(可能匪徒级别和杀手级别是1和2吧)
Actor.Angle(0@) = 90.0 人物0@的方位角是90度(90就是朝西)
Actor.Health(0@) = 6000 人物0@的生命值是6000(这一句可以用来改生命值)
Actor.Armour(0@) = 4000 人物0@的防弹衣是4000(这一句可以用来改防弹衣)
0446: set_actor 0@ immune_to_headshots 1 人物0@对爆头免疫(数字1表示肯定,改成0就是否定,对爆头不免疫)
04D8: set_actor 0@ drowns_in_water 1 人物0@下水不死(0和1分别表示淹死和不淹死)
:KILLER_237 循环237
wait 0 等待0毫秒
05E2: AS_actor 0@ kill_actor $PLAYER_ACTOR 让人物0@追着CJ打
if 如果
84AD: not actor 0@ in_water 人物0@没有落水
else_jump @KILLER_307 如果不满足上述条件,就跳到循环307(循环307在下面)
if 如果
not Actor.Dead(0@) 人物0@没有死
else_jump @KILLER_288 如果不满足就跳到循环288(也在下面)
jump @KILLER_237 如果全都满足了,跳到循环237,继续
:KILLER_288 循环288
Actor.RemoveReferences(0@) 把人物0@拿走(也就是消失)
wait 60000 等待60000毫秒
jump @KILLER_11 跳转到循环11
:KILLER_307 循环307
0A28: set_actor 0@ swimming_speed_to 2.3 人物0@游泳速度为2.3
07E1: AS_actor 0@ swim_to 3@ 4@ 5@ 让人物0@朝着3@ 4@ 5@这一点游(这个点在前面定义过了,就是CJ当前位置)
jump @KILLER_237 跳到循环237
凡是刷出人物的CLEO一般都会有这样的句子:
Actor.Health(0@) = 6000
Actor.Armour(0@) = 4000
Health是生命值,Armour是防弹衣,最大值是1E38(这个表示1乘以10的38次方)
如果是车的话,会是这样的语句:
Car.Health(0@) = 1500 只是把Actor变成了Car
把数字改得再大也只是说明人或车的血很多,从严格意义上来讲并不是无敌,想无敌怎么办?
在核污染畸形人(或叫巫师CLEO)的Samara.cs里面有这样的语句:
Actor.SetImmunities(6@, 1, 1, 1, 0, 1)
Immunitites是免疫能力,Set是设置,Actor是人物,6@是人物的代号(肯定是人物在创建时被定义为6@),后面的五个数字表示防弹、防火、防爆、防撞、防砸,0表示否定,1表示肯定,所以 “1,1,1,0,1”就表示除了怕车撞,其它什么都不怕,有些网上对这个CLEO的说明就有这么一句:看到之后不要去打,最好开车撞,因为他根本就打不死。
防弹就是不怕枪、防火就是不怕烧、防爆就是不怕炸、防撞就是不怕车撞、防砸就是用肉搏类武器打不死。
想让车无敌,仅仅把血弄得很多是不行的,血再多也只能保证永远不爆,但撞了会坏、变形。
造无敌车的语句和人无敌的格式一样:
Car.SetImmunities(6@, 1, 1, 1, 1, 1)
如果想让CLEO刷出的车无敌,就在有关车辆定义的段落里插上这一句。
车辆被创建后会有一大段限制语句紧挨着:
有些会设置方位角:
Car.Angle(0@) = 90.0(可以不要,系统将默认朝北)
门锁是开着的:
Car.DoorStatus(0@) = 0(可以不要,系统将默认锁门)
创建的车辆都会有这样的句子:
0@ = Car.Create(#DODO, 1@, 2@, 3@) 在某点创建一个车,定义为0@
想让车无敌就在这一行下面粘上这一行:
Car.SetImmunities(0@, 1, 1, 1, 1, 1)
如果车不是创建的而是CJ所开的车,怎么弄成无敌呢?
CJ所开的车在前面也会有个定义,弹射CLEO里就有这样的句子:
03C0: 1@ = actor $PLAYER_ACTOR car 把CJ所开的车定义为1@
车辆一键无敌CLEO就是这样改出来的。
车辆、人物、物品的格式都是一样的,车是Car,人物是Actor,物品是Object,创建物品是这样:
0@ = Object.Create(1219, 1@, 2@, 3@) (这是搭天梯CLEO里的,1219是木板的ID代码)
CLEO常用语句集锦(这些语句都可以改,包含数值的改了数值就成新的CLEO了,包含车名的可以改车名,包含人物的改人名,包含物品ID的就改ID)
这些全都不用记,只要会复制粘贴就行。
首先,每个CLEO都有一个启动条件,格式是这样:
if
Player.Defined($PLAYER_CHAR)
else_jump @ARMRHINO_12
如果CJ被定义了(游戏开始了)就继续下面的程序,要不然就跳到循环12(12肯定是开头那个数字)
这个启动条件是说如果游戏开始了就怎么怎么样,要不然就跳转回去,这个完全是废话,有些CLEO里就没有这个。下面这些句子都可以用作CLEO的启动条件(如果……就如何如何),格式就是上面所说的那种if语句,替换playerdefine那一行:
Player.Controllable($PLAYER_CHAR) CJ可操控(没落水,没穿火箭飞行器,也不是下降状态)
0965: actor $PLAYER_ACTOR swimming CJ在游泳
0449: actor $PLAYER_ACTOR in_a_car CJ处于驾驶状态
04A9: actor $PLAYER_ACTOR driving_heli CJ开直升机
04C8: actor $PLAYER_ACTOR driving_flying_vehicle CJ开双翼飞机
047A: actor $PLAYER_ACTOR driving_bike CJ开摩托车、自行车
04A7: actor $PLAYER_ACTOR driving_boat CJ开船
09AE: actor $PLAYER_ACTOR driving_train CJ开火车
Actor.DrivingVehicleType($PLAYER_ACTOR, #HYDRA) CJ开的是hydra(这样的只要把车名一改就变成在别的车上启动了)
Actor.Driving($PLAYER_ACTOR) CJ处于驾驶状态
Actor.DrivingPlane($PLAYER_ACTOR) CJ开双翼飞机
0AB0: key_pressed 36 按下Home键(把数字一改就改成按别的键启动了)
00FE: actor $PLAYER_ACTOR sphere 0 in_sphere 2494.794 -1675.745 13.3359 radius 100.0 50.0 25.0 CJ接近2494.794,-1675.745,13.3359这个坐标位置横向100米、纵向50米、垂向25米的范围内
00EC: actor $PLAYER_ACTOR 0 near_point 1477.351 1746.59 radius 150.0 150.0 这个是二维的,意思和上面的一样,只是不限Z坐标
Actor.Dead(1@) 人物1@死了
Model.Available(#MINIGUN) 武器模型MINIGUN可用
Model.Available(#TAXI) 车辆模型TAXI可用
Model.Available(#ARMY) 人物模型ARMY可用
Model.Available(1219) 物品模型1219可用
8965: not actor $PLAYER_ACTOR swimming CJ没有游泳
8449: not actor $PLAYER_ACTOR in_a_car CJ没开车
84A9: not actor $PLAYER_ACTOR driving_heli CJ没开直升机
84C8: not actor $PLAYER_ACTOR driving_flying_vehicle CJ没开双翼飞机
847A: not actor $PLAYER_ACTOR driving_bike CJ没开摩托车、自行车
84A7: not actor $PLAYER_ACTOR driving_boat CJ没开船
89AE: not actor $PLAYER_ACTOR driving_train CJ没开火车
not Actor.DrivingVehicleType($PLAYER_ACTOR, #HYDRA) CJ开的不是hydra(这样的只要把车名一改就变成在别的车上启动了)
not Actor.Driving($PLAYER_ACTOR) CJ没开车
not Actor.DrivingPlane($PLAYER_ACTOR) CJ没开双翼飞机
8AB0: not key_pressed 36 没按Home键
not Actor.Dead(1@) 人物1@没死
Player.WantedLevel($PLAYER_CHAR) > 5 警星数大于5
当有两句或两句以上并列的条件时,若需要全部条件都满足(如果……并且……并且……),就要用if and 语句,若只需满足其中的一个条件(如果……或……或……),要用if or 语句。
上面全都是很显著的条件类语句,有时候条件类和结果类的没有明显界限,比如警星数的设置就既可以作条件(如果警星达到6就如何如何),又可以作为结果(如果怎么怎么样就把警星调整为6),下面就直接列出句子:
Model.Load(#WMYBMX) 加载人物WMYBMX的模型(data\ped.ide里有各种人物的名称,下面每行第二项,或者用NPC查看器)
Model.Load(#M4) 加载武器M4的模型(data\weapon.dat里有各种武器的名称,武器栏每行第一项)
Model.Load(#TAXI) 加载车辆TAXI的模型(这个很容易对应起来,凡是用过刷车工具的应该很熟悉吧)
Model.Load(1219) 加载物品1219的模型(1219对应的是木板,ID和物品的形状可以用超级刷物CLEO来找,地图编辑器也可以)
038B: load_requested_models 加载一切需要的模型(不包括上面几种模型,主要指开枪时的火焰及烟雾、尸体、血迹等)
Player.WantedLevel($PLAYER_CHAR) = 1 警星数是1(数字为0~6这七个整数)
0407: store_coords_to 9@ 10@ 11@ from_car 0@ with_offset -4.8 50.0 -1.0 把从车辆0@偏移-4.8 50.0 -1.0的位置坐标值储存为9@ 10@ 11@(X正表示左、负表示右,Y正表示前、负表示后,Z正表示上、负表示下)
set_weather 9 把天气设置为9(9是一个天气代码,哪个数字对应哪种天气我没注意,在天气控制器的cs文件打开会看到)
04C4: store_coords_to 7@ 8@ 9@ from_actor $PLAYER_ACTOR with_offset 0.0 0.0 0.0 把从CJ偏移0.0 0.0 0.0的位置坐标值储存为7@ 8@ 9@(X正表示左、负表示右,Y正表示前、负表示后,Z正表示上、负表示下)
02CE: 12@ = ground_z_at 17@ 18@ 19@ 把17@ 18@ 19@这个点在地上的投影点的高度储存为12@
0AB6: store_target_marker_coords_to 0@ 1@ 2@ 把地图标记处的地面坐标值储存为0@ 1@ 2@
Actor.StorePos($PLAYER_ACTOR, 20@, 21@, 22@) 把CJ当前坐标位置储存为20@, 21@, 22@
1@ = Actor.Create(Gang1, #WMYBMX, 1477.351, 1746.59, 10.8125) 在1477.351, 1746.59, 10.8125坐标点上创建WMYBMX这个人物,定义为1@
2@ = Object.Create(11111, 21@, 22@, 23@) 在21@, 22@, 23@这一点创建物品11111,定义为2@
5@ = Car.Create(#HYDRA, 1@, 2@, 3@) 在1@, 2@, 3@这一点上创建车辆hydra,定义为5@
Actor.Health(1@) = 1000 人物1@生命值是1000(数字随便改,最大值为1E38)
Car.Health(1@) = 1500 车辆1@生命值是1500(注释同上)
Actor.SetImmunities(9@, 1, 1, 1, 1, 1) 人物9@全防无敌(5个1分别表示防弹、防火、防爆、防撞、防砸,改成0就不防了)
Car.SetImmunities(9@, 1, 1, 1, 1, 1) 车辆9@全防无敌(注释同上)
0446: set_actor 3@ immune_to_headshots 1 人物3@对爆头免疫(改成0就可以爆头)
02E0: actor 1@ aggressive 人物1@具有攻击性
01B2: give_actor 1@ weapon 38 ammo 9999 给人物1@一把弹药数为9999的38号武器(38是转轮机枪)
wait 800 等待800毫秒(数字随便改,可以用来控制各个步骤的节奏)
0850: AS_actor 0@ follow_actor $PLAYER_ACTOR 人物0@跟着CJ走($PLAYER_ACTOR指的就是CJ)
05E2: AS_actor 1@ kill_actor $PLAYER_ACTOR 人物1@攻击CJ
05E2: AS_actor 0@ kill_actor 4@ 人物0@攻击人物4@
Actor.RemoveReferences(0@) 把人物0@模型拿掉
Car.RemoveReferences(0@) 把人物0@模型拿掉
Object.RemoveReferences(0@) 把物品0@模型拿掉
4@ = Actor.Angle($PLAYER_ACTOR) 把CJ的方位角储存为4@
Car.Angle(2@) = 0.0 车辆2@的方位角为0.0(也可以使用像4@这样的变化值,@变量最多可以设定到33@)
Actor.Angle(2@) = 0.0 人物2@的方位角为0.0(注释同上)
Object.Angle(2@) = 0.0 物品2@的方位角为0.0(注释同上)
0453: set_object 6@ XY_rotation 80.0 0.0 angle 0.0 物品6@对X、Y轴转角分别为80.0、0.0,方位角为0.0
08D2: object 2@ scale_model 1.5 把物品2@的尺寸变成1.5倍
Car.PutAt(20@, 1@, 2@, 3@) 把车辆20@瞬移到1@, 2@, 3@这一点(也可以使用具体的数字)
Actor.PutAt(2@, 1@, 2@, 3@) 把人物2@瞬移到1@, 2@, 3@这一点(也可以使用具体的数字)
Object.PutAt(6@, 528.4479, -1752.545, 14.4) 把物品6@瞬移到528.4479, -1752.545, 14.4这一点(也可以使用变量)
1@ = Player.Money($PLAYER_CHAR) 把CJ的金钱数储存为1@
18@ += 3.0 把18@加上3.0之后的数值重新储存为18@(18@必须是一个代表数字的变量,比如生命、护甲、金钱、等,不能是车、人、物这些)
18@ -= 3.0 把18@减去3.0之后的数值重新储存为18@ (注释同上)
020C: create_explosion_with_radius 7 at 15@ 16@ 17@ 在15@ 16@ 17@这个点上创建一个半径为7的爆炸(半径越大威力及火光越小,要适中)
03BC: 3@ = create_sphere_at 298.145 -32.269 1001.515 radius 2.0 在298.145 -32.269 1001.515这一点创建一个红圈,半径为2.0,红圈定义为3@
0A40: 1@ = create_entrance_marker_at 528.4741 -1760.358 14.9769 color 3 在528.4741 -1760.358 14.9769这一点上创建一个进门的箭头,颜色为3,箭头定义为1@(不清楚颜色和数字的对应关系是什么)
09C7: change_player $PLAYER_CHAR model_to #WMYRO 把CJ变成WMYRO这个人物模型
0A41: destroy_entrance_marker 1@ 把进门的箭头1@拿掉
03FE: set_actor 6@ money 10000 把人物6@的金钱数设置为10000
0681: attach_object 2@ to_car 6@ with_offset -1.0 4.0 2.0 rotation 0.0 0.0 90.0 把物品2@粘在车辆6@上,相对车的位置为-1.0 4.0 2.0,相对于三个坐标轴的转角分别为0.0 0.0 90.0(这个也可以把物品粘到物品上、车粘到车上,格式一样,object、car分别代表物、车)
01B9: set_actor 7@ armed_weapon_to 35 让人物7@手上拿着35号武器
0337: set_actor 7@ visibility 0 人物7@不可见(1为可见)
0337: set_car 7@ visibility 0 车辆7@不可见(1为可见)
06D5: 29@ = create_racing_checkpoint_at 17@ 18@ 19@ point_to 17@ 18@ 19@ type 2 radius 6.0 在17@ 18@ 19@这个点上创建一个汽车锦标赛的高高的红色光柱,半径为6,形态为2,光柱定义为29@
0729: AS_actor $PLAYER_ACTOR hold_cellphone 1 CJ打电话
0729: AS_actor $PLAYER_ACTOR hold_cellphone 0 CJ挂电话
0362: remove_actor $PLAYER_ACTOR from_car_and_place_at 3@ 4@ 5@ 把CJ从车里揪出来放到3@ 4@ 5@这一点
072A: put_actor $PLAYER_ACTOR into_car 6@ driverseat 把CJ塞进车辆6@的驾驶座
0129: 10@ = create_actor_pedtype 38 model #ARMY in_car 4@ driverseat 在车辆4@的驾驶座上创建一个人物army,定义为10@
01C8: 11@ = create_actor_pedtype 38 model #ARMY in_car 4@ passenger_seat 0 在车辆4@的副驾驶座创建一个人物army,定义为11@
01C8: 12@ = create_actor_pedtype 38 model #ARMY in_car 4@ passenger_seat 1 在车辆4@的左后座上创建一个人物army,定义为12@
01C8: 13@ = create_actor_pedtype 38 model #ARMY in_car 4@ passenger_seat 2 在车辆4@的右后座上创建一个人物army,定义为13@
05CD: AS_actor 11@ exit_car 4@ 让人物11@从车辆4@里下来
01C1: car 0@ stopped 车辆0@停下
Car.LockInCurrentPosition(0@) = True 车辆0@不能动(True改成False就可以动了)
Car.SetSpeedInstantly(5@, 30.0) 设定车辆5@的速度为30.0
Actor.LockInCurrentPosition($PLAYER_ACTOR) = False CJ可以动(False改成True就不能动了)
00C0: set_current_time_hours_to 3 minutes_to 0 把时间设置为3点0分
00BF: 29@ = current_time_hours, 30@ = current_time_minutes 把当前小时数储存为29@,分钟数储存为30@
0788: enable_heli 0@ magnet 1 直升机0@的电磁铁放出来
0788: enable_heli 0@ magnet 0 直升机0@的电磁换扔掉
0724: heli 1@ follow_and_attack_player $PLAYER_ACTOR radius 80.0 直升机1@追着CJ炸,跟踪半径为80米
07A7: put_jetpack_on_actor $PLAYER_ACTOR CJ得到火箭飞行器
0464: put_actor 3@ into_turret_on_car 1@ at_car_offset 0.0 0.0 1.6 position 1 shooting_angle_limit 360.0 with_weapon 31 把人物3@放到车辆1@上,相对于车偏移0.0 0.0 1.6,用31号武器向360度范围内射击
03C0: 1@ = actor $PLAYER_ACTOR car 把CJ当前开的车定义为1@
015D: set_gamespeed 0.3 把游戏速度调整为0.3倍
Car.ToggleHydraulics(9@) = True 把车辆9@加上液压(True改成False就是去掉液压)
09E9: car 9@ add_single_nitro 给车辆9@加上液氮加速器
0A30: repair_car 9@ 把车辆9@修好
0503: create_actor_on_rope_with_pedtype 27 model 285 at 21@ 22@ 23@ handle_as 11@ 在21@ 22@ 23@这一点上创建一个285号人物(285是特警)爬绳子下来,定义为11@
Player.Money($PLAYER_CHAR) += 10000000 把CJ的金钱数增加一千万
02E3: 1@ = car 0@ speed 把车辆0@的速度定义为1@
这些语句可以在CLEO之间来回移植,就像搭积木一样,没有固定套路,修改CLEO最好是找一个现有的模板,在里面改、复制粘贴,有很多CLEO都很相似,就是这个原因。这些命令是用来在原有的CLEO基础上改装的,在实际操作中所遇到的情景远不止上面列出的11种情况,但思路都是一样的:想做什么CLEO,就先去找一个最接近的CLEO作为模板来修改。
这些语句如果你想作为条件来使用,就放到 if (有时候是if or,有时候是if and)的后面,或者干脆把原先的条件替换掉。
如果是关于人物的句子,就放到创建人物的后面,给人物加上此属性。
如果是关于车辆的句子,就放到创建车辆的后面,给车辆加上此属性。
cs文件如果从头看到尾的话,可以看出它就是一个故事,事件全都是按照那些命令出现的先后顺序来发生。只有出现if语句的时候要注意了,if是“如果”,else是“要不然”(jf 和else的意思一样)
有if语句就会出现一个分支:如果……就继续,如果不满足就就跳转到循环××(再去看看循环××是什么内容就知道要发生什么了)。每一段后面都有个jump,jump就是定义下一步跳转到哪一段,段落结尾要是没有jump,那就默认为跳到下一段。
常见的模板:
1、如果……就……、如果……就……、如果……就……(省略号的内容可以是按键或开车、警星数、时间、接近某地等)。
超时空转换就是这个模式:如果走到×点,就传送到×点;如果走到×点,就传送到×点;如果走到×点,就传送到×点………………
注意:要是循环的个数非常多就用这一个模板:定点传送、刷任意车辆(刷任意车辆就是用定点传送改的,只不过把传送的语句改成了刷车的语句)。循环太多的话用上面那个模板会有一个很长的反应时间。
2、刷个能帮自己打架的人。
刷帮派小弟、影子小弟、召唤战士、召唤骷髅,都可以拿来利用。
3、叫帮手开着车过来。
呼叫小弟、呼叫警察小弟、呼叫军人小弟,都是这种模式。
4、到某个地方后会有几个很厉害的人来追打CJ。
海盗船长、骷髅士兵、杀手补丁全是这种模式的,都可以利用。
5、到某个地方会看到有个NPC打另外一个NPC,多个打一个。
水怪就是。
6、到某个地方会看到有两帮NPC发生对垒,都是一对一地打。
黑社会任务CLEO可以拿来作模板。
7、开某车时想按某个键让车发子弹或开炮。
武装喷水车可以借鉴,斗牛车也一样,这种对武器模型没有要求,哪怕弄个照相机在车里也行,最重要的是定义哪种武器开火。
8、想在车上安一个东西。
斗牛车、大公鸡、飞碟、万吨巨轮全是这种套路。如果这个物品较大,而且把车隐藏掉的话,“在车上安一个东西”就变成了“利用××车把××物品给开走”,地图最北边那个最大的公鸡就是这样开走的,还有那个岘港偷渡船也是这样开走的,凡是在游戏里见过的东西,就没有开不走的。
9、开车时想让车上站些人拿着枪保护CJ。
装甲车射击手、特警掩护、空军掩护、铁道游击队、海岸警卫队全都是这种模式。
10、想让旁边出现一些车辆跟着,而且上面站着人保护CJ。
汽车护卫、直升机护卫、悍马突击组、钢铁洪流都是这样的。
11、想在车上安一个东西,按某键就移动到车的另一个位置。
可以参考汽车尾翼升降,我做那个在车上安个大导弹按I竖起来、按K放下去的CLEO,就是改的尾翼升降CLEO。
改装CLEO没有固定的思维,方法就像搭积木,你的想像力有多丰富,你改出来的CLEO就有多精彩!
上面说的全是根据现有的CLEO依次类推的方法,要想无中生有、新造出一个来,很难很难,是个专门的学科,计算机专业的定会觉得易如反掌吧。
很多语句都能在CLEO之间来回移植,这就需要慢慢摸索了,改的时候大致框架不变,还是在原有的cs文件里面做。蘑菇云CLEO(已添加到原版的核弹CLEO里,合二为一)就是把其它CLEO里的爆炸场面移植出来做的,在多处同时创建爆炸,它们的图案拼起来组成了一个蘑菇云。
这样的修改是随意发挥想像,各人玩法都不同,有个人就用“叫外卖”CLEO改出来了一个“按C+F叫一辆BULLET”,这有无数种玩法,随心所欲。如果有一定英语基础,多用Sanny Builder打开各种CLEO来对照着此CLEO的中文说明书看看,就能看得懂里面绝大部分语句,看得懂改起来就好改了。