Auto-sync 2026-04-15 22:00

This commit is contained in:
root 2026-04-15 22:00:01 +02:00
parent b4962e66dc
commit d92af58338
2 changed files with 116 additions and 0 deletions

View File

@ -619,3 +619,77 @@ AddEventHandler('onResourceStop', function(resourceName)
HideDeathscreen()
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)

View File

@ -327,3 +327,45 @@ AddEventHandler('onResourceStop', function(resourceName)
if resourceName ~= GetCurrentResourceName() then return end
PlayerDeathStates = {}
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)