Untitled Diff

Created Diff never expires
37 removals
109 lines
48 additions
119 lines
-- 2018 Henric 'Kekke' Johansson

local Keys = {
["ESC"] = 322, ["F1"] = 288, ["F2"] = 289, ["F3"] = 170, ["F5"] = 166, ["F6"] = 167, ["F7"] = 168, ["F8"] = 169, ["F9"] = 56, ["F10"] = 57,
["~"] = 243, ["1"] = 157, ["2"] = 158, ["3"] = 160, ["4"] = 164, ["5"] = 165, ["6"] = 159, ["7"] = 161, ["8"] = 162, ["9"] = 163, ["-"] = 84, ["="] = 83, ["BACKSPACE"] = 177,
["TAB"] = 37, ["Q"] = 44, ["W"] = 32, ["E"] = 38, ["R"] = 45, ["T"] = 245, ["Y"] = 246, ["U"] = 303, ["P"] = 199, ["["] = 39, ["]"] = 40, ["ENTER"] = 18,
["CAPS"] = 137, ["A"] = 34, ["S"] = 8, ["D"] = 9, ["F"] = 23, ["G"] = 47, ["H"] = 74, ["K"] = 311, ["L"] = 182,
["LEFTSHIFT"] = 21, ["Z"] = 20, ["X"] = 73, ["C"] = 26, ["V"] = 0, ["B"] = 29, ["N"] = 249, ["M"] = 244, [","] = 82, ["."] = 81,
["LEFTCTRL"] = 36, ["LEFTALT"] = 19, ["SPACE"] = 22, ["RIGHTCTRL"] = 70,
["HOME"] = 213, ["PAGEUP"] = 10, ["PAGEDOWN"] = 11, ["DELETE"] = 178,
["LEFT"] = 174, ["RIGHT"] = 175, ["TOP"] = 27, ["DOWN"] = 173,
["NENTER"] = 201, ["N4"] = 108, ["N5"] = 60, ["N6"] = 107, ["N+"] = 96, ["N-"] = 97, ["N7"] = 117, ["N8"] = 61, ["N9"] = 118
}

ESX = nil
local PlayerData = {}
local PoliceJob = 'police'


local isTackling = false
local isTackling = false
local isGettingTackled = false
local isGettingTackled = false


local tackleLib = 'missmic2ig_11'
local tackleLib = 'missmic2ig_11'
local tackleAnim = 'mic_2_ig_11_intro_goon'
local tackleAnim = 'mic_2_ig_11_intro_goon'
local tackleVictimAnim = 'mic_2_ig_11_intro_p_one'
local tackleVictimAnim = 'mic_2_ig_11_intro_p_one'


local lastTackleTime = 0
local lastTackleTime = 0
local isRagdoll = false
local isRagdoll = false


Citizen.CreateThread(function()
while ESX == nil do
TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)
Citizen.Wait(0)
end

PlayerData = ESX.GetPlayerData()
end)

RegisterNetEvent('esx:playerLoaded')
AddEventHandler('esx:playerLoaded', function(xPlayer)
PlayerData = xPlayer
end)

RegisterNetEvent('esx:setJob')
AddEventHandler('esx:setJob', function(job)
PlayerData.job = job
end)


Citizen.CreateThread(function()
Citizen.CreateThread(function()
while true do
while true do
Citizen.Wait(0)
Citizen.Wait(0)
if isRagdoll then
if isRagdoll then
SetPedToRagdoll(GetPlayerPed(-1), 1000, 1000, 0, 0, 0, 0)
SetPedToRagdoll(GetPlayerPed(-1), 1000, 1000, 0, 0, 0, 0)
end
end
end
end
end)
end)


