查看“︁Lua接口/服务端调用示例”︁的源代码
来自天龙知识库
←
Lua接口/服务端调用示例
跳到导航
跳到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
__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;"> [[首页|首页]] · [[Lua接口/服务端函数索引|服务端接口]] · [[Lua接口/服务端调用约定|调用约定]] 以下代码放入已有服务端回调中。sceneId、selfId 来自回调;NPC 对话还需要有效 targetId。物品、任务和脚本编号由本服配置提供。 == 读取角色信息 == <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 name = GetName(sceneId, selfId) local level = GetLevel(sceneId, selfId) local hp = GetHp(sceneId, selfId) local x, z = GetWorldPos(sceneId, selfId)</pre> == NPC对话 == <pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">BeginEvent(sceneId) AddText(sceneId, "当前等级:" .. GetLevel(sceneId, selfId)) EndEvent(sceneId) DispatchEventList(sceneId, selfId, targetId)</pre> BeginEvent 开始并清空对话,AddText 添加内容,DispatchEventList 将内容发送给玩家。EndEvent 不会自动显示对话。 == 查询物品数量 == <pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">-- itemTypeSn 为当前业务使用的物品配置编号 local count = GetItemCount(sceneId, selfId, itemTypeSn) if count >= 5 then -- 满足数量要求后的处理 end</pre> 这里统计已装备与背包物品之和,未验证锁定状态,不能直接等同于可扣除数量。 == 选择物品接口 == {| class="wikitable" style="width:100%;table-layout:fixed;border-collapse:collapse;font-size:13px;" ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 用途 ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 接口与条件 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 统计拥有数量 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/GetItemCount|GetItemCount]]:包括已装备物品,不过滤锁。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 统计可用数量 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/LuaFnGetAvailableItemCount|LuaFnGetAvailableItemCount]]:仅背包,排除交易锁和密码锁,不限绑定。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 查找背包位置 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/GetBagPosByItemSn|GetBagPosByItemSn]]:不限制锁;[[Lua接口/服务端/GetItemBagPos|GetItemBagPos]]:可排除交易锁,但不排除密码锁。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 查找可用位置 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/GetBagPosByItemSnAvailableBind|GetBagPosByItemSnAvailableBind]]:排除两种锁;第四参 0 不限绑定,1 只找绑定。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 按编号扣数量 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/LuaFnDelAvailableItem|LuaFnDelAvailableItem]]:第三参是物品配置编号,第四参是正整数数量。失败可能已部分扣除。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 按位置删整格 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | [[Lua接口/服务端/EraseItem|EraseItem]]:第三参是背包位置,删除该格全部堆叠;调用前检查物品编号与锁。 |} == 查找并读取背包物品 == <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 bagPos = GetBagPosByItemSn(sceneId, selfId, itemTypeSn) if bagPos >= 0 then local count = LuaFnGetItemCountInBagPos(sceneId, selfId, bagPos) if count > 0 then -- count 仅为这一格的堆叠数量 end end</pre> 位置 0 是有效格子,失败为 -1,应使用 bagPos >= 0。位置会因物品移动而改变,不能跨回调长期缓存。 == 扣除可用物品 == <pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">-- itemTypeSn 是有效物品配置编号 local needCount = 5 if LuaFnGetAvailableItemCount(sceneId, selfId, itemTypeSn) >= needCount then local result = LuaFnDelAvailableItem(sceneId, selfId, itemTypeSn, needCount) if result == 1 then -- 扣除流程报告成功后的业务处理 else -- 停止处理;可能已经部分扣除,不自动重试 end end</pre> 计数不会预留物品;扣除也不会在数量不足时回滚。这个示例不构成完整兑换事务,扣除与发奖、重复领取保护及异常恢复需要在具体业务中处理并实测。 == 发放物品 == <pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">-- itemTypeSn 为已确认有效的物品配置编号 BeginAddItem(sceneId) AddItem(sceneId, itemTypeSn, 1) if EndAddItem(sceneId, selfId) == 1 then AddItemListToHuman(sceneId, selfId) end</pre> AddItem 加入待发列表,EndAddItem 只检查能否接收,AddItemListToHuman 执行发放。最后一步无返回值,本示例不提供事务或重复领取保护。 == 函数名称 == <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 level1 = GetLevel(sceneId, selfId) local level2 = LuaFnGetLevel(sceneId, selfId)</pre> 这两个名称都在注册表中,指向同一接口。其他函数不能据此自行增删 LuaFn 前缀。 以上示例已对照当前接口实现,尚未在游戏内执行。 </div>
返回
Lua接口/服务端调用示例
。
导航菜单
页面操作
页面
讨论
阅读
查看源代码
历史
页面操作
页面
讨论
更多
工具
个人工具
创建账号
登录
导航
首页
最近更改
随机页面
MediaWiki帮助
特殊页面
搜索
工具
链入页面
相关更改
页面信息