下面是一个简单的送外卖插件示例,满足你提出的需求。这个插件使用了 `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[currentVehicle] = true
Notify("你获得了" .. currentVehicle .. "的钥匙")
-- 开始任务
Notify("接到任务: " .. Config.TaskDetails[1])
end
end
end
-- 完成任务
function completeDelivery()
-- 删除车辆和钥匙
if currentVehicle and keys[currentVehicle] then
DeleteVehicle(currentVehicle)
keys[currentVehicle] = nil
Notify("任务完成,你获得了" .. reward .. "金币")
TriggerServerEvent('delivery:complete')
end
isOnDuty = false
currentVehicle = nil
end
-- 通知函数
function Notify(msg)
QBCore.Functions.Notify(msg)
end
-- 在这里添加另一种方法来结束任务,比如通过坐标或时间,因此可以调用 completeDelivery 函数
### 总结
以上代码示例实现了基本的送外卖插件,包含了NPC生成、任务接取、车辆选择和奖励发放等功能。在实际使用时,你可能需要根据游戏的其他系统进行调整,例如如何处理玩家的金钱、如何管理车辆等。希望这可以帮助到你! |