Lua接口/坐标与传送:修订间差异

来自天龙知识库
跳到导航跳到搜索
雪舞​(留言 | 贡献)
维护服务端 Lua 接口:核对参数、返回值、边界条件与调用示例
Waylee​(留言 | 贡献)
维护服务端 Lua 接口:核对参数、返回值、边界条件与调用示例
 
(未显示同一用户的2个中间版本)
第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接口/服务端/GetWorldPos|GetWorldPos]]
| [[Lua接口/服务端/GetWorldPos|GetWorldPos]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, selfId</code> → x、z 两个值;失败 -1、-1。
| <code>sceneId, selfId</code> → x、z 两个值;失败 -1、-1。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/LuaFnGetUnitPosition|LuaFnGetUnitPosition]]
| [[Lua接口/服务端/LuaFnGetUnitPosition|LuaFnGetUnitPosition]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, selfId</code> → X、Z 两个值;目标无效不返回值。
| <code>sceneId, selfId</code> → X、Z 两个值;目标无效不返回值。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/GetHumanWorldX|GetHumanWorldX]] / [[Lua接口/服务端/GetHumanWorldZ|GetHumanWorldZ]]
| [[Lua接口/服务端/GetHumanWorldX|GetHumanWorldX]] / [[Lua接口/服务端/GetHumanWorldZ|GetHumanWorldZ]]
| 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。
|}
|}
[[Lua接口/服务端/GetWorldPos|GetWorldPos]] 和 [[Lua接口/服务端/LuaFnGetUnitPosition|LuaFnGetUnitPosition]] 都返回**两个值**,必须用两个变量接收,只接一项会丢掉 Z。
[[Lua接口/服务端/GetWorldPos|GetWorldPos]] 和 [[Lua接口/服务端/LuaFnGetUnitPosition|LuaFnGetUnitPosition]] 都返回'''两个值''',必须用两个变量接收,只接一项会丢掉 Z。


== 设置坐标 ==
== 设置坐标 ==
{| 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接口/服务端/SetPos|SetPos]]
| [[Lua接口/服务端/SetPos|SetPos]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, selfId, x, z</code>;无返回值。同场景内的位置转移。
| <code>sceneId, selfId, x, z</code>;无返回值。同场景内的位置转移。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/SetRevPos|SetRevPos]]
| [[Lua接口/服务端/SetRevPos|SetRevPos]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, selfId, x, z</code>;无返回值。设置玩家重生点(再次登入当前世界的位置)。
| <code>sceneId, selfId, x, z</code>;无返回值。设置玩家重生点(再次登入当前世界的位置)。
|}
|}
[[Lua接口/服务端/SetPos|SetPos]] 只在当前场景内移动,不切换场景;[[Lua接口/服务端/SetRevPos|SetRevPos]] 设置的是**登录 / 复活时的重生点**,不是即时位置。
[[Lua接口/服务端/SetPos|SetPos]] 只在当前场景内移动,不切换场景;[[Lua接口/服务端/SetRevPos|SetRevPos]] 设置的是'''登录 / 复活时的重生点''',不是即时位置。


