Lua接口/参数类型与顺序:修订间差异
来自天龙知识库
跳到导航跳到搜索
维护服务端 Lua 接口:核对参数、返回值、边界条件与调用示例 |
维护服务端 Lua 接口:核对参数、返回值、边界条件与调用示例 |
||
| 第1行: | 第1行: | ||
__NOTOC__ | __NOTOC__ | ||
<div class="lua-reference | <div class="lua-reference"> | ||
[[首页|首页]] · [[Lua接口/服务端函数索引|服务端接口]] · [[Lua接口/服务端调用约定|调用约定]] | [[首页|首页]] · [[Lua接口/服务端函数索引|服务端接口]] · [[Lua接口/服务端调用约定|调用约定]] | ||
| 第6行: | 第6行: | ||
== 常见参数顺序 == | == 常见参数顺序 == | ||
{| class="wikitable | {| class="wikitable" | ||
! scope="col | ! scope="col" | 接口 | ||
! scope="col | ! scope="col" | 按顺序传入 | ||
|- | |- | ||
| [[Lua接口/服务端/GetLevel|GetLevel]] | |||
| <code>sceneId, selfId</code>:当前场景编号、该场景内玩家对象 ID。 | |||
|- | |- | ||
| [[Lua接口/服务端/AddText|AddText]] | |||
| <code>sceneId, text</code>:第二个参数直接是文字,没有 selfId。 | |||
|- | |- | ||
| [[Lua接口/服务端/AddItem|AddItem]] | |||
| <code>sceneId, itemTypeSn, count</code>:物品配置编号、数量;没有 selfId,且只加入待发列表。 | |||
|- | |- | ||
| [[Lua接口/服务端/DelItem|DelItem]] | |||
| <code>sceneId, selfId, itemIndex, delCount</code>:此处 itemIndex 是物品配置编号。 | |||
|- | |- | ||
| [[Lua接口/服务端/EraseItem|EraseItem]] | |||
| <code>sceneId, selfId, bagIndex</code>:此处 bagIndex 是背包格子位置,删除整格。 | |||
|- | |- | ||
| [[Lua接口/服务端/LuaFnGuid2ObjId|LuaFnGuid2ObjId]] | |||
| <code>sceneId, guid</code>:第二项是角色 GUID。 | |||
|- | |- | ||
| [[Lua接口/服务端/LuaFnIsPetAvailableByGUID|LuaFnIsPetAvailableByGUID]] | |||
| <code>sceneId, selfId, guidPetHigh, guidPetLow</code>:先玩家对象 ID,再珍兽 GUID 高段、低段。 | |||
|} | |} | ||
不要一律给调用补上 sceneId、selfId,也不要凭参数名中的 Index 判断它一定是格子索引。 | 不要一律给调用补上 sceneId、selfId,也不要凭参数名中的 Index 判断它一定是格子索引。 | ||
== 数值、字符串和开关 == | == 数值、字符串和开关 == | ||
* number 参数应传数值。<code | * number 参数应传数值。<code>123</code> 和 <code>"123"</code> 是不同类型,不依赖隐式转换;sceneId、对象 ID、数量等还必须符合该接口要求的整数及范围。 | ||
* 按数值读取的开关传 0 或 1,不传 Lua 的 false 或 true。例如 [[Lua接口/服务端/GetItemBagPos|GetItemBagPos]] 的第四参 1 只过滤交易锁;[[Lua接口/服务端/GetBagPosByItemSnAvailableBind|GetBagPosByItemSnAvailableBind]] 的第四参 1 则表示仅找绑定物品,两个 1 的业务含义不同。 | * 按数值读取的开关传 0 或 1,不传 Lua 的 false 或 true。例如 [[Lua接口/服务端/GetItemBagPos|GetItemBagPos]] 的第四参 1 只过滤交易锁;[[Lua接口/服务端/GetBagPosByItemSnAvailableBind|GetBagPosByItemSnAvailableBind]] 的第四参 1 则表示仅找绑定物品,两个 1 的业务含义不同。 | ||
* string 参数传字符串。文字要包含在引号中,变量需要先赋值;编码要求与本服脚本和客户端约定一致。 | * string 参数传字符串。文字要包含在引号中,变量需要先赋值;编码要求与本服脚本和客户端约定一致。 | ||
| 第41行: | 第41行: | ||
== 对话参数示例 == | == 对话参数示例 == | ||
<pre | <pre>if type(sceneId) ~= "number" or type(selfId) ~= "number" | ||
or type(targetId) ~= "number" then | or type(targetId) ~= "number" then | ||
return | return | ||
| 第58行: | 第58行: | ||
== 调用方式与错误定位 == | == 调用方式与错误定位 == | ||
这些注册函数按普通函数调用,不是对象方法。冒号调用会隐式增加一个 self 参数,导致其余位置整体错位。日志中的 <code | 这些注册函数按普通函数调用,不是对象方法。冒号调用会隐式增加一个 self 参数,导致其余位置整体错位。日志中的 <code>Param 3 is illegal!</code> 指 Lua 调用的第三个位置,不是某个固定业务字段。 | ||
当前参数检查会记录不合法位置,但部分入口没有根据检查结果立即停止;出现参数错误日志时应先修正调用,不要把后续的 0、-1 或其他值当成可靠业务结果。 | 当前参数检查会记录不合法位置,但部分入口没有根据检查结果立即停止;出现参数错误日志时应先修正调用,不要把后续的 0、-1 或其他值当成可靠业务结果。 | ||
| 第70行: | 第70行: | ||
[[Lua接口/服务端调用约定|服务端调用约定]] · [[Lua接口/服务端调用示例|服务端调用示例]] | [[Lua接口/服务端调用约定|服务端调用约定]] · [[Lua接口/服务端调用示例|服务端调用示例]] | ||
<div | <div class="lua-note">示例依据当前服务端注册名称和参数读取顺序核对;sceneId、selfId 等上下文及业务编号由实际回调提供。Lua 语法检查不能代替游戏内实测。</div> | ||
</div> | </div> | ||
2026年9月19日 (六) 16:59的最新版本
参数按位置传入。变量名相同、都是 number,并不表示含义相同;以具体函数页列出的顺序、类型和编号用途为准。
常见参数顺序
| 接口 | 按顺序传入 |
|---|---|
| GetLevel | sceneId, selfId:当前场景编号、该场景内玩家对象 ID。
|
| AddText | sceneId, text:第二个参数直接是文字,没有 selfId。
|
| AddItem | sceneId, itemTypeSn, count:物品配置编号、数量;没有 selfId,且只加入待发列表。
|
| DelItem | sceneId, selfId, itemIndex, delCount:此处 itemIndex 是物品配置编号。
|
| EraseItem | sceneId, selfId, bagIndex:此处 bagIndex 是背包格子位置,删除整格。
|
| LuaFnGuid2ObjId | sceneId, guid:第二项是角色 GUID。
|
| LuaFnIsPetAvailableByGUID | sceneId, selfId, guidPetHigh, guidPetLow:先玩家对象 ID,再珍兽 GUID 高段、低段。
|
不要一律给调用补上 sceneId、selfId,也不要凭参数名中的 Index 判断它一定是格子索引。
数值、字符串和开关
- number 参数应传数值。
123和"123"是不同类型,不依赖隐式转换;sceneId、对象 ID、数量等还必须符合该接口要求的整数及范围。 - 按数值读取的开关传 0 或 1,不传 Lua 的 false 或 true。例如 GetItemBagPos 的第四参 1 只过滤交易锁;GetBagPosByItemSnAvailableBind 的第四参 1 则表示仅找绑定物品,两个 1 的业务含义不同。
- string 参数传字符串。文字要包含在引号中,变量需要先赋值;编码要求与本服脚本和客户端约定一致。
- nil 表示没有值,不能代替一个必填编号。传空字符串也不等于省略参数。
- table、function、userdata 不能直接当物品列表或玩家对象传给这里按 number、string 读取的入口。
对话参数示例
if type(sceneId) ~= "number" or type(selfId) ~= "number"
or type(targetId) ~= "number" then
return
end
local message = "任务说明"
BeginEvent(sceneId)
AddText(sceneId, message)
EndEvent()
DispatchEventList(sceneId, selfId, targetId)
sceneId、selfId、targetId 来自服务端对话回调;targetId 是对话 NPC 的场景对象 ID。type 检查只确认类型,不能证明编号存在或对象类型正确。
可选参数不等于任意省略
AddNumText 的第四、第五、第六项可省略,默认分别为 -1、-1、无效 ID;前三项仍需按函数页传入。可选位置、默认值及省略方式都应逐项核对,不要自行在中间补上一个玩家 ID。
EndEvent 当前不读取参数,既有脚本传入 sceneId 也会忽略;不能据此认为其他函数也允许省略或多传参数。CallScriptFunction 把第四项及后续参数转交目标入口,sceneId 同时成为目标入口的第一个实参。
调用方式与错误定位
这些注册函数按普通函数调用,不是对象方法。冒号调用会隐式增加一个 self 参数,导致其余位置整体错位。日志中的 Param 3 is illegal! 指 Lua 调用的第三个位置,不是某个固定业务字段。
当前参数检查会记录不合法位置,但部分入口没有根据检查结果立即停止;出现参数错误日志时应先修正调用,不要把后续的 0、-1 或其他值当成可靠业务结果。
相关问题
示例依据当前服务端注册名称和参数读取顺序核对;sceneId、selfId 等上下文及业务编号由实际回调提供。Lua 语法检查不能代替游戏内实测。