Lua接口/返回值判断:修订间差异
来自天龙知识库
跳到导航跳到搜索
维护服务端 Lua 接口:核对参数、返回值、边界条件与调用示例 |
维护服务端 Lua 接口:核对参数、返回值、边界条件与调用示例 |
||
| 第1行: | 第1行: | ||
__NOTOC__ | __NOTOC__ | ||
<div class="lua-reference | <div class="lua-reference"> | ||
[[首页|首页]] · [[Lua接口/服务端函数索引|服务端接口]] · [[Lua接口/服务端调用约定|调用约定]] | [[首页|首页]] · [[Lua接口/服务端函数索引|服务端接口]] · [[Lua接口/服务端调用约定|调用约定]] | ||
| 第6行: | 第6行: | ||
== Lua 条件判断 == | == Lua 条件判断 == | ||
{| class="wikitable | {| class="wikitable" | ||
! scope="col | ! scope="col" | 值 | ||
! scope="col | ! scope="col" | 在 if 中 | ||
! scope="col | ! scope="col" | 注意事项 | ||
|- | |- | ||
| <code>nil</code> | |||
| 假 | |||
| 可能是无返回值、未赋值,或多返回值中的缺失项。 | |||
|- | |- | ||
| <code>false</code> | |||
| 假 | |||
| Lua 布尔值;不等同于数值 0。 | |||
|- | |- | ||
| <code>0</code> | |||
| 真 | |||
| 可以表示计数为零、有效位置或业务失败,需看接口。 | |||
|- | |- | ||
| <code>-1</code> 等负数 | |||
| 真 | |||
| 可能是错误码或有效业务数值,不能只按正负判断。 | |||
|- | |- | ||
| <code>""</code> | |||
| 真 | |||
| 空字符串也会进入 if result then 分支。 | |||
|} | |} | ||
只有 nil 和 false 为假。<code | 只有 nil 和 false 为假。<code>if result then</code> 不能用来判断返回数字的接口是否成功;<code>result == true</code> 也不会把数字 1 当作 true。 | ||
== 按接口区分 == | == 按接口区分 == | ||
{| class="wikitable | {| class="wikitable" | ||
! scope="col | ! scope="col" | 接口 | ||
! scope="col | ! scope="col" | 应如何理解 | ||
|- | |- | ||
| [[Lua接口/服务端/EndAddItem|EndAddItem]] | |||
| 1 表示当前可接收列表,0 表示不能接收,-1 表示疲劳限制或对象无效等失败。检查通过后仍需发放。 | |||
|- | |- | ||
| [[Lua接口/服务端/GetItemCount|GetItemCount]] | |||
| 0 表示计数为零,不是函数不存在;-1 是对象无效等失败路径。计数范围包括已装备物品。 | |||
|- | |- | ||
| [[Lua接口/服务端/GetBagPosByItemSn|GetBagPosByItemSn]] | |||
| 0 是有效背包位置,-1 表示未找到或失败,判断位置用 >= 0。 | |||
|- | |- | ||
| [[Lua接口/服务端/GetName|GetName]] | |||
| 返回字符串,失败可返回空字符串。先确认类型,再检查是否为空。 | |||
|- | |- | ||
| [[Lua接口/服务端/LuaFnIsItemLocked|LuaFnIsItemLocked]] | |||
| 1 是交易锁,0 是未发现交易锁,-2 是位置越界,-1 是玩家无效等失败。 | |||
|- | |- | ||
| [[Lua接口/服务端/LuaFnDelAvailableItem|LuaFnDelAvailableItem]] | |||
| 正数量扣除流程报告成功为 1,失败为 0;非正数量直接返回 1 但不扣除,失败也可能已部分扣除。 | |||
|- | |- | ||
| [[Lua接口/服务端/AddText|AddText]]、[[Lua接口/服务端/EndEvent|EndEvent]] | |||
| 无返回值;赋值接收得到 nil,不表示函数不存在。 | |||
|} | |} | ||
== 计数与字符串示例 == | == 计数与字符串示例 == | ||
<pre | <pre>local count = GetItemCount(sceneId, selfId, itemTypeSn) | ||
if type(count) == "number" and count >= 0 then | if type(count) == "number" and count >= 0 then | ||
-- count 为有效计数;0 表示没有计入的物品 | -- count 为有效计数;0 表示没有计入的物品 | ||
| 第75行: | 第75行: | ||
== 多个返回值按位置接收 == | == 多个返回值按位置接收 == | ||
<pre | <pre>local x, z = GetWorldPos(sceneId, selfId) | ||
if type(x) == "number" and type(z) == "number" | if type(x) == "number" and type(z) == "number" | ||
and x ~= -1 and z ~= -1 then | and x ~= -1 and z ~= -1 then | ||
| 第102行: | 第102行: | ||
[[Lua接口/服务端调用约定|服务端调用约定]] · [[Lua接口/服务端调用示例|服务端调用示例]] | [[Lua接口/服务端调用约定|服务端调用约定]] · [[Lua接口/服务端调用示例|服务端调用示例]] | ||
<div | <div class="lua-note">示例依据当前服务端注册名称和参数读取顺序核对;sceneId、selfId 等上下文及业务编号由实际回调提供。Lua 语法检查不能代替游戏内实测。</div> | ||
</div> | </div> | ||
2026年9月19日 (六) 16:59的最新版本
先查函数的返回约定,再判断值。0、负数、空字符串、nil 不能用同一条成功规则处理。
Lua 条件判断
| 值 | 在 if 中 | 注意事项 |
|---|---|---|
nil
|
假 | 可能是无返回值、未赋值,或多返回值中的缺失项。 |
false
|
假 | Lua 布尔值;不等同于数值 0。 |
0
|
真 | 可以表示计数为零、有效位置或业务失败,需看接口。 |
-1 等负数
|
真 | 可能是错误码或有效业务数值,不能只按正负判断。 |
""
|
真 | 空字符串也会进入 if result then 分支。 |
只有 nil 和 false 为假。if result then 不能用来判断返回数字的接口是否成功;result == true 也不会把数字 1 当作 true。
按接口区分
| 接口 | 应如何理解 |
|---|---|
| EndAddItem | 1 表示当前可接收列表,0 表示不能接收,-1 表示疲劳限制或对象无效等失败。检查通过后仍需发放。 |
| GetItemCount | 0 表示计数为零,不是函数不存在;-1 是对象无效等失败路径。计数范围包括已装备物品。 |
| GetBagPosByItemSn | 0 是有效背包位置,-1 表示未找到或失败,判断位置用 >= 0。 |
| GetName | 返回字符串,失败可返回空字符串。先确认类型,再检查是否为空。 |
| LuaFnIsItemLocked | 1 是交易锁,0 是未发现交易锁,-2 是位置越界,-1 是玩家无效等失败。 |
| LuaFnDelAvailableItem | 正数量扣除流程报告成功为 1,失败为 0;非正数量直接返回 1 但不扣除,失败也可能已部分扣除。 |
| AddText、EndEvent | 无返回值;赋值接收得到 nil,不表示函数不存在。 |
计数与字符串示例
local count = GetItemCount(sceneId, selfId, itemTypeSn)
if type(count) == "number" and count >= 0 then
-- count 为有效计数;0 表示没有计入的物品
else
-- 本次查询未取得有效计数
end
local name = GetName(sceneId, selfId)
if type(name) == "string" and name ~= "" then
-- name 为非空名称
end
itemTypeSn 必须来自已确认有效的物品配置。不能只写 name ~= "":nil 也不等于空字符串,类型检查可以避免误判。
多个返回值按位置接收
local x, z = GetWorldPos(sceneId, selfId)
if type(x) == "number" and type(z) == "number"
and x ~= -1 and z ~= -1 then
-- x、z 是场景平面坐标
end
local petGuidHigh, petGuidLow = LuaFnGetCurrentPetGUID(sceneId, selfId)
if type(petGuidHigh) == "number" and type(petGuidLow) == "number" then
-- 取得当前召唤珍兽的 GUID 高段、低段
else
-- 无召唤珍兽或未取得结果
end
GetWorldPos 失败返回 -1、-1;LuaFnGetCurrentPetGUID 在没有召唤珍兽等路径不返回值,此时两个变量都是 nil。少接收变量会丢掉后面的结果;给函数调用外面加一对括号,也可能把多返回值收缩成第一项。
返回成功不等于整段业务完成
EndAddItem 只检查能否接收,AddItemListToHuman 才执行发放且无返回值。扣除、发放、保存领取记录是不同步骤,不能只看其中一次返回 1 就推断整段业务成功。
未注明的枚举、异常后的背包变化和完整业务结果需要实测。失败后自动重试可能造成重复扣除,先核对具体接口的副作用,见 扣除可用物品示例。
相关问题
示例依据当前服务端注册名称和参数读取顺序核对;sceneId、selfId 等上下文及业务编号由实际回调提供。Lua 语法检查不能代替游戏内实测。