diff --git a/resources/[cars]/schlagengt4/data/carcols.meta b/resources/[cars]/schlagengt4/data/carcols.meta
new file mode 100644
index 000000000..9730f826e
--- /dev/null
+++ b/resources/[cars]/schlagengt4/data/carcols.meta
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/[cars]/schlagengt4/data/carvariations.meta b/resources/[cars]/schlagengt4/data/carvariations.meta
new file mode 100644
index 000000000..2550ea7ce
--- /dev/null
+++ b/resources/[cars]/schlagengt4/data/carvariations.meta
@@ -0,0 +1,45 @@
+
+
+
+
+ -
+ schlagengt4
+
+
-
+
+ 111
+ 0
+ 156
+ 89
+ 0
+ 111
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ - 0_default_modkit
+
+
+
+
+ -
+ Standard White
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/[cars]/schlagengt4/data/dlctext.meta b/resources/[cars]/schlagengt4/data/dlctext.meta
new file mode 100644
index 000000000..22bb4c390
--- /dev/null
+++ b/resources/[cars]/schlagengt4/data/dlctext.meta
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/[cars]/schlagengt4/data/handling.meta b/resources/[cars]/schlagengt4/data/handling.meta
new file mode 100644
index 000000000..3d1f40d50
--- /dev/null
+++ b/resources/[cars]/schlagengt4/data/handling.meta
@@ -0,0 +1,65 @@
+
+
+
+
+
+ -
+ schlagengt4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 441010
+ 20002
+ 0
+ AVERAGE
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/[cars]/schlagengt4/data/vehicles.meta b/resources/[cars]/schlagengt4/data/vehicles.meta
new file mode 100644
index 000000000..8198a1f4d
--- /dev/null
+++ b/resources/[cars]/schlagengt4/data/vehicles.meta
@@ -0,0 +1,135 @@
+
+
+ vehshare
+
+
+ -
+ schlagengt4
+ schlagengt4
+ schlagengt4
+ schlagengt4
+ Benefactor
+ null
+ null
+ null
+ null
+
+ null
+ xa21
+ LAYOUT_STANDARD
+ NEON_COVER_OFFSET_INFO
+ EXPLOSION_INFO_DEFAULT
+
+ FOLLOW_CHEETAH_CAMERA
+ DEFAULT_THIRD_PERSON_VEHICLE_AIM_CAMERA
+ VEHICLE_BONNET_CAMERA_LOW
+ REDUCED_NEAR_CLIP_POV_CAMERA
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+ -
+
+
+
+
+
+
+
+
+ VFXVEHICLEINFO_CAR_GENERIC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 500.000000
+ 500.000000
+ 500.000000
+ 500.000000
+ 500.000000
+ 500.000000
+
+
+
+
+
+
+
+
+
+ SWANKNESS_2
+
+ FLAG_AVERAGE_CAR FLAG_POOR_CAR
+ VEHICLE_TYPE_CAR
+ VPT_BACK_PLATES
+ VDT_GENTAXI
+ VC_SPORT
+ VWT_SPORT
+
+
+
+
+
+
+
+
+
+
+
+ - WHEEL_FRONT_RIGHT_CAMERA
+ - WHEEL_FRONT_LEFT_CAMERA
+ - WHEEL_REAR_RIGHT_CAMERA
+ - WHEEL_REAR_LEFT_CAMERA
+
+
+
+
+
+
+ - STD_NEON_FRONT_LEFT
+ - STD_NEON_FRONT_RIGHT
+ - STD_NEON_REAR_LEFT
+ - STD_NEON_REAR_RIGHT
+
+
+
+
+
+ -
+ vehicles_poltax_interior
+ schlagengt4
+
+
+
+
\ No newline at end of file
diff --git a/resources/[cars]/schlagengt4/fxmanifest.lua b/resources/[cars]/schlagengt4/fxmanifest.lua
new file mode 100644
index 000000000..dbf79b792
--- /dev/null
+++ b/resources/[cars]/schlagengt4/fxmanifest.lua
@@ -0,0 +1,18 @@
+fx_version 'adamant'
+
+game 'gta5'
+
+files {
+ '**/**.meta',
+ '**/**.meta',
+ '**/**.meta',
+ '**/**.meta',
+ '**/**.meta',
+}
+
+
+data_file 'HANDLING_FILE' '**/**.meta'
+data_file 'VEHICLE_METADATA_FILE' '**/**.meta'
+data_file 'CARCOLS_FILE' '**/**.meta'
+data_file 'VEHICLE_VARIATION_FILE' '**/**.meta'
+data_file 'VEHICLE_LAYOUTS_FILE' '**/**.meta' -- Not Required
diff --git a/resources/[cars]/schlagengt4/stream/schlagengt4.yft b/resources/[cars]/schlagengt4/stream/schlagengt4.yft
new file mode 100644
index 000000000..763b2bf5b
Binary files /dev/null and b/resources/[cars]/schlagengt4/stream/schlagengt4.yft differ
diff --git a/resources/[cars]/schlagengt4/stream/schlagengt4.ytd b/resources/[cars]/schlagengt4/stream/schlagengt4.ytd
new file mode 100644
index 000000000..c8da971b7
Binary files /dev/null and b/resources/[cars]/schlagengt4/stream/schlagengt4.ytd differ
diff --git a/resources/[cars]/schlagengt4/stream/schlagengt4_hi.yft b/resources/[cars]/schlagengt4/stream/schlagengt4_hi.yft
new file mode 100644
index 000000000..77d7796be
Binary files /dev/null and b/resources/[cars]/schlagengt4/stream/schlagengt4_hi.yft differ
diff --git a/resources/[inventory]/nordi_vending/client.lua b/resources/[inventory]/nordi_vending/client.lua
index e3aafdc14..39ff16669 100644
--- a/resources/[inventory]/nordi_vending/client.lua
+++ b/resources/[inventory]/nordi_vending/client.lua
@@ -712,32 +712,57 @@ RegisterNetEvent('vending:client:startRobbery', function(coords)
end
end)
--- Police alert
-RegisterNetEvent('vending:client:policeAlert', function(coords, streetName)
- local alert = {
- title = "Verkaufsautomat Aufbruch",
- coords = coords,
- description = "Ein Verkaufsautomat wird aufgebrochen in " .. streetName
- }
+-- Police alert with ox_lib notification and blinking blip
+RegisterNetEvent('vending:client:policeAlert', function(alertData)
+ -- Extract data
+ local coords = alertData.coords
+ local locationName = alertData.locationName
- -- Add blip
+ -- Create a blinking blip
local blip = AddBlipForCoord(coords.x, coords.y, coords.z)
- SetBlipSprite(blip, 161)
- SetBlipColour(blip, 1)
- SetBlipScale(blip, 1.0)
+ SetBlipSprite(blip, 161) -- Robbery icon
+ SetBlipColour(blip, 1) -- Red color
+ SetBlipScale(blip, 1.2)
SetBlipAsShortRange(blip, false)
+
+ -- Make the blip flash
+ SetBlipFlashes(blip, true)
+ SetBlipFlashInterval(blip, 200) -- Flash interval in milliseconds
+
+ -- Set blip name
BeginTextCommandSetBlipName("STRING")
AddTextComponentString("Verkaufsautomat Aufbruch")
EndTextCommandSetBlipName(blip)
+ -- Create route to the robbery
+ SetBlipRoute(blip, true)
+ SetBlipRouteColour(blip, 1) -- Red route
+
+ -- Show ox_lib notification
+ if lib and lib.notify then
+ lib.notify({
+ title = 'Verkaufsautomat Aufbruch',
+ description = 'Ein Verkaufsautomat wird aufgebrochen bei ' .. locationName,
+ type = 'error',
+ icon = 'fas fa-mask',
+ position = 'top-right',
+ duration = 8000
+ })
+ else
+ -- Fallback to QBCore notification if ox_lib is not available
+ QBCore.Functions.Notify('Verkaufsautomat Aufbruch gemeldet: ' .. locationName, 'error', 8000)
+ end
+
+ -- Play alert sound
+ PlaySound(-1, "Lose_1st", "GTAO_FM_Events_Soundset", 0, 0, 1)
+
-- Remove blip after 5 minutes
SetTimeout(300000, function()
RemoveBlip(blip)
end)
-
- QBCore.Functions.Notify('Verkaufsautomat Aufbruch gemeldet: ' .. streetName, 'error', 8000)
end)
+
-- Management menu (alternative opening method)
RegisterNetEvent('vending:client:openManagement', function(machine)
-- Fast check for management permissions
diff --git a/resources/[inventory]/nordi_vending/server.lua b/resources/[inventory]/nordi_vending/server.lua
index 8e4b4796b..688a64bb1 100644
--- a/resources/[inventory]/nordi_vending/server.lua
+++ b/resources/[inventory]/nordi_vending/server.lua
@@ -523,10 +523,20 @@ RegisterNetEvent('vending:server:startRobbery', function(coords)
-- Alert police - use a generic location name instead of street name
local locationName = "Verkaufsautomat #" .. machineId
+ -- Get player position for more accurate location
+ local playerPos = GetEntityCoords(GetPlayerPed(src))
+
+ -- Alert police with enhanced data
+ local alertData = {
+ coords = coords,
+ locationName = locationName,
+ machineId = machineId
+ }
+
local players = QBCore.Functions.GetQBPlayers()
for k, v in pairs(players) do
if v.PlayerData.job.name == 'police' and v.PlayerData.job.onduty then
- TriggerClientEvent('vending:client:policeAlert', v.PlayerData.source, coords, locationName)
+ TriggerClientEvent('vending:client:policeAlert', v.PlayerData.source, alertData)
end
end
@@ -550,6 +560,7 @@ RegisterNetEvent('vending:server:startRobbery', function(coords)
TriggerClientEvent('vending:client:startRobbery', src, coords)
end)
+
-- Complete robbery
RegisterNetEvent('vending:server:completeRobbery', function(coords, success)
local src = source