15604402 发表于 2025-2-27 01:43:06

写一份QB框架的CDK兑换插件

写一份使用按键打开生成和兑换界面的CDK兑换系统,可以接入核心文件里的物品列表进行兑换

ChatGPT 发表于 2025-2-27 01:43:18

当然可以!下面是一个简单的QB框架下的CDK兑换插件示例。这个插件允许玩家通过按键打开兑换界面,并与核心文件中的物品列表进行兑换。

### 文件结构
- `fxmanifest.lua`
- `client.lua`
- `server.lua`
- `config.lua`

### fxmanifest.lua

fx_version 'cerulean'
game 'gta5'

author '你的名字'
description 'CDK 兑换插件'
version '1.0.0'

client_scripts {
    'client.lua',
}

server_scripts {
    'server.lua',
}

shared_script 'config.lua'


### config.lua

-- 配置文件,用于存放CDK和对应的物品ID

Config = {}

-- CDK 兑换表
Config.CDKList = {
    ["CDK123"] = "item_id_1",-- 替换为你的物品ID
    ["CDK456"] = "item_id_2",-- 替换为你的物品ID
}


### client.lua

local isMenuOpen = false

-- 显示兑换界面
function ShowCDKMenu()
    isMenuOpen = not isMenuOpen
    SetNuiFocus(isMenuOpen, isMenuOpen)
    SendNUIMessage({
      type = "toggleCDKMenu",
      display = isMenuOpen
    })
end

-- 按键绑定
RegisterCommand("opencdk", function()
    ShowCDKMenu()
end)

-- 监听 NUI 回调
RegisterNUICallback('redeemCDK', function(data, cb)
    TriggerServerEvent('cdk:redeem', data.cdk)
    cb('ok')
end)

-- 输入框关闭时设置焦点
RegisterNUICallback('close', function(data, cb)
    isMenuOpen = false
    SetNuiFocus(false, false)
    cb('ok')
end)


### server.lua

RegisterNetEvent('cdk:redeem')
AddEventHandler('cdk:redeem', function(cdk)
    local src = source
    local itemID = Config.CDKList

    if itemID then
      -- 此处使用你核心文件中的物品添加方法
      TriggerEvent('qb-inventory:addItem', src, itemID, 1)
      TriggerClientEvent('QBCore:Notify', src, "兑换成功,获得了物品: " .. itemID, "success")
    else
      TriggerClientEvent('QBCore:Notify', src, "无效的CDK", "error")
    end
end)


### NUI 部分
为了让上述代码正常工作,你需要在资源中添加HTML/CSS/JS文件,以支持NUI(用户界面)。可以创建一个 `html` 文件夹,并在其中放入用于显示CDK兑换界面的HTML文件。

#### 示例 HTML:`html/index.html`

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>CDK 兑换</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <style>
      /* 添加样式 */
    </style>
</head>
<body>
    <div id="cdkMenu" style="display:none;">
      <input type="text" id="cdkInput" placeholder="请输入CDK" />
      <button onclick="redeemCDK()">兑换</button>
      <button onclick="closeMenu()">关闭</button>
    </div>

    <script>
      window.addEventListener('message', function(event) {
            if (event.data.type === 'toggleCDKMenu') {
                $("#cdkMenu").toggle(event.data.display);
            }
      });

      function redeemCDK() {
            let cdk = $('#cdkInput').val();
            $.post('http://your_resource_name/redeemCDK', JSON.stringify({ cdk: cdk }));
      }

      function closeMenu() {
            $.post('http://your_resource_name/close', JSON.stringify({}));
      }
    </script>
</body>
</html>


### 使用方法
1. 将上述脚本文件放到您的FiveM资源文件夹中。
2. 启动服务器并确保该资源被加载。
3. 玩家可以使用 `/opencdk` 命令打开CDK兑换界面,输入CDK后点击兑换。

以上就是一个简单的CDK兑换插件示例,您可以根据需要修改和扩展功能。如果有任何问题,请随时询问!
页: [1]
查看完整版本: 写一份QB框架的CDK兑换插件