拾取物指南
本简短教程将讲解如何在游戏中使用拾取物系统。
定义拾取物 ID
创建拾取物的第一步是声明存储其 ID 的变量。我们将使用全局变量gMyPickup
,该变量将在创建拾取物时被赋值,并在玩家拾取时通过回调函数读取。
new gMyPickup;
创建拾取物
有两种创建方式:CreatePickup 和 AddStaticPickup。由于后者无法返回 ID、不可销毁且只能在OnGameModeInit
中使用,本教程选用前者。
CreatePickup 参数说明:
参数 | 说明 |
---|---|
model | 拾取物显示模型 ID |
type | 生成类型(详见下文) |
Float:X | X 坐标 |
Float:Y | Y 坐标 |
Float:Z | Z 坐标 |
Virtualworld | 虚拟世界 ID(-1 表示全虚拟世界可见) |
以在格罗夫街创建金钱拾取物为例:
首先需要选择显示模型,您可通过此外部站点查看完整模型列表。本教程选用编号 1274 的美元符号模型。
接下来确定拾取类型,该参数决定拾取物行为特性。为实现"拾取后暂时消失,数分钟后重生"的效果,我们选择类型 2。
拾取物通常创建于脚本初始化阶段:
- 游戏模式脚本使用OnGameModeInit
- 滤镜脚本使用OnFilterScriptInit
但实际可放置于任意函数中(例如在OnPlayerDeath回调中创建武器掉落)。
最终创建代码(ID 存储至'gMyPickup'变量):
gMyPickup = CreatePickup(1274, 2, 2491.7900, -1668.1653, 13.3438, -1);
设置拾取行为
当玩家拾取物品时,系统将调用OnPlayerPickUpPickup回调函数,传递两个参数:
playerid
:执行拾取操作的玩家 IDpickupid
:被拾取物品的 ID
部分拾取类型(如武器类型)已内置自动处理逻辑,无需在此回调中编写额外代码。具体行为请参考拾取物类型文档。
实现金钱奖励功能的步骤:
- 验证拾取物 ID 是否为预设的
gMyPickup
- 通过条件判断后执行奖励逻辑
public OnPlayerPickUpPickup(playerid, pickupid)
{
// 验证拾取物ID是否为预设的gMyPickup
if(pickupid == gMyPickup)
{
// 发送提示信息
SendClientMessage(playerid, 0xFFFFFFFF, "你获得了$100!");
// 发放金钱奖励
GivePlayerMoney(playerid, 100);
}
// 如需添加更多拾取物,可扩展如下:
else if (pickupid == other_pickup_id)
{
// 处理其他拾取物逻辑
}
return 1;
}
恭喜!您已掌握创建和处理拾取物的核心方法!
进阶应用
- 使用流加载插件的CreateDynamicPickup创建无限拾取物
- 通过CreatePlayerPickup实现玩家专属拾取物