lizhuoda 发表于 2024-8-12 21:49:38

插件

写个送外卖插件
要求
使用ox_lib和ox_target
生成npc位置以及在地图上的图标,可以在config中修改
扩展与老板的交流,可以在config中修改
聊完天之后接取各种任物,可以在config中修改
接取任务之后可以在菜单里选择车辆,选择完车辆之后会获得钥匙,可以在config中修改
任务结束之后会删除车辆和钥匙,并获得500~1000的奖励,可以在config中修改
增加renzu garage的钥匙插件的适配,玩家在接受任务之后可以获得钥匙,在任务结束之后,钥匙将消失
钥匙没有有效时间
显示当前送餐详情

ChatGPT 发表于 2024-8-12 21:55:11

下面是一个简单的送外卖插件示例,满足你提出的需求。这个插件使用了 `ox_lib` 和 `ox_target`,并包含了配置功能,以便于你修改各项参数。这个脚本分为 `server.lua` 和 `client.lua`。

### config.lua
首先,我们定义一个配置文件 `config.lua`:

Config = {}

Config.NPCs = {
    { x = 100.0, y = 100.0, z = 28.0 }, -- NPC的位置
}

Config.Rewards = {
    min = 500,-- 最小奖励
    max = 1000, -- 最大奖励
}

Config.VehicleOptions = {
    "bicyclo",   -- 可选择的车辆列表
    "speedo",
}

Config.TaskDetails = {
    "送餐到客户家中",
}

Config.ChatWithBoss = {
    "老板,我来接任务了。",
}

### server.lua
接下来是 `server.lua` 文件:

RegisterServerEvent('delivery:complete')
AddEventHandler('delivery:complete', function()
    local _source = source
    local reward = math.random(Config.Rewards.min, Config.Rewards.max)
    -- 给玩家奖励
    TriggerEvent('esx_addonaccount:addAccountMoney', _source, 'money', reward)
end)

### client.lua
最后是 `client.lua` 文件:

local isOnDuty = false
local currentVehicle = nil
local keys = {}

-- 创建并显示NPC
Citizen.CreateThread(function()
    for _, pos in ipairs(Config.NPCs) do
      local npc = CreatePed(4, "a_m_y_business_01", pos.x, pos.y, pos.z, 0.0, false, true)
      SetEntityAsMissionEntity(npc, true, true)
      
      -- 使用 ox_target 注册 NPC 交互
      exports.ox_target:addLocalEntity(npc, {
            {
                name = 'talk_to_boss',
                label = '与老板聊天',
                icon = 'fa-solid fa-user-tie',
                onSelect = function()
                  TriggerEvent('delivery:startTask')
                end,
            },
      })
    end
end)

-- 启动送餐任务
function startDeliveryTask()
    if not isOnDuty then
      isOnDuty = true
      currentVehicle = nil
      
      -- 弹出菜单选择车辆
      local vehicle = exports.ox_lib:Menu("选择车辆", Config.VehicleOptions)
      
      if vehicle then
            currentVehicle = vehicle
            -- 给予钥匙
            keys = true
            Notify("你获得了" .. currentVehicle .. "的钥匙")
            -- 开始任务
            Notify("接到任务: " .. Config.TaskDetails)
      end
    end
end

-- 完成任务
function completeDelivery()
    -- 删除车辆和钥匙
    if currentVehicle and keys then
      DeleteVehicle(currentVehicle)
      keys = nil
      Notify("任务完成,你获得了" .. reward .. "金币")
      TriggerServerEvent('delivery:complete')
    end
    isOnDuty = false
    currentVehicle = nil
end

-- 通知函数
function Notify(msg)
    QBCore.Functions.Notify(msg)
end

-- 在这里添加另一种方法来结束任务,比如通过坐标或时间,因此可以调用 completeDelivery 函数

### 总结
以上代码示例实现了基本的送外卖插件,包含了NPC生成、任务接取、车辆选择和奖励发放等功能。在实际使用时,你可能需要根据游戏的其他系统进行调整,例如如何处理玩家的金钱、如何管理车辆等。希望这可以帮助到你!

lizhuoda 发表于 2024-8-12 21:57:56

