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接口/服务端/GetLevel|GetLevel]]
| [[Lua接口/服务端/GetLevel|GetLevel]]
| 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。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/SetLevel|SetLevel]]
| [[Lua接口/服务端/SetLevel|SetLevel]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, selfId, level</code> → 设置角色等级。
| <code>sceneId, selfId, level</code> → 设置角色等级。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/GetCharacterLevel|GetCharacterLevel]]
| [[Lua接口/服务端/GetCharacterLevel|GetCharacterLevel]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, characterId</code> → 指定角色单位的等级。
| <code>sceneId, characterId</code> → 指定角色单位的等级。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/GetHumanMaxLevelLimit|GetHumanMaxLevelLimit]]
| [[Lua接口/服务端/GetHumanMaxLevelLimit|GetHumanMaxLevelLimit]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">()</code> → 玩家等级表允许的脚本等级上界(无参)。
| <code>()</code> → 玩家等级表允许的脚本等级上界(无参)。
|}
|}
[[Lua接口/服务端/GetLevel|GetLevel]] 失败返回 -1,不能直接 <code style="white-space:normal;overflow-wrap:anywhere;">&gt;= 0</code> 之外的判断;[[Lua接口/服务端/GetHumanMaxLevelLimit|GetHumanMaxLevelLimit]] 不接受参数,写成 <code style="white-space:normal;overflow-wrap:anywhere;">GetHumanMaxLevelLimit(sceneId, selfId)</code> 会传入多余实参。[[Lua接口/服务端/SetLevel|SetLevel]] 改完后相关心法、属性、经验上限需要另行处理,脚本不自动同步。
[[Lua接口/服务端/GetLevel|GetLevel]] 失败返回 -1,不能直接 <code>&gt;= 0</code> 之外的判断;[[Lua接口/服务端/GetHumanMaxLevelLimit|GetHumanMaxLevelLimit]] 不接受参数,写成 <code>GetHumanMaxLevelLimit(sceneId, selfId)</code> 会传入多余实参。[[Lua接口/服务端/SetLevel|SetLevel]] 改完后相关心法、属性、经验上限需要另行处理,脚本不自动同步。


== 经验 ==
== 经验 ==
{| 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接口/服务端/GetExp|GetExp]]
| [[Lua接口/服务端/GetExp|GetExp]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, selfId</code> → 当前战斗经验值。
| <code>sceneId, selfId</code> → 当前战斗经验值。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/AddExp|AddExp]]
| [[Lua接口/服务端/AddExp|AddExp]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, selfId, exp</code>;无返回值。
| <code>sceneId, selfId, exp</code>;无返回值。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/AddExpMore|AddExpMore]]
| [[Lua接口/服务端/AddExpMore|AddExpMore]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, selfId, exp</code>;按任务经验来源追加,不接受负数。
| <code>sceneId, selfId, exp</code>;按任务经验来源追加,不接受负数。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/GetFullExp|GetFullExp]]
| [[Lua接口/服务端/GetFullExp|GetFullExp]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, selfId</code> → 当前等级允许保存的经验上限(升级经验的四倍)。
| <code>sceneId, selfId</code> → 当前等级允许保存的经验上限(升级经验的四倍)。
|}
|}
[[Lua接口/服务端/AddExp|AddExp]]、[[Lua接口/服务端/AddExpMore|AddExpMore]] **无返回值**,赋值接收得到 nil,不等于失败也不能用 <code style="white-space:normal;overflow-wrap:anywhere;">if AddExp(...) then</code> 判断成功。[[Lua接口/服务端/AddExpMore|AddExpMore]] 不接受负数,传入负数不会扣除经验。[[Lua接口/服务端/GetFullExp|GetFullExp]] 是当前等级允许保存的经验上限,超出部分的处理由服务端经验保存逻辑决定。
[[Lua接口/服务端/AddExp|AddExp]]、[[Lua接口/服务端/AddExpMore|AddExpMore]] '''无返回值''',赋值接收得到 nil,不等于失败也不能用 <code>if AddExp(...) then</code> 判断成功。[[Lua接口/服务端/AddExpMore|AddExpMore]] 不接受负数,传入负数不会扣除经验。[[Lua接口/服务端/GetFullExp|GetFullExp]] 是当前等级允许保存的经验上限,超出部分的处理由服务端经验保存逻辑决定。


== 升级与衰减 ==
== 升级与衰减 ==
{| 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接口/服务端/LuaFnCanLevelUp|LuaFnCanLevelUp]]
| [[Lua接口/服务端/LuaFnCanLevelUp|LuaFnCanLevelUp]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, selfId</code> → 是否可以升级。
| <code>sceneId, selfId</code> → 是否可以升级。
|-
|-
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/GetExpAttenuationInfo|GetExpAttenuationInfo]]
| [[Lua接口/服务端/GetExpAttenuationInfo|GetExpAttenuationInfo]]
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">sceneId, selfId, levelDelta</code> → 指定等级差对应的人物经验衰减系数。
| <code>sceneId, selfId, levelDelta</code> → 指定等级差对应的人物经验衰减系数。
|}
|}
[[Lua接口/服务端/GetExpAttenuationInfo|GetExpAttenuationInfo]] 第三参是等级差,不是目标等级;衰减系数按本服衰减表读取。
[[Lua接口/服务端/GetExpAttenuationInfo|GetExpAttenuationInfo]] 第三参是等级差,不是目标等级;衰减系数按本服衰减表读取。