RegisterNetEvent('tacklescript:getTackled')
RegisterNetEvent('esx_kekke_tackle:getTackled')
AddEventHandler('tacklescript:getTackled', function(target)
AddEventHandler('esx_kekke_tackle:getTackled', function(target)
isGettingTackled = true
isGettingTackled = true


local playerPed = GetPlayerPed(-1)
local playerPed = GetPlayerPed(-1)
local targetPed = GetPlayerPed(GetPlayerFromServerId(target))
local targetPed = GetPlayerPed(GetPlayerFromServerId(target))


RequestAnimDict(tackleLib)
RequestAnimDict(tackleLib)


while not HasAnimDictLoaded(tackleLib) do
while not HasAnimDictLoaded(tackleLib) do
Citizen.Wait(10)
Citizen.Wait(10)
end
end


AttachEntityToEntity(GetPlayerPed(-1), targetPed, 11816, 0.25, 0.5, 0.0, 0.5, 0.5, 180.0, false, false, false, false, 2, false)
AttachEntityToEntity(GetPlayerPed(-1), targetPed, 11816, 0.25, 0.5, 0.0, 0.5, 0.5, 180.0, false, false, false, false, 2, false)
TaskPlayAnim(playerPed, tackleLib, tackleVictimAnim, 8.0, -8.0, 3000, 0, 0, false, false, false)
TaskPlayAnim(playerPed, tackleLib, tackleVictimAnim, 8.0, -8.0, 3000, 0, 0, false, false, false)


Citizen.Wait(3000)
Citizen.Wait(3000)
DetachEntity(GetPlayerPed(-1), true, false)
DetachEntity(GetPlayerPed(-1), true, false)


isRagdoll = true
isRagdoll = true
Citizen.Wait(3000)
Citizen.Wait(3000)
isRagdoll = false
isRagdoll = false


isGettingTackled = false
isGettingTackled = false
end)
end)


RegisterNetEvent('tacklescript:playTackle')
RegisterNetEvent('esx_kekke_tackle:playTackle')
AddEventHandler('tacklescript:playTackle', function()
AddEventHandler('esx_kekke_tackle:playTackle', function()
local playerPed = GetPlayerPed(-1)
local playerPed = GetPlayerPed(-1)


RequestAnimDict(tackleLib)
RequestAnimDict(tackleLib)


while not HasAnimDictLoaded(tackleLib) do
while not HasAnimDictLoaded(tackleLib) do
Citizen.Wait(10)
Citizen.Wait(10)
end
end


TaskPlayAnim(playerPed, tackleLib, tackleAnim, 8.0, -8.0, 3000, 0, 0, false, false, false)
TaskPlayAnim(playerPed, tackleLib, tackleAnim, 8.0, -8.0, 3000, 0, 0, false, false, false)


Citizen.Wait(3000)
Citizen.Wait(3000)


isTackling = false
isTackling = false


end)
end)


-- Main thread
-- Main thread
Citizen.CreateThread(function()
Citizen.CreateThread(function()
while true do
while true do
Wait(0)
Wait(0)


if IsControlPressed(0, 21) and IsControlPressed(0, 38) and not isTackling and GetGameTimer() - lastTackleTime > 10 * 1000 then
if IsControlPressed(0, Keys['LEFTSHIFT']) and IsControlPressed(0, Keys['G']) and not isTackling and GetGameTimer() - lastTackleTime > 10 * 1000 and PlayerData.job.name == PoliceJob then
Citizen.Wait(10)
Citizen.Wait(10)
local closestPlayer = GetClosestPlayer()
local closestPlayer, distance = ESX.Game.GetClosestPlayer()


if closestPlayer.distance ~= -1 and closestPlayer.distance <= Config.TackleDistance and not isTackling and not isGettingTackled and not IsPedInAnyVehicle(GetPlayerPed(-1)) and not IsPedInAnyVehicle(GetPlayerPed(closestPlayer.playerid)) then
if distance ~= -1 and distance <= Config.TackleDistance and not isTackling and not isGettingTackled and not IsPedInAnyVehicle(GetPlayerPed(-1)) and not IsPedInAnyVehicle(GetPlayerPed(closestPlayer)) then
isTackling = true
isTackling = true
lastTackleTime = GetGameTimer()
lastTackleTime = GetGameTimer()


TriggerServerEvent('tacklescript:tryTackle', closestPlayer.playerid)
TriggerServerEvent('esx_kekke_tackle:tryTackle', GetPlayerServerId(closestPlayer))
end
end
end
end
end
end
end)
end)

function GetClosestPlayer()
local players = GetActivePlayers()
local closestDistance = -1
local closestPlayer = -1
local ply = GetPlayerPed(-1)
local plyCoords = GetEntityCoords(ply, 0)

for index,value in ipairs(players) do
local target = GetPlayerPed(value)
if(target ~= ply) then
local targetCoords = GetEntityCoords(GetPlayerPed(value), 0)
local distance = GetDistanceBetweenCoords(targetCoords['x'], targetCoords['y'], targetCoords['z'], plyCoords['x'], plyCoords['y'], plyCoords['z'], true)
if(closestDistance == -1 or closestDistance > distance) then
closestPlayer = GetPlayerServerId(value)
closestDistance = distance
end
end
end

return {
playerid = closestPlayer,
distance = closestDistance
}
end