Files
jim-boarding-jimathy/client.lua
Jim Shield e51c2efdb6 hotfixes
2024-01-26 18:42:42 +00:00

321 lines
11 KiB
Lua

local skateboard, Dir, customCam, Attached, overSpeed = {}, {}, nil, false, nil
local function createSkateboardEntity()
local entity = makeVeh("triBike3", vec4(0, 0, 0, 0))
local prop = makeProp({ prop = "v_res_skateboard", coords = vec4(0, 0, 0, 0) }, 0, 1)
while not DoesEntityExist(entity) or not DoesEntityExist(prop) do Wait(5) end
SetEntityVisible(entity, (Config.System.Debug), 0)
AttachEntityToEntity(prop, entity, GetPedBoneIndex(PlayerPedId(), 28422), 0.0, 0.0, -0.60, 0.0, 0.0, 90.0, false, true, true, true, 1, true)
SetEntityNoCollisionEntity(entity, PlayerPedId(), false)
SetEntityNoCollisionEntity(prop, PlayerPedId(), false)
SetEntityCompletelyDisableCollision(entity, true, true)
SetEntityCompletelyDisableCollision(prop, true, true)
SetVehicleDoorsLocked(entity, 10)
DisableCamCollisionForEntity(entity)
DisableCamCollisionForEntity(prop)
return entity, prop
end
local function configureSkateboard(entity)
for k, v in pairs({
["fSteeringLock"] = 9.0,
["fDriveInertia"] = 0.05,
["fMass"] = 1800.0,
["fPercentSubmerged"] = 105.0,
["fDriveBiasFront"] = 0.0,
["fInitialDriveForce"] = 0.25,
["fInitialDriveMaxFlatVel"] = 135.0,
["fTractionCurveMax"] = 2.2,
["fTractionCurveMin"] = 2.12,
["fTractionCurveLateral"] = 22.5,
["fTractionSpringDeltaMax"] = 0.1,
["fLowSpeedTractionLossMult"] = 0.7,
["fCamberStiffnesss"] = 0.0,
["fTractionBiasFront"] = 0.478,
["fTractionLossMult"] = 0.0,
["fSuspensionForce"] = 1.2,
["fSuspensionReboundDamp"] = 1.7,
["fSuspensionUpperLimit"] = 0.1,
["fSuspensionLowerLimit"] = -0.3,
["fSuspensionRaise"] = 0.0,
["fSuspensionBiasFront"] = 0.5,
["fAntiRollBarForce"] = 0.0,
["fAntiRollBarBiasFront"] = 0.65,
["fBrakeForce"] = 0.53 }) do
SetVehicleHandlingFloat(entity, "CHandlingData", k, v)
end
end
local function createBikeDriver(bike)
local entity = makePed("S_M_M_AutoShop_01", vec4(0.0, 0.0, 0.0, 0.0), 0, 1, nil, nil)
SetEntityNoCollisionEntity(entity, PlayerPedId(), false)
SetEntityCompletelyDisableCollision(entity, true, true)
SetEnableHandcuffs(entity, true)
SetEntityInvincible(entity, true)
FreezeEntityPosition(entity, true)
TaskWarpPedIntoVehicle(entity, bike, -1)
SetEntityVisible(entity, (Config.System.Debug), 0)
return entity
end
local function makeFakeSkateboard(Ped, remove) -- The animation for picking up and placing the board
local prop = makeProp({ prop = "v_res_skateboard", coords = vec4(0,0,0,0), false, true})
if GetEntityModel(Ped) == `a_c_cat_01` then
SetPedCanRagdoll(PlayerPedId(), false)
AttachEntityToEntity(prop, PlayerPedId(), GetPedBoneIndex(PlayerPedId(), 31086), 0.18, -0.14, 0.0, -87.0, -100.0, 1.0, true, true, false, false, 1, true)
else
AttachEntityToEntity(prop, Ped, GetPedBoneIndex(Ped, 57005), 0.3, 0.08, 0.09, -86.0, -60.0, 50.0, true, true, false, false, 1, true)
playAnim("pickup_object", "pickup_low", -1, 0)
end
if remove then
DeleteVehicle(skateboard.Bike)
destroyProp(skateboard.Skate)
DeleteEntity(skateboard.Driver)
end
Wait(900)
destroyProp(prop)
end
RegisterNetEvent("jim-skateboard:PickPlace", function() local Ped = PlayerPedId()
if not IsPedSittingInAnyVehicle(Ped) then
if DoesEntityExist(skateboard.Bike) then
removeEntityTarget(skateboard.Skate)
removeEntityTarget(skateboard.Driver)
removeEntityTarget(skateboard.Bike)
Attached = false
Wait(100)
stopTempCam()
makeFakeSkateboard(Ped, true) -- pick up animation
addItem("skateboard", 1)
skateboard = {}
Dir = {}
else
--Make and configure skateboard
skateboard.Bike, skateboard.Skate = createSkateboardEntity()
configureSkateboard(skateboard.Bike)
-- Driver properties
skateboard.Driver = createBikeDriver(skateboard.Bike)
local options = {
{ action = function() TriggerEvent("jim-skateboard:GetOn", { board = skateboard.Skate }) end,
icon = "fas fa-car", label = "Get on", board = skateboard.Skate },
{ action = function() TriggerEvent("jim-skateboard:PickPlace", { board = skateboard.Skate }) end,
icon = "fas fa-hand-holding", label ="Pick up", board = skateboard.Skate },
}
createEntityTarget(skateboard.Skate, options, 2.5)
createEntityTarget(skateboard.Driver, options, 2.5)
createEntityTarget(skateboard.Bike, options, 2.5)
makeFakeSkateboard(Ped)
SetEntityCoords(skateboard.Bike, GetOffsetFromEntityInWorldCoords(Ped, 0.0, 0.5, 1.5))
SetEntityHeading(skateboard.Bike, GetEntityHeading(PlayerPedId())+90)
removeItem("skateboard", 1)
Dir = {}
end
end
end)
RegisterKeyMapping('skategetoff', 'Skateboard: Get Off', 'keyboard', 'G')
RegisterCommand('skategetoff', function()
if Attached then
if not IsEntityInAir(skateboard.Bike) then
stopTempCam()
DetachEntity(PlayerPedId(), false, false)
TaskVehicleTempAction(skateboard.Driver, skateboard.Bike, 1, 100)
Attached = false
Dir = {}
ClearPedTasks(PlayerPedId())
end
end
end)
RegisterKeyMapping('+skateforward', 'Skateboard: Forward', 'keyboard', 'W')
RegisterCommand('+skateforward', function()
if Attached 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.Bike, 9, 0.1) end
if Dir.left then TaskVehicleTempAction(skateboard.Driver, skateboard.Bike, 7, 0.1) end
if Dir.right then TaskVehicleTempAction(skateboard.Driver, skateboard.Bike, 8, 0.1) end
Wait(50)
end
else return end
end)
end
end)
RegisterCommand('-skateforward', function() if Attached then Dir.forward = nil TaskVehicleTempAction(skateboard.Driver, skateboard.Bike, 1, 1) end end)
RegisterKeyMapping('+skatebackward', 'Skateboard: Backward', 'keyboard', 'S')
RegisterCommand('+skatebackward', function()
if Attached 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.Bike, 13, 0.1)
elseif Dir.right then
TaskVehicleTempAction(skateboard.Driver, skateboard.Bike, 14, 0.1)
elseif not Dir.right and not Dir.left then
TaskVehicleTempAction(skateboard.Driver, skateboard.Bike, 22, 0.1)
end
Wait(50)
end
else return end
end)
end
end)
RegisterCommand('-skatebackward', function() if Attached then Dir.backward = nil TaskVehicleTempAction(skateboard.Driver, skateboard.Bike, 1, 1) end end)
RegisterKeyMapping('+skateleft', 'Skateboard: Left', 'keyboard', 'A')
RegisterCommand('+skateleft', function() if Attached and not overSpeed then Dir.left = true end end)
RegisterCommand('-skateleft', function() if Attached then Dir.left = nil end end)
RegisterKeyMapping('+skateright', 'Skateboard: Right', 'keyboard', 'D')
RegisterCommand('+skateright', function() if Attached and not overSpeed then Dir.right = true end end)
RegisterCommand('-skateright', function() if Attached then Dir.right = nil end end)
RegisterKeyMapping('skatejump', 'Skateboard: Jump', 'keyboard', 'SPACE')
RegisterCommand('skatejump', function() local Ped = PlayerPedId()
if Attached then
if not IsEntityInAir(skateboard.Bike) then
local vel = GetEntityVelocity(skateboard.Bike)
if GetEntityModel(Ped) == `a_c_cat_01` then
playAnim("creatures@cat@move", "idle_dwn", -1, 1)
else
playAnim("move_crouch_proto", "idle_intro", -1, 1)
end
local duration = 0
local boost = 0
while IsControlPressed(0, 22) do
Wait(10)
duration = duration + 10.0
end
boost = 6.0 * duration / 250.0
if boost > 6.0 then boost = 6.0 end
SetEntityVelocity(skateboard.Bike, vel.x, vel.y, vel.z + boost)
if GetEntityModel(Ped) == `a_c_cat_01` then
stopAnim("move_crouch_proto", "idle_dwn")
playAnim("creatures@cat@move", "idle_upp", -1, 1)
else
stopAnim("move_crouch_proto", "idle_intro")
playAnim("move_strafe@stealth", "idle", -1, 1)
end
end
end
end)
local toggleCam = false
local flipCam = false
RegisterKeyMapping('skatecam', 'Skateboard: Unlock/Lock Cam', 'keyboard', 'H')
RegisterCommand('skatecam', function()
if Attached then
toggleCam = not toggleCam
updateCamLoc()
end
end)
RegisterKeyMapping('+flipcam', 'Skateboard: Flip Cam', 'keyboard', 'C')
RegisterCommand('+flipcam', function()
if Attached then
AttachCamToEntity(customCam, skateboard.Bike, 0.25, 2.0, 1.5, true)
flipCam = true
end
end)
RegisterCommand('-flipcam', function()
if Attached then
AttachCamToEntity(customCam, skateboard.Bike, 0.25, -2.0, 1.0, true)
flipCam = false
end
end)
function updateCamLoc()
CreateThread(function()
while toggleCam and Attached do
local coord = GetOffsetFromEntityInWorldCoords(PlayerPedId(), 0.0, flipCam and -5.0 or 5.0, 0.0)
if customCam == nil then
customCam = createTempCam(coord, coord)
AttachCamToEntity(customCam, skateboard.Bike, 0.25, -2.0, 1.0, true)
startTempCam(customCam)
end
PointCamAtCoord(customCam, coord.x, coord.y, coord.z)
Wait(0)
end
RenderScriptCams(false, true, 500, true, true)
DestroyAllCams()
customCam = nil
end)
end
RegisterNetEvent("jim-skateboard:GetOn", function() local Ped = PlayerPedId()
if GetEntityModel(Ped) == `a_c_cat_01` then
AttachEntityToEntity(Ped, skateboard.Bike, 20, 0.0, 0.10, -0.78, 0.4, 0.0, 0.0, -15.0, true, true, false, true, 1, true)
playAnim("creatures@cat@move", "idle_upp", -1, 1)
else
playAnim("move_strafe@stealth", "idle", -1, 1)
AttachEntityToEntity(Ped, skateboard.Bike, 20, 0.0, 0.15, 0.05, 0.0, 0.0, -15.0, true, true, false, true, 1, true)
end
SetEntityCollision(Ped, true, true)
Attached = true
updateCamLoc()
drawText(nil, {"[G] - Get Off Stakeboard", "[H] - Unlock/Lock Cam"}, "w")
CreateThread(function()
while Attached do
StopCurrentPlayingAmbientSpeech(skateboard.Driver)
overSpeed = (GetEntitySpeed(skateboard.Bike)*3.6) > 90
local x, y, z = table.unpack(GetEntityRotation(skateboard.Bike))
if (-40.0 < x and x > 40.0) or (-40.0 < y and y > 40.0) then
DetachEntity(Ped, false, false)
TaskVehicleTempAction(skateboard.Driver, skateboard.Bike, 1, 1)
Attached = false
Dir = {}
if GetEntityModel(Ped) ~= `a_c_cat_01` then stopAnim("move_strafe@stealth", "idle") end
SetPedToRagdoll(Ped, 5000, 4000, 0, true, true, false)
end
if not DoesEntityExist(skateboard.Bike) or GetPedInVehicleSeat(skateboard.Bike, -1) ~= skateboard.Driver then
removeEntityTarget(skateboard.Skate)
removeEntityTarget(skateboard.Bike)
removeEntityTarget(skateboard.Driver)
Attached = false
Wait(100)
makeFakeSkateboard(Ped, true)
addItem("skateboard", 1)
skateboard = {}
Dir = {}
end
if not IsEntityAttachedToEntity(Ped, skateboard.Bike) then
DetachEntity(Ped, false, false)
TaskVehicleTempAction(skateboard.Driver, skateboard.Bike, 6, 2000)
Attached = false
Dir = {}
if GetEntityModel(Ped) == `a_c_cat_01` then
stopAnim("creatures@cat@move", "idle_upp")
stopAnim("creatures@cat@move", "idle_dwn")
else
stopAnim("move_strafe@stealth", "idle")
end
end
Wait(1000)
end
hideText()
end)
end)
AddEventHandler('onResourceStop', function(r) if r ~= GetCurrentResourceName() then return end
hideText()
if DoesEntityExist(skateboard.Bike) then
DeleteVehicle(skateboard.Bike)
end
end)