赴爱 发表于 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.name .. ' - $' .. menu.price,
            value = menu.name,
            price = menu.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` 提示用户操作结果。

你可以根据需求修改菜单内容和价格。如果需要进一步的功能,如房间预订状态管理,可以再进行扩展。
页: [1]
查看完整版本: 编程