跳到主要内容

NPC 常量

本页面列出了 open.mp 中所有 NPC 函数特有的常量。

限制

常量说明
1000MAX_NPCSNPC 最大数量
64NPC_MAX_NODES最大节点数量

无效常量

常量说明
-1INVALID_NPC_ID无效的 NPC ID
-1INVALID_PATH_ID无效的路径 ID
-1INVALID_NODE_ID无效的节点 ID
-1INVALID_RECORD_ID无效的录制 ID

移动类型

用于 NPC_MoveNPC_MoveByPathNPC_EnterVehicleNPC_PlayNode 等函数。

常量说明
-1UNKNOWN_NPC_MOVE_TYPE未知移动类型
0NPC_MOVE_TYPE_NONE无移动
1NPC_MOVE_TYPE_WALKNPC 步行前往目标
2NPC_MOVE_TYPE_JOGNPC 慢跑前往目标(大多数函数的默认值)
3NPC_MOVE_TYPE_SPRINTNPC 冲刺前往目标
4NPC_MOVE_TYPE_DRIVENPC 驾驶前往目标(车辆移动)
5NPC_MOVE_TYPE_AUTO自动移动类型

移动速度

用于移动函数以控制 NPC 速度。

常量说明
-1.0NPC_MOVE_SPEED_AUTO基于移动类型的自动速度
0.1552086NPC_MOVE_SPEED_WALK步行速度
0.56444NPC_MOVE_SPEED_JOG慢跑速度
0.926784NPC_MOVE_SPEED_SPRINT冲刺速度

实体检查标志

用于 NPC_AimAtNPC_AimAtPlayerNPC_Shoot 的碰撞检测。

常量说明
0NPC_ENTITY_CHECK_NONE无碰撞检查
1NPC_ENTITY_CHECK_PLAYER检查与玩家的碰撞
2NPC_ENTITY_CHECK_NPC检查与其他 NPC 的碰撞
4NPC_ENTITY_CHECK_ACTOR检查与演员的碰撞
8NPC_ENTITY_CHECK_VEHICLE检查与车辆的碰撞
16NPC_ENTITY_CHECK_OBJECT检查与物体的碰撞
32NPC_ENTITY_CHECK_POBJECT_ORIG检查与玩家物体的碰撞(原始)
64NPC_ENTITY_CHECK_POBJECT_TARG检查与玩家物体的碰撞(目标)
128NPC_ENTITY_CHECK_MAP检查与地图的碰撞
255NPC_ENTITY_CHECK_ALL检查与所有实体的碰撞

子弹命中类型

用于 NPC_Shoot 以指定命中的目标类型。

常量说明
BULLET_HIT_TYPE_NONE无特定目标
BULLET_HIT_TYPE_PLAYER玩家目标

示例

移动类型

// 让 NPC 缓慢步行
NPC_Move(npcid, x, y, z, NPC_MOVE_TYPE_WALK);

// 让 NPC 慢跑(默认速度)
NPC_Move(npcid, x, y, z, NPC_MOVE_TYPE_JOG);

// 让 NPC 快速冲刺
NPC_Move(npcid, x, y, z, NPC_MOVE_TYPE_SPRINT);

// 让 NPC 驾驶前往位置
NPC_Move(npcid, x, y, z, NPC_MOVE_TYPE_DRIVE);

// 使用自动移动类型
NPC_Move(npcid, x, y, z, NPC_MOVE_TYPE_AUTO);

移动速度

// 使用自动速度
NPC_Move(npcid, x, y, z, NPC_MOVE_TYPE_WALK, NPC_MOVE_SPEED_AUTO);

// 使用特定步行速度
NPC_Move(npcid, x, y, z, NPC_MOVE_TYPE_WALK, NPC_MOVE_SPEED_WALK);

// 使用特定慢跑速度
NPC_Move(npcid, x, y, z, NPC_MOVE_TYPE_JOG, NPC_MOVE_SPEED_JOG);

// 使用特定冲刺速度
NPC_Move(npcid, x, y, z, NPC_MOVE_TYPE_SPRINT, NPC_MOVE_SPEED_SPRINT);

实体检查标志

// 瞄准时不进行碰撞检查
NPC_AimAt(npcid, x, y, z, true, 1000, true, 0.0, 0.0, 0.6, NPC_ENTITY_CHECK_NONE);

// 瞄准时进行完整碰撞检查
NPC_AimAt(npcid, x, y, z, true, 1000, true, 0.0, 0.0, 0.6, NPC_ENTITY_CHECK_ALL);

// 仅检查与玩家的碰撞
NPC_AimAt(npcid, x, y, z, true, 1000, true, 0.0, 0.0, 0.6, NPC_ENTITY_CHECK_PLAYER);

// 检查与玩家和车辆的碰撞
NPC_AimAt(npcid, x, y, z, true, 1000, true, 0.0, 0.0, 0.6,
NPC_ENTITY_CHECK_PLAYER | NPC_ENTITY_CHECK_VEHICLE);

// 仅检查与物体的碰撞
NPC_AimAt(npcid, x, y, z, true, 1000, true, 0.0, 0.0, 0.6, NPC_ENTITY_CHECK_OBJECT);

子弹命中类型

// 向特定位置射击(无目标)
NPC_Shoot(npcid, INVALID_PLAYER_ID, BULLET_HIT_TYPE_NONE, WEAPON_SNIPER,
x, y, z, 0.0, 0.0, 0.0, false);

// 向玩家射击
NPC_Shoot(npcid, playerid, BULLET_HIT_TYPE_PLAYER, WEAPON_M4,
x, y, z, 0.0, 0.0, 0.0, true);

无效常量

// 检查 NPC ID 是否有效
new npcid = NPC_Create("Bot");
if (npcid != INVALID_NPC_ID)
{
// NPC 创建成功
NPC_Spawn(npcid);
}

// 检查路径 ID 是否有效
new pathid = NPC_CreatePath();
if (pathid != INVALID_PATH_ID)
{
// 路径创建成功
NPC_AddPointToPath(pathid, 0.0, 0.0, 3.0, 0.2);
}

// 在 NPC_Kill 中检查无效玩家
NPC_Kill(npcid, INVALID_PLAYER_ID, REASON_SUICIDE);

限制

// 遍历所有可能的 NPC
for (new i = 0; i < MAX_NPCS; i++)
{
if (NPC_IsValid(i))
{
// 处理有效的 NPC
}
}

// 使用 NPC_MAX_NODES 的示例
for (new i = 0; i < NPC_MAX_NODES; i++)
{
if (NPC_IsNodeOpen(i))
{
// 处理打开节点
NPC_CloseNode(i);
}
}

相关页面