forked from Simnation/Main
159 lines
No EOL
4.7 KiB
Lua
159 lines
No EOL
4.7 KiB
Lua
local isTieShoes = false
|
|
local afkcheck = false
|
|
inProgress = false
|
|
|
|
RegisterNetEvent('tieshoes:tieshoes')
|
|
AddEventHandler("tieshoes:tieshoes", function()
|
|
afkcheck = false
|
|
|
|
if isTieShoes then return end
|
|
|
|
local playerPed = PlayerPedId()
|
|
|
|
isTieShoes = true
|
|
TieShoesLoop()
|
|
ShoeNotify(Config.ShoeNotify[1])
|
|
Citizen.Wait(Config.ShoeLaceSnapTimer)
|
|
|
|
if not isTieShoes then return end
|
|
|
|
if afkcheck then
|
|
ShoeNotify(Config.ShoeNotify[2])
|
|
isTieShoes = false
|
|
else
|
|
ShoeNotify(Config.ShoeNotify[3])
|
|
AfkCheckLoop()
|
|
end
|
|
end)
|
|
|
|
function AfkCheckLoop()
|
|
Citizen.CreateThread(function()
|
|
while not (afkcheck) do
|
|
Citizen.Wait(0)
|
|
if IsControlPressed(0, 32) or IsControlPressed(0, 33) or IsControlPressed(0, 34) or IsControlPressed(0, 35) then
|
|
Citizen.Wait(Config.ShoeLaceSnapTimer)
|
|
if isTieShoes then
|
|
ShoeNotify(Config.ShoeNotify[2])
|
|
isTieShoes = false
|
|
end
|
|
break
|
|
end
|
|
end
|
|
end)
|
|
end
|
|
|
|
function TieShoesLoop()
|
|
Citizen.CreateThread(function()
|
|
local playerPed = PlayerPedId()
|
|
local pressed = false
|
|
while (isTieShoes) do
|
|
Citizen.Wait(0)
|
|
if IsControlPressed(0, 32) or IsControlPressed(0, 33) or IsControlPressed(0, 34) or IsControlPressed(0, 35) then
|
|
if not pressed and not inProgress then
|
|
pressed = true
|
|
afkcheck = true
|
|
local ForwardVector = GetEntityForwardVector(PlayerPedId())
|
|
SetPedToRagdollWithFall(PlayerPedId(), 1500, 2000, 0, ForwardVector, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
|
|
ShoeNotify(Config.ShoeNotify[4])
|
|
else
|
|
Citizen.Wait(1500)
|
|
pressed = false
|
|
end
|
|
end
|
|
|
|
end
|
|
end)
|
|
end
|
|
|
|
RegisterNetEvent('tieshoes:removetieshoes')
|
|
AddEventHandler('tieshoes:removetieshoes', function()
|
|
local playerPed = PlayerPedId()
|
|
|
|
if not isTieShoes then ShoeNotify(Config.ShoeNotify[6]) return end
|
|
|
|
handleAnimation(Config.ShoeUnTieAnimDict, Config.ShoeUnTieAnimName, Config.ShoeUnTieAnimFlag)
|
|
handleProgressBar(Config.ShoeNotify[10], Config.UnTieShoeTime)
|
|
|
|
if Config.Framework["framework"] ~= 'qb-core' then
|
|
Citizen.Wait(Config.UnTieShoeTime)
|
|
end
|
|
|
|
ClearPedTasks(playerPed)
|
|
ShoeNotify(Config.ShoeNotify[5])
|
|
isTieShoes = false
|
|
inProgress = false
|
|
|
|
end)
|
|
|
|
RegisterNetEvent('tieshoes:starttieshoes')
|
|
AddEventHandler("tieshoes:starttieshoes", function()
|
|
local playerPed = PlayerPedId()
|
|
|
|
if IsPedRagdoll(PlayerPedId()) then ShoeNotify(Config.ShoeNotify[8]) return end
|
|
|
|
if IsPedDeadOrDying(playerPed, 1) then ShoeNotify(Config.ShoeNotify[8]) return end
|
|
|
|
local closestPlayer, closestDistance = GetClosestPlayerTieShoes(Config.ShoeTieRange)
|
|
|
|
if closestPlayer == -1 then ShoeNotify(Config.ShoeNotify[7]) return end
|
|
if closestDistance == -1 or closestDistance >= Config.ShoeTieRange then ShoeNotify(Config.ShoeNotify[7]) return end
|
|
|
|
handleAnimation(Config.ShoeTieAnimDict, Config.ShoeTieAnimName, Config.ShoeTieAnimFlag)
|
|
handleProgressBar(Config.ShoeNotify[9], Config.TieShoeTime)
|
|
|
|
if Config.Framework["framework"] ~= 'qb-core' then
|
|
Citizen.Wait(Config.TieShoeTime)
|
|
end
|
|
|
|
ClearPedTasks(playerPed)
|
|
inProgress = false
|
|
|
|
local closestPlayer2, closestDistance2 = GetClosestPlayerTieShoes(Config.ShoeTieRange)
|
|
|
|
if closestPlayer2 == -1 then ShoeNotify(Config.ShoeNotify[7]) return end
|
|
if closestDistance2 == -1 or closestDistance2 >= Config.ShoeTieRange then ShoeNotify(Config.ShoeNotify[7]) return end
|
|
|
|
if closestPlayer ~= closestPlayer2 then ShoeNotify(Config.ShoeNotify[11]) return end
|
|
|
|
local targetId = GetPlayerServerId(closestPlayer2)
|
|
TriggerServerEvent('tieshoes:applytieshoes', targetId)
|
|
|
|
end)
|
|
|
|
function GetClosestPlayerTieShoes(distance)
|
|
local ped = PlayerPedId()
|
|
local coords = GetEntityCoords(ped)
|
|
|
|
local closestPlayers = GetPlayersFromCoordsTieShoes(coords, distance)
|
|
local closestDistance = -1
|
|
local closestPlayer = -1
|
|
for i = 1, #closestPlayers, 1 do
|
|
if closestPlayers[i] ~= PlayerId() and closestPlayers[i] ~= -1 then
|
|
local pos = GetEntityCoords(GetPlayerPed(closestPlayers[i]))
|
|
local distance = #(pos - coords)
|
|
|
|
if closestDistance == -1 or closestDistance > distance then
|
|
closestPlayer = closestPlayers[i]
|
|
closestDistance = distance
|
|
end
|
|
end
|
|
end
|
|
return closestPlayer, closestDistance
|
|
end
|
|
|
|
function GetPlayersFromCoordsTieShoes(coords, distance)
|
|
local players = GetActivePlayers()
|
|
local ped = PlayerPedId()
|
|
|
|
local distance = distance or 5
|
|
local closePlayers = {}
|
|
for _, player in pairs(players) do
|
|
local target = GetPlayerPed(player)
|
|
local targetCoords = GetEntityCoords(target)
|
|
local targetdistance = #(targetCoords - coords)
|
|
if targetdistance <= distance then
|
|
closePlayers[#closePlayers + 1] = player
|
|
end
|
|
end
|
|
return closePlayers
|
|
end |