Skip to content

Commit 6e3b5ee

Browse files
committed
Update v4.2.2
1 parent 3c92f7b commit 6e3b5ee

File tree

10 files changed

+211
-189
lines changed

10 files changed

+211
-189
lines changed

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
4.2.1
1+
4.2.2

client/client_hotwire.lua renamed to client/hotwire.lua

Lines changed: 18 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,14 @@
11
if Config.EnableLockpick and Config.LockpickHotkey.enable then
22
RegisterCommand(Config.LockpickHotkey.command, function(source, args, rawCommand)
3-
if Config.Framework == 'ESX' then
4-
ESX = exports["es_extended"]:getSharedObject()
5-
6-
ESX.TriggerServerCallback('msk_enginetoggle:hasItem', function(hasItem)
7-
if not hasItem then
8-
return Config.Notification(nil, Translation[Config.Locale]['hasno_lockpick'], 'error')
9-
end
10-
11-
toggleLockpick()
12-
end, Config.LockpickSettings.item)
13-
elseif Config.Framework == 'QBCore' then
14-
QBCore = exports['qb-core']:GetCoreObject()
15-
16-
QBCore.Functions.TriggerCallback('msk_enginetoggle:hasItem', function(hasItem)
17-
if not hasItem then
18-
return Config.Notification(nil, Translation[Config.Locale]['hasno_lockpick'], 'error')
19-
end
20-
21-
toggleLockpick()
22-
end, Config.LockpickSettings.item)
23-
else
24-
-- Add your own code here
25-
end
26-
end)
27-
RegisterKeyMapping(Config.LockpickHotkey.command, 'Lockpick Vehicle', 'keyboard', Config.LockpickHotkey.key)
28-
end
3+
local hasItem = MSK.HasItem(Config.LockpickSettings.item)
294

30-
loadAnimDict = function(dict)
31-
if not HasAnimDictLoaded(dict) then
32-
RequestAnimDict(dict)
5+
if not hasItem then
6+
return Config.Notification(nil, Translation[Config.Locale]['hasno_lockpick'], 'error')
7+
end
338

34-
while not HasAnimDictLoaded(dict) do
35-
Wait(1)
36-
end
37-
end
9+
toggleLockpick()
10+
end)
11+
RegisterKeyMapping(Config.LockpickHotkey.command, 'Lockpick Vehicle', 'keyboard', Config.LockpickHotkey.key)
3812
end
3913

4014
toggleLockpick = function()
@@ -46,28 +20,11 @@ toggleLockpick = function()
4620

4721
local vehicle = GetClosestVehicle(coords.x, coords.y, coords.z, 3.0, 0, 71)
4822
if not DoesEntityExist(vehicle) then return end
23+
4924
local plate = GetVehicleNumberPlateText(vehicle)
5025
local animation = {dict = Config.Animation.lockpick.dict, anim = Config.Animation.lockpick.anim}
51-
52-
local p = promise.new()
53-
if Config.Framework == 'ESX' then
54-
ESX.TriggerServerCallback('msk_enginetoggle:getAlarmStage', function(owner, alarmStage)
55-
p:resolve({owner, alarmStage})
56-
end, plate)
57-
elseif Config.Framework == 'QBCore' then
58-
QBCore.Functions.TriggerCallback('msk_enginetoggle:getAlarmStage', function(owner, alarmStage)
59-
p:resolve({owner, alarmStage})
60-
end, plate)
61-
else
62-
-- Add your own code here
63-
end
64-
65-
SetTimeout(5000, function()
66-
p:resolve({nil, 'stage_1'})
67-
end)
68-
69-
local cbResult = Citizen.Await(p)
70-
local owner, stage = table.unpack(cbResult)
26+
27+
local owner, stage = MSK.Trigger('msk_enginetoggle:getAlarmStage', plate)
7128
local alarmStage = Config.SafetyStages[stage]
7229

7330
if alarmStage.alarm then
@@ -87,7 +44,7 @@ toggleLockpick = function()
8744
TriggerServerEvent('msk_enginetoggle:liveCoords', owner, NetworkGetNetworkIdFromEntity(vehicle), GetEntityCoords(vehicle))
8845
end
8946

