Files
jim-boarding/client/client.lua
2022-08-18 14:14:21 +01:00

299 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 = {}
RegisterNetEvent("jim-skateboard:PickPlace", function()
if DoesEntityExist(skateboard.Entity) then
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 = {}
else
loadModel(`triBike3`)
loadModel(68070371)
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)
SetEntityNoCollisionEntity(skateboard.Entity, PlayerPedId(), false) -- disable collision between the player and the rc
SetEntityNoCollisionEntity(skateboard.Skate,PlayerPedId(), false)
SetEntityCollision(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.Entity, { options = {
{ event = "jim-skateboard:GetOn", icon = "fas fa-car", label = "Get on", board = skateboard.Entity },
{ event = "jim-skateboard:PickPlace", icon = "fas fa-hand-holding", label = "Pick up", board = skateboard.Entity },
}, distance = 2.5, })
--TriggerServerEvent("jim-skateboard:ShareTarget", NetworkGetNetworkIdFromEntity(skateboard.Entity))
--can't figure out how to an entity id with other players so they can target it too
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)
end
end)
--[[RegisterNetEvent("jim-skateboard:GetTarget", function(board, src)
print(src)
print(PlayerPedId())
print(board)
print(NetToEnt(board))
Targets[#Targets+1] =
exports["qb-target"]:AddTargetEntity(NetToEnt(board), { options = {
{ event = "jim-skateboard:PickPlace", icon = "fas fa-hand-holding", label = "Pick up", board = NetToEnt(board) },
}, distance = 2.5, })
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
StopAnimTask(PlayerPedId(), "move_strafe@stealth", "idle", 1.0)
end
end
end)
local forward = false
RegisterKeyMapping('skateforward', 'Skateboard: Forward', 'keyboard', 'W')
RegisterCommand('+skateforward', function()
if IsEntityAttachedToEntity(PlayerPedId(), skateboard.Entity) and not overSpeed then
CreateThread(function()
if not forward then
forward = true
while forward do
TaskVehicleTempAction(skateboard.Driver, skateboard.Entity, 9, 0.1)
Wait(50)
end
else return end
end)
end
end)
RegisterCommand('-skateforward', function()
if IsEntityAttachedToEntity(PlayerPedId(), skateboard.Entity) then
forward = false
TaskVehicleTempAction(skateboard.Driver, skateboard.Entity, 1, 1)
end
end)
local backward = false
RegisterKeyMapping('+skatebackward', 'Skateboard: Backward', 'keyboard', 'S')
RegisterCommand('+skatebackward', function()
if IsEntityAttachedToEntity(PlayerPedId(), skateboard.Entity) and not overSpeed then
CreateThread(function()
if not backward then
backward = true
while backward do
TaskVehicleTempAction(skateboard.Driver, skateboard.Entity, 22, 0.1)
Wait(50)
end
else return end
end)
end
end)
RegisterCommand('-skatebackward', function()
if IsEntityAttachedToEntity(PlayerPedId(), skateboard.Entity) then
backward = false
TaskVehicleTempAction(skateboard.Driver, skateboard.Entity, 1, 1)
end
end)
local left = false
RegisterKeyMapping('+skateleft', 'Skateboard: Left', 'keyboard', 'A')
RegisterCommand('+skateleft', function()
if IsEntityAttachedToEntity(PlayerPedId(), skateboard.Entity) and not overSpeed then
CreateThread(function()
if not left then
left = true
while left do
if backward then
TaskVehicleTempAction(skateboard.Driver, skateboard.Entity, 13, 0.1)
elseif forward then
TaskVehicleTempAction(skateboard.Driver, skateboard.Entity, 7, 0.1)
else
TaskVehicleTempAction(skateboard.Driver, skateboard.Entity, 4, 0.1)
end
Wait(50)
end
else return end
end)
end
end)
RegisterCommand('-skateleft', function()
if IsEntityAttachedToEntity(PlayerPedId(), skateboard.Entity) then
left = false
end
end)
local right = false
RegisterKeyMapping('+skateright', 'Skateboard: Right', 'keyboard', 'D')
RegisterCommand('+skateright', function()
if IsEntityAttachedToEntity(PlayerPedId(), skateboard.Entity) and not overSpeed then
CreateThread(function()
if not right then
right = true
while right do
if backward then
TaskVehicleTempAction(skateboard.Driver, skateboard.Entity, 14, 0.1)
elseif forward then
TaskVehicleTempAction(skateboard.Driver, skateboard.Entity, 8, 0.1)
else
TaskVehicleTempAction(skateboard.Driver, skateboard.Entity, 5, 0.1)
end
Wait(50)
end
else return end
end)
end
end)
RegisterCommand('-skateright', function()
if IsEntityAttachedToEntity(PlayerPedId(), skateboard.Entity) then
right = false
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)
local x = GetEntityRotation(skateboard.Entity).x
local y = GetEntityRotation(skateboard.Entity).y
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
StopAnimTask(PlayerPedId(), "move_strafe@stealth", "idle", 1.0)
SetPedToRagdoll(PlayerPedId(), 5000, 4000, 0, true, true, false)
end
--if IsControlJustReleased(0, 113) then DetachEntity(PlayerPedId(), false, false) end
overSpeed = (GetEntitySpeed(skateboard.Entity)*3.6) > 90
TaskVehicleTempAction(skateboard.Driver, skateboard.Entity, 1, 1)
ForceVehicleEngineAudio(skateboard.Entity, 0)
if not DoesEntityExist(skateboard.Entity) then
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 = {}
end
if not IsEntityAttachedToEntity(PlayerPedId(), skateboard.Entity) then
DetachEntity(PlayerPedId(), false, false)
TaskVehicleTempAction(skateboard.Driver, skateboard.Entity, 1, 100)
Attached = false
StopAnimTask(PlayerPedId(), "move_strafe@stealth", "idle", 1.0)
end
Wait(100)
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)