QQ登录

只需一步,快速开始

 找回密码
 定下契约(新注册)

QQ登录

只需一步,快速开始

查看: 13531|回复: 45
收起左侧

CLEO初学者接触入门级教程

[复制链接]

传奇 Legend

虚拟世界,属于你的世界

Rank: 16

UID
4
宝石
154 粒
金币
5594 枚
节操
458 斤
灵石
0 块
精力
509 ℃
QQ
发表于 2012-3-20 16:31:34 | 显示全部楼层 |阅读模式

你这样只看不注册,真的大丈夫?~

您需要 登录 才可以下载或查看,没有账号?定下契约(新注册)

x
本帖最后由 为主的祥助 于 2013-11-18 10:38 编辑

作者:CLEO神

圣安地列斯/GTA4入门/进阶/高深图文解说教程:
http://jingyan.baidu.com/user/np ... 4%E7%A5%A5%E5%8A%A9

CLEO都是编程高手做出来的,他们能让CLEO纵向发展(增加CLEO的种类),对大多数人来说几乎是一个不可能做到的事情。
但并非一点办法都没有,我们完全可以利用现有的资源自己琢磨着来改一些CLEO,让CLEO横向发展(同一种类型的CLEO增加些数量)。
我把长期收集、修改制作的CLEO发在论坛里了,可以一次性下载下来,修改CLEO所要用到的CLEO补丁都在里面:http://www.gtabbs.com/viewthread ... 1&extra=#pid5335903
这个是编辑CLEO补丁中cs文件和cm文件的工具: CLEO编辑器.rar (4317 K) 下载次数:6016
有时候需要改坐标,那就用这个疯狂作弊器来测坐标: GTASA疯狂作弊器.rar (2304 K) 下载次数:2988
修改CLEO要用到车辆名称,刷车工具里的图片可以作为参考: 圣安地列斯刷车工具.rar (4243 K) 下载次数:2943
玩CLEO需要配合无敌档,造无敌档的工具: 存档编辑器.rar (7371 K) 下载次数:1991


怎么让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停车点。疯狂作弊器能测坐标。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就是退格键)

固定按键的句子里有个key_pressed 8(8要和固定按键的编码对应起来),而功能按键里面是player 0 pressed_key 11(11要和走路或开车时的功能键对应),但全都是key和press连在一起后面跟个数字。
固定按键就是说不管游戏中键盘怎么设置,CLEO的按键都不变,编辑CLEO时用如果用的是第二大类(游戏中的功能键)那就会随着键盘设置而变化。如果想把某项功能“如果按什么键就如何”给去掉而又不知道该删哪一段,就把按键改成五百多(一个不存在的键),这项功能就被去掉了,因为根本不可能按到那个键。

传奇 Legend

虚拟世界,属于你的世界

Rank: 16

UID
4
宝石
154 粒
金币
5594 枚
节操
458 斤
灵石
0 块
精力
509 ℃
QQ
 楼主| 发表于 2012-3-20 16:33:33 | 显示全部楼层
本帖最后由 【游骑兵】天涯 于 2012-3-20 16:37 编辑

CLEO的快捷键分为两类,按键,功能键和作弊码,下面分别说明

①按键类,即按下1等单键,或Ctrl+W等组合键实现接口功能

核心代码:0AB0: key_pressed 0x73

0AB0是opcode,不可缺少,0x73是一个变量,类型为KeyCode码,比如我设置快捷键为U,代码应该写成:0AB0: key_pressed 85。字母和数字的KeyCode码同ASCII码,其他特殊字符的KeyCode列举如下:

