Auto-sync 2026-04-15 22:00
This commit is contained in:
parent
b4962e66dc
commit
d92af58338
@ -618,4 +618,78 @@ AddEventHandler('onResourceStop', function(resourceName)
|
||||
SetHudVisible(true)
|
||||
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)
|
||||
@ -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)
|
||||
Loading…
x
Reference in New Issue
Block a user