Lua接口/怪物相关:修订间差异

来自天龙知识库
跳到导航跳到搜索
雪舞​(留言 | 贡献)
维护服务端 Lua 接口:核对参数、返回值、边界条件与调用示例
Waylee​(留言 | 贡献)
维护服务端 Lua 接口:核对参数、返回值、边界条件与调用示例
第1行: 第1行:
__NOTOC__
__NOTOC__
<div class="lua-reference" style="max-width:1200px;margin:0 auto;line-height:1.8;color:#29343a;font-family:Arial,'Microsoft YaHei',sans-serif;letter-spacing:0;overflow-wrap:anywhere;">
<div class="lua-reference">
[[首页|首页]] · [[Lua接口/服务端函数索引|服务端接口]] · [[Lua接口/服务端调用约定|调用约定]]
[[首页|首页]] · [[Lua接口/服务端函数索引|服务端接口]] · [[Lua接口/服务端调用约定|调用约定]]


第6行: 第6行:


== 查询怪物 ==
== 查询怪物 ==
{| class="wikitable" style="width:100%;table-layout:fixed;border-collapse:collapse;font-size:13px;"
{| class="wikitable"
! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 接口
! scope="col" | 接口
! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 参数与返回
! scope="col" | 参数与返回
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/GetMonsterCount|GetMonsterCount]]
| [[Lua接口/服务端/GetMonsterCount|GetMonsterCount]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId</code> → 场景内怪物数量;失败 -1。
| <code>sceneId</code> → 场景内怪物数量;失败 -1。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/GetMonsterObjID|GetMonsterObjID]]
| [[Lua接口/服务端/GetMonsterObjID|GetMonsterObjID]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, nIndex</code> → 指定索引怪物对象 ID;失败 -1。
| <code>sceneId, nIndex</code> → 指定索引怪物对象 ID;失败 -1。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/GetMonsterWorldX|GetMonsterWorldX]] / [[Lua接口/服务端/GetMonsterWorldZ|GetMonsterWorldZ]]
| [[Lua接口/服务端/GetMonsterWorldX|GetMonsterWorldX]] / [[Lua接口/服务端/GetMonsterWorldZ|GetMonsterWorldZ]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, monsterIndex</code> → 怪物 X / Z 坐标;失败 -1。
| <code>sceneId, monsterIndex</code> → 怪物 X / Z 坐标;失败 -1。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/GetMonsterHP|GetMonsterHP]] / [[Lua接口/服务端/GetMonsterMaxHP|GetMonsterMaxHP]]
| [[Lua接口/服务端/GetMonsterHP|GetMonsterHP]] / [[Lua接口/服务端/GetMonsterMaxHP|GetMonsterMaxHP]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, monsterIndex</code> → 当前 / 上限生命;失败 -1。
| <code>sceneId, monsterIndex</code> → 当前 / 上限生命;失败 -1。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/GetMonsterCurEnemy|GetMonsterCurEnemy]]
| [[Lua接口/服务端/GetMonsterCurEnemy|GetMonsterCurEnemy]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, monsterId</code> → 当前仇恨目标对象编号;失败 -1。
| <code>sceneId, monsterId</code> → 当前仇恨目标对象编号;失败 -1。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/GetMonsterRespawnPos|GetMonsterRespawnPos]]
| [[Lua接口/服务端/GetMonsterRespawnPos|GetMonsterRespawnPos]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, selfId</code> → 出生点 X、Z;失败 -1。
| <code>sceneId, selfId</code> → 出生点 X、Z;失败 -1。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/GetMonsterIdByName|GetMonsterIdByName]]
| [[Lua接口/服务端/GetMonsterIdByName|GetMonsterIdByName]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, name</code> → 首个名称前缀匹配的怪物对象 ID;失败 -1。
| <code>sceneId, name</code> → 首个名称前缀匹配的怪物对象 ID;失败 -1。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/GetMonsterNamebyDataId|GetMonsterNamebyDataId]]
| [[Lua接口/服务端/GetMonsterNamebyDataId|GetMonsterNamebyDataId]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">monsterDataId</code> → 怪物模板名称;无效模板返回空串。
| <code>monsterDataId</code> → 怪物模板名称;无效模板返回空串。
|}
|}
注意参数区分两种定位方式:[[Lua接口/服务端/GetMonsterWorldX|GetMonsterWorldX]]、[[Lua接口/服务端/GetMonsterHP|GetMonsterHP]] 用**脚本缓存索引(monsterIndex)**,[[Lua接口/服务端/GetMonsterCurEnemy|GetMonsterCurEnemy]]、[[Lua接口/服务端/GetMonsterRespawnPos|GetMonsterRespawnPos]] 用**对象编号(monsterId / selfId)**。[[Lua接口/服务端/GetMonsterRespawnPos|GetMonsterRespawnPos]] 返回两个值。
注意参数区分两种定位方式:[[Lua接口/服务端/GetMonsterWorldX|GetMonsterWorldX]]、[[Lua接口/服务端/GetMonsterHP|GetMonsterHP]] 用**脚本缓存索引(monsterIndex)**,[[Lua接口/服务端/GetMonsterCurEnemy|GetMonsterCurEnemy]]、[[Lua接口/服务端/GetMonsterRespawnPos|GetMonsterRespawnPos]] 用**对象编号(monsterId / selfId)**。[[Lua接口/服务端/GetMonsterRespawnPos|GetMonsterRespawnPos]] 返回两个值。


