From cd19ef1bcae2c4bc8a52b6330cb4983a1926a754 Mon Sep 17 00:00:00 2001 From: Jim Shield Date: Tue, 6 May 2025 22:23:30 +0100 Subject: [PATCH] Remove old files --- client.lua | 323 ------------------------------------------------- server.lua | 1 - skateboard.png | Bin 18771 -> 0 bytes 3 files changed, 324 deletions(-) delete mode 100644 client.lua delete mode 100644 server.lua delete mode 100644 skateboard.png diff --git a/client.lua b/client.lua deleted file mode 100644 index 3db037a..0000000 --- a/client.lua +++ /dev/null @@ -1,323 +0,0 @@ - -local skateboard, Dir, customCam, Attached, overSpeed = {}, {}, nil, false, nil - -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 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) - DeletePed(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 - local pedCoords = GetOffsetFromEntityInWorldCoords(Ped, 0.0, 0.5, -40.5) - skateboard.Bike = makeVeh("triBike3", vec4(pedCoords.x, pedCoords.y, pedCoords.z, 0.0)) - skateboard.Skate = makeProp({ prop = "v_res_skateboard", coords = vec4(pedCoords.x, pedCoords.y, pedCoords.z, 0.0) }, 1, 1) - while not DoesEntityExist(skateboard.Bike) or not DoesEntityExist(skateboard.Skate) do Wait(5) end - - SetEntityNoCollisionEntity(skateboard.Bike, Ped, false) - SetEntityNoCollisionEntity(skateboard.Skate, Ped, false) - - Wait(500) - - configureSkateboard(skateboard.Bike) - - SetEntityCompletelyDisableCollision(skateboard.Bike, true, true) - SetEntityCompletelyDisableCollision(skateboard.Skate, true, true) - - SetEntityVisible(skateboard.Bike, Config.System.Debug, 0) - - AttachEntityToEntity(skateboard.Skate, skateboard.Bike, GetPedBoneIndex(Ped, 28422), 0.0, 0.0, -0.60, 0.0, 0.0, 90.0, false, true, true, true, 1, true) - - skateboard.Driver = ClonePed(Ped, true, false, true) - SetEntityCoords(skateboard.Driver, pedCoords.x, pedCoords.y, pedCoords.z, true) - while not DoesEntityExist(skateboard.Driver) do Wait(0) end - --skateboard.Driver = makePed("S_M_M_AutoShop_01", vec4(pedCoords.x, pedCoords.y, pedCoords.z, 0.0), 0, 1, nil, nil) - SetEntityNoCollisionEntity(skateboard.Driver, Ped, false) - SetEntityCompletelyDisableCollision(skateboard.Driver, true, true) - - SetEnableHandcuffs(skateboard.Driver, true) - SetEntityInvincible(skateboard.Driver, true) - FreezeEntityPosition(skateboard.Driver, true) - - while not IsPedSittingInAnyVehicle(skateboard.Driver) do - SetEntityVisible(skateboard.Driver, Config.System.Debug, 0) - TaskWarpPedIntoVehicle(skateboard.Driver, skateboard.Bike, -1) - Wait(10) - end - - 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) - - DisableCamCollisionForEntity(skateboard.Bike) - DisableCamCollisionForEntity(skateboard.Skate) - DisableCamCollisionForEntity(skateboard.Driver) - SetVehicleDoorsLocked(skateboard.Bike, 10) - - 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, { - (Config.System.drawText == "gta" and "~INPUT_VEH_FLY_UNDERCARRIAGE~" or "[G]").." - "..Loc[Config.Lan].getoff, - (Config.System.drawText == "gta" and "~INPUT_VEH_HEADLIGHT~" or "[H]") .." - "..Loc[Config.Lan].lockcam, - }, "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) \ No newline at end of file diff --git a/server.lua b/server.lua deleted file mode 100644 index 6bd119f..0000000 --- a/server.lua +++ /dev/null @@ -1 +0,0 @@ -createUseableItem("skateboard", function(source, item) TriggerClientEvent("jim-skateboard:PickPlace", source) end) \ No newline at end of file diff --git a/skateboard.png b/skateboard.png deleted file mode 100644 index ee6c52674fa70285656b650c4228f772745ca093..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18771 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