ed
This commit is contained in:
parent
84031a9c3f
commit
3cc1d14b39
91 changed files with 2596 additions and 2913 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
resources/[carscripts]/MrNewbVehicleKeys/src/client/main.lua
Normal file
BIN
resources/[carscripts]/MrNewbVehicleKeys/src/client/main.lua
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,91 @@
|
|||
-- Provided by Daniel Peter -- Thank you :)
|
||||
|
||||
local fistHash = joaat('WEAPON_UNARMED')
|
||||
|
||||
local function carJackLoop()
|
||||
local ped = cache.ped
|
||||
while cache.weapon do
|
||||
local waitTime = 100
|
||||
local isAiming, target = GetEntityPlayerIsFreeAimingAt(cache.playerId)
|
||||
if GetCurrentPedWeapon(ped) == fistHash then
|
||||
break
|
||||
end
|
||||
if isAiming and IsPedInAnyVehicle(target, false) then
|
||||
waitTime = 0
|
||||
local veh = GetVehiclePedIsIn(target, false)
|
||||
local targetDistance = #(GetEntityCoords(ped) - GetEntityCoords(target))
|
||||
|
||||
if targetDistance < 10.0 and IsPedFacingPed(target, ped, 65.0) then
|
||||
SetVehicleForwardSpeed(veh, 0)
|
||||
|
||||
SetVehicleForwardSpeed(veh, 0)
|
||||
TaskLeaveVehicle(target, veh, 256)
|
||||
|
||||
while IsPedInAnyVehicle(target, false) do
|
||||
Wait(5)
|
||||
end
|
||||
|
||||
RequestAnimDict("missfbi5ig_22")
|
||||
RequestAnimDict("mp_common")
|
||||
|
||||
SetPedDropsWeaponsWhenDead(target, false)
|
||||
ClearPedTasks(target)
|
||||
TaskTurnPedToFaceEntity(target, ped, 3.0)
|
||||
TaskSetBlockingOfNonTemporaryEvents(target, true)
|
||||
SetPedFleeAttributes(target, 0, 0)
|
||||
SetPedCombatAttributes(target, 17, 1)
|
||||
SetPedSeeingRange(target, 0.0)
|
||||
SetPedHearingRange(target, 0.0)
|
||||
SetPedAlertness(target, 0)
|
||||
SetPedKeepTask(target, true)
|
||||
TaskPlayAnim(target, "missfbi5ig_22", "hands_up_anxious_scientist", 8.0, -8, -1, 12, 1, 0, 0, 0)
|
||||
Wait(4000)
|
||||
targetDistance = #(GetEntityCoords(ped) - GetEntityCoords(target))
|
||||
|
||||
if not IsEntityDead(target) and targetDistance < 10.0 then
|
||||
TaskPlayAnim(target, "mp_common", "givetake1_a", 8.0, -8, -1, 12, 1, 0, 0, 0)
|
||||
Wait(750)
|
||||
exports.MrNewbVehicleKeys:GiveKeys(veh)
|
||||
if math.random(1, 10) <= 7 and DoesEntityExist(veh) then
|
||||
SendDispatchAlert(veh, "hijacking")
|
||||
end
|
||||
SetVehicleNeedsToBeHotwired(veh, false)
|
||||
SetVehicleHasBeenOwnedByPlayer(veh, true)
|
||||
SetEntityAsMissionEntity(veh, true, true)
|
||||
SetVehicleIsStolen(veh, false)
|
||||
SetVehicleIsWanted(veh, false)
|
||||
SetVehRadioStation(veh, 'OFF')
|
||||
Wait(500)
|
||||
TaskReactAndFleePed(target, ped)
|
||||
SetPedKeepTask(target, true)
|
||||
Wait(2500)
|
||||
TaskReactAndFleePed(target, ped)
|
||||
SetPedKeepTask(target, true)
|
||||
Wait(2500)
|
||||
TaskReactAndFleePed(target, ped)
|
||||
SetPedKeepTask(target, true)
|
||||
Wait(2500)
|
||||
TaskReactAndFleePed(target, ped)
|
||||
SetPedKeepTask(target, true)
|
||||
end
|
||||
end
|
||||
end
|
||||
Wait(waitTime)
|
||||
end
|
||||
end
|
||||
|
||||
lib.onCache('weapon', function(weapon)
|
||||
if not weapon then return end
|
||||
|
||||
local damageType = GetWeaponDamageType(weapon)
|
||||
|
||||
if damageType ~= 3 then return end
|
||||
|
||||
lib.waitFor(function ()
|
||||
if cache.weapon == weapon then
|
||||
return true
|
||||
end
|
||||
end, nil, 3000)
|
||||
|
||||
carJackLoop()
|
||||
end)
|
|
@ -0,0 +1,40 @@
|
|||
-- This will use the bridge, But the code remains open incase youd like to/need to alter it.
|
||||
-- You are provided with alert type, and the vehicle.
|
||||
function SendDispatchAlert(vehicle, _type)
|
||||
local typeAlert = nil
|
||||
local blipIcon = 66
|
||||
if _type == "lockpick" then
|
||||
if math.random(100) > Config.Prefrences.LockpickAlertChance then return end
|
||||
typeAlert = locale("DispatchAlert.LockpickAlert")
|
||||
blipIcon = 66
|
||||
elseif _type == "hotwire" then
|
||||
if math.random(100) > Config.Prefrences.HotwireAlertChance then return end
|
||||
typeAlert = locale("DispatchAlert.HotwireAlert")
|
||||
blipIcon = 227
|
||||
elseif _type == "hijacking" then
|
||||
if math.random(100) > Config.Prefrences.HijackingAlertChance then return end
|
||||
typeAlert = locale("DispatchAlert.HijackingAlert")
|
||||
blipIcon = 229
|
||||
end
|
||||
local netID = NetworkGetNetworkIdFromEntity(vehicle)
|
||||
local plate = GetVehicleNumberPlateText(vehicle)
|
||||
local vehCoords = GetEntityCoords(vehicle)
|
||||
local data = {
|
||||
message = typeAlert,
|
||||
code = '10-80',
|
||||
icon = 'fa-solid fa-car-burst',
|
||||
priority = 2,
|
||||
coords = vehCoords,
|
||||
vehicle = vehicle,
|
||||
plate = plate,
|
||||
time = 10000,
|
||||
blipData = {
|
||||
sprite = blipIcon,
|
||||
color = 15,
|
||||
scale = 0.8
|
||||
},
|
||||
jobs = Config.Prefrences.DispatchAlertJobs,
|
||||
netID = netID
|
||||
}
|
||||
Bridge.Dispatch.SendAlert(data)
|
||||
end
|
|
@ -0,0 +1,68 @@
|
|||
if Config.Prefrences.UseThirdPartyLockpick then return end
|
||||
|
||||
local runningRahe = GetResourceState('rahe-boosting') == 'started'
|
||||
|
||||
RegisterNetEvent('lockpicks:UseLockpick', function(advanced, slot)
|
||||
local coords = GetEntityCoords(cache.ped)
|
||||
--local vehicle = lib.getClosestVehicle(coords, 5, true)
|
||||
local vehicle = GetClosestVehicle(coords, 5, true)
|
||||
--if not vehicle then return NotifyPlayer(locale("LockPick.ToFarFromVehicle"), "error") end -- this should help with housing system overlap
|
||||
if cache.vehicle then return NotifyPlayer(locale("LockPick.InsideVehicle"), "error") end
|
||||
if not vehicle then return end
|
||||
if HijackImmune(vehicle) then return NotifyPlayer(locale("LockPick.VehicleIsHijackImmune"), "error") end
|
||||
if NetworkGetEntityIsNetworked(vehicle) and Entity(vehicle).state.ignoreLocks then return NotifyPlayer(locale("LockPick.VehicleIsLocked"), "error") end
|
||||
|
||||
if CheckForBlackListedVehicles(vehicle) then return end
|
||||
|
||||
if runningRahe then
|
||||
-- Based on Rahes docs, this should work. I dont own a copy to test it though.
|
||||
local identifier = Bridge.Framework.GetPlayerIdentifier()
|
||||
local boostingInfo = Entity(vehicle).state.boostingData
|
||||
if boostingInfo ~= nil and ((not boostingInfo.groupIdentifiers and boostingInfo.cid ~= identifier) or (boostingInfo.groupIdentifiers and not boostingInfo.groupIdentifiers[identifier])) then
|
||||
NotifyPlayer("This Vehicle Is not Meant For You", "error")
|
||||
return
|
||||
end
|
||||
|
||||
if boostingInfo ~= nil and boostingInfo.advancedSystem then
|
||||
NotifyPlayer("This vehicle requires more advanced systems!", "error")
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
if HasKeysForVehicle(vehicle) then return NotifyPlayer(locale("LockPick.YouAlreadyHaveKeys"), "error") end
|
||||
|
||||
local lockstatus = GetVehicleDoorLockStatus(vehicle)
|
||||
if not lockstatus == 2 then return NotifyPlayer(locale("LockPick.VehicleAlreadyUnlocked"), "error") end
|
||||
|
||||
local distance = #(coords - GetEntityCoords(vehicle))
|
||||
if distance > 5 then return NotifyPlayer(locale("LockPick.ToFarFromVehicle"), "error") end
|
||||
local plate = GetVehicleNumberPlateText(vehicle)
|
||||
local trimmed = TrimString(plate)
|
||||
local chanceToAlert = Config.Prefrences.LockpickAlertChance
|
||||
local chanceToDispatch = math.random(1, 100)
|
||||
|
||||
if chanceToAlert > chanceToDispatch then
|
||||
SendDispatchAlert(vehicle, "lockpick")
|
||||
end
|
||||
CreateThread(function()
|
||||
PlayLockpickingAnimation(vehicle)
|
||||
end)
|
||||
local minigame = BeginLockPickMiniGame(vehicle, advanced)
|
||||
if minigame then
|
||||
lib.callback.await('MrNewb_VehicleKeysV2:Server:LockPickedVehicle', false, NetworkGetNetworkIdFromEntity(vehicle), trimmed)
|
||||
else
|
||||
NotifyPlayer(locale("LockPick.Fail"), "error")
|
||||
end
|
||||
local animDict = Config.AnimationSettings.animDict
|
||||
local anim = Config.AnimationSettings.anim
|
||||
local isPlaying = IsEntityPlayingAnim(cache.ped, animDict, anim, 3)
|
||||
if isPlaying then
|
||||
StopEntityAnim(cache.ped, anim, animDict, 1.0)
|
||||
RemoveAnimDict(animDict)
|
||||
end
|
||||
local chanceToBreak = Config.Prefrences.LockpickBreakChance
|
||||
local chanceToBeat = math.random(1, 100)
|
||||
if chanceToBreak < chanceToBeat then
|
||||
TriggerServerEvent('MrNewb_VehicleKeysV2:Server:RemoveLockpick', advanced, slot)
|
||||
end
|
||||
end)
|
|
@ -0,0 +1,191 @@
|
|||
function BeginLockPickMiniGame(vehicle, advanced)
|
||||
R14EvidenceEvents(vehicle, "lockpicking")
|
||||
if Config.Prefrences.LockPickMiniGame == "ox" then
|
||||
local result = lib.skillCheck({'easy', 'easy', 'easy', 'easy'}, {'w', 'a', 's', 'd'})
|
||||
return result
|
||||
elseif Config.Prefrences.LockPickMiniGame == "bagus" then
|
||||
local result = exports['lockpick']:startLockpick()
|
||||
return result
|
||||
elseif Config.Prefrences.LockPickMiniGame == "ps-ui" then
|
||||
local returnvalue = false
|
||||
exports['ps-ui']:Circle(function(success)
|
||||
if success then
|
||||
returnvalue = true
|
||||
else
|
||||
returnvalue = false
|
||||
end
|
||||
end, 3, 20000)
|
||||
return returnvalue
|
||||
elseif Config.Prefrences.LockPickMiniGame == "bl-progress" then
|
||||
local success = exports.bl_ui:Progress(3, 50)
|
||||
return success
|
||||
elseif Config.Prefrences.LockPickMiniGame == "bl-keyspam" then
|
||||
local success = exports.bl_ui:KeySpam(3, 50)
|
||||
return success
|
||||
elseif Config.Prefrences.LockPickMiniGame == "bl-circle" then
|
||||
local success = exports.bl_ui:CircleProgress(3, 50)
|
||||
return success
|
||||
elseif Config.Prefrences.LockPickMiniGame == "bl-printlock" then
|
||||
local success = exports.bl_ui:PrintLock(3, {
|
||||
grid = 4,
|
||||
duration = 5000,
|
||||
target = 4
|
||||
})
|
||||
return success
|
||||
elseif Config.Prefrences.LockPickMiniGame == "t3_lockpick" then
|
||||
local returnvalue = false
|
||||
local success = exports["t3_lockpick"]:startLockpick(1.0, 2, 5)
|
||||
if success then
|
||||
returnvalue = true
|
||||
else
|
||||
returnvalue = false
|
||||
end
|
||||
return returnvalue
|
||||
elseif Config.Prefrences.LockPickMiniGame == "bit-unlock" then
|
||||
-- untested, I dont own this to test
|
||||
local returnvalue = nil
|
||||
TriggerEvent("bit-unlock:start", "lockpick", "easy", function(success)
|
||||
if success then
|
||||
returnvalue = true
|
||||
else
|
||||
returnvalue = false
|
||||
end
|
||||
end)
|
||||
while returnvalue == nil do
|
||||
Wait(0)
|
||||
end
|
||||
return returnvalue
|
||||
elseif Config.Prefrences.LockPickMiniGame == "xmmx" then
|
||||
local success = exports.xmmx_circlesgame:StartCircleGame("medium", 50, "letters", "Test Game:")
|
||||
return success
|
||||
elseif Config.Prefrences.LockPickMiniGame == "rainmadlockpick" then
|
||||
-- he doesnt list if a bool is returned on false and closed my ticket when I asked.
|
||||
local success = exports['rm_minigames']:timedLockpick(200)
|
||||
return success or false
|
||||
elseif Config.Prefrences.LockPickMiniGame == "rainmadaction" then
|
||||
-- he doesnt list if a bool is returned on false and closed my ticket when I asked.
|
||||
local success = exports['rm_minigames']:timedAction(3)
|
||||
return success or false
|
||||
elseif Config.Prefrences.LockPickMiniGame == "rainmadquick" then
|
||||
-- he doesnt list if a bool is returned on false and closed my ticket when I asked.
|
||||
local success = exports['rm_minigames']:quickTimeEvent("easy")
|
||||
return success or false
|
||||
elseif Config.Prefrences.LockPickMiniGame == "rainmadmash" then
|
||||
-- he doesnt list if a bool is returned on false and closed my ticket when I asked.
|
||||
local success = exports['rm_minigames']:buttonMashing(5, 10)
|
||||
return success or false
|
||||
elseif Config.Prefrences.LockPickMiniGame == "rainmadangled" then
|
||||
-- he doesnt list if a bool is returned on false and closed my ticket when I asked.
|
||||
local success = exports['rm_minigames']:angledLockpick("easy")
|
||||
return success or false
|
||||
else
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
function BeginHotWireMiniGame(vehicle)
|
||||
if HijackImmune(vehicle) then return NotifyPlayer(locale("LockPick.VehicleIsHijackImmune"), "error") end
|
||||
R14EvidenceEvents(vehicle, "hotwiring")
|
||||
if Config.Prefrences.HotWireMiniGame == "ox" then
|
||||
local result = lib.skillCheck({'easy', 'easy', 'easy', 'easy'}, {'w', 'a', 's', 'd'})
|
||||
return result
|
||||
elseif Config.Prefrences.HotWireMiniGame == "bagus" then
|
||||
local result = exports['lockpick']:startLockpick()
|
||||
return result
|
||||
elseif Config.Prefrences.HotWireMiniGame == "ps-ui" then
|
||||
local returnvalue = false
|
||||
exports['ps-ui']:Circle(function(success)
|
||||
if success then
|
||||
returnvalue = true
|
||||
else
|
||||
returnvalue = false
|
||||
end
|
||||
end, 3, 20000)
|
||||
return returnvalue
|
||||
elseif Config.Prefrences.HotWireMiniGame == "bl-progress" then
|
||||
local success = exports.bl_ui:Progress(3, 50)
|
||||
return success
|
||||
elseif Config.Prefrences.HotWireMiniGame == "bl-keyspam" then
|
||||
local success = exports.bl_ui:KeySpam(3, 50)
|
||||
return success
|
||||
elseif Config.Prefrences.HotWireMiniGame == "bl-circle" then
|
||||
local success = exports.bl_ui:CircleProgress(3, 50)
|
||||
return success
|
||||
elseif Config.Prefrences.HotWireMiniGame == "bl-printlock" then
|
||||
local success = exports.bl_ui:PrintLock(3, {
|
||||
grid = 4,
|
||||
duration = 5000,
|
||||
target = 4
|
||||
})
|
||||
return success
|
||||
elseif Config.Prefrences.HotWireMiniGame == "t3_lockpick" then
|
||||
local returnvalue = false
|
||||
local success = exports["t3_lockpick"]:startLockpick(1.0, 2, 5)
|
||||
if success then
|
||||
returnvalue = true
|
||||
else
|
||||
returnvalue = false
|
||||
end
|
||||
return returnvalue
|
||||
elseif Config.Prefrences.HotWireMiniGame == "bit-unlock" then
|
||||
-- untested, I dont own this to test
|
||||
local returnvalue = nil
|
||||
TriggerEvent("bit-unlock:start", "lockpick", "easy", function(success)
|
||||
if success then
|
||||
returnvalue = true
|
||||
else
|
||||
returnvalue = false
|
||||
end
|
||||
end)
|
||||
while returnvalue == nil do
|
||||
Wait(0)
|
||||
end
|
||||
return returnvalue
|
||||
elseif Config.Prefrences.HotWireMiniGame == "xmmx" then
|
||||
local success = exports.xmmx_circlesgame:StartCircleGame("medium", 50, "letters", "Test Game:")
|
||||
return success
|
||||
elseif Config.Prefrences.HotWireMiniGame == "rainmadlockpick" then
|
||||
-- he doesnt list if a bool is returned on false and closed my ticket when I asked.
|
||||
local success = exports['rm_minigames']:timedLockpick(200)
|
||||
return success or false
|
||||
elseif Config.Prefrences.HotWireMiniGame == "rainmadaction" then
|
||||
-- he doesnt list if a bool is returned on false and closed my ticket when I asked.
|
||||
local success = exports['rm_minigames']:timedAction(3)
|
||||
return success or false
|
||||
elseif Config.Prefrences.HotWireMiniGame == "rainmadquick" then
|
||||
-- he doesnt list if a bool is returned on false and closed my ticket when I asked.
|
||||
local success = exports['rm_minigames']:quickTimeEvent("easy")
|
||||
return success or false
|
||||
elseif Config.Prefrences.HotWireMiniGame == "rainmadmash" then
|
||||
-- he doesnt list if a bool is returned on false and closed my ticket when I asked.
|
||||
local success = exports['rm_minigames']:buttonMashing(5, 10)
|
||||
return success or false
|
||||
elseif Config.Prefrences.HotWireMiniGame == "rainmadangled" then
|
||||
-- he doesnt list if a bool is returned on false and closed my ticket when I asked.
|
||||
local success = exports['rm_minigames']:angledLockpick("easy")
|
||||
return success or false
|
||||
else
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
--[[
|
||||
|
||||
-- These are some example minigames, you can swap with the above
|
||||
|
||||
-------------------BaguscodeStudio-----------------
|
||||
--https://github.com/baguscodestudio/lockpick
|
||||
---
|
||||
---
|
||||
----------------------PS-UI MINIGAMES----------------------
|
||||
---https://github.com/Project-Sloth/ps-ui
|
||||
---
|
||||
---
|
||||
----------------------Byte-Labs--------------------------------
|
||||
---https://github.com/Byte-Labs-Studio/bl_ui
|
||||
---
|
||||
---
|
||||
----------------------T3Development--------------------------
|
||||
--https://github.com/T3development/t3_lockpick
|
||||
|
||||
--]]
|
|
@ -0,0 +1,15 @@
|
|||
if GetResourceState("ox_inventory") ~= "started" then return end
|
||||
|
||||
function DestroyKey(slot)
|
||||
TriggerServerEvent("MrNewbVehicleKeys_v2:Server:DestroyKey", slot)
|
||||
end
|
||||
|
||||
function RenameKeyRing(slot)
|
||||
exports.ox_inventory:closeInventory()
|
||||
local input = lib.inputDialog('KeyRing Label', {'Input New Label'})
|
||||
if not input then return end
|
||||
TriggerServerEvent("MrNewbVehicleKeys_v2:Server:RenameKeyring", slot, input[1])
|
||||
end
|
||||
|
||||
exports('DestroyKey', DestroyKey)
|
||||
exports('RenameKeyRing', RenameKeyRing)
|
|
@ -0,0 +1,103 @@
|
|||
function RequestLoadModel(model)
|
||||
return Bridge.Utility.LoadModel(model)
|
||||
end
|
||||
|
||||
function CheckForBlackListedVehicles(vehicle)
|
||||
vehicle = tonumber(vehicle)
|
||||
if not DoesEntityExist(vehicle) then return false end
|
||||
local model = GetEntityModel(vehicle)
|
||||
if NetworkGetEntityIsNetworked(vehicle) then
|
||||
if Entity(vehicle).state.ignoreLocks then return true end
|
||||
end
|
||||
return Nokeyvehicles[model] ~= nil
|
||||
end
|
||||
|
||||
function CreateEntityBlip(entity, blipname, color, sprite)
|
||||
local blip = AddBlipForEntity(entity)
|
||||
SetBlipColour(blip, color)
|
||||
SetBlipAsShortRange(blip, false)
|
||||
SetBlipScale(blip, 1.0)
|
||||
SetBlipSprite(blip, sprite)
|
||||
ShowHeadingIndicatorOnBlip(blip, true)
|
||||
BeginTextCommandSetBlipName('STRING')
|
||||
AddTextComponentSubstringPlayerName(blipname)
|
||||
EndTextCommandSetBlipName(blip)
|
||||
return blip
|
||||
end
|
||||
|
||||
function RequestAnimDict(dict)
|
||||
return Bridge.Utility.RequestAnimDict(dict)
|
||||
end
|
||||
|
||||
function NotifyPlayer(message, _type)
|
||||
return Bridge.Notify.SendNotify(message, _type, 6000)
|
||||
end
|
||||
|
||||
function ShowHelpText(message)
|
||||
return Bridge.Notify.ShowHelpText(message, Config.Prefrences.HelpTextPostion)
|
||||
end
|
||||
|
||||
function HideHelpText()
|
||||
return Bridge.Notify.HideHelpText()
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
---------------- This is here to simplify usage for r-14 evidence users, if you dont use it just ignore it ----------------
|
||||
local runningR14 = GetResourceState('r14-evidence') == 'started'
|
||||
function R14EvidenceEvents(vehicle, _type)
|
||||
if not runningR14 then return end
|
||||
local plate = GetVehicleNumberPlateText(vehicle)
|
||||
if _type == "lockpicking" then
|
||||
TriggerServerEvent('evidence:server:CreateCarFingerprint', plate, "Driver Door Scratched Up")
|
||||
TriggerServerEvent('evidence:server:SetExteriorTamper', true, plate)
|
||||
elseif _type == "hotwiring" then
|
||||
TriggerServerEvent('evidence:server:CreateCarFingerprint', plate, "Vehicle Ignition Tampered With")
|
||||
TriggerServerEvent('evidence:server:SetIgnitionTamper', true, plate)
|
||||
end
|
||||
end
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,39 @@
|
|||
lib.addCommand('giveadminkey', {
|
||||
help = 'Gives an admin a key to any vehicle by plate',
|
||||
params = {
|
||||
{
|
||||
name = 'id',
|
||||
type = 'number',
|
||||
help = 'Player ID To Grant Key To',
|
||||
},
|
||||
{
|
||||
name = 'plate',
|
||||
type = 'string',
|
||||
help = 'Vehicle Plate Number',
|
||||
},
|
||||
},
|
||||
restricted = 'group.admin'
|
||||
}, function(source, args, raw)
|
||||
local src = source
|
||||
local plate = string.upper(args.plate)
|
||||
if not plate then return NotifyPlayer(src, locale("AdminCommands.NoVehicleNearby"), "error", 6000) end
|
||||
local target = tonumber(args.id)
|
||||
if not target then target = src end
|
||||
local pedId = GetPlayerPed(target)
|
||||
if pedId == 0 then return NotifyPlayer(src, locale("AdminCommands.NoPlayerWithID"), "error", 6000) end
|
||||
AddKeyByPlate(target, plate)
|
||||
NotifyPlayer(target, locale("AdminCommands.KeyGranted"), "success")
|
||||
end)
|
||||
|
||||
lib.addCommand('givenearbykey', {
|
||||
help = 'Gives an admin a key to the closest vehicle',
|
||||
restricted = 'group.admin'
|
||||
}, function(source, raw)
|
||||
local src = source
|
||||
local coords = GetEntityCoords(GetPlayerPed(src))
|
||||
local vehicle = lib.getClosestVehicle(coords, 5)
|
||||
if not vehicle then return NotifyPlayer(src, locale("AdminCommands.NoVehicleNearby"), "error", 6000) end
|
||||
local netId = NetworkGetNetworkIdFromEntity(vehicle)
|
||||
AddKeyByNetId(src, netId)
|
||||
NotifyPlayer(src, locale("AdminCommands.KeyGranted"), "success", 6000)
|
||||
end)
|
|
@ -0,0 +1,28 @@
|
|||
if GetResourceState("ox_inventory") ~= "started" then return end
|
||||
|
||||
exports.ox_inventory:registerHook('swapItems', function(payload)
|
||||
local src = payload.source
|
||||
if payload.toType == "player" and payload.fromType == "player" then
|
||||
if type(payload.toSlot) == "table" and payload.toSlot.name == Config.ItemBasedSettings.keyRingItem then
|
||||
AddToKeyRing(src, payload.fromSlot, payload.toSlot.slot)
|
||||
end
|
||||
end
|
||||
return true
|
||||
end, {
|
||||
itemFilter = {
|
||||
[Config.ItemBasedSettings.vehicleKeysItem] = true,
|
||||
},
|
||||
})
|
||||
|
||||
RegisterNetEvent("MrNewbVehicleKeys_v2:Server:DestroyKey", function(slot)
|
||||
local src = source
|
||||
Bridge.Inventory.RemoveItem(src, Config.ItemBasedSettings.vehicleKeysItem, 1, slot, nil)
|
||||
end)
|
||||
|
||||
RegisterNetEvent("MrNewbVehicleKeys_v2:Server:RenameKeyring", function(slot, newlabel)
|
||||
local src = source
|
||||
local slotData = Bridge.Inventory.GetItemBySlot(src, slot)
|
||||
if type(slotData) ~= "table" then return end
|
||||
slotData.metadata.label = newlabel
|
||||
Bridge.Inventory.SetMetadata(src, slotData.name, slot, slotData.metadata)
|
||||
end)
|
|
@ -0,0 +1,33 @@
|
|||
RegisterNetEvent('MrNewbVehicleKeys:Server:SendLog', function(data)
|
||||
local src = source
|
||||
local identifier = Bridge.Framework.GetPlayerIdentifier(src)
|
||||
Bridge.Utility.SendLog(src, "Player: | ID#" .. src .. " | "..identifier.." | ".. data)
|
||||
end)
|
||||
|
||||
RegisterNetEvent("MrNewb_VehicleKeysV2:Server:RemoveLockpick", function(lockPickType, slot)
|
||||
local src = source
|
||||
if not src then return DoDebugPrint("ERROR: RemoveLockpick No Source") end
|
||||
--If you want the advanced lockpicks to remove then uncomment out this stuff
|
||||
--if lockPickType then
|
||||
--Bridge.Inventory.RemoveItem(src, Config.ItemBasedSettings.advancedlockpickItemName, 1, slot, nil)
|
||||
--else
|
||||
Bridge.Inventory.RemoveItem(src, Config.ItemBasedSettings.lockpickItemName, 1, slot, nil)
|
||||
--end
|
||||
end)
|
||||
|
||||
function RemoveAccountBalance(src, account, price)
|
||||
return Bridge.Framework.RemoveAccountBalance(src, account, price)
|
||||
end
|
||||
|
||||
function GetAccountBalance(src, account)
|
||||
return Bridge.Framework.GetAccountBalance(src, account)
|
||||
end
|
||||
|
||||
function NotifyPlayer(src, message, _type)
|
||||
if not _type then _type = "success" end
|
||||
return Bridge.Notify.SendNotify(src, message, _type, 6000)
|
||||
end
|
||||
|
||||
function GetPlayerIdentifier(src)
|
||||
return Bridge.Framework.GetPlayerIdentifier(src)
|
||||
end
|
BIN
resources/[carscripts]/MrNewbVehicleKeys/src/server/server.lua
Normal file
BIN
resources/[carscripts]/MrNewbVehicleKeys/src/server/server.lua
Normal file
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,97 @@
|
|||
FobConfig = {
|
||||
EnabledButtons = {'REMOTE_START',}, -- set this to the defualt buttons you want to use --[['EXPLODE_VEHICLE','ROOF_TOGGLE', 'SELFPARK_VEHICLE', 'SUMMON_VEHICLE'-]]
|
||||
ExtraButtons = { -- set this to the extra buttons you want to use
|
||||
{
|
||||
number = 1,
|
||||
action_id = 'REMOTE_START',
|
||||
text = 'Remote Start',
|
||||
description = 'This will start/stop the engine of the vehicle',
|
||||
icon = 'fas fa-car',
|
||||
price = 25000,
|
||||
canPurchase = false,
|
||||
action = function(vehicle)
|
||||
local engineStatus = GetIsVehicleEngineRunning(vehicle)
|
||||
SetVehicleEngineOn(vehicle, not engineStatus, true, true)
|
||||
end,
|
||||
},
|
||||
{
|
||||
number = 2,
|
||||
action_id = 'ROOF_TOGGLE',
|
||||
text = 'Toggle Roof',
|
||||
description = 'This will open/close the roof of the vehicle',
|
||||
icon = 'fas fa-car',
|
||||
price = 25000,
|
||||
canPurchase = false,
|
||||
action = function(vehicle)
|
||||
local roofState = GetConvertibleRoofState(vehicle)
|
||||
if roofState == 2 then return RaiseConvertibleRoof(vehicle, false) end
|
||||
LowerConvertibleRoof(vehicle, false)
|
||||
end,
|
||||
},
|
||||
{
|
||||
number = 3,
|
||||
action_id = 'SELFPARK_VEHICLE',
|
||||
text = 'Park Vehicle',
|
||||
description = 'This will park your vehicle in the nearest parking spot',
|
||||
icon = 'fas fa-car',
|
||||
price = 25000,
|
||||
canPurchase = false,
|
||||
action = function(vehicle)
|
||||
-- Please be aware this feature is something I added for fun, due to the nature of fivem itl never be perfect but by using this you accept bugs may occur.
|
||||
DoVehicleSelfPark(vehicle)
|
||||
end,
|
||||
},
|
||||
{
|
||||
number = 4,
|
||||
action_id = 'SUMMON_VEHICLE',
|
||||
text = 'Summon Vehicle',
|
||||
description = 'This will summon your vehicle to your location',
|
||||
icon = 'fas fa-car',
|
||||
price = 25000,
|
||||
canPurchase = false,
|
||||
action = function(vehicle)
|
||||
-- Please be aware this feature is something I added for fun, due to the nature of fivem itl never be perfect but by using this you accept bugs may occur.
|
||||
SummonVehicle(vehicle)
|
||||
end,
|
||||
},
|
||||
{
|
||||
number = 5,
|
||||
action_id = 'AUTO_PILOT',
|
||||
text = 'Auto Pilot',
|
||||
description = 'This Will Drive Your Vehicle To The Set Waypoint',
|
||||
icon = 'fas fa-car',
|
||||
price = 25000,
|
||||
canPurchase = true,
|
||||
action = function()
|
||||
-- Please be aware this feature is something I added for fun, due to the nature of fivem itl never be perfect but by using this you accept bugs may occur.
|
||||
EnableAutoPilot()
|
||||
end,
|
||||
},
|
||||
{
|
||||
number = 6,
|
||||
action_id = 'DANCE_MODE',
|
||||
text = 'Dance Mode',
|
||||
description = 'This Will Make Your Vehicle Dance',
|
||||
icon = 'fas fa-car',
|
||||
price = 25000,
|
||||
canPurchase = true,
|
||||
action = function(vehicle)
|
||||
-- Please be aware this feature is something I added for fun, due to the nature of fivem itl never be perfect but by using this you accept bugs may occur.
|
||||
DanceMode(vehicle)
|
||||
end,
|
||||
},
|
||||
{
|
||||
number = 7,
|
||||
action_id = 'PROXIMITY_TOGGLE',
|
||||
text = 'Proximity Locks',
|
||||
description = 'This Will Allow You To Toggle Proximity Locks',
|
||||
icon = 'fas fa-car',
|
||||
price = 1000,
|
||||
canPurchase = true,
|
||||
action = function(vehicle)
|
||||
-- Please be aware this feature is something I added for fun, due to the nature of fivem itl never be perfect but by using this you accept bugs may occur.
|
||||
ExecuteCommand('proximitylocks')
|
||||
end,
|
||||
},
|
||||
},
|
||||
}
|
|
@ -0,0 +1,256 @@
|
|||
ParkingConfig = {
|
||||
ParkingSpots = {
|
||||
|
||||
-- legionSq Parking, These can be iffy because the gates and pathing in the area. It is what it is, mlos that change the are only add to complications.
|
||||
vector4(216.5536, -773.5043, 30.4210, 68.5943),
|
||||
vector4(215.7879, -776.1614, 30.4259, 70.2589),
|
||||
vector4(214.7778, -778.6617, 30.4364, 70.0988),
|
||||
vector4(214.0412, -781.2578, 30.4436, 67.8297),
|
||||
vector4(213.2212, -783.8340, 30.4528, 69.4862),
|
||||
vector4(212.2259, -786.3449, 30.4670, 67.9735),
|
||||
vector4(211.2191, -788.7724, 30.4813, 68.4553),
|
||||
vector4(210.2605, -791.1945, 30.4969, 69.6803),
|
||||
vector4(210.2605, -791.1945, 30.4969, 69.6803),
|
||||
vector4(209.3122, -793.6119, 30.5151, 71.4489),
|
||||
|
||||
vector4(218.2334, -796.6345, 30.3452, 248.8618),
|
||||
vector4(219.5647, -791.5513, 30.3419, 248.8551),
|
||||
vector4(220.3498, -789.0867, 30.3485, 248.8456),
|
||||
vector4(221.2847, -786.5503, 30.3514, 249.8745),
|
||||
vector4(222.3132, -784.1670, 30.3454, 248.7818),
|
||||
vector4(223.9967, -778.9752, 30.3415, 249.2326),
|
||||
vector4(225.0811, -776.3969, 30.3496, 248.1942),
|
||||
|
||||
vector4(207.96, -795.82, 30.55, 248.81),
|
||||
vector4(206.91, -798.68, 30.57, 248.97),
|
||||
vector4(205.45, -800.74, 30.6, 249.38),
|
||||
vector4(234.07, -771.23, 30.33, 249.64),
|
||||
vector4(232.09, -776.31, 30.3, 248.31),
|
||||
vector4(230.94, -778.87, 30.29, 248.97),
|
||||
vector4(230.7, -781.41, 30.28, 250.6),
|
||||
vector4(229.02, -783.81, 30.28, 250.06),
|
||||
vector4(227.64, -789.2, 30.26, 247.99),
|
||||
vector4(226.28, -791.42, 30.26, 248.95),
|
||||
vector4(225.72, -794.21, 30.24, 249.28),
|
||||
vector4(224.66, -796.59, 30.24, 247.01),
|
||||
vector4(223.2, -798.92, 30.25, 248.79),
|
||||
vector4(222.61, -801.4, 30.25, 248.1),
|
||||
vector4(221.77, -804.1, 30.26, 245.92),
|
||||
vector4(221.6, -806.74, 30.25, 247.77),
|
||||
vector4(228.63, -768.88, 30.36, 69.31),
|
||||
vector4(227.76, -771.74, 30.35, 71.5),
|
||||
vector4(226.39, -773.88, 30.35, 68.62),
|
||||
vector4(224.35, -778.81, 30.34, 64.93),
|
||||
vector4(224.25, -781.78, 30.33, 70.11),
|
||||
vector4(222.81, -784.16, 30.34, 72.1),
|
||||
vector4(221.16, -786.48, 30.35, 68.66),
|
||||
vector4(221.04, -789.3, 30.34, 68.07),
|
||||
vector4(219.76, -791.48, 30.34, 70.29),
|
||||
vector4(218.97, -794.38, 30.34, 68.04),
|
||||
vector4(218.34, -796.97, 30.34, 66.59),
|
||||
vector4(217.56, -799.45, 30.35, 69.51),
|
||||
vector4(216.23, -801.69, 30.37, 70.17),
|
||||
vector4(215.69, -804.56, 30.38, 68.56),
|
||||
vector4(228.66, -786.48, 30.27, 248.6),
|
||||
vector4(233.41, -774.07, 30.31, 248.68),
|
||||
vector4(236.32, -812.55, 29.88, 248.26),
|
||||
vector4(237.41, -809.93, 29.89, 244.26),
|
||||
vector4(238.45, -807.4, 29.9, 244.04),
|
||||
vector4(238.94, -804.82, 29.93, 248.53),
|
||||
vector4(240.36, -802.39, 29.94, 246.63),
|
||||
vector4(241.52, -799.87, 29.96, 245.68),
|
||||
vector4(242.03, -797.37, 29.98, 246.08),
|
||||
vector4(243.06, -794.79, 30.01, 249.35),
|
||||
vector4(244.27, -792.42, 30.03, 247.07),
|
||||
vector4(245.14, -789.87, 30.06, 247.13),
|
||||
vector4(246.18, -787.38, 30.08, 248.58),
|
||||
vector4(246.61, -784.52, 30.12, 248.32),
|
||||
vector4(248.17, -782.46, 30.14, 248.95),
|
||||
vector4(249.12, -779.63, 30.18, 249.01),
|
||||
vector4(249.32, -776.78, 30.22, 247.42),
|
||||
vector4(250.19, -774.3, 30.26, 248.86),
|
||||
vector4(244.75, -772.24, 30.29, 69.17),
|
||||
vector4(228.66, -786.48, 30.27, 248.6),
|
||||
vector4(233.41, -774.07, 30.31, 248.68),
|
||||
vector4(231.42, -810.44, 30.01, 70.18),
|
||||
vector4(231.62, -807.79, 30.03, 68.27),
|
||||
vector4(232.96, -805.51, 30.02, 66.62),
|
||||
vector4(234.88, -803.0, 30.02, 69.62),
|
||||
vector4(235.38, -800.43, 30.04, 68.23),
|
||||
vector4(236.58, -797.83, 30.05, 69.89),
|
||||
vector4(236.68, -795.08, 30.08, 66.13),
|
||||
vector4(237.88, -792.75, 30.08, 66.76),
|
||||
vector4(238.84, -790.11, 30.11, 68.34),
|
||||
vector4(240.15, -787.59, 30.13, 67.55),
|
||||
vector4(241.01, -785.27, 30.15, 69.84),
|
||||
vector4(244.51, -775.07, 30.26, 70.7),
|
||||
vector4(243.65, -777.69, 30.22, 67.25),
|
||||
vector4(242.44, -779.84, 30.2, 68.04),
|
||||
vector4(241.32, -782.41, 30.18, 69.19),
|
||||
-- lower power -- ty Joey
|
||||
vector4(48.46, -600.58, 31.05, 339.83),
|
||||
vector4(45.27, -598.81, 31.05, 337.94),
|
||||
vector4(41.67, -597.67, 31.05, 340.45),
|
||||
vector4(38.56, -596.16, 31.05, 338.12),
|
||||
vector4(34.99, -595.47, 31.05, 340.89),
|
||||
vector4(31.2, -593.92, 31.05, 339.65),
|
||||
vector4(27.64, -592.9, 31.05, 341.86),
|
||||
vector4(7.72, -596.58, 31.05, 251.56),
|
||||
vector4(9.52, -592.97, 31.05, 249.91),
|
||||
vector4(10.79, -589.67, 31.05, 248.15),
|
||||
vector4(11.64, -586.28, 31.05, 250.38),
|
||||
vector4(13.02, -582.73, 31.05, 250.56),
|
||||
vector4(14.43, -579.28, 31.05, 250.48),
|
||||
vector4(15.79, -575.91, 31.05, 250.57),
|
||||
vector4(16.99, -572.2, 31.05, 250.35),
|
||||
vector4(32.27, -579.78, 31.05, 338.59),
|
||||
vector4(36.28, -581.01, 31.05, 342.11),
|
||||
vector4(39.79, -581.82, 31.05, 339.93),
|
||||
vector4(42.7, -583.86, 31.05, 338.52),
|
||||
vector4(46.25, -584.88, 31.05, 343.14),
|
||||
vector4(49.66, -586.2, 31.05, 341.91),
|
||||
vector4(53.64, -586.94, 31.05, 341.75),
|
||||
vector4(57.03, -588.71, 31.05, 340.63),
|
||||
vector4(64.95, -576.19, 31.05, 163.06),
|
||||
vector4(68.08, -577.66, 31.05, 154.95),
|
||||
vector4(72.16, -578.61, 31.05, 155.89),
|
||||
vector4(73.41, -586.19, 31.05, 69.64),
|
||||
vector4(72.48, -589.82, 31.05, 67.8),
|
||||
vector4(70.89, -592.9, 31.05, 68.41),
|
||||
vector4(69.46, -596.76, 31.05, 68.6),
|
||||
vector4(67.89, -600.17, 31.05, 69.91),
|
||||
vector4(67.24, -603.68, 31.05, 67.92),
|
||||
vector4(65.89, -607.19, 31.05, 68.69),
|
||||
vector4(64.22, -611.22, 31.1, 68.4),
|
||||
vector4(54.68, -638.55, 31.09, 246.21),
|
||||
vector4(53.23, -641.75, 31.06, 69.7),
|
||||
vector4(52.06, -645.06, 31.05, 70.13),
|
||||
vector4(50.58, -648.56, 31.05, 67.35),
|
||||
vector4(49.61, -652.33, 31.05, 69.85),
|
||||
vector4(48.33, -655.49, 31.05, 68.67),
|
||||
vector4(47.37, -659.23, 31.05, 69.73),
|
||||
vector4(45.67, -662.47, 31.05, 66.96),
|
||||
--Alta Apartments
|
||||
vector4(-297.71, -990.11, 30.76, 338.79),
|
||||
vector4(-301.09, -988.82, 30.76, 339.11),
|
||||
vector4(-304.64, -987.72, 30.76, 339.36),
|
||||
vector4(-308.09, -986.34, 30.76, 339.47),
|
||||
vector4(-311.46, -985.08, 30.76, 339.5),
|
||||
vector4(-315.07, -983.98, 30.76, 339.18),
|
||||
vector4(-318.71, -982.49, 30.76, 338.43),
|
||||
vector4(-285.76, -888.04, 30.76, 168.44),
|
||||
vector4(-289.39, -887.34, 30.76, 168.59),
|
||||
vector4(-292.99, -886.36, 30.76, 167.4),
|
||||
vector4(-296.78, -885.82, 30.75, 167.93),
|
||||
vector4(-300.35, -885.14, 30.76, 167.76),
|
||||
vector4(-303.82, -884.06, 30.76, 167.76),
|
||||
vector4(-307.59, -883.44, 30.76, 167.24),
|
||||
vector4(-311.16, -882.7, 30.76, 166.92),
|
||||
vector4(-314.74, -881.99, 30.75, 166.91),
|
||||
vector4(-318.34, -881.19, 30.75, 167.5),
|
||||
vector4(-322.02, -880.47, 30.75, 167.75),
|
||||
vector4(-325.62, -879.65, 30.75, 168.31),
|
||||
vector4(-329.11, -878.9, 30.75, 168.35),
|
||||
vector4(-332.88, -878.22, 30.75, 167.35),
|
||||
vector4(-336.55, -877.38, 30.75, 168.02),
|
||||
vector4(-340.1, -876.67, 30.75, 167.45),
|
||||
vector4(-343.78, -875.91, 30.75, 167.01),
|
||||
vector4(-352.86, -874.08, 30.75, 0.76),
|
||||
vector4(-360.26, -889.43, 30.75, 269.23),
|
||||
vector4(-360.46, -893.17, 30.75, 268.23),
|
||||
vector4(-360.24, -896.83, 30.75, 270.26),
|
||||
vector4(-360.37, -900.58, 30.75, 268.61),
|
||||
vector4(-360.29, -904.27, 30.75, 269.75),
|
||||
vector4(-360.14, -908.01, 30.75, 270.4),
|
||||
vector4(-360.5, -911.66, 30.76, 269.55),
|
||||
vector4(-360.12, -915.4, 30.76, 269.63),
|
||||
vector4(-360.28, -919.07, 30.76, 270.11),
|
||||
vector4(-360.56, -922.77, 30.75, 268.41),
|
||||
vector4(-360.46, -926.49, 30.76, 270.43),
|
||||
vector4(-360.37, -930.12, 30.76, 269.72),
|
||||
vector4(-360.22, -933.88, 30.76, 270.34),
|
||||
vector4(-360.28, -937.58, 30.76, 269.99),
|
||||
vector4(-360.47, -941.31, 30.75, 269.54),
|
||||
vector4(-360.28, -944.99, 30.76, 270.14),
|
||||
vector4(-360.32, -948.72, 30.76, 269.82),
|
||||
vector4(-360.38, -952.44, 30.75, 269.95),
|
||||
vector4(-360.57, -956.16, 30.76, 270.31),
|
||||
vector4(-322.02, -981.29, 30.76, 339.92),
|
||||
vector4(-325.56, -980.1, 30.76, 340.1),
|
||||
vector4(-329.0, -978.69, 30.76, 338.49),
|
||||
vector4(-332.49, -977.59, 30.76, 339.58),
|
||||
vector4(-335.9, -976.3, 30.76, 339.7),
|
||||
vector4(-339.43, -975.08, 30.76, 339.47),
|
||||
vector4(-342.7, -973.45, 30.76, 338.85),
|
||||
vector4(-326.58, -956.4, 30.75, 250.37),
|
||||
vector4(-325.37, -952.84, 30.76, 250.47),
|
||||
vector4(-324.03, -949.43, 30.76, 250.37),
|
||||
vector4(-322.69, -945.96, 30.75, 249.91),
|
||||
vector4(-321.47, -942.43, 30.76, 250.29),
|
||||
vector4(-320.23, -939.06, 30.76, 250.38),
|
||||
vector4(-318.8, -935.56, 30.76, 249.46),
|
||||
vector4(-317.66, -932.03, 30.76, 250.73),
|
||||
vector4(-316.5, -928.43, 30.76, 250.15),
|
||||
vector4(-345.07, -932.2, 30.76, 69.27),
|
||||
vector4(-343.99, -928.61, 30.76, 70.11),
|
||||
vector4(-342.58, -925.18, 30.76, 70.69),
|
||||
vector4(-341.39, -921.67, 30.76, 69.83),
|
||||
vector4(-327.34, -924.44, 30.76, 69.82),
|
||||
vector4(-328.81, -927.89, 30.76, 69.43),
|
||||
vector4(-330.09, -931.33, 30.76, 70.81),
|
||||
vector4(-331.29, -934.83, 30.76, 70.29),
|
||||
vector4(-332.71, -938.34, 30.76, 69.75),
|
||||
vector4(-333.91, -941.81, 30.76, 69.46),
|
||||
vector4(-335.02, -945.3, 30.75, 71.24),
|
||||
vector4(-336.56, -948.74, 30.75, 70.65),
|
||||
vector4(-337.69, -952.22, 30.76, 70.31),
|
||||
vector4(-340.74, -902.45, 30.75, 167.89),
|
||||
vector4(-337.18, -903.24, 30.75, 167.65),
|
||||
vector4(-333.64, -903.98, 30.75, 167.05),
|
||||
vector4(-329.93, -904.61, 30.75, 167.95),
|
||||
vector4(-326.38, -905.62, 30.75, 168.51),
|
||||
vector4(-322.65, -906.2, 30.75, 167.96),
|
||||
vector4(-318.98, -906.94, 30.75, 168.06),
|
||||
vector4(-315.39, -907.89, 30.75, 166.81),
|
||||
vector4(-311.81, -908.81, 30.75, 167.5),
|
||||
vector4(-308.14, -909.33, 30.75, 167.34),
|
||||
vector4(-285.56, -921.9, 30.76, 70.14),
|
||||
vector4(-283.75, -918.52, 30.76, 70.23),
|
||||
vector4(-282.97, -914.81, 30.75, 69.93),
|
||||
vector4(-281.65, -911.4, 30.76, 69.49),
|
||||
vector4(-280.5, -908.04, 30.76, 69.51),
|
||||
vector4(-279.28, -904.45, 30.76, 70.18),
|
||||
vector4(-302.07, -933.44, 30.75, 69.9),
|
||||
vector4(-303.19, -937.09, 30.76, 70.71),
|
||||
vector4(-304.56, -940.34, 30.76, 70.04),
|
||||
vector4(-305.74, -943.95, 30.76, 70.49),
|
||||
vector4(-307.19, -947.34, 30.76, 69.04),
|
||||
vector4(-308.26, -950.95, 30.76, 70.24),
|
||||
vector4(-309.63, -954.35, 30.76, 68.9),
|
||||
vector4(-310.83, -957.88, 30.76, 69.56),
|
||||
vector4(-312.07, -961.38, 30.76, 70.21),
|
||||
vector4(-313.39, -964.8, 30.76, 68.92),
|
||||
vector4(-298.26, -899.82, 30.66, 346.23),
|
||||
vector4(-302.47, -898.86, 30.66, 348.7),
|
||||
vector4(-305.9, -898.52, 30.66, 351.35),
|
||||
vector4(-309.58, -897.38, 30.66, 347.24),
|
||||
vector4(-313.04, -896.37, 30.65, 349.98),
|
||||
vector4(-316.74, -895.46, 30.65, 347.83),
|
||||
vector4(-320.36, -894.95, 30.65, 348.97),
|
||||
vector4(-324.05, -893.86, 30.65, 348.71),
|
||||
vector4(-327.67, -893.18, 30.65, 347.61),
|
||||
vector4(-331.02, -892.69, 30.65, 346.03),
|
||||
vector4(-334.83, -891.72, 30.65, 350.2),
|
||||
vector4(-338.6, -891.08, 30.65, 348.34),
|
||||
--cityhall
|
||||
vector4(-475.26, -219.26, 36.05, 30.12),
|
||||
vector4(-478.26, -214.06, 36.21, 30.11),
|
||||
vector4(-481.41, -208.59, 36.37, 30.32),
|
||||
vector4(-484.34, -203.49, 36.52, 30.67),
|
||||
vector4(-487.17, -198.51, 36.67, 30.37),
|
||||
vector4(-490.26, -193.18, 36.83, 29.72),
|
||||
vector4(-493.21, -187.98, 36.99, 29.64),
|
||||
vector4(-496.19, -182.75, 37.14, 29.96),
|
||||
vector4(-499.21, -177.5, 37.3, 30.1),
|
||||
},
|
||||
}
|
235
resources/[carscripts]/MrNewbVehicleKeys/src/shared/config.lua
Normal file
235
resources/[carscripts]/MrNewbVehicleKeys/src/shared/config.lua
Normal file
|
@ -0,0 +1,235 @@
|
|||
-- ___ ___ _ _ _ _____ _ _
|
||||
-- | \/ | | \ | | | | / ___| (_) | |
|
||||
-- | . . | _ __ | \| | ___ __ __| |__ \ `--. ___ _ __ _ _ __ | |_ ___
|
||||
-- | |\/| || '__|| . ` | / _ \\ \ /\ / /| '_ \ `--. \ / __|| '__|| || '_ \ | __|/ __|
|
||||
-- | | | || | | |\ || __/ \ V V / | |_) |/\__/ /| (__ | | | || |_) || |_ \__ \
|
||||
-- \_| |_/|_| \_| \_/ \___| \_/\_/ |_.__/ \____/ \___||_| |_|| .__/ \__||___/
|
||||
-- | |
|
||||
-- |_|
|
||||
--
|
||||
-- Need support? Join our Discord server for help: https://discord.gg/mrnewbscripts
|
||||
-- If you need help with configuration or have any questions, please do not hesitate to ask.
|
||||
-- Docs Are Always Available At -- https://mrnewbs-scrips.gitbook.io/guide
|
||||
|
||||
|
||||
Config = {}
|
||||
|
||||
Config.Utility = {
|
||||
Debug = false, -- DO NOT ENABLE THIS UNLESS YOU KNOW WHAT YOU ARE DOING!
|
||||
EngineToggle = true, -- set this to true to use my engine toggle command and keybind, if you have a hud/command that already has this set it as false to prevent overlap.
|
||||
}
|
||||
|
||||
Config.KeybingSettings = {
|
||||
LockKeyBind = "l", -- set this to the defualt keybind you want to use for the lock/unlock feature. (players can rebind this)
|
||||
HotWireBind = "e", -- set this to the defualt keybind you want to use for the hotwire feature.
|
||||
EngineKeyBind = "g", -- set this to the defualt keybind you want to use for the engine toggle feature from line 21 here in the config. (players can rebind this)
|
||||
Keyring = "f5", -- set this to the defualt keybind you want to use for the keyring feature (only for non item setting). (players can rebind this)
|
||||
}
|
||||
|
||||
Config.HotWireSettings = {
|
||||
Cooldown = true,
|
||||
HotWireCooldownTime = 4000, -- set this to the cooldown time between hotwiring attempts on a vehicle in milliseconds (1000 = 1 second)
|
||||
MaxAttempts = 3, -- set this to the maximum number of hotwire attempts per vehicle
|
||||
GrantVehicleKeysOnHotWire = true, -- set this to false to disable the key being given on successful hotwire. If you dont grant the key it has a "hotwired status" that allows engine toggle and to drive it only.
|
||||
}
|
||||
|
||||
Config.VehicleSettings = {
|
||||
HotwireDisabled = false, -- set this to true to disable the hotwire features, this will make it so a player can just get in and drive the car without the keys. This forces keys to mainly focus on lock/unlocking.
|
||||
EngineRemainsOnWhenExiting = false, -- set this to true to keep a vehicle running when exiting it, this is a more realistic approach where youd have to turn it off when getting out or leave it on if you want to plan an escape etc.
|
||||
GiveKeysIfEngineRunning = false, -- set this to true to grant the keys on entering the vehicles that are running (like real life keys would be in the ignition right?), anyone who enters driver seat while its running will get a key.
|
||||
IsFronk = {
|
||||
-- this is the door index, its for if a car has a trunk in the front etc
|
||||
[`adder`] = 4,
|
||||
[`reaper`] = 4,
|
||||
[`torero`] = 5,
|
||||
[`t20`] = 4,
|
||||
},
|
||||
JobBypassKeys = {
|
||||
-- This is to make it so the listed job does not require keys for the listed vehicles
|
||||
-- If a cop gets in another cop car they can just drive, but if they get in a civ car they need keys.
|
||||
--[[
|
||||
["JobName"] = { -- this is the job name, anthing in this table will be bypassed with this job
|
||||
"vehiclename" -- this is the spawn name of the vehicle.
|
||||
},
|
||||
--]]
|
||||
["police"] = {
|
||||
[`police`] = true,
|
||||
[`police2`] = true,
|
||||
[`polmav`] = true,
|
||||
},
|
||||
["ambulance"] = {
|
||||
[`ambulance`] = true,
|
||||
[`polmav`] = true,
|
||||
},
|
||||
|
||||
},
|
||||
No_Key_Required_Vehicles = {
|
||||
[`bmx`] = true,
|
||||
[`cruiser`] = true,
|
||||
[`scorcher`] = true,
|
||||
[`tribike2`] = true,
|
||||
[`tribike3`] = true,
|
||||
[`fixter`] = true,
|
||||
[`tribike`] = true,
|
||||
[`inductor`] = true,
|
||||
[`inductor2`] = true,
|
||||
--put other vehicles you wish to remove key requirements from here
|
||||
--this must be the model name itself
|
||||
},
|
||||
ElectricVehicles = {
|
||||
[`dilettante2`] = true,
|
||||
[`voltic`] = true,
|
||||
[`voltic2`] = true,
|
||||
[`dilettante`] = true,
|
||||
[`pipistrello`] = true,
|
||||
[`omnisegt`] = true,
|
||||
[`surge`] = true,
|
||||
[`khamelion`] = true,
|
||||
[`raiden`] = true,
|
||||
[`mower`] = true,
|
||||
[`coureur`] = true,
|
||||
[`buffalo5`] = true,
|
||||
[`cyclone`] = true,
|
||||
[`neon`] = true,
|
||||
[`tezeract`] = true,
|
||||
[`imorgon`] = true,
|
||||
[`iwagen`] = true,
|
||||
[`virtue`] = true,
|
||||
[`vivanite`] = true,
|
||||
[`envisage`] = true,
|
||||
-- this is a list of all known vanilla electric vehicles, if you have a custom one you can add it here
|
||||
},
|
||||
ConvertableVehicles = {
|
||||
[`ninef2`] = true,
|
||||
[`cogcabrio`] = true,
|
||||
[`felon2`] = true,
|
||||
[`carbonizzare`] = true,
|
||||
[`rt3000`] = true,
|
||||
[`issi2`] = true,
|
||||
[`tornado2`] = true,
|
||||
[`rapidgt2`] = true,
|
||||
[`sentinel2`] = true,
|
||||
[`zion2`] = true,
|
||||
[`comet7`] = true,
|
||||
[`surano`] = true,
|
||||
[`windsor2`] = true,
|
||||
[`tornado5`] = true,
|
||||
[`Vigero3`] = true,
|
||||
[`dominator9`] = true,
|
||||
-- this is a list of all known vanilla convertable vehicles, if you have a custom one you can add it here
|
||||
},
|
||||
HijackImmune = {
|
||||
--[`police`] = true,
|
||||
-- this is a list of vehicles that are immune to hijacking, if you have a custom one you can add it here. ie prevent civs from stealing cop cars
|
||||
}
|
||||
}
|
||||
|
||||
Config.VehicleLockingChance = {
|
||||
EnableLocalVehicleLocking = true, -- set this to to true to enable the chance of the local vehicles being locked, parked/driving otherwise only locked vehicles will be set by spawning locked or set by a player with keys
|
||||
UnlockedChance = 50, -- set this to the percentage chance that local vehicles will be unlocked. Set to 0 to lock all cars (both parked and driving)
|
||||
}
|
||||
|
||||
Config.ItemBasedSettings = {
|
||||
lockpickItemName = "lockpick", -- set this to the itemname that would be used for the lockpick
|
||||
advancedlockpickItemName = "advancedlockpick", -- set this to the itemname that would be used for the advanced lockpick
|
||||
using_key_items = true, -- set this to true if you want to use the keys as an item
|
||||
DisableKeyFobUI = false, -- set this to true if you want to use the keys as an item WITHOUT UI
|
||||
vehicleKeysItem = "vehiclekeys", -- set this to the itemname that would be used for the keys
|
||||
keyRingItem = "keyring", -- set this to the itemname that would be used for the keyring
|
||||
LockChangeSystemEnabled = true, -- set this to true to enable the lock change system (this will allow players to change the lock on a vehicle making old item based keys useless)
|
||||
locksystemItem = "aftermarket_locks", -- set this to the itemname that would be used for the lock change
|
||||
FallBackTimerCheck = 3000, -- set this to the time in milliseconds that the script will check for keys if they are not found on the player, 3000 = 3 seconds and seems fair. lower the number if you want it to check more often.
|
||||
}
|
||||
|
||||
Config.LockSmithSettings = {
|
||||
-- please be aware if you dont own a vehicle through the framework tables you will not be able to purchaase spare keys
|
||||
SpareKeyPrice = 500, -- set to to the price of a spare key
|
||||
KeyRingPrice = 50, -- set to the price of a key ring
|
||||
Locations = {
|
||||
["Dirks Locksmithing"] = {
|
||||
coords = vector4(170.3532, -1799.5085, 28.34, 327.1338),
|
||||
pedmodel = "u_m_y_pogo_01",
|
||||
distance = 100,
|
||||
blipSprite = 811, -- if you use an outdated hud use 186, if you use a newer hud use 811 or if you want no blip comment this line out
|
||||
blipColor = 1,
|
||||
blipDisplay = 4,
|
||||
blipScale = 1.2,
|
||||
},
|
||||
|
||||
--[[
|
||||
-- The below is an example for how to add more locations
|
||||
freds = {
|
||||
coords = vector4(1036.2108, -2111.0986, 32.6040, 357.9673),
|
||||
pedmodel = "u_m_y_pogo_01",
|
||||
distance = 100,
|
||||
blipSprite = 186,
|
||||
blipColor = 1,
|
||||
blipDisplay = 4,
|
||||
blipScale = 1.2,
|
||||
}--]]
|
||||
},
|
||||
}
|
||||
|
||||
Config.AnimationSettings = {
|
||||
animDict = "veh@break_in@0h@p_m_one@", -- set to the animation dictionary for progressbar
|
||||
anim = "low_force_entry_ds", -- set to the animation name for progressbar
|
||||
keyProp = "prop_cuff_keys_01", -- set to the prop name for the keys used when locking/unlocking a car
|
||||
}
|
||||
|
||||
Config.Prefrences = {
|
||||
HelpTextPostion = "right-center", -- set this to the position of the help text messages (the ones that say press e to hotwire)
|
||||
UseThirdPartyLockpick = false, -- set this to true to use a third party lockpick system, set to false to use the built in one here. This is for compatability with qb-smallresources/other lockpick systems in housing scripts. If you need to alter it its in shared/init.lua
|
||||
LockpickAlertChance = 100, -- set this to the percentage chance that a dispatch alert will be sent when a vehicle is lockpicked -- set to 0 to never alert
|
||||
HotwireAlertChance = 100, -- set this to the percentage chance that a dispatch alert will be sent when a vehicle is Hotwired -- set to 0 to never alert
|
||||
LockpickBreakChance = 50, -- set this to the percentage chance that the lockpick will break when lockpicking fails, set to 100 to never break
|
||||
HijackingAlertChance = 100, -- set this to the percentage chance that a dispatch alert will be sent when a vehicle is hijacked -- set to 0 to never alert
|
||||
TargetVehicleFunctionsEnabled = true, -- set this to true to enable the target features on cars to lock/unlock/toggle engine etc
|
||||
DisableVehicleAutoStart = false, -- set this to true to disable the auto start of the vehicle when entering
|
||||
LockPickMiniGame = "ox", -- set this to the minigame you want to use for lockpicking "ox", "bagus", "ps-ui", "bl-progress", "bl-keyspam", "bl-circle", "bl-printlock", "t3_lockpick", "xmmx", "rainmadlockpick", "rainmadaction", "rainmadquick", "rainmadmash", "rainmadangled", "false" (false for none and always success)
|
||||
HotWireMiniGame = "ox", -- set this to the minigame you want to use for hotwiring "ox", "bagus", "ps-ui", "bl-progress", "bl-keyspam", "bl-circle", "bl-printlock", "t3_lockpick", "xmmx", "rainmadlockpick", "rainmadaction", "rainmadquick", "rainmadmash", "rainmadangled", "false" (false for none and always success)
|
||||
ProximityLocking = { -- set this to true to enable the proximity locking system for cars you have keys to
|
||||
enabled = true,
|
||||
lockdistance = 12, -- set this to the distance for the proximity locking system when the vehicle is locked
|
||||
unlockdistance = 5, -- set this to the distance for the proximity locking system when the vehicle is unlocked
|
||||
},
|
||||
DispatchAlertJobs = {
|
||||
-- set this to the jobs that will receive dispatch alerts for hotwire/lockpick etc
|
||||
"police"
|
||||
},
|
||||
ForceUnlockJobs = {
|
||||
-- set this to the jobs that will be able to force unlock vehicles (ie cops or whatever you want)
|
||||
"ambulance",
|
||||
"mechanic",
|
||||
"police",
|
||||
},
|
||||
}
|
||||
|
||||
function AdditionalProximityChecks()
|
||||
-- these are additional checks you can do for the proximity locking system
|
||||
-- for example if a player is dead or handcuffed you wouldnt want them to be able to lock/unlock a car when a ems comes
|
||||
if Bridge.Framework.GetIsPlayerDead() then return false end
|
||||
if GetResourceState("wasabi_police") == "started" then
|
||||
if exports.wasabi_police:IsHandcuffed() then return false end
|
||||
end
|
||||
if GetResourceState("qb-policejob") == "started" then
|
||||
if exports["qb-policejob"]:IsHandcuffed() then return false end
|
||||
end
|
||||
--if LocalPlayer.state.inv_busy then return false end
|
||||
--if LocalPlayer.state.cuffed then return false end
|
||||
-- you can add additional checks for proximity locking here.
|
||||
-- return false to disable proximity locking on this condition
|
||||
return true
|
||||
end
|
||||
|
||||
Config.CustomCarsMissingLabels = {
|
||||
-- This is for messed up cars that display "NULL" in the garage menus/When hitting z in a car.
|
||||
-- This will also prevent keyfobs from saying "NULL" as the name of the vehicle
|
||||
-- If you already have something fixing these ignore this
|
||||
-- This is just a additional option to help you.
|
||||
--{model = "spawnname", label = "desired in game name"},
|
||||
{model = "aerocab", label = "Aerocab"},
|
||||
{model = "blacktop", label = "Blacktop"},
|
||||
{model = "brickades", label = "Brickades"},
|
||||
{model = "linerunner", label = "linerunner"},
|
||||
{model = "vetirs", label = "Vetirs"},
|
||||
}
|
45
resources/[carscripts]/MrNewbVehicleKeys/src/shared/init.lua
Normal file
45
resources/[carscripts]/MrNewbVehicleKeys/src/shared/init.lua
Normal file
|
@ -0,0 +1,45 @@
|
|||
Bridge = exports.community_bridge:Bridge()
|
||||
|
||||
function locale(message)
|
||||
return Bridge.Language.Locale(message)
|
||||
end
|
||||
|
||||
function TableContains(table, value, nested)
|
||||
if not table then return false end
|
||||
return lib.table.contains(table, value)
|
||||
end
|
||||
|
||||
function GetClosestVehicle(coords, distance, includePlayerVeh)
|
||||
local veh = lib.getClosestVehicle(coords, distance, includePlayerVeh)
|
||||
return veh
|
||||
end
|
||||
|
||||
function DoDebugPrint(message)
|
||||
if not Config.Utility.Debug then return end
|
||||
return Bridge.Prints.Debug(message)
|
||||
end
|
||||
|
||||
function VerifyValidEntity(entity)
|
||||
return entity and entity ~= -1 and DoesEntityExist(entity) and GetEntityType(entity) ~= 0 or false
|
||||
end
|
||||
|
||||
function TrimString(plate)
|
||||
local stringIfy = tostring(plate)
|
||||
return stringIfy:match("^%s*(.-)%s*$"):upper()
|
||||
end
|
||||
|
||||
function GenerateRandomString()
|
||||
return Bridge.Ids.RandomLower(nil, 8)
|
||||
end
|
||||
|
||||
if not IsDuplicityVersion() then return end
|
||||
|
||||
if Config.Prefrences.UseThirdPartyLockpick then return end
|
||||
|
||||
Bridge.Framework.RegisterUsableItem(Config.ItemBasedSettings.advancedlockpickItemName, function(src, itemData)
|
||||
TriggerClientEvent('lockpicks:UseLockpick', src, true, itemData.slot)
|
||||
end)
|
||||
|
||||
Bridge.Framework.RegisterUsableItem(Config.ItemBasedSettings.lockpickItemName, function(src, itemData)
|
||||
TriggerClientEvent('lockpicks:UseLockpick', src, false, itemData.slot)
|
||||
end)
|
Loading…
Add table
Add a link
Reference in a new issue