== 创建与删除 ==
== 创建与删除 ==
{| class="wikitable" style="width:100%;table-layout:fixed;border-collapse:collapse;font-size:13px;"
{| class="wikitable"
! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 接口
! scope="col" | 接口
! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 参数与返回
! scope="col" | 参数与返回
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/LuaFnCreateMonster|LuaFnCreateMonster]]
| [[Lua接口/服务端/LuaFnCreateMonster|LuaFnCreateMonster]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">SceneID, MonsterType, x, z, iAIType, iAIScript, ScriptID</code> → 对象编号;失败 -1。7 个参数。
| <code>SceneID, MonsterType, x, z, iAIType, iAIScript, ScriptID</code> → 对象编号;失败 -1。7 个参数。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/LuaFnDeleteMonster|LuaFnDeleteMonster]]
| [[Lua接口/服务端/LuaFnDeleteMonster|LuaFnDeleteMonster]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">SceneID, ObjID</code>;无返回值。
| <code>SceneID, ObjID</code>;无返回值。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/CreatePetOnScene|CreatePetOnScene]]
| [[Lua接口/服务端/CreatePetOnScene|CreatePetOnScene]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, nPetDataID, x, z</code>;创建无主宠物;记录宠物审计。
| <code>sceneId, nPetDataID, x, z</code>;创建无主宠物;记录宠物审计。
|}
|}
[[Lua接口/服务端/LuaFnCreateMonster|LuaFnCreateMonster]] 需要 7 个参数(含 AI 类型、AI 脚本、脚本编号)。[[Lua接口/服务端/LuaFnDeleteMonster|LuaFnDeleteMonster]] 无返回值。
[[Lua接口/服务端/LuaFnCreateMonster|LuaFnCreateMonster]] 需要 7 个参数(含 AI 类型、AI 脚本、脚本编号)。[[Lua接口/服务端/LuaFnDeleteMonster|LuaFnDeleteMonster]] 无返回值。


