---
title: "OnNPCChangeNode | open.mp"
description: "当 NPC 在基于节点的移动过程中尝试从一个导航节点切换到另一个节点时调用此回调。"
canonical: https://omp.itsneufox.com/zh-CN/docs/scripting/callbacks/OnNPCChangeNode
language: zh-CN
---

# OnNPCChangeNode

注意

这个回调是在omp v1.5.8.3079中添加的，在以前的版本中不起作用！

## 描述

当 NPC 在基于节点的移动过程中尝试从一个导航节点切换到另一个节点时调用此回调。这允许你控制是否应允许或拒绝节点切换。

| 参数 | 说明 |
| --- | --- |
| npcid | 尝试切换节点的 NPC 的 ID |
| newnodeid | NPC 想要移动到的新节点的 ID |
| oldnodeid | NPC 当前所在节点的 ID |

## 返回值

返回 `true` 允许节点切换，或返回 `false` 拒绝切换。

## 示例

```c
public OnNPCChangeNode(npcid, newnodeid, oldnodeid)
{
    printf("[NPC] NPC %d 正在从节点 %d 切换到节点 %d", npcid, oldnodeid, newnodeid);

    // 通知跟踪此NPC的玩家
    for (new playerid = 0; playerid < MAX_PLAYERS; playerid++)
    {
        if (!IsPlayerConnected(playerid))
            continue;

        if (PlayerNPC[playerid] == npcid)
        {
            SendClientMessage(playerid, 0x00FF00FF, "NPC %d 正在从节点 %d 切换到节点 %d", npcid, oldnodeid, newnodeid);
        }
    }
    return 1;
}
```

## 注意事项

-   此回调仅在 NPC 通过 `NPC_PlayNode` 使用基于节点的导航时调用
-   返回 `false` 将阻止 NPC 切换节点，并可能导致其停止导航
-   NPC 必须先使用 `NPC_OpenNode` 加载节点文件，才能在节点之间导航

## 相关函数

以下函数可能有用，因为它们与此回调以某种方式相关。

-   [NPC\_PlayNode](https://omp.itsneufox.com/zh-CN/docs/scripting/functions/NPC_PlayNode): 开始 NPC 基于节点的导航
-   [NPC\_OpenNode](https://omp.itsneufox.com/zh-CN/docs/scripting/functions/NPC_OpenNode): 打开导航节点文件
-   [NPC\_CloseNode](https://omp.itsneufox.com/zh-CN/docs/scripting/functions/NPC_CloseNode): 关闭导航节点文件
-   [NPC\_StopPlayingNode](https://omp.itsneufox.com/zh-CN/docs/scripting/functions/NPC_StopPlayingNode): 停止 NPC 节点导航

## 相关回调

-   [OnNPCFinishNode](https://omp.itsneufox.com/zh-CN/docs/scripting/callbacks/OnNPCFinishNode): 当 NPC 完成导航完整节点时调用
-   [OnNPCFinishNodePoint](https://omp.itsneufox.com/zh-CN/docs/scripting/callbacks/OnNPCFinishNodePoint): 当 NPC 到达节点中的特定点时调用
