Auto-sync 2026-04-15 22:00
This commit is contained in:
parent
b4962e66dc
commit
d92af58338
@ -619,3 +619,77 @@ AddEventHandler('onResourceStop', function(resourceName)
|
|||||||
HideDeathscreen()
|
HideDeathscreen()
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
-- ============================================================
|
||||||
|
-- MEDICAL NPC SYSTEM (AUTO-MEDIC)
|
||||||
|
-- ============================================================
|
||||||
|
|
||||||
|
local MedicNPC = {
|
||||||
|
model = `s_m_m_doctor_01`, -- Der Skin des Arztes
|
||||||
|
coords = vector4(-327.2433, -588.2013, 31.7755, 211.5617), -- Z leicht gesenkt für Bodenhaftung
|
||||||
|
}
|
||||||
|
|
||||||
|
CreateThread(function()
|
||||||
|
-- NPC Erstellen
|
||||||
|
RequestModel(MedicNPC.model)
|
||||||
|
while not HasModelLoaded(MedicNPC.model) do Wait(10) end
|
||||||
|
|
||||||
|
local npcEntity = CreatePed(4, MedicNPC.model, MedicNPC.coords.x, MedicNPC.coords.y, MedicNPC.coords.z, MedicNPC.coords.w, false, true)
|
||||||
|
SetEntityHeading(npcEntity, MedicNPC.coords.w)
|
||||||
|
FreezeEntityPosition(npcEntity, true)
|
||||||
|
SetEntityInvincible(npcEntity, true)
|
||||||
|
SetBlockingOfNonTemporaryEvents(npcEntity, true)
|
||||||
|
|
||||||
|
-- ox_target Optionen für den NPC
|
||||||
|
exports.ox_target:addLocalEntity(npcEntity, {
|
||||||
|
{
|
||||||
|
name = 'medic_npc_heal',
|
||||||
|
icon = 'fas fa-kit-medical',
|
||||||
|
label = 'Sich selbst heilen (Kostenlos)',
|
||||||
|
canInteract = function()
|
||||||
|
return deathState == 'ALIVE' and GetEntityHealth(PlayerPedId()) < 200
|
||||||
|
end,
|
||||||
|
onSelect = function()
|
||||||
|
TriggerServerEvent('mercyv-deathscreen:server:npcHealSelf')
|
||||||
|
end
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name = 'medic_npc_revive',
|
||||||
|
icon = 'fas fa-heart-pulse',
|
||||||
|
label = 'Person in der Nähe wiederbeleben',
|
||||||
|
canInteract = function()
|
||||||
|
-- Prüfen ob jemand am Boden liegt in der Nähe des Spielers
|
||||||
|
local coords = GetEntityCoords(PlayerPedId())
|
||||||
|
local players = ESX.Game.GetPlayersInArea(coords, 5.0)
|
||||||
|
|
||||||
|
for _, player in ipairs(players) do
|
||||||
|
local serverId = GetPlayerServerId(player)
|
||||||
|
if DownedPlayers[serverId] and player ~= PlayerId() then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end,
|
||||||
|
onSelect = function()
|
||||||
|
local coords = GetEntityCoords(PlayerPedId())
|
||||||
|
local players = ESX.Game.GetPlayersInArea(coords, 5.0)
|
||||||
|
local closestPlayer = nil
|
||||||
|
local shortestDist = 5.0
|
||||||
|
|
||||||
|
for _, player in ipairs(players) do
|
||||||
|
local serverId = GetPlayerServerId(player)
|
||||||
|
if DownedPlayers[serverId] and player ~= PlayerId() then
|
||||||
|
closestPlayer = serverId
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if closestPlayer then
|
||||||
|
TriggerServerEvent('mercyv-deathscreen:server:npcReviveOther', closestPlayer)
|
||||||
|
else
|
||||||
|
ESX.ShowNotification('Keine bewusstlose Person in der Nähe!')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
}
|
||||||
|
})
|
||||||
|
end)
|
||||||
@ -327,3 +327,45 @@ AddEventHandler('onResourceStop', function(resourceName)
|
|||||||
if resourceName ~= GetCurrentResourceName() then return end
|
if resourceName ~= GetCurrentResourceName() then return end
|
||||||
PlayerDeathStates = {}
|
PlayerDeathStates = {}
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|
||||||
|
-- ============================================================
|
||||||
|
-- NPC MEDICAL SERVER LOGIC
|
||||||
|
-- ============================================================
|
||||||
|
|
||||||
|
-- Hilfsfunktion: Prüft ob EMS im Dienst ist
|
||||||
|
local function IsEMSOnDuty()
|
||||||
|
local xPlayers = ESX.GetExtendedPlayers('job', 'ambulance') -- Ersetze 'ambulance' falls dein Job anders heißt
|
||||||
|
return #xPlayers > 0
|
||||||
|
end
|
||||||
|
|
||||||
|
-- NPC Selbstheilung
|
||||||
|
RegisterNetEvent('mercyv-deathscreen:server:npcHealSelf')
|
||||||
|
AddEventHandler('mercyv-deathscreen:server:npcHealSelf', function()
|
||||||
|
local src = source
|
||||||
|
if IsEMSOnDuty() then
|
||||||
|
TriggerClientEvent('esx:showNotification', src, 'Es sind Sanitäter im Dienst! Bitte rufe den Notruf.')
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local xPlayer = ESX.GetPlayerFromId(src)
|
||||||
|
if xPlayer then
|
||||||
|
TriggerClientEvent('mercyv-deathscreen:client:healed', src, 200, 'big')
|
||||||
|
TriggerClientEvent('esx:showNotification', src, 'Der Arzt hat deine Wunden versorgt.')
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- NPC Wiederbelebung für andere
|
||||||
|
RegisterNetEvent('mercyv-deathscreen:server:npcReviveOther')
|
||||||
|
AddEventHandler('mercyv-deathscreen:server:npcReviveOther', function(targetId)
|
||||||
|
local src = source
|
||||||
|
if IsEMSOnDuty() then
|
||||||
|
TriggerClientEvent('esx:showNotification', src, 'Es sind Sanitäter im Dienst! Bitte rufe den Notruf.')
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if RevivePlayer(targetId) then
|
||||||
|
TriggerClientEvent('esx:showNotification', src, 'Du hast die Person mit Hilfe des Arztes wiederbelebt.')
|
||||||
|
TriggerClientEvent('esx:showNotification', targetId, 'Du wurdest von jemandem beim NPC-Arzt gerettet.')
|
||||||
|
end
|
||||||
|
end)
|
||||||
Loading…
x
Reference in New Issue
Block a user