Lua接口/怪物相关

来自天龙知识库
跳到导航跳到搜索

首页 · 服务端接口 · 调用约定

查询、创建、删除怪物,读写怪物属性、AI 参数、编组队形与巡逻路径。怪物用对象编号(objId / monsterId)或脚本缓存索引定位。

查询怪物

接口 参数与返回
GetMonsterCount sceneId → 场景内怪物数量;失败 -1。
GetMonsterObjID sceneId, nIndex → 指定索引怪物对象 ID;失败 -1。
GetMonsterWorldX / GetMonsterWorldZ sceneId, monsterIndex → 怪物 X / Z 坐标;失败 -1。
GetMonsterHP / GetMonsterMaxHP sceneId, monsterIndex → 当前 / 上限生命;失败 -1。
GetMonsterCurEnemy sceneId, monsterId → 当前仇恨目标对象编号;失败 -1。
GetMonsterRespawnPos sceneId, selfId → 出生点 X、Z;失败 -1。
GetMonsterIdByName sceneId, name → 首个名称前缀匹配的怪物对象 ID;失败 -1。
GetMonsterNamebyDataId monsterDataId → 怪物模板名称;无效模板返回空串。

注意参数区分两种定位方式:GetMonsterWorldXGetMonsterHP 用**脚本缓存索引(monsterIndex)**,GetMonsterCurEnemyGetMonsterRespawnPos 用**对象编号(monsterId / selfId)**。GetMonsterRespawnPos 返回两个值。

创建与删除

接口 参数与返回
LuaFnCreateMonster SceneID, MonsterType, x, z, iAIType, iAIScript, ScriptID → 对象编号;失败 -1。7 个参数。
LuaFnDeleteMonster SceneID, ObjID;无返回值。
CreatePetOnScene sceneId, nPetDataID, x, z;创建无主宠物;记录宠物审计。

LuaFnCreateMonster 需要 7 个参数(含 AI 类型、AI 脚本、脚本编号)。LuaFnDeleteMonster 无返回值。

属性与 AI

接口 参数与返回
LuaFnSetMonsterExp sceneId, npcId, exp → 固定返回 -1(不能据此判断失败)。
LuaFnDisableMonsterDropBox sceneId, npcId → 固定返回 -1。
GetNpcCamp sceneId, npcId → 当前阵营;部分分支无返回值。
SetNpcCamp sceneId, npcId, campId;无返回值。
GetNPCAIType / SetNPCAIType sceneId, npcId[, aiType] → AI 类型;SetNPCAIType 固定返回 -1。
GetAIScriptID / SetAIScriptID sceneId, selfId[, aiScriptId] → 扩展 AI 脚本编号;失败 -1。
NpcToIdle sceneId, selfId → 返回值;失败 -1。

LuaFnSetMonsterExpLuaFnDisableMonsterDropBoxSetNPCAIType 都**固定返回 -1**,是「无意义返回值」,不能用来判断是否成功。

怪物 AI 参数

接口 参数与返回
MonsterAI_GetIntParamByIndex / MonsterAI_SetIntParamByIndex sceneId, selfId, nIndex[, nValue] → 整数参数。
MonsterAI_GetObjIDParamByIndex / MonsterAI_SetObjIDParamByIndex sceneId, selfId, nIndex[, nID] → 对象编号参数。
MonsterAI_GetBoolParamByIndex / MonsterAI_SetBoolParamByIndex sceneId, selfId, nIndex[, bFlag] → 布尔参数(大于零为真)。

这组是怪物 Lua AI 脚本内部的参数存取,Get 部分分支不返回值。

编组与队形

接口 参数与返回
AllocateMonsterGroup sceneId → 编组编号;失败 -1。
ReleaseMonsterGroup sceneId, groupId → 返回值;失败 -1。
AddGroupMember sceneId, groupId, monsterId, i, j → 返回值;加入 6x3 队形位置。
AddGroupLeader sceneId, groupId, monsterId → 返回值;首领固定占 [0][1]。
RefixPosOfGroupMember sceneId, groupId, leaderId → 返回值;校正全部队员位置。
SetIntervalDistOfGroupMember sceneId, groupId, interval → 返回值;设置相邻位置距离。
SetMonsterGroupID sceneId, selfId, groupId → 部分分支无返回值。
GetPatrolId sceneId, selfId → 巡逻路径编号;部分分支无返回值。

编组队形是 6 列 3 行(6x3),AddGroupMember 的 i、j 是队形行列位置,首领固定占 [0][1]。

阵营与对白

接口 参数与返回
GetUnitCampID / SetUnitCampID sceneId, selfId, unitId[, campId] → 脚本阵营或基础阵营。
MonsterTalk sceneId, monsterId, sceneName, msg → 部分分支无返回值。
LuaFnNpcChat sceneId, monsterId, isSceneBroadcast, msg → 部分分支无返回值。
PaoPao / PaoPaoEx sceneId, selfId, npcId[, paoPaoId] → 气泡对白结果;失败 -1。

PaoPao 触发默认气泡,PaoPaoEx 按指定气泡编号触发。

遍历并读取怪物

local count = GetMonsterCount(sceneId)
if type(count) == "number" and count ~= -1 then
    local objId = GetMonsterObjID(sceneId, 0)
    if type(objId) == "number" and objId ~= -1 then
        -- 取得首个怪物对象 ID
    end
end

先取数量再按索引取对象 ID,两者都要排除 -1。

创建怪物

local objId = LuaFnCreateMonster(sceneId, monsterType, posX, posZ, aiType, aiScript, scriptId)
if type(objId) == "number" and objId ~= -1 then
    -- 怪物创建成功,objId 为新对象编号
end

LuaFnCreateMonster 需要 7 个参数,成功返回对象编号、失败 -1。删除用 LuaFnDeleteMonster(无返回值)。

相关主题

服务端调用约定 · 服务端调用示例 · 服务端函数索引

函数不存在或提示 nil · 参数类型与顺序 · 返回值判断 · 对象 ID 与 GUID

本页函数签名与返回约定依据当前服务端注册表整理;sceneId、selfId 由实际回调提供,业务枚举、属性类型编号与运行效果需要实测。