Files
jim-boarding/client/client.lua
2022-08-19 18:04:17 +01:00

239 lines
12 KiB
Lua

local QBCore = exports['qb-core']:GetCoreObject()
RegisterNetEvent('QBCore:Client:UpdateObject', function() QBCore = exports['qb-core']:GetCoreObject() end)
local Props = {}
local Targets = {}
local Peds = {}
local skateboard = {}
local Dir = {}
RegisterNetEvent("jim-skateboard:PickPlace", function()
if not IsPedSittingInAnyVehicle(PlayerPedId()) then
if DoesEntityExist(skateboard.Entity) then
exports["qb-target"]:RemoveTargetEntity(skateboard.Skate)
Attached = false
Wait(100)
TaskPlayAnim(PlayerPedId(), "pickup_object", "pickup_low", 8.0, -8.0, -1, 0, 0, false, false, false)
Wait(600)
AttachEntityToEntity(skateboard.Entity, PlayerPedId(), GetPedBoneIndex(PlayerPedId(), 28422), -0.1, 0.0, -0.2, 70.0, 0.0, 270.0, 1, 1, 0, 0, 2, 1)
Wait(900)
DeleteVehicle(skateboard.Entity)
destroyProp(skateboard.Skate)
DeleteEntity(skateboard.Driver)
toggleItem(true, "skateboard", 1)
skateboard = {}
Dir = {}
else
loadModel(`triBike3`)
loadModel(`S_M_M_AutoShop_01`)
loadModel(`v_res_skateboard`)
skateboard.Entity = CreateVehicle(`triBike3`, 0, 0, 0, 0, true)
skateboard.Skate = makeProp({ prop = `v_res_skateboard`, coords = vector4(0,0,0,0) }, 0, 1)
SetEntityNoCollisionEntity(skateboard.Entity, PlayerPedId(), false)
SetEntityNoCollisionEntity(skateboard.Skate, PlayerPedId(), false)
-- Load models
while not DoesEntityExist(skateboard.Entity) do Wait(5) end
while not DoesEntityExist(skateboard.Skate) do Wait(5) end
SetVehicleHandlingFloat(skateboard.Entity, "CHandlingData", "fSteeringLock", 9.0)
SetVehicleHandlingFloat(skateboard.Entity, "CHandlingData", "fDriveInertia", 0.05)
SetVehicleHandlingFloat(skateboard.Entity, "CHandlingData", "fMass", 1800.0)
SetVehicleHandlingFloat(skateboard.Entity, "CHandlingData", "fPercentSubmerged", 105.0)
SetVehicleHandlingFloat(skateboard.Entity, "CHandlingData", "fDriveBiasFront", 0.0)
SetVehicleHandlingFloat(skateboard.Entity, "CHandlingData", "fInitialDriveForce", 0.25)
SetVehicleHandlingFloat(skateboard.Entity, "CHandlingData", "fInitialDriveMaxFlatVel", 135.0)
SetVehicleHandlingFloat(skateboard.Entity, "CHandlingData", "fTractionCurveMax", 2.2)
SetVehicleHandlingFloat(skateboard.Entity, "CHandlingData", "fTractionCurveMin", 2.12)
SetVehicleHandlingFloat(skateboard.Entity, "CHandlingData", "fTractionCurveLateral", 22.5)
SetVehicleHandlingFloat(skateboard.Entity, "CHandlingData", "fTractionSpringDeltaMax", 0.1)
SetVehicleHandlingFloat(skateboard.Entity, "CHandlingData", "fLowSpeedTractionLossMult", 0.7)
SetVehicleHandlingFloat(skateboard.Entity, "CHandlingData", "fCamberStiffnesss", 0.0)
SetVehicleHandlingFloat(skateboard.Entity, "CHandlingData", "fTractionBiasFront", 0.478)
SetVehicleHandlingFloat(skateboard.Entity, "CHandlingData", "fTractionLossMult", 0.0)
SetVehicleHandlingFloat(skateboard.Entity, "CHandlingData", "fSuspensionForce", 5.2)
SetVehicleHandlingFloat(skateboard.Entity, "CHandlingData", "fSuspensionForce", 1.2)
SetVehicleHandlingFloat(skateboard.Entity, "CHandlingData", "fSuspensionReboundDamp", 1.7)
SetVehicleHandlingFloat(skateboard.Entity, "CHandlingData", "fSuspensionUpperLimit", 0.1)
SetVehicleHandlingFloat(skateboard.Entity, "CHandlingData", "fSuspensionLowerLimit", -0.3)
SetVehicleHandlingFloat(skateboard.Entity, "CHandlingData", "fSuspensionRaise", 0.0)
SetVehicleHandlingFloat(skateboard.Entity, "CHandlingData", "fSuspensionBiasFront", 0.5)
SetVehicleHandlingFloat(skateboard.Entity, "CHandlingData", "fAntiRollBarForce", 0.0)
SetVehicleHandlingFloat(skateboard.Entity, "CHandlingData", "fAntiRollBarBiasFront", 0.65)
SetVehicleHandlingFloat(skateboard.Entity, "CHandlingData", "fBrakeForce", 0.53)
SetEntityCompletelyDisableCollision(skateboard.Entity, true, true)
SetEntityVisible(skateboard.Entity, false)
AttachEntityToEntity(skateboard.Skate, skateboard.Entity, GetPedBoneIndex(PlayerPedId(), 28422), 0.0, 0.0, -0.60, 0.0, 0.0, 90.0, false, true, true, true, 1, true)
local loc = vector4(GetOffsetFromEntityInWorldCoords(PlayerPedId(), 0, 1.0, 0).x, GetOffsetFromEntityInWorldCoords(PlayerPedId(), 0, 1.0, 0).y, GetOffsetFromEntityInWorldCoords(PlayerPedId(), 0, 1.0, 0).z, GetEntityHeading(PlayerPedId()))
skateboard.Driver = makePed(68070371, loc, 0, 1, nil, nil)
SetEntityNoCollisionEntity(skateboard.Driver, PlayerPedId(), false)
-- Driver properties
SetEnableHandcuffs(skateboard.Driver, true)
SetEntityInvincible(skateboard.Driver, true)
SetEntityVisible(skateboard.Driver, false)
FreezeEntityPosition(skateboard.Driver, true)
TaskWarpPedIntoVehicle(skateboard.Driver, skateboard.Entity, -1)
Targets[#Targets+1] =
exports["qb-target"]:AddTargetEntity(skateboard.Skate, { options = {
{ event = "jim-skateboard:GetOn", icon = "fas fa-car", label = "Get on", board = skateboard.Skate },
{ event = "jim-skateboard:PickPlace", icon = "fas fa-hand-holding", label = "Pick up", board = skateboard.Skate },
}, distance = 2.5, })
loadAnimDict("pickup_object")
AttachEntityToEntity(skateboard.Entity, PlayerPedId(), GetPedBoneIndex(PlayerPedId(), 28422), -0.1, 0.10, -0.2, 70.0, 0.0, 270.0, 1, 1, 0, 0, 2, 1)
TaskPlayAnim(PlayerPedId(), "pickup_object", "pickup_low", 8.0, -8.0, -1, 0, 0, false, false, false)
Wait(800)
DetachEntity(skateboard.Entity, false, true)
PlaceObjectOnGroundProperly(skateboard.Entity)
toggleItem(false, "skateboard", 1)
Dir = {}
end
end
end)
RegisterKeyMapping('skategetoff', 'Skateboard: Get Off', 'keyboard', 'G')
RegisterCommand('skategetoff', function()
if IsEntityAttachedToEntity(PlayerPedId(), skateboard.Entity) then
if not IsEntityInAir(skateboard.Entity) then
DetachEntity(PlayerPedId(), false, false)
TaskVehicleTempAction(skateboard.Driver, skateboard.Entity, 1, 100)
Attached = false
Dir = {}
StopAnimTask(PlayerPedId(), "move_strafe@stealth", "idle", 1.0)
end
end
end)
RegisterKeyMapping('+skateforward', 'Skateboard: Forward', 'keyboard', 'W')
RegisterCommand('+skateforward', function()
if IsEntityAttachedToEntity(PlayerPedId(), skateboard.Entity) and not overSpeed then
CreateThread(function()
if not Dir.forward then
Dir.forward = true
while Dir.forward do
if not Dir.right and not Dir.left then TaskVehicleTempAction(skateboard.Driver, skateboard.Entity, 9, 0.1) end
if Dir.left then TaskVehicleTempAction(skateboard.Driver, skateboard.Entity, 7, 0.1) end
if Dir.right then TaskVehicleTempAction(skateboard.Driver, skateboard.Entity, 8, 0.1) end
Wait(50)
end
else return end
end)
end
end)
RegisterCommand('-skateforward', function() if IsEntityAttachedToEntity(PlayerPedId(), skateboard.Entity) then Dir.forward = nil TaskVehicleTempAction(skateboard.Driver, skateboard.Entity, 1, 1) end end)
RegisterKeyMapping('+skatebackward', 'Skateboard: Backward', 'keyboard', 'S')
RegisterCommand('+skatebackward', function()
if IsEntityAttachedToEntity(PlayerPedId(), skateboard.Entity) and not overSpeed then
CreateThread(function()
if not Dir.backward then
Dir.backward = true
while Dir.backward do
if Dir.left then
TaskVehicleTempAction(skateboard.Driver, skateboard.Entity, 13, 0.1)
elseif Dir.right then
TaskVehicleTempAction(skateboard.Driver, skateboard.Entity, 14, 0.1)
elseif not Dir.right and not Dir.left then
TaskVehicleTempAction(skateboard.Driver, skateboard.Entity, 22, 0.1)
end
Wait(50)
end
else return end
end)
end
end)
RegisterCommand('-skatebackward', function() if IsEntityAttachedToEntity(PlayerPedId(), skateboard.Entity) then Dir.backward = nil TaskVehicleTempAction(skateboard.Driver, skateboard.Entity, 1, 1) end end)
RegisterKeyMapping('+skateleft', 'Skateboard: Left', 'keyboard', 'A')
RegisterCommand('+skateleft', function() if IsEntityAttachedToEntity(PlayerPedId(), skateboard.Entity) and not overSpeed then Dir.left = true end end)
RegisterCommand('-skateleft', function() if IsEntityAttachedToEntity(PlayerPedId(), skateboard.Entity) then Dir.left = nil end end)
RegisterKeyMapping('+skateright', 'Skateboard: Right', 'keyboard', 'D')
RegisterCommand('+skateright', function() if IsEntityAttachedToEntity(PlayerPedId(), skateboard.Entity) and not overSpeed then Dir.right = true end end)
RegisterCommand('-skateright', function() if IsEntityAttachedToEntity(PlayerPedId(), skateboard.Entity) then Dir.right = nil end end)
RegisterKeyMapping('skatejump', 'Skateboard: Jump', 'keyboard', 'SPACE')
RegisterCommand('skatejump', function()
if IsEntityAttachedToEntity(PlayerPedId(), skateboard.Entity) then
if not IsEntityInAir(skateboard.Entity) then
local vel = GetEntityVelocity(skateboard.Entity)
TaskPlayAnim(PlayerPedId(), "move_crouch_proto", "idle_intro", 5.0, 8.0, -1, 0, 0, false, false, false)
local duration = 0
local boost = 0
while IsControlPressed(0, 22) do
Wait(10)
duration = duration + 10.0
ForceVehicleEngineAudio(skateboard.Entity, 0)
end
boost = 6.0 * duration / 250.0
if boost > 6.0 then boost = 6.0 end
StopAnimTask(PlayerPedId(), "move_crouch_proto", "idle_intro", 1.0)
SetEntityVelocity(skateboard.Entity, vel.x, vel.y, vel.z + boost)
TaskPlayAnim(PlayerPedId(), "move_strafe@stealth", "idle", 8.0, 2.0, -1, 1, 1.0, false, false, false)
end
end
end)
local Attached = false
local overSpeed
RegisterNetEvent("jim-skateboard:GetOn", function()
loadAnimDict("move_strafe@stealth")
loadAnimDict("move_crouch_proto")
TaskPlayAnim(PlayerPedId(), "move_strafe@stealth", "idle", 8.0, 8.0, -1, 1, 1.0, false, false, false)
AttachEntityToEntity(PlayerPedId(), skateboard.Entity, 20, 0.0, 0.15, 0.05, 0.0, 0.0, -15.0, true, true, false, true, 1, true)
SetEntityCollision(PlayerPedId(), true, true)
Attached = true
CreateThread(function()
while Attached do
StopCurrentPlayingAmbientSpeech(skateboard.Driver)
overSpeed = (GetEntitySpeed(skateboard.Entity)*3.6) > 90
local x, y, z = table.unpack(GetEntityRotation(skateboard.Entity))
if (-40.0 < x and x > 40.0) or (-40.0 < y and y > 40.0) then
DetachEntity(PlayerPedId(), false, false)
TaskVehicleTempAction(skateboard.Driver, skateboard.Entity, 1, 1)
Attached = false
Dir = {}
StopAnimTask(PlayerPedId(), "move_strafe@stealth", "idle", 1.0)
SetPedToRagdoll(PlayerPedId(), 5000, 4000, 0, true, true, false)
end
if not DoesEntityExist(skateboard.Entity) then
exports["qb-target"]:RemoveTargetEntity(skateboard.Skate)
Attached = false
Wait(100)
TaskPlayAnim(PlayerPedId(), "pickup_object", "pickup_low", 8.0, -8.0, -1, 0, 0, false, false, false)
Wait(600)
AttachEntityToEntity(skateboard.Entity, PlayerPedId(), GetPedBoneIndex(PlayerPedId(), 28422), -0.1, 0.0, -0.2, 70.0, 0.0, 270.0, 1, 1, 0, 0, 2, 1)
Wait(900)
DeleteVehicle(skateboard.Entity)
destroyProp(skateboard.Skate)
DeleteEntity(skateboard.Driver)
skateboard = {}
Dir = {}
end
if not IsEntityAttachedToEntity(PlayerPedId(), skateboard.Entity) then
DetachEntity(PlayerPedId(), false, false)
TaskVehicleTempAction(skateboard.Driver, skateboard.Entity, 6, 2000)
Attached = false
Dir = {}
StopAnimTask(PlayerPedId(), "move_strafe@stealth", "idle", 1.0)
end
Wait(1000)
end
end)
end)
AddEventHandler('onResourceStop', function(resource) if resource ~= GetCurrentResourceName() then return end
for _, v in pairs(Peds) do unloadModel(GetEntityModel(v)) DeletePed(v) end
for i = 1, #Props do unloadModel(GetEntityModel(Props[i])) DeleteObject(Props[i]) end
DeleteEntity(cardHat)
if DoesEntityExist(skateboard.Entity) then
DeletePed(skateboard.Driver)
DeleteVehicle(skateboard.Entity)
DeleteObject(skateboard.Skate)
end
end)