创建一个NPC,消耗灵符兑换称号,获得称号属性。
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-05-24 21:26:07 |
👁️ 阅读: 1
根据浮生梦老师前端课程内容,我来帮你设计一个NPC兑换称号的功能:
```lua
-- 创建NPC兑换界面
local function createNPCTitleExchange()
-- 先创建父节点
local parent = GUI:Win_Create("TitleExchange", 0, 0, 0, 0, false, false, true, false, false, false, 1)
-- 创建背景
local bg = GUI:Image_Create(parent, "bg", 0, 0, "res/public/1900000610.png")
GUI:setAnchorPoint(bg, 0.5, 0.5)
GUI:setPosition(bg, 400, 300)
-- 标题
local titleText = GUI:Text_Create(parent, "Text_title", 0, 0, 20, "#ffffff", "灵符兑换称号")
GUI:setPosition(titleText, 400, 450)
-- 称号列表数据(示例数据)
local titleList = {
{id = 1001, name = "至尊王者", cost = 100, attr = "攻击+100"},
{id = 1002, name = "不败战神", cost = 200, attr = "防御+50"},
{id = 1003, name = "天下第一", cost = 500, attr = "生命+1000"}
}
-- 创建列表容器
local listView = GUI:ListView_Create(parent, "list_titles", 200, 200, 400, 300)
-- 填充称号列表
for i, titleData in ipairs(titleList) do
-- 创建列表项
local item = GUI:Widget_Create(nil, "item_" .. i, 0, 0, 380, 80)
-- 称号名称
local nameText = GUI:Text_Create(item, "Text_name", 10, 10, 16, "#ffcc00", titleData.name)
-- 称号属性
local attrText = GUI:Text_Create(item, "Text_attr", 10, 40, 14, "#00ff00", "属性:" .. titleData.attr)
-- 消耗灵符
local costText = GUI:Text_Create(item, "Text_cost", 250, 25, 16, "#ff0000", "消耗:" .. titleData.cost .. "灵符")
-- 兑换按钮
local btnExchange = GUI:Button_Create(item, "btn_exchange", 300, 20, "res/public/1900000612.png")
GUI:Button_setTitleText(btnExchange, "兑换")
-- 按钮点击事件
GUI:addOnClickEvent(btnExchange, function()
-- 检查灵符是否足够(这里需要从服务端获取灵符数量)
local lingfuCount = SL:GetMetaValue("SERVER_VALUE", "LINGFU_COUNT") or 0
if lingfuCount >= titleData.cost then
-- 发送GM命令添加称号
SL:SendGMCmd("@gm_addtitle " .. SL:GetMetaValue("USER_NAME") .. " " .. titleData.name .. " 1")
-- 扣除灵符(这里需要服务端配合处理)
SL:Print("成功兑换称号:" .. titleData.name)
-- 刷新界面
GUI:setVisible(parent, false)
createNPCTitleExchange()
else
SL:Print("灵符不足,需要" .. titleData.cost .. "灵符")
end
end)
-- 添加到列表
GUI:ListView_pushBackCustomItem(listView, item)
end
-- 关闭按钮
local btnClose = GUI:Button_Create(parent, "btn_close", 700, 450, "res/public/1900000612.png")
GUI:Button_setTitleText(btnClose, "关闭")
GUI:addOnClickEvent(btnClose, function()
GUI:removeFromParent(parent)
end)
return parent
end
-- 在NPC对话中调用
local function onNPCTalk()
local exchangeUI = createNPCTitleExchange()
GUI:setVisible(exchangeUI, true)
end
```
**功能说明:**
1. **界面创建**:使用`res/public/1900000610.png`作为背景,`res/public/1900000612.png`作为按钮
2. **称号数据**:示例中定义了3个称号,包含ID、名称、消耗灵符和属性加成
3. **兑换逻辑**:
- 使用`SL:GetMetaValue("SERVER_VALUE", "LINGFU_COUNT")`获取玩家灵符数量
- 使用`@gm_addtitle`命令添加称号(参数:玩家名 称号名 是否激活)
- 兑换成功后会扣除相应灵符并刷新界面
4. **注意事项**:
- 灵符扣除需要在服务端实现
- 称号属性加成由服务端处理
- 实际使用中需要替换为真实的称号ID和属性配置
同学,这个功能需要服务端配合处理灵符扣除和属性加成,前端主要负责界面展示和交互逻辑。记得测试时检查灵符数量是否足够哦!
← 返回问答库