90-
loadAnimDict(animation.dict)
47+
MSK.LoadAnimDict(animation.dict)
9148
TaskPlayAnim(playerPed, animation.dict, animation.anim, 8.0, 1.0, -1, 49, 0, false, false, false)
9249
FreezeEntityPosition(playerPed, true)
9350

@@ -128,18 +85,18 @@ toggleLockpick = function()
12885

12986
if success then
13087
if GetResourceState('msk_vehiclekeys') == "started" then
131-
exports.msk_vehiclekeys:SetVehicleLockState(vehicle, false)
88+
exports.msk_vehiclekeys:SetVehicleLockState(vehicle, false, true) -- vehicle, state, force
13289
else
13390
SetVehicleDoorsLocked(vehicle, 1)
13491
SetVehicleDoorsLockedForAllPlayers(vehicle, false)
13592
end
13693
FreezeEntityPosition(playerPed, false)
137-
ClearPedTasksImmediately(playerPed)
94+
ClearPedTasks(playerPed)
13895
Config.Notification(nil, Translation[Config.Locale]['vehicle_unlocked'], 'success')
13996
elseif not success then
14097
TriggerServerEvent('msk_enginetoggle:removeLockpickItem')
14198
FreezeEntityPosition(playerPed, false)
142-
ClearPedTasksImmediately(playerPed)
99+
ClearPedTasks(playerPed)
143100
Config.Notification(nil, Translation[Config.Locale]['hotwiring_failed'], 'error')
144101
return
145102
end
@@ -162,7 +119,7 @@ toggleLockpick = function()
162119
local anim = Config.Animation.searchKey.anim
163120
local time = Config.Animation.searchKey.time * 1000
164121

165-
loadAnimDict(dict)
122+
MSK.LoadAnimDict(dict)
166123
TaskPlayAnim(playerPed, dict, anim, 8.0, 1.0, -1, 49, 0, false, false, false)
167124
if Config.Animation.searchKey.enableProgressbar then
168125
Config.progressBar(time, Translation[Config.Locale]['search_key'])
@@ -179,7 +136,7 @@ toggleLockpick = function()
179136
Config.Notification(nil, Translation[Config.Locale]['hotwiring_notfoundkey'], 'error')
180137
end
181138

182-
ClearPedTasksImmediately(playerPed)
139+
ClearPedTasks(playerPed)
183140
RemoveAnimDict(dict)
184141
end
185142

@@ -188,7 +145,7 @@ toggleLockpick = function()
188145
local anim = Config.Animation.hotwire.anim
189146
local action = Config.Animation.hotwire.action
190147
local time = Config.Animation.hotwire.time * 1000
191-
loadAnimDict(dict)
148+
MSK.LoadAnimDict(dict)
192149
TaskPlayAnim(playerPed, dict, anim, 8.0, 1.0, -1, 49, 0, false, false, false)
193150

194151
local success = false
@@ -219,7 +176,7 @@ toggleLockpick = function()
219176
end
220177
end
221178

222-
ClearPedTasksImmediately(playerPed)
179+
ClearPedTasks(playerPed)
223180
RemoveAnimDict(dict)
224181

225182
if success and Config.LockpickSettings.startEngine then

client/client.lua renamed to client/main.lua

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
if Config.Framework == 'ESX' then
1+
if Config.Framework == 'AUTO' then
2+
if GetResourceState('es_extended') ~= 'missing' then
3+
ESX = exports["es_extended"]:getSharedObject()
4+
elseif GetResourceState('qb-core') ~= 'missing' then
5+
QBCore = exports['qb-core']:GetCoreObject()
6+
end
7+
elseif Config.Framework == 'ESX' then
28
ESX = exports["es_extended"]:getSharedObject()
39
elseif Config.Framework == 'QBCore' then
410
QBCore = exports['qb-core']:GetCoreObject()
@@ -63,7 +69,7 @@ exports('toggleEngine', toggleEngine)
6369
RegisterNetEvent('msk_enginetoggle:toggleEngine', toggleEngine)
6470