== 属性与 AI ==
== 属性与 AI ==
{| class="wikitable" style="width:100%;table-layout:fixed;border-collapse:collapse;font-size:13px;"
{| class="wikitable"
! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 接口
! scope="col" | 接口
! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 参数与返回
! scope="col" | 参数与返回
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/LuaFnSetMonsterExp|LuaFnSetMonsterExp]]
| [[Lua接口/服务端/LuaFnSetMonsterExp|LuaFnSetMonsterExp]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, npcId, exp</code> → 固定返回 -1(不能据此判断失败)。
| <code>sceneId, npcId, exp</code> → 固定返回 -1(不能据此判断失败)。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/LuaFnDisableMonsterDropBox|LuaFnDisableMonsterDropBox]]
| [[Lua接口/服务端/LuaFnDisableMonsterDropBox|LuaFnDisableMonsterDropBox]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, npcId</code> → 固定返回 -1。
| <code>sceneId, npcId</code> → 固定返回 -1。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/GetNpcCamp|GetNpcCamp]]
| [[Lua接口/服务端/GetNpcCamp|GetNpcCamp]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, npcId</code> → 当前阵营;部分分支无返回值。
| <code>sceneId, npcId</code> → 当前阵营;部分分支无返回值。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/SetNpcCamp|SetNpcCamp]]
| [[Lua接口/服务端/SetNpcCamp|SetNpcCamp]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, npcId, campId</code>;无返回值。
| <code>sceneId, npcId, campId</code>;无返回值。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/GetNPCAIType|GetNPCAIType]] / [[Lua接口/服务端/SetNPCAIType|SetNPCAIType]]
| [[Lua接口/服务端/GetNPCAIType|GetNPCAIType]] / [[Lua接口/服务端/SetNPCAIType|SetNPCAIType]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, npcId&#91;, aiType&#93;</code> → AI 类型;SetNPCAIType 固定返回 -1。
| <code>sceneId, npcId&#91;, aiType&#93;</code> → AI 类型;SetNPCAIType 固定返回 -1。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/GetAIScriptID|GetAIScriptID]] / [[Lua接口/服务端/SetAIScriptID|SetAIScriptID]]
| [[Lua接口/服务端/GetAIScriptID|GetAIScriptID]] / [[Lua接口/服务端/SetAIScriptID|SetAIScriptID]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, selfId&#91;, aiScriptId&#93;</code> → 扩展 AI 脚本编号;失败 -1。
| <code>sceneId, selfId&#91;, aiScriptId&#93;</code> → 扩展 AI 脚本编号;失败 -1。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/NpcToIdle|NpcToIdle]]
| [[Lua接口/服务端/NpcToIdle|NpcToIdle]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, selfId</code> → 返回值;失败 -1。
| <code>sceneId, selfId</code> → 返回值;失败 -1。
|}
|}
[[Lua接口/服务端/LuaFnSetMonsterExp|LuaFnSetMonsterExp]]、[[Lua接口/服务端/LuaFnDisableMonsterDropBox|LuaFnDisableMonsterDropBox]]、[[Lua接口/服务端/SetNPCAIType|SetNPCAIType]] 都**固定返回 -1**,是「无意义返回值」,不能用来判断是否成功。
[[Lua接口/服务端/LuaFnSetMonsterExp|LuaFnSetMonsterExp]]、[[Lua接口/服务端/LuaFnDisableMonsterDropBox|LuaFnDisableMonsterDropBox]]、[[Lua接口/服务端/SetNPCAIType|SetNPCAIType]] 都**固定返回 -1**,是「无意义返回值」,不能用来判断是否成功。


== 怪物 AI 参数 ==
== 怪物 AI 参数 ==
{| class="wikitable" style="width:100%;table-layout:fixed;border-collapse:collapse;font-size:13px;"
{| class="wikitable"
! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 接口
! scope="col" | 接口
! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 参数与返回
! scope="col" | 参数与返回
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/MonsterAI_GetIntParamByIndex|MonsterAI_GetIntParamByIndex]] / [[Lua接口/服务端/MonsterAI_SetIntParamByIndex|MonsterAI_SetIntParamByIndex]]
| [[Lua接口/服务端/MonsterAI_GetIntParamByIndex|MonsterAI_GetIntParamByIndex]] / [[Lua接口/服务端/MonsterAI_SetIntParamByIndex|MonsterAI_SetIntParamByIndex]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, selfId, nIndex&#91;, nValue&#93;</code> → 整数参数。
| <code>sceneId, selfId, nIndex&#91;, nValue&#93;</code> → 整数参数。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/MonsterAI_GetObjIDParamByIndex|MonsterAI_GetObjIDParamByIndex]] / [[Lua接口/服务端/MonsterAI_SetObjIDParamByIndex|MonsterAI_SetObjIDParamByIndex]]
| [[Lua接口/服务端/MonsterAI_GetObjIDParamByIndex|MonsterAI_GetObjIDParamByIndex]] / [[Lua接口/服务端/MonsterAI_SetObjIDParamByIndex|MonsterAI_SetObjIDParamByIndex]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, selfId, nIndex&#91;, nID&#93;</code> → 对象编号参数。
| <code>sceneId, selfId, nIndex&#91;, nID&#93;</code> → 对象编号参数。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/MonsterAI_GetBoolParamByIndex|MonsterAI_GetBoolParamByIndex]] / [[Lua接口/服务端/MonsterAI_SetBoolParamByIndex|MonsterAI_SetBoolParamByIndex]]
| [[Lua接口/服务端/MonsterAI_GetBoolParamByIndex|MonsterAI_GetBoolParamByIndex]] / [[Lua接口/服务端/MonsterAI_SetBoolParamByIndex|MonsterAI_SetBoolParamByIndex]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, selfId, nIndex&#91;, bFlag&#93;</code> → 布尔参数(大于零为真)。
| <code>sceneId, selfId, nIndex&#91;, bFlag&#93;</code> → 布尔参数(大于零为真)。
|}
|}
这组是怪物 Lua AI 脚本内部的参数存取,Get 部分分支不返回值。
这组是怪物 Lua AI 脚本内部的参数存取,Get 部分分支不返回值。


== 编组与队形 ==
== 编组与队形 ==
{| class="wikitable" style="width:100%;table-layout:fixed;border-collapse:collapse;font-size:13px;"
{| class="wikitable"
! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 接口
! scope="col" | 接口
! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 参数与返回
! scope="col" | 参数与返回
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/AllocateMonsterGroup|AllocateMonsterGroup]]
| [[Lua接口/服务端/AllocateMonsterGroup|AllocateMonsterGroup]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId</code> → 编组编号;失败 -1。
| <code>sceneId</code> → 编组编号;失败 -1。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/ReleaseMonsterGroup|ReleaseMonsterGroup]]
| [[Lua接口/服务端/ReleaseMonsterGroup|ReleaseMonsterGroup]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, groupId</code> → 返回值;失败 -1。
| <code>sceneId, groupId</code> → 返回值;失败 -1。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/AddGroupMember|AddGroupMember]]
| [[Lua接口/服务端/AddGroupMember|AddGroupMember]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, groupId, monsterId, i, j</code> → 返回值;加入 6x3 队形位置。
| <code>sceneId, groupId, monsterId, i, j</code> → 返回值;加入 6x3 队形位置。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/AddGroupLeader|AddGroupLeader]]
| [[Lua接口/服务端/AddGroupLeader|AddGroupLeader]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, groupId, monsterId</code> → 返回值;首领固定占 [0][1]。
| <code>sceneId, groupId, monsterId</code> → 返回值;首领固定占 [0][1]。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/RefixPosOfGroupMember|RefixPosOfGroupMember]]
| [[Lua接口/服务端/RefixPosOfGroupMember|RefixPosOfGroupMember]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, groupId, leaderId</code> → 返回值;校正全部队员位置。
| <code>sceneId, groupId, leaderId</code> → 返回值;校正全部队员位置。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/SetIntervalDistOfGroupMember|SetIntervalDistOfGroupMember]]
| [[Lua接口/服务端/SetIntervalDistOfGroupMember|SetIntervalDistOfGroupMember]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, groupId, interval</code> → 返回值;设置相邻位置距离。
| <code>sceneId, groupId, interval</code> → 返回值;设置相邻位置距离。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/SetMonsterGroupID|SetMonsterGroupID]]
| [[Lua接口/服务端/SetMonsterGroupID|SetMonsterGroupID]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, selfId, groupId</code> → 部分分支无返回值。
| <code>sceneId, selfId, groupId</code> → 部分分支无返回值。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/GetPatrolId|GetPatrolId]]
| [[Lua接口/服务端/GetPatrolId|GetPatrolId]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, selfId</code> → 巡逻路径编号;部分分支无返回值。
| <code>sceneId, selfId</code> → 巡逻路径编号;部分分支无返回值。
|}
|}
编组队形是 6 列 3 行(6x3),[[Lua接口/服务端/AddGroupMember|AddGroupMember]] 的 i、j 是队形行列位置,首领固定占 [0][1]。
编组队形是 6 列 3 行(6x3),[[Lua接口/服务端/AddGroupMember|AddGroupMember]] 的 i、j 是队形行列位置,首领固定占 [0][1]。


