diff --git a/resources/[Developer]/[Nordi]/kq_towing2-20250610T154151Z-1-001.zip b/resources/[Developer]/[Nordi]/kq_towing2-20250610T154151Z-1-001.zip deleted file mode 100644 index 44bdbb7ba..000000000 Binary files a/resources/[Developer]/[Nordi]/kq_towing2-20250610T154151Z-1-001.zip and /dev/null differ diff --git a/resources/[carscripts]/kq_towing2/.fxap b/resources/[carscripts]/kq_towing2/.fxap new file mode 100644 index 000000000..45a6c3bbb Binary files /dev/null and b/resources/[carscripts]/kq_towing2/.fxap differ diff --git a/resources/[carscripts]/kq_towing2/_installation_/INSTALLATION.md b/resources/[carscripts]/kq_towing2/_installation_/INSTALLATION.md new file mode 100644 index 000000000..ed32ae630 --- /dev/null +++ b/resources/[carscripts]/kq_towing2/_installation_/INSTALLATION.md @@ -0,0 +1,34 @@ +# KQ_TOWING2 INSTALLATION GUIDE + +This guide will provide step-by-step instructions on how to install and set up the KQ_TOWING2 script for FiveM. + +## Step 1: +After downloading the script, unzip the folder and place it in the `resources` directory on your FiveM server. + +## Step 2: +Add the script to your `server.cfg` file. Make sure that it's added **after** the framework of choice if using any. + +## Step 3: +Open the `config.lua` file in the script folder and make sure that the correct framework is enabled. (If using ESX or QBCore) + +## Framework specific setup + +### ESX +- Import the SQL file located inside the `/esx` folder to your database to add the items or change the item names in the config to match existing items. + +### QBCore +- Add the items located in the `/qb` folder to your qb-core shared.lua file `qb-core/shared/items.lua` or `qb-core/shared.lua` or change the item names in the config to match existing items. + +### QBOX / OX_INVENTORY (When not using ESX or QBCore) +- Add the items located in the `/ox` folder to your ox_inventory items list, and make sure that `kq_towing2` starts BEFORE ox_inventory + +### Extra +- If using an anti-cheat make sure to whitelist a prop: `prop_roadpole_01a`. This prop is required for the rope to work properly + +## Done +Enjoy the script + + +- https://kuzquality.com/ +- https://discord.gg/fZsyam7Rvz +- https://www.youtube.com/@KuzQuality diff --git a/resources/[carscripts]/kq_towing2/_installation_/esx/kq_towing2.sql b/resources/[carscripts]/kq_towing2/_installation_/esx/kq_towing2.sql new file mode 100644 index 000000000..4cdccb4fa --- /dev/null +++ b/resources/[carscripts]/kq_towing2/_installation_/esx/kq_towing2.sql @@ -0,0 +1,2 @@ +INSERT INTO `items` (`name`, `label`, `weight`, `rare`, `can_remove`) VALUES ('kq_tow_rope', 'Towing rope', 2, 0, 1); +INSERT INTO `items` (`name`, `label`, `weight`, `rare`, `can_remove`) VALUES ('kq_winch', 'Car winch', 4, 0, 1); \ No newline at end of file diff --git a/resources/[carscripts]/kq_towing2/_installation_/item icons/kq_tow_rope.png b/resources/[carscripts]/kq_towing2/_installation_/item icons/kq_tow_rope.png new file mode 100644 index 000000000..b4df4f461 Binary files /dev/null and b/resources/[carscripts]/kq_towing2/_installation_/item icons/kq_tow_rope.png differ diff --git a/resources/[carscripts]/kq_towing2/_installation_/item icons/kq_winch.png b/resources/[carscripts]/kq_towing2/_installation_/item icons/kq_winch.png new file mode 100644 index 000000000..f97131cec Binary files /dev/null and b/resources/[carscripts]/kq_towing2/_installation_/item icons/kq_winch.png differ diff --git a/resources/[carscripts]/kq_towing2/_installation_/ox/items.txt b/resources/[carscripts]/kq_towing2/_installation_/ox/items.txt new file mode 100644 index 000000000..3ed99d61e --- /dev/null +++ b/resources/[carscripts]/kq_towing2/_installation_/ox/items.txt @@ -0,0 +1,22 @@ + + ["kq_tow_rope"] = { + label = "Towing rope", + weight = 2000, + stack = true, + close = true, + consume = 0, + server = { + export = 'kq_towing2.UseTowRope', + }, + }, + + ["kq_winch"] = { + label = "Car winch", + weight = 4000, + stack = true, + close = true, + consume = 0, + server = { + export = 'kq_towing2.UseWinch', + }, + }, diff --git a/resources/[carscripts]/kq_towing2/_installation_/qb/items.txt b/resources/[carscripts]/kq_towing2/_installation_/qb/items.txt new file mode 100644 index 000000000..822ef7810 --- /dev/null +++ b/resources/[carscripts]/kq_towing2/_installation_/qb/items.txt @@ -0,0 +1,3 @@ + + ["kq_tow_rope"] = {["name"] = "kq_tow_rope", ["label"] = "Towing rope", ["weight"] = 2000, ["type"] = "item", ["image"] = "kq_tow_rope.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Rope used for towing vehicles"}, + ["kq_winch"] = {["name"] = "kq_winch", ["label"] = "Car winch", ["weight"] = 4000, ["type"] = "item", ["image"] = "kq_winch.png", ["unique"] = false, ["useable"] = true, ["shouldClose"] = true, ["combinable"] = nil, ["description"] = "Car winch made to winch heavy vehicles"}, diff --git a/resources/[carscripts]/kq_towing2/client/cache.lua b/resources/[carscripts]/kq_towing2/client/cache.lua new file mode 100644 index 000000000..74030c16f Binary files /dev/null and b/resources/[carscripts]/kq_towing2/client/cache.lua differ diff --git a/resources/[carscripts]/kq_towing2/client/client.lua b/resources/[carscripts]/kq_towing2/client/client.lua new file mode 100644 index 000000000..150179d43 Binary files /dev/null and b/resources/[carscripts]/kq_towing2/client/client.lua differ diff --git a/resources/[carscripts]/kq_towing2/client/editable/editable.lua b/resources/[carscripts]/kq_towing2/client/editable/editable.lua new file mode 100644 index 000000000..f9eab52ce --- /dev/null +++ b/resources/[carscripts]/kq_towing2/client/editable/editable.lua @@ -0,0 +1,131 @@ +-- This function is responsible for drawing all the 3d texts ('Press [E] to take off the wheel' e.g) +function Draw3DText(coords, textInput, scaleX) + scaleX = scaleX * Config.textScale + local px, py, pz = table.unpack(GetGameplayCamCoords()) + local dist = GetDistanceBetweenCoords(px, py, pz, coords, true) + local scale = (1 / dist) * 20 + local fov = (1 / GetGameplayCamFov()) * 100 + scale = scale * fov + + SetTextScale(scaleX * scale, scaleX * scale) + SetTextFont(Config.textFont or 4) + SetTextProportional(1) + SetTextDropshadow(1, 1, 1, 1, 255) + SetTextEdge(2, 0, 0, 0, 150) + SetTextDropShadow() + SetTextOutline() + SetTextEntry("STRING") + SetTextCentre(1) + AddTextComponentString(textInput) + SetDrawOrigin(coords, 0) + DrawText(0.0, 0.0) + ClearDrawOrigin() +end + +function KeybindTip(message) + SetTextComponentFormat("STRING") + AddTextComponentString(message) + EndTextCommandDisplayHelp(0, 0, 0, 200) +end + +function IsPlayerUnreachable() + local playerPed = PlayerPedId() + return IsPedInAnyVehicle(playerPed) or IsPedRagdoll(playerPed) or IsEntityDead(playerPed) +end + +function RemoveHandWeapons() + SetCurrentPedWeapon(PlayerPedId(), -1569615261, true) +end + +function DisableInputs() + -- https://docs.fivem.net/docs/game-references/controls/#controls + local inputs = {14, 15, 16, 17, 23, 24, 25, 44, 45, 140, 141, 142, 143, 261, 262, 263, 264} + + for k, input in pairs(inputs) do + DisableControlAction(0, input, true) + end +end + +function IsVehicleLocked(entity) + if not IsEntityAVehicle(entity) then + return false + end + + local lockStatus = GetVehicleDoorLockStatus(entity) + return lockStatus == 2 or lockStatus == 3 or lockStatus == 4 or lockStatus == 10 +end + +function PlayAnim(dict, anim, flag, duration) + Citizen.CreateThread(function() + RequestAnimDict(dict) + local timeout = 0 + while not HasAnimDictLoaded(dict) do + Citizen.Wait(50) + timeout = timeout + 1 + if timeout > 100 then + return + end + end + TaskPlayAnim(PlayerPedId(), dict, anim, 1.5, 1.0, duration or -1, flag or 1, 0, false, false, false) + RemoveAnimDict(dict) + end) +end + + +function ShowTooltip(message) + SetTextComponentFormat("STRING") + AddTextComponentString(message) + EndTextCommandDisplayHelp(0, 0, 1, -1) +end + + +CURRENT_KEYBIND_TIP = nil + +function SetKeybindTip(message) + if CURRENT_KEYBIND_TIP == message then + return + end + CURRENT_KEYBIND_TIP = message + + Citizen.CreateThread(function() + while CURRENT_KEYBIND_TIP == message do + local sleep = 100 + if CURRENT_KEYBIND_TIP then + sleep = 1 + ShowKeybindTip(CURRENT_KEYBIND_TIP) + end + Citizen.Wait(sleep) + end + end) +end + +function ResetKeybindTip() + if CURRENT_KEYBIND_TIP ~= nil then + CURRENT_KEYBIND_TIP = nil + end +end + +function ShowKeybindTip(message) + SetTextComponentFormat("STRING") + AddTextComponentString(message) + + EndTextCommandDisplayHelp(0, 0, 0, -1) +end + +RegisterNetEvent('kq_towing:client:notify') +AddEventHandler('kq_towing:client:notify', function(message) + Notify(message) +end) + +function Notify(message) + SetTextComponentFormat("STRING") + AddTextComponentString(message) + EndTextCommandDisplayHelp(0, 0, 0, 2000) +end + +-- Call this event to cancel the placement of a rope +RegisterNetEvent('kq_towing:client:cancelPlacement') +AddEventHandler('kq_towing:client:cancelPlacement', function() + PLACING_ROPE = false +end) + diff --git a/resources/[carscripts]/kq_towing2/client/functions.lua b/resources/[carscripts]/kq_towing2/client/functions.lua new file mode 100644 index 000000000..dfc3d2b56 Binary files /dev/null and b/resources/[carscripts]/kq_towing2/client/functions.lua differ diff --git a/resources/[carscripts]/kq_towing2/client/inputs.lua b/resources/[carscripts]/kq_towing2/client/inputs.lua new file mode 100644 index 000000000..b9135c2b5 Binary files /dev/null and b/resources/[carscripts]/kq_towing2/client/inputs.lua differ diff --git a/resources/[carscripts]/kq_towing2/client/raycast.lua b/resources/[carscripts]/kq_towing2/client/raycast.lua new file mode 100644 index 000000000..29103825d Binary files /dev/null and b/resources/[carscripts]/kq_towing2/client/raycast.lua differ diff --git a/resources/[carscripts]/kq_towing2/client/removing.lua b/resources/[carscripts]/kq_towing2/client/removing.lua new file mode 100644 index 000000000..931a5b5f7 Binary files /dev/null and b/resources/[carscripts]/kq_towing2/client/removing.lua differ diff --git a/resources/[carscripts]/kq_towing2/client/ropes.lua b/resources/[carscripts]/kq_towing2/client/ropes.lua new file mode 100644 index 000000000..b42e237a7 Binary files /dev/null and b/resources/[carscripts]/kq_towing2/client/ropes.lua differ diff --git a/resources/[carscripts]/kq_towing2/client/towing.lua b/resources/[carscripts]/kq_towing2/client/towing.lua new file mode 100644 index 000000000..af95c7628 Binary files /dev/null and b/resources/[carscripts]/kq_towing2/client/towing.lua differ diff --git a/resources/[carscripts]/kq_towing2/client/winch.lua b/resources/[carscripts]/kq_towing2/client/winch.lua new file mode 100644 index 000000000..7ac1ea4b6 Binary files /dev/null and b/resources/[carscripts]/kq_towing2/client/winch.lua differ diff --git a/resources/[carscripts]/kq_towing2/config.lua b/resources/[carscripts]/kq_towing2/config.lua new file mode 100644 index 000000000..816380e6b --- /dev/null +++ b/resources/[carscripts]/kq_towing2/config.lua @@ -0,0 +1,176 @@ +Config = {} + +Config.debug = false + +------------------------------------------------- +--- FRAMEWORK SETTINGS +------------------------------------------------- +Config.esxSettings = { + enabled = false, + -- Whether or not to use the new ESX export method + useNewESXExport = true, + + -- Enable this if you're using a very old version of ESX + oldEsx = false, +} + +Config.qbSettings = { + enabled = false, + -- Whether or not to use the new QBCore export method + useNewQBExport = true, +} + +-- Only enable when NOT using ESX or QBCore +Config.oxInventory = { + enabled = false, +} + +-- Item config +Config.items = { + towingRope = 'kq_tow_rope', + winch = 'kq_winch', +} + +-- Commands used to trigger rope placements +Config.commands = { + towing = { + enabled = true, + command = 'towrope', + }, + winch = { + enabled = true, + command = 'winch', + } +} + +-- Max speed (in MPH) of vehicles which are towing or being towed (set to -1 to disable speed limiting) +Config.maxTowingSpeed = 50 + +-- Time between each rope refreshing +-- Time in seconds +Config.ropeRefreshTime = 10 + +-- Makes towing a vehicle with no player in the back easier. The car will steer and brake automatically when towed +Config.toweeAutopilot = true + +-- If script is used in standalone mode. Make sure to disable all the job whitelists! +-- Job whitelist +Config.jobWhitelist = { + towing = { + enabled = false, + jobs = { + 'mechanic', + 'police', + 'marshal', + + + }, + }, + winch = { + enabled = false, + jobs = { + 'mechanic', + 'police', + 'marshal', + }, + }, +} + +-- Whether to disallow attaching ropes to vehicles which are locked +Config.disallowLockedVehicles = false + +-- The MAXIMUM length of a tow rope +Config.ropeLength = 10.0 + +-- The MAXIMUM length of a winch +Config.winchLength = 16.0 + + +-- Props which will be visible in players hands upon usage of the rope/winch item (or command) +Config.ropeProps = { + towing = { + prop = 'prop_rope_family_3', + bone = 4089, + offset = vector3(0.26, -0.11, 0.0), + rotation = vector3(0.0, -7.0, 200.0), + }, + winch = { + prop = 'prop_stag_do_rope', + bone = 4089, + offset = vector3(0.24, -0.11, 0.0), + rotation = vector3(0.0, -7.0, 200.0), + } +} + +-- '3d-text', 'top-left', 'help-text' +Config.inputType = '3d-text' + +-- Scale of the 3d text +Config.textScale = 1 + +-- Font used for the 3d text +Config.textFont = 4 + +-- Scale used for the 3d text +Config.textScale = 1.0 + +-- https://docs.fivem.net/docs/game-references/controls/ +-- Use the input index for the "input" value +Config.keybinds = { + confirm = { + label = 'E', + name = 'INPUT_PICKUP', + input = 38, + }, + winch = { + label = 'Left Shift', + name = 'INPUT_SPRINT', + input = 21, + }, + remove = { + label = 'E', + name = 'INPUT_PICKUP', + input = 38, + duration = 3000, + }, + cancel = { + label = 'X', + name = 'INPUT_VEH_DUCK', + input = 73, + }, +} + +-- Classes of which vehicles may not be towed or tow another vehicle +Config.blacklistedClasses = { + 8, -- Motorcycles + 13, -- Cycles + 14, -- Boats + 15, -- Helicopters + 16, -- Planes + 21, -- Trains +} + +--[[ All vehicle classes + 0: Compacts + 1: Sedans + 2: SUVs + 3: Coupes + 4: Muscle + 5: Sports Classics + 6: Sports + 7: Super + 8: Motorcycles + 9: Off-road + 10: Industrial + 11: Utility + 12: Vans + 13: Cycles + 14: Boats + 15: Helicopters + 16: Planes + 17: Service + 18: Emergency + 19: Military + 20: Commercial + 21: Trains +]] diff --git a/resources/[carscripts]/kq_towing2/fxmanifest.lua b/resources/[carscripts]/kq_towing2/fxmanifest.lua new file mode 100644 index 000000000..e9bb809c0 --- /dev/null +++ b/resources/[carscripts]/kq_towing2/fxmanifest.lua @@ -0,0 +1,52 @@ +fx_version 'cerulean' +games { 'gta5' } +lua54 'yes' + +author 'KuzQuality | Kuzkay' +description 'Towing & winching made by KuzQuality' +version '2.3.2' + + +-- +-- Server +-- + +server_scripts { + 'locale.lua', + 'mixed/constants.lua', + 'config.lua', + 'server/server.lua', + 'server/editable/esx.lua', + 'server/editable/qb.lua', + 'server/editable/ox.lua', + 'server/editable/editable.lua', +} + +-- +-- Client +-- + +client_scripts { + 'config.lua', + 'locale.lua', + 'mixed/constants.lua', + 'client/editable/editable.lua', + 'client/cache.lua', + 'client/inputs.lua', + 'client/removing.lua', + 'client/functions.lua', + 'client/raycast.lua', + 'client/client.lua', + 'client/ropes.lua', + 'client/winch.lua', + 'client/towing.lua', +} + +escrow_ignore { + 'config.lua', + 'locale.lua', + 'client/editable/*.lua', + 'server/editable/*.lua', +} + +dependency '/assetpacks' \ No newline at end of file diff --git a/resources/[carscripts]/kq_towing2/locale.lua b/resources/[carscripts]/kq_towing2/locale.lua new file mode 100644 index 000000000..2af56611a --- /dev/null +++ b/resources/[carscripts]/kq_towing2/locale.lua @@ -0,0 +1,24 @@ +-- Only edit the value on the right. Leave the value between the square brackets as is. + +Locale = { + ['~w~Press ~g~[~w~{INPUT}~g~]~w~ to attach the rope'] = '~w~Press ~g~[~w~{INPUT}~g~]~w~ to attach the rope', + ['~w~Press ~{INPUT}~ to attach the rope'] = '~w~Press ~{INPUT}~ to attach the rope', + + ['~w~Press ~g~[~w~{INPUT}~g~]~w~ to tie the rope'] = '~w~Press ~g~[~w~{INPUT}~g~]~w~ to tie the rope', + ['~w~Press ~{INPUT}~ to tie the rope'] = '~w~Press ~{INPUT}~ to tie the rope', + + ['Press ~{INPUT}~ to cancel'] = 'Press ~{INPUT}~ to cancel', + + ['~r~Too far'] = '~r~Too far', + ['~y~You can not tie the rope to the ground'] = '~y~You can not tie the rope to the ground', + ['~r~This vehicle can not be towed'] = '~r~This vehicle can not be towed', + + ['~w~Hold ~r~[~w~{INPUT}~r~]~w~ to detach the rope'] = '~w~Hold ~r~[~w~{INPUT}~r~]~w~ to detach the rope', + ['~w~Hold ~{INPUT}~ to detach the rope'] = '~w~Hold ~{INPUT}~ to detach the rope', + + ['~w~Hold ~{INPUT}~ to winch'] = '~w~Hold ~{INPUT}~ to winch', + ['~w~Release ~{INPUT}~ to stop winching'] = '~w~Release ~{INPUT}~ to stop winching', + + ['~r~You may not use this item'] = '~r~You may not use this item', + +} diff --git a/resources/[carscripts]/kq_towing2/mixed/constants.lua b/resources/[carscripts]/kq_towing2/mixed/constants.lua new file mode 100644 index 000000000..50eb5dd0c Binary files /dev/null and b/resources/[carscripts]/kq_towing2/mixed/constants.lua differ diff --git a/resources/[carscripts]/kq_towing2/server/editable/editable.lua b/resources/[carscripts]/kq_towing2/server/editable/editable.lua new file mode 100644 index 000000000..4fd67eb36 --- /dev/null +++ b/resources/[carscripts]/kq_towing2/server/editable/editable.lua @@ -0,0 +1,22 @@ + +if Config.commands.towing.enabled then + RegisterCommand(Config.commands.towing.command, function(source) + if Config.jobWhitelist.towing.enabled then + if not IsPlayerJobWhitelisted(source, Config.jobWhitelist.towing.jobs) then + return TriggerClientEvent('kq_towing:client:notify', source, L('~r~You may not use this item')) + end + end + TriggerClientEvent('kq_towing:client:startRope', source, false, false) + end) +end + +if Config.commands.winch.enabled then + RegisterCommand(Config.commands.winch.command, function(source) + if Config.jobWhitelist.winch.enabled then + if not IsPlayerJobWhitelisted(source, Config.jobWhitelist.winch.jobs) then + return TriggerClientEvent('kq_towing:client:notify', source, L('~r~You may not use this item')) + end + end + TriggerClientEvent('kq_towing:client:startRope', source, true, false) + end) +end diff --git a/resources/[carscripts]/kq_towing2/server/editable/esx.lua b/resources/[carscripts]/kq_towing2/server/editable/esx.lua new file mode 100644 index 000000000..ce592e1c3 --- /dev/null +++ b/resources/[carscripts]/kq_towing2/server/editable/esx.lua @@ -0,0 +1,85 @@ +if Config.esxSettings.enabled then + ESX = nil + + if Config.esxSettings.useNewESXExport then + ESX = exports['es_extended']:getSharedObject() + else + TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end) + end + + ESX.RegisterUsableItem(Config.items.towingRope, function(source) + if Config.jobWhitelist.towing.enabled then + if not IsPlayerJobWhitelisted(source, Config.jobWhitelist.towing.jobs) then + return TriggerClientEvent('kq_towing:client:notify', source, L('~r~You may not use this item')) + end + end + TriggerClientEvent('kq_towing:client:startRope', source, false, true) + end) + + ESX.RegisterUsableItem(Config.items.winch, function(source) + if Config.jobWhitelist.winch.enabled then + if not IsPlayerJobWhitelisted(source, Config.jobWhitelist.winch.jobs) then + return TriggerClientEvent('kq_towing:client:notify', source, L('~r~You may not use this item')) + end + end + TriggerClientEvent('kq_towing:client:startRope', source, true, true) + end) + + function IsPlayerJobWhitelisted(player, jobs) + local xPlayer = ESX.GetPlayerFromId(player) + if not xPlayer then + return false + end + local job = xPlayer.getJob() + + return Contains(jobs, job.name) + end + + function GetPlayerItemData(player, item) + local xPlayer = ESX.GetPlayerFromId(player) + + return xPlayer.getInventoryItem(item) + end + + function GetPlayerItemCount(player, item) + local data = GetPlayerItemData(player, item) + if not data then + return 0 + end + return data.count or data.amount or 0 + end + + function RemovePlayerItem(player, item, amount) + if GetPlayerItemCount(player, item) < amount then + return false + end + + local xPlayer = ESX.GetPlayerFromId(player) + xPlayer.removeInventoryItem(item, amount or 1) + + return true + end + + function AddPlayerItem(player, item, amount) + local xPlayer = ESX.GetPlayerFromId(tonumber(player)) + + -- Support for old esx which didn't use weight for inventory size but rather item limit per item type + if Config.esxSettings.oldEsx then + local esxItem = xPlayer.getInventoryItem(item) + + if esxItem.limit == -1 or (esxItem.count + amount) <= esxItem.limit then + xPlayer.addInventoryItem(item, amount or 1) + return true + else + return false + end + else + if xPlayer.canCarryItem(item, amount or 1) then + xPlayer.addInventoryItem(item, amount or 1) + return true + else + return false + end + end + end +end diff --git a/resources/[carscripts]/kq_towing2/server/editable/ox.lua b/resources/[carscripts]/kq_towing2/server/editable/ox.lua new file mode 100644 index 000000000..e3b07ee49 --- /dev/null +++ b/resources/[carscripts]/kq_towing2/server/editable/ox.lua @@ -0,0 +1,35 @@ +if Config.oxInventory.enabled then + + -- Usable items + -- Export used for ox_inventory + exports('UseTowRope', function(event, item, inventory) + if event == 'usingItem' then + local player = inventory.id + TriggerClientEvent('kq_towing:client:startRope', player, false, true) + return true + end + end) + + exports('UseWinch', function(event, item, inventory) + if event == 'usingItem' then + local player = inventory.id + TriggerClientEvent('kq_towing:client:startRope', player, true, true) + return true + end + end) + + + function IsPlayerJobWhitelisted(player, jobs) + return true + end + + function AddPlayerItem(player, item, amount, meta) + local success, response = exports['ox_inventory']:AddItem(player, item, amount or 1, meta) + return success + end + + function RemovePlayerItem(player, item, amount) + local success, response = exports['ox_inventory']:RemoveItem(player, item, amount or 1) + return success + end +end diff --git a/resources/[carscripts]/kq_towing2/server/editable/qb.lua b/resources/[carscripts]/kq_towing2/server/editable/qb.lua new file mode 100644 index 000000000..d11fe470a --- /dev/null +++ b/resources/[carscripts]/kq_towing2/server/editable/qb.lua @@ -0,0 +1,46 @@ +if Config.qbSettings.enabled then + + if Config.qbSettings.useNewQBExport then + QBCore = exports['qb-core']:GetCoreObject() + end + + QBCore.Functions.CreateUseableItem(Config.items.towingRope, function(source) + if Config.jobWhitelist.towing.enabled then + if not IsPlayerJobWhitelisted(source, Config.jobWhitelist.towing.jobs) then + return TriggerClientEvent('kq_towing:client:notify', source, L('~r~You may not use this item')) + end + end + TriggerClientEvent('kq_towing:client:startRope', source, false, true) + end) + + QBCore.Functions.CreateUseableItem(Config.items.winch, function(source) + if Config.jobWhitelist.winch.enabled then + if not IsPlayerJobWhitelisted(source, Config.jobWhitelist.winch.jobs) then + return TriggerClientEvent('kq_towing:client:notify', source, L('~r~You may not use this item')) + end + end + TriggerClientEvent('kq_towing:client:startRope', source, true, true) + end) + + + function IsPlayerJobWhitelisted(player, jobs) + local xPlayer = QBCore.Functions.GetPlayer(player) + if not xPlayer then + return false + end + + local job = xPlayer.PlayerData.job + + return Contains(jobs, job.name) + end + + function RemovePlayerItem(player, item, amount) + local xPlayer = QBCore.Functions.GetPlayer(tonumber(player)) + return xPlayer.Functions.RemoveItem(item, amount or 1) + end + + function AddPlayerItem(player, item, amount) + local xPlayer = QBCore.Functions.GetPlayer(tonumber(player)) + return xPlayer.Functions.AddItem(item, amount or 1) + end +end diff --git a/resources/[carscripts]/kq_towing2/server/server.lua b/resources/[carscripts]/kq_towing2/server/server.lua new file mode 100644 index 000000000..f0db4a61b Binary files /dev/null and b/resources/[carscripts]/kq_towing2/server/server.lua differ diff --git a/resources/[carscripts]/rtx_vehiclemenu/.fxap b/resources/[carscripts]/rtx_vehiclemenu/.fxap deleted file mode 100644 index f0e641440..000000000 Binary files a/resources/[carscripts]/rtx_vehiclemenu/.fxap and /dev/null differ diff --git a/resources/[carscripts]/rtx_vehiclemenu/Readme.txt b/resources/[carscripts]/rtx_vehiclemenu/Readme.txt deleted file mode 100644 index c268a92db..000000000 --- a/resources/[carscripts]/rtx_vehiclemenu/Readme.txt +++ /dev/null @@ -1,15 +0,0 @@ -Thank you for purchasing rtx_vehiclemenu we're grateful for your support. If you'd ever have a question and / or need our help, please reach out to us by sending an email or go ahead and create a ticket on our discord: https://discord.gg/P6KdaDpgAk - - -Install instructions: -1. Put rtx_vehiclemenu folder to your resources -2. Open config.lua file -3. Configure your config.lua to your preferences -4. Put rtx_vehiclemenu to the server.cfg - -License agreement / Terms of Service -1. Any purchase is non-refundable. -2. Each product is to be used on a singular server, with the exception of a test server. -3. Any form of redistribution of our content is considered copyright infringement. -4. If any of these rules are broken, legal actions can be taken. -© 2024 RTX Development, all rights reserved. \ No newline at end of file diff --git a/resources/[carscripts]/rtx_vehiclemenu/client/main.lua b/resources/[carscripts]/rtx_vehiclemenu/client/main.lua deleted file mode 100644 index 3f768da58..000000000 Binary files a/resources/[carscripts]/rtx_vehiclemenu/client/main.lua and /dev/null differ diff --git a/resources/[carscripts]/rtx_vehiclemenu/config.lua b/resources/[carscripts]/rtx_vehiclemenu/config.lua deleted file mode 100644 index a4b687c0c..000000000 --- a/resources/[carscripts]/rtx_vehiclemenu/config.lua +++ /dev/null @@ -1,112 +0,0 @@ -Config = {} - -Config.Language = "German" - -Config.VehicleMenuResetSettingsCommand = "vehiclemenureset" -- command for reset vehicle menu settings - -Config.VehicleMenuOpenViaBind = true -- this will enable vehicle menu show via bind - -Config.VehicleMenuOpenViaBindKey = "O" -- vehicle menu show key, only work if you enable Config.VehicleMenuOpenViaBind - -Config.VehicleMenuOpenViaCommand = true -- this will enable vehicle menu show via commad - -Config.VehicleMenuOpenViaCommandName = "vehiclemenu" -- vehicle menu show command, only work if you enable Config.VehicleMenuOpenViaCommand - -Config.VehicleMenuOpenViaEvent = false -- this will enable vehicle menu show via event for show vehicle menu TriggerEvent("rtx_vehiclemenu:ShowVehicleMenu", true) for hide vehicle menu TriggerEvent("rtx_vehiclemenu:ShowVehicleMenu", false) - -Config.VehicleMenuOpenViaEventName = "rtx_vehiclemenu:ShowVehicleMenu" -- vehicle menu show event, only work if you enable Config.VehicleMenuOpenViaEvent - -Config.VehicleMenuForEveryVehicle = true -- if you enable this, vehicle menu will work on every vehicles, if its disabled, it will work only in vehicle menu which is writed in Config.VehicleMenuVehicles. - -Config.VehicleMenuVehicleBlacklist = false -- if you enable this, vehicle menu will work not for vehicles which is in blacklisted config, you need put vehicles in Config.VehicleMenuBlacklistedVehicles. - -Config.VehicleMenuForOnlySpecifiedTypeOfVehicle = false --- if you enable this, vehicle menu will work only for specified vehicle (Vehicle Class) you need enable class in Config.VehicleMenuVehiclesClasses - -Config.VehicleMenuEnableVehicleDriveWhenPlayerIsInMenu = true -- enable this if you want to be able to still drive the vehicle while you are in the menu - -Config.VehicleMenuEnableVehicleDriveWhenPlayerIsInMenuDisableCamera = true --turn this on if you want to disable camera movement when the player has the menu open - -Config.DefaultVehicleMenuSettings = {color = "#ff66ff", scale = 1.0, position = {top = 50, left = 70}} --scale for default settings min is 0.5, max is 1.5 - -Config.VehicleMenuWaterDuration = 5000 -- duration of vehicle water - -Config.VehicleMenuDisableExtrasMenu = false -- enable this feature if you don't want the player to be able to switch extras - -Config.VehicleMenuDisableSeatsChangeMenu = false -- enable this feature if you don't want the player to be able to switch seats - -Config.VehicleMenuVehicles = { - { - vehiclename = "bullet", -- vehicle name - }, - { - vehiclename = "infernus", -- vehicle name - }, -} - -Config.VehicleMenuBlacklistedVehicles = { - { - vehiclename = "rhino", -- vehicle name - }, - { - vehiclename = "thruster", -- vehicle name - }, -} - -Config.VehicleMenuVehiclesClasses = { - [0] = true, - [1] = true, - [2] = true, - [3] = true, - [4] = true, - [5] = true, - [6] = true, - [7] = true, - [8] = true, - [9] = true, - [10] = true, - [11] = true, - [12] = true, - [13] = false, - [14] = false, - [15] = false, - [16] = false, - [17] = true, - [18] = true, - [19] = true, - [20] = true, - [21] = true, - [22] = true, -} - -function Notify(text) - exports["rtx_notify"]:Notify("Vehicle", text, 5000, "info") -- if you get error in this line its because you dont use our notify system buy it here https://rtx.tebex.io/package/5402098 or you can use some other notify system just replace this notify line with your notify system - --exports["mythic_notify"]:SendAlert("inform", text, 5000) -end - -function VehicleBindAction(vehicle) - -- here you can insert your own action what happens when the player presses the bind button in the vehicle menu. (for close menu use CloseVehicleMenu function) - CloseVehicleMenu() - TriggerEvent("rtx_radio:ShowRadio", true) -end - -function VehicleLockAction(vehicle) - -- here you can insert your own vehicle lock function if you use your own lock system. - if GetVehicleDoorLockStatus(vehicle) == 1 then - SetVehicleDoorsLocked(vehicle, 2) - Notify(Language[Config.Language]["vehiclelocked"]) - else - SetVehicleDoorsLocked(vehicle, 1) - Notify(Language[Config.Language]["vehicleunlocked"]) - end -end - -function VehicleEngineAction(vehicle) - -- here you can insert your own vehicle engine function. - if GetIsVehicleEngineRunning(vehicle) then - SetVehicleEngineOn(vehicle, false, true, true) - Notify(Language[Config.Language]["engineonoff"]) - else - SetVehicleEngineOn(vehicle, true, true, true) - Notify(Language[Config.Language]["engineon"]) - end -end \ No newline at end of file diff --git a/resources/[carscripts]/rtx_vehiclemenu/fxmanifest.lua b/resources/[carscripts]/rtx_vehiclemenu/fxmanifest.lua deleted file mode 100644 index c342e7025..000000000 --- a/resources/[carscripts]/rtx_vehiclemenu/fxmanifest.lua +++ /dev/null @@ -1,38 +0,0 @@ -fx_version 'cerulean' - -game 'gta5' - -description 'RTX VEHICLE MENU' - -version '10.0' - -server_scripts { - 'config.lua', - 'language/main.lua', - 'server/main.lua' -} - -client_scripts { - 'config.lua', - 'language/main.lua', - 'client/main.lua' -} - -files { - 'html/ui.html', - 'html/styles.css', - 'html/scripts.js', - 'html/BebasNeueBold.ttf', - 'html/img/*.svg' -} - -ui_page 'html/ui.html' - - -lua54 'yes' - -escrow_ignore { - 'config.lua', - 'language/main.lua' -} -dependency '/assetpacks' \ No newline at end of file diff --git a/resources/[carscripts]/rtx_vehiclemenu/html/BebasNeueBold.ttf b/resources/[carscripts]/rtx_vehiclemenu/html/BebasNeueBold.ttf deleted file mode 100644 index 45268ef03..000000000 Binary files a/resources/[carscripts]/rtx_vehiclemenu/html/BebasNeueBold.ttf and /dev/null differ diff --git a/resources/[carscripts]/rtx_vehiclemenu/html/debounce.min.js b/resources/[carscripts]/rtx_vehiclemenu/html/debounce.min.js deleted file mode 100644 index 648fe5d3c..000000000 --- a/resources/[carscripts]/rtx_vehiclemenu/html/debounce.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - * jQuery throttle / debounce - v1.1 - 3/7/2010 - * http://benalman.com/projects/jquery-throttle-debounce-plugin/ - * - * Copyright (c) 2010 "Cowboy" Ben Alman - * Dual licensed under the MIT and GPL licenses. - * http://benalman.com/about/license/ - */ -(function(b,c){var $=b.jQuery||b.Cowboy||(b.Cowboy={}),a;$.throttle=a=function(e,f,j,i){var h,d=0;if(typeof f!=="boolean"){i=j;j=f;f=c}function g(){var o=this,m=+new Date()-d,n=arguments;function l(){d=+new Date();j.apply(o,n)}function k(){h=c}if(i&&!h){l()}h&&clearTimeout(h);if(i===c&&m>e){l()}else{if(f!==true){h=setTimeout(i?k:l,i===c?e-m:e)}}}if($.guid){g.guid=j.guid=j.guid||$.guid++}return g};$.debounce=function(d,e,f){return f===c?a(d,e,false):a(d,f,e!==false)}})(this); diff --git a/resources/[carscripts]/rtx_vehiclemenu/html/img/close.svg b/resources/[carscripts]/rtx_vehiclemenu/html/img/close.svg deleted file mode 100644 index da3608259..000000000 --- a/resources/[carscripts]/rtx_vehiclemenu/html/img/close.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/[carscripts]/rtx_vehiclemenu/html/img/doors.svg b/resources/[carscripts]/rtx_vehiclemenu/html/img/doors.svg deleted file mode 100644 index 8768015e7..000000000 --- a/resources/[carscripts]/rtx_vehiclemenu/html/img/doors.svg +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/[carscripts]/rtx_vehiclemenu/html/img/lights.svg b/resources/[carscripts]/rtx_vehiclemenu/html/img/lights.svg deleted file mode 100644 index 7f8a9ed19..000000000 --- a/resources/[carscripts]/rtx_vehiclemenu/html/img/lights.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/[carscripts]/rtx_vehiclemenu/html/img/lightsh.svg b/resources/[carscripts]/rtx_vehiclemenu/html/img/lightsh.svg deleted file mode 100644 index 73635a3d1..000000000 --- a/resources/[carscripts]/rtx_vehiclemenu/html/img/lightsh.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/[carscripts]/rtx_vehiclemenu/html/img/seats.svg b/resources/[carscripts]/rtx_vehiclemenu/html/img/seats.svg deleted file mode 100644 index a24cd1592..000000000 --- a/resources/[carscripts]/rtx_vehiclemenu/html/img/seats.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/[carscripts]/rtx_vehiclemenu/html/img/settings.svg b/resources/[carscripts]/rtx_vehiclemenu/html/img/settings.svg deleted file mode 100644 index 8d3c2258d..000000000 --- a/resources/[carscripts]/rtx_vehiclemenu/html/img/settings.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/[carscripts]/rtx_vehiclemenu/html/img/water.svg b/resources/[carscripts]/rtx_vehiclemenu/html/img/water.svg deleted file mode 100644 index e146e12b4..000000000 --- a/resources/[carscripts]/rtx_vehiclemenu/html/img/water.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/[carscripts]/rtx_vehiclemenu/html/img/windows.svg b/resources/[carscripts]/rtx_vehiclemenu/html/img/windows.svg deleted file mode 100644 index c72df78a6..000000000 --- a/resources/[carscripts]/rtx_vehiclemenu/html/img/windows.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/[carscripts]/rtx_vehiclemenu/html/scripts.js b/resources/[carscripts]/rtx_vehiclemenu/html/scripts.js deleted file mode 100644 index 36004eb6f..000000000 --- a/resources/[carscripts]/rtx_vehiclemenu/html/scripts.js +++ /dev/null @@ -1,466 +0,0 @@ -var vehiclemenuresourcename = "rtx_vehiclemenu"; - -var ineditmenu = "false"; - -$(function () { - var currentscale = 1.0; - if (localStorage.default == "false") { - } else { - localStorage.scale = 1.0; - localStorage.color = "#ff66ff"; - } - - let defaultValues = {vehiclemenutop: "50", vehiclemenuleft: "70", scale: "1.0", color: "#ff66ff",}; - - var scaleslider = document.getElementById("scalesliderdata"); - - function closeMain() { - $("body").css("display", "none"); - } - - function openMain() { - $("body").css("display", "block"); - } - - $(".vehiclemenusettingsbuttonexit").click(function(){ - if ($(".vehiclemenu-container").data('draggable')) { - ChangeVehicleMenu(); - $(".vehiclemenu-container").draggable("destroy"); - } - ineditmenu = "false"; - $("#vehiclemenusettingsshow").hide(); - $.post('https://'+vehiclemenuresourcename+'/quit', JSON.stringify({})); - }); - - function draggableElements() { - $(".vehiclemenu-container").draggable({ - scroll: false, - axis: "x, y", - cursor: "move" - }); - $(".vehiclemenu-container").css("transform", "scale(" + localStorage.scale + ")"); - }; - - function currentsliderdata() { - if (localStorage.default === "true") { - if (defaultValues.scale == 0.5) { - return 5; - } else if (defaultValues.scale == 0.6) { - return 6; - } else if (defaultValues.scale == 0.7) { - return 7; - } else if (defaultValues.scale == 0.8) { - return 8; - } else if (defaultValues.scale == 0.9) { - return 9; - } else if (defaultValues.scale == 1.0) { - return 10; - } else if (defaultValues.scale == 1.0) { - return 10; - } else if (defaultValues.scale == 1.1) { - return 11; - } else if (defaultValues.scale == 1.2) { - return 12; - } else if (defaultValues.scale == 1.3) { - return 13; - } else if (defaultValues.scale == 1.4) { - return 14; - } else if (defaultValues.scale == 1.5) { - return 15; - } - } else { - if (localStorage.scale == 0.5) { - return 5; - } else if (localStorage.scale == 0.6) { - return 6; - } else if (localStorage.scale == 0.7) { - return 7; - } else if (localStorage.scale == 0.8) { - return 8; - } else if (localStorage.scale == 0.9) { - return 9; - } else if (localStorage.scale == 1.0) { - return 10; - } else if (localStorage.scale == 1.0) { - return 10; - } else if (localStorage.scale == 1.1) { - return 11; - } else if (localStorage.scale == 1.2) { - return 12; - } else if (localStorage.scale == 1.3) { - return 13; - } else if (localStorage.scale == 1.4) { - return 14; - } else if (localStorage.scale == 1.5) { - return 15; - } - } - } - - function ChangeVehicleMenu() { - if (localStorage.default === "true") { - let root = document.documentElement; - var vehiclemenutop = defaultValues.vehiclemenutop + "%"; - var vehiclemenuleft = defaultValues.vehiclemenuleft + '%'; - $('.vehiclemenu-container').css({ - position:'absolute', - top:vehiclemenutop, - left:vehiclemenuleft - }); - localStorage.scale = defaultValues.scale; - localStorage.color = defaultValues.color; - scaleslider.value = currentsliderdata(); - currentscale = defaultValues.scale; - root.style.setProperty('--color', defaultValues.color); - $("#color-picker").spectrum("set", defaultValues.color); - $(".vehiclemenu-container").css("transform", "scale(" + defaultValues.scale + ")"); - } else { - let root = document.documentElement; - var vehiclemenutop = localStorage.vehiclemenutop + 'px'; - var vehiclemenuleft = localStorage.vehiclemenuleft + 'px'; - var scaledata = localStorage.scale; - var color = localStorage.color; - $('.vehiclemenu-container').css({ - position:'absolute', - top:vehiclemenutop, - left:vehiclemenuleft - }); - $("#color-picker").spectrum("set", localStorage.color); - scaleslider.value = currentsliderdata(); - root.style.setProperty('--color', color); - $(".vehiclemenu-container").css("transform", "scale(" + scaledata + ")"); - } - }; - - function ResetVehicleMenuToDefault() { - let root = document.documentElement; - var vehiclemenutop = defaultValues.vehiclemenutop + "%"; - var vehiclemenuleft = defaultValues.vehiclemenuleft + '%'; - $('.vehiclemenu-container').css({ - position:'absolute', - top:vehiclemenutop, - left:vehiclemenuleft - }); - localStorage.scale = defaultValues.scale; - localStorage.color = defaultValues.color; - scaleslider.value = currentsliderdata(); - currentscale = defaultValues.scale; - root.style.setProperty('--color', defaultValues.color); - $("#color-picker").spectrum("set", defaultValues.color); - $(".vehiclemenu-container").css("transform", "scale(" + defaultValues.scale + ")"); - }; - - window.addEventListener('message', function (event) { - - var item = event.data; - - if (item.message == "vehiclemenushow") { - openMain(); - document.getElementsByClassName("vehiclemenusettingsbuttonvehiclename1text")[0].innerHTML = item.vehiclenametext1data; - document.getElementsByClassName("vehiclemenusettingsbuttonvehiclename2text")[0].innerHTML= item.vehiclenametext2data; - document.getElementsByClassName("vehiclemenusettingsbuttonvehicleplatetext")[0].innerHTML = item.vehicleplatedata; - $('.vehiclemenufuelmaincontainerdata').css("height", item.vehiclefueldata+"%") - $("#vehiclemenusettingsshow").hide(); - $("#vehiclemenusettingswindowshow").hide(); - $("#vehiclemenusettingsseatshow").hide(); - $("#vehiclemenusettingsextrasshow").hide(); - $("#vehiclemenusettingsdoorshow").show(); - $("#vehiclemenushow").show(); - } - - if (item.message == "addseat"){ - $( ".vehiclemenusettingsseatlist" ).append('
' + - '
' + item.vehicleseattext + '
' + - '
'); - } - - if (item.message == "addextra"){ - $( ".vehiclemenusettingsextraslist" ).append('
' + - '
' + item.vehicleextratext + '
' + - '
'); - } - - if (item.message == "vehiclemenusettingsloadfirst") { - vehiclemenuresourcename = item.vehiclemenuresourcenamedata; - defaultValues.vehiclemenutop = item.vehiclemenupositiontopdata; - defaultValues.vehiclemenuleft = item.vehiclemenupositionleftdata; - defaultValues.scale = item.vehiclemenuscaledata; - defaultValues.color = item.vehiclemenucolordata; - if (localStorage.default == "false") { - } else { - localStorage.default = "true"; - } - ChangeVehicleMenu(); - } - - if (item.message == "vehiclemenusettingsload") { - vehiclemenuresourcename = item.vehiclemenuresourcenamedata; - defaultValues.vehiclemenutop = item.vehiclemenupositiontopdata; - defaultValues.vehiclemenuleft = item.vehiclemenupositionleftdata; - defaultValues.scale = item.vehiclemenuscaledata; - defaultValues.color = item.vehiclemenucolordata; - if (localStorage.default == "false") { - } else { - localStorage.default = "true"; - if (ineditmenu == "false") { - ResetVehicleMenuToDefault(); - } - } - } - - if (item.message == "vehiclemenureset") { - localStorage.default = "true"; - ChangeVehicleMenu(); - } - - if (item.message == "hide") { - closeMain(); - } - - document.onkeyup = function (data) { - if (open) { - if (data.which == 27) { - if ($(".vehiclemenu-container").data('draggable')) { - ChangeVehicleMenu(); - $(".vehiclemenu-container").draggable("destroy"); - } - ineditmenu = "false"; - $("#vehiclemenusettingsshow").hide(); - $.post('https://'+vehiclemenuresourcename+'/quit', JSON.stringify({})); - } - } - }; - }); - - $(".vehiclemenusettingsbuttonwarning").click(function () { - $.post('https://'+vehiclemenuresourcename+'/vehiclewarning', JSON.stringify({})); - }); - - $(".vehiclemenusettingsbuttonlight").click(function () { - $.post('https://'+vehiclemenuresourcename+'/vehiclelightinterior', JSON.stringify({})); - }); - - $(".vehiclemenusettingsbuttonlighth").click(function () { - $.post('https://'+vehiclemenuresourcename+'/vehiclelight', JSON.stringify({})); - }); - - $(".vehiclemenusettingsbuttonengine").click(function () { - $.post('https://'+vehiclemenuresourcename+'/vehicleengine', JSON.stringify({})); - }); - - $(".vehiclemenusettingsbuttonbind").click(function () { - $.post('https://'+vehiclemenuresourcename+'/vehiclebind', JSON.stringify({})); - }); - - $(".vehiclemenusettingsbuttonlock").click(function () { - $.post('https://'+vehiclemenuresourcename+'/vehiclelock', JSON.stringify({})); - }); - - $(".vehiclemenusettingsbuttonwater").click(function () { - $.post('https://'+vehiclemenuresourcename+'/vehiclewater', JSON.stringify({})); - }); - - $(".vehiclemenusettingsbuttonselect1").click(function () { - $("#vehiclemenusettingswindowshow").hide(); - $("#vehiclemenusettingsseatshow").hide(); - $("#vehiclemenusettingsextrasshow").hide(); - $("#vehiclemenusettingsdoorshow").show(); - }); - - $(".vehiclemenusettingsbuttonselect2").click(function () { - $("#vehiclemenusettingsdoorshow").hide(); - $("#vehiclemenusettingsseatshow").hide(); - $("#vehiclemenusettingsextrasshow").hide(); - $("#vehiclemenusettingswindowshow").show(); - }); - - $(".vehiclemenusettingsbuttonselect3").click(function () { - $( ".vehiclemenusettingsseatlist" ).empty() - $("#vehiclemenusettingsdoorshow").hide(); - $("#vehiclemenusettingswindowshow").hide(); - $("#vehiclemenusettingsextrasshow").hide(); - $("#vehiclemenusettingsseatshow").show(); - $.post('https://'+vehiclemenuresourcename+'/vehicleseats', JSON.stringify({})); - }); - - $(".vehiclemenusettingsbuttonselect4").click(function () { - $( ".vehiclemenusettingsextraslist" ).empty() - $("#vehiclemenusettingsdoorshow").hide(); - $("#vehiclemenusettingswindowshow").hide(); - $("#vehiclemenusettingsseatshow").hide(); - $("#vehiclemenusettingsextrasshow").show(); - $.post('https://'+vehiclemenuresourcename+'/vehicleextras', JSON.stringify({})); - }); - - $(".vehiclemenusettingsdoormain1").click(function () { - $.post('https://'+vehiclemenuresourcename+'/changedoor', JSON.stringify({ - dooriddata: 4, - })); - }); - - $(".vehiclemenusettingsdoormain2").click(function () { - $.post('https://'+vehiclemenuresourcename+'/changedoor', JSON.stringify({ - dooriddata: 5, - })); - }); - - $(".vehiclemenusettingsdoormain3").click(function () { - $.post('https://'+vehiclemenuresourcename+'/changedoor', JSON.stringify({ - dooriddata: 0, - })); - }); - - $(".vehiclemenusettingsdoormain4").click(function () { - $.post('https://'+vehiclemenuresourcename+'/changedoor', JSON.stringify({ - dooriddata: 1, - })); - }); - - $(".vehiclemenusettingsdoormain5").click(function () { - $.post('https://'+vehiclemenuresourcename+'/changedoor', JSON.stringify({ - dooriddata: 2, - })); - }); - - $(".vehiclemenusettingsdoormain6").click(function () { - $.post('https://'+vehiclemenuresourcename+'/changedoor', JSON.stringify({ - dooriddata: 3, - })); - }); - - $(".vehiclemenusettingswindowmain1").click(function () { - $.post('https://'+vehiclemenuresourcename+'/changewindow', JSON.stringify({ - windowiddata: 0, - })); - }); - - $(".vehiclemenusettingswindowmain2").click(function () { - $.post('https://'+vehiclemenuresourcename+'/changewindow', JSON.stringify({ - windowiddata: 1, - })); - }); - - $(".vehiclemenusettingswindowmain3").click(function () { - $.post('https://'+vehiclemenuresourcename+'/changewindow', JSON.stringify({ - windowiddata: 2, - })); - }); - - $(".vehiclemenusettingswindowmain4").click(function () { - $.post('https://'+vehiclemenuresourcename+'/changewindow', JSON.stringify({ - windowiddata: 3, - })); - }); - - $(".vehiclemenusettingsseatlist").on("click", ".vehicleseat", function() { - var $vehicleseathandler = $(this); - var $vehicleseatiddata = $vehicleseathandler.attr('seatid') - $.post('https://'+vehiclemenuresourcename+'/changeseat', JSON.stringify({ - vehicleseatiddata: $vehicleseatiddata, - })); - }); - - $(".vehiclemenusettingsextraslist").on("click", ".vehicleextras", function() { - var $vehicleextrahandler = $(this); - var $vehicleextraiddata = $vehicleextrahandler.attr('extraid') - $.post('https://'+vehiclemenuresourcename+'/changeextra', JSON.stringify({ - vehicleextraiddata: $vehicleextraiddata, - })); - }); - - $(".closevehiclemenusettings").click(function(){ - ChangeVehicleMenu(); - ineditmenu = "false"; - $(".vehiclemenu-container").draggable("destroy"); - $("#vehiclemenusettingsshow").hide(); - }); - - $(".vehiclemenusettingsbuttonsettings").click(function(){ - draggableElements(); - ineditmenu = "true"; - $("#vehiclemenusettingsshow").show(); - }); - - $(".buttonvehiclemenusettingsreset").click(function(){ - localStorage.default = "true"; - ChangeVehicleMenu(); - }); - - $(".buttonvehiclemenusettingssave").click(function(){ - $(".vehiclemenu-container").draggable("disable") - localStorage.default = "false"; - var vehiclemenupos = $(".vehiclemenu-container").position(); - localStorage.vehiclemenutop = vehiclemenupos.top; - localStorage.vehiclemenuleft = vehiclemenupos.left; - localStorage.scale = currentscale; - localStorage.color = $("#color-picker").spectrum("get"); - ChangeVehicleMenu(); - $(".vehiclemenu-container").draggable("destroy"); - ineditmenu = "false"; - $("#vehiclemenusettingsshow").hide(); - }); - - $(document).ready(function() { - $(".sp-container").on({ - click: function(){ - let root = document.documentElement; - var value = $("#color-picker").val(); - var hexstring = $("#color-picker").spectrum("get"); - root.style.setProperty('--color', hexstring); - localStorage.color = hexstring; - }, - change: function(){ - let root = document.documentElement; - var value = $("#color-picker").val(); - root.style.setProperty('--color', hexstring); - var hexstring = $("#color-picker").spectrum("get"); - localStorage.color = hexstring; - } - }); - - }); - scaleslider.oninput = function() { - if (this.value == 5) { - $(".vehiclemenu-container").css("transform", "scale(0.5)"); - currentscale = 0.5; - } else if (this.value == 6) { - $(".vehiclemenu-container").css("transform", "scale(0.6)"); - currentscale = 0.6; - } else if (this.value == 7) { - $(".vehiclemenu-container").css("transform", "scale(0.7)"); - currentscale = 0.7; - } else if (this.value == 8) { - $(".vehiclemenu-container").css("transform", "scale(0.8)"); - currentscale = 0.8; - } else if (this.value == 9) { - $(".vehiclemenu-container").css("transform", "scale(0.9)"); - currentscale = 0.9; - } else if (this.value == 10) { - $(".vehiclemenu-container").css("transform", "scale(1.0)"); - currentscale = 1.0; - } else if (this.value == 11) { - $(".vehiclemenu-container").css("transform", "scale(1.1)"); - currentscale = 1.1; - } else if (this.value == 12) { - $(".vehiclemenu-container").css("transform", "scale(1.2)"); - currentscale = 1.2; - } else if (this.value == 13) { - $(".vehiclemenu-container").css("transform", "scale(1.3)"); - currentscale = 1.3; - } else if (this.value == 14) { - $(".vehiclemenu-container").css("transform", "scale(1.4)"); - currentscale = 1.4; - } else if (this.value == 15) { - $(".vehiclemenu-container").css("transform", "scale(1.5)"); - currentscale = 1.5; - } - } - $('#color-picker').spectrum({ - preferredFormat: "rgb", - showInput: true, - showPalette: false, - allowEmpty:false, - showAlpha: false, - showButtons: false - }); -}) \ No newline at end of file diff --git a/resources/[carscripts]/rtx_vehiclemenu/html/styles.css b/resources/[carscripts]/rtx_vehiclemenu/html/styles.css deleted file mode 100644 index dc2a0aad1..000000000 --- a/resources/[carscripts]/rtx_vehiclemenu/html/styles.css +++ /dev/null @@ -1,1571 +0,0 @@ -:root { - --color: #ff66ff; -} - -@import url('https://kit-pro.fontawesome.com/releases/v6.2.0/css/pro.min.css'); - -@font-face { - font-family: BebasNeueBold; - src: url(BebasNeueBold.ttf); -} - -*{ - user-select: none; /* supported by Chrome and Opera */ - -webkit-user-select: none; /* Safari */ - -khtml-user-select: none; /* Konqueror HTML */ - -moz-user-select: none; /* Firefox */ - -ms-user-select: none; /* Internet Explorer/Edge */ -} - -html { - overflow: hidden; - font-family: 'Open Sans', sans-serif; -} - -body{ - display: none; - color: #a8a8aa; -} - -::-webkit-scrollbar -{ - width: 4px; -} - -::-webkit-scrollbar-thumb -{ - background-color: rgba(0, 0, 0, 0.0); -} - -.vehiclemenu-container { - width: 22%; - height: 39%; - background-color: rgba(0, 0, 0, 0.0); - margin: 0; - position: absolute; - top: 68%; - left: 81.5%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 9999; - display: none; -} - -.vehiclemenumain { - width: 100%; - height: 75%; - background-color: rgba(255, 0, 0, 0.0); - margin: 0; - position: absolute; - top: 62.5%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 9999999; -} - -.vehiclemenufuelmain { - width: 6%; - height: 100%; - margin: 0; - position: absolute; - top: 50%; - left: 97%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 9999999; -} - -.vehiclemenusettingsdoor { - width: 93%; - height: 100%; - background-color: rgba(0, 0, 0, 0.70); - margin: 0; - position: absolute; - left: 46.8%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 9999999; - display: none; -} - -.vehiclemenusettingswindow { - width: 93%; - height: 100%; - background-color: rgba(0, 0, 0, 0.70); - margin: 0; - position: absolute; - left: 46.8%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 9999999; - display: none; -} - -.vehiclemenusettingsseat { - width: 93%; - height: 100%; - background-color: rgba(0, 0, 0, 0.70); - margin: 0; - position: absolute; - left: 46.8%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 9999999; - display: none; -} - -.vehiclemenusettingsextras { - width: 93%; - height: 100%; - background-color: rgba(0, 0, 0, 0.70); - margin: 0; - position: absolute; - left: 46.8%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 9999999; -} - - -.vehiclemenusettingsbuttonwarning { - width: 42%; - height: 22%; - background-color: rgba(0, 0, 0, 1.0); - margin: 0; - position: absolute; - top: 89%; - left: 46.5%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 9999999; - clip-path: polygon(50% 0%, 0% 100%, 100% 100%); -} - -.vehiclemenusettingsbuttonwarning:hover { - background-color: var(--color); -} - -.vehiclemenusettingsbuttonlight { - width: 45.7%; - height: 48%; - background-color: rgba(0, 0, 0, 1.0); - margin: 0; - position: absolute; - top: 76%; - left: 23%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 9999999; - clip-path: polygon(100% 2%, 100% 49%, 49% 100%, 0 100%); -} - -.vehiclemenusettingsbuttonlight:hover { - background-color: var(--color); -} - -.vehiclemenusettingsbuttonlighth { - width: 45.7%; - height: 48%; - background-color: rgba(0, 0, 0, 1.0); - margin: 0; - position: absolute; - top: 76%; - left: 70.1%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 9999999; - clip-path: polygon(0 49%, 0 2%, 100% 100%, 49% 100%); -} - -.vehiclemenusettingsbuttonlighth:hover { - background-color: var(--color); -} - -.vehiclemenusettingsbuttonengine { - width: 21%; - height: 44%; - background-color: rgba(0, 0, 0, 1.0); - margin: 0; - position: absolute; - top: 76%; - left: 10.8%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 9999999; - clip-path: polygon(0 0, 0% 100%, 100% 50%); -} - -.vehiclemenusettingsbuttonengine:hover { - background-color: var(--color); -} - -.vehiclemenusettingsbuttonbind { - width: 21%; - height: 44%; - background-color: rgba(0, 0, 0, 1.0); - margin: 0; - position: absolute; - top: 76%; - left: 82.6%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 9999999; - clip-path: polygon(100% 0, 100% 100%, 0 50%); -} - -.vehiclemenusettingsbuttonbind:hover { - background-color: var(--color); -} - -.vehiclemenusettingsbuttonlock { - width: 45%; - height: 23%; - background-color: rgba(0, 0, 0, 1.0); - margin: 0; - position: absolute; - top: 63%; - left: 22.7%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 9999999; - clip-path: polygon(100% 0, 50% 100%, 0 0); -} - -.vehiclemenusettingsbuttonlock:hover { - background-color: var(--color); -} - -.vehiclemenusettingsbuttonwater { - width: 45%; - height: 23%; - background-color: rgba(0, 0, 0, 1.0); - margin: 0; - position: absolute; - top: 63%; - left: 70.6%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 9999999; - clip-path: polygon(100% 0, 50% 100%, 0 0); -} - -.vehiclemenusettingsbuttonwater:hover { - background-color: var(--color); -} - -.vehiclemenusettingsbuttonvehiclename { - width: 66%; - height: 12%; - background-color: rgba(0, 0, 0, 1.0); - margin: 0; - position: absolute; - top: 18.4%; - left: 34%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 9999999; - clip-path: polygon(18% 0, 100% 0%, 80% 100%, 0% 100%); -} - -.vehiclemenusettingsbuttonvehicleplate { - width: 46%; - height: 12%; - background-color: rgba(0, 0, 0, 1.0); - margin: 0; - position: absolute; - top: 18.4%; - left: 79%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 9999999; - clip-path: polygon(28% 0, 100% 0%, 100% 100%, 0% 100%); -} - -.vehiclemenusettingsbuttonsettings { - width: 21.5%; - height: 23%; - background-color: var(--color); - margin: 0; - position: absolute; - top: 12%; - left: 11%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 9999999; - clip-path: polygon(0 0, 0% 100%, 100% 0); -} - -.vehiclemenusettingsbuttonsettingsicon { - position: absolute; - margin: 0; - text-decoration: none; - text-align: center; - top: 30%; - left: 30%; - margin-right: -50%; - transform: translate(-50%, -50%); - font-size: 1.5vw; - color: #000000; - text-align:center; - font-family: BebasNeueBold; - z-index: 9999999; -} - -.vehiclemenusettingsbuttonsettings:hover > .vehiclemenusettingsbuttonsettingsicon { - filter: invert(96%) sepia(4%) saturate(14%) hue-rotate(135deg) brightness(104%) contrast(105%); -} - -.vehiclemenusettingsbuttonexit { - width: 16%; - height: 11%; - background-color: var(--color); - margin: 0; - position: absolute; - top: 6%; - left: 92%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 9999999; - clip-path: polygon(58% 0, 100% 0%, 100% 100%, 0% 100%); -} - -.vehiclemenusettingsbuttonexiticon { - position: absolute; - margin: 0; - text-decoration: none; - text-align: center; - top: 50%; - left: 70%; - margin-right: -50%; - transform: translate(-50%, -50%); - font-size: 1.8626929217668973vw; - color: #ffffff; - text-align:center; - font-family: BebasNeueBold; - z-index: 9999999; - width: 1.0vw; - height: 1.0vw -} - -.vehiclemenusettingsbuttonexit:hover > .vehiclemenusettingsbuttonexiticon { - filter: invert(96%) sepia(4%) saturate(14%) hue-rotate(135deg) brightness(104%) contrast(105%); -} - -.vehiclemenusettingsbuttonselect1 { - width: 26%; - height: 10%; - background-color: rgba(0, 0, 0, 1.0); - border-bottom: 2px solid var(--color); - margin: 0; - position: absolute; - top: 6%; - left: 27%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 9999999; - clip-path: polygon(40% 0, 100% 0, 60% 100%, 0% 100%); -} - -.vehiclemenusettingsbuttonselect1:hover { - background-color: var(--color); -} - -.vehiclemenusettingsbuttonselect2 { - width: 26%; - height: 10%; - background-color: rgba(0, 0, 0, 1.0); - border-bottom: 2px solid var(--color); - margin: 0; - position: absolute; - top: 6%; - left: 44.5%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 9999999; - clip-path: polygon(40% 0, 100% 0, 60% 100%, 0% 100%); - -} - -.vehiclemenusettingsbuttonselect2:hover { - background-color: var(--color); -} - -.vehiclemenusettingsbuttonselect3 { - width: 26%; - height: 10%; - background-color: rgba(0, 0, 0, 1.0); - border-bottom: 2px solid var(--color); - margin: 0; - position: absolute; - top: 6%; - left: 62%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 9999999; - clip-path: polygon(40% 0, 100% 0, 60% 100%, 0% 100%); -} - -.vehiclemenusettingsbuttonselect3:hover { - background-color: var(--color); -} - -.vehiclemenusettingsbuttonselect4 { - width: 26%; - height: 10%; - background-color: rgba(0, 0, 0, 1.0); - border-bottom: 2px solid var(--color); - margin: 0; - position: absolute; - top: 6%; - left: 79.5%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 9999999; - clip-path: polygon(40% 0, 96% 0, 60% 100%, 0% 100%); - -} - -.vehiclemenusettingsbuttonselect4:hover { - background-color: var(--color); -} - -.vehiclemenusettingsbuttonwarningicon { - position: absolute; - margin: 0; - text-decoration: none; - text-align: center; - top: 60%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - font-size: 1.8626929217668973vw; - color: #ffffff; - text-align:center; - font-family: BebasNeueBold; - z-index: 9999999; -} - -.vehiclemenusettingsbuttonlighticon { - position: absolute; - margin: 0; - text-decoration: none; - text-align: center; - top: 60%; - left: 64%; - margin-right: -50%; - transform: translate(-50%, -50%); - font-size: 1.8626929217668973vw; - color: #ffffff; - text-align:center; - font-family: BebasNeueBold; - z-index: 9999999; -} - -.vehiclemenusettingsbuttonlighthicon { - position: absolute; - margin: 0; - text-decoration: none; - text-align: center; - top: 60%; - left: 36%; - margin-right: -50%; - transform: translate(-50%, -50%); - font-size: 1.8626929217668973vw; - color: #ffffff; - text-align:center; - font-family: BebasNeueBold; - z-index: 9999999; - width: 1.8626929217668973vw; - height: 1.8626929217668973vw; -} - -.vehiclemenusettingsbuttonengineicon { - position: absolute; - margin: 0; - text-decoration: none; - text-align: center; - top: 50%; - left: 36.5%; - margin-right: -50%; - transform: translate(-50%, -50%); - font-size: 1.8626929217668973vw; - color: #ffffff; - text-align:center; - font-family: BebasNeueBold; - z-index: 9999999; -} - -.vehiclemenusettingsbuttonengineicon { - position: absolute; - margin: 0; - text-decoration: none; - text-align: center; - top: 50%; - left: 36.5%; - margin-right: -50%; - transform: translate(-50%, -50%); - font-size: 1.8626929217668973vw; - color: #ffffff; - text-align:center; - font-family: BebasNeueBold; - z-index: 9999999; -} - -.vehiclemenusettingsbuttonbindicon { - position: absolute; - margin: 0; - text-decoration: none; - text-align: center; - top: 50%; - left: 63.5%; - margin-right: -50%; - transform: translate(-50%, -50%); - font-size: 1.8626929217668973vw; - color: #ffffff; - text-align:center; - font-family: BebasNeueBold; - z-index: 9999999; -} - -.vehiclemenusettingsbuttonlockicon { - position: absolute; - margin: 0; - text-decoration: none; - text-align: center; - top: 40%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - font-size: 1.8626929217668973vw; - color: #ffffff; - text-align:center; - font-family: BebasNeueBold; - z-index: 9999999; -} - -.vehiclemenusettingsbuttonwatericon { - position: absolute; - margin: 0; - text-decoration: none; - text-align: center; - top: 40%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - font-size: 1.8626929217668973vw; - color: #ffffff; - text-align:center; - font-family: BebasNeueBold; - z-index: 9999999; - width: 1.8626929217668973vw; - height: 1.8626929217668973vw; -} - -.vehiclemenufuelicon { - position: absolute; - margin: 0; - text-decoration: none; - text-align: center; - top: 95%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - font-size: 0.95vw; - color: #000000; - text-align:center; - font-family: BebasNeueBold; - z-index: 999999999; -} - -.vehiclemenufuelmaincontainer { - width: 150%; - height: 100%; - background-color: rgba(0, 0, 0, 0.70); - margin: 0; - position: absolute; - top: 50%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 99999999; -} - -.vehiclemenufuelmaincontainerdata { - outline: none; - position: absolute; - width: 100%; - height: 100%; - background-color: var(--color); - object-fit: cover; - z-index: 9999999; - bottom: 0; -} -.vehiclemenusettingsbuttonvehiclename1 { - width: 68%; - height: 50%; - background-color: rgba(255, 0, 255, 0.0); - margin: 0; - position: absolute; - top: 32%; - left: 49%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 9999999; - padding-left: 2%; -} - -.vehiclemenusettingsbuttonvehiclename1text { - margin: 0; - color: #ffffff; - font-size: 0.90vw; - padding-left: 7px; - padding-right: 7px; - text-decoration: none; - text-align: center; - float: left; - overflow: hidden; - z-index: 99999999; - font-family: Bahnschrift; - font-weight: bold; - border: none; -} - -.vehiclemenusettingsbuttonvehiclename2 { - width: 68%; - height: 50%; - background-color: rgba(0, 0, 0, 0.0); - margin: 0; - position: absolute; - top: 72%; - left: 47%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 9999999; - padding-left: 2%; -} - -.vehiclemenusettingsbuttonvehiclename2text { - margin: 0; - color: #ffffff; - font-size: 0.90vw; - padding-left: 7px; - padding-right: 7px; - text-decoration: none; - text-align: center; - float: right; - overflow: hidden; - z-index: 99999999; - font-family: Bahnschrift; - font-weight: bold; - border: none; -} - - -.vehiclemenusettingsbuttonvehicleplatetext { - position: absolute; - margin: 0; - text-decoration: none; - top: 50%; - left: 57%; - margin-right: -50%; - transform: translate(-50%, -50%); - font-size: 1.1vw; - color: #ffffff; - text-align:center; - font-family: Bahnschrift; - font-weight: bold; -} - -.vehiclemenusettingsbuttonselectcategory1 { - position: absolute; - margin: 0; - text-decoration: none; - text-align: center; - top: 50%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - color: #ffffff; - text-align:center; - font-family: BebasNeueBold; - z-index: 9999999; - width: 1.2vw; - height: 1.2vw -} - -.vehiclemenusettingsbuttonselect1icon { - position: absolute; - margin: 0; - text-decoration: none; - text-align: center; - top: 50%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - color: #ffffff; - text-align:center; - font-family: BebasNeueBold; - z-index: 9999999; - width: 1.0vw; - height: 1.0vw -} - - - -.vehiclemenusettingsbuttonselectcategory1text { - position: absolute; - margin: 0; - text-decoration: none; - top: 52%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - font-size: 1.1vw; - color: #ffffff; - text-align:center; - font-family: Bahnschrift; - font-weight: bold; -} - -.vehiclemenusettingsbuttonselect2icon { - position: absolute; - margin: 0; - text-decoration: none; - text-align: center; - top: 50%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - color: #ffffff; - text-align:center; - font-family: BebasNeueBold; - z-index: 9999999; - width: 1.2vw; - height: 1.2vw -} - - -.vehiclemenusettingsbuttonselectcategory2text { - position: absolute; - margin: 0; - text-decoration: none; - top: 52%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - font-size: 1.1vw; - color: #ffffff; - text-align:center; - font-family: Bahnschrift; - font-weight: bold; -} - -.vehiclemenusettingsbuttonselect3icon { - position: absolute; - margin: 0; - text-decoration: none; - text-align: center; - top: 50%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - font-size: 1.1vw; - color: #ffffff; - text-align:center; - font-family: BebasNeueBold; - z-index: 9999999; -} - -.vehiclemenusettingsbuttonselectcategory3text { - position: absolute; - margin: 0; - text-decoration: none; - top: 52%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - font-size: 1.1vw; - color: #ffffff; - text-align:center; - font-family: Bahnschrift; - font-weight: bold; -} - -.vehiclemenusettingsbuttonselect4icon { - position: absolute; - margin: 0; - text-decoration: none; - text-align: center; - top: 50%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - font-size: 1.0vw; - color: #ffffff; - text-align:center; - font-family: BebasNeueBold; - z-index: 9999999; -} - -.vehiclemenusettingsdoormain { - width: 100%; - height: 49.5%; - background-color: rgba(0, 0, 0, 0.0); - margin: 0; - position: absolute; - top: 75%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 99999999; - overflow-x: hidden; - overflow-y: scroll; - display: block; -} - -.vehiclemenusettingswindowmain { - width: 100%; - height: 49.5%; - background-color: rgba(0, 0, 0, 0.0); - margin: 0; - position: absolute; - top: 75%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 99999999; - overflow-x: hidden; - overflow-y: scroll; - display: block; -} - -.vehiclemenusettingsseatmain { - width: 100%; - height: 49.5%; - background-color: rgba(0, 0, 0, 0.0); - margin: 0; - position: absolute; - top: 75%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 99999999; - overflow-x: hidden; - overflow-y: scroll; - display: block; -} - -.vehiclemenusettingsseatlist { - width: 100%; - height: 100%; - left: 50%; - overflow: auto; - display: flex; - flex-wrap: wrap; - align-content: flex-start; -} - -.vehicleseat { - position: relative; - width: 42%; - height: 30%; - background-color: rgba(0, 0, 0, 1.0); - text-align:center; - margin-top: 2%; - margin-bottom: 1%; - margin-right: 1%; - margin-left: 5%; - z-index: 999999999; -} - -.vehicleseat:hover { - background-color: var(--color); -} - -.vehicleseattext { - position: absolute; - margin: 0; - text-decoration: none; - top: 50%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - font-size: 0.9vw; - color: #ffffff; - text-align:center; - font-family: Bahnschrift; - font-weight: bold; -} - -.vehiclemenusettingsextrasmain { - width: 100%; - height: 49.5%; - background-color: rgba(0, 0, 0, 0.0); - margin: 0; - position: absolute; - top: 75%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 99999999; - overflow-x: hidden; - overflow-y: scroll; - display: block; -} - -.vehiclemenusettingsextraslist { - width: 100%; - height: 100%; - left: 50%; - overflow: auto; - display: flex; - flex-wrap: wrap; - align-content: flex-start; -} - -.vehicleextras { - position: relative; - width: 42%; - height: 30%; - background-color: rgba(0, 0, 0, 1.0); - text-align:center; - margin-top: 2%; - margin-bottom: 1%; - margin-right: 1%; - margin-left: 5%; - z-index: 999999999; -} - -.vehicleextras:hover { - background-color: var(--color); -} - -.vehicleextrastext { - position: absolute; - margin: 0; - text-decoration: none; - top: 50%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - font-size: 0.9vw; - color: #ffffff; - text-align:center; - font-family: Bahnschrift; - font-weight: bold; -} - -.vehiclemenusettingsdoormain1 { - width: 42%; - height: 25%; - background-color: rgba(0, 0, 0, 1.0); - margin: 0; - position: absolute; - top: 20%; - left: 26%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 9999999; -} - -.vehiclemenusettingsdoormain1:hover { - background-color: var(--color); -} - -.vehiclemenusettingsdoormain1text { - position: absolute; - margin: 0; - text-decoration: none; - top: 50%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - font-size: 0.9vw; - color: #ffffff; - text-align:center; - font-family: Bahnschrift; - font-weight: bold; -} - -.vehiclemenusettingsdoormain2 { - width: 42%; - height: 25%; - background-color: rgba(0, 0, 0, 1.0); - margin: 0; - position: absolute; - top: 20%; - left: 74%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 9999999; -} - -.vehiclemenusettingsdoormain2:hover { - background-color: var(--color); -} - - -.vehiclemenusettingsdoormain2text { - position: absolute; - margin: 0; - text-decoration: none; - top: 50%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - font-size: 0.9vw; - color: #ffffff; - text-align:center; - font-family: Bahnschrift; - font-weight: bold; -} - -.vehiclemenusettingsdoormain3 { - width: 42%; - height: 25%; - background-color: rgba(0, 0, 0, 1.0); - margin: 0; - position: absolute; - top: 50%; - left: 26%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 9999999; -} - -.vehiclemenusettingsdoormain3:hover { - background-color: var(--color); -} - -.vehiclemenusettingsdoormain3text { - position: absolute; - margin: 0; - text-decoration: none; - top: 50%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - font-size: 0.9vw; - color: #ffffff; - text-align:center; - font-family: Bahnschrift; - font-weight: bold; -} - -.vehiclemenusettingsdoormain4 { - width: 42%; - height: 25%; - background-color: rgba(0, 0, 0, 1.0); - margin: 0; - position: absolute; - top: 50%; - left: 74%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 9999999; -} - -.vehiclemenusettingsdoormain4:hover { - background-color: var(--color); -} - -.vehiclemenusettingsdoormain4text { - position: absolute; - margin: 0; - text-decoration: none; - top: 50%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - font-size: 0.9vw; - color: #ffffff; - text-align:center; - font-family: Bahnschrift; - font-weight: bold; -} - -.vehiclemenusettingsdoormain5 { - width: 42%; - height: 25%; - background-color: rgba(0, 0, 0, 1.0); - margin: 0; - position: absolute; - top: 80%; - left: 26%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 9999999; -} - -.vehiclemenusettingsdoormain5:hover { - background-color: var(--color); -} - -.vehiclemenusettingsdoormain5text { - position: absolute; - margin: 0; - text-decoration: none; - top: 50%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - font-size: 0.9vw; - color: #ffffff; - text-align:center; - font-family: Bahnschrift; - font-weight: bold; -} - -.vehiclemenusettingsdoormain6 { - width: 42%; - height: 25%; - background-color: rgba(0, 0, 0, 1.0); - margin: 0; - position: absolute; - top: 80%; - left: 74%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 9999999; -} - -.vehiclemenusettingsdoormain6:hover { - background-color: var(--color); -} - -.vehiclemenusettingsdoormain6text { - position: absolute; - margin: 0; - text-decoration: none; - top: 50%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - font-size: 0.9vw; - color: #ffffff; - text-align:center; - font-family: Bahnschrift; - font-weight: bold; -} - -.vehiclemenusettingswindowmain1 { - width: 42%; - height: 30%; - background-color: rgba(0, 0, 0, 1.0); - margin: 0; - position: absolute; - top: 30%; - left: 26%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 9999999; -} - -.vehiclemenusettingswindowmain1:hover { - background-color: var(--color); -} - -.vehiclemenusettingswindowmain1text { - position: absolute; - margin: 0; - text-decoration: none; - top: 50%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - font-size: 0.9vw; - color: #ffffff; - text-align:center; - font-family: Bahnschrift; - font-weight: bold; -} - -.vehiclemenusettingswindowmain2 { - width: 42%; - height: 30%; - background-color: rgba(0, 0, 0, 1.0); - margin: 0; - position: absolute; - top: 30%; - left: 74%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 9999999; -} - -.vehiclemenusettingswindowmain2:hover { - background-color: var(--color); -} - - -.vehiclemenusettingswindowmain2text { - position: absolute; - margin: 0; - text-decoration: none; - top: 50%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - font-size: 0.9vw; - color: #ffffff; - text-align:center; - font-family: Bahnschrift; - font-weight: bold; -} - -.vehiclemenusettingswindowmain3 { - width: 42%; - height: 30%; - background-color: rgba(0, 0, 0, 1.0); - margin: 0; - position: absolute; - top: 70%; - left: 26%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 9999999; -} - -.vehiclemenusettingswindowmain3:hover { - background-color: var(--color); -} - -.vehiclemenusettingswindowmain3text { - position: absolute; - margin: 0; - text-decoration: none; - top: 50%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - font-size: 0.9vw; - color: #ffffff; - text-align:center; - font-family: Bahnschrift; - font-weight: bold; -} - -.vehiclemenusettingswindowmain4 { - width: 42%; - height: 30%; - background-color: rgba(0, 0, 0, 1.0); - margin: 0; - position: absolute; - top: 70%; - left: 74%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 9999999; -} - -.vehiclemenusettingswindowmain4:hover { - background-color: var(--color); -} - -.vehiclemenusettingswindowmain4text { - position: absolute; - margin: 0; - text-decoration: none; - top: 50%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - font-size: 0.9vw; - color: #ffffff; - text-align:center; - font-family: Bahnschrift; - font-weight: bold; -} - -.vehiclemenusettings-container { - width: 25%; - height: 25%; - background-color: rgba(0, 0, 0, 0.7); - margin: 0; - position: absolute; - top: 50%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 99999; - display: none; - border-bottom: 3px solid var(--color); -} - -.closevehiclemenusettings { - position: absolute; - margin: 0; - text-decoration: none; - text-align: center; - top: 8%; - left: 95%; - margin-right: -50%; - transform: translate(-50%, -50%); - font-size: 1.8626929217668973vw; - color: #ffffff; - text-align:center; - font-family: BebasNeueBold; - z-index: 999999999; - width: 1.0vw; - height: 1.0vw; - filter: invert(96%) sepia(4%) saturate(14%) hue-rotate(135deg) brightness(104%) contrast(105%); -} - -.vehiclemenusettingsmaintext { - position: absolute; - margin: 0; - text-decoration: none; - text-align: center; - top: 10%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - font-size: 20px; - color: var(--color); - text-align:center; - font-family: Bahnschrift; - font-weight: bold; -} - -.vehiclemenusettingsmainscaletext { - position: absolute; - margin: 0; - text-decoration: none; - text-align: center; - top: 25%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - font-size: 18px; - color: #ffffff; - text-align:center; - font-family: Bahnschrift; - font-weight: bold; -} - -.scaleslidercontainer { - position: absolute; - margin: 0; - background-color: rgba(0, 0, 0, 1.0); - border-bottom: 3px solid var(--color); - color: #ffffff; - font-size: 35px; - text-decoration: none; - text-align: center; - top: 40%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 999999; - width: 60%; - height: 12%; - font-family: BebasNeueBold; -} - -.scaleslider { - -webkit-appearance: none; - appearance: none; - position: absolute; - margin: 0; - background-color: rgba(255, 255, 255, 0.0); - color: #ffffff; - font-size: 35px; - text-decoration: none; - text-align: center; - top: 50%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 999999; - width: 85%; - height: 40%; - font-family: BebasNeueBold; - outline: none; -} - -.scaleslideline { - -webkit-appearance: none; - appearance: none; - position: absolute; - margin: 0; - background-color: rgba(255, 255, 255, 1.0); - color: #ffffff; - font-size: 35px; - text-decoration: none; - text-align: center; - top: 50%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 999999; - width: 85%; - height: 6%; - font-family: BebasNeueBold; - outline: none; -} - -.scaleslider::-webkit-slider-thumb { - -webkit-appearance: none; - appearance: none; - width: 15px; - height: 15px; - cursor: pointer; - background-color: var(--color); -} - -.scaleslider::-moz-range-thumb { - width: 15px; - height: 15px; - cursor: pointer; - background-color: var(--color); -} - -input[type=range]:focus { - outline: none; -} - -#color-picker { - font-family: BebasNeueBold; - background-color: rgba(0, 0, 0, 1.0); - color: #ffffff; - font-size: 20px; - text-decoration: none; - text-align: center; - outline: none; - border: none; - border-bottom: 2px solid var(--color); - z-index: 999999; -} - -.colorchanger { - position: absolute; - color: white; - top: 60%; - left: 50%; - margin-right: -50%; - transform: translate(-50%, -50%); - background-color: rgba(0, 0, 0, 1.0); - overflow: hidden; - z-index: 999999; - font-family: Bahnschrift; - font-weight: bold; - color: #ffffff; - font-size: 50px; - text-decoration: none; - text-align: center; - outline: none; - border: none; -} - -.buttonvehiclemenusettingsreset { - position: absolute; - margin: 0; - background-color: rgba(0, 0, 0, 1.0); - border-bottom: 3px solid var(--color); - color: #ffffff; - font-size: 15px; - padding-top: 10px; - padding-bottom: 10px; - padding-left: 5px; - padding-right: 5px; - text-decoration: none; - text-align: center; - top: 80%; - left: 30%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 99999999; - width: 35%; - font-family: Bahnschrift; - font-weight: bold; -} - -.buttonvehiclemenusettingsreset:hover { - background: var(--color); - text-decoration: none; -} - -.buttonvehiclemenusettingssave { - position: absolute; - margin: 0; - background-color: rgba(0, 0, 0, 1.0); - border-bottom: 3px solid var(--color); - color: #ffffff; - font-size: 15px; - padding-top: 10px; - padding-bottom: 10px; - padding-left: 5px; - padding-right: 5px; - text-decoration: none; - text-align: center; - top: 80%; - left: 70%; - margin-right: -50%; - transform: translate(-50%, -50%); - overflow: hidden; - z-index: 99999999; - width: 35%; - font-family: Bahnschrift; - font-weight: bold; -} - -.buttonvehiclemenusettingssave:hover { - background: var(--color); - text-decoration: none; -} - -.full-screen { - width: 100%; - height:100%; - display: flex; - align-items: center; -} - -*{ - font-family: BebasNeueBold; -} diff --git a/resources/[carscripts]/rtx_vehiclemenu/html/ui.html b/resources/[carscripts]/rtx_vehiclemenu/html/ui.html deleted file mode 100644 index 41a91461a..000000000 --- a/resources/[carscripts]/rtx_vehiclemenu/html/ui.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - - - - - -
-
-
-
-
-
-
-
-
-
-
-
-
MOTORHAUBE
-
-
-
KOFFERAUM
-
-
-
TÜR 1
-
-
-
TÜR 2
-
-
-
TÜR 3
-
-
-
TÜR 4
-
-
-
-
-
-
-
FENSTER 1
-
-
-
FENSTER 2
-
-
-
FENSTER 3
-
-
-
Fenster 4
-
-
-
-
-
-
-
SITZ 1
SITZ 1
SITZ 1
-
-
-
-
-
-
-
EXTRAS 1
EXTRAS 1
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
Lamborghini
-
-
-
Aventador
-
-
-
-
8T6 2456
-
-
-
-
-
- -
-
- -
-
- -
-
-
-
-
-
-
-
-
- -
VEHICLE MENU SETTINGS
-
SCALE
-
-
-
- -
-
- -
-
RESET
-
SAVE
-
-
- - \ No newline at end of file diff --git a/resources/[carscripts]/rtx_vehiclemenu/language/main.lua b/resources/[carscripts]/rtx_vehiclemenu/language/main.lua deleted file mode 100644 index 31565d640..000000000 --- a/resources/[carscripts]/rtx_vehiclemenu/language/main.lua +++ /dev/null @@ -1,19 +0,0 @@ -Language = { -["German"] = { - ["vehiclelocked"] = "Du hast das Fahrzeug abgeschlossen", - ["vehicleunlocked"] = "Du hast das Fahrzeug aufgeschlossen", - ["seatoccupied"] = "Dieser Sitz ist besetzt", - ["novehicle"] = "Du bist nicht im Fahrzeug", - ["sprinklersenabled"] = "Du hast die Scheibenwischer des Fahrzeugs eingeschaltet", - ["alreadyenabled"] = "Die Scheibenwischer sind bereits eingeschaltet", - ["hazardlightson"] = "Du hast die Warnblinkanlage eingeschaltet", - ["hazardlightsoff"] = "Du hast die Warnblinkanlage ausgeschaltet", - ["interiorlightson"] = "Du hast das Innenlicht eingeschaltet", - ["interiorlightsoff"] = "Du hast das Innenlicht ausgeschaltet", - ["engineon"] = "Du hast den Motor gestartet", - ["engineonoff"] = "Du hast den Motor ausgeschaltet", - ["vehiclemenubind"] = "Fahrzeugmenü", - ["seat"] = "Sitz", - ["extra"] = "Extra", - }, -} \ No newline at end of file diff --git a/resources/[carscripts]/rtx_vehiclemenu/server/main.lua b/resources/[carscripts]/rtx_vehiclemenu/server/main.lua deleted file mode 100644 index bc5f512e4..000000000 Binary files a/resources/[carscripts]/rtx_vehiclemenu/server/main.lua and /dev/null differ diff --git a/resources/[inventory]/cs_shops/config/config.lua b/resources/[inventory]/cs_shops/config/config.lua index 329c4f050..4d32cf3f7 100644 --- a/resources/[inventory]/cs_shops/config/config.lua +++ b/resources/[inventory]/cs_shops/config/config.lua @@ -1287,7 +1287,24 @@ CodeStudio.Products = { itemStock = 150, itemPrice = 50, itemInfo = "", - }, + }, + ['kq_tow_rope'] = { + itemName = "Abschleppseil", + itemStock = 150, + itemPrice = 50, + itemInfo = "", + }, + ['kq_winch'] = { + itemName = "Seilwinden Ferndedinung", + itemStock = 150, + itemPrice = 50, + itemInfo = "", + }, + + + + + } }, ['police_weapons'] = { @@ -2697,10 +2714,28 @@ CodeStudio.Products = { itemInfo = "", }, } - } - - + }, + ['tools'] = { + categoryName = "Items", + categoryLogo = "fa-shopping-basket", + items = { + ['kq_tow_rope'] = { + itemName = "Abschleppseil", + itemStock = 150, + itemPrice = 50, + itemInfo = "", + }, + ['kq_winch'] = { + itemName = "Seilwinden Ferndedinung", + itemStock = 150, + itemPrice = 50, + itemInfo = "", + }, + + } + }, + } -- Schließende Klammer für CodeStudio.Products @@ -2830,6 +2865,7 @@ CodeStudio.Shops = { [2] = 'kayas', [3] = 'odinsbar', [4] = 'cute', + [5] = 'tools', }, diff --git a/resources/[inventory]/cs_shops/ui/image/kq_tow_rope.png b/resources/[inventory]/cs_shops/ui/image/kq_tow_rope.png new file mode 100644 index 000000000..b4df4f461 Binary files /dev/null and b/resources/[inventory]/cs_shops/ui/image/kq_tow_rope.png differ diff --git a/resources/[inventory]/cs_shops/ui/image/kq_winch.png b/resources/[inventory]/cs_shops/ui/image/kq_winch.png new file mode 100644 index 000000000..9ebc80129 Binary files /dev/null and b/resources/[inventory]/cs_shops/ui/image/kq_winch.png differ diff --git a/resources/[inventory]/inventory_images/images/kq_tow_rope.png b/resources/[inventory]/inventory_images/images/kq_tow_rope.png new file mode 100644 index 000000000..b4df4f461 Binary files /dev/null and b/resources/[inventory]/inventory_images/images/kq_tow_rope.png differ diff --git a/resources/[inventory]/inventory_images/images/kq_winch.png b/resources/[inventory]/inventory_images/images/kq_winch.png new file mode 100644 index 000000000..9ebc80129 Binary files /dev/null and b/resources/[inventory]/inventory_images/images/kq_winch.png differ diff --git a/resources/[inventory]/tgiann-inventory/items/items.lua b/resources/[inventory]/tgiann-inventory/items/items.lua index d965fbc50..cd48aa669 100644 --- a/resources/[inventory]/tgiann-inventory/items/items.lua +++ b/resources/[inventory]/tgiann-inventory/items/items.lua @@ -10379,6 +10379,27 @@ itemsData = { image = 'dynamite.png', name = 'dynamite', }, - + kq_tow_rope = { + shouldClose = true, + type = 'item', + description = '', + weight = 2000, + label = 'Abschleppseil', + unique = true, + useable = true, + image = 'kq_tow_rope.png', + name = 'kq_tow_rope', + }, + kq_winch = { + shouldClose = true, + type = 'item', + description = '', + weight = 4000, + label = 'Seilwinden Steuerung', + unique = true, + useable = true, + image = 'kq_winch.png', + name = 'kq_winch', + }, }