2026-04-14 17:41:39 +02:00

119 lines
3.6 KiB
Lua

local carry = {
InProgress = false,
targetSrc = -1,
type = "",
personCarrying = {
animDict = "missfinale_c2mcs_1",
anim = "fin_c2_mcs_1_camman",
flag = 49,
},
personCarried = {
animDict = "nm",
anim = "firemans_carry",
attachX = 0.27,
attachY = 0.15,
attachZ = 0.63,
flag = 33,
}
}
local function drawNativeNotification(text)
SetTextComponentFormat("STRING")
AddTextComponentString(text)
DisplayHelpTextFromStringLabel(0, 0, 1, -1)
end
local function GetClosestPlayer(radius)
local players = GetActivePlayers()
local closestDistance = -1
local closestPlayer = -1
local playerPed = PlayerPedId()
local playerCoords = GetEntityCoords(playerPed)
for _,playerId in ipairs(players) do
local targetPed = GetPlayerPed(playerId)
if targetPed ~= playerPed then
local targetCoords = GetEntityCoords(targetPed)
local distance = #(targetCoords-playerCoords)
if closestDistance == -1 or closestDistance > distance then
closestPlayer = playerId
closestDistance = distance
end
end
end
if closestDistance ~= -1 and closestDistance <= radius then
return closestPlayer
else
return nil
end
end
local function ensureAnimDict(animDict)
if not HasAnimDictLoaded(animDict) then
RequestAnimDict(animDict)
while not HasAnimDictLoaded(animDict) do
Wait(0)
end
end
return animDict
end
RegisterCommand("carry",function(source, args)
if not carry.InProgress then
local closestPlayer = GetClosestPlayer(3)
if closestPlayer then
local targetSrc = GetPlayerServerId(closestPlayer)
if targetSrc ~= -1 then
carry.InProgress = true
carry.targetSrc = targetSrc
TriggerServerEvent("CarryPeople:sync",targetSrc)
ensureAnimDict(carry.personCarrying.animDict)
carry.type = "carrying"
else
drawNativeNotification("~r~No one nearby to carry!")
end
else
drawNativeNotification("~r~No one nearby to carry!")
end
else
carry.InProgress = false
ClearPedSecondaryTask(PlayerPedId())
DetachEntity(PlayerPedId(), true, false)
TriggerServerEvent("CarryPeople:stop",carry.targetSrc)
carry.targetSrc = 0
end
end,false)
RegisterNetEvent("CarryPeople:syncTarget")
AddEventHandler("CarryPeople:syncTarget", function(targetSrc)
local targetPed = GetPlayerPed(GetPlayerFromServerId(targetSrc))
carry.InProgress = true
ensureAnimDict(carry.personCarried.animDict)
AttachEntityToEntity(PlayerPedId(), targetPed, 0, carry.personCarried.attachX, carry.personCarried.attachY, carry.personCarried.attachZ, 0.5, 0.5, 180, false, false, false, false, 2, false)
carry.type = "beingcarried"
end)
RegisterNetEvent("CarryPeople:cl_stop")
AddEventHandler("CarryPeople:cl_stop", function()
carry.InProgress = false
ClearPedSecondaryTask(PlayerPedId())
DetachEntity(PlayerPedId(), true, false)
end)
Citizen.CreateThread(function()
while true do
if carry.InProgress then
if carry.type == "beingcarried" then
if not IsEntityPlayingAnim(PlayerPedId(), carry.personCarried.animDict, carry.personCarried.anim, 3) then
TaskPlayAnim(PlayerPedId(), carry.personCarried.animDict, carry.personCarried.anim, 8.0, -8.0, 100000, carry.personCarried.flag, 0, false, false, false)
end
elseif carry.type == "carrying" then
if not IsEntityPlayingAnim(PlayerPedId(), carry.personCarrying.animDict, carry.personCarrying.anim, 3) then
TaskPlayAnim(PlayerPedId(), carry.personCarrying.animDict, carry.personCarrying.anim, 8.0, -8.0, 100000, carry.personCarrying.flag, 0, false, false, false)
end
end
end
Wait(0)
end
end)