== 阵营与对白 ==
== 阵营与对白 ==
{| class="wikitable" style="width:100%;table-layout:fixed;border-collapse:collapse;font-size:13px;"
{| class="wikitable"
! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 接口
! scope="col" | 接口
! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 参数与返回
! scope="col" | 参数与返回
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/GetUnitCampID|GetUnitCampID]] / [[Lua接口/服务端/SetUnitCampID|SetUnitCampID]]
| [[Lua接口/服务端/GetUnitCampID|GetUnitCampID]] / [[Lua接口/服务端/SetUnitCampID|SetUnitCampID]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, selfId, unitId&#91;, campId&#93;</code> → 脚本阵营或基础阵营。
| <code>sceneId, selfId, unitId&#91;, campId&#93;</code> → 脚本阵营或基础阵营。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/MonsterTalk|MonsterTalk]]
| [[Lua接口/服务端/MonsterTalk|MonsterTalk]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, monsterId, sceneName, msg</code> → 部分分支无返回值。
| <code>sceneId, monsterId, sceneName, msg</code> → 部分分支无返回值。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/LuaFnNpcChat|LuaFnNpcChat]]
| [[Lua接口/服务端/LuaFnNpcChat|LuaFnNpcChat]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, monsterId, isSceneBroadcast, msg</code> → 部分分支无返回值。
| <code>sceneId, monsterId, isSceneBroadcast, msg</code> → 部分分支无返回值。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/PaoPao|PaoPao]] / [[Lua接口/服务端/PaoPaoEx|PaoPaoEx]]
| [[Lua接口/服务端/PaoPao|PaoPao]] / [[Lua接口/服务端/PaoPaoEx|PaoPaoEx]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, selfId, npcId&#91;, paoPaoId&#93;</code> → 气泡对白结果;失败 -1。
| <code>sceneId, selfId, npcId&#91;, paoPaoId&#93;</code> → 气泡对白结果;失败 -1。
|}
|}
[[Lua接口/服务端/PaoPao|PaoPao]] 触发默认气泡,[[Lua接口/服务端/PaoPaoEx|PaoPaoEx]] 按指定气泡编号触发。
[[Lua接口/服务端/PaoPao|PaoPao]] 触发默认气泡,[[Lua接口/服务端/PaoPaoEx|PaoPaoEx]] 按指定气泡编号触发。


