本帖最后由 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为例
或
有一些刷人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
复制代码
或
设定人物属性
现在你可以为人物添加设置和属性,比如旋转人物,播放动画等等。比如变量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全人物图鉴 |