搜索
开启左侧

编程

[复制链接]
赴爱 发表于 2025-4-13 04:59:11 | 显示全部楼层 |阅读模式
帮我写一个酒店菜单插件
回复 论坛版权

使用道具 举报

ChatGPT 发表于 2025-4-13 04:59:22 | 显示全部楼层
好的,下面是一个简单的酒店菜单插件的示例代码。这个插件将包括服务器端和客户端的Lua脚本。我们会使用FiveM的ESX框架作为基础。

### server.lua
-- server.lua

ESX              = nil

TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)

-- 定义一个事件来处理酒店菜单请求
RegisterServerEvent('hotel:requestMenu')
AddEventHandler('hotel:requestMenu', function()
    local xPlayer = ESX.GetPlayerFromId(source)

    -- 这里可以定义你的酒店菜单项
    local menu = {
        {name = "单人间", price = 100},
        {name = "双人间", price = 200},
        {name = "豪华套房", price = 500}
    }

    -- 发送菜单到客户端
    TriggerClientEvent('hotel:showMenu', source, menu)
end)

### client.lua
-- client.lua

-- 显示酒店菜单
RegisterNetEvent('hotel:showMenu')
AddEventHandler('hotel:showMenu', function(menu)
    local elements = {}

    for i=1, #menu do
        table.insert(elements, {
            label = menu[i].name .. ' - $' .. menu[i].price,
            value = menu[i].name,
            price = menu[i].price
        })
    end

    -- 使用esx_menu_default或其他菜单库显示菜单
    ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'hotel_menu', {
        title    = '酒店菜单',
        align    = 'top-left',
        elements = elements
    }, function(data, menu)
        -- 处理选项选择
        local selectedRoom = data.current.value
        local roomPrice = data.current.price

        -- 确认是否可以支付房费
        local xPlayer = ESX.GetPlayerData()

        if xPlayer.getMoney() >= roomPrice then
            xPlayer.removeMoney(roomPrice)
            ESX.ShowNotification('您已成功预订 ' .. selectedRoom)
            menu.close()
        else
            ESX.ShowNotification('您没有足够的钱!')
        end

    end, function(data, menu)
        menu.close()
    end)
end)

-- 在合适的地方(例如玩家按下一个键)触发请求菜单事件
Citizen.CreateThread(function()
    while true do
        Citizen.Wait(0)
        
        if IsControlJustReleased(0, Keys['E']) then -- 按 'E' 打开菜单
            TriggerServerEvent('hotel:requestMenu')
        end
    end
end)

### 注释翻译

- server.lua中的代码定义了一个触发事件 `hotel:requestMenu` ,用于请求酒店菜单,并在菜单中添加了三种房间类型。
- client.lua中的代码在客户端显示酒店菜单,并处理用户的选择。如果用户选择了房间并且有足够的钱,则从玩家账户中扣除房费。
- 使用 `ESX.ShowNotification` 提示用户操作结果。

你可以根据需求修改菜单内容和价格。如果需要进一步的功能,如房间预订状态管理,可以再进行扩展。
回复

使用道具 举报

文明发言,和谐互动
文明发言,和谐互动
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|FiveM技术教程分享 ( 冀ICP备2021005225号-1 ) |网站地图

GMT+8, 2025-6-28 02:48 , Processed in 0.108096 second(s), 9 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 2001-2013 ELITE论坛【技术无价-分享快乐】

快速回复 返回顶部 返回列表