- UID
- 67
- 在线时间
- 小时
- 阅读权限
- 70
- 注册时间
- 2021-3-17
- 最后登录
- 1970-1-1
【高级】合伙人
|
好的,接下来我们会创建一个MySQL数据库脚本来添加外卖员的职业,便于在游戏中进行职业管理和记录。我们会使用 `es_extended` (EssentialMode) 作为基础,如果你使用的是其他框架,请根据实际情况进行调整。
### SQL 脚本
首先,我们需要添加一个新的职业到数据库中。这个SQL脚本将为外卖员职业添加数据。
-- 在 `jobs` 表中添加一个新职业
INSERT INTO `jobs` (`name`, `label`) VALUES ('delivery', '外卖员');
-- 如果有等级系统
INSERT INTO `job_grades` (`job_name`, `grade`, `name`, `label`, `salary`) VALUES ('delivery', 0, 'trainee', '实习生', 100);
INSERT INTO `job_grades` (`job_name`, `grade`, `name`, `label`, `salary`) VALUES ('delivery', 1, 'driver', '配送员', 200);
INSERT INTO `job_grades` (`job_name`, `grade`, `name`, `label`, `salary`) VALUES ('delivery', 2, 'senior_driver', '高级配送员', 300);
INSERT INTO `job_grades` (`job_name`, `grade`, `name`, `label`, `salary`) VALUES ('delivery', 3, 'manager', '经理', 400);
### server.lua
在服务器端文件中,我们应该确保玩家在接受任务时被赋予外卖员职业。
ESX = nil
TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)
local deliveries = {}
RegisterServerEvent('delivery:startDelivery')
AddEventHandler('delivery:startDelivery', function(playerId)
local xPlayer = ESX.GetPlayerFromId(playerId)
if xPlayer then
-- 设置玩家的职业为外卖员
xPlayer.setJob('delivery', 0) -- 实习生
local randomIndex = math.random(1, #Config.DeliveryLocations) -- 随机选择送餐地点
local selectedLocation = Config.DeliveryLocations[randomIndex]
deliveries[playerId] = selectedLocation -- 将选中的送餐订单保存
TriggerClientEvent('delivery:sendDeliveryDetails', playerId, selectedLocation)
end
end)
RegisterServerEvent('delivery:endDelivery')
AddEventHandler('delivery:endDelivery', function(playerId)
deliveries[playerId] = nil -- 清除送餐订单
local xPlayer = ESX.GetPlayerFromId(playerId)
if xPlayer then
-- 重置玩家的职业,可以根据实际需要进行调整
xPlayer.setJob('unemployed', 0)
end
TriggerClientEvent('delivery:notifyEnd', playerId)
end)
### client.lua
客户端代码不需要做大的改动,只需确保在玩家与外卖老板交流时,正确触发事件。
local delivering = false
local currentLocation = nil
local interactedWithBoss = false
local currentItem = nil
-- 创建外卖老板NPC
Citizen.CreateThread(function()
local pedModel = "a_m_m_business_01" -- 外卖老板模型
RequestModel(pedModel)
while not HasModelLoaded(pedModel) do
Wait(500)
end
local npc = CreatePed(0, pedModel, Config.DeliveryBossNPC.x, Config.DeliveryBossNPC.y, Config.DeliveryBossNPC.z, 0.0, true, false)
SetEntityInvincible(npc, true)
SetBlockingOfNonTemporaryEvents(npc, true)
-- 使用 ox_target 为NPC添加交互
exports.ox_target:addLocalEntity(npc, {
{
name = "TalkToDeliveryBoss",
icon = "fas fa-comment-dots",
label = "与外卖老板交谈",
onSelect = function()
-- 聊天对话
TriggerEvent('chat:addMessage', {
args = {"外卖老板", "这个工作好不好做?"}
})
interactedWithBoss = true
TriggerServerEvent('delivery:startDelivery', GetPlayerServerId(PlayerId()))
end,
},
})
end)
-- 接收送餐详情
RegisterNetEvent('delivery:sendDeliveryDetails')
AddEventHandler('delivery:sendDeliveryDetails', function(location)
currentLocation = location
currentItem = location.item -- 获取要送的物品
delivering = true
-- 告诉玩家送餐的信息
TriggerEvent('chat:addMessage', {
args = {"外卖老板", "请将 " .. currentItem .. " 送到指定地点!"}
})
SetNewWaypoint(location.x, location.y) -- 在地图上标记送餐地点
end)
-- 结束送餐
function EndDelivery()
if delivering then
delivering = false
TriggerServerEvent('delivery:endDelivery')
-- 这里可以添加逻辑来返回外卖老板的地点
end
end
-- 绑定按键
Citizen.CreateThread(function()
while true do
Citizen.Wait(0)
if IsControlJustPressed(1, 20) then -- X键
EndDelivery()
end
end
end)
### 总结
通过以上修改,已经实现了以下功能:
- 在数据库中添加了外卖员职业信息;
- 在玩家接受任务时设置其职业为外卖员;
- 在任务结束时可以选择重置或修改玩家的职业。
你可以根据具体需求进一步调整和扩展这些内容。例如,在不同的任务完成后,可以设置不同的奖励机制等。 |
|