client.lua
RegisterNetEvent('npc:notify')
AddEventHandler('npc:notify', function(message)
TriggerEvent('chat:addMessage', {
color = {255, 0, 0},
multiline = true,
args = {'^1NPC', message}
})
end)
RegisterCommand('callnpc', function()
TriggerServerEvent('callnpc')
end)
server.lua
local spawnedPed = nil
local spawnedVehicle = nil
ESX = exports['es_extended']:getSharedObject()
RegisterServerEvent('callnpc')
AddEventHandler('callnpc', function()
if ESX then
local xPlayer = ESX.GetPlayerFromId(source)
if xPlayer then
local playerPed = GetPlayerPed(source)
local playerPos = GetEntityCoords(playerPed)
spawnedPed = CreatePed(4, GetHashKey(Config.NPCModel), playerPos.x + 2, playerPos.y, playerPos.z, 0.0, true, true)
TaskWarpPedIntoVehicle(spawnedPed, spawnedVehicle, -1)
TriggerClientEvent('npc:notify', -1, 'NPC has been called to get into your vehicle!')
end
end
end)
Citizen.CreateThread(function()
while true do
Citizen.Wait(100)
local playerPed = GetPlayerPed(-1)
local playerPos = GetEntityCoords(playerPed)
if spawnedPed ~= nil and spawnedVehicle ~= nil then
local vehiclePos = GetEntityCoords(spawnedVehicle)
local distance = #(playerPos - vehiclePos)
if distance > Config.DistanceLimit then
DeleteEntity(spawnedPed)
DeleteEntity(spawnedVehicle)
spawnedPed = nil
spawnedVehicle = nil
end
end
end
end)
AddEventHandler('onResourceStart', function(resourceName)
if GetCurrentResourceName() == resourceName then
RequestModel(Config.NPCModel)
while not HasModelLoaded(Config.NPCModel) do
Citizen.Wait(1)
end
local playerPed = GetPlayerPed(-1)
local playerPos = GetEntityCoords(playerPed)
spawnedVehicle = CreateVehicle(GetHashKey(Config.VehicleModel), playerPos.x, playerPos.y, playerPos.z, GetEntityHeading(playerPed), true, true)
end
end)
config.lua
Config = {}
Config.NPCModel = 's_m_y_cop_01'
Config.VehicleModel = 'police'
Config.DistanceLimit = 50.0
return Config