ChatGPT 发表于 2024-8-12 21:55
下面是一个简单的送外卖插件示例,满足你提出的需求。这个插件使用了 `ox_lib` 和 `ox_target`,并包含了配 ...

增加renzu garage的钥匙插件的适配,玩家在接受任务之后可以获得钥匙,在任务结束之后,钥匙将消失

ChatGPT 发表于 2024-8-13 10:11:13

lizhuoda 发表于 2024-08-12 21:57
增加renzu garage的钥匙插件的适配,玩家在接受任务之 ...

下面是对原有代码的扩展,以支持 Renzu Garage 的钥匙插件适配。我们将增加钥匙获取和删除的逻辑。在接受任务之后,玩家将获得车辆钥匙;任务完成后,将删除钥匙。

### 更新后的 config.lua
不需要额外修改 `config.lua`,保持不变。

### 更新后的 server.lua
对 `server.lua` 添加钥匙管理功能:

RegisterServerEvent('delivery:complete')
AddEventHandler('delivery:complete', function()
    local _source = source
    local reward = math.random(Config.Rewards.min, Config.Rewards.max)

    -- 给玩家奖励
    TriggerEvent('esx_addonaccount:addAccountMoney', _source, 'money', reward)

    -- 删除钥匙
    TriggerEvent('renzu_garage:deleteKey', _source, currentVehicle) -- 确保替换为正确的函数名
end)

RegisterServerEvent('delivery:giveKey')
AddEventHandler('delivery:giveKey', function(vehicle)
    local _source = source

    -- 发放钥匙
    TriggerEvent('renzu_garage:addKey', _source, vehicle) -- 确保替换为正确的函数名
end)

### 更新后的 client.lua
在 `client.lua` 中修改任务处理逻辑,以便在接受任务时发放钥匙:

local isOnDuty = false
local currentVehicle = nil
local keys = false

-- 创建并显示NPC
Citizen.CreateThread(function()
    for _, pos in ipairs(Config.NPCs) do
      local npc = CreatePed(4, "a_m_y_business_01", pos.x, pos.y, pos.z, 0.0, false, true)
      SetEntityAsMissionEntity(npc, true, true)

      -- 使用 ox_target 注册 NPC 交互
      exports.ox_target:addLocalEntity(npc, {
            {
                name = 'talk_to_boss',
                label = '与老板聊天',
                icon = 'fa-solid fa-user-tie',
                onSelect = function()
                  startDeliveryTask()
                end,
            },
      })
    end
end)

-- 启动送餐任务
function startDeliveryTask()
    if not isOnDuty then
      isOnDuty = true
      currentVehicle = nil

      -- 弹出菜单选择车辆
      local vehicle = exports.ox_lib:Menu("选择车辆", Config.VehicleOptions)

      if vehicle then
            currentVehicle = vehicle
            
            -- 给予钥匙
            TriggerServerEvent('delivery:giveKey', currentVehicle)-- 请求服务器给予钥匙
            keys = true
            Notify("你获得了" .. currentVehicle .. "的钥匙")
            -- 开始任务
            Notify("接到任务: " .. Config.TaskDetails)
      end
    end
end

-- 完成任务
function completeDelivery()
    -- 删除车辆和钥匙
    if currentVehicle and keys then
      DeleteVehicle(currentVehicle)
      keys = false
      Notify("任务完成,你获得了" .. reward .. "金币")
      TriggerServerEvent('delivery:complete')
    end
    isOnDuty = false
    currentVehicle = nil
end

-- 通知函数
function Notify(msg)
    QBCore.Functions.Notify(msg)
end

-- 在这里添加另一种方法来结束任务,比如通过坐标或时间,因此可以调用 completeDelivery 函数

### 注意事项
- 你需要确保 `renzu_garage:addKey` 和 `renzu_garage:deleteKey` 是 Renzu Garage 插件中正确的函数。你可能需要参考 Renzu Garage 的文档或源代码以确认函数名字。
- 这里假设使用的是 `esx_addonaccount` 模块,如果你的项目使用不同的管理模块,请替换相关内容。
- 请根据实际需求调整 NPC 的位置、车辆选项及奖励范围等配置。

这样,你的送外卖插件就可以与 Renzu Garage 进行兼容并管理钥匙了!希望这对你有帮助!
页: [1]
查看完整版本: 插件