6571
AddEventHandler('msk_enginetoggle:enteringVehicle', function(vehicle, plate, seat, netId, isEngineOn, isDamaged)
66-
logging('enteringVehicle', vehicle, plate, seat, netId, isEngineOn, isDamaged)
72+
logging('debug', 'enteringVehicle', vehicle, plate, seat, netId, isEngineOn, isDamaged)
6773
local playerPed = PlayerPedId()
6874
local vehicleModel = GetEntityModel(vehicle)
6975

@@ -79,7 +85,7 @@ AddEventHandler('msk_enginetoggle:enteringVehicle', function(vehicle, plate, sea
7985
end)
8086

8187
AddEventHandler('msk_enginetoggle:enteredVehicle', function(vehicle, plate, seat, netId, isEngineOn, isDamaged)
82-
logging('enteredVehicle', vehicle, plate, seat, netId, isEngineOn, isDamaged)
88+
logging('debug', 'enteredVehicle', vehicle, plate, seat, netId, isEngineOn, isDamaged)
8389
local playerPed = PlayerPedId()
8490
local vehicleModel = GetEntityModel(vehicle)
8591

@@ -97,7 +103,8 @@ AddEventHandler('msk_enginetoggle:enteredVehicle', function(vehicle, plate, seat
97103
end)
98104

99105
AddEventHandler('msk_enginetoggle:exitedVehicle', function(vehicle, plate, seat, netId, isEngineOn, isDamaged)
100-
logging('exitedVehicle', vehicle, plate, seat, netId, isEngineOn, isDamaged)
106+
logging('debug', 'exitedVehicle', vehicle, plate, seat, netId, isEngineOn, isDamaged)
107+
if not vehicle or not DoesEntityExist(vehicle) then return end
101108
local playerPed = PlayerPedId()
102109
local vehicleModel = GetEntityModel(vehicle)
103110

@@ -187,7 +194,7 @@ end)
187194

188195
SetEngineState = function(vehicle, state, engine)
189196
assert(vehicle and DoesEntityExist(vehicle), 'Parameter "vehicle" is nil or the Vehicle does not exist on function SetEngineState')
190-
logging('SetEngineState', vehicle, state)
197+
logging('debug', 'SetEngineState', vehicle, state)
191198

192199
currentVehicle.isEngineOn = state
193200
Entity(vehicle).state:set('isEngineOn', state, true)
@@ -253,7 +260,7 @@ exports('getVehicleDamaged', GetVehicleDamaged) -- Support for old versions
253260
GetPedVehicleSeat = function(playerPed, vehicle)
254261
if not playerPed then playerPed = PlayerPedId() end
255262
if not vehicle then vehicle = currentVehicle and currentVehicle.vehicle or GetVehiclePedIsIn(playerPed) end
256-
assert(vehicle and DoesEntityExist(vehicle), 'Parameter "vehicle" is nil or the Vehicle does not exist on function GetPedVehicleSeat')
263+
if not vehicle or not DoesEntityExist(vehicle) then return end
257264

258265
for i = -1, 16 do
259266
if (GetPedInVehicleSeat(vehicle, i) == playerPed) then
@@ -273,7 +280,7 @@ disableDrive = function()
273280
DisableControlAction(0, 71, true) -- W (accelerate)
274281
DisableControlAction(0, 72, true) -- S (brake/reverse)
275282

276-
if currentVehicle then
283+
if currentVehicle.vehicle and DoesEntityExist(currentVehicle.vehicle) then
277284
SetVehicleUndriveable(currentVehicle.vehicle, true)
278285
end
279286

@@ -283,7 +290,7 @@ disableDrive = function()
283290
disabledDrive = false
284291
end
285292

286-
logging = function(...)
293+
logging = function(code, ...)
287294
if not Config.Debug then return end
288-
print('[^3DEBUG^0]', ...)
295+
MSK.Logging(code, ...)
289296
end
File renamed without changes.

client/client_vehiclekeys.lua renamed to client/vehiclekeys.lua

Lines changed: 13 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -8,46 +8,30 @@ getInventory = function()
88
end
99
end
1010

11-
trim = function(str)
12-
return tostring(str):gsub("%s+", "")
13-
end
14-
1511
getKeyFromInventory = function(plate)
12+
plate = MSK.Trim(plate)
13+
1614
if getInventory() == 'ox_inventory' then
1715
local inventory = exports.ox_inventory:GetPlayerItems()
1816

1917
for k, v in pairs(inventory) do
20-
if v.name == Config.VehicleKeys.item and trim(v.metadata[Config.VehicleKeys.plate]) == trim(plate) then
18+
if v.name == Config.VehicleKeys.item and MSK.Trim(v.metadata.plate or v.metadata.Plate or '') == plate then
2119
return true
2220
end
2321
end
2422
elseif getInventory() == 'qs-inventory' then
2523
local inventory = exports['qs-inventory']:getUserInventory()
2624

2725
for k, v in pairs(inventory) do
28-
if v.name == Config.VehicleKeys.item and trim(v.info[Config.VehicleKeys.plate]) == trim(plate) then
26+
if v.name == Config.VehicleKeys.item and MSK.Trim(v.info.plate or v.info.Plate or '') == plate then
2927
return true
3028
end
3129
end
3230
elseif getInventory() == 'core_inventory' then
33-
local p = promise.new()
34-
35-
if Config.Framework == 'ESX' then
36-
ESX.TriggerServerCallback('core_inventory:server:getInventory', function(inventory)
37-
p:resolve(inventory)
38-
end)
39-
elseif Config.Framework == 'QBCore' then
40-
QBCore.Functions.TriggerCallback('core_inventory:server:getInventory', function(inventory)
41-
p:resolve(inventory)
42-
end)
43-
elseif Config.Framework == 'Standalone' then
44-
-- Add your own code here
45-
end
46-
47-
local inventory = Citizen.Await(p)
31+
local inventory = MSK.Trigger('msk_enginetoggle:getInventory', 'core_inventory')
4832

4933
for k, v in pairs(inventory) do
50-
if v.name == Config.VehicleKeys.item and trim(v.metadata[Config.VehicleKeys.plate]) == trim(plate) then
34+
if v.name == Config.VehicleKeys.item and MSK.Trim(v.metadata.plate or v.metadata.Plate or '') == plate then
5135
return true
5236
end
5337
end
@@ -66,12 +50,14 @@ getIsKeyOwner = function(vehicle)
6650
local canToggleEngine = true
6751

6852
if not Config.VehicleKeys.uniqueItems then
69-
if Config.VehicleKeys.script == 'VehicleKeyChain' and (GetResourceState("VehicleKeyChain") == "started") then
53+
if Config.VehicleKeys.script == 'msk_vehiclekeys' and (GetResourceState("msk_vehiclekeys") == "started") then
54+
isKeyOwner = exports["msk_vehiclekeys"]:HasPlayerKeyOrIsVehicleOwner(vehicle)
55+
elseif Config.VehicleKeys.script == 'VehicleKeyChain' and (GetResourceState("VehicleKeyChain") == "started") then
7056
isKeyOwner = exports["VehicleKeyChain"]:IsVehicleOrKeyOwner(vehicle)
7157
elseif Config.VehicleKeys.script == 'vehicle_keys' and (GetResourceState("vehicle_keys") == "started") then
7258
isKeyOwner = exports["vehicle_keys"]:doesPlayerOwnPlate(plate)
73-
elseif Config.VehicleKeys.script == 'msk_vehiclekeys' and (GetResourceState("msk_vehiclekeys") == "started") then
74-
isKeyOwner = exports["msk_vehiclekeys"]:HasPlayerKeyOrIsVehicleOwner(vehicle)
59+
elseif Config.VehicleKeys.script == 'wasabi_carlock' and (GetResourceState("wasabi_carlock") == "started") then
60+
isKeyOwner = exports.wasabi_carlock:HasKey(plate)
7561
else
7662
-- Add your own code here
7763
end
@@ -80,14 +66,14 @@ getIsKeyOwner = function(vehicle)
8066
end
8167

8268
for k, v in pairs(Config.Whitelist.vehicles) do
83-
if GetHashKey(v) == GetEntityModel(vehicle) then
69+
if GetEntityModel(vehicle) == IsModelValid(v) and v or GetHashKey(v) then
8470
ignoreVehicle = true
8571
break
8672
end
8773
end
8874

8975
for k, v in pairs(Config.Whitelist.plates) do
90-
if string.find(trim(plate), trim(v)) then
76+
if string.find(MSK.Trim(plate), MSK.Trim(v)) then
9177
ignorePlate = true
9278
break
9379
end

config.lua

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@ Config.Locale = 'de'
44
Config.Debug = true
55
Config.VersionChecker = true
66
----------------------------------------------------------------
7-
-- Supported Frameworks: 'ESX', 'QBCore'
8-
Config.Framework = 'ESX'
7+
-- Supported Frameworks: AUTO, ESX, QBCore
8+
Config.Framework = 'AUTO'
99
----------------------------------------------------------------
1010
-- !!! This function is clientside AND serverside !!!
1111
Config.Notification = function(source, message, typ)
1212
if IsDuplicityVersion() then -- serverside
13-
exports.msk_core:Notification(source, 'Engine', message, typ)
13+
MSK.Notification(source, 'Engine', message, typ)
1414
else -- clientside
15-
exports.msk_core:Notification('Engine', message, typ)
15+
MSK.Notification('Engine', message, typ)
1616
end
1717
end
1818
----------------------------------------------------------------
@@ -48,15 +48,14 @@ Config.EngineFromSecondSeat = false
4848
Config.VehicleKeys = {
4949
enable = true, -- Set true to enable this feature
5050

51-
-- Supported Scripts: 'msk_vehiclekeys', 'VehicleKeyChain', 'vehicle_keys', 'okokGarage'
51+
-- Supported Scripts: 'msk_vehiclekeys', 'VehicleKeyChain', 'vehicle_keys', 'okokGarage', 'wasabi_carlock'
5252
script = 'msk_vehiclekeys',
5353

5454
-- This is for inventories with metadata like ox_inventory
5555
-- Supported Inventories: ox_inventory, qs-inventory, core_inventory
5656
-- For okokGarage you have to set this to true!
5757
uniqueItems = false, -- If set to true, it will search for the item in the inventory
5858
item = 'keys', -- Item in your inventory for vehicle keys
59-
plate = 'plate' -- Metadata Keyname for "plate" in your inventory
6059
}
6160
----------------------------------------------------------------
6261
Config.SaveSteeringAngle = true
@@ -66,17 +65,18 @@ Config.SaveAngleOnExit = 75 -- default: F - 75 (Exit Vehicle)
6665
-- either exact plates or just a string that should be in the vehicles plate e.g. "ESX" will ignore te plate "ESX1234" too
6766
Config.Whitelist = {
6867
vehicles = {
69-
"caddy", "caddy2",
68+
-- Please use `` and NOT '' or ""
69+
`caddy`, `caddy2`, `caddy3`, `airtug`, `docktug`, `forklift`, `mower`, `tractor2`,
7070
},
7171
plates = {
72-
"ESX", "MSK",
72+
"ESX", "MSK", "Test"
7373
},
7474
}
7575
----------------------------------------------------------------
7676
Config.EnableLockpick = true -- Set false if you want to deactivate this feature
7777

7878
Config.progressBar = function(time, message)
79-
exports.msk_core:ProgressStart(time, message)
79+
MSK.Progressbar(time, message)
8080
end
8181

8282
Config.LockpickHotkey = {
@@ -176,7 +176,7 @@ Config.Animation = {
176176
hotwire = { -- Animation for hotwire
177177
dict = 'veh@forklift@base',
178178
anim = 'hotwire',
179-
action = 'progressbar', -- Set to 'skillbar' or 'progressbar' // skillbar might cause the player to get out of the vehicle...
179+
action = 'skillbar', -- Set to 'skillbar' or 'progressbar'
180180
time = 15, -- in seconds // How long does it take to hotwire the vehicle // Only for 'progressbar'
181181
}
182182
}

0 commit comments

Comments
 (0)