1
0
Fork 0
forked from Simnation/Main
Main/resources/[jobs]/[medic]/mh_Teddy/client/client.lua

167 lines
6.5 KiB
Lua
Raw Normal View History

2025-06-07 08:51:21 +02:00
teddy = nil
lastUsed = 0
isBusy = false
stretcher = nil
QBCore = exports['qb-core']:GetCoreObject()
CreateThread(function()
while true do
Wait(0)
local pos = Config.KlingelPosition
local ply = PlayerPedId()
local coords = GetEntityCoords(ply)
if #(coords - pos) < 2.0 and not isBusy then
--show3DText(pos, "[E] Hilfe anfordern")
DrawText3D(pos.x, pos.y, pos.z, "[E] Hilfe anfordern")
if IsControlJustPressed(0, 38) then
2025-07-02 20:34:18 +02:00
local doc = IsAnyMedicOnDuty()
Wait(100)
if doc then
TriggerServerEvent("drteddy:requestDoctor")
else
Notify("Dr. Teddy", "Dr. Teddy ist grade nicht im Dienst, ruf den Notdienst", "inform")
end
2025-06-07 08:51:21 +02:00
end
end
end
end)
RegisterNetEvent('drteddy:despawn', function()
if DoesEntityExist(teddy) then
DeletePed(teddy)
teddy = nil
isBusy = false
end
end)
RegisterCommand('delmedic', function()
local playerPed = PlayerPedId()
DetachEntity(playerPed, true, true)
SetEntityCollision(playerPed, true, true)
FreezeEntityPosition(playerPed, false)
ClearPedTasks(playerPed)
EnableAllControlActions(0)
DoScreenFadeIn(1000)
SetEntityHealth(playerPed, 100)
TriggerServerEvent('drteddy:delallmedics')
end, false)
RegisterNetEvent("drteddy:startDoctor")
AddEventHandler("drteddy:startDoctor", function()
if isBusy then return end
isBusy = true
Notify("Klingel betätigt", "Dr. Teddy ist auf dem Weg!", "info")
TriggerServerEvent('drteddy:log', "call")
teddy = spawnDoctor(Config.PathToBell[1], Config.PathToBell[1].w)
walkPath(teddy, Config.PathToBell, function()
lib.registerContext({
id = 'teddy_behandlung',
title = 'Dr. Teddy Behandlung',
options = {
{
title = '✅ Ja, bitte behandeln',
description = 'Du wirst medizinisch versorgt.',
icon = 'heart-pulse',
onSelect = function()
QBCore.Functions.TriggerCallback('drteddy:checkMoney', function(cb)
if cb.status then
if type == 'cash' then
Notify("Dr. Teddy", "Du hast "..Config.TreatmentPrice.."$ gegeben.", "success")
TriggerServerEvent('drteddy:log', "cash")
elseif type == 'bank' then
Notify("Dr. Teddy", "Du hast "..Config.TreatmentPrice.."$ überwiesen.", "success")
TriggerServerEvent('drteddy:log', "bank")
end
Wait(500)
Notify("Dr. Teddy", "Bitte folgen Sie mir in den Behandlungsraum.", "inform")
walkPath(teddy, Config.PathToTreatment, function()
CheckPlayerArrivalAt(Config.PathToTreatment[#Config.PathToTreatment])
end)
else
if cb.type == 'noMoney' then
Notify("Dr. Teddy", "Du hast nicht genug Geld dabei oder auf deiner Bank!", "error")
TriggerServerEvent('drteddy:log', "noMoney")
elseif cb.type == 'noPlayer' then
Notify("Dr. Teddy", "Es gab ein Fehler, komme bitte später wieder...", "error")
TriggerServerEvent('drteddy:log', "noPlayer")
end
local newPath = reversePath(Config.PathToBell)
walkPath(teddy, newPath, function()
TriggerServerEvent('drteddy:delallmedics')
end)
end
end)
end
},
{
title = '❌ Nein, abbrechen',
description = 'Du lehnst die Behandlung ab.',
icon = 'heart-pulse',
onSelect = function()
Notify("Dr. Teddy", "Du hast die Behandlung abgelehnt.", "error")
local newPath = reversePath(Config.PathToBell)
walkPath(teddy, newPath, function()
TriggerServerEvent('drteddy:log', "storno")
TriggerServerEvent('drteddy:delallmedics')
end)
end
}
}
})
lib.showContext('teddy_behandlung')
end)
end)
function CheckPlayerArrivalAt(targetPos)
CreateThread(function()
local player = PlayerPedId()
while true do
Wait(500)
local dist = #(GetEntityCoords(player) - vector3(targetPos.x, targetPos.y, targetPos.z))
if dist < 2.0 then
DisableAllControlActions(0)
SetEntityCoords(player, -1878.6747, -322.2974, 50.1690, false, false, false, true)
SetEntityHeading(player, 47.9116)
StartTreatmentSequence(player)
break
end
end
end)
end
function StartTreatmentSequence(playerPed)
-- NPC animation
local dict, anim = "amb@medic@standing@tendtodead@idle_a", "idle_a"
RequestAnimDict(dict)
while not HasAnimDictLoaded(dict) do Wait(100) end
TaskPlayAnim(teddy, dict, anim, 8.0, -8.0, 5000, 1, 0, false, false, false)
-- Bildschirm dunkel
DoScreenFadeOut(1000)
Wait(1500)
-- Spieler vollständig heilen
HealPlayerWithARE(playerPed)
TriggerServerEvent('drteddy:log', "heal")
-- Warte und bringe Bildschirm zurück
Wait(5000)
-- Spieler an Koordinate setzen
SetEntityCoords(playerPed, -1877.5808, -320.7878, 49.4411)
SetEntityHeading(playerPed, 319.8865)
EnableAllControlActions(0)
DoScreenFadeIn(1000)
ClearPedTasks(teddy)
-- NPC zurückschicken
walkPath(teddy, reversePath(Config.PathToTreatment), function()
walkPath(teddy, reversePath(Config.PathToBell), function()
TriggerServerEvent('drteddy:delallmedics')
end)
end)
end