kwanz 发表于 2012-4-20 19:15:01

[进口教程]CLEO人物创建教程(GTAModding)

本帖最后由 kwanz 于 2012-4-20 19:35 编辑

原帖地址 http://www.gtamodding.com/index.php?title=Spawn_a_pedCLEO人物创建教程
原帖作者/ 多位编辑者 @GTAModding 翻译/ kwanz @虚拟世界
未经许可 谢绝转载
创建PED(又称character/actor)并不是写一行代码那么简单。要成功地创建人物需要经过好几个步骤。本教程将演示如何用SB的句式创建人物。以下的示例用于SA,但稍作修改就可以用于III/VC。

创建线程
首先,创建一个线程。下面是一个例子:
004F: create_thread @LoadModel

:LoadModel
// 把下面用的示例代码放在这儿
004E: end_thread


create_thread @LoadModel

:LoadModel
// 把下面用的示例代码放在这儿
end_thread
请求模型
请求模型这个步骤很关键。你可以在III/VC的default.ide,SA的peds.ide里找到全部可用的人物列表。用opcode0247或命令Model.Load来请求人物模型。这一命令原本需要用到人物模型的ID号,但SB支持用#打头的人物名称表示。我们以列表中的第一个人物BFORI为例
0247: load_model #BFORI

Model.Load #BFORI
有一些刷人opcode不需要请求人物模型,请参考下面的注记。
检测模型是否加载完毕
接下来,你需要检测模型是否加载完毕,这要用到带条件判断opcode0248的IF语句,或者Model.Available命令。如果你用一个不可用的模型创建人物,游戏会挂掉。
repeat
    wait 0 ms
    if
      0248:   model #BFORI available
    then
      break
    end
until false

repeat
    wait 0
    if
      Model.Available(#BFORI)
    then
      break
    end
until false
另外,如果在请求模型以后调用038B,检测的步骤可以跳过,但是这种代码上的简化会导致游戏的卡顿,因为模型是以流的形式存储的。
下面是检测模型加载完毕的代码。
while 8248:   not model #BFORI available
    wait 0
end
创建人物
现在你可以调用创建人物的主要opcode009A了,或者也可以用命令Actor.Create。Opcode的参数包括人物的类型(pedtype)和创建人物的坐标。SB内置有坐标检测工具,可以在游戏运行中点击Tools>IDE Tools>Coords manager...或按快捷键Ctrl+Alt+1,显示玩家的当前坐标。
009A: 0@ = create_actor_pedtype 4 model #BFORI at 0.0 0.0 0.0

Actor.Create(0@, 4, #BFORI, 0.0, 0.0, 0.0)
--------------------------------------
其他opcode
其他创建不同状况的人物的opcode包括:
0129: 创建人物作为司机

描述
在车辆驾驶座上创建一个人物
调用格式
0129: [var] = create_actor_pedtype [int1] model [int2] in_car [car_handle] driverseat
参数
[var] 存储人物标识符的变量
[int1] 人物类型(pedtype)
[int2] IDE文件的PEDS节定义的有效人物模型ID或者#+[模型的DFF文件名]
[car handle] 车辆标识符
对应的原生函数(Native functions用于GTA IV)
CREATE_CHAR_INSIDE_CAR

这一opcode在车辆驾驶座上创建一个人物,调用需要存在的车辆和0247检测,否则游戏出错。

01C8: 创建人物作为乘客

描述
在乘客座位上创建一个人物
调用格式
01C8: [var] = create_actor [int1] [int2] in_car [car_handle] passenger_seat [int3]
参数
[var] 存储人物标识符的变量
[int1] 人物类型(pedtype)
[int2] IDE文件的PEDS节定义的有效人物模型ID或者#+[模型的DFF文件名]
[car_handle] 车辆标识符
[int3] 座位号
对应的原生函数(Native functions用于GTA IV)
CREATE_CHAR_AS_PASSENGER

类似009A,opcode在乘客座上创建人物,调用需要存在的车辆和0247检测,否则游戏出错。只要车辆存在,人物甚至可以创建在毁坏的车辆上。如果没有更多的程序控制,当玩家上车时,人物会离开车辆。可以调0526之类让人物留在车上。
如果你在一个不存在的座位上创建人物,人物仍然会创建出来,不过人物不可见。通常的让人物下车的动作不再有效,但可以调opcode强迫人物离开车辆。

以下是一些不需要请求模型直接创建随机人物的opcode。
0376: 创建随机人物
0560: 在驾驶座上创建随机人物
0561: 在乘客座上创建随机人物

Pedtype的限制
某些pedtype只能用于特定的模型,否则游戏会出错。
·Pedtype 6只能用于模型0-4(#null,#cop,#swat,#fbi,#army)
·Pedtype 16只能用于模型5(#medic)
·Pedtype 17只能用于模型6(#fireman)

释放模型
人物创建完毕后,不再需要模型,可以用opcode0249或命令Model.Destroy释放模型
0249: release_model #BFORI

Model.Destroy(#BFORI)

设定人物属性
现在你可以为人物添加设置和属性,比如旋转人物,播放动画等等。比如变量0@作为人物的句柄,也就是标识符。在用ped相关opcode时,只需要传入人物句柄即可。你可以用SB的opcode搜索工具找到想用的opcode。点击Tools>IDE Tools>Opcode Search...或按快捷键Ctrl+Alt+2,然后在搜索框中输入actor,就可以找到相关opcode列表。

完整示例
// load model, required to prevent unnecessary crash!
0247: request_model #BFORI
// check if model is loaded
repeat
    wait 0
    if
      0248:   model #BFORI available
    then
      break
    end
until false
// spawn character
009A: 0@ = create_actor 4 #BFORI at 0.0 0.0 0.0
// cleanup
0249: release_model #BFORI

附:3/VC全人物图鉴

疯之子 发表于 2012-4-20 19:20:47

我也会翻译一点点、- -。

クレー 发表于 2012-4-20 19:24:17

貌似很难!

晨郗 发表于 2012-4-20 19:57:21

完全看不懂:dizzy:

kami 发表于 2012-4-20 23:59:40

适用于sanny的,3和VC只不过是前面的执行码不一样,在OP库里用关键词搜索呗

为主的祥助 发表于 2012-4-23 16:28:13

好东西支持

守られた笑顔 发表于 2012-4-24 01:53:24

深奥。。~~不太看得懂
页: [1]
查看完整版本: [进口教程]CLEO人物创建教程(GTAModding)