== 切换场景 ==
== 切换场景 ==
{| 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接口/服务端/NewWorld|NewWorld]]
| [[Lua接口/服务端/NewWorld|NewWorld]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, selfId, targetSceneId, x, z</code>;无返回值。切换到目标场景。
| <code>sceneId, selfId, targetSceneId, x, z</code>;无返回值。切换到目标场景。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/IsCanNewWorld|IsCanNewWorld]]
| [[Lua接口/服务端/IsCanNewWorld|IsCanNewWorld]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, selfId, targetSceneId, x, z</code> → 是否满足准入条件;部分分支无返回值。
| <code>sceneId, selfId, targetSceneId, x, z</code> → 是否满足准入条件;部分分支无返回值。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/SetCanChangeScene|SetCanChangeScene]]
| [[Lua接口/服务端/SetCanChangeScene|SetCanChangeScene]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, selfId, canChange</code> → 1 / -1。控制玩家是否允许切换场景。
| <code>sceneId, selfId, canChange</code> → 1 / -1。控制玩家是否允许切换场景。
|}
|}
[[Lua接口/服务端/NewWorld|NewWorld]] 无返回值,切换前应先用 [[Lua接口/服务端/IsCanNewWorld|IsCanNewWorld]] 判断准入条件。[[Lua接口/服务端/SetCanChangeScene|SetCanChangeScene]] 控制是否**允许**切换场景(用于锁定场景),返回 1 或 -1。
[[Lua接口/服务端/NewWorld|NewWorld]] 无返回值,切换前应先用 [[Lua接口/服务端/IsCanNewWorld|IsCanNewWorld]] 判断准入条件。[[Lua接口/服务端/SetCanChangeScene|SetCanChangeScene]] 控制是否'''允许'''切换场景(用于锁定场景),返回 1 或 -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接口/服务端/IsInDist|IsInDist]]
| [[Lua接口/服务端/IsInDist|IsInDist]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, selfId, targetId, dist</code> → 是否在 dist 内(含边界);失败 -1。
| <code>sceneId, selfId, targetId, dist</code> → 是否在 dist 内(含边界);失败 -1。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/GetDist|GetDist]]
| [[Lua接口/服务端/GetDist|GetDist]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, selfId, targetId, arg4</code> → 两个对象的距离;失败 -1。
| <code>sceneId, selfId, targetId, arg4</code> → 两个对象的距离;失败 -1。
|}
|}
[[Lua接口/服务端/IsInDist|IsInDist]] 的 dist 是上限(包含边界),[[Lua接口/服务端/GetDist|GetDist]] 返回实际距离。
[[Lua接口/服务端/IsInDist|IsInDist]] 的 dist 是上限(包含边界),[[Lua接口/服务端/GetDist|GetDist]] 返回实际距离。


== ID 转换 ==
== ID 转换 ==
{| 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接口/服务端/LuaFnObjId2Guid|LuaFnObjId2Guid]]
| [[Lua接口/服务端/LuaFnObjId2Guid|LuaFnObjId2Guid]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, selfId</code> → 该对象 ID 对应的 GUID;失败 -1。
| <code>sceneId, selfId</code> → 该对象 ID 对应的 GUID;失败 -1。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/LuaFnGuid2ObjId|LuaFnGuid2ObjId]]
| [[Lua接口/服务端/LuaFnGuid2ObjId|LuaFnGuid2ObjId]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, guid</code> → 该 GUID 在当前场景的对象 ID;失败 -1。
| <code>sceneId, guid</code> → 该 GUID 在当前场景的对象 ID;失败 -1。
|}
|}
GUID 是全局标识,对象 ID 只在当前场景有效。两者转换要求对象仍在对应场景中,详见 [[Lua接口/对象ID与GUID|对象 ID 与 GUID]]。
GUID 是全局标识,对象 ID 只在当前场景有效。两者转换要求对象仍在对应场景中,详见 [[Lua接口/对象ID与GUID|对象 ID 与 GUID]]。


== 默认复活点 ==
== 默认复活点 ==
{| 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接口/服务端/SetPlayerDefaultReliveInfo|SetPlayerDefaultReliveInfo]]
| [[Lua接口/服务端/SetPlayerDefaultReliveInfo|SetPlayerDefaultReliveInfo]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, selfId, pszHP, pszMP, pszSP, defaultSceneID, defaultPosX, defaultPosZ</code>;无返回值。8 个参数。
| <code>sceneId, selfId, pszHP, pszMP, pszSP, defaultSceneID, defaultPosX, defaultPosZ</code>;无返回值。8 个参数。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/SetPlayerDefaultReliveInfoEx|SetPlayerDefaultReliveInfoEx]]
| [[Lua接口/服务端/SetPlayerDefaultReliveInfoEx|SetPlayerDefaultReliveInfoEx]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, selfId, pszHP, pszMP, pszSP, defaultSceneID, defaultPosX, defaultPosZ, scriptId</code>;无返回值。9 个参数。
| <code>sceneId, selfId, pszHP, pszMP, pszSP, defaultSceneID, defaultPosX, defaultPosZ, scriptId</code>;无返回值。9 个参数。
|}
|}
这两个接口参数很多,Ex 版本多一个 scriptId。传入的 HP / MP / SP 是**字符串**(psz 前缀)。
这两个接口参数很多,Ex 版本多一个 scriptId。传入的 HP / MP / SP 是'''字符串'''(psz 前缀)。


