[进口教程]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全人物图鉴 我也会翻译一点点、- -。 貌似很难! 完全看不懂:dizzy: 适用于sanny的,3和VC只不过是前面的执行码不一样,在OP库里用关键词搜索呗 好东西支持 深奥。。~~不太看得懂
页:
[1]