小键盘上的键控制键功能键
按键键码按键键码按键键码按键键码
096BackSpace839F1112
197Tab940F2113
298Clear12Insert45F3114
399Enter13Delete46F4115
4100Shift16NumLock144F5116
5101Control17;:186F6117
6102Alt18=+187F7118
7103CapsLock20,<188F8119
8104Esc27-_189F9120
9105Spacebar32.>190F10121
*106PageUp33/?191F11122
+107PageDown34`~192F12123
Enter108End35[{219
-109Home36\|220Win91
.11037]}221Pause19
/11138'"222

如果想实现Ctrl+T,if语句的完整代码如下:

if and

0AB0: key_pressed 17  //Ctrl的KeyCode是17

0AB0: key_pressed 84

jf @MAIN_1

这样,就能轻易实现按键类快捷键的设置了。大家可以依葫芦画瓢,将那些不合理的或冲突的快捷键统统改掉,这下所有CLEO都能共用啦!

②功能键类

核心代码:00E1: player 0 pressed_key 19

之所以叫功能键,就是游戏中按下会起到一定效果的键,比如上下左右,开火或蹲下等,在游戏的设置中可以调,但无论调到那个键,CLEO中设置的功能键都会随之改变,没有按键的单一固定特性。设置此类功能键时应特别注意冲突问题,最好加上and和按键类一起使用。

修车CLEO的触发键是Y,这就是设置的功能键。如果你想设置成Ctrl+蹲下的快捷键,可以用if and来实现,代码为

if and

0AB0: key_pressed 17

00E1: player 0 pressed_key 20

jf @MAIN_1

以下列举常用的功能键及其代码:

2left/right
3steer back/up
4special ctrl left/right
5special ctrl up/down
6secondary fire
7look left
8hand brake
9look right
10next radio station
11previous radio station
12no
13yes
15camera
16brake/reverse
17enter/exit
18accelerate
19fire
20horn(in car)
21submission
22walk(on foot)
23RMB vehicle mouse look

可能有一些不准,具体的大家可以自己进行测试。

功能键的设置适合制作一些武器类的CLEO,但大多数情况下并不推荐使用。

传奇 Legend

虚拟世界,属于你的世界

Rank: 16

UID
4
宝石
154 粒
金币
5594 枚
节操
458 斤
灵石
0 块
精力
509 ℃
QQ
 楼主| 发表于 2012-3-20 16:37:31 | 显示全部楼层
本帖最后由 【游骑兵】天涯 于 2012-6-1 10:07 编辑

③作弊码类

作弊码的设置比较难,需要内存编辑的基础,初学者完全可以略过,以下也是我的一些心得,仅供参考。

1、eject.cs的作弊码(4字符作弊码)

核心代码:

0A8D: 0@ = read_memory 9867536 size 4 virtual_protect 0

if

04A4:   0@ == 1162495316 // @ == any

jf @EJECT_11

分析:从969110/16开始(开区间)读取4个单位长度(只能是4个),这是用户连续输入4个键的储存位置

1162495316/10=454A4554/16,拆开来就是45、4A、45、54,再转换成10进制并查出对应的ASCII字符即为密码“EJET”

操作:要修改这个CLEO的作弊码,可以按照我的步骤进行。假如修改成“ABCD”(只能是4个字符),先查出每个字符的ASCII码并分别转换成16进制,得到41、42、43、44,连起来,为41424344,转换为10进制,得到1094861636,这就是你在内存中想要读到的值。然后就可以写代码了,将上面代码的判断语句改成04A4: 0@ == 1094861636即可。

2、firework.cs的作弊码(4x字符作弊码)

核心代码:

0@ = -229907

if

  &0(0@,1i) == 1179210309

jf @FW_11

0@ = -229908

if

  &0(0@,1i) == 1464816203

jf @FW_11

&0(0@,1i) = 1464816128

分析:-229907应该也是内存地址,一个地址储存用户输入的4个连续键。读入用户第一次输入4个键,1179210309/10=46495245/16,拆开来就是46、49、52、45,即为“FIRE”

然后读入下一个内存地址的数据,1464816203/10=574F524B/16,拆开来就是57、4F、52、4B,即为“WORK”,连起来就是密码“FIREWORK”,最后的一句是内存的改写,避免程序重读错误。

操作:除了格式,基本原理和EJET一样,大家先把作弊码在内存的对应值算好,再带入“&0(0@,1i) ==*”比较语句即可,如果是12字符作弊码,在加一个判断语句即可,注意0@的变化规律。大家只需照套路走就是了,&0(0@,1i)的用法我还不是很懂。

3、amrifle.cs的作弊码(4字符以下作弊码)

核心代码:

0A8D: 0@ = read_memory 9867535 size 4 virtual_protect 0

if

  0@ == 1095586304

jf @AMR_11

0A8C: write_memory 9867536 size 4 value 1095586304 virtual_protect 0

分析:和4字符类似,1095586304/10=414D5200/16,即为“AMR”,但是注意读取的开始内存地址,4字符是9867536,3字符是9867535。最后一句也是内存改写以避免程序重读错误。

4、laevateinn.cs(任意字符作弊码)

核心代码:

30@ = -229906

008B: 30@ = &0(30@,1i) // (int)

0085: 31@ = 30@ // (int)

31@ /= 65536

31@ *= 65536

0062: 30@ -= 31@ // (int)

if

  30@ == 19521   //LE

jf @LVTN_11

30@ = -229907

if

  &0(30@,1i) == 1163280724

jf @LVTN_11

30@ = -229908

if

  &0(30@,1i) == 1162432078

jf @LVTN_11

&0(30@,1i) = 1162432000

分析:这段代码比较长,目的是在内存中获取“LAEVATEINN”,10个字符作弊码,可以切割来看,从右到左4位一组,LA,EVAT,EINN,算出来就是19521,1163280724,1162432078。后八位和2例类似,只是前两位的代码比较难懂。大家可以注意观察下内存的取得地址和前例的不同之处,以便触类旁通

5、hud.cs(4例的三字符补充)

核心代码:

2@ = -229908

008B: 0@ = &0(2@,1i) // (int)

0085: 1@ = 0@ // (int)

0@ /= 16777216

0@ *= 16777216

0062: 1@ -= 0@ // (int)

if

  1@ == 4740420   //485544

jf @HUD_28

&0(2@,1i) = 1213547520

分析:作为4例的补充,本代码的目的是“HUD”,三字符的算法和两字符略有不同,主要是在0@ /= 16777216上面,大家可以试试把这段字符转换成16进制,即为1000000,而65536则是10000,多了两个16进制字符位,正好就能区分4位和3位密码了。大家可以触类旁通,试试2位的该怎么写。

6、PEDSpawn.cs(傻瓜的作弊码设置,适合所有人)

核心代码:

if

0AB0:   key_pressed 80

jf @PEDS_113

14@ = 1

33@ = 0



:PEDS_113

if and

  14@ == 1

0AB0:   key_pressed 69

jf @PEDS_149

14@ = 2

33@ = 0



:PEDS_149

if and

  14@ == 2

0AB0:   key_pressed 68

jf @PEDS_185

14@ = 0

jump @PEDS_218

分析:我想不用我多说了吧,值得注意的是单纯地照着这个思路下去会有一点问题,三个字符的触发判断必须要联系在一起,本例中33@和14@变量就是联系在一起的纽带。大家注意观察观察就不难发现,如果没有这条纽带的联系,就无法实现作弊码的效果了。

这个例子代码虽然含金量不高,但通俗易懂适合所有人使用,大家只需以此类推就能写出任意个字符的作弊码,但用太多判断语句,执行效率不高,多了的话会有让人无法忍受的延迟。

传奇 Legend

虚拟世界,属于你的世界

Rank: 16

UID
4
宝石
154 粒
金币
5594 枚
节操
458 斤
灵石
0 块
精力
509 ℃
QQ
 楼主| 发表于 2012-3-20 16:49:39 | 显示全部楼层
本帖最后由 【游骑兵】天涯 于 2012-6-1 10:07 编辑

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 rotation28.0 0.0 0.0
…………………………………………
这段话是一个动画片的编码,表示按下字母I之后升起尾翼
73就是字母I的编码,后面的一大段就是尾翼在各个时刻不同的位置,可以看到Z坐标不断升高。其中“wait 100”表示“等100毫秒后”,这个数字改小了那么尾翼升的速度就快了。
这一段的最后一句就是完全升起时所在位置,如果改了尾翼的位置,那么这一大段的坐标也要跟着平移过来。
在“0AB0:   key_pressed 75”的后面还有一大段这种语句不断重复,这个表示按K收回尾翼。最后一句是完全降下时所在位置,和尾翼的初始位置要尽可能一致,就算不一致也要接近,免得画面不连续。

传奇 Legend

虚拟世界,属于你的世界

Rank: 16

UID
4
宝石
154 粒
金币
5594 枚
节操
458 斤
灵石
0 块
精力
509 ℃
QQ
 楼主| 发表于 2012-3-20 16:51:17 | 显示全部楼层
本帖最后由 【游骑兵】天涯 于 2012-6-1 10:08 编辑

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。

传奇 Legend

虚拟世界,属于你的世界

Rank: 16

UID
4
宝石
154 粒
金币
5594 枚
节操
458 斤
灵石
0 块
精力
509 ℃
QQ
 楼主| 发表于 2012-3-20 16:52:21 | 显示全部楼层
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
我弄过一个呼叫军人小弟的,是改的呼叫警察小弟。原先的警察是拿的沙鹰枪,在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里有,每行数字后第一项就是,把LAPD1替换为army就行了。查看人物名称和模样的对照,可以用人物查看器。这就改成了呼叫军人拿着转轮机枪开悍马过来。
人物查看器:
http://down.qiannao.com/space/file/qiannao/share/2011/10/21/-4eba-7269-67e5-770b-5668.zip/.page
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一开始只能在鹞式战斗机上用,我就是用此方法改成了无论什么飞机都能用,比飞机投弹补丁要好得多。

传奇 Legend

虚拟世界,属于你的世界

Rank: 16

UID
4
宝石
154 粒
金币
5594 枚
节操
458 斤
灵石
0 块
精力
509 ℃
QQ
 楼主| 发表于 2012-3-20 16:52:50 | 显示全部楼层
曾经有人发了个汽车烟雾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按右键,再按中键”。这种有很多,举都举不完,要慢慢去发现。烈火战车以前只是骑摩托冒火,我就用这种方法改成了任何交通工具都冒火。

传奇 Legend

虚拟世界,属于你的世界

Rank: 16

UID
4
宝石
154 粒
金币
5594 枚
节操
458 斤
灵石
0 块
精力
509 ℃
QQ
 楼主| 发表于 2012-3-20 16:53:57 | 显示全部楼层
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)
这些全都不用记,只要会复制粘贴就行。

传奇 Legend

虚拟世界,属于你的世界

Rank: 16

UID
4
宝石
154 粒
金币
5594 枚
节操
458 斤
灵石
0 块
精力
509 ℃
QQ
 楼主| 发表于 2012-3-20 16:58:03 | 显示全部楼层
首先,每个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)

传奇 Legend

虚拟世界,属于你的世界

Rank: 16

UID
4
宝石
154 粒
金币
5594 枚
节操
458 斤
灵石
0 块
精力
509 ℃
QQ
 楼主| 发表于 2012-3-20 17:00:37 | 显示全部楼层
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@
08E5: get_actor_in_sphere 6@ 7@ 8@ radius 30.0 handle_as 9@   以6@ 7@ 8@这个点为球心画个半径30.0米的球,此范围内随机抽个人定为9@

传奇 Legend

虚拟世界,属于你的世界

Rank: 16

UID
4
宝石
154 粒
金币
5594 枚
节操
458 斤
灵石
0 块
精力
509 ℃
QQ
 楼主| 发表于 2012-3-20 17:01:04 | 显示全部楼层
本帖最后由 【游骑兵】天涯 于 2012-3-20 17:22 编辑

这些语句可以在CLEO之间来回移植,就像搭积木一样,没有固定套路,修改CLEO最好是找一个现有的模板在里面改、复制粘贴,很多CLEO彼此相似就是这个原因。这些命令是用来在原有的CLEO基础上改装的,在实际操作中所遇到的情景远不止上面列出的11种情况,但思路都是一样的:想做什么CLEO,就先去找一个最接近的CLEO作为模板来修改。
这些语句如果你想作为条件来使用,就放到 if (有时候是if or,有时候是if and)的后面,或者干脆把原先的条件替换掉。
如果是关于人物的句子,就放到创建人物的后面,给人物加上此属性。
如果是关于车辆的句子,就放到创建车辆的后面,给车辆加上此属性。
cs文件如果从头看到尾的话,可以看出它就是一个故事,事件全都是按照那些命令出现的先后顺序来发生。只有出现if语句的时候要注意了,if是“如果”,else是“要不然”(jf 和else的意思一样)
有if语句就会出现一个分支:如果……就继续,如果不满足就就跳转到循环××(再去看看循环××是什么内容就知道要发生什么了)。每一段后面都有个jump,jump就是定义下一步跳转到哪一段,段落结尾要是没有jump,那就默认为跳到下一段。
常见的模板:
1、如果……就……、如果……就……、如果……就……(省略号的内容可以是按键或开车、警星数、时间、接近某地等)。
超时空转换就是这个模式:如果走到×点,就传送到×点;如果走到×点,就传送到×点;如果走到×点,就传送到×点………………
注意:若循环的个数很多就用这个模板:定点传送(刷任意车辆就是用定点传送改的,只是把传送的语句改成了刷车)。循环太多的话用上面的模式会有一个很长的反应时间。
变身术CLEO、变换交通工具CLEO,都是用定点传送CLEO的模板改的(定点传送CLEO的创始人是huang,他给的程序框架,我填的坐标)。
2、刷个能帮自己打架的人。
刷帮派小弟、影子小弟、召唤骷髅都可以利用,如果是爬绳子,可以参考呼叫空降兵。
(呼叫空降兵CLEO里“头顶上出现一架直升机”是复制的创建车辆的句子,“爬绳子下来一个兵”的句子是从空中特警CLEO里复制出来的,“飞机飞走”是从“飞机自动导航”CLEO里复制的,呼叫空降兵CLEO就是这样东拼西凑搞出来的。之后的呼叫特警爬绳子下来的CLEO,就直接从呼叫空降兵来改的。)
3、叫帮手开着车过来。
呼叫小弟、呼叫警察小弟都是这种模式。
(呼叫军人小弟、呼叫三合会全都是按这种模式改出来的。)
4、到某个地方后会有几个很厉害的人来追打CJ。
海盗船长、杀手补丁全是这种模式的。
(火星人入侵CLEO也用到了“到某地就会怎样”这个句子)
5、到某个地方会看到有个NPC打另外一个NPC,或者多个打一个。
水怪就是。
(火星人入侵CLEO,就是改的远古水怪CLEO,又加上了刷三合会,其中的飞碟是在飞机上套个铁盘子然后把飞机隐藏得到的。)
6、到某个地方会看到有两帮NPC发生对垒,都是一对一地打。
黑社会任务CLEO可作模板。
(僵尸入侵CLEO、帮派火并CLEO的祖宗都是黑社会任务CLEO。)
7、开某车时想按某个键让车发子弹或开炮。
武装喷水车、斗牛车、喷火悍马都可以套用,这种CLEO对武器模型没要求,哪怕弄个照相机也行,最重要的是定义哪种武器开火。
(武装喷水车CLEO的祖宗是武装军车CLEO,根据坦克顶上那个会转动的机枪提取的代码,喷火悍马、导弹车巡洋舰都是改的武装喷水车CLEO,后来的一些根据MOD量身定做的可以发射的CLEO,都是用这个模式改的)
8、想在车上安一个东西。
武装汽车、武装摩托车、死亡飞车,这些都在车上安装了武器模型。如果物品较大,并且把车隐藏的话,“在车上安个东西”就变成了“利用××车把××物品开走”,大公鸡、飞碟、万吨巨轮全是这种套路。地图最北边那个最大的公鸡就是这样被我开走的,岘港偷渡船(万吨巨轮CLEO)也是这样被我开走的,凡是游戏里见过的东西就没有开不走的。车上也可以粘个车,炮艇CLEO就是把一坦克粘在船上,巴士上带螺旋桨可以削人的那个,恐怖巴士CLEO,也是这种模式。大家只要研究一下代码就能发现,在CLEO集合帖里第三大类“新增交通工具”大部分都是这种(除了飞行和滑旱冰):潜艇和航母、万吨巨轮都是套在Marquis船上,因为这些只是游戏中的景物,它们不是交通工具,必须借助一个船才能开走。冲浪板是套在小汽艇Dinghy上(然后又加载了舞蹈动作,看起来像是在冲浪),滑板车是套在BMX自行车上,海洋一族CLEO中的乌龟海豚鲨鱼是改的潜艇CLEO,又把船换成了Jetmax,所以这些生物开起来很快。海洋一族CLEO中的飞行龟是把乌龟套在水上飞机的身上,还有巡航导弹、火箭操控、战斗公鸡,等等。
9、开车时想让车上站些人拿着枪保护CJ。
装甲车射击手、特警掩护、铁道游击队、海岸警卫队都是这种模式。
(所有这种“车上站个人拿枪保护CJ”的CLEO,它们的祖宗全都是装甲车射击手CLEO)
10、想让旁边出现一些车辆跟着,而且上面站着人保护CJ。
汽车护卫、直升机护卫、悍马突击组都是这样。
(火箭飞行兵CLEO也是改的这一种,只是把车改成了火箭飞行器)
11、想在车上安一个东西,按某键就移动到车的另一个位置。
可以参考汽车尾翼升降,我做那个“火箭发射车”CLEO:在车上安个大导弹按I竖起来、按K放下去的CLEO,就是改的尾翼升降CLEO(其中按M发射是改的“按W+中键坐摩托”的那个CLEO,变成按M开飞机,而飞机上又套一个大导弹,再把飞机隐藏,导弹后面冒的烟是从“汽车烟雾”CLEO里复制出来的,按N产生蘑菇云是从核弹攻击CLEO里弄的)。
12、想开车时同时控制其它的车,步伐一模一样。
战斗机方阵、战斗机联队、阿帕奇战斗群、悍马突击组(新版)全是这种。既有5个一排的,又有前后左右中这种十字排列的,也有3乘3的方阵,还有5乘5的超大方阵。
(这种CLEO的祖宗全都是那个“按W+中键坐摩托”的CLEO,可以把CJ从一个车里塞到另一车里,而原来的车仍处于发动状态。这个CLEO的创始人也是huang。如果把CJ投放到另一车之前先用“把CJ从车里揪出来”这一句,那么原来的车就熄火了,火箭发射车CLEO按M是把CJ从平板货车里揪出来,然后才塞进鹞式战斗机里,要不然火箭和货车是同时控制的。按W+中键坐摩托的CLEO后来已经合并到变换交通工具CLEO里了。)
改装CLEO没有固定思维,方法就像搭积木,想像力有多丰富,改出来的CLEO就有多精彩!上面说的全是根据现有的CLEO依次类推的方法,要想无中生有、新造出一个来,很难很难,是个专门的学科,计算机专业的定会觉得易如反掌吧。
很多语句都能在CLEO之间来回移植,这就需要慢慢摸索了。我现在所能做的也就是一些小小的改动,大致框架不变,还是在原有的cs文件里面做。蘑菇云CLEO(已添加到原版的核弹CLEO里,合二为一)我就是把其它CLEO里的爆炸场面移植出来做的,在多处同时创建爆炸,它们的图案拼起来组成了一个蘑菇云。
这样的修改是随意发挥想像,各人玩法都不同,有个朋友就用“叫外卖”CLEO改出来了一个“按C+F叫一辆BULLET”,这有无数种玩法,随心所欲。如果有一定英语基础,多用Sanny Builder打开各种CLEO来对照着此CLEO的中文说明书看看,就能看得懂里面绝大部分语句,看得懂改起来就好改了。
如果上面的内容都能看得懂,就去看看更深一步的教程,点击进入日志《CLEO修改大法——高手进阶篇》:http://game.55660.net/forum.php?mod=viewthread&tid=8&extra=page%3D1

传奇 Legend

虚拟世界,属于你的世界

Rank: 16

UID
4
宝石
154 粒
金币
5594 枚
节操
458 斤
灵石
0 块
精力
509 ℃
QQ
 楼主| 发表于 2012-3-23 22:06:58 | 显示全部楼层
这标题什么时候被改了

翘楚 Outstanding

Rank: 6Rank: 6Rank: 6

UID
233
宝石
49 粒
金币
2168 枚
节操
48 斤
灵石
0 块
精力
27 ℃
发表于 2012-3-23 22:25:23 | 显示全部楼层
顶天涯,下次你要声优再找我吧。我尽力而为。

传奇 Legend

虚拟世界,属于你的世界

Rank: 16

UID
4
宝石
154 粒
金币
5594 枚
节操
458 斤
灵石
0 块
精力
509 ℃
QQ
 楼主| 发表于 2012-3-24 14:45:17 | 显示全部楼层
李骋 发表于 2012-3-23 22:25
顶天涯,下次你要声优再找我吧。我尽力而为。

你改名了啊 下次我打算 清明放假 我打算更新第四版 把人物出来改为主角做通灵术动作召唤 然后 天上来飞机 小弟从飞机上爬绳子下来 到时候再加一些卡密、说的NPC放技能 让小弟们放雷切之类

传奇 Legend

虚拟世界,属于你的世界

Rank: 16

UID
4
宝石
154 粒
金币
5594 枚
节操
458 斤
灵石
0 块
精力
509 ℃
QQ
 楼主| 发表于 2012-3-24 14:45:35 | 显示全部楼层
先得去学习研究透再说

本版积分规则

    切换繁體
    Archiver|手机版|小黑屋|

GMT+8, 2024-12-25 09:48 , Processed in 0.212643 second(s), 160 queries .

沪ICP备2021020632号-1

快速回复 返回顶部 返回列表