== 检查并切换场景 ==
== 检查并切换场景 ==
<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 ok = IsCanNewWorld(sceneId, selfId, targetSceneId, posX, posZ)
<pre>local ok = IsCanNewWorld(sceneId, selfId, targetSceneId, posX, posZ)
if type(ok) == "number" and ok == 1 then
if type(ok) == "number" and ok == 1 then
     NewWorld(sceneId, selfId, targetSceneId, posX, posZ)
     NewWorld(sceneId, selfId, targetSceneId, posX, posZ)
第97行: 第97行:


== 读取并设置坐标 ==
== 读取并设置坐标 ==
<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 x, z = GetWorldPos(sceneId, selfId)
<pre>local x, z = GetWorldPos(sceneId, selfId)
if type(x) == "number" and type(z) == "number" and x ~= -1 then
if type(x) == "number" and type(z) == "number" and x ~= -1 then
     SetPos(sceneId, selfId, x, z)
     SetPos(sceneId, selfId, x, z)
第136行: 第136行:


[[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>
</div>

2026年10月26日 (一) 17:29的最新版本

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

读取与设置角色坐标、切换场景、计算距离与设置复活点。坐标接口通常返回 X、Z 两个值。

读取坐标

接口 参数与返回
GetWorldPos sceneId, selfId → x、z 两个值;失败 -1、-1。
LuaFnGetUnitPosition sceneId, selfId → X、Z 两个值;目标无效不返回值。
GetHumanWorldX / GetHumanWorldZ sceneId, selfId → 世界坐标 X / Z;失败 -1。

GetWorldPos 和 LuaFnGetUnitPosition 都返回两个值,必须用两个变量接收,只接一项会丢掉 Z。

设置坐标

接口 参数与返回
SetPos sceneId, selfId, x, z;无返回值。同场景内的位置转移。
SetRevPos sceneId, selfId, x, z;无返回值。设置玩家重生点(再次登入当前世界的位置)。

SetPos 只在当前场景内移动,不切换场景;SetRevPos 设置的是登录 / 复活时的重生点,不是即时位置。

切换场景

接口 参数与返回
NewWorld sceneId, selfId, targetSceneId, x, z;无返回值。切换到目标场景。
IsCanNewWorld sceneId, selfId, targetSceneId, x, z → 是否满足准入条件;部分分支无返回值。
SetCanChangeScene sceneId, selfId, canChange → 1 / -1。控制玩家是否允许切换场景。

NewWorld 无返回值,切换前应先用 IsCanNewWorld 判断准入条件。SetCanChangeScene 控制是否允许切换场景(用于锁定场景),返回 1 或 -1。

距离判断

接口 参数与返回
IsInDist sceneId, selfId, targetId, dist → 是否在 dist 内(含边界);失败 -1。
GetDist sceneId, selfId, targetId, arg4 → 两个对象的距离;失败 -1。

IsInDist 的 dist 是上限(包含边界),GetDist 返回实际距离。

ID 转换

接口 参数与返回
LuaFnObjId2Guid sceneId, selfId → 该对象 ID 对应的 GUID;失败 -1。
LuaFnGuid2ObjId sceneId, guid → 该 GUID 在当前场景的对象 ID;失败 -1。

GUID 是全局标识,对象 ID 只在当前场景有效。两者转换要求对象仍在对应场景中,详见 对象 ID 与 GUID。

默认复活点

接口 参数与返回
SetPlayerDefaultReliveInfo sceneId, selfId, pszHP, pszMP, pszSP, defaultSceneID, defaultPosX, defaultPosZ;无返回值。8 个参数。
SetPlayerDefaultReliveInfoEx sceneId, selfId, pszHP, pszMP, pszSP, defaultSceneID, defaultPosX, defaultPosZ, scriptId;无返回值。9 个参数。

这两个接口参数很多,Ex 版本多一个 scriptId。传入的 HP / MP / SP 是字符串(psz 前缀)。

检查并切换场景

local ok = IsCanNewWorld(sceneId, selfId, targetSceneId, posX, posZ)
if type(ok) == "number" and ok == 1 then
    NewWorld(sceneId, selfId, targetSceneId, posX, posZ)
end

NewWorld 无返回值,先用 IsCanNewWorld 判断准入。

读取并设置坐标

local x, z = GetWorldPos(sceneId, selfId)
if type(x) == "number" and type(z) == "number" and x ~= -1 then
    SetPos(sceneId, selfId, x, z)
end

GetWorldPos 返回两个值,先用两个变量接收再传回 SetPos。

相关主题

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

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