== 读取等级与经验 ==
== 读取等级与经验 ==
<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 level = GetLevel(sceneId, selfId)
<pre>local level = GetLevel(sceneId, selfId)
local exp = GetExp(sceneId, selfId)
local exp = GetExp(sceneId, selfId)
if type(level) == "number" and level &gt;= 0
if type(level) == "number" and level &gt;= 0
第66行: 第66行:


== 加经验 ==
== 加经验 ==
<pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">AddExp(sceneId, selfId, 1000)
<pre>AddExp(sceneId, selfId, 1000)
-- 无返回值;不能用 if AddExp(...) then 判断
-- 无返回值;不能用 if AddExp(...) then 判断
-- 想确认应改读 GetExp 回比</pre>
-- 想确认应改读 GetExp 回比</pre>
第72行: 第72行:


== 升级判定 ==
== 升级判定 ==
<pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">if LuaFnCanLevelUp(sceneId, selfId) == 1 then
<pre>if LuaFnCanLevelUp(sceneId, selfId) == 1 then
     -- 当前可以升级
     -- 当前可以升级
end</pre>
end</pre>
[[Lua接口/服务端/LuaFnCanLevelUp|LuaFnCanLevelUp]] 返回数值;用 <code style="white-space:normal;overflow-wrap:anywhere;">== 1</code> 比较而非 <code style="white-space:normal;overflow-wrap:anywhere;">if LuaFnCanLevelUp(...) then</code>,避免把 0 当假、其他值当真的判断出错(见 [[Lua接口/返回值判断|返回值判断]])。实际升级流程仍由服务端在经验结算时触发,脚本只读取判定结果。
[[Lua接口/服务端/LuaFnCanLevelUp|LuaFnCanLevelUp]] 返回数值;用 <code>== 1</code> 比较而非 <code>if LuaFnCanLevelUp(...) then</code>,避免把 0 当假、其他值当真的判断出错(见 [[Lua接口/返回值判断|返回值判断]])。实际升级流程仍由服务端在经验结算时触发,脚本只读取判定结果。


== 相关主题 ==
== 相关主题 ==
第110行: 第110行:


[[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的最新版本

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

读写角色等级、当前经验、加经验、升级判定、经验上限与衰减系数。

等级

接口 参数与返回
GetLevel sceneId, selfId → 角色等级;失败返回 -1。
SetLevel sceneId, selfId, level → 设置角色等级。
GetCharacterLevel sceneId, characterId → 指定角色单位的等级。
GetHumanMaxLevelLimit () → 玩家等级表允许的脚本等级上界(无参)。

GetLevel 失败返回 -1,不能直接 >= 0 之外的判断;GetHumanMaxLevelLimit 不接受参数,写成 GetHumanMaxLevelLimit(sceneId, selfId) 会传入多余实参。SetLevel 改完后相关心法、属性、经验上限需要另行处理,脚本不自动同步。

经验

接口 参数与返回
GetExp sceneId, selfId → 当前战斗经验值。
AddExp sceneId, selfId, exp;无返回值。
AddExpMore sceneId, selfId, exp;按任务经验来源追加,不接受负数。
GetFullExp sceneId, selfId → 当前等级允许保存的经验上限(升级经验的四倍)。

AddExp、AddExpMore 无返回值,赋值接收得到 nil,不等于失败也不能用 if AddExp(...) then 判断成功。AddExpMore 不接受负数,传入负数不会扣除经验。GetFullExp 是当前等级允许保存的经验上限,超出部分的处理由服务端经验保存逻辑决定。

升级与衰减

接口 参数与返回
LuaFnCanLevelUp sceneId, selfId → 是否可以升级。
GetExpAttenuationInfo sceneId, selfId, levelDelta → 指定等级差对应的人物经验衰减系数。

GetExpAttenuationInfo 第三参是等级差,不是目标等级;衰减系数按本服衰减表读取。

读取等级与经验

local level = GetLevel(sceneId, selfId)
local exp = GetExp(sceneId, selfId)
if type(level) == "number" and level >= 0
    and type(exp) == "number" then
    -- 取得等级与当前经验
end

GetLevel 失败返回 -1,GetExp 返回数值。先判类型再判范围,避免把 -1 当有效等级。

加经验

AddExp(sceneId, selfId, 1000)
-- 无返回值;不能用 if AddExp(...) then 判断
-- 想确认应改读 GetExp 回比

AddExp 无返回值。AddExpMore 同样无返回值且不接受负数,需要按任务经验来源的接口使用。这两个接口都不提供成功标志,要确认生效应改用 GetExp 读回比较,而不是接收返回值。

升级判定

if LuaFnCanLevelUp(sceneId, selfId) == 1 then
    -- 当前可以升级
end

LuaFnCanLevelUp 返回数值;用 == 1 比较而非 if LuaFnCanLevelUp(...) then,避免把 0 当假、其他值当真的判断出错(见 返回值判断)。实际升级流程仍由服务端在经验结算时触发,脚本只读取判定结果。

相关主题

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

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