== 遍历并读取怪物 ==
== 遍历并读取怪物 ==
<pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">local count = GetMonsterCount(sceneId)
<pre>local count = GetMonsterCount(sceneId)
if type(count) == "number" and count ~= -1 then
if type(count) == "number" and count ~= -1 then
     local objId = GetMonsterObjID(sceneId, 0)
     local objId = GetMonsterObjID(sceneId, 0)
第157行: 第157行:


== 创建怪物 ==
== 创建怪物 ==
<pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">local objId = LuaFnCreateMonster(sceneId, monsterType, posX, posZ, aiType, aiScript, scriptId)
<pre>local objId = LuaFnCreateMonster(sceneId, monsterType, posX, posZ, aiType, aiScript, scriptId)
if type(objId) == "number" and objId ~= -1 then
if type(objId) == "number" and objId ~= -1 then
     -- 怪物创建成功,objId 为新对象编号
     -- 怪物创建成功,objId 为新对象编号
第197行: 第197行:
[[Lua接口/函数不存在|函数不存在或提示 nil]] · [[Lua接口/参数类型与顺序|参数类型与顺序]] · [[Lua接口/返回值判断|返回值判断]] · [[Lua接口/对象ID与GUID|对象 ID 与 GUID]]
[[Lua接口/函数不存在|函数不存在或提示 nil]] · [[Lua接口/参数类型与顺序|参数类型与顺序]] · [[Lua接口/返回值判断|返回值判断]] · [[Lua接口/对象ID与GUID|对象 ID 与 GUID]]


<div style="margin-top:20px;padding-top:10px;border-top:1px solid #dbe3e6;color:#657078;font-size:12px;">本页函数签名与返回约定依据当前服务端注册表整理;sceneId、selfId 由实际回调提供,业务枚举、属性类型编号与运行效果需要实测。</div>
<div class="lua-note">本页函数签名与返回约定依据当前服务端注册表整理;sceneId、selfId 由实际回调提供,业务枚举、属性类型编号与运行效果需要实测。</div>


</div>
</div>

2026年9月19日 (六) 16:59的版本

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

查询、创建、删除怪物,读写怪物属性、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 → 怪物模板名称;无效模板返回空串。

注意参数区分两种定位方式:GetMonsterWorldX、GetMonsterHP 用**脚本缓存索引(monsterIndex)**,GetMonsterCurEnemy、GetMonsterRespawnPos 用**对象编号(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。

LuaFnSetMonsterExp、LuaFnDisableMonsterDropBox、SetNPCAIType 都**固定返回 -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 由实际回调提供,业务枚举、属性类型编号与运行效果需要实测。