diff --git a/resources/19mustgt/__resource.lua b/resources/19mustgt/__resource.lua
new file mode 100644
index 000000000..bfbd7d0e8
--- /dev/null
+++ b/resources/19mustgt/__resource.lua
@@ -0,0 +1,16 @@
+resource_manifest_version '77731fab-63ca-442c-a67b-abc70f28dfa5'
+
+
+files {
+ 'vehicles.meta',
+ 'carvariations.meta',
+ 'carcols.meta',
+ 'handling.meta',
+ 'vehiclelayouts.meta',
+}
+
+data_file 'HANDLING_FILE' 'handling.meta'
+data_file 'VEHICLE_METADATA_FILE' 'vehicles.meta'
+data_file 'CARCOLS_FILE' 'carcols.meta'
+data_file 'VEHICLE_VARIATION_FILE' 'carvariations.meta'
+data_file 'VEHICLE_LAYOUTS_FILE' 'vehiclelayouts.meta'
diff --git a/resources/19mustgt/carcols.meta b/resources/19mustgt/carcols.meta
new file mode 100644
index 000000000..d6ef400e2
--- /dev/null
+++ b/resources/19mustgt/carcols.meta
@@ -0,0 +1,1192 @@
+
+
+
+ -
+
+ 19mustgt
+
+
+
+
+
+
+ VehicleLight_sirenlight
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/19mustgt/carvariations.meta b/resources/19mustgt/carvariations.meta
new file mode 100644
index 000000000..2b85e6ac7
--- /dev/null
+++ b/resources/19mustgt/carvariations.meta
@@ -0,0 +1,199 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+ 19mustgt
+
+
-
+
+ 30
+ 0
+ 0
+ 0
+ 11
+ 13
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+ 30
+ 0
+ 0
+ 0
+ 11
+ 13
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+ 30
+ 0
+ 0
+ 0
+ 11
+ 13
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+ 30
+ 0
+ 0
+ 0
+ 11
+ 13
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+ 30
+ 0
+ 0
+ 0
+ 11
+ 13
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+ 30
+ 0
+ 0
+ 0
+ 11
+ 13
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+ 30
+ 0
+ 0
+ 0
+ 11
+ 13
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+ 30
+ 0
+ 0
+ 0
+ 11
+ 13
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ - 0_default_modkit
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/19mustgt/dlctext.meta b/resources/19mustgt/dlctext.meta
new file mode 100644
index 000000000..22bb4c390
--- /dev/null
+++ b/resources/19mustgt/dlctext.meta
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/19mustgt/handling.meta b/resources/19mustgt/handling.meta
new file mode 100644
index 000000000..bd2f15462
--- /dev/null
+++ b/resources/19mustgt/handling.meta
@@ -0,0 +1,67 @@
+
+
+
+
+ -
+ 19MUSTGT
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 440010
+ 0
+ 0
+ SPORTS_CAR
+
+
-
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/19mustgt/stream/19mustgt+hi.ytd b/resources/19mustgt/stream/19mustgt+hi.ytd
new file mode 100644
index 000000000..ea1033c8e
--- /dev/null
+++ b/resources/19mustgt/stream/19mustgt+hi.ytd
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:78b714504507659eb629cee5c87d059eb3a6e60c94b759114ec0ad019b1e02b2
+size 5634736
diff --git a/resources/19mustgt/stream/19mustgt.yft b/resources/19mustgt/stream/19mustgt.yft
new file mode 100644
index 000000000..3cb4d267b
--- /dev/null
+++ b/resources/19mustgt/stream/19mustgt.yft
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:17827bc000d324540f3b759f57c392d209bc5412d3114f7b3eeb4fc3397f042c
+size 6801616
diff --git a/resources/19mustgt/stream/19mustgt_hi.yft b/resources/19mustgt/stream/19mustgt_hi.yft
new file mode 100644
index 000000000..0b67a9277
--- /dev/null
+++ b/resources/19mustgt/stream/19mustgt_hi.yft
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2c94ddf463253fdc50f0a657c6621c6a2830f129356d925ba6177a90d3354ee2
+size 6801559
diff --git a/resources/19mustgt/vehicles.meta b/resources/19mustgt/vehicles.meta
new file mode 100644
index 000000000..2f00915f0
--- /dev/null
+++ b/resources/19mustgt/vehicles.meta
@@ -0,0 +1,115 @@
+
+
+ vehshare
+
+
+ -
+ 19mustgt
+ 19mustgt
+ 19MUSTGT
+ MustangGT
+ FORD
+ null
+ null
+ null
+ null
+
+ null
+ ta185amv8
+ LAYOUT_LOW
+ GROWLER_COVER_OFFSET_INFO
+ EXPLOSION_INFO_DEFAULT
+
+ FOLLOW_CHEETAH_CAMERA
+ DEFAULT_THIRD_PERSON_VEHICLE_AIM_CAMERA
+ VEHICLE_BONNET_CAMERA_LOW_LOW
+ REDUCED_NEAR_CLIP_POV_CAMERA
+
+
+
+
+
+
+
+
+
+
+
+ VFXVEHICLEINFO_CAR_GENERIC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 15.000000
+ 30.000000
+ 70.000000
+ 140.000000
+ 500.000000
+ 500.000000
+
+
+
+
+
+
+
+
+
+
+ SWANKNESS_3
+
+ FLAG_HAS_LIVERY FLAG_EXTRAS_ALL FLAG_SPORTS FLAG_PARKING_SENSORS
+ VEHICLE_TYPE_CAR
+ VPT_FRONT_AND_BACK_PLATES
+ VDT_RACE
+ VC_EMERGENCY
+ VWT_SPORT
+
+
+
+
+
- EXTRA_1 EXTRA_2
+
+
+
+
+
+
+
+
+ - WHEEL_FRONT_RIGHT_CAMERA
+ - WHEEL_FRONT_LEFT_CAMERA
+ - WHEEL_REAR_RIGHT_CAMERA
+ - WHEEL_REAR_LEFT_CAMERA
+
+ Truck
+
+
+
+
+ - STD_DILETTANTE_FRONT_LEFT
+ - STD_DILETTANTE_FRONT_RIGHT
+ - STD_BALLER_REAR_LEFT
+ - STD_BALLER_REAR_RIGHT
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/24tactrd/24tacoma_sign_1.png b/resources/24tactrd/24tacoma_sign_1.png
new file mode 100644
index 000000000..7fc7535d8
Binary files /dev/null and b/resources/24tactrd/24tacoma_sign_1.png differ
diff --git a/resources/24tactrd/__resource.lua b/resources/24tactrd/__resource.lua
new file mode 100644
index 000000000..fdc8dfb3a
--- /dev/null
+++ b/resources/24tactrd/__resource.lua
@@ -0,0 +1,17 @@
+resource_manifest_version '77731fab-63ca-442c-a67b-abc70f28dfa5'
+
+-- Leaked By: Leaking Hub | Joshua Y. | https://discord.gg/aXWXXst
+
+files {
+ 'vehicles.meta',
+ 'carvariations.meta',
+ 'carcols.meta',
+ 'handling.meta',
+ 'vehiclelayouts.meta',
+}
+
+data_file 'HANDLING_FILE' 'handling.meta'
+data_file 'VEHICLE_METADATA_FILE' 'vehicles.meta'
+data_file 'CARCOLS_FILE' 'carcols.meta'
+data_file 'VEHICLE_VARIATION_FILE' 'carvariations.meta'
+data_file 'VEHICLE_LAYOUTS_FILE' 'vehiclelayouts.meta'
diff --git a/resources/24tactrd/carcols.meta b/resources/24tactrd/carcols.meta
new file mode 100644
index 000000000..0dc82e924
--- /dev/null
+++ b/resources/24tactrd/carcols.meta
@@ -0,0 +1,756 @@
+
+
+
+ -
+
+ 24tactrd
+
+
+
+
+
+
+ VehicleLight_sirenlight
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/24tactrd/carvariations.meta b/resources/24tactrd/carvariations.meta
new file mode 100644
index 000000000..3607872a7
--- /dev/null
+++ b/resources/24tactrd/carvariations.meta
@@ -0,0 +1,191 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+ 24tactrd
+
+
-
+
+ 134
+ 134
+ 0
+ 0
+ 32
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+ 134
+ 134
+ 0
+ 0
+ 32
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+ 134
+ 134
+ 0
+ 0
+ 32
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+ 134
+ 134
+ 0
+ 0
+ 32
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+ 134
+ 134
+ 0
+ 0
+ 32
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+ 134
+ 134
+ 0
+ 0
+ 32
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+ 134
+ 134
+ 0
+ 0
+ 32
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+ 134
+ 134
+ 0
+ 0
+ 32
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ - 0_default_modkit
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/24tactrd/handling.meta b/resources/24tactrd/handling.meta
new file mode 100644
index 000000000..c59cfeec8
--- /dev/null
+++ b/resources/24tactrd/handling.meta
@@ -0,0 +1,67 @@
+
+
+
+
+ -
+ 24tactrd
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 240010
+ 800008
+ 0
+ AVERAGE
+
+
-
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/24tactrd/stream/24tactrd.yft b/resources/24tactrd/stream/24tactrd.yft
new file mode 100644
index 000000000..2fa540106
--- /dev/null
+++ b/resources/24tactrd/stream/24tactrd.yft
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bb5e717c60ca2460b348ab1f06ace1d2ba3e92cdbd91bbecd69d6088fa483956
+size 8100421
diff --git a/resources/24tactrd/stream/24tactrd.ytd b/resources/24tactrd/stream/24tactrd.ytd
new file mode 100644
index 000000000..101d1e90f
--- /dev/null
+++ b/resources/24tactrd/stream/24tactrd.ytd
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f357271be8611b2f08263bdb148062e0207c9d058ce815af6202064680970a26
+size 8244941
diff --git a/resources/24tactrd/stream/24tactrd_hi.yft b/resources/24tactrd/stream/24tactrd_hi.yft
new file mode 100644
index 000000000..f6a20e0fd
--- /dev/null
+++ b/resources/24tactrd/stream/24tactrd_hi.yft
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:135d83860c3e8f2af2c12a21a1a9709340ce314694a72ed21766ee2a9d313bfd
+size 8100331
diff --git a/resources/24tactrd/vehicles.meta b/resources/24tactrd/vehicles.meta
new file mode 100644
index 000000000..289e2aa91
--- /dev/null
+++ b/resources/24tactrd/vehicles.meta
@@ -0,0 +1,156 @@
+
+
+ vehshare
+
+
+ -
+ 24tactrd
+ 24tactrd
+ 24tactrd
+ Toyota
+ TacomaTRD
+ null
+ null
+ null
+ null
+
+ null
+ GAUNTLET
+ LAYOUT_BISON
+ BISON_COVER_OFFSET_INFO
+ EXPLOSION_INFO_DEFAULT
+
+ DEFAULT_FOLLOW_VEHICLE_CAMERA
+ DEFAULT_THIRD_PERSON_VEHICLE_AIM_CAMERA
+ VEHICLE_BONNET_CAMERA_STANDARD
+ DEFAULT_POV_CAMERA
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+ -
+
+
+
+
+
+
+
+
+ VFXVEHICLEINFO_CAR_GENERIC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 15.000000
+ 30.000000
+ 70.000000
+ 140.000000
+ 500.000000
+ 500.000000
+
+
+
+
+
+
+
+
+
+
+ SWANKNESS_1
+
+ FLAG_DONT_SPAWN_IN_CARGEN FLAG_LAW_ENFORCEMENT FLAG_HAS_LIVERY FLAG_BIG FLAG_CAN_HONK_WHEN_FLEEING FLAG_AVOID_TURNS FLAG_EXTRAS_REQUIRE FLAG_PEDS_CAN_STAND_ON_TOP FLAG_USE_FAT_INTERIOR_LIGHT FLAG_IS_BULKY FLAG_BLOCK_FROM_ATTRACTOR_SCENARIO FLAG_CANNOT_TAKE_COVER_WHEN_STOOD_ON FLAG_EXTRAS_ONLY_BREAK_WHEN_DESTROYED
+ VEHICLE_TYPE_CAR
+ VPT_FRONT_AND_BACK_PLATES
+ VDT_ZTYPE
+ VC_VAN
+ VWT_SUV
+
+ - boattrailer
+ - trailersmall
+
+
+ - trailersmall2
+
+
+ -
+ S_M_M_AutoShop_01
+
+
+ -
+ S_M_M_AutoShop_02
+
+
+ -
+ S_M_M_Trucker_01
+
+
+
+
+ - EXTRA_1
+
+
+
+
+
+
+ - EXTRA_1
+
+
+
+ - WHEEL_FRONT_RIGHT_CAMERA
+ - WHEEL_FRONT_LEFT_CAMERA
+ - WHEEL_REAR_RIGHT_CAMERA
+ - WHEEL_REAR_LEFT_CAMERA
+
+ Truck
+
+
+
+
+ - RANGER_BISON_FRONT_LEFT
+ - VAN_RUMPO_FRONT_RIGHT
+ - RANGER_BISON_REAR_LEFT
+ - RANGER_BISON_REAR_RIGHT
+
+
+
+
+ -
+ vehicles_bob_brown_interior
+ 24tactrd
+
+
+
\ No newline at end of file
diff --git a/resources/LAPD/stream/11lapdvic2+hi.ytd b/resources/LAPD/stream/11lapdvic2+hi.ytd
deleted file mode 100644
index f33fd7ad0..000000000
--- a/resources/LAPD/stream/11lapdvic2+hi.ytd
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:fe2940ccbba4636834fe8d00e3355f0c25e3ca1d92ad22bb1d637d586fa5db78
-size 1018686
diff --git a/resources/LAPD/stream/11lapdvic2.yft b/resources/LAPD/stream/11lapdvic2.yft
deleted file mode 100644
index de86b5719..000000000
--- a/resources/LAPD/stream/11lapdvic2.yft
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:2a6f98815a80393dc245a0a83b73b3ce459e0c6b5e961427c1bab7623f912a57
-size 9528745
diff --git a/resources/LAPD/stream/11lapdvic2.ytd b/resources/LAPD/stream/11lapdvic2.ytd
deleted file mode 100644
index 19a873140..000000000
--- a/resources/LAPD/stream/11lapdvic2.ytd
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:bc7948324cf4ac394d7b671375f8d1ab73ca1aa188d243371090cd33225caefb
-size 9019745
diff --git a/resources/LAPD/stream/11lapdvic2_hi.yft b/resources/LAPD/stream/11lapdvic2_hi.yft
deleted file mode 100644
index de86b5719..000000000
--- a/resources/LAPD/stream/11lapdvic2_hi.yft
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:2a6f98815a80393dc245a0a83b73b3ce459e0c6b5e961427c1bab7623f912a57
-size 9528745
diff --git a/resources/[EGRP-Discord-Integration]/Discord-VehRestriction/config.lua b/resources/[EGRP-Discord-Integration]/Discord-VehRestriction/config.lua
index 361240806..b28bede71 100644
--- a/resources/[EGRP-Discord-Integration]/Discord-VehRestriction/config.lua
+++ b/resources/[EGRP-Discord-Integration]/Discord-VehRestriction/config.lua
@@ -817,7 +817,9 @@ Config.VehicleRestrictions = {
"mpf250rb",
"24mustanggt4d",
"speed1",
- " ",
+ "f350bubba",
+ "19mustgt",
+
},
['EG | Owner'] = {
"Staff-EGRPescal21",
@@ -830,8 +832,10 @@ Config.VehicleRestrictions = {
"x3bearcat",
"x3bearcat2",
"mrap",
+ "f350bubba",
"staff-sl23hoe",
- "maxchasrt",
+ "maxchasrt",
+ "19mustgt",
"bearcat",
"18charger",
"18chargerb",
@@ -973,6 +977,7 @@ Config.VehicleRestrictions = {
"am_srt15",
"mpf250rb",
"24mustanggt4d",
+ "f350bubba",
"speed1",
"boxville5",
"cognoscenti2",
diff --git a/resources/chp21tahoe/stream/chp21tahoe/21tahoeantenna.yft b/resources/chp21tahoe/stream/21tahoeantenna.yft
similarity index 100%
rename from resources/chp21tahoe/stream/chp21tahoe/21tahoeantenna.yft
rename to resources/chp21tahoe/stream/21tahoeantenna.yft
diff --git a/resources/chp21tahoe/stream/chp21tahoe/21tahoecage.yft b/resources/chp21tahoe/stream/21tahoecage.yft
similarity index 100%
rename from resources/chp21tahoe/stream/chp21tahoe/21tahoecage.yft
rename to resources/chp21tahoe/stream/21tahoecage.yft
diff --git a/resources/chp21tahoe/stream/chp21tahoe/21tahoehalogenddown.yft b/resources/chp21tahoe/stream/21tahoehalogenddown.yft
similarity index 100%
rename from resources/chp21tahoe/stream/chp21tahoe/21tahoehalogenddown.yft
rename to resources/chp21tahoe/stream/21tahoehalogenddown.yft
diff --git a/resources/chp21tahoe/stream/chp21tahoe/21tahoehalogendup.yft b/resources/chp21tahoe/stream/21tahoehalogendup.yft
similarity index 100%
rename from resources/chp21tahoe/stream/chp21tahoe/21tahoehalogendup.yft
rename to resources/chp21tahoe/stream/21tahoehalogendup.yft
diff --git a/resources/chp21tahoe/stream/chp21tahoe/21tahoehalogenpdown.yft b/resources/chp21tahoe/stream/21tahoehalogenpdown.yft
similarity index 100%
rename from resources/chp21tahoe/stream/chp21tahoe/21tahoehalogenpdown.yft
rename to resources/chp21tahoe/stream/21tahoehalogenpdown.yft
diff --git a/resources/chp21tahoe/stream/chp21tahoe/21tahoehalogenpup.yft b/resources/chp21tahoe/stream/21tahoehalogenpup.yft
similarity index 100%
rename from resources/chp21tahoe/stream/chp21tahoe/21tahoehalogenpup.yft
rename to resources/chp21tahoe/stream/21tahoehalogenpup.yft
diff --git a/resources/chp21tahoe/stream/chp21tahoe/21tahoetkdns.yft b/resources/chp21tahoe/stream/21tahoetkdns.yft
similarity index 100%
rename from resources/chp21tahoe/stream/chp21tahoe/21tahoetkdns.yft
rename to resources/chp21tahoe/stream/21tahoetkdns.yft
diff --git a/resources/chp21tahoe/stream/chp21tahoe/chp21tahoe+hi.ytd b/resources/chp21tahoe/stream/chp21tahoe+hi.ytd
similarity index 100%
rename from resources/chp21tahoe/stream/chp21tahoe/chp21tahoe+hi.ytd
rename to resources/chp21tahoe/stream/chp21tahoe+hi.ytd
diff --git a/resources/chp21tahoe/stream/chp21tahoe/chp21tahoe.yft b/resources/chp21tahoe/stream/chp21tahoe.yft
similarity index 100%
rename from resources/chp21tahoe/stream/chp21tahoe/chp21tahoe.yft
rename to resources/chp21tahoe/stream/chp21tahoe.yft
diff --git a/resources/chp21tahoe/stream/chp21tahoe/chp21tahoe.ytd b/resources/chp21tahoe/stream/chp21tahoe.ytd
similarity index 100%
rename from resources/chp21tahoe/stream/chp21tahoe/chp21tahoe.ytd
rename to resources/chp21tahoe/stream/chp21tahoe.ytd
diff --git a/resources/chp21tahoe/stream/chp21tahoe/chp21tahoe_hi.yft b/resources/chp21tahoe/stream/chp21tahoe_hi.yft
similarity index 100%
rename from resources/chp21tahoe/stream/chp21tahoe/chp21tahoe_hi.yft
rename to resources/chp21tahoe/stream/chp21tahoe_hi.yft
diff --git a/resources/chp23durango/stream/chp23durango/23durantenna.yft b/resources/chp23durango/stream/23durantenna.yft
similarity index 100%
rename from resources/chp23durango/stream/chp23durango/23durantenna.yft
rename to resources/chp23durango/stream/23durantenna.yft
diff --git a/resources/chp23durango/stream/chp23durango/23durcage.yft b/resources/chp23durango/stream/23durcage.yft
similarity index 100%
rename from resources/chp23durango/stream/chp23durango/23durcage.yft
rename to resources/chp23durango/stream/23durcage.yft
diff --git a/resources/chp23durango/stream/chp23durango/23durfulltkdn.yft b/resources/chp23durango/stream/23durfulltkdn.yft
similarity index 100%
rename from resources/chp23durango/stream/chp23durango/23durfulltkdn.yft
rename to resources/chp23durango/stream/23durfulltkdn.yft
diff --git a/resources/chp23durango/stream/chp23durango/23durhalogenddown.yft b/resources/chp23durango/stream/23durhalogenddown.yft
similarity index 100%
rename from resources/chp23durango/stream/chp23durango/23durhalogenddown.yft
rename to resources/chp23durango/stream/23durhalogenddown.yft
diff --git a/resources/chp23durango/stream/chp23durango/23durhalogendup.yft b/resources/chp23durango/stream/23durhalogendup.yft
similarity index 100%
rename from resources/chp23durango/stream/chp23durango/23durhalogendup.yft
rename to resources/chp23durango/stream/23durhalogendup.yft
diff --git a/resources/chp23durango/stream/chp23durango/23durhalogenpdown.yft b/resources/chp23durango/stream/23durhalogenpdown.yft
similarity index 100%
rename from resources/chp23durango/stream/chp23durango/23durhalogenpdown.yft
rename to resources/chp23durango/stream/23durhalogenpdown.yft
diff --git a/resources/chp23durango/stream/chp23durango/23durhalogenpup.yft b/resources/chp23durango/stream/23durhalogenpup.yft
similarity index 100%
rename from resources/chp23durango/stream/chp23durango/23durhalogenpup.yft
rename to resources/chp23durango/stream/23durhalogenpup.yft
diff --git a/resources/chp23durango/stream/chp23durango/23dursmartfocus.yft b/resources/chp23durango/stream/23dursmartfocus.yft
similarity index 100%
rename from resources/chp23durango/stream/chp23durango/23dursmartfocus.yft
rename to resources/chp23durango/stream/23dursmartfocus.yft
diff --git a/resources/chp23durango/stream/chp23durango/23durtkdn.yft b/resources/chp23durango/stream/23durtkdn.yft
similarity index 100%
rename from resources/chp23durango/stream/chp23durango/23durtkdn.yft
rename to resources/chp23durango/stream/23durtkdn.yft
diff --git a/resources/chp23durango/stream/chp23durango/chp23durango+hi.ytd b/resources/chp23durango/stream/chp23durango+hi.ytd
similarity index 100%
rename from resources/chp23durango/stream/chp23durango/chp23durango+hi.ytd
rename to resources/chp23durango/stream/chp23durango+hi.ytd
diff --git a/resources/chp23durango/stream/chp23durango/chp23durango.yft b/resources/chp23durango/stream/chp23durango.yft
similarity index 100%
rename from resources/chp23durango/stream/chp23durango/chp23durango.yft
rename to resources/chp23durango/stream/chp23durango.yft
diff --git a/resources/chp23durango/stream/chp23durango/chp23durango.ytd b/resources/chp23durango/stream/chp23durango.ytd
similarity index 100%
rename from resources/chp23durango/stream/chp23durango/chp23durango.ytd
rename to resources/chp23durango/stream/chp23durango.ytd
diff --git a/resources/chp23durango/stream/chp23durango/chp23durango_hi.yft b/resources/chp23durango/stream/chp23durango_hi.yft
similarity index 100%
rename from resources/chp23durango/stream/chp23durango/chp23durango_hi.yft
rename to resources/chp23durango/stream/chp23durango_hi.yft
diff --git a/resources/f350bubba/__resource.lua b/resources/f350bubba/__resource.lua
new file mode 100644
index 000000000..bfbd7d0e8
--- /dev/null
+++ b/resources/f350bubba/__resource.lua
@@ -0,0 +1,16 @@
+resource_manifest_version '77731fab-63ca-442c-a67b-abc70f28dfa5'
+
+
+files {
+ 'vehicles.meta',
+ 'carvariations.meta',
+ 'carcols.meta',
+ 'handling.meta',
+ 'vehiclelayouts.meta',
+}
+
+data_file 'HANDLING_FILE' 'handling.meta'
+data_file 'VEHICLE_METADATA_FILE' 'vehicles.meta'
+data_file 'CARCOLS_FILE' 'carcols.meta'
+data_file 'VEHICLE_VARIATION_FILE' 'carvariations.meta'
+data_file 'VEHICLE_LAYOUTS_FILE' 'vehiclelayouts.meta'
diff --git a/resources/f350bubba/audioconfig/aq07powerstroke67_game.dat151.rel b/resources/f350bubba/audioconfig/aq07powerstroke67_game.dat151.rel
new file mode 100644
index 000000000..a06a380a9
Binary files /dev/null and b/resources/f350bubba/audioconfig/aq07powerstroke67_game.dat151.rel differ
diff --git a/resources/f350bubba/audioconfig/aq07powerstroke67_sounds.dat54.rel b/resources/f350bubba/audioconfig/aq07powerstroke67_sounds.dat54.rel
new file mode 100644
index 000000000..1f6ae811a
Binary files /dev/null and b/resources/f350bubba/audioconfig/aq07powerstroke67_sounds.dat54.rel differ
diff --git a/resources/f350bubba/carcols.meta b/resources/f350bubba/carcols.meta
new file mode 100644
index 000000000..bc3947243
--- /dev/null
+++ b/resources/f350bubba/carcols.meta
@@ -0,0 +1,1188 @@
+
+
+
+ -
+
+ f350bubba
+
+
+
+
+
+
+ VehicleLight_sirenlight
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/f350bubba/carvariations.meta b/resources/f350bubba/carvariations.meta
new file mode 100644
index 000000000..84ab449ff
--- /dev/null
+++ b/resources/f350bubba/carvariations.meta
@@ -0,0 +1,32 @@
+
+
+
+
+ -
+ f350bubba
+
+
-
+
+ 0
+ 70
+ 0
+ 0
+ 0
+ 0
+
+
+
+
+
+
+ -
+ Police guv plate
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/f350bubba/handling.meta b/resources/f350bubba/handling.meta
new file mode 100644
index 000000000..5055e36b1
--- /dev/null
+++ b/resources/f350bubba/handling.meta
@@ -0,0 +1,67 @@
+
+
+
+
+ -
+ f350bubba
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 400010
+ 0
+ 0
+ TRUCK
+
+
-
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/f350bubba/sfx/dlc_aq07powerstroke67/aq07powerstroke67.awc b/resources/f350bubba/sfx/dlc_aq07powerstroke67/aq07powerstroke67.awc
new file mode 100644
index 000000000..22d2b79fc
Binary files /dev/null and b/resources/f350bubba/sfx/dlc_aq07powerstroke67/aq07powerstroke67.awc differ
diff --git a/resources/f350bubba/sfx/dlc_aq07powerstroke67/aq07powerstroke67_npc.awc b/resources/f350bubba/sfx/dlc_aq07powerstroke67/aq07powerstroke67_npc.awc
new file mode 100644
index 000000000..838466de1
Binary files /dev/null and b/resources/f350bubba/sfx/dlc_aq07powerstroke67/aq07powerstroke67_npc.awc differ
diff --git a/resources/f350bubba/stream/f350bubba+hi.ytd b/resources/f350bubba/stream/f350bubba+hi.ytd
new file mode 100644
index 000000000..21c800d59
--- /dev/null
+++ b/resources/f350bubba/stream/f350bubba+hi.ytd
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:afaf2ebaf441f04b800188403067d02e80a3d71156f64a26fc921846fe06f089
+size 1806409
diff --git a/resources/f350bubba/stream/f350bubba.yft b/resources/f350bubba/stream/f350bubba.yft
new file mode 100644
index 000000000..13226f7a2
--- /dev/null
+++ b/resources/f350bubba/stream/f350bubba.yft
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c502a641610511f9d7f80f0823271b2f6231265d3848a0da5a7ccc0fdd3e7d41
+size 9182601
diff --git a/resources/f350bubba/stream/f350bubba.ytd b/resources/f350bubba/stream/f350bubba.ytd
new file mode 100644
index 000000000..e92b8a4ea
--- /dev/null
+++ b/resources/f350bubba/stream/f350bubba.ytd
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1e953da08ea86b3ee35776a605afa25ab208bedba82a7332bc397000ff17afa2
+size 5816987
diff --git a/resources/f350bubba/stream/f350bubba_hi.yft b/resources/f350bubba/stream/f350bubba_hi.yft
new file mode 100644
index 000000000..50cfaa442
--- /dev/null
+++ b/resources/f350bubba/stream/f350bubba_hi.yft
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f9e735326b8e39c6f32ebfb35c2244cbc8a1822daa5061508d586de95b9d1cd3
+size 9182461
diff --git a/resources/f350bubba/ulc.lua b/resources/f350bubba/ulc.lua
new file mode 100644
index 000000000..2a9feb527
--- /dev/null
+++ b/resources/f350bubba/ulc.lua
@@ -0,0 +1,61 @@
+
+--[[
+ Ultimate Lighting Controller Config
+ the ULC resource is required to use this configuration
+ get the resource here: https://github.com/Flohhhhh/ultimate-lighting-controller/releases/latest
+ To learn how to setup and use ULC visit here: https://docs.dwnstr.com/ulc/overview
+]]
+
+return {names = {"f350bubba"},
+ steadyBurnConfig = {
+ forceOn = false, useTime = false,
+ disableWithLights = false,
+ sbExtras = {}
+ },
+ parkConfig = {
+ usePark = false,
+ useSync = false,
+ syncWith = {},
+ pExtras = {},
+ dExtras = {}
+ },
+ hornConfig = {
+ useHorn = false,
+ hornExtras = {},
+ disableExtras = {}
+ },
+ brakeConfig = {
+ useBrakes = false,
+ speedThreshold = 3,
+ brakeExtras = {},
+ disableExtras = {}
+ },
+ reverseConfig = {
+ useReverse = false,
+ reverseExtras = {},
+ disableExtras = {}
+ },
+ doorConfig = {
+ useDoors = false,
+ driverSide = {enable = {}, disable = {}},
+ passSide = {enable = {}, disable = {}},
+ trunk = {enable ={}, disable = {}}
+ },
+ buttons = {
+ {label = "Response PTN", key = 1, color = "green", extra = 9, linkedExtras = {}, oppositeExtras = {}, offExtras = {}, repair = false},
+ {label = "Lightbar Response PTN", key = 2, color = "green", extra = 10, linkedExtras = {}, oppositeExtras = {}, offExtras = {}, repair = false},
+ {label = "Park PTN", key = 3, color = "green", extra = 11, linkedExtras = {}, oppositeExtras = {}, offExtras = {}, repair = false},
+ {label = "Park Lightbar PTN", key = 4, color = "green", extra = 12, linkedExtras = {}, oppositeExtras = {}, offExtras = {}, repair = false},
+ {label = "Side Scene", key = 5, color = "green", extra = 5, linkedExtras = {}, oppositeExtras = {}, offExtras = {}, repair = false},
+ {label = "Rear Scene", key = 6, color = "green", extra = 6, linkedExtras = {}, oppositeExtras = {}, offExtras = {}, repair = false}
+ },
+ stages = {
+ useStages = false,
+ stageKeys = {},
+ },
+ defaultStages = {
+ useDefaults = false,
+ enableKeys = {},
+ disableKeys = {}
+ }
+}
\ No newline at end of file
diff --git a/resources/f350bubba/vehicles.meta b/resources/f350bubba/vehicles.meta
new file mode 100644
index 000000000..f70857569
--- /dev/null
+++ b/resources/f350bubba/vehicles.meta
@@ -0,0 +1,140 @@
+
+
+
+ vehshare
+
+
+ -
+ f350bubba
+ f350bubba
+ f350bubba
+ f350bubba
+ 20FORD
+ null
+ null
+
+
+
+ null
+ aq07powerstroke67
+ LAYOUT_RANGER
+ GRANGER_COVER_OFFSET_INFO
+ EXPLOSION_INFO_DEFAULT
+
+ DEFAULT_FOLLOW_VEHICLE_CAMERA
+ BOX_VEHICLE_AIM_CAMERA
+ VEHICLE_BONNET_CAMERA_STANDARD
+ DEFAULT_POV_CAMERA_LOOKAROUND
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+ -
+
+
+
+
+
+
+
+
+ VFXVEHICLEINFO_TRUCK_RIG
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 35.000000
+ 45.000000
+ 150.000000
+ 250.000000
+ 500.000000
+ 500.000000
+
+
+
+
+
+
+
+
+
+
+ SWANKNESS_1
+
+ FLAG_EXTRAS_STRONG FLAG_HAS_LIVERY FLAG_EXTRAS_ALL FLAG_LAW_ENFORCEMENT FLAG_EMERGENCY_SERVICE FLAG_NO_RESPRAY FLAG_DONT_SPAWN_IN_CARGEN FLAG_HAS_INTERIOR_EXTRAS FLAG_REPORT_CRIME_IF_STANDING_ON
+ VEHICLE_TYPE_CAR
+ VPT_FRONT_AND_BACK_PLATES
+ VDT_FEROCI
+ VC_EMERGENCY
+ VWT_SUV
+
+ - boattrailer
+ - trailersmall
+
+
+ - trailersmall2
+
+
+
+
+
+
+
+
+
+
+ - WHEEL_FRONT_RIGHT_CAMERA
+ - WHEEL_FRONT_LEFT_CAMERA
+ - WHEEL_REAR_RIGHT_CAMERA
+ - WHEEL_REAR_LEFT_CAMERA
+
+
+
+
+
+
+ - RANGER_CAVALCADE_FRONT_LEFT
+ - RANGER_FRONT_RIGHT
+ - RANGER_PRANGER_REAR_LEFT
+ - RANGER_PRANGER_REAR_RIGHT
+
+
+
+
+ -
+ vehicles_feroci_interior
+ f250
+
+
+
\ No newline at end of file
diff --git a/resources/fire22exp/22exp_sign_1.dds b/resources/fire22exp/22exp_sign_1.dds
new file mode 100644
index 000000000..f35883c9d
Binary files /dev/null and b/resources/fire22exp/22exp_sign_1.dds differ
diff --git a/resources/fire22exp/__resource.lua b/resources/fire22exp/__resource.lua
new file mode 100644
index 000000000..bfbd7d0e8
--- /dev/null
+++ b/resources/fire22exp/__resource.lua
@@ -0,0 +1,16 @@
+resource_manifest_version '77731fab-63ca-442c-a67b-abc70f28dfa5'
+
+
+files {
+ 'vehicles.meta',
+ 'carvariations.meta',
+ 'carcols.meta',
+ 'handling.meta',
+ 'vehiclelayouts.meta',
+}
+
+data_file 'HANDLING_FILE' 'handling.meta'
+data_file 'VEHICLE_METADATA_FILE' 'vehicles.meta'
+data_file 'CARCOLS_FILE' 'carcols.meta'
+data_file 'VEHICLE_VARIATION_FILE' 'carvariations.meta'
+data_file 'VEHICLE_LAYOUTS_FILE' 'vehiclelayouts.meta'
diff --git a/resources/fire22exp/carcols.meta b/resources/fire22exp/carcols.meta
new file mode 100644
index 000000000..ad9bcbef0
--- /dev/null
+++ b/resources/fire22exp/carcols.meta
@@ -0,0 +1,758 @@
+
+
+
+ -
+
+ fire22exp
+
+
+
+
+
+
+ VehicleLight_sirenlight
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/fire22exp/carvariations.meta b/resources/fire22exp/carvariations.meta
new file mode 100644
index 000000000..340687191
--- /dev/null
+++ b/resources/fire22exp/carvariations.meta
@@ -0,0 +1,32 @@
+
+
+
+
+ -
+ fire22exp
+
+
-
+
+ 134
+ 131
+ 0
+ 27
+ 0
+ 0
+
+
+
+
+
+
+ -
+ Police guv plate
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/fire22exp/handling.meta b/resources/fire22exp/handling.meta
new file mode 100644
index 000000000..b47d45cb1
--- /dev/null
+++ b/resources/fire22exp/handling.meta
@@ -0,0 +1,67 @@
+
+
+
+
+ -
+ fire22exp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 440010
+ 0
+ 0
+ AVERAGE
+
+
-
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/fire22exp/stream/fire22exp.yft b/resources/fire22exp/stream/fire22exp.yft
new file mode 100644
index 000000000..f55c61f99
--- /dev/null
+++ b/resources/fire22exp/stream/fire22exp.yft
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1e979239eafa828b7d8f759bda06bc5f92be55b83554787cb6f60ba4e137226d
+size 6705008
diff --git a/resources/fire22exp/stream/fire22exp.ytd b/resources/fire22exp/stream/fire22exp.ytd
new file mode 100644
index 000000000..22d00c61c
--- /dev/null
+++ b/resources/fire22exp/stream/fire22exp.ytd
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:241675c688b80270b9bf3d5b32dadbfc299672a0fc218d55577c34fbfcb10592
+size 8727655
diff --git a/resources/fire22exp/stream/fire22exp_hi.yft b/resources/fire22exp/stream/fire22exp_hi.yft
new file mode 100644
index 000000000..3c3c6346b
--- /dev/null
+++ b/resources/fire22exp/stream/fire22exp_hi.yft
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5ef0b1caf0d9c870d6c0a4f926fbfd9cc5cdf9be1400c31fb56d9ddb5e1161e4
+size 6704889
diff --git a/resources/fire22exp/vehicles.meta b/resources/fire22exp/vehicles.meta
new file mode 100644
index 000000000..d43d97b3b
--- /dev/null
+++ b/resources/fire22exp/vehicles.meta
@@ -0,0 +1,138 @@
+
+
+ vehshare
+
+
+ -
+ fire22exp
+ fire22exp
+ fire22exp
+ Expedition
+ FORD
+ null
+ null
+ null
+ null
+
+ null
+ LANDSTALKER
+ LAYOUT_STANDARD
+ GRESLEY_COVER_OFFSET_INFO
+ EXPLOSION_INFO_DEFAULT
+
+ DEFAULT_FOLLOW_VEHICLE_CAMERA
+ DEFAULT_THIRD_PERSON_VEHICLE_AIM_CAMERA
+ VEHICLE_BONNET_CAMERA_MID_HIGH
+ DEFAULT_POV_CAMERA
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+ -
+
+
+
+
+
+
+
+
+ VFXVEHICLEINFO_CAR_GENERIC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 15.000000
+ 30.000000
+ 70.000000
+ 140.000000
+ 500.000000
+ 500.000000
+
+
+
+
+
+
+
+
+
+
+ SWANKNESS_3
+
+ FLAG_ATTACH_TRAILER_ON_HIGHWAY FLAG_ATTACH_TRAILER_IN_CITY FLAG_HAS_LIVERY FLAG_EXTRAS_STRONG FLAG_EXTRAS_REQUIRE FLAG_LAW_ENFORCEMENT FLAG_EMERGENCY_SERVICE FLAG_HAS_INTERIOR_EXTRAS FLAG_DONT_SPAWN_AS_AMBIENT FLAG_DONT_SPAWN_IN_CARGEN FLAG_NO_RESPRAY
+ VEHICLE_TYPE_CAR
+ VPT_BACK_PLATES
+ VDT_FEROCI
+ VC_EMERGENCY
+ VWT_SUV
+
+
+
+
+ - EXTRA_1
+
+
+
+
+
+
+ - EXTRA_1
+
+
+
+ - WHEEL_FRONT_RIGHT_CAMERA
+ - WHEEL_FRONT_LEFT_CAMERA
+ - WHEEL_REAR_RIGHT_CAMERA
+ - WHEEL_REAR_LEFT_CAMERA
+
+ Truck
+
+
+
+
+ - STD_DILETTANTE_FRONT_LEFT
+ - STD_DILETTANTE_FRONT_RIGHT
+ - STD_BALLER_REAR_LEFT
+ - STD_BALLER_REAR_RIGHT
+
+
+
+
+ -
+ vehicles_bob_brown_interior
+ 22expxl
+
+
+
\ No newline at end of file
diff --git a/resources/lapd16fpiu/stream/lapd16fpiu+hi.ytd b/resources/lapd16fpiu/stream/lapd16fpiu+hi.ytd
index d84440fc2..3765dc446 100644
--- a/resources/lapd16fpiu/stream/lapd16fpiu+hi.ytd
+++ b/resources/lapd16fpiu/stream/lapd16fpiu+hi.ytd
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:8a4f5979319e2e16015e3c644e7f5ea0cf1290b30d87b3b1099c0e77abf62fdd
-size 3082819
+oid sha256:383b1e37caf9e05b313eafd8c3ec63921eb98ddbd245629ffc62eee74add51b1
+size 2893306
diff --git a/resources/lapd16fpiu/stream/lapd16fpiu.ytd b/resources/lapd16fpiu/stream/lapd16fpiu.ytd
index 6157651fe..04e301fb8 100644
--- a/resources/lapd16fpiu/stream/lapd16fpiu.ytd
+++ b/resources/lapd16fpiu/stream/lapd16fpiu.ytd
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:5a06e310f9f9ee64150dca459ad9f72f4dde64b47f1c87da1f346df741ef5e66
-size 6817065
+oid sha256:38d9041011f550855d2662e661cfdafffd5d54b85370491b144de1d3edd269de
+size 6644742
diff --git a/resources/lapd16fpiu/stream/lapd16fpiutraffic+hi.ytd b/resources/lapd16fpiu/stream/lapd16fpiutraffic+hi.ytd
index 6cea1ac03..1010a8a43 100644
--- a/resources/lapd16fpiu/stream/lapd16fpiutraffic+hi.ytd
+++ b/resources/lapd16fpiu/stream/lapd16fpiutraffic+hi.ytd
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:15fa1333ccac66016f541661fb48c23066fd475ba09a3ca41e23a5e5a09f7b7b
-size 2734224
+oid sha256:88661254007935f933673bbc0c80412091ded313a0566ae9b9bb31ef866d1d1d
+size 2646241
diff --git a/resources/lapd16fpiu/stream/lapd16fpiutraffic.ytd b/resources/lapd16fpiu/stream/lapd16fpiutraffic.ytd
index 6a3c819de..ef3b14e6e 100644
--- a/resources/lapd16fpiu/stream/lapd16fpiutraffic.ytd
+++ b/resources/lapd16fpiu/stream/lapd16fpiutraffic.ytd
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:87d55a7cee4625dfac01c9d22b91300e6185ac9e585ceb1dd7c22602778462fc
-size 6677095
+oid sha256:c37d83b64a2ee505259c63cac7c4d1c98780467014564e6bb6ef97a3e567e4c5
+size 6593299
diff --git a/resources/lapd2pack/stream/SHOP81365+hi.ytd b/resources/lapd2pack/stream/SHOP81365+hi.ytd
deleted file mode 100644
index d84440fc2..000000000
--- a/resources/lapd2pack/stream/SHOP81365+hi.ytd
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:8a4f5979319e2e16015e3c644e7f5ea0cf1290b30d87b3b1099c0e77abf62fdd
-size 3082819
diff --git a/resources/lapd2pack/stream/SHOP81365.yft b/resources/lapd2pack/stream/SHOP81365.yft
deleted file mode 100644
index ff72f2ddd..000000000
--- a/resources/lapd2pack/stream/SHOP81365.yft
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:08533c963a2658df22b5ced32d4c6ab2ee8313ddadb4308231da54c395060807
-size 3890311
diff --git a/resources/lapd2pack/stream/SHOP81365.ytd b/resources/lapd2pack/stream/SHOP81365.ytd
deleted file mode 100644
index e14b357dc..000000000
--- a/resources/lapd2pack/stream/SHOP81365.ytd
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:8ca9ca1506604a878f5c43d128ae5db1114fa638e30a17f633b69843154870a8
-size 6882802
diff --git a/resources/lapd2pack/stream/SHOP81365_hi.yft b/resources/lapd2pack/stream/SHOP81365_hi.yft
deleted file mode 100644
index 6bd388265..000000000
--- a/resources/lapd2pack/stream/SHOP81365_hi.yft
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:7363284f18326e072595795d5a97b8344efb946f0e55d5cd6692fbd1b6a14b8e
-size 4914451
diff --git a/resources/lapd2pack/stream/SHOP81906+hi.ytd b/resources/lapd2pack/stream/SHOP81906+hi.ytd
deleted file mode 100644
index d84440fc2..000000000
--- a/resources/lapd2pack/stream/SHOP81906+hi.ytd
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:8a4f5979319e2e16015e3c644e7f5ea0cf1290b30d87b3b1099c0e77abf62fdd
-size 3082819
diff --git a/resources/lapd2pack/stream/SHOP81906.yft b/resources/lapd2pack/stream/SHOP81906.yft
deleted file mode 100644
index 4384b7ade..000000000
--- a/resources/lapd2pack/stream/SHOP81906.yft
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:63efac2d3af82fed7c401e4e3218bfb0a1caaf9c65321bc43896ab225eec4fa3
-size 3912728
diff --git a/resources/lapd2pack/stream/SHOP81906.ytd b/resources/lapd2pack/stream/SHOP81906.ytd
deleted file mode 100644
index 25524070e..000000000
--- a/resources/lapd2pack/stream/SHOP81906.ytd
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:d0b3909e5d95423509efe1f33988d2911bbcf15b1e9cd70e29185ef200334a57
-size 6836518
diff --git a/resources/lapd2pack/stream/SHOP81906_hi.yft b/resources/lapd2pack/stream/SHOP81906_hi.yft
deleted file mode 100644
index c7e1fd6d4..000000000
--- a/resources/lapd2pack/stream/SHOP81906_hi.yft
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:cba357b9bca898e2b74eb99754f88868864e6a4c7965c023605455f5ab661f92
-size 4857596
diff --git a/resources/night_ers/.fxap b/resources/night_ers/.fxap
new file mode 100644
index 000000000..258c95d54
Binary files /dev/null and b/resources/night_ers/.fxap differ
diff --git a/resources/night_ers/callouts/README.md b/resources/night_ers/callouts/README.md
new file mode 100644
index 000000000..841f56b73
--- /dev/null
+++ b/resources/night_ers/callouts/README.md
@@ -0,0 +1,32 @@
+
+# Callout-Creator-Pack
+
+This pack includes an example of how to create a callout.
+
+██████╗░███████╗░█████╗░██████╗░ ███╗░░░███╗███████╗
+██╔══██╗██╔════╝██╔══██╗██╔══██╗ ████╗░████║██╔════╝
+██████╔╝█████╗░░███████║██║░░██║ ██╔████╔██║█████╗░░
+██╔══██╗██╔══╝░░██╔══██║██║░░██║ ██║╚██╔╝██║██╔══╝░░
+██║░░██║███████╗██║░░██║██████╔╝ ██║░╚═╝░██║███████╗
+╚═╝░░╚═╝╚══════╝╚═╝░░╚═╝╚═════╝░ ╚═╝░░░░░╚═╝╚══════╝
+
+> **Note:** Nights Software does not provide ticket support for building callouts. Read the documentation instead. This option is made to provide skilled developers the freedom to build their own callouts.
+
+## How to Build Callouts
+
+1. **Nights Software has created a Callout Creator Pack to help you create your own callouts. This pack includes an example callout and a documentation on how to create your own callouts.**
+ - [Download the free Callout Creator Pack here](https://store.nights-software.com/package/6374594).
+
+## Task List for creating one callout
+- [x] **Task 1**
+- Enter the `night_ers/callouts/plugins/` folder and copy an existing `.lua` callout file or paste in a newly created callout file.
+- [x] **Task 2**
+- Rename the file to your desired callout name.
+- [x] **Task 3**
+- Adjust the config, client and server code (all of them) within your new file to your liking.
+- [x] **Task 4**
+- Test the callout and make sure it works as intended by restarting the script and spawning the callout afterwards.
+
+## How to use ERS functions
+
+Find all functions used in callouts in the [Nights Software ERS Documentation](https://docs.nights-software.com/resources/ers/#creating-ers-callouts)
\ No newline at end of file
diff --git a/resources/night_ers/callouts/callouts_client.lua b/resources/night_ers/callouts/callouts_client.lua
new file mode 100644
index 000000000..d1e82ebff
--- /dev/null
+++ b/resources/night_ers/callouts/callouts_client.lua
@@ -0,0 +1,108 @@
+--============================== BUILD CALLOUTS =================================--
+
+function ERS_BuildCallout(pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+ local plyPed = PlayerPedId()
+ Config.Callouts[calloutDataClient.calloutId].client(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+end
+
+--================ Open source functions (Edit these if you like.) =================--
+
+function ERS_SetRandomDamageToVehicle(vehicle)
+ ERS_RequestNetControlForEntity(vehicle)
+ if DoesEntityExist(vehicle) then
+ SetVehicleBodyHealth(vehicle, math.random(0, 1000) + 0.0)
+ SetVehicleEngineHealth(vehicle, math.random(0, 1000) + 0.0)
+
+ -- Burst random tires
+ for i = 0, GetVehicleNumberOfWheels(vehicle) - 1 do
+ if math.random(100) < 10 then -- 10% chance to burst each tire
+ SetVehicleTyreBurst(vehicle, i, true, 1000.0)
+ end
+ end
+
+ -- Apply visual damage
+ for i = 0, 5 do -- Randomly damage some parts of the vehicle
+ if math.random(100) < 70 then -- 70% chance to apply damage to each part
+ SetVehicleDamage(vehicle, 0.5 * i, 0.5 * i, 0.5 * i, 500.0, 100.0, true)
+ end
+ end
+ else
+ if Config.Debug then
+ print("Vehicle does not exist.")
+ end
+ end
+end
+
+function ERS_CreateFlareAtCoordinate(coords)
+ AddExplosion(coords.x, coords.y, coords.z-1.0, 22, 1.0, true, false, 1.0)
+end
+
+function ERS_GivePedParachute(ped) -- Does not work on every ped.
+ ERS_RequestNetControlForEntity(ped)
+
+ if not DoesEntityExist(ped) then
+ if Config.Debug then
+ print("Ped does not exist.")
+ end
+ return
+ end
+
+ local weaponHash = GetHashKey("GADGET_PARACHUTE")
+ GiveWeaponToPed(ped, weaponHash, 1, false, true)
+
+ -- This sets the ped's parachute as visible if applicable to the model
+ SetPedComponentVariation(ped, 5, 8, 0, 2)
+end
+
+function ERS_SelectRandomPartyMusic()
+ local files = {
+ "party1",
+ "party2",
+ "party3",
+ }
+ local soundFile = files[math.random(#files)]
+ if Config.Debug then
+ print("Selected party music file: "..soundFile)
+ end
+ return soundFile
+end
+
+function ERS_CreateTemporaryBlipForEntities(entityList, timeoutInMs)
+ if Config.ShowBlipsForEntitiesOnCallouts then
+ local blipList = {}
+ local blip = nil
+ for index, entityNetId in pairs(entityList) do
+ local ent = NetworkGetEntityFromNetworkId(entityNetId)
+ ERS_RequestNetControlForEntity(ent)
+ if DoesEntityExist(ent) then
+ blip = AddBlipForEntity(ent)
+ SetBlipSprite(blip, Config.CalloutEntityBlipSprite)
+ SetBlipColour(blip, Config.CalloutEntityBlipColour)
+ SetBlipScale(blip, Config.CalloutEntityBlipScale)
+ SetBlipFlashes(blip, false)
+ -- SetBlipShowCone(blip, true)
+ table.insert(blipList, blip)
+ else
+ if Config.Debug then
+ print("Could not find entity with entityNetId "..entityNetId)
+ end
+ end
+ end
+
+ Citizen.SetTimeout(timeoutInMs, function()
+ for index, blipId in ipairs(blipList) do
+ if DoesBlipExist(blipId) then
+ RemoveBlip(blipId)
+ else
+ if Config.Debug then
+ print("Could not find blip with blipId "..blipId)
+ end
+ end
+ end
+ end)
+ else
+ if Config.Debug then
+ print("Showing blips for entities on callouts is disabled. The script will not create a blip for any entity.")
+ end
+ end
+end
\ No newline at end of file
diff --git a/resources/night_ers/callouts/callouts_server.lua b/resources/night_ers/callouts/callouts_server.lua
new file mode 100644
index 000000000..6e9b1939e
--- /dev/null
+++ b/resources/night_ers/callouts/callouts_server.lua
@@ -0,0 +1,79 @@
+--============================== BUILD CALLOUTS =================================--
+
+local BuildCalloutQueue = {}
+local processingBuildCalloutQueue = false
+
+RegisterServerEvent(Config.EventPrefix..':buildCallout')
+AddEventHandler(Config.EventPrefix..':buildCallout', function(calloutData)
+ local src = source
+ table.insert(BuildCalloutQueue, {src = src, calloutData = calloutData})
+ processBuildCalloutQueue()
+end)
+
+function processBuildCalloutQueue()
+ if processingBuildCalloutQueue or #BuildCalloutQueue == 0 then
+ return
+ end
+
+ processingBuildCalloutQueue = true
+
+ local request = table.remove(BuildCalloutQueue, 1)
+ local src = request.src
+ local calloutData = request.calloutData
+ local calloutBuilt = false
+ local pedList = {}
+ local vehicleList = {}
+ local objectList = {}
+ local propList = {}
+ local playersList = {}
+ local fireList = {}
+ local smokeList = {}
+
+ DebugPrint("Attempting to build callout: "..calloutData.CalloutName)
+ calloutBuilt = Config.Callouts[calloutData.calloutId].server(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ -- Check if callout was built
+ if calloutBuilt then
+ ERS_InsertEntitiesIntoCalloutList(src, pedList, vehicleList, objectList, fireList, smokeList)
+
+ QueueUpdateRequest(function(success)
+ if success then
+ DebugPrint("[processBuildCalloutQueue] Update completed successfully.")
+
+ -- Update callout UI for the owner & attached players of the callout
+ DebugPrint("[processBuildCalloutQueue] Updating callout user interface for hostId "..src)
+ TriggerClientEvent(Config.EventPrefix..':updateCalloutUserInterface', src, src)
+
+ for index, callout in ipairs(ActiveCalloutsList) do
+ if callout.hostId == src then
+ for i, userServerId in pairs(callout.playersList) do
+ DebugPrint("[processBuildCalloutQueue] Updating callout user interface for attached playerId "..userServerId)
+ TriggerClientEvent(Config.EventPrefix..':updateCalloutUserInterface', userServerId, src)
+ end
+ break
+ end
+ end
+
+ TriggerClientEvent(Config.EventPrefix..':startCallout', src, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutData)
+
+ DebugPrint("Successfully built callout: "..calloutData.CalloutName)
+ else
+ DebugPrint("[processBuildCalloutQueue] Update failed or was skipped.")
+ end
+ end)
+ else
+ local message = Config.Messages[Config.Language].ServerCouldNotBuildCalloutError
+ TriggerClientEvent(Config.EventPrefix..':notificationMessage', src, message)
+ print("^1ERROR^7 It is possible you forgot to return true at the end of your callout server function OR:")
+ print("^1ERROR^7 None of the enabled callouts could be built, please make sure you have at least 1 callout enabled.")
+ end
+
+ Citizen.SetTimeout(1000, function()
+ processingBuildCalloutQueue = false
+ processBuildCalloutQueue()
+ end)
+end
+
+--================ Open source functions =================--
+
+--
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_abandoned_vehicle.lua b/resources/night_ers/callouts/plugins/callout_abandoned_vehicle.lua
new file mode 100644
index 000000000..cfcff8251
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_abandoned_vehicle.lua
@@ -0,0 +1,99 @@
+Config.Callouts["abandoned_vehicle"] = {
+
+ Enabled = true,
+ CalloutName = "Abandoned vehicle",
+ CalloutDescriptions = {
+ "Investigate a vehicle left in a deserted area; check for any distressed occupants or suspicious items.",
+ "Alert: abandoned car found near a construction site; ensure it is not obstructing any operations or posing a hazard.",
+ "Units required: car discovered with doors open and no one around; examine the scene for any signs of foul play.",
+ "Notice: vehicle parked in an unusual spot for an extended period; verify it is not a stolen or abandoned car.",
+ "Alert: report of a vehicle left in a school zone; determine if it poses any danger to children and staff.",
+ "Incident reported: vehicle found with the engine running but no driver in sight; ensure it is secure and investigate.",
+ "Respond to a situation involving a car left on train tracks; coordinate with transportation authorities to prevent accidents.",
+ "Situation alert: vehicle discovered with hazardous materials warning signs; prioritize safety and coordinate with hazmat teams.",
+ "Alert: car abandoned in a flood-prone area; assess the risk of it being swept away and causing damage.",
+ "Response needed: suspicious vehicle found near a high-security facility; check for any potential threats or security breaches.",
+ },
+ CalloutUnitsRequired = {
+ description = "Tow",
+ policeRequired = false,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = true,
+ },
+ CalloutLocations = {
+ [1] = vector3(482.5813, -902.2799, 35.9722),
+ [2] = vector3(-498.6677, 6267.7412, 11.3615),
+ [3] = vector3(-742.7029, 5812.6357, 17.4803),
+ [4] = vector3(-767.0907, 5543.6484, 33.4922),
+ [5] = vector3(-916.5244, 5250.4307, 83.9764),
+ [6] = vector3(-525.5445, 4948.1494, 147.3998),
+ [7] = vector3(151.7183, 4416.7876, 75.6445),
+ [8] = vector3(1466.3269, 4531.2056, 52.0130),
+ [9] = vector3(1504.0210, 3749.1111, 34.0672),
+ [10] = vector3(1547.0118, 3635.0022, 34.4262),
+ [11] = vector3(1986.4946, 3661.6140, 33.5053),
+ [12] = vector3(2458.8081, 3812.0923, 40.1474),
+ [13] = vector3(2672.1116, 3534.7649, 51.9782),
+ [14] = vector3(2568.6899, 2890.6724, 39.7117),
+ [15] = vector3(1522.8920, 787.9393, 77.4461),
+ [16] = vector3(1123.0111, 258.1617, 80.8556),
+ [17] = vector3(1019.5189, -698.3103, 56.8416),
+ [18] = vector3(1167.9501, -1548.5294, 34.6922),
+ [19] = vector3(1112.2905, -2524.5283, 32.4943),
+ [20] = vector3(599.6377, -2757.5508, 6.0598),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ ERS_RequestNetControlForEntity(veh)
+ ERS_SetRandomDamageToVehicle(veh)
+
+ for i = 0, 7 do -- Tire indices range from 0 to 7
+ if math.random(100) < 75 then
+ SetVehicleTyreBurst(veh, i, true, 1000.0)
+ end
+ end
+
+ local numDoors = GetNumberOfVehicleDoors(veh)
+ for i = 0, numDoors - 1 do
+ if math.random(100) < 50 then
+ SetVehicleDoorOpen(veh, i, false, false)
+ end
+ end
+
+ local randomDirtLevel = math.random(0, 15)
+ SetVehicleDirtLevel(veh, randomDirtLevel+.0)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(vehicleList, 15000)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ -- Build vehicle
+ local vehModel = ERS_GetRandomModel(Config.randomVehicles)
+ local vehType = "automobile"
+ local vehCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_aircraft_hard_landing.lua b/resources/night_ers/callouts/plugins/callout_aircraft_hard_landing.lua
new file mode 100644
index 000000000..f374263fe
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_aircraft_hard_landing.lua
@@ -0,0 +1,141 @@
+Config.Callouts["aircraft_hard_landing"] = {
+
+ Enabled = true,
+ CalloutName = "Potential hard landing (Aircraft)",
+ CalloutDescriptions = {
+ "Emergency responders are required to mitigate the aftermath of a potential aircraft crash.",
+ "Authorities report an aircraft in distress, demanding immediate intervention to ensure safety.",
+ "Aircraft emergency reported, necessitating urgent action to minimize further damage.",
+ "Critical situation with an aircraft in trouble; additional units are needed for support.",
+ "Immediate response needed to address an aircraft facing imminent danger.",
+ "An aircraft is in jeopardy, posing a severe threat; reinforcements are necessary to avert disaster.",
+ "Emergency crews are requesting backup to assist in managing an aircraft emergency and prevent its escalation.",
+ "An urgent call for help has been issued to handle an aircraft emergency and ensure safety.",
+ "Responders are on the scene of an aircraft emergency and need extra support to stabilize the situation.",
+ "A serious emergency involving an aircraft demands swift action to prevent a catastrophic outcome.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Ambulance, Fire.",
+ policeRequired = true,
+ ambulanceRequired = true,
+ fireRequired = true,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(776.0710, -2065.0103, 29.3829),
+ -- [2] = vector3(2278.6301, 2969.2185, 46.5811),
+ -- [3] = vector3(2840.2234, 1553.8225, 24.5741),
+ -- [4] = vector3(2821.8545, 1511.8513, 24.7242),
+ -- [5] = vector3(2458.3921, 1457.0712, 36.2040),
+ -- [6] = vector3(1127.5670, -2489.8242, 33.3611),
+ -- [7] = vector3(233.3477, 6399.8403, 31.6335),
+ -- [8] = vector3(1346.0159, 6383.4556, 33.4101),
+ -- [9] = vector3(2050.1416, 3683.3496, 34.5879),
+ -- [10] = vector3(683.1802, 120.5065, 80.7545),
+
+ -- Add more to 40
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+
+ local aircraft
+
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ ERS_RequestNetControlForEntity(veh)
+ aircraft = veh
+ SetVehicleEngineOn(aircraft, true, true, false)
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+
+ if index == 1 then
+ ERS_ApplyBloodToPed(ped)
+
+ -- Specify the destination coordinates
+ local destinationX = calloutDataClient.Coordinates.x
+ local destinationY = calloutDataClient.Coordinates.y
+ local destinationZ = calloutDataClient.Coordinates.z
+
+ -- Set other parameters for the plane mission
+ local missionFlag = 17 -- This can vary based on your requirements
+ local angularDrag = 0.0 -- Adjust as needed
+ local unk = 0 -- Unknown parameter, usually set to 0
+ local targetHeading = 0.0 -- Heading angle to face when reaching the destination
+ local maxZ = 250.0 -- Maximum altitude
+ local minZ = 0.0 -- Minimum altitude
+
+ TaskPlaneMission(ped, aircraft, 0, 0, destinationX, destinationY, destinationZ, missionFlag, angularDrag, unk, targetHeading, maxZ, minZ)
+ else
+ ERS_ApplyBloodToPed(ped)
+
+ local chance = math.random(100)
+ if chance > 50 then
+ TaskLeaveAnyVehicle(ped)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ else
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ end
+ end
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(vehicleList, 15000)
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ -- Build vehicle
+ local vehModel = ERS_GetRandomModel(Config.randomPlanes)
+ local vehType = "plane"
+ local vehCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z+150)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build pilot
+ local pedModel = "s_m_m_pilot_01"
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z+150)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(ped, vehicle, -1)
+ table.insert(pedList, pedNetId)
+
+ -- Build passengers
+ for seatIndex = 0, 5 do -- seats planes
+ if GetPedInVehicleSeat(vehicle, seatIndex) == 0 then
+ local passengerPedModel = ERS_GetRandomModel(Config.randomPeds)
+ local passengerPedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z+150)
+ local passengerPedHeading = math.random(360)
+ local passengerPedNetId = ERS_CreatePed(passengerPedModel, passengerPedCoords, passengerPedHeading)
+ local passengerPed = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(passengerPed, vehicle, seatIndex)
+ table.insert(pedList, passengerPedNetId)
+ end
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_airport_fire.lua b/resources/night_ers/callouts/plugins/callout_airport_fire.lua
new file mode 100644
index 000000000..ad412be00
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_airport_fire.lua
@@ -0,0 +1,136 @@
+Config.Callouts["airport_fire"] = {
+
+ Enabled = true,
+ CalloutName = "Fire at an airport",
+ CalloutDescriptions = {
+ "A fire has broken out at the airport, requiring immediate intervention from fire services.",
+ "Emergency teams are needed to extinguish a fire at the airport.",
+ "Authorities report an airport fire threatening nearby structures, necessitating urgent action.",
+ "A large fire has erupted at the airport, and additional firefighting units are needed to contain it.",
+ "Immediate response required to an airport fire endangering surrounding areas.",
+ "A fire at the airport is escalating, and reinforcements are needed to assist local fire services.",
+ "Fire crews are requesting backup to control a severe fire at the airport.",
+ "An urgent call for assistance has been made to deal with an airport fire spreading towards nearby properties.",
+ "Responders are on the scene of an airport fire and require additional support to prevent further damage.",
+ "A significant fire at the airport demands immediate intervention to protect lives and property.",
+ },
+ CalloutUnitsRequired = {
+ description = "Fire.",
+ policeRequired = false,
+ ambulanceRequired = false,
+ fireRequired = true,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(1740.46, 3327.01, 41.22),
+ [2] = vector3(1746.42, 3306.86, 41.22),
+ [3] = vector3(1725.30, 3294.12, 41.22),
+ [4] = vector3(1722.81, 3320.40, 41.22),
+ [5] = vector3(1697.10, 3289.78, 41.15),
+ [6] = vector3(1693.23, 3293.00, 41.15),
+ [7] = vector3(2143.53, 4785.09, 40.97),
+ [8] = vector3(2139.51, 4772.66, 41.00),
+ [9] = vector3(2132.91, 4771.54, 40.97),
+ [10] = vector3(-1482.70, -3253.20, 13.95),
+ [11] = vector3(-1348.19, -3286.84, 13.94),
+ [12] = vector3(-1282.99, -3333.97, 14.14),
+ [13] = vector3(-1265.18, -3424.46, 14.14),
+ [14] = vector3(-1119.58, -3487.74, 14.14),
+ [15] = vector3(-1136.13, -3520.39, 14.14),
+ [16] = vector3(-1916.21, -2994.46, 13.94),
+ [17] = vector3(-1785.29, -2761.26, 13.94),
+ [18] = vector3(-948.39, -2930.32, 13.94),
+ [19] = vector3(-925.56, -3041.93, 13.95),
+ [20] = vector3(-938.65, -2800.90, 13.97),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+
+ local vehicle
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ vehicle = veh
+ ERS_RequestNetControlForEntity(vehicle)
+ ERS_SetRandomDamageToVehicle(vehicle)
+ SetVehicleBodyHealth(vehicle, 0)
+ SetVehicleEngineHealth(vehicle, 0)
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ TaskTurnPedToFaceEntity(ped, vehicle, -1)
+ Wait(1000)
+ local scenario = ERS_SelectRandomBystanderScenario()
+ TaskStartScenarioInPlace(ped, scenario, 0, true)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(vehicleList, 15000)
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ local diameter = 20
+
+ if UsingSmartFires then
+ -- Full version
+ local fireSize = Config.RandomLargeFireOrSmokeSize[math.random(#Config.RandomLargeFireOrSmokeSize)]
+ local fireType = Config.AllFireTypes[math.random(#Config.AllFireTypes)]
+ local fireId = exports['SmartFires']:CreateFire(vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z-0.5), fireSize, fireType)
+ DebugPrint("Created fire with ID: "..fireId)
+ table.insert(fireList, fireId)
+ else
+ -- Lite version
+ local fireSize = Config.RandomLargeFireOrSmokeSize[math.random(#Config.RandomLargeFireOrSmokeSize)]
+ local fireType = "normal"
+ local fireId = exports['SmartFiresLite']:CreateFire(vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z-0.5), fireSize, fireType)
+ DebugPrint("Created fire with SmartFiresLite with ID: "..fireId)
+ table.insert(fireList, fireId)
+ end
+
+ -- Build vehicle
+ local vehModel = ERS_GetRandomModel(Config.randomAirportVehicles)
+ local vehType = "automobile"
+ local vehCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+
+ -- Build bystander(s)
+ local randomAmountOfBystanders = math.random(3)
+ for i = 1, randomAmountOfBystanders do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+
+ local pedModel = ERS_GetRandomModel(Config.randomAirportPeds)
+ local pedCoords = vector3(coords.x, coords.y, coords.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_airport_tresspass.lua b/resources/night_ers/callouts/plugins/callout_airport_tresspass.lua
new file mode 100644
index 000000000..6fa57b36e
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_airport_tresspass.lua
@@ -0,0 +1,82 @@
+Config.Callouts["airport_tresspass"] = {
+
+ Enabled = true,
+ CalloutName = "Trespassing at the airport",
+ CalloutDescriptions = {
+ "Respond to a report of trespassing at the airport; locate and apprehend the individual.",
+ "Alert: unauthorized person on airport property; deploy units to secure the area and ensure safety.",
+ "Units needed: report of trespassing at the airport; focus on locating the trespasser and assessing any potential threats.",
+ "Notice: trespassing incident at the airport reported; act promptly to control the situation and prevent disruptions.",
+ "Alert: report of unauthorized entry at the airport; intervention needed to ensure safety and remove the trespasser.",
+ "Incident reported: trespassing at the airport; take action to investigate and enforce security protocols.",
+ "Respond to a situation involving unauthorized entry at the airport; prioritize security and coordinate with airport authorities.",
+ "Situation alert: trespassing in progress at the airport; secure the area and apprehend the individual.",
+ "Alert: report of unauthorized presence at the airport; respond swiftly to address the situation and ensure safety.",
+ "Response needed: trespassing at the airport; secure the area, locate the individual, and enforce security measures.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(-1360.23, -2220.66, 13.94),
+ [2] = vector3(-1760.41, -2858.64, 15.13),
+ [3] = vector3(-1427.77, -3142.13, 13.93),
+ [4] = vector3(-909.73, -3190.05, 13.94),
+ [5] = vector3(-1097.16, -2911.45, 13.94),
+ [6] = vector3(-1261.79, -2780.29, 13.94),
+ [7] = vector3(-1193.88, -2543.16, 13.94),
+ [8] = vector3(-989.01, -2375.95, 13.94),
+ [9] = vector3(-1157.98, -2742.06, 13.95),
+ [10] = vector3(1701.78, 3266.63, 41.14),
+ [11] = vector3(1054.73, 3072.05, 41.51),
+ [12] = vector3(1425.41, 3088.31, 40.88),
+ },
+ PedChanceToFleeFromPlayer = 100, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 10000,-- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 15000,-- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "flee", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ ERS_SetPedToFleeFromPlayer(ped)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ local diameter = 15
+
+ -- Build peds
+ local randomAmountOfSuspects = math.random(4)
+ for i = 1, randomAmountOfSuspects do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(coords.x, coords.y, coords.z+1.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_animal_dog_attack.lua b/resources/night_ers/callouts/plugins/callout_animal_dog_attack.lua
new file mode 100644
index 000000000..7166a5798
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_animal_dog_attack.lua
@@ -0,0 +1,122 @@
+Config.Callouts[#Config.Callouts+1] = {
+
+ Enabled = true,
+ CalloutName = "Person Attacked by a dog",
+ CalloutDescriptions = {
+ "Respond immediately to a report of a person being attacked by a dog; secure the area and provide medical assistance.",
+ "Emergency alert: person under attack by a dog; deploy units to manage the situation and ensure the victim's safety.",
+ "Urgent response required: individual attacked by a dog; focus on providing aid and controlling the animal.",
+ "Critical situation: dog attack on a person; act swiftly to assist the victim and contain the dog.",
+ "Alert: report of a dog attacking a person; immediate intervention needed to ensure safety and provide help.",
+ "Dog attack incident: urgent action required to secure the area and assist the injured person.",
+ "Handle an emergency involving a dog attack on a person; prioritize the victim's safety and coordinate with animal control.",
+ "Emergency situation: person being attacked by a dog; ensure the area is safe and provide necessary assistance.",
+ "Urgent alert: individual attacked by a dog; respond quickly to manage the scene and help the victim.",
+ "Critical response needed: dog attack on a person; secure the area, assist the injured, and control the animal.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Ambulance.",
+ policeRequired = true,
+ ambulanceRequired = true,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(-1016.5710, -1280.4180, 6.1974),
+ [2] = vector3(-101.3984, -446.6597, 35.9044),
+ [3] = vector3(-137.1873, -433.7953, 34.1178),
+ [4] = vector3(-353.7449, -992.6283, 29.2972),
+ [5] = vector3(1141.6670, -643.3297, 56.7655),
+ [6] = vector3(627.6739, -103.4051, 73.4221),
+ [7] = vector3(428.5690, 6507.1108, 28.0105),
+ [8] = vector3(-556.6186, 6240.6646, 8.9844),
+ [9] = vector3(-1007.1041, 5032.3906, 179.1540),
+ [10] = vector3(-1678.2893, 4244.0859, 78.9253),
+ [11] = vector3(-1438.6696, 828.6215, 184.3856),
+ [12] = vector3(-526.8943, 285.0213, 83.0205),
+ [13] = vector3(-603.4233, -1307.2855, 12.2781),
+ [14] = vector3(252.2129, -1993.1140, 20.3490),
+ [15] = vector3(170.6650, -1825.4866, 28.1628),
+ [16] = vector3(376.8596, -1836.3699, 28.3408),
+ [17] = vector3(830.2681, -795.4789, 26.2482),
+ [18] = vector3(707.4484, -863.0705, 23.8887),
+ [19] = vector3(349.2947, -1140.6333, 29.3828),
+ [20] = vector3(182.8992, -1222.9861, 29.3061),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 100, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 10000,-- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 15000,-- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "attack",-- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ local dogPedList = {}
+ local targetPed
+ local dogPed
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+
+ if ERS_IsPedAnAnimalPed(ped) then
+ dogPed = ped
+ table.insert(dogPedList, PedToNet(dogPed))
+ else
+ targetPed = ped
+ ERS_ApplyBloodToPed(ped)
+ end
+ end
+ end
+
+ if DoesEntityExist(dogPed) and DoesEntityExist(targetPed) then
+ TaskCombatPed(dogPed, targetPed, 0, 16)
+
+ local chance = math.random(100)
+ if chance > 50 then
+ -- Ped fights back
+ TaskCombatPed(targetPed, dogPed, 0, 16)
+ else
+ -- Ped flees
+ ERS_ClearPedTasksAndBlockEvents(targetPed)
+ TaskReactAndFleePed(targetPed, dogPed)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, dogPedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ local diameter = 5
+
+ -- Build ped
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(coords.x, coords.y, coords.z+1.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+
+ -- Build dog
+ coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local pedModel = ERS_GetRandomModel(Config.randomDogs)
+ local pedCoords = vector3(coords.x, coords.y, coords.z+1.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_animal_fire.lua b/resources/night_ers/callouts/plugins/callout_animal_fire.lua
new file mode 100644
index 000000000..0730736e5
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_animal_fire.lua
@@ -0,0 +1,124 @@
+Config.Callouts["animal_fire"] = {
+
+ Enabled = true,
+ CalloutName = "Animal on fire",
+ CalloutDescriptions = {
+ "An animal has caught fire, requiring immediate intervention to save it.",
+ "Emergency teams are needed to extinguish flames on a burning animal.",
+ "Authorities report an animal on fire, necessitating urgent action to prevent further harm.",
+ "A critical situation with an animal ablaze; additional units are needed to assist.",
+ "Immediate response required to rescue an animal engulfed in flames.",
+ "An animal is burning, posing a severe threat; reinforcements are needed to handle the situation.",
+ "Emergency crews are requesting backup to save an animal on fire and prevent the flames from spreading.",
+ "An urgent call for help has been issued to deal with an animal caught in a fire.",
+ "Responders are on the scene of an animal on fire and need extra support to control the flames.",
+ "A serious emergency involving an animal on fire demands swift action to protect both the animal and nearby areas.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Fire.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = true,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(1425.4738, -2374.1970, 67.0164),
+ -- [2] = vector3(2278.6301, 2969.2185, 46.5811),
+ -- [3] = vector3(2840.2234, 1553.8225, 24.5741),
+ -- [4] = vector3(2821.8545, 1511.8513, 24.7242),
+ -- [5] = vector3(2458.3921, 1457.0712, 36.2040),
+ -- [6] = vector3(1127.5670, -2489.8242, 33.3611),
+ -- [7] = vector3(233.3477, 6399.8403, 31.6335),
+ -- [8] = vector3(1346.0159, 6383.4556, 33.4101),
+ -- [9] = vector3(2050.1416, 3683.3496, 34.5879),
+ -- [10] = vector3(683.1802, 120.5065, 80.7545),
+
+ -- Add more to 40
+ },
+ PedChanceToFleeFromPlayer = 70, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 10, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 1000, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 5000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "flee", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+
+ local victim
+ local suspectPedList = {}
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ if ERS_IsPedAnAnimalPed(ped) then
+ victim = ped
+ StartEntityFire(victim)
+ ERS_ApplyBloodToPed(victim)
+ elseif index == 2 then
+ table.insert(suspectPedList, PedToNet(ped))
+ ERS_SetPedToFleeFromPlayer(ped)
+ else
+ TaskTurnPedToFaceEntity(ped, victim, -1)
+ Wait(1000)
+ local scenario = ERS_SelectRandomBystanderScenario()
+ TaskStartScenarioInPlace(ped, scenario, 0, true)
+ end
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, suspectPedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ local diameter = 10
+
+ -- Build fire
+ if UsingSmartFires then
+ -- Full version
+ local fireSize = Config.RandomSmallFireOrSmokeSize[math.random(#Config.RandomSmallFireOrSmokeSize)]
+ local fireType = Config.NormalFireTypes[math.random(#Config.NormalFireTypes)]
+ local fireId = exports['SmartFires']:CreateFire(vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z-0.5), fireSize, fireType)
+ DebugPrint("Created fire with ID: "..fireId)
+ table.insert(fireList, fireId)
+ else
+ -- Lite version
+ local fireSize = Config.RandomSmallFireOrSmokeSize[math.random(#Config.RandomSmallFireOrSmokeSize)]
+ local fireType = "normal"
+ local fireId = exports['SmartFiresLite']:CreateFire(vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z-0.5), fireSize, fireType)
+ DebugPrint("Created fire with SmartFiresLite with ID: "..fireId)
+ table.insert(fireList, fireId)
+ end
+
+ -- Build victim
+ local pedModel = ERS_GetRandomModel(Config.calloutAnimals)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+
+ -- Build suspect & bystander(s)
+ local randomAmountOfBystanders = math.random(3)
+ for i = 1, randomAmountOfBystanders do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(coords.x, coords.y, coords.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_animal_lion_loose.lua b/resources/night_ers/callouts/plugins/callout_animal_lion_loose.lua
new file mode 100644
index 000000000..191e09970
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_animal_lion_loose.lua
@@ -0,0 +1,85 @@
+Config.Callouts["animal_lion_loose"] = {
+
+ Enabled = true,
+ CalloutName = "Lion on the loose",
+ CalloutDescriptions = {
+ "Respond to a report of a lion on the loose; ensure public safety and coordinate with animal control.",
+ "Alert: wild lion spotted in the area; deploy units to contain the animal and protect civilians.",
+ "Units needed: emergency call for a lion on the loose; focus on securing the area and preventing any harm.",
+ "Notice: lion reported roaming freely; act promptly to control the situation and provide assistance.",
+ "Alert: report of a lion on the loose; intervention needed to secure the scene and ensure safety.",
+ "Incident reported: lion sighted in the vicinity; take action to deliver urgent response and support.",
+ "Respond to a situation involving a loose lion; prioritize public safety and coordinate with wildlife experts.",
+ "Situation alert: lion on the loose; provide immediate assistance and ensure the area is secure.",
+ "Alert: report of a lion roaming freely; respond swiftly to address the emergency and offer necessary support.",
+ "Response needed: lion on the loose; ensure public safety, provide aid, and secure the area.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(1934.6595, 3031.3896, 45.7164),
+ [2] = vector3(-214.8435, 1035.7235, 234.5423),
+ [3] = vector3(-466.8387, -1162.0983, 23.6649),
+ [4] = vector3(-2076.1177, -437.1109, 9.8332),
+ [5] = vector3(-2281.7795, 474.2083, 172.9490),
+ [6] = vector3(-2295.1606, 188.0179, 167.6016),
+ [7] = vector3(-2939.5046, 650.9875, 24.1793),
+ [8] = vector3(-3188.0657, 1012.1148, 20.0270),
+ [9] = vector3(-1552.5914, 1392.1687, 125.7523),
+ [10] = vector3(-435.6132, 1137.1411, 325.9044),
+ [11] = vector3(-95.6399, 1867.1407, 198.5176),
+ [12] = vector3(925.4871, 2210.6370, 48.5551),
+ [13] = vector3(1518.1306, 1657.1375, 111.3717),
+ [14] = vector3(1526.4376, 1083.3717, 113.4257),
+ [15] = vector3(2120.0583, 2712.8020, 49.2382),
+ [16] = vector3(2398.5566, 3368.1067, 47.5749),
+ [17] = vector3(2025.1345, 3822.0681, 33.0109),
+ [18] = vector3(1698.8066, 4934.4023, 42.0782),
+ [19] = vector3(2336.7585, 5165.4336, 50.9019),
+ [20] = vector3(-496.6979, 6083.9131, 29.3845),
+ },
+ PedChanceToFleeFromPlayer = 100, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 10, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 10000, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 15000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "flee",-- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ TaskReactAndFleePed(ped, plyPed)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 30000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ -- Build lion
+ local AnimalPedModel = "a_c_mtlion"
+ local animalPedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z+1.0)
+ local animalPedHeading = math.random(360)
+ local animalPedNetId = ERS_CreatePed(AnimalPedModel, animalPedCoords, animalPedHeading)
+ local animalPed = NetworkGetEntityFromNetworkId(animalPedNetId)
+ table.insert(pedList, animalPedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_animal_on_road.lua b/resources/night_ers/callouts/plugins/callout_animal_on_road.lua
new file mode 100644
index 000000000..47ffac4bf
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_animal_on_road.lua
@@ -0,0 +1,114 @@
+Config.Callouts["animal_on_road"] = {
+
+ Enabled = true,
+ CalloutName = "Animal Blocking the Road",
+ CalloutDescriptions = {
+ "An unexpected type of animal has appeared on the road, causing a disruption in traffic flow.",
+ "Emergency services have been called to intervene in a situation where an animal is impeding traffic on the road.",
+ "Reports indicate a disturbance on the roadway, with an unidentified creature causing a commotion.",
+ "A peculiar incident has unfolded on the road, requiring immediate attention to ensure public safety.",
+ "Emergency services have been dispatched to address an obstruction on the road, involving an animal.",
+ "A surprising encounter has occurred on the road, with an unknown creature causing a hindrance to traffic.",
+ "Witnesses report an unusual occurrence on the road, with an unidentified animal creating a hazard for motorists.",
+ "An incident has occurred on the road, with an animal posing a potential threat to drivers.",
+ "Emergency services have been alerted to a situation where an unidentified creature is obstructing the roadway.",
+ "Reports suggest an unexpected type of animal on the road, involving an animal that requires immediate assistance.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, animal rescue.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(2080.73, 2626.99, 52.40),
+ [2] = vector3(903.23, 161.76, 74.04),
+ [3] = vector3(1113.25, 417.18, 83.67),
+ [4] = vector3(1543.74, 892.82, 77.47),
+ [5] = vector3(1614.32, 1105.89, 82.08),
+ [6] = vector3(2052.10, 2595.61, 53.69),
+ [7] = vector3(2236.29, 2788.25, 44.15),
+ [8] = vector3(2853.91, 3515.08, 54.34),
+ [9] = vector3(2859.30, 3601.57, 52.95),
+ [10] = vector3(2878.75, 4194.57, 50.14),
+ [11] = vector3(2775.87, 4404.12, 48.96),
+ [12] = vector3(2649.70, 5079.81, 44.83),
+ [13] = vector3(2114.19, 6027.16, 50.92),
+ [14] = vector3(1528.76, 6442.59, 23.29),
+ [15] = vector3(8900.44, 6471.33, 31.35),
+ [16] = vector3(-176.06, 6199.81, 31.19),
+ [17] = vector3(-477.35, 5862.80, 33.60),
+ [18] = vector3(-1189.78, 5261.50, 52.16),
+ [19] = vector3(-2015.21, 4496.73, 57.07),
+ [20] = vector3(-2241.45, 4260.30, 45.70),
+ [21] = vector3(-2474.10, 3637.44, 13.92),
+ [22] = vector3(-2631.86, 2855.54, 16.70),
+ [23] = vector3(-2707.72, 2295.90, 18.40),
+ [24] = vector3(-3096.80, 1315.54, 20.22),
+ [25] = vector3(-2988.84, 374.60, 14.79),
+ [26] = vector3(-2553.09, -164.87, 20.33),
+ [27] = vector3(-2164.92, -343.06, 13.19),
+ [28] = vector3(-1821.37, -608.59, 11.26),
+ [29] = vector3(-926.08, -564.75, 18.87),
+ [30] = vector3(-887.70, -512.39, 21.50),
+ [31] = vector3(-471.13, -528.49, 25.33),
+ [32] = vector3(-146.59, -492.57, 29.13),
+ [33] = vector3(290.05, -522.58, 34.08),
+ [34] = vector3(-739.99, -1160.85, 10.67),
+ [35] = vector3(1112.01, -2084.58, 38.69),
+ [36] = vector3(1012.97, -900.33, 30.53),
+ [37] = vector3(1291.97, -645.74, 67.81),
+ [38] = vector3(1092.31, 758.75, 152.95),
+ [39] = vector3(239.35, 1337.28, 238.19),
+ [40] = vector3(-637.12, 1752.96, 210.16),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ ClearPedTasks(ped)
+
+ if Config.Debug then
+ print("Found animal entity: "..ped)
+ end
+
+ TaskWanderStandard(ped, 10.0, 10)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+ --ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ local diameter = 20
+
+ local randomAmountOfAnimals = math.random(1, 8)
+ local randomAnimalPedModel = ERS_GetRandomModel(Config.calloutAnimals)
+ for i = 1, randomAmountOfAnimals do
+ -- Build animals of the same type.
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local animalPedCoords = vector3(coords.x, coords.y, coords.z)
+ local animalPedHeading = math.random(360)
+ local animalPedNetId = ERS_CreatePed(randomAnimalPedModel, animalPedCoords, animalPedHeading)
+ local animalPed = NetworkGetEntityFromNetworkId(animalPedNetId)
+ table.insert(pedList, animalPedNetId)
+ end
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_animal_on_tracks.lua b/resources/night_ers/callouts/plugins/callout_animal_on_tracks.lua
new file mode 100644
index 000000000..86950f350
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_animal_on_tracks.lua
@@ -0,0 +1,119 @@
+Config.Callouts["animal_on_tracks"] = {
+
+ Enabled = true,
+ CalloutName = "Animal on the train tracks",
+ CalloutDescriptions = {
+ "Investigate reports of an animal on the train tracks; secure the area and ensure safety.",
+ "Alert: dispatch units to remove an animal from the train tracks; prevent potential accidents.",
+ "Units required: respond to reports of an animal on the train tracks and take necessary actions.",
+ "Notice: check reports of an animal obstructing the train tracks; implement safety measures.",
+ "Alert: respond promptly to reports of an animal on the train tracks; prioritize safety and clear the tracks.",
+ "Incident reported: look into reports of an animal on the train tracks to prevent disruptions.",
+ "Investigate reports of an animal on the train tracks; coordinate with relevant authorities for removal.",
+ "Situation alert: address reports of an animal obstructing the train tracks; ensure the area is cleared.",
+ "Alert: handle reports of an animal on the train tracks and follow protocols to ensure safety.",
+ "Response needed: investigate reports of an animal on the train tracks and take appropriate actions to remove it.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(153.18, -2083.33, 17.14),
+ [2] = vector3(272.54, -1867.12, 26.86),
+ [3] = vector3(664.85, -1103.13, 23.69),
+ [4] = vector3(669.08, -1097.25, 23.48),
+ [5] = vector3(669.67, -735.04, 24.08),
+ [6] = vector3(735.63, -524.24, 27.11),
+ [7] = vector3(738.73, -512.96, 27.39),
+ [8] = vector3(1431.49, -967.60, 61.45),
+ [9] = vector3(1573.22, -941.38, 70.74),
+ [10] = vector3(1757.88, -819.74, 88.22),
+ [11] = vector3(1826.75, -767.81, 94.47),
+ [12] = vector3(2079.20, -692.69, 96.97),
+ [13] = vector3(2237.53, -559.26, 96.02),
+ [14] = vector3(2645.90, 130.26, 93.94),
+ [15] = vector3(2672.17, 459.43, 94.66),
+ [16] = vector3(2163.94, 1410.07, 79.75),
+ [17] = vector3(1913.86, 2183.46, 61.62),
+ [18] = vector3(2476.13, 2765.11, 37.96),
+ [19] = vector3(2615.23, 2934.57, 39.95),
+ [20] = vector3(2854.46, 3427.33, 46.75),
+ [21] = vector3(2837.95, 3821.68, 44.12),
+ [22] = vector3(2064.51, 3656.00, 38.55),
+ [23] = vector3(1742.14, 3470.76, 38.84),
+ [24] = vector3(711.45, 3177.26, 42.10),
+ [25] = vector3(-85.88, 3497.44, 53.25),
+ [26] = vector3(-392.81, 3885.08, 76.91),
+ [27] = vector3(-505.23, 5186.76, 89.23),
+ [28] = vector3(-358.47, 5913.59, 45.39),
+ [29] = vector3(-180.77, 6101.54, 31.60),
+ [30] = vector3(99.54, 6310.35, 31.64),
+ [31] = vector3(465.13, 6437.98, 31.85),
+ [32] = vector3(877.99, 6437.00, 32.14),
+ [33] = vector3(1233.69, 6432.33, 31.81),
+ [34] = vector3(1666.08, 6345.36, 43.10),
+ [35] = vector3(2401.34, 5879.92, 60.57),
+ [36] = vector3(2623.79, 5468.85, 62.03),
+ [37] = vector3(2692.14, 5276.94, 62.17),
+ [38] = vector3(2894.65, 4847.27, 63.09),
+ [39] = vector3(3011.50, 4143.03, 58.34),
+ [40] = vector3(2957.92, 3709.76, 54.91),
+ [41] = vector3(2480.69, 2363.09, 36.98),
+ [42] = vector3(2610.93, 1603.51, 28.46),
+ [43] = vector3(669.48, -1056.83, 22.44),
+ [44] = vector3(769.45, -1525.64, 20.49),
+ [45] = vector3(537.58, -2617.92, 12.90),
+ [46] = vector3(217.48, -2524.09, 6.44),
+ [47] = vector3(217.23, -2199.28, 13.34),
+ [48] = vector3(68.30, -2589.99, 6.00),
+ [49] = vector3(221.95, -2728.21, 6.13),
+ [50] = vector3(217.77, -2624.48, 6.37),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ local pos = GetEntityCoords(ped)
+ local randomChance = math.random(100)
+ if randomChance < 50 then
+ SetEntityHealth(ped, 0)
+ else
+ TaskWanderInArea(ped, pos.x, pos.y, pos.z, 10.0, 10000, 10000)
+ end
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ local pedModel = ERS_GetRandomModel(Config.allAnimals)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_animal_rat_plague.lua b/resources/night_ers/callouts/plugins/callout_animal_rat_plague.lua
new file mode 100644
index 000000000..732bdcdcc
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_animal_rat_plague.lua
@@ -0,0 +1,86 @@
+Config.Callouts["animal_rat_plague"] = {
+
+ Enabled = true,
+ CalloutName = "Extreme rat plague",
+ CalloutDescriptions = {
+ "Emergency: respond to reports of an extreme rat plague; ensure the safety of residents and contain the infestation.",
+ "Urgent alert: dispatch pest control units to address a severe rat infestation; prevent the spread of disease and damage.",
+ "Critical response required: attend to reports of a rat plague; secure the area and implement extermination measures.",
+ "Notice: check reports of a rat infestation; take immediate action to control the population and protect public health.",
+ "Alert: respond promptly to reports of an extreme rat plague; prioritize the safety of the community and prevent further spread.",
+ "Incident reported: investigate severe rat infestation; coordinate with pest control services to manage the situation effectively.",
+ "Immediate action: address reports of a rat plague; use appropriate methods to eradicate the rats and ensure safety.",
+ "Situation alert: assist with controlling an extreme rat infestation; secure the area and implement necessary measures.",
+ "Emergency response: handle reports of a rat plague and follow protocols to contain and eliminate the infestation.",
+ "Response needed: investigate reports of a severe rat infestation urgently; take appropriate actions to protect public health and safety.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Animal Rescue.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(-156.5135, 1941.9556, 195.2362),
+ [2] = vector3(1986.7726, 3050.1509, 47.2151),
+ [3] = vector3(1714.2148, 3695.8870, 34.4959),
+ [4] = vector3(3.2913, -1739.9449, 29.3052),
+ [5] = vector3(-467.1143, -1707.0049, 18.8235),
+ [6] = vector3(-817.2072, -1332.6687, 5.1324),
+ [7] = vector3(-1004.5860, -1460.5331, 4.9887),
+ [8] = vector3(-1121.3344, -1982.2427, 13.1626),
+ [9] = vector3(-806.9633, -1097.7111, 10.6082),
+ [10] = vector3(506.8831, 3111.2585, 40.6679),
+ [11] = vector3(1960.8220, 3770.2551, 32.2001),
+ [12] = vector3(2504.1604, 4080.2524, 38.6310),
+ [13] = vector3(-345.4866, -1563.9071, 25.2083),
+ [14] = vector3(-211.5286, 6287.9878, 31.4894),
+ [15] = vector3(248.5705, 6474.3198, 30.7680),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ local coords = calloutDataClient.Coordinates
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ ClearPedTasks(ped)
+
+ TaskWanderInArea(ped, coords.x, coords.y, coords.z, 20.0, 5000, 10000)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 30000)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ local diameter = 20
+
+ local randomAmountOfAnimals = math.random(25, 50)
+ local randomAnimalPedModel = "a_c_rat"
+ for i = 1, randomAmountOfAnimals do
+ -- Build animals of the same type.
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local animalPedCoords = vector3(coords.x, coords.y, coords.z)
+ local animalPedHeading = math.random(360)
+ local animalPedNetId = ERS_CreatePed(randomAnimalPedModel, animalPedCoords, animalPedHeading)
+ local animalPed = NetworkGetEntityFromNetworkId(animalPedNetId)
+ table.insert(pedList, animalPedNetId)
+ end
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_animals_escaped.lua b/resources/night_ers/callouts/plugins/callout_animals_escaped.lua
new file mode 100644
index 000000000..d1424fee7
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_animals_escaped.lua
@@ -0,0 +1,91 @@
+Config.Callouts["animals_escaped"] = {
+
+ Enabled = true,
+ CalloutName = "Escaped farm animals",
+ CalloutDescriptions = {
+ "Emergency: respond to reports of Escaped farm animals; ensure the safety of people and animals in the area.",
+ "Urgent alert: dispatch units to corral Escaped farm animals; prevent them from causing accidents or damage.",
+ "Critical response required: attend to reports of Escaped farm animals; secure the area and prevent them from wandering further.",
+ "Notice: check reports of Escaped farm animals; implement measures to safely return them to their enclosure.",
+ "Alert: respond promptly to reports of Escaped farm animals; prioritize the safety of both the farm animals and the public.",
+ "Incident reported: investigate Escaped farm animals sightings; coordinate with local authorities and farmers to manage the situation.",
+ "Immediate action: address reports of Escaped farm animals; use appropriate methods to round them up and ensure their safety.",
+ "Situation alert: assist with corralling Escaped farm animals; ensure the area is safe and the farm animals are unharmed.",
+ "Emergency response: handle reports of Escaped farm animals and follow protocols to safely capture and return them.",
+ "Response needed: investigate reports of Escaped farm animals urgently; take appropriate actions to prevent harm and secure the animals.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Animal Rescue.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(-156.5135, 1941.9556, 195.2362),
+ [2] = vector3(1466.7488, 992.6075, 114.9633),
+ [3] = vector3(1499.7604, 1483.1517, 105.4204),
+ [4] = vector3(1517.8981, 1748.6394, 109.8674),
+ [5] = vector3(235.0015, 2621.3835, 46.2649),
+ [6] = vector3(2559.9636, 4217.8853, 41.0057),
+ [7] = vector3(2681.3750, 4837.1987, 33.4963),
+ [8] = vector3(2231.8330, 5172.8379, 59.2566),
+ [9] = vector3(-458.1834, 5884.9546, 32.9752),
+ [10] = vector3(1484.6155, 4508.0635, 52.6044),
+ [11] = vector3(2527.8472, 4688.5127, 33.6504),
+ [12] = vector3(2695.5269, 4217.3936, 43.5792),
+ [13] = vector3(641.7357, 1772.3513, 194.4283),
+ [14] = vector3(-62.1715, 1856.3737, 200.6837),
+ [15] = vector3(-2177.8003, -385.5692, 13.2969),
+ [16] = vector3(1981.4440, 4971.6411, 42.1647),
+ [17] = vector3(2244.5688, 5189.4077, 60.3518),
+ [18] = vector3(2838.7747, 4742.7949, 47.9336),
+ [19] = vector3(2986.2134, 4558.3813, 51.6006),
+ [20] = vector3(895.3198, 294.8879, 87.3205),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ local coords = calloutDataClient.Coordinates
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ ClearPedTasks(ped)
+ TaskWanderInArea(ped, coords.x, coords.y, coords.z, 20.0, 5000, 10000)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 30000)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ local diameter = 20
+
+ local randomAmountOfAnimals = math.random(1, 8)
+ local randomAnimalPedModel = ERS_GetRandomModel(Config.cattleAnimals)
+ for i = 1, randomAmountOfAnimals do
+ -- Build animals of the same type.
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local animalPedCoords = vector3(coords.x, coords.y, coords.z)
+ local animalPedHeading = math.random(360)
+ local animalPedNetId = ERS_CreatePed(randomAnimalPedModel, animalPedCoords, animalPedHeading)
+ local animalPed = NetworkGetEntityFromNetworkId(animalPedNetId)
+ table.insert(pedList, animalPedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_animals_under_attack.lua b/resources/night_ers/callouts/plugins/callout_animals_under_attack.lua
new file mode 100644
index 000000000..5a0b894e8
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_animals_under_attack.lua
@@ -0,0 +1,148 @@
+Config.Callouts["animals_under_attack"] = {
+
+ Enabled = true,
+ CalloutName = "Farm animals under attack by wild animals",
+ CalloutDescriptions = {
+ "Emergency: respond immediately to reports of Farm animals being attacked by wild animals; ensure the safety of the herd.",
+ "Urgent alert: dispatch units to the location where Farm animals are under attack; protect the livestock and manage the threat.",
+ "Critical response: attend to an incident involving Farm animals being attacked; prioritize safeguarding the animals and mitigating the danger.",
+ "Immediate action: investigate reports of wild animals attacking Farm animals; secure the area and protect the herd.",
+ "Alert: respond to a situation where Farm animals are being attacked by animals; take necessary measures to ensure their safety.",
+ "Incident reported: handle reports of livestock under attack; coordinate with local authorities and animal control to manage the situation.",
+ "Situation alert: assist in protecting Farm animals from an animal attack; ensure the safety of the livestock and contain the threat.",
+ "Emergency response: deal with an incident of Farm animals being attacked by wild animals; follow protocols to protect the herd and secure the area.",
+ "Immediate intervention: respond to reports of Farm animals under attack; prioritize the safety of the animals and take necessary actions.",
+ "Response needed: investigate an incident where Farm animals are being attacked by animals; take appropriate measures to protect the livestock and manage the situation.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(-156.5135, 1941.9556, 195.2362),
+ [2] = vector3(1466.7488, 992.6075, 114.9633),
+ [3] = vector3(1499.7604, 1483.1517, 105.4204),
+ [4] = vector3(1517.8981, 1748.6394, 109.8674),
+ [5] = vector3(235.0015, 2621.3835, 46.2649),
+ [6] = vector3(2559.9636, 4217.8853, 41.0057),
+ [7] = vector3(2681.3750, 4837.1987, 33.4963),
+ [8] = vector3(2231.8330, 5172.8379, 59.2566),
+ [9] = vector3(-458.1834, 5884.9546, 32.9752),
+ [10] = vector3(1484.6155, 4508.0635, 52.6044),
+ [11] = vector3(2527.8472, 4688.5127, 33.6504),
+ [12] = vector3(2695.5269, 4217.3936, 43.5792),
+ [13] = vector3(641.7357, 1772.3513, 194.4283),
+ [14] = vector3(-62.1715, 1856.3737, 200.6837),
+ [15] = vector3(-2177.8003, -385.5692, 13.2969),
+ [16] = vector3(1981.4440, 4971.6411, 42.1647),
+ [17] = vector3(2244.5688, 5189.4077, 60.3518),
+ [18] = vector3(2838.7747, 4742.7949, 47.9336),
+ [19] = vector3(2986.2134, 4558.3813, 51.6006),
+ [20] = vector3(895.3198, 294.8879, 87.3205),
+ [21] = vector3(2254.5916, 4926.0264, 40.9015),
+ },
+ PedChanceToFleeFromPlayer = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 10, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 100, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 15000, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 30000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "attack", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_knife",
+ "weapon_bat",
+ "weapon_hammer",
+ "weapon_wrench",
+ "weapon_pistol",
+ "weapon_microsmg",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ local wildAnimal
+ local cattlePedsList = {}
+ local coords = calloutDataClient.Coordinates
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ if index == 1 then
+ wildAnimal = ped
+
+ local function StartAnimalAttackLoop(wildAnimal, cattlePedsList)
+ Citizen.CreateThread(function()
+ ERS_RequestNetControlForEntity(wildAnimal)
+ while not IsPedDeadOrDying(wildAnimal, true) and #cattlePedsList > 0 do
+ for i = #cattlePedsList, 1, -1 do
+ if IsPedDeadOrDying(NetToPed(cattlePedsList[i]), true) then
+ table.remove(cattlePedsList, i)
+ end
+ end
+
+ if #cattlePedsList > 0 then
+ local targetPed = NetToPed(cattlePedsList[math.random(#cattlePedsList)])
+ TaskCombatPed(wildAnimal, targetPed, 0, 16)
+ end
+
+ Citizen.Wait(2500)
+ end
+
+ if IsPedDeadOrDying(wildAnimal, true) then
+ if Config.Debug then
+ print("The wild animal is dead or deleted...")
+ end
+ else
+ if Config.Debug then
+ print("All cattle animals are dead or deleted, stopped loop and tasking to attack player.")
+ end
+ TaskCombatPed(wildAnimal, plyPed, 0, 16)
+ end
+ end)
+ end
+
+ Citizen.SetTimeout(1000, function()
+ StartAnimalAttackLoop(wildAnimal, cattlePedsList)
+ end)
+ else
+ table.insert(cattlePedsList, pedNetId)
+ TaskWanderInArea(ped, coords.x, coords.y, coords.z, 40.0, 5000, 10000)
+ end
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ local diameter = 20
+
+ -- Build wild animal
+ local randomWildAnimalPedModel = ERS_GetRandomModel(Config.wildAnimals)
+ local wildAnimalPedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local wildAnimalPedHeading = math.random(360)
+ local wildAnimalPedNetId = ERS_CreatePed(randomWildAnimalPedModel, wildAnimalPedCoords, wildAnimalPedHeading)
+ local wildAnimalPed = NetworkGetEntityFromNetworkId(wildAnimalPedNetId)
+ table.insert(pedList, wildAnimalPedNetId)
+
+ -- Build cattle animals of the same type.
+ local randomAmountOfAnimals = math.random(1, 8)
+ local randomAnimalPedModel = ERS_GetRandomModel(Config.cattleAnimals)
+ for i = 1, randomAmountOfAnimals do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local animalPedCoords = vector3(coords.x, coords.y, coords.z)
+ local animalPedHeading = math.random(360)
+ local animalPedNetId = ERS_CreatePed(randomAnimalPedModel, animalPedCoords, animalPedHeading)
+ local animalPed = NetworkGetEntityFromNetworkId(animalPedNetId)
+ table.insert(pedList, animalPedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_anpr_alert.lua b/resources/night_ers/callouts/plugins/callout_anpr_alert.lua
new file mode 100644
index 000000000..068d9d2c9
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_anpr_alert.lua
@@ -0,0 +1,139 @@
+Config.Callouts["anpr_alert"] = {
+
+ Enabled = true,
+ CalloutName = "ANPR Alert",
+ CalloutDescriptions = {
+ "An ANPR alert has been reported, requiring immediate police response.",
+ "Emergency assistance is needed to manage and address an ANPR alert.",
+ "Reports indicate an ANPR alert, necessitating urgent police intervention.",
+ "An ANPR alert has been reported, and backup is needed to maintain order and ensure safety.",
+ "Emergency services have been requested to address an ANPR alert.",
+ "A request for assistance has been made by officers responding to an ANPR alert.",
+ "Additional units are required to support officers managing an ANPR alert.",
+ "Emergency backup is required to assist officers in handling an ANPR alert.",
+ "A call for assistance has been issued by officers dealing with an ANPR alert.",
+ "Reports suggest a situation where immediate police assistance is crucial to manage and address an ANPR alert.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(252.45, -991.78, 29.15),
+ [2] = vector3(442.52, -544.01, 28.28),
+ [3] = vector3(676.55, -219.48, 44.30),
+ [4] = vector3(365.68, -108.07, 66.25),
+ [5] = vector3(-817.47, -126.34, 37.52),
+ [6] = vector3(-309.89, -15.74, 48.35),
+ [7] = vector3(-2354.87, -285.41, 14.13),
+ [8] = vector3(-1000.02, -602.68, 18.39),
+ [9] = vector3(199.27, 6574.46, 31.80),
+ [10] = vector3(1391.85, 6500.05, 19.76),
+ [11] = vector3(1723.97, 6387.80, 34.03),
+ [12] = vector3(2553.27, 5194.82, 50.78),
+ [13] = vector3(-136.89, 6224.72, 31.34),
+ [14] = vector3(2600.13, 5119.80, 44.78),
+ [15] = vector3(2446.42, 4009.14, 37.06),
+ [16] = vector3(1831.28, 3258.06, 44.10),
+ [17] = vector3(1977.05, 3081.72, 47.07),
+ [18] = vector3(2558.44, 2702.69, 41.77),
+ [19] = vector3(2854.36, 2819.08, 53.09),
+ [20] = vector3(254.91, 2848.28, 43.59),
+ [21] = vector3(85.82, 3595.74, 39.75),
+ [22] = vector3(-821.40, 5761.81, 5.54),
+ [23] = vector3(-300.05, 6057.30, 31.35),
+ [24] = vector3(1244.97, -383.18, 69.11),
+ [25] = vector3(-862.40, -656.93, 27.53),
+ [26] = vector3(-866.07, -939.28, 15.85),
+ [27] = vector3(-188.73, -891.99, 29.34),
+ [28] = vector3(-707.01, -1611.40, 22.79),
+ [29] = vector3(738.92, -2466.61, 20.22),
+ [30] = vector3(1240.60, -2054.46, 44.35),
+ [31] = vector3(1969.42, -921.52, 79.16),
+ [32] = vector3(2454.87, 977.85, 86.22),
+ [33] = vector3(2207.62, 2999.60, 45.54),
+ [34] = vector3(1696.63, 3510.35, 36.47),
+ [35] = vector3(226.92, 2973.63, 42.71),
+ [36] = vector3(-1254.90, 2537.62, 18.12),
+ [37] = vector3(-1785.69, 4736.50, 57.01),
+ [38] = vector3(-303.03, 6231.18, 31.45),
+ [39] = vector3(-54.87, 6311.50, 31.33),
+ [40] = vector3(1940.65, 6254.72, 43.52),
+ },
+ PedChanceToFleeFromPlayer = 75, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 10, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 10000, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 30000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "flee", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_poolcue",
+ "weapon_golfclub",
+ "weapon_crowbar",
+ "weapon_bat",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ local vehicle
+
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ vehicle = veh
+ ERS_RequestNetControlForEntity(vehicle)
+ else
+ if Config.Debug then
+ print("Could not find vehicle entity.")
+ end
+ end
+ Wait(500)
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ if not IsPedInAnyVehicle(ped, true) then
+ TaskEnterVehicle(ped, vehicle, 5000, -1, 2.0, 1, 0)
+ Wait(2000)
+ ERS_SetPedToFleeFromPlayer(ped)
+ else
+ ERS_SetPedToFleeFromPlayer(ped)
+ end
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(vehicleList, 15000)
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+ -- Build vehicle
+ local vehModel = ERS_GetRandomModel(Config.randomVehicles)
+ local vehType = "automobile"
+ local vehCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build ped
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z + 3.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(ped, vehicle, -1)
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_armed_robbery.lua b/resources/night_ers/callouts/plugins/callout_armed_robbery.lua
new file mode 100644
index 000000000..c1ae972f4
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_armed_robbery.lua
@@ -0,0 +1,120 @@
+Config.Callouts["armed_robbery"] = {
+
+ Enabled = true,
+ CalloutName = "Reports of an Armed Burglary",
+ CalloutDescriptions = {
+ "Respond to a report of an armed burglary; secure the area and apprehend the suspect.",
+ "Alert: armed burglary in progress; deploy units to the location and ensure public safety.",
+ "Units needed: report of a burglary involving a weapon; focus on securing the scene and detaining the suspect.",
+ "Notice: armed burglary reported; act promptly to control the situation and prevent harm.",
+ "Alert: report of an armed burglary; intervention needed to apprehend the suspect and ensure safety.",
+ "Incident reported: armed burglary; take action to secure the premises and protect bystanders.",
+ "Respond to a situation involving an armed burglary; prioritize public safety and coordinate with law enforcement.",
+ "Situation alert: armed burglary in progress; secure the area and detain the suspect.",
+ "Alert: report of a burglary with a weapon; respond swiftly to address the situation and ensure safety.",
+ "Response needed: armed burglary; secure the area, apprehend the suspect, and restore order.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Ambulance.",
+ policeRequired = true,
+ ambulanceRequired = true,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(-462.7426, -1789.1514, 20.7425),
+ [2] = vector3(-1349.7474, -978.6703, 8.3487),
+ [3] = vector3(-1298.3502, -793.9792, 17.5649),
+ [4] = vector3(-79.0676, -420.0754, 36.9070),
+ [5] = vector3(269.7047, -454.0890, 45.1490),
+ [6] = vector3(384.5264, -330.8739, 46.8860),
+ [7] = vector3(-259.4929, -1608.9178, 31.8465),
+ [8] = vector3(-179.2647, -1740.8966, 30.2026),
+ [9] = vector3(19.5304, -1796.9473, 26.8921),
+ [10] = vector3(182.0713, -1936.4159, 21.0075),
+ [11] = vector3(483.6955, -1976.0867, 24.5434),
+ [12] = vector3(558.0399, -1791.2672, 29.1919),
+ [13] = vector3(791.4307, -2481.0999, 20.9120),
+ [14] = vector3(365.3052, -2552.9727, 6.2214),
+ [15] = vector3(-236.2226, -2470.8672, 6.0014),
+ [16] = vector3(-607.5613, -2315.1016, 13.8226),
+ [17] = vector3(-586.1891, -1164.0364, 22.1743),
+ [18] = vector3(-707.7452, -923.6995, 19.0100),
+ [19] = vector3(-710.3022, -866.9073, 23.3419),
+ [20] = vector3(371.6894, 30.0890, 92.0128),
+ },
+ PedChanceToFleeFromPlayer = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 20, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 100, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 10000, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 15000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "attack", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_pistol",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+
+ local plyGroupHash = GetPedRelationshipGroupHash(plyPed)
+ local retval, suspectGroupHash = AddRelationshipGroup("SUSPECT_GROUP_HASH")
+ local victim
+ local suspectPedList = {}
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ if index == 1 then
+ victim = ped
+ ERS_ClearPedTasksAndBlockEvents(ped)
+ Wait(100)
+ TaskHandsUp(ped, -1, 0, -1, true)
+ else
+ SetPedRelationshipGroupHash(ped, suspectGroupHash)
+ SetEntityCanBeDamagedByRelationshipGroup(ped, false, suspectGroupHash)
+ SetRelationshipBetweenGroups(5, suspectGroupHash, plyGroupHash)
+ SetRelationshipBetweenGroups(5, plyGroupHash, suspectGroupHash)
+
+ ERS_ClearPedTasksAndBlockEvents(ped)
+ ERS_SpawnConfiguredWeaponForPed(ped, calloutDataClient)
+ Wait(100)
+ TaskAimGunAtEntity(ped, victim, -1, false)
+ table.insert(suspectPedList, pedNetId)
+ end
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(suspectPedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, suspectPedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ local diameter = 15
+
+ -- Build victim
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z+1.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+
+ -- Build peds
+ local randomAmountOfSuspects = math.random(4)
+ for i = 1, randomAmountOfSuspects do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(coords.x, coords.y, coords.z+1.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_arson.lua b/resources/night_ers/callouts/plugins/callout_arson.lua
new file mode 100644
index 000000000..4871120aa
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_arson.lua
@@ -0,0 +1,120 @@
+Config.Callouts["arson"] = {
+
+ Enabled = true,
+ CalloutName = "Reports of arson",
+ CalloutDescriptions = {
+ "Incidents of suspected arson have been reported, necessitating immediate attention and intervention from law enforcement and fire services.",
+ "Emergency services are urgently needed to address incidents of suspected arson, ensuring the safety of the community and property.",
+ "Reports indicate multiple instances of suspected arson, requiring swift action from authorities to prevent further damage and danger.",
+ "Suspected cases of arson have been identified, prompting the mobilization of additional resources to investigate and mitigate the situation.",
+ "Emergency services have been alerted to incidents of suspected arson, necessitating coordinated efforts to identify and apprehend perpetrators.",
+ "Authorities have requested assistance in addressing suspected cases of arson, emphasizing the need for vigilance and cooperation from the public.",
+ "Additional units are required to support law enforcement and fire personnel in responding to incidents of suspected arson.",
+ "Emergency backup is necessary to assist authorities in managing and containing incidents of suspected arson, ensuring public safety.",
+ "A call for assistance has been issued by responders dealing with suspected cases of arson, highlighting the urgency of the situation.",
+ "Reports suggest a situation where immediate intervention is crucial to manage and address incidents of suspected arson, safeguarding lives and property.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Fire",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = true,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(-1656.60, -150.07, 58.33),
+ [2] = vector3(-964.03, -184.61, 37.80),
+ [3] = vector3(-628.39, -234.97, 38.05),
+ [4] = vector3(-586.74, -293.28, 35.07),
+ [5] = vector3(-42.90, -419.81, 39.64),
+ [6] = vector3(23.17, -434.85, 45.50),
+ [7] = vector3(371.64, -363.52, 46.75),
+ [8] = vector3(802.94, -828.72, 27.32),
+ [9] = vector3(827.70, -1072.18, 29.00),
+ [10] = vector3(1001.18, -1538.05, 30.83),
+ [11] = vector3(954.11, -1679.79, 30.05),
+ [12] = vector3(39.68, -2684.49, 6.17),
+ [13] = vector3(-420.11, -2790.76, 6.01),
+ [14] = vector3(-1142.01, -1969.37, 13.16),
+ [15] = vector3(-1175.60, -1800.86, 3.90),
+ [16] = vector3(-1998.75, 553.35, 112.60),
+ [17] = vector3(-748.51, 5593.33, 41.65),
+ [18] = vector3(-377.63, 6075.06, 31.50),
+ [19] = vector3(-159.16, 6290.67, 31.50),
+ [20] = vector3(-69.88, 6250.36, 31.08),
+ [21] = vector3(1919.24, 4831.56, 46.02),
+ [22] = vector3(2542.07, 4648.52, 34.07),
+ [23] = vector3(2508.43, 4212.37, 40.15),
+ [24] = vector3(1882.91, 3806.63, 32.76),
+ [25] = vector3(1710.45, 3689.69, 34.82),
+ -- Add up to 40
+ },
+ PedChanceToFleeFromPlayer = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 10, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 60, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 5000, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 10000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "flee", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_knife",
+ "weapon_hammer",
+ "weapon_crowbar",
+ "weapon_bottle",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ Wait(100)
+ ERS_SetPedToFleeFromPlayer(ped)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+
+ local diameter = 2
+
+ if UsingSmartFires then
+ -- Full version
+ local fireSize = Config.RandomSmallFireOrSmokeSize[math.random(#Config.RandomSmallFireOrSmokeSize)]
+ local fireType = Config.NormalFireTypes[math.random(#Config.NormalFireTypes)]
+ local fireId = exports['SmartFires']:CreateFire(vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z-0.5), fireSize, fireType)
+ DebugPrint("Created fire with ID: "..fireId)
+ table.insert(fireList, fireId)
+ else
+ -- Lite version
+ local fireSize = Config.RandomSmallFireOrSmokeSize[math.random(#Config.RandomSmallFireOrSmokeSize)]
+ local fireType = "normal"
+ local fireId = exports['SmartFiresLite']:CreateFire(vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z-0.5), fireSize, fireType)
+ DebugPrint("Created fire with SmartFiresLite with ID: "..fireId)
+ table.insert(fireList, fireId)
+ end
+
+ -- Build suspect peds
+ local randomAmountOfSuspects = math.random(3)
+ for i = 1, randomAmountOfSuspects do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+
+ local suspectPedModel = ERS_GetRandomModel(Config.randomPeds)
+ local suspectPedCoords = vector3(coords.x, coords.y, coords.z)
+ local suspectPedHeading = math.random(360)
+ local suspectPedNetId = ERS_CreatePed(suspectPedModel, suspectPedCoords, suspectPedHeading)
+ local suspectPed = NetworkGetEntityFromNetworkId(suspectPedNetId)
+ table.insert(pedList, suspectPedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_atm_robbery.lua b/resources/night_ers/callouts/plugins/callout_atm_robbery.lua
new file mode 100644
index 000000000..80c819ef8
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_atm_robbery.lua
@@ -0,0 +1,105 @@
+Config.Callouts["atm_robbery"] = {
+
+ Enabled = true,
+ CalloutName = "ATM Robbery",
+ CalloutDescriptions = {
+ "An ATM robbery is in progress, requiring immediate police response.",
+ "Emergency assistance is needed to apprehend suspects involved in an ATM robbery.",
+ "Reports indicate an ongoing ATM robbery, necessitating urgent police intervention.",
+ "An ATM robbery has occurred, and backup is needed to secure the area and apprehend suspects.",
+ "Emergency services have been dispatched to address an ATM robbery situation.",
+ "A request for assistance has been made by officers responding to an ATM robbery.",
+ "Additional units are required to support officers responding to an ATM robbery.",
+ "Emergency backup is required to assist officers in apprehending suspects involved in an ATM robbery.",
+ "A call for assistance has been issued by officers dealing with an ATM robbery.",
+ "Reports suggest an ATM robbery situation where immediate police assistance is crucial to prevent further harm.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(89.57, 2.16, 68.32),
+ [2] = vector3(-526.49, -1222.79, 18.45),
+ [3] = vector3(-2072.48, -317.19, 13.31),
+ [4] = vector3(-821.56, -1081.90, 11.13),
+ [5] = vector3(1686.74, 4815.88, 42.00),
+ [6] = vector3(-386.89, 6045.78, 31.50),
+ [7] = vector3(1171.52, 2702.44, 38.17),
+ [8] = vector3(1968.11, 3743.56, 32.34),
+ [9] = vector3(2558.85, 351.04, 108.62),
+ [10] = vector3(1153.75, -326.80, 69.20),
+ [11] = vector3(-56.91, -1752.17, 29.42),
+ [12] = vector3(-3241.02, 997.58, 12.55),
+ [13] = vector3(-1827.18, 784.90, 138.30),
+ [14] = vector3(-1091.54, 2708.55, 18.94),
+ [15] = vector3(112.45, -819.25, 31.33),
+ [16] = vector3(-256.17, -716.03, 33.52),
+ [17] = vector3(174.22, 6637.88, 31.57),
+ [18] = vector3(236.82, 217.53, 106.28),
+ [19] = vector3(264.62, 212.09, 106.28),
+ [20] = vector3(285.68, 143.90, 104.17),
+ [21] = vector3(356.78, 173.14, 103.06),
+ [22] = vector3(-867.09, -185.77, 37.68),
+ [23] = vector3(-1205.37, -324.53, 37.85),
+ [24] = vector3(-1316.03, -834.95, 16.96),
+ [25] = vector3(-712.91, -819.26, 23.72),
+ [26] = vector3(-618.66, -706.90, 30.05),
+ [27] = vector3(296.23, -894.14, 29.22),
+ [28] = vector3(155.44, 6642.41, 31.61),
+ [29] = vector3(-717.36, -915.76, 19.21),
+ [30] = vector3(1735.46, 6410.89, 35.03),
+ [31] = vector3(-660.72, -853.97, 24.48),
+ [32] = vector3(540.2889, 2671.1113, 42.1565),
+ [33] = vector3(-95.5408, 6457.1987, 31.4610),
+ [34] = vector3(-97.4098, 6455.3574, 31.4676),
+ [35] = vector3(-594.5259, -1161.6271, 22.3242),
+ },
+ PedChanceToFleeFromPlayer = 75, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 10, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 5000, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 15000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "flee", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_knife",
+ "weapon_bat",
+ "weapon_hammer",
+ "weapon_wrench",
+ "weapon_pistol",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ ClearPedTasks(ped)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ ERS_SetPedToFleeFromPlayer(ped)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+ -- Build suspect
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_bicycle_accident.lua b/resources/night_ers/callouts/plugins/callout_bicycle_accident.lua
new file mode 100644
index 000000000..430ccbbcb
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_bicycle_accident.lua
@@ -0,0 +1,113 @@
+Config.Callouts["bicycle_accident"] = {
+
+ Enabled = true,
+ CalloutName = "Accident with a bicycle",
+ CalloutDescriptions = {
+ "Caller reports a bicycle accident with injuries. Immediate assistance is needed.",
+ "Emergency call received: cyclist hit by a car, urgent medical help required.",
+ "Emergency! Bicycle accident reported, potential serious injuries involved.",
+ "Bicycle collision reported, first responders needed on the scene ASAP.",
+ "Help requested for a bike accident, victim appears to be unconscious.",
+ "Urgent: bicycle accident with possible head injuries, send medical support.",
+ "Witness reports cyclist down after crash, immediate emergency services needed.",
+ "Serious bike accident reported, ambulance and police required immediately.",
+ "Caller indicates a severe bicycle accident, emergency personnel needed.",
+ "Report of a bicycle accident with major injuries, urgent intervention required.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Ambulance.",
+ policeRequired = true,
+ ambulanceRequired = true,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(1877.74, 1275.50, 153.27), -- 7360 Postal
+ [2] = vector3(1302.03, -284.86, 89.41), -- 7347 Postal
+ [3] = vector3(1576.03, -2259.40, 93.49), -- 9375 Postal
+ [4] = vector3(-1262.42, -1512.35, 4.32), -- 8210 Postal
+ [5] = vector3(-1612.53, -1041.78, 13.15), -- 8002 Postal
+ [6] = vector3(-948.18, -218.03, 37.98), -- 7179 Postal
+ [7] = vector3(-100.81, -68.12, 57.73), -- 7137 Postal
+ [8] = vector3(423.21, -215.01, 59.39), -- 7107 Postal
+ [9] = vector3(459.24, -735.82, 27.36), -- 8044 Postal
+ [10] = vector3(-173.99, -1719.37, 30.74), -- 9086 Postal
+ [11] = vector3(-263.66, -1564.95, 33.48), -- 9081 Postal
+ [12] = vector3(-261.75, -776.90, 32.43), -- 8065 Postal
+ [13] = vector3(112.90, 796.34, 204.43), -- 6072 Postal
+ [14] = vector3(664.86, 1350.20, 330.22), -- 5025 Postal
+ [15] = vector3(807.24, 1844.48, 124.05), -- 5023 Postal
+ [16] = vector3(-1022.65, 2214.24, 48.69), -- 4004 Postal
+ [17] = vector3(1635.72, 3683.47, 34.26), -- 3020 Postal
+ [18] = vector3(2066.44, 3944.21, 32.15), -- 3011 Postal
+ [19] = vector3(2023.18, 5325.93, 138.52), -- 2001 Postal
+ [20] = vector3(-605.14, 4527.68, 84.05), -- 1095 Postal
+ [21] = vector3(2663.66, 3928.24, 42.34),
+ [22] = vector3(2700.45, 3083.12, 42.76),
+ [23] = vector3(2632.89, 2946.15, 40.42),
+ [24] = vector3(2851.14, 3440.11, 50.92),
+ [25] = vector3(2453.31, 3854.30, 38.94),
+ [26] = vector3(2271.27, 3757.01, 38.42),
+ [27] = vector3(1820.61, 3507.98, 38.32),
+ [28] = vector3(1693.80, 3461.85, 37.02),
+ [29] = vector3(1184.28, 3267.64, 39.20),
+ [30] = vector3(-3040.17, 3745.06, 70.20),
+ [31] = vector3(-4050.71, 5335.75, 83.14),
+ [32] = vector3(-4043.33, 5599.94, 68.38),
+ [33] = vector3(2874.65, 4868.66, 62.60),
+ [34] = vector3(3000.50, 4099.68, 57.18),
+ [35] = vector3(-92.55, 6150.44, 31.80),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ ERS_ApplyBloodToPed(ped)
+ SetEntityHealth(ped, 0)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ -- Build vehicle
+ local vehModel = ERS_GetRandomModel(Config.randomBicycles)
+ local vehType = "bike"
+ local vehCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build ped
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(ped, vehicle, -1)
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_boat_engine_fail.lua b/resources/night_ers/callouts/plugins/callout_boat_engine_fail.lua
new file mode 100644
index 000000000..e3a41c1eb
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_boat_engine_fail.lua
@@ -0,0 +1,103 @@
+-- (Boat Rescue: https://store.nights-software.com/package/5317442) --
+Config.Callouts["boat_engine_fail"] = {
+
+ Enabled = true,
+ CalloutName = "Engine failure (boat) on open sea",
+ CalloutDescriptions = {
+ "Emergency: respond to reports of a boat with engine failure on the open sea; ensure the safety of all passengers.",
+ "Urgent alert: dispatch rescue units to assist a boat experiencing engine failure; provide immediate assistance.",
+ "Critical response required: attend to a boat with engine failure; perform necessary rescue operations.",
+ "Notice: check reports of a boat's engine failure; ensure quick intervention and safety measures.",
+ "Alert: respond promptly to reports of a boat stranded due to engine failure; prioritize passenger safety.",
+ "Incident reported: investigate engine failure on a boat to prevent hazardous situations; coordinate with maritime authorities.",
+ "Immediate action: address reports of a boat's engine failure; implement rescue operations and ensure safety.",
+ "Situation alert: assist a boat with engine failure; secure the area and provide necessary support.",
+ "Emergency response: handle reports of a boat's engine failure and follow rescue protocols to ensure safety.",
+ "Response needed: investigate engine failure reports urgently; take appropriate actions to rescue and protect passengers.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Fire, Boat Rescue Tow service.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = true,
+ towRequired = true,
+ },
+ CalloutLocations = {
+ [1] = vector3(-1828.5118, -1539.2891, 1.1647),
+ [2] = vector3(-1536.9678, -1863.2750, -0.0101),
+ [3] = vector3(-2189.4231, -1072.1609, 0.1496),
+ [4] = vector3(-3929.3704, 70.6058, -0.2150),
+ [5] = vector3(-5044.5020, 1350.0837, 0.0183),
+ [6] = vector3(-2429.7378, 4771.9009, 1.4950),
+ [7] = vector3(-298.7473, 8313.3652, 0.7064),
+ [8] = vector3(5283.5317, 6131.5645, -0.5446),
+ [9] = vector3(4567.7446, 1925.2971, -0.8195),
+ [10] = vector3(3883.2461, -1492.2983, 0.7835),
+ [11] = vector3(3072.8665, -4442.4038, -0.4688),
+ [12] = vector3(1674.0967, -4297.9985, -0.1545),
+ [13] = vector3(-1717.0173, -3889.8708, 0.1580),
+ [14] = vector3(-1988.5629, -2549.8674, 0.7593),
+ [15] = vector3(-2661.4233, -3227.2847, -0.4570),
+ [16] = vector3(-4903.6616, -2509.2512, 1.0533),
+ [17] = vector3(-4419.8789, -1269.2566, 1.3760),
+ [18] = vector3(-4626.2852, 1312.8241, -0.3191),
+ [19] = vector3(-2859.7668, -1289.2007, -0.4757),
+ [20] = vector3(-1515.1837, -5266.1289, -0.8206),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ ERS_RequestNetControlForEntity(veh)
+ ERS_SetRandomDamageToVehicle(veh)
+ SetVehicleEngineOn(veh, false, true, false)
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ -- Let them stay in the passenger seat.
+ end
+ end
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+
+ -- Build vehicle
+ local vehModel = ERS_GetRandomModel(Config.randomBoats)
+ local vehType = "boat"
+ local vehCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build boat captain
+ local seatIndex = 0
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z+3.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(ped, vehicle, seatIndex)
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_boat_fire.lua b/resources/night_ers/callouts/plugins/callout_boat_fire.lua
new file mode 100644
index 000000000..b426842a2
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_boat_fire.lua
@@ -0,0 +1,145 @@
+Config.Callouts["boat_fire"] = {
+
+ Enabled = true,
+ CalloutName = "Boat on fire",
+ CalloutDescriptions = {
+ "Emergency responders are required to extinguish flames engulfing a boat.",
+ "Authorities report a boat ablaze, demanding immediate intervention to ensure safety.",
+ "A boat fire has been reported, necessitating urgent action to prevent further damage.",
+ "Critical situation with a boat on fire; additional units are needed for support.",
+ "Immediate response needed to tackle a boat engulfed in flames.",
+ "A boat is burning, posing a severe threat; reinforcements are necessary to contain the fire.",
+ "Emergency crews are requesting backup to assist in managing a boat fire and prevent its spread.",
+ "An urgent call for help has been issued to handle a boat engulfed in flames and ensure safety.",
+ "Responders are on the scene of a boat fire and need extra support to control the blaze.",
+ "A serious emergency involving a boat on fire demands swift action to prevent escalation.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Ambulance, Fire.",
+ policeRequired = true,
+ ambulanceRequired = true,
+ fireRequired = true,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(-2029.22, -797.05, 2.16),
+ [2] = vector3(-2661.27, -236.46, 2.16),
+ [3] = vector3(-3174.36, 665.70, 2.16),
+ [4] = vector3(-3239.07, 1421.02, 2.16),
+ [5] = vector3(-3118.33, 1943.30, 2.16),
+ [6] = vector3(-2517.58, 2573.30, 2.16),
+ [7] = vector3(-2987.53, 3180.48, 2.16),
+ [8] = vector3(-2656.73, 3659.40, 2.16),
+ [9] = vector3(-1798.92, 4985.75, 2.16),
+ [10] = vector3(-1568.89, 5229.72, 2.16),
+ [11] = vector3(-968.35, 5672.23, 2.16),
+ [12] = vector3(-310.43, 6615.29, 2.16),
+ [13] = vector3(197.87, 7120.72, 2.16),
+ [14] = vector3(1255.58, 6652.24, 2.16),
+ [15] = vector3(2518.04, 6642.32, 2.16),
+ [16] = vector3(3332.51, 6162.08, 2.16),
+ [17] = vector3(3402.76, 5224.96, 2.16),
+ [18] = vector3(3862.89, 4493.04, 2.16),
+ [19] = vector3(3801.36, 3823.51, 2.16),
+ [20] = vector3(3418.12, 2693.48, 2.16),
+ [21] = vector3(3067.49, 1866.37, 2.16),
+ [22] = vector3(2957.35, 801.10, 2.16),
+ [23] = vector3(2900.93, 198.23, 2.16),
+ [24] = vector3(2863.76, -619.72, 2.16),
+ [25] = vector3(2536.89, -1505.16, 2.16),
+ [26] = vector3(2204.72, -2297.75, 2.16),
+ [27] = vector3(1842.65, -2711.85, 2.16),
+ [28] = vector3(1497.10, -2793.84, 2.16),
+ [29] = vector3(797.41, -2807.87, 2.16),
+ [30] = vector3(524.35, -3208.54, 2.16),
+ [31] = vector3(417.24, -2760.60, 2.16),
+ [32] = vector3(145.56, -2691.64, 2.16),
+ [33] = vector3(-275.30, -2742.84, 2.16),
+ [34] = vector3(-485.02, -2321.13, 2.16),
+ [35] = vector3(-822.42, -1458.82, 2.16),
+ [36] = vector3(-983.20, -1376.05, 2.16),
+ [37] = vector3(-1010.13, -1060.06, 2.16),
+ [38] = vector3(-1606.03, -1271.05, 2.16),
+ [39] = vector3(-1848.64, -1829.78, 2.16),
+ [40] = vector3(-1821.09, -2573.49, 2.16),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ ERS_RequestNetControlForEntity(veh)
+ local pos = GetEntityCoords(veh, false)
+ ERS_SetRandomDamageToVehicle(veh)
+ SetVehicleBodyHealth(veh, 0)
+ SetVehicleEngineHealth(veh, 0)
+ StartEntityFire(veh) -- Unsure if this native actually works...
+ --AddExplosion(pos.x, pos.y, pos.z-2.0, 0, 1.0, true, false, 1.0) -- Optionally...
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ SetEntityHealth(ped, 0)
+ StartEntityFire(ped)
+ ERS_ApplyBloodToPed(ped)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(vehicleList, 15000)
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+
+ -- Build boat
+ local vehModel = ERS_GetRandomModel(Config.randomBoats)
+ local vehType = "boat"
+ local vehCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build victim
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(ped, vehicle, -1)
+ table.insert(pedList, pedNetId)
+
+ -- Build passengers
+ for seatIndex = 0, 1 do -- seats boats
+ if GetPedInVehicleSeat(vehicle, seatIndex) == 0 then
+ local passengerPedModel = ERS_GetRandomModel(Config.randomPeds)
+ local passengerPedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local passengerPedHeading = math.random(360)
+ local passengerPedNetId = ERS_CreatePed(passengerPedModel, passengerPedCoords, passengerPedHeading)
+ local passengerPed = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(passengerPed, vehicle, seatIndex)
+ table.insert(pedList, passengerPedNetId)
+ end
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_boat_migrants.lua b/resources/night_ers/callouts/plugins/callout_boat_migrants.lua
new file mode 100644
index 000000000..cd6955603
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_boat_migrants.lua
@@ -0,0 +1,115 @@
+Config.Callouts["boat_migrants"] = {
+
+ Enabled = true,
+ CalloutName = "Reports of migrants arriving on a boat",
+ CalloutDescriptions = {
+ "Investigate reports of migrants arriving on a boat; secure the area and ensure their safety.",
+ "Alert: dispatch units to respond to reports of migrants arriving on a boat; provide immediate assistance.",
+ "Units required: respond to reports of a boat carrying migrants and take necessary actions to assist them.",
+ "Notice: check reports of migrants arriving on a boat; implement measures to ensure their wellbeing.",
+ "Alert: respond promptly to reports of migrants arriving on a boat; prioritize their safety and care.",
+ "Incident reported: look into reports of migrants arriving on a boat to provide necessary aid and support.",
+ "Investigate reports of a boat carrying migrants; coordinate with relevant authorities to address the situation.",
+ "Situation alert: address reports of migrants arriving on a boat; ensure the area is secured and help is provided.",
+ "Alert: handle reports of migrants arriving on a boat and follow protocols to ensure their safety and support.",
+ "Response needed: investigate reports of migrants arriving on a boat and take appropriate actions to assist and protect them.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(-1417.2120, -1615.8606, 0.1448),
+ [2] = vector3(-1809.3936, -973.8002, 1.9747),
+ [3] = vector3(-2076.4451, -611.0533, 1.3401),
+ [4] = vector3(-3030.3972, -0.8509, 1.7006),
+ [5] = vector3(-3169.9976, 289.5727, 2.1437),
+ [6] = vector3(-3265.2388, 895.5994, -0.4368),
+ [7] = vector3(-3125.7136, 1656.5962, 0.4893),
+ [8] = vector3(-2685.5750, 2533.6912, 0.7223),
+ [9] = vector3(-2393.0715, 2630.3701, -0.0339),
+ [10] = vector3(-1868.3955, 2566.3022, 0.1976),
+ [11] = vector3(-1549.2698, 2626.0557, 1.5337),
+ [12] = vector3(-2553.6880, 3923.9187, 1.6076),
+ [13] = vector3(-2093.0620, 4599.1460, 1.1754),
+ [14] = vector3(-1394.5308, 5285.9351, 0.8501),
+ [15] = vector3(-885.7209, 5840.6069, 0.8044),
+ [16] = vector3(6.6508, 7059.5547, -0.6106),
+ [17] = vector3(3395.8420, 5637.5762, 0.9500),
+ [18] = vector3(2977.9421, 1821.2184, 1.2231),
+ [19] = vector3(2940.1265, 311.0411, 0.7346),
+ [20] = vector3(1601.8865, -2747.1536, 0.9043),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ if not IsPedInAnyBoat(ped) then
+ ERS_SetMovementAnimClipSetToPed(ped, "move_m@injured")
+ TaskWanderStandard(ped, 10.0, 10)
+ else
+ TaskReactAndFleePed(ped, plyPed)
+ end
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 30000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+
+ local diameter = 20
+
+ -- Build vehicle
+ local vehModel = "dinghy"
+ local vehType = "boat"
+ local vehCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build boat captain
+ local seatIndex = -1
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z+3.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(ped, vehicle, seatIndex)
+ table.insert(pedList, pedNetId)
+
+ -- Build migrant peds
+ local randomAmountOfPeds = math.random(2,10)
+ for i = 0, randomAmountOfPeds do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(coords.x, coords.y, coords.z + 1.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_brandishing.lua b/resources/night_ers/callouts/plugins/callout_brandishing.lua
new file mode 100644
index 000000000..870f52ca7
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_brandishing.lua
@@ -0,0 +1,168 @@
+Config.Callouts["brandishing"] = {
+
+ Enabled = true,
+ CalloutName = "Person brandishing an offensive weapon",
+ CalloutDescriptions = {
+ "Caller reports someone brandishing a weapon in public. Immediate police intervention needed.",
+ "Emergency call: individual seen waving a weapon, urgent police response required.",
+ "Emergency! Person with a weapon threatening people, police needed ASAP.",
+ "Person identified with a weapon, additional officers requested on scene immediately.",
+ "Help needed: individual brandishing a weapon, posing danger to the public.",
+ "Urgent: person with a weapon seen in a crowded area, send police support now.",
+ "Witness reports individual brandishing a weapon, immediate police backup required.",
+ "Serious incident: person with a weapon threatening others, urgent police response.",
+ "Caller indicates person waving a weapon around, emergency police intervention required.",
+ "Report of a person brandishing a weapon, immediate and heavy police presence needed.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(312.02, 173.49, 103.73), -- Vinewood Blvd, Downtown Vinewood
+ [2] = vector3(-1358.83, -616.33, 28.53), -- Red Desert Ave, Del Perro
+ [3] = vector3(-1634.62, -1046.74, 13.15), -- Red Desert Ave, Del Perro Beach
+ [4] = vector3(-670.87, -1726.81, 25.18), -- La Puerta Fwy, La Puerta
+ [5] = vector3(39.09, -1823.58, 24.51), -- Grove St, Davis
+ [6] = vector3(525.56, -1762.27, 28.49), -- Jamestown St, Rancho
+ [7] = vector3(1347.26, -1548.74, 53.67), -- Fudge Ln, El Burro Heights
+ [8] = vector3(904.59, -1059.49, 32.83), -- Supply St, La Mesa
+ [9] = vector3(1127.62, -647.69, 56.73), -- West Mirror Drive, Mirror Park
+ [10] = vector3(597.18, 772.05, 202.79), -- Marlow Dr, Vinewood Hills
+ [11] = vector3(2504.24, 4099.16, 38.38), -- East Joshua Rd, Grapeseed
+ [12] = vector3(1564.05, 3589.36, 35.36), -- Algonquin Blvd, Sandy Shores
+ [13] = vector3(642.97, 2735.41, 41.88), -- Route 68, Harmony
+ [14] = vector3(-1131.19, 2696.14, 18.80), -- Route 68, Great Chaparrel
+ [15] = vector3(-2169.96, 4279.30, 48.98), -- Great Ocean Hwy, North Chumash
+ [16] = vector3(-1435.55, 4312.66, 2.30), -- Cassidy Trail, Cassidy Creek
+ [17] = vector3(-102.90, 6369.40, 31.48), -- Paleto Blvd, Paleto Bay
+ [18] = vector3(-1702.35, 6438.63, 32.71), -- Senora Fwy, Mount chillad
+ [19] = vector3(-55.37, 6545.97, 31.49),
+ [20] = vector3(-121.01, 6455.89, 31.43),
+ [21] = vector3(-141.32, 6353.57, 31.49),
+ [22] = vector3(-198.16, 6220.51, 31.49),
+ [23] = vector3(-341.15, 6146.56, 31.49),
+ [24] = vector3(-362.37, 6071.18, 31.50),
+ [25] = vector3(-253.74, 6053.39, 32.18),
+ [26] = vector3(-352.09, 6080.49, 31.43),
+ [27] = vector3(-293.39, 6123.37, 31.51),
+ [28] = vector3(-152.95, 6194.23, 31.28),
+ [29] = vector3(97.98, 6379.73, 31.23),
+ [30] = vector3(-115.51, 6571.54, 29.52),
+ [31] = vector3(280.69, 5.25, 79.06),
+ [32] = vector3(86.86, -212.80, 54.49),
+ [33] = vector3(-53.24, -190.05, 52.16),
+ [34] = vector3(144.43, -1068.91, 29.19),
+ [35] = vector3(-24.62, -1018.18, 28.87),
+ [36] = vector3(-223.76, -1164.73, 23.00),
+ [37] = vector3(-21.12, -1845.02, 25.19),
+ [38] = vector3(253.31, -1956.31, 22.95),
+ [39] = vector3(905.81, -1735.93, 30.56),
+ [40] = vector3(1199.30, -1371.50, 35.23),
+ -- Add more
+ },
+ PedChanceToFleeFromPlayer = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 10, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 90, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 10000, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 15000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "flee", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_poolcue",
+ "weapon_golfclub",
+ "weapon_crowbar",
+ "weapon_bat",
+ "weapon_pistol",
+ "weapon_combatpistol",
+ "weapon_appistol",
+ "weapon_stungun",
+ "weapon_microsmg",
+ "weapon_smg",
+ "weapon_assaultsmg",
+ "weapon_assaultrifle",
+ "weapon_carbinerifle",
+ "weapon_advancedrifle",
+ "weapon_mg",
+ "weapon_combatmg",
+ "weapon_pumpshotgun",
+ "weapon_sawnoffshotgun",
+ "weapon_assaultshotgun",
+ "weapon_bullpupshotgun",
+ "weapon_stungun",
+ "weapon_flaregun",
+ "weapon_nightstick",
+ "weapon_knife",
+ "weapon_hammer",
+ "weapon_bat",
+ "weapon_golfclub",
+ "weapon_crowbar",
+ "weapon_bottle",
+ "weapon_dagger",
+ "weapon_hatchet",
+ "weapon_knuckle",
+ "weapon_machete",
+ "weapon_switchblade",
+ "weapon_wrench",
+ "weapon_battleaxe",
+ "weapon_poolcue",
+ "weapon_stone_hatchet",
+ "weapon_pistol50",
+ "weapon_smg_mk2",
+ "weapon_combatpdw",
+ "weapon_revolver",
+ "weapon_revolver_mk2",
+ "weapon_doubleaction",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+
+ ERS_SpawnConfiguredWeaponForPed(ped, calloutDataClient)
+
+ local chance = 50
+ if chance > math.random(100) then
+ SetEntityHealth(ped, 200)
+ SetPedArmour(ped, 200)
+ ERS_SetPedToAttackPlayer(ped)
+ else
+ local scenario = ERS_SelectMentalHealthPersonScenario()
+ TaskStartScenarioInPlace(ped, scenario, 0, true)
+ end
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ local diameter = 10
+
+ -- Build suspect peds
+ local randomAmountOfSuspects = math.random(3)
+ for i = 1, randomAmountOfSuspects do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+
+ local suspectPedModel = ERS_GetRandomModel(Config.randomPeds)
+ local suspectPedCoords = vector3(coords.x, coords.y, coords.z)
+ local suspectPedHeading = math.random(360)
+ local suspectPedNetId = ERS_CreatePed(suspectPedModel, suspectPedCoords, suspectPedHeading)
+ local suspectPed = NetworkGetEntityFromNetworkId(suspectPedNetId)
+ table.insert(pedList, suspectPedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_brandishing_transit.lua b/resources/night_ers/callouts/plugins/callout_brandishing_transit.lua
new file mode 100644
index 000000000..a90990ceb
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_brandishing_transit.lua
@@ -0,0 +1,93 @@
+Config.Callouts["brandishing_transit"] = {
+
+ Enabled = true,
+ CalloutName = "Person brandishing a weapon in public transportation",
+ CalloutDescriptions = {
+ "Emergency: respond immediately to reports of a person wielding a weapon on public transport; ensure the safety of passengers.",
+ "Urgent alert: dispatch units to the scene where a weapon has been reported; neutralize the threat and protect civilians.",
+ "Critical response: attend to an incident involving a weapon on public transportation; prioritize disarming the suspect.",
+ "Immediate action: investigate reports of an armed individual on a bus or train; secure the area and ensure public safety.",
+ "Alert: respond to a situation involving a weapon on public transport; take necessary measures to de-escalate and protect passengers.",
+ "Incident reported: handle reports of a weapon-wielding person on public transportation; coordinate with relevant authorities to manage the threat.",
+ "Situation alert: assist in disarming an individual brandishing a weapon on public transport; ensure the safety of all onboard.",
+ "Emergency response: deal with a person brandishing a weapon on a bus or train; follow protocols to secure the scene and protect lives.",
+ "Immediate intervention: respond to reports of an armed suspect on public transportation; prioritize de-escalation and passenger safety.",
+ "Response needed: investigate an incident involving a weapon on public transport; take appropriate actions to neutralize the threat and safeguard the public.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(-531.02, -1280.64, 26.05),
+ [2] = vector3(-823.61, -111.83, 27.96),
+ [3] = vector3(-286.70, -332.71, 18.29),
+ [4] = vector3(-1368.22, -527.83, 30.33),
+ [5] = vector3(-491.25, -719.88, 23.90),
+ [6] = vector3(-212.88, -1028.95, 30.14),
+ [7] = vector3(131.76, -1739.58, 30.11),
+ [8] = vector3(-1038.86, -2740.55, 13.35),
+ [9] = vector3(2663.66, 3928.24, 42.34),
+ [10] = vector3(2700.45, 3083.12, 42.76),
+ [11] = vector3(2632.89, 2946.15, 40.42),
+ [12] = vector3(2851.14, 3440.11, 50.92),
+ [13] = vector3(2453.31, 3854.30, 38.94),
+ [14] = vector3(2271.27, 3757.01, 38.42),
+ [15] = vector3(1820.61, 3507.98, 38.32),
+ [16] = vector3(1693.80, 3461.85, 37.02),
+ [17] = vector3(1184.28, 3267.64, 39.20),
+ [18] = vector3(-3040.17, 3745.06, 70.20),
+ [19] = vector3(-4050.71, 5335.75, 83.14),
+ [20] = vector3(-4043.33, 5599.94, 68.38),
+ [21] = vector3(2874.65, 4868.66, 62.60),
+ [22] = vector3(3000.50, 4099.68, 57.18),
+ [23] = vector3(-92.55, 6150.44, 31.80)
+ },
+ PedChanceToFleeFromPlayer = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 10, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 100, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 15000, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 30000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "attack", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_knife",
+ "weapon_bat",
+ "weapon_hammer",
+ "weapon_wrench",
+ "weapon_pistol",
+ "weapon_microsmg",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ ERS_SpawnConfiguredWeaponForPed(ped, calloutDataClient)
+ TaskWanderStandard(ped, 10.0, 10)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ -- Build suspect
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_capsized_bus.lua b/resources/night_ers/callouts/plugins/callout_capsized_bus.lua
new file mode 100644
index 000000000..3e135fe96
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_capsized_bus.lua
@@ -0,0 +1,160 @@
+Config.Callouts["capsized_bus"] = {
+
+ Enabled = true,
+ CalloutName = "Capsized passenger bus",
+ CalloutDescriptions = {
+ "Attend to an emergency where a passenger bus has tipped over; secure the vicinity immediately.",
+ "Alert: a passenger bus has overturned; dispatch units to handle the situation and assist those involved.",
+ "Immediate action required for a bus that has flipped; focus on safety and coordinate the recovery efforts.",
+ "Critical emergency: a passenger bus has capsized; promptly provide assistance and regulate traffic.",
+ "Warning: overturned passenger bus detected; send resources to stabilize the bus and mitigate risks.",
+ "Passenger bus accident: bus overturned; urgent help needed to assist passengers and control the scene.",
+ "Manage a situation involving an overturned bus; prioritize safety and collaborate with recovery personnel.",
+ "Respond to a passenger bus rollover; ensure the area is safe and assist with vehicle retrieval.",
+ "Urgent response required: passenger bus has flipped over; manage the scene to prevent further complications.",
+ "Critical alert: capsized bus; immediate intervention needed to aid recovery efforts and ensure safety.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Ambulance, Tow.",
+ policeRequired = true,
+ ambulanceRequired = true,
+ fireRequired = false,
+ towRequired = true,
+ },
+ CalloutLocations = {
+ [1] = vector3(-1072.4072, -1289.6188, 5.9038),
+ [2] = vector3(2537.8545, 1776.8958, 24.4214),
+ [3] = vector3(2324.2249, 1188.5785, 65.1486),
+ [4] = vector3(2381.6067, 893.6487, 111.0333),
+ [5] = vector3(1784.8096, 433.7240, 172.6540),
+ [6] = vector3(1134.1582, 750.4255, 146.8967),
+ [7] = vector3(541.8043, 1033.2881, 219.0286),
+ [8] = vector3(506.1575, 1312.2441, 284.1587),
+ [9] = vector3(159.6427, 1480.7738, 239.4097),
+ [10] = vector3(-152.2372, 1556.9006, 307.3201),
+ [11] = vector3(-363.4066, 1451.2218, 288.9186),
+ [12] = vector3(-501.1940, 1201.6180, 323.9875),
+ [13] = vector3(-766.0131, 1636.6566, 205.8681),
+ [14] = vector3(-1065.2036, 2193.1619, 88.9680),
+ [15] = vector3(-932.9423, -2720.0906, 13.8070),
+ [16] = vector3(-862.6539, -2496.4246, 13.8369),
+ [17] = vector3(-693.9046, -1483.1071, 10.9885),
+ [18] = vector3(-417.6440, -1573.9742, 25.7328),
+ [19] = vector3(-277.1655, -1420.7927, 31.2840),
+ [20] = vector3(142.5911, -1160.8898, 36.5171),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+
+ for index, objNetId in pairs(objectList) do
+ local obj = NetToObj(objNetId)
+ if DoesEntityExist(obj) then
+ ERS_RequestNetControlForEntity(obj)
+ PlaceObjectOnGroundProperly(obj)
+ end
+ end
+
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ ERS_RequestNetControlForEntity(veh)
+ SetEntityRotation(veh, 0, -90.01, 0, 2, true)
+ ERS_SetRandomDamageToVehicle(veh)
+ SetVehicleBodyHealth(veh, 0)
+ SetVehicleEngineHealth(veh, 0)
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ ERS_ApplyBloodToPed(ped)
+ if index == 1 then
+ SetEntityHealth(ped, 0)
+ else
+ local chanceToSurvive = math.random(0, 1)
+ if chanceToSurvive > 0 then
+ Citizen.Wait(2500)
+ local scenario = ERS_SelectRandomWoundedPersonScenario()
+ TaskStartScenarioInPlace(ped, scenario, 0, true)
+ else
+ SetEntityHealth(ped, 0)
+ end
+ end
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(vehicleList, 15000)
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+ ERS_CreateTemporaryBlipForEntities(objectList, 15000)
+
+ -- ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+
+ local diameter = 20
+
+ -- Build vehicle
+ local vehModel = ERS_GetRandomModel(Config.randomBuses)
+ local vehType = "automobile"
+ local vehCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build ped
+ local pedModel = "a_m_y_busicas_01"
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(ped, vehicle, -1)
+ table.insert(pedList, pedNetId)
+
+ -- Build objects
+ local randomAmountOfObjects = math.random(8)
+ for i = 1, randomAmountOfObjects do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+
+ local objModel = ERS_GetRandomModel(Config.RandomBagObjects)
+ local objCoords = vector3(coords.x, coords.y, coords.z)
+ local objHeading = math.random(360)
+ local objNetId = ERS_CreateObject(objModel, objCoords, objHeading)
+ if objNetId then
+ local obj = NetworkGetEntityFromNetworkId(objNetId)
+ table.insert(objectList, objNetId)
+ else
+ DebugPrint("^1ERROR ^7Could not create object: "..objModel)
+ end
+ end
+
+ local randomAmountOfPassengers = math.random(20)
+ -- Build passengers
+ for i = 1, randomAmountOfPassengers do -- seats
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local passengerPedModel = ERS_GetRandomModel(Config.randomPeds)
+ local passengerPedCoords = vector3(coords.x, coords.y, coords.z)
+ local passengerPedHeading = math.random(360)
+ local passengerPedNetId = ERS_CreatePed(passengerPedModel, passengerPedCoords, passengerPedHeading)
+ local passengerPed = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, passengerPedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_capsized_vehicle.lua b/resources/night_ers/callouts/plugins/callout_capsized_vehicle.lua
new file mode 100644
index 000000000..a3eb8dc67
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_capsized_vehicle.lua
@@ -0,0 +1,144 @@
+Config.Callouts["capsized_vehicle"] = {
+
+ Enabled = true,
+ CalloutName = "Capsized heavy vehicle",
+ CalloutDescriptions = {
+ "Respond to an incident involving a capsized heavy vehicle; immediate action required to secure the area.",
+ "Emergency call: a heavy vehicle has overturned; dispatch units to assist and manage the situation.",
+ "Urgent response needed for an overturned heavy vehicle; ensure safety and coordinate recovery operations.",
+ "Critical incident: heavy vehicle capsized; respond swiftly to provide assistance and control traffic.",
+ "Alert: capsized heavy vehicle reported; deploy resources to stabilize the vehicle and prevent hazards.",
+ "Heavy vehicle overturned; immediate intervention required to assist the driver and manage the scene.",
+ "Handle an emergency involving a capsized heavy vehicle; prioritize safety and coordinate with recovery teams.",
+ "Emergency response: heavy vehicle has capsized; ensure the area is secure and assist with vehicle recovery.",
+ "Urgent callout: heavy vehicle capsized; respond quickly to manage the scene and prevent further incidents.",
+ "Critical situation: overturned heavy vehicle; immediate response needed to assist with recovery and ensure safety.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Ambulance, Tow.",
+ policeRequired = true,
+ ambulanceRequired = true,
+ fireRequired = false,
+ towRequired = true,
+ },
+ CalloutLocations = {
+ [1] = vector3(816.4828, -679.9893, 41.9445),
+ [2] = vector3(-1384.9823, -570.5046, 30.2422),
+ [3] = vector3(-891.2759, -2575.0945, 13.8305),
+ [4] = vector3(-556.4310, -2203.9673, 6.0330),
+ [5] = vector3(-225.3320, -2168.1885, 13.9838),
+ [6] = vector3(259.5528, -2228.2637, 6.9489),
+ [7] = vector3(582.2025, -2092.6011, 14.7787),
+ [8] = vector3(754.3458, -2073.8147, 29.2641),
+ [9] = vector3(1039.4996, -1884.3270, 29.0919),
+ [10] = vector3(1407.4314, -1749.7058, 65.9185),
+ [11] = vector3(1013.7170, -1435.1545, 35.6374),
+ [12] = vector3(858.6818, -1072.3356, 39.1867),
+ [13] = vector3(737.6019, -602.1349, 36.2894),
+ [14] = vector3(666.0109, -247.3925, 43.8801),
+ [15] = vector3(150.5485, 85.2522, 84.6272),
+ [16] = vector3(-537.0259, 254.9205, 83.0729),
+ [17] = vector3(-778.9194, 564.0609, 125.2098),
+ [18] = vector3(-1052.4857, 1178.5732, 216.5182),
+ [19] = vector3(-1431.6735, 1912.0579, 73.7801),
+ [20] = vector3(-1305.9124, 2536.4126, 18.9174),
+ [21] = vector3(-2350.6760, 3425.3782, 28.8471),
+ [22] = vector3(-2314.3596, 4168.1719, 38.7900),
+ [23] = vector3(-1917.4707, 4439.6279, 40.5788),
+ [24] = vector3(-1560.4316, 4733.1812, 50.4538),
+ [25] = vector3(-777.4516, 5262.8662, 89.9326),
+ [26] = vector3(170.4841, 4417.7505, 75.2792),
+ [27] = vector3(849.2275, 4230.1768, 50.8234),
+ [28] = vector3(1735.9677, 4574.9873, 39.7539),
+ [29] = vector3(2448.9150, 4597.9678, 36.9199),
+ [30] = vector3(2713.1785, 3906.6541, 43.5291),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+
+ for index, objNetId in pairs(objectList) do
+ local obj = NetToObj(objNetId)
+ if DoesEntityExist(obj) then
+ ERS_RequestNetControlForEntity(obj)
+ PlaceObjectOnGroundProperly(obj)
+ end
+ end
+
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ ERS_RequestNetControlForEntity(veh)
+ SetEntityRotation(veh, 0, -90.01, 0, 2, true)
+ ERS_SetRandomDamageToVehicle(veh)
+ SetVehicleBodyHealth(veh, 0)
+ SetVehicleEngineHealth(veh, 0)
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ SetEntityHealth(ped, 0)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(vehicleList, 15000)
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+ ERS_CreateTemporaryBlipForEntities(objectList, 15000)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+
+ local diameter = 20
+
+ -- Build vehicle
+ local vehModel = ERS_GetRandomModel(Config.randomHeavyVehicles)
+ local vehType = "automobile"
+ local vehCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build ped
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(ped, vehicle, -1)
+ table.insert(pedList, pedNetId)
+
+ -- Build objects
+ local randomAmountOfObjects = math.random(5,12)
+ for i = 1, randomAmountOfObjects do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+
+ local objModel = ERS_GetRandomModel(Config.RandomHeavyVehicleObjects)
+ local objCoords = vector3(coords.x, coords.y, coords.z)
+ local objHeading = math.random(360)
+ local objNetId = ERS_CreateObject(objModel, objCoords, objHeading)
+ if objNetId then
+ local obj = NetworkGetEntityFromNetworkId(objNetId)
+ table.insert(objectList, objNetId)
+ else
+ DebugPrint("^1ERROR ^7Could not create object: "..objModel)
+ end
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_climate_protest.lua b/resources/night_ers/callouts/plugins/callout_climate_protest.lua
new file mode 100644
index 000000000..21244a0df
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_climate_protest.lua
@@ -0,0 +1,79 @@
+Config.Callouts["climate_protest"] = {
+
+ Enabled = true,
+ CalloutName = "Climate change protest",
+ CalloutDescriptions = {
+ "A climate change protest has been reported, requiring immediate police response.",
+ "Emergency assistance is needed to manage and address a climate change protest.",
+ "Reports indicate a climate change protest, necessitating urgent police intervention.",
+ "A climate change protest has been reported, and backup is needed to maintain order and ensure safety.",
+ "Emergency services have been requested to address a climate change protest.",
+ "A request for assistance has been made by officers responding to a climate change protest.",
+ "Additional units are required to support officers managing a climate change protest.",
+ "Emergency backup is required to assist officers in handling a climate change protest.",
+ "A call for assistance has been issued by officers dealing with a climate change protest.",
+ "Reports suggest a situation where immediate police assistance is crucial to manage and address a climate change protest.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(197.27, -935.14, 30.69), -- Legion Square
+ [2] = vector3(-921.31, -724.34, 19.91), -- Park Downtown
+ [3] = vector3(292.90, 179.39, 104.24), -- Vinewood Commerce Street
+ [4] = vector3(885.13, -43.29, 78.76), -- Casino Parkinglot
+ [5] = vector3(1867.51, 2586.37, 45.67), -- Bolingbroke PI
+ [6] = vector3(1718.59, 3766.62, 34.26), -- Sandy City Hall
+ [7] = vector3(-278.57, 6054.73, 31.5152), -- Paleto Parkinglot
+ [8] = vector3(-617.1911, -539.0128, 25.1484), -- Del Perro Fwy
+ },
+ PedChanceToFleeFromPlayer = 10, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 10, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 1000, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 5000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_poolcue",
+ "weapon_golfclub",
+ "weapon_crowbar",
+ "weapon_bat",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ local scenario = ERS_SelectRandomProtesterScenario()
+ TaskStartScenarioInPlace(ped, scenario, 0, true)
+ end
+ end
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ -- Build protesters
+ local suspects = math.random(20)
+ local diameter = 25
+ for i = 1, suspects do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(coords.x, coords.y, coords.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_construction_incident.lua b/resources/night_ers/callouts/plugins/callout_construction_incident.lua
new file mode 100644
index 000000000..ac783429d
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_construction_incident.lua
@@ -0,0 +1,125 @@
+Config.Callouts["construction_incident"] = {
+
+ Enabled = true,
+ CalloutName = "Construction site incident",
+ CalloutDescriptions = {
+ "Emergency: respond immediately to a construction site incident; ensure the safety of all workers and secure the area.",
+ "Urgent alert: dispatch units to the scene of a construction accident; provide immediate assistance and medical support.",
+ "Critical response: attend to a construction site emergency; prioritize rescuing injured individuals and managing the situation.",
+ "Immediate action: investigate reports of an incident at a construction site; take necessary measures to stabilize the area.",
+ "Alert: respond promptly to a construction site accident; ensure the safety of workers and address any hazards.",
+ "Incident reported: handle a construction site emergency; coordinate with relevant authorities to manage the situation effectively.",
+ "Situation alert: assist in responding to a construction accident; secure the site and provide necessary support to emergency services.",
+ "Emergency response: deal with an incident at a construction site; follow safety protocols to protect workers and contain the area.",
+ "Immediate intervention: respond to reports of a construction site accident; prioritize the safety of all individuals and mitigate risks.",
+ "Response needed: investigate an incident at a construction site urgently; take appropriate actions to ensure safety and prevent further harm.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, ambulance.",
+ policeRequired = true,
+ ambulanceRequired = true,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(44.8051, -332.5600, 43.6708),
+ [2] = vector3(-459.1893, -1055.8129, 29.1281),
+ [3] = vector3(-452.7524, -1011.5723, 22.4238),
+ [4] = vector3(-448.3265, -944.9791, 29.3928),
+ [5] = vector3(-451.2589, -893.2188, 47.9797),
+ [6] = vector3(-466.1203, -896.0312, 43.3733),
+ [7] = vector3(-471.4753, -923.3779, 43.7068),
+ [8] = vector3(-503.3624, -974.1968, 23.5567),
+ [9] = vector3(34.9236, -429.9841, 44.6752),
+ [10] = vector3(43.1620, -405.4659, 45.5525),
+ [11] = vector3(58.3875, -397.1533, 42.2667),
+ [12] = vector3(34.9210, -350.7701, 42.4556),
+ [13] = vector3(35.5786, -395.5785, 55.2863),
+ [14] = vector3(40.7332, -407.7932, 73.9167),
+ [15] = vector3(127.8936, -349.3301, 42.9060),
+ [16] = vector3(46.5655, -459.1139, 42.9473),
+ [17] = vector3(85.5404, -435.6951, 35.9977),
+ [18] = vector3(83.5077, -420.9894, 37.5525),
+ [19] = vector3(19.7530, -362.7425, 39.3051),
+ [20] = vector3(135.2936, -386.8390, 43.3106),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+
+ local victim
+
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ ERS_RequestNetControlForEntity(veh)
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ if index == 1 then
+ victim = ped
+ SetEntityHealth(victim, 0)
+ else
+ -- Bystanders
+ TaskTurnPedToFaceEntity(ped, victim, 2000)
+ Wait(2000)
+ local scenario = ERS_SelectRandomBystanderScenario()
+ TaskStartScenarioInPlace(ped, scenario, 0, true)
+ end
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+
+ -- Build victim
+ local pedModel = ERS_GetRandomModel(Config.randomConstructionSitePeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+
+ -- Build heavy vehicle
+ local vehModel = ERS_GetRandomModel(Config.randomHeavyVehicles)
+ local vehType = "automobile"
+ local vehCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z+2.0)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build bystanders
+ local randomAmountOfBystanders = math.random(4)
+ for i = 1, randomAmountOfBystanders do
+ local diameter = 20
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+
+ local bystanderPedModel = ERS_GetRandomModel(Config.randomConstructionSitePeds)
+ local bystanderPedCoords = vector3(coords.x, coords.y, coords.z+1.0)
+ local bystanderPedHeading = math.random(360)
+ local bystanderPedNetId = ERS_CreatePed(bystanderPedModel, bystanderPedCoords, bystanderPedHeading)
+ local bystanderPed = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, bystanderPedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_domestic_dispute.lua b/resources/night_ers/callouts/plugins/callout_domestic_dispute.lua
new file mode 100644
index 000000000..dd1b63488
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_domestic_dispute.lua
@@ -0,0 +1,144 @@
+Config.Callouts["domestic_dispute"] = {
+ Enabled = true,
+ CalloutName = "Domestic Dispute",
+ CalloutDescriptions = {
+ "A distress call has been received reporting a domestic disturbance. Further details pending.",
+ "Reports indicate a heated argument escalating into a domestic violence incident. Additional information needed.",
+ "Emergency services have been alerted to a volatile domestic situation. Assess the scene for safety.",
+ "Neighbors have reported a disturbance suggesting a domestic violence incident. Prioritize response for intervention.",
+ "A concerned citizen has reported sounds of a domestic altercation nearby. Prompt investigation required.",
+ "A frantic call has been received indicating a potential domestic violence situation. Coordinate response efforts.",
+ "Witnesses have observed suspicious behavior indicative of a domestic dispute. Assess potential risks before proceeding.",
+ "Emergency services have been dispatched to a residence following reports of a domestic incident. Approach with caution.",
+ "Reports from concerned citizens suggest a domestic disturbance requiring immediate attention. Prioritize response for intervention.",
+ "Emergency services have been notified of a potential domestic violence situation. Coordinate with authorities for investigation.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(-218.79, -1671.06, 34.46), -- Davis
+ [2] = vector3(204.20, -1706.48, 29.30), -- Davis
+ [3] = vector3(72.79, -1971.16, 20.81), -- Grv Str. Davis
+ [4] = vector3(-11.37, -1433.59, 31.12), -- Forum Dr. Strawberry
+ [5] = vector3(-684.74, 311.88, 83.08), -- Terras, West Vinewood
+ [6] = vector3(-802.68, -173.13, 72.84), -- Rockford Hills, Michaels House
+ [7] = vector3(-1269.22, 502.25, 97.11), -- Montana House, Vinewood Hills
+ [8] = vector3(-37.97, 2865.60, 59.18), -- Grand Senora Desert, Route 68 Appr.
+ [9] = vector3(1393.42, 3603.21, 38.94), -- Algonquin Blvd, Sandy Shores
+ [10] = vector3(1651.51, 3805.67, 34.98), -- Cholla Springs Ave, Sandy Shores
+ [11] = vector3(1717.82, 4676.85, 43.66), -- Grapeseed Main street
+ [12] = vector3(-221.87, 6457.18, 31.20), -- Procopio Dr. Paleto Bay
+ [13] = vector3(152.46, -67.65, 75.59),
+ [14] = vector3(123.23, -124.85, 54.83),
+ [15] = vector3(-83.17, -399.36, 37.02),
+ [16] = vector3(-580.11, -450.97, 34.25),
+ [17] = vector3(-585.01, -778.63, 25.02),
+ [18] = vector3(-768.56, -1026.56, 14.13),
+ [19] = vector3(-962.78, -1336.89, 5.86),
+ [20] = vector3(-1091.03, -1598.80, 4.54),
+ [21] = vector3(-1099.65, -1491.92, 4.94),
+ [22] = vector3(-1340.53, -1085.94, 6.93),
+ [23] = vector3(-1694.72, -159.24, 57.53),
+ [24] = vector3(-1475.38, -69.34, 54.64),
+ [25] = vector3(870.97, -602.44, 58.22),
+ [26] = vector3(1250.40, -698.28, 64.77),
+ [27] = vector3(1056.11, -2434.86, 30.30),
+ [28] = vector3(-1099.53, -1636.62, 4.41),
+ [29] = vector3(-1268.18, -1300.48, 8.29),
+ [30] = vector3(-1100.09, -1009.88, 2.15),
+ [31] = vector3(-773.32, -1262.42, 5.70),
+ [32] = vector3(-704.79, -1035.82, 16.11),
+ [33] = vector3(-551.47, -810.51, 30.75),
+ [34] = vector3(266.59, -637.23, 42.02),
+ [35] = vector3(44.35, -902.36, 29.98),
+ [36] = vector3(-281.74, -800.32, 33.00),
+ [37] = vector3(-780.90, -193.10, 37.28),
+ [38] = vector3(-876.24, 42.46, 48.76),
+ [39] = vector3(-951.93, 192.81, 67.39),
+ [40] = vector3(-1009.26, 455.48, 79.36),
+ },
+ PedChanceToFleeFromPlayer = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 20, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 10000,-- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 20000,-- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "flee", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_knife",
+ "weapon_bat",
+ "weapon_hammer",
+ "weapon_wrench",
+ "weapon_pistol",
+ },
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+ local ped1
+ local ped2
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ if ped1 == nil then
+ ped1 = ped
+ end
+ if ped1 ~= nil and ped1 ~= ped then
+ ped2 = ped
+ end
+ ClearPedTasks(ped)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ Wait(100)
+ ERS_SpawnConfiguredWeaponForPed(ped, calloutDataClient)
+ end
+ end
+
+ -- Intial actions
+ local randomPercentageChance = math.random(1, 100)
+ if randomPercentageChance > 0 and randomPercentageChance < 50 then
+ TaskCombatPed(ped1, ped2, 0, 16)
+ TaskCombatPed(ped2, ped1, 0, 16)
+
+ if Config.Debug then
+ print("Attacking eachother.")
+ end
+
+ elseif randomPercentageChance >= 50 and randomPercentageChance <= 75 then
+ TaskCombatPed(ped1, ped2, 0, 16)
+ TaskReactAndFleePed(ped2, ped1)
+
+ if Config.Debug then
+ print("Attacking and other fleeing.")
+ end
+
+ elseif randomPercentageChance > 75 and randomPercentageChance <= 100 then
+ TaskCombatPed(ped1, plyPed, 0, 16)
+ TaskReactAndFleePed(ped2, ped1)
+
+ if Config.Debug then
+ print("Attacking player and other fleeing from ped.")
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+ for i = 1, 2 do
+ -- Build 2 peds
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_driving_seizure.lua b/resources/night_ers/callouts/plugins/callout_driving_seizure.lua
new file mode 100644
index 000000000..a3f1d7dc1
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_driving_seizure.lua
@@ -0,0 +1,138 @@
+Config.Callouts["driving_seizure"] = {
+
+ Enabled = true,
+ CalloutName = "Seizure whilst driving",
+ CalloutDescriptions = {
+ "Caller reports a driver experiencing a seizure, immediate medical assistance required.",
+ "Emergency call: driver in distress due to a seizure, vehicle out of control, urgent help needed.",
+ "Emergency! Driver reported having a seizure while driving, potential crash imminent.",
+ "Witness reports driver having a seizure, vehicle dangerously swerving, immediate intervention needed.",
+ "Help needed: driver suffering a seizure, car has come to a stop in traffic.",
+ "Urgent: seizure reported behind the wheel, potential for serious accident, medical support required.",
+ "Caller indicates a driver experiencing a seizure, vehicle stopped in hazardous position, emergency services needed.",
+ "Serious situation: driver reported having a seizure, car blocking road, immediate assistance needed.",
+ "Witness reports a medical emergency: driver having a seizure, potential for crash, first responders required.",
+ "Report of a driver having a seizure, vehicle out of control, urgent medical and police response needed.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Ambulance.",
+ policeRequired = true,
+ ambulanceRequired = true,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ vector3(1979.71, 3304.68, 45.11),
+ vector3(225.16, 3321.39, 39.90),
+ vector3(-1639.10, 2439.46, 26.53),
+ vector3(1120.33, 6464.17, 22.34),
+ vector3(2387.42, 5150.40, 47.46),
+ vector3(1899.05, 1711.78, 64.59),
+ vector3(2548.83, 1648.64, 28.56),
+ vector3(1411.67, -1541.59, 58.01),
+ vector3(143.48, -1448.40, 29.11),
+ vector3(1924.75, 2464.45, 54.67),
+ vector3(-1409.08, -64.58, 52.87),
+ vector3(-2657.79, 1505.18, 116.97),
+ vector3(-212.14, -704.14, 33.81),
+ vector3(-552.52, -638.08, 33.79),
+ vector3(-440.72, -216.01, 36.44),
+ vector3(-372.92, 140.30, 65.95),
+ vector3(-95.07, 102.84, 73.05),
+ vector3(1940.38, 2453.16, 54.57),
+ vector3(2877.37, 4247.51, 51.10),
+ vector3(2626.18, 5118.11, 44.77),
+ vector3(-1369.54, 4799.75, 129.20),
+ vector3(75.27, 3649.59, 39.55),
+ vector3(224.40, 3139.16, 42.25),
+ vector3(1186.58, 2673.98, 37.77),
+ vector3(2040.88, 3010.99, 45.28),
+ vector3(106.20, -996.31, 29.40),
+ vector3(1532.84, 867.58, 77.12),
+ vector3(1912.90, 527.79, 173.50),
+ vector3(2412.35, 1053.58, 80.19),
+ vector3(2772.77, 3319.06, 56.13),
+ vector3(2663.66, 3928.24, 42.34),
+ vector3(2700.45, 3083.12, 42.76),
+ vector3(2632.89, 2946.15, 40.42),
+ vector3(2851.14, 3440.11, 50.92),
+ vector3(2453.31, 3854.30, 38.94),
+ vector3(2271.27, 3757.01, 38.42),
+ vector3(1820.61, 3507.98, 38.32),
+ vector3(1693.80, 3461.85, 37.02),
+ vector3(1184.28, 3267.64, 39.20),
+ vector3(-3040.17, 3745.06, 70.20),
+ vector3(-4050.71, 5335.75, 83.14),
+ vector3(-4043.33, 5599.94, 68.38),
+ vector3(2874.65, 4868.66, 62.60),
+ vector3(3000.50, 4099.68, 57.18),
+ vector3(-92.55, 6150.44, 31.80),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+
+ local vehicle
+
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ vehicle = veh
+ ERS_RequestNetControlForEntity(vehicle)
+ else
+ if Config.Debug then
+ print("Could not find vehicle entity.")
+ end
+ end
+ Wait(500)
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ TaskVehicleDriveWander(ped, vehicle, 17.0, drivingStyle) -- drivingStyle is pre-configured, you can replace this with your own driving style hash if you like.
+ Wait(2000)
+ SetEntityHealth(ped, 0)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(vehicleList, 15000)
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+ -- Build vehicle
+ local vehModel = ERS_GetRandomModel(Config.randomVehicles)
+ local vehType = "automobile"
+ local vehCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build ped
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z + 2.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(ped, vehicle, -1)
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_drug_deal.lua b/resources/night_ers/callouts/plugins/callout_drug_deal.lua
new file mode 100644
index 000000000..57d18cfba
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_drug_deal.lua
@@ -0,0 +1,123 @@
+Config.Callouts["drug_deal"] = {
+
+ Enabled = true,
+ CalloutName = "Possible drugs dealing",
+ CalloutDescriptions = {
+ "A possible drugs dealing situation has been reported, requiring immediate police response.",
+ "Emergency assistance is needed to investigate and address a possible drugs dealing scenario.",
+ "Reports indicate a possible drugs dealing activity, necessitating urgent police intervention.",
+ "A possible drugs dealing situation has been reported, and backup is needed to secure the area and conduct an investigation.",
+ "Emergency services have been dispatched to address a possible drugs dealing situation.",
+ "A request for assistance has been made by officers responding to a possible drugs dealing incident.",
+ "Additional units are required to support officers responding to a possible drugs dealing situation.",
+ "Emergency backup is required to assist officers in handling a possible drugs dealing scenario.",
+ "A call for assistance has been issued by officers dealing with a possible drugs dealing situation.",
+ "Reports suggest a situation where immediate police assistance is crucial to investigate and address a possible drugs dealing activity.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(-1656.60, -150.07, 58.33),
+ [2] = vector3(-964.03, -184.61, 37.80),
+ [3] = vector3(-628.39, -234.97, 38.05),
+ [4] = vector3(-586.74, -293.28, 35.07),
+ [5] = vector3(-42.90, -419.81, 39.64),
+ [6] = vector3(23.17, -434.85, 45.50),
+ [7] = vector3(371.64, -363.52, 46.75),
+ [8] = vector3(802.94, -828.72, 27.32),
+ [9] = vector3(827.70, -1072.18, 29.00),
+ [10] = vector3(1001.18, -1538.05, 30.83),
+ [11] = vector3(954.11, -1679.79, 30.05),
+ [12] = vector3(39.68, -2684.49, 6.17),
+ [13] = vector3(-420.11, -2790.76, 6.01),
+ [14] = vector3(-1142.01, -1969.37, 13.16),
+ [15] = vector3(-1175.60, -1800.86, 3.90),
+ [16] = vector3(-1998.75, 553.35, 112.60),
+ [17] = vector3(-748.51, 5593.33, 41.65),
+ [18] = vector3(-377.63, 6075.06, 31.46),
+ [19] = vector3(-159.16, 6290.67, 31.48),
+ [20] = vector3(-69.88, 6250.36, 31.08),
+ [21] = vector3(1919.24, 4831.56, 46.02),
+ [22] = vector3(2542.07, 4648.52, 34.07),
+ [23] = vector3(2508.43, 4212.37, 40.15),
+ [24] = vector3(1882.91, 3806.63, 32.76),
+ [25] = vector3(1710.45, 3689.69, 34.82),
+ [26] = vector3(382.12, -1227.18, 32.38),
+ [27] = vector3(146.43, -1279.99, 29.04),
+ [28] = vector3(501.40, -2159.42, 5.91),
+ [29] = vector3(367.48, -2668.01, 6.00),
+ [30] = vector3(-443.82, -2445.16, 6.00),
+ [31] = vector3(-1217.72, -1804.72, 3.71),
+ [32] = vector3(-1621.59, -1060.65, 13.09),
+ [33] = vector3(326.59, -210.93, 54.08),
+ [34] = vector3(685.86, 577.65, 130.46),
+ [35] = vector3(-459.34, -1713.22, 18.67),
+ [36] = vector3(-3081.01, 551.72, 2.34),
+ [37] = vector3(-2197.92, 4260.04, 48.04),
+ [38] = vector3(1687.92, 6417.40, 32.37),
+ [39] = vector3(424.85, 6527.00, 27.70),
+ [40] = vector3(155.67, 6608.80, 31.89),
+ },
+ PedChanceToFleeFromPlayer = 75, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 10, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 75, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 5000, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 10000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "flee", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_pistol",
+ "weapon_knife",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ if index == 1 then
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ TaskTurnPedToFaceEntity(ped, NetToPed(pedList[2]), -1)
+ Wait(1000)
+ ClearPedTasks(ped)
+ Wait(500)
+ TaskStartScenarioInPlace(ped, "WORLD_HUMAN_DRUG_DEALER", 0, true)
+ else
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ TaskTurnPedToFaceEntity(ped, NetToPed(pedList[1]), -1)
+ Wait(1000)
+ ClearPedTasks(ped)
+ Wait(500)
+ TaskStartScenarioInPlace(ped, "WORLD_HUMAN_DRUG_DEALER_HARD", 0, true)
+ end
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ local diameter = 3
+
+ -- Build suspect peds
+ local suspects = 2
+ for i = 1, suspects do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local suspectPedModel = ERS_GetRandomModel(Config.randomPeds)
+ local suspectPedCoords = vector3(coords.x, coords.y, coords.z)
+ local suspectPedHeading = math.random(360)
+ local suspectPedNetId = ERS_CreatePed(suspectPedModel, suspectPedCoords, suspectPedHeading)
+ local suspectPed = NetworkGetEntityFromNetworkId(suspectPedNetId)
+ table.insert(pedList, suspectPedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_drug_overdose.lua b/resources/night_ers/callouts/plugins/callout_drug_overdose.lua
new file mode 100644
index 000000000..8c778901b
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_drug_overdose.lua
@@ -0,0 +1,130 @@
+Config.Callouts["drug_overdose"] = {
+
+ Enabled = true,
+ CalloutName = "Drug overdose",
+ CalloutDescriptions = {
+ "Individual found with signs of a drug overdose; paramedics needed urgently.",
+ "Witness reports a person exhibiting overdose symptoms; immediate help required.",
+ "Emergency alert: suspected drug overdose at the scene; quick medical response needed.",
+ "Authorities called for a potential overdose victim; additional medical teams requested.",
+ "Person down from an apparent overdose; urgent response from emergency services needed.",
+ "Immediate assistance required for an overdose case; signs of severe reaction noted.",
+ "Critical overdose situation reported; emergency medical support essential.",
+ "Urgent medical help requested for an individual suspected of overdosing on drugs.",
+ "Call received about a drug overdose; person in critical condition, need paramedics now.",
+ "Medical emergency: suspected overdose; life-saving intervention needed immediately.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Ambulance.",
+ policeRequired = true,
+ ambulanceRequired = true,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(-1321.16, -585.79, 28.8), -- Marathon Avenue, Del Perro
+ [2] = vector3(-1249.80, -1540.82, 3.97), -- Goma Street, Vespucci Beach
+ [3] = vector3(520.26, -530.31, 24.49), -- Del Perro Fwy, La Messa
+ [4] = vector3(-619.21, 206.26, 73.84), -- Strawberry Avenue, West Vinewood
+ [5] = vector3(1624.92, 3784.92, 34.37), -- Cholla Springs, Sandy Shores
+ [6] = vector3(1445.61, 3759.23, 31.42), -- Marina Drive, Sandy Shores
+ [7] = vector3(897.10, 3610.56, 32.50), -- Marina Drive, Almo Sea
+ [8] = vector3(339.63, 3568.78, 33.12), -- Marina Drive, Zancudo River
+ [9] = vector3(1637.30, -4856.22, 41.82), -- Grapeseed Main Street, Grapeseed
+ [10] = vector3(104.11, 6633.31, 30.99), -- Paleto Boulevard, Paleto Bay
+ [11] = vector3(-177.90, 6427.10, 30.19), -- Procopio Drive, Paleto Bay
+ [12] = vector3(-365.73, 6063.14, 31.18), -- Duluoz Avenue, Paleto Bay
+ [13] = vector3(193.02, 6373.75, 31.38), -- Great Ocean Highway, Mount Chilliad
+ [14] = vector3(-678.70, 5797.49, 17.01), -- North Bound Procopio Promenade, Paleto Bay
+ [15] = vector3(-3422.26, 967.87, 8.02), -- Eastbound Barbareno road, Chumash
+ [16] = vector3(-3067.34, 420.56, 6.10), -- Eastbound Ineseno Road, Banham Canyon
+ [17] = vector3(-2047.95, -129.75, 28.49), -- Eastbound West Eclipse Boulevard, Pacific Buffs
+ [18] = vector3(-2332.37, 264.49, 169.28), -- Kortz Drive, Pacific Bluffs
+ [19] = vector3(2663.66, 3928.24, 42.34),
+ [20] = vector3(2700.45, 3083.12, 42.76),
+ [21] = vector3(2632.89, 2946.15, 40.42),
+ [22] = vector3(2851.14, 3440.11, 50.92),
+ [23] = vector3(2453.31, 3854.3, 38.94),
+ [24] = vector3(2271.27, 3757.01, 38.42),
+ [25] = vector3(1820.61, 3507.98, 38.32),
+ [26] = vector3(1693.8, 3461.85, 37.02),
+ [27] = vector3(1184.28, 3267.64, 39.2),
+ [28] = vector3(-3040.17, 3745.06, 70.2),
+ [29] = vector3(-4050.71, 5335.75, 83.14),
+ [30] = vector3(-4043.33, 5599.94, 68.38),
+ [31] = vector3(2874.65, 4868.66, 62.6),
+ [32] = vector3(3000.5, 4099.68, 57.18),
+ [33] = vector3(-92.55, 6150.44, 31.8),
+ [34] = vector3(-109.52, 6465.71, 31.63),
+ [35] = vector3(63.26, 6560.11, 29.33),
+ [36] = vector3(1985.06, 3774.55, 32.18),
+ [37] = vector3(2432.03, 4022.39, 36.88),
+ [38] = vector3(2455.81, 4978.84, 46.81),
+ [39] = vector3(3316.37, 5167.69, 18.41),
+ [40] = vector3(446.51, 5572.15, 781.19),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ local deadPed
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+
+ if index == 1 then
+ SetEntityHealth(ped, 0)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ deadPed = ped
+ else
+ TaskGoToEntity(ped, deadPed, -1, 3.0, 10.0, 1073741824.0, 0)
+ Wait(math.random(5000))
+ TaskTurnPedToFaceEntity(ped, deadPed, 2000)
+ Wait(1000)
+ local scenario = ERS_SelectRandomBystanderScenario()
+ TaskStartScenarioInPlace(ped, scenario, 0, true)
+ end
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ local diameter = 6
+
+ -- Build victim
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+
+ -- Build bystanders
+ local randomAmountOfBystanders = math.random(4)
+ for i = 1, randomAmountOfBystanders do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+
+ local bystanderPedModel = ERS_GetRandomModel(Config.randomPeds)
+ local bystanderPedCoords = vector3(coords.x, coords.y, coords.z)
+ local bystanderPedHeading = math.random(360)
+ local bystanderPedNetId = ERS_CreatePed(bystanderPedModel, bystanderPedCoords, bystanderPedHeading)
+ local bystanderPed = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, bystanderPedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_drug_warehouse.lua b/resources/night_ers/callouts/plugins/callout_drug_warehouse.lua
new file mode 100644
index 000000000..323cae9d9
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_drug_warehouse.lua
@@ -0,0 +1,160 @@
+Config.Callouts["drug_warehouse"] = {
+
+ Enabled = true,
+ CalloutName = "Drug smugglers warehouse located",
+ CalloutDescriptions = {
+ "Emergency: respond immediately to reports of a drug smuggling warehouse; secure the area and apprehend suspects.",
+ "Urgent alert: dispatch units to the location of a drug smuggling operation; prevent the suspects from escaping and seize contraband.",
+ "Critical response: attend to a report of a drug smuggling warehouse; prioritize securing evidence and detaining all involved.",
+ "Immediate action: investigate reports of a drug smuggling warehouse; take necessary measures to shut down the operation.",
+ "Alert: respond promptly to the discovery of a drug smuggling warehouse; ensure the safety of officers and gather all evidence.",
+ "Incident reported: handle a situation involving a drug smuggling warehouse; coordinate with narcotics units to manage the operation.",
+ "Situation alert: assist in raiding a drug smuggling warehouse; secure the location and arrest all suspects.",
+ "Emergency response: deal with a discovered drug smuggling warehouse; follow protocols to seize drugs and arrest individuals.",
+ "Immediate intervention: respond to reports of a drug smuggling warehouse; prioritize the apprehension of suspects and confiscation of illegal substances.",
+ "Response needed: investigate reports of a drug smuggling operation urgently; take appropriate actions to dismantle the operation and secure the area.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(-519.6938, -2835.9790, 6.0004),
+ [2] = vector3(-47.4459, -2224.0042, 7.8117),
+ [3] = vector3(-153.1731, -2665.0564, 6.0002),
+ [4] = vector3(72.0018, -2737.7595, 6.0031),
+ [5] = vector3(184.9508, -3120.9741, 5.7819),
+ [6] = vector3(1177.8940, -3243.2639, 5.9581),
+ [7] = vector3(1016.7790, -2332.0244, 30.4876),
+ [8] = vector3(1065.3457, -1961.4900, 31.0145),
+ [9] = vector3(1765.0731, -1532.6378, 112.4530),
+ [10] = vector3(2985.3704, 3495.2598, 71.3819),
+ [11] = vector3(2227.7437, 5167.9551, 58.5628),
+ [12] = vector3(1377.2062, 4369.2319, 44.0381),
+ [13] = vector3(10.6306, 6335.0142, 31.2360),
+ [14] = vector3(2372.3931, 3115.5803, 48.0733),
+ [15] = vector3(26.8874, 3710.8281, 39.6957),
+ [16] = vector3(-88.7946, 2802.2861, 53.3044),
+ [17] = vector3(216.7919, 2455.8967, 56.5108),
+ [18] = vector3(170.9110, 2249.3745, 91.2255),
+ [19] = vector3(-3169.1328, 1293.6431, 14.3532),
+ [20] = vector3(-296.7219, -2714.0962, 6.0003),
+ },
+ PedChanceToFleeFromPlayer = 20, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 80, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 100, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 10000,-- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 15000,-- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "attack",-- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_assaultrifle",
+ "weapon_pistol",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+
+ local plyGroupHash = GetPedRelationshipGroupHash(plyPed)
+ local retval, suspectGroupHash = AddRelationshipGroup("SUSPECT_GROUP_HASH")
+
+ SetRelationshipBetweenGroups(4, suspectGroupHash, plyGroupHash)
+ SetRelationshipBetweenGroups(4, plyGroupHash, suspectGroupHash)
+
+ for index, objNetId in pairs(objectList) do
+ local obj = NetToObj(objNetId)
+ if DoesEntityExist(obj) then
+ ERS_RequestNetControlForEntity(obj)
+ PlaceObjectOnGroundProperly(obj)
+ end
+ end
+
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ ERS_RequestNetControlForEntity(veh)
+ for i = 1, 2 do
+ SetVehicleDoorOpen(veh, i, false, true)
+ end
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ SetPedRelationshipGroupHash(ped, suspectGroupHash)
+ SetEntityCanBeDamagedByRelationshipGroup(ped, false, suspectGroupHash)
+ ERS_SpawnConfiguredWeaponForPed(ped, calloutDataClient)
+ if index == 1 then
+ if IsPedInAnyVehicle(ped, false) then
+ ERS_SetPedToFleeFromPlayer(ped)
+ end
+ else
+ SetPedAccuracy(ped, 50)
+ TaskCombatPed(ped, plyPed, 0, 16)
+ end
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 60000)
+ ERS_CreateTemporaryBlipForEntities(vehicleList, 60000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+
+ local diameter = 30
+
+ -- Build suspect vehicle
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local suspectVehModel = ERS_GetRandomModel(Config.randomDrugTrucks)
+ local suspectVehType = "automobile"
+ local suspectVehCoords = vector3(coords.x, coords.y, coords.z+1.0)
+ local suspectVehHeading = math.random(360)
+ local suspectVehNetId = ERS_CreateVehicle(suspectVehModel, suspectVehType, suspectVehCoords, suspectVehHeading)
+ local suspectVehicle = NetworkGetEntityFromNetworkId(suspectVehNetId)
+ table.insert(vehicleList, suspectVehNetId)
+
+ -- Build suspect ped(s)
+ local seatIndex = -1
+ local randomAmountOfSuspects = math.random(5, 10)
+ for i = 1, randomAmountOfSuspects do
+ coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local suspectPedModel = ERS_GetRandomModel(Config.randomGangPeds)
+ local suspectPedCoords = vector3(coords.x, coords.y, coords.z+2.0)
+ local suspectPedHeading = math.random(360)
+ local suspectPedNetId = ERS_CreatePed(suspectPedModel, suspectPedCoords, suspectPedHeading)
+ local suspectPed = NetworkGetEntityFromNetworkId(suspectPedNetId)
+ if i == 1 then
+ SetPedIntoVehicle(suspectPed, suspectVehicle, seatIndex)
+ seatIndex = seatIndex + 1
+ end
+ table.insert(pedList, suspectPedNetId)
+ end
+
+ -- Build objects
+ diameter = 10
+ local randomAmountOfObjects = math.random(10)
+ for i = 1, randomAmountOfObjects do
+ coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local objModel = ERS_GetRandomModel(Config.randomDrugObjects)
+ local objCoords = vector3(coords.x, coords.y, coords.z)
+ local objHeading = math.random(360)
+ local objNetId = ERS_CreateObject(objModel, objCoords, objHeading)
+ if objNetId then
+ local obj = NetworkGetEntityFromNetworkId(objNetId)
+ table.insert(objectList, objNetId)
+ else
+ DebugPrint("^1ERROR ^7Could not create object: "..objModel)
+ end
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_drunk_entering_vehicle.lua b/resources/night_ers/callouts/plugins/callout_drunk_entering_vehicle.lua
new file mode 100644
index 000000000..7bca63684
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_drunk_entering_vehicle.lua
@@ -0,0 +1,109 @@
+Config.Callouts["drunk_entering_vehicle"] = {
+
+ Enabled = true,
+ CalloutName = "Drunk person entering a vehicle",
+ CalloutDescriptions = {
+ "Respond to a report of a drunk person attempting to enter a vehicle; ensure their safety and prevent potential danger.",
+ "Alert: intoxicated individual trying to get into a vehicle; deploy units to prevent impaired driving.",
+ "Units needed: emergency call for a drunk person entering a vehicle; focus on securing the individual and the vehicle.",
+ "Notice: intoxicated person reported entering a vehicle; act promptly to control the situation and offer assistance.",
+ "Alert: report of a drunk person attempting to drive; intervention needed to secure the scene and prevent any incidents.",
+ "Incident reported: drunk person trying to enter a vehicle; take action to deliver urgent care and support.",
+ "Respond to a situation involving an intoxicated individual attempting to enter a vehicle; prioritize safety and coordinate with police.",
+ "Situation alert: drunk person trying to drive; provide immediate assistance and ensure the individual does not operate the vehicle.",
+ "Alert: report of an intoxicated person entering a vehicle; respond swiftly to address the emergency and offer necessary support.",
+ "Response needed: drunk person attempting to drive; ensure their safety, provide aid, and secure the area.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(74.8666, -1436.6072, 29.3117),
+ [2] = vector3(-76.5555, 1989.0193, 180.9692),
+ [3] = vector3(220.4436, 2495.6790, 54.5016),
+ [4] = vector3(409.2810, 2600.5032, 43.5221),
+ [5] = vector3(614.2072, 2725.5054, 41.8296),
+ [6] = vector3(1480.2856, 3734.7014, 33.7487),
+ [7] = vector3(2487.2310, 4118.1738, 38.0647),
+ [8] = vector3(1690.8002, 4768.3066, 41.9215),
+ [9] = vector3(2548.6125, 4683.3149, 33.7332),
+ [10] = vector3(2985.6746, 3496.2029, 71.3819),
+ [11] = vector3(2557.5903, 2632.6567, 37.9575),
+ [12] = vector3(-88.9214, -2026.9102, 18.0164),
+ [13] = vector3(-219.9697, -1695.0724, 33.9713),
+ [14] = vector3(-216.2287, 78.5081, 67.7878),
+ [15] = vector3(-1397.6736, 66.2449, 53.4266),
+ [16] = vector3(-1331.1656, 263.2677, 62.4902),
+ [17] = vector3(-885.8245, 413.9728, 86.3693),
+ [18] = vector3(-568.9772, 323.9600, 84.4676),
+ [19] = vector3(-333.6727, 294.5822, 85.8672),
+ [20] = vector3(-73.0234, 896.5555, 235.5506),
+ },
+ PedChanceToFleeFromPlayer = 100, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none",-- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ local vehicle
+ local driver
+
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ vehicle = veh
+ ERS_RequestNetControlForEntity(vehicle)
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ driver = ped
+ ERS_RequestNetControlForEntity(driver)
+ TaskSetBlockingOfNonTemporaryEvents(driver, true)
+ ERS_SetPedAsDrunkPed(driver)
+ TaskVehicleDriveWander(driver, vehicle, 10.0, 786603)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(vehicleList, 15000)
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ -- Build vehicle
+ local vehModel = ERS_GetRandomModel(Config.randomVehicles)
+ local vehType = "automobile"
+ local vehCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build ped
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z+1.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(ped, vehicle, -1)
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_drunk_ped.lua b/resources/night_ers/callouts/plugins/callout_drunk_ped.lua
new file mode 100644
index 000000000..03d1edb13
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_drunk_ped.lua
@@ -0,0 +1,95 @@
+Config.Callouts["drunk_ped"] = {
+
+ Enabled = true,
+ CalloutName = "Drunk and disorderly",
+ CalloutDescriptions = {
+ "Respond to a report of an individual behaving erratically due to intoxication; ensure public safety.",
+ "Emergency call: intoxicated person causing a disturbance; dispatch units to handle the situation.",
+ "Urgent assistance needed for a drunk and disorderly individual; maintain order and provide necessary support.",
+ "Critical incident: individual under the influence is causing a public disturbance; respond immediately.",
+ "Alert: drunk and disorderly person reported; deploy officers to manage the situation and restore peace.",
+ "Person behaving aggressively due to alcohol consumption; immediate response required to ensure safety.",
+ "Handle an incident involving an intoxicated individual causing a scene; prioritize public order and safety.",
+ "Emergency response: drunk and disorderly behavior reported; coordinate efforts to de-escalate and resolve the issue.",
+ "Urgent callout: individual under the influence causing trouble; respond quickly to address the disorderly conduct.",
+ "Critical situation: intoxicated person disrupting public order; immediate intervention needed to prevent escalation.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(414.9027, -606.7913, 28.7064),
+ [2] = vector3(1985.8014, 3051.5066, 47.2152),
+ [3] = vector3(2002.7778, 3050.8342, 47.2134),
+ [4] = vector3(1979.8967, 3059.4202, 47.1777),
+ [5] = vector3(1969.7324, 3032.3501, 47.0564),
+ [6] = vector3(1567.9878, 3575.3203, 33.0887),
+ [7] = vector3(1661.0940, 3813.2605, 34.8567),
+ [8] = vector3(1974.0117, 3818.5132, 33.4363),
+ [9] = vector3(1691.9283, 4783.4653, 41.9215),
+ [10] = vector3(1658.3806, 4874.2173, 42.0714),
+ [11] = vector3(727.2822, 4187.3271, 40.7092),
+ [12] = vector3(192.4504, 3092.5593, 43.0729),
+ [13] = vector3(235.8815, 2568.2986, 46.4725),
+ [14] = vector3(-1914.7069, 2051.5798, 140.7368),
+ [15] = vector3(-3065.0869, 559.6572, 2.3003),
+ [16] = vector3(-3044.6960, 33.3533, 10.1182),
+ [17] = vector3(-1817.5731, -1183.0045, 14.3061),
+ [18] = vector3(119.1438, -1287.0010, 28.2693),
+ [19] = vector3(430.7794, -627.6445, 28.7117),
+ [20] = vector3(456.3588, -738.9048, 27.3576),
+ [21] = vector3(113.8742, 246.7692, 107.8513),
+ [22] = vector3(298.0912, 185.1022, 104.1350),
+ [23] = vector3(-1390.5596, -583.9694, 30.2245),
+ },
+ PedChanceToFleeFromPlayer = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 10000, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 15000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_knife",
+ "weapon_bottle",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ ERS_SetPedAsDrunkPed(ped)
+ TaskWanderStandard(ped, 10.0, 10)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ local diameter = 10
+
+ -- Build suspect peds
+ local randomAmountOfSuspects = math.random(3)
+ for i = 1, randomAmountOfSuspects do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(coords.x, coords.y, coords.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_emergency_heli_land.lua b/resources/night_ers/callouts/plugins/callout_emergency_heli_land.lua
new file mode 100644
index 000000000..71d5ec62d
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_emergency_heli_land.lua
@@ -0,0 +1,154 @@
+Config.Callouts["emergency_heli_land"] = {
+
+ Enabled = true,
+ CalloutName = "Emergency Landing (Helicopter)",
+ CalloutDescriptions = {
+ "Respond immediately to a report of a helicopter making an emergency landing; secure the area and assist the crew.",
+ "Emergency alert: helicopter performing an emergency landing; deploy units to manage the situation and ensure safety.",
+ "Urgent response required: helicopter in distress; focus on securing the landing zone and providing aid to the crew.",
+ "Critical situation: helicopter emergency landing; act swiftly to assist the crew and control the scene.",
+ "Alert: report of a helicopter making an emergency landing; immediate intervention needed to ensure safety and provide help.",
+ "Helicopter incident: urgent action required to secure the area and assist the crew and passengers.",
+ "Handle an emergency involving a helicopter landing; prioritize safety and coordinate with rescue teams.",
+ "Emergency situation: helicopter making an emergency landing; ensure the area is safe and provide necessary assistance.",
+ "Urgent alert: helicopter in distress; respond quickly to manage the landing and help the crew.",
+ "Critical response needed: helicopter emergency landing; secure the area, assist the crew, and ensure the safety of all involved.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Ambulance.",
+ policeRequired = true,
+ ambulanceRequired = true,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(-1429.2676, -1289.7368, 4.3511),
+ [2] = vector3(-1653.2723, -870.3990, 9.0263),
+ [3] = vector3(-1455.4275, -1152.7502, 2.4831),
+ [4] = vector3(-747.0457, -1485.9590, 5.0007),
+ [5] = vector3(-454.8493, -1426.9784, 29.3621),
+ [6] = vector3(25.1825, -1721.3936, 29.2899),
+ [7] = vector3(325.5524, -1511.4641, 29.3379),
+ [8] = vector3(225.6287, -1045.0038, 29.3698),
+ [9] = vector3(125.6850, -514.5389, 43.1679),
+ [10] = vector3(361.6500, 140.9549, 103.0987),
+ [11] = vector3(1453.7101, 1106.9681, 114.3338),
+ [12] = vector3(1314.7112, 1861.2794, 90.4019),
+ [13] = vector3(-75.2154, 1854.2852, 199.9619),
+ [14] = vector3(-600.4490, 2159.9644, 131.3303),
+ [15] = vector3(-1343.5653, 2450.3135, 26.8504),
+ [16] = vector3(-2514.7119, 3724.3655, 13.2465),
+ [17] = vector3(-1593.7363, 4768.4336, 50.9807),
+ [18] = vector3(-759.7006, 5534.2915, 33.4762),
+ [19] = vector3(-291.4177, 6123.8335, 31.5306),
+ [20] = vector3(-231.0190, 6260.1074, 31.4410),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+
+ local heli
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ ERS_RequestNetControlForEntity(veh)
+ ERS_SetRandomDamageToVehicle(veh)
+ SetVehicleEngineOn(veh, true, true, false)
+ SetHeliBladesSpeed(veh, 0.5)
+ heli = veh
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+
+ if index == 1 then -- Pilot
+ local pos = GetEntityCoords(heli, false)
+ local foundGround, groundZ = GetGroundZFor_3dCoord(pos.x, pos.y, pos.z, false)
+
+ if foundGround then
+ local destinationX = pos.x
+ local destinationY = pos.y
+ local destinationZ = groundZ
+ local missionFlag = 4
+ local maxSpeed = 20.0
+ local landingRadius = 10.0
+ local targetHeading = 0.0
+ local unk1 = -1.0
+ local unk2 = -1.0
+ local unk3 = 5.0
+ local landingFlags = 32
+
+ ERS_ClearPedTasksAndBlockEvents(ped)
+
+ while not IsPedInAnyHeli(ped) do
+ ERS_RequestNetControlForEntity(ped)
+ ERS_RequestNetControlForEntity(heli)
+ SetPedIntoVehicle(ped, heli, -1)
+ Wait(500)
+ end
+
+ TaskHeliMission(ped, heli, 0, 0, destinationX, destinationY, destinationZ, missionFlag, maxSpeed, landingRadius, targetHeading, unk1, unk2, unk3, landingFlags)
+ end
+ else -- Passengers
+ local chance = math.random(100)
+ if chance > 50 then
+ -- Ped is injured
+ ERS_ApplyBloodToPed(ped)
+ SetEntityHealth(ped, 0)
+ end
+ end
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(vehicleList, 15000)
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+
+ local diameter = 20
+
+ -- Build vehicle
+ local vehModel = ERS_GetRandomModel(Config.randomHelicopters)
+ local vehType = "heli"
+ local vehCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z+150.0)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build pilot & passengers
+ local seatIndex = -1
+ local randomAmountOfPassengers = math.random(4)
+ for i = 1, randomAmountOfPassengers do
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ if i == 1 then
+ pedModel = "s_m_m_pilot_01"
+ end
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z+3.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(ped, vehicle, seatIndex)
+ seatIndex = seatIndex + 1
+ table.insert(pedList, pedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_fall_height.lua b/resources/night_ers/callouts/plugins/callout_fall_height.lua
new file mode 100644
index 000000000..6edbe42fe
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_fall_height.lua
@@ -0,0 +1,102 @@
+Config.Callouts["fall_height"] = {
+ Enabled = true,
+ CalloutName = "Fall from a height",
+ CalloutDescriptions = {
+ "A person has fallen from a significant height, requiring immediate medical attention.",
+ "Emergency services are needed to assist with a fall victim from a height.",
+ "Reports indicate a fall from a height, necessitating urgent medical intervention.",
+ "A person has fallen from a height, and additional personnel are needed for rescue and treatment.",
+ "Emergency services have been requested to attend to a fall victim from a height.",
+ "A request for assistance has been made by emergency responders dealing with a fall victim from a height.",
+ "Additional units are required to support emergency personnel managing a fall victim from a height.",
+ "Emergency backup is required to assist emergency responders in handling a fall victim from a height.",
+ "A call for assistance has been issued by first responders dealing with a fall victim from a height.",
+ "Reports suggest a situation where immediate medical assistance is crucial to manage and address a fall from a height.",
+ },
+ CalloutUnitsRequired = {
+ description = "Ambulance.",
+ policeRequired = false,
+ ambulanceRequired = true,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(312.62, -729.49, 29.31), -- Strawberry Ave. Textile city
+ [2] = vector3(778.43, -1260.22, 26.39), -- Popular Str. La Mesa
+ [3] = vector3(919.10, -2497.89, 35.96), -- Rooftop Hanger Way, Cypress Flats
+ [4] = vector3(-758.37, -2275.35, 13.06), -- Opium Hotel, Greenwich Pkwy LSIA
+ [5] = vector3(-651.30, -1074.34, 14.76), -- Polomino Ave Little Seoul Appt.
+ [6] = vector3(-921.44, -451.14, 39.59), -- Movie Star Way, Rockford Hills
+ [7] = vector3(-677.35, 231.68, 82.85), -- West Eclipse Blvd, West Vinewood
+ [8] = vector3(2441.10, 4990.92, 46.29), -- Union Rd. Grapeseed
+ [9] = vector3(-1247.26, -1289.18, 3.91),
+ [10] = vector3(-830.33, -691.75, 27.85),
+ [11] = vector3(-930.11, -393.31, 38.97),
+ [12] = vector3(-189.31, -830.65, 30.72),
+ [13] = vector3(105.66, -942.81, 29.69),
+ [14] = vector3(1153.69, -340.26, 67.72),
+ [15] = vector3(399.06, -694.78, 29.28),
+ [16] = vector3(364.27, -789.78, 29.28),
+ [17] = vector3(310.35, -736.36, 29.31),
+ [18] = vector3(-14.66, -570.64, 37.75),
+ [19] = vector3(-312.22, -439.72, 31.97),
+ [20] = vector3(-588.00, -106.00, 42.94),
+ [21] = vector3(-1536.15, -579.45, 33.70),
+ [22] = vector3(-1342.74, -805.67, 18.89),
+ [23] = vector3(-1306.35, -995.69, 4.85),
+ [24] = vector3(-1589.59, -556.76, 34.94),
+ [25] = vector3(-1225.44, -203.92, 39.18),
+ [26] = vector3(761.77, -676.47, 28.83),
+ [27] = vector3(778.55, -158.17, 74.43),
+ [28] = vector3(977.21, 5.70, 81.04),
+ [29] = vector3(1255.52, -335.71, 69.08),
+ [30] = vector3(777.82, 223.07, 85.41),
+ [31] = vector3(321.26, 134.58, 103.47),
+ [32] = vector3(-663.29, 241.58, 81.33),
+ [33] = vector3(-1344.42, 457.41, 101.63),
+ [34] = vector3(273.76, 2855.59, 43.64),
+ [35] = vector3(224.76, 3217.02, 42.50),
+ [36] = vector3(345.88, 3408.64, 36.65),
+ [37] = vector3(1415.46, 3612.75, 34.94),
+ [38] = vector3(1524.32, 3567.52, 35.36),
+ [39] = vector3(2339.08, 3852.54, 35.59),
+ [40] = vector3(2481.64, 4094.74, 38.07),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ ERS_ApplyBloodToPed(ped)
+ SetEntityHealth(ped, 0)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+ -- Build ped
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z+50.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_fall_stairs.lua b/resources/night_ers/callouts/plugins/callout_fall_stairs.lua
new file mode 100644
index 000000000..1b36cf0f4
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_fall_stairs.lua
@@ -0,0 +1,91 @@
+Config.Callouts["fall_stairs"] = {
+
+ Enabled = true,
+ CalloutName = "Person fell off a staircase/ladder",
+ CalloutDescriptions = {
+ "Respond to an emergency involving a person who has fallen off a staircase; immediate medical assistance required.",
+ "Emergency response needed for an incident where a person has fallen off a staircase; dispatch units to provide aid.",
+ "Urgent call to assist a person who has fallen off a staircase; mobilize medical resources to the scene.",
+ "Person injured after falling off a staircase; respond swiftly to provide necessary medical attention and ensure safety.",
+ "Incident alert: person fallen off a staircase; deploy medical units to assess and treat injuries.",
+ "Emergency response required for a person who has fallen off a staircase; prioritize immediate medical intervention.",
+ "Respond to the incident of a person falling off a staircase; expedite efforts to provide medical care and support.",
+ "Person fallen off a staircase; activate emergency protocols and coordinate with units to deliver timely aid.",
+ "Immediate response needed for a person who has fallen off a staircase; prioritize their safety and medical treatment.",
+ "Urgent callout: person injured after falling off a staircase; respond promptly to provide medical assistance and ensure well-being.",
+ },
+ CalloutUnitsRequired = {
+ description = "Ambulance.",
+ policeRequired = false,
+ ambulanceRequired = true,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(351.4657, 271.0494, 103.0172),
+ [2] = vector3(-652.7864, -766.0150, 25.5297),
+ [3] = vector3(-474.7756, -910.9007, 29.4782),
+ [4] = vector3(-920.7066, -1298.7263, 5.1850),
+ [5] = vector3(-1170.1167, -1102.2087, 3.8880),
+ [6] = vector3(-1298.2869, -1045.9518, 12.4772),
+ [7] = vector3(-1125.2135, -451.0492, 35.8138),
+ [8] = vector3(-1119.3269, -439.5915, 36.2330),
+ [9] = vector3(-355.6841, -149.6584, 38.2469),
+ [10] = vector3(-209.2857, -237.3621, 60.8542),
+ [11] = vector3(338.8574, -1092.9243, 29.4042),
+ [12] = vector3(327.6939, -1012.8282, 29.2898),
+ [13] = vector3(318.7952, -622.8632, 29.2940),
+ [14] = vector3(723.5764, -707.2311, 26.7198),
+ [15] = vector3(216.0993, 115.9391, 106.0705),
+ [16] = vector3(51.7044, 147.6956, 98.0485),
+ [17] = vector3(-588.4545, -200.9341, 37.8006),
+ [18] = vector3(563.5626, -2202.3018, 10.2138),
+ [19] = vector3(727.1979, -2151.6619, 28.4359),
+ [20] = vector3(983.2426, -1669.0815, 41.1710),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_SetMovementAnimClipSetToPed(ped, "move_m@injured")
+ ERS_RequestNetControlForEntity(ped)
+ ERS_ApplyBloodToPed(ped)
+
+ local chanceToSurvive = math.random(0, 1)
+ if chanceToSurvive > 0 then
+ Citizen.Wait(2500)
+ local scenario = ERS_SelectRandomWoundedPersonScenario()
+ TaskStartScenarioInPlace(ped, scenario, 0, true)
+ else
+ SetEntityHealth(ped, 0)
+ end
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z + 10.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_fight.lua b/resources/night_ers/callouts/plugins/callout_fight.lua
new file mode 100644
index 000000000..905c5d6db
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_fight.lua
@@ -0,0 +1,163 @@
+Config.Callouts["fight"] = {
+
+ Enabled = true,
+ CalloutName = "Fight",
+ CalloutDescriptions = {
+ "A brawl has erupted in the streets, with combatants exchanging blows amidst a gathering crowd.",
+ "Emergency services have been called to intervene in a chaotic street fight, with tensions running high.",
+ "Reports indicate a violent altercation unfolding in a public area, with multiple individuals involved.",
+ "A confrontation has escalated into a physical altercation, prompting bystanders to seek assistance.",
+ "A heated argument has turned into a full-blown fight, with onlookers urging for immediate intervention.",
+ "A disturbance has been reported, with sounds of a scuffle echoing through the neighborhood. Respond with caution.",
+ "Witnesses report a clash between multiple parties, with the situation rapidly escalating. Approach with extreme caution.",
+ "Emergency services have been dispatched to a location where a fight has broken out, posing a threat to public safety.",
+ "Reports suggest a violent altercation requiring urgent attention. Mobilize resources for swift resolution.",
+ "Emergency services have been alerted to a potential confrontation. Coordinate with authorities to de-escalate the situation.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, ambulance.",
+ policeRequired = true,
+ ambulanceRequired = true,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(-218.79, -1671.06, 34.46), -- Davis
+ [2] = vector3(204.20, -1706.48, 29.30), -- Davis
+ [3] = vector3(72.79, -1971.16, 20.81), -- Grv Str. Davis
+ [4] = vector3(-11.37, -1433.59, 31.12), -- Forum Dr. Strawberry
+ [5] = vector3(-684.74, 311.88, 83.08), -- Terras, West Vinewood
+ [6] = vector3(-802.68, -173.13, 72.84), -- Rockford Hills, Michaels House
+ [7] = vector3(-1269.22, 502.25, 97.11), -- Montana House, Vinewood Hills
+ [8] = vector3(-37.97, 2865.61, 59.18), -- Grand Senora Desert, Route 68 Appr.
+ [9] = vector3(1393.42, 3603.21, 38.94), -- Algonquin Blvd, Sandy Shores
+ [10] = vector3(1651.51, 3805.67, 34.98), -- Cholla Springs Ave, Sandy Shores
+ [11] = vector3(1717.82, 4676.85, 43.66), -- Grapeseed Main Street
+ [12] = vector3(-221.87, 6457.18, 31.20), -- Procopio Dr. Paleto Bay
+ [13] = vector3(1990.99, 3048.07, 47.22), -- Yellow Jack (Sandy)
+ [14] = vector3(-297.58, 6254.43, 31.48), -- Hen House (Paleto)
+ [15] = vector3(219.45, 300.67, 105.57), -- 7088 Alta Str. (City)
+ [16] = vector3(118.47, -1286.84, 28.27), -- Vanilla Unicorn (City)
+ [17] = vector3(-824.06, -1221.66, 7.37), -- 8236 Hotel (City)
+ [18] = vector3(-803.07, -932.42, 17.89), -- Park (City)
+ [19] = vector3(-946.74, -787.83, 15.92), -- 8087 Skatepark (City)
+ [20] = vector3(-987.96, -386.97, 45.36), -- Bridge 7225 (City)
+ [21] = vector3(-1199.08, 349.09, 71.14), -- 7054 Vinewood (City)
+ [22] = vector3(-720.96, 81.89, 55.86), -- Kifflom 7151 (City)
+ [23] = vector3(-497.94, 65.17, 56.50), -- Garage Rooftop (City)
+ [24] = vector3(-387.93, -67.28, 45.19), -- Alleyway LS Customs (City)
+ [25] = vector3(-377.88, 223.04, 84.22), -- Nightclub (City)
+ [26] = vector3(-422.30, 265.51, 83.20), -- Nightclub (City)
+ [27] = vector3(-555.78, 283.94, 82.18), -- Bar (City)
+ [28] = vector3(-52.26, -773.81, 32.89), -- Weird Depot (City)
+ [29] = vector3(244.11, -755.45, 30.83), -- Garage Bottom Legion (City)
+ [30] = vector3(361.15, -792.78, 29.29), -- Alleyway Mission Row (City)
+ [31] = vector3(426.23, -800.99, 29.49), -- Binco's MR (City)
+ [32] = vector3(456.47, -608.74, 28.50), -- Dashound (City)
+ [33] = vector3(454.24, -765.57, 27.37), -- China Town MR (City)
+ [34] = vector3(389.78, -356.29, 48.02), -- 7195 (City)
+ [35] = vector3(2002.19, 3798.70, 32.18), -- Mechanic (Sandy)
+ [36] = vector3(1861.29, 3870.04, 33.07), -- Random House (Sandy)
+ [37] = vector3(1709.93, 3869.28, 34.78), -- House Patriot (Sandy)
+ [38] = vector3(1512.02, 4790.44, 33.51), -- Boat House (Sandy)
+ [39] = vector3(-333.22, 6146.83, 31.49), -- Church (Paleto)
+ [40] = vector3(-315.97, 6293.39, 35.19), -- Scaffold (Paleto)
+ [41] = vector3(-109.52, 6465.71, 31.63), -- Bank (Paleto)
+ [42] = vector3(63.26, 6560.11, 29.33), -- Construction Site (Paleto)
+ [43] = vector3(1985.06, 3774.55, 32.18), -- Additional Location (Sandy)
+ [44] = vector3(2432.03, 4022.39, 36.88), -- Additional Location (Sandy)
+ [45] = vector3(2455.81, 4978.84, 46.81), -- Additional Location (Sandy)
+ [46] = vector3(3316.37, 5167.69, 18.41), -- Additional Location (Sandy)
+ [47] = vector3(446.51, 5572.15, 781.19), -- Additional Location (Sandy)
+ },
+ PedChanceToFleeFromPlayer = 20, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 20, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 20, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 10000,-- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 15000,-- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "flee", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_knife",
+ "weapon_bat",
+ "weapon_hammer",
+ "weapon_wrench",
+ "weapon_pistol",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ local team1 = {}
+ local team2 = {}
+
+ local totalPeds = #pedList
+ local pedsPerTeam = math.floor(totalPeds / 2)
+
+ local team1Count = 0
+ local team2Count = 0
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ local chance = math.random(0,1)
+ if chance > 0 then
+ ERS_SetPedAsDrunkPed(ped)
+ end
+
+ local random = math.random(100)
+ if (team1Count < pedsPerTeam) or (team2Count >= pedsPerTeam and random >= 50) then
+ table.insert(team1, ped)
+ team1Count = team1Count + 1
+ else
+ table.insert(team2, ped)
+ team2Count = team2Count + 1
+ end
+
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+
+ Wait(100)
+
+ ERS_SpawnConfiguredWeaponForPed(ped, calloutDataClient)
+ end
+ end
+
+ if #team1 > 0 and #team2 > 0 then
+ for i, ped in pairs(team1) do
+ local randomTarget = team2[math.random(#team2)]
+ TaskCombatPed(ped, randomTarget, 0, 16)
+ if Config.Debug then
+ print("Team 1 Ped "..ped.." is attacking ped "..randomTarget)
+ end
+ end
+
+ for i, ped in pairs(team2) do
+ local randomTarget = team1[math.random(#team1)]
+ TaskCombatPed(ped, randomTarget, 0, 16)
+ if Config.Debug then
+ print("Team 2 Ped "..ped.." is attacking ped "..randomTarget)
+ end
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ local randomBrawlers = math.random(2, 8)
+ for i = 1, randomBrawlers do
+ -- Build peds
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_fire.lua b/resources/night_ers/callouts/plugins/callout_fire.lua
new file mode 100644
index 000000000..5b286aeda
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_fire.lua
@@ -0,0 +1,106 @@
+Config.Callouts["fire"] = {
+ Enabled = true,
+ CalloutName = "Reports of a fire",
+ CalloutDescriptions = {
+ "A fire has been reported, requiring immediate attention from fire services.",
+ "Emergency services are needed to extinguish a reported fire.",
+ "Reports indicate a fire has broken out, necessitating urgent firefighting intervention.",
+ "A fire has been identified, and additional fire personnel are needed for containment and extinguishment.",
+ "Emergency services have been requested to respond to a fire.",
+ "A request for assistance has been made by authorities dealing with a fire.",
+ "Additional units are required to support fire personnel managing a reported fire.",
+ "Emergency backup is required to assist fire authorities in handling a fire.",
+ "A call for assistance has been issued by responders dealing with a fire.",
+ "Reports suggest a situation where immediate firefighting intervention is crucial to manage and address a fire.",
+ },
+ CalloutUnitsRequired = {
+ description = "Fire",
+ policeRequired = false,
+ ambulanceRequired = false,
+ fireRequired = true,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(510.78, -970.06, 27.54),
+ [2] = vector3(857.04, -946.39, 26.54),
+ [3] = vector3(1124.11, -798.91, 57.63),
+ [4] = vector3(1317.05, -1671.16, 51.24),
+ [5] = vector3(1452.03, -1935.34, 72.47),
+ [6] = vector3(1372.55, -2086.71, 53.11),
+ [7] = vector3(822.35, -2974.13, 6.02),
+ [8] = vector3(1104.56, -3249.35, 7.02),
+ [9] = vector3(761.42, -3219.93, 7.34),
+ [10] = vector3(445.66, -3037.47, 7.50),
+ [11] = vector3(493.50, -2828.83, 2.77),
+ [12] = vector3(150.72, -2650.57, 6.41),
+ [13] = vector3(-390.61, -2188.21, 9.98),
+ [14] = vector3(-674.53, -2460.26, 13.94),
+ [15] = vector3(-1177.89, -2902.84, 15.95),
+ [16] = vector3(-1122.50, -2830.59, 32.86),
+ [17] = vector3(-1239.08, -2737.25, 14.36),
+ [18] = vector3(-1146.44, -2326.89, 13.98),
+ [19] = vector3(-1067.93, -2374.29, 20.52),
+ [20] = vector3(-1077.42, -2074.45, 13.29),
+ [21] = vector3(-14.69, -1436.00, 31.12),
+ [22] = vector3(-269.54, -2103.16, 27.90),
+ [23] = vector3(-13.95, -2167.43, 12.05),
+ [24] = vector3(435.17, -655.06, 28.74),
+ [25] = vector3(445.07, -564.27, 29.09),
+ [26] = vector3(22.63, -391.70, 39.65),
+ [27] = vector3(117.23, -353.09, 42.61),
+ [28] = vector3(131.32, 71.40, 80.11),
+ [29] = vector3(-152.12, 294.39, 98.82),
+ [30] = vector3(-702.57, 89.93, 55.86),
+ -- Add more to 40
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ Wait(100)
+ TaskTurnPedToFaceCoord(ped, calloutDataClient.Coordinates.x, calloutDataClient.Coordinates.y, calloutDataClient.Coordinates.z, -1)
+ Wait(2000)
+ local scenario = ERS_SelectStandingByFireScenario()
+ TaskStartScenarioInPlace(ped, scenario, 0, true)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ if UsingSmartFires then
+ -- Full version
+ local fireSize = Config.RandomMediumFireOrSmokeSize[math.random(#Config.RandomMediumFireOrSmokeSize)]
+ local fireType = Config.NormalFireTypes[math.random(#Config.NormalFireTypes)]
+ local fireId = exports['SmartFires']:CreateFire(vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z-0.5), fireSize, fireType)
+ DebugPrint("Created fire with ID: "..fireId)
+ table.insert(fireList, fireId)
+ else
+ -- Lite version
+ local fireSize = Config.RandomSmallFireOrSmokeSize[math.random(#Config.RandomSmallFireOrSmokeSize)]
+ local fireType = "normal"
+ local fireId = exports['SmartFiresLite']:CreateFire(vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z-0.5), fireSize, fireType)
+ DebugPrint("Created fire with SmartFiresLite with ID: "..fireId)
+ table.insert(fireList, fireId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_fire_dumpster.lua b/resources/night_ers/callouts/plugins/callout_fire_dumpster.lua
new file mode 100644
index 000000000..f2e6ed394
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_fire_dumpster.lua
@@ -0,0 +1,132 @@
+Config.Callouts["fire_dumpster"] = {
+
+ Enabled = true,
+ CalloutName = "Garbage bin on fire",
+ CalloutDescriptions = {
+ "A garbage bin has caught fire, requiring immediate attention from fire services.",
+ "Emergency services are needed to extinguish a fire in a garbage bin.",
+ "Reports indicate a garbage bin is on fire, necessitating urgent firefighting intervention.",
+ "A fire has been identified in a garbage bin, and additional fire personnel are needed for containment and extinguishment.",
+ "Emergency services have been requested to respond to a garbage bin fire.",
+ "A request for assistance has been made by authorities dealing with a garbage bin fire.",
+ "Additional units are required to support fire personnel managing a garbage bin fire.",
+ "Emergency backup is required to assist fire authorities in handling a garbage bin fire.",
+ "A call for assistance has been issued by responders dealing with a garbage bin fire.",
+ "Reports suggest a situation where immediate firefighting intervention is crucial to manage and address a garbage bin fire.",
+ },
+ CalloutUnitsRequired = {
+ description = "Fire",
+ policeRequired = false,
+ ambulanceRequired = false,
+ fireRequired = true,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(2454.83, 4054.92, 38.95),
+ [2] = vector3(1975.17, 3787.58, 32.97),
+ [3] = vector3(1926.45, 3745.37, 33.41),
+ [4] = vector3(1899.79, 3780.52, 33.30),
+ [5] = vector3(1825.76, 3746.67, 34.08),
+ [6] = vector3(1626.28, 3801.31, 35.26),
+ [7] = vector3(1558.18, 3805.05, 35.13),
+ [8] = vector3(1288.35, 3621.54, 33.74),
+ [9] = vector3(1401.00, 3632.42, 35.83),
+ [10] = vector3(1432.34, 3621.90, 35.70),
+ [11] = vector3(1700.85, 3696.76, 35.17),
+ [12] = vector3(1685.64, 4805.29, 42.50),
+ [13] = vector3(-72.80, 6505.27, 33.04),
+ [14] = vector3(-5.64, 6480.96, 32.36),
+ [15] = vector3(32.90, 6545.49, 32.29),
+ [16] = vector3(179.28, 6444.78, 32.15),
+ [17] = vector3(-54.29, 6284.64, 32.23),
+ [18] = vector3(-127.22, 6230.84, 32.26),
+ [19] = vector3(-202.53, 6243.81, 32.35),
+ [20] = vector3(-349.31, 6242.84, 32.10),
+ [21] = vector3(-434.26, 6162.51, 32.18),
+ [22] = vector3(71.04, -209.51, 55.35),
+ [23] = vector3(-18.18, -195.51, 53.23),
+ [24] = vector3(-600.36, -981.30, 23.24),
+ [25] = vector3(-624.94, -1789.60, 24.77),
+ [26] = vector3(-352.35, -1552.93, 25.95),
+ [27] = vector3(-140.25, -1361.66, 30.23),
+ [28] = vector3(2.35, -1350.34, 30.25),
+ [29] = vector3(105.51, -1316.19, 30.15),
+ [30] = vector3(120.27, -1541.17, 30.29),
+ [31] = vector3(139.94, -1578.74, 30.19),
+ [32] = vector3(155.78, -1655.72, 30.68),
+ [33] = vector3(197.40, -1759.03, 30.11),
+ [34] = vector3(130.42, -1887.35, 24.40),
+ [35] = vector3(248.93, -1963.99, 23.27),
+ [36] = vector3(267.02, -2056.23, 19.07),
+ [37] = vector3(287.49, -2091.68, 18.21),
+ [38] = vector3(480.20, -1959.01, 25.64),
+ [39] = vector3(454.12, -1908.81, 25.79),
+ [40] = vector3(467.88, -1586.12, 30.72),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ Wait(100)
+ TaskTurnPedToFaceCoord(ped, calloutDataClient.Coordinates.x, calloutDataClient.Coordinates.y, calloutDataClient.Coordinates.z, -1)
+ Wait(2000)
+ local scenario = ERS_SelectStandingByFireScenario()
+ TaskStartScenarioInPlace(ped, scenario, 0, true)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ local diameter = 6
+
+ if UsingSmartFires then
+ -- Full version
+ local fireSize = Config.RandomSmallFireOrSmokeSize[math.random(#Config.RandomSmallFireOrSmokeSize)]
+ local fireType = Config.NormalFireTypes[math.random(#Config.NormalFireTypes)]
+ local fireId = exports['SmartFires']:CreateFire(vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z-0.5), fireSize, fireType)
+ DebugPrint("Created fire with ID: "..fireId)
+ table.insert(fireList, fireId)
+ else
+ -- Lite version...
+ local fireSize = Config.RandomSmallFireOrSmokeSize[math.random(#Config.RandomSmallFireOrSmokeSize)]
+ local fireType = "normal" -- Only fire type available for SmartFiresLite. Consider getting all the fire type options with the full version: https://store.londonstudios.net/category/fire-resources
+ local fireId = exports['SmartFiresLite']:CreateFire(vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z-0.5), fireSize, fireType)
+ DebugPrint("Created fire with SmartFiresLite with ID: "..fireId)
+ table.insert(fireList, fireId)
+ end
+
+ -- Build bystander(s)
+ local randomAmountOfBystanders = math.random(3)
+ for i = 1, randomAmountOfBystanders do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(coords.x, coords.y, coords.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_fire_ped.lua b/resources/night_ers/callouts/plugins/callout_fire_ped.lua
new file mode 100644
index 000000000..c1563bff7
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_fire_ped.lua
@@ -0,0 +1,121 @@
+Config.Callouts["fire_ped"] = {
+
+ Enabled = true,
+ CalloutName = "Person on fire",
+ CalloutDescriptions = {
+ "A person is on fire and requires immediate intervention from emergency services.",
+ "Emergency teams are needed to assist a person who has caught fire.",
+ "Authorities report a person engulfed in flames, necessitating urgent action to save their life.",
+ "A person has caught fire, and additional firefighting units are needed to provide critical aid.",
+ "Immediate response required to save a person on fire, endangering their life and those nearby.",
+ "A person is on fire, and reinforcements are needed to assist local fire services in extinguishing the flames.",
+ "Fire crews are requesting backup to control a severe situation where a person is burning.",
+ "An urgent call for assistance has been made to deal with a person on fire, spreading panic in the vicinity.",
+ "Responders are on the scene of a person on fire and require additional support to prevent further harm.",
+ "A significant emergency involving a person on fire demands immediate intervention to protect lives and prevent further injury.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Ambulance, Fire.",
+ policeRequired = true,
+ ambulanceRequired = true,
+ fireRequired = true,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(-1617.85, -1039.77, 5.90),
+ [2] = vector3(-221.79, -1617.18, 34.87),
+ [3] = vector3(461.01, -1870.48, 26.98),
+ [4] = vector3(-11.17, -1428.86, 31.10),
+ [5] = vector3(2663.66, 3928.24, 42.34),
+ [6] = vector3(2700.45, 3083.12, 42.76),
+ [7] = vector3(2632.89, 2946.15, 40.42),
+ [8] = vector3(2851.14, 3440.11, 50.92),
+ [9] = vector3(2453.31, 3854.30, 38.94),
+ [10] = vector3(2271.27, 3757.01, 38.42),
+ [11] = vector3(1820.61, 3507.98, 38.32),
+ [12] = vector3(1693.80, 3461.85, 37.02),
+ [13] = vector3(1184.28, 3267.64, 39.20),
+ [14] = vector3(-3040.17, 3745.06, 70.20),
+ [15] = vector3(-4050.71, 5335.75, 83.14),
+ [16] = vector3(-4043.33, 5599.94, 68.38),
+ [17] = vector3(2874.65, 4868.66, 62.60),
+ [18] = vector3(3000.50, 4099.68, 57.18),
+ [19] = vector3(-92.55, 6150.44, 31.80),
+ -- Add more to 40
+ },
+ PedChanceToFleeFromPlayer = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 10, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 1000, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 5000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "flee", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_knife",
+ "weapon_hatchet",
+ "weapon_crowbar",
+ "weapon_bat",
+ "weapon_pistol",
+ "weapon_minismg",
+ "weapon_smg",
+ "weapon_assaultrifle",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ local victim
+ local suspectPedList = {}
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ if index == 1 then
+ victim = ped
+ StartEntityFire(victim)
+ ERS_ApplyBloodToPed(victim)
+ elseif index == 2 then
+ table.insert(suspectPedList, PedToNet(ped))
+ ERS_SetPedToFleeFromPlayer(ped)
+ else
+ TaskTurnPedToFaceEntity(ped, victim, -1)
+ Wait(1000)
+ local scenario = ERS_SelectRandomBystanderScenario()
+ TaskStartScenarioInPlace(ped, scenario, 0, true)
+ end
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, suspectPedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ local diameter = 10
+
+ -- Build victim
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+
+ -- Build suspect & bystander(s)
+ local randomAmountOfBystanders = math.random(3)
+ for i = 1, randomAmountOfBystanders do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(coords.x, coords.y, coords.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_fire_petrol.lua b/resources/night_ers/callouts/plugins/callout_fire_petrol.lua
new file mode 100644
index 000000000..28362c5a1
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_fire_petrol.lua
@@ -0,0 +1,86 @@
+Config.Callouts["fire_petrol"] = {
+
+ Enabled = true,
+ CalloutName = "Petrol station on fire",
+ CalloutDescriptions = {
+ "A petrol station is ablaze, requiring immediate intervention from fire services.",
+ "Emergency teams are needed to extinguish a fire at a local petrol station.",
+ "Authorities report a petrol station fire threatening nearby structures, necessitating urgent action.",
+ "A large fire has erupted at a petrol station, and additional firefighting units are needed to contain it.",
+ "Immediate response required to a petrol station fire endangering surrounding areas.",
+ "A petrol station is on fire, and reinforcements are needed to assist local fire services.",
+ "Fire crews are requesting backup to control a severe fire at a petrol station.",
+ "An urgent call for assistance has been made to deal with a petrol station fire spreading towards nearby properties.",
+ "Responders are on the scene of a petrol station fire and require additional support to prevent further damage.",
+ "A significant fire at a petrol station demands immediate intervention to protect lives and property.",
+ },
+ CalloutUnitsRequired = {
+ description = "Fire.",
+ policeRequired = false,
+ ambulanceRequired = false,
+ fireRequired = true,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(170.22, -1563.05, 29.27),
+ [2] = vector3(-70.88, -1764.10, 29.35),
+ [3] = vector3(-321.58, -1467.19, 30.72),
+ [4] = vector3(-521.46, -1208.76, 18.32),
+ [5] = vector3(-733.16, -932.26, 19.21),
+ [6] = vector3(-358.36, -1537.80, 28.71),
+ [7] = vector3(621.74, 263.99, 103.08),
+ [8] = vector3(2581.73, 359.16, 108.64),
+ [9] = vector3(1785.78, 3330.22, 41.39),
+ [10] = vector3(2006.81, 3774.46, 32.40),
+ [11] = vector3(1208.14, 2658.84, 37.89),
+ [12] = vector3(1690.48, 4927.02, 42.23),
+ [13] = vector3(1701.65, 6417.42, 32.64),
+ [14] = vector3(179.09, 6604.82, 32.04),
+ [15] = vector3(-91.53, 6421.69, 31.63),
+ [16] = vector3(-2558.62, 2333.26, 33.22),
+ [17] = vector3(-2096.23, -320.18, 13.16),
+ [18] = vector3(-974.32, -2859.85, 13.94),
+ [19] = vector3(2003.77, 3773.46, 32.40),
+ [20] = vector3(50.36, 2778.62, 58.04),
+ [21] = vector3(264.98, 2607.24, 44.98),
+ [22] = vector3(179.61, 6605.00, 32.04),
+ [23] = vector3(-97.05, 6416.73, 31.63),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ -- No other actions required clientside, add if you desire.
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+
+ if UsingSmartFires then
+ -- Full version
+ local fireSize = Config.RandomLargeFireOrSmokeSize[math.random(#Config.RandomLargeFireOrSmokeSize)]
+ local fireType = Config.ChemicalFire
+ local fireId = exports['SmartFires']:CreateFire(vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z-0.5), fireSize, fireType)
+ DebugPrint("Created fire with ID: "..fireId)
+ table.insert(fireList, fireId)
+ else
+ -- Lite version
+ local fireSize = Config.RandomLargeFireOrSmokeSize[math.random(#Config.RandomLargeFireOrSmokeSize)]
+ local fireType = "normal"
+ local fireId = exports['SmartFiresLite']:CreateFire(vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z-0.5), fireSize, fireType)
+ DebugPrint("Created fire with SmartFiresLite with ID: "..fireId)
+ table.insert(fireList, fireId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_gas_smell.lua b/resources/night_ers/callouts/plugins/callout_gas_smell.lua
new file mode 100644
index 000000000..70b2ed336
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_gas_smell.lua
@@ -0,0 +1,120 @@
+Config.Callouts["gas_smell"] = {
+
+ Enabled = true,
+ CalloutName = "Reports of the smell of gas",
+ CalloutDescriptions = {
+ "Investigate reports of a gas leak; secure the area and ensure public safety.",
+ "Alert: dispatch units to respond to reports of a potential gas leak; prevent any potential hazards.",
+ "Units required: respond to reports of a gas leak and take necessary actions to contain it.",
+ "Notice: check reports of a gas leak; implement safety measures to protect the public.",
+ "Alert: respond promptly to reports of a gas leak; prioritize safety and prevent harm.",
+ "Incident reported: look into reports of a gas leak to prevent any dangerous situations.",
+ "Investigate reports of a gas leak; coordinate with relevant authorities to address the situation.",
+ "Situation alert: address reports of a gas leak; ensure the area is evacuated and secured.",
+ "Alert: handle reports of a gas leak and follow protocols to ensure safety for all.",
+ "Response needed: investigate reports of a gas leak and take appropriate actions to prevent harm.",
+ },
+ CalloutUnitsRequired = {
+ description = "Fire",
+ policeRequired = false,
+ ambulanceRequired = false,
+ fireRequired = true,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(320.3299, -2028.6627, 20.7297),
+ [2] = vector3(2734.6477, 2792.8330, 34.4528),
+ [3] = vector3(2713.7800, 1708.7676, 24.5957),
+ [4] = vector3(997.8574, -1399.0852, 31.3591),
+ [5] = vector3(452.5323, -1510.2538, 29.2950),
+ [6] = vector3(1121.3575, -2448.8159, 31.1848),
+ [7] = vector3(1101.7811, -2215.8853, 30.7006),
+ [8] = vector3(1068.6343, -2029.6871, 30.9942),
+ [9] = vector3(892.8798, -1834.2726, 30.6321),
+ [10] = vector3(-162.9202, -1087.0149, 18.6834),
+ [11] = vector3(-152.9407, -1098.5862, 13.1170),
+ [12] = vector3(-94.6749, -979.1372, 21.2769),
+ [13] = vector3(79.4206, -425.8600, 37.5528),
+ [14] = vector3(76.8570, -346.6708, 42.6144),
+ [15] = vector3(208.1455, -1879.8135, 24.5918),
+ [16] = vector3(-508.5347, -1444.9080, 13.5982),
+ [17] = vector3(-553.1423, -1659.5178, 19.2136),
+ [18] = vector3(-423.6055, -1683.0629, 19.0715),
+ [19] = vector3(-341.0407, -1350.1746, 31.3082),
+ [20] = vector3(388.1617, -348.0286, 46.8153),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+
+ local diameter = 20
+ local coords = calloutDataClient.Coordinates
+ local particleDict = "scr_weap_bombs"
+ local particleName = "scr_bomb_gas"
+ local particleSize = 5.0
+ local particleAmount = math.random(1,5)
+ local timeoutInMs = math.random(15000, 45000) -- Timeout to remove the particles.
+ local chanceToExplode = 33 -- Will the particles explode at the end? Compared to a random of 100 (%)
+
+ --ERS_SpawnParticlesWithinRange(coords, diameter, particleDict, particleName, particleSize, particleAmount, timeout, chanceToExplode)
+ local data = {
+ diameter = diameter,
+ coords = coords,
+ particleDict = particleDict,
+ particleName = particleName,
+ particleSize = particleSize,
+ particleAmount = particleAmount,
+ timeoutInMs = timeoutInMs,
+ chanceToExplode = chanceToExplode
+ }
+ TriggerServerEvent(Config.EventPrefix..':ERS_SpawnParticlesWithinRange', data)
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ ERS_SetMovementAnimClipSetToPed(ped, "move_m@injured")
+ local randomChance = math.random(100)
+ if randomChance < 75 then
+ SetEntityHealth(ped, 0)
+ else
+ TaskReactAndFleePed(ped, plyPed)
+ end
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 30000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+
+ local diameter = 10
+
+ -- Build victims
+ local victims = math.random(5)
+ for i = 1, victims do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(coords.x, coords.y, coords.z + 3.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_highway_pileup.lua b/resources/night_ers/callouts/plugins/callout_highway_pileup.lua
new file mode 100644
index 000000000..33d5aa171
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_highway_pileup.lua
@@ -0,0 +1,251 @@
+Config.Callouts["highway_pileup"] = {
+
+ Enabled = true,
+ CalloutName = "Pileup on the Highway",
+ CalloutDescriptions = {
+ "Respond immediately to a multi-vehicle pileup on the highway; secure the area and provide assistance to those involved.",
+ "Emergency alert: major pileup on the highway; deploy units to manage the scene and ensure the safety of all motorists.",
+ "Urgent response required: multiple vehicles involved in a highway pileup; focus on rescue operations and traffic control.",
+ "Critical situation: highway pileup involving several vehicles; act swiftly to provide aid and prevent further incidents.",
+ "Alert: major highway pileup reported; immediate intervention needed to assist the injured and clear the wreckage.",
+ "Highway incident: multi-vehicle pileup; urgent action required to secure the scene and help the affected drivers.",
+ "Handle a serious pileup on the highway; prioritize emergency response and coordinate with rescue teams.",
+ "Emergency situation: multiple vehicle collision on the highway; ensure the area is safe and assist in rescue efforts.",
+ "Urgent alert: significant pileup on the highway; respond quickly to manage the scene and provide necessary aid.",
+ "Critical response needed: highway pileup involving numerous vehicles; secure the area, assist the injured, and restore traffic flow.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Ambulance, Fire, Tow.",
+ policeRequired = true,
+ ambulanceRequired = true,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(-723.9343, -501.5836, 25.1885),
+ [2] = vector3(1306.3455, 604.0614, 80.1776),
+ [3] = vector3(1615.2841, 1112.5173, 82.3359),
+ [4] = vector3(1814.2136, 2232.6438, 53.7744),
+ [5] = vector3(2250.2102, 2768.9214, 44.1481),
+ [6] = vector3(2906.5564, 4007.5483, 51.3679),
+ [7] = vector3(2702.1899, 4758.9541, 44.4291),
+ [8] = vector3(2501.0244, 5560.6606, 44.8073),
+ [9] = vector3(1860.9811, 6321.2598, 40.6849),
+ [10] = vector3(533.3502, 6550.3486, 27.4865),
+ [11] = vector3(-103.8089, 6285.8931, 31.3435),
+ [12] = vector3(-560.1664, 5687.4629, 37.6950),
+ [13] = vector3(-918.4584, 5417.5034, 37.1486),
+ [14] = vector3(-1270.9117, 5258.7598, 50.9792),
+ [15] = vector3(-1962.1641, 4557.4907, 57.0737),
+ [16] = vector3(-2259.5281, 4231.6406, 43.5575),
+ [17] = vector3(-2540.3325, 3460.8416, 13.4633),
+ [18] = vector3(-2693.2185, 2441.3757, 16.6942),
+ [19] = vector3(-3094.0144, 1192.8280, 20.3403),
+ [20] = vector3(-2317.9683, -303.7535, 13.8492),
+ [21] = vector3(-1844.1833, -562.5378, 11.5654),
+ [22] = vector3(-1376.2452, -766.1354, 11.0586),
+ [23] = vector3(-905.1063, -531.1483, 20.2172),
+ [24] = vector3(34.4561, -522.6520, 34.0809),
+ [25] = vector3(859.5303, -711.8274, 42.6594),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ ERS_RequestNetControlForEntity(veh)
+ ERS_SetRandomDamageToVehicle(veh)
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+
+ local pedCoords = GetEntityCoords(ped)
+ local chanceToSurvive = math.random(0, 1)
+
+ ERS_SetMovementAnimClipSetToPed(ped, "move_m@injured")
+
+ if chanceToSurvive < 1 then
+ -- Dead
+ SetEntityHealth(ped, 0)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ ERS_ApplyBloodToPed(ped)
+ SetPedKeepTask(ped, true)
+ else
+ -- Alive
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ ERS_SpawnConfiguredWeaponForPed(ped, calloutDataClient)
+ if IsPedInAnyVehicle(ped, false) then
+ TaskLeaveAnyVehicle(ped)
+ Wait(500)
+ end
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ SetPedKeepTask(ped, true)
+
+ ERS_ApplyBloodToPed(ped)
+
+ pedCoords = GetEntityCoords(ped)
+ local bool, safeCoords = GetSafeCoordForPed(pedCoords.x, pedCoords.y, pedCoords.z, true, 16)
+ if bool then
+ if Config.Debug then
+ print("Found safe coord for ped: "..safeCoords)
+ end
+ local xOffset= math.random(-2, 2)
+ local yOffset= math.random(-2, 2)
+ TaskGoToCoordAnyMeans(ped, safeCoords.x + xOffset, safeCoords.y + yOffset, safeCoords.z, 10.0, 0, false, 786603, 0xbf800000)
+ else
+ if Config.Debug then
+ print("Could not find safe coord for ped: "..safeCoords)
+ end
+ end
+
+ Citizen.SetTimeout(10000, function()
+ if DoesEntityExist(ped) then
+ if not IsPedDeadOrDying(ped, true) then
+ ERS_RequestNetControlForEntity(ped)
+
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+
+ local scenario = ERS_SelectRandomWoundedPersonScenario()
+ TaskStartScenarioInPlace(ped, scenario, 0, true)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ if Config.Debug then
+ print("Blocking off non-temp events for ped at safe coords for ped: "..ped)
+ end
+ end
+ end
+ end)
+ end
+ end
+ end
+
+
+ for index, objNetId in pairs(objectList) do
+ local obj = NetToObj(objNetId)
+ if DoesEntityExist(obj) then
+ ERS_RequestNetControlForEntity(obj)
+ PlaceObjectOnGroundProperly(obj)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(vehicleList, 15000)
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+ ERS_CreateTemporaryBlipForEntities(objectList, 15000)
+
+ -- ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+
+ local randomAmountOfVehicles = math.random(5,15)
+ local randomAmountOfObjects = math.random(3,10)
+
+ -- Build entities
+ for i = 1, randomAmountOfVehicles do
+ local diameter = 20
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+
+ -- Build vehicle
+ local vehModel = ERS_GetRandomModel(Config.randomVehicles)
+ local vehType = "automobile"
+ local vehCoords = vector3(coords.x, coords.y, coords.z)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build ped
+ coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(coords.x, coords.y, coords.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(ped, vehicle, -1)
+ table.insert(pedList, pedNetId)
+
+ -- Break vehicle
+ SetVehicleBodyHealth(vehicle, (math.random(1000) + 0.0))
+ for i = 0, 5 do
+ local broken = math.random(0, 1)
+ if broken == 1 then
+ SetVehicleDoorBroken(vehicle, i, false)
+ end
+ SetVehicleDirtLevel(vehicle, math.random(15) + 0.0)
+ end
+
+ -- Passengers
+ for seatIndex = 0, 2 do -- seats (4 door vehicles) (front right, rear left, rear right), will leave passenger outside of vehicle if seat 0, 1 or 2 does not exist.
+ if GetPedInVehicleSeat(vehicle, seatIndex) == 0 then
+ local chance = math.random(100)
+ if chance >= 67 then -- 1/3 chance.
+ coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local passengerPedModel = ERS_GetRandomModel(Config.randomPeds)
+ local passengerPedCoords = vector3(coords.x, coords.y, coords.z)
+ local passengerPedHeading = math.random(360)
+ local passengerPedNetId = ERS_CreatePed(passengerPedModel, passengerPedCoords, passengerPedHeading)
+ local passengerPed = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(passengerPed, vehicle, seatIndex)
+ table.insert(pedList, passengerPedNetId)
+ end
+ end
+ end
+ end
+
+ -- Build objects
+ for i = 1, randomAmountOfObjects do
+ local diameter = 20
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+
+ local objModel = ERS_GetRandomModel(Config.randomCollissionObjects)
+ local objCoords = vector3(coords.x, coords.y, coords.z)
+ local objHeading = math.random(360)
+ local objNetId = ERS_CreateObject(objModel, objCoords, objHeading)
+ if objNetId then
+ local obj = NetworkGetEntityFromNetworkId(objNetId)
+ table.insert(objectList, objNetId)
+ else
+ DebugPrint("^1ERROR ^7Could not create object: "..objModel)
+ end
+
+ local fireToObjChance = math.random(100)
+ if fireToObjChance > 75 then
+ -- Build fire
+ if UsingSmartFires then
+ -- Full version
+ local fireSize = Config.RandomMediumFireOrSmokeSize[math.random(#Config.RandomMediumFireOrSmokeSize)]
+ local fireType = Config.NormalFireTypes[math.random(#Config.NormalFireTypes)]
+ local fireId = exports['SmartFires']:CreateFire(vector3(coords.x, coords.y, coords.z-0.5), fireSize, fireType)
+ DebugPrint("Created fire with ID: "..fireId)
+ table.insert(fireList, fireId)
+ else
+ -- Lite version
+ local fireSize = Config.RandomMediumFireOrSmokeSize[math.random(#Config.RandomMediumFireOrSmokeSize)]
+ local fireType = "normal"
+ local fireId = exports['SmartFiresLite']:CreateFire(vector3(coords.x, coords.y, coords.z-0.5), fireSize, fireType)
+ DebugPrint("Created fire with SmartFiresLite with ID: "..fireId)
+ table.insert(fireList, fireId)
+ end
+ end
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_hitnrun_ped.lua b/resources/night_ers/callouts/plugins/callout_hitnrun_ped.lua
new file mode 100644
index 000000000..94aad081d
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_hitnrun_ped.lua
@@ -0,0 +1,127 @@
+Config.Callouts["hitnrun_ped"] = {
+
+ Enabled = true,
+ CalloutName = "Person injured by a hit and run",
+ CalloutDescriptions = {
+ "Respond immediately to a hit and run incident; a person has been injured and requires urgent medical attention.",
+ "Emergency situation: a person has been injured in a hit and run; deploy units to provide aid and investigate the scene.",
+ "Urgent call for assistance: a pedestrian has been struck by a vehicle in a hit and run; prioritize medical care and apprehend the suspect.",
+ "Critical incident: hit and run accident has left a person injured; respond swiftly to administer first aid and gather evidence.",
+ "Alert: hit and run injury reported; dispatch emergency services to the scene and initiate an investigation.",
+ "Medical emergency: a person has been injured in a hit and run collision; immediate response required to stabilize the victim.",
+ "Respond to a hit and run accident; a person is injured and needs immediate medical assistance and police intervention.",
+ "Incident report: hit and run with injuries; coordinate emergency medical response and begin suspect pursuit.",
+ "Immediate attention needed: hit and run incident has injured a pedestrian; deploy units to provide medical aid and secure the area.",
+ "Urgent callout: a person has been hurt in a hit and run; respond quickly to deliver medical care and start the investigation.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Ambulance.",
+ policeRequired = true,
+ ambulanceRequired = true,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(360.2204, 138.8387, 103.1109),
+ [2] = vector3(849.5053, -1654.5782, 29.5378),
+ [3] = vector3(588.4799, -1567.0813, 28.08),
+ [4] = vector3(800.1418, -1236.6493, 26.33),
+ [5] = vector3(707.9493, -1005.7271, 31.3463),
+ [6] = vector3(448.7665, -673.7277, 28.3050),
+ [7] = vector3(262.0800, -566.6970, 43.3105),
+ [8] = vector3(176.7358, -369.7930, 43.2604),
+ [9] = vector3(625.9312, -68.4128, 74.5798),
+ [10] = vector3(1084.7811, -381.4534, 67.0580),
+ [11] = vector3(1292.6527, 1177.0769, 106.7214),
+ [12] = vector3(90.7200, 2091.1211, 144.3520),
+ [13] = vector3(-261.4592, 2624.8979, 62.2469),
+ [14] = vector3(224.2785, 2990.6072, 42.5603),
+ [15] = vector3(-105.8972, 3621.5845, 44.8156),
+ [16] = vector3(-1072.8307, 4422.5562, 19.4816),
+ [17] = vector3(-1059.8085, 5330.0630, 45.3925),
+ [18] = vector3(-573.9376, 5461.4917, 60.7385),
+ [19] = vector3(-439.3835, 6080.7036, 31.2503),
+ [20] = vector3(1811.5784, 5048.5771, 58.8800),
+ [21] = vector3(2604.6880, 5100.0615, 44.7871),
+ [22] = vector3(2584.1018, 4735.4443, 33.6795),
+ [23] = vector3(2505.2319, 4113.7695, 38.4423),
+ [24] = vector3(3084.3508, 5041.8159, 24.2629),
+ [25] = vector3(1572.7377, 3715.8696, 34.5017),
+ },
+ PedChanceToFleeFromPlayer = 75, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 20, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 20, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 10, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 10000, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 15000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_knife",
+ "weapon_hammer",
+ "weapon_crowbar",
+ "weapon_bat",
+ "weapon_pistol",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ if index == 1 then
+ ERS_SetMovementAnimClipSetToPed(ped, "move_m@injured")
+ ERS_RequestNetControlForEntity(ped)
+ ERS_ApplyBloodToPed(ped)
+ SetEntityHealth(ped, 0)
+ else
+ ERS_SetPedToFleeFromPlayer(ped)
+ end
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+
+ local diameter = 20
+
+ -- Build ped
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+
+ -- Build suspect vehicle
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local suspectVehModel = ERS_GetRandomModel(Config.randomVehicles)
+ local suspectVehType = "automobile"
+ local suspectVehCoords = vector3(coords.x, coords.y, coords.z)
+ local suspectVehHeading = math.random(360)
+ local suspectVehNetId = ERS_CreateVehicle(suspectVehModel, suspectVehType, suspectVehCoords, suspectVehHeading)
+ local suspectVehicle = NetworkGetEntityFromNetworkId(suspectVehNetId)
+ table.insert(vehicleList, suspectVehNetId)
+
+ -- Build suspect peds
+ local randomAmountOfSuspects = math.random(2)
+ local seatIndex = -1
+ for i = 1, randomAmountOfSuspects do
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(coords.x, coords.y, coords.z+2.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(ped, suspectVehicle, seatIndex)
+ seatIndex = seatIndex + 1
+ table.insert(pedList, pedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_house_fire.lua b/resources/night_ers/callouts/plugins/callout_house_fire.lua
new file mode 100644
index 000000000..f4ca4074a
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_house_fire.lua
@@ -0,0 +1,129 @@
+Config.Callouts["house_fire"] = {
+
+ Enabled = true,
+ CalloutName = "House on fire",
+ CalloutDescriptions = {
+ "A fire has been reported in a house, requiring immediate attention from fire services.",
+ "Emergency services are needed to extinguish a fire at a house.",
+ "Reports indicate a fire has broken out in a house, necessitating urgent firefighting intervention.",
+ "A fire has been identified in a house, and additional fire personnel are needed for containment and extinguishment.",
+ "Emergency services have been requested to respond to a house fire.",
+ "A request for assistance has been made by authorities dealing with a house fire.",
+ "Additional units are required to support fire personnel managing a house fire.",
+ "Emergency backup is required to assist fire authorities in handling a house fire.",
+ "A call for assistance has been issued by responders dealing with a house fire.",
+ "Reports suggest a situation where immediate firefighting intervention is crucial to manage and address a house fire.",
+ },
+ CalloutUnitsRequired = {
+ description = "Fire",
+ policeRequired = false,
+ ambulanceRequired = false,
+ fireRequired = true,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(445.45, -1710.66, 33.41),
+ [2] = vector3(277.36, -1991.81, 25.62),
+ [3] = vector3(282.22, -1904.35, 30.82),
+ [4] = vector3(330.79, -1742.28, 33.04),
+ [5] = vector3(-32.65, -1442.02, 36.82),
+ [6] = vector3(837.10, -563.42, 63.17),
+ [7] = vector3(894.56, -541.69, 62.39),
+ [8] = vector3(987.85, -525.33, 63.64),
+ [9] = vector3(1046.10, -475.70, 68.93),
+ [10] = vector3(1098.44, -466.17, 70.96),
+ [11] = vector3(1239.85, -593.63, 72.97),
+ [12] = vector3(1250.33, -514.95, 72.65),
+ [13] = vector3(1262.64, -434.51, 73.99),
+ [14] = vector3(984.57, -432.42, 68.42),
+ [15] = vector3(441.03, -1709.35, 32.70),
+ [16] = vector3(407.69, -1754.85, 34.15),
+ [17] = vector3(237.97, -1684.21, 33.65),
+ [18] = vector3(-1228.04, -1210.43, 13.24),
+ [19] = vector3(504.18, -1816.16, 33.72),
+ [20] = vector3(1635.71, 3724.45, 38.79),
+ [21] = vector3(17.46, 3687.95, 43.77),
+ [22] = vector3(-47.13, 6642.09, 37.08),
+ [23] = vector3(-25.51, 6594.60, 36.38),
+ [24] = vector3(-44.05, 6580.23, 36.23),
+ [25] = vector3(-128.24, 6558.08, 34.58),
+ [26] = vector3(33.77, 6662.45, 37.33),
+ [27] = vector3(57.97, 6652.39, 38.47),
+ [28] = vector3(-217.44, 6442.18, 36.55),
+ [29] = vector3(-247.01, 6418.63, 35.71),
+ [30] = vector3(-272.36, 6401.78, 34.99),
+ [31] = vector3(-303.71, 6323.91, 36.04),
+ [32] = vector3(-363.81, 6204.56, 36.21),
+ [33] = vector3(-1047.91, 431.58, 82.57),
+ [34] = vector3(-812.03, 179.45, 72.16),
+ [35] = vector3(-14.35, -1438.48, 31.10),
+ [36] = vector3(152.00, -1823.93, 30.55),
+ [37] = vector3(81.88, -1961.12, 24.35),
+ [38] = vector3(71.64, -1940.27, 24.46),
+ [39] = vector3(-1667.94, -440.37, 48.09),
+ [40] = vector3(-1600.54, -353.38, 54.58),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ PlayPain(ped, 8, 200)
+ ERS_ApplyBloodToPed(ped)
+ Wait(2500)
+ SetEntityHealth(ped, 0)
+
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ local diameter = 2
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+
+ -- Build a small sized fire
+ if UsingSmartFires then
+ -- Full version
+ local fireSize = Config.RandomMediumFireOrSmokeSize[math.random(#Config.RandomMediumFireOrSmokeSize)]
+ local fireType = Config.NormalFireTypes[math.random(#Config.NormalFireTypes)]
+ local fireId = exports['SmartFires']:CreateFire(vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z-0.5), fireSize, fireType)
+ DebugPrint("Created fire with ID: "..fireId)
+ table.insert(fireList, fireId)
+ else
+ -- Lite version
+ local fireSize = Config.RandomSmallFireOrSmokeSize[math.random(#Config.RandomSmallFireOrSmokeSize)]
+ local fireType = "normal"
+ local fireId = exports['SmartFiresLite']:CreateFire(vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z-0.5), fireSize, fireType)
+ DebugPrint("Created fire with SmartFiresLite with ID: "..fireId)
+ table.insert(fireList, fireId)
+ end
+
+ -- Build victim
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(coords.x, coords.y, coords.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_illegal_dumping.lua b/resources/night_ers/callouts/plugins/callout_illegal_dumping.lua
new file mode 100644
index 000000000..d79db7419
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_illegal_dumping.lua
@@ -0,0 +1,173 @@
+Config.Callouts["illegal_dumping"] = {
+
+ Enabled = true,
+ CalloutName = "Illegal Waste Dump",
+ CalloutDescriptions = {
+ "Respond to a report of illegal waste dumping; investigate the scene and take necessary actions.",
+ "Alert: unauthorized waste disposal in progress; deploy units to address the situation and ensure environmental safety.",
+ "Units needed: report of illegal dumping; focus on identifying the offenders and mitigating environmental impact.",
+ "Notice: illegal waste dump reported; act promptly to control the scene and prevent further contamination.",
+ "Alert: report of unauthorized waste disposal; intervention needed to stop the dumping and secure the area.",
+ "Incident reported: illegal waste dump; take action to investigate and enforce environmental regulations.",
+ "Respond to a situation involving unauthorized waste disposal; prioritize environmental protection and coordination with local authorities.",
+ "Situation alert: illegal dumping in progress; secure the area and investigate the incident.",
+ "Alert: report of unapproved waste disposal; respond swiftly to address the situation and ensure compliance with regulations.",
+ "Response needed: illegal waste dump; secure the area, investigate the offenders, and ensure adherence to environmental laws.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Fire.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = true,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(-660.74, 984.44, 238.79),
+ [2] = vector3(-1316.92, -1258.45, 4.58),
+ [3] = vector3(-1207.55, -2045.67, 14.37),
+ [4] = vector3(-680.96, -2477.55, 13.83),
+ [5] = vector3(1444.21, -2604.68, 48.29),
+ [6] = vector3(576.81, -2324.42, 5.91),
+ [7] = vector3(639.60, -1840.57, 9.32),
+ [8] = vector3(-459.00, -1720.25, 18.62),
+ [9] = vector3(1369.84, -748.74, 67.10),
+ [10] = vector3(689.30, -981.94, 23.51),
+ [11] = vector3(503.83, -582.16, 24.76),
+ [12] = vector3(-240.22, -1667.63, 33.49),
+ [13] = vector3(-632.16, 410.67, 101.04),
+ [14] = vector3(584.70, 126.32, 98.04),
+ [15] = vector3(850.27, 1276.24, 359.66),
+ [16] = vector3(2396.01, 3113.06, 48.15),
+ [17] = vector3(1433.38, 2793.44, 52.40),
+ [18] = vector3(202.73, 2793.21, 45.66),
+ [19] = vector3(2414.30, 3742.92, 41.78),
+ [20] = vector3(2921.07, 4634.95, 48.55),
+ [21] = vector3(2145.48, 3891.38, 33.18),
+ [22] = vector3(341.01, 3566.12, 33.46),
+ [23] = vector3(1412.42, 3752.11, 32.31),
+ [24] = vector3(360.36, 4445.27, 62.92),
+ [25] = vector3(3794.42, 4461.90, 5.42),
+ [26] = vector3(1384.47, 6582.36, 13.08),
+ [27] = vector3(-202.06, 6541.56, 11.10),
+ [28] = vector3(-735.59, 5814.26, 17.42),
+ [29] = vector3(-229.14, 6258.89, 31.49),
+ [30] = vector3(80.08, 6326.47, 31.23),
+ [31] = vector3(437.61, 6539.34, 27.99),
+ [32] = vector3(-1634.07, 4736.70, 53.25),
+ [33] = vector3(-1577.25, 5157.76, 19.91),
+ [34] = vector3(-942.45, 5427.65, 38.09),
+ [35] = vector3(1474.00, 6359.01, 23.66),
+ },
+ PedChanceToFleeFromPlayer = 100, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 10000,-- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 15000,-- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "flee", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+
+ for index, objNetId in pairs(objectList) do
+ local obj = NetToObj(objNetId)
+ if DoesEntityExist(obj) then
+ ERS_RequestNetControlForEntity(obj)
+ PlaceObjectOnGroundProperly(obj)
+ end
+ end
+
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ ERS_RequestNetControlForEntity(veh)
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ if index == 1 then
+ ERS_SetPedToFleeFromPlayer(ped)
+ end
+
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(vehicleList, 15000)
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+ ERS_CreateTemporaryBlipForEntities(objectList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+
+ local diameter = 20
+
+ -- Build objects
+ local randomAmountOfObjects = math.random(3,10)
+ for i = 1, randomAmountOfObjects do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local objModel = ERS_GetRandomModel(Config.randomWasteDumpObjects)
+ local objCoords = vector3(coords.x, coords.y, coords.z+2.0)
+ local objHeading = math.random(360)
+ local objNetId = ERS_CreateObject(objModel, objCoords, objHeading)
+ if objNetId then
+ local obj = NetworkGetEntityFromNetworkId(objNetId)
+ table.insert(objectList, objNetId)
+ else
+ DebugPrint("^1ERROR ^7Could not create object: "..objModel)
+ end
+
+ local fireToObjChance = math.random(100)
+ if fireToObjChance > 75 then
+ -- Build fire
+ if UsingSmartFires then
+ -- Full version
+ local fireSize = Config.RandomSmallFireOrSmokeSize[math.random(#Config.RandomSmallFireOrSmokeSize)]
+ local fireType = Config.NormalFireTypes[math.random(#Config.NormalFireTypes)]
+ local fireId = exports['SmartFires']:CreateFire(vector3(coords.x, coords.y, coords.z-0.5), fireSize, fireType)
+ DebugPrint("Created fire with ID: "..fireId)
+ table.insert(fireList, fireId)
+ else
+ -- Lite version
+ local fireSize = Config.RandomSmallFireOrSmokeSize[math.random(#Config.RandomSmallFireOrSmokeSize)]
+ local fireType = "normal"
+ local fireId = exports['SmartFiresLite']:CreateFire(vector3(coords.x, coords.y, coords.z-0.5), fireSize, fireType)
+ DebugPrint("Created fire with SmartFiresLite with ID: "..fireId)
+ table.insert(fireList, fireId)
+ end
+ end
+ end
+
+ -- Build vehicle
+ local vehModel = ERS_GetRandomModel(Config.randomVans)
+ local vehType = "automobile"
+ local vehCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build ped
+ local seatIndex = -1
+ for i = 1, 2 do
+ local pedModel = ERS_GetRandomModel(Config.randomGangPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z+3.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ ERS_SetPedIntoVehicle(ped, vehicle, seatIndex)
+ seatIndex = seatIndex + 1
+ table.insert(pedList, pedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_illegal_hunting.lua b/resources/night_ers/callouts/plugins/callout_illegal_hunting.lua
new file mode 100644
index 000000000..03aea7944
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_illegal_hunting.lua
@@ -0,0 +1,115 @@
+Config.Callouts["illegal_hunting"] = {
+
+ Enabled = true,
+ CalloutName = "Illegal hunting activity reported",
+ CalloutDescriptions = {
+ "Emergency: respond immediately to reports of illegal hunting activity; ensure the safety of wildlife and apprehend the perpetrators.",
+ "Urgent alert: dispatch units to the location where illegal hunting has been reported; prevent further harm to wildlife and enforce regulations.",
+ "Critical response: attend to reports of illegal hunting; prioritize apprehending the hunters and preserving the natural habitat.",
+ "Immediate action: investigate reports of illegal hunters; secure the area and protect endangered species.",
+ "Alert: respond to a situation involving illegal hunting; take necessary measures to enforce wildlife protection laws.",
+ "Incident reported: handle reports of illegal hunting activity; coordinate with environmental authorities to manage the situation.",
+ "Situation alert: assist in stopping illegal hunting; ensure the safety of wildlife and prevent further unlawful activities.",
+ "Emergency response: deal with reports of illegal hunting; follow protocols to apprehend offenders and protect wildlife.",
+ "Immediate intervention: respond to illegal hunting incidents; prioritize conservation efforts and enforce legal consequences.",
+ "Response needed: investigate reports of illegal hunting urgently; take appropriate actions to safeguard wildlife and enforce regulations.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(304.4698, 4341.0410, 49.3768),
+ [2] = vector3(504.2131, 763.4841, 204.5995),
+ [3] = vector3(1207.5034, 1962.9425, 68.4958),
+ [4] = vector3(761.4645, 2819.7319, 63.7832),
+ [5] = vector3(-291.2993, 3406.9119, 143.1390),
+ [6] = vector3(-388.7302, 4298.3594, 53.2579),
+ [7] = vector3(-1408.7485, 4553.0562, 59.9540),
+ [8] = vector3(-693.2683, 5127.5913, 125.8998),
+ [9] = vector3(-478.4487, 5664.6099, 59.8453),
+ [10] = vector3(1537.3450, 6494.9561, 22.3388),
+ [11] = vector3(1864.3669, 6475.7451, 86.6147),
+ [12] = vector3(3315.1624, 5023.2134, 24.5438),
+ [13] = vector3(3695.4143, 4492.2827, 21.6310),
+ [14] = vector3(3665.2588, 3772.9104, 21.7392),
+ [15] = vector3(2260.9492, 1897.1869, 120.5797),
+ [16] = vector3(1889.6501, 288.3779, 163.9660),
+ [17] = vector3(2272.6648, -580.2591, 103.8383),
+ [18] = vector3(-2053.5574, 1446.3859, 274.9150),
+ [19] = vector3(27.9638, 2623.7949, 85.9685),
+ [20] = vector3(103.2002, 3011.1301, 48.4709),
+ },
+ PedChanceToFleeFromPlayer = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 10, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 100, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 25000, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 40000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "flee", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_marksmanrifle",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ local wildAnimal
+ local hunter
+ local hunterPedsList = {}
+ local coords = calloutDataClient.Coordinates
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ if index == 1 then
+ wildAnimal = ped
+ TaskWanderInArea(wildAnimal, coords.x, coords.y, coords.z, 40.0, 5000, 10000)
+ SetEntityHealth(wildAnimal, 200)
+ SetPedArmour(wildAnimal, 200)
+ else
+ hunter = ped
+ ERS_SpawnConfiguredWeaponForPed(hunter, calloutDataClient)
+ SetEntityHealth(hunter, 200)
+ SetPedArmour(hunter, 200)
+ SetPedAccuracy(hunter, 10)
+ TaskCombatPed(hunter, wildAnimal, 0, 16)
+ table.insert(hunterPedsList, pedNetId)
+ end
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, hunterPedsList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ -- 1 hunter, bad accuracy, deer. etc..
+
+ local diameter = 30
+
+ -- Build hunted wild animal
+ local randomWildAnimalPedModel = ERS_GetRandomModel(Config.huntedAnimals)
+ local wildAnimalPedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local wildAnimalPedHeading = math.random(360)
+ local wildAnimalPedNetId = ERS_CreatePed(randomWildAnimalPedModel, wildAnimalPedCoords, wildAnimalPedHeading)
+ local wildAnimalPed = NetworkGetEntityFromNetworkId(wildAnimalPedNetId)
+ table.insert(pedList, wildAnimalPedNetId)
+
+ -- Build suspect
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local pedModel = ERS_GetRandomModel(Config.randomHunterPeds)
+ local pedCoords = vector3(coords.x, coords.y, coords.z+3.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_illegal_mining.lua b/resources/night_ers/callouts/plugins/callout_illegal_mining.lua
new file mode 100644
index 000000000..aa7378e39
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_illegal_mining.lua
@@ -0,0 +1,77 @@
+Config.Callouts["illegal_mining"] = {
+
+ Enabled = true,
+ CalloutName = "Illegal mining activity",
+ CalloutDescriptions = {
+ "Respond to reports of illegal mining activity in the area; immediate intervention needed to halt operations and enforce regulations.",
+ "Emergency call: illegal mining operation detected; deploy units to investigate and prevent further environmental damage.",
+ "Urgent response required for suspected illegal mining activity; mobilize enforcement teams to enforce laws and protect natural resources.",
+ "Critical situation: unauthorized mining activity reported; respond swiftly to preserve the integrity of the environment and enforce regulations.",
+ "Alert: illegal mining operation underway; coordinate efforts to shut down operations and hold perpetrators accountable.",
+ "Suspected illegal mining activity reported; immediate action needed to safeguard the environment and prevent exploitation.",
+ "Handle an emergency involving illegal mining operations; prioritize environmental protection and enforcement of mining laws.",
+ "Emergency response: detected illegal mining activity; ensure compliance with regulations and mitigate environmental impact.",
+ "Urgent callout: illegal mining operation in progress; deploy resources to stop the activity and safeguard natural resources.",
+ "Critical situation: unauthorized mining activity detected; immediate intervention necessary to uphold legal standards and protect the environment.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Ambulance.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(2947.2610, 2801.1228, 41.2169),
+ [2] = vector3(2694.3813, 2909.6035, 36.3845),
+ [3] = vector3(3013.2708, 2925.5684, 63.9230),
+ [4] = vector3(2618.2444, 2176.4280, 18.0428),
+ },
+ PedChanceToFleeFromPlayer = 80, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 20, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 20, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 10000, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 15000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "flee", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_battleaxe",
+ "weapon_stone_hatchet",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ local scenario = "WORLD_HUMAN_CONST_DRILL"
+ TaskStartScenarioInPlace(ped, scenario, 0, true)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ local diameter = 20
+
+ -- Build suspect peds
+ local randomAmountOfSuspects = math.random(5)
+ for i = 1, randomAmountOfSuspects do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(coords.x, coords.y, coords.z+1.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_illegal_party.lua b/resources/night_ers/callouts/plugins/callout_illegal_party.lua
new file mode 100644
index 000000000..ca6f4f2f9
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_illegal_party.lua
@@ -0,0 +1,116 @@
+Config.Callouts["illegal_party"] = {
+
+ Enabled = true,
+ CalloutName = "Illegal Party",
+ CalloutDescriptions = {
+ "Respond to a report of an illegal party; manage the crowd and ensure compliance with local laws.",
+ "Alert: unauthorized party in progress; send units to address the situation and maintain public order.",
+ "Units needed: report of an unapproved gathering; focus on dispersing the crowd and restoring order.",
+ "Notice: illegal party reported; act promptly to control the scene and prevent potential disturbances.",
+ "Alert: report of an unauthorized party; intervention needed to ensure safety and adherence to regulations.",
+ "Incident reported: illegal party; take action to manage the crowd and enforce local laws.",
+ "Respond to a situation involving an unauthorized party; prioritize public safety and coordination with local authorities.",
+ "Situation alert: illegal party in progress; secure the area and manage the crowd.",
+ "Alert: report of an unapproved gathering; respond swiftly to address the situation and ensure public safety.",
+ "Response needed: unauthorized party; secure the area, manage the attendees, and ensure compliance with regulations.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(1180.83, -3242.74, 6.03),
+ [2] = vector3(382.12, -1227.18, 32.38),
+ [3] = vector3(146.43, -1279.99, 29.04),
+ [4] = vector3(501.40, -2159.42, 5.91),
+ [5] = vector3(367.48, -2668.01, 6.00),
+ [6] = vector3(-443.82, -2445.16, 6.00),
+ [7] = vector3(-1217.72, -1804.72, 3.71),
+ [8] = vector3(-1621.59, -1060.65, 13.09),
+ [9] = vector3(326.59, -210.93, 54.08),
+ [10] = vector3(685.86, 577.65, 130.46),
+ [11] = vector3(-459.34, -1713.22, 18.67),
+ [12] = vector3(-3081.01, 551.72, 2.34),
+ [13] = vector3(-2197.92, 4260.04, 48.04),
+ [14] = vector3(928.27, -2616.08, 6.10),
+ [15] = vector3(2828.00, -721.21, 1.94),
+ [16] = vector3(607.89, -387.84, 24.80),
+ [17] = vector3(-2230.76, -418.19, 3.73),
+ [18] = vector3(-934.01, 6172.48, 4.58),
+ [19] = vector3(178.33, 7044.23, 1.86),
+ [20] = vector3(2125.20, 4794.25, 41.15),
+ [21] = vector3(2041.08, 3177.06, 44.96),
+ [22] = vector3(341.01, 3566.12, 33.46),
+ [23] = vector3(-419.47, 1577.32, 355.83),
+ [24] = vector3(-859.44, 853.35, 202.88),
+ [25] = vector3(1542.65, 6625.82, 2.36),
+ },
+ PedChanceToFleeFromPlayer = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 10, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 10000,-- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 15000,-- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "flee", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ local soundFolder = "generic-sounds"
+ local soundFile = ERS_SelectRandomPartyMusic()
+ local soundVolume = LimitSoundVolume(0.1)
+ PlaySound(soundFolder, soundFile, soundVolume)
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+
+ local scenario = ERS_SelectRandomPartyScenario()
+ TaskStartScenarioInPlace(ped, scenario, 0, true)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+
+ local diameter = 15
+
+ -- Build peds
+ local randomAmountOfSuspects = math.random(10)
+ for i = 1, randomAmountOfSuspects do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(coords.x, coords.y, coords.z+1.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+ end
+
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local objModel = "prop_boombox_01"
+ local objCoords = vector3(coords.x, coords.y, coords.z)
+ local objHeading = math.random(360)
+ local objNetId = ERS_CreateObject(objModel, objCoords, objHeading)
+ if objNetId then
+ local obj = NetworkGetEntityFromNetworkId(objNetId)
+ table.insert(objectList, objNetId)
+ else
+ DebugPrint("^1ERROR ^7Could not create object: "..objModel)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_illegal_race.lua b/resources/night_ers/callouts/plugins/callout_illegal_race.lua
new file mode 100644
index 000000000..71c30de08
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_illegal_race.lua
@@ -0,0 +1,119 @@
+Config.Callouts["illegal_race"] = {
+
+ Enabled = true,
+ CalloutName = "Illegal Street Race",
+ CalloutDescriptions = {
+ "Respond immediately to an illegal street race; secure the area and prevent any accidents.",
+ "Emergency alert: illegal street race in progress; deploy units to manage the situation and ensure public safety.",
+ "Urgent response required: high-speed street racing detected; ensure the safety of bystanders and apprehend racers.",
+ "Critical situation: unauthorized street race; act swiftly to prevent accidents and control the scene.",
+ "Alert: illegal street race reported; immediate intervention needed to stop the race and ensure road safety.",
+ "Street race incident: illegal racing underway; urgent action needed to secure the streets and apprehend offenders.",
+ "Handle an illegal street race; prioritize public safety and coordinate with traffic enforcement units.",
+ "Emergency situation: street race in progress; ensure the area is safe and stop the racers.",
+ "Urgent alert: high-speed street racing; respond quickly to manage the scene and prevent further incidents.",
+ "Critical response needed: illegal street race detected; secure the area, ensure safety, and apprehend participants.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(-285.3925, -1832.0594, 26.7288),
+ [2] = vector3(-87.1607, -113.6892, 57.7443),
+ [3] = vector3(-165.5629, -377.4605, 33.3565),
+ [4] = vector3(-530.7234, -367.9998, 35.2181),
+ [5] = vector3(-225.3320, -2168.1885, 13.9838),
+ [6] = vector3(259.5528, -2228.2637, 6.9489),
+ [7] = vector3(582.2025, -2092.6011, 14.7787),
+ [8] = vector3(754.3458, -2073.8147, 29.2641),
+ [9] = vector3(1039.4996, -1884.3270, 29.0919),
+ [10] = vector3(1407.4314, -1749.7058, 65.9185),
+ [11] = vector3(1013.7170, -1435.1545, 35.6374),
+ [12] = vector3(858.6818, -1072.3356, 39.1867),
+ [13] = vector3(737.6019, -602.1349, 36.2894),
+ [14] = vector3(666.0109, -247.3925, 43.8801),
+ [15] = vector3(150.5485, 85.2522, 84.6272),
+ [16] = vector3(-537.0259, 254.9205, 83.0729),
+ [17] = vector3(-778.9194, 564.0609, 125.2098),
+ [18] = vector3(-1052.4857, 1178.5732, 216.5182),
+ [19] = vector3(-1431.6735, 1912.0579, 73.7801),
+ [20] = vector3(-1305.9124, 2536.4126, 18.9174),
+ [21] = vector3(-2350.6760, 3425.3782, 28.8471),
+ [22] = vector3(-2314.3596, 4168.1719, 38.7900),
+ [23] = vector3(-1917.4707, 4439.6279, 40.5788),
+ [24] = vector3(-1560.4316, 4733.1812, 50.4538),
+ [25] = vector3(-777.4516, 5262.8662, 89.9326),
+ [26] = vector3(170.4841, 4417.7505, 75.2792),
+ [27] = vector3(849.2275, 4230.1768, 50.8234),
+ [28] = vector3(1735.9677, 4574.9873, 39.7539),
+ [29] = vector3(2448.9150, 4597.9678, 36.9199),
+ [30] = vector3(2713.1785, 3906.6541, 43.5291),
+ },
+ PedChanceToFleeFromPlayer = 100, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 10000, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 15000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "flee", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ ERS_RequestNetControlForEntity(veh)
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ Wait(2500)
+ TaskReactAndFleePed(ped, plyPed)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(vehicleList, 30000)
+ ERS_CreateTemporaryBlipForEntities(pedList, 30000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+
+ local diameter = 20
+
+ -- Build vehicles & drivers
+ local amountOfStreetRacers = 2
+ for i = 1, amountOfStreetRacers do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local vehModel = ERS_GetRandomModel(Config.randomLuxuryVehicles)
+ local vehType = "automobile"
+ local vehCoords = vector3(coords.x, coords.y, coords.z+1.0)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(coords.x, coords.y, coords.z+2.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(ped, vehicle, -1)
+ table.insert(pedList, pedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_inj_bone_fracture.lua b/resources/night_ers/callouts/plugins/callout_inj_bone_fracture.lua
new file mode 100644
index 000000000..988c1a927
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_inj_bone_fracture.lua
@@ -0,0 +1,96 @@
+Config.Callouts["inj_bone_fracture"] = {
+
+ Enabled = true,
+ CalloutName = "Bone fracture with severe loss off blood",
+ CalloutDescriptions = {
+ "Assist a patient with a severe bone fracture; urgent medical care is necessary to manage the injury.",
+ "Emergency call: individual with a fractured bone; dispatch medical team for immediate support.",
+ "Critical situation: person has suffered a bone fracture; rapid response required to mitigate pain and stabilize.",
+ "Alert: significant bone fracture reported; send medical personnel to provide urgent care.",
+ "Person with a bone fracture needs assistance; ensure quick medical intervention to address the injury.",
+ "Immediate help needed for a bone fracture incident; prioritize patient care and pain management.",
+ "Respond to a call for a bone fracture; provide essential medical aid and support for the injured person.",
+ "Emergency response: severe bone fracture; deploy medical units to handle the situation effectively.",
+ "Urgent medical attention required for a bone fracture; focus on stabilizing and treating the patient.",
+ "Critical incident involving a bone fracture; prompt medical response needed to assist the affected individual.",
+ },
+ CalloutUnitsRequired = {
+ description = "Ambulance.",
+ policeRequired = false,
+ ambulanceRequired = true,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(792.9553, -240.9984, 66.1143),
+ [2] = vector3(842.8905, -260.9836, 67.9002),
+ [3] = vector3(1757.4556, 3327.4480, 41.3261),
+ [4] = vector3(1852.7067, 3849.6326, 33.0655),
+ [5] = vector3(1428.0652, 3667.6677, 39.7284),
+ [6] = vector3(585.1674, 2726.8047, 42.0601),
+ [7] = vector3(205.2145, 2441.6804, 59.2908),
+ [8] = vector3(826.9429, 1868.5367, 120.0712),
+ [9] = vector3(1417.9462, 1154.7434, 114.6737),
+ [10] = vector3(481.1850, 53.5993, 94.1020),
+ [11] = vector3(327.7636, -195.2430, 54.2264),
+ [12] = vector3(236.0775, -874.6152, 30.4921),
+ [13] = vector3(773.8135, -295.2217, 59.9715),
+ [14] = vector3(-320.6177, -1532.3145, 27.5748),
+ [15] = vector3(227.9964, -2978.5430, 7.4518),
+ [16] = vector3(782.0969, -3192.1824, 5.9008),
+ [17] = vector3(453.3673, -3081.0610, 6.0701),
+ [18] = vector3(949.4739, -3087.8894, 5.9008),
+ [19] = vector3(1536.4180, -2115.9968, 76.8700),
+ [20] = vector3(2597.9036, -268.9229, 92.8858),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_SetMovementAnimClipSetToPed(ped, "move_m@injured")
+ ERS_RequestNetControlForEntity(ped)
+ ERS_ApplyBloodToPed(ped)
+
+ local scenario = ERS_SelectRandomWoundedPersonScenario()
+ TaskStartScenarioInPlace(ped, scenario, 0, true)
+ end
+
+ Citizen.SetTimeout(math.random(20000), function()
+ if DoesEntityExist(ped) then
+ if not IsPedDeadOrDying(ped, true) then
+ ERS_RequestNetControlForEntity(ped)
+ ERS_SetPedToPassout(ped)
+ end
+ end
+ end)
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ --ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_inj_cardiac_arrest.lua b/resources/night_ers/callouts/plugins/callout_inj_cardiac_arrest.lua
new file mode 100644
index 000000000..f9d5137d1
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_inj_cardiac_arrest.lua
@@ -0,0 +1,134 @@
+Config.Callouts["inj_cardiac_arrest"] = {
+ Enabled = true,
+ CalloutName = "Cardiac arrest",
+ CalloutDescriptions = {
+ "A cardiac arrest has occurred, requiring immediate medical attention.",
+ "Emergency medical assistance is needed to address a cardiac arrest situation.",
+ "Reports indicate a cardiac arrest incident, necessitating urgent medical intervention.",
+ "A cardiac arrest has been reported, and medical support is needed to stabilize the patient.",
+ "Emergency services have been requested to address a cardiac arrest situation.",
+ "A request for medical assistance has been made by personnel responding to a cardiac arrest.",
+ "Additional medical units are required to support personnel responding to a cardiac arrest.",
+ "Emergency backup is required to assist medical personnel in stabilizing a patient experiencing a cardiac arrest.",
+ "A call for assistance has been issued by personnel dealing with a cardiac arrest.",
+ "Reports suggest a cardiac arrest situation where immediate medical assistance is crucial to save a life.",
+ },
+ CalloutUnitsRequired = {
+ description = "Ambulance.",
+ policeRequired = false,
+ ambulanceRequired = true,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(-802.40, 173.09, 72.84), -- Michel's house, Vinewood
+ [2] = vector3(-798.06, -101.23, 37.60), -- Portola Dr, Rockford hills
+ [3] = vector3(-252.35, -2040.25, 29.95), -- Maze bank arena
+ [4] = vector3(-1022.05, -2751.73, 1.01), -- Ls International airport
+ [5] = vector3(-10.97, -1433.83, 31.12), -- Franklins aunts house, Strawberry
+ [6] = vector3(2549.68, 382.84, 108.62), -- Palomino Fwy, Tataviam mount
+ [7] = vector3(1190.73, 2713.12, 38.22), -- Route 68, Binko clothing
+ [8] = vector3(-2193.41, 4293.39, 49.17), -- Great Ocean Hw, Chumash
+ [9] = vector3(15.75, 6499.83, 31.49), -- Paleto Blvd, Paleto Bay
+ [10] = vector3(61.15, 6940.83, 13.31), -- Paleto Blvd, Paleto Bay, beach
+ [11] = vector3(-1154.30, -1520.94, 10.63),
+ [12] = vector3(-1204.87, -1561.01, 4.61),
+ [13] = vector3(-1456.49, -240.12, 49.81),
+ [14] = vector3(253.01, 220.31, 106.29),
+ [15] = vector3(2663.66, 3928.24, 42.34),
+ [16] = vector3(2700.45, 3083.12, 42.76),
+ [17] = vector3(2632.89, 2946.15, 40.42),
+ [18] = vector3(2851.14, 3440.11, 50.92),
+ [19] = vector3(2453.31, 3854.3, 38.94),
+ [20] = vector3(2271.27, 3757.01, 38.42),
+ [21] = vector3(1820.61, 3507.98, 38.32),
+ [22] = vector3(1693.8, 3461.85, 37.02),
+ [23] = vector3(1184.28, 3267.64, 39.2),
+ [24] = vector3(-3040.17, 3745.06, 70.2),
+ [25] = vector3(-4050.71, 5335.75, 83.14),
+ [26] = vector3(-4043.33, 5599.94, 68.38),
+ [27] = vector3(2874.65, 4868.66, 62.6),
+ [28] = vector3(3000.5, 4099.68, 57.18),
+ [29] = vector3(-92.55, 6150.44, 31.8),
+ [30] = vector3(-1832.48, 2686.74, 4.24),
+ [31] = vector3(-1308.78, 2512.97, 21.74),
+ [32] = vector3(445.14, 3524.84, 33.53),
+ [33] = vector3(737.51, 3534.92, 34.08),
+ [34] = vector3(1345.39, 3643.31, 33.62),
+ [35] = vector3(1491.65, 3771.76, 33.51),
+ [36] = vector3(1812.97, 3836.61, 33.56),
+ [37] = vector3(2561.29, 4289.19, 41.60),
+ [38] = vector3(2415.94, 4813.70, 35.91),
+ [39] = vector3(2204.14, 5194.41, 60.96),
+ [40] = vector3(2692.64, 2785.85, 36.03),
+ [41] = vector3(2525.68, 2612.09, 37.94),
+ [42] = vector3(769.43, 203.60, 83.65),
+ [43] = vector3(95.80, -219.33, 54.48),
+ [44] = vector3(-160.23, -756.60, 41.92),
+ [45] = vector3(-270.76, -980.51, 31.21),
+ [46] = vector3(181.82, -936.06, 30.09),
+ [47] = vector3(237.88, -888.73, 30.49),
+ [48] = vector3(231.81, -751.09, 30.82),
+ [49] = vector3(1305.96, -587.50, 71.80),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+ local deadPed = 0
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ if index == 1 then
+ deadPed = ped
+ SetEntityHealth(ped, 0)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ else
+ TaskGoToEntity(ped, deadPed, -1, 3.0, 10.0, 1073741824.0, 0)
+ Wait(math.random(5000))
+ TaskTurnPedToFaceEntity(ped, deadPed, 2000)
+ Wait(1000)
+ local scenario = ERS_SelectRandomBystanderScenario()
+ TaskStartScenarioInPlace(ped, scenario, 0, true)
+ end
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+ -- Build victim
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+
+ -- Build bystanders
+ local randomAmountOfBystanders = math.random(4)
+ for i = 1, randomAmountOfBystanders do
+ local diameter = 6
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+
+ local bystanderPedModel = ERS_GetRandomModel(Config.randomPeds)
+ local bystanderPedCoords = vector3(coords.x, coords.y, coords.z)
+ local bystanderPedHeading = math.random(360)
+ local bystanderPedNetId = ERS_CreatePed(bystanderPedModel, bystanderPedCoords, bystanderPedHeading)
+ local bystanderPed = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, bystanderPedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_inj_drowning.lua b/resources/night_ers/callouts/plugins/callout_inj_drowning.lua
new file mode 100644
index 000000000..9fb7dcc9c
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_inj_drowning.lua
@@ -0,0 +1,89 @@
+Config.Callouts["inj_drowning"] = {
+
+ Enabled = true,
+ CalloutName = "Reports of a Drowning",
+ CalloutDescriptions = {
+ "Respond to a report of a drowning; locate the individual and provide immediate assistance.",
+ "Alert: possible drowning incident; deploy units to the location and ensure prompt rescue efforts.",
+ "Units needed: report of a person drowning; focus on rescuing the individual and providing necessary medical aid.",
+ "Notice: drowning incident reported; act promptly to rescue the person and prevent further danger.",
+ "Alert: report of a drowning; intervention needed to save the individual and ensure safety.",
+ "Incident reported: person drowning; take action to rescue and administer first aid.",
+ "Respond to a situation involving a drowning; prioritize the rescue and coordinate with emergency services.",
+ "Situation alert: drowning in progress; secure the area and provide immediate assistance to the individual.",
+ "Alert: report of a drowning; respond swiftly to rescue the person and ensure their safety.",
+ "Response needed: drowning incident; rescue the individual, provide medical aid, and ensure the area is safe.",
+ },
+ CalloutUnitsRequired = {
+ description = "Ambulance.",
+ policeRequired = false,
+ ambulanceRequired = true,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(-1639.65, -2380.76, 1.29),
+ [2] = vector3(-1534.27, -1315.52, 1.09),
+ [3] = vector3(-1785.31, -1016.55, 0.74),
+ [4] = vector3(-2132.12, -513.91, 1.85),
+ [5] = vector3(1094.68, -2682.35, 2.24),
+ [6] = vector3(2344.83, -2136.04, 1.30),
+ [7] = vector3(-1616.36, -2312.97, 1.36),
+ [8] = vector3(-3106.82, 107.83, 2.83),
+ [9] = vector3(602.10, -1103.62, 10.13),
+ [10] = vector3(1161.76, -119.16, 55.56),
+ [11] = vector3(35.49, 769.50, 197.24),
+ [12] = vector3(-1108.14, 135.07, 59.40),
+ [13] = vector3(1911.35, 285.13, 161.66),
+ [14] = vector3(-1175.26, -1016.70, 0.58),
+ [15] = vector3(-1060.38, 704.26, 165.42),
+ [16] = vector3(-56.61, 807.01, 226.98),
+ [17] = vector3(-1773.77, 439.62, 127.34),
+ [18] = vector3(-2997.52, 753.23, 26.69),
+ [19] = vector3(-3114.40, 435.10, 1.64),
+ [20] = vector3(14.85, 521.72, 170.22),
+ [21] = vector3(-764.52, 2869.57, 14.38),
+ [22] = vector3(-2783.95, 2714.57, 1.71),
+ [23] = vector3(181.55, 3616.83, 30.99),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ SetEntityHealth(ped, 0)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+
+ -- Build ped
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z+1.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_inj_electrocution.lua b/resources/night_ers/callouts/plugins/callout_inj_electrocution.lua
new file mode 100644
index 000000000..eb604653a
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_inj_electrocution.lua
@@ -0,0 +1,88 @@
+Config.Callouts["inj_electrocution"] = {
+
+ Enabled = true,
+ CalloutName = "A person has been electrocuted",
+ CalloutDescriptions = {
+ "Emergency: respond to reports of a person being electrocuted; ensure the safety of bystanders and provide immediate medical aid.",
+ "Urgent alert: dispatch units to the location of an electrocution; secure the area and administer life-saving measures.",
+ "Critical response required: attend to reports of an electrocution; coordinate with medical personnel to perform necessary interventions.",
+ "Notice: check reports of a person electrocuted; take immediate action to secure the area and provide medical assistance.",
+ "Alert: respond promptly to an electrocution incident; prioritize victim care and prevent further hazards.",
+ "Incident reported: investigate a person electrocuted; collaborate with emergency services to stabilize the victim.",
+ "Immediate action: address reports of electrocution; implement protocols to ensure safety and provide medical attention.",
+ "Situation alert: assist in managing an electrocution incident; ensure the area is safe and provide support to medical teams.",
+ "Emergency response: handle reports of a person electrocuted; follow medical protocols to save lives and maintain safety.",
+ "Response needed: investigate reports of a person electrocuted urgently; take appropriate actions to prevent further harm and provide necessary aid.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Ambulance.",
+ policeRequired = true,
+ ambulanceRequired = true,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(1353.1198, 3602.6426, 34.8422),
+ [2] = vector3(2647.1370, 553.8140, 95.7575),
+ [3] = vector3(2094.0078, 2325.3831, 94.2853),
+ [4] = vector3(2278.6301, 2969.2185, 46.5811),
+ [5] = vector3(2840.2234, 1553.8225, 24.5741),
+ [6] = vector3(2821.8545, 1511.8513, 24.7242),
+ [7] = vector3(2458.3921, 1457.0712, 36.2040),
+ [8] = vector3(1127.5670, -2489.8242, 33.3611),
+ [9] = vector3(233.3477, 6399.8403, 31.6335),
+ [10] = vector3(1346.0159, 6383.4556, 33.4101),
+ [11] = vector3(2050.1416, 3683.3496, 34.5879),
+ [12] = vector3(683.1802, 120.5065, 80.7545),
+ [13] = vector3(2670.0710, 1395.4910, 24.5107),
+ [14] = vector3(2836.6687, 1573.3999, 24.7241),
+ [15] = vector3(2617.8452, 1690.0687, 27.5987),
+ [16] = vector3(2560.6836, 2580.0842, 37.9533),
+ [17] = vector3(2147.8455, 3386.1294, 45.4485),
+ [18] = vector3(1686.9581, 3592.4873, 35.6091),
+ [19] = vector3(1532.7958, 3795.6772, 33.5183),
+ [20] = vector3(4-679.5399, 5790.6323, 17.3309),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed"
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ ERS_ApplyBloodToPed(ped)
+
+ local pedLoc = GetEntityCoords(ped)
+ ShootSingleBulletBetweenCoordsPresetParams(pedLoc.x, pedLoc.y, pedLoc.z+1.0, pedLoc.x, pedLoc.y, pedLoc.z, 200.0, 100, GetHashKey("WEAPON_STUNGUN"), plyPed, false, true, 500.0)
+ PlayPain(ped, 20, 1, 1)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ -- Build victim
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_inj_stroke.lua b/resources/night_ers/callouts/plugins/callout_inj_stroke.lua
new file mode 100644
index 000000000..bae6502c2
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_inj_stroke.lua
@@ -0,0 +1,81 @@
+Config.Callouts["inj_stroke"] = {
+
+ Enabled = true,
+ CalloutName = "Reports of a person having a stroke",
+ CalloutDescriptions = {
+ "Respond to a report of a stroke; provide immediate medical assistance and transport to the hospital.",
+ "Alert: suspected stroke; deploy medical units to the location and administer life-saving treatment.",
+ "Units needed: emergency call for a stroke; focus on stabilizing the patient and ensuring rapid transport.",
+ "Notice: stroke reported; act promptly to provide critical care and support.",
+ "Alert: report of a stroke; intervention needed to save the patient's life and ensure timely hospital admission.",
+ "Incident reported: stroke; take action to deliver urgent medical care and monitor the patient's condition.",
+ "Respond to a situation involving a stroke; prioritize patient stabilization and prepare for transport.",
+ "Situation alert: stroke in progress; provide immediate medical intervention and ensure safe transfer to medical facilities.",
+ "Alert: report of a severe stroke; respond swiftly to address the medical emergency and administer necessary care.",
+ "Response needed: stroke; provide advanced stroke life support, stabilize the patient, and transport them to the hospital.",
+ },
+ CalloutUnitsRequired = {
+ description = "Ambulance.",
+ policeRequired = false,
+ ambulanceRequired = true,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(473.6247, -37.2914, 79.5529),
+ [2] = vector3(432.7529, 32.2285, 90.8419),
+ [3] = vector3(-1217.9330, -1719.4886, 4.4694),
+ [4] = vector3(-1373.3690, -1591.1857, 2.4133),
+ [5] = vector3(-1374.0642, -1121.7670, 4.5113),
+ [6] = vector3(-1425.6643, -715.1627, 23.5732),
+ [7] = vector3(-603.4052, -37.7887, 42.6923),
+ [8] = vector3(-101.1286, 213.4689, 94.9700),
+ [9] = vector3(950.3441, -470.7156, 61.1370),
+ [10] = vector3(1264.8539, -495.4488, 69.0965),
+ [11] = vector3(1366.7874, -600.0669, 74.3363),
+ [12] = vector3(292.1092, -1141.3961, 29.3440),
+ [13] = vector3(-104.8924, -1594.4504, 31.5167),
+ [14] = vector3(-244.0072, -2048.8423, 27.7512),
+ [15] = vector3(-683.5329, -2275.6919, 13.0480),
+ [16] = vector3(-1024.1530, -2697.4939, 13.7004),
+ [17] = vector3(-1122.9849, -1997.5364, 13.1377),
+ [18] = vector3(-3098.3879, 243.1394, 12.3798),
+ [19] = vector3(-195.9645, 6320.5688, 31.5073),
+ [20] = vector3(163.7554, 6592.9429, 31.8462),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none",-- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ SetEntityHealth(ped, 0)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z+1.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_inj_suffocation.lua b/resources/night_ers/callouts/plugins/callout_inj_suffocation.lua
new file mode 100644
index 000000000..9b9ad6a0f
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_inj_suffocation.lua
@@ -0,0 +1,110 @@
+Config.Callouts["inj_suffocation"] = {
+
+ Enabled = true,
+ CalloutName = "Suffocation",
+ CalloutDescriptions = {
+ "Emergency: investigate reports of a potential suffocation incident; secure the area and administer first aid.",
+ "Urgent alert: dispatch units to respond to reports of suffocation; provide immediate medical assistance.",
+ "Critical response required: attend to reports of a suffocation case; perform necessary life-saving actions.",
+ "Notice: check reports of suffocation; ensure quick medical intervention and safety measures.",
+ "Alert: respond promptly to reports of suffocation; prioritize victim's safety and administer oxygen if needed.",
+ "Incident reported: investigate reports of suffocation to prevent fatal outcomes; coordinate with medical teams.",
+ "Immediate action: address reports of a person suffocating; implement rescue operations and ensure safety.",
+ "Situation alert: attend to suffocation reports; secure the area and provide life-saving support.",
+ "Emergency response: handle reports of suffocation and follow medical protocols to ensure survival.",
+ "Response needed: investigate suffocation reports urgently; take appropriate actions to save lives and prevent harm.",
+ },
+ CalloutUnitsRequired = {
+ description = "Ambulance",
+ policeRequired = false,
+ ambulanceRequired = true,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(-1417.2120, -1615.8606, 0.1448),
+ [2] = vector3(251.6226, -1503.1725, 29.1405),
+ [3] = vector3(-153.3584, -1352.1089, 29.8504),
+ [4] = vector3(-400.0376, -1445.8768, 29.3115),
+ [5] = vector3(-866.9430, -861.7206, 18.4204),
+ [6] = vector3(-1217.7489, -505.0577, 30.9675),
+ [7] = vector3(-1090.9929, 80.6599, 54.5098),
+ [8] = vector3(-41.2845, 228.3184, 107.9620),
+ [9] = vector3(1091.1876, -698.9880, 57.4586),
+ [10] = vector3(391.5157, -1442.1150, 29.4271),
+ [11] = vector3(-616.9894, -629.8798, 32.1431),
+ [12] = vector3(-667.2766, -230.0070, 37.1263),
+ [13] = vector3(-676.4556, -169.8028, 37.5968),
+ [14] = vector3(617.5099, 273.6443, 102.9611),
+ [15] = vector3(599.5178, 2728.1765, 41.9364),
+ [16] = vector3(1823.3440, 3742.6594, 33.3723),
+ [17] = vector3(1980.1499, 3814.6687, 32.1411),
+ [18] = vector3(2008.8790, 4989.6445, 41.3342),
+ [19] = vector3(236.8464, 2590.3799, 45.1829),
+ [20] = vector3(-1226.6552, -1493.0027, 4.3844),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ local deadPed = 0
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ if index == 1 then
+ deadPed = ped
+ SetEntityHealth(ped, 0)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ else
+ TaskGoToEntity(ped, deadPed, -1, 3.0, 10.0, 1073741824.0, 0)
+ Wait(math.random(5000))
+ TaskTurnPedToFaceEntity(ped, deadPed, 2000)
+ Wait(1000)
+ local scenario = ERS_SelectRandomBystanderScenario()
+ TaskStartScenarioInPlace(ped, scenario, 0, true)
+ end
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ -- Build victim
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+
+ -- Build bystanders
+ local randomAmountOfBystanders = math.random(4)
+ for i = 1, randomAmountOfBystanders do
+ local diameter = 6
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+
+ local bystanderPedModel = ERS_GetRandomModel(Config.randomPeds)
+ local bystanderPedCoords = vector3(coords.x, coords.y, coords.z)
+ local bystanderPedHeading = math.random(360)
+ local bystanderPedNetId = ERS_CreatePed(bystanderPedModel, bystanderPedCoords, bystanderPedHeading)
+ local bystanderPed = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, bystanderPedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_missing_found.lua b/resources/night_ers/callouts/plugins/callout_missing_found.lua
new file mode 100644
index 000000000..42779d2e2
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_missing_found.lua
@@ -0,0 +1,79 @@
+Config.Callouts["missing_found"] = {
+
+ Enabled = true,
+ CalloutName = "Missing person located",
+ CalloutDescriptions = {
+ "Emergency responders have located a missing person and are providing assistance.",
+ "Authorities report that a missing person has been found, requiring immediate medical attention.",
+ "A missing person has been located, necessitating urgent action to ensure their safety.",
+ "Critical situation with a missing person located; medical personnel are needed for support.",
+ "Immediate response needed to provide medical assistance to the located missing person.",
+ "A missing person has been found, posing a severe threat to their health; medical reinforcements are necessary.",
+ "Emergency crews are requesting medical backup to assist in providing care to the located missing person.",
+ "An urgent call for help has been issued to handle a located missing person and ensure their well-being.",
+ "Responders are on the scene with a located missing person and need extra support to provide necessary care.",
+ "A serious emergency involving a missing person demands swift action to provide medical attention and ensure their recovery.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(1837.21, 193.28, 171.54),
+ [2] = vector3(-1599.52, -1043.22, 13.02),
+ [3] = vector3(-1639.43, 4734.02, 53.52),
+ [4] = vector3(2337.29, 4931.56, 42.05),
+ [5] = vector3(-1580.69, 2094.19, 69.17),
+ -- Add more to 40
+ },
+ PedChanceToFleeFromPlayer = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 1000, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 10000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "flee", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_hammer",
+ "weapon_stone_hatchet",
+ "weapon_wrench",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ ERS_ApplyBloodToPed(ped)
+ local animClipSet = ERS_SelectRandomMovementClipSet()
+ ERS_SetMovementAnimClipSetToPed(ped, animClipSet)
+ TaskWanderStandard(ped, 10.0, 10)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ local diameter = 10
+
+ -- Build ped
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(coords.x, coords.y, coords.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_moneytruck_incident.lua b/resources/night_ers/callouts/plugins/callout_moneytruck_incident.lua
new file mode 100644
index 000000000..1daab1e12
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_moneytruck_incident.lua
@@ -0,0 +1,175 @@
+Config.Callouts["moneytruck_incident"] = {
+
+ Enabled = true,
+ CalloutName = "Incident with a Money Truck",
+ CalloutDescriptions = {
+ "Respond immediately to a report involving a money truck; secure the area and ensure the safety of personnel and assets.",
+ "Emergency alert: incident with a money truck; deploy units to manage the situation and protect the cargo.",
+ "Urgent response required: money truck involved in an incident; focus on securing the vehicle and safeguarding the valuables.",
+ "Critical situation: money truck emergency; act swiftly to provide assistance and control the scene.",
+ "Alert: money truck incident reported; immediate intervention needed to ensure the security of the truck and its contents.",
+ "Money truck incident: urgent action required to secure the area and assist the personnel involved.",
+ "Handle an emergency involving a money truck; prioritize the security of the assets and coordinate with law enforcement.",
+ "Emergency situation: money truck in trouble; ensure the area is safe and assist in securing the cargo.",
+ "Urgent alert: money truck incident; respond quickly to manage the scene and protect the valuables.",
+ "Critical response needed: incident with a money truck; secure the area, assist the personnel, and ensure the safety of the assets.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Ambulance, Fire, Tow.",
+ policeRequired = true,
+ ambulanceRequired = true,
+ fireRequired = true,
+ towRequired = true,
+ },
+ CalloutLocations = {
+ [1] = vector3(875.4945, -688.0707, 43.0357),
+ [2] = vector3(1719.8188, 4609.8384, 42.2503),
+ [3] = vector3(2537.9226, 5092.7334, 44.0742),
+ [4] = vector3(2771.3525, 4398.0645, 49.0240),
+ [5] = vector3(2362.5691, 2962.7026, 48.9666),
+ [6] = vector3(1707.8932, 1505.2977, 84.7929),
+ [7] = vector3(356.2293, -264.4918, 53.9432),
+ [8] = vector3(-393.4785, -2.1186, 46.9674),
+ [9] = vector3(-1027.6091, -187.3826, 37.7828),
+ [10] = vector3(-1714.3776, -541.1097, 37.4315),
+ [11] = vector3(-2877.8933, 59.8339, 14.1071),
+ [12] = vector3(-3159.2134, 916.8397, 14.3760),
+ [13] = vector3(-2718.2336, 2273.2571, 19.6467),
+ [14] = vector3(-1705.6680, 4793.6533, 59.4235),
+ [15] = vector3(-765.0125, 5497.1079, 34.9195),
+ [16] = vector3(-580.3328, 6125.1748, 7.4043),
+ [17] = vector3(-23.4844, 6507.6704, 31.3663),
+ [18] = vector3(-105.1847, 6443.0786, 31.2827),
+ [19] = vector3(-900.0214, -829.4100, 17.4409),
+ [20] = vector3(-349.2408, -1639.5975, 19.1104),
+ [21] = vector3(735.6824, -2816.4446, 6.2865),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ ERS_RequestNetControlForEntity(veh)
+ local pos = GetEntityCoords(veh, false)
+ local foundGround, groundZ = GetGroundZFor_3dCoord(pos.x, pos.y, pos.z, false)
+
+ if foundGround then
+ SetEntityCoords(veh, pos.x, pos.y, groundZ, false, false, false, false)
+ end
+
+ SetEntityRotation(veh, 0, -90.01, 0, 2, true)
+ ERS_SetRandomDamageToVehicle(veh)
+ SetVehicleBodyHealth(veh, 0)
+ SetVehicleEngineHealth(veh, 0)
+ end
+ end
+
+ for index, objNetId in pairs(objectList) do
+ local obj = NetToObj(objNetId)
+ if DoesEntityExist(obj) then
+ ERS_RequestNetControlForEntity(obj)
+ PlaceObjectOnGroundProperly(obj)
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ local chance = math.random(100)
+ if chance > 50 then
+ local scenario = ERS_SelectRandomWoundedPersonScenario()
+ TaskStartScenarioInPlace(ped, scenario, 0, true)
+ else
+ SetEntityHealth(ped, 0)
+ end
+ ERS_ApplyBloodToPed(ped)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(vehicleList, 15000)
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+ ERS_CreateTemporaryBlipForEntities(objectList, 15000)
+
+ -- ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ local diameter = 20
+
+ -- Build vehicle
+ local vehModel = "stockade"
+ local vehType = "automobile"
+ local vehCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build ped
+ local seatIndex = -1
+ for i = 1, 2 do
+ local pedModel = ERS_GetRandomModel(Config.randomMoneyTransportPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z+3.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(ped, vehicle, seatIndex)
+ seatIndex = seatIndex + 1
+ table.insert(pedList, pedNetId)
+ end
+
+ -- Build objects
+ local randomAmountOfObjects = math.random(3,10)
+ for i = 1, randomAmountOfObjects do
+ local diameter = 20
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+
+ local objModel = ERS_GetRandomModel(Config.randomMoneyObjects)
+ local objCoords = vector3(coords.x, coords.y, coords.z)
+ local objHeading = math.random(360)
+ local objNetId = ERS_CreateObject(objModel, objCoords, objHeading)
+ if objNetId then
+ local obj = NetworkGetEntityFromNetworkId(objNetId)
+ table.insert(objectList, objNetId)
+ else
+ DebugPrint("^1ERROR ^7Could not create object: "..objModel)
+ end
+
+ local fireToObjChance = math.random(100)
+ if fireToObjChance > 75 then
+ -- Build fire
+ if UsingSmartFires then
+ -- Full version
+ local fireSize = Config.RandomSmallFireOrSmokeSize[math.random(#Config.RandomSmallFireOrSmokeSize)]
+ local fireType = Config.NormalFireTypes[math.random(#Config.NormalFireTypes)]
+ local fireId = exports['SmartFires']:CreateFire(vector3(coords.x, coords.y, coords.z-0.5), fireSize, fireType)
+ DebugPrint("Created fire with ID: "..fireId)
+ table.insert(fireList, fireId)
+ else
+ -- Lite version
+ local fireSize = Config.RandomSmallFireOrSmokeSize[math.random(#Config.RandomSmallFireOrSmokeSize)]
+ local fireType = "normal"
+ local fireId = exports['SmartFiresLite']:CreateFire(vector3(coords.x, coords.y, coords.z-0.5), fireSize, fireType)
+ DebugPrint("Created fire with SmartFiresLite with ID: "..fireId)
+ table.insert(fireList, fireId)
+ end
+ end
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_moneytruck_raid.lua b/resources/night_ers/callouts/plugins/callout_moneytruck_raid.lua
new file mode 100644
index 000000000..9040ec2e3
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_moneytruck_raid.lua
@@ -0,0 +1,211 @@
+Config.Callouts["moneytruck_raid"] = {
+
+ Enabled = true,
+ CalloutName = "Active raid on money truck",
+ CalloutDescriptions = {
+ "Respond to an active raid on a money truck; immediate action required to neutralize suspects and secure the funds.",
+ "Emergency response needed for an ongoing raid on a money truck; deploy units to intervene and protect the valuable cargo.",
+ "Urgent call to respond to an active raid on a money truck; mobilize resources to thwart the perpetrators and safeguard the funds.",
+ "Money truck under attack; respond swiftly to prevent the theft of valuable assets and ensure public safety.",
+ "Incident alert: raid on a money truck; deploy specialized units to counter the threat and secure the funds.",
+ "Emergency response required for an active raid on a money truck; prioritize protecting the assets and apprehending the assailants.",
+ "Respond to the ongoing raid on a money truck; expedite efforts to neutralize the threat and safeguard the valuable cargo.",
+ "Money truck under siege; activate emergency protocols and coordinate with units to suppress the raid and protect the funds.",
+ "Immediate response needed for an active raid on a money truck; prioritize the safety of civilians and the security of the assets.",
+ "Urgent callout: raid on a money truck; respond promptly to neutralize the threat and ensure the integrity of the operation.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(204.0068, 197.2750, 105.5652),
+ [2] = vector3(1288.0315, 3541.9167, 35.1836),
+ [3] = vector3(2314.9722, 3859.9841, 34.8134),
+ [4] = vector3(353.8910, -520.1240, 34.1515),
+ [5] = vector3(736.7793, -1174.7837, 44.8672),
+ [6] = vector3(-268.7205, -1124.7623, 23.0979),
+ [7] = vector3(29.2399, -273.9065, 47.7049),
+ [8] = vector3(24.6531, 258.0385, 109.5969),
+ [9] = vector3(-1621.2246, -272.0746, 52.8909),
+ [10] = vector3(-1768.3605, 63.5210, 68.3115),
+ [11] = vector3(236.9416, 6563.9238, 31.0833),
+ [12] = vector3(123.5326, 6604.4155, 31.4928),
+ [13] = vector3(-122.8901, 6455.9414, 31.4685),
+ [14] = vector3(-2706.8562, 2302.3909, 18.0392),
+ [15] = vector3(-2048.6133, 1928.3405, 187.5260),
+ [16] = vector3(217.2915, 3131.1104, 42.3544),
+ [17] = vector3(1599.0537, 3669.8826, 34.5075),
+ [18] = vector3(790.1103, 156.8885, 81.2086),
+ [19] = vector3(29.8005, -770.7616, 44.2360),
+ [20] = vector3(-640.6522, -655.5369, 31.7352),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 100, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 5000, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 10000,-- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_pistol",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+
+ local moneyTruckPedsList = {}
+ local moneyTruck
+ local suspectPedList = {}
+ local suspectVehicle
+ local plyGroupHash = GetPedRelationshipGroupHash(plyPed)
+ local retval, suspectGroupHash = AddRelationshipGroup("SUSPECT_GROUP_HASH")
+
+ SetRelationshipBetweenGroups(5, suspectGroupHash, plyGroupHash)
+ SetRelationshipBetweenGroups(4, plyGroupHash, suspectGroupHash)
+
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ ERS_RequestNetControlForEntity(veh)
+
+ local vehModel = GetEntityModel(veh)
+ if vehModel == GetHashKey("stockade") then
+ moneyTruck = veh
+ else
+ suspectVehicle = veh
+ end
+ end
+ end
+
+ -- Set ped into teams
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ if IsPedInVehicle(ped, moneyTruck, true) then
+ SetPedRelationshipGroupHash(ped, plyGroupHash)
+ SetEntityCanBeDamagedByRelationshipGroup(ped, false, plyGroupHash)
+ table.insert(moneyTruckPedsList, PedToNet(ped))
+ else
+ SetPedRelationshipGroupHash(ped, suspectGroupHash)
+ SetEntityCanBeDamagedByRelationshipGroup(ped, false, suspectGroupHash)
+ table.insert(suspectPedList, PedToNet(ped))
+ end
+ end
+ end
+
+ for index, pedNetId in pairs(moneyTruckPedsList) do
+
+ local driverEntity = GetPedInVehicleSeat(moneyTruck, -1)
+ local ped = NetToPed(pedNetId)
+ ERS_RequestNetControlForEntity(ped)
+ if ped == driverEntity then
+ ERS_RequestNetControlForEntity(moneyTruck)
+ SetVehicleDoorsLocked(moneyTruck, 4) -- Lock peds inside.
+ ERS_RequestNetControlForEntity(ped)
+ local suspectPed = NetToPed(suspectPedList[1])
+ TaskReactAndFleePed(ped, suspectPed)
+ else
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ end
+ end
+
+ for index, pedNetId in pairs(suspectPedList) do
+ local driverEntity = GetPedInVehicleSeat(suspectVehicle, -1)
+ local ped = NetToPed(pedNetId)
+ ERS_RequestNetControlForEntity(ped)
+ if ped == driverEntity then
+ ERS_RequestNetControlForEntity(ped)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ Wait(50)
+ TaskVehicleEscort(ped, suspectVehicle, moneyTruck, -1, 50.0, 1082917029, 7.5, 0, -1)
+ SetPedKeepTask(ped, true)
+ else
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+
+ SetCanPedEquipAllWeapons(ped, true)
+ --SetPedCanSwitchWeapon(ped, true)
+ SetPedCombatAttributes(ped, 2, true) -- Can shoot from vehicle
+ SetPedCombatAttributes(ped, 54, true) -- Always equip best weapon.
+
+ ERS_SpawnConfiguredWeaponForPed(ped, calloutDataClient)
+
+ Citizen.SetTimeout(5000, function()
+ if DoesEntityExist(ped) then
+ if not IsPedDeadOrDying(ped, true) then
+ ERS_RequestNetControlForEntity(ped)
+ -- Make the ped shoot at the target entity indefinitely
+ local targetPed = NetToPed(moneyTruckPedsList[math.random(#moneyTruckPedsList)])
+ TaskCombatPed(ped, targetPed, 0, 16)
+ SetPedKeepTask(ped, true)
+ --TaskShootAtEntity(ped, targetPed, -1, GetHashKey("FIRING_PATTERN_FULL_AUTO"))
+ -- print("tasking to shoot for ped "..ped)
+ end
+ end
+ end)
+
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(moneyTruckPedsList, 15000)
+
+ --ERS_PerformTimedActionOnPed(calloutDataClient, suspectPedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ local diameter = 25
+
+ -- Build vehicle
+ local vehModel = "stockade"
+ local vehType = "automobile"
+ local vehCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build stockade drivers
+ local seatIndex = -1
+ for i = 1, 2 do
+ local pedModel = ERS_GetRandomModel(Config.randomMoneyTransportPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z + 2.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(ped, vehicle, seatIndex)
+ seatIndex = seatIndex + 1
+ table.insert(pedList, pedNetId)
+ end
+
+ -- Build suspect vehicle
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local suspectVehModel = ERS_GetRandomModel(Config.randomFourDoorVehiclesSpecific)
+ local suspectVehType = "automobile"
+ local suspectVehCoords = vector3(coords.x, coords.y, coords.z)
+ local suspectVehHeading = math.random(360)
+ local suspectVehNetId = ERS_CreateVehicle(suspectVehModel, suspectVehType, suspectVehCoords, suspectVehHeading)
+ local suspectVehicle = NetworkGetEntityFromNetworkId(suspectVehNetId)
+ table.insert(vehicleList, suspectVehNetId)
+
+ -- Build suspect peds
+ local randomAmountOfSuspects = math.random(3,4)
+ seatIndex = -1
+ for i = 1, randomAmountOfSuspects do
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(coords.x, coords.y, coords.z+2.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(ped, suspectVehicle, seatIndex)
+ seatIndex = seatIndex + 1
+ table.insert(pedList, pedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_motorist_trouble.lua b/resources/night_ers/callouts/plugins/callout_motorist_trouble.lua
new file mode 100644
index 000000000..99ba4db39
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_motorist_trouble.lua
@@ -0,0 +1,123 @@
+Config.Callouts["motorist_trouble"] = {
+
+ Enabled = true,
+ CalloutName = "A Motorcyclist in Trouble",
+ CalloutDescriptions = {
+ "Respond to a report of a motorcyclist in distress; provide immediate assistance and ensure their safety.",
+ "Alert: motorcyclist in trouble; deploy units to the location and assess the situation.",
+ "Units needed: emergency call for a motorcyclist in trouble; focus on ensuring the rider's safety and providing necessary aid.",
+ "Notice: motorcyclist incident reported; act promptly to control the situation and offer assistance.",
+ "Alert: report of a motorcyclist in distress; intervention needed to secure the scene and help the rider.",
+ "Incident reported: motorcyclist in trouble; take action to deliver urgent care and support.",
+ "Respond to a situation involving a distressed motorcyclist; prioritize their safety and coordinate with emergency services.",
+ "Situation alert: motorcyclist in distress; provide immediate assistance and ensure the scene is secure.",
+ "Alert: report of a motorcyclist incident; respond swiftly to address the emergency and offer necessary support.",
+ "Response needed: motorcyclist in trouble; ensure the rider's safety, provide aid, and secure the area.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Ambulance.",
+ policeRequired = true,
+ ambulanceRequired = true,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(363.8318, 131.8475, 103.0946),
+ [2] = vector3(165.3648, 6576.9131, 31.8289),
+ [3] = vector3(1182.2383, 6480.1406, 21.0092),
+ [4] = vector3(2442.9731, 5646.5942, 45.0481),
+ [5] = vector3(2481.4070, 4492.7974, 34.8779),
+ [6] = vector3(2248.0789, 3233.3501, 48.1212),
+ [7] = vector3(2494.7690, 1328.7114, 45.6007),
+ [8] = vector3(2618.0596, 603.9803, 95.0671),
+ [9] = vector3(1799.6150, -1188.7709, 83.4309),
+ [10] = vector3(1424.8677, -1864.6902, 71.3417),
+ [11] = vector3(-60.1252, -2061.7119, 21.6247),
+ [12] = vector3(-203.0126, -1791.1558, 29.8386),
+ [13] = vector3(-749.8683, -1720.9191, 39.7212),
+ [14] = vector3(-827.5394, -995.8917, 13.5648),
+ [15] = vector3(-1296.6694, -499.8325, 33.1732),
+ [16] = vector3(-1562.0688, -166.4641, 55.4659),
+ [17] = vector3(-1583.1840, 489.7940, 114.9331),
+ [18] = vector3(-328.1876, 976.7682, 233.2896),
+ [19] = vector3(256.1261, 1219.5848, 229.5003),
+ [20] = vector3(-280.2731, 1473.8699, 288.9326),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none",-- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+
+ local vehicle
+ local driver
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ vehicle = veh
+ ERS_RequestNetControlForEntity(vehicle)
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ driver = ped
+ ERS_RequestNetControlForEntity(driver)
+ TaskSetBlockingOfNonTemporaryEvents(driver, true)
+ if not IsPedInAnyVehicle(driver, true) then
+ TaskEnterVehicle(driver, vehicle, 5000, -1, 2.0, 1, 0)
+ Wait(5000)
+ TaskReactAndFleePed(driver, plyPed)
+ else
+ TaskReactAndFleePed(driver, plyPed)
+ end
+ end
+ end
+
+ Citizen.SetTimeout(math.random(7500,15000), function()
+ ERS_RequestNetControlForEntity(driver)
+ if DoesEntityExist(driver) then
+ if not IsPedDeadOrDying(driver, true) then
+ ERS_RequestNetControlForEntity(driver)
+ SetEntityHealth(driver, 0)
+ end
+ end
+ end)
+
+ ERS_CreateTemporaryBlipForEntities(vehicleList, 15000)
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ -- Build vehicle
+ local vehModel = ERS_GetRandomModel(Config.randomMotorBikes)
+ local vehType = "bike"
+ local vehCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build ped
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(ped, vehicle, -1)
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_officer_assist.lua b/resources/night_ers/callouts/plugins/callout_officer_assist.lua
new file mode 100644
index 000000000..6bf7272f1
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_officer_assist.lua
@@ -0,0 +1,207 @@
+Config.Callouts["officer_assist"] = {
+
+ Enabled = true,
+ CalloutName = "Officer in need of assistance",
+ CalloutDescriptions = {
+ "A situation has arisen requiring immediate backup support for an officer.",
+ "Emergency assistance is needed to address a law enforcement issue.",
+ "Reports indicate an urgent situation where additional support is required for an officer.",
+ "An incident has occurred requiring backup for an officer, ensuring their safety.",
+ "Emergency services have been summoned to assist an officer in a critical situation.",
+ "A request for assistance has been made by an officer in a potentially hazardous situation.",
+ "Additional resources are needed to support an officer facing an escalating situation.",
+ "Emergency backup is required to assist an officer dealing with an unforeseen circumstance.",
+ "A call for assistance has been issued by an officer requiring immediate backup.",
+ "Reports suggest a situation where an officer requires urgent assistance to maintain control.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, ambulance.",
+ policeRequired = true,
+ ambulanceRequired = true,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(2710.43, 3309.19, 55.82), -- Senora Freeway NB
+ [2] = vector3(2533.19, 4205.98, 40.20), -- East Joshua Rd.
+ [3] = vector3(1692.66, 4571.54, 41.49), -- North Calafia Way
+ [4] = vector3(-2529.98, 2334.12, 33.06), -- Route 68
+ [5] = vector3(-1501.20, 4971.76, 63.12), -- Great Ocean Hway (N)
+ [6] = vector3(-724.18, 5809.86, 17.40), -- Procopio Promenade
+ [7] = vector3(44.24, 6375.56, 31.23), -- Paleto Blvd.
+ [8] = vector3(-3034.95, 117.41, 11.61), -- Great Ocean Hway (S)
+ [9] = vector3(-1857.44, -616.55, 11.18), -- Vespucci beach
+ [10] = vector3(-573.80, -1122.40, 22.18), -- Calais Avenue
+ [11] = vector3(116.18, -1070.91, 29.19), -- Vespucci Blvd.
+ [12] = vector3(1016.14, -895.78, 30.59), -- 8199 Postal
+ [13] = vector3(1209.71, -2001.96, 43.57), -- 9368 Postal
+ [14] = vector3(-316.17, -2399.95, 61.40), -- 10049 Postal
+ [15] = vector3(-418.30, -1572.27, 39.05), -- 9028 Postal
+ [16] = vector3(251.83, -1182.54, 38.24), -- 8175 Postal
+ [17] = vector3(-352.41, -528.24, 25.33), -- 8021 Postal
+ [18] = vector3(797.83, 20.93, 64.44), -- 7285 Postal
+ [19] = vector3(-1121.12, -630.79, 13.17), -- 7263 Postal
+ [20] = vector3(-1781.14, 74.81, 69.48), -- 7039 Postal
+ [21] = vector3(-848.97, -2583.63, 13.80), -- 10009 Postal
+ [22] = vector3(840.20, -1636.99, 30.56), -- 9236 Postal
+ [23] = vector3(-1057.96, -746.88, 19.22), -- 8089 Postal
+ [24] = vector3(-1066.86, 267.73, 63.93), -- 6203 Postal
+ [25] = vector3(-2723.19, 2276.86, 19.60), -- 5011 Postal
+ [26] = vector3(224.64, 2971.53, 42.70), -- 4013 Postal
+ [27] = vector3(-1066.86, 267.73, 63.93), -- 6203 Postal
+ [28] = vector3(1384.65, 3573.27, 34.89), -- 3026 Postal
+ [29] = vector3(2461.99, 4321.02, 36.62), -- 2046 Postal
+ [30] = vector3(1333.30, 6508.02, 19.77), -- 1003 Postal
+ [31] = vector3(-191.31, 6440.66, 31.17), -- 1053 Postal
+ [32] = vector3(-698.73, 1751.18, 204.39),
+ [33] = vector3(-1366.02, 2151.64, 51.84),
+ [34] = vector3(-2510.62, 3595.04, 14.49),
+ [35] = vector3(-2354.16, 4094.42, 33.47),
+ [36] = vector3(-767.83, 5543.92, 33.49),
+ [37] = vector3(-443.84, 6110.14, 31.10),
+ [38] = vector3(153.96, 6426.62, 31.30),
+ [39] = vector3(136.65, 6626.83, 31.65),
+ [40] = vector3(-2078.89, 3295.33, 32.81),
+ },
+ PedChanceToFleeFromPlayer = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 75, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 10, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 70, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 10000, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 15000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "attack", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_pistol",
+ "weapon_minismg",
+ "weapon_smg",
+ "weapon_assaultrifle",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ local copTeamPeds = {}
+ local suspectPeds = {}
+ local plyGroupHash = GetPedRelationshipGroupHash(plyPed)
+ local copPedModels = Config.randomCops
+ local retval, suspectGroupHash = AddRelationshipGroup("SUSPECT_GROUP_HASH")
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ ClearPedTasks(ped)
+
+ local foundAsCop = false
+ for k, v in pairs(copPedModels) do
+ local targetHash = GetHashKey(v)
+ local modelHash = GetEntityModel(ped)
+ --print("Comparing target hash "..targetHash.." to model hash "..modelHash)
+ if targetHash == modelHash then
+ table.insert(copTeamPeds, pedNetId)
+ if Config.Debug then
+ print("Inserted ped "..ped.." as part of team cops.")
+ end
+ ERS_PedEquipWeapon(ped, "weapon_combatpistol", 150)
+ SetPedRelationshipGroupHash(ped, plyGroupHash)
+ SetPedAsCop(ped, true)
+ foundAsCop = true
+ break
+ end
+ end
+
+
+
+ if not foundAsCop then
+ table.insert(suspectPeds, pedNetId)
+ SetPedRelationshipGroupHash(ped, suspectGroupHash)
+ SetEntityCanBeDamagedByRelationshipGroup(ped, false, suspectGroupHash)
+ SetRelationshipBetweenGroups(5, suspectGroupHash, plyGroupHash)
+ SetRelationshipBetweenGroups(5, plyGroupHash, suspectGroupHash)
+
+ ERS_SpawnConfiguredWeaponForPed(ped, calloutDataClient)
+ end
+
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+
+ Wait(100)
+ end
+ end
+
+ if #copTeamPeds > 0 and #suspectPeds > 0 then
+ for index, pedNetId in pairs(copTeamPeds) do
+ local ped = NetToPed(pedNetId)
+ local targetPed = NetToPed(suspectPeds[math.random(#suspectPeds)])
+ SetPedRelationshipGroupHash(ped, plyGroupHash)
+ TaskCombatPed(ped, targetPed, 0, 16)
+ end
+ for index, pedNetId in pairs(suspectPeds) do
+ local ped = NetToPed(pedNetId)
+ local targetPed = NetToPed(copTeamPeds[math.random(#copTeamPeds)])
+ SetPedRelationshipGroupHash(ped, suspectGroupHash)
+ TaskCombatPed(ped, targetPed, 0, 16)
+ end
+ else
+ CancelCallout()
+ return
+ end
+
+ ERS_CreateTemporaryBlipForEntities(vehicleList, 15000)
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, suspectPeds) -- test this netid adjustment.
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+ local diameter = 20
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+
+ -- Build cop vehicle
+ local vehModel = ERS_GetRandomModel(Config.randomPoliceVehicles)
+ local vehType = "automobile"
+ local vehCoords = vector3(coords.x, coords.y, coords.z)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build cop peds of different types
+ local randomCops = math.random(2)
+ local seatIndex = -1
+ for i = 1, randomCops do
+ local pedModel = ERS_GetRandomModel(Config.randomCops)
+ local pedCoords = vector3(coords.x, coords.y, coords.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(ped, vehicle, seatIndex)
+ seatIndex = seatIndex + 1
+ table.insert(pedList, pedNetId)
+ end
+
+ -- Build suspect vehicle
+ coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local suspectVehModel = ERS_GetRandomModel(Config.randomVehicles)
+ local suspectVehType = "automobile"
+ local suspectVehCoords = vector3(coords.x, coords.y, coords.z)
+ local suspectVehHeading = math.random(360)
+ local suspectVehNetId = ERS_CreateVehicle(suspectVehModel, suspectVehType, suspectVehCoords, suspectVehHeading)
+ local suspectVehicle = NetworkGetEntityFromNetworkId(suspectVehNetId)
+ table.insert(vehicleList, suspectVehNetId)
+
+ -- Build suspect ped(s)
+ seatIndex = -1
+ local randomAmountOfSuspects = math.random(4)
+ for i = 1, randomAmountOfSuspects do
+ local suspectPedModel = ERS_GetRandomModel(Config.randomPeds)
+ local suspectPedCoords = vector3(coords.x, coords.y, coords.z)
+ local suspectPedHeading = math.random(360)
+ local suspectPedNetId = ERS_CreatePed(suspectPedModel, suspectPedCoords, suspectPedHeading)
+ local suspectPed = NetworkGetEntityFromNetworkId(suspectPedNetId)
+ SetPedIntoVehicle(suspectPed, suspectVehicle, seatIndex)
+ seatIndex = seatIndex + 1
+ table.insert(pedList, suspectPedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_overheated_transformer.lua b/resources/night_ers/callouts/plugins/callout_overheated_transformer.lua
new file mode 100644
index 000000000..d37e1d9ec
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_overheated_transformer.lua
@@ -0,0 +1,80 @@
+Config.Callouts["overheated_transformer"] = {
+
+ Enabled = true,
+ CalloutName = "Overheated transformer station",
+ CalloutDescriptions = {
+ "A transformer station is experiencing critical overheating, needing immediate action to prevent a fire.",
+ "Emergency crews are required to cool down an overheating transformer station to avoid power disruptions.",
+ "Authorities report an urgent situation with a transformer station overheating, demanding prompt intervention.",
+ "A transformer station has dangerously high temperatures; additional units are necessary to control the risk.",
+ "Immediate response needed to address an overheating transformer station and mitigate potential hazards.",
+ "An overheated transformer station poses a significant threat, calling for reinforcements to stabilize the situation.",
+ "Critical overheating detected at a transformer station; emergency teams must act quickly to prevent escalation.",
+ "An urgent alert for assistance due to a transformer station overheating and risking major power outages.",
+ "Responders are battling an overheating transformer station and need extra support to ensure safety.",
+ "A serious overheating issue at a transformer station requires swift action to protect nearby infrastructure and lives.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Fire.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = true,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(2094.0078, 2325.3831, 94.2853),
+ [2] = vector3(2278.6301, 2969.2185, 46.5811),
+ [3] = vector3(2840.2234, 1553.8225, 24.5741),
+ [4] = vector3(2821.8545, 1511.8513, 24.7242),
+ [5] = vector3(2458.3921, 1457.0712, 36.2040),
+ [6] = vector3(1127.5670, -2489.8242, 33.3611),
+ [7] = vector3(233.3477, 6399.8403, 31.6335),
+ [8] = vector3(1346.0159, 6383.4556, 33.4101),
+ [9] = vector3(2050.1416, 3683.3496, 34.5879),
+ [10] = vector3(683.1802, 120.5065, 80.7545),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+
+ -- No other actions required clientside.
+
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ local diameter = 15
+ local randomAmountOfFires = math.random(2,6)
+ for i = 1, randomAmountOfFires do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ -- Build fires
+ if UsingSmartFires then
+ -- Full version
+ local fireSize = Config.RandomHugeFireOrSmokeSize[math.random(#Config.RandomHugeFireOrSmokeSize)]
+ local fireType = Config.ElectricalFire
+ local fireId = exports['SmartFires']:CreateFire(vector3(coords.x, coords.y, coords.z-0.5), fireSize, fireType)
+ DebugPrint("Created fire with ID: "..fireId)
+ table.insert(fireList, fireId)
+ else
+ -- Lite version
+ local fireSize = Config.RandomHugeFireOrSmokeSize[math.random(#Config.RandomHugeFireOrSmokeSize)]
+ local fireType = "normal"
+ local fireId = exports['SmartFiresLite']:CreateFire(vector3(coords.x, coords.y, coords.z-0.5), fireSize, fireType)
+ DebugPrint("Created fire with SmartFiresLite with ID: "..fireId)
+ table.insert(fireList, fireId)
+ end
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_parachute_incident.lua b/resources/night_ers/callouts/plugins/callout_parachute_incident.lua
new file mode 100644
index 000000000..c4f797d29
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_parachute_incident.lua
@@ -0,0 +1,131 @@
+Config.Callouts["parachute_incident"] = {
+
+ Enabled = true,
+ CalloutName = "Incident with a parachutist",
+ CalloutDescriptions = {
+ "Respond immediately to a report of a parachutist in distress; secure the area and provide necessary assistance.",
+ "Emergency alert: parachutist in trouble; deploy units to manage the situation and ensure their safety.",
+ "Urgent response required: parachutist has encountered an issue; focus on rescue operations and medical aid.",
+ "Critical situation: parachutist in distress; act swiftly to provide help and secure the scene.",
+ "Alert: parachutist emergency reported; immediate intervention needed to assist the individual and ensure safety.",
+ "Parachutist incident: urgent action required to secure the area and provide aid to the affected person.",
+ "Handle a parachutist emergency; prioritize rescue efforts and coordinate with emergency teams.",
+ "Emergency situation: parachutist in trouble; ensure the area is safe and assist in the rescue operation.",
+ "Urgent alert: parachutist distress call; respond quickly to manage the scene and provide necessary support.",
+ "Critical response needed: parachutist incident; secure the area, assist the individual, and ensure their safety.",
+ },
+ CalloutUnitsRequired = {
+ description = "Ambulance.",
+ policeRequired = false,
+ ambulanceRequired = true,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(952.2233, -587.2217, 58.2773), -- chute hangs about 3.5 above in an object.
+ [2] = vector3(892.8412, -644.2815, 58.5624),
+ [3] = vector3(-1689.7689, -738.7968, 10.1216),
+ [4] = vector3(-1665.2777, -963.7534, 7.7066),
+ [5] = vector3(-1341.0793, -1471.0431, 4.5780),
+ [6] = vector3(-622.7783, -1535.9728, 14.3249),
+ [7] = vector3(-769.7225, -1698.9756, 29.3284),
+ [8] = vector3(-962.4874, -1945.5409, 13.1916),
+ [9] = vector3(-302.1057, -1197.8782, 37.1781),
+ [10] = vector3(-1813.5688, -491.2219, 41.1071),
+ [11] = vector3(-3072.2017, 209.4451, 12.2777),
+ [12] = vector3(-3113.3748, 705.1713, 7.3118),
+ [13] = vector3(-3063.7551, 1781.3798, 34.1570),
+ [14] = vector3(-2527.3540, 3573.0752, 14.5031),
+ [15] = vector3(-1978.0129, 4550.1206, 41.6057),
+ [16] = vector3(-1683.3534, 4875.0195, 51.7314),
+ [17] = vector3(-1215.4250, 5341.8916, 15.8113),
+ [18] = vector3(-248.8048, 6599.2861, 2.1546),
+ [19] = vector3(77.6183, 7106.6396, 21.5626),
+ [20] = vector3(687.1104, 6019.8105, 379.7889),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, objNetId in pairs(objectList) do
+ local obj = NetToObj(objNetId)
+ if DoesEntityExist(obj) then
+ ERS_RequestNetControlForEntity(obj)
+ PlaceObjectOnGroundProperly(obj)
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ ERS_GivePedParachute(ped)
+
+ local pedCoords = GetEntityCoords(ped)
+ local chanceToSurvive = math.random(100)
+
+ ERS_SetMovementAnimClipSetToPed(ped, "move_m@injured")
+
+ if chanceToSurvive > 20 then
+ -- Dead
+ SetEntityHealth(ped, 0)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ ERS_ApplyBloodToPed(ped)
+ SetPedKeepTask(ped, true)
+ else
+ -- Alive
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ ERS_SpawnConfiguredWeaponForPed(ped, calloutDataClient)
+ if IsPedInAnyVehicle(ped, false) then
+ TaskLeaveAnyVehicle(ped)
+ Wait(500)
+ end
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ SetPedKeepTask(ped, true)
+
+ ERS_ApplyBloodToPed(ped)
+ local scenario = ERS_SelectRandomWoundedPersonScenario()
+ TaskStartScenarioInPlace(ped, scenario, 0, true)
+ end
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ -- ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ -- Build ped
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+
+ -- Build object
+ local objModel = ERS_GetRandomModel(Config.parachuteObjects)
+ local objCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local objHeading = math.random(360)
+ local objNetId = ERS_CreateObject(objModel, objCoords, objHeading)
+ if objNetId then
+ local obj = NetworkGetEntityFromNetworkId(objNetId)
+ table.insert(objectList, objNetId)
+ else
+ DebugPrint("^1ERROR ^7Could not create object: "..objModel)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_possible_murder.lua b/resources/night_ers/callouts/plugins/callout_possible_murder.lua
new file mode 100644
index 000000000..dfbbcf68e
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_possible_murder.lua
@@ -0,0 +1,106 @@
+Config.Callouts["possible_murder"] = {
+
+ Enabled = true,
+ CalloutName = "Possible Murder",
+ CalloutDescriptions = {
+ "Caller reports a suspicious death, immediate investigation needed.",
+ "Emergency call: person found dead under mysterious circumstances, urgent police response required.",
+ "Emergency! Unexplained death reported, potential foul play involved.",
+ "Suspicious death reported, homicide detectives needed on the scene ASAP.",
+ "Help requested for a possible murder, victim discovered with suspicious injuries.",
+ "Urgent: possible homicide, police and forensic team needed immediately.",
+ "Witness reports discovering a body, signs suggest a potential murder, emergency services required.",
+ "Serious crime scene reported, possible murder, all units respond.",
+ "Caller indicates a suspicious death, emergency personnel needed for investigation.",
+ "Report of a potential murder, immediate police intervention required.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ vector3(571.27, 116.67, 98.04), -- Langlwey Hill, downtown Vinewood
+ vector3(-1610.21, -992.59, 7.65), -- Vespucci beach, Pier
+ vector3(176.54, 1246.37, 223.77), -- Eastman way, Vinewood hills
+ vector3(-675.35, -631.46, 25.30), -- Belford road, Little Souel
+ vector3(-588.82, -1770.54, 22.68), -- Dark Ln, La Puerta
+ vector3(-27.91, -1203.60, 29.51), -- Under M25, Strawberry
+ vector3(1593.50, -1690.90, 88.09), -- Witter Ave, Burro Heights
+ vector3(2822.94, -746.96, 1.73), -- Arksey Rd, Pacific Ocean
+ vector3(1237.75, -413.37, 68.94), -- Green gardens, MP
+ vector3(2784.11, 1397.43, 24.65), -- Power Plant
+ vector3(1732.47, 3247.21, 41.36),
+ vector3(665.81, 3569.90, 33.21),
+ vector3(245.65, 3595.09, 34.20),
+ vector3(50.83, 3682.69, 39.74),
+ vector3(503.01, 5595.35, 795.77),
+ },
+ PedChanceToFleeFromPlayer = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 100, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 5000, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 10000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "attack", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_knife",
+ "weapon_dagger",
+ "weapon_hatchet",
+ "weapon_machete",
+ "weapon_switchblade",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ local victim
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ if index == 1 then
+ ERS_RequestNetControlForEntity(ped)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ ERS_ApplyBloodToPed(ped)
+ SetEntityHealth(ped, 0)
+ victim = ped
+ else
+ TaskTurnPedToFaceEntity(ped, victim, 2500)
+ local scenario = ERS_SelectMentalHealthPersonScenario()
+ TaskStartScenarioInPlace(ped, scenario, 0, true)
+ end
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+
+ local diameter = 6
+
+ -- Build victim
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+
+ -- Build suspect
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+
+ local suspectPedModel = ERS_GetRandomModel(Config.randomPeds)
+ local suspectPedCoords = vector3(coords.x, coords.y, coords.z)
+ local suspectPedHeading = math.random(360)
+ local suspectPedNetId = ERS_CreatePed(suspectPedModel, suspectPedCoords, suspectPedHeading)
+ local suspectPed = NetworkGetEntityFromNetworkId(suspectPedNetId)
+ table.insert(pedList, suspectPedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_prisoner_escape.lua b/resources/night_ers/callouts/plugins/callout_prisoner_escape.lua
new file mode 100644
index 000000000..1c306af45
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_prisoner_escape.lua
@@ -0,0 +1,118 @@
+Config.Callouts["prisoner_escape"] = {
+
+ Enabled = true,
+ CalloutName = "Escaped Prisoner Located",
+ CalloutDescriptions = {
+ "Emergency: respond to reports of an escaped prisoner located; ensure the area is secure and apprehend the individual.",
+ "Urgent alert: dispatch units to the location of the escaped prisoner; prevent their escape and ensure public safety.",
+ "Critical response required: attend to reports of an escaped prisoner; coordinate with law enforcement to capture the fugitive.",
+ "Notice: check reports of an escaped prisoner sighting; take immediate action to secure the area and apprehend the suspect.",
+ "Alert: respond promptly to the location of an escaped prisoner; prioritize safety and follow arrest protocols.",
+ "Incident reported: investigate sightings of an escaped prisoner; work with local authorities to detain the individual.",
+ "Immediate action: address reports of an escaped prisoner; use necessary force to secure the area and apprehend the suspect.",
+ "Situation alert: assist in locating and apprehending an escaped prisoner; ensure the safety of the public and officers.",
+ "Emergency response: handle reports of an escaped prisoner; follow procedures to capture the fugitive safely.",
+ "Response needed: investigate reports of an escaped prisoner located urgently; take appropriate actions to prevent their further escape and ensure public safety.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(214.6095, 3189.8245, 42.5928),
+ [2] = vector3(293.1284, -1478.5221, 29.3080),
+ [3] = vector3(103.3432, -1377.3875, 29.3154),
+ [4] = vector3(485.6794, 6.2798, 87.1719),
+ [5] = vector3(-5.2814, 381.2972, 112.3464),
+ [6] = vector3(-2035.8617, -166.5863, 26.5854),
+ [7] = vector3(482.3028, -1037.2313, 34.8134),
+ [8] = vector3(380.8480, -757.6916, 29.2935),
+ [9] = vector3(571.4741, -572.0841, 35.7990),
+ [10] = vector3(772.4194, -828.8688, 26.2540),
+ [11] = vector3(833.7119, -1555.7354, 29.8211),
+ [12] = vector3(492.0949, -1751.8782, 28.5538),
+ [13] = vector3(228.7512, -1807.6431, 27.6827),
+ [14] = vector3(-520.3109, -1346.6263, 29.3196),
+ [15] = vector3(-858.3890, -922.1454, 15.5615),
+ [16] = vector3(-2436.8098, 2833.2585, 3.6499),
+ [17] = vector3(-1920.5099, 2369.5808, 34.1331),
+ [18] = vector3(-1223.8616, 2780.9143, 14.2682),
+ [19] = vector3(14.8522, 4456.5659, 59.9622),
+ [20] = vector3(2212.9841, 5604.5820, 53.8604),
+ },
+ PedChanceToFleeFromPlayer = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 10, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 10000, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 15000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "flee", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_bottle",
+ "weapon_knife"
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ local vehicle
+ local driver
+
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ vehicle = veh
+ ERS_RequestNetControlForEntity(vehicle)
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ driver = ped
+ ERS_RequestNetControlForEntity(driver)
+ TaskSetBlockingOfNonTemporaryEvents(driver, true)
+ if not IsPedOnAnyBike(driver) then
+ SmashVehicleWindow(vehicle, 0) -- break driver window
+ end
+ if not IsPedInAnyVehicle(driver, true) then
+ TaskEnterVehicle(driver, vehicle, 5000, -1, 2.0, 1, 0)
+ Wait(5000)
+ ERS_SetPedToFleeFromPlayer(driver)
+ else
+ ERS_SetPedToFleeFromPlayer(driver)
+ end
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(vehicleList, 15000)
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ -- Build vehicle
+ local vehModel = ERS_GetRandomModel(Config.randomVehicles)
+ local vehType = "automobile"
+ local vehCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build ped
+ local pedModel = ERS_GetRandomModel(Config.randomPrisonerPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z +1.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(ped, vehicle, -1)
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_prisoner_escape_bus.lua b/resources/night_ers/callouts/plugins/callout_prisoner_escape_bus.lua
new file mode 100644
index 000000000..ce8f638b5
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_prisoner_escape_bus.lua
@@ -0,0 +1,136 @@
+Config.Callouts["prisoner_escape_bus"] = {
+
+ Enabled = true,
+ CalloutName = "Prisoner transport bus escape",
+ CalloutDescriptions = {
+ "Respond immediately to an attempted escape from a prisoner transport bus; secure the area and prevent any escapes.",
+ "Emergency alert: escape attempt from a prisoner transport bus in progress; deploy units to contain the situation.",
+ "Urgent response required: prisoners attempting to flee from transport bus; ensure all prisoners are accounted for and secure the vicinity.",
+ "Critical situation: attempted breakout from a prisoner transport bus; act swiftly to prevent any escapes and control the scene.",
+ "Alert: prisoners trying to escape from transport bus; immediate intervention needed to apprehend escapees and maintain security.",
+ "Prisoner transport bus incident: escape attempt underway; urgent action needed to secure the bus and surroundings.",
+ "Handle an escape attempt from a prisoner transport bus; prioritize containment and coordination with law enforcement.",
+ "Emergency situation: prisoners attempting to escape from bus; ensure area lockdown and assist in recapture efforts.",
+ "Urgent alert: breakout attempt from prisoner transport bus; respond quickly to control the scene and prevent further incidents.",
+ "Critical response needed: prisoner transport bus escape attempt; secure the area, assist in recapture, and restore order.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(-430.1359, -1841.9290, 19.4628),
+ [2] = vector3(225.9333, -1226.3806, 38.2550),
+ [3] = vector3(778.6886, -1006.5396, 25.9907),
+ [4] = vector3(778.5501, -851.2286, 43.3722),
+ [5] = vector3(761.3960, -477.1339, 36.2214),
+ [6] = vector3(582.0797, -75.4963, 70.7756),
+ [7] = vector3(894.2089, 61.3250, 78.9686),
+ [8] = vector3(422.2990, 296.2672, 103.0581),
+ [9] = vector3(-146.1876, -87.6049, 55.1551),
+ [10] = vector3(1407.4314, -1749.7058, 65.9185),
+ [11] = vector3(1013.7170, -1435.1545, 35.6374),
+ [12] = vector3(858.6818, -1072.3356, 39.1867),
+ [13] = vector3(737.6019, -602.1349, 36.2894),
+ [14] = vector3(666.0109, -247.3925, 43.8801),
+ [15] = vector3(150.5485, 85.2522, 84.6272),
+ [16] = vector3(-537.0259, 254.9205, 83.0729),
+ [17] = vector3(-778.9194, 564.0609, 125.2098),
+ [18] = vector3(-1052.4857, 1178.5732, 216.5182),
+ [19] = vector3(-1431.6735, 1912.0579, 73.7801),
+ [20] = vector3(-1305.9124, 2536.4126, 18.9174),
+ [21] = vector3(-2350.6760, 3425.3782, 28.8471),
+ [22] = vector3(-2314.3596, 4168.1719, 38.7900),
+ [23] = vector3(-1917.4707, 4439.6279, 40.5788),
+ [24] = vector3(-1560.4316, 4733.1812, 50.4538),
+ [25] = vector3(-777.4516, 5262.8662, 89.9326),
+ [26] = vector3(170.4841, 4417.7505, 75.2792),
+ [27] = vector3(849.2275, 4230.1768, 50.8234),
+ [28] = vector3(1735.9677, 4574.9873, 39.7539),
+ [29] = vector3(2448.9150, 4597.9678, 36.9199),
+ [30] = vector3(2713.1785, 3906.6541, 43.5291),
+ },
+ PedChanceToFleeFromPlayer = 75, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 20, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 20, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 10000, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 15000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "flee", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ ERS_RequestNetControlForEntity(veh)
+ SetEntityRotation(veh, 0, -90.01, 0, 2, true)
+ ERS_SetRandomDamageToVehicle(veh)
+ SetVehicleBodyHealth(veh, 0)
+ SetVehicleEngineHealth(veh, 0)
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ ERS_ApplyBloodToPed(ped)
+ if index == 1 then
+ ERS_SetPedToPassout(ped)
+ else
+ ERS_SetPedToFleeFromPlayer(ped)
+ end
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(vehicleList, 15000)
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ local diameter = 20
+
+ -- Build vehicle
+ local vehModel = "pbus"
+ local vehType = "automobile"
+ local vehCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z+1.0)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build ped
+ local pedModel = "s_m_m_prisguard_01"
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(ped, vehicle, -1)
+ table.insert(pedList, pedNetId)
+
+
+ local randomAmountOfPassengers = math.random(10)
+ -- Build passengers
+ for i = 1, randomAmountOfPassengers do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local passengerPedModel = ERS_GetRandomModel(Config.randomPrisonerPeds)
+ local passengerPedCoords = vector3(coords.x, coords.y, coords.z+2.0)
+ local passengerPedHeading = math.random(360)
+ local passengerPedNetId = ERS_CreatePed(passengerPedModel, passengerPedCoords, passengerPedHeading)
+ local passengerPed = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, passengerPedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_protest_haybales.lua b/resources/night_ers/callouts/plugins/callout_protest_haybales.lua
new file mode 100644
index 000000000..3d68d3c9d
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_protest_haybales.lua
@@ -0,0 +1,180 @@
+Config.Callouts["protest_haybales"] = {
+ Enabled = true,
+ CalloutName = "Protest with hay bales on fire",
+ CalloutDescriptions = {
+ "Protesters have set fire to hay bales, requiring immediate intervention from fire services.",
+ "Emergency teams are needed to control a fire started by protesters burning hay bales.",
+ "Authorities report hay bales set ablaze during a protest, necessitating urgent action.",
+ "A protest has escalated with hay bales on fire, and additional firefighting units are needed to contain it.",
+ "Immediate response required to a protest fire involving hay bales, endangering surrounding areas.",
+ "Hay bales have been ignited by protesters, and reinforcements are needed to assist local fire services.",
+ "Fire crews are requesting backup to control a severe fire started by protesters burning hay bales.",
+ "An urgent call for assistance has been made to deal with hay bales on fire during a protest.",
+ "Responders are on the scene of a protest where hay bales are burning and require additional support to prevent further damage.",
+ "A significant fire at a protest involving hay bales demands immediate intervention to protect lives and property.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Fire.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = true,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(903.23, 161.76, 74.04),
+ [2] = vector3(1113.25, 417.18, 83.67),
+ [3] = vector3(1543.74, 892.82, 77.47),
+ [4] = vector3(1614.32, 1105.89, 82.08),
+ [5] = vector3(2052.10, 2595.61, 53.69),
+ [6] = vector3(2236.29, 2788.25, 44.15),
+ [7] = vector3(2853.91, 3515.08, 54.34),
+ [8] = vector3(2859.30, 3601.57, 52.95),
+ [9] = vector3(2878.75, 4194.57, 50.14),
+ [10] = vector3(2775.87, 4404.12, 48.96),
+ [11] = vector3(2649.70, 5079.81, 44.83),
+ [12] = vector3(2114.19, 6027.16, 50.92),
+ [13] = vector3(1528.76, 6442.59, 23.29),
+ [14] = vector3(8900.44, 6471.33, 31.35),
+ [15] = vector3(-176.06, 6199.81, 31.19),
+ [16] = vector3(-477.35, 5862.80, 33.60),
+ [17] = vector3(-1189.78, 5261.50, 52.16),
+ [18] = vector3(-2015.21, 4496.73, 57.07),
+ [19] = vector3(-2241.45, 4260.30, 45.70),
+ [20] = vector3(-2474.10, 3637.44, 13.92),
+ [21] = vector3(-2631.86, 2855.54, 16.70),
+ [22] = vector3(-2707.72, 2295.90, 18.40),
+ [23] = vector3(-3096.80, 1315.54, 20.22),
+ [24] = vector3(-2988.84, 374.60, 14.79),
+ [25] = vector3(-2553.09, -164.87, 20.33),
+ [26] = vector3(-2164.92, -343.06, 13.19),
+ [27] = vector3(-1821.37, -608.59, 11.26),
+ [28] = vector3(-926.08, -564.75, 18.87),
+ [29] = vector3(-887.70, -512.39, 21.50),
+ [30] = vector3(-471.13, -528.49, 25.33),
+ [31] = vector3(-146.59, -492.57, 29.13),
+ [32] = vector3(290.05, -522.58, 34.08),
+ [33] = vector3(763.41, -606.53, 37.10),
+ -- Add more to 40
+ },
+ PedChanceToFleeFromPlayer = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 20, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 15000, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 20000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "attack", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_knife",
+ "weapon_hatchet",
+ "weapon_crowbar",
+ },
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, objNetId in pairs(objectList) do
+ local obj = NetToObj(objNetId)
+ if DoesEntityExist(obj) then
+ ERS_RequestNetControlForEntity(obj)
+ PlaceObjectOnGroundProperly(obj)
+ end
+ end
+
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ ERS_RequestNetControlForEntity(veh)
+ -- Add something here to alter the vehicle behaviour.
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ local scenario = ERS_SelectRandomProtesterScenario()
+ TaskStartScenarioInPlace(ped, scenario, 0, true)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(vehicleList, 15000)
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ local diameter = 20
+
+ -- Build vehicle
+ local vehModel = "tractor2"
+ local vehType = "automobile"
+ local vehCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build objects
+ local randomAmountOfObjects = math.random(7)
+ for i = 1, randomAmountOfObjects do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ if UsingSmartFires then
+ -- Full version
+ local fireSize = Config.RandomLargeFireOrSmokeSize[math.random(#Config.RandomLargeFireOrSmokeSize)]
+ local fireType = Config.NormalFireTypes[math.random(#Config.NormalFireTypes)]
+ local fireId = exports['SmartFires']:CreateFire(vector3(coords.x, coords.y, coords.z+0.6), fireSize, fireType)
+ DebugPrint("Created fire with ID: "..fireId)
+ table.insert(fireList, fireId)
+ else
+ -- Lite version
+ local fireSize = Config.RandomLargeFireOrSmokeSize[math.random(#Config.RandomLargeFireOrSmokeSize)]
+ local fireType = "normal"
+ local fireId = exports['SmartFiresLite']:CreateFire(vector3(coords.x, coords.y, coords.z+0.6), fireSize, fireType)
+ DebugPrint("Created fire with SmartFiresLite with ID: "..fireId)
+ table.insert(fireList, fireId)
+ end
+
+ local objModel = "prop_haybale_02"
+ local objCoords = vector3(coords.x, coords.y, coords.z) -- Haybales float apparently.
+ local objHeading = math.random(360)
+ local objNetId = ERS_CreateObject(objModel, objCoords, objHeading)
+ if objNetId then
+ local obj = NetworkGetEntityFromNetworkId(objNetId)
+ table.insert(objectList, objNetId)
+ else
+ DebugPrint("^1ERROR ^7Could not create object: "..objModel)
+ end
+ end
+
+ -- Build smoke
+ if UsingSmartFires then
+ -- Full version
+ local smokeSize = Config.RandomMediumFireOrSmokeSize[math.random(#Config.RandomMediumFireOrSmokeSize)]
+ local smokeType = Config.AllSmokeTypes[math.random(#Config.AllSmokeTypes)]
+ local smokeId = exports['SmartFires']:CreateSmoke(vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z-0.5), smokeSize, smokeType)
+ DebugPrint("Created smoke particle with ID: "..smokeId)
+ table.insert(smokeList, smokeId)
+ else
+ -- Lite version
+ local smokeSize = Config.RandomMediumFireOrSmokeSize[math.random(#Config.RandomMediumFireOrSmokeSize)]
+ local smokeType = "normal"
+ local smokeId = exports['SmartFiresLite']:CreateSmoke(vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z-0.5), smokeSize, smokeType)
+ DebugPrint("Created smoke particle with ID: "..smokeId)
+ table.insert(smokeList, smokeId)
+ end
+
+ -- Build protesters
+ local suspects = math.random(10)
+ for i = 1, suspects do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(coords.x, coords.y, coords.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_reckless_driving_heavy.lua b/resources/night_ers/callouts/plugins/callout_reckless_driving_heavy.lua
new file mode 100644
index 000000000..fe87920bd
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_reckless_driving_heavy.lua
@@ -0,0 +1,108 @@
+Config.Callouts["reckless_driving_heavy"] = {
+
+ Enabled = true,
+ CalloutName = "Reckless driving in a heavy vehicle",
+ CalloutDescriptions = {
+ "Investigate reports of a heavy vehicle being driven erratically; secure the scene and evaluate the situation.",
+ "Alert: dispatch units to handle reports of a heavy vehicle driving dangerously; ensure public safety.",
+ "Units required: respond to reports of a heavy vehicle operating recklessly and assess potential risks.",
+ "Notice: check reports of hazardous driving by a heavy vehicle and implement necessary safety measures.",
+ "Alert: respond promptly to reports of reckless driving in a heavy vehicle; prioritize safety and detailed assessment.",
+ "Incident reported: look into reports of a heavy vehicle driving irresponsibly to understand the threat level.",
+ "Investigate reports of a heavy vehicle driving erratically; coordinate with traffic control and secure the vicinity.",
+ "Situation alert: address reports of a heavy vehicle being driven dangerously; work with relevant authorities.",
+ "Alert: handle reports of a heavy vehicle driving recklessly and adhere to safety protocols for potential hazards.",
+ "Response needed: investigate reports of reckless heavy vehicle driving and take steps to ensure community safety.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(933.4853, -3190.7881, 5.9008),
+ [2] = vector3(-895.2436, -115.3364, 37.9570),
+ [3] = vector3(823.2411, -1524.7156, 28.9780),
+ [4] = vector3(741.8983, -2499.1797, 20.2135),
+ [5] = vector3(304.0816, -2550.3000, 5.7018),
+ [6] = vector3(-275.2318, -2577.4436, 5.9796),
+ [7] = vector3(-896.3196, -1824.5986, 35.3967),
+ [8] = vector3(-524.4230, -504.6884, 25.3055),
+ [9] = vector3(-1490.4974, -262.6434, 50.2380),
+ [10] = vector3(-3151.9204, 935.8858, 14.4236),
+ [11] = vector3(-2652.2512, 2654.8267, 16.6594),
+ [12] = vector3(-1586.2675, 4921.5903, 61.4198),
+ [13] = vector3(-402.6738, 5972.9756, 31.7093),
+ [14] = vector3(2640.0142, 5105.3809, 44.8056),
+ [15] = vector3(2748.8899, 3414.4187, 56.3821),
+ [16] = vector3(2541.0632, 3269.8059, 52.8347),
+ [17] = vector3(1959.9297, 3082.1833, 46.7531),
+ [18] = vector3(1305.5258, 2640.0676, 37.7118),
+ [19] = vector3(-34.6396, 2788.5928, 56.5891),
+ [20] = vector3(-1114.0311, 2663.7812, 18.1515),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ local vehicle
+ local driver
+
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ vehicle = veh
+ ERS_RequestNetControlForEntity(vehicle)
+ ERS_SetRandomDamageToVehicle(vehicle)
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ driver = ped
+ ERS_RequestNetControlForEntity(driver)
+ TaskSetBlockingOfNonTemporaryEvents(driver, true)
+ ERS_SetPedAsDrunkPed(driver)
+ TaskVehicleDriveWander(driver, vehicle, 10.0, 786603)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(vehicleList, 15000)
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ -- Build vehicle
+ local vehModel = ERS_GetRandomModel(Config.randomHeavyVehicles2)
+ local vehType = "automobile"
+ local vehCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build ped
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z+3.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(ped, vehicle, -1)
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_repeated_hotline.lua b/resources/night_ers/callouts/plugins/callout_repeated_hotline.lua
new file mode 100644
index 000000000..11bcecc2d
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_repeated_hotline.lua
@@ -0,0 +1,90 @@
+Config.Callouts["repeated_hotline"] = {
+
+ Enabled = true,
+ CalloutName = "Person continously calling the emergency hotline",
+ CalloutDescriptions = {
+ "Investigate repeated emergency calls from an individual; ensure their safety and address any urgent needs.",
+ "Alert: deploy units to assess and assist an individual making repeated emergency calls.",
+ "Units required: investigate multiple emergency calls from the same location for potential emergencies.",
+ "Notice: verify the nature of persistent emergency calls and provide necessary support.",
+ "Alert: respond to ongoing emergency calls from a residential area; assess for genuine emergencies.",
+ "Incident reported: investigate continuous emergency calls to determine the caller's needs.",
+ "Respond to an individual repeatedly dialing the emergency hotline; prioritize mental health and provide support.",
+ "Situation alert: coordinate with professionals to assist an individual making repeated emergency calls.",
+ "Alert: respond empathetically to persistent emergency calls and provide appropriate assistance.",
+ "Response needed: investigate and address continuous emergency calls to ensure safety and support.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(299.9856, -873.1115, 29.1976),
+ [2] = vector3(265.3121, -2841.4810, 6.0074),
+ [3] = vector3(80.3296, -2722.0681, 5.9887),
+ [4] = vector3(-661.8322, -2187.9426, 6.0002),
+ [5] = vector3(-1012.8489, -1607.4501, 5.0882),
+ [6] = vector3(-1254.8690, -1366.3451, 4.0205),
+ [7] = vector3(-1191.7335, -1044.5894, 2.1412),
+ [8] = vector3(-961.3003, -727.1707, 19.8872),
+ [9] = vector3(-727.7034, -411.9380, 35.0770),
+ [10] = vector3(-384.7127, -42.9089, 49.0244),
+ [11] = vector3(-14.7561, 308.0486, 113.0616),
+ [12] = vector3(307.0553, 64.7258, 99.8901),
+ [13] = vector3(604.6143, -428.4446, 24.7441),
+ [14] = vector3(695.1581, -1109.6603, 22.4602),
+ [15] = vector3(322.6585, -1750.1853, 29.2482),
+ [16] = vector3(-12.8548, -1504.0767, 30.1095),
+ [17] = vector3(2698.3960, 1376.3064, 24.5163),
+ [18] = vector3(2516.6223, 4186.7397, 39.7938),
+ [19] = vector3(2513.5872, 4787.5181, 34.5690),
+ [20] = vector3(-268.1085, 6214.6250, 31.5452),
+ },
+ PedChanceToFleeFromPlayer = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 5000, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 15000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "flee", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_knife",
+ "weapon_pistol",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ ERS_ClearPedTasksAndBlockEvents(ped)
+
+ Wait(100)
+
+ local scenario = "WORLD_HUMAN_STAND_MOBILE"
+ TaskStartScenarioInPlace(ped, scenario, 0, true)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ -- Build ped
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z+1.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_riot.lua b/resources/night_ers/callouts/plugins/callout_riot.lua
new file mode 100644
index 000000000..a1fa75a3b
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_riot.lua
@@ -0,0 +1,193 @@
+Config.Callouts["riot"] = {
+
+ Enabled = true,
+ CalloutName = "Riot",
+ CalloutDescriptions = {
+ "Investigate reports of a riot; secure the area and assess the situation.",
+ "Alert: deploy units to manage a riot; ensure public safety and restore order.",
+ "Units required: respond to reports of a riot and evaluate potential threats to the community.",
+ "Notice: check reports of a riot and implement necessary measures to control the situation.",
+ "Alert: respond promptly to a riot; prioritize safety and detailed assessment of the event.",
+ "Incident reported: look into reports of a riot to understand the extent of the disturbance.",
+ "Investigate reports of a riot; coordinate with crowd control teams and secure the vicinity.",
+ "Situation alert: address reports of a riot; work with relevant authorities to manage the situation.",
+ "Alert: handle reports of a riot and adhere to protocols for restoring order and ensuring safety.",
+ "Response needed: investigate reports of a riot and take steps to ensure the safety of the community.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Fire, Tow.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = true,
+ towRequired = true,
+ },
+ CalloutLocations = {
+ [1] = vector3(831.1976, -3137.5559, 5.9008),
+ [2] = vector3(-1557.1982, 2761.8516, 17.7053),
+ [3] = vector3(1710.1578, 3771.4617, 34.4025),
+ [4] = vector3(1743.8546, 3272.0657, 41.1703),
+ [5] = vector3(1858.9907, 2540.5154, 45.6719),
+ [6] = vector3(235.6954, -878.0937, 30.4921),
+ [7] = vector3(-191.3728, -1964.3601, 27.6204),
+ [8] = vector3(-620.6758, -2123.2578, 5.9923),
+ [9] = vector3(-1619.6090, -903.4967, 8.9739),
+ [10] = vector3(-2457.9941, 3656.7156, 13.9443),
+ [11] = vector3(-282.2079, 6052.3569, 31.5152),
+ [12] = vector3(146.9176, 6602.6260, 31.8042),
+ [13] = vector3(1571.6101, 6441.9468, 24.4484),
+ [14] = vector3(2043.6166, 4986.9048, 40.6116),
+ [15] = vector3(2412.2124, 4142.8066, 35.5256),
+ [16] = vector3(2105.3550, 2864.5730, 47.6522),
+ [17] = vector3(2722.0613, 1381.5297, 24.5540),
+ [18] = vector3(963.9542, 154.3185, 80.8222),
+ [19] = vector3(520.3144, 50.4172, 95.0597),
+ [20] = vector3(158.9241, -413.5882, 41.1308),
+ },
+ PedChanceToFleeFromPlayer = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 10, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 10000, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 15000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_bat",
+ "weapon_hammer",
+ "weapon_wrench",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+
+ for index, objNetId in pairs(objectList) do
+ local obj = NetToObj(objNetId)
+ if DoesEntityExist(obj) then
+ ERS_RequestNetControlForEntity(obj)
+ PlaceObjectOnGroundProperly(obj)
+ end
+ end
+
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ ERS_RequestNetControlForEntity(veh)
+ ERS_SetRandomDamageToVehicle(veh)
+ local vehClass = GetVehicleClass(veh)
+ if vehClass == 18 then -- Break all emergency vehicles.
+ SetVehicleBodyHealth(veh, 0)
+ SetVehicleEngineHealth(veh, 0)
+ end
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ ERS_SpawnConfiguredWeaponForPed(ped, calloutDataClient)
+ local targetIndex = math.random(#pedList)
+ local targetPed = NetToPed(pedList[targetIndex])
+ if targetPed ~= ped then
+ TaskCombatPed(ped, targetPed, 0, 16)
+ else
+ TaskReactAndFleePed(ped, plyPed)
+ end
+ end
+ end
+
+ local diameter = 20
+ local randomAmountOfFlares = math.random(1,10)
+ for i = 1, randomAmountOfFlares do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutDataClient.Coordinates, diameter)
+ ERS_CreateFlareAtCoordinate(coords)
+ end
+
+ ERS_CreateTemporaryBlipForEntities(vehicleList, 15000)
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+ ERS_CreateTemporaryBlipForEntities(objectList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+
+ local diameter = 20
+
+ -- Build vehicle
+ local randomAmountOfVehicles = math.random(5)
+ for i = 1, randomAmountOfVehicles do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local vehModel = ERS_GetRandomModel(Config.randomRiotVehicles)
+ local vehType = "automobile"
+ local vehCoords = vector3(coords.x, coords.y, coords.z+1.0)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+ end
+
+ -- Build objects
+ local randomAmountOfObjects = math.random(7)
+ for i = 1, randomAmountOfObjects do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ if UsingSmartFires then
+ -- Full version
+ local fireSize = Config.RandomLargeFireOrSmokeSize[math.random(#Config.RandomLargeFireOrSmokeSize)]
+ local fireType = Config.NormalFireTypes[math.random(#Config.NormalFireTypes)]
+ local fireId = exports['SmartFires']:CreateFire(vector3(coords.x, coords.y, coords.z+0.6), fireSize, fireType)
+ DebugPrint("Created fire with ID: "..fireId)
+ table.insert(fireList, fireId)
+ else
+ -- Lite version
+ local fireSize = Config.RandomLargeFireOrSmokeSize[math.random(#Config.RandomLargeFireOrSmokeSize)]
+ local fireType = "normal"
+ local fireId = exports['SmartFiresLite']:CreateFire(vector3(coords.x, coords.y, coords.z+0.6), fireSize, fireType)
+ DebugPrint("Created fire with SmartFiresLite with ID: "..fireId)
+ table.insert(fireList, fireId)
+ end
+
+ local objModel = ERS_GetRandomModel(Config.randomRiotObjects)
+ local objCoords = vector3(coords.x, coords.y, coords.z)
+ local objHeading = math.random(360)
+ local objNetId = ERS_CreateObject(objModel, objCoords, objHeading)
+ if objNetId then
+ local obj = NetworkGetEntityFromNetworkId(objNetId)
+ table.insert(objectList, objNetId)
+ else
+ DebugPrint("^1ERROR ^7Could not create object: "..objModel)
+ end
+ end
+
+ -- Build smoke
+ if UsingSmartFires then
+ -- Full version
+ local smokeSize = Config.RandomMediumFireOrSmokeSize[math.random(#Config.RandomMediumFireOrSmokeSize)]
+ local smokeType = Config.AllSmokeTypes[math.random(#Config.AllSmokeTypes)]
+ local smokeId = exports['SmartFires']:CreateSmoke(vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z-0.5), smokeSize, smokeType)
+ DebugPrint("Created smoke particle with ID: "..smokeId)
+ table.insert(smokeList, smokeId)
+ else
+ -- Lite version
+ local smokeSize = Config.RandomMediumFireOrSmokeSize[math.random(#Config.RandomMediumFireOrSmokeSize)]
+ local smokeType = "normal"
+ local smokeId = exports['SmartFiresLite']:CreateSmoke(vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z-0.5), smokeSize, smokeType)
+ DebugPrint("Created smoke particle with ID: "..smokeId)
+ table.insert(smokeList, smokeId)
+ end
+
+ -- Build rioters
+ local suspects = math.random(7, 15)
+ for i = 1, suspects do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(coords.x, coords.y, coords.z+2.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_road_rage.lua b/resources/night_ers/callouts/plugins/callout_road_rage.lua
new file mode 100644
index 000000000..260da3ab8
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_road_rage.lua
@@ -0,0 +1,233 @@
+Config.Callouts["road_rage"] = {
+
+ Enabled = true,
+ CalloutName = "Road Rage",
+ CalloutDescriptions = {
+ "Emergency: respond to reports of a road rage incident; ensure the safety of all individuals involved and de-escalate the situation.",
+ "Urgent alert: dispatch units to the scene of a road rage altercation; prevent escalation and maintain public safety.",
+ "Critical response required: attend to reports of road rage; secure the area and mediate the conflict.",
+ "Notice: check reports of road rage; take immediate action to resolve the altercation and protect bystanders.",
+ "Alert: respond promptly to a road rage incident; prioritize the safety of drivers and passengers, and restore order.",
+ "Incident reported: investigate a road rage situation; coordinate with local authorities to manage the conflict effectively.",
+ "Immediate action: address reports of road rage; use necessary measures to calm the situation and ensure safety.",
+ "Situation alert: assist in resolving a road rage incident; ensure the area is secure and provide necessary support.",
+ "Emergency response: handle reports of road rage; follow protocols to de-escalate the situation and ensure safety for all.",
+ "Response needed: investigate reports of a road rage incident urgently; take appropriate actions to prevent harm and restore peace.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(1192.63, 3536.41, 35.13),
+ [2] = vector3(2593.25, 5313.96, 44.57),
+ [3] = vector3(27.51, 255.42, 109.61),
+ [4] = vector3(-1080.32, -765.26, 19.36),
+ [5] = vector3(-1630.25, -991.21, 13.02),
+ [6] = vector3(-2795.69, 39.72, 14.60),
+ [7] = vector3(-3097.45, 1318.16, 19.89),
+ [8] = vector3(-2595.10, 3123.73, 14.58),
+ [9] = vector3(-304.33, 6229.86, 31.12),
+ [10] = vector3(2243.96, 5922.29, 49.53),
+ [11] = vector3(2640.64, 5117.21, 44.48),
+ [12] = vector3(2183.72, 4748.46, 40.78),
+ [13] = vector3(2170.03, 3783.03, 33.09),
+ [14] = vector3(1579.06, 3719.70, 34.20),
+ [15] = vector3(217.62, 3256.18, 41.40),
+ [16] = vector3(142.01, 1648.18, 228.67),
+ [17] = vector3(1233.60, 1269.89, 143.35),
+ [18] = vector3(798.01, -52.39, 80.30),
+ [19] = vector3(824.26, -1743.31, 29.09),
+ [20] = vector3(169.02, -2661.49, 18.14),
+ [21] = vector3(219.35, -2548.59, 5.85),
+ [22] = vector3(280.12, -1854.27, 26.52),
+ [23] = vector3(-669.76, -2067.38, 15.03),
+ [24] = vector3(-949.97, -1213.69, 4.92),
+ [25] = vector3(-862.40, -656.93, 27.53),
+ [26] = vector3(-866.07, -939.28, 15.85),
+ [27] = vector3(-188.73, -891.99, 29.34),
+ [28] = vector3(-707.01, -1611.40, 22.79),
+ [29] = vector3(738.92, -2466.61, 20.22),
+ [30] = vector3(1240.60, -2054.46, 44.35),
+ [31] = vector3(1969.42, -921.52, 79.16),
+ [32] = vector3(2454.87, 977.85, 86.22),
+ [33] = vector3(2207.62, 2999.60, 45.54),
+ [34] = vector3(1696.63, 3510.35, 36.47),
+ [35] = vector3(226.92, 2973.63, 42.71),
+ [36] = vector3(-1254.90, 2537.62, 18.12),
+ [37] = vector3(-1785.69, 4736.50, 57.01),
+ [38] = vector3(-303.03, 6231.18, 31.45),
+ [39] = vector3(-54.87, 6311.50, 31.33),
+ [40] = vector3(1940.65, 6254.72, 43.52),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 100, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 10000,-- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 15000,-- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_bottle",
+ "weapon_knife",
+ "weapon_pistol"
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+
+ local firstPedsList = {}
+ local vehicle
+ local suspectPedList = {}
+ local suspectVehicle
+ local plyGroupHash = GetPedRelationshipGroupHash(plyPed)
+ local retval, suspectGroupHash = AddRelationshipGroup("SUSPECT_GROUP_HASH")
+
+ SetRelationshipBetweenGroups(4, suspectGroupHash, plyGroupHash)
+ SetRelationshipBetweenGroups(4, plyGroupHash, suspectGroupHash)
+
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ ERS_RequestNetControlForEntity(veh)
+
+ if index == 1 then
+ vehicle = veh
+ --print("Found veh: "..vehicle)
+ else
+ suspectVehicle = veh
+ --print("Found veh 2: "..suspectVehicle)
+ end
+ end
+ end
+
+ -- Set ped into teams
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ if IsPedInVehicle(ped, vehicle, true) then
+ SetPedRelationshipGroupHash(ped, plyGroupHash)
+ SetEntityCanBeDamagedByRelationshipGroup(ped, true, plyGroupHash)
+ table.insert(firstPedsList, PedToNet(ped))
+ else
+ SetPedRelationshipGroupHash(ped, suspectGroupHash)
+ SetEntityCanBeDamagedByRelationshipGroup(ped, false, suspectGroupHash)
+ table.insert(suspectPedList, PedToNet(ped))
+ end
+ end
+ end
+
+ for index, pedNetId in pairs(firstPedsList) do
+ local driverEntity = GetPedInVehicleSeat(vehicle, -1)
+ local ped = NetToPed(pedNetId)
+ ERS_RequestNetControlForEntity(ped)
+ if ped == driverEntity then
+ ERS_RequestNetControlForEntity(vehicle)
+ SetVehicleDoorsLocked(vehicle, 4) -- Lock peds inside.
+ ERS_RequestNetControlForEntity(ped)
+ local suspectPed = NetToPed(suspectPedList[1])
+ TaskReactAndFleePed(ped, suspectPed)
+ else
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ end
+ end
+
+ for index, pedNetId in pairs(suspectPedList) do
+ local driverEntity = GetPedInVehicleSeat(suspectVehicle, -1)
+ local ped = NetToPed(pedNetId)
+ ERS_RequestNetControlForEntity(ped)
+ if ped == driverEntity then
+ ERS_RequestNetControlForEntity(ped)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ Wait(50)
+ TaskVehicleEscort(ped, suspectVehicle, vehicle, -1, 50.0, 1082917029, 7.5, 0, -1)
+ SetPedKeepTask(ped, true)
+ else
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+
+ SetCanPedEquipAllWeapons(ped, true)
+ --SetPedCanSwitchWeapon(ped, true)
+ SetPedCombatAttributes(ped, 2, true) -- Can shoot from vehicle
+ SetPedCombatAttributes(ped, 54, true) -- Always equip best weapon.
+
+ ERS_SpawnConfiguredWeaponForPed(ped, calloutDataClient)
+
+ Citizen.SetTimeout(5000, function()
+ if DoesEntityExist(ped) then
+ if not IsPedDeadOrDying(ped, true) then
+ ERS_RequestNetControlForEntity(ped)
+ -- Make the ped shoot at the target entity indefinitely
+ local targetPed = NetToPed(firstPedsList[math.random(#firstPedsList)])
+ TaskCombatPed(ped, targetPed, 0, 16)
+ SetPedKeepTask(ped, true)
+ --TaskShootAtEntity(ped, targetPed, -1, GetHashKey("FIRING_PATTERN_FULL_AUTO"))
+ -- print("tasking to shoot for ped "..ped)
+ end
+ end
+ end)
+
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(firstPedsList, 30000)
+ ERS_CreateTemporaryBlipForEntities(suspectPedList, 30000)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+
+ local diameter = 25
+
+ -- Build vehicle
+ local vehModel = ERS_GetRandomModel(Config.randomVehicles)
+ local vehType = "automobile"
+ local vehCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build drivers
+ local seatIndex = -1
+ for i = 1, 2 do
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z + 2.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(ped, vehicle, seatIndex)
+ seatIndex = seatIndex + 1
+ table.insert(pedList, pedNetId)
+ end
+
+ -- Build suspect vehicle
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local suspectVehModel = ERS_GetRandomModel(Config.randomFourDoorVehiclesSpecific)
+ local suspectVehType = "automobile"
+ local suspectVehCoords = vector3(coords.x, coords.y, coords.z)
+ local suspectVehHeading = math.random(360)
+ local suspectVehNetId = ERS_CreateVehicle(suspectVehModel, suspectVehType, suspectVehCoords, suspectVehHeading)
+ local suspectVehicle = NetworkGetEntityFromNetworkId(suspectVehNetId)
+ table.insert(vehicleList, suspectVehNetId)
+
+ -- Build suspect peds
+ local randomAmountOfSuspects = math.random(2)
+ seatIndex = -1
+ for i = 1, randomAmountOfSuspects do
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(coords.x, coords.y, coords.z+2.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(ped, suspectVehicle, seatIndex)
+ seatIndex = seatIndex + 1
+ table.insert(pedList, pedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_road_rubble.lua b/resources/night_ers/callouts/plugins/callout_road_rubble.lua
new file mode 100644
index 000000000..5de93c7dc
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_road_rubble.lua
@@ -0,0 +1,92 @@
+Config.Callouts["road_rubble"] = {
+
+ Enabled = true,
+ CalloutName = "Rubble on the road",
+ CalloutDescriptions = {
+ "Emergency: respond to reports of rubble on the road; ensure the area is cleared to prevent accidents.",
+ "Urgent alert: dispatch units to address rubble on the road; remove debris to ensure safe passage for vehicles.",
+ "Critical response required: attend to reports of road rubble; secure the area and prevent further incidents.",
+ "Notice: check reports of rubble on the road; take immediate action to clear debris and restore road safety.",
+ "Alert: respond promptly to reports of rubble on the road; prioritize the safety of motorists and clear the obstruction.",
+ "Incident reported: investigate reports of rubble on the road; coordinate with local authorities to manage the situation.",
+ "Immediate action: address reports of road debris; use appropriate methods to clear the area and ensure safety.",
+ "Situation alert: assist with clearing rubble from the road; ensure the area is safe for traffic and pedestrians.",
+ "Emergency response: handle reports of road rubble and follow protocols to remove debris and ensure road safety.",
+ "Response needed: investigate reports of rubble on the road urgently; take appropriate actions to prevent accidents and ensure clear passage.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(214.6095, 3189.8245, 42.5928),
+ [2] = vector3(323.1100, 6571.5659, 29.0666),
+ [3] = vector3(-619.8828, 5612.6821, 39.0517),
+ [4] = vector3(-895.5853, 5425.6592, 36.1425),
+ [5] = vector3(2.1686, 4527.1665, 107.7096),
+ [6] = vector3(1918.0905, 4591.0244, 38.3464),
+ [7] = vector3(2448.5151, 4276.7529, 36.8721),
+ [8] = vector3(1788.3530, 3563.3096, 35.7547),
+ [9] = vector3(2119.9487, 3043.8943, 45.5342),
+ [10] = vector3(1755.7428, 1931.1074, 72.3967),
+ [11] = vector3(385.7047, -98.7011, 66.6472),
+ [12] = vector3(242.6648, -633.6824, 40.3116),
+ [13] = vector3(38.8675, -1131.0657, 29.3294),
+ [14] = vector3(-596.7621, -1888.5531, 29.1868),
+ [15] = vector3(-1008.5099, -809.5873, 16.2181),
+ [16] = vector3(-696.3465, -60.0736, 37.6844),
+ [17] = vector3(663.1342, -404.3603, 41.7616),
+ [18] = vector3(838.3165, -1611.0994, 31.9497),
+ [19] = vector3(520.7114, -1693.2850, 29.2939),
+ [20] = vector3(387.5263, -1559.6461, 29.3324),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, objNetId in pairs(objectList) do
+ local obj = NetToObj(objNetId)
+ if DoesEntityExist(obj) then
+ ERS_RequestNetControlForEntity(obj)
+ PlaceObjectOnGroundProperly(obj)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(objectList, 30000)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ local diameter = 20
+
+ -- Build objects
+ local randomAmountOfObjects = math.random(10)
+ for i = 1, randomAmountOfObjects do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local objModel = ERS_GetRandomModel(Config.randomDebris)
+ local objCoords = vector3(coords.x, coords.y, coords.z)
+ local objHeading = math.random(360)
+ local objNetId = ERS_CreateObject(objModel, objCoords, objHeading)
+ if objNetId then
+ local obj = NetworkGetEntityFromNetworkId(objNetId)
+ table.insert(objectList, objNetId)
+ else
+ DebugPrint("^1ERROR ^7Could not create object: "..objModel)
+ end
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_rock_thrower.lua b/resources/night_ers/callouts/plugins/callout_rock_thrower.lua
new file mode 100644
index 000000000..083bcc263
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_rock_thrower.lua
@@ -0,0 +1,105 @@
+Config.Callouts["rock_thrower"] = {
+
+ Enabled = true,
+ CalloutName = "Reports of a rockthrower at a highway bridge",
+ CalloutDescriptions = {
+ "Investigate reports of a person throwing rocks on the highway; secure the area and ensure safety.",
+ "Alert: dispatch units to respond to reports of a rockthrower on the highway; prevent potential accidents.",
+ "Units required: respond to reports of a person throwing rocks on the highway and take necessary actions.",
+ "Notice: check reports of a rockthrower on the highway; implement safety measures to protect motorists.",
+ "Alert: respond promptly to reports of a rockthrower on the highway; prioritize safety and prevent harm.",
+ "Incident reported: look into reports of a person throwing rocks on the highway to prevent accidents.",
+ "Investigate reports of a rockthrower on the highway; coordinate with relevant authorities to address the situation.",
+ "Situation alert: address reports of a person throwing rocks on the highway; ensure the area is cleared.",
+ "Alert: handle reports of a rockthrower on the highway and follow protocols to ensure safety for all.",
+ "Response needed: investigate reports of a person throwing rocks on the highway and take appropriate actions to prevent harm.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(1090.6511, -1724.6661, 35.6686),
+ [2] = vector3(149.6323, -499.0016, 43.3375),
+ [3] = vector3(304.4368, -518.3337, 43.2498),
+ [4] = vector3(-82.0214, -537.6570, 40.1383),
+ [5] = vector3(-223.2275, -505.3830, 34.7831),
+ [6] = vector3(-652.4840, -506.2829, 34.7621),
+ [7] = vector3(-914.4279, -557.6136, 33.8698),
+ [8] = vector3(-2985.9165, 416.2830, 24.6855),
+ [9] = vector3(-3078.3875, 767.0917, 31.3687),
+ [10] = vector3(2671.0034, 4822.2881, 44.5706),
+ },
+ PedChanceToFleeFromPlayer = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 20, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 5000, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 10000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "flee", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_crowbar",
+ "weapon_bottle",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, objNetId in pairs(objectList) do
+ local obj = NetToObj(objNetId)
+ if DoesEntityExist(obj) then
+ ERS_RequestNetControlForEntity(obj)
+ PlaceObjectOnGroundProperly(obj)
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ local pos = GetEntityCoords(ped)
+ local randomChance = math.random(100)
+ if randomChance < 50 then
+ ERS_SetPedAsDrunkPed(ped)
+ end
+ TaskTurnPedToFaceEntity(ped, plyPed, 5000)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 30000)
+ ERS_CreateTemporaryBlipForEntities(objectList, 30000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ local diameter = 20
+
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+
+ local randomAmountOfObjects = math.random(5)
+ for i = 1, randomAmountOfObjects do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local objModel = ERS_GetRandomModel(Config.randomRockObjects)
+ local objCoords = vector3(coords.x, coords.y, coords.z)
+ local objHeading = math.random(360)
+ local objNetId = ERS_CreateObject(objModel, objCoords, objHeading)
+ if objNetId then
+ local obj = NetworkGetEntityFromNetworkId(objNetId)
+ table.insert(objectList, objNetId)
+ else
+ DebugPrint("^1ERROR ^7Could not create object: "..objModel)
+ end
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_shop_robbery.lua b/resources/night_ers/callouts/plugins/callout_shop_robbery.lua
new file mode 100644
index 000000000..878ea42be
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_shop_robbery.lua
@@ -0,0 +1,155 @@
+Config.Callouts["shop_robbery"] = {
+ Enabled = true,
+ CalloutName = "Shop Robbery",
+ CalloutDescriptions = {
+ "Reports indicate a daring robbery in progress at a local shop. Suspects possibly armed, approach with caution.",
+ "Emergency services have been alerted to a brazen robbery unfolding at a nearby store. Additional units requested.",
+ "A shop owner has reported a violent robbery in progress. Assess the scene for potential hazards.",
+ "Witnesses report a break-in at a shop, with suspects fleeing the scene. Prioritize response for apprehension.",
+ "A shop alarm has been triggered, indicating a possible burglary in progress. Prompt investigation required.",
+ "A distressed caller reports a suspected abduction following a robbery at their shop. Coordinate search efforts immediately.",
+ "Reports suggest a drug-related robbery underway at a local store. Assess potential risks before engaging.",
+ "A shopkeeper has been injured during a robbery attempt. Approach the scene with caution and prioritize medical assistance.",
+ "Witnesses report a hit-and-run following a shop robbery. Suspects may be armed and dangerous. Approach with extreme caution.",
+ "Reports indicate fraudulent activity at a shop. Coordinate with authorities for investigation and apprehension of suspects.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(1734.71, 6420.61, 35.04), -- Mount Chilliad, Senora Fwy
+ [2] = vector3(1959.34, 3748.75, 32.34), -- Sandy Shores, Niland Ave
+ [3] = vector3(1168.99, 2717.88, 37.16), -- Grand Senora Desert, Route 68
+ [4] = vector3(614.70, 2764.62, 42.09), -- Suburban, Harmony, Route 68
+ [5] = vector3(378.13, 333.19, 103.57), -- Downtown Vinewood, Clinton Ave
+ [6] = vector3(-165.61, -304.13, 39.73), -- Burton, Las Lagunas Blvd
+ [7] = vector3(-1171.97, -1571.98, 4.66), -- Vespucci Beach, Goma St
+ [8] = vector3(-3047.61, 585.73, 7.91), -- Banham Canyon, Ineseno Road
+ [9] = vector3(2555.99, 386.47, 108.62), -- Palomino Fwy
+ [10] = vector3(-828.11, -1073.62, 11.33), -- South Rockford Dr.
+ },
+ PedChanceToFleeFromPlayer = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 10000,-- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 15000,-- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "flee", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_knife",
+ "weapon_bat",
+ "weapon_hammer",
+ "weapon_wrench",
+ "weapon_pistol",
+ },
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+ local shopkeeperPed = nil
+ local robberPedsList = {}
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+
+ local foundShopkeeperPed = false
+ for k, v in pairs(Config.shopKeeperPeds) do
+ if GetEntityModel(ped) == GetHashKey(v) then
+ shopkeeperPed = ped
+ foundShopkeeperPed = true
+ if Config.Debug then
+ print("Shopkeeper ped: "..ped)
+ end
+ break
+ end
+ end
+ if not foundShopkeeperPed then
+ table.insert(robberPedsList, pedNetId)
+ if Config.Debug then
+ print("Robber ped: "..ped)
+ end
+ end
+ end
+ end
+
+ local chance = math.random(100)
+ if chance >= 50 then
+ -- Shocked shopkeeper
+ ClearPedTasks(shopkeeperPed)
+ TaskSetBlockingOfNonTemporaryEvents(shopkeeperPed, true)
+
+ Wait(100)
+
+ TaskHandsUp(shopkeeperPed, -1, plyPed, -1, true)
+ SetPedKeepTask(shopkeeperPed, true)
+
+ if Config.Debug then
+ print("Shopkeeper is tasked to put their hands up.")
+ end
+ else
+ -- Rogue shopkeeper
+ ClearPedTasks(shopkeeperPed)
+ TaskSetBlockingOfNonTemporaryEvents(shopkeeperPed, true)
+
+ ERS_SpawnConfiguredWeaponForPed(shopkeeperPed, calloutDataClient)
+
+ Wait(100)
+
+ local targetPed = NetToPed(robberPedsList[math.random(#robberPedsList)])
+ TaskCombatPed(shopkeeperPed, targetPed, 0, 16)
+
+ if Config.Debug then
+ print("Shopkeeper is tasked to attack the robbers")
+ end
+ end
+
+ for i, robberPedNetId in pairs(robberPedsList) do
+ local robberPed = NetToPed(robberPedNetId)
+ local fleeChance = 50
+ if fleeChance > math.random(1,100) then
+ ERS_SpawnConfiguredWeaponForPed(robberPed, calloutDataClient)
+
+ TaskCombatPed(robberPed, shopkeeperPed, 0, 16)
+
+ if Config.Debug then
+ print("Robber ped "..robberPed.." is attacking shopkeeper ped "..shopkeeperPed)
+ end
+ else
+ TaskReactAndFleePed(ped, shopkeeperPed)
+
+ if Config.Debug then
+ print("Robber ped "..robberPed.." is fleeing from shopkeeper ped "..shopkeeperPed)
+ end
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000) -- You could choose to adjust this to only mark robbers. Up to you.
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, robberPedsList)
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+ -- Build shopkeeper ped
+ local pedModel = ERS_GetRandomModel(Config.shopKeeperPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+
+ -- Build robber ped(s)
+ local robberCount = math.random(3)
+ for i = 1, robberCount do
+ local robberPedModel = ERS_GetRandomModel(Config.randomPeds)
+ local robberPedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local robberPedHeading = math.random(360)
+ local robberPedNetId = ERS_CreatePed(robberPedModel, robberPedCoords, robberPedHeading)
+ local robberPed = NetworkGetEntityFromNetworkId(robberPedNetId)
+ table.insert(pedList, robberPedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_shots_fired.lua b/resources/night_ers/callouts/plugins/callout_shots_fired.lua
new file mode 100644
index 000000000..132f24f9b
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_shots_fired.lua
@@ -0,0 +1,153 @@
+Config.Callouts["shots_fired"] = {
+
+ Enabled = true,
+ CalloutName = "Shots Fired",
+ CalloutDescriptions = {
+ "Respond immediately to a report of shots fired; secure the area and ensure public safety.",
+ "Emergency alert: shots fired in the vicinity; deploy units to manage the situation and protect civilians.",
+ "Urgent response required: active shooter situation; focus on neutralizing the threat and assisting the injured.",
+ "Critical situation: shots fired; act swiftly to control the scene and provide aid to those affected.",
+ "Alert: report of shots fired; immediate intervention needed to stop the violence and ensure safety.",
+ "Shooting incident: urgent action required to secure the area and protect bystanders.",
+ "Handle a situation involving shots fired; prioritize public safety and coordinate with law enforcement.",
+ "Emergency situation: shots fired; ensure the area is safe and assist in controlling the scene.",
+ "Urgent alert: active shooter reported; respond quickly to manage the situation and protect the public.",
+ "Critical response needed: shots fired; secure the area, assist the injured, and restore order.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Ambulance.",
+ policeRequired = true,
+ ambulanceRequired = true,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(-889.4525, -853.4730, 20.5661),
+ [2] = vector3(-231.0190, 6260.1074, 31.4391),
+ [3] = vector3(-237.1503, 6439.3364, 31.0982),
+ [4] = vector3(-77.6606, 6549.7329, 31.4881),
+ [5] = vector3(469.6108, 6448.6230, 30.1986),
+ [6] = vector3(1697.6783, 4802.4580, 41.8141),
+ [7] = vector3(2633.9438, 4596.7261, 36.1075),
+ [8] = vector3(1633.8063, 3795.7200, 34.8466),
+ [9] = vector3(1393.9348, 3606.6814, 39.2701),
+ [10] = vector3(1545.7815, 3561.8938, 35.3486),
+ [11] = vector3(1589.5295, 2891.2266, 57.1263),
+ [12] = vector3(2272.5593, 1102.3688, 65.0331),
+ [13] = vector3(2572.4104, 388.7282, 108.4568),
+ [14] = vector3(1668.3339, -1631.9216, 112.2200),
+ [15] = vector3(1381.5989, -2063.7688, 51.9946),
+ [16] = vector3(1121.3654, -2602.6497, 16.8344),
+ [17] = vector3(276.8874, -2505.6790, 6.4400),
+ [18] = vector3(-79.5865, -1749.0245, 29.4207),
+ [19] = vector3(120.0385, -1940.8367, 20.7270),
+ [20] = vector3(266.9131, -1787.1008, 27.1102),
+ [21] = vector3(36.7397, -1586.4495, 29.3206),
+ [22] = vector3(850.5896, -2291.6616, 30.3330),
+ [23] = vector3(1071.6823, -1826.0753, 37.2903),
+ [24] = vector3(752.7496, -1193.8081, 24.2690),
+ [25] = vector3(816.7231, -261.8644, 65.8427),
+ [26] = vector3(-380.1862, 291.0942, 84.9367),
+ [27] = vector3(-567.3224, 324.2887, 84.4385),
+ [28] = vector3(-1858.3063, -618.8312, 11.1323),
+ [29] = vector3(-1522.5084, -926.1440, 10.1185),
+ [30] = vector3(-742.9850, -1042.8475, 12.3789),
+ },
+ PedChanceToFleeFromPlayer = 30, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 20, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 10, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 100, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 10000,-- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 15000,-- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "flee", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_pistol",
+ "weapon_microsmg",
+ "weapon_smg",
+ "weapon_assaultrifle",
+ "weapon_mg",
+ "weapon_pumpshotgun",
+ "weapon_sawnoffshotgun",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+
+ local team1 = {}
+ local team2 = {}
+
+ local totalPeds = #pedList
+ local pedsPerTeam = math.floor(totalPeds / 2)
+
+ local team1Count = 0
+ local team2Count = 0
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ local chance = math.random(0,1)
+ if chance > 0 then
+ ERS_SetPedAsDrunkPed(ped)
+ end
+
+ local random = math.random(100)
+ if (team1Count < pedsPerTeam) or (team2Count >= pedsPerTeam and random >= 50) then
+ table.insert(team1, ped)
+ team1Count = team1Count + 1
+ else
+ table.insert(team2, ped)
+ team2Count = team2Count + 1
+ end
+
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+
+ Wait(100)
+
+ ERS_SpawnConfiguredWeaponForPed(ped, calloutDataClient)
+ end
+ end
+
+ if #team1 > 0 and #team2 > 0 then
+ for i, ped in pairs(team1) do
+ local randomTarget = team2[math.random(#team2)]
+ TaskCombatPed(ped, randomTarget, 0, 16)
+ if Config.Debug then
+ print("Team 1 Ped "..ped.." is attacking ped "..randomTarget)
+ end
+ end
+
+ for i, ped in pairs(team2) do
+ local randomTarget = team1[math.random(#team1)]
+ TaskCombatPed(ped, randomTarget, 0, 16)
+ if Config.Debug then
+ print("Team 2 Ped "..ped.." is attacking ped "..randomTarget)
+ end
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+
+ local diameter = 20
+
+ -- Build peds
+ local randomAmountOfSuspects = math.random(4,12)
+ for i = 1, randomAmountOfSuspects do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local pedModel = ERS_GetRandomModel(Config.randomGangPeds)
+ local pedCoords = vector3(coords.x, coords.y, coords.z+1.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_smoking_weed.lua b/resources/night_ers/callouts/plugins/callout_smoking_weed.lua
new file mode 100644
index 000000000..fa7aca48c
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_smoking_weed.lua
@@ -0,0 +1,125 @@
+Config.Callouts["smoking_weed"] = {
+
+ Enabled = true,
+ CalloutName = "Reports of a person smoking weed",
+ CalloutDescriptions = {
+ "Investigate reports of a person smoking weed; locate the individual and assess the situation.",
+ "Alert: dispatch units to check on reports of marijuana use in a public area; ensure compliance with laws.",
+ "Units required: respond to reports of someone smoking weed and evaluate the circumstances.",
+ "Notice: check reports of a person using marijuana; take necessary actions to maintain public order.",
+ "Alert: respond promptly to reports of marijuana use; prioritize community safety and proper assessment.",
+ "Incident reported: look into reports of a person smoking weed to understand the context and legality.",
+ "Investigate reports of marijuana use; coordinate with local authorities to address the situation.",
+ "Situation alert: address reports of a person smoking weed; work with relevant authorities if needed.",
+ "Alert: handle reports of marijuana use and adhere to protocols for ensuring public safety and compliance.",
+ "Response needed: investigate reports of a person smoking weed and take steps to ensure community standards are upheld.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(558.51, -2590.25, 6.19),
+ [2] = vector3(314.44, -997.08, 29.18),
+ [3] = vector3(195.41, -948.04, 30.09),
+ [4] = vector3(171.31, -1077.74, 29.19),
+ [5] = vector3(34.17, -1025.83, 29.47),
+ [6] = vector3(-137.15, -1180.85, 25.25),
+ [7] = vector3(-306.71, -1167.35, 23.26),
+ [8] = vector3(-318.98, -1334.59, 31.34),
+ [9] = vector3(-356.58, -1483.50, 30.16),
+ [10] = vector3(-342.61, -1566.72, 25.22),
+ [11] = vector3(-429.75, -1721.61, 19.05),
+ [12] = vector3(-575.62, -1793.78, 22.73),
+ [13] = vector3(-249.28, -1939.75, 29.95),
+ [14] = vector3(-331.26, -2171.95, 10.32),
+ [15] = vector3(-809.27, -2328.58, 14.57),
+ [16] = vector3(-1148.01, -1984.79, 13.16),
+ [17] = vector3(-1247.68, -1711.14, 4.47),
+ [18] = vector3(-1216.14, -1525.44, 4.26),
+ [19] = vector3(-1285.50, -1408.50, 4.45),
+ [20] = vector3(-1493.06, -1369.73, 2.15),
+ [21] = vector3(-1817.37, -1240.33, 13.02),
+ [22] = vector3(-1654.58, -362.49, 49.48),
+ [23] = vector3(-1318.32, -152.82, 46.39),
+ [24] = vector3(-516.12, -446.37, 34.19),
+ [25] = vector3(-302.33, -262.08, 32.42),
+ [26] = vector3(-188.07, -88.38, 52.18),
+ [27] = vector3(-43.71, -12.89, 69.87),
+ [28] = vector3(83.45, 33.97, 73.51),
+ [29] = vector3(243.14, 117.53, 102.62),
+ [30] = vector3(323.57, 174.77, 103.61),
+ [31] = vector3(193.88, 296.12, 105.62),
+ [32] = vector3(173.28, 387.58, 109.38),
+ [33] = vector3(206.88, 777.59, 205.56),
+ [34] = vector3(1221.91, 2722.65, 38.00),
+ [35] = vector3(1771.69, 3306.27, 41.17),
+ [36] = vector3(1633.14, 3559.25, 35.15),
+ [37] = vector3(1646.57, 3725.12, 34.34),
+ [38] = vector3(1767.44, 3754.12, 33.83),
+ [39] = vector3(1978.10, 3759.90, 32.18),
+ [40] = vector3(2461.98, 4063.67, 38.06),
+ [41] = vector3(2108.17, 4767.26, 41.17),
+ [42] = vector3(1695.52, 4784.01, 42.01),
+ [43] = vector3(1669.93, 4768.75, 41.85),
+ [44] = vector3(1429.15, 4384.90, 44.18),
+ [45] = vector3(1684.00, 6422.10, 32.27),
+ [46] = vector3(131.79, 6636.05, 31.81),
+ [47] = vector3(76.80, 6347.70, 31.37),
+ [48] = vector3(-18.15, 6392.06, 31.44),
+ [49] = vector3(-104.94, 6256.18, 31.35),
+ [50] = vector3(-252.48, 6213.64, 31.49),
+ [51] = vector3(-329.01, 6222.01, 31.48),
+ },
+ PedChanceToFleeFromPlayer = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 10, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 10, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 10000, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 15000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "flee", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_bat",
+ "weapon_hammer",
+ "weapon_wrench",
+ "weapon_pistol",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ local scenario = ERS_SelectRandomSmokeScenario()
+ TaskStartScenarioInPlace(ped, scenario, 0, true)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ local diameter = 10
+
+ -- Build suspects
+ local suspects = math.random(1, 3)
+ for i = 1, suspects do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local pedModel = ERS_GetRandomModel(Config.randomGangPeds)
+ local pedCoords = vector3(coords.x, coords.y, coords.z+1.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_sr_stranded_island.lua b/resources/night_ers/callouts/plugins/callout_sr_stranded_island.lua
new file mode 100644
index 000000000..f66fa27a2
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_sr_stranded_island.lua
@@ -0,0 +1,101 @@
+Config.Callouts["sr_stranded_island"] = {
+
+ Enabled = true,
+ CalloutName = "Wounded person stranded on an island",
+ CalloutDescriptions = {
+ "A wounded individual is stranded on an island; rescue teams are on their way.",
+ "Medical personnel are urgently needed for an injured person isolated on an island.",
+ "Rescue units have been deployed to assist a wounded person found on an island.",
+ "A critical rescue operation is underway for an injured individual on an island.",
+ "Swift medical intervention required for a person injured and stranded on an island.",
+ "Responders are racing against time to save a wounded person on an island.",
+ "A call for help has been made to rescue an injured person marooned on an island.",
+ "Emergency response teams are heading to an island to aid a wounded individual.",
+ "A person in distress has been located on an island; immediate rescue efforts are needed.",
+ "Urgent assistance required for a person injured on an island; rescue teams mobilized.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Ambulance, Fire.",
+ policeRequired = true,
+ ambulanceRequired = true,
+ fireRequired = true,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(-2183.9011, 5183.6987, 16.6627),
+ [2] = vector3(-2043.3984, 5266.8096, 17.7975),
+ [3] = vector3(-1816.4592, 5488.5684, 7.9016),
+ [4] = vector3(-1630.2252, 5442.6216, 12.8220),
+ [5] = vector3(-1454.4152, 5413.7739, 22.8619),
+ [6] = vector3(-103.3360, 7289.8325, 16.7094),
+ [7] = vector3(15.7447, 7635.1982, 14.3738),
+ [8] = vector3(230.6882, 7441.3452, 21.9909),
+ [9] = vector3(3633.8091, 5672.4092, 8.6487),
+ [10] = vector3(3685.1494, 4961.5391, 18.3950),
+ [11] = vector3(3942.4944, 4642.4819, 18.2710),
+ [12] = vector3(4122.7661, 4506.2070, 16.9941),
+ [13] = vector3(4073.5979, 4211.8301, 14.0132),
+ [14] = vector3(3479.4202, 2598.7239, 12.8363),
+ [15] = vector3(3324.3218, 2194.2185, 1.4920),
+ [16] = vector3(3084.3245, 1600.1307, 12.7106),
+ [17] = vector3(3053.0583, 1437.5079, 13.5563),
+ [18] = vector3(3113.5139, 1154.7980, 18.8581),
+ [19] = vector3(2951.2944, 1019.1576, 10.8890),
+ [20] = vector3(3015.9016, 883.7566, 8.0428),
+ [21] = vector3(3213.9888, 593.5472, 4.3898),
+ [22] = vector3(3117.5991, 606.0804, 9.6844),
+ [23] = vector3(3137.9255, 562.7927, 3.6338),
+ [24] = vector3(3210.8066, 177.3137, 18.3535),
+ [25] = vector3(3163.3364, -68.5841, 17.3274),
+ [26] = vector3(3251.6924, -144.8231, 16.3246),
+ [27] = vector3(3030.9824, -302.7097, 15.1117),
+ [28] = vector3(2640.5403, -1248.3137, 1.8464),
+ [29] = vector3(2835.7522, -1427.0204, 11.3241),
+ [30] = vector3(2329.3782, -2308.8440, 1.3600),
+ [31] = vector3(2144.9788, -2607.6042, 8.3746),
+ [32] = vector3(1798.7809, -2817.9043, 6.2547),
+ [33] = vector3(1431.5016, -2812.7676, 5.4683),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ ERS_ApplyBloodToPed(ped)
+ local scenario = ERS_SelectRandomWoundedPersonScenario()
+ TaskStartScenarioInPlace(ped, scenario, 0, true)
+ ERS_CreateFlareAtCoordinate(calloutDataClient.Coordinates)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ -- Build ped
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_sr_wounded_hiker.lua b/resources/night_ers/callouts/plugins/callout_sr_wounded_hiker.lua
new file mode 100644
index 000000000..f0bfb9aba
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_sr_wounded_hiker.lua
@@ -0,0 +1,107 @@
+Config.Callouts["sr_wounded_hiker"] = {
+
+ Enabled = true,
+ CalloutName = "Wounded hiker on a mountain",
+ CalloutDescriptions = {
+ "Emergency responders have located a wounded hiker on a mountain and are providing assistance.",
+ "Authorities report that a wounded hiker has been found on a mountain, requiring immediate medical attention.",
+ "A wounded hiker has been located on a mountain, necessitating urgent action to ensure their safety.",
+ "Critical situation with a wounded hiker located on a mountain; medical personnel are needed for support.",
+ "Immediate response needed to provide medical assistance to the wounded hiker on the mountain.",
+ "A wounded hiker has been found on a mountain, posing a severe threat to their health; medical reinforcements are necessary.",
+ "Emergency crews are requesting medical backup to assist in providing care to the wounded hiker on the mountain.",
+ "An urgent call for help has been issued to handle a wounded hiker on a mountain and ensure their well-being.",
+ "Responders are on the scene with a wounded hiker on a mountain and need extra support to provide necessary care.",
+ "A serious emergency involving a wounded hiker on a mountain demands swift action to provide medical attention and ensure their recovery.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Ambulance, Fire.",
+ policeRequired = true,
+ ambulanceRequired = true,
+ fireRequired = true,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(1636.79, 316.93, 257.37),
+ [2] = vector3(971.07, 1035.19, 255.01),
+ [3] = vector3(492.52, 1430.20, 348.07),
+ [4] = vector3(-477.16, 1506.49, 387.38),
+ [5] = vector3(-2458.71, 2106.71, 128.77),
+ [6] = vector3(-1359.00, 3033.32, 108.77),
+ [7] = vector3(-931.42, 3231.37, 165.68),
+ [8] = vector3(-701.86, 3417.53, 175.38),
+ [9] = vector3(-382.24, 3443.27, 174.59),
+ [10] = vector3(-607.16, 4130.06, 174.42),
+ [11] = vector3(-1138.60, 3841.83, 473.76),
+ [12] = vector3(-1006.31, 4513.29, 159.06),
+ [13] = vector3(-729.99, 4692.80, 214.97),
+ [14] = vector3(-665.98, 4743.13, 242.80),
+ [15] = vector3(-953.59, 4825.62, 307.56),
+ [16] = vector3(-181.78, 4899.77, 333.31),
+ [17] = vector3(-56.61, 5240.92, 372.42),
+ [18] = vector3(94.51, 5681.98, 494.71),
+ [19] = vector3(352.54, 5665.37, 686.56),
+ [20] = vector3(478.62, 5654.97, 750.77),
+ [21] = vector3(543.72, 5643.06, 772.24),
+ [22] = vector3(680.14, 5266.46, 532.61),
+ [23] = vector3(1861.35, 5396.27, 224.39),
+ [24] = vector3(2325.34, 6191.57, 173.38),
+ [25] = vector3(2190.97, 6310.20, 187.08),
+ [26] = vector3(2589.27, 6119.09, 179.64),
+ [27] = vector3(2755.07, 6128.20, 265.87),
+ [28] = vector3(2837.06, 5964.97, 351.38),
+ [29] = vector3(2912.71, 5659.78, 235.56),
+ [30] = vector3(2937.77, 5203.86, 142.13),
+ [31] = vector3(3209.33, 4747.44, 192.55),
+ [32] = vector3(3442.59, 4250.45, 230.11),
+ [33] = vector3(3289.66, 3136.04, 252.29),
+ [34] = vector3(2952.92, 2504.37, 164.71),
+ [35] = vector3(1939.98, 1078.99, 251.30),
+ [36] = vector3(2148.21, 747.11, 260.15),
+ [37] = vector3(1996.37, -184.50, 271.41),
+ [38] = vector3(2028.24, -1771.37, 134.18),
+ [39] = vector3(1895.74, -2156.22, 154.96),
+ [40] = vector3(-2551.98, 457.35, 209.33),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ ERS_ApplyBloodToPed(ped)
+ local scenario = ERS_SelectRandomWoundedPersonScenario()
+ TaskStartScenarioInPlace(ped, scenario, 0, true)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 5000) -- short, to make it harder to find. :)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ -- Build ped
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_stolen motorbike.lua b/resources/night_ers/callouts/plugins/callout_stolen motorbike.lua
new file mode 100644
index 000000000..60932f913
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_stolen motorbike.lua
@@ -0,0 +1,132 @@
+Config.Callouts["Stolen_motorbike"] = {
+ Enabled = true,
+ CalloutName = "Stolen Motorbike",
+ CalloutDescriptions = {
+ "Reports of a stolen motorbike, further details pending",
+ "Suspected theft of motorbike reported, additional information needed",
+ "Incident involving stolen motorbike, assess situation for safety",
+ "Motorcycle theft reported, prioritize response for recovery",
+ "Reported theft of motorbike, prompt investigation required",
+ "Motorbike reported missing, coordinate search and recovery efforts",
+ "Stolen motorcycle reported, assess potential risks",
+ "Suspected theft of motorbike, approach investigation with caution",
+ "Reports of motorbike theft, prioritize response for recovery",
+ "Motorbike theft incident reported, coordinate with authorities",
+ },
+ CalloutUnitsRequired = {
+ description = "Police.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(340.61, -1038.00, 29.27), -- Mission Row
+ [2] = vector3(54.32, -1312.17, 29.27), -- Strawberry
+ [3] = vector3(23.96, -1738.95, 29.27), -- Mall Grove Street
+ [4] = vector3(-1026.59, -2724.31, 13.77), -- Airport
+ [5] = vector3(-333.22, 6146.83, 31.49), -- Church (Paleto)
+ [6] = vector3(454.24, -765.57, 27.37), -- China town MR (City)
+ [7] = vector3(2002.19, 3798.70, 32.18), -- Mechanic (Sandy)
+ [8] = vector3(-946.74, -787.83, 15.92), -- 8087 Skatepark (City)
+ [9] = vector3(-166.79, 6271.88, 31.49), -- 1026 (Paleto)
+ [10] = vector3(-284.55, 6051.91, 31.51), -- 1033 (Paleto)
+ [11] = vector3(-17.17, 6264.73, 31.23), -- 1023 (Paleto)
+ [12] = vector3(200.57, 6630.61, 31.52), -- 8087 (Paleto)
+ [13] = vector3(1861.29, 3870.04, 33.07), -- Random house (Sandy)
+ [14] = vector3(1709.93, 3869.28, 34.78), -- House Patriot (Sandy)
+ [15] = vector3(1512.02, 4790.44, 33.51), -- Boat house (Sandy)
+ [16] = vector3(1091.11, -764.46, 57.28), -- West mirror drive, Mirror park
+ [17] = vector3(216.64, 648.34, 188.97), -- Jessop Rd, Vinewood Hills
+ [18] = vector3(-721.72, 593.73, 141.52), -- Durham Rd, Vinewood hills
+ [19] = vector3(-1609.13, 167.21, 59.33), -- The White way, Richman
+ [20] = vector3(-1619.83, -532.31, 34.06), -- Hitchen Rd, Del Perro
+ [21] = vector3(-1580.70, -1044.14, 12.64), -- Longcroft rd, Del Perro pier
+ [22] = vector3(-1174.80, -1513.21, 3.89), -- Fieldcroft, Vespucci beach
+ [23] = vector3(-625.06, -1187.81, 14.67), -- Church St, La Puerta
+ [24] = vector3(-471.76, -816.77, 30.13), -- Grove Rd, Little Seoul
+ [25] = vector3(-17.21, -1458.49, 30.14), -- Kendale Rd, Strawberry
+ [26] = vector3(199.27, 6574.46, 31.80),
+ [27] = vector3(1391.85, 6500.05, 19.76),
+ [28] = vector3(1723.97, 6387.80, 34.03),
+ [29] = vector3(2553.27, 5194.82, 50.78),
+ [30] = vector3(-136.89, 6224.72, 31.34),
+ [31] = vector3(2600.13, 5119.80, 44.78),
+ [32] = vector3(2446.42, 4009.14, 37.06),
+ [33] = vector3(1831.28, 3258.06, 44.10),
+ [34] = vector3(1977.05, 3081.72, 47.07),
+ [35] = vector3(2558.44, 2702.69, 41.77),
+ [36] = vector3(2854.36, 2819.08, 53.09),
+ [37] = vector3(254.91, 2848.28, 43.59),
+ [38] = vector3(85.82, 3595.74, 39.75),
+ [39] = vector3(-821.40, 5761.81, 5.54),
+ [40] = vector3(-300.05, 6057.30, 31.35),
+ },
+ PedChanceToFleeFromPlayer = 90, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 10, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 10, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 2000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "flee", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_knife",
+ "weapon_pistol",
+ },
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+ local vehicle = nil
+ local driver = nil
+
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ vehicle = veh
+ ERS_RequestNetControlForEntity(vehicle)
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ driver = ped
+ ERS_RequestNetControlForEntity(driver)
+ if not IsPedOnAnyBike(driver) then
+ SmashVehicleWindow(vehicle, 0) -- break driver window
+ end
+ if not IsPedInAnyVehicle(driver, true) then
+ TaskEnterVehicle(driver, vehicle, 5000, -1, 2.0, 1, 0)
+ Wait(5000)
+ ERS_SetPedToFleeFromPlayer(driver)
+ else
+ ERS_SetPedToFleeFromPlayer(driver)
+ end
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(vehicleList, 15000)
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+ -- Build vehicle
+ local vehModel = ERS_GetRandomModel(Config.randomMotorBikes)
+ local vehType = "bike"
+ local vehCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build ped
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z +1.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(ped, vehicle, -1)
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_stolen_boat.lua b/resources/night_ers/callouts/plugins/callout_stolen_boat.lua
new file mode 100644
index 000000000..1f64fe5ee
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_stolen_boat.lua
@@ -0,0 +1,103 @@
+Config.Callouts["stolen_boat"] = {
+
+ Enabled = true,
+ CalloutName = "Stolen boat",
+ CalloutDescriptions = {
+ "Respond to a stolen boat; immediate action required to apprehend suspects and secure the vessel.",
+ "Emergency response needed for a stolen boat; deploy marine units to intercept and recover the vessel.",
+ "Urgent call to respond to a stolen boat; mobilize resources to apprehend the perpetrators and return the vessel safely.",
+ "Stolen boat reported; respond swiftly to prevent the vessel from being used for illicit activities.",
+ "Incident alert: stolen boat; deploy law enforcement assets to pursue and recover the stolen vessel.",
+ "Emergency response required for a stolen boat; prioritize apprehension of suspects and recovery of the vessel.",
+ "Respond to the stolen boat incident; expedite efforts to apprehend suspects and secure the vessel.",
+ "Stolen boat reported; activate emergency protocols and coordinate with maritime units to intercept the vessel.",
+ "Immediate response needed for a stolen boat; prioritize public safety and prevent further criminal activity.",
+ "Urgent callout: stolen boat; respond promptly to apprehend suspects and safeguard maritime security.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(320.3609, 3864.7258, 31.8404),
+ [2] = vector3(-720.7589, -1345.0660, 0.1235),
+ [3] = vector3(-922.4822, -1456.1830, 0.0786),
+ [4] = vector3(-969.0080, -1370.0115, 0.0762),
+ [5] = vector3(-968.2100, -1757.9313, 0.4642),
+ [6] = vector3(-1233.5177, -1928.0292, 0.6897),
+ [7] = vector3(-1556.8328, -1318.2015, 0.7824),
+ [8] = vector3(-1822.8844, -1007.8162, 1.9738),
+ [9] = vector3(-2903.9915, -71.5243, 0.3220),
+ [10] = vector3(-3163.2051, 200.5076, 0.4951),
+ [11] = vector3(-3276.3652, 826.4033, -0.1878),
+ [12] = vector3(-3259.8818, 1342.3621, 0.3533),
+ [13] = vector3(-2861.9382, 2314.9438, 0.0152),
+ [14] = vector3(-64.3367, 3825.8274, 30.6813),
+ [15] = vector3(1303.2426, 3718.4692, 30.0989),
+ [16] = vector3(2338.5203, 4292.5669, 29.8632),
+ [17] = vector3(1344.1510, 4246.4478, 30.7815),
+ [18] = vector3(-834.3231, 6160.4565, 0.2792),
+ [19] = vector3(-289.6857, 6687.8032, -1.2348),
+ [20] = vector3(1191.1776, 6624.9277, 1.3072),
+ },
+ PedChanceToFleeFromPlayer = 100, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ ERS_RequestNetControlForEntity(veh)
+
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ ERS_SetPedToFleeFromPlayer(ped)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(vehicleList, 15000)
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ -- Build boat
+ local vehModel = ERS_GetRandomModel(Config.randomBoats)
+ local vehType = "boat"
+ local vehCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build suspect
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(ped, vehicle, -1)
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_stolen_helicopter.lua b/resources/night_ers/callouts/plugins/callout_stolen_helicopter.lua
new file mode 100644
index 000000000..dae3f3871
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_stolen_helicopter.lua
@@ -0,0 +1,124 @@
+Config.Callouts["stolen_helicopter"] = {
+
+ Enabled = true,
+ CalloutName = "Reports of theft of a helicopter",
+ CalloutDescriptions = {
+ "Emergency: respond immediately to reports of a helicopter theft; secure the airspace and prevent unauthorized takeoff.",
+ "Urgent alert: dispatch units to the location of the reported helicopter theft; coordinate with aviation authorities to track and recover the aircraft.",
+ "Critical response: attend to a report of a stolen helicopter; prioritize the safety of passengers and ground crew while apprehending the suspect.",
+ "Immediate action: investigate reports of a helicopter theft; secure the airport and ensure the aircraft remains grounded.",
+ "Alert: respond promptly to a helicopter theft incident; take necessary measures to intercept the aircraft before it leaves the area.",
+ "Incident reported: handle a situation involving a stolen helicopter; work with air traffic control to monitor and manage the threat.",
+ "Situation alert: assist in tracking a stolen helicopter; ensure the safety of all individuals involved and recover the aircraft.",
+ "Emergency response: deal with a helicopter theft incident; follow aviation security protocols to prevent the helicopter from taking off.",
+ "Immediate intervention: respond to reports of a helicopter theft; prioritize grounding the aircraft and apprehending the suspect.",
+ "Response needed: investigate reports of a stolen helicopter urgently; take appropriate actions to recover the aircraft and ensure airspace security.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(-1044.4764, -2992.8120, 13.9476), -- Make sure there is enough space for the helicopter to take off.
+ [2] = vector3(1746.6627, 3240.6746, 41.7872),
+ [3] = vector3(1627.9459, 3254.4121, 41.0430),
+ [4] = vector3(-1582.3992, -569.0988, 116.3279),
+ [5] = vector3(-913.2054, -378.4743, 137.9057),
+ [6] = vector3(-752.0067, -1471.4247, 4.9620),
+ [7] = vector3(313.4475, -1464.9767, 46.5095),
+ [8] = vector3(478.4208, -3369.8223, 6.0699),
+ [9] = vector3(-1606.8187, -3103.1138, 13.9442),
+ [10] = vector3(-1188.5243, -3342.3813, 13.9440),
+ [11] = vector3(-1094.5204, -2889.7732, 13.9446),
+ [12] = vector3(-1204.9742, -2844.7400, 13.9449),
+ [13] = vector3(-1181.7083, -2627.5745, 13.9449),
+ [14] = vector3(-1197.5691, -2394.7705, 13.9449),
+ [15] = vector3(-1268.3094, -2132.3171, 13.9407),
+ },
+ PedChanceToFleeFromPlayer = 100, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 10000,-- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 15000,-- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "flee", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+
+ local heli
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ ERS_RequestNetControlForEntity(veh)
+ SetVehicleEngineOn(veh, true, true, false)
+ --SetHeliBladesSpeed(veh, 0.5)
+ heli = veh
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+
+ if index == 1 then -- Pilot
+ ERS_ClearPedTasksAndBlockEvents(ped)
+
+ while not IsPedInAnyHeli(ped) do
+ ERS_RequestNetControlForEntity(ped)
+ ERS_RequestNetControlForEntity(heli)
+ SetPedIntoVehicle(ped, heli, -1)
+ Wait(500)
+ end
+
+ local destinationX, destinationY, destinationZ = 2170.03, 3783.03, 33.09 -- Random, this case Sandy shores.
+ TaskHeliMission(ped, heli, 0, 0, destinationX, destinationY, destinationZ, 4, 1.0, -1.0, -1.0, 10, 10, 5.0, 0);
+
+ else -- Passengers
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ end
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(vehicleList, 60000)
+ ERS_CreateTemporaryBlipForEntities(pedList, 60000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ -- Build helicopter
+ local vehModel = ERS_GetRandomModel(Config.randomHelicopters)
+ local vehType = "heli"
+ local vehCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build pilot & passengers
+ local seatIndex = -1
+ local randomAmountOfPassengers = math.random(4)
+ for i = 1, randomAmountOfPassengers do
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y + math.random(5)+.0, calloutData.Coordinates.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(ped, vehicle, seatIndex)
+ seatIndex = seatIndex + 1
+ table.insert(pedList, pedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_stolen_plane.lua b/resources/night_ers/callouts/plugins/callout_stolen_plane.lua
new file mode 100644
index 000000000..c06140f20
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_stolen_plane.lua
@@ -0,0 +1,105 @@
+Config.Callouts["stolen_plane"] = {
+
+ Enabled = true,
+ CalloutName = "Reports of theft of a plane",
+ CalloutDescriptions = {
+ "Emergency: respond immediately to reports of a plane theft; secure the airspace and prevent unauthorized takeoff.",
+ "Urgent alert: dispatch units to the location of the reported plane theft; coordinate with aviation authorities to track and recover the aircraft.",
+ "Critical response: attend to a report of a stolen plane; prioritize the safety of passengers and ground crew while apprehending the suspect.",
+ "Immediate action: investigate reports of a plane theft; secure the airport and ensure the aircraft remains grounded.",
+ "Alert: respond promptly to a plane theft incident; take necessary measures to intercept the aircraft before it leaves the area.",
+ "Incident reported: handle a situation involving a stolen plane; work with air traffic control to monitor and manage the threat.",
+ "Situation alert: assist in tracking a stolen plane; ensure the safety of all individuals involved and recover the aircraft.",
+ "Emergency response: deal with a plane theft incident; follow aviation security protocols to prevent the plane from taking off.",
+ "Immediate intervention: respond to reports of a plane theft; prioritize grounding the aircraft and apprehending the suspect.",
+ "Response needed: investigate reports of a stolen plane urgently; take appropriate actions to recover the aircraft and ensure airspace security.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(-1606.8677, -2780.2085, 13.9583), -- Make sure there is enough space for the plane to take off in all directions.
+ [2] = vector3(-1382.6349, -3018.6328, 13.9576),
+ [3] = vector3(-927.0759, -3282.0020, 13.9533),
+ [4] = vector3(-1564.1737, -2630.7725, 13.9516),
+ [5] = vector3(-1361.4224, -2278.6238, 13.9500),
+ [6] = vector3(1599.8428, 3210.6877, 40.4612),
+ [7] = vector3(1164.2180, 3096.4104, 40.4341),
+ [8] = vector3(1991.5559, 4750.9058, 41.1150),
+ [9] = vector3(2118.0952, 4804.4136, 41.1790),
+ [10] = vector3(1410.3528, 3098.2681, 40.4363),
+ },
+ PedChanceToFleeFromPlayer = 100, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 10000,-- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 15000,-- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "flee", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ local aircraft
+
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ ERS_RequestNetControlForEntity(veh)
+ aircraft = veh
+ SetVehicleEngineOn(aircraft, true, true, false)
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ Citizen.Wait(1000)
+ -- ERS_SetPedToFleeFromPlayer(ped)
+
+ -- Specify the destination coordinates
+ local destinationX = calloutDataClient.Coordinates.x+1000.0
+ local destinationY = calloutDataClient.Coordinates.y-1000.0
+ local destinationZ = calloutDataClient.Coordinates.z+250.0
+
+ TaskPlaneMission(ped, aircraft, 0, 0, destinationX, destinationY, destinationZ, 4, 100.0, 100.0, 0.0, 2000.0, 400.0)
+ -- TaskPlaneMission(pilot, aircraft, targetVehicle, targetPed, destinationX, destinationY, destinationZ, missionFlag, angularDrag, unk, targetHeading, maxZ, minZ)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(vehicleList, 30000)
+ ERS_CreateTemporaryBlipForEntities(pedList, 30000)
+
+ --ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ -- Build vehicle
+ local vehModel = ERS_GetRandomModel(Config.randomPlanes)
+ local vehType = "plane"
+ local vehCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build pilot
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z+3.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(ped, vehicle, -1)
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_stolen_sportscar.lua b/resources/night_ers/callouts/plugins/callout_stolen_sportscar.lua
new file mode 100644
index 000000000..8ee459c78
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_stolen_sportscar.lua
@@ -0,0 +1,104 @@
+Config.Callouts["stolen_sportscar"] = {
+
+ Enabled = true,
+ CalloutName = "Drug smugglers warehouse located",
+ CalloutDescriptions = {
+ "Emergency: respond immediately to reports of a drug smuggling warehouse; secure the area and apprehend suspects.",
+ "Urgent alert: dispatch units to the location of a drug smuggling operation; prevent the suspects from escaping and seize contraband.",
+ "Critical response: attend to a report of a drug smuggling warehouse; prioritize securing evidence and detaining all involved.",
+ "Immediate action: investigate reports of a drug smuggling warehouse; take necessary measures to shut down the operation.",
+ "Alert: respond promptly to the discovery of a drug smuggling warehouse; ensure the safety of officers and gather all evidence.",
+ "Incident reported: handle a situation involving a drug smuggling warehouse; coordinate with narcotics units to manage the operation.",
+ "Situation alert: assist in raiding a drug smuggling warehouse; secure the location and arrest all suspects.",
+ "Emergency response: deal with a discovered drug smuggling warehouse; follow protocols to seize drugs and arrest individuals.",
+ "Immediate intervention: respond to reports of a drug smuggling warehouse; prioritize the apprehension of suspects and confiscation of illegal substances.",
+ "Response needed: investigate reports of a drug smuggling operation urgently; take appropriate actions to dismantle the operation and secure the area.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(-519.6938, -2835.9790, 6.0004),
+ [2] = vector3(-47.4459, -2224.0042, 7.8117),
+ [3] = vector3(-153.1731, -2665.0564, 6.0002),
+ [4] = vector3(72.0018, -2737.7595, 6.0031),
+ [5] = vector3(184.9508, -3120.9741, 5.7819),
+ [6] = vector3(1177.8940, -3243.2639, 5.9581),
+ [7] = vector3(1016.7790, -2332.0244, 30.4876),
+ [8] = vector3(1065.3457, -1961.4900, 31.0145),
+ [9] = vector3(1765.0731, -1532.6378, 112.4530),
+ [10] = vector3(2985.3704, 3495.2598, 71.3819),
+ [11] = vector3(2227.7437, 5167.9551, 58.5628),
+ [12] = vector3(1377.2062, 4369.2319, 44.0381),
+ [13] = vector3(10.6306, 6335.0142, 31.2360),
+ [14] = vector3(2372.3931, 3115.5803, 48.0733),
+ [15] = vector3(26.8874, 3710.8281, 39.6957),
+ [16] = vector3(-88.7946, 2802.2861, 53.3044),
+ [17] = vector3(216.7919, 2455.8967, 56.5108),
+ [18] = vector3(170.9110, 2249.3745, 91.2255),
+ [19] = vector3(-3169.1328, 1293.6431, 14.3532),
+ [20] = vector3(-296.7219, -2714.0962, 6.0003),
+ },
+ PedChanceToFleeFromPlayer = 20, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 80, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 100, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 10000,-- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 15000,-- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "attack",-- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_assaultrifle",
+ "weapon_pistol",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ ERS_RequestNetControlForEntity(veh)
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ ERS_SetPedToFleeFromPlayer(ped)
+ SetDriveTaskDrivingStyle(ped, drivingStyle) -- drivingStyle is pre-configured, you can replace this with your own driving style hash if you like.
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(vehicleList, 30000)
+ ERS_CreateTemporaryBlipForEntities(pedList, 30000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ -- Build vehicle
+ local vehModel = ERS_GetRandomModel(Config.randomLuxuryVehicles)
+ local vehType = "automobile"
+ local vehCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build ped
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z +1.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(ped, vehicle, -1)
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_stolen_tractor.lua b/resources/night_ers/callouts/plugins/callout_stolen_tractor.lua
new file mode 100644
index 000000000..0fbbe59c6
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_stolen_tractor.lua
@@ -0,0 +1,98 @@
+Config.Callouts["stolen_tractor"] = {
+ Enabled = true,
+ CalloutName = "Theft of a tractor",
+ CalloutDescriptions = {
+ "Reports of theft of a tractor, details pending",
+ "Suspected theft of a tractor reported, further information needed",
+ "Incident involving stolen tractor, assess situation for safety",
+ "Theft of a tractor reported, prioritize response for recovery",
+ "Vehicle reported missing, coordinate search and recovery efforts",
+ "Suspected theft of vehicle, approach investigation with caution",
+ "Reports of theft of a tractor, prioritize response for recovery",
+ "Theft of a tractor incident reported, coordinate with authorities",
+ },
+ CalloutUnitsRequired = {
+ description = "Police.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(2580.3032, 4350.1309, 40.6124),
+ [2] = vector3(2115.0203, 4938.2480, 40.7989),
+ [3] = vector3(2339.8333, 4944.9595, 41.9972),
+ [4] = vector3(2518.6138, 5010.1162, 44.0731),
+ [5] = vector3(2710.1873, 4156.1001, 43.0990),
+ [6] = vector3(1631.6482, 3870.9463, 33.8225),
+ [7] = vector3(304.6279, 6515.4443, 29.3935),
+ [8] = vector3(-458.2026, -1713.3237, 18.6376),
+ [9] = vector3(1494.8003, -1941.1366, 70.7175),
+ [10] = vector3(1440.6566, 1034.6569, 114.2230),
+ },
+ PedChanceToFleeFromPlayer = 90, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 10, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 10, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 10000,-- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 15000,-- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "flee", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_knife",
+ "weapon_pistol",
+ },
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+ local vehicle
+
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ vehicle = veh
+ ERS_RequestNetControlForEntity(vehicle)
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ if not IsPedOnAnyBike(ped) then
+ SmashVehicleWindow(vehicle, 0) -- break driver window for example
+ end
+ if not IsPedInAnyVehicle(ped, true) then
+ TaskEnterVehicle(ped, vehicle, 5000, -1, 2.0, 1, 0)
+ Wait(5000)
+ ERS_SetPedToFleeFromPlayer(ped)
+ else
+ ERS_SetPedToFleeFromPlayer(ped)
+ end
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(vehicleList, 15000)
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+ -- Build vehicle
+ local vehModel = "tractor2"
+ local vehType = "automobile"
+ local vehCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build ped
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z +1.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(ped, vehicle, -1)
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
diff --git a/resources/night_ers/callouts/plugins/callout_stolen_truck.lua b/resources/night_ers/callouts/plugins/callout_stolen_truck.lua
new file mode 100644
index 000000000..4d499efda
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_stolen_truck.lua
@@ -0,0 +1,107 @@
+Config.Callouts["stolen_truck"] = {
+
+ Enabled = true,
+ CalloutName = "Stolen truck",
+ CalloutDescriptions = {
+ "Respond to a stolen truck; immediate action required to apprehend suspects and recover the vehicle.",
+ "Emergency response needed for a stolen truck; deploy units to intercept and recover the vehicle.",
+ "Urgent call to respond to a stolen truck; mobilize resources to apprehend the perpetrators and return the vehicle safely.",
+ "Stolen truck reported; respond swiftly to prevent the vehicle from being used for criminal activities.",
+ "Incident alert: stolen truck; deploy law enforcement assets to pursue and recover the stolen vehicle.",
+ "Emergency response required for a stolen truck; prioritize apprehension of suspects and recovery of the vehicle.",
+ "Respond to the stolen truck incident; expedite efforts to apprehend suspects and secure the vehicle.",
+ "Stolen truck reported; activate emergency protocols and coordinate with units to intercept the vehicle.",
+ "Immediate response needed for a stolen truck; prioritize public safety and prevent further criminal activity.",
+ "Urgent callout: stolen truck; respond promptly to apprehend suspects and safeguard community security.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(-66.8283, 2832.2595, 53.7482),
+ [2] = vector3(-950.1295, -2582.0771, 13.8310),
+ [3] = vector3(-326.1115, -2165.7007, 10.3181),
+ [4] = vector3(32.2191, -1716.7432, 29.2860),
+ [5] = vector3(307.5628, -1098.0363, 29.3472),
+ [6] = vector3(209.0576, -817.9829, 30.6324),
+ [7] = vector3(898.6524, -3187.9153, 5.8967),
+ [8] = vector3(614.1050, -2702.2434, 5.9083),
+ [9] = vector3(116.4583, -2069.7996, 17.6480),
+ [10] = vector3(406.9794, -638.5778, 28.5001),
+ [11] = vector3(612.8627, 104.1877, 92.8750),
+ [12] = vector3(971.8981, 150.0137, 80.8799),
+ [13] = vector3(2552.4385, 2636.7893, 37.9819),
+ [14] = vector3(2507.8540, 1593.2323, 31.6219),
+ [15] = vector3(2411.8125, 972.2469, 86.6440),
+ [16] = vector3(2663.4463, 3116.9456, 49.9681),
+ [17] = vector3(2662.5396, 3524.7676, 52.4791),
+ [18] = vector3(2841.4377, 3701.9082, 48.9755),
+ [19] = vector3(3282.6230, 5149.8555, 18.7254),
+ [20] = vector3(1689.0770, 4940.0337, 42.1513),
+ [21] = vector3(1317.9303, 4472.5825, 62.5055),
+ },
+ PedChanceToFleeFromPlayer = 100, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_poolcue",
+ "weapon_bottle",
+ "weapon_crowbar",
+ "weapon_bat",
+ "weapon_pistol",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ ERS_RequestNetControlForEntity(veh)
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ ERS_SetPedToFleeFromPlayer(ped)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(vehicleList, 15000)
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ -- Build truck
+ local vehModel = ERS_GetRandomModel(Config.randomTrucks)
+ local vehType = "automobile"
+ local vehCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build suspect
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(ped, vehicle, -1)
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_stuck_roof.lua b/resources/night_ers/callouts/plugins/callout_stuck_roof.lua
new file mode 100644
index 000000000..76d080ec9
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_stuck_roof.lua
@@ -0,0 +1,90 @@
+Config.Callouts["stuck_roof"] = {
+
+ Enabled = true,
+ CalloutName = "Person stuck on a roof",
+ CalloutDescriptions = {
+ "Respond to a report of a person stuck on a roof; provide immediate assistance and ensure their safe descent.",
+ "Alert: person stranded on a roof; deploy units to the location and assess the situation.",
+ "Units needed: emergency call for a person stuck on a roof; focus on ensuring their safety and providing necessary aid.",
+ "Notice: person stranded on a roof reported; act promptly to control the situation and offer assistance.",
+ "Alert: report of a person stuck on a roof; intervention needed to secure the scene and help them down safely.",
+ "Incident reported: person stuck on a roof; take action to deliver urgent care and support.",
+ "Respond to a situation involving a person stranded on a roof; prioritize their safety and coordinate with rescue services.",
+ "Situation alert: person stuck on a roof; provide immediate assistance and ensure the scene is secure.",
+ "Alert: report of a person stranded on a roof; respond swiftly to address the emergency and offer necessary support.",
+ "Response needed: person stuck on a roof; ensure their safety, provide aid, and secure the area.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Ambulance, Fire.",
+ policeRequired = true,
+ ambulanceRequired = true,
+ fireRequired = true,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(294.60, -1278.10, 33.80),
+ [2] = vector3(108.80, -1089.97, 55.29),
+ [3] = vector3(147.44, -1045.87, 49.22),
+ [4] = vector3(-702.66, -677.43, 44.96),
+ [5] = vector3(-1273.67, -590.35, 42.07),
+ [6] = vector3(-950.18, -291.80, 83.12),
+ [7] = vector3(-408.71, -189.23, 69.27),
+ [8] = vector3(-87.21, -295.60, 63.07),
+ [9] = vector3(217.83, -393.84, 59.66),
+ [10] = vector3(461.11, 33.42, 110.89),
+ [11] = vector3(294.16, 310.53, 132.09),
+ [12] = vector3(214.79, 1191.13, 240.26),
+ [13] = vector3(1153.12, 2384.42, 68.36),
+ [14] = vector3(418.17, -1513.96, 40.92),
+ [15] = vector3(112.17, -1523.72, 36.35),
+ [16] = vector3(57.56, -1739.80, 47.70),
+ [17] = vector3(-96.32, -1787.92, 40.60),
+ [18] = vector3(-185.91, -1711.78, 37.68),
+ [19] = vector3(98.72, -1500.22, 36.34),
+ [20] = vector3(81.95, -1389.92, 34.83),
+ [21] = vector3(149.77, -1346.10, 37.44),
+ [22] = vector3(35.06, -1296.72, 34.80),
+ [23] = vector3(-243.15, -1322.39, 48.41),
+ [24] = vector3(416.72, -878.00, 44.56),
+ [25] = vector3(-527.91, -692.21, 44.03),
+ [26] = vector3(-1204.88, -837.79, 29.41),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none",-- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+
+ local scenario = ERS_SelectMentalHealthPersonScenario()
+ TaskStartScenarioInPlace(ped, scenario, 0, true)
+ end
+ end
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ -- Build ped
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_suspect_identified.lua b/resources/night_ers/callouts/plugins/callout_suspect_identified.lua
new file mode 100644
index 000000000..2c99393cb
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_suspect_identified.lua
@@ -0,0 +1,104 @@
+Config.Callouts["suspect_identified"] = {
+ Enabled = true,
+ CalloutName = "Suspect Identified",
+ CalloutDescriptions = {
+ "A suspect has been identified in connection with a reported burglary. Further details pending.",
+ "A suspect has been sighted near the scene of a suspected robbery. Additional information needed.",
+ "A suspect has been identified in an incident involving a reported assault. Assess the situation for safety.",
+ "A suspect has been identified, reportedly after committing a vandalism act. Prioritize response for apprehension.",
+ "A suspect has been identified, reportedly stealing a vehicle. Prompt investigation required.",
+ "A suspect has been identified, reportedly missing after a reported kidnapping. Coordinate search efforts.",
+ "A suspect has been identified, reportedly committing a drug-related offense. Assess potential risks.",
+ "A suspect has been identified in connection with a reported murder. Approach investigation with caution.",
+ "A suspect has been identified, reportedly committing a hit-and-run. Prioritize response for apprehension.",
+ "A suspect has been identified, reportedly committing a fraud. Coordinate with authorities for investigation.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(755.62, -1337.14, 26.23), -- La Mesa
+ [2] = vector3(963.10, -1586.05, 30.45), -- Factory
+ [3] = vector3(219.15, -3002.62, 5.83), -- Elysian Island
+ [4] = vector3(-1036.90, -2736.79, 20.17), -- LSIA
+ [5] = vector3(-1259.30, -1480.23, 4.34), -- Beach
+ [6] = vector3(-1667.05, -503.34, 37.29), -- Hotel Cougar Ave
+ [7] = vector3(-512.53, -1214.96, 18.48), -- Innocence Blvd petrol
+ [8] = vector3(184.97, -1872.13, 24.49),
+ [9] = vector3(241.20, -2042.94, 18.01),
+ [10] = vector3(107.01, -2070.90, 17.65),
+ [11] = vector3(-763.91, -2096.24, 9.02),
+ [12] = vector3(-400.56, -1869.80, 20.63),
+ [13] = vector3(-420.47, -1708.59, 19.37),
+ [14] = vector3(285.36, -1268.65, 29.27),
+ [15] = vector3(272.32, -1143.68, 29.60),
+ [16] = vector3(238.33, -792.10, 30.50),
+ [17] = vector3(-154.03, -612.85, 48.25),
+ [18] = vector3(244.73, -392.47, 46.30),
+ [19] = vector3(171.54, -249.56, 64.62),
+ [20] = vector3(139.72, -123.28, 54.76),
+ [21] = vector3(-48.47, 66.23, 72.48),
+ [22] = vector3(-29.69, 206.49, 106.54),
+ [23] = vector3(-821.16, 396.62, 91.21),
+ [24] = vector3(-1090.35, 599.96, 103.06),
+ [25] = vector3(-1638.11, 71.14, 62.81),
+ [26] = vector3(-1814.13, 782.42, 137.55),
+ [27] = vector3(-1093.47, 2703.74, 19.04),
+ [28] = vector3(180.55, 3120.47, 42.36),
+ [29] = vector3(592.60, 2731.74, 42.04),
+ [30] = vector3(981.21, 2663.35, 43.09),
+ [31] = vector3(1612.62, 3779.56, 34.73),
+ [32] = vector3(2930.88, 4628.00, 48.55),
+ [33] = vector3(2237.87, 4905.76, 40.65),
+ [34] = vector3(1688.74, 4887.84, 42.14),
+ [35] = vector3(-532.96, 4187.62, 192.65),
+ [36] = vector3(-94.59, 6329.54, 33.40),
+ [37] = vector3(-221.75, 6431.83, 31.20),
+ [38] = vector3(-1859.28, 2071.85, 141.00),
+ [39] = vector3(-362.35, 508.65, 118.90),
+ [40] = vector3(323.41, 174.33, 103.64),
+ },
+ PedChanceToFleeFromPlayer = 75, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 5000, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 10000,-- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "flee", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_knife",
+ "weapon_pistol",
+ },
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ ClearPedTasks(ped)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ Wait(100)
+ ERS_SpawnConfiguredWeaponForPed(ped, calloutDataClient)
+ ERS_SetPedToFleeFromPlayer(ped)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+ -- Build ped
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_suspicious_situation.lua b/resources/night_ers/callouts/plugins/callout_suspicious_situation.lua
new file mode 100644
index 000000000..b0ff21b9d
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_suspicious_situation.lua
@@ -0,0 +1,132 @@
+Config.Callouts["suspicious_situation"] = {
+
+ Enabled = true,
+ CalloutName = "Suspicious situation",
+ CalloutDescriptions = {
+ "A situation has been reported as suspicious, requiring immediate investigation.",
+ "Emergency services are needed to address a suspicious incident.",
+ "Reports indicate a suspicious situation, necessitating urgent intervention.",
+ "A suspicious situation has been identified, and additional personnel are needed for investigation and resolution.",
+ "Emergency services have been requested to respond to a suspicious incident.",
+ "A request for assistance has been made by authorities dealing with a suspicious situation.",
+ "Additional units are required to support personnel managing a suspicious situation.",
+ "Emergency backup is required to assist authorities in handling a suspicious incident.",
+ "A call for assistance has been issued by responders dealing with a suspicious situation.",
+ "Reports suggest a situation where immediate intervention is crucial to manage and address a suspicious incident.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(312.62, -729.49, 29.31), -- Strawberry Ave. Textile city
+ [2] = vector3(778.43, -1260.22, 26.39), -- Popular Str. La Mesa
+ [3] = vector3(919.1, -2497.89, 35.96), -- Rooftop Hanger Way, Cypress Flats
+ [4] = vector3(-758.37, -2275.35, 13.06), -- Opium Hotel, Greenwich Pkwy LSIA
+ [5] = vector3(-651.3, -1074.34, 14.76), -- Polomino Ave Little Seoul Appt.
+ [6] = vector3(-922.5, -449.48, 45.21), -- Movie Star Way, Rockford Hills
+ [7] = vector3(-677.35, 231.68, 82.85), -- West Eclipse Blvd, West Vinewood
+ [8] = vector3(2441.1, 4990.92, 46.29), -- Union Rd. Grapeseed
+ [9] = vector3(-1247.26, -1289.18, 3.91),
+ [10] = vector3(-830.33, -691.75, 27.85),
+ [11] = vector3(-930.11, -393.31, 38.97),
+ [12] = vector3(-189.31, -830.65, 30.72),
+ [13] = vector3(105.66, -942.81, 29.69),
+ [14] = vector3(1153.69, -340.26, 67.72),
+ [15] = vector3(399.06, -694.78, 29.28),
+ [16] = vector3(364.27, -789.78, 29.28),
+ [17] = vector3(310.35, -736.36, 29.31),
+ [18] = vector3(-14.66, -570.64, 37.75),
+ [19] = vector3(-312.22, -439.72, 31.97),
+ [20] = vector3(-587.996, -105.99, 42.94),
+ [21] = vector3(-1536.15, -579.45, 33.70),
+ [22] = vector3(-1342.74, -805.67, 18.89),
+ [23] = vector3(-1306.35, -995.69, 4.85),
+ [24] = vector3(-1589.59, -556.76, 34.94),
+ [25] = vector3(-1225.44, -203.92, 39.18),
+ [26] = vector3(1028.15, 2659.62, 39.55),
+ [27] = vector3(489.17, 2610.76, 43.10),
+ [28] = vector3(368.19, 2637.59, 44.49),
+ [29] = vector3(250.44, 2603.57, 45.00),
+ [30] = vector3(610.31, 2731.38, 41.99),
+ [31] = vector3(1379.04, 3597.18, 34.88),
+ [32] = vector3(1520.36, 3761.85, 34.03),
+ [33] = vector3(1724.26, 3719.18, 34.11),
+ [34] = vector3(1989.30, 3767.38, 32.18),
+ [35] = vector3(2434.24, 4020.73, 36.96),
+ [36] = vector3(2500.49, 4081.92, 38.49),
+ [37] = vector3(2646.71, 4254.73, 44.78),
+ [38] = vector3(2104.67, 4768.53, 41.23),
+ [39] = vector3(1702.87, 4803.73, 41.80),
+ [40] = vector3(2527.26, 4211.30, 39.99),
+ },
+ PedChanceToFleeFromPlayer = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 5000, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 10000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "flee", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_poolcue",
+ "weapon_golfclub",
+ "weapon_crowbar",
+ "weapon_bat",
+ "weapon_pistol",
+ "weapon_minismg",
+ "weapon_smg",
+ "weapon_assaultrifle",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ if index == 1 then
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ TaskTurnPedToFaceEntity(ped, NetToPed(math.random(#pedList)), -1)
+ Wait(1000)
+ ClearPedTasks(ped)
+ Wait(500)
+ TaskStartScenarioInPlace(ped, "WORLD_HUMAN_DRUG_DEALER", 0, true)
+ else
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ TaskTurnPedToFaceEntity(ped, NetToPed(pedList[math.random(#pedList)]), -1)
+ Wait(1000)
+ ClearPedTasks(ped)
+ Wait(500)
+ TaskStartScenarioInPlace(ped, "WORLD_HUMAN_DRUG_DEALER_HARD", 0, true)
+ end
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ local diameter = 10
+
+ -- Build suspect peds
+ local suspects = math.random(2, 6)
+ for i = 1, suspects do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+
+ local suspectPedModel = ERS_GetRandomModel(Config.randomPeds)
+ local suspectPedCoords = vector3(coords.x, coords.y, coords.z)
+ local suspectPedHeading = math.random(360)
+ local suspectPedNetId = ERS_CreatePed(suspectPedModel, suspectPedCoords, suspectPedHeading)
+ local suspectPed = NetworkGetEntityFromNetworkId(suspectPedNetId)
+ table.insert(pedList, suspectPedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_taxi_fare_dodger.lua b/resources/night_ers/callouts/plugins/callout_taxi_fare_dodger.lua
new file mode 100644
index 000000000..54aeb67c3
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_taxi_fare_dodger.lua
@@ -0,0 +1,91 @@
+Config.Callouts["taxi_fare_dodger"] = {
+
+ Enabled = true,
+ CalloutName = "Fare dodger",
+ CalloutDescriptions = {
+ "Alert: respond to reports of a fare dodger; ensure the safety of the driver and address the situation promptly.",
+ "Urgent alert: dispatch units to the location of a reported fare dodger; prevent the suspect from fleeing and resolve the issue.",
+ "Immediate action required: attend to reports of a fare dodger; assist the driver in recovering the unpaid fare.",
+ "Notice: check reports of a fare dodger; take necessary actions to identify and handle the suspect.",
+ "Alert: respond promptly to reports of a fare dodger; prioritize the safety of all parties involved and address the issue.",
+ "Incident reported: investigate a fare dodger; work with local authorities to manage the situation effectively.",
+ "Immediate response: address reports of a fare dodger; implement protocols to ensure the driver's compensation and prevent future incidents.",
+ "Situation alert: assist in handling a fare dodger report; ensure the area is secure and support the driver in resolving the issue.",
+ "Emergency response: handle reports of a fare dodger; follow procedures to identify the suspect and recover the unpaid fare.",
+ "Response needed: investigate reports of a fare dodger urgently; take appropriate actions to resolve the situation and support the driver.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(-531.02, -1280.64, 26.05),
+ [2] = vector3(-823.61, -111.83, 27.96),
+ [3] = vector3(-286.70, -332.71, 18.29),
+ [4] = vector3(-1368.22, -527.83, 30.33),
+ [5] = vector3(-491.25, -719.88, 23.90),
+ [6] = vector3(-212.88, -1028.95, 30.14),
+ [7] = vector3(131.76, -1739.58, 30.11),
+ [8] = vector3(-1038.86, -2740.55, 13.35),
+ [9] = vector3(2663.66, 3928.24, 42.34),
+ [10] = vector3(2700.45, 3083.12, 42.76),
+ [11] = vector3(2632.89, 2946.15, 40.42),
+ [12] = vector3(2851.14, 3440.11, 50.92),
+ [13] = vector3(2453.31, 3854.30, 38.94),
+ [14] = vector3(2271.27, 3757.01, 38.42),
+ [15] = vector3(1820.61, 3507.98, 38.32),
+ [16] = vector3(1693.80, 3461.85, 37.02),
+ [17] = vector3(1184.28, 3267.64, 39.20),
+ [18] = vector3(-3040.17, 3745.06, 70.20),
+ [19] = vector3(-4050.71, 5335.75, 83.14),
+ [20] = vector3(-4043.33, 5599.94, 68.38),
+ [21] = vector3(2874.65, 4868.66, 62.60),
+ [22] = vector3(3000.50, 4099.68, 57.18),
+ [23] = vector3(-92.55, 6150.44, 31.80)
+ },
+ PedChanceToFleeFromPlayer = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 10, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 10000, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 15000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "flee", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_knife",
+ "weapon_bat",
+ "weapon_hammer",
+ "weapon_wrench",
+ "weapon_pistol",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ TaskWanderStandard(ped, 10.0, 10)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ -- Build suspect
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_taxi_kidnap.lua b/resources/night_ers/callouts/plugins/callout_taxi_kidnap.lua
new file mode 100644
index 000000000..c60184b5d
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_taxi_kidnap.lua
@@ -0,0 +1,111 @@
+Config.Callouts["taxi_kidnap"] = {
+
+ Enabled = true,
+ CalloutName = "Taxi driver has kidnapped a person",
+ CalloutDescriptions = {
+ "Emergency: respond to reports of a taxi driver kidnapping a person; ensure immediate safety measures and apprehend the suspect.",
+ "Urgent alert: dispatch units to the location of the reported taxi driver kidnapping; prevent the suspect from escaping and ensure victim safety.",
+ "Critical response required: attend to reports of a person being kidnapped by a taxi driver; coordinate with law enforcement to apprehend the perpetrator.",
+ "Notice: check reports of a taxi driver involved in a kidnapping; take immediate action to secure the area and rescue the victim.",
+ "Alert: respond promptly to reports of a taxi driver kidnapping; prioritize the safety of the victim and apprehend the suspect.",
+ "Incident reported: investigate a taxi driver accused of kidnapping; work with authorities to safely resolve the situation.",
+ "Immediate action: address reports of a taxi driver kidnapping; implement protocols to ensure the victim's safety and apprehend the suspect.",
+ "Situation alert: assist in handling a reported taxi driver kidnapping; secure the area and provide necessary support to law enforcement.",
+ "Emergency response: handle reports of a taxi driver involved in a kidnapping; follow procedures to rescue the victim and apprehend the suspect safely.",
+ "Response needed: investigate reports of a taxi driver kidnapping urgently; take appropriate actions to rescue the victim and ensure public safety.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(1332.1410, 3583.2266, 34.8965),
+ [2] = vector3(-697.0299, 5776.0215, 17.3310),
+ [3] = vector3(-206.0954, 6540.2759, 11.0971),
+ [4] = vector3(454.1506, 6624.8638, 23.0635),
+ [5] = vector3(1607.6415, 6481.7622, 21.8166),
+ [6] = vector3(1755.2949, 6392.8755, 36.5205),
+ [7] = vector3(2435.6018, 5135.6597, 46.8859),
+ [8] = vector3(2008.6410, 4633.4839, 41.1880),
+ [9] = vector3(2341.9792, 3785.3757, 37.2855),
+ [10] = vector3(2100.4690, 3326.6724, 45.1793),
+ [11] = vector3(1970.9108, 3079.3357, 46.9376),
+ [12] = vector3(1575.0837, 1307.2762, 92.1799),
+ [13] = vector3(1104.1776, 589.7816, 102.4962),
+ [14] = vector3(717.8885, 195.3734, 87.8088),
+ [15] = vector3(89.7476, 164.2194, 104.5954),
+ [16] = vector3(-1016.2654, -173.1175, 37.7538),
+ [17] = vector3(-1085.8276, -907.6064, 3.5490),
+ [18] = vector3(-1105.2926, -1374.6267, 5.2202),
+ [19] = vector3(-649.9991, -1202.9358, 11.4201),
+ [20] = vector3(-362.4801, -1791.1382, 22.9878),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed"
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ ERS_RequestNetControlForEntity(veh)
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ if index == 1 then
+ ERS_SetPedToFleeFromPlayer(ped)
+ else
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ end
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+ ERS_CreateTemporaryBlipForEntities(vehicleList, 15000)
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ -- Build vehicle
+ local vehModel = "taxi"
+ local vehType = "automobile"
+ local vehCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build driver / passenger
+ local seatIndex = -1
+ local backSeatIndex = 1 -- or 2
+ for i = 1, 2 do
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z + 2.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+ if i == 1 then
+ SetPedIntoVehicle(ped, vehicle, seatIndex)
+ else
+ SetPedIntoVehicle(ped, vehicle, backSeatIndex)
+ end
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_traffic_incident.lua b/resources/night_ers/callouts/plugins/callout_traffic_incident.lua
new file mode 100644
index 000000000..142729067
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_traffic_incident.lua
@@ -0,0 +1,238 @@
+
+Config.Callouts["traffic_incident"] = {
+ Enabled = false,
+ CalloutName = "Traffic Incident",
+ CalloutDescriptions = {
+ "Reported road traffic collision, further details needed",
+ "Collision involving vehicles, assess scene for safety",
+ "Incident on road reported, extent of damage unclear",
+ "Traffic incident with unknown injuries, approach carefully",
+ "Vehicle collision reported, assistance required",
+ "Accident scene identified, evaluate for emergency response",
+ "Collision on roadway, prioritize safety and assistance",
+ "Traffic incident reported, coordinate response accordingly",
+ "Roadway blocked due to collision, assess for hazards",
+ "Vehicle collision with unspecified injuries, response needed",
+ -- Add more if you like.
+ },
+ CalloutUnitsRequired = {
+ description = "Police, ambulance, fire, tow.",
+ policeRequired = true,
+ ambulanceRequired = true,
+ fireRequired = true,
+ towRequired = true,
+ },
+ CalloutLocations = {
+ [1] = vector3(1552.06, 911.62, 77.36), -- LS Freeway
+ [2] = vector3(1127.38, 467.26, 90.36), -- LS Freeway > LS offramp
+ [3] = vector3(27.51, 255.42, 109.61), -- Eclipse Blvd. West Vinewood
+ [4] = vector3(-1080.32, -765.26, 19.36), -- South Rockford Dr. Vespucci Canals
+ [5] = vector3(-1630.25, -991.21, 13.02), -- Red Desert Ave. Del Perro Beach
+ [6] = vector3(-2795.69, 39.72, 14.60), -- Great Ocean Hwy. Pacific Bluffs
+ [7] = vector3(-3097.45, 1318.16, 19.89), -- Barbarenio Rd. Chumash
+ [8] = vector3(-2595.10, 3123.73, 14.58), -- Great Ocean Hwy, Lago Zancudo Tunnel
+ [9] = vector3(-304.33, 6229.86, 31.12), -- Duluoz Ave. Paleto Bay
+ [10] = vector3(2243.96, 5922.29, 49.53), -- Senora Fwy. Braddock Tunnel
+ [11] = vector3(2640.64, 5117.21, 44.48), -- Union Rd. San Chianski Mountain Range
+ [12] = vector3(2183.72, 4748.46, 40.78), -- Joad Ln. Grapeseed
+ [13] = vector3(2170.03, 3783.03, 33.09), -- East Joshua Road Sandy Shores
+ [14] = vector3(1579.06, 3719.70, 34.20), -- Cholla Springs Ave Sandy Shores
+ [15] = vector3(217.62, 3256.18, 41.40), -- Joshua Rd. Grand Senora Desert
+ [16] = vector3(142.01, 1648.18, 228.67), -- Baytree Canyon Rd. Vinewood Hills
+ [17] = vector3(1233.60, 1269.89, 143.35), -- Mt Haan Rd. Vinewood Hills
+ [18] = vector3(798.01, -52.39, 80.30), -- Vinewood Park Dr. East Vinewood
+ [19] = vector3(824.26, -1743.31, 29.09), -- Popular St. Cypress Flats
+ [20] = vector3(169.02, -2661.49, 18.14), -- Elysian Fields Fwy. Elysian Island
+ [21] = vector3(219.35, -2548.59, 5.85), -- Plaice Pl. Elysian Island
+ [22] = vector3(280.12, -1854.27, 26.52), -- Roy Lowenstein Blvd. Rancho
+ [23] = vector3(-669.76, -2067.38, 15.03), -- Daves Ave La Puerta
+ [24] = vector3(-949.97, -1213.69, 4.92), -- Prosperity St. Vespucci Canals
+ [25] = vector3(-862.40, -656.93, 27.53), -- San Andreas Avenue Little Seoul
+ [26] = vector3(-866.07, -939.28, 15.85), -- South Rockford Dr.
+ [27] = vector3(-188.73, -891.99, 29.34), -- Alta Str.
+ [28] = vector3(-707.01, -1611.40, 22.79), -- Dutch London Str.
+ [29] = vector3(738.92, -2466.61, 20.22), -- Hanger Way
+ [30] = vector3(1240.60, -2054.46, 44.35), -- El Rancho Blvd.
+ [31] = vector3(1969.42, -921.52, 79.16), -- Sustancia Rd.
+ [32] = vector3(2454.87, 977.85, 86.22), -- Palomino Hwy.
+ [33] = vector3(2207.62, 2999.60, 45.54), -- Route 68
+ [34] = vector3(1696.63, 3510.35, 36.47), -- East Joshua Rd.
+ [35] = vector3(226.92, 2973.63, 42.71), -- Route 68 Approach
+ [36] = vector3(-1254.90, 2537.62, 18.12), -- Route 68
+ [37] = vector3(-1785.69, 4736.50, 57.01), -- Great Ocean Hwy. Bridge
+ [38] = vector3(-303.03, 6231.18, 31.45), -- Paleto Bay
+ [39] = vector3(-54.87, 6311.50, 31.33), -- Paleto Bay
+ [40] = vector3(1940.65, 6254.72, 43.52), -- Route 1
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> 0 is no chance. The lower the less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> 0 is no chance. The lower the less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> 0 is no chance. The lower the less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> 0 is no chance. The lower the less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed", -- Basically none.
+ },
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ ERS_RequestNetControlForEntity(veh)
+ ERS_SetRandomDamageToVehicle(veh)
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+
+ ERS_RequestNetControlForEntity(ped)
+
+ local pedCoords = GetEntityCoords(ped)
+ local chanceToSurvive = math.random(0, 1)
+
+ ERS_SetMovementAnimClipSetToPed(ped, "move_m@injured")
+
+ if chanceToSurvive < 1 then
+ -- Dead
+ SetEntityHealth(ped, 0)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ ERS_ApplyBloodToPed(ped)
+ SetPedKeepTask(ped, true)
+ else
+ -- Alive
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ ERS_SpawnConfiguredWeaponForPed(ped, calloutDataClient)
+ if IsPedInAnyVehicle(ped, false) then
+ TaskLeaveAnyVehicle(ped)
+ Wait(500)
+ end
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ SetPedKeepTask(ped, true)
+
+ ERS_ApplyBloodToPed(ped)
+
+ pedCoords = GetEntityCoords(ped)
+ local bool, safeCoords = GetSafeCoordForPed(pedCoords.x, pedCoords.y, pedCoords.z, true, 16)
+ if bool then
+ if Config.Debug then
+ print("Found safe coord for ped: "..safeCoords)
+ end
+ local xOffset= math.random(-2, 2)
+ local yOffset= math.random(-2, 2)
+
+ if Config.Debug then
+ print("Could not find safe coord for ped: "..safeCoords)
+ end
+ end
+
+ Citizen.SetTimeout(10000, function()
+ if DoesEntityExist(ped) then
+ if not IsPedDeadOrDying(ped, true) then
+ ERS_RequestNetControlForEntity(ped)
+
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+
+ local scenario = ERS_SelectRandomWoundedPersonScenario()
+ TaskStartScenarioInPlace(ped, scenario, 0, true)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ if Config.Debug then
+ print("Blocking off non-temp events for ped at safe coords for ped: "..ped)
+ end
+ end
+ end
+ end)
+ end
+ end
+ end
+
+ for index, objNetId in pairs(objectList) do
+ local obj = NetToObj(objNetId)
+ if DoesEntityExist(obj) then
+ ERS_RequestNetControlForEntity(obj)
+ PlaceObjectOnGroundProperly(obj)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(vehicleList, 15000)
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+ local randomAmountOfVehicles = math.random(2,5)
+ local randomAmountOfObjects = math.random(1,5)
+
+ -- Build entities
+ for i = 1, randomAmountOfVehicles do
+ local diameter = 20
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+
+ -- Build vehicle
+ local vehModel = ERS_GetRandomModel(Config.randomVehicles)
+ local vehType = "automobile"
+ local vehCoords = vector3(coords.x, coords.y, coords.z)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build ped
+ coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(coords.x, coords.y, coords.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(ped, vehicle, -1)
+ table.insert(pedList, pedNetId)
+
+ -- Break vehicle
+ SetVehicleBodyHealth(vehicle, (math.random(1000) + 0.0))
+ for i = 0, 5 do
+ local broken = math.random(0, 1)
+ if broken == 1 then
+ SetVehicleDoorBroken(vehicle, i, false)
+ end
+ SetVehicleDirtLevel(vehicle, math.random(15) + 0.0)
+ end
+
+ -- Passengers
+ for seatIndex = 0, 2 do -- seats (4 door vehicles) (front right, rear left, rear right), will leave passenger outside of vehicle if seat 0, 1 or 2 does not exist.
+ if GetPedInVehicleSeat(vehicle, seatIndex) == 0 then
+ local chance = math.random(100)
+ if chance >= 67 then -- 1/3 chance.
+ coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local passengerPedModel = ERS_GetRandomModel(Config.randomPeds)
+ local passengerPedCoords = vector3(coords.x, coords.y, coords.z)
+ local passengerPedHeading = math.random(360)
+ local passengerPedNetId = ERS_CreatePed(passengerPedModel, passengerPedCoords, passengerPedHeading)
+ local passengerPed = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(passengerPed, vehicle, seatIndex)
+ table.insert(pedList, passengerPedNetId)
+ end
+ end
+ end
+ end
+
+ -- Build objects
+ for i = 1, randomAmountOfObjects do
+ local diameter = 20
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+
+ local objModel = ERS_GetRandomModel(Config.randomCollissionObjects)
+ local objCoords = vector3(coords.x, coords.y, coords.z)
+ local objHeading = math.random(360)
+local objNetId = ERS_CreateObject(objModel, objCoords, objHeading)
+ if objNetId then
+ local obj = NetworkGetEntityFromNetworkId(objNetId)
+ table.insert(objectList, objNetId)
+ else
+ DebugPrint("^1ERROR ^7Could not create object: "..objModel)
+ end
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_train_derailed.lua b/resources/night_ers/callouts/plugins/callout_train_derailed.lua
new file mode 100644
index 000000000..ca49c9dcf
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_train_derailed.lua
@@ -0,0 +1,188 @@
+Config.Callouts["train_derailed"] = {
+
+ Enabled = true,
+ CalloutName = "Derailed train",
+ CalloutDescriptions = {
+ "A train has derailed, requiring immediate intervention from emergency services.",
+ "Emergency teams are needed to assist with a derailed train incident.",
+ "Authorities report a train derailment, necessitating urgent action to secure the area.",
+ "A train has gone off the tracks, and additional units are needed to manage the situation.",
+ "Immediate response required to a train derailment endangering surrounding areas.",
+ "A derailed train is blocking the tracks, and reinforcements are needed to assist local authorities.",
+ "Emergency crews are requesting backup to handle the aftermath of a train derailment.",
+ "An urgent call for assistance has been made to deal with a train that has derailed.",
+ "Responders are on the scene of a train derailment and require additional support to prevent further damage.",
+ "A significant train derailment demands immediate intervention to protect lives and restore order.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Ambulance, Fire.",
+ policeRequired = true,
+ ambulanceRequired = true,
+ fireRequired = true,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(2442.1746, 2550.7461, 42.1325),
+ -- Add more to 40
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ ERS_RequestNetControlForEntity(veh)
+ local pos = GetEntityCoords(veh, false)
+ local foundGround, groundZ = GetGroundZFor_3dCoord(pos.x, pos.y, pos.z, false)
+
+ if foundGround then
+ SetEntityCoords(veh, pos.x, pos.y, groundZ, false, false, false, false)
+ end
+
+ FreezeEntityPosition(veh, false)
+ SetEntityCollision(veh, true, true)
+ SetRenderTrainAsDerailed(veh, true)
+ SetEntityRotation(veh, 0, math.random(0, 360)-0.01, 0, 2, true)
+ ERS_SetRandomDamageToVehicle(veh)
+ SetVehicleBodyHealth(veh, 0)
+ SetVehicleEngineHealth(veh, 0)
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ local chance = math.random(100)
+ if chance > 50 then
+ local scenario = ERS_SelectRandomWoundedPersonScenario()
+ TaskStartScenarioInPlace(ped, scenario, 0, true)
+ else
+ SetEntityHealth(ped, 0)
+ end
+ ERS_ApplyBloodToPed(ped)
+ end
+ end
+
+ for index, objNetId in pairs(objectList) do
+ local obj = NetToObj(objNetId)
+ if DoesEntityExist(obj) then
+ ERS_RequestNetControlForEntity(obj)
+ PlaceObjectOnGroundProperly(obj)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(vehicleList, 30000)
+ ERS_CreateTemporaryBlipForEntities(pedList, 30000)
+ ERS_CreateTemporaryBlipForEntities(objectList, 30000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ local diameter = 50
+ local randomAmountOfTrainCarriages = math.random(2,5)
+
+ -- Build vehicle
+ local vehModel = "freight"
+ local vehType = "train"
+ local vehCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ for i = 1, randomAmountOfTrainCarriages do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local vehModel = ERS_GetRandomModel(Config.randomTrainCarriages)
+ local vehType = "train"
+ local vehCoords = vector3(coords.x, coords.y, coords.z)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build smoke
+ if UsingSmartFires then
+ -- Full version
+ local smokeSize = Config.RandomMediumFireOrSmokeSize[math.random(#Config.RandomMediumFireOrSmokeSize)]
+ local smokeType = Config.AllSmokeTypes[math.random(#Config.AllSmokeTypes)]
+ local smokeId = exports['SmartFires']:CreateSmoke(vector3(coords.x, coords.y, coords.z-0.5), smokeSize, smokeType)
+ DebugPrint("Created smoke particle with ID: "..smokeId)
+ table.insert(smokeList, smokeId)
+ else
+ -- Lite version
+ local smokeSize = Config.RandomMediumFireOrSmokeSize[math.random(#Config.RandomMediumFireOrSmokeSize)]
+ local smokeType = "normal"
+ local smokeId = exports['SmartFiresLite']:CreateSmoke(vector3(coords.x, coords.y, coords.z-0.5), smokeSize, smokeType)
+ DebugPrint("Created smoke particle with ID: "..smokeId)
+ table.insert(smokeList, smokeId)
+ end
+ end
+
+ local randomAmountOfFires = math.random(2,6)
+ for i = 1, randomAmountOfFires do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ -- Build fires
+ if UsingSmartFires then
+ -- Full version
+ local fireSize = Config.RandomMediumFireOrSmokeSize[math.random(#Config.RandomMediumFireOrSmokeSize)]
+ local fireType = Config.NormalFireTypes[math.random(#Config.NormalFireTypes)]
+ local fireId = exports['SmartFires']:CreateFire(vector3(coords.x, coords.y, coords.z-0.5), fireSize, fireType)
+ DebugPrint("Created fire with ID: "..fireId)
+ table.insert(fireList, fireId)
+ else
+ -- Lite version
+ local fireSize = Config.RandomLargeFireOrSmokeSize[math.random(#Config.RandomLargeFireOrSmokeSize)]
+ local fireType = "normal"
+ local fireId = exports['SmartFiresLite']:CreateFire(vector3(coords.x, coords.y, coords.z-0.5), fireSize, fireType)
+ DebugPrint("Created fire with SmartFiresLite with ID: "..fireId)
+ table.insert(fireList, fireId)
+ end
+ end
+
+ -- Build objects
+ local randomAmountOfObjects = math.random(7)
+ for i = 1, randomAmountOfObjects do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local objModel = ERS_GetRandomModel(Config.randomDirtObjects)
+ local objCoords = vector3(coords.x, coords.y, coords.z)
+ local objHeading = math.random(360)
+ local objNetId = ERS_CreateObject(objModel, objCoords, objHeading)
+ if objNetId then
+ local obj = NetworkGetEntityFromNetworkId(objNetId)
+ table.insert(objectList, objNetId)
+ else
+ DebugPrint("^1ERROR ^7Could not create object: "..objModel)
+ end
+ end
+
+ -- Build victims
+ local victims = math.random(20)
+ for i = 1, victims do
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(coords.x, coords.y, coords.z + 3.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_tree_fire.lua b/resources/night_ers/callouts/plugins/callout_tree_fire.lua
new file mode 100644
index 000000000..ed7b88c9c
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_tree_fire.lua
@@ -0,0 +1,112 @@
+Config.Callouts["tree_fire"] = {
+
+ Enabled = true,
+ CalloutName = "Tree on fire",
+ CalloutDescriptions = {
+ "Emergency responders are required to extinguish a tree fire.",
+ "Authorities report a tree ablaze, demanding immediate intervention to ensure safety.",
+ "A tree fire has been reported, necessitating urgent action to minimize further damage.",
+ "Critical situation with a tree on fire; additional units are needed for support.",
+ "Immediate response needed to address a tree fire posing imminent danger.",
+ "A tree is on fire, posing a severe threat; reinforcements are necessary to contain the blaze.",
+ "Emergency crews are requesting backup to assist in managing a tree fire and prevent its spread.",
+ "An urgent call for help has been issued to handle a tree fire and ensure safety.",
+ "Responders are on the scene of a tree fire and need extra support to stabilize the situation.",
+ "A serious emergency involving a tree fire demands swift action to prevent a catastrophic outcome.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Fire.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = true,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(404.1695, -2100.9302, 20.4752),
+ [2] = vector3(-740.7983, -2037.9850, 9.0763),
+ [3] = vector3(-784.0410, -1785.0958, 31.3617),
+ [4] = vector3(-184.4082, -2134.9944, 24.5058),
+ [5] = vector3(97.7032, -1838.3838, 25.6308),
+ [6] = vector3(93.5803, -1143.7230, 29.3680),
+ [7] = vector3(365.1689, -444.4351, 42.5076),
+ [8] = vector3(1283.5366, -1626.8275, 54.2254),
+ [9] = vector3(1751.8948, -2086.2515, 114.6973),
+ [10] = vector3(2149.2805, -601.8230, 98.0530),
+ [11] = vector3(2544.0249, 284.1833, 108.6631),
+ [12] = vector3(2579.5286, 2690.2253, 44.7803),
+ [13] = vector3(2942.6099, 4248.1655, 52.4890),
+ [14] = vector3(2233.0967, 4749.2607, 39.8360),
+ [15] = vector3(182.4587, 4399.9561, 74.3766),
+ [16] = vector3(-1090.9008, 4585.7231, 128.1570),
+ [17] = vector3(-1442.2822, 5421.2280, 23.0274),
+ [18] = vector3(-316.3200, 6178.8647, 32.3698),
+ [19] = vector3(198.4696, 6845.0181, 22.1809),
+ [20] = vector3(2565.4204, 5587.5654, 47.4446),
+ },
+ PedChanceToFleeFromPlayer = 70, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 40, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 20, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 40, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 5000, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 10000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "flee", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_knife",
+ "weapon_hatchet",
+ "weapon_hammer",
+ "weapon_pistol",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ local scenario = "WORLD_HUMAN_GARDENER_PLANT"
+ TaskStartScenarioInPlace(ped, scenario, 0, true)
+ Wait(1000)
+ ERS_SetPedToFleeFromPlayer(ped)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+
+ local diameter = 10
+
+ -- Build fire
+ if UsingSmartFires then
+ -- Full version
+ local fireSize = Config.RandomMediumFireOrSmokeSize[math.random(#Config.RandomMediumFireOrSmokeSize)]
+ local fireType = Config.NormalFireTypes[math.random(#Config.NormalFireTypes)]
+ local fireId = exports['SmartFires']:CreateFire(vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z-0.5), fireSize, fireType)
+ DebugPrint("Created fire with ID: "..fireId)
+ table.insert(fireList, fireId)
+ else
+ -- Lite version
+ local fireSize = Config.RandomMediumFireOrSmokeSize[math.random(#Config.RandomMediumFireOrSmokeSize)]
+ local fireType = "normal"
+ local fireId = exports['SmartFiresLite']:CreateFire(vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z-0.5), fireSize, fireType)
+ DebugPrint("Created fire with SmartFiresLite with ID: "..fireId)
+ table.insert(fireList, fireId)
+ end
+
+ -- Build suspect
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(coords.x, coords.y, coords.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_tunnel_smoke.lua b/resources/night_ers/callouts/plugins/callout_tunnel_smoke.lua
new file mode 100644
index 000000000..9e246dc5c
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_tunnel_smoke.lua
@@ -0,0 +1,73 @@
+Config.Callouts["tunnel_smoke"] = {
+
+ Enabled = true,
+ CalloutName = "Smoke in a tunnel",
+ CalloutDescriptions = {
+ "Emergency responders are required to investigate the source of the smoke in the tunnel.",
+ "Authorities report smoke in a tunnel, demanding immediate investigation to ensure safety.",
+ "Smoke has been reported in a tunnel, necessitating urgent action to identify and address the cause.",
+ "Critical situation with smoke in a tunnel; additional units are needed for support.",
+ "Immediate response needed to address smoke in a tunnel posing potential danger.",
+ "Smoke has been detected in a tunnel, posing a possible threat; reinforcements are necessary to investigate and contain any hazards.",
+ "Emergency crews are requesting backup to assist in investigating and managing smoke in a tunnel.",
+ "An urgent call for help has been issued to handle smoke in a tunnel and ensure safety.",
+ "Responders are on the scene of smoke in a tunnel and need extra support to stabilize the situation.",
+ "A serious emergency involving smoke in a tunnel demands swift action to prevent a potential catastrophic outcome.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Fire.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = true,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(2155.49, 5998.66, 51.29),
+ [2] = vector3(2264.53, 5901.12, 49.06),
+ [3] = vector3(2355.03, 5793.62, 46.35),
+ [4] = vector3(-2598.79, 3052.06, 15.96),
+ [5] = vector3(-2578.00, 3294.84, 13.38),
+ [6] = vector3(-1511.02, -766.17, 11.29),
+ [7] = vector3(-1196.56, -688.77, 11.07),
+ [8] = vector3(189.47, -595.13, 29.62),
+ [9] = vector3(271.97, -1857.47, 18.60),
+ [10] = vector3(-586.55, -581.31, 25.30),
+ -- Add more to 40
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ -- No other actions required clientside.
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ -- Build smoke
+ if UsingSmartFires then
+ -- Full version
+ local smokeSize = Config.RandomLargeFireOrSmokeSize[math.random(#Config.RandomLargeFireOrSmokeSize)]
+ local smokeType = Config.FoggySmoke
+ local smokeId = exports['SmartFires']:CreateSmoke(vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z-0.5), smokeSize, smokeType)
+ DebugPrint("Created smoke particle with ID: "..smokeId)
+ table.insert(smokeList, smokeId)
+ else
+ -- Lite version
+ local smokeSize = Config.RandomLargeFireOrSmokeSize[math.random(#Config.RandomLargeFireOrSmokeSize)]
+ local smokeType = "normal"
+ local smokeId = exports['SmartFiresLite']:CreateSmoke(vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z-0.5), smokeSize, smokeType)
+ DebugPrint("Created smoke particle with ID: "..smokeId)
+ table.insert(smokeList, smokeId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_unidentified_body.lua b/resources/night_ers/callouts/plugins/callout_unidentified_body.lua
new file mode 100644
index 000000000..b44031417
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_unidentified_body.lua
@@ -0,0 +1,125 @@
+Config.Callouts["unidentified_body"] = {
+
+ Enabled = true,
+ CalloutName = "Unidentified body found",
+ CalloutDescriptions = {
+ "An unidentified body has been discovered, requiring immediate police response.",
+ "Emergency assistance is needed to investigate and secure the area of an unidentified body discovery.",
+ "Reports indicate the discovery of an unidentified body, necessitating urgent police intervention.",
+ "An unidentified body has been reported, and backup is needed to secure the scene and conduct an investigation.",
+ "Emergency services have been dispatched to address the discovery of an unidentified body.",
+ "A request for assistance has been made by officers responding to the discovery of an unidentified body.",
+ "Additional units are required to support officers responding to the discovery of an unidentified body.",
+ "Emergency backup is required to assist officers in conducting an investigation into an unidentified body discovery.",
+ "A call for assistance has been issued by officers dealing with the discovery of an unidentified body.",
+ "Reports suggest a situation where immediate police assistance is crucial to investigate and handle the discovery of an unidentified body.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, ambulance, coroner.",
+ policeRequired = true,
+ ambulanceRequired = true,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(208.47, -3316.17, 5.79), -- King Road
+ [2] = vector3(-132.51, -1678.17, 34.91), -- Strawberry Ave, Chamberlin hills
+ [3] = vector3(-4964.33, -1410.93, 7.68), -- Tug St, La Puerta
+ [4] = vector3(-2005.94, -319.00, 48.10), -- The Jetty, Vespucci beach
+ [5] = vector3(-872.19, 830.25, 202.88), -- North Sheldon Rd, Vinewood Hills
+ [6] = vector3(-448.68, 1598.16, 358.63), -- East Galileo Ave, Vinewood Hills
+ [7] = vector3(-31.04, 1952.23, 190.19), -- Baytree Canyon Rd, GSD
+ [8] = vector3(407.70, 2575.28, 43.52), -- Senora Rd, Harmony
+ [9] = vector3(2076.18, 3932.20, 31.06), -- Algonquin Blvd, Sandy Shores
+ [10] = vector3(3819.60, 4491.61, 4.19), -- Catfish view, San Chainski Mountain
+ [11] = vector3(1184.28, 3267.64, 39.20),
+ [12] = vector3(1693.80, 3461.85, 37.02),
+ [13] = vector3(1820.61, 3507.98, 38.32),
+ [14] = vector3(2271.27, 3757.01, 38.42),
+ [15] = vector3(2453.31, 3854.30, 38.94),
+ [16] = vector3(2632.89, 2946.15, 40.42),
+ [17] = vector3(2663.66, 3928.24, 42.34),
+ [18] = vector3(2700.45, 3083.12, 42.76),
+ [19] = vector3(2851.14, 3440.11, 50.92),
+ [20] = vector3(-3040.17, 3745.06, 70.20),
+ [21] = vector3(-4050.71, 5335.75, 83.14),
+ [22] = vector3(-4043.33, 5599.94, 68.38),
+ [23] = vector3(2874.65, 4868.66, 62.60),
+ [24] = vector3(3000.50, 4099.68, 57.18),
+ [25] = vector3(-92.55, 6150.44, 31.80),
+ [26] = vector3(769.43, 203.60, 83.65),
+ [27] = vector3(95.80, -219.33, 54.48),
+ [28] = vector3(-160.23, -756.60, 41.92),
+ [29] = vector3(-270.76, -980.51, 31.21),
+ [30] = vector3(181.82, -936.06, 30.09),
+ [31] = vector3(231.81, -751.09, 30.82),
+ [32] = vector3(237.88, -888.73, 30.49),
+ [33] = vector3(1305.96, -587.50, 71.80),
+ [34] = vector3(2525.68, 2612.09, 37.94),
+ [35] = vector3(2692.64, 2785.85, 36.03),
+ [36] = vector3(445.14, 3524.84, 33.53),
+ [37] = vector3(737.51, 3534.92, 34.08),
+ [38] = vector3(1345.39, 3643.31, 33.62),
+ [39] = vector3(1491.65, 3771.76, 33.51),
+ [40] = vector3(1812.97, 3836.61, 33.56),
+ [41] = vector3(2415.94, 4813.70, 35.91),
+ },
+ PedChanceToFleeFromPlayer = 75, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 10, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 1000, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 5000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "flee", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_pistol",
+ "weapon_knife",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ if index == 1 then
+ ERS_ApplyBloodToPed(ped)
+ SetEntityHealth(ped, 0)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ end
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+
+ -- Build victim
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ table.insert(pedList, pedNetId)
+
+ -- Build potential suspect
+ local randomChance = math.random(100)
+ if randomChance > 50 then
+ local diameter = 10
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+ local suspectPedModel = ERS_GetRandomModel(Config.randomPeds)
+ local suspectPedCoords = vector3(coords.x, coords.y, coords.z)
+ local suspectPedHeading = math.random(360)
+ local suspectPedNetId = ERS_CreatePed(suspectPedModel, suspectPedCoords, suspectPedHeading)
+ local suspectPed = NetworkGetEntityFromNetworkId(suspectPedNetId)
+ table.insert(pedList, suspectPedNetId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_unidentified_object.lua b/resources/night_ers/callouts/plugins/callout_unidentified_object.lua
new file mode 100644
index 000000000..d60e6ff64
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_unidentified_object.lua
@@ -0,0 +1,162 @@
+Config.Callouts["unidentified_object"] = {
+
+ Enabled = true,
+ CalloutName = "Unidentified object reported",
+ CalloutDescriptions = {
+ "Respond to reports of an unidentified object; secure the area and assess potential threats.",
+ "Alert: deploy units to investigate reports of an unidentified object and ensure public safety.",
+ "Units required: assess reports of an unidentified object for potential hazards or danger.",
+ "Notice: investigate reports of an unidentified object and take necessary precautions.",
+ "Alert: respond to reports of an unidentified object; prioritize safety and thorough investigation.",
+ "Incident reported: investigate reports of an unidentified object to determine its nature.",
+ "Respond to reports of a suspicious object; coordinate with bomb disposal experts and secure the area.",
+ "Situation alert: take immediate action on reports of an unidentified object and coordinate with authorities.",
+ "Alert: respond cautiously to reports of an unidentified object and follow protocol for potential threats.",
+ "Response needed: investigate reports of an unidentified object and take appropriate measures to ensure public safety.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Fire.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = true,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(4.7873, -1519.3046, 29.4797),
+ [2] = vector3(-357.4233, 6248.2720, 31.4930),
+ [3] = vector3(-278.0290, 6331.2485, 32.4218),
+ [4] = vector3(-112.2073, 6460.9526, 31.4685),
+ [5] = vector3(1706.3806, 3778.7673, 34.7586),
+ [6] = vector3(230.2121, 214.2268, 105.5514),
+ [7] = vector3(67.2231, 112.0352, 79.0892),
+ [8] = vector3(-166.2632, -1425.4434, 31.1112),
+ [9] = vector3(45.1339, -1748.2421, 29.5469),
+ [10] = vector3(-278.8082, -1925.3947, 29.9460),
+ [11] = vector3(-832.1346, -2092.6909, 8.9603),
+ [12] = vector3(-1037.4767, -2737.1309, 0.7991),
+ [13] = vector3(-157.7649, -1694.3339, 31.4686),
+ [14] = vector3(192.4545, -931.2686, 30.6037),
+ [15] = vector3(308.4785, -728.3778, 29.3168),
+ [16] = vector3(292.3311, -780.2249, 29.3219),
+ [17] = vector3(355.9457, -1029.9708, 29.3312),
+ [18] = vector3(-939.5764, -280.3421, 39.2679),
+ [19] = vector3(-804.2067, -224.7950, 37.2235),
+ [20] = vector3(-798.2543, -98.7246, 37.6296),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ local object
+ for index, objNetId in pairs(objectList) do
+ local obj = NetToObj(objNetId)
+ if DoesEntityExist(obj) then
+ object = obj
+ ERS_RequestNetControlForEntity(obj)
+ PlaceObjectOnGroundProperly(obj)
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ ERS_ClearPedTasksAndBlockEvents(ped)
+
+ Wait(100)
+
+ TaskTurnPedToFaceEntity(ped, object, 1000)
+
+ Wait(1000)
+
+ local scenario = ERS_SelectRandomBystanderScenario()
+ TaskStartScenarioInPlace(ped, scenario, 0, true)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+ ERS_CreateTemporaryBlipForEntities(objectList, 30000)
+
+ if math.random(100) < 50 then
+ Citizen.SetTimeout(math.random(30000), function()
+ if DoesEntityExist(object) then
+ ERS_RequestNetControlForEntity(object)
+ local pos = GetEntityCoords(object)
+ AddExplosion(pos.x, pos.y, pos.z, 5, 5.0, true, false, 5.0)
+
+ Wait(1000)
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ local scenario = ERS_SelectRandomWoundedPersonScenario()
+ TaskStartScenarioInPlace(ped, scenario, 0, true)
+ ERS_ApplyBloodToPed(ped)
+ end
+ end
+ end
+ end)
+ end
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ local objModel = ERS_GetRandomModel(Config.RandomBombObjectModels)
+ local objCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local objHeading = math.random(360)
+ local objNetId = ERS_CreateObject(objModel, objCoords, objHeading)
+ if objNetId then
+ local obj = NetworkGetEntityFromNetworkId(objNetId)
+ table.insert(objectList, objNetId)
+ else
+ DebugPrint("^1ERROR ^7Could not create object: "..objModel)
+ end
+
+ -- Build bystanders
+ local randomAmountOfBystanders = math.random(4)
+ for i = 1, randomAmountOfBystanders do
+ local diameter = 15
+ local coords = ERS_GetRandomCoordinateWithinRangeOfCoordinate(calloutData.Coordinates, diameter)
+
+ local bystanderPedModel = ERS_GetRandomModel(Config.randomPeds)
+ local bystanderPedCoords = vector3(coords.x, coords.y, coords.z)
+ local bystanderPedHeading = math.random(360)
+ local bystanderPedNetId = ERS_CreatePed(bystanderPedModel, bystanderPedCoords, bystanderPedHeading)
+ local bystanderPed = NetworkGetEntityFromNetworkId(bystanderPedNetId)
+ table.insert(pedList, bystanderPedNetId)
+ end
+
+ Citizen.SetTimeout(math.random(30000), function()
+ local fireToObjChance = math.random(100)
+ if fireToObjChance < 50 then
+ -- Build fire
+ if UsingSmartFires then
+ -- Full version
+ local fireSize = Config.RandomSmallFireOrSmokeSize[math.random(#Config.RandomSmallFireOrSmokeSize)]
+ local fireType = Config.NormalFireTypes[math.random(#Config.NormalFireTypes)]
+ local fireId = exports['SmartFires']:CreateFire(vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z-0.5), fireSize, fireType)
+ DebugPrint("Created fire with ID: "..fireId)
+ table.insert(fireList, fireId)
+ else
+ -- Lite version
+ local fireSize = Config.RandomSmallFireOrSmokeSize[math.random(#Config.RandomSmallFireOrSmokeSize)]
+ local fireType = "normal"
+ local fireId = exports['SmartFiresLite']:CreateFire(vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z-0.5), fireSize, fireType)
+ DebugPrint("Created fire with SmartFiresLite with ID: "..fireId)
+ table.insert(fireList, fireId)
+ end
+ end
+ end)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_unknown_smoke.lua b/resources/night_ers/callouts/plugins/callout_unknown_smoke.lua
new file mode 100644
index 000000000..29683f8f9
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_unknown_smoke.lua
@@ -0,0 +1,75 @@
+Config.Callouts["unknown_smoke"] = {
+
+ Enabled = true,
+ CalloutName = "Unknown source of smoke",
+ CalloutDescriptions = {
+ "Emergency responders are required to investigate the source of the smoke.",
+ "Authorities report an unknown source of smoke, demanding immediate investigation to ensure safety.",
+ "Smoke has been reported from an unknown source, necessitating urgent action to identify and address the cause.",
+ "Critical situation with unknown smoke; additional units are needed for support.",
+ "Immediate response needed to address an unknown source of smoke posing potential danger.",
+ "An unknown source of smoke has been detected, posing a possible threat; reinforcements are necessary to investigate and contain any hazards.",
+ "Emergency crews are requesting backup to assist in investigating and managing an unknown source of smoke.",
+ "An urgent call for help has been issued to handle an unknown source of smoke and ensure safety.",
+ "Responders are on the scene of an unknown smoke source and need extra support to stabilize the situation.",
+ "A serious emergency involving an unknown source of smoke demands swift action to prevent a potential catastrophic outcome.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Fire.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = true,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(0.2095, -1733.7487, 31.6350),
+ -- [2] = vector3(2278.6301, 2969.2185, 46.5811),
+ -- [3] = vector3(2840.2234, 1553.8225, 24.5741),
+ -- [4] = vector3(2821.8545, 1511.8513, 24.7242),
+ -- [5] = vector3(2458.3921, 1457.0712, 36.2040),
+ -- [6] = vector3(1127.5670, -2489.8242, 33.3611),
+ -- [7] = vector3(233.3477, 6399.8403, 31.6335),
+ -- [8] = vector3(1346.0159, 6383.4556, 33.4101),
+ -- [9] = vector3(2050.1416, 3683.3496, 34.5879),
+ -- [10] = vector3(683.1802, 120.5065, 80.7545),
+
+ -- Add more to 40
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ -- No other actions required clientside.
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ -- Build smoke
+ if UsingSmartFires then
+ -- Full version
+ local smokeSize = Config.RandomLargeFireOrSmokeSize[math.random(#Config.RandomLargeFireOrSmokeSize)]
+ local smokeType = Config.AllSmokeTypes[math.random(#Config.AllSmokeTypes)]
+ local smokeId = exports['SmartFires']:CreateSmoke(vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z-0.5), smokeSize, smokeType)
+ DebugPrint("Created smoke particle with ID: "..smokeId)
+ table.insert(smokeList, smokeId)
+ else
+ -- Lite version
+ local smokeSize = Config.RandomLargeFireOrSmokeSize[math.random(#Config.RandomLargeFireOrSmokeSize)]
+ local smokeType = "normal"
+ local smokeId = exports['SmartFiresLite']:CreateSmoke(vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z-0.5), smokeSize, smokeType)
+ DebugPrint("Created smoke particle with ID: "..smokeId)
+ table.insert(smokeList, smokeId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_valet_theft.lua b/resources/night_ers/callouts/plugins/callout_valet_theft.lua
new file mode 100644
index 000000000..e1f9ce134
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_valet_theft.lua
@@ -0,0 +1,100 @@
+Config.Callouts["valet_theft"] = {
+
+ Enabled = true,
+ CalloutName = "Valet stole vehicle",
+ CalloutDescriptions = {
+ "Respond immediately to a report of a valet stealing a vehicle; secure the area and locate the stolen car.",
+ "Emergency alert: vehicle theft by a valet; deploy units to track down and recover the stolen vehicle.",
+ "Urgent response required: a valet has driven off with a customer's car; ensure the vehicle is recovered and the suspect apprehended.",
+ "Critical situation: theft of a vehicle by a valet; act swiftly to locate the car and control the scene.",
+ "Alert: valet stole a vehicle; immediate intervention needed to recover the vehicle and maintain security.",
+ "Vehicle theft incident: valet involved; urgent action required to secure the area and recover the stolen car.",
+ "Handle a situation involving a valet stealing a vehicle; prioritize recovery and coordination with law enforcement.",
+ "Emergency situation: vehicle stolen by valet; ensure the area is secure and assist in recovering the stolen vehicle.",
+ "Urgent alert: vehicle stolen by valet; respond quickly to manage the scene and recover the car.",
+ "Critical response needed: valet stole a vehicle; secure the area, recover the car, and apprehend the suspect.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(-690.5018, -2291.0522, 13.0379),
+ [2] = vector3(-568.6872, -449.3962, 33.9551),
+ [3] = vector3(-669.8828, -221.6496, 37.1944),
+ [4] = vector3(-884.0535, -346.2314, 34.5298),
+ [5] = vector3(-1036.0609, -474.1400, 36.8752),
+ [6] = vector3(-1363.8979, -711.5773, 24.6793),
+ [7] = vector3(-1332.7385, -1034.8738, 7.5625),
+ [8] = vector3(-1591.2513, -898.1854, 9.5285),
+ [9] = vector3(-1734.3279, -721.0918, 10.3650),
+ [10] = vector3(-1865.0079, -353.5096, 49.0548),
+ [11] = vector3(-949.8361, -1278.8688, 5.0537),
+ [12] = vector3(-852.7844, -1212.0709, 6.1981),
+ [13] = vector3(-695.9883, -1109.3223, 14.5092),
+ [14] = vector3(253.6740, -1641.1349, 29.1255),
+ [15] = vector3(309.0320, -1096.0039, 29.2574),
+ [16] = vector3(382.4882, -751.6982, 29.2883),
+ [17] = vector3(-36.3656, 201.6859, 101.9738),
+ [18] = vector3(-137.4618, 205.8481, 92.1274),
+ [19] = vector3(-418.0433, 1209.1710, 325.6375),
+ [20] = vector3(213.3478, 1225.9126, 225.4462),
+ },
+ PedChanceToFleeFromPlayer = 100, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 50, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 10000, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 15000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "flee", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ ERS_RequestNetControlForEntity(veh)
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ ERS_SetPedToFleeFromPlayer(ped)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(vehicleList, 30000)
+ ERS_CreateTemporaryBlipForEntities(pedList, 30000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ local vehModel = ERS_GetRandomModel(Config.randomLuxuryVehicles)
+ local vehType = "automobile"
+ local vehCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build valet
+ local pedModel = "s_m_y_valet_01"
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z+1.5)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(ped, vehicle, -1)
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_vehicle_fire.lua b/resources/night_ers/callouts/plugins/callout_vehicle_fire.lua
new file mode 100644
index 000000000..018034b1f
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_vehicle_fire.lua
@@ -0,0 +1,110 @@
+Config.Callouts["vehicle_fire"] = {
+
+ Enabled = true,
+ CalloutName = "Vehicle on fire",
+ CalloutDescriptions = {
+ "Emergency responders are required to extinguish flames engulfing a vehicle.",
+ "Authorities report a vehicle ablaze, requiring immediate intervention to ensure safety.",
+ "A vehicle fire has been reported, prompting urgent action to prevent further damage.",
+ "Critical situation with a vehicle on fire; additional units are needed for support.",
+ "Immediate response needed to tackle a vehicle engulfed in flames.",
+ "A vehicle is burning, posing a severe threat; reinforcements are necessary to contain the fire.",
+ "Emergency crews are requesting backup to extinguish a vehicle fire and prevent its spread.",
+ "An urgent call for help has been issued to deal with a vehicle engulfed in flames.",
+ "Responders are on the scene of a vehicle fire and need extra support to control the blaze.",
+ "A serious emergency involving a vehicle on fire demands swift action to prevent escalation.",
+ },
+ CalloutUnitsRequired = {
+ description = "Police, Ambulance, Fire.",
+ policeRequired = true,
+ ambulanceRequired = true,
+ fireRequired = true,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(1221.65, -1950.32, 40.40),
+ [2] = vector3(-161.30, -164.19, 43.62),
+ [3] = vector3(101.98, -349.36, 42.34),
+ [4] = vector3(-134.71, -982.66, 27.27),
+ [5] = vector3(641.63, -432.34, 24.74),
+ [6] = vector3(-58.80, -1212.65, 28.59),
+ [7] = vector3(362.10, -1702.46, 32.53),
+ [8] = vector3(-526.54, -1689.42, 19.20),
+ [9] = vector3(-2961.83, 59.35, 11.60),
+ [10] = vector3(-2308.16, 261.28, 169.60),
+ [11] = vector3(-1678.73, 488.84, 128.87),
+ [12] = vector3(-1498.19, 1504.78, 115.61),
+ [13] = vector3(-1134.82, 2692.60, 18.80),
+ [14] = vector3(-414.71, 2964.71, 24.94),
+ [15] = vector3(527.80, 3093.14, 40.46)
+
+ -- Add more to 40
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ ERS_RequestNetControlForEntity(veh)
+ local pos = GetEntityCoords(veh, false)
+ ERS_SetRandomDamageToVehicle(veh)
+ SetVehicleBodyHealth(veh, 0)
+ SetVehicleEngineHealth(veh, 0)
+ StartEntityFire(veh)
+ --AddExplosion(pos.x, pos.y, pos.z, 0, 1.0, true, false, 1.0)
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ ERS_RequestNetControlForEntity(ped)
+ TaskSetBlockingOfNonTemporaryEvents(ped, true)
+ SetEntityHealth(ped, 0)
+ StartEntityFire(ped)
+ ERS_ApplyBloodToPed(ped)
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(vehicleList, 15000)
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+
+ -- Build vehicle
+ local vehModel = ERS_GetRandomModel(Config.randomVehicles)
+ local vehType = "automobile"
+ local vehCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build victim
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(ped, vehicle, -1)
+ table.insert(pedList, pedNetId)
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_vehicle_theft.lua b/resources/night_ers/callouts/plugins/callout_vehicle_theft.lua
new file mode 100644
index 000000000..aba44b549
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_vehicle_theft.lua
@@ -0,0 +1,134 @@
+Config.Callouts["vehicle_theft"] = {
+ Enabled = false,
+ CalloutName = "Vehicle Theft",
+ CalloutDescriptions = {
+ "Reports of vehicle theft, details pending",
+ "Suspected vehicle theft reported, further information needed",
+ "Incident involving stolen vehicle, assess situation for safety",
+ "Vehicle theft reported, prioritize response for recovery",
+ "Reported theft of motor vehicle, investigate promptly",
+ "Vehicle reported missing, coordinate search and recovery efforts",
+ "Stolen vehicle reported, assess potential risks",
+ "Suspected theft of vehicle, approach investigation with caution",
+ "Reports of vehicle theft, prioritize response for recovery",
+ "Vehicle theft incident reported, coordinate with authorities",
+ },
+ CalloutUnitsRequired = {
+ description = "Police.",
+ policeRequired = true,
+ ambulanceRequired = false,
+ fireRequired = false,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(376.85, -83.60, 67.28),
+ [2] = vector3(252.45, -991.78, 29.15),
+ [3] = vector3(442.52, -544.01, 28.28),
+ [4] = vector3(676.55, -219.48, 44.30),
+ [5] = vector3(365.68, -108.07, 66.25),
+ [6] = vector3(-817.47, -126.34, 37.52),
+ [7] = vector3(-309.89, -15.74, 48.35),
+ [8] = vector3(-2354.87, -285.41, 14.13),
+ [9] = vector3(-1000.02, -602.68, 18.39),
+ [10] = vector3(199.27, 6574.46, 31.80),
+ [11] = vector3(1391.85, 6500.05, 19.76),
+ [12] = vector3(1723.97, 6387.80, 34.03),
+ [13] = vector3(2553.27, 5194.82, 50.78),
+ [14] = vector3(-136.89, 6224.72, 31.34),
+ [15] = vector3(2600.13, 5119.80, 44.78),
+ [16] = vector3(2446.42, 4009.14, 37.06),
+ [17] = vector3(1831.28, 3258.06, 44.10),
+ [18] = vector3(1977.05, 3081.72, 47.07),
+ [19] = vector3(2558.44, 2702.69, 41.77),
+ [20] = vector3(2854.36, 2819.08, 53.09),
+ [21] = vector3(254.91, 2848.28, 43.59),
+ [22] = vector3(85.82, 3595.74, 39.75),
+ [23] = vector3(-821.40, 5761.81, 5.54),
+ [24] = vector3(-300.05, 6057.30, 31.35),
+ [25] = vector3(2348.26, 4878.92, 41.82),
+ [26] = vector3(2489.21, 4123.94, 38.17),
+ [27] = vector3(2899.84, 4458.32, 48.28),
+ [28] = vector3(2785.74, 3469.58, 55.32),
+ [29] = vector3(2005.33, 3069.22, 47.05),
+ [30] = vector3(879.49, 2851.35, 56.73),
+ [31] = vector3(320.66, 3410.22, 36.72),
+ [32] = vector3(-1505.61, 4974.42, 62.52),
+ [33] = vector3(-762.73, 5547.37, 33.49),
+ [34] = vector3(-142.31, 6351.43, 31.49),
+ [35] = vector3(-76.59, 1869.51, 198.46),
+ [36] = vector3(-70.88, 895.65, 235.50),
+ [37] = vector3(634.44, 632.47, 128.91),
+ [38] = vector3(926.51, -86.54, 78.76),
+ [39] = vector3(245.43, -1523.13, 29.14),
+ [40] = vector3(202.76, -1855.99, 27.20),
+ },
+ PedChanceToFleeFromPlayer = 90, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 10, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 10, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 25, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 2000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "flee", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_knife",
+ "weapon_pistol",
+ },
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+ local vehicle = nil
+ local driver = nil
+
+ for index, vehNetId in pairs(vehicleList) do
+ local veh = NetToVeh(vehNetId)
+ if DoesEntityExist(veh) then
+ vehicle = veh
+ ERS_RequestNetControlForEntity(vehicle)
+ end
+ end
+
+ for index, pedNetId in pairs(pedList) do
+ local ped = NetToPed(pedNetId)
+ if DoesEntityExist(ped) then
+ driver = ped
+ ERS_RequestNetControlForEntity(driver)
+ if not IsPedOnAnyBike(driver) then
+ SmashVehicleWindow(vehicle, 0) -- break driver window
+ end
+ if not IsPedInAnyVehicle(driver, true) then
+ TaskEnterVehicle(driver, vehicle, 5000, -1, 2.0, 1, 0)
+ Wait(5000)
+ ERS_SetPedToFleeFromPlayer(driver)
+ else
+ ERS_SetPedToFleeFromPlayer(driver)
+ end
+ end
+ end
+
+ ERS_CreateTemporaryBlipForEntities(vehicleList, 15000)
+ ERS_CreateTemporaryBlipForEntities(pedList, 15000)
+
+ ERS_PerformTimedActionOnPed(calloutDataClient, pedList)
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+ -- Build vehicle
+ local vehModel = ERS_GetRandomModel(Config.randomVehicles)
+ local vehType = "automobile"
+ local vehCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z)
+ local vehHeading = math.random(360)
+ local vehNetId = ERS_CreateVehicle(vehModel, vehType, vehCoords, vehHeading)
+ local vehicle = NetworkGetEntityFromNetworkId(vehNetId)
+ table.insert(vehicleList, vehNetId)
+
+ -- Build ped
+ local pedModel = ERS_GetRandomModel(Config.randomPeds)
+ local pedCoords = vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z +1.0)
+ local pedHeading = math.random(360)
+ local pedNetId = ERS_CreatePed(pedModel, pedCoords, pedHeading)
+ local ped = NetworkGetEntityFromNetworkId(pedNetId)
+ SetPedIntoVehicle(ped, vehicle, -1)
+ table.insert(pedList, pedNetId)
+
+ calloutBuilt = true
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/callouts/plugins/callout_wildfire.lua b/resources/night_ers/callouts/plugins/callout_wildfire.lua
new file mode 100644
index 000000000..68271f0d7
--- /dev/null
+++ b/resources/night_ers/callouts/plugins/callout_wildfire.lua
@@ -0,0 +1,78 @@
+Config.Callouts["wildfire"] = {
+
+ Enabled = true,
+ CalloutName = "Wildfire",
+ CalloutDescriptions = {
+ "A major wildfire has broken out, requiring immediate attention from fire services.",
+ "Emergency teams are needed to combat a rapidly spreading wildfire in the area.",
+ "Authorities report a wildfire threatening homes and wildlife, necessitating urgent action.",
+ "A large-scale fire has been detected, and additional firefighting units are needed to contain it.",
+ "Immediate response required to a wildfire endangering a residential neighborhood.",
+ "A wildfire has been reported, and reinforcements are needed to assist local fire services.",
+ "Fire crews are requesting backup to control a severe wildfire in a densely forested region.",
+ "An urgent call for assistance has been made to deal with a wildfire spreading towards populated areas.",
+ "Responders are on the scene of a wildfire and require additional support to prevent further damage.",
+ "A significant wildfire situation demands immediate intervention to protect lives and property.",
+ },
+ CalloutUnitsRequired = {
+ description = "Fire.",
+ policeRequired = false,
+ ambulanceRequired = false,
+ fireRequired = true,
+ towRequired = false,
+ },
+ CalloutLocations = {
+ [1] = vector3(1649.18, -1300.25, 85.43),
+ [2] = vector3(1841.42, -1568.56, 126.55),
+ [3] = vector3(2719.96, 512.47, 92.76),
+ [4] = vector3(2659.38, 1258.56, 29.26),
+ [5] = vector3(2629.16, 2683.31, 56.89),
+ [6] = vector3(997.11, 6347.87, 38.72),
+ [7] = vector3(78.02, 6822.26, 17.92),
+ [8] = vector3(-566.53, 5847.58, 31.20),
+ [9] = vector3(-852.40, 5574.69, 27.42),
+ [10] = vector3(-534.42, 5483.81, 66.69),
+ [11] = vector3(-2744.51, 2175.46, 25.07),
+ [12] = vector3(-2023.58, -217.21, 29.74),
+ [13] = vector3(2030.26, 3371.11, 45.18),
+ [14] = vector3(1524.29, 4464.20, 49.12),
+ [15] = vector3(496.92, 5583.54, 793.80),
+ [16] = vector3(-1159.60, 62.91, 56.31),
+ [17] = vector3(-1658.64, 2642.03, 2.95),
+ },
+ PedChanceToFleeFromPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToAttackPlayer = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToSurrender = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedChanceToObtainWeapons = 0, -- Value between 0 and 100 -> Lower is less chance.
+ PedActionMinimumTimeoutInMs = 0, -- Milliseconds for the minimum timeout time to start the secondary action listed above.
+ PedActionMaximumTimeoutInMs = 1000, -- Milliseconds for the maximum timeout time to start the secondary action. Must be a higher number than the minimum!
+ PedActionOnNoActionFound = "none", -- When no action of the above options is found. It'll perform this action after the set timeout. Options: "none", "attack", "flee", "surrender"
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) from these weapons if PedChanceToObtainWeapons passed.
+ "weapon_unarmed",
+ },
+
+ client = function(plyPed, pedList, vehicleList, playersList, objectList, propList, fireList, smokeList, calloutDataClient)
+
+ -- No other actions required clientside, add if you desire
+ end,
+ server = function(request, src, calloutData, pedList, vehicleList, objectList, propList, playersList, fireList, smokeList)
+
+ if UsingSmartFires then
+ -- Full version
+ local fireSize = Config.RandomLargeFireOrSmokeSize[math.random(#Config.RandomLargeFireOrSmokeSize)]
+ local fireType = Config.BonFire
+ local fireId = exports['SmartFires']:CreateFire(vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z-0.5), fireSize, fireType)
+ DebugPrint("Created fire with ID: "..fireId)
+ table.insert(fireList, fireId)
+ else
+ -- Lite version
+ local fireSize = Config.RandomHugeFireOrSmokeSize[math.random(#Config.RandomHugeFireOrSmokeSize)]
+ local fireType = "normal"
+ local fireId = exports['SmartFiresLite']:CreateFire(vector3(calloutData.Coordinates.x, calloutData.Coordinates.y, calloutData.Coordinates.z-0.5), fireSize, fireType)
+ DebugPrint("Created fire with SmartFiresLite with ID: "..fireId)
+ table.insert(fireList, fireId)
+ end
+
+ return true
+ end
+}
\ No newline at end of file
diff --git a/resources/night_ers/config/config.lua b/resources/night_ers/config/config.lua
new file mode 100644
index 000000000..a58070a71
--- /dev/null
+++ b/resources/night_ers/config/config.lua
@@ -0,0 +1,785 @@
+Config = Config or {}
+
+Config = {
+
+ ConfigVersion = "1.7.5",
+
+ Debug = false, -- Enable or disable Debug, recommended to set to false for improved gameplay (resmon is very high in debug mode).
+ EventPrefix = "night_ers", -- Leave this be.
+ Language = "en", -- Available languages: en | us | nl | de | fr | he | cs | pt-br | (Ajust text in config/translations.lua)
+ SoundLanguage = "en", -- Available languages: en | us | fr | de | (Ajust text in config/sound-config.lua)
+ DOBFormat = "en", -- Options: en | us
+ UseImperial = false, -- Options: true = feet (mi) | false = meters (km) (Determines whether to display distances in feet (true) or meters (false))
+ Timezone = "Europe/London", -- Set the timezone which the script uses. https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
+
+ --[[ IMPORTANT: https://docs.fivem.net/natives/?_0xA0F2201F
+ [OPTIONS FOR ServerLockDownMode (below)]
+ "strict" No entities can be created by clients at all.
+ "relaxed" Only script-owned entities created by clients are blocked.
+ "inactive" Clients can create any entity they want.
+ ]]
+ ServerLockDownModeRoutingBucketList = {
+ {routingBucketId = 0, lockDownMode = "inactive"}, -- Default routing bucket when loading into the server as a player.
+ {routingBucketId = 1, lockDownMode = "inactive"},
+ {routingBucketId = 2, lockDownMode = "relaxed"},
+ {routingBucketId = 3, lockDownMode = "strict"},
+ },
+
+ --====================== OPTIONAL INTEGRATIONS ======================--
+
+ Enable_Night_Shifts = { -- Optional PAID: https://store.nights-software.com/package/5667103 (Enables call forwarding to the MDT & Shift toggle via MDT, which itself offers loads of more features)
+ ManageShiftsByMDT = false, -- If true, the MDT will manage shift toggles instead of the ERS.
+ SendCalloutsToMDT = false, -- If true, callouts and pullovers will be sent to the MDT as call.
+ SendPulloversToMDT = false, -- If true, pullovers will be sent to the MDT as call.
+ UsePersistentEntities = false, -- If true, persistent entities will be used and NPC data will be stored in the database, to later look up via the MDT.
+ EnableVehicleInformationPrompt = false, -- If true, vehicle information will be displayed in a UI, otherwise you'll have to use the MDT to get vehicle information (only applied when UsePersistentEntities is true).
+ EnableIDCardInformationPrompt = false, -- If true, ID card information will be displayed in a UI, otherwise you'll have to use the MDT to look up more information about the person by their name and DOB (only applied when UsePersistentEntities is true).
+ },
+ Enable_Night_Subtitles = true, -- Optional PAID (Included with ERS): https://store.nights-software.com/package/6043540 (Enables good looking subtitles instead of FiveM native mission text)
+ Enable_Nearest_Postal = false, -- Optional FREE: https://docs.nights-software.com/resources/nightShifts/#installing-nearest-postal-optional (client/c_functions.lua for GetPostal())
+ Enable_Discord_Webhooks = true, -- Set your webhook URL in server/s_functions.lua.
+
+ --====================== DISCORD RICH PRESENCE ======================--
+
+ Enable_Discord_Presence = true, -- Gives users a rich presence on Discord.
+ Discord_Presence_Data = {
+ AppId = '1314195524915691581', -- Your Discord application ID.
+ RichPresenceAsset = "big", -- Your Discord rich presence asset name.
+ RichPresenceAssetText = "Emergency Response Simulator", -- Your Discord rich presence asset text.
+ RichPresenceAssetSmall = { -- Your Discord rich presence small asset name used for each service.
+ ["offduty"] = "small",
+ ["police"] = "police",
+ ["fire"] = "fire",
+ ["ambulance"] = "ambulance",
+ ["tow"] = "tow",
+ },
+ RichPresenceAssetSmallText = { -- Your Discord rich presence small asset text used for each service.
+ ["offduty"] = "Off Duty",
+ ["police"] = "Police",
+ ["fire"] = "Fire",
+ ["ambulance"] = "Ambulance",
+ ["tow"] = "Tow",
+ },
+ RichPresenceButton = { -- Your Discord rich presence buttons - up to 2 buttons.
+ [0] = { enabled = true, label = "Join Server", url = "fivem://connect/YOURSERVERHASH" },
+ }
+ },
+
+ --====================== PERMISSIONS FOR SHIFT ACCESS ======================--
+
+ -- IMPORTANT WHEN USING NIGHT SHIFTS MDT: Set every permission to false if Enable_Night_Shifts is true. That will determine your shift type instead of these permissions.
+
+ EveryoneHasPermission = true, -- Anyone can go on shift for any service and can get any callout offered. If you use permissions and disable this, callouts are offered based on PermissionRoles.
+ IgnoreUnitRequirement = false, -- true = Any unit can receive callouts for any service. | false = Callouts are offered by service type (Police, fire, ambulance, tow).
+ DisplayUnitWaypoints = true, -- true = Display unit waypoints on screen. | false = Do not display unit waypoints on screen. (enabled is higher resmon)
+
+ Enable_Night_DiscordApi_Permissions = false, -- server/s_functions.lua
+ Enable_Ace_Permissions = false, -- server/s_functions.lua
+ Enable_ESX_Permissions = {
+ Check_By_Job = false, -- server/s_functions.lua
+ Check_By_Permissions = false, -- server/s_functions.lua
+ },
+ Enable_QBCore_Permissions = {
+ Check_By_Job = false, -- server/s_functions.lua
+ Check_By_Permissions = false, -- server/s_functions.lua
+ },
+
+ -- If you are using Night Shifts MDT, duty will be managed by the MDT. Roles defined here will not be relevant in that case.
+ PermissionRoles = {
+ PoliceRoles = {"Essex_Police_Force", "police"}, -- Example of two roles (you can add more.)
+ AmbulanceRoles = {"Ambulance_Service", "ambulance"},
+ FireRoles = {"Fire_Service", "fire"},
+ TowRoles = {"AA_Recovery", "tow"},
+ },
+
+ --====================== GENERAL SETTINGS ======================--
+
+ Callouts = {}, -- Do not change this.
+ EnableRadialMenu = true, -- Disabling this forces your players to use commands and/or hotkeys only. The radial menu offers several handy options during gameplay.
+ RadialMenuRollOverButtonSound = "rollover", -- NUI/sounds/rollover.ogg
+
+ CalloutBlipData = { -- https://docs.fivem.net/docs/game-references/blips/
+ DisplayId = 2, -- On map & on legend.
+ SpriteId = 9, -- Sprite type
+ Scale = 0.5, -- Scale
+ Alpha = 150, -- Transparency 0/255
+ ColourId = 47, -- Colour
+ RouteColourId = 47, -- Route color
+ },
+
+ TrackedUnitBlipData = { -- https://docs.fivem.net/docs/game-references/blips/
+ DisplayId = 2, -- On map & on legend.
+ SpriteId = 1, -- Sprite type
+ Scale = 0.5, -- Scale
+ Alpha = 225, -- Transparency 0/255
+ ColourId = 30, -- Colour
+ RouteColourId = 30, -- Route color
+ },
+
+ -- Callout Offers
+ OfferCalloutsWithinRangeOf = 3000, -- Distance in GTA meters between player and callouts, as the crow flies (lineair dist).
+ OfferCalloutInterval = {120, 300}, -- Seconds inbetween which a callout is offered. (3-5 minutes by default) (Minimum 60 seconds, maximum no limit)
+ OfferedCalloutTimeout = 15, -- Seconds after which the callout offer is expired. (15 seconds by default)
+ EnableOnScreenCalloutWaypoint = true, -- true: Shows an on-screen waypoint towards the callout. false: Doesn't.
+
+ -- Dispatch messages
+ DispatchResponseMessageTimeout = 15, -- Seconds after the next dispatch message is displayed (Goes for response dispatch messages on which units can track the responding unit).
+ DispatchArrivalMessageTimeout = 5, -- Seconds after the next dispatch message is displayed (Goes for arrival dispatch messages).
+ DispatchStatusMessageTimeout = 3, -- Seconds after the next dispatch message is displayed (Goes for status dispatch messages).
+ DispatchMessageBackupRequestsTimeout = 3, -- Seconds after the next dispatch message is displayed (Goes for backup request notifications)
+
+ -- Other
+ DistanceToAimAndOrderPeds = 25.0, -- Distance in GTA meters between you and the ped you desire to order something whilst aiming at them.
+ TimeToAutoStopTrackingUnit = 360, -- Seconds after which the blip route to the tracked unit is removed automatically by the system. (6 minutes by default)
+ EnableRenderedTextDrawingOnAim = true, -- false = less resmon, true = 3D text drawing & more resmon.
+ ShowBlipsForEntitiesOnCallouts = true, -- false = show no blips for entities, true = show blips for entites on callouts.
+ NPCChanceToFleeDuringInteraction = 20, -- Percentage of chance to flee of a total of 100%.
+ NPCChanceToBeDrunkAtInteraction = 15, -- Percentage of chance to be drunk of a total of 100%.
+ NPCChanceToBeDruggedAtInteraction = 15, -- Percentage of chance to be drugged of a total of 100%.
+ ShowHintPopupByDefault = true, -- If the hints popup (on callouts for example) should be shown by default
+ EnableCalloutEntityMarkers = false, -- If enabled, callout entities will have markers drawn above their head, this helps identify your targets, but uses more resmon.
+ DisableSubtitlesEntirely = false, -- Disable subtitles / mission text entirely.
+ DisableStunGunKills = true, -- If stun gun kills are disabled.
+
+ -- Behaviour State (Mood)
+ EnableBehaviourState3DLabels = true, -- If 3D labels should be shown above NPC's when they are in a specific behaviour state.
+ BehaviourState3DLabelsDuration = 5000, -- Duration of the 3D labels in milliseconds.
+
+ -- Radio Animation
+ RadioAnimationDictionary = "random@arrests",
+ RadioAnimationName = "generic_radio_enter",
+ RadioAnimationDuration = 3000,
+
+ -- Important gameplay settings
+ DisablePvP = false, -- Disable PvP. (True = Player killing disabled. | False = Player killing enabled.)
+ DisableWantedLevel = true, -- Disable wanted level.
+ DisableEngineDispatchServices = true, -- Disable NPC's spawned by the base game engine to respond to incidents (Ambulance, fire etc.).
+ DisableBaseGameCopSpawn = true, -- Disable base game engine spawned police officers (at stations for example).
+ DisableWeaponDrops = true, -- Disable weapon drops.
+ DisableWeaponsFromVehicles = true, -- Disable spawning weapons from vehicles.
+ DisableStamina = true, -- Disable using stamina.
+
+ --====================== TARGET INTEGRATION ======================--
+
+ Target = {
+ Enabled = false, -- Use target system instead of text prompt. Disabling this disables all target interactions
+ System = "ox-target", -- Options: "ox-target" | "qb-target"
+
+ PedInteract = {
+ Enabled = true, -- Use for ped interaction menu
+ Icon = "fa-solid fa-hand", -- Font awesome icon https://fontawesome.com/icons
+ Label = "Interact with person", -- Label displayed for interaction
+
+ --For injured Peds
+ InjuredIcon = "fa-solid fa-heart-pulse",
+ InjuredLabel = "Interact with injured person",
+ },
+ GearInteract = {
+ Enabled = true, -- Use for gear ped interaction menu
+ Icon = "fa-solid fa-hand", -- Font awesome icon https://fontawesome.com/icons
+ Label = "Collect gear", -- Label displayed for interaction
+ },
+ ObjInteract = {
+ Enabled = true, -- Use for object cleanup interaction
+ Icon = "fa-regular fa-trash-can", -- Font awesome icon https://fontawesome.com/icons
+ Label = "Clean-up object", -- Label displayed for interaction
+ },
+ StretcherInteract = {
+ Enabled = true, -- Use for stretcher interaction
+ --Putting stretcher into ambulance
+ AmbulanceInIcon = "fa-solid fa-arrow-left",
+ AmbulanceInLabel = "Place stretcher into ambulance",
+ --Remove stretcher from ambulance
+ AmbulanceOutIcon = "fa-solid fa-arrow-right",
+ AmbulanceOutLabel = "Take stretcher out of ambulance",
+ --Stretcher Actions
+ StretcherGrabIcon = "fa-solid fa-hand",
+ StretcherGrabLabel = "Grab Stretcher",
+ LowerStretcherIcon = "fa-solid fa-arrow-down",
+ LowerStretcherLabel = "Lower stretcher",
+ RaiseStretcherIcon = "fa-solid fa-arrow-up",
+ RaiseStretcherLabel = "Raise stretcher",
+ GetOnStretcherIcon = "fa-solid fa-bed-pulse",
+ GetOnStretcherLabel = "Get on or off stretcher",
+ },
+ SpikestripInteract = {
+ Enabled = true, -- Use for spikestrip interaction
+ Icon = "fa-solid fa-road-spikes", -- Font awesome icon https://fontawesome.com/icons
+ Label = "Grab or put away spikestrip", -- Label displayed for interaction vehicle
+ GroundLabel = "Pick up spikestrip", -- Label displayed for interaction ground
+ },
+ ImpoundInteract = {
+ Enabled = true, -- Use for impound interaction
+ Icon = "fa-solid fa-car", -- Font awesome icon https://fontawesome.com/icons
+ Label = "Impound vehicle", -- Label displayed for interaction
+ },
+ VehicleSearchInteract = {
+ Enabled = true, -- Use for vehicle search interaction
+ Icon = "fa-solid fa-magnifying-glass", -- Font awesome icon https://fontawesome.com/icons
+ Label = "Search vehicle section", -- Label displayed for interaction
+ },
+ },
+
+ --====================== HOTKEYS & COMMANDS ======================--
+
+ HotKeys = { -- https://docs.fivem.net/docs/game-references/input-mapper-parameter-ids/keyboard/
+
+ -- Shift
+ ToggleShift = "F11", -- Button to toggle shift on/off.
+
+ -- Callouts
+ AcceptCallout = "Y", -- Button to accept an offered callout.
+ CompleteCallout = "X", -- Button to complete currently active callout.
+ TrackUnit = "E", -- Button to track a unit responding to a callout when offered by the system to track.
+ RadialMenu = "Z", -- Button to open radial menu for NPC backup requests.
+ PullOver = "LSHIFT", -- Button to attempt to pull someone over.
+ PullOverMode = "U", -- Button to change pull over mode (when a vehicle was targeted for pullover)
+
+ -- User Interface
+ ToggleCalloutInfo = "PAGEDOWN", -- Toggles the callout interface on/off screen, when attached to a callout.
+ ToggleDispatchMessages = "", -- Toggles dispatch messages when on shift.
+
+ -- Ped Interaction -- "" to use no default hotkey and let clients set it themselves if they like. Otherwise use the command.
+ InteractWithPed = "E", -- Button to interact with a ped.
+ OrderOnKneesOrStandUp = "E", -- Button to order a ped to knees/stand up whilst aiming at the ped or stop / release an animal.
+ CleanupObject = "E", -- Button to clean up nearby callout spawned objects.
+ ImpoundInteract = "E", -- Button to interact with the impound ped.
+ GearInteract = "E", -- Button to interact with the gear ped.
+
+ -- Stretcher Interaction
+ GrabStretcher = "E", -- Button to grab and release a stretcher (E by default).
+ LowerStretcher = "DOWN", -- Button to lower the stretcher you're using (ARROW DOWN by default).
+ RaiseStretcher = "UP", -- Button to raise the stretcher you're close to (ARROW DOWN by default).
+ InteractWithStretcherAndVeh = "H", -- Button to take/put stretcher from/into vehicle. (H by default.)
+ DropOffPedAtHospital = "RETURN",-- Button to drop off a ped at a hospital when on a stretcher being strolled. (ENTER by default)
+ GetOnOrOffStretcher = "L", -- Button to get on or off a stretcher. (L by default.)
+
+ -- Spikestrips
+ TakeOutOrPutAwaySpikestripFromVehicle = "E", -- Button to take out or put away a spikestrip from a vehicle.
+ DeployOrPickupSpikestrip = "UP", -- Button to deploy or pickup a spikestrip.
+
+ -- Vehicle Search
+ SearchVehicle = "O", -- Button to search a vehicle.
+
+ -- Pursuit Mode
+ CancelPursuit = "", -- Button to cancel the pursuit. (Empty by default)
+ PursuitRadialMenu = "B", -- Button to open the pursuit backup radial menu.
+ ZoomInOnPursuitTarget = "H", -- Button to zoom in on the pursuit target.
+ },
+
+ Commands = {
+ -- Callouts
+ ToggleShift = "toggleshift",
+ ToggleCallouts = "togglecallouts",
+ AcceptCallout = "acceptcallout",
+ RequestCalloutManually = "requestcallout",
+ StopTrackingUnit = "stoptracking",
+ CompleteCallout = "completecallout",
+ RequestAmbulance = "requestambulance",
+ CancelAmbulance = "cancelambulance",
+ RequestPolice = "requestpolice",
+ CancelPolice = "cancelpolice",
+ RequestTaxi = "requesttaxi",
+ CancelTaxi = "canceltaxi",
+ RequestTow = "requesttow",
+ CancelTow = "canceltow",
+ RequestRoadService = "requestroadservice",
+ CancelRoadService = "cancelroadservice",
+ RequestCoroner = "requestcoroner",
+ CancelCoroner = "cancelcoroner",
+ RequestAnimalRescue = "requestanimalrescue",
+ CancelAnimalRescue = "cancelanimalrescue",
+ RequestMechanic = "requestmechanic",
+ CancelMechanic = "cancelmechanic",
+ RequestFire = "requestfire",
+ CancelFire = "cancelfire",
+ RadialMenu = "ersradialmenu",
+ PullOver = "pullover",
+ PullOverMode = "pullovermode",
+ InteractWithPed = "interact",
+ CleanupObject = "broom",
+ SpawnStretcher = "spawnstretcher",
+ DeleteStretcher = "deletestretcher",
+ GrabStretcher = "grabstretcher",
+ LowerStretcher = "lowerstretcher",
+ RaiseStretcher = "raisestretcher",
+ InteractWithStretcherAndVeh = "vstretcher",
+ DropOffPedAtHospital = "dropoffped",
+ TrackUnit = "track", -- Syntax: /track [userServerId]
+ TakeOutOrPutAwaySpikestripFromVehicle = "grabstinger",
+ DeployOrPickupSpikestrip = "stinger",
+ GetOnOrOffStretcher = "stretcher",
+ ImpoundInteract = "impound",
+ GearInteract = "gear",
+ SearchVehicle = "searchveh",
+ ZoomInOnPursuitTarget = "zoompursuit",
+ PursuitRadialMenu = "pursuitbackup",
+ CancelPursuit = "cancelpursuit",
+
+ -- User Interface
+ ToggleCalloutInfo = "togglecalloutinfo",
+ ToggleDispatchMessages = "toggledispatchmessages",
+
+ -- Hints
+ ToggleHints = "togglehints",
+ },
+
+ CommandsHelpText = {
+ ToggleShift = "Command used to go on or off shift.",
+ ToggleCallouts = "Command used to toggle callout offers for the ERS.",
+ AcceptCallout = "Command used to accept an offered callout.",
+ RequestCalloutManually = "Command used to request a callout manually.",
+ StopTrackingUnit = "Command used to manually stop tracking a unit.",
+ CompleteCallout = "Command used to complete the current callout.",
+ RequestAmbulance = "Command used to request an ambulance for nearby people.",
+ CancelAmbulance = "Command used to cancel the request for an ambulance.",
+ RequestPolice = "Command used to request police transport for the nearest person.",
+ CancelPolice = "Command used to cancel the police transport request.",
+ RequestTaxi = "Command used to request a taxi for the nearest person.",
+ CancelTaxi = "Command used to cancel a taxi request.",
+ RequestTow = "Command used to request a tow truck to pick up the nearest vehicle.",
+ CancelTow = "Command used to cancel the vehicle pick up request.",
+ RequestRoadService = "Command used to request road service.",
+ CancelRoadService = "Command used to cancel the road service request.",
+ RequestCoroner = "Command used to request a coroner.",
+ CancelCoroner = "Command used to cancel the coroner request.",
+ RequestAnimalRescue = "Command used to request an animal rescue.",
+ CancelAnimalRescue = "Command used to cancel the animal rescue request.",
+ RequestMechanic = "Command used to request a mechanic.",
+ CancelMechanic = "Command used to cancel the mechanic request.",
+ RequestFire = "Command used to request fire services.",
+ CancelFire = "Command used to cancel the fire service request.",
+ InteractWithPed = "Command used to interact with a nearby person.",
+ RadialMenu = "Command used to open the radial menu for backup requests.",
+ PullOver = "Command used to pull over a vehicle.",
+ CleanupObject = "Command used to clean up nearby objects.",
+ SpawnStretcher = "Command used to spawn a stretcher.",
+ DeleteStretcher = "Command used to delete a nearby stretcher.",
+ GrabStretcher = "Command used to grab a nearby stretcher.",
+ LowerStretcher = "Command used to lower a stretcher you are using.",
+ RaiseStretcher = "Command used to raise a nearby stretcher.",
+ InteractWithStretcherAndVeh = "Command used to interact with a stretcher and vehicle.",
+ DropOffPedAtHospital = "Command used to drop of a person at the hospital when on a stretcher being pushed",
+ TrackUnit = "Command used to track another unit on a callout.",
+ TrackUnit2 = "id",
+ TrackUnit3 = "Insert the players' server ID.",
+ TakeOutOrPutAwaySpikestripFromVehicle = "Command used to grab spikestrips from a vehicle.",
+ DeployOrPickupSpikestrip = "Command used to deploy or pickup a spikestrip.",
+ ImpoundInteract = "Command used to interact with the impound ped.",
+ GearInteract = "Command used to interact with the gear ped.",
+ SearchVehicle = "Command used to search a vehicle.",
+ ZoomInOnPursuitTarget = "Command used to zoom in on the pursuit target briefly.",
+ PursuitRadialMenu = "Command used to open the pursuit backup radial menu.",
+ CancelPursuit = "Command used to cancel the pursuit.",
+
+ -- User Interface
+ ToggleCalloutInfo = "Command to toggle your callout information & task display.",
+ ToggleDispatchMessages = "Command to toggle receiving dispatch messages.",
+
+ -- Hints
+ ToggleHints = "Command used to toggle hints at certain events.",
+ },
+
+ --====================== CORONER BODY BAG SETTINGS ======================--
+
+ BodyBagProp = "xm_prop_body_bag",
+ BodyBagOffsetZ = 0.0, -- use -1.0 for example. For this prop 0.0 works.
+
+ --====================== CALLOUT ENTITY BLIPS ======================--
+
+ NPCPullOverDrivingStyle = 4457276,
+ NPCFleeDrivingStyle = 2884412,
+ CalloutEntityBlipSprite = 14,
+ CalloutEntityBlipColour = 50,
+ CalloutEntityBlipScale = 0.75,
+
+ --====================== PROPS & ANIMATIONS ======================--
+
+ FriskAnimationDictionary = "custom@police", -- Custom emote (credits to ultrahacx)
+ FriskAnimation = "police", -- Custom emote (credits to ultrahacx)
+
+ --====================== PED CPR ======================--
+
+ SurvivalChanceOnCPR = 80, -- Precentage (of 100%) to survive.
+
+ --====================== Fire Settings (SmartFires from LondonStudios https://store.londonstudios.net/category/fire-resources) ======================--
+ -- IMPORTANT: The included lite resources only provide a minimum amount of variations for fire/smoke types. Consider getting the full experience at London Studios :)
+ -- They offer more resources which are very usefull when playing ERS, discover them all via the link above.
+
+ -- Size settings
+ RandomHugeFireOrSmokeSize = {8.0, 9.0, 10.0},
+ RandomLargeFireOrSmokeSize = {5.0, 6.0, 7.0},
+ RandomMediumFireOrSmokeSize = {3.0, 4.0, 5.0},
+ RandomSmallFireOrSmokeSize = {1.0, 2.0, 3.0},
+
+ -- Fire
+ AllFireTypes = {"normal", "normal2", "normal3", "electrical", "bonfire", "chemical"},
+ NormalFireTypes = {"normal", "normal2", "normal3"},
+ ElectricalFire = "electrical",
+ ChemicalFire = "chemical",
+ BonFire = "bonfire",
+
+ -- Smoke
+ AllSmokeTypes = {"electrical", "normal", "white", "foggy", "normal2", "normal3", "normal4", "normal5", "normal6"},
+ NormalSmokeTypes = {"normal", "normal2", "normal3", "normal4", "normal5", "normal6"},
+ ElectricalSmoke = "electrical",
+ FoggySmoke = "foggy",
+
+ --====================== Suspect Arrest (Custody) Settings ======================--
+
+ ShowBustedScreen = true,-- Shows Suspect Arrested in GTA style, when arresting a suspect.
+ CustodyRadius = 50.0, -- In which range must the player be to put an NPC into custody.
+ CustodyBlipData = { -- https://docs.fivem.net/docs/game-references/blips/
+ Enabled = true, -- Set to false to disable blips for the custody locations.
+ Name = "Custody center",
+ Sprite = 237,
+ Display = 2,
+ ShortRange = true,
+ Colour = 38,
+ Scale = 0.75,
+ Alpha = 200,
+ },
+ CustodyLocations = {
+ vector3(533.8215, -12.1921, 70.6256), -- Downtown Vinewood Police Station
+ vector3(475.0804, -1021.3436, 28.0728), -- Mission Row Police Station
+ vector3(-441.9879, 6017.8491, 31.6403), -- Paleto Bay Police Station
+ vector3(1851.2694, 3692.9575, 34.2194), -- Sandy Shores Police Station
+ },
+
+ --====================== Incident Blip Settings ======================--
+
+ EnableIncidentBlips = true, -- Enables or disables the creation of blips for incidents.
+ IncidentBlipsTimeout = 120, -- Removes the blip automatically after x seconds.
+ IncidentBlipsData = {
+ DisplayId = 2, -- On map & on legend.
+ SpriteId = 468, -- Sprite type
+ Scale = 1.0, -- Scale
+ Alpha = 225, -- Transparency 0/255
+ ColourId = 1, -- Colour
+ },
+
+ --====================== Passenger Selector Settings on Interactions ======================--
+
+ PassengerSelectorMarkerData = {
+ MarkerId = 21 --[[ integer ]],
+ dirX = 0 --[[ number ]],
+ dirY = 0 --[[ number ]],
+ dirZ = 0 --[[ number ]],
+ rotX = 0 --[[ number ]],
+ rotY = 180.0 --[[ number ]],
+ rotZ = 0 --[[ number ]],
+ scaleX = 0.25 --[[ number ]],
+ scaleY = 0.25 --[[ number ]],
+ scaleZ = 0.25 --[[ number ]],
+ red = 255 --[[ integer ]],
+ green = 165 --[[ integer ]],
+ blue = 0 --[[ integer ]],
+ alpha = 100 --[[ integer ]],
+ bobUpAndDown = false --[[ boolean ]],
+ faceCamera = true --[[ boolean ]],
+ p19 = 0 --[[ integer ]],
+ rotate = false --[[ boolean ]],
+ textureDict = 0 --[[ string ]],
+ textureName = 0 --[[ string ]],
+ drawOnEnts = 0 --[[ boolean ]]
+ },
+
+ --====================== NPC License Settings ======================--
+ -- These are random results when an NPC shows their license (Use AI to translate these, works fast if needed!)
+
+ ChanceToHaveRecords = 15, -- 15% chance of the person having records (flags, markers or warrants) in Police Database
+
+ RandomLicenseResults = {
+ -- Colour Options: text-danger, text-warning, text-success, text-info, text-muted
+ -- Chance is calculated as a percentage of the total chance to have records.
+ {Status = "Revoked", IsStatusValid = false, Colour = "text-danger", Icon = "fas fa-ban", Chance = 10},
+ {Status = "Invalid", IsStatusValid = false, Colour = "text-danger", Icon = "fas fa-ban", Chance = 5},
+ {Status = "Expired", IsStatusValid = false, Colour = "text-danger", Icon = "fas fa-ban", Chance = 15},
+ {Status = "Valid", IsStatusValid = true, Colour = "text-success", Icon = "fas fa-check", Chance = 30},
+ {Status = "Reported Stolen (valid)", IsStatusValid = true, Colour = "text-warning", Icon = "fas fa-exclamation-triangle", Chance = 5},
+ {Status = "International License (valid)", IsStatusValid = true, Colour = "text-success", Icon = "fas fa-globe", Chance = 15},
+ {Status = "No license", IsStatusValid = false, Colour = "text-muted", Icon = "fas fa-ban", Chance = 20},
+ },
+
+ RandomFlagsOrMarkersDescriptions = {
+ armed_and_dangerous = {
+ "Assault with a weapon.",
+ "Brandishing a firearm in public.",
+ "Suspected of multiple armed robberies.",
+ "Carrying a concealed weapon without a permit.",
+ "Threatening public safety with a firearm.",
+ "Involved in a shootout with law enforcement."
+ },
+ assault = {
+ "Aggressive behavior towards an officer.",
+ "Involved in a bar fight causing severe injuries.",
+ "Repeated domestic violence incidents.",
+ "Assaulting a public official.",
+ "Physical altercation in a public place.",
+ "Assault with intent to cause bodily harm."
+ },
+ burglary = {
+ "Caught on surveillance breaking into a jewelry store.",
+ "Linked to a series of home invasions.",
+ "Attempted break-in at a commercial property.",
+ "Possession of burglary tools.",
+ "Breaking and entering into a residential home.",
+ "Stealing from a vehicle."
+ },
+ drug_related = {
+ "Operating a large-scale drug distribution network.",
+ "Caught manufacturing illegal substances.",
+ "Possession with intent to distribute.",
+ "Trafficking controlled substances.",
+ "Caught with illegal drug paraphernalia.",
+ "Under the influence of illegal drugs in public."
+ },
+ gang_affiliation = {
+ "Leader of a notorious street gang.",
+ "Involved in gang-related shootings.",
+ "Organizing criminal gang activities.",
+ "Gang-related extortion activities.",
+ "Participating in a gang fight.",
+ "Vandalism linked to gang activity."
+ },
+ homicide = {
+ "Prime suspect in a high-profile murder case.",
+ "Linked to multiple unsolved homicides.",
+ "Attempted murder charge.",
+ "Involvement in a murder-for-hire plot.",
+ "Accessory to a homicide.",
+ "Manslaughter during a criminal act."
+ },
+ kidnapping = {
+ "Abducted a high-profile individual for ransom.",
+ "Involved in multiple kidnapping cases.",
+ "Attempted kidnapping at gunpoint.",
+ "Holding a person against their will.",
+ "Kidnapping linked to organized crime.",
+ "Using a vehicle to facilitate a kidnapping."
+ },
+ mental_health_issues = {
+ "History of violent outbursts in public.",
+ "Escaped from a mental health facility.",
+ "Non-compliance with mental health treatment.",
+ "Threatening behavior due to mental instability.",
+ "Detained for psychiatric evaluation.",
+ "Public disturbance linked to mental health."
+ },
+ sex_offense = {
+ "Convicted of multiple sexual assaults.",
+ "Registered offender violating parole.",
+ "Multiple counts of sexual assault.",
+ "Serial sexual assault suspect.",
+ "Indecent exposure in a public place.",
+ "Sexual harassment with physical contact."
+ },
+ terrorism = {
+ "Suspected of planning a terrorist attack.",
+ "Linked to a known terrorist organization.",
+ "Possession of materials for making explosives.",
+ "Threatening national security.",
+ "Involvement in a cyber-terrorism plot.",
+ "Funding terrorist activities."
+ },
+ theft = {
+ "Part of a car theft ring.",
+ "Caught shoplifting high-value items.",
+ "Pickpocketing in a crowded area.",
+ "Stealing from a place of employment.",
+ "Identity theft and fraud.",
+ "Receiving stolen property."
+ },
+ traffic_violation = {
+ "Repeated DUI offenses.",
+ "Fleeing from law enforcement during a traffic stop.",
+ "Driving without a valid license.",
+ "Excessive speeding in a residential area.",
+ "Reckless driving causing an accident.",
+ "Running multiple red lights."
+ },
+ wanted_person = {
+ "Repeated Offender",
+ "Did not report for court",
+ "Did not report for parole",
+ "Did not report for probation",
+ "Escaped Prisoner",
+ "Fugitive",
+ "Probation Violation",
+ "Violent History",
+ "Flight Risk",
+ "High Profile Case",
+ "Substance Abuse Treatment",
+ "Frequent Domestic Disputes"
+ },
+ other = {
+ "Repeated Offender",
+ "Did not report for court",
+ "Did not report for parole",
+ "Did not report for probation",
+ "Escaped Prisoner",
+ "Fugitive",
+ "Probation Violation",
+ "Violent History",
+ "Flight Risk",
+ "High Profile Case",
+ "Substance Abuse Treatment",
+ "Frequent Domestic Disputes"
+ },
+ active_warrant = {
+ "Repeated Offender",
+ "Did not report for court",
+ "Did not report for parole",
+ "Did not report for probation",
+ "Escaped Prisoner",
+ "Fugitive",
+ "Probation Violation",
+ "Violent History",
+ "Flight Risk",
+ "High Profile Case",
+ "Substance Abuse Treatment",
+ "Frequent Domestic Disputes"
+ },
+ },
+
+ --====================== NPC Inventory Item Settings ======================--
+ -- These items are randomly presented when searching an NPC. You can add or remove items and adjust legality.
+
+ NPCInventory = {
+ {name = "Wallet", illegal = false},
+ {name = "Rolex", illegal = false},
+ {name = "Cell Phone", illegal = false},
+ {name = "Knife", illegal = true},
+ {name = "Drugs", illegal = true},
+ {name = "Gun", illegal = true},
+ {name = "Flashlight", illegal = false},
+ {name = "Keys", illegal = false},
+ {name = "Watch", illegal = false},
+ {name = "Water Bottle", illegal = false},
+ {name = "Map", illegal = false},
+ {name = "First Aid Kit", illegal = false},
+ {name = "Lighter", illegal = false},
+ {name = "Matches", illegal = false},
+ {name = "Sunglasses", illegal = false},
+ {name = "Hat", illegal = false},
+ {name = "Backpack", illegal = false},
+ {name = "Injection Needle", illegal = true},
+ {name = "Compass", illegal = false},
+ {name = "Radio", illegal = false},
+ {name = "Camera", illegal = false},
+ {name = "Binoculars", illegal = false},
+ {name = "Gloves", illegal = false},
+ {name = "Scissors", illegal = false},
+ {name = "Rope", illegal = false},
+ {name = "Hammer", illegal = false},
+ {name = "Nails", illegal = false},
+ {name = "Screwdriver", illegal = false},
+ {name = "Plastic Bag", illegal = false},
+ {name = "Handcuffs", illegal = false},
+ {name = "Lockpick", illegal = true},
+ {name = "Crowbar", illegal = false},
+ {name = "Money", illegal = false},
+ {name = "Passport", illegal = false},
+ {name = "ID Card", illegal = false},
+ {name = "Credit Card", illegal = false},
+ {name = "Bank Statement", illegal = false},
+ {name = "Drivers License", illegal = false},
+ {name = "Firearm License", illegal = false},
+ {name = "Medical Prescription", illegal = false},
+ {name = "Joint", illegal = true},
+ {name = "Cigarettes", illegal = false},
+ {name = "Lighter Fluid", illegal = false},
+ {name = "Locket", illegal = false},
+ {name = "Necklace", illegal = false},
+ {name = "Bracelet", illegal = false},
+ {name = "Ring", illegal = false},
+ {name = "Smartwatch", illegal = false},
+ {name = "Book", illegal = false},
+ {name = "Notebook", illegal = false},
+ {name = "Pen", illegal = false},
+ {name = "Socks", illegal = false},
+ {name = "Shoes", illegal = false},
+ {name = "Towel", illegal = false},
+ {name = "Toothbrush", illegal = false},
+ {name = "Toothpaste", illegal = false},
+ {name = "Shampoo", illegal = false},
+ {name = "Conditioner", illegal = false},
+ {name = "Soap", illegal = false},
+ {name = "Deodorant", illegal = false},
+ {name = "Lip Balm", illegal = false},
+ {name = "Hand Sanitizer", illegal = false},
+ {name = "Tissues", illegal = false},
+ {name = "Glasses", illegal = false},
+ {name = "Contacts", illegal = false},
+ {name = "Contact Solution", illegal = false},
+ {name = "Hairbrush", illegal = false},
+ {name = "Nail Clippers", illegal = false},
+ {name = "Umbrella", illegal = false},
+ {name = "Notebook", illegal = false},
+ {name = "Headphones", illegal = false},
+ {name = "Charger", illegal = false},
+ {name = "USB Drive", illegal = false},
+ {name = "Laptop", illegal = false},
+ {name = "Tablet", illegal = false},
+ {name = "Handkerchief", illegal = false},
+ {name = "Belt", illegal = false},
+ {name = "Sunglasses Case", illegal = false},
+ {name = "Water Bottle", illegal = false},
+ {name = "Stolen Jewelry", illegal = true},
+ {name = "Fake ID", illegal = true},
+ {name = "Explosives", illegal = true},
+ {name = "Poison", illegal = true},
+ {name = "Signal Jammer", illegal = true},
+ -- Add more here in the same format, example:
+ -- {name = "iFruit phone cover", illegal = false},
+ },
+
+ --====================== ZONE CHANGE UI ======================--
+
+ EnableZoneChangeUI = true,
+ Zones = {
+ ['AIRP'] = "Los Santos International Airport", ['ALAMO'] = "Alamo Sea", ['ALTA'] = "Alta", ['ARMYB'] = "Fort Zancudo", ['BANHAMC'] = "Banham Canyon Dr", ['BANNING'] = "Banning",
+ ['BEACH'] = "Vespucci Beach", ['BHAMCA'] = "Banham Canyon", ['BRADP'] = "Braddock Pass", ['BRADT'] = "Braddock Tunnel", ['BURTON'] = "Burton", ['CALAFB'] = "Calafia Bridge", ['CANNY'] = "Raton Canyon",
+ ['CCREAK'] = "Cassidy Creek", ['CHAMH'] = "Chamberlain Hills", ['CHIL'] = "Vinewood Hills", ['CHU'] = "Chumash", ['CMSW'] = "Chiliad Mountain State Wilderness", ['CYPRE'] = "Cypress Flats", ['DAVIS'] = "Davis",
+ ['DELBE'] = "Del Perro Beach", ['DELPE'] = "Del Perro", ['DELSOL'] = "La Puerta", ['DESRT'] = "Grand Senora Desert", ['DOWNT'] = "Downtown", ['DTVINE'] = "Downtown Vinewood", ['EAST_V'] = "East Vinewood",
+ ['EBURO'] = "El Burro Heights", ['ELGORL'] = "El Gordo Lighthouse", ['ELYSIAN'] = "Elysian Island", ['GALFISH'] = "Galilee", ['GOLF'] = "GWC and Golfing Society", ['GRAPES'] = "Grapeseed",
+ ['GREATC'] = "Great Chaparral", ['HARMO'] = "Harmony", ['HAWICK'] = "Hawick", ['HORS'] = "Vinewood Racetrack", ['HUMLAB'] = "Humane Labs and Research", ['JAIL'] = "Bolingbroke Penitentiary",
+ ['KOREAT'] = "Little Seoul", ['LACT'] = "Land Act Reservoir", ['LAGO'] = "Lago Zancudo", ['LDAM'] = "Land Act Dam", ['LEGSQU'] = "Legion Square", ['LMESA'] = "La Mesa", ['LOSPUER'] = "La Puerta",
+ ['MIRR'] = "Mirror Park", ['MORN'] = "Morningwood", ['MOVIE'] = "Richards Majestic", ['MTCHIL'] = "Mount Chiliad", ['MTGORDO'] = "Mount Gordo", ['MTJOSE'] = "Mount Josiah", ['MURRI'] = "Murrieta Heights",
+ ['NCHU'] = "North Chumash", ['NOOSE'] = "N.O.O.S.E", ['OCEANA'] = "Pacific Ocean", ['PALCOV'] = "Paleto Cove", ['PALETO'] = "Paleto Bay", ['PALFOR'] = "Paleto Forest", ['PALHIGH'] = "Palomino Highlands",
+ ['PALMPOW'] = "Palmer-Taylor Power Station", ['PBLUFF'] = "Pacific Bluffs", ['PBOX'] = "Pillbox Hill", ['PROCOB'] = "Procopio Beach", ['RANCHO'] = "Rancho", ['RGLEN'] = "Richman Glen", ['RICHM'] = "Richman",
+ ['ROCKF'] = "Rockford Hills", ['RTRAK'] = "Redwood Lights Track", ['SANAND'] = "San Andreas", ['SANCHIA'] = "San Chianski Mountain Range", ['SANDY'] = "Sandy Shores", ['SKID'] = "Mission Row",
+ ['SLAB'] = "Stab City", ['STAD'] = "Maze Bank Arena", ['STRAW'] = "Strawberry", ['TATAMO'] = "Tataviam Mountains", ['TERMINA'] = "Terminal", ['TEXTI'] = "Textile City", ['TONGVAH'] = "Tongva Hills",
+ ['TONGVAV'] = "Tongva Valley", ['VCANA'] = "Vespucci Canals", ['VESP'] = "Vespucci", ['VINE'] = "Vinewood", ['WINDF'] = "Ron Alternates Wind Farm", ['WVINE'] = "West Vinewood", ['ZANCUDO'] = "Zancudo River",
+ ['ZP_ORT'] = "Port of South Los Santos", ['ZQ_UAR'] = "Davis Quartz"
+ },
+
+ --====================== DEBUG ======================--
+ -- Debug note: Resmon is very high during debug mode. This is in relation to all the rendering done for developer information.
+
+ -- Marker which indicates the spawn position for NPC backup, can be handy when creating callouts making sure the location is reachable properly by NPC backup.
+ EnabledDebugMarker = false,
+ MarkerData = {
+ MarkerId = 21 --[[ integer ]],
+ dirX = 0 --[[ number ]],
+ dirY = 0 --[[ number ]],
+ dirZ = 0 --[[ number ]],
+ rotX = 0 --[[ number ]],
+ rotY = 180.0 --[[ number ]],
+ rotZ = 0 --[[ number ]],
+ scaleX = 0.25 --[[ number ]],
+ scaleY = 0.25 --[[ number ]],
+ scaleZ = 0.25 --[[ number ]],
+ red = 255 --[[ integer ]],
+ green = 165 --[[ integer ]],
+ blue = 0 --[[ integer ]],
+ alpha = 75 --[[ integer ]],
+ bobUpAndDown = false --[[ boolean ]],
+ faceCamera = true --[[ boolean ]],
+ p19 = 0 --[[ integer ]],
+ rotate = false --[[ boolean ]],
+ textureDict = 0 --[[ string ]],
+ textureName = 0 --[[ string ]],
+ drawOnEnts = 0 --[[ boolean ]]
+ },
+}
\ No newline at end of file
diff --git a/resources/night_ers/config/entity-config.lua b/resources/night_ers/config/entity-config.lua
new file mode 100644
index 000000000..1c1cd6504
--- /dev/null
+++ b/resources/night_ers/config/entity-config.lua
@@ -0,0 +1,1031 @@
+Config = Config or {}
+
+--====================== Vehicles, Peds, Animal peds etc. ======================--
+
+Config.randomHelicopters = {
+ "maverick",
+ "frogger",
+ "frogger2",
+ "supervolito",
+ "supervolito2",
+}
+
+Config.randomBicycles = {
+ "bmx",
+ "tribike3",
+ "scorcher",
+ "cruiser",
+ "tribike2",
+ "tribike",
+ "fixter",
+ "inductor",
+}
+
+Config.randomCops = {
+ "s_f_y_cop_01",
+ "s_m_y_cop_01",
+ "csb_cop",
+}
+
+Config.randomPoliceVehicles = {
+ "fbi",
+ "police",
+ "police2",
+ "police3",
+ "policet",
+}
+
+Config.randomMilitary = {
+ "s_m_y_blackops_02",
+ "s_m_y_blackops_01",
+ "s_m_y_blackops_03",
+ "s_m_y_armymech_01",
+ "s_m_y_ammucity_01",
+ "s_m_y_marine_03",
+ "s_m_y_marine_01",
+ "s_m_y_pilot_01",
+}
+
+Config.randomAirportVehicles = {
+ "airtug",
+ "airbus",
+ "utillitruck3",
+}
+
+Config.randomPlanes = {
+ "luxor",
+ "mammatus",
+ "miljet",
+}
+
+Config.randomAirportPeds = {
+ "s_f_y_airhostess_01",
+ "s_m_y_airworker",
+ "s_m_y_construct_02",
+ "s_m_y_construct_01",
+}
+
+Config.randomConstructionSitePeds = {
+ "s_m_y_construct_02",
+ "s_m_y_construct_01",
+ "s_m_y_dockwork_01",
+}
+
+Config.randomBoats = {
+ "dinghy",
+ "dinghy2",
+ "jetmax",
+ "marquis",
+ "seashark3",
+ "tropic2",
+ "toro",
+ "tropic",
+ "tug",
+ "squalo",
+ "toro2",
+ "speeder",
+ "speeder2",
+ "suntrap",
+ "seashark",
+ "seashark2",
+}
+
+Config.randomTrainCarriages = {
+ "freightcar",
+ "freightcar2",
+ "freightcont1",
+ "freightcont2",
+ "freightgrain",
+}
+
+Config.randomDirtObjects = {
+ "prop_pile_dirt_07_cr",
+ "prop_pile_dirt_07",
+ "prop_pile_dirt_06",
+ "prop_pile_dirt_04",
+ "prop_pile_dirt_03",
+ "prop_pile_dirt_02",
+ "prop_pile_dirt_01",
+}
+
+Config.randomRiotObjects = {
+ "prop_roadcone02a",
+ "prop_ld_rubble_01",
+ "prop_rock_4_a",
+}
+
+Config.randomRockObjects = {
+ "prop_rock_4_a",
+ "prop_rock_4_b",
+ "prop_rock_4_c",
+ "prop_rock_4_d",
+ "prop_rock_4_e",
+}
+
+Config.RandomBombObjectModels = {
+ "prop_ld_suitcase_02",
+ "apa_mp_h_acc_box_trinket_01",
+ "hei_prop_heist_box",
+ "hei_prop_heist_ammo_box",
+ "prop_cardbordbox_05a",
+}
+
+Config.allAnimals = { -- Birds/Fish are commented out, to prevent animal rescue not being able to reach animals which are alive but need rescuing.
+ "a_c_boar",
+ "a_c_cat_01",
+ --"a_c_chickenhawk",
+ "a_c_chimp",
+ "a_c_chop",
+ "a_c_cormorant",
+ "a_c_cow",
+ "a_c_coyote",
+ --"a_c_crow",
+ "a_c_deer",
+ --"a_c_dolphin",
+ --"a_c_fish",
+ "a_c_hen",
+ --"a_c_humpback",
+ "a_c_husky",
+ --"a_c_killerwhale",
+ "a_c_mtlion",
+ "a_c_pig",
+ --"a_c_pigeon",
+ "a_c_poodle",
+ "a_c_pug",
+ "a_c_rabbit_01",
+ "a_c_rat",
+ "a_c_retriever",
+ "a_c_rhesus",
+ "a_c_rottweiler",
+ -- "a_c_seagull",
+ --"a_c_sharkhammer",
+ --"a_c_sharktiger",
+ "a_c_shepherd",
+ --"a_c_stingray",
+ "a_c_westy",
+}
+
+Config.animalsBlockingRoads = { -- Specific animals for callouts (Realism, add or remove animals to your liking...)
+ "a_c_boar",
+ "a_c_cow",
+ "a_c_deer",
+ "a_c_mtlion",
+ "a_c_pig",
+}
+
+Config.calloutAnimals = { -- Specific animals for callouts (Realism, add or remove animals to your liking...)
+ "a_c_boar",
+ "a_c_chimp",
+ "a_c_cow",
+ "a_c_deer",
+ "a_c_mtlion",
+ "a_c_pig",
+}
+
+Config.wildAnimals = {
+ "a_c_mtlion",
+}
+
+Config.huntedAnimals = {
+ "a_c_boar",
+ "a_c_deer",
+ "a_c_rabbit_01",
+}
+
+Config.cattleAnimals = { -- Specific animals for callouts (Realism, add or remove animals to your liking...)
+ "a_c_cow",
+ "a_c_pig",
+}
+
+Config.shopKeeperPeds = {
+ "mp_m_shopkeep_01",
+}
+
+Config.randomGangPeds = {
+ -- Gang female
+ "g_f_importexport_01",
+ "g_f_importexport_01",
+ "g_f_y_ballas_01",
+ "g_f_y_families_01",
+ "g_f_y_lost_01",
+ "g_f_y_vagos_01",
+ -- Gang Male
+ "g_m_importexport_01",
+ "g_m_m_armboss_01",
+ "g_m_m_armgoon_01",
+ "g_m_m_armlieut_01",
+ "g_m_m_chemwork_01",
+ "g_m_m_chiboss_01",
+ "g_m_m_chicold_01",
+ "g_m_m_chigoon_01",
+ "g_m_m_chigoon_02",
+ "g_m_m_korboss_01",
+ "g_m_m_mexboss_01",
+ "g_m_m_mexboss_02",
+ "g_m_y_armgoon_02",
+ "g_m_y_azteca_01",
+ "g_m_y_ballaeast_01",
+ "g_m_y_ballaorig_01",
+ "g_m_y_ballasout_01",
+ "g_m_y_famca_01",
+ "g_m_y_famdnf_01",
+ "g_m_y_famfor_01",
+ "g_m_y_korean_01",
+ "g_m_y_korean_02",
+ "g_m_y_korlieut_01",
+ "g_m_y_lost_01",
+ "g_m_y_lost_02",
+ "g_m_y_lost_03",
+ "g_m_y_mexgang_01",
+ "g_m_y_mexgoon_01",
+ "g_m_y_mexgoon_02",
+ "g_m_y_mexgoon_03",
+ "g_m_y_pologoon_01",
+ "g_m_y_pologoon_02",
+ "g_m_y_salvaboss_01",
+ "g_m_y_salvagoon_01",
+ "g_m_y_salvagoon_02",
+ "g_m_y_salvagoon_03",
+ "g_m_y_strpunk_01",
+ "g_m_y_strpunk_02",
+ "g_m_m_casrn_01",
+}
+
+Config.randomHunterPeds = {
+ "cs_hunter",
+ "mp_f_chbar_01",
+ "csb_cletus",
+ "a_f_m_eastsa_01"
+}
+
+Config.randomPeds = {
+ -- Ambient female
+ "a_f_m_beach_01",
+ "a_f_m_bevhills_01",
+ "a_f_m_bevhills_02",
+ "a_f_m_bodybuild_01",
+ "a_f_m_business_02",
+ "a_f_m_downtown_01",
+ "a_f_m_eastsa_01",
+ "a_f_m_eastsa_02",
+ "a_f_m_fatbla_01",
+ "a_f_m_fatcult_01",
+ "a_f_m_fatwhite_01",
+ "a_f_m_ktown_01",
+ "a_f_m_ktown_02",
+ "a_f_m_prolhost_01",
+ "a_f_m_salton_01",
+ "a_f_m_skidrow_01",
+ "a_f_m_soucent_01",
+ "a_f_m_soucent_02",
+ "a_f_m_soucentmc_01",
+ "a_f_m_tourist_01",
+ "a_f_m_tramp_01",
+ "a_f_m_trampbeac_01",
+ "a_f_o_genstreet_01",
+ "a_f_o_indian_01",
+ "a_f_o_ktown_01",
+ "a_f_o_salton_01",
+ "a_f_o_soucent_01",
+ "a_f_o_soucent_02",
+ "a_f_y_beach_01",
+ "a_f_y_bevhills_01",
+ "a_f_y_bevhills_02",
+ "a_f_y_bevhills_03",
+ "a_f_y_bevhills_04",
+ "a_f_y_business_01",
+ "a_f_y_business_02",
+ "a_f_y_business_03",
+ "a_f_y_business_04",
+ "a_f_y_clubcust_01",
+ "a_f_y_clubcust_02",
+ "a_f_y_clubcust_03",
+ "a_f_y_eastsa_01",
+ "a_f_y_eastsa_02",
+ "a_f_y_eastsa_03",
+ "a_f_y_epsilon_01",
+ "a_f_y_femaleagent",
+ "a_f_y_fitness_01",
+ "a_f_y_fitness_02",
+ "a_f_y_genhot_01",
+ "a_f_y_golfer_01",
+ "a_f_y_hiker_01",
+ "a_f_y_hippie_01",
+ "a_f_y_hipster_01",
+ "a_f_y_hipster_02",
+ "a_f_y_hipster_03",
+ "a_f_y_hipster_04",
+ "a_f_y_indian_01",
+ "a_f_y_juggalo_01",
+ "a_f_y_runner_01",
+ "a_f_y_rurmeth_01",
+ "a_f_y_scdressy_01",
+ "a_f_y_skater_01",
+ "a_f_y_soucent_01",
+ "a_f_y_soucent_02",
+ "a_f_y_soucent_03",
+ "a_f_y_tennis_01",
+ "a_f_y_topless_01",
+ "a_f_y_tourist_01",
+ "a_f_y_tourist_02",
+ "a_f_y_vinewood_01",
+ "a_f_y_vinewood_02",
+ "a_f_y_vinewood_03",
+ "a_f_y_vinewood_04",
+ "a_f_y_yoga_01",
+ "a_f_y_gencaspat_01",
+ "a_f_y_smartcaspat_01",
+ -- Ambient male
+ "a_m_m_acult_01",
+ "a_m_m_afriamer_01",
+ "a_m_m_beach_01",
+ "a_m_m_beach_02",
+ "a_m_m_bevhills_01",
+ "a_m_m_bevhills_02",
+ "a_m_m_business_01",
+ "a_m_m_eastsa_01",
+ "a_m_m_eastsa_02",
+ "a_m_m_farmer_01",
+ "a_m_m_fatlatin_01",
+ "a_m_m_genfat_01",
+ "a_m_m_genfat_02",
+ "a_m_m_golfer_01",
+ "a_m_m_hasjew_01",
+ "a_m_m_hillbilly_01",
+ "a_m_m_hillbilly_02",
+ "a_m_m_indian_01",
+ "a_m_m_ktown_01",
+ "a_m_m_malibu_01",
+ "a_m_m_mexcntry_01",
+ "a_m_m_mexlabor_01",
+ "a_m_m_og_boss_01",
+ "a_m_m_paparazzi_01",
+ "a_m_m_polynesian_01",
+ "a_m_m_prolhost_01",
+ "a_m_m_rurmeth_01",
+ "a_m_m_salton_01",
+ "a_m_m_salton_02",
+ "a_m_m_salton_03",
+ "a_m_m_salton_04",
+ "a_m_m_skater_01",
+ "a_m_m_skidrow_01",
+ "a_m_m_socenlat_01",
+ "a_m_m_soucent_01",
+ "a_m_m_soucent_02",
+ "a_m_m_soucent_03",
+ "a_m_m_soucent_04",
+ "a_m_m_stlat_02",
+ "a_m_m_tennis_01",
+ "a_m_m_tourist_01",
+ "a_m_m_tramp_01",
+ "a_m_m_trampbeac_01",
+ "a_m_m_tranvest_01",
+ "a_m_m_tranvest_02",
+ "a_m_o_acult_01",
+ "a_m_o_acult_02",
+ "a_m_o_beach_01",
+ "a_m_o_genstreet_01",
+ "a_m_o_ktown_01",
+ "a_m_o_salton_01",
+ "a_m_o_soucent_01",
+ "a_m_o_soucent_02",
+ "a_m_o_soucent_03",
+ "a_m_o_tramp_01",
+ "a_m_y_acult_01",
+ "a_m_y_acult_02",
+ "a_m_y_beach_01",
+ "a_m_y_beach_02",
+ "a_m_y_beach_03",
+ "a_m_y_beachvesp_01",
+ "a_m_y_beachvesp_02",
+ "a_m_y_bevhills_01",
+ "a_m_y_bevhills_02",
+ "a_m_y_breakdance_01",
+ "a_m_y_busicas_01",
+ "a_m_y_business_01",
+ "a_m_y_business_02",
+ "a_m_y_business_03",
+ "a_m_y_clubcust_01",
+ "a_m_y_clubcust_02",
+ "a_m_y_clubcust_03",
+ "a_m_y_cyclist_01",
+ "a_m_y_dhill_01",
+ "a_m_y_downtown_01",
+ "a_m_y_eastsa_01",
+ "a_m_y_eastsa_02",
+ "a_m_y_epsilon_01",
+ "a_m_y_epsilon_02",
+ "a_m_y_gay_01",
+ "a_m_y_gay_02",
+ "a_m_y_genstreet_01",
+ "a_m_y_genstreet_02",
+ "a_m_y_golfer_01",
+ "a_m_y_hasjew_01",
+ "a_m_y_hiker_01",
+ "a_m_y_hippy_01",
+ "a_m_y_hipster_01",
+ "a_m_y_hipster_02",
+ "a_m_y_hipster_03",
+ "a_m_y_indian_01",
+ "a_m_y_jetski_01",
+ "a_m_y_juggalo_01",
+ "a_m_y_ktown_01",
+ "a_m_y_ktown_02",
+ "a_m_y_latino_01",
+ "a_m_y_methhead_01",
+ "a_m_y_mexthug_01",
+ "a_m_y_motox_01",
+ "a_m_y_motox_02",
+ "a_m_y_musclbeac_01",
+ "a_m_y_musclbeac_02",
+ "a_m_y_polynesian_01",
+ "a_m_y_roadcyc_01",
+ "a_m_y_runner_01",
+ "a_m_y_runner_02",
+ "a_m_y_salton_01",
+ "a_m_y_skater_01",
+ "a_m_y_skater_02",
+ "a_m_y_soucent_01",
+ "a_m_y_soucent_02",
+ "a_m_y_soucent_03",
+ "a_m_y_soucent_04",
+ "a_m_y_stbla_01",
+ "a_m_y_stbla_02",
+ "a_m_y_stlat_01",
+ "a_m_y_stwhi_01",
+ "a_m_y_stwhi_02",
+ "a_m_y_sunbathe_01",
+ "a_m_y_surfer_01",
+ "a_m_y_vindouche_01",
+ "a_m_y_vinewood_01",
+ "a_m_y_vinewood_02",
+ "a_m_y_vinewood_03",
+ "a_m_y_vinewood_04",
+ "a_m_y_yoga_01",
+ "a_m_m_mlcrisis_01",
+ "a_m_y_gencaspat_01",
+ "a_m_y_smartcaspat_01",
+ -- Gang female
+ "g_f_importexport_01",
+ "g_f_importexport_01",
+ "g_f_y_ballas_01",
+ "g_f_y_families_01",
+ "g_f_y_lost_01",
+ "g_f_y_vagos_01",
+ -- Gang Male
+ "g_m_importexport_01",
+ "g_m_m_armboss_01",
+ "g_m_m_armgoon_01",
+ "g_m_m_armlieut_01",
+ "g_m_m_chemwork_01",
+ "g_m_m_chiboss_01",
+ "g_m_m_chicold_01",
+ "g_m_m_chigoon_01",
+ "g_m_m_chigoon_02",
+ "g_m_m_korboss_01",
+ "g_m_m_mexboss_01",
+ "g_m_m_mexboss_02",
+ "g_m_y_armgoon_02",
+ "g_m_y_azteca_01",
+ "g_m_y_ballaeast_01",
+ "g_m_y_ballaorig_01",
+ "g_m_y_ballasout_01",
+ "g_m_y_famca_01",
+ "g_m_y_famdnf_01",
+ "g_m_y_famfor_01",
+ "g_m_y_korean_01",
+ "g_m_y_korean_02",
+ "g_m_y_korlieut_01",
+ "g_m_y_lost_01",
+ "g_m_y_lost_02",
+ "g_m_y_lost_03",
+ "g_m_y_mexgang_01",
+ "g_m_y_mexgoon_01",
+ "g_m_y_mexgoon_02",
+ "g_m_y_mexgoon_03",
+ "g_m_y_pologoon_01",
+ "g_m_y_pologoon_02",
+ "g_m_y_salvaboss_01",
+ "g_m_y_salvagoon_01",
+ "g_m_y_salvagoon_02",
+ "g_m_y_salvagoon_03",
+ "g_m_y_strpunk_01",
+ "g_m_y_strpunk_02",
+ "g_m_m_casrn_01",
+ -- Tow driver
+ "mp_m_waremech_01",
+}
+
+Config.randomMigrantVans = {
+ "benson",
+ "pounder",
+ "pounder2",
+ "granger",
+ "burrito",
+}
+
+Config.randomMotorBikes = {
+ "ruffian", -- Motorbike
+ "sanchez", -- Motorbike
+ "akuma", -- Motorbike
+ "bati", -- Motorbike
+ "faggio", -- Moped
+ "faggio2", -- Moped
+}
+
+Config.randomFourDoorVehiclesSpecific = {
+ "gburrito",
+ "washington",
+ "asterope",
+ "schafter3",
+ "schafter4",
+ "schafter5",
+ "tailgater",
+ "jackal",
+ "fugitive",
+}
+
+Config.randomHeavyVehicles = {
+ "trash",
+ "trash2",
+ "tiptruck",
+ "tiptruck2",
+ "scrap",
+}
+
+Config.randomHeavyVehicles2 = {
+ "bulldozer",
+ "cutter",
+ "dump",
+ "handler"
+}
+
+Config.randomRiotVehicles = {
+ "policet",
+ "Sentinel",
+ "FQ2",
+ "baller3",
+ "glendale",
+ "asea",
+ "asterope",
+}
+
+Config.RandomHeavyVehicleObjects = {
+ "hei_prop_heist_binbag",
+ "prop_ld_rub_binbag_01",
+ "p_binbag_01_s",
+ "prop_rub_binbag_01b",
+ "prop_rub_binbag_sd_02",
+ "prop_rub_binbag_03",
+ "prop_rub_binbag_06",
+ "prop_rub_binbag_08",
+ "prop_rub_cardpile_05",
+ "prop_rub_cardpile_06",
+ "prop_rub_cardpile_07",
+}
+
+Config.RandomBagObjects = {
+ "prop_beachbag_01",
+ "prop_beachbag_02",
+ "prop_beachbag_03",
+ "prop_beachbag_04",
+ "prop_beachbag_05",
+ "prop_beachbag_06",
+ "prop_ld_suitcase_02",
+ "prop_suitcase_01",
+ "prop_suitcase_01b",
+ "prop_suitcase_01c",
+ "prop_suitcase_02",
+ "prop_suitcase_03",
+ "prop_suitcase_03b",
+}
+
+Config.randomBuses = {
+ "airbus",
+ "tourbus",
+ "bus",
+ "rentalbus",
+}
+
+Config.randomVans = {
+ "burrito",
+ "burrito2",
+ "burrito3",
+ "burrito4",
+ "gburrito",
+ "gburrito2",
+ "journey",
+ "minivan",
+ "minivan2",
+ "paradise",
+ "pony",
+ "pony2",
+ "rumpo",
+ "rumpo2",
+ "rumpo3",
+ "speedo",
+ "speedo2",
+ "speedo4",
+ "surfer",
+ "surfer2",
+ "taco",
+ "youga",
+ "youga2",
+}
+
+Config.randomPrisonerPeds = {
+ "u_m_y_prisoner_01",
+ "s_m_y_prismuscl_01",
+ "s_m_y_prisoner_01",
+}
+
+Config.randomWasteDumpObjects = {
+ "prop_rad_waste_barrel_01",
+ "hei_prop_heist_binbag",
+ "prop_ld_rub_binbag_01",
+ "prop_oiltub_04",
+ "prop_oilcan_02a",
+ "prop_drug_bottle",
+ "prop_drug_erlenmeyer",
+}
+
+Config.randomVehicles = { -- use vehicles with type 'automobile' only.
+ "blista",
+ "Issi2",
+ "Sentinel",
+ "FQ2",
+ "baller3",
+ "glendale",
+ "asea",
+ "asterope",
+ "fugitive",
+ "washington",
+ "cognoscenti",
+ "premier",
+ "schafter2",
+ "ingot",
+ "turismor",
+ "t20",
+ "baller",
+ "cavalcade",
+ "granger",
+ "huntley",
+ "landstalker",
+ "radi",
+ "rocoto",
+ "seminole",
+ "xls",
+ "bison",
+ "bobcatxl",
+ "gburrito",
+ "journey",
+ "minivan",
+ "paradise",
+ "rumpo",
+ "surfer",
+ "youga",
+ "asea",
+ "asterope",
+ "cognoscenti",
+ "cognoscenti2",
+ "fugitive",
+ "glendale",
+ "ingot",
+ "intruder",
+ "premier",
+ "primo",
+ "primo2",
+ "regina",
+ "schafter2",
+ "stanier",
+ "stratum",
+ "stretch",
+ "superd",
+ "surge",
+ "tailgater",
+ "warrener",
+ "washington",
+}
+
+Config.randomDrugTrucks = {
+ "pounder",
+ "pounder2",
+}
+
+Config.randomTrucks = {
+ "Benson",
+ "Biff",
+ "Hauler",
+ "Hauler2",
+ "Mule",
+ "Mule2",
+ "Mule3",
+ "Packer",
+ "Pounder",
+ -- "Stockade",
+ -- "Stockade3",
+ "phantom",
+ "phantom2",
+}
+
+Config.randomLuxuryVehicles = {
+ "adder",
+ "bullet",
+ "cheetah",
+ "entityxf",
+ "fmj",
+ "infernus",
+ "italigtb",
+ "italigtb2",
+ "le7b",
+ "osiris",
+ "penetrator",
+ "pfister811",
+ "reaper",
+ "sultanrs",
+ "tempesta",
+ "turismor",
+ "tyrus",
+ "vacca",
+ "vagner",
+ "zentorno",
+}
+
+Config.randomDrugObjects = {
+ "prop_mp_drug_package",
+ "prop_mp_drug_pack_red",
+ "prop_mp_drug_pack_blue",
+ "prop_drug_package_02",
+ "hei_prop_hei_drug_case",
+ "prop_cash_crate_01",
+}
+
+Config.randomCollissionObjects = {
+ "prop_pile_dirt_01",
+ "prop_log_break_01",
+ "prop_rub_cardpile_06",
+ "prop_rub_flotsam_01",
+ "prop_rub_flotsam_02",
+ "prop_rub_flotsam_03",
+ "prop_tree_log_01",
+ "prop_tree_log_02",
+}
+
+Config.randomDebris = {
+ -- "prop_test_rocks02",
+ -- "prop_test_rocks01",
+ -- "prop_test_rocks04",
+ "prop_rub_tyre_dam2",
+ "prop_rub_tyre_dam3",
+ "prop_cs_glass_scrap",
+ "prop_rub_litter_01",
+ "prop_rub_litter_02",
+ "prop_rub_litter_03",
+ "prop_rub_litter_03b",
+ "prop_rub_litter_03c",
+ "prop_rub_litter_04",
+ "prop_rub_litter_04b",
+ "prop_rub_litter_05",
+ "prop_rub_litter_06",
+ "prop_rub_litter_07",
+ "prop_rub_litter_09",
+
+}
+
+Config.randomMoneyObjects = {
+ "bkr_prop_bkr_cash_scatter_01",
+ "bkr_cash_scatter_02",
+ "prop_gold_bar",
+ "bkr_prop_bkr_cashpile_04",
+ "bkr_prop_bkr_cashpile_06",
+ "ex_cash_pile_02",
+ "ex_cash_pile_07",
+ "ex_cash_pile_006",
+ "prop_money_bag_01",
+ "prop_security_case_01",
+ "ex_cash_scatter_01",
+ "prop_cash_case_02",
+}
+
+Config.randomDogs = {
+ "a_c_shepherd",
+ "a_c_rottweiler",
+ "a_c_retriever",
+ "a_c_husky",
+ "a_c_poodle",
+ "a_c_pug",
+ "a_c_westy",
+ "a_c_chop"
+}
+
+
+
+Config.parachuteObjects = {
+ "p_para_broken1_s"
+}
+
+Config.randomMilitaryHelicopters = {
+ "cargobob",
+ "cargobob4",
+}
+
+Config.randomMoneyTransportPeds = {
+ "s_m_m_armoured_01",
+ "s_m_m_armoured_02",
+}
+
+Config.RandomNationalities = {
+ "Afghan",
+ "Albanian",
+ "Algerian",
+ "American",
+ "Andorran",
+ "Angolan",
+ "Antiguans",
+ "Argentinean",
+ "Armenian",
+ "Australian",
+ "Austrian",
+ "Azerbaijani",
+ "Bahamian",
+ "Bahraini",
+ "Bangladeshi",
+ "Barbadian",
+ "Barbudans",
+ "Batswana",
+ "Belarusian",
+ "Belgian",
+ "Belizean",
+ "Beninese",
+ "Bhutanese",
+ "Bolivian",
+ "Bosnian",
+ "Brazilian",
+ "British",
+ "Bruneian",
+ "Bulgarian",
+ "Burkinabe",
+ "Burmese",
+ "Burundian",
+ "Cambodian",
+ "Cameroonian",
+ "Canadian",
+ "Cape Verdean",
+ "Central African",
+ "Chadian",
+ "Chilean",
+ "Chinese",
+ "Colombian",
+ "Comoran",
+ "Congolese",
+ "Costa Rican",
+ "Croatian",
+ "Cuban",
+ "Cypriot",
+ "Czech",
+ "Danish",
+ "Djibouti",
+ "Dominican",
+ "Dutch",
+ "East Timorese",
+ "Ecuadorean",
+ "Egyptian",
+ "Emirian",
+ "Equatorial Guinean",
+ "Eritrean",
+ "Estonian",
+ "Ethiopian",
+ "Fijian",
+ "Filipino",
+ "Finnish",
+ "French",
+ "Gabonese",
+ "Gambian",
+ "Georgian",
+ "German",
+ "Ghanaian",
+ "Greek",
+ "Grenadian",
+ "Guatemalan",
+ "Guinea-Bissauan",
+ "Guinean",
+ "Guyanese",
+ "Haitian",
+ "Herzegovinian",
+ "Honduran",
+ "Hungarian",
+ "I-Kiribati",
+ "Icelander",
+ "Indian",
+ "Indonesian",
+ "Iranian",
+ "Iraqi",
+ "Irish",
+ "Israeli",
+ "Italian",
+ "Ivorian",
+ "Jamaican",
+ "Japanese",
+ "Jordanian",
+ "Kazakhstani",
+ "Kenyan",
+ "Kittian and Nevisian",
+ "Kuwaiti",
+ "Kyrgyz",
+ "Laotian",
+ "Latvian",
+ "Lebanese",
+ "Liberian",
+ "Libyan",
+ "Liechtensteiner",
+ "Lithuanian",
+ "Luxembourger",
+ "Macedonian",
+ "Malagasy",
+ "Malawian",
+ "Malaysian",
+ "Maldivan",
+ "Malian",
+ "Maltese",
+ "Marshallese",
+ "Mauritanian",
+ "Mauritian",
+ "Mexican",
+ "Micronesian",
+ "Moldovan",
+ "Monacan",
+ "Mongolian",
+ "Moroccan",
+ "Mosotho",
+ "Motswana",
+ "Mozambican",
+ "Namibian",
+ "Nauruan",
+ "Nepalese",
+ "New Zealander",
+ "Nicaraguan",
+ "Nigerian",
+ "Nigerien",
+ "North Korean",
+ "Northern Irish",
+ "Norwegian",
+ "Omani",
+ "Pakistani",
+ "Palauan",
+ "Panamanian",
+ "Papua New Guinean",
+ "Paraguayan",
+ "Peruvian",
+ "Polish",
+ "Portuguese",
+ "Qatari",
+ "Romanian",
+ "Russian",
+ "Rwandan",
+ "Saint Lucian",
+ "Salvadoran",
+ "Samoan",
+ "San Marinese",
+ "Sao Tomean",
+ "Saudi",
+ "Scottish",
+ "Senegalese",
+ "Serbian",
+ "Seychellois",
+ "Sierra Leonean",
+ "Singaporean",
+ "Slovakian",
+ "Slovenian",
+ "Solomon Islander",
+ "Somali",
+ "South African",
+ "South Korean",
+ "Spanish",
+ "Sri Lankan",
+ "Sudanese",
+ "Surinamer",
+ "Swazi",
+ "Swedish",
+ "Swiss",
+ "Syrian",
+ "Taiwanese",
+ "Tajik",
+ "Tanzanian",
+ "Thai",
+ "Togolese",
+ "Tongan",
+ "Trinidadian or Tobagonian",
+ "Tunisian",
+ "Turkish",
+ "Tuvaluan",
+ "Ugandan",
+ "Ukrainian",
+ "Uruguayan",
+ "Uzbekistani",
+ "Venezuelan",
+ "Vietnamese",
+ "Welsh",
+ "Yemenite",
+ "Zambian",
+ "Zimbabwean"
+}
diff --git a/resources/night_ers/config/fictivenames-config.lua b/resources/night_ers/config/fictivenames-config.lua
new file mode 100644
index 000000000..e2bdc9140
--- /dev/null
+++ b/resources/night_ers/config/fictivenames-config.lua
@@ -0,0 +1,696 @@
+Config = Config or {}
+
+--===================== First Names Based on Gender =====================--
+
+Config.FirstNames = {
+ -- If you feel names are missing or incorrect, please feel free to remove / add or correct them. This list was generated by AI.
+
+ Male = {
+ -- Asian names
+ "Wei", "Ming", "Hiroshi", "Takashi", "Jin", "Sung", "Raj", "Arjun",
+ -- Middle Eastern names
+ "Ahmed", "Hassan", "Yusuf", "Malik", "Omar", "Karim", "Ibrahim",
+ -- African names
+ "Kwame", "Oluwaseun", "Chibueze", "Kofi", "Mandla", "Tendai",
+ -- Latin American names
+ "Carlos", "Miguel", "Jorge", "Rafael", "Diego", "Luis", "Pablo",
+ -- Nordic names
+ "Erik", "Magnus", "Lars", "Bjorn", "Anders", "Sven",
+ -- Slavic names
+ "Igor", "Vladimir", "Dmitri", "Alexei", "Mikhail", "Boris",
+ -- East Asian names
+ "Jian", "Feng", "Kenji", "Ryu", "Tao", "Hyun", "Jae", "Chen", "Xiang", "Dae-jung",
+ -- South Asian names
+ "Arun", "Vikram", "Krishna", "Rahul", "Sanjay", "Dhruv", "Aditya", "Rohan", "Vivek",
+ -- Persian/Iranian names
+ "Darius", "Cyrus", "Arash", "Babak", "Farhad", "Kaveh", "Rostam", "Shahin",
+ -- Turkish names
+ "Mehmet", "Kemal", "Eren", "Berk", "Deniz", "Kaan", "Yusuf", "Emre",
+ -- African names (expanded)
+ "Chidi", "Babajide", "Folami", "Kenzo", "Jabari", "Zuberi", "Sefu", "Themba", "Nnamdi",
+ -- Pacific Islander names
+ "Kekoa", "Maui", "Tane", "Kalani", "Akoni", "Keanu", "Makoa",
+ -- Native American names
+ "Ahote", "Cheveyo", "Kele", "Nokosi", "Takoda", "Waban",
+ -- Celtic/Gaelic names
+ "Aidan", "Conor", "Declan", "Finn", "Liam", "Rowan", "Seamus",
+ -- English/American names
+ "William", "James", "Benjamin", "Mason", "Ethan", "Alexander", "Henry",
+ "Michael", "Daniel", "Joseph", "David", "Andrew", "Lucas", "Sebastian",
+ "Owen", "Gabriel", "Carter", "Hunter", "Cameron", "Caleb", "Nathan",
+ -- German names
+ "Hans", "Friedrich", "Wilhelm", "Klaus", "Otto", "Heinrich", "Wolfgang",
+ "Dieter", "Günther", "Manfred", "Jürgen", "Rainer", "Bernd", "Horst",
+ "Karl", "Thomas", "Stefan", "Martin", "Andreas", "Peter", "Uwe",
+ -- Dutch names
+ "Hendrik", "Willem", "Cornelis", "Pieter", "Dirk", "Adriaan", "Martijn",
+ "Bas", "Thijs", "Daan", "Luuk", "Sven", "Lars", "Niels", "Ruben",
+ -- Scandinavian names
+ "Gustav", "Axel", "Olaf", "Henrik", "Fredrik", "Johan", "Mikael",
+ "Kristian", "Nils", "Arne", "Bjorn", "Harald", "Magnus", "Sven",
+ -- French names
+ "François", "Philippe", "Henri", "Louis", "Marcel", "René", "André",
+ "Pierre", "Jean-Paul", "Mathieu", "Nicolas", "Thierry", "Bernard",
+ -- Italian names
+ "Enzo", "Dante", "Romano", "Salvatore", "Vittorio", "Leonardo", "Stefano",
+ "Paolo", "Bruno", "Angelo", "Luciano", "Massimo", "Roberto",
+ -- Spanish names
+ "Alejandro", "Fernando", "Ricardo", "Eduardo", "Francisco", "Javier",
+ "Manuel", "Raúl", "Santiago", "Víctor", "Andrés", "Emilio",
+ },
+ Female = {
+ -- Asian names
+ "Mei", "Yuki", "Soo-jin", "Priya", "Lian", "Sakura", "Min-ji",
+ -- Middle Eastern names
+ "Fatima", "Aisha", "Zara", "Leila", "Yasmin", "Amira", "Noor",
+ -- African names
+ "Amara", "Chioma", "Aisha", "Zainab", "Thandi", "Abena",
+ -- Latin American names
+ "Sofia", "Isabella", "Ana", "Carmen", "Lucia", "Valentina",
+ -- Nordic names
+ "Astrid", "Ingrid", "Freya", "Helga", "Linnea", "Britta",
+ -- Slavic names
+ "Natasha", "Olga", "Tatiana", "Svetlana", "Anya", "Katya",
+ -- East Asian names
+ "Hana", "Jing", "Eun-ji", "Xia", "Yuna", "Naomi", "Rin", "Hyeon", "Ji-eun", "Mika",
+ -- South Asian names
+ "Anjali", "Devi", "Indira", "Kiran", "Maya", "Neha", "Riya", "Zara",
+ -- Persian/Iranian names
+ "Parisa", "Roxana", "Shirin", "Yasamin", "Golnar", "Mahsa", "Azar",
+ -- Turkish names
+ "Aylin", "Defne", "Elif", "Melis", "Selin", "Zeynep", "Nil",
+ -- African names (expanded)
+ "Abebi", "Efemena", "Folami", "Makena", "Nala", "Safiya", "Zalika", "Amani",
+ -- Pacific Islander names
+ "Leilani", "Moana", "Kaia", "Alana", "Lani", "Maile", "Nalani",
+ -- Native American names
+ "Aiyana", "Halona", "Kimi", "Nascha", "Talutah", "Winona",
+ -- Celtic/Gaelic names
+ "Ailbhe", "Bronagh", "Caoimhe", "Eimear", "Niamh", "Siobhan",
+ -- English/American names
+ "Emma", "Olivia", "Ava", "Isabella", "Sophia", "Charlotte", "Amelia",
+ "Harper", "Evelyn", "Abigail", "Emily", "Elizabeth", "Mila", "Ella",
+ "Scarlett", "Victoria", "Madison", "Luna", "Grace", "Chloe", "Penelope",
+ -- German names
+ "Helga", "Ursula", "Ingrid", "Gertrud", "Erika", "Monika", "Sabine",
+ "Claudia", "Angela", "Petra", "Susanne", "Birgit", "Heike", "Gabriele",
+ "Christina", "Julia", "Sarah", "Laura", "Katharina", "Anna", "Lisa",
+ -- Dutch names
+ "Johanna", "Maria", "Anna", "Elisabeth", "Sophie", "Emma", "Julia",
+ "Anouk", "Fleur", "Iris", "Lotte", "Sanne", "Eva", "Lisa", "Nina",
+ -- Scandinavian names
+ "Astrid", "Ingrid", "Sigrid", "Hedda", "Linnea", "Britta", "Karin",
+ "Kristina", "Maja", "Ebba", "Freja", "Saga", "Selma", "Alma",
+ -- French names
+ "Marguerite", "Simone", "Jeanne", "Marie", "Catherine", "Isabelle",
+ "Céline", "Sylvie", "Christine", "Dominique", "Monique", "Jacqueline",
+ -- Italian names
+ "Giovanna", "Valentina", "Chiara", "Sofia", "Beatrice", "Alessandra",
+ "Claudia", "Martina", "Gabriella", "Patrizia", "Silvia", "Rosa",
+ -- Spanish names
+ "María", "Isabel", "Carmen", "Dolores", "Teresa", "Patricia", "Ana",
+ "Cristina", "Laura", "Marina", "Pilar", "Rosa", "Mercedes",
+ },
+ Other = {
+ -- International gender-neutral names
+ "Alex", "Jordan", "Sam", "Taylor", "Morgan", "Quinn",
+ -- Cultural gender-neutral names
+ "Aki", "Yuki", "Sasha", "Jin", "Kai", "Rin",
+ -- Modern gender-neutral names
+ "River", "Sky", "Phoenix", "Winter", "Sage", "Rain",
+ -- Contemporary gender-neutral names
+ "Avery", "Blair", "Charlie", "Drew", "Eden", "Frankie", "Gray", "Harper",
+ -- Nature-inspired names
+ "Aspen", "Brook", "Dawn", "Forest", "Lake", "Storm", "Vale",
+ -- Abstract concept names
+ "Justice", "Love", "Peace", "Truth", "Unity", "Wisdom",
+ -- Celestial names
+ "Nova", "Orion", "Star", "Moon", "Solstice", "Aurora",
+ -- Color names
+ "Blue", "Gray", "Indigo", "Ruby", "Silver",
+ -- Season/Weather names
+ "August", "March", "Summer", "Winter", "Storm", "Sunny",
+ -- Place names
+ "Brooklyn", "London", "Paris", "Sydney", "Rio",
+ -- Modern European/American gender-neutral names
+ "Riley", "Casey", "Jamie", "Jackie", "Ashley", "Leslie", "Morgan",
+ "Skylar", "Sage", "Parker", "Kennedy", "Reese", "Emerson", "Finley",
+ "Lennon", "Remy", "Marlowe", "Blake", "Rowan", "Devon", "Aubrey",
+ -- Professional/Title-based names
+ "Doctor", "Professor", "Judge", "Scout", "Royal", "Angel", "Sailor",
+ -- Art/Music inspired
+ "Harmony", "Melody", "Jazz", "Symphony", "Echo", "Lyric", "Song",
+ -- Modern Compound names
+ "Skylight", "Raindance", "Moonbeam", "Starling", "Sundown", "Nightsky",
+ }
+}
+
+Config.LastNames = {
+ -- Last names are gender-neutral
+ "Wang", "Li", "Zhang", "Liu", "Chen", "Yang", "Huang", "Zhao",
+ "Al-Sayed", "Khan", "Rahman", "Hussein", "Abdullah", "Mahmoud", "Nasser",
+ "Okafor", "Adebayo", "Mensah", "Okonjo", "Ndlovu", "Mutwa",
+ "Garcia", "Rodriguez", "Martinez", "Lopez", "Gonzalez", "Perez", "Sanchez",
+ "Andersson", "Johansson", "Karlsson", "Nilsson", "Eriksson", "Larsson",
+ "Ivanov", "Petrov", "Smirnov", "Kuznetsov", "Popov", "Sokolov",
+ "Kim", "Lee", "Park", "Choi", "Tanaka", "Sato", "Wu", "Zhou", "Sun",
+ "Patel", "Singh", "Kumar", "Shah", "Sharma", "Verma", "Reddy", "Kapoor",
+ "Hosseini", "Ahmadi", "Mohammadi", "Karimi", "Hashemi", "Jafari",
+ "Yilmaz", "Kaya", "Demir", "Sahin", "Celik", "Yildiz", "Ozturk",
+ "Afolayan", "Olawale", "Mwangi", "Osei", "Diallo", "Mokoena",
+ "Tupou", "Vaka", "Patel", "Williams", "Roberts", "Smith",
+ "Blackhawk", "Redhorse", "Whitecloud", "Thunderhawk", "Eagleheart",
+ "O'Connor", "Murphy", "Kelly", "O'Brien", "Ryan", "O'Neill", "Walsh",
+ "Smith", "Johnson", "Williams", "Brown", "Jones", "Miller", "Davis",
+ "Wilson", "Anderson", "Taylor", "Thomas", "Moore", "Martin", "Jackson",
+ "Thompson", "White", "Harris", "Clark", "Lewis", "Robinson", "Walker",
+ "Schmidt", "Mueller", "Meyer", "Weber", "Wagner", "Becker", "Hoffmann",
+ "Schulz", "Koch", "Richter", "Wolf", "Bauer", "Kaiser", "Fischer",
+ "Schroeder", "Neumann", "Schwarz", "Zimmermann", "Braun", "Krueger",
+ "de Jong", "Jansen", "de Vries", "van den Berg", "van Dijk", "Bakker",
+ "Visser", "Smit", "Meijer", "de Boer", "Mulder", "de Groot", "Bos",
+ "Nielsen", "Jensen", "Hansen", "Pedersen", "Andersen", "Christensen",
+ "Larsen", "Sorensen", "Rasmussen", "Jorgensen", "Lindberg", "Holm",
+ "Martin", "Bernard", "Dubois", "Thomas", "Robert", "Richard", "Petit",
+ "Durand", "Leroy", "Moreau", "Simon", "Laurent", "Lefebvre", "Michel",
+ "Rossi", "Ferrari", "Russo", "Bianchi", "Romano", "Colombo", "Ricci",
+ "Marino", "Greco", "Bruno", "Gallo", "Conti", "Costa", "Giordano",
+ "Garcia", "Rodriguez", "Gonzalez", "Fernandez", "Lopez", "Martinez",
+ "Sanchez", "Perez", "Martin", "Gomez", "Ruiz", "Hernandez", "Jimenez",
+}
+
+Config.Common_first_names = {
+ "Alexandre",
+ "Alessandro",
+ "Andrea",
+ "Antonio",
+ "Luca",
+ "Marco",
+ "Matteo",
+ "Fabio",
+ "Giuseppe",
+ "Dario",
+ "Lorenzo",
+ "Mario",
+ "Massimo",
+ "Nicolò",
+ "Pietro",
+ "Riccardo",
+ "Simone",
+ "Stefano",
+ "Filippo",
+ "Gabriele",
+ "Giovanni",
+ "Francesco",
+ "Raffaele",
+ "Alessia",
+ "Anna",
+ "Chiara",
+ "Cristina",
+ "Elisa",
+ "Francesca",
+ "Giulia",
+ "Laura",
+ "Ludovica",
+ "Marta",
+ "Martina",
+ "Sara",
+ "Valentina",
+ "Veronica",
+ "Alice",
+ "Bianca",
+ "Camilla",
+ "Carla",
+ "Elena",
+ "Federica",
+ "Isabella",
+ "Letizia",
+ "Lucia",
+ "Maria",
+ "Marta",
+ "Marta",
+ "Miriam",
+ "Silvia",
+ "Sophia",
+ "Vittoria",
+ "Claude",
+ "Denis",
+ "Émile",
+ "Antoine",
+ "Benoît",
+ "Cédric",
+ "Christophe",
+ "Damien",
+ "Didier",
+ "Éric",
+ "Fabien",
+ "Gilles",
+ "Hugo",
+ "Jacques",
+ "Jean",
+ "Laurent",
+ "Luc",
+ "Marc",
+ "Mathieu",
+ "Nicolas",
+ "Olivier",
+ "Pascal",
+ "Philippe",
+ "Pierre",
+ "Rémi",
+ "Romain",
+ "Sébastien",
+ "Thierry",
+ "Vincent",
+ "Amandine",
+ "Amélie",
+ "Anaïs",
+ "Aurélie",
+ "Caroline",
+ "Chloé",
+ "Christelle",
+ "Claire",
+ "Delphine",
+ "Élodie",
+ "Emilie",
+ "Eva",
+ "Inès",
+ "Julie",
+ "Justine",
+ "Léa",
+ "Lisa",
+ "Manon",
+ "Marie",
+ "Mélanie",
+ "Nathalie",
+ "Pauline",
+ "Sandra",
+ "Sophie",
+ "Valérie",
+ "Yvette",
+ "Adams",
+ "Albert",
+ "Beck",
+ "Berger",
+ "Bernard",
+ "Blanc",
+ "Boucher",
+ "Caron",
+ "Chevalier",
+ "Clement",
+ "Deschamps",
+ "Dubois",
+ "Durand",
+ "Dupont",
+ "Fournier",
+ "Gauthier",
+ "Girard",
+ "Lambert",
+ "Lefebvre",
+ "Lefevre",
+ "Lemaitre",
+ "Leroy",
+ "Martin",
+ "Moreau",
+ "Morin",
+ "Moulin",
+ "Noel",
+ "Perrin",
+ "Petit",
+ "Renard",
+ "Rey",
+ "Renaud",
+ "Robert",
+ "Rousseau",
+ "Roy",
+ "Simon",
+ "Thomas",
+ "Vidal",
+ "Vincent",
+ "Aubert",
+ "Barbier",
+ "Baron",
+ "Blanchard",
+ "Boulanger",
+ "Bourgeois",
+ "Brun",
+ "Brunet",
+ "Chapuis",
+ "Clement",
+ "Clerc",
+ "Colin",
+ "David",
+ "Dufour",
+ "Dumas",
+ "Faure",
+ "Fontaine",
+ "Gillet",
+ "Guillaume",
+ "Henry",
+ "Joly",
+ "Lacroix",
+ "Leclerc",
+ "Legrand",
+ "Lemoine",
+ "Mercier",
+ "Michel",
+ "Monnier",
+ "Morel",
+ "Perrot",
+ "Roussel",
+ "Tessier",
+ "Vasseur",
+ "Blaise",
+ "Bonnet",
+ "Carré",
+ "Charpentier",
+ "Collin",
+ "Cousin",
+ "Da Silva",
+ "Delattre",
+ "Delgado",
+ "Denis",
+ "Diaz",
+ "Dijoux",
+ "Dumont",
+ "Duran",
+ "Durand",
+ "Duval",
+ "Fabre",
+ "Fernandez",
+ "Ferreira",
+ "Gimenez",
+ "Gomez",
+ "Guérin",
+ "Lafont",
+ "Lecomte",
+ "Leroux",
+ "Leroy",
+ "Lopez",
+ "Mallet",
+ "Marin",
+ "Maurice",
+ "Mercier",
+ "Meyer",
+ "Millot",
+ "Monnier",
+ "Moreau",
+ "Moulin",
+ "Nogueira",
+ "Pereira",
+ "Perrin",
+ "Pierre",
+ "Rey",
+ "Reynaud",
+ "Ribeiro",
+ "Ricard",
+ "Riou",
+ "Robin",
+ "Roux",
+ "Santos",
+ "Tavares",
+ "Valette",
+ "Vial",
+ "Vidal",
+ "Villeneuve"
+}
+
+Config.Common_last_names = {
+ "Smith",
+ "Johnson",
+ "Williams",
+ "Brown",
+ "Jones",
+ "Garcia",
+ "Miller",
+ "Davis",
+ "Rodriguez",
+ "Martinez",
+ "Hernandez",
+ "Lopez",
+ "Gonzalez",
+ "Wilson",
+ "Anderson",
+ "Thomas",
+ "Taylor",
+ "Moore",
+ "Jackson",
+ "Martin",
+ "Lee",
+ "Perez",
+ "Thompson",
+ "White",
+ "Harris",
+ "Sanchez",
+ "Clark",
+ "Ramirez",
+ "Lewis",
+ "Robinson",
+ "Walker",
+ "Young",
+ "Hall",
+ "Allen",
+ "Torres",
+ "Nguyen",
+ "Wright",
+ "Flores",
+ "King",
+ "Scott",
+ "Rivera",
+ "Green",
+ "Hill",
+ "Adams",
+ "Baker",
+ "Nelson",
+ "Carter",
+ "Mitchell",
+ "Perez",
+ "Roberts",
+ "Turner",
+ "Phillips",
+ "Campbell",
+ "Parker",
+ "Evans",
+ "Edwards",
+ "Collins",
+ "Stewart",
+ "Sanchez",
+ "Morris",
+ "Rogers",
+ "Reed",
+ "Cook",
+ "Morgan",
+ "Bell",
+ "Murphy",
+ "Bailey",
+ "Rivera",
+ "Cooper",
+ "Richardson",
+ "Cox",
+ "Howard",
+ "Ward",
+ "Torres",
+ "Peterson",
+ "Gray",
+ "Ramirez",
+ "James",
+ "Watson",
+ "Brooks",
+ "Kelly",
+ "Sanders",
+ "Price",
+ "Bennett",
+ "Wood",
+ "Barnes",
+ "Aubert",
+ "Barbier",
+ "Baron",
+ "Blanchard",
+ "Boulanger",
+ "Bourgeois",
+ "Brun",
+ "Brunet",
+ "Chapuis",
+ "Clement",
+ "Clerc",
+ "Colin",
+ "David",
+ "Dufour",
+ "Dumas",
+ "Faure",
+ "Fontaine",
+ "Gillet",
+ "Guillaume",
+ "Henry",
+ "Joly",
+ "Lacroix",
+ "Leclerc",
+ "Legrand",
+ "Lemoine",
+ "Mercier",
+ "Michel",
+ "Monnier",
+ "Morel",
+ "Perrot",
+ "Roussel",
+ "Tessier",
+ "Vasseur",
+ "Blaise",
+ "Bonnet",
+ "Carré",
+ "Charpentier",
+ "Collin",
+ "Cousin",
+ "Da Silva",
+ "Delattre",
+ "Delgado",
+ "Denis",
+ "Diaz",
+ "Dijoux",
+ "Dumont",
+ "Duran",
+ "Durand",
+ "Duval",
+ "Fabre",
+ "Fernandez",
+ "Ferreira",
+ "Gimenez",
+ "Gomez",
+ "Guérin",
+ "Lafont",
+ "Lecomte",
+ "Leroux",
+ "Leroy",
+ "Lopez",
+ "Mallet",
+ "Marin",
+ "Maurice",
+ "Mercier",
+ "Meyer",
+ "Millot",
+ "Monnier",
+ "Moreau",
+ "Moulin",
+ "Nogueira",
+ "Pereira",
+ "Perrin",
+ "Pierre",
+ "Rey",
+ "Reynaud",
+ "Ribeiro",
+ "Ricard",
+ "Riou",
+ "Robin",
+ "Roux",
+ "Santos",
+ "Tavares",
+ "Valette",
+ "Vial",
+ "Vidal",
+ "Villeneuve"
+}
+
+Config.RandomHomeAddressList = {
+ "123 Elm Street, Los Santos",
+ "456 Oak Avenue, Los Santos",
+ "789 Maple Drive, Los Santos",
+ "101 Pine Lane, Los Santos",
+ "202 Cedar Road, Los Santos",
+ "303 Birch Boulevard, Los Santos",
+ "404 Willow Way, Los Santos",
+ "505 Aspen Circle, Los Santos",
+ "606 Cherry Hill, Los Santos",
+ "707 Walnut Street, Los Santos",
+ "808 Magnolia Place, Los Santos",
+ "909 Spruce Road, Los Santos",
+ "1110 Dogwood Drive, Los Santos",
+ "1211 Holly Lane, Los Santos",
+ "1312 Redwood Avenue, Los Santos",
+ "1413 Sequoia Boulevard, Los Santos",
+ "1514 Chestnut Street, Los Santos",
+ "1615 Sycamore Way, Los Santos",
+ "1716 Ironwood Road, Los Santos",
+ "1817 Maple Leaf Drive, Los Santos",
+ "1918 Evergreen Street, Los Santos",
+ "2020 Palmetto Place, Los Santos",
+ "2121 Pinecone Road, Los Santos",
+ "2222 Oakwood Lane, Los Santos",
+ "2323 Elmwood Avenue, Los Santos",
+ "2424 Willowbrook Circle, Los Santos",
+ "2525 Birchwood Drive, Los Santos",
+ "2626 Cedarglen Road, Los Santos",
+ "2727 Cherrywood Lane, Los Santos",
+ "2828 Magnolia Hill, Los Santos",
+ "2929 Redwood Circle, Los Santos",
+ "3030 Dogwood Street, Los Santos",
+ "3131 Chestnut Grove, Los Santos",
+ "3232 Ironwood Avenue, Los Santos",
+ "3333 Sycamore Hill, Los Santos",
+ "3434 Sequoia Street, Los Santos",
+ "3535 Maplewood Road, Los Santos",
+ "3636 Oak Ridge Drive, Los Santos",
+ "3737 Pine Ridge Lane, Los Santos",
+ "3838 Spruce Valley, Los Santos",
+ "3939 Holly Grove, Los Santos",
+ "4040 Cedar Ridge Place, Los Santos",
+ "4141 Willow Springs Avenue, Los Santos",
+ "4242 Aspen Heights, Los Santos",
+ "4343 Cherry Blossom Street, Los Santos",
+ "4444 Magnolia Grove, Los Santos",
+ "4545 Walnut Ridge Drive, Los Santos",
+ "4646 Pine Hill Circle, Los Santos",
+ "4747 Maple Valley Road, Los Santos",
+ "4848 Elm Street North, Los Santos",
+ "4949 Oak Street South, Los Santos",
+ "5050 Birch Avenue East, Los Santos",
+ "5151 Cedar Avenue West, Los Santos",
+ "5252 Cherry Hill North, Los Santos",
+ "5353 Willow Lane South, Los Santos",
+ "5454 Magnolia Avenue East, Los Santos",
+ "5555 Redwood Street West, Los Santos",
+ "5656 Dogwood Hill Drive, Los Santos",
+ "5757 Chestnut Avenue North, Los Santos",
+ "5858 Ironwood Grove West, Los Santos",
+ "5959 Sycamore Heights South, Los Santos",
+ "6060 Sequoia Hill North, Los Santos",
+ "6161 Maplewood Avenue West, Los Santos",
+ "6262 Oak Ridge Road South, Los Santos",
+ "6363 Pine Valley Circle North, Los Santos",
+ "6464 Spruce Grove East, Los Santos",
+ "6565 Holly Street South, Los Santos",
+ "6666 Cedar Lane North, Los Santos",
+ "6767 Willowbrook Road West, Los Santos",
+ "6868 Aspen Ridge East, Los Santos",
+ "6969 Cherrywood Heights South, Los Santos",
+ "7070 Magnolia Ridge North, Los Santos",
+ "7171 Walnut Grove West, Los Santos",
+ "7272 Pinecone Hill Drive South, Los Santos",
+ "7373 Elmwood Grove East, Los Santos",
+ "7474 Birchwood Avenue North, Los Santos",
+ "7575 Cedar Springs Road South, Los Santos",
+ "7676 Cherry Valley Circle East, Los Santos",
+ "7777 Magnolia Heights North, Los Santos",
+ "7878 Redwood Ridge Road South, Los Santos",
+ "7979 Dogwood Street East, Los Santos",
+ "8080 Chestnut Hill Drive North, Los Santos",
+ "8181 Ironwood Avenue South, Los Santos",
+ "8282 Sycamore Springs Road West, Los Santos",
+ "8383 Sequoia Valley Circle East, Los Santos",
+ "8484 Maplewood Heights North, Los Santos",
+ "8585 Oak Ridge Avenue South, Los Santos",
+ "8686 Pine Valley Road West, Los Santos",
+ "8787 Spruce Ridge Drive North, Los Santos",
+ "8888 Holly Grove Avenue South, Los Santos",
+ "8989 Cedar Hill Circle East, Los Santos",
+ "9090 Willow Springs Road North, Los Santos",
+ "9191 Aspen Valley Drive South, Los Santos",
+ "9292 Cherry Hill Avenue East, Los Santos",
+ "9393 Magnolia Springs Road North, Los Santos",
+ "9494 Walnut Springs Circle South, Los Santos",
+ "9595 Pinecone Heights East, Los Santos",
+ "9696 Elm Grove Road North, Los Santos",
+ "9797 Birch Ridge Circle South, Los Santos",
+ "9898 Cedar Valley Avenue East, Los Santos",
+ "9999 Cherry Springs Road North, Los Santos",
+}
+
diff --git a/resources/night_ers/config/gear-config.lua b/resources/night_ers/config/gear-config.lua
new file mode 100644
index 000000000..9aa483f32
--- /dev/null
+++ b/resources/night_ers/config/gear-config.lua
@@ -0,0 +1,787 @@
+Config = Config or {}
+
+Config.GearData = {
+
+ -- Enable or disable the option to obtain gear via ERS.
+ Enabled = true,
+ EnableGiveWeapons = true, -- Enable or disable giving weapons to the player.
+ EnableSetClothing = true, -- Enable or disable setting clothes to the player. Setting both to false will result into the NPC being useless, maybe good for decoration :)
+ ForceMPPedWhenPlayerIsNotAnMPPed = true, -- Set the player to a default MP-Ped when they are not an MP-Ped.
+ UseMarkers = false, -- Set to true to use markers instead of peds, in case you have an anti cheat or want to use markers.
+ MarkerData = {
+ MarkerId = 21 --[[ integer ]],
+ dirX = 0 --[[ number ]],
+ dirY = 0 --[[ number ]],
+ dirZ = 0 --[[ number ]],
+ rotX = 0 --[[ number ]],
+ rotY = 0 --[[ number ]],
+ rotZ = 0 --[[ number ]],
+ scaleX = 0.5 --[[ number ]],
+ scaleY = 0.5 --[[ number ]],
+ scaleZ = 0.5 --[[ number ]],
+ red = 255 --[[ integer ]],
+ green = 165 --[[ integer ]],
+ blue = 0 --[[ integer ]],
+ alpha = 100 --[[ integer ]],
+ bobUpAndDown = true --[[ boolean ]],
+ faceCamera = true --[[ boolean ]],
+ p19 = 0 --[[ integer ]],
+ rotate = false --[[ boolean ]],
+ textureDict = 0 --[[ string ]],
+ textureName = 0 --[[ string ]],
+ drawOnEnts = 0 --[[ boolean ]]
+ },
+
+ -- Gear Permissions
+ -- These are used when the player selects a loadout for a service. In the loadout section you can define the role or group that can use the loadout.
+ Enable_Gear_Permissions = false, -- If set to false, everyone can use any loadout as long as they have the correct service type (e.g. 'police'). Otherwise enable permission types below and configure the PermissionRoles for each uniform/loadout.
+ Enable_Night_DiscordApi_Permissions = false, -- server/s_functions.lua
+ Enable_Ace_Permissions = false, -- server/s_functions.lua
+ Enable_ESX_Permissions = {
+ Check_By_Job = false, -- server/s_functions.lua
+ Check_By_Permissions = false, -- server/s_functions.lua
+ },
+ Enable_QBCore_Permissions = {
+ Check_By_Job = false, -- server/s_functions.lua
+ Check_By_Permissions = false, -- server/s_functions.lua
+ },
+
+ -- Locations to fetch gear for all types of services
+ Locations = {
+ [1] = {
+ Name = "Police Gear & Loadout", -- Give it any name for reference (blip)
+ ServiceType = "police", -- Options: police | ambulance | fire | tow.
+ CoordinatesWithHeading = vector4(454.1983, -980.0516, 30.8896, 89.5176), -- Vector 4 means: x,y,z,heading
+ BlipData = {
+ Enabled = true, -- Set to false to disable blip for this gear ped.
+ Sprite = 205,
+ Display = 2,
+ ShortRange = true,
+ Colour = 38,
+ Scale = 0.75,
+ Alpha = 200,
+ },
+ NPCPedData = { -- It will select one of these (multiple, optional) settings for the NPC ped model offering the gear to the player.
+ [1] = {
+ modelName = "s_m_y_cop_01", -- This is not an MP ped model
+ props = {}, -- No props needed for non-mp peds.
+ components = {}, -- No components needed for non-mp peds.
+ },
+ -- [2] = {
+ -- -- Use vMenu to fetch these numbers via Player Appearance. If model is not an MP ped it will not apply any props or components.
+ -- modelName = "mp_m_freemode_01", -- This is an MP ped model
+ -- props = {
+ -- -- Example: {prop type (Helmet), prop type index (Motorcycle helmet), prop colour index (Black colour)}
+ -- { 0, 9, 1 }, -- Hats / Helments
+ -- { 1, 0, 0 }, -- Glassess
+ -- { 2, 0, 0 }, -- Misc
+ -- { 3, 0, 0 },
+ -- },
+ -- components = {
+ -- -- Example: {component type (Mask), component type index (Clown Mask), component colour index (White colour)}
+ -- { 1, 122, 1 }, -- Mask
+ -- { 2, 1, 1 }, -- Hair
+ -- { 3, 201, 1 }, -- Upper body
+ -- { 4, 18, 1 }, -- Legs / Pants
+ -- { 5, 1, 1 }, -- Bags / Parachutes
+ -- { 6, 26, 1 }, -- Shoes
+ -- { 7, 4, 1 }, -- Neck / Scarfs
+ -- { 8, 16, 1 }, -- Shirt / Accessory
+ -- { 9, 2, 1 }, -- Body Armor
+ -- { 10, 2, 1 }, -- Badges / Logos
+ -- { 11, 26, 1 }, -- Jackets
+ -- },
+ -- },
+ },
+ ClothingData = { -- THIS IS NOT A CHARACTER EDITOR, IT JUST SETS CLOTHING TO FOUND PLAYER PED MODELS. (Basically a uniform & loadout selector.)
+ [1] = {
+ Name = "Police Default (Male)",
+ Description = "Male police officer.",
+ modelName = "s_m_y_cop_01", -- This is not an MP ped model
+ props = {}, -- No props needed for non-mp peds.
+ components = {}, -- No components needed for non-mp peds.
+ -- BASE GAME WEAPON DATA (https://vespura.com/fivem/weapons/stats/)
+ WeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoCount = 1, componentList = {}},
+ [2] = {weaponName = "weapon_stungun", ammoCount = 1, componentList = {}},
+ [3] = {weaponName = "weapon_nightstick", ammoCount = 1, componentList = {}},
+ [4] = {weaponName = "weapon_pistol", ammoCount = 45, componentList = {"COMPONENT_PISTOL_CLIP_02", "COMPONENT_AT_PI_FLSH"}},
+ },
+ -- QBCore WEAPON DATA https://github.com/qbcore-framework/qb-core/blob/main/shared/items.lua
+ QBCoreWeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoType = nil, ammoCount = nil, componentList = {}},
+ [2] = {weaponName = "weapon_stungun", ammoType = nil, ammoCount = nil, componentList = {}},
+ [3] = {weaponName = "weapon_nightstick", ammoType = nil, ammoCount = nil, componentList = {}},
+ [4] = {weaponName = "weapon_pistol", ammoType = "pistol_ammo", ammoCount = 45, componentList = {"flashlight_attachment", "clip_attachment"}},
+ },
+ -- ESX WEAPON DATA (https://github.com/esx-framework/esx_core/blob/main/%5Bcore%5D/es_extended/shared/config/weapons.lua)
+ ESXWeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoCount = 1, componentList = {}},
+ [2] = {weaponName = "weapon_stungun", ammoCount = 1, componentList = {}},
+ [3] = {weaponName = "weapon_nightstick", ammoCount = 1, componentList = {}},
+ [4] = {weaponName = "weapon_pistol", ammoCount = 45, componentList = {"clip_extended", "flashlight"}},
+ },
+ HealthData = {
+ Enabled = true,
+ Health = 200, -- 101 to 200 (Female peds have max. 150 health)
+ Armor = 200
+ },
+ PermissionRolesOrGroups = {
+ "Essex_Police_Force",
+ "police",
+ }
+ },
+ [2] = {
+ Name = "Police Default (Female)",
+ Description = "Female police officer.",
+ modelName = "s_f_y_cop_01", -- This is not an MP ped model
+ props = {}, -- No props needed for non-mp peds.
+ components = {}, -- No components needed for non-mp peds.
+ -- BASE GAME WEAPON DATA (https://vespura.com/fivem/weapons/stats/)
+ WeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoCount = 1, componentList = {}},
+ [2] = {weaponName = "weapon_stungun", ammoCount = 1, componentList = {}},
+ [3] = {weaponName = "weapon_nightstick", ammoCount = 1, componentList = {}},
+ [4] = {weaponName = "weapon_pistol", ammoCount = 45, componentList = {"COMPONENT_PISTOL_CLIP_02", "COMPONENT_AT_PI_FLSH"}},
+ },
+ -- QBCore WEAPON DATA https://github.com/qbcore-framework/qb-core/blob/main/shared/items.lua
+ QBCoreWeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoType = nil, ammoCount = nil, componentList = {}},
+ [2] = {weaponName = "weapon_stungun", ammoType = nil, ammoCount = nil, componentList = {}},
+ [3] = {weaponName = "weapon_nightstick", ammoType = nil, ammoCount = nil, componentList = {}},
+ [4] = {weaponName = "weapon_pistol", ammoType = "pistol_ammo", ammoCount = 45, componentList = {"flashlight_attachment", "clip_attachment"}},
+ },
+ -- ESX WEAPON DATA (https://github.com/esx-framework/esx_core/blob/main/%5Bcore%5D/es_extended/shared/config/weapons.lua)
+ ESXWeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoCount = 1, componentList = {}},
+ [2] = {weaponName = "weapon_stungun", ammoCount = 1, componentList = {}},
+ [3] = {weaponName = "weapon_nightstick", ammoCount = 1, componentList = {}},
+ [4] = {weaponName = "weapon_pistol", ammoCount = 45, componentList = {"clip_extended", "flashlight"}},
+ },
+ HealthData = {
+ Enabled = true,
+ Health = 200, -- 101 to 200 (Female peds have max. 150 health)
+ Armor = 200
+ },
+ PermissionRolesOrGroups = {
+ "Essex_Police_Force",
+ "police",
+ }
+ },
+ [3] = {
+ -- Use vMenu to fetch these numbers via Player Appearance. If model is not an MP ped it will not apply any props or components.
+ Name = "Police MP Ped (Male)",
+ Description = "Male police officer.",
+ modelName = "mp_m_freemode_01",
+ props = {
+ -- Example: {prop type (Helmet), prop type index (Motorcycle helmet), prop colour index (Black colour)}
+ { 0, 9, 1 }, -- Hats / Helments
+ { 1, 0, 0 }, -- Glassess
+ { 2, 0, 0 }, -- Misc
+ { 3, 0, 0 },
+ },
+ components = {
+ -- Example: {component type (Mask), component type index (Clown Mask), component colour index (White colour)}
+ { 1, 122, 1 }, -- Mask
+ { 2, 1, 1 }, -- Hair
+ { 3, 201, 1 }, -- Upper body
+ { 4, 18, 1 }, -- Legs / Pants
+ { 5, 1, 1 }, -- Bags / Parachutes
+ { 6, 26, 1 }, -- Shoes
+ { 7, 4, 1 }, -- Neck / Scarfs
+ { 8, 16, 1 }, -- Shirt / Accessory
+ { 9, 2, 1 }, -- Body Armor
+ { 10, 2, 1 }, -- Badges / Logos
+ { 11, 26, 1 }, -- Jackets
+ },
+ -- BASE GAME WEAPON DATA (https://vespura.com/fivem/weapons/stats/)
+ WeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoCount = 1, componentList = {}},
+ [2] = {weaponName = "weapon_stungun", ammoCount = 1, componentList = {}},
+ [3] = {weaponName = "weapon_nightstick", ammoCount = 1, componentList = {}},
+ [4] = {weaponName = "weapon_pistol", ammoCount = 45, componentList = {"COMPONENT_PISTOL_CLIP_02", "COMPONENT_AT_PI_FLSH"}},
+ },
+ -- QBCore WEAPON DATA https://github.com/qbcore-framework/qb-core/blob/main/shared/items.lua
+ QBCoreWeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoType = nil, ammoCount = nil, componentList = {}},
+ [2] = {weaponName = "weapon_stungun", ammoType = nil, ammoCount = nil, componentList = {}},
+ [3] = {weaponName = "weapon_nightstick", ammoType = nil, ammoCount = nil, componentList = {}},
+ [4] = {weaponName = "weapon_pistol", ammoType = "pistol_ammo", ammoCount = 45, componentList = {"flashlight_attachment", "clip_attachment"}},
+ },
+ -- ESX WEAPON DATA (https://github.com/esx-framework/esx_core/blob/main/%5Bcore%5D/es_extended/shared/config/weapons.lua)
+ ESXWeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoCount = 1, componentList = {}},
+ [2] = {weaponName = "weapon_stungun", ammoCount = 1, componentList = {}},
+ [3] = {weaponName = "weapon_nightstick", ammoCount = 1, componentList = {}},
+ [4] = {weaponName = "weapon_pistol", ammoCount = 45, componentList = {"clip_extended", "flashlight"}},
+ },
+ HealthData = {
+ Enabled = true,
+ Health = 200, -- 101 to 200 (Female peds have max. 150 health)
+ Armor = 200
+ },
+ PermissionRolesOrGroups = {
+ "Essex_Police_Force",
+ "police",
+ }
+ },
+ [4] = {
+ Name = "Police MP Ped (Female)",
+ Description = "Female police officer.",
+ modelName = "mp_f_freemode_01",
+ props = {
+ { 0, 9, 1 }, -- Hats / Helments
+ { 1, 0, 0 }, -- Glassess
+ { 2, 0, 0 }, -- Misc
+ { 3, 0, 0 },
+ },
+ components = {
+ { 1, 122, 1 }, -- Mask
+ { 2, 1, 1 }, -- Hair
+ { 3, 201, 1 }, -- Upper body
+ { 4, 18, 1 }, -- Legs / Pants
+ { 5, 1, 1 }, -- Bags / Parachutes
+ { 6, 26, 1 }, -- Shoes
+ { 7, 3, 1 }, -- Neck / Scarfs
+ { 8, 18, 1 }, -- Shirt / Accessory
+ { 9, 5, 1 }, -- Body Armor
+ { 10, 2, 1 }, -- Badges / Logos
+ { 11, 26, 1 }, -- Jackets
+ },
+ -- BASE GAME WEAPON DATA (https://vespura.com/fivem/weapons/stats/)
+ WeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoCount = 1, componentList = {}},
+ [2] = {weaponName = "weapon_stungun", ammoCount = 1, componentList = {}},
+ [3] = {weaponName = "weapon_nightstick", ammoCount = 1, componentList = {}},
+ [4] = {weaponName = "weapon_pistol", ammoCount = 45, componentList = {"COMPONENT_PISTOL_CLIP_02", "COMPONENT_AT_PI_FLSH"}},
+ },
+ -- QBCore WEAPON DATA https://github.com/qbcore-framework/qb-core/blob/main/shared/items.lua
+ QBCoreWeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoType = nil, ammoCount = nil, componentList = {}},
+ [2] = {weaponName = "weapon_stungun", ammoType = nil, ammoCount = nil, componentList = {}},
+ [3] = {weaponName = "weapon_nightstick", ammoType = nil, ammoCount = nil, componentList = {}},
+ [4] = {weaponName = "weapon_pistol", ammoType = "pistol_ammo", ammoCount = 45, componentList = {"flashlight_attachment", "clip_attachment"}},
+ },
+ -- ESX WEAPON DATA (https://github.com/esx-framework/esx_core/blob/main/%5Bcore%5D/es_extended/shared/config/weapons.lua)
+ ESXWeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoCount = 1, componentList = {}},
+ [2] = {weaponName = "weapon_stungun", ammoCount = 1, componentList = {}},
+ [3] = {weaponName = "weapon_nightstick", ammoCount = 1, componentList = {}},
+ [4] = {weaponName = "weapon_pistol", ammoCount = 45, componentList = {"clip_extended", "flashlight"}},
+ },
+ HealthData = {
+ Enabled = true,
+ Health = 200, -- 101 to 200 (Female peds have max. 150 health)
+ Armor = 200
+ },
+ PermissionRolesOrGroups = {
+ "Essex_Police_Force",
+ "police",
+ }
+ },
+ [5] = {
+ Name = "SWAT Operator",
+ Description = "SWAT Operator",
+ modelName = "s_m_y_swat_01",
+ props = {},
+ components = {},
+ -- BASE GAME WEAPON DATA (https://vespura.com/fivem/weapons/stats/)
+ WeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoCount = 1, componentList = {}},
+ [2] = {weaponName = "weapon_stungun", ammoCount = 1, componentList = {}},
+ [3] = {weaponName = "weapon_nightstick", ammoCount = 1, componentList = {}},
+ [4] = {weaponName = "weapon_pistol", ammoCount = 45, componentList = {"COMPONENT_PISTOL_CLIP_02", "COMPONENT_AT_PI_FLSH"}},
+ [5] = {weaponName = "weapon_carbinerifle", ammoCount = 64, componentList = {"COMPONENT_CARBINERIFLE_CLIP_02", "COMPONENT_AT_AR_FLSH"}},
+ },
+ -- QBCore WEAPON DATA https://github.com/qbcore-framework/qb-core/blob/main/shared/items.lua
+ QBCoreWeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoType = nil, ammoCount = nil, componentList = {}},
+ [2] = {weaponName = "weapon_stungun", ammoType = nil, ammoCount = nil, componentList = {}},
+ [3] = {weaponName = "weapon_nightstick", ammoType = nil, ammoCount = nil, componentList = {}},
+ [4] = {weaponName = "weapon_pistol", ammoType = "pistol_ammo", ammoCount = 45, componentList = {"flashlight_attachment", "clip_attachment"}},
+ [5] = {weaponName = "weapon_carbinerifle", ammoType = "rifle_ammo", ammoCount = 64, componentList = {"grip_attachment", "flashlight_attachment", "clip_attachment"}},
+ },
+ -- ESX WEAPON DATA (https://github.com/esx-framework/esx_core/blob/main/%5Bcore%5D/es_extended/shared/config/weapons.lua)
+ ESXWeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoCount = 1, componentList = {}},
+ [2] = {weaponName = "weapon_stungun", ammoCount = 1, componentList = {}},
+ [3] = {weaponName = "weapon_nightstick", ammoCount = 1, componentList = {}},
+ [4] = {weaponName = "weapon_pistol", ammoCount = 45, componentList = {"clip_extended", "flashlight"}},
+ [5] = {weaponName = "weapon_carbinerifle", ammoCount = 64, componentList = {"grip", "clip_extended", "flashlight"}},
+ },
+ HealthData = {
+ Enabled = true,
+ Health = 200, -- 101 to 200 (Female peds have max. 150 health)
+ Armor = 200
+ },
+ PermissionRolesOrGroups = {
+ "AFO",
+ "SWAT",
+ }
+ },
+ },
+ },
+ [2] = {
+ Name = "Ambulance Gear & Loadout", -- Give it any name for reference
+ ServiceType = "ambulance", -- Options: police | ambulance | fire | tow.
+ CoordinatesWithHeading = vector4(359.2316, -587.5147, 28.8096, 225.0237), -- Vector 4 means: x,y,z,heading
+ BlipData = {
+ Enabled = true, -- Set to false to disable blip for this gear ped.
+ Sprite = 205,
+ Display = 2,
+ Category = 2,
+ ShortRange = true,
+ Colour = 66,
+ Scale = 0.75,
+ Alpha = 200,
+ },
+ NPCPedData = { -- It will select one of these settings for the NPC ped model offering the gear to the player.
+ [1] = {
+ modelName = "s_m_m_paramedic_01", -- This is not an MP ped model
+ props = {}, -- No props needed for non-mp peds.
+ components = {}, -- No components needed for non-mp peds.
+ },
+ },
+ ClothingData = { -- THIS IS NOT A CHARACTER EDITOR, IT JUST SETS CLOTHING TO FOUND PLAYER PED MODELS.
+ [1] = {
+ Name = "Ambulance Default (Male)",
+ Description = "Male paramedic.",
+ modelName = "s_m_m_paramedic_01", -- This is not an MP ped model
+ props = {}, -- No props needed for non-mp peds.
+ components = {}, -- No components needed for non-mp peds.
+ -- BASE GAME WEAPON DATA (https://vespura.com/fivem/weapons/stats/)
+ WeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoCount = 1, componentList = {}},
+ },
+ -- QBCore WEAPON DATA https://github.com/qbcore-framework/qb-core/blob/main/shared/items.lua
+ QBCoreWeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoType = nil, ammoCount = nil, componentList = {}},
+ },
+ -- ESX WEAPON DATA (https://github.com/esx-framework/esx_core/blob/main/%5Bcore%5D/es_extended/shared/config/weapons.lua)
+ ESXWeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoCount = 1, componentList = {}},
+ },
+ HealthData = {
+ Enabled = true,
+ Health = 200, -- 101 to 200 (Female peds have max. 150 health)
+ Armor = 200
+ },
+ PermissionRolesOrGroups = {
+ "Ambulance_Service",
+ "ambulance",
+ }
+ },
+ [2] = {
+ Name = "Ambulance MP Default (Male)",
+ Description = "Male paramedic.",
+ modelName = "mp_m_freemode_01", -- This is an MP ped model
+ props = {
+ { 0, 0, 0 }, -- Hats / Helments
+ { 1, 0, 0 }, -- Glassess
+ { 2, 0, 0 }, -- Misc
+ { 3, 0, 0 },
+ },
+ components = {
+ { 1, 122, 1 }, -- Mask
+ { 2, 1, 1 }, -- Hair
+ { 3, 86, 1 }, -- Upper body
+ { 4, 21, 1 }, -- Legs / Pants
+ { 5, 4, 1 }, -- Bags / Parachutes
+ { 6, 26, 1 }, -- Shoes
+ { 7, 6, 1 }, -- Neck / Scarfs
+ { 8, 18, 1 }, -- Shirt / Accessory
+ { 9, 1, 1 }, -- Body Armor
+ { 10, 2, 1 }, -- Badges / Logos
+ { 11, 24, 1 }, -- Jackets
+ },
+ -- BASE GAME WEAPON DATA (https://vespura.com/fivem/weapons/stats/)
+ WeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoCount = 1, componentList = {}},
+ },
+ -- QBCore WEAPON DATA https://github.com/qbcore-framework/qb-core/blob/main/shared/items.lua
+ QBCoreWeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoType = nil, ammoCount = nil, componentList = {}},
+ },
+ -- ESX WEAPON DATA (https://github.com/esx-framework/esx_core/blob/main/%5Bcore%5D/es_extended/shared/config/weapons.lua)
+ ESXWeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoCount = 1, componentList = {}},
+ },
+ HealthData = {
+ Enabled = true,
+ Health = 200, -- 101 to 200 (Female peds have max. 150 health)
+ Armor = 200
+ },
+ PermissionRolesOrGroups = {
+ "Ambulance_Service",
+ "ambulance",
+ }
+ },
+ [3] = {
+ Name = "Ambulance MP Default (Female)",
+ Description = "Female paramedic.",
+ modelName = "mp_f_freemode_01", -- This is an MP ped model
+ props = {
+ { 0, 0, 0 }, -- Hats / Helments
+ { 1, 0, 0 }, -- Glassess
+ { 2, 0, 0 }, -- Misc
+ { 3, 0, 0 },
+ },
+ components = {
+ { 1, 122, 1 }, -- Mask
+ { 2, 1, 1 }, -- Hair
+ { 3, 86, 1 }, -- Upper body
+ { 4, 21, 1 }, -- Legs / Pants
+ { 5, 4, 1 }, -- Bags / Parachutes
+ { 6, 26, 1 }, -- Shoes
+ { 7, 6, 1 }, -- Neck / Scarfs
+ { 8, 18, 1 }, -- Shirt / Accessory
+ { 9, 1, 1 }, -- Body Armor
+ { 10, 2, 1 }, -- Badges / Logos
+ { 11, 24, 1 }, -- Jackets
+ },
+ -- BASE GAME WEAPON DATA (https://vespura.com/fivem/weapons/stats/)
+ WeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoCount = 1, componentList = {}},
+ },
+ -- QBCore WEAPON DATA https://github.com/qbcore-framework/qb-core/blob/main/shared/items.lua
+ QBCoreWeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoType = nil, ammoCount = nil, componentList = {}},
+ },
+ -- ESX WEAPON DATA (https://github.com/esx-framework/esx_core/blob/main/%5Bcore%5D/es_extended/shared/config/weapons.lua)
+ ESXWeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoCount = 1, componentList = {}},
+ },
+ HealthData = {
+ Enabled = true,
+ Health = 200, -- 101 to 200 (Female peds have max. 150 health)
+ Armor = 200
+ },
+ PermissionRolesOrGroups = {
+ "Ambulance_Service",
+ "ambulance",
+ }
+ },
+ },
+ },
+ [3] = {
+ Name = "Fire Gear & Loadout", -- Give it any name for reference
+ ServiceType = "fire", -- Options: police | ambulance | fire | tow.
+ CoordinatesWithHeading = vector4(1688.4211, 3607.4341, 35.3719, 237.2189), -- Vector 4 means: x,y,z,heading
+ BlipData = {
+ Enabled = true, -- Set to false to disable blip for this gear ped.
+ Sprite = 205,
+ Display = 2,
+ Category = 2,
+ ShortRange = true,
+ Colour = 1,
+ Scale = 0.75,
+ Alpha = 200,
+ },
+ NPCPedData = { -- It will select one of these settings for the NPC ped model offering the gear to the player.
+ [1] = {
+ modelName = "s_m_y_fireman_01", -- This is not an MP ped model
+ props = {}, -- No props needed for non-mp peds.
+ components = {}, -- No components needed for non-mp peds.
+ },
+ },
+ ClothingData = { -- THIS IS NOT A CHARACTER EDITOR, IT JUST SETS CLOTHING TO FOUND PLAYER PED MODELS.
+ [1] = {
+ Name = "Fire Default (Male)",
+ Description = "Male firefighter.",
+ modelName = "s_m_y_fireman_01", -- This is not an MP ped model
+ props = {}, -- No props needed for non-mp peds.
+ components = {}, -- No components needed for non-mp peds.
+ -- BASE GAME WEAPON DATA (https://vespura.com/fivem/weapons/stats/)
+ WeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoCount = 1, componentList = {}},
+ [2] = {weaponName = "weapon_fireextinguisher", ammoCount = 999, componentList = {}},
+ [3] = {weaponName = "weapon_crowbar", ammoCount = 1, componentList = {}},
+ },
+ -- QBCore WEAPON DATA https://github.com/qbcore-framework/qb-core/blob/main/shared/items.lua
+ QBCoreWeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoType = nil, ammoCount = nil, componentList = {}},
+ [2] = {weaponName = "weapon_fireextinguisher", ammoType = nil, ammoCount = nil, componentList = {}},
+ [3] = {weaponName = "weapon_crowbar", ammoType = nil, ammoCount = nil, componentList = {}},
+ },
+ -- ESX WEAPON DATA (https://github.com/esx-framework/esx_core/blob/main/%5Bcore%5D/es_extended/shared/config/weapons.lua)
+ ESXWeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoCount = 1, componentList = {}},
+ [2] = {weaponName = "weapon_fireextinguisher", ammoCount = 999, componentList = {}},
+ [3] = {weaponName = "weapon_crowbar", ammoCount = 1, componentList = {}},
+ },
+ HealthData = {
+ Enabled = true,
+ Health = 200, -- 101 to 200 (Female peds have max. 150 health)
+ Armor = 200
+ },
+ PermissionRolesOrGroups = {
+ "Fire_Service",
+ "fire",
+ }
+ },
+ [2] = {
+ Name = "Fire MP Default (Male)",
+ Description = "Male firefighter.",
+ modelName = "mp_m_freemode_01", -- This is an MP ped model
+ props = {
+ { 0, 0, 0 }, -- Hats / Helments
+ { 1, 0, 0 }, -- Glassess
+ { 2, 0, 0 }, -- Misc
+ { 3, 0, 0 },
+ },
+ components = {
+ { 1, 122, 1 }, -- Mask
+ { 2, 1, 1 }, -- Hair
+ { 3, 86, 1 }, -- Upper body
+ { 4, 21, 1 }, -- Legs / Pants
+ { 5, 4, 1 }, -- Bags / Parachutes
+ { 6, 26, 1 }, -- Shoes
+ { 7, 6, 1 }, -- Neck / Scarfs
+ { 8, 18, 1 }, -- Shirt / Accessory
+ { 9, 1, 1 }, -- Body Armor
+ { 10, 2, 1 }, -- Badges / Logos
+ { 11, 24, 1 }, -- Jackets
+ },
+ -- BASE GAME WEAPON DATA (https://vespura.com/fivem/weapons/stats/)
+ WeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoCount = 1, componentList = {}},
+ [2] = {weaponName = "weapon_fireextinguisher", ammoCount = 999, componentList = {}},
+ [3] = {weaponName = "weapon_crowbar", ammoCount = 1, componentList = {}},
+ },
+ -- QBCore WEAPON DATA https://github.com/qbcore-framework/qb-core/blob/main/shared/items.lua
+ QBCoreWeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoType = nil, ammoCount = nil, componentList = {}},
+ [2] = {weaponName = "weapon_fireextinguisher", ammoType = nil, ammoCount = nil, componentList = {}},
+ [3] = {weaponName = "weapon_crowbar", ammoType = nil, ammoCount = nil, componentList = {}},
+ },
+ -- ESX WEAPON DATA (https://github.com/esx-framework/esx_core/blob/main/%5Bcore%5D/es_extended/shared/config/weapons.lua)
+ ESXWeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoCount = 1, componentList = {}},
+ [2] = {weaponName = "weapon_fireextinguisher", ammoCount = 999, componentList = {}},
+ [3] = {weaponName = "weapon_crowbar", ammoCount = 1, componentList = {}},
+ },
+ HealthData = {
+ Enabled = true,
+ Health = 200, -- 101 to 200 (Female peds have max. 150 health)
+ Armor = 200
+ },
+ PermissionRolesOrGroups = {
+ "Fire_Service",
+ "fire",
+ }
+ },
+ [3] = {
+ Name = "Fire MP Default (Female)",
+ Description = "Female firefighter.",
+ modelName = "mp_f_freemode_01", -- This is an MP ped model
+ props = {
+ { 0, 0, 0 }, -- Hats / Helments
+ { 1, 0, 0 }, -- Glassess
+ { 2, 0, 0 }, -- Misc
+ { 3, 0, 0 },
+ },
+ components = {
+ { 1, 122, 1 }, -- Mask
+ { 2, 1, 1 }, -- Hair
+ { 3, 86, 1 }, -- Upper body
+ { 4, 21, 1 }, -- Legs / Pants
+ { 5, 4, 1 }, -- Bags / Parachutes
+ { 6, 26, 1 }, -- Shoes
+ { 7, 6, 1 }, -- Neck / Scarfs
+ { 8, 18, 1 }, -- Shirt / Accessory
+ { 9, 1, 1 }, -- Body Armor
+ { 10, 2, 1 }, -- Badges / Logos
+ { 11, 24, 1 }, -- Jackets
+ },
+ -- BASE GAME WEAPON DATA (https://vespura.com/fivem/weapons/stats/)
+ WeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoCount = 1, componentList = {}},
+ [2] = {weaponName = "weapon_fireextinguisher", ammoCount = 999, componentList = {}},
+ [3] = {weaponName = "weapon_crowbar", ammoCount = 1, componentList = {}},
+ },
+ -- QBCore WEAPON DATA https://github.com/qbcore-framework/qb-core/blob/main/shared/items.lua
+ QBCoreWeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoType = nil, ammoCount = nil, componentList = {}},
+ [2] = {weaponName = "weapon_fireextinguisher", ammoType = nil, ammoCount = nil, componentList = {}},
+ [3] = {weaponName = "weapon_crowbar", ammoType = nil, ammoCount = nil, componentList = {}},
+ },
+ -- ESX WEAPON DATA (https://github.com/esx-framework/esx_core/blob/main/%5Bcore%5D/es_extended/shared/config/weapons.lua)
+ ESXWeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoCount = 1, componentList = {}},
+ [2] = {weaponName = "weapon_fireextinguisher", ammoCount = 999, componentList = {}},
+ [3] = {weaponName = "weapon_crowbar", ammoCount = 1, componentList = {}},
+ },
+ HealthData = {
+ Enabled = true,
+ Health = 200, -- 101 to 200 (Female peds have max. 150 health)
+ Armor = 200
+ },
+ PermissionRolesOrGroups = {
+ "Fire_Service",
+ "fire",
+ }
+ },
+ },
+ },
+ [4] = {
+ Name = "Tow Gear & Loadout", -- Give it any name for reference
+ ServiceType = "tow", -- Options: police | ambulance | fire | tow.
+ CoordinatesWithHeading = vector4(540.9142, -191.4992, 54.4813, 57.7849), -- Vector 4 means: x,y,z,heading
+ BlipData = {
+ Enabled = true, -- Set to false to disable blip for this gear ped.
+ Sprite = 205,
+ Display = 2,
+ Category = 2,
+ ShortRange = true,
+ Colour = 76,
+ Scale = 0.75,
+ Alpha = 200,
+ },
+ NPCPedData = { -- It will select one of these settings for the NPC ped model offering the gear to the player.
+ [1] = {
+ modelName = "s_m_y_xmech_01", -- This is not an MP ped model
+ props = {}, -- No props needed for non-mp peds.
+ components = {}, -- No components needed for non-mp peds.
+ },
+ },
+ ClothingData = { -- THIS IS NOT A CHARACTER EDITOR, IT JUST SETS CLOTHING TO FOUND PLAYER PED MODELS.
+ [1] = {
+ Name = "Mechanic Default (Male)",
+ Description = "Male mechanic.",
+ modelName = "s_m_y_xmech_01", -- This is not an MP ped model
+ props = {}, -- No props needed for non-mp peds.
+ components = {}, -- No components needed for non-mp peds.
+ -- BASE GAME WEAPON DATA (https://vespura.com/fivem/weapons/stats/)
+ WeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoCount = 1, componentList = {}},
+ [2] = {weaponName = "weapon_hammer", ammoCount = 1, componentList = {}},
+ [3] = {weaponName = "weapon_wrench", ammoCount = 1, componentList = {}},
+ },
+ -- QBCore WEAPON DATA https://github.com/qbcore-framework/qb-core/blob/main/shared/items.lua
+ QBCoreWeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoType = nil, ammoCount = nil, componentList = {}},
+ [2] = {weaponName = "weapon_hammer", ammoType = nil, ammoCount = nil, componentList = {}},
+ [3] = {weaponName = "weapon_wrench", ammoType = nil, ammoCount = nil, componentList = {}},
+ },
+ -- ESX WEAPON DATA (https://github.com/esx-framework/esx_core/blob/main/%5Bcore%5D/es_extended/shared/config/weapons.lua)
+ ESXWeaponData = {
+ [1] = {weaponName = "weapon_flashlight", ammoCount = 1, componentList = {}},
+ [2] = {weaponName = "weapon_hammer", ammoCount = 1, componentList = {}},
+ [3] = {weaponName = "weapon_wrench", ammoCount = 1, componentList = {}},
+ },
+ HealthData = {
+ Enabled = true,
+ Health = 200, -- 101 to 200 (Female peds have max. 150 health)
+ Armor = 200
+ },
+ PermissionRolesOrGroups = {
+ "Tow_Service",
+ "tow",
+ }
+ },
+ -- [2] = {
+ -- Name = "Mechanic MP Default (Male)",
+ -- Description = "Male mechanic.",
+ -- modelName = "mp_m_freemode_01", -- This is an MP ped model
+ -- props = {
+ -- { 0, 0, 0 }, -- Hats / Helments
+ -- { 1, 0, 0 }, -- Glassess
+ -- { 2, 0, 0 }, -- Misc
+ -- { 3, 0, 0 },
+ -- },
+ -- components = {
+ -- { 1, 122, 1 }, -- Mask
+ -- { 3, 86, 1 }, -- Upper body
+ -- { 4, 21, 1 }, -- Legs / Pants
+ -- { 5, 4, 1 }, -- Bags / Parachutes
+ -- { 6, 26, 1 }, -- Shoes
+ -- { 7, 6, 1 }, -- Neck / Scarfs
+ -- { 8, 18, 1 }, -- Shirt / Accessory
+ -- { 9, 1, 1 }, -- Body Armor
+ -- { 10, 2, 1 }, -- Badges / Logos
+ -- { 11, 24, 1 }, -- Jackets
+ -- },
+ -- -- BASE GAME WEAPON DATA (https://vespura.com/fivem/weapons/stats/)
+ -- WeaponData = {
+ -- [1] = {weaponName = "weapon_flashlight", ammoCount = 1, componentList = {}},
+ -- [2] = {weaponName = "weapon_hammer", ammoCount = 1, componentList = {}},
+ -- [3] = {weaponName = "weapon_wrench", ammoCount = 1, componentList = {}},
+ -- },
+ -- -- QBCore WEAPON DATA https://github.com/qbcore-framework/qb-core/blob/main/shared/items.lua
+ -- QBCoreWeaponData = {
+ -- [1] = {weaponName = "weapon_flashlight", ammoType = nil, ammoCount = nil, componentList = {}},
+ -- [2] = {weaponName = "weapon_hammer", ammoType = nil, ammoCount = nil, componentList = {}},
+ -- [3] = {weaponName = "weapon_wrench", ammoType = nil, ammoCount = nil, componentList = {}},
+ -- },
+ -- -- ESX WEAPON DATA (https://github.com/esx-framework/esx_core/blob/main/%5Bcore%5D/es_extended/shared/config/weapons.lua)
+ -- ESXWeaponData = {
+ -- [1] = {weaponName = "weapon_flashlight", ammoCount = 1, componentList = {}},
+ -- [2] = {weaponName = "weapon_hammer", ammoCount = 1, componentList = {}},
+ -- [3] = {weaponName = "weapon_wrench", ammoCount = 1, componentList = {}},
+ -- },
+ -- HealthData = {
+ -- Enabled = true,
+ -- Health = 200, -- 101 to 200 (Female peds have max. 150 health)
+ -- Armor = 200
+ -- },
+ -- PermissionRolesOrGroups = {
+ -- "Tow_Service",
+ -- "tow",
+ -- }
+ -- },
+ -- [3] = {
+ -- Name = "Mechanic MP Default (Female)",
+ -- Description = "Female mechanic.",
+ -- modelName = "mp_f_freemode_01", -- This is an MP ped model
+ -- props = {
+ -- { 0, 0, 0 }, -- Hats / Helments
+ -- { 1, 0, 0 }, -- Glassess
+ -- { 2, 0, 0 }, -- Misc
+ -- { 3, 0, 0 },
+ -- },
+ -- components = {
+ -- { 1, 122, 1 }, -- Mask
+ -- { 3, 86, 1 }, -- Upper body
+ -- { 4, 21, 1 }, -- Legs / Pants
+ -- { 5, 4, 1 }, -- Bags / Parachutes
+ -- { 6, 26, 1 }, -- Shoes
+ -- { 7, 6, 1 }, -- Neck / Scarfs
+ -- { 8, 18, 1 }, -- Shirt / Accessory
+ -- { 9, 1, 1 }, -- Body Armor
+ -- { 10, 2, 1 }, -- Badges / Logos
+ -- { 11, 24, 1 }, -- Jackets
+ -- },
+ -- -- BASE GAME WEAPON DATA (https://vespura.com/fivem/weapons/stats/)
+ -- WeaponData = {
+ -- [1] = {weaponName = "weapon_flashlight", ammoCount = 1, componentList = {}},
+ -- [2] = {weaponName = "weapon_hammer", ammoCount = 1, componentList = {}},
+ -- [3] = {weaponName = "weapon_wrench", ammoCount = 1, componentList = {}},
+ -- },
+ -- -- QBCore WEAPON DATA https://github.com/qbcore-framework/qb-core/blob/main/shared/items.lua
+ -- QBCoreWeaponData = {
+ -- [1] = {weaponName = "weapon_flashlight", ammoType = nil, ammoCount = nil, componentList = {}},
+ -- [2] = {weaponName = "weapon_hammer", ammoType = nil, ammoCount = nil, componentList = {}},
+ -- [3] = {weaponName = "weapon_wrench", ammoType = nil, ammoCount = nil, componentList = {}},
+ -- },
+ -- -- ESX WEAPON DATA (https://github.com/esx-framework/esx_core/blob/main/%5Bcore%5D/es_extended/shared/config/weapons.lua)
+ -- ESXWeaponData = {
+ -- [1] = {weaponName = "weapon_flashlight", ammoCount = 1, componentList = {}},
+ -- [2] = {weaponName = "weapon_hammer", ammoCount = 1, componentList = {}},
+ -- [3] = {weaponName = "weapon_wrench", ammoCount = 1, componentList = {}},
+ -- },
+ -- HealthData = {
+ -- Enabled = true,
+ -- Health = 200, -- 101 to 200 (Female peds have max. 150 health)
+ -- Armor = 200
+ -- },
+ -- PermissionRolesOrGroups = {
+ -- "Tow_Service",
+ -- "tow",
+ -- }
+ -- },
+ },
+ },
+ -- Add a new location here...
+ -- [5] = {...}
+ }
+}
\ No newline at end of file
diff --git a/resources/night_ers/config/impound-config.lua b/resources/night_ers/config/impound-config.lua
new file mode 100644
index 000000000..c4018e947
--- /dev/null
+++ b/resources/night_ers/config/impound-config.lua
@@ -0,0 +1,225 @@
+Config = Config or {}
+
+--====================== IMPOUND SETTINGS ======================--
+
+Config.ImpoundEnabled = true
+Config.ImpoundMarkersEnabled = true
+Config.ImpoundBlipsEnabled = true
+Config.ImpoundUseMarkers = false -- Set to true to use markers instead of peds, in case you have an anti cheat or want to use markers.
+Config.ImpoundMarkerData = {
+ MarkerId = 21 --[[ integer ]],
+ dirX = 0 --[[ number ]],
+ dirY = 0 --[[ number ]],
+ dirZ = 0 --[[ number ]],
+ rotX = 0 --[[ number ]],
+ rotY = 0 --[[ number ]],
+ rotZ = 0 --[[ number ]],
+ scaleX = 0.5 --[[ number ]],
+ scaleY = 0.5 --[[ number ]],
+ scaleZ = 0.5 --[[ number ]],
+ red = 255 --[[ integer ]],
+ green = 165 --[[ integer ]],
+ blue = 0 --[[ integer ]],
+ alpha = 100 --[[ integer ]],
+ bobUpAndDown = true --[[ boolean ]],
+ faceCamera = true --[[ boolean ]],
+ p19 = 0 --[[ integer ]],
+ rotate = false --[[ boolean ]],
+ textureDict = 0 --[[ string ]],
+ textureName = 0 --[[ string ]],
+ drawOnEnts = 0 --[[ boolean ]]
+}
+
+Config.ImpoundLocations = {
+ {
+ Name = "Los Santos",
+ AcceptedVehicleClasses = {
+ -- Don't remove any, just set the Allowed value to false if you don't want to allow that vehicle class to be impounded here.
+ [0] = { Name = "compacts", Allowed = true },
+ [1] = { Name = "sedans", Allowed = true },
+ [2] = { Name = "suvs", Allowed = true },
+ [3] = { Name = "coupes", Allowed = true },
+ [4] = { Name = "muscle", Allowed = true },
+ [5] = { Name = "sportsclassics", Allowed = true },
+ [6] = { Name = "sports", Allowed = true },
+ [7] = { Name = "super", Allowed = true },
+ [8] = { Name = "motorcycles", Allowed = true },
+ [9] = { Name = "offroad", Allowed = true },
+ [10] = { Name = "industrial", Allowed = true },
+ [11] = { Name = "utility", Allowed = true },
+ [12] = { Name = "vans", Allowed = true },
+ [13] = { Name = "cycles", Allowed = true },
+ [14] = { Name = "boats", Allowed = true },
+ [15] = { Name = "helicopters", Allowed = true },
+ [16] = { Name = "planes", Allowed = true },
+ [17] = { Name = "service", Allowed = true },
+ [18] = { Name = "emergency", Allowed = true },
+ [19] = { Name = "military", Allowed = true },
+ [20] = { Name = "commercial", Allowed = true },
+ [21] = { Name = "trains", Allowed = true },
+ [22] = { Name = "openwheel", Allowed = true },
+ },
+ Coordinates = vector3(408.9608, -1622.8490, 29.2920), -- Coordinates of the impound location
+ ImpoundLocation = vector3(401.3103, -1631.1549, 29.2920), -- Coordinates of the drop off location
+ Heading = 233.0054,
+ NPCPedData = {
+ [1] = {
+ modelName = "s_m_y_xmech_02", -- This is not an MP ped model
+ props = {}, -- No props needed for non-mp peds.
+ components = {}, -- No components needed for non-mp peds.
+ },
+ -- [2] = {
+ -- -- Use vMenu to fetch these numbers via Player Appearance. If model is not an MP ped it will not apply any props or components.
+ -- modelName = "mp_m_freemode_01", -- This is an MP ped model
+ -- props = {
+ -- -- Example: {prop type (Helmet), prop type index (Motorcycle helmet), prop colour index (Black colour)}
+ -- { 0, 9, 1 }, -- Hats / Helments
+ -- { 1, 0, 0 }, -- Glassess
+ -- { 2, 0, 0 }, -- Misc
+ -- { 3, 0, 0 },
+ -- },
+ -- components = {
+ -- -- Example: {component type (Mask), component type index (Clown Mask), component colour index (White colour)}
+ -- { 1, 122, 1 }, -- Mask
+ -- { 3, 201, 1 }, -- Upper body
+ -- { 4, 18, 1 }, -- Legs / Pants
+ -- { 5, 1, 1 }, -- Bags / Parachutes
+ -- { 6, 26, 1 }, -- Shoes
+ -- { 7, 4, 1 }, -- Neck / Scarfs
+ -- { 8, 16, 1 }, -- Shirt / Accessory
+ -- { 9, 2, 1 }, -- Body Armor
+ -- { 10, 2, 1 }, -- Badges / Logos
+ -- { 11, 26, 1 }, -- Jackets
+ -- },
+ -- },
+ }, -- Heading of the impound location
+ MarkerData = {
+ MarkerId = 21 --[[ integer ]],
+ dirX = 0 --[[ number ]],
+ dirY = 0 --[[ number ]],
+ dirZ = 0 --[[ number ]],
+ rotX = 0 --[[ number ]],
+ rotY = 0 --[[ number ]],
+ rotZ = 0 --[[ number ]],
+ scaleX = 0.5 --[[ number ]],
+ scaleY = 0.5 --[[ number ]],
+ scaleZ = 0.5 --[[ number ]],
+ red = 255 --[[ integer ]],
+ green = 165 --[[ integer ]],
+ blue = 0 --[[ integer ]],
+ alpha = 100 --[[ integer ]],
+ bobUpAndDown = true --[[ boolean ]],
+ faceCamera = true --[[ boolean ]],
+ p19 = 0 --[[ integer ]],
+ rotate = false --[[ boolean ]],
+ textureDict = 0 --[[ string ]],
+ textureName = 0 --[[ string ]],
+ drawOnEnts = 0 --[[ boolean ]]
+ },
+ BlipData = {
+ Name = "Impound Location",
+ Sprite = 317,
+ Display = 2,
+ Scale = 0.75,
+ Alpha = 225,
+ Colour = 76,
+ ShortRange = true,
+ },
+ },
+ {
+ Name = "Paleto Bay",
+ AcceptedVehicleClasses = {
+ -- Don't remove any, just set the Allowed value to false if you don't want to allow that vehicle class to be impounded here.
+ [0] = { Name = "compacts", Allowed = true },
+ [1] = { Name = "sedans", Allowed = true },
+ [2] = { Name = "suvs", Allowed = true },
+ [3] = { Name = "coupes", Allowed = true },
+ [4] = { Name = "muscle", Allowed = true },
+ [5] = { Name = "sportsclassics", Allowed = true },
+ [6] = { Name = "sports", Allowed = true },
+ [7] = { Name = "super", Allowed = true },
+ [8] = { Name = "motorcycles", Allowed = true },
+ [9] = { Name = "offroad", Allowed = true },
+ [10] = { Name = "industrial", Allowed = true },
+ [11] = { Name = "utility", Allowed = true },
+ [12] = { Name = "vans", Allowed = true },
+ [13] = { Name = "cycles", Allowed = true },
+ [14] = { Name = "boats", Allowed = true },
+ [15] = { Name = "helicopters", Allowed = true },
+ [16] = { Name = "planes", Allowed = true },
+ [17] = { Name = "service", Allowed = true },
+ [18] = { Name = "emergency", Allowed = true },
+ [19] = { Name = "military", Allowed = true },
+ [20] = { Name = "commercial", Allowed = true },
+ [21] = { Name = "trains", Allowed = true },
+ [22] = { Name = "openwheel", Allowed = true },
+ },
+ Coordinates = vector3(105.2473, 6613.5591, 32.3973), -- Coordinates of the impound location
+ ImpoundLocation = vector3(110.8162, 6605.3364, 31.8927), -- Coordinates of the drop off location
+ Heading = 231.9876,
+ NPCPedData = {
+ [1] = {
+ modelName = "s_m_y_xmech_02", -- This is not an MP ped model
+ props = {}, -- No props needed for non-mp peds.
+ components = {}, -- No components needed for non-mp peds.
+ },
+ -- [2] = {
+ -- -- Use vMenu to fetch these numbers via Player Appearance. If model is not an MP ped it will not apply any props or components.
+ -- modelName = "mp_m_freemode_01", -- This is an MP ped model
+ -- props = {
+ -- -- Example: {prop type (Helmet), prop type index (Motorcycle helmet), prop colour index (Black colour)}
+ -- { 0, 9, 1 }, -- Hats / Helments
+ -- { 1, 0, 0 }, -- Glassess
+ -- { 2, 0, 0 }, -- Misc
+ -- { 3, 0, 0 },
+ -- },
+ -- components = {
+ -- -- Example: {component type (Mask), component type index (Clown Mask), component colour index (White colour)}
+ -- { 1, 122, 1 }, -- Mask
+ -- { 3, 201, 1 }, -- Upper body
+ -- { 4, 18, 1 }, -- Legs / Pants
+ -- { 5, 1, 1 }, -- Bags / Parachutes
+ -- { 6, 26, 1 }, -- Shoes
+ -- { 7, 4, 1 }, -- Neck / Scarfs
+ -- { 8, 16, 1 }, -- Shirt / Accessory
+ -- { 9, 2, 1 }, -- Body Armor
+ -- { 10, 2, 1 }, -- Badges / Logos
+ -- { 11, 26, 1 }, -- Jackets
+ -- },
+ -- },
+ }, -- Heading of the impound location
+ MarkerData = {
+ MarkerId = 21 --[[ integer ]],
+ dirX = 0 --[[ number ]],
+ dirY = 0 --[[ number ]],
+ dirZ = 0 --[[ number ]],
+ rotX = 0 --[[ number ]],
+ rotY = 0 --[[ number ]],
+ rotZ = 0 --[[ number ]],
+ scaleX = 0.5 --[[ number ]],
+ scaleY = 0.5 --[[ number ]],
+ scaleZ = 0.5 --[[ number ]],
+ red = 255 --[[ integer ]],
+ green = 165 --[[ integer ]],
+ blue = 0 --[[ integer ]],
+ alpha = 100 --[[ integer ]],
+ bobUpAndDown = true --[[ boolean ]],
+ faceCamera = true --[[ boolean ]],
+ p19 = 0 --[[ integer ]],
+ rotate = false --[[ boolean ]],
+ textureDict = 0 --[[ string ]],
+ textureName = 0 --[[ string ]],
+ drawOnEnts = 0 --[[ boolean ]]
+ },
+ BlipData = {
+ Name = "Impound Location",
+ Sprite = 317,
+ Display = 2,
+ Scale = 0.75,
+ Alpha = 225,
+ Colour = 76,
+ ShortRange = true,
+ },
+ }
+}
+
diff --git a/resources/night_ers/config/leaderboard-config.lua b/resources/night_ers/config/leaderboard-config.lua
new file mode 100644
index 000000000..e342412e7
--- /dev/null
+++ b/resources/night_ers/config/leaderboard-config.lua
@@ -0,0 +1,11 @@
+Config = Config or {}
+
+--===================== Leaderboard Settings =====================--
+-- Example statistics which are tracked per server and user (This may be expanded in the future):
+-- Shift time, persons CPRed, persons arrested, persons brought to hospital, vehicles impounded, callouts completed (All tasks must be completed to be tracked)
+
+-- Find the statistics dashboard at https://stats.nights-software.com/
+
+Config.Leaderboard = {
+ TrackStatistics = true,
+}
\ No newline at end of file
diff --git a/resources/night_ers/config/npcbackup-config.lua b/resources/night_ers/config/npcbackup-config.lua
new file mode 100644
index 000000000..ed9a18f31
--- /dev/null
+++ b/resources/night_ers/config/npcbackup-config.lua
@@ -0,0 +1,391 @@
+Config = Config or {}
+
+--====================== EMERGENCY SERVICE UNIT REQUEST SETTINGS ======================--
+
+Config.NPCBackupDrivingStyle = 2900796 -- (2900796 avoids vehicles, peds and objects. Drives through speedzones and red lights.) https://vespura.com/fivem/drivingstyle/ (Previously: 279356)
+Config.NPCDrivingSpeed = 10.0 -- Seems like a proper speed. Not too fast, not too slow.
+Config.NPCStoppingDistance = 40.0 -- The distance when the backup will stop when reaching the location.
+Config.NPCMaxDistanceToDespawn = 280 -- The max distance for the backup to be able to drive before getting despawned
+Config.NPCMaxDistanceWarning = 200 -- The distance when a warning should appear that the backup has problems reaching the location
+Config.NPCTimeToForceTeleport = 60 -- The time in seconds after which the backup will be forced to teleport to a nearby position if it has not arrived at the callout location.
+
+Config.NPCBackupRequestData = {
+ Police = {
+ BlipData = {
+ SpriteId = 1,
+ ColourId = 38,
+ Flashes = true,
+ Cone = true
+ },
+ VehicleData = { -- Contains 2 examples.
+ [1] = {
+ modelName = "policet",
+ extraIds = {1, 2, 3, 4, 5, 10, 15, 20}, -- Extra's which are turned ON by default.
+ liveryId = -1,
+ vehicleColours = { primary = -1, secondary = -1, pearlescent = -1, wheel = -1},
+ windowTintId = -1, -- 0 to 6 where 0 is no window tint. -1 does nothing which is also fine.
+ dirtLevel = 0.0 -- 0.0 to 15.0 where 15.0 is very dirty.
+ },
+ [2] = {
+ modelName = "police",
+ extraIds = {1, 2, 3, 4, 5, 10, 15, 20}, -- Extra's which are turned ON by default.
+ liveryId = -1,
+ vehicleColours = { primary = -1, secondary = -1, pearlescent = -1, wheel = -1},
+ windowTintId = -1, -- 0 to 6 where 0 is no window tint. -1 does nothing which is also fine.
+ dirtLevel = 0.0 -- 0.0 to 15.0 where 15.0 is very dirty.
+ },
+ -- Add more here.
+ },
+ PedData = { -- Contains 4 examples, last one (index [4]) is an MP ped example. Remove it if you don't want to use MP peds.
+ [1] = {
+ -- Use vMenu to fetch these numbers via Player Appearance. If model is not an MP ped it will not apply any props or components.
+ modelName = "s_f_y_cop_01", -- This is not an MP ped model
+ props = {}, -- No props needed for non-mp peds.
+ components = {}, -- No components needed for non-mp peds.
+ },
+ [2] = {
+ -- Use vMenu to fetch these numbers via Player Appearance. If model is not an MP ped it will not apply any props or components.
+ modelName = "s_m_y_cop_01",
+ props = {}, -- No props needed for non-mp peds.
+ components = {}, -- No components needed for non-mp peds.
+ },
+ -- [3] = {
+ -- -- Use vMenu to fetch these numbers via Player Appearance. If model is not an MP ped it will not apply any props or components.
+ -- modelName = "csb_cop",
+ -- props = {}, -- No props needed for non-mp peds.
+ -- components = {}, -- No components needed for non-mp peds.
+ -- },
+ -- [4] = {
+ -- -- Use vMenu to fetch these numbers via Player Appearance. If model is not an MP ped it will not apply any props or components.
+ -- modelName = "mp_m_freemode_01", -- This is an MP ped model
+ -- props = {
+ -- -- Example: {prop type (Helmet), prop type index (Motorcycle helmet), prop colour index (Black colour)}
+ -- { 0, 9, 1 }, -- Hats / Helments
+ -- { 1, 0, 0 }, -- Glassess
+ -- { 2, 0, 0 }, -- Misc
+ -- { 3, 0, 0 },
+ -- },
+ -- components = {
+ -- -- Example: {component type (Mask), component type index (Clown Mask), component colour index (White colour)}
+ -- { 1, 122, 1 }, -- Mask
+ -- { 3, 201, 1 }, -- Upper body
+ -- { 4, 18, 1 }, -- Legs / Pants
+ -- { 5, 1, 1 }, -- Bags / Parachutes
+ -- { 6, 26, 1 }, -- Shoes
+ -- { 7, 4, 1 }, -- Neck / Scarfs
+ -- { 8, 16, 1 }, -- Shirt / Accessory
+ -- { 9, 2, 1 }, -- Body Armor
+ -- { 10, 2, 1 }, -- Badges / Logos
+ -- { 11, 26, 1 }, -- Jackets
+ -- },
+ -- },
+ -- Add more peds here. Don't forget about defining the correct next index number: [5]
+ },
+ },
+ Ambulance = {
+ BlipData = {
+ SpriteId = 1,
+ ColourId = 1,
+ Flashes = true,
+ Cone = true
+ },
+ VehicleData = {
+ [1] = {
+ modelName = "ambulance",
+ extraIds = {1, 2, 3, 4, 5, 10, 15, 20},
+ liveryId = -1,
+ vehicleColours = { primary = -1, secondary = -1, pearlescent = -1, wheel = -1},
+ windowTintId = -1,
+ dirtLevel = 0.0
+ },
+ -- Add more here. Don't forget about defining the correct next index number: [2]
+ },
+ PedData = {
+ [1] = {
+ -- Use vMenu to fetch these numbers via Player Appearance. If model is not an MP ped it will not apply any props or components.
+ modelName = "s_m_m_paramedic_01", -- This is not an MP ped model
+ props = {}, -- No props needed for non-mp peds.
+ components = {}, -- No components needed for non-mp peds.
+ },
+ -- [2] = {
+ -- -- Use vMenu to fetch these numbers via Player Appearance. If model is not an MP ped it will not apply any props or components.
+ -- modelName = "mp_m_freemode_01", -- This is an MP ped model
+ -- props = {
+ -- -- Example: {prop type (Helmet), prop type index (Motorcycle helmet), prop colour index (Black colour)}
+ -- { 0, 0, 0 }, -- Hats / Helments
+ -- { 1, 0, 0 }, -- Glassess
+ -- { 2, 0, 0 }, -- Misc
+ -- { 3, 0, 0 },
+ -- },
+ -- components = {
+ -- -- Example: {component type (Mask), component type index (Clown Mask), component colour index (White colour)}
+ -- { 1, 122, 1 }, -- Mask
+ -- { 3, 86, 1 }, -- Upper body
+ -- { 4, 21, 1 }, -- Legs / Pants
+ -- { 5, 4, 1 }, -- Bags / Parachutes
+ -- { 6, 26, 1 }, -- Shoes
+ -- { 7, 6, 1 }, -- Neck / Scarfs
+ -- { 8, 18, 1 }, -- Shirt / Accessory
+ -- { 9, 1, 1 }, -- Body Armor
+ -- { 10, 2, 1 }, -- Badges / Logos
+ -- { 11, 24, 1 }, -- Jackets
+ -- },
+ -- },
+ -- Add more peds here. Don't forget about defining the correct next index number: [3]
+ },
+ },
+ Taxi = {
+ BlipData = {
+ SpriteId = 1,
+ ColourId = 47,
+ Flashes = true,
+ Cone = true
+ },
+ VehicleData = {
+ [1] = {
+ modelName = "taxi",
+ extraIds = {1, 2, 3, 4, 5, 10, 15, 20},
+ liveryId = -1,
+ vehicleColours = { primary = -1, secondary = -1, pearlescent = -1, wheel = -1},
+ windowTintId = -1,
+ dirtLevel = 0.0
+ },
+ -- Add more here. Don't forget about defining the correct next index number: [2]
+ },
+ PedData = {
+ [1] = {
+ modelName = "a_m_m_prolhost_01",
+ props = {},
+ components = {},
+ },
+ [2] = {
+ modelName = "a_m_y_business_02",
+ props = {},
+ components = {},
+ },
+ [3] = {
+ modelName = "a_m_y_business_03",
+ props = {},
+ components = {},
+ },
+ },
+ },
+ Tow = {
+ BlipData = {
+ SpriteId = 1,
+ ColourId = 76,
+ Flashes = true,
+ Cone = true
+ },
+ VehicleData = {
+ [1] = {
+ modelName = "flatbed",
+ extraIds = {1, 2, 3, 4, 5, 10, 15, 20},
+ liveryId = 2,
+ vehicleColours = { primary = 3, secondary = 3, pearlescent = 22, wheel = 22},
+ windowTintId = -1,
+ dirtLevel = 2.0,
+ -- Additional offsets for towing vehicles.
+ TowOffsetX = -0.5, -- Vehicle position on the back of the flatbed relative to x 0.0 of model 'flatbed' (left-right)
+ TowOffsetY = -5.0, -- Vehicle position on the back of the flatbed relative to y 0.0 of model 'flatbed' 'flatbed' (forward-backward)
+ TowOffsetZ = 0.4, -- Vehicle position on the back of the flatbed relative to z 0.0 of model 'flatbed' 'flatbed' (up-down)
+ TowRotOffsetX = 0.0, -- Vehicle rotation position on the back of the flatbed relative to z 0.0 of model 'flatbed'
+ TowRotOffsetY = -0.5, -- Vehicle rotation position on the back of the flatbed relative to y 0.0 of model 'flatbed'
+ TowRotOffsetZ = 0.0, -- Vehicle rotation position on the back of the flatbed relative to z 0.0 of model 'flatbed'
+ },
+ -- Add more here. Don't forget about defining the correct next index number: [2]
+ },
+ PedData = {
+ [1] = {
+ modelName = "mp_m_waremech_01",
+ props = {},
+ components = {},
+ },
+ [2] = {
+ modelName = "s_m_m_dockwork_01",
+ props = {},
+ components = {},
+ },
+ [3] = {
+ modelName = "s_m_y_uscg_01",
+ props = {},
+ components = {},
+ },
+ },
+ },
+ RoadService = {
+ BlipData = {
+ SpriteId = 1,
+ ColourId = 60,
+ Flashes = true,
+ Cone = true
+ },
+ VehicleData = {
+ [1] = {
+ modelName = "utillitruck3",
+ extraIds = {},
+ liveryId = -1,
+ vehicleColours = { primary = -1, secondary = -1, pearlescent = -1, wheel = -1},
+ windowTintId = -1,
+ dirtLevel = 10.0,
+ },
+ -- Add more here. Don't forget about defining the correct next index number: [2]
+ },
+ PedData = {
+ [1] = {
+ modelName = "s_m_y_winclean_01",
+ props = {},
+ components = {},
+ },
+ [2] = {
+ modelName = "csb_trafficwarden",
+ props = {},
+ components = {},
+ },
+ [3] = {
+ modelName = "s_m_y_dwservice_01",
+ props = {},
+ components = {},
+ },
+ [4] = {
+ modelName = "s_m_y_dwservice_02",
+ props = {},
+ components = {},
+ },
+ },
+ },
+ Coroner = {
+ BlipData = {
+ SpriteId = 1,
+ ColourId = 85,
+ Flashes = true,
+ Cone = true
+ },
+ VehicleData = {
+ [1] = {
+ modelName = "speedo4",
+ extraIds = {},
+ liveryId = -1,
+ vehicleColours = { primary = -1, secondary = -1, pearlescent = -1, wheel = -1},
+ windowTintId = -1,
+ dirtLevel = 0.0,
+ },
+ -- Add more here. Don't forget about defining the correct next index number: [2]
+ },
+ PedData = {
+ [1] = {
+ modelName = "s_m_m_doctor_01",
+ props = {},
+ components = {},
+ },
+ },
+ },
+ AnimalRescue = {
+ BlipData = {
+ SpriteId = 1,
+ ColourId = 24,
+ Flashes = true,
+ Cone = true
+ },
+ VehicleData = {
+ [1] = {
+ modelName = "rumpo3",
+ extraIds = {},
+ liveryId = -1,
+ vehicleColours = { primary = -1, secondary = -1, pearlescent = -1, wheel = -1},
+ windowTintId = -1,
+ dirtLevel = 0.0,
+ },
+ -- Add more here. Don't forget about defining the correct next index number: [2]
+ },
+ PedData = {
+ [1] = {
+ modelName = "s_m_y_pestcont_01",
+ props = {},
+ components = {},
+ },
+ },
+ },
+ Mechanic = {
+ BlipData = {
+ SpriteId = 1,
+ ColourId = 62,
+ Flashes = true,
+ Cone = true
+ },
+ VehicleData = {
+ [1] = {
+ modelName = "burrito",
+ extraIds = {1, 12},
+ liveryId = 1,
+ vehicleColours = { primary = -1, secondary = -1, pearlescent = -1, wheel = -1},
+ windowTintId = -1,
+ dirtLevel = 0.0,
+ },
+ },
+ PedData = {
+ [1] = {
+ modelName = "s_m_m_autoshop_02",
+ props = {},
+ components = {},
+ },
+ },
+ },
+ Fire = {
+ AmountOfFireFighters = 2, -- Match this to the seat count of the vehicle you are using for NPC fire backup.
+ BlipData = {
+ SpriteId = 1,
+ ColourId = 1,
+ Flashes = true,
+ Cone = true
+ },
+ VehicleData = {
+ [1] = {
+ modelName = "firetruk",
+ extraIds = {1, 2, 3, 4, 5, 10, 15, 20},
+ liveryId = -1,
+ vehicleColours = { primary = -1, secondary = -1, pearlescent = -1, wheel = -1},
+ windowTintId = -1,
+ dirtLevel = 0.0,
+ },
+ },
+ PedData = {
+ [1] = {
+ modelName = "s_m_y_fireman_01",
+ props = {},
+ components = {},
+ },
+ },
+ }
+}
+
+ --====================== ANIMAL RESCUE CAGE SETTINGS ======================--
+
+ Config.AnimalModelsWithCagesList = {
+ -- Small
+ {model = "a_c_cat_01", cage = "prop_dog_cage_03"},
+ {model = "a_c_cormorant", cage = "prop_dog_cage_03"},
+ {model = "a_c_coyote", cage = "prop_dog_cage_03"},
+ {model = "a_c_hen", cage = "prop_dog_cage_03"},
+ {model = "a_c_poodle", cage = "prop_dog_cage_03"},
+ {model = "a_c_pug", cage = "prop_dog_cage_03"},
+ {model = "a_c_rabbit_01", cage = "prop_dog_cage_03"},
+ {model = "a_c_rat", cage = "prop_dog_cage_03"},
+
+ -- Medium
+ {model = "a_c_chop", cage = "prop_dog_cage_05"},
+ {model = "a_c_husky", cage = "prop_dog_cage_05"},
+ {model = "a_c_pig", cage = "prop_dog_cage_05"},
+ {model = "a_c_retriever", cage = "prop_dog_cage_05"},
+ {model = "a_c_rhesus", cage = "prop_dog_cage_05"},
+ {model = "a_c_rottweiler", cage = "prop_dog_cage_05"},
+ {model = "a_c_shepherd", cage = "prop_dog_cage_05"},
+ {model = "a_c_westy", cage = "prop_dog_cage_05"},
+
+ -- Large
+ {model = "a_c_chimp", cage = "prop_dog_cage_04"},
+ {model = "a_c_boar", cage = "prop_dog_cage_04"},
+ {model = "a_c_cow", cage = "prop_dog_cage_04"},
+ {model = "a_c_deer", cage = "prop_dog_cage_04"},
+ {model = "a_c_mtlion", cage = "prop_dog_cage_04"},
+}
\ No newline at end of file
diff --git a/resources/night_ers/config/persisententity-config.lua b/resources/night_ers/config/persisententity-config.lua
new file mode 100644
index 000000000..e7e00f310
--- /dev/null
+++ b/resources/night_ers/config/persisententity-config.lua
@@ -0,0 +1,1998 @@
+Config = Config or {}
+
+--=============== PERSISTENT ENTITY SETTINGS =================--
+
+-- Used for generating addresses for NPCs.
+Config.RandomStates = {
+ [1] = {
+ Country = "USA",
+ States = {
+ [1] = {
+ State = "San Andreas",
+ Cities = {
+ [1] = {
+ City = "Los Santos",
+ PostalCodeRange = {6000, 10000},
+ Addresses = {
+ [1] = {
+ Address = "Davis Avenue 15",
+ AddressType = "House",
+ },
+ [2] = {
+ Address = "Vinewood Boulevard 101",
+ AddressType = "Apartment",
+ },
+ [3] = {
+ Address = "Grove Street 12",
+ AddressType = "House",
+ },
+ [4] = {
+ Address = "Del Perro Freeway 5",
+ AddressType = "Office",
+ },
+ [5] = {
+ Address = "Rockford Drive 22",
+ AddressType = "Condo",
+ },
+ [6] = {
+ Address = "San Andreas Avenue 8",
+ AddressType = "House",
+ },
+ [7] = {
+ Address = "Palomino Avenue 33",
+ AddressType = "Apartment",
+ },
+ [8] = {
+ Address = "Boulevard Del Perro 45",
+ AddressType = "Retail Space",
+ },
+ [9] = {
+ Address = "Alta Street 19",
+ AddressType = "Loft",
+ },
+ [10] = {
+ Address = "Bay City Avenue 7",
+ AddressType = "House",
+ },
+ [11] = {
+ Address = "Morningwood Boulevard 3",
+ AddressType = "Villa",
+ },
+ },
+ },
+ [2] = {
+ City = "San Fierro",
+ PostalCodeRange = {11000, 14000},
+ Addresses = {
+ [1] = {
+ Address = "123 Main St",
+ AddressType = "House",
+ },
+ [2] = {
+ Address = "456 Ocean View Dr",
+ AddressType = "Apartment",
+ },
+ [3] = {
+ Address = "789 Bay Area Blvd",
+ AddressType = "Condo",
+ },
+ [4] = {
+ Address = "101 Golden Gate Ave",
+ AddressType = "Villa",
+ },
+ [5] = {
+ Address = "202 Lombard St",
+ AddressType = "House",
+ },
+ [6] = {
+ Address = "303 Castro St",
+ AddressType = "Apartment",
+ },
+ [7] = {
+ Address = "404 Alcatraz Ave",
+ AddressType = "Loft",
+ },
+ [8] = {
+ Address = "505 Chinatown Rd",
+ AddressType = "Retail Space",
+ },
+ [9] = {
+ Address = "606 Fisherman's Wharf",
+ AddressType = "Office",
+ },
+ [10] = {
+ Address = "707 Twin Peaks Blvd",
+ AddressType = "House",
+ },
+ [11] = {
+ Address = "808 Mission St",
+ AddressType = "Apartment",
+ },
+ },
+ },
+ [3] = {
+ City = "Las Venturas",
+ PostalCodeRange = {15000, 18000},
+ Addresses = {
+ [1] = {
+ Address = "123 Main St",
+ AddressType = "House",
+ },
+ [2] = {
+ Address = "456 Strip Ave",
+ AddressType = "Apartment",
+ },
+ [3] = {
+ Address = "789 Casino Blvd",
+ AddressType = "Condo",
+ },
+ [4] = {
+ Address = "101 Desert Rd",
+ AddressType = "Villa",
+ },
+ [5] = {
+ Address = "202 Neon St",
+ AddressType = "House",
+ },
+ [6] = {
+ Address = "303 Jackpot Ln",
+ AddressType = "Apartment",
+ },
+ [7] = {
+ Address = "404 High Roller Ave",
+ AddressType = "Loft",
+ },
+ [8] = {
+ Address = "505 Lucky St",
+ AddressType = "Retail Space",
+ },
+ [9] = {
+ Address = "606 Poker Dr",
+ AddressType = "Office",
+ },
+ [10] = {
+ Address = "707 Blackjack Blvd",
+ AddressType = "House",
+ },
+ [11] = {
+ Address = "808 Roulette Rd",
+ AddressType = "Apartment",
+ },
+ },
+ },
+ }
+ },
+ [2] = {
+ State = "Blaine County",
+ Cities = {
+ [1] = {
+ City = "Paleto Bay",
+ PostalCodeRange = {1000, 2000},
+ Addresses = {
+ [1] = {
+ Address = "123 Main St",
+ AddressType = "House",
+ },
+ [2] = {
+ Address = "456 Elm St",
+ AddressType = "Apartment",
+ },
+ [3] = {
+ Address = "789 Oak St",
+ AddressType = "Room",
+ },
+ [4] = {
+ Address = "101 Paleto Blvd",
+ AddressType = "House",
+ },
+ [5] = {
+ Address = "202 Procopio Dr",
+ AddressType = "Apartment",
+ },
+ [6] = {
+ Address = "303 Paleto Ave",
+ AddressType = "Condo",
+ },
+ [7] = {
+ Address = "404 Duluoz Ave",
+ AddressType = "Villa",
+ },
+ [8] = {
+ Address = "505 Pyrite Ave",
+ AddressType = "House",
+ },
+ [9] = {
+ Address = "606 Paleto Blvd",
+ AddressType = "Apartment",
+ },
+ [10] = {
+ Address = "707 Procopio Dr",
+ AddressType = "Loft",
+ },
+ [11] = {
+ Address = "808 Paleto Ave",
+ AddressType = "Retail Space",
+ },
+ [12] = {
+ Address = "909 Duluoz Ave",
+ AddressType = "Office",
+ },
+ [13] = {
+ Address = "1010 Pyrite Ave",
+ AddressType = "House",
+ },
+ },
+ },
+ [2] = {
+ City = "Grapeseed",
+ PostalCodeRange = {2000, 3000},
+ Addresses = {
+ [1] = {
+ Address = "123 Main St",
+ AddressType = "House",
+ },
+ [2] = {
+ Address = "456 Elm St",
+ AddressType = "Apartment",
+ },
+ [3] = {
+ Address = "789 Oak St",
+ AddressType = "Room",
+ },
+ [4] = {
+ Address = "101 Grapeseed Ave",
+ AddressType = "House",
+ },
+ [5] = {
+ Address = "202 Grapeseed Blvd",
+ AddressType = "Apartment",
+ },
+ [6] = {
+ Address = "303 Grapeseed Rd",
+ AddressType = "Condo",
+ },
+ [7] = {
+ Address = "404 Grapeseed Ln",
+ AddressType = "Villa",
+ },
+ [8] = {
+ Address = "505 Grapeseed St",
+ AddressType = "House",
+ },
+ [9] = {
+ Address = "606 Grapeseed Dr",
+ AddressType = "Apartment",
+ },
+ [10] = {
+ Address = "707 Grapeseed Way",
+ AddressType = "Loft",
+ },
+ [11] = {
+ Address = "808 Grapeseed Ct",
+ AddressType = "Retail Space",
+ },
+ [12] = {
+ Address = "909 Grapeseed Pl",
+ AddressType = "Office",
+ },
+ [13] = {
+ Address = "1010 Grapeseed Cir",
+ AddressType = "House",
+ },
+ },
+ },
+ [3] = {
+ City = "Sandy Shores",
+ PostalCodeRange = {3000, 4000},
+ Addresses = {
+ [1] = {
+ Address = "123 Main St",
+ AddressType = "House",
+ },
+ [2] = {
+ Address = "Alhambra Drive 1",
+ AddressType = "House",
+ },
+ [3] = {
+ Address = "Zancudo Avenue 2",
+ AddressType = "Apartment",
+ },
+ [4] = {
+ Address = "Panorama Drive 3",
+ AddressType = "Condo",
+ },
+ [5] = {
+ Address = "Joshua Road 4",
+ AddressType = "Villa",
+ },
+ [6] = {
+ Address = "Cholla Springs Avenue 5",
+ AddressType = "House",
+ },
+ [7] = {
+ Address = "Armadillo Avenue 6",
+ AddressType = "Apartment",
+ },
+ [8] = {
+ Address = "Niland Avenue 7",
+ AddressType = "Retail Space",
+ },
+ [9] = {
+ Address = "Mountain View Drive 8",
+ AddressType = "Loft",
+ },
+ [10] = {
+ Address = "Marina Drive 9",
+ AddressType = "House",
+ },
+ [11] = {
+ Address = "Grapeseed Main Street 10",
+ AddressType = "Villa",
+ },
+ },
+ },
+ [4] = {
+ City = "Harmony",
+ PostalCodeRange = {4000, 5000},
+ Addresses = {
+ [1] = {
+ Address = "123 Main St",
+ AddressType = "House",
+ },
+ [2] = {
+ Address = "Route 68 1",
+ AddressType = "House",
+ },
+ [3] = {
+ Address = "Joshua Road 2",
+ AddressType = "Apartment",
+ },
+ [4] = {
+ Address = "Panorama Drive 3",
+ AddressType = "Condo",
+ },
+ [5] = {
+ Address = "Cholla Springs Avenue 4",
+ AddressType = "Villa",
+ },
+ [6] = {
+ Address = "Armadillo Avenue 5",
+ AddressType = "House",
+ },
+ [7] = {
+ Address = "Niland Avenue 6",
+ AddressType = "Apartment",
+ },
+ [8] = {
+ Address = "Mountain View Drive 7",
+ AddressType = "Retail Space",
+ },
+ [9] = {
+ Address = "Marina Drive 8",
+ AddressType = "Loft",
+ },
+ [10] = {
+ Address = "Grapeseed Main Street 9",
+ AddressType = "House",
+ },
+ [11] = {
+ Address = "Route 68 Approach 10",
+ AddressType = "Villa",
+ },
+ },
+ }
+ }
+ }
+ }
+ }
+}
+
+Config.FictiveEmailDomains = {
+ "@gmail.com",
+ "@yahoo.com",
+ "@hotmail.com",
+ "@outlook.com",
+ "@live.com",
+}
+
+Config.RandomGeneralOccupations = { -- A table in the MDT, so we utilize it for now.
+ "Engineer",
+ "Cook",
+ "Bartender",
+ "Waiter",
+ "Janitor",
+ "Cashier",
+ "Cleaner",
+ "Factory Worker",
+ "Slaughterer",
+ "Solar Panel Installer",
+ "Electrician",
+ "Plumber",
+ "Carpenter",
+ "Painter",
+ "Gardener",
+ "Landscaper"
+}
+
+Config.RandomPropertyTypes = {
+ "House",
+ "Apartment",
+ "Floor",
+ "Office",
+ "Warehouse",
+ "Factory",
+ "Retail Space",
+ "Condo",
+ "Townhouse",
+ "Villa",
+ "Loft",
+ "Studio",
+ "Penthouse",
+ "Cottage",
+ "Bungalow",
+ "Farmhouse",
+ "Mansion",
+ "Mobile Home",
+ "Hotel",
+ "Hostel",
+ "Resort",
+ "Guesthouse",
+ "Cabin",
+ "Chalet",
+ "Commercial Building",
+ "Mixed-Use Property",
+ "Storage Unit",
+ "School/Institution",
+ "Church/Temple",
+ "Gas Station",
+ "Car Dealership",
+ "Industrial Site",
+ "Recreational Property",
+ "Waterfront Property",
+ "Historic Property",
+ "Ranch",
+ "Orchard/Vineyard",
+ "Equestrian Property",
+ "Treehouse",
+ "Underground Dwelling",
+}
+
+Config.PedHashes = {
+ --===================== Custom Peds =====================--
+ -- Add more custom peds here with Gender options: "Male", "Female" or "Other"
+
+ -- {modelName = "custom_ped", modelHex = 0xCE$45643, Gender = "Other"},
+
+ --===================== GTA Native Peds =====================--
+ {modelName = "a_c_boar", modelHex = 0xCE5FF074, Gender = "Other"},
+ {modelName = "a_c_cat_01", modelHex = 0x573201B8, Gender = "Other"},
+ {modelName = "a_c_chickenhawk", modelHex = 0xAAB71F62, Gender = "Other"},
+ {modelName = "a_c_chimp", modelHex = 0xA8683715, Gender = "Other"},
+ {modelName = "a_c_chop", modelHex = 0x14EC17EA, Gender = "Other"},
+ {modelName = "a_c_cormorant", modelHex = 0x56E29962, Gender = "Other"},
+ {modelName = "a_c_cow", modelHex = 0xFCFA9E1E, Gender = "Other"},
+ {modelName = "a_c_coyote", modelHex = 0x644AC75E, Gender = "Other"},
+ {modelName = "a_c_crow", modelHex = 0x18012A9F, Gender = "Other"},
+ {modelName = "a_c_deer", modelHex = 0xD86B5A95, Gender = "Other"},
+ {modelName = "a_c_dolphin", modelHex = 0x8BBAB455, Gender = "Other"},
+ {modelName = "a_c_fish", modelHex = 0x2FD800B7, Gender = "Other"},
+ {modelName = "a_c_hen", modelHex = 0x6AF51FAF, Gender = "Other"},
+ {modelName = "a_c_humpback", modelHex = 0x471BE4B2, Gender = "Other"},
+ {modelName = "a_c_husky", modelHex = 0x4E8F95A2, Gender = "Other"},
+ {modelName = "a_c_killerwhale", modelHex = 0x8D8AC8B9, Gender = "Other"},
+ {modelName = "a_c_mtlion", modelHex = 0x1250D7BA, Gender = "Other"},
+ {modelName = "a_c_pig", modelHex = 0xB11BAB56, Gender = "Other"},
+ {modelName = "a_c_pigeon", modelHex = 0x06A20728, Gender = "Other"},
+ {modelName = "a_c_poodle", modelHex = 0x431D501C, Gender = "Other"},
+ {modelName = "a_c_pug", modelHex = 0x6D362854, Gender = "Other"},
+ {modelName = "a_c_rabbit_01", modelHex = 0xDFB55C81, Gender = "Other"},
+ {modelName = "a_c_rat", modelHex = 0xC3B52966, Gender = "Other"},
+ {modelName = "a_c_retriever", modelHex = 0x349F33E1, Gender = "Other"},
+ {modelName = "a_c_rhesus", modelHex = 0xC2D06F53, Gender = "Other"},
+ {modelName = "a_c_rottweiler", modelHex = 0x9563221D, Gender = "Other"},
+ {modelName = "a_c_seagull", modelHex = 0xD3939DFD, Gender = "Other"},
+ {modelName = "a_c_sharkhammer", modelHex = 0x3C831724, Gender = "Other"},
+ {modelName = "a_c_sharktiger", modelHex = 0x06C3F072, Gender = "Other"},
+ {modelName = "a_c_shepherd", modelHex = 0x431FC24C, Gender = "Other"},
+ {modelName = "a_c_stingray", modelHex = 0xA148614D, Gender = "Other"},
+ {modelName = "a_c_westy", modelHex = 0xAD7844BB, Gender = "Other"},
+ {modelName = "a_f_m_beach_01", modelHex = 0x303638A7, Gender = "Female"},
+ {modelName = "a_f_m_bevhills_01", modelHex = 0xBE086EFD, Gender = "Female"},
+ {modelName = "a_f_m_bevhills_02", modelHex = 0xA039335F, Gender = "Female"},
+ {modelName = "a_f_m_bodybuild_01", modelHex = 0x3BD99114, Gender = "Female"},
+ {modelName = "a_f_m_business_02", modelHex = 0x1FC37DBC, Gender = "Female"},
+ {modelName = "a_f_m_downtown_01", modelHex = 0x654AD86E, Gender = "Female"},
+ {modelName = "a_f_m_eastsa_01", modelHex = 0x9D3DCB7A, Gender = "Female"},
+ {modelName = "a_f_m_eastsa_02", modelHex = 0x63C8D891, Gender = "Female"},
+ {modelName = "a_f_m_fatbla_01", modelHex = 0xFAB48BCB, Gender = "Female"},
+ {modelName = "a_f_m_fatcult_01", modelHex = 0xB5CF80E4, Gender = "Female"},
+ {modelName = "a_f_m_fatwhite_01", modelHex = 0x38BAD33B, Gender = "Female"},
+ {modelName = "a_f_m_ktown_01", modelHex = 0x52C824DE, Gender = "Female"},
+ {modelName = "a_f_m_ktown_02", modelHex = 0x41018151, Gender = "Female"},
+ {modelName = "a_f_m_prolhost_01", modelHex = 0x169BD1E1, Gender = "Female"},
+ {modelName = "a_f_m_salton_01", modelHex = 0xDE0E0969, Gender = "Female"},
+ {modelName = "a_f_m_skidrow_01", modelHex = 0xB097523B, Gender = "Female"},
+ {modelName = "a_f_m_soucent_01", modelHex = 0x745855A1, Gender = "Female"},
+ {modelName = "a_f_m_soucent_02", modelHex = 0xF322D338, Gender = "Female"},
+ {modelName = "a_f_m_soucentmc_01", modelHex = 0xCDE955D2, Gender = "Female"},
+ {modelName = "a_f_m_tourist_01", modelHex = 0x505603B9, Gender = "Female"},
+ {modelName = "a_f_m_tramp_01", modelHex = 0x48F96F5B, Gender = "Female"},
+ {modelName = "a_f_m_trampbeac_01", modelHex = 0x8CA0C266, Gender = "Female"},
+ {modelName = "a_f_o_genstreet_01", modelHex = 0x61C81C85, Gender = "Female"},
+ {modelName = "a_f_o_indian_01", modelHex = 0xBAD7BB80, Gender = "Female"},
+ {modelName = "a_f_o_ktown_01", modelHex = 0x47CF5E96, Gender = "Female"},
+ {modelName = "a_f_o_salton_01", modelHex = 0xCCFF7D8A, Gender = "Female"},
+ {modelName = "a_f_o_soucent_01", modelHex = 0x3DFA1830, Gender = "Female"},
+ {modelName = "a_f_o_soucent_02", modelHex = 0xA56DE716, Gender = "Female"},
+ {modelName = "a_f_y_beach_01", modelHex = 0xC79F6928, Gender = "Female"},
+ {modelName = "a_f_y_bevhills_01", modelHex = 0x445AC854, Gender = "Female"},
+ {modelName = "a_f_y_bevhills_02", modelHex = 0x5C2CF7F8, Gender = "Female"},
+ {modelName = "a_f_y_bevhills_03", modelHex = 0x20C8012F, Gender = "Female"},
+ {modelName = "a_f_y_bevhills_04", modelHex = 0x36DF2D5D, Gender = "Female"},
+ {modelName = "a_f_y_business_01", modelHex = 0x2799EFD8, Gender = "Female"},
+ {modelName = "a_f_y_business_02", modelHex = 0x31430342, Gender = "Female"},
+ {modelName = "a_f_y_business_03", modelHex = 0xAE86FDB4, Gender = "Female"},
+ {modelName = "a_f_y_business_04", modelHex = 0xB7C61032, Gender = "Female"},
+ {modelName = "a_f_y_eastsa_01", modelHex = 0xF5B0079D, Gender = "Female"},
+ {modelName = "a_f_y_eastsa_02", modelHex = 0x0438A4AE, Gender = "Female"},
+ {modelName = "a_f_y_eastsa_03", modelHex = 0x51C03FA4, Gender = "Female"},
+ {modelName = "a_f_y_epsilon_01", modelHex = 0x689C2A80, Gender = "Female"},
+ {modelName = "a_f_y_femaleagent", modelHex = 0x50610C43, Gender = "Female"},
+ {modelName = "a_f_y_fitness_01", modelHex = 0x457C64FB, Gender = "Female"},
+ {modelName = "a_f_y_fitness_02", modelHex = 0x13C4818C, Gender = "Female"},
+ {modelName = "a_f_y_genhot_01", modelHex = 0x2F4AEC3E, Gender = "Female"},
+ {modelName = "a_f_y_golfer_01", modelHex = 0x7DD8FB58, Gender = "Female"},
+ {modelName = "a_f_y_hiker_01", modelHex = 0x30830813, Gender = "Female"},
+ {modelName = "a_f_y_hippie_01", modelHex = 0x1475B827, Gender = "Female"},
+ {modelName = "a_f_y_hipster_01", modelHex = 0x8247D331, Gender = "Female"},
+ {modelName = "a_f_y_hipster_02", modelHex = 0x97F5FE8D, Gender = "Female"},
+ {modelName = "a_f_y_hipster_03", modelHex = 0xA5BA9A16, Gender = "Female"},
+ {modelName = "a_f_y_hipster_04", modelHex = 0x199881DC, Gender = "Female"},
+ {modelName = "a_f_y_indian_01", modelHex = 0x092D9CC1, Gender = "Female"},
+ {modelName = "a_f_y_juggalo_01", modelHex = 0xDB134533, Gender = "Female"},
+ {modelName = "a_f_y_runner_01", modelHex = 0xC7496729, Gender = "Female"},
+ {modelName = "a_f_y_rurmeth_01", modelHex = 0x3F789426, Gender = "Female"},
+ {modelName = "a_f_y_scdressy_01", modelHex = 0xDB5EC400, Gender = "Female"},
+ {modelName = "a_f_y_skater_01", modelHex = 0x695FE666, Gender = "Female"},
+ {modelName = "a_f_y_soucent_01", modelHex = 0x2C641D7A, Gender = "Female"},
+ {modelName = "a_f_y_soucent_02", modelHex = 0x5A8EF9CF, Gender = "Female"},
+ {modelName = "a_f_y_soucent_03", modelHex = 0x87B25415, Gender = "Female"},
+ {modelName = "a_f_y_tennis_01", modelHex = 0x550C79C6, Gender = "Female"},
+ {modelName = "a_f_y_topless_01", modelHex = 0x9CF26183, Gender = "Female"},
+ {modelName = "a_f_y_tourist_01", modelHex = 0x563B8570, Gender = "Female"},
+ {modelName = "a_f_y_tourist_02", modelHex = 0x9123FB40, Gender = "Female"},
+ {modelName = "a_f_y_vinewood_01", modelHex = 0x19F41F65, Gender = "Female"},
+ {modelName = "a_f_y_vinewood_02", modelHex = 0xDAB6A0EB, Gender = "Female"},
+ {modelName = "a_f_y_vinewood_03", modelHex = 0x379DDAB8, Gender = "Female"},
+ {modelName = "a_f_y_vinewood_04", modelHex = 0xFAE46146, Gender = "Female"},
+ {modelName = "a_f_y_yoga_01", modelHex = 0xC41B062E, Gender = "Female"},
+ {modelName = "a_m_m_acult_01", modelHex = 0x5442C66B, Gender = "Male"},
+ {modelName = "a_m_m_afriamer_01", modelHex = 0xD172497E, Gender = "Male"},
+ {modelName = "a_m_m_beach_01", modelHex = 0x403DB4FD, Gender = "Male"},
+ {modelName = "a_m_m_beach_02", modelHex = 0x787FA588, Gender = "Male"},
+ {modelName = "a_m_m_bevhills_01", modelHex = 0x54DBEE1F, Gender = "Male"},
+ {modelName = "a_m_m_bevhills_02", modelHex = 0x3FB5C3D3, Gender = "Male"},
+ {modelName = "a_m_m_business_01", modelHex = 0x7E6A64B7, Gender = "Male"},
+ {modelName = "a_m_m_eastsa_01", modelHex = 0xF9A6F53F, Gender = "Male"},
+ {modelName = "a_m_m_eastsa_02", modelHex = 0x07DD91AC, Gender = "Male"},
+ {modelName = "a_m_m_farmer_01", modelHex = 0x94562DD7, Gender = "Male"},
+ {modelName = "a_m_m_fatlatin_01", modelHex = 0x61D201B3, Gender = "Male"},
+ {modelName = "a_m_m_genfat_01", modelHex = 0x06DD569F, Gender = "Male"},
+ {modelName = "a_m_m_genfat_02", modelHex = 0x13AEF042, Gender = "Male"},
+ {modelName = "a_m_m_golfer_01", modelHex = 0xA9EB0E42, Gender = "Male"},
+ {modelName = "a_m_m_hasjew_01", modelHex = 0x6BD9B68C, Gender = "Male"},
+ {modelName = "a_m_m_hillbilly_01", modelHex = 0x6C9B2849, Gender = "Male"},
+ {modelName = "a_m_m_hillbilly_02", modelHex = 0x7B0E452F, Gender = "Male"},
+ {modelName = "a_m_m_indian_01", modelHex = 0xDDCAAA2C, Gender = "Male"},
+ {modelName = "a_m_m_ktown_01", modelHex = 0xD15D7E71, Gender = "Male"},
+ {modelName = "a_m_m_malibu_01", modelHex = 0x2FDE6EB7, Gender = "Male"},
+ {modelName = "a_m_m_mexcntry_01", modelHex = 0xDD817EAD, Gender = "Male"},
+ {modelName = "a_m_m_mexlabor_01", modelHex = 0xB25D16B2, Gender = "Male"},
+ {modelName = "a_m_m_og_boss_01", modelHex = 0x681BD012, Gender = "Male"},
+ {modelName = "a_m_m_paparazzi_01", modelHex = 0xECCA8C15, Gender = "Male"},
+ {modelName = "a_m_m_polynesian_01", modelHex = 0xA9D9B69E, Gender = "Male"},
+ {modelName = "a_m_m_prolhost_01", modelHex = 0x9712C38F, Gender = "Male"},
+ {modelName = "a_m_m_rurmeth_01", modelHex = 0x3BAD4184, Gender = "Male"},
+ {modelName = "a_m_m_salton_01", modelHex = 0x4F2E038A, Gender = "Male"},
+ {modelName = "a_m_m_salton_02", modelHex = 0x60F4A717, Gender = "Male"},
+ {modelName = "a_m_m_salton_03", modelHex = 0xB28C4A45, Gender = "Male"},
+ {modelName = "a_m_m_salton_04", modelHex = 0x964511B7, Gender = "Male"},
+ {modelName = "a_m_m_skater_01", modelHex = 0xD9D7588C, Gender = "Male"},
+ {modelName = "a_m_m_skidrow_01", modelHex = 0x01EEA6BD, Gender = "Male"},
+ {modelName = "a_m_m_socenlat_01", modelHex = 0x0B8D69E3, Gender = "Male"},
+ {modelName = "a_m_m_soucent_01", modelHex = 0x6857C9B7, Gender = "Male"},
+ {modelName = "a_m_m_soucent_02", modelHex = 0x9F6D37E1, Gender = "Male"},
+ {modelName = "a_m_m_soucent_03", modelHex = 0x8BD990BA, Gender = "Male"},
+ {modelName = "a_m_m_soucent_04", modelHex = 0xC2FBFEFE, Gender = "Male"},
+ {modelName = "a_m_m_stlat_02", modelHex = 0xC2A87702, Gender = "Male"},
+ {modelName = "a_m_m_tennis_01", modelHex = 0x546A5344, Gender = "Male"},
+ {modelName = "a_m_m_tourist_01", modelHex = 0xC89F0184, Gender = "Male"},
+ {modelName = "a_m_m_tramp_01", modelHex = 0x1EC93FD0, Gender = "Male"},
+ {modelName = "a_m_m_trampbeac_01", modelHex = 0x53B57EB0, Gender = "Male"},
+ {modelName = "a_m_m_tranvest_01", modelHex = 0xE0E69974, Gender = "Male"},
+ {modelName = "a_m_m_tranvest_02", modelHex = 0xF70EC5C4, Gender = "Male"},
+ {modelName = "a_m_o_acult_01", modelHex = 0x55446010, Gender = "Male"},
+ {modelName = "a_m_o_acult_02", modelHex = 0x4BA14CCA, Gender = "Male"},
+ {modelName = "a_m_o_beach_01", modelHex = 0x8427D398, Gender = "Male"},
+ {modelName = "a_m_o_genstreet_01", modelHex = 0xAD54E7A8, Gender = "Male"},
+ {modelName = "a_m_o_ktown_01", modelHex = 0x1536D95A, Gender = "Male"},
+ {modelName = "a_m_o_salton_01", modelHex = 0x20208E4D, Gender = "Male"},
+ {modelName = "a_m_o_soucent_01", modelHex = 0x2AD8921B, Gender = "Male"},
+ {modelName = "a_m_o_soucent_02", modelHex = 0x4086BD77, Gender = "Male"},
+ {modelName = "a_m_o_soucent_03", modelHex = 0x0E32D8D0, Gender = "Male"},
+ {modelName = "a_m_o_tramp_01", modelHex = 0x174D4245, Gender = "Male"},
+ {modelName = "a_m_y_acult_01", modelHex = 0xB564882B, Gender = "Male"},
+ {modelName = "a_m_y_acult_02", modelHex = 0x80E59F2E, Gender = "Male"},
+ {modelName = "a_m_y_beach_01", modelHex = 0xD1FEB884, Gender = "Male"},
+ {modelName = "a_m_y_beach_02", modelHex = 0x23C7DC11, Gender = "Male"},
+ {modelName = "a_m_y_beach_03", modelHex = 0xE7A963D9, Gender = "Male"},
+ {modelName = "a_m_y_beachvesp_01", modelHex = 0x7E0961B8, Gender = "Male"},
+ {modelName = "a_m_y_beachvesp_02", modelHex = 0xCA56FA52, Gender = "Male"},
+ {modelName = "a_m_y_bevhills_01", modelHex = 0x76284640, Gender = "Male"},
+ {modelName = "a_m_y_bevhills_02", modelHex = 0x668BA707, Gender = "Male"},
+ {modelName = "a_m_y_breakdance_01", modelHex = 0x379F9596, Gender = "Male"},
+ {modelName = "a_m_y_busicas_01", modelHex = 0x9AD32FE9, Gender = "Male"},
+ {modelName = "a_m_y_business_01", modelHex = 0xC99F21C4, Gender = "Male"},
+ {modelName = "a_m_y_business_02", modelHex = 0xB3B3F5E6, Gender = "Male"},
+ {modelName = "a_m_y_business_03", modelHex = 0xA1435105, Gender = "Male"},
+ {modelName = "a_m_y_cyclist_01", modelHex = 0xFDC653C7, Gender = "Male"},
+ {modelName = "a_m_y_dhill_01", modelHex = 0xFF3E88AB, Gender = "Male"},
+ {modelName = "a_m_y_downtown_01", modelHex = 0x2DADF4AA, Gender = "Male"},
+ {modelName = "a_m_y_eastsa_01", modelHex = 0xA4471173, Gender = "Male"},
+ {modelName = "a_m_y_eastsa_02", modelHex = 0x168775F6, Gender = "Male"},
+ {modelName = "a_m_y_epsilon_01", modelHex = 0x77D41A3E, Gender = "Male"},
+ {modelName = "a_m_y_epsilon_02", modelHex = 0xAA82FF9B, Gender = "Male"},
+ {modelName = "a_m_y_gay_01", modelHex = 0xD1CCE036, Gender = "Male"},
+ {modelName = "a_m_y_gay_02", modelHex = 0xA5720781, Gender = "Male"},
+ {modelName = "a_m_y_genstreet_01", modelHex = 0x9877EF71, Gender = "Male"},
+ {modelName = "a_m_y_genstreet_02", modelHex = 0x3521A8D2, Gender = "Male"},
+ {modelName = "a_m_y_golfer_01", modelHex = 0xD71FE131, Gender = "Male"},
+ {modelName = "a_m_y_hasjew_01", modelHex = 0xE16D8F01, Gender = "Male"},
+ {modelName = "a_m_y_hiker_01", modelHex = 0x50F73C0C, Gender = "Male"},
+ {modelName = "a_m_y_hippy_01", modelHex = 0x7D03E617, Gender = "Male"},
+ {modelName = "a_m_y_hipster_01", modelHex = 0x2307A353, Gender = "Male"},
+ {modelName = "a_m_y_hipster_02", modelHex = 0x14D506EE, Gender = "Male"},
+ {modelName = "a_m_y_hipster_03", modelHex = 0x4E4179C6, Gender = "Male"},
+ {modelName = "a_m_y_indian_01", modelHex = 0x2A22FBCE, Gender = "Male"},
+ {modelName = "a_m_y_jetski_01", modelHex = 0x2DB7EEF3, Gender = "Male"},
+ {modelName = "a_m_y_juggalo_01", modelHex = 0x91CA3E2C, Gender = "Male"},
+ {modelName = "a_m_y_ktown_01", modelHex = 0x1AF6542C, Gender = "Male"},
+ {modelName = "a_m_y_ktown_02", modelHex = 0x297FF13F, Gender = "Male"},
+ {modelName = "a_m_y_latino_01", modelHex = 0x132C1A8E, Gender = "Male"},
+ {modelName = "a_m_y_methhead_01", modelHex = 0x696BE0A9, Gender = "Male"},
+ {modelName = "a_m_y_mexthug_01", modelHex = 0x3053E555, Gender = "Male"},
+ {modelName = "a_m_y_motox_01", modelHex = 0x64FDEA7D, Gender = "Male"},
+ {modelName = "a_m_y_motox_02", modelHex = 0x77AC8FDA, Gender = "Male"},
+ {modelName = "a_m_y_musclbeac_01", modelHex = 0x4B652906, Gender = "Male"},
+ {modelName = "a_m_y_musclbeac_02", modelHex = 0xC923247C, Gender = "Male"},
+ {modelName = "a_m_y_polynesian_01", modelHex = 0x8384FC9F, Gender = "Male"},
+ {modelName = "a_m_y_roadcyc_01", modelHex = 0xF561A4C6, Gender = "Male"},
+ {modelName = "a_m_y_runner_01", modelHex = 0x25305EEE, Gender = "Male"},
+ {modelName = "a_m_y_runner_02", modelHex = 0x843D9D0F, Gender = "Male"},
+ {modelName = "a_m_y_salton_01", modelHex = 0xD7606C30, Gender = "Male"},
+ {modelName = "a_m_y_skater_01", modelHex = 0xC1C46677, Gender = "Male"},
+ {modelName = "a_m_y_skater_02", modelHex = 0xAFFAC2E4, Gender = "Male"},
+ {modelName = "a_m_y_soucent_01", modelHex = 0xE716BDCB, Gender = "Male"},
+ {modelName = "a_m_y_soucent_02", modelHex = 0xACA3C8CA, Gender = "Male"},
+ {modelName = "a_m_y_soucent_03", modelHex = 0xC3F0F764, Gender = "Male"},
+ {modelName = "a_m_y_soucent_04", modelHex = 0x8A3703F1, Gender = "Male"},
+ {modelName = "a_m_y_stbla_01", modelHex = 0xCF92ADE9, Gender = "Male"},
+ {modelName = "a_m_y_stbla_02", modelHex = 0x98C7404F, Gender = "Male"},
+ {modelName = "a_m_y_stlat_01", modelHex = 0x8674D5FC, Gender = "Male"},
+ {modelName = "a_m_y_stwhi_01", modelHex = 0x2418C430, Gender = "Male"},
+ {modelName = "a_m_y_stwhi_02", modelHex = 0x36C6E98C, Gender = "Male"},
+ {modelName = "a_m_y_sunbathe_01", modelHex = 0xB7292F0C, Gender = "Male"},
+ {modelName = "a_m_y_surfer_01", modelHex = 0xEAC2C7EE, Gender = "Male"},
+ {modelName = "a_m_y_vindouche_01", modelHex = 0xC19377E7, Gender = "Male"},
+ {modelName = "a_m_y_vinewood_01", modelHex = 0x4B64199D, Gender = "Male"},
+ {modelName = "a_m_y_vinewood_02", modelHex = 0x5D15BD00, Gender = "Male"},
+ {modelName = "a_m_y_vinewood_03", modelHex = 0x1FDF4294, Gender = "Male"},
+ {modelName = "a_m_y_vinewood_04", modelHex = 0x31C9E669, Gender = "Male"},
+ {modelName = "a_m_y_yoga_01", modelHex = 0xAB0A7155, Gender = "Male"},
+ {modelName = "cs_amandatownley", modelHex = 0x95EF18E3, Gender = "Female"},
+ {modelName = "cs_andreas", modelHex = 0xE7565327, Gender = "Male"},
+ {modelName = "cs_ashley", modelHex = 0x26C3D079, Gender = "Female"},
+ {modelName = "cs_bankman", modelHex = 0x9760192E, Gender = "Male"},
+ {modelName = "cs_barry", modelHex = 0x69591CF7, Gender = "Male"},
+ {modelName = "cs_beverly", modelHex = 0xB46EC356, Gender = "Male"},
+ {modelName = "cs_brad", modelHex = 0xEFE5AFE6, Gender = "Male"},
+ {modelName = "cs_bradcadaver", modelHex = 0x7228AF60, Gender = "Male"},
+ {modelName = "cs_carbuyer", modelHex = 0x8CCE790F, Gender = "Male"},
+ {modelName = "cs_casey", modelHex = 0xEA969C40, Gender = "Male"},
+ {modelName = "cs_chengsr", modelHex = 0x30DB9D7B, Gender = "Male"},
+ {modelName = "cs_chrisformage", modelHex = 0xC1F380E6, Gender = "Male"},
+ {modelName = "cs_clay", modelHex = 0xDBCB9834, Gender = "Male"},
+ {modelName = "cs_dale", modelHex = 0x0CE81655, Gender = "Male"},
+ {modelName = "cs_davenorton", modelHex = 0x8587248C, Gender = "Male"},
+ {modelName = "cs_debra", modelHex = 0xECD04FE9, Gender = "Female"},
+ {modelName = "cs_denise", modelHex = 0x6F802738, Gender = "Female"},
+ {modelName = "cs_devin", modelHex = 0x2F016D02, Gender = "Male"},
+ {modelName = "cs_dom", modelHex = 0x4772AF42, Gender = "Male"},
+ {modelName = "cs_dreyfuss", modelHex = 0x3C60A153, Gender = "Male"},
+ {modelName = "cs_drfriedlander", modelHex = 0xA3A35C2F, Gender = "Male"},
+ {modelName = "cs_fabien", modelHex = 0x47035EC1, Gender = "Male"},
+ {modelName = "cs_fbisuit_01", modelHex = 0x585C0B52, Gender = "Male"},
+ {modelName = "cs_floyd", modelHex = 0x062547E7, Gender = "Male"},
+ {modelName = "cs_guadalope", modelHex = 0x0F9513F1, Gender = "Male"},
+ {modelName = "cs_gurk", modelHex = 0xC314F727, Gender = "Female"},
+ {modelName = "cs_hunter", modelHex = 0x5B44892C, Gender = "Male"},
+ {modelName = "cs_janet", modelHex = 0x3034F9E2, Gender = "Female"},
+ {modelName = "cs_jewelass", modelHex = 0x4440A804, Gender = "Female"},
+ {modelName = "cs_jimmyboston", modelHex = 0x039677BD, Gender = "Male"},
+ {modelName = "cs_jimmydisanto", modelHex = 0xB8CC92B4, Gender = "Male"},
+ {modelName = "cs_joeminuteman", modelHex = 0xF09D5E29, Gender = "Male"},
+ {modelName = "cs_johnnyklebitz", modelHex = 0xFA8AB881, Gender = "Male"},
+ {modelName = "cs_josef", modelHex = 0x459762CA, Gender = "Male"},
+ {modelName = "cs_josh", modelHex = 0x450EEF9D, Gender = "Male"},
+ {modelName = "cs_karen_daniels", modelHex = 0x4BAF381C, Gender = "Female"},
+ {modelName = "cs_lamardavis", modelHex = 0x45463A0D, Gender = "Male"},
+ {modelName = "cs_lazlow", modelHex = 0x38951A1B, Gender = "Male"},
+ {modelName = "cs_lestercrest", modelHex = 0xB594F5C3, Gender = "Male"},
+ {modelName = "cs_lifeinvad_01", modelHex = 0x72551375, Gender = "Male"},
+ {modelName = "cs_magenta", modelHex = 0x5816C61A, Gender = "Female"},
+ {modelName = "cs_manuel", modelHex = 0xFBB374CA, Gender = "Male"},
+ {modelName = "cs_marnie", modelHex = 0x574DE134, Gender = "Female"},
+ {modelName = "cs_martinmadrazo", modelHex = 0x43595670, Gender = "Male"},
+ {modelName = "cs_maryann", modelHex = 0x0998C7AD, Gender = "Female"},
+ {modelName = "cs_michelle", modelHex = 0x70AEB9C8, Gender = "Female"},
+ {modelName = "cs_milton", modelHex = 0xB76A330F, Gender = "Male"},
+ {modelName = "cs_molly", modelHex = 0x45918E44, Gender = "Female"},
+ {modelName = "cs_movpremf_01", modelHex = 0x4BBA84D9, Gender = "Female"},
+ {modelName = "cs_movpremmale", modelHex = 0x8D67EE7D, Gender = "Male"},
+ {modelName = "cs_mrk", modelHex = 0xC3CC9A75, Gender = "Male"},
+ {modelName = "cs_mrs_thornhill", modelHex = 0x4F921E6E, Gender = "Female"},
+ {modelName = "cs_mrsphillips", modelHex = 0xCBFDA3CF, Gender = "Female"},
+ {modelName = "cs_natalia", modelHex = 0x4EFEB1F0, Gender = "Female"},
+ {modelName = "cs_nervousron", modelHex = 0x7896DA94, Gender = "Male"},
+ {modelName = "cs_nigel", modelHex = 0xE1479C0B, Gender = "Male"},
+ {modelName = "cs_old_man1a", modelHex = 0x1EEC7BDC, Gender = "Male"},
+ {modelName = "cs_old_man2", modelHex = 0x98F9E770, Gender = "Male"},
+ {modelName = "cs_omega", modelHex = 0x8B70B405, Gender = "Male"},
+ {modelName = "cs_orleans", modelHex = 0xAD340F5A, Gender = "Male"},
+ {modelName = "cs_paper", modelHex = 0x6B38B8F8, Gender = "Male"},
+ {modelName = "cs_patricia", modelHex = 0xDF8B1301, Gender = "Female"},
+ {modelName = "cs_priest", modelHex = 0x4D6DE57E, Gender = "Male"},
+ {modelName = "cs_prolsec_02", modelHex = 0x1E9314A2, Gender = "Male"},
+ {modelName = "cs_russiandrunk", modelHex = 0x46521A32, Gender = "Male"},
+ {modelName = "cs_siemonyetarian", modelHex = 0xC0937202, Gender = "Male"},
+ {modelName = "cs_solomon", modelHex = 0xF6D1E04E, Gender = "Male"},
+ {modelName = "cs_stevehains", modelHex = 0xA4E0A1FE, Gender = "Male"},
+ {modelName = "cs_stretch", modelHex = 0x893D6805, Gender = "Male"},
+ {modelName = "cs_tanisha", modelHex = 0x42FE5370, Gender = "Female"},
+ {modelName = "cs_taocheng", modelHex = 0x8864083D, Gender = "Male"},
+ {modelName = "cs_taostranslator", modelHex = 0x53536529, Gender = "Male"},
+ {modelName = "cs_tenniscoach", modelHex = 0x5C26040A, Gender = "Male"},
+ {modelName = "cs_terry", modelHex = 0x3A5201C5, Gender = "Male"},
+ {modelName = "cs_tom", modelHex = 0x69E8ABC3, Gender = "Male"},
+ {modelName = "cs_tomepsilon", modelHex = 0x8C0FD4E2, Gender = "Male"},
+ {modelName = "cs_tracydisanto", modelHex = 0x0609B130, Gender = "Female"},
+ {modelName = "cs_wade", modelHex = 0xD266D9D6, Gender = "Male"},
+ {modelName = "cs_zimbor", modelHex = 0xEAACAAF0, Gender = "Male"},
+ {modelName = "csb_abigail", modelHex = 0x89768941, Gender = "Female"},
+ {modelName = "csb_agent", modelHex = 0xD770C9B4, Gender = "Male"},
+ {modelName = "csb_anita", modelHex = 0x0703F106, Gender = "Female"},
+ {modelName = "csb_anton", modelHex = 0xA5C787B6, Gender = "Male"},
+ {modelName = "csb_ballasog", modelHex = 0xABEF0004, Gender = "Male"},
+ {modelName = "csb_bride", modelHex = 0x82BF7EA1, Gender = "Female"},
+ {modelName = "csb_burgerdrug", modelHex = 0x8CDCC057, Gender = "Male"},
+ {modelName = "csb_car3guy1", modelHex = 0x04430687, Gender = "Male"},
+ {modelName = "csb_car3guy2", modelHex = 0x1383A508, Gender = "Male"},
+ {modelName = "csb_chef", modelHex = 0xA347CA8A, Gender = "Male"},
+ {modelName = "csb_chef2", modelHex = 0xAE5BE23A, Gender = "Male"},
+ {modelName = "csb_chin_goon", modelHex = 0xA8C22996, Gender = "Male"},
+ {modelName = "csb_cletus", modelHex = 0xCAE9E5D5, Gender = "Male"},
+ {modelName = "csb_cop", modelHex = 0x9AB35F63, Gender = "Male"},
+ {modelName = "csb_customer", modelHex = 0xA44F6F8B, Gender = "Male"},
+ {modelName = "csb_denise_friend", modelHex = 0xB58D2529, Gender = "Female"},
+ {modelName = "csb_fos_rep", modelHex = 0x1BCC157B, Gender = "Male"},
+ {modelName = "csb_g", modelHex = 0xA28E71D7, Gender = "Male"},
+ {modelName = "csb_groom", modelHex = 0x7AAB19D2, Gender = "Male"},
+ {modelName = "csb_grove_str_dlr", modelHex = 0xE8594E22, Gender = "Male"},
+ {modelName = "csb_hao", modelHex = 0xEC9E8F1C, Gender = "Male"},
+ {modelName = "csb_hugh", modelHex = 0x6F139B54, Gender = "Male"},
+ {modelName = "csb_imran", modelHex = 0xE3420BDB, Gender = "Male"},
+ {modelName = "csb_jackhowitzer", modelHex = 0x44BC7BB1, Gender = "Male"},
+ {modelName = "csb_janitor", modelHex = 0xC2005A40, Gender = "Male"},
+ {modelName = "csb_maude", modelHex = 0xBCC475CB, Gender = "Female"},
+ {modelName = "csb_money", modelHex = 0x989DFD9A, Gender = "Male"},
+ {modelName = "csb_mp_agent14", modelHex = 0x6DBBFC8B, Gender = "Male"},
+ {modelName = "csb_mweather", modelHex = 0x613E626C, Gender = "Male"},
+ {modelName = "csb_ortega", modelHex = 0xC0DB04CF, Gender = "Male"},
+ {modelName = "csb_oscar", modelHex = 0xF41F399B, Gender = "Male"},
+ {modelName = "csb_paige", modelHex = 0x5B1FA0C3, Gender = "Female"},
+ {modelName = "csb_popov", modelHex = 0x617D89E2, Gender = "Male"},
+ {modelName = "csb_porndudes", modelHex = 0x2F4AFE35, Gender = "Male"},
+ {modelName = "csb_prologuedriver", modelHex = 0xF00B49DB, Gender = "Male"},
+ {modelName = "csb_prolsec", modelHex = 0x7FA2F024, Gender = "Male"},
+ {modelName = "csb_ramp_gang", modelHex = 0xC2800DBE, Gender = "Male"},
+ {modelName = "csb_ramp_hic", modelHex = 0x858C94B8, Gender = "Male"},
+ {modelName = "csb_ramp_hipster", modelHex = 0x21F58BB4, Gender = "Male"},
+ {modelName = "csb_ramp_marine", modelHex = 0x616C97B9, Gender = "Male"},
+ {modelName = "csb_ramp_mex", modelHex = 0xF64ED7D0, Gender = "Male"},
+ {modelName = "csb_rashcosvki", modelHex = 0x188099A9, Gender = "Male"},
+ {modelName = "csb_reporter", modelHex = 0x2E420A24, Gender = "Male"},
+ {modelName = "csb_roccopelosi", modelHex = 0xAA64168C, Gender = "Male"},
+ {modelName = "csb_screen_writer", modelHex = 0x8BE12CEC, Gender = "Male"},
+ {modelName = "csb_stripper_01", modelHex = 0xAEEA76B5, Gender = "Female"},
+ {modelName = "csb_stripper_02", modelHex = 0x81441B71, Gender = "Female"},
+ {modelName = "csb_tonya", modelHex = 0x6343DD19, Gender = "Female"},
+ {modelName = "csb_trafficwarden", modelHex = 0xDE2937F3, Gender = "Male"},
+ {modelName = "csb_undercover", modelHex = 0xEF785A6A, Gender = "Male"},
+ {modelName = "csb_vagspeak", modelHex = 0x48FF4CA9, Gender = "Male"},
+ {modelName = "g_f_importexport_01", modelHex = 0x84A1B11A, Gender = "Female"},
+ {modelName = "g_f_y_ballas_01", modelHex = 0x158C439C, Gender = "Female"},
+ {modelName = "g_f_y_families_01", modelHex = 0x4E0CE5D3, Gender = "Female"},
+ {modelName = "g_f_y_lost_01", modelHex = 0xFD5537DE, Gender = "Female"},
+ {modelName = "g_f_y_vagos_01", modelHex = 0x5AA42C21, Gender = "Female"},
+ {modelName = "g_m_importexport_01", modelHex = 0xBCA2CCEA, Gender = "Male"},
+ {modelName = "g_m_m_armboss_01", modelHex = 0xF1E823A2, Gender = "Male"},
+ {modelName = "g_m_m_armgoon_01", modelHex = 0xFDA94268, Gender = "Male"},
+ {modelName = "g_m_m_armlieut_01", modelHex = 0xE7714013, Gender = "Male"},
+ {modelName = "g_m_m_chemwork_01", modelHex = 0xF6157D8F, Gender = "Male"},
+ {modelName = "g_m_m_chiboss_01", modelHex = 0xB9DD0300, Gender = "Male"},
+ {modelName = "g_m_m_chicold_01", modelHex = 0x106D9A99, Gender = "Male"},
+ {modelName = "g_m_m_chigoon_01", modelHex = 0x7E4F763F, Gender = "Male"},
+ {modelName = "g_m_m_chigoon_02", modelHex = 0xFF71F826, Gender = "Male"},
+ {modelName = "g_m_m_korboss_01", modelHex = 0x352A026F, Gender = "Male"},
+ {modelName = "g_m_m_mexboss_01", modelHex = 0x5761F4AD, Gender = "Male"},
+ {modelName = "g_m_m_mexboss_02", modelHex = 0x4914D813, Gender = "Male"},
+ {modelName = "g_m_y_armgoon_02", modelHex = 0xC54E878A, Gender = "Male"},
+ {modelName = "g_m_y_azteca_01", modelHex = 0x68709618, Gender = "Male"},
+ {modelName = "g_m_y_ballaeast_01", modelHex = 0xF42EE883, Gender = "Male"},
+ {modelName = "g_m_y_ballaorig_01", modelHex = 0x231AF63F, Gender = "Male"},
+ {modelName = "g_m_y_ballasout_01", modelHex = 0x23B88069, Gender = "Male"},
+ {modelName = "g_m_y_famca_01", modelHex = 0xE83B93B7, Gender = "Male"},
+ {modelName = "g_m_y_famdnf_01", modelHex = 0xDB729238, Gender = "Male"},
+ {modelName = "g_m_y_famfor_01", modelHex = 0x84302B09, Gender = "Male"},
+ {modelName = "g_m_y_korean_01", modelHex = 0x247502A9, Gender = "Male"},
+ {modelName = "g_m_y_korean_02", modelHex = 0x8FEDD989, Gender = "Male"},
+ {modelName = "g_m_y_korlieut_01", modelHex = 0x7CCBE17A, Gender = "Male"},
+ {modelName = "g_m_y_lost_01", modelHex = 0x4F46D607, Gender = "Male"},
+ {modelName = "g_m_y_lost_02", modelHex = 0x3D843282, Gender = "Male"},
+ {modelName = "g_m_y_lost_03", modelHex = 0x32B11CDC, Gender = "Male"},
+ {modelName = "g_m_y_mexgang_01", modelHex = 0xBDDD5546, Gender = "Male"},
+ {modelName = "g_m_y_mexgoon_01", modelHex = 0x26EF3426, Gender = "Male"},
+ {modelName = "g_m_y_mexgoon_02", modelHex = 0x31A3498E, Gender = "Male"},
+ {modelName = "g_m_y_mexgoon_03", modelHex = 0x964D12DC, Gender = "Male"},
+ {modelName = "g_m_y_pologoon_01", modelHex = 0x4F3FBA06, Gender = "Male"},
+ {modelName = "g_m_y_pologoon_02", modelHex = 0xA2E86156, Gender = "Male"},
+ {modelName = "g_m_y_salvaboss_01", modelHex = 0x905CE0CA, Gender = "Male"},
+ {modelName = "g_m_y_salvagoon_01", modelHex = 0x278C8CB7, Gender = "Male"},
+ {modelName = "g_m_y_salvagoon_02", modelHex = 0x3273A285, Gender = "Male"},
+ {modelName = "g_m_y_salvagoon_03", modelHex = 0x03B8C510, Gender = "Male"},
+ {modelName = "g_m_y_strpunk_01", modelHex = 0xFD1C49BB, Gender = "Male"},
+ {modelName = "g_m_y_strpunk_02", modelHex = 0x0DA1EAC6, Gender = "Male"},
+ {modelName = "hc_driver", modelHex = 0x3B474ADF, Gender = "Male"},
+ {modelName = "hc_gunman", modelHex = 0x0B881AEE, Gender = "Male"},
+ {modelName = "hc_hacker", modelHex = 0x99BB00F8, Gender = "Male"},
+ {modelName = "ig_abigail", modelHex = 0x400AEC41, Gender = "Female"},
+ {modelName = "ig_agent", modelHex = 0x246AF208, Gender = "Male"},
+ {modelName = "ig_amandatownley", modelHex = 0x6D1E15F7, Gender = "Female"},
+ {modelName = "ig_andreas", modelHex = 0x47E4EEA0, Gender = "Male"},
+ {modelName = "ig_ashley", modelHex = 0x7EF440DB, Gender = "Female"},
+ {modelName = "ig_avon", modelHex = 0xFCE270C2, Gender = "Male"},
+ {modelName = "ig_ballasog", modelHex = 0xA70B4A92, Gender = "Male"},
+ {modelName = "ig_bankman", modelHex = 0x909D9E7F, Gender = "Male"},
+ {modelName = "ig_barry", modelHex = 0x2F8845A3, Gender = "Male"},
+ {modelName = "ig_benny", modelHex = 0xC4B715D2, Gender = "Male"},
+ {modelName = "ig_bestmen", modelHex = 0x5746CD96, Gender = "Male"},
+ {modelName = "ig_beverly", modelHex = 0xBDA21E5C, Gender = "Female"},
+ {modelName = "ig_brad", modelHex = 0xBDBB4922, Gender = "Male"},
+ {modelName = "ig_bride", modelHex = 0x6162EC47, Gender = "Female"},
+ {modelName = "ig_car3guy1", modelHex = 0x84F9E937, Gender = "Male"},
+ {modelName = "ig_car3guy2", modelHex = 0x75C34ACA, Gender = "Male"},
+ {modelName = "ig_casey", modelHex = 0xE0FA2554, Gender = "Male"},
+ {modelName = "ig_chef", modelHex = 0x49EADBF6, Gender = "Male"},
+ {modelName = "ig_chef2", modelHex = 0x85889AC3, Gender = "Male"},
+ {modelName = "ig_chengsr", modelHex = 0xAAE4EA7B, Gender = "Male"},
+ {modelName = "ig_chrisformage", modelHex = 0x286E54A7, Gender = "Male"},
+ {modelName = "ig_clay", modelHex = 0x6CCFE08A, Gender = "Male"},
+ {modelName = "ig_claypain", modelHex = 0x9D0087A8, Gender = "Male"},
+ {modelName = "ig_cletus", modelHex = 0xE6631195, Gender = "Male"},
+ {modelName = "ig_dale", modelHex = 0x467415E9, Gender = "Male"},
+ {modelName = "ig_davenorton", modelHex = 0x15CD4C33, Gender = "Male"},
+ {modelName = "ig_denise", modelHex = 0x820B33BD, Gender = "Female"},
+ {modelName = "ig_devin", modelHex = 0x7461A0B0, Gender = "Male"},
+ {modelName = "ig_dom", modelHex = 0x9C2DB088, Gender = "Male"},
+ {modelName = "ig_dreyfuss", modelHex = 0xDA890932, Gender = "Male"},
+ {modelName = "ig_drfriedlander", modelHex = 0xCBFC0DF5, Gender = "Male"},
+ {modelName = "ig_fabien", modelHex = 0xD090C350, Gender = "Male"},
+ {modelName = "ig_fbisuit_01", modelHex = 0x3AE4A33B, Gender = "Male"},
+ {modelName = "ig_floyd", modelHex = 0xB1B196B2, Gender = "Male"},
+ {modelName = "ig_g", modelHex = 0x841BA933, Gender = "Male"},
+ {modelName = "ig_groom", modelHex = 0xFECE8B85, Gender = "Male"},
+ {modelName = "ig_hao", modelHex = 0x65978363, Gender = "Male"},
+ {modelName = "ig_hunter", modelHex = 0xCE1324DE, Gender = "Male"},
+ {modelName = "ig_janet", modelHex = 0x0D6D9C49, Gender = "Female"},
+ {modelName = "ig_jay_norris", modelHex = 0x7A32EE74, Gender = "Male"},
+ {modelName = "ig_jewelass", modelHex = 0x0F5D26BB, Gender = "Female"},
+ {modelName = "ig_jimmyboston", modelHex = 0xEDA0082D, Gender = "Male"},
+ {modelName = "ig_jimmydisanto", modelHex = 0x570462B9, Gender = "Male"},
+ {modelName = "ig_joeminuteman", modelHex = 0xBE204C9B, Gender = "Male"},
+ {modelName = "ig_johnnyklebitz", modelHex = 0x87CA80AE, Gender = "Male"},
+ {modelName = "ig_josef", modelHex = 0xE11A9FB4, Gender = "Male"},
+ {modelName = "ig_josh", modelHex = 0x799E9EEE, Gender = "Male"},
+ {modelName = "ig_karen_daniels", modelHex = 0xEB51D959, Gender = "Female"},
+ {modelName = "ig_kerrymcintosh", modelHex = 0x5B3BD90D, Gender = "Female"},
+ {modelName = "ig_lamardavis", modelHex = 0x65B93076, Gender = "Male"},
+ {modelName = "ig_lazlow", modelHex = 0xDFE443E5, Gender = "Male"},
+ {modelName = "ig_lestercrest_2", modelHex = 0x6E42FD26, Gender = "Male"},
+ {modelName = "ig_lestercrest", modelHex = 0x4DA6E849, Gender = "Male"},
+ {modelName = "ig_lifeinvad_01", modelHex = 0x5389A93C, Gender = "Male"},
+ {modelName = "ig_lifeinvad_02", modelHex = 0x27BD51D4, Gender = "Male"},
+ {modelName = "ig_magenta", modelHex = 0xFCDC910A, Gender = "Female"},
+ {modelName = "ig_malc", modelHex = 0xF1BCA919, Gender = "Male"},
+ {modelName = "ig_manuel", modelHex = 0xFD418E10, Gender = "Male"},
+ {modelName = "ig_marnie", modelHex = 0x188232D0, Gender = "Female"},
+ {modelName = "ig_maryann", modelHex = 0xA36F9806, Gender = "Female"},
+ {modelName = "ig_maude", modelHex = 0x3BE8287E, Gender = "Female"},
+ {modelName = "ig_michelle", modelHex = 0xBF9672F4, Gender = "Female"},
+ {modelName = "ig_milton", modelHex = 0xCB3059B2, Gender = "Male"},
+ {modelName = "ig_molly", modelHex = 0xAF03DDE1, Gender = "Female"},
+ {modelName = "ig_money", modelHex = 0x37FACDA6, Gender = "Male"},
+ {modelName = "ig_mp_agent14", modelHex = 0xFBF98469, Gender = "Male"},
+ {modelName = "ig_mrk", modelHex = 0xEDDCAB6D, Gender = "Male"},
+ {modelName = "ig_mrs_thornhill", modelHex = 0x1E04A96B, Gender = "Female"},
+ {modelName = "ig_mrsphillips", modelHex = 0x3862EEA8, Gender = "Female"},
+ {modelName = "ig_natalia", modelHex = 0xDE17DD3B, Gender = "Female"},
+ {modelName = "ig_nervousron", modelHex = 0xBD006AF1, Gender = "Male"},
+ {modelName = "ig_nigel", modelHex = 0xC8B7167D, Gender = "Male"},
+ {modelName = "ig_old_man1a", modelHex = 0x719D27F4, Gender = "Male"},
+ {modelName = "ig_old_man2", modelHex = 0xEF154C47, Gender = "Male"},
+ {modelName = "ig_omega", modelHex = 0x60E6A7D8, Gender = "Male"},
+ {modelName = "ig_oneil", modelHex = 0x2DC6D3E7, Gender = "Male"},
+ {modelName = "ig_orleans", modelHex = 0x61D4C771, Gender = "Male"},
+ {modelName = "ig_ortega", modelHex = 0x26A562B7, Gender = "Male"},
+ {modelName = "ig_paige", modelHex = 0x154FCF3F, Gender = "Female"},
+ {modelName = "ig_paper", modelHex = 0x999B00C6, Gender = "Male"},
+ {modelName = "ig_patricia", modelHex = 0xC56E118C, Gender = "Female"},
+ {modelName = "ig_popov", modelHex = 0x267630FE, Gender = "Male"},
+ {modelName = "ig_priest", modelHex = 0x6437E77D, Gender = "Male"},
+ {modelName = "ig_prolsec_02", modelHex = 0x27B3AD75, Gender = "Male"},
+ {modelName = "ig_ramp_gang", modelHex = 0xE52E126C, Gender = "Male"},
+ {modelName = "ig_ramp_hic", modelHex = 0x45753032, Gender = "Male"},
+ {modelName = "ig_ramp_hipster", modelHex = 0xDEEF9F6E, Gender = "Male"},
+ {modelName = "ig_ramp_mex", modelHex = 0xE6AC74A4, Gender = "Male"},
+ {modelName = "ig_rashcosvki", modelHex = 0x380C4DE6, Gender = "Male"},
+ {modelName = "ig_roccopelosi", modelHex = 0xD5BA52FF, Gender = "Male"},
+ {modelName = "ig_russiandrunk", modelHex = 0x3D0A5EB1, Gender = "Male"},
+ {modelName = "ig_screen_writer", modelHex = 0xFFE63677, Gender = "Male"},
+ {modelName = "ig_siemonyetarian", modelHex = 0x4C7B2F05, Gender = "Male"},
+ {modelName = "ig_solomon", modelHex = 0x86BDFE26, Gender = "Male"},
+ {modelName = "ig_stevehains", modelHex = 0x382121C8, Gender = "Male"},
+ {modelName = "ig_stretch", modelHex = 0x36984358, Gender = "Male"},
+ {modelName = "ig_talina", modelHex = 0xE793C8E8, Gender = "Female"},
+ {modelName = "ig_tanisha", modelHex = 0x0D810489, Gender = "Female"},
+ {modelName = "ig_taocheng", modelHex = 0xDC5C5EA5, Gender = "Male"},
+ {modelName = "ig_taostranslator", modelHex = 0x7C851464, Gender = "Male"},
+ {modelName = "ig_tenniscoach", modelHex = 0xA23B5F57, Gender = "Male"},
+ {modelName = "ig_terry", modelHex = 0x67000B94, Gender = "Male"},
+ {modelName = "ig_tomepsilon", modelHex = 0xCD777AAA, Gender = "Male"},
+ {modelName = "ig_tonya", modelHex = 0xCAC85344, Gender = "Female"},
+ {modelName = "ig_tracydisanto", modelHex = 0xDE352A35, Gender = "Female"},
+ {modelName = "ig_trafficwarden", modelHex = 0x5719786D, Gender = "Male"},
+ {modelName = "ig_tylerdix", modelHex = 0x5265F707, Gender = "Male"},
+ {modelName = "ig_vagspeak", modelHex = 0xF9FD068C, Gender = "Male"},
+ {modelName = "ig_wade", modelHex = 0x92991B72, Gender = "Male"},
+ {modelName = "ig_zimbor", modelHex = 0x0B34D6F5, Gender = "Male"},
+ {modelName = "mp_f_boatstaff_01", modelHex = 0x3293B9CE, Gender = "Female"},
+ {modelName = "mp_f_cardesign_01", modelHex = 0x242C34A7, Gender = "Female"},
+ {modelName = "mp_f_chbar_01", modelHex = 0xC3F6E385, Gender = "Female"},
+ {modelName = "mp_f_cocaine_01", modelHex = 0x4B657AF8, Gender = "Female"},
+ {modelName = "mp_f_counterfeit_01", modelHex = 0xB788F1F5, Gender = "Female"},
+ {modelName = "mp_f_deadhooker", modelHex = 0x73DEA88B, Gender = "Female"},
+ {modelName = "mp_f_execpa_01", modelHex = 0x432CA064, Gender = "Female"},
+ {modelName = "mp_f_execpa_02", modelHex = 0x5972CCF0, Gender = "Female"},
+ {modelName = "mp_f_forgery_01", modelHex = 0x781A3CF8, Gender = "Female"},
+ {modelName = "mp_f_freemode_01", modelHex = 0x9C9EFFD8, Gender = "Female"},
+ {modelName = "mp_f_helistaff_01", modelHex = 0x19B6FF06, Gender = "Female"},
+ {modelName = "mp_f_meth_01", modelHex = 0xD2B27EC1, Gender = "Female"},
+ {modelName = "mp_f_misty_01", modelHex = 0xD128FF9D, Gender = "Female"},
+ {modelName = "mp_f_stripperlite", modelHex = 0x2970A494, Gender = "Female"},
+ {modelName = "mp_f_weed_01", modelHex = 0xB26573A3, Gender = "Female"},
+ {modelName = "mp_g_m_pros_01", modelHex = 0x6C9DD7C9, Gender = "Male"},
+ {modelName = "mp_m_avongoon", modelHex = 0x9C13CB95, Gender = "Male"},
+ {modelName = "mp_m_boatstaff_01", modelHex = 0xC85F0A88, Gender = "Male"},
+ {modelName = "mp_m_bogdangoon", modelHex = 0x4D5696F7, Gender = "Male"},
+ {modelName = "mp_m_claude_01", modelHex = 0xC0F371B7, Gender = "Male"},
+ {modelName = "mp_m_cocaine_01", modelHex = 0x56D38F95, Gender = "Male"},
+ {modelName = "mp_m_counterfeit_01", modelHex = 0x9855C974, Gender = "Male"},
+ {modelName = "mp_m_exarmy_01", modelHex = 0x45348DBB, Gender = "Male"},
+ {modelName = "mp_m_execpa_01", modelHex = 0x3E8417BC, Gender = "Male"},
+ {modelName = "mp_m_famdd_01", modelHex = 0x33A464E5, Gender = "Male"},
+ {modelName = "mp_m_fibsec_01", modelHex = 0x5CDEF405, Gender = "Male"},
+ {modelName = "mp_m_forgery_01", modelHex = 0x613E709B, Gender = "Male"},
+ {modelName = "mp_m_freemode_01", modelHex = 0x705E61F2, Gender = "Male"},
+ {modelName = "mp_m_g_vagfun_01", modelHex = 0xC4A617BD, Gender = "Male"},
+ {modelName = "mp_m_marston_01", modelHex = 0x38430167, Gender = "Male"},
+ {modelName = "mp_m_meth_01", modelHex = 0xEDB42F3F, Gender = "Male"},
+ {modelName = "mp_m_niko_01", modelHex = 0xEEDACFC9, Gender = "Male"},
+ {modelName = "mp_m_securoguard_01", modelHex = 0xDA2C984E, Gender = "Male"},
+ {modelName = "mp_m_shopkeep_01", modelHex = 0x18CE57D0, Gender = "Male"},
+ {modelName = "mp_m_waremech_01", modelHex = 0xF7A74139, Gender = "Male"},
+ {modelName = "mp_m_weapexp_01", modelHex = 0x36EA5B09, Gender = "Male"},
+ {modelName = "mp_m_weapwork_01", modelHex = 0x4186506E, Gender = "Male"},
+ {modelName = "mp_m_weed_01", modelHex = 0x917ED459, Gender = "Male"},
+ {modelName = "mp_s_m_armoured_01", modelHex = 0xCDEF5408, Gender = "Male"},
+ {modelName = "player_one", modelHex = 0x9B22DBAF, Gender = "Male"},
+ {modelName = "player_two", modelHex = 0x9B810FA2, Gender = "Male"},
+ {modelName = "player_zero", modelHex = 0x0D7114C9, Gender = "Male"},
+ {modelName = "s_f_m_fembarber", modelHex = 0x163B875B, Gender = "Female"},
+ {modelName = "s_f_m_maid_01", modelHex = 0xE093C5C6, Gender = "Female"},
+ {modelName = "s_f_m_shop_high", modelHex = 0xAE47E4B0, Gender = "Female"},
+ {modelName = "s_f_m_sweatshop_01", modelHex = 0x312B5BC0, Gender = "Female"},
+ {modelName = "s_f_y_airhostess_01", modelHex = 0x5D71A46F, Gender = "Female"},
+ {modelName = "s_f_y_bartender_01", modelHex = 0x780C01BD, Gender = "Female"},
+ {modelName = "s_f_y_baywatch_01", modelHex = 0x4A8E5536, Gender = "Female"},
+ {modelName = "s_f_y_cop_01", modelHex = 0x15F8700D, Gender = "Female"},
+ {modelName = "s_f_y_factory_01", modelHex = 0x69F46BF3, Gender = "Female"},
+ {modelName = "s_f_y_hooker_01", modelHex = 0x028ABF95, Gender = "Female"},
+ {modelName = "s_f_y_hooker_02", modelHex = 0x14C3E407, Gender = "Female"},
+ {modelName = "s_f_y_hooker_03", modelHex = 0x031640AC, Gender = "Female"},
+ {modelName = "s_f_y_migrant_01", modelHex = 0xD55B2BF5, Gender = "Female"},
+ {modelName = "s_f_y_movprem_01", modelHex = 0x2300C816, Gender = "Female"},
+ {modelName = "s_f_y_ranger_01", modelHex = 0x9FC7F637, Gender = "Female"},
+ {modelName = "s_f_y_scrubs_01", modelHex = 0xAB594AB6, Gender = "Female"},
+ {modelName = "s_f_y_sheriff_01", modelHex = 0x4161D042, Gender = "Female"},
+ {modelName = "s_f_y_shop_low", modelHex = 0xA96E2604, Gender = "Female"},
+ {modelName = "s_f_y_shop_mid", modelHex = 0x3EECBA5D, Gender = "Female"},
+ {modelName = "s_f_y_stripper_01", modelHex = 0x52580019, Gender = "Female"},
+ {modelName = "s_f_y_stripper_02", modelHex = 0x6E0FB794, Gender = "Female"},
+ {modelName = "s_f_y_stripperlite", modelHex = 0x5C14EDFA, Gender = "Female"},
+ {modelName = "s_f_y_sweatshop_01", modelHex = 0x8502B6B2, Gender = "Female"},
+ {modelName = "s_m_m_ammucountry", modelHex = 0x0DE9A30A, Gender = "Male"},
+ {modelName = "s_m_m_armoured_01", modelHex = 0x95C76ECD, Gender = "Male"},
+ {modelName = "s_m_m_armoured_02", modelHex = 0x63858A4A, Gender = "Male"},
+ {modelName = "s_m_m_autoshop_01", modelHex = 0x040EABE3, Gender = "Male"},
+ {modelName = "s_m_m_autoshop_02", modelHex = 0xF06B849D, Gender = "Male"},
+ {modelName = "s_m_m_bouncer_01", modelHex = 0x9FD4292D, Gender = "Male"},
+ {modelName = "s_m_m_ccrew_01", modelHex = 0xC9E5F56B, Gender = "Male"},
+ {modelName = "s_m_m_chemsec_01", modelHex = 0x2EFEAFD5, Gender = "Male"},
+ {modelName = "s_m_m_ciasec_01", modelHex = 0x625D6958, Gender = "Male"},
+ {modelName = "s_m_m_cntrybar_01", modelHex = 0x1A021B83, Gender = "Male"},
+ {modelName = "s_m_m_dockwork_01", modelHex = 0x14D7B4E0, Gender = "Male"},
+ {modelName = "s_m_m_doctor_01", modelHex = 0xD47303AC, Gender = "Male"},
+ {modelName = "s_m_m_fiboffice_01", modelHex = 0xEDBC7546, Gender = "Male"},
+ {modelName = "s_m_m_fiboffice_02", modelHex = 0x26F067AD, Gender = "Male"},
+ {modelName = "s_m_m_fibsec_01", modelHex = 0x7B8B434B, Gender = "Male"},
+ {modelName = "s_m_m_gaffer_01", modelHex = 0xA956BD9E, Gender = "Male"},
+ {modelName = "s_m_m_gardener_01", modelHex = 0x49EA5685, Gender = "Male"},
+ {modelName = "s_m_m_gentransport", modelHex = 0x1880ED06, Gender = "Male"},
+ {modelName = "s_m_m_hairdress_01", modelHex = 0x418DFF92, Gender = "Male"},
+ {modelName = "s_m_m_highsec_01", modelHex = 0xF161D212, Gender = "Male"},
+ {modelName = "s_m_m_highsec_02", modelHex = 0x2930C1AB, Gender = "Male"},
+ {modelName = "s_m_m_janitor", modelHex = 0xA96BD9EC, Gender = "Male"},
+ {modelName = "s_m_m_lathandy_01", modelHex = 0x9E80D2CE, Gender = "Male"},
+ {modelName = "s_m_m_lifeinvad_01", modelHex = 0xDE0077FD, Gender = "Male"},
+ {modelName = "s_m_m_linecook", modelHex = 0xDB9C0997, Gender = "Male"},
+ {modelName = "s_m_m_lsmetro_01", modelHex = 0x765AAAE4, Gender = "Male"},
+ {modelName = "s_m_m_mariachi_01", modelHex = 0x7EA4FFA6, Gender = "Male"},
+ {modelName = "s_m_m_marine_01", modelHex = 0xF2DAA2ED, Gender = "Male"},
+ {modelName = "s_m_m_marine_02", modelHex = 0xF0259D83, Gender = "Male"},
+ {modelName = "s_m_m_migrant_01", modelHex = 0xED0CE4C6, Gender = "Male"},
+ {modelName = "s_m_m_movalien_01", modelHex = 0x64611296, Gender = "Male"},
+ {modelName = "s_m_m_movprem_01", modelHex = 0xD85E6D28, Gender = "Male"},
+ {modelName = "s_m_m_movspace_01", modelHex = 0xE7B31432, Gender = "Male"},
+ {modelName = "s_m_m_paramedic_01", modelHex = 0xB353629E, Gender = "Male"},
+ {modelName = "s_m_m_pilot_01", modelHex = 0xE75B4B1C, Gender = "Male"},
+ {modelName = "s_m_m_pilot_02", modelHex = 0xF63DE8E1, Gender = "Male"},
+ {modelName = "s_m_m_postal_01", modelHex = 0x62599034, Gender = "Male"},
+ {modelName = "s_m_m_postal_02", modelHex = 0x7367324F, Gender = "Male"},
+ {modelName = "s_m_m_prisguard_01", modelHex = 0x56C96FC6, Gender = "Male"},
+ {modelName = "s_m_m_scientist_01", modelHex = 0x4117D39B, Gender = "Male"},
+ {modelName = "s_m_m_security_01", modelHex = 0xD768B228, Gender = "Male"},
+ {modelName = "s_m_m_snowcop_01", modelHex = 0x1AE8BB58, Gender = "Male"},
+ {modelName = "s_m_m_strperf_01", modelHex = 0x795AC7A8, Gender = "Male"},
+ {modelName = "s_m_m_strpreach_01", modelHex = 0x1C0077FB, Gender = "Male"},
+ {modelName = "s_m_m_strvend_01", modelHex = 0xCE9113A9, Gender = "Male"},
+ {modelName = "s_m_m_trucker_01", modelHex = 0x59511A6C, Gender = "Male"},
+ {modelName = "s_m_m_ups_01", modelHex = 0x9FC37F22, Gender = "Male"},
+ {modelName = "s_m_m_ups_02", modelHex = 0xD0BDE116, Gender = "Male"},
+ {modelName = "s_m_o_busker_01", modelHex = 0xAD9EF1BB, Gender = "Male"},
+ {modelName = "s_m_y_airworker", modelHex = 0x62018559, Gender = "Male"},
+ {modelName = "s_m_y_ammucity_01", modelHex = 0x9E08633D, Gender = "Male"},
+ {modelName = "s_m_y_armymech_01", modelHex = 0x62CC28E2, Gender = "Male"},
+ {modelName = "s_m_y_autopsy_01", modelHex = 0xB2273D4E, Gender = "Male"},
+ {modelName = "s_m_y_barman_01", modelHex = 0xE5A11106, Gender = "Male"},
+ {modelName = "s_m_y_baywatch_01", modelHex = 0x0B4A6862, Gender = "Male"},
+ {modelName = "s_m_y_blackops_01", modelHex = 0xB3F3EE34, Gender = "Male"},
+ {modelName = "s_m_y_blackops_02", modelHex = 0x7A05FA59, Gender = "Male"},
+ {modelName = "s_m_y_blackops_03", modelHex = 0x5076A73B, Gender = "Male"},
+ {modelName = "s_m_y_busboy_01", modelHex = 0xD8F9CD47, Gender = "Male"},
+ {modelName = "s_m_y_chef_01", modelHex = 0x0F977CEB, Gender = "Male"},
+ {modelName = "s_m_y_clown_01", modelHex = 0x04498DDE, Gender = "Male"},
+ {modelName = "s_m_y_construct_01", modelHex = 0xD7DA9E99, Gender = "Male"},
+ {modelName = "s_m_y_construct_02", modelHex = 0xC5FEFADE, Gender = "Male"},
+ {modelName = "s_m_y_cop_01", modelHex = 0x5E3DA4A4, Gender = "Male"},
+ {modelName = "s_m_y_dealer_01", modelHex = 0xE497BBEF, Gender = "Male"},
+ {modelName = "s_m_y_devinsec_01", modelHex = 0x9B557274, Gender = "Male"},
+ {modelName = "s_m_y_dockwork_01", modelHex = 0x867639D1, Gender = "Male"},
+ {modelName = "s_m_y_doorman_01", modelHex = 0x22911304, Gender = "Male"},
+ {modelName = "s_m_y_dwservice_01", modelHex = 0x75D30A91, Gender = "Male"},
+ {modelName = "s_m_y_dwservice_02", modelHex = 0xF5908A06, Gender = "Male"},
+ {modelName = "s_m_y_factory_01", modelHex = 0x4163A158, Gender = "Male"},
+ {modelName = "s_m_y_fireman_01", modelHex = 0xB6B1EDA8, Gender = "Male"},
+ {modelName = "s_m_y_garbage", modelHex = 0xEE75A00F, Gender = "Male"},
+ {modelName = "s_m_y_grip_01", modelHex = 0x309E7DEA, Gender = "Male"},
+ {modelName = "s_m_y_hwaycop_01", modelHex = 0x739B1EF5, Gender = "Male"},
+ {modelName = "s_m_y_marine_01", modelHex = 0x65793043, Gender = "Male"},
+ {modelName = "s_m_y_marine_02", modelHex = 0x58D696FE, Gender = "Male"},
+ {modelName = "s_m_y_marine_03", modelHex = 0x72C0CAD2, Gender = "Male"},
+ {modelName = "s_m_y_mime", modelHex = 0x3CDCA742, Gender = "Male"},
+ {modelName = "s_m_y_pestcont_01", modelHex = 0x48114518, Gender = "Male"},
+ {modelName = "s_m_y_pilot_01", modelHex = 0xAB300C07, Gender = "Male"},
+ {modelName = "s_m_y_prismuscl_01", modelHex = 0x5F2113A1, Gender = "Male"},
+ {modelName = "s_m_y_prisoner_01", modelHex = 0xB1BB9B59, Gender = "Male"},
+ {modelName = "s_m_y_ranger_01", modelHex = 0xEF7135AE, Gender = "Male"},
+ {modelName = "s_m_y_robber_01", modelHex = 0xC05E1399, Gender = "Male"},
+ {modelName = "s_m_y_sheriff_01", modelHex = 0xB144F9B9, Gender = "Male"},
+ {modelName = "s_m_y_shop_mask", modelHex = 0x6E122C06, Gender = "Male"},
+ {modelName = "s_m_y_strvend_01", modelHex = 0x927F2323, Gender = "Male"},
+ {modelName = "s_m_y_swat_01", modelHex = 0x8D8F1B10, Gender = "Male"},
+ {modelName = "s_m_y_uscg_01", modelHex = 0xCA0050E9, Gender = "Male"},
+ {modelName = "s_m_y_valet_01", modelHex = 0x3B96F23E, Gender = "Male"},
+ {modelName = "s_m_y_waiter_01", modelHex = 0xAD4C724C, Gender = "Male"},
+ {modelName = "s_m_y_winclean_01", modelHex = 0x550D8D9D, Gender = "Male"},
+ {modelName = "s_m_y_xmech_01", modelHex = 0x441405EC, Gender = "Male"},
+ {modelName = "s_m_y_xmech_02_mp", modelHex = 0x69147A0D, Gender = "Male"},
+ {modelName = "s_m_y_xmech_02", modelHex = 0xBE20FA04, Gender = "Male"},
+ {modelName = "u_f_m_corpse_01", modelHex = 0x2E140314, Gender = "Female"},
+ {modelName = "u_f_m_drowned_01", modelHex = 0xD7F37609, Gender = "Female"},
+ {modelName = "u_f_m_miranda", modelHex = 0x414FA27B, Gender = "Female"},
+ {modelName = "u_f_m_promourn_01", modelHex = 0xA20899E7, Gender = "Female"},
+ {modelName = "u_f_o_moviestar", modelHex = 0x35578634, Gender = "Female"},
+ {modelName = "u_f_o_prolhost_01", modelHex = 0xC512DD23, Gender = "Female"},
+ {modelName = "u_f_y_bikerchic", modelHex = 0xFA389D4F, Gender = "Female"},
+ {modelName = "u_f_y_comjane", modelHex = 0xB6AA85CE, Gender = "Female"},
+ {modelName = "u_f_y_corpse_01", modelHex = 0x9C70109D, Gender = "Female"},
+ {modelName = "u_f_y_corpse_02", modelHex = 0x0D9C72F8, Gender = "Female"},
+ {modelName = "u_f_y_hotposh_01", modelHex = 0x969B6DFE, Gender = "Female"},
+ {modelName = "u_f_y_jewelass_01", modelHex = 0xF0D4BE2E, Gender = "Female"},
+ {modelName = "u_f_y_mistress", modelHex = 0x5DCA2528, Gender = "Female"},
+ {modelName = "u_f_y_poppymich", modelHex = 0x23E9A09E, Gender = "Female"},
+ {modelName = "u_f_y_princess", modelHex = 0xD2E3A284, Gender = "Female"},
+ {modelName = "u_f_y_spyactress", modelHex = 0x5B81D86C, Gender = "Female"},
+ {modelName = "u_m_m_aldinapoli", modelHex = 0xF0EC56E2, Gender = "Male"},
+ {modelName = "u_m_m_bankman", modelHex = 0xC306D6F5, Gender = "Male"},
+ {modelName = "u_m_m_bikehire_01", modelHex = 0x76474545, Gender = "Male"},
+ {modelName = "u_m_m_doa_01", modelHex = 0x621E6BFD, Gender = "Male"},
+ {modelName = "u_m_m_edtoh", modelHex = 0x2A797197, Gender = "Male"},
+ {modelName = "u_m_m_fibarchitect", modelHex = 0x342333D3, Gender = "Male"},
+ {modelName = "u_m_m_filmdirector", modelHex = 0x2B6E1BB6, Gender = "Male"},
+ {modelName = "u_m_m_glenstank_01", modelHex = 0x45BB1666, Gender = "Male"},
+ {modelName = "u_m_m_griff_01", modelHex = 0xC454BCBB, Gender = "Male"},
+ {modelName = "u_m_m_jesus_01", modelHex = 0xCE2CB751, Gender = "Male"},
+ {modelName = "u_m_m_jewelsec_01", modelHex = 0xACCCBDB6, Gender = "Male"},
+ {modelName = "u_m_m_jewelthief", modelHex = 0xE6CC3CDC, Gender = "Male"},
+ {modelName = "u_m_m_markfost", modelHex = 0x1C95CB0B, Gender = "Male"},
+ {modelName = "u_m_m_partytarget", modelHex = 0x81F74DE7, Gender = "Male"},
+ {modelName = "u_m_m_prolsec_01", modelHex = 0x709220C7, Gender = "Male"},
+ {modelName = "u_m_m_promourn_01", modelHex = 0xCE96030B, Gender = "Male"},
+ {modelName = "u_m_m_rivalpap", modelHex = 0x60D5D6DA, Gender = "Male"},
+ {modelName = "u_m_m_spyactor", modelHex = 0xAC0EA5D8, Gender = "Male"},
+ {modelName = "u_m_m_streetart_01", modelHex = 0x6C19E962, Gender = "Male"},
+ {modelName = "u_m_m_willyfist", modelHex = 0x90769A8F, Gender = "Male"},
+ {modelName = "u_m_o_filmnoir", modelHex = 0x2BACC2DB, Gender = "Male"},
+ {modelName = "u_m_o_finguru_01", modelHex = 0x46E39E63, Gender = "Male"},
+ {modelName = "u_m_o_taphillbilly", modelHex = 0x9A1E5E52, Gender = "Male"},
+ {modelName = "u_m_o_tramp_01", modelHex = 0x6A8F1F9B, Gender = "Male"},
+ {modelName = "u_m_y_abner", modelHex = 0xF0AC2626, Gender = "Male"},
+ {modelName = "u_m_y_antonb", modelHex = 0xCF623A2C, Gender = "Male"},
+ {modelName = "u_m_y_babyd", modelHex = 0xDA116E7E, Gender = "Male"},
+ {modelName = "u_m_y_baygor", modelHex = 0x5244247D, Gender = "Male"},
+ {modelName = "u_m_y_burgerdrug_01", modelHex = 0x8B7D3766, Gender = "Male"},
+ {modelName = "u_m_y_chip", modelHex = 0x24604B2B, Gender = "Male"},
+ {modelName = "u_m_y_corpse_01", modelHex = 0x94C2A03F, Gender = "Male"},
+ {modelName = "u_m_y_cyclist_01", modelHex = 0x2D0EFCEB, Gender = "Male"},
+ {modelName = "u_m_y_fibmugger_01", modelHex = 0x85B9C668, Gender = "Male"},
+ {modelName = "u_m_y_guido_01", modelHex = 0xC6B49A2F, Gender = "Male"},
+ {modelName = "u_m_y_gunvend_01", modelHex = 0xB3229752, Gender = "Male"},
+ {modelName = "u_m_y_hippie_01", modelHex = 0xF041880B, Gender = "Male"},
+ {modelName = "u_m_y_imporage", modelHex = 0x348065F5, Gender = "Male"},
+ {modelName = "u_m_y_juggernaut_01", modelHex = 0x90EF5134, Gender = "Male"},
+ {modelName = "u_m_y_justin", modelHex = 0x7DC3908F, Gender = "Male"},
+ {modelName = "u_m_y_mani", modelHex = 0xC8BB1E52, Gender = "Male"},
+ {modelName = "u_m_y_militarybum", modelHex = 0x4705974A, Gender = "Male"},
+ {modelName = "u_m_y_paparazzi", modelHex = 0x5048B328, Gender = "Male"},
+ {modelName = "u_m_y_party_01", modelHex = 0x36E70600, Gender = "Male"},
+ {modelName = "u_m_y_pogo_01", modelHex = 0xDC59940D, Gender = "Male"},
+ {modelName = "u_m_y_prisoner_01", modelHex = 0x7B9B4BC0, Gender = "Male"},
+ {modelName = "u_m_y_proldriver_01", modelHex = 0x855E36A3, Gender = "Male"},
+ {modelName = "u_m_y_rsranger_01", modelHex = 0x3C438CD2, Gender = "Male"},
+ {modelName = "u_m_y_sbike", modelHex = 0x6AF4185D, Gender = "Male"},
+ {modelName = "u_m_y_staggrm_01", modelHex = 0x9194CE03, Gender = "Male"},
+ {modelName = "u_m_y_tattoo_01", modelHex = 0x94AE2B8C, Gender = "Male"},
+ {modelName = "u_m_y_zombie_01", modelHex = 0xAC4B4506, Gender = "Male"},
+}
+
+Config.VehicleHashes = {
+ {modelName = "adder", modelHex = 0xB779A091},
+ {modelName = "airbus", modelHex = 0x4C80EB0E},
+ {modelName = "akula", modelHex = 0x46699F47},
+ {modelName = "airtug", modelHex = 0x5D0AAC8F},
+ {modelName = "akuma", modelHex = 0x63ABADE7},
+ {modelName = "alkonost", modelHex = 0xEA2A1A25},
+ {modelName = "alpha", modelHex = 0x2DB8D1AA},
+ {modelName = "alphaz1", modelHex = 0xA52F6866},
+ {modelName = "ambulance", modelHex = 0x45D56ADA},
+ {modelName = "annihilator", modelHex = 0x31F0B376},
+ {modelName = "annihilator2", modelHex = 0x11962E49},
+ {modelName = "apc", modelHex = 0x2189D250},
+ {modelName = "ardent", modelHex = 0x97E5533},
+ {modelName = "armytanker", modelHex = 0xB8081009},
+ {modelName = "armytrailer", modelHex = 0xA7FF33F5},
+ {modelName = "armytrailer2", modelHex = 0x9E6B14D6},
+ {modelName = "asbo", modelHex = 0x42ACA95F},
+ {modelName = "asea", modelHex = 0x94204D89},
+ {modelName = "asea2", modelHex = 0x9441D8D5},
+ {modelName = "asterope", modelHex = 0x8E9254FB},
+ {modelName = "astron", modelHex = 0x258C9364},
+ {modelName = "autarch", modelHex = 0xED552C74},
+ {modelName = "avarus", modelHex = 0x81E38F7F},
+ {modelName = "avenger", modelHex = 0x81BD2ED0},
+ {modelName = "avenger2", modelHex = 0x18606535},
+ {modelName = "avisa", modelHex = 0x9A474B5E},
+ {modelName = "bagger", modelHex = 0x806B9CC3},
+ {modelName = "baletrailer", modelHex = 0xE82AE656},
+ {modelName = "baller", modelHex = 0xCFCA3668},
+ {modelName = "baller2", modelHex = 0x8852855},
+ {modelName = "baller3", modelHex = 0x6FF0F727},
+ {modelName = "baller4", modelHex = 0x25CBE2E2},
+ {modelName = "baller5", modelHex = 0x1C09CF5E},
+ {modelName = "baller6", modelHex = 0x27B4E6B0},
+ {modelName = "baller7", modelHex = 0x1573422D},
+ {modelName = "banshee", modelHex = 0xC1E908D2},
+ {modelName = "banshee2", modelHex = 0x25C5AF13},
+ {modelName = "barracks", modelHex = 0xCEEA3F4B},
+ {modelName = "barracks2", modelHex = 0x4008EABB},
+ {modelName = "barracks3", modelHex = 0x2592B5CF},
+ {modelName = "barrage", modelHex = 0xF34DFB25},
+ {modelName = "bati", modelHex = 0xF9300CC5},
+ {modelName = "bati2", modelHex = 0xCADD5D2D},
+ {modelName = "benson", modelHex = 0x7A61B330},
+ {modelName = "besra", modelHex = 0x6CBD1D6D},
+ {modelName = "bestiagts", modelHex = 0x4BFCF28B},
+ {modelName = "bf400", modelHex = 0x52FF9437},
+ {modelName = "bfinjection", modelHex = 0x432AA566},
+ {modelName = "biff", modelHex = 0x32B91AE8},
+ {modelName = "bifta", modelHex = 0xEB298297},
+ {modelName = "bison", modelHex = 0xFEFD644F},
+ {modelName = "bison2", modelHex = 0x7B8297C5},
+ {modelName = "bison3", modelHex = 0x67B3F020},
+ {modelName = "bjxl", modelHex = 0x32B29A4B},
+ {modelName = "blade", modelHex = 0xB820ED5E},
+ {modelName = "blazer", modelHex = 0x8125BCF9},
+ {modelName = "blazer2", modelHex = 0xFD231729},
+ {modelName = "blazer3", modelHex = 0xB44F0582},
+ {modelName = "blazer4", modelHex = 0xE5BA6858},
+ {modelName = "blazer5", modelHex = 0xA1355F67},
+ {modelName = "blimp", modelHex = 0xF7004C86},
+ {modelName = "blimp2", modelHex = 0xDB6B4924},
+ {modelName = "blimp3", modelHex = 0xEDA4ED97},
+ {modelName = "blista", modelHex = 0xEB70965F},
+ {modelName = "blista2", modelHex = 0x3DEE5EDA},
+ {modelName = "blista3", modelHex = 0xDCBC1C3B},
+ {modelName = "bmx", modelHex = 0x43779C54},
+ {modelName = "boattrailer", modelHex = 0x1F3D44B5},
+ {modelName = "bobcatxl", modelHex = 0x3FC5D440},
+ {modelName = "bodhi2", modelHex = 0xAA699BB6},
+ {modelName = "bombushka", modelHex = 0xFE0A508C},
+ {modelName = "boor", modelHex = 0x3E5BD8D9},
+ {modelName = "boxville", modelHex = 0x898ECCEA},
+ {modelName = "boxville2", modelHex = 0xF21B33BE},
+ {modelName = "boxville3", modelHex = 0x7405E08},
+ {modelName = "boxville4", modelHex = 0x1A79847A},
+ {modelName = "boxville5", modelHex = 0x28AD20E1},
+ {modelName = "brawler", modelHex = 0xA7CE1BC5},
+ {modelName = "broadway", modelHex = 0x707E63A4},
+ {modelName = "brickade", modelHex = 0xEDC6F847},
+ {modelName = "brickade2", modelHex = 0x1F6E3B5},
+ {modelName = "brioso", modelHex = 0x5C55CB39},
+ {modelName = "brioso2", modelHex = 0x55365079},
+ {modelName = "brioso3", modelHex = 0x5C5C5320},
+ {modelName = "bruiser", modelHex = 0x27D79225},
+ {modelName = "bruiser2", modelHex = 0x9B065C9E},
+ {modelName = "bruiser3", modelHex = 0x8644331A},
+ {modelName = "brutus", modelHex = 0x7F81A829},
+ {modelName = "brutus2", modelHex = 0x8F49AE28},
+ {modelName = "brutus3", modelHex = 0x798682A2},
+ {modelName = "btype", modelHex = 0x6FF6914},
+ {modelName = "btype2", modelHex = 0xCE6B35A4},
+ {modelName = "btype3", modelHex = 0xDC19D101},
+ {modelName = "buccaneer", modelHex = 0xD756460C},
+ {modelName = "buccaneer2", modelHex = 0xC397F748},
+ {modelName = "buffalo", modelHex = 0xEDD516C6},
+ {modelName = "buffalo2", modelHex = 0x2BEC3CBE},
+ {modelName = "buffalo3", modelHex = 0xE2C013E},
+ {modelName = "buffalo4", modelHex = 0xD0E7E7E3},
+ {modelName = "bulldozer", modelHex = 0x7074F39D},
+ {modelName = "bullet", modelHex = 0x9AE6DDA1},
+ {modelName = "burrito", modelHex = 0xAFBB2CA4},
+ {modelName = "burrito2", modelHex = 0xC9E8FF76},
+ {modelName = "burrito3", modelHex = 0x98171BD3},
+ {modelName = "burrito4", modelHex = 0x353B561D},
+ {modelName = "burrito5", modelHex = 0x437CF2A0},
+ {modelName = "bus", modelHex = 0xD577C962},
+ {modelName = "buzzard", modelHex = 0x2F03547B},
+ {modelName = "buzzard2", modelHex = 0x2C75F0DD},
+ {modelName = "cablecar", modelHex = 0xC6C3242D},
+ {modelName = "caddy", modelHex = 0x44623884},
+ {modelName = "caddy2", modelHex = 0xDFF0594C},
+ {modelName = "caddy3", modelHex = 0xD227BDBB},
+ {modelName = "calico", modelHex = 0xD6D9C2A},
+ {modelName = "camper", modelHex = 0x6FD95F68},
+ {modelName = "caracara", modelHex = 0x4ABEBF23},
+ {modelName = "caracara2", modelHex = 0xAF966F3C},
+ {modelName = "carbonizzare", modelHex = 0x7B8AB45F},
+ {modelName = "carbonrs", modelHex = 0xABB0C0},
+ {modelName = "cargobob", modelHex = 0xFCFCB68B},
+ {modelName = "cargobob2", modelHex = 0x60A7EA10},
+ {modelName = "cargobob3", modelHex = 0x53174EEF},
+ {modelName = "cargobob4", modelHex = 0x78BC1A3C},
+ {modelName = "cargoplane", modelHex = 0x15F27762},
+ {modelName = "cargoplane2", modelHex = 0x8E0A582D},
+ {modelName = "casco", modelHex = 0x3822BDFE},
+ {modelName = "cavalcade", modelHex = 0x779F23AA},
+ {modelName = "cavalcade2", modelHex = 0xD0EB2BE5},
+ {modelName = "cerberus", modelHex = 0xD039510B},
+ {modelName = "cerberus2", modelHex = 0x287FA449},
+ {modelName = "cerberus3", modelHex = 0x71D3B6F0},
+ {modelName = "champion", modelHex = 0xC972A155},
+ {modelName = "cheburek", modelHex = 0xC514AAE0},
+ {modelName = "cheetah", modelHex = 0xB1D95DA0},
+ {modelName = "cheetah2", modelHex = 0xD4E5F4D},
+ {modelName = "chernobog", modelHex = 0xD6BC7523},
+ {modelName = "chimera", modelHex = 0x675ED7},
+ {modelName = "chino", modelHex = 0x14D69010},
+ {modelName = "chino2", modelHex = 0xAED64A63},
+ {modelName = "cinquemila", modelHex = 0xA4F52C13},
+ {modelName = "cliffhanger", modelHex = 0x17420102},
+ {modelName = "clique", modelHex = 0xA29F78B0},
+ {modelName = "club", modelHex = 0x82E47E85},
+ {modelName = "coach", modelHex = 0x84718D34},
+ {modelName = "cog55", modelHex = 0x360A438E},
+ {modelName = "cog552", modelHex = 0x29FCD3E4},
+ {modelName = "cogcabrio", modelHex = 0x13B57D8A},
+ {modelName = "cognoscenti", modelHex = 0x86FE0B60},
+ {modelName = "cognoscenti2", modelHex = 0xDBF2D57A},
+ {modelName = "comet2", modelHex = 0xC1AE4D16},
+ {modelName = "comet3", modelHex = 0x877358AD},
+ {modelName = "comet4", modelHex = 0x5D1903F9},
+ {modelName = "comet5", modelHex = 0x276D98A3},
+ {modelName = "comet6", modelHex = 0x991EFC06},
+ {modelName = "comet7", modelHex = 0x440851D8},
+ {modelName = "conada", modelHex = 0xE9A9A0F4},
+ {modelName = "contender", modelHex = 0x28B67ACA},
+ {modelName = "coquette", modelHex = 0x67BC037},
+ {modelName = "coquette2", modelHex = 0x3C4E2113},
+ {modelName = "coquette3", modelHex = 0x2EC385FE},
+ {modelName = "coquette4", modelHex = 0x98F65A5E},
+ {modelName = "corsita", modelHex = 0x4639A710},
+ {modelName = "cruiser", modelHex = 0x1ABA13B5},
+ {modelName = "crusader", modelHex = 0x132D5A1A},
+ {modelName = "cuban800", modelHex = 0xD9927FE3},
+ {modelName = "cutter", modelHex = 0xC3FBA120},
+ {modelName = "cyclone", modelHex = 0x52FF9437},
+ {modelName = "cypher", modelHex = 0x68A5D1EF},
+ {modelName = "daemon", modelHex = 0x77934CEE},
+ {modelName = "daemon2", modelHex = 0xAC4E93C9},
+ {modelName = "deathbike", modelHex = 0xFE5F0722},
+ {modelName = "deathbike2", modelHex = 0x93F09558},
+ {modelName = "deathbike3", modelHex = 0xAE12C99C},
+ {modelName = "defiler", modelHex = 0x30FF0190},
+ {modelName = "deity", modelHex = 0x5B531351},
+ {modelName = "deluxo", modelHex = 0x586765FB},
+ {modelName = "deveste", modelHex = 0x5EE005DA},
+ {modelName = "deviant", modelHex = 0x4C3FFF49},
+ {modelName = "diablous", modelHex = 0xF1B44F44},
+ {modelName = "diablous2", modelHex = 0x6ABDF65E},
+ {modelName = "dilettante", modelHex = 0xBC993509},
+ {modelName = "dilettante2", modelHex = 0x64430650},
+ {modelName = "dinghy", modelHex = 0x3D961290},
+ {modelName = "dinghy2", modelHex = 0x107F392C},
+ {modelName = "dinghy3", modelHex = 0x1E5E54EA},
+ {modelName = "dinghy4", modelHex = 0x33B47F96},
+ {modelName = "dinghy5", modelHex = 0xC58DA34A},
+ {modelName = "dloader", modelHex = 0x698521E3},
+ {modelName = "docktrailer", modelHex = 0x806EFBEE},
+ {modelName = "docktug", modelHex = 0xCB44B1CA},
+ {modelName = "dodo", modelHex = 0xCA495705},
+ {modelName = "dominator", modelHex = 0x4CE68AC},
+ {modelName = "dominator2", modelHex = 0xC96B73D9},
+ {modelName = "dominator3", modelHex = 0xC52C6B93},
+ {modelName = "dominator4", modelHex = 0xD6FB0F30},
+ {modelName = "dominator5", modelHex = 0xAE0A3D4F},
+ {modelName = "dominator6", modelHex = 0xB2E046FB},
+ {modelName = "dominator7", modelHex = 0x96E24857},
+ {modelName = "dominator8", modelHex = 0x4EF4D5F7},
+ {modelName = "double", modelHex = 0x9C669788},
+ {modelName = "drafter", modelHex = 0x28EAB80F},
+ {modelName = "draugur", modelHex = 0xD26C0D08},
+ {modelName = "dubsta", modelHex = 0x462FE277},
+ {modelName = "dubsta2", modelHex = 0xE882E5F6},
+ {modelName = "dubsta3", modelHex = 0xB6410173},
+ {modelName = "dukes", modelHex = 0x2B26F456},
+ {modelName = "dukes2", modelHex = 0xEC8F7094},
+ {modelName = "dukes3", modelHex = 0x7F3415E3},
+ {modelName = "dump", modelHex = 0x810369E2},
+ {modelName = "dune", modelHex = 0x9CF21E0F},
+ {modelName = "dune2", modelHex = 0x1FD824AF},
+ {modelName = "dune3", modelHex = 0x711D4738},
+ {modelName = "dune4", modelHex = 0xCEB28249},
+ {modelName = "dune5", modelHex = 0xED62BFA9},
+ {modelName = "duster", modelHex = 0x39D6779E},
+ {modelName = "dynasty", modelHex = 0x127E90D5},
+ {modelName = "elegy", modelHex = 0xBBA2261},
+ {modelName = "elegy2", modelHex = 0xDE3D9D22},
+ {modelName = "ellie", modelHex = 0xB472D2B5},
+ {modelName = "emerus", modelHex = 0x4EE74355},
+ {modelName = "emperor", modelHex = 0xD7278283},
+ {modelName = "emperor2", modelHex = 0x8FC3AADC},
+ {modelName = "emperor3", modelHex = 0xB5FCF74E},
+ {modelName = "enduro", modelHex = 0x6882FA73},
+ {modelName = "entity2", modelHex = 0x8198AEDC},
+ {modelName = "entity3", modelHex = 0x981BFCF},
+ {modelName = "entityxf", modelHex = 0xB2FE5CF9},
+ {modelName = "esskey", modelHex = 0x794CB30C},
+ {modelName = "eudora", modelHex = 0xB161E279},
+ {modelName = "euros", modelHex = 0x89FEF9E},
+ {modelName = "everon", modelHex = 0x97553C28},
+ {modelName = "everon2", modelHex = 0xF82BC92},
+ {modelName = "exemplar", modelHex = 0xFFB15B5E},
+ {modelName = "f620", modelHex = 0xDCBCBE48},
+ {modelName = "faction", modelHex = 0x81A9CDDF},
+ {modelName = "faction2", modelHex = 0x95466BDB},
+ {modelName = "faction3", modelHex = 0x866BCE26},
+ {modelName = "fagaloa", modelHex = 0x6068AD86},
+ {modelName = "faggio", modelHex = 0x9229E4EB},
+ {modelName = "faggio2", modelHex = 0x350D1AB},
+ {modelName = "faggio3", modelHex = 0xB328B188},
+ {modelName = "fbi", modelHex = 0x432EA949},
+ {modelName = "fbi2", modelHex = 0x9DC66994},
+ {modelName = "fcr", modelHex = 0x25676EAF},
+ {modelName = "fcr2", modelHex = 0xD2D5E00E},
+ {modelName = "felon", modelHex = 0xE8A8BDA8},
+ {modelName = "felon2", modelHex = 0xFAAD85EE},
+ {modelName = "feltzer2", modelHex = 0x8911B9F5},
+ {modelName = "feltzer3", modelHex = 0xA29D6D10},
+ {modelName = "firetruk", modelHex = 0x73920F8E},
+ {modelName = "fixter", modelHex = 0xCE23D3BF},
+ {modelName = "flashgt", modelHex = 0xB4F32118},
+ {modelName = "flatbed", modelHex = 0x50B0215A},
+ {modelName = "fmj", modelHex = 0x5502626C},
+ {modelName = "forklift", modelHex = 0x58E49664},
+ {modelName = "formula", modelHex = 0x1446590A},
+ {modelName = "formula2", modelHex = 0x8B213907},
+ {modelName = "fq2", modelHex = 0xBC32A33B},
+ {modelName = "freecrawler", modelHex = 0xFCC2F483},
+ {modelName = "freight", modelHex = 0x3D6AAA9B},
+ {modelName = "freightcar", modelHex = 0xAFD22A6},
+ {modelName = "freightcar2", modelHex = 0xD0E3D4E7},
+ {modelName = "freightcont1", modelHex = 0x36DCFF98},
+ {modelName = "freightcont2", modelHex = 0xE512E79},
+ {modelName = "freightgrain", modelHex = 0x264D9262},
+ {modelName = "freighttrailer", modelHex = 0xD1ABB666},
+ {modelName = "frogger", modelHex = 0x2C634FBD},
+ {modelName = "frogger2", modelHex = 0x742E9AC0},
+ {modelName = "fugitive", modelHex = 0x71CB2FFB},
+ {modelName = "furia", modelHex = 0x3944D5A0},
+ {modelName = "furoregt", modelHex = 0xBF1691E0},
+ {modelName = "fusilade", modelHex = 0x1DC0BA53},
+ {modelName = "futo", modelHex = 0x7836CE2F},
+ {modelName = "futo2", modelHex = 0xA6297CC8},
+ {modelName = "gargoyle", modelHex = 0x2C2C2324},
+ {modelName = "gauntlet", modelHex = 0x94B395C5},
+ {modelName = "gauntlet2", modelHex = 0x14D22159},
+ {modelName = "gauntlet3", modelHex = 0x2B0C4DCD},
+ {modelName = "gauntlet4", modelHex = 0x734C5E50},
+ {modelName = "gauntlet5", modelHex = 0x817AFAAD},
+ {modelName = "gb200", modelHex = 0x71CBEA98},
+ {modelName = "gburrito", modelHex = 0x97FA4F36},
+ {modelName = "gburrito2", modelHex = 0x11AA0E14},
+ {modelName = "glendale", modelHex = 0x47A6BC1},
+ {modelName = "glendale2", modelHex = 0xC98BBAD},
+ {modelName = "gp1", modelHex = 0x4992196C},
+ {modelName = "graintrailer", modelHex = 0x3CC7F596},
+ {modelName = "granger", modelHex = 0x9628879C},
+ {modelName = "granger2", modelHex = 0xF06C29C7},
+ {modelName = "greenwood", modelHex = 0xA3FC0F4D},
+ {modelName = "gresley", modelHex = 0xA3FC0F4D},
+ {modelName = "growler", modelHex = 0x4DC079D7},
+ {modelName = "gt500", modelHex = 0x8408F33A},
+ {modelName = "guardian", modelHex = 0x825A9F4C},
+ {modelName = "habanero", modelHex = 0x34B7390F},
+ {modelName = "hakuchou", modelHex = 0x4B6C568A},
+ {modelName = "hakuchou2", modelHex = 0xF0C2A91F},
+ {modelName = "halftrack", modelHex = 0xFE141DA6},
+ {modelName = "handler", modelHex = 0x1A7FCEFA},
+ {modelName = "hauler", modelHex = 0x5A82F9AE},
+ {modelName = "hauler2", modelHex = 0x171C92C4},
+ {modelName = "havok", modelHex = 0x89BA59F5},
+ {modelName = "hellion", modelHex = 0xEA6A047F},
+ {modelName = "hermes", modelHex = 0xE83C17},
+ {modelName = "hexer", modelHex = 0x11F76C14},
+ {modelName = "hotknife", modelHex = 0x239E390},
+ {modelName = "hotring", modelHex = 0x42836BE5},
+ {modelName = "howard", modelHex = 0xC3F25753},
+ {modelName = "hunter", modelHex = 0xFD707EDE},
+ {modelName = "huntley", modelHex = 0x1D06D681},
+ {modelName = "hustler", modelHex = 0x23CA25F2},
+ {modelName = "hydra", modelHex = 0x39D6E83F},
+ {modelName = "ignus", modelHex = 0x4992196C},
+ {modelName = "imorgon", modelHex = 0xBC7C0A00},
+ {modelName = "impaler", modelHex = 0x83070B62},
+ {modelName = "impaler2", modelHex = 0x3C26BD0C},
+ {modelName = "impaler3", modelHex = 0x8D45DF49},
+ {modelName = "impaler4", modelHex = 0x9804F4C7},
+ {modelName = "imperator", modelHex = 0x1A861243},
+ {modelName = "imperator2", modelHex = 0x619C1B82},
+ {modelName = "imperator3", modelHex = 0xD2F77E37},
+ {modelName = "infernus", modelHex = 0x18F25AC7},
+ {modelName = "infernus2", modelHex = 0xAC33179C},
+ {modelName = "ingot", modelHex = 0xB3206692},
+ {modelName = "innovation", modelHex = 0xF683EACA},
+ {modelName = "insurgent", modelHex = 0x9114EADA},
+ {modelName = "insurgent2", modelHex = 0x7B7E56F0},
+ {modelName = "insurgent3", modelHex = 0x8D4B7A8A},
+ {modelName = "intruder", modelHex = 0x34DD8AA1},
+ {modelName = "issi2", modelHex = 0xB9CB3B69},
+ {modelName = "issi3", modelHex = 0x378236E1},
+ {modelName = "issi4", modelHex = 0x256E92BA},
+ {modelName = "issi5", modelHex = 0x5BA0FF1E},
+ {modelName = "issi6", modelHex = 0x49E25BA1},
+ {modelName = "issi7", modelHex = 0x6E8DA4F7},
+ {modelName = "issi8", modelHex = 0xA7F8A7B7},
+ {modelName = "italigtb", modelHex = 0x85E8E76B},
+ {modelName = "italigtb2", modelHex = 0xE33A477B},
+ {modelName = "italigto", modelHex = 0xEC3E3404},
+ {modelName = "italirsx", modelHex = 0xBB78956A},
+ {modelName = "iwagen", modelHex = 0x27816B7E},
+ {modelName = "jackal", modelHex = 0xDAC67112},
+ {modelName = "jb700", modelHex = 0x3EAB5555},
+ {modelName = "jb7002", modelHex = 0x177DA45C},
+ {modelName = "jester", modelHex = 0xB2A716A3},
+ {modelName = "jester2", modelHex = 0xBE0E6126},
+ {modelName = "jester3", modelHex = 0xF330CB6A},
+ {modelName = "jester4", modelHex = 0xA1B3A871},
+ {modelName = "jet", modelHex = 0x3F119114},
+ {modelName = "jetmax", modelHex = 0x33581161},
+ {modelName = "journey", modelHex = 0xF8D48E7A},
+ {modelName = "journey2", modelHex = 0x9F04C481},
+ {modelName = "jubilee", modelHex = 0x1B8165D3},
+ {modelName = "jugular", modelHex = 0xF38C4245},
+ {modelName = "kalahari", modelHex = 0x5852838},
+ {modelName = "kamacho", modelHex = 0xF8C2E0E7},
+ {modelName = "kanjo", modelHex = 0x18619B7E},
+ {modelName = "kanjosj", modelHex = 0x18619B7E},
+ {modelName = "khamelion", modelHex = 0x206D1B68},
+ {modelName = "khanjali", modelHex = 0xAA6F980A},
+ {modelName = "komoda", modelHex = 0xCE44C4B9},
+ {modelName = "kosatka", modelHex = 0x4FAF0D70},
+ {modelName = "krieger", modelHex = 0xD86A0247},
+ {modelName = "kuruma", modelHex = 0xAE2BFE94},
+ {modelName = "kuruma2", modelHex = 0x187D938D},
+ {modelName = "landstalker", modelHex = 0x4BA4E8DC},
+ {modelName = "landstalker2", modelHex = 0xCE0B9F22},
+ {modelName = "lazer", modelHex = 0xB39B0AE6},
+ {modelName = "le7b", modelHex = 0xB6846A55},
+ {modelName = "lectro", modelHex = 0x26321E67},
+ {modelName = "lguard", modelHex = 0x1BF8D381},
+ {modelName = "limo2", modelHex = 0xF92AEC4D},
+ {modelName = "lm87", modelHex = 0xB6846A55},
+ {modelName = "locust", modelHex = 0xC7E55211},
+ {modelName = "longfin", modelHex = 0x6EF89CCC},
+ {modelName = "lurcher", modelHex = 0x7B47A6A7},
+ {modelName = "luxor", modelHex = 0x250B0C5E},
+ {modelName = "luxor2", modelHex = 0xB79F589E},
+ {modelName = "lynx", modelHex = 0x1CBDC10B},
+ {modelName = "mamba", modelHex = 0x9CFFFC56},
+ {modelName = "mammatus", modelHex = 0x97E55D11},
+ {modelName = "manana", modelHex = 0x81634188},
+ {modelName = "manana2", modelHex = 0x665F785D},
+ {modelName = "manchez", modelHex = 0xA5325278},
+ {modelName = "manchez2", modelHex = 0x40C332A3},
+ {modelName = "manchez3", modelHex = 0x40C332A3},
+ {modelName = "marquis", modelHex = 0xC1CE1183},
+ {modelName = "marshall", modelHex = 0x49863E9C},
+ {modelName = "massacro", modelHex = 0xF77ADE32},
+ {modelName = "massacro2", modelHex = 0xDA5819A3},
+ {modelName = "maverick", modelHex = 0x9D0450CA},
+ {modelName = "menacer", modelHex = 0x79DD18AE},
+ {modelName = "mesa", modelHex = 0x36848602},
+ {modelName = "mesa2", modelHex = 0xD36A4B44},
+ {modelName = "mesa3", modelHex = 0x84F42E51},
+ {modelName = "metrotrain", modelHex = 0x33C9E158},
+ {modelName = "michelli", modelHex = 0x3E5BD8D9},
+ {modelName = "microlight", modelHex = 0x96E24857},
+ {modelName = "miljet", modelHex = 0x9D80F93},
+ {modelName = "minitank", modelHex = 0xB53C6C52},
+ {modelName = "minivan", modelHex = 0xED7EADA4},
+ {modelName = "minivan2", modelHex = 0xBCDE91F0},
+ {modelName = "mixer", modelHex = 0xD138A6BB},
+ {modelName = "mixer2", modelHex = 0x1C534995},
+ {modelName = "mogul", modelHex = 0xD35698EF},
+ {modelName = "molotok", modelHex = 0x5D56F01B},
+ {modelName = "monroe", modelHex = 0xE62B361B},
+ {modelName = "monster", modelHex = 0xCD93A7DB},
+ {modelName = "monster3", modelHex = 0x669EB40A},
+ {modelName = "monster4", modelHex = 0x32174AFC},
+ {modelName = "monster5", modelHex = 0xD556917C},
+ {modelName = "moonbeam", modelHex = 0x1F52A43F},
+ {modelName = "moonbeam2", modelHex = 0x710A2B9B},
+ {modelName = "mower", modelHex = 0x6A4BD8F6},
+ {modelName = "mule", modelHex = 0x35ED670B},
+ {modelName = "mule2", modelHex = 0xC1632BEB},
+ {modelName = "mule3", modelHex = 0x85A5B471},
+ {modelName = "mule4", modelHex = 0x73F4110E},
+ {modelName = "mule5", modelHex = 0x501AC93C},
+ {modelName = "nebula", modelHex = 0xCB642637},
+ {modelName = "nemesis", modelHex = 0xDA288376},
+ {modelName = "neo", modelHex = 0x9F6ED5A2},
+ {modelName = "neon", modelHex = 0x91CA96EE},
+ {modelName = "nero", modelHex = 0x3DA47243},
+ {modelName = "nero2", modelHex = 0x4131E9CB},
+ {modelName = "nightblade", modelHex = 0xA0438767},
+ {modelName = "nightshade", modelHex = 0x8C2BD0DC},
+ {modelName = "nightshark", modelHex = 0x19DD9ED1},
+ {modelName = "nimbus", modelHex = 0xB2CF7250},
+ {modelName = "ninef", modelHex = 0x3D8FA25C},
+ {modelName = "ninef2", modelHex = 0xA8E38B01},
+ {modelName = "nokota", modelHex = 0x3DC92356},
+ {modelName = "novak", modelHex = 0x92F5024E},
+ {modelName = "omnis", modelHex = 0xD1AD4937},
+ {modelName = "omnisegt", modelHex = 0xD1AD4937},
+ {modelName = "openwheel1", modelHex = 0x58F77553},
+ {modelName = "openwheel2", modelHex = 0x4669D038},
+ {modelName = "oppressor", modelHex = 0x34B82784},
+ {modelName = "oppressor2", modelHex = 0x7B54A9D3},
+ {modelName = "oracle", modelHex = 0x506434F6},
+ {modelName = "oracle2", modelHex = 0xE18195B2},
+ {modelName = "osiris", modelHex = 0x767164D6},
+ {modelName = "outlaw", modelHex = 0x185E2FF3},
+ {modelName = "packer", modelHex = 0x21EEE87D},
+ {modelName = "panthere", modelHex = 0xE7D2A16},
+ {modelName = "panto", modelHex = 0xE644E480},
+ {modelName = "paradise", modelHex = 0x58B3979C},
+ {modelName = "paragon", modelHex = 0xE550775B},
+ {modelName = "paragon2", modelHex = 0x546D8EEE},
+ {modelName = "pariah", modelHex = 0x33B98FE2},
+ {modelName = "patriot", modelHex = 0xCFCFEB3B},
+ {modelName = "patriot2", modelHex = 0xE6E967F8},
+ {modelName = "patriot3", modelHex = 0xD80F4A44},
+ {modelName = "patrolboat", modelHex = 0xEF813606},
+ {modelName = "pbus", modelHex = 0x885F3671},
+ {modelName = "pbus2", modelHex = 0x149BD32A},
+ {modelName = "pcj", modelHex = 0xC9CEAF06},
+ {modelName = "penetrator", modelHex = 0x9734F3EA},
+ {modelName = "penumbra", modelHex = 0xE9805550},
+ {modelName = "penumbra2", modelHex = 0xDA5EC7DA},
+ {modelName = "peyote", modelHex = 0x6D19CCBC},
+ {modelName = "peyote2", modelHex = 0x9472CD24},
+ {modelName = "peyote3", modelHex = 0x4201A843},
+ {modelName = "pfister811", modelHex = 0x92EF6E04},
+ {modelName = "phantom", modelHex = 0x809AA4CB},
+ {modelName = "phantom2", modelHex = 0x9DAE1398},
+ {modelName = "phantom3", modelHex = 0xA90ED5C},
+ {modelName = "phoenix", modelHex = 0x831A21D5},
+ {modelName = "picador", modelHex = 0x59E0FBF3},
+ {modelName = "pigalle", modelHex = 0x404B6381},
+ {modelName = "police", modelHex = 0x79FBB0C5},
+ {modelName = "police2", modelHex = 0x9F05F101},
+ {modelName = "police3", modelHex = 0x71FA16EA},
+ {modelName = "police4", modelHex = 0x8A63C7B9},
+ {modelName = "policeb", modelHex = 0xFDEFAEC3},
+ {modelName = "policeold1", modelHex = 0xA46462F7},
+ {modelName = "policeold2", modelHex = 0x95F4C618},
+ {modelName = "policet", modelHex = 0x1B38E955},
+ {modelName = "polmav", modelHex = 0x1517D4D9},
+ {modelName = "pony", modelHex = 0xF8DE29A8},
+ {modelName = "pony2", modelHex = 0x38408341},
+ {modelName = "pounder", modelHex = 0x7DE35E7D},
+ {modelName = "pounder2", modelHex = 0x6290F15B},
+ {modelName = "prairie", modelHex = 0xA988D3A2},
+ {modelName = "pranger", modelHex = 0x2C33B46E},
+ {modelName = "predator", modelHex = 0xE2E7D4AB},
+ {modelName = "premier", modelHex = 0x8FB66F9B},
+ {modelName = "previon", modelHex = 0x546DA331},
+ {modelName = "primo", modelHex = 0xBB6B404F},
+ {modelName = "primo2", modelHex = 0x86618EDA},
+ {modelName = "proptrailer", modelHex = 0x153E1B0A},
+ {modelName = "prototipo", modelHex = 0x7E8F677F},
+ {modelName = "pyro", modelHex = 0xAD6065C0},
+ {modelName = "radi", modelHex = 0x9D96B45B},
+ {modelName = "raiden", modelHex = 0xA4D99B7D},
+ {modelName = "raketrailer", modelHex = 0x174CB172},
+ {modelName = "rallytruck", modelHex = 0x829A3C44},
+ {modelName = "rancherxl", modelHex = 0x6210CBB0},
+ {modelName = "rancherxl2", modelHex = 0x7341576B},
+ {modelName = "rapidgt", modelHex = 0x8CB29A14},
+ {modelName = "rapidgt2", modelHex = 0x679450AF},
+ {modelName = "rapidgt3", modelHex = 0x7A2EF5E4},
+ {modelName = "raptor", modelHex = 0xD7C56D39},
+ {modelName = "ratbike", modelHex = 0x6FACDF31},
+ {modelName = "ratloader", modelHex = 0xD83C13CE},
+ {modelName = "ratloader2", modelHex = 0xDCE1D9F7},
+ {modelName = "rcbandito", modelHex = 0xEEF345EC},
+ {modelName = "reaper", modelHex = 0xDF381E5},
+ {modelName = "rebel", modelHex = 0xB802DD46},
+ {modelName = "rebel2", modelHex = 0x8612B64B},
+ {modelName = "rebla", modelHex = 0x4F48FC4},
+ {modelName = "reever", modelHex = 0x76D7C404},
+ {modelName = "regina", modelHex = 0xFF22D208},
+ {modelName = "remus", modelHex = 0x5216AD5E},
+ {modelName = "rentalbus", modelHex = 0xBE819C63},
+ {modelName = "retinue", modelHex = 0x6DBD6C0A},
+ {modelName = "retinue2", modelHex = 0x79178F0A},
+ {modelName = "revolter", modelHex = 0xE78CC3D9},
+ {modelName = "rhapsody", modelHex = 0x322CF98F},
+ {modelName = "rhinehart", modelHex = 0x1D4C528A},
+ {modelName = "rhino", modelHex = 0x2EA68690},
+ {modelName = "riata", modelHex = 0xA4A4E453},
+ {modelName = "riot", modelHex = 0xB822A1AA},
+ {modelName = "riot2", modelHex = 0x9B16A3B4},
+ {modelName = "ripley", modelHex = 0xCD935EF9},
+ {modelName = "rocoto", modelHex = 0x7F5C91F1},
+ {modelName = "rogue", modelHex = 0xC5DD6967},
+ {modelName = "romero", modelHex = 0x2560B2FC},
+ {modelName = "rrocket", modelHex = 0x36A167E0},
+ {modelName = "rt3000", modelHex = 0xE1C03AB0},
+ {modelName = "rubble", modelHex = 0x9A5B1DCC},
+ {modelName = "ruffian", modelHex = 0xCABD11E8},
+ {modelName = "ruiner", modelHex = 0xF26CEFF9},
+ {modelName = "ruiner2", modelHex = 0x381E10BD},
+ {modelName = "ruiner3", modelHex = 0x2E5AFD37},
+ {modelName = "ruiner4", modelHex = 0x68199CF},
+ {modelName = "rumpo", modelHex = 0x4543B74D},
+ {modelName = "rumpo2", modelHex = 0x961AFEF7},
+ {modelName = "rumpo3", modelHex = 0x57F682AF},
+ {modelName = "ruston", modelHex = 0x2AE524A8},
+ {modelName = "s80", modelHex = 0xECA6B6A3},
+ {modelName = "sabregt", modelHex = 0x9B909C94},
+ {modelName = "sabregt2", modelHex = 0xD4EA603},
+ {modelName = "sadler", modelHex = 0xDC434E51},
+ {modelName = "sadler2", modelHex = 0x2BC345D1},
+ {modelName = "sanchez", modelHex = 0x2EF89E46},
+ {modelName = "sanchez2", modelHex = 0xA960B13E},
+ {modelName = "sanctus", modelHex = 0x58E316C7},
+ {modelName = "sandking", modelHex = 0xB9210FD0},
+ {modelName = "sandking2", modelHex = 0x3AF8C345},
+ {modelName = "savage", modelHex = 0xFB133A17},
+ {modelName = "savestra", modelHex = 0x35DED0DD},
+ {modelName = "sc1", modelHex = 0x5097F589},
+ {modelName = "scarab", modelHex = 0xBBA2A2F7},
+ {modelName = "scarab2", modelHex = 0x5BEB3CE0},
+ {modelName = "scarab3", modelHex = 0xDD71BFEB},
+ {modelName = "schafter2", modelHex = 0xB52B5113},
+ {modelName = "schafter3", modelHex = 0xA774B5A6},
+ {modelName = "schafter4", modelHex = 0x58CF185C},
+ {modelName = "schafter5", modelHex = 0xCB0E7CD9},
+ {modelName = "schafter6", modelHex = 0x72934BE4},
+ {modelName = "schlagen", modelHex = 0xE1C03AB0},
+ {modelName = "schwarzer", modelHex = 0xD37B7976},
+ {modelName = "scorcher", modelHex = 0xF4E1AA15},
+ {modelName = "scramjet", modelHex = 0xD9F0503D},
+ {modelName = "scrap", modelHex = 0x9A9FD3DF},
+ {modelName = "seabreeze", modelHex = 0xE8983F9F},
+ {modelName = "seashark", modelHex = 0xC2974024},
+ {modelName = "seashark2", modelHex = 0xDB4388E4},
+ {modelName = "seashark3", modelHex = 0xED762D49},
+ {modelName = "seasparrow", modelHex = 0xD4AE63D9},
+ {modelName = "seasparrow2", modelHex = 0x494752F7},
+ {modelName = "seasparrow3", modelHex = 0x5F017E6B},
+ {modelName = "seminole", modelHex = 0x48CECED3},
+ {modelName = "seminole2", modelHex = 0x94114926},
+ {modelName = "sentinel", modelHex = 0x50732C82},
+ {modelName = "sentinel2", modelHex = 0x3412AE2D},
+ {modelName = "sentinel3", modelHex = 0x41D149AA},
+ {modelName = "sentinel4", modelHex = 0x86FE0B60},
+ {modelName = "serrano", modelHex = 0x4FB1A214},
+ {modelName = "seven70", modelHex = 0x97398A4B},
+ {modelName = "shamal", modelHex = 0xB79C1BF5},
+ {modelName = "sheava", modelHex = 0x30D3F6D8},
+ {modelName = "sheriff", modelHex = 0x9BAA707C},
+ {modelName = "sheriff2", modelHex = 0x72935408},
+ {modelName = "shinobi", modelHex = 0x50A6FB9C},
+ {modelName = "shotaro", modelHex = 0xE7D2A16},
+ {modelName = "skylift", modelHex = 0x3E48BF23},
+ {modelName = "slamtruck", modelHex = 0xC1A8A914},
+ {modelName = "slamvan", modelHex = 0x2B7F9DE3},
+ {modelName = "slamvan2", modelHex = 0x31ADBBFC},
+ {modelName = "slamvan3", modelHex = 0x42BC5E19},
+ {modelName = "slamvan4", modelHex = 0x8526E2F5},
+ {modelName = "slamvan5", modelHex = 0x163F8520},
+ {modelName = "slamvan6", modelHex = 0x67D52852},
+ {modelName = "sm722", modelHex = 0xD9F0503D},
+ {modelName = "sovereign", modelHex = 0x2C509634},
+ {modelName = "specter", modelHex = 0x706E2B40},
+ {modelName = "specter2", modelHex = 0x400F5147},
+ {modelName = "speeder", modelHex = 0xDC60D2B},
+ {modelName = "speeder2", modelHex = 0x1A144F2A},
+ {modelName = "speedo", modelHex = 0xCFB3870C},
+ {modelName = "speedo2", modelHex = 0x2B6DC64A},
+ {modelName = "speedo4", modelHex = 0xD17099D},
+ {modelName = "squaddie", modelHex = 0xF9E67C05},
+ {modelName = "squalo", modelHex = 0x17DF5EC2},
+ {modelName = "stafford", modelHex = 0x1324E960},
+ {modelName = "stalion", modelHex = 0x72A4C31E},
+ {modelName = "stalion2", modelHex = 0xE80F67EE},
+ {modelName = "stanier", modelHex = 0xA7EDE74D},
+ {modelName = "starling", modelHex = 0x9A9FD3DF},
+ {modelName = "stinger", modelHex = 0x5C23AF9B},
+ {modelName = "stingergt", modelHex = 0x82E499FA},
+ {modelName = "stockade", modelHex = 0x6827CF72},
+ {modelName = "stockade3", modelHex = 0xF337AB36},
+ {modelName = "stratum", modelHex = 0x66B4FC45},
+ {modelName = "streiter", modelHex = 0x67D2B389},
+ {modelName = "stretch", modelHex = 0x8B13F083},
+ {modelName = "strikeforce", modelHex = 0x64DE07A1},
+ {modelName = "stromberg", modelHex = 0x34DBA661},
+ {modelName = "stryder", modelHex = 0x11F58A5A},
+ {modelName = "stunt", modelHex = 0x81794C70},
+ {modelName = "submersible", modelHex = 0x2DFF622F},
+ {modelName = "submersible2", modelHex = 0xC07107EE},
+ {modelName = "sugoi", modelHex = 0x3ADB9758},
+ {modelName = "sultan", modelHex = 0x39DA2754},
+ {modelName = "sultan2", modelHex = 0x3404691C},
+ {modelName = "sultan3", modelHex = 0xEEA75E63},
+ {modelName = "sultanrs", modelHex = 0xEEA75E63},
+ {modelName = "suntrap", modelHex = 0xEF2295C9},
+ {modelName = "superd", modelHex = 0x42F2ED16},
+ {modelName = "supervolito", modelHex = 0x2A54C47D},
+ {modelName = "supervolito2", modelHex = 0x9C5E5644},
+ {modelName = "surano", modelHex = 0x16E478C1},
+ {modelName = "surfer", modelHex = 0x29B0DA97},
+ {modelName = "surfer2", modelHex = 0xB1D80E06},
+ {modelName = "surfer3", modelHex = 0xC247C6B},
+ {modelName = "surge", modelHex = 0x8F0E3594},
+ {modelName = "swift", modelHex = 0xEBC24DF2},
+ {modelName = "swift2", modelHex = 0x4019CB4C},
+ {modelName = "swinger", modelHex = 0x1DD4C0FF},
+ {modelName = "t20", modelHex = 0x6322B39A},
+ {modelName = "taco", modelHex = 0x744CA80D},
+ {modelName = "tahoma", modelHex = 0x58E316C7},
+ {modelName = "tailgater", modelHex = 0xC3DDFDCE},
+ {modelName = "tailgater2", modelHex = 0xB5D306A},
+ {modelName = "taipan", modelHex = 0xBC5DC07E},
+ {modelName = "tampa", modelHex = 0x39F9C898},
+ {modelName = "tampa2", modelHex = 0xC0240885},
+ {modelName = "tampa3", modelHex = 0xB7D9F7F1},
+ {modelName = "tanker", modelHex = 0xD46F4737},
+ {modelName = "tanker2", modelHex = 0x74998082},
+ {modelName = "tankercar", modelHex = 0x22EDDC30},
+ {modelName = "taxi", modelHex = 0xC703DB5F},
+ {modelName = "technical", modelHex = 0x83051506},
+ {modelName = "technical2", modelHex = 0x4662BCBB},
+ {modelName = "technical3", modelHex = 0x50D4D19F},
+ {modelName = "tempesta", modelHex = 0x1044926F},
+ {modelName = "tenf", modelHex = 0xA10E4BCE},
+ {modelName = "tenf2", modelHex = 0x8E08EC82},
+ {modelName = "terbyte", modelHex = 0x897AFC65},
+ {modelName = "tezeract", modelHex = 0x3D7C6410},
+ {modelName = "thrax", modelHex = 0x3E3D1F59},
+ {modelName = "thrust", modelHex = 0x6D6F8F43},
+ {modelName = "thruster", modelHex = 0x58CDAF30},
+ {modelName = "tigon", modelHex = 0xAF0B8D56},
+ {modelName = "tiptruck", modelHex = 0x2E19879},
+ {modelName = "tiptruck2", modelHex = 0xC7824E5E},
+ {modelName = "titan", modelHex = 0x761E2AD3},
+ {modelName = "toreador", modelHex = 0x56C8A5EF},
+ {modelName = "torero", modelHex = 0x59A9E570},
+ {modelName = "torero2", modelHex = 0x3B7C0A4},
+ {modelName = "tornado", modelHex = 0x1BB290BC},
+ {modelName = "tornado2", modelHex = 0x5B42A5C4},
+ {modelName = "tornado3", modelHex = 0x690A4153},
+ {modelName = "tornado4", modelHex = 0x86CF7CDD},
+ {modelName = "tornado5", modelHex = 0x94DA98EF},
+ {modelName = "tornado6", modelHex = 0xA31CB573},
+ {modelName = "toro", modelHex = 0x3FD5AA2F},
+ {modelName = "toro2", modelHex = 0x362CAC6D},
+ {modelName = "toros", modelHex = 0xBA5334AC},
+ {modelName = "tourbus", modelHex = 0x73B1C3CB},
+ {modelName = "towtruck", modelHex = 0xB12314E0},
+ {modelName = "towtruck2", modelHex = 0xE5A2D6C6},
+ {modelName = "tr2", modelHex = 0x7BE032C6},
+ {modelName = "tr3", modelHex = 0x6A59902D},
+ {modelName = "tr4", modelHex = 0x7CAB34D0},
+ {modelName = "tractor", modelHex = 0x61D6BA8C},
+ {modelName = "tractor2", modelHex = 0x843B73DE},
+ {modelName = "tractor3", modelHex = 0x562A97BD},
+ {modelName = "trailerlarge", modelHex = 0x5993F939},
+ {modelName = "trailerlogs", modelHex = 0x782A236D},
+ {modelName = "trailers", modelHex = 0xCBB2BE0E},
+ {modelName = "trailers2", modelHex = 0xA1DA3C91},
+ {modelName = "trailers3", modelHex = 0x8548036D},
+ {modelName = "trailers4", modelHex = 0xBE66F5AA},
+ {modelName = "trailersmall", modelHex = 0x2A72BEAB},
+ {modelName = "trailersmall2", modelHex = 0x8FD54EBB},
+ {modelName = "trash", modelHex = 0x72435A19},
+ {modelName = "trash2", modelHex = 0xB527915C},
+ {modelName = "trflat", modelHex = 0xAF62F6B2},
+ {modelName = "tribike", modelHex = 0x4339CD69},
+ {modelName = "tribike2", modelHex = 0xB67597EC},
+ {modelName = "tribike3", modelHex = 0xE823FB48},
+ {modelName = "trophytruck", modelHex = 0x612F4B6},
+ {modelName = "trophytruck2", modelHex = 0xD876DBE2},
+ {modelName = "tropic", modelHex = 0x1149422F},
+ {modelName = "tropic2", modelHex = 0x56590FE9},
+ {modelName = "tropos", modelHex = 0x707E63A4},
+ {modelName = "tug", modelHex = 0x82CAC433},
+ {modelName = "tula", modelHex = 0x3E2E4F8A},
+ {modelName = "tulip", modelHex = 0x56D42971},
+ {modelName = "tulip2", modelHex = 0xC07B4F2E},
+ {modelName = "turismo2", modelHex = 0xC575DF11},
+ {modelName = "turismor", modelHex = 0x185484E1},
+ {modelName = "tvtrailer", modelHex = 0x967620BE},
+ {modelName = "tyrant", modelHex = 0xE99011C2},
+ {modelName = "tyrus", modelHex = 0x7B406EFB},
+ {modelName = "utillitruck", modelHex = 0x1ED0A534},
+ {modelName = "utillitruck2", modelHex = 0x34E6BF6B},
+ {modelName = "utillitruck3", modelHex = 0x7F2153DF},
+ {modelName = "vacca", modelHex = 0x142E0DC3},
+ {modelName = "vader", modelHex = 0xF79A00F7},
+ {modelName = "vagner", modelHex = 0x7397224C},
+ {modelName = "vagrant", modelHex = 0x2C1FEA99},
+ {modelName = "valkyrie", modelHex = 0xA09E15FD},
+ {modelName = "valkyrie2", modelHex = 0x5BFA5C4B},
+ {modelName = "vamos", modelHex = 0xFD128DFD},
+ {modelName = "vectre", modelHex = 0xBBA2A2F7},
+ {modelName = "velum", modelHex = 0x9C429B6A},
+ {modelName = "velum2", modelHex = 0x403820E8},
+ {modelName = "verlierer2", modelHex = 0x41B77FA4},
+ {modelName = "verus", modelHex = 0x11CBC051},
+ {modelName = "vestra", modelHex = 0x4FF77E37},
+ {modelName = "vetir", modelHex = 0x780FFBD2},
+ {modelName = "veto", modelHex = 0xCCE5C8FA},
+ {modelName = "veto2", modelHex = 0xA703E4A9},
+ {modelName = "vigero", modelHex = 0xCEC6B9B7},
+ {modelName = "vigero2", modelHex = 0x973141FC},
+ {modelName = "vigilante", modelHex = 0xB5EF4C33},
+ {modelName = "vindicator", modelHex = 0xAF599F01},
+ {modelName = "virgo", modelHex = 0xE2504942},
+ {modelName = "virgo2", modelHex = 0xCA62927A},
+ {modelName = "virgo3", modelHex = 0xFDFFB0},
+ {modelName = "viseris", modelHex = 0xE8A8BA94},
+ {modelName = "visione", modelHex = 0xC4810400},
+ {modelName = "virtue", modelHex = 0xF1B44F44},
+ {modelName = "volatol", modelHex = 0x1AAD0DED},
+ {modelName = "volatus", modelHex = 0x920016F1},
+ {modelName = "voltic", modelHex = 0x9F4B77BE},
+ {modelName = "voltic2", modelHex = 0x3AF76F4A},
+ {modelName = "voodoo", modelHex = 0x779B4F2D},
+ {modelName = "voodoo2", modelHex = 0x1F3766E3},
+ {modelName = "vortex", modelHex = 0xDBA9DBFC},
+ {modelName = "vstr", modelHex = 0x56CDEE7D},
+ {modelName = "warrener", modelHex = 0x51D83328},
+ {modelName = "washington", modelHex = 0x69F06B57},
+ {modelName = "wastelander", modelHex = 0x8E08EC82},
+ {modelName = "weevil", modelHex = 0x61FE4D6A},
+ {modelName = "weevil2", modelHex = 0x3D029B8},
+ {modelName = "windsor", modelHex = 0x5E4327C8},
+ {modelName = "windsor2", modelHex = 0x8CF5CAE1},
+ {modelName = "winky", modelHex = 0xF7F0E2E},
+ {modelName = "wolfsbane", modelHex = 0xDB20A373},
+ {modelName = "xa21", modelHex = 0x36B4A8A9},
+ {modelName = "xls", modelHex = 0x47BBCF2E},
+ {modelName = "xls2", modelHex = 0xE6401328},
+ {modelName = "yosemite", modelHex = 0x6F946279},
+ {modelName = "yosemite2", modelHex = 0x64F49967},
+ {modelName = "yosemite3", modelHex = 0x409D787},
+ {modelName = "youga", modelHex = 0x3E5F6B8},
+ {modelName = "youga2", modelHex = 0x3D29CD2B},
+ {modelName = "youga3", modelHex = 0x6B73A9BE},
+ {modelName = "youga4", modelHex = 0x589A840C},
+ {modelName = "z190", modelHex = 0x3201DD49},
+ {modelName = "zeno", modelHex = 0x2714AA93},
+ {modelName = "zentorno", modelHex = 0xAC5DF515},
+ {modelName = "zhaba", modelHex = 0x4C8DBA51},
+ {modelName = "zion", modelHex = 0xBD1B39C3},
+ {modelName = "zion2", modelHex = 0xB8E2AE18},
+ {modelName = "zion3", modelHex = 0x6F039A67},
+ {modelName = "zombiea", modelHex = 0xC3D7C72B},
+ {modelName = "zombieb", modelHex = 0xDE05FB87},
+ {modelName = "zorrusso", modelHex = 0xD757D97D},
+ {modelName = "zr350", modelHex = 0xA3D8D06},
+ {modelName = "zr380", modelHex = 0x20314B42},
+ {modelName = "zr3802", modelHex = 0xBE11EFC6},
+ {modelName = "zr3803", modelHex = 0xA7DCC35C},
+ {modelName = "ztype", modelHex = 0x2D3BD401},
+}
\ No newline at end of file
diff --git a/resources/night_ers/config/pullover-config.lua b/resources/night_ers/config/pullover-config.lua
new file mode 100644
index 000000000..846d22dbe
--- /dev/null
+++ b/resources/night_ers/config/pullover-config.lua
@@ -0,0 +1,42 @@
+Config = Config or {}
+
+--====================== Pullover Settings ======================--
+
+Config.NPCChanceToFleeDuringPullover = 15 -- Percentage of chance to flee of a total of 100%.
+Config.PulloverDistanceToCheckInFront = 10.0 -- Distance in GTA meters to check in front of the player.
+Config.PulloverDistanceToCheckBehind = 10.0 -- Distance in GTA meters to check behind the player.
+Config.EnablePulloverLightShade = true -- Shows a sphere of light where the target vehicle must be to pull them over.
+Config.RequireKeyboardInputToPullover = false -- If true, the player will need to press a key on the keyboard to pull them over instead of using a controller input for example.
+Config.PulloverLightShadeData = {
+ red = 200,
+ green = 245,
+ blue = 38,
+ range = 2.5,
+ intensity = 10.0,
+ shadow = 1.0
+}
+
+Config.EnablePulloverMarker = false -- Shows a marker where the target vehicle must be to pull them over.
+Config.PulloverMarkerData = {
+ MarkerId = 30 --[[ integer ]],
+ dirX = 0 --[[ number ]],
+ dirY = 0 --[[ number ]],
+ dirZ = 0 --[[ number ]],
+ rotX = 90.0 --[[ number ]],
+ rotY = 0.0 --[[ number ]], -- Unused, entity heading used.
+ rotZ = 0 --[[ number ]],
+ scaleX = 2.0 --[[ number ]],
+ scaleY = 2.0 --[[ number ]],
+ scaleZ = 5.0 --[[ number ]],
+ red = 200 --[[ integer ]],
+ green = 245 --[[ integer ]],
+ blue = 38 --[[ integer ]],
+ alpha = 225 --[[ integer ]],
+ bobUpAndDown = false --[[ boolean ]],
+ faceCamera = false --[[ boolean ]],
+ p19 = 0 --[[ integer ]],
+ rotate = false --[[ boolean ]],
+ textureDict = 0 --[[ string ]],
+ textureName = 0 --[[ string ]],
+ drawOnEnts = 0 --[[ boolean ]]
+}
diff --git a/resources/night_ers/config/pursuit-config.lua b/resources/night_ers/config/pursuit-config.lua
new file mode 100644
index 000000000..e297b0424
--- /dev/null
+++ b/resources/night_ers/config/pursuit-config.lua
@@ -0,0 +1,379 @@
+Config = Config or {}
+
+--=============== PURSUIT SETTINGS =================--
+
+Config.PursuitModeEnabled = true
+Config.EnablePursuitModeUI = true -- Displays a UI when in pursuit mode. (Indicates when backup is available)
+Config.EnablePursuitHotkeyHints = true -- Displays hotkey hints in the chatbox.
+Config.PursuitMaxDistance = 400.0 -- Max distance for pursuit to continue (Limited to 400.0)
+Config.PursuitDrivingStyle = 786944 -- Driving style for the vehicle being pursued.
+
+-- Pursuit zoom camera + marker [Set the hotkey in config.lua OR ESC -> Keybinds in-game]
+Config.ZoomOnPursuitStart = false -- Enables or disables initially zooming in when a pursuit is started.
+Config.PursuitZoomDuration = 2000 -- 2 seconds
+Config.PursuitZoomInitialDistance = 30.0 -- Camera will start at this distance
+Config.PursuitZoomFinalDistance = 10.0 -- Camera will zoom in to this distance
+Config.PursuitZoomHeight = 5.0 -- Camera height
+Config.DeletePursuitBackupWhenOutOfRange = false -- false = spawn units closer to the player if they are out of range | true = delete all units if only one is out of range
+Config.EnableHelicopterSearchLight = true -- Draws a sphere of light around the chased target entity and a searchlight for the area. (more resmon usage)
+
+Config.EnablePursuitZoomMarker = true
+Config.PursuitMarkerData = {
+ MarkerId = 21 --[[ integer ]],
+ dirX = 0 --[[ number ]],
+ dirY = 0 --[[ number ]],
+ dirZ = 0 --[[ number ]],
+ rotX = 0 --[[ number ]],
+ rotY = 180.0 --[[ number ]],
+ rotZ = 0 --[[ number ]],
+ scaleX = 2.5 --[[ number ]],
+ scaleY = 2.5 --[[ number ]],
+ scaleZ = 2.5 --[[ number ]],
+ red = 255 --[[ integer ]],
+ green = 0 --[[ integer ]],
+ blue = 0 --[[ integer ]],
+ alpha = 100 --[[ integer ]],
+ bobUpAndDown = true --[[ boolean ]],
+ faceCamera = true --[[ boolean ]],
+ p19 = 0 --[[ integer ]],
+ rotate = false --[[ boolean ]],
+ textureDict = 0 --[[ string ]],
+ textureName = 0 --[[ string ]],
+ drawOnEnts = 0 --[[ boolean ]]
+}
+
+Config.EnablePursuitBackupRadialMenu = true
+Config.PursuitBackupTypes = {
+ -- IMPORTANT: You can edit existing backup types. But do not add or remove ones.
+ [1] = {
+ PursuitBackupName = "Light Backup Request",
+ PursuitBackupDescription = "Requesting light backup will make dispatch send out a few motorcycle units to aid in vehicle pursuit.",
+ PursuitType = "light", -- do not change
+ PursuitVehicles = {"policeb"}, -- Will randomly select one of these vehicles per amount of units.
+ PursuitVehicleType = 'bike', -- Make sure all the vehicles in PursuitVehicles are of this type. https://docs.fivem.net/natives/?_0xA273060E
+ PursuitChaseFlag = 32, -- https://docs.fivem.net/natives/?_0xCC665AAC360D31E7
+ AmountOfUnits = 2,
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) once on foot.
+ "weapon_stungun",
+ },
+ ChanceForPursuitTargetToBeArmed = 5, -- Chance is 5% for the pursued target to be armed in a response to a light backup request.
+ PursuitTargetWeaponData = { -- The pursued target will be given one randomly selected weapon (in hand) once on foot.
+ "weapon_knife",
+ "weapon_pistol",
+ },
+ BlipData = { -- https://docs.fivem.net/docs/game-references/blips/
+ Enabled = true,
+ Sprite = 42,
+ Category = 2,
+ Display = 4,
+ Scale = 0.8,
+ Colour = 0,
+ ShortRange = true,
+ Flashes = false,
+ Cone = true
+ },
+ PedData = { -- Contains 2 examples, last one (index [2]) is an MP ped example. Remove it if you don't want to use MP peds.
+ [1] = {
+ -- Use vMenu to fetch these numbers via Player Appearance. If model is not an MP ped it will not apply any props or components.
+ modelName = "s_m_y_hwaycop_01", -- This is not an MP ped model
+ props = {}, -- No props needed for non-mp peds.
+ components = {}, -- No components needed for non-mp peds.
+ },
+ -- [2] = {
+ -- -- Use vMenu to fetch these numbers via Player Appearance. If model is not an MP ped it will not apply any props or components.
+ -- modelName = "mp_m_freemode_01", -- This is an MP ped model
+ -- props = {
+ -- -- Example: {prop type (Helmet), prop type index (Motorcycle helmet), prop colour index (Black colour)}
+ -- { 0, 9, 1 }, -- Hats / Helments
+ -- { 1, 0, 0 }, -- Glassess
+ -- { 2, 0, 0 }, -- Misc
+ -- { 3, 0, 0 },
+ -- },
+ -- components = {
+ -- -- Example: {component type (Mask), component type index (Clown Mask), component colour index (White colour)}
+ -- { 1, 122, 1 }, -- Mask
+ -- { 3, 201, 1 }, -- Upper body
+ -- { 4, 18, 1 }, -- Legs / Pants
+ -- { 5, 1, 1 }, -- Bags / Parachutes
+ -- { 6, 26, 1 }, -- Shoes
+ -- { 7, 4, 1 }, -- Neck / Scarfs
+ -- { 8, 16, 1 }, -- Shirt / Accessory
+ -- { 9, 2, 1 }, -- Body Armor
+ -- { 10, 2, 1 }, -- Badges / Logos
+ -- { 11, 26, 1 }, -- Jackets
+ -- },
+ -- },
+ -- Add more peds here. Don't forget about defining the correct next index number: [3]
+ },
+ VehicleData = { -- Contains 2 examples.
+ [1] = {
+ modelName = "policeb",
+ extraIds = {1, 2, 3, 4, 5, 10, 15, 20}, -- Extra's which are turned ON by default.
+ liveryId = -1,
+ vehicleColours = { primary = -1, secondary = -1, pearlescent = -1, wheel = -1},
+ windowTintId = -1, -- 0 to 6 where 0 is no window tint. -1 does nothing which is also fine.
+ dirtLevel = 0.0 -- 0.0 to 15.0 where 15.0 is very dirty.
+ },
+ },
+ },
+ [2] = {
+ PursuitBackupName = "Medium Backup Request",
+ PursuitBackupDescription = "Requesting medium backup will make dispatch send out multiple cruiser units to aid in vehicle pursuit.",
+ PursuitType = "medium", -- do not change
+ PursuitVehicles = {"sheriff", "sheriff2"}, --"police3", "sheriff2", "police", "policet", "fbi", "fbi2"
+ PursuitVehicleType = 'automobile', -- Make sure all the vehicles in PursuitVehicles are of this type. https://docs.fivem.net/natives/?_0xA273060E
+ PursuitChaseFlag = 8, -- https://docs.fivem.net/natives/?_0xCC665AAC360D31E7
+ AmountOfUnits = 3,
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) once on foot.
+ "weapon_pistol",
+ },
+ ChanceForPursuitTargetToBeArmed = 15, -- Chance is 15% for the pursued target to be armed in a response to a medium backup request.
+ PursuitTargetWeaponData = { -- The pursued target will be given one randomly selected weapon (in hand) once on foot.
+ "weapon_knife",
+ "weapon_pistol",
+ "weapon_microsmg",
+ },
+ BlipData = {
+ Enabled = true,
+ Sprite = 42,
+ Category = 2,
+ Display = 4,
+ Scale = 0.8,
+ Colour = 0,
+ ShortRange = true,
+ Flashes = false,
+ Cone = true
+ },
+ PedData = { -- Contains 4 examples, last one (index [4]) is an MP ped example. Remove it if you don't want to use MP peds.
+ [1] = {
+ -- Use vMenu to fetch these numbers via Player Appearance. If model is not an MP ped it will not apply any props or components.
+ modelName = "s_f_y_cop_01", -- This is not an MP ped model
+ props = {}, -- No props needed for non-mp peds.
+ components = {}, -- No components needed for non-mp peds.
+ },
+ [2] = {
+ -- Use vMenu to fetch these numbers via Player Appearance. If model is not an MP ped it will not apply any props or components.
+ modelName = "s_m_y_cop_01",
+ props = {}, -- No props needed for non-mp peds.
+ components = {}, -- No components needed for non-mp peds.
+ },
+ -- [3] = {
+ -- -- Use vMenu to fetch these numbers via Player Appearance. If model is not an MP ped it will not apply any props or components.
+ -- modelName = "csb_cop",
+ -- props = {}, -- No props needed for non-mp peds.
+ -- components = {}, -- No components needed for non-mp peds.
+ -- },
+ -- [4] = {
+ -- -- Use vMenu to fetch these numbers via Player Appearance. If model is not an MP ped it will not apply any props or components.
+ -- modelName = "mp_m_freemode_01", -- This is an MP ped model
+ -- props = {
+ -- -- Example: {prop type (Helmet), prop type index (Motorcycle helmet), prop colour index (Black colour)}
+ -- { 0, 9, 1 }, -- Hats / Helments
+ -- { 1, 0, 0 }, -- Glassess
+ -- { 2, 0, 0 }, -- Misc
+ -- { 3, 0, 0 },
+ -- },
+ -- components = {
+ -- -- Example: {component type (Mask), component type index (Clown Mask), component colour index (White colour)}
+ -- { 1, 122, 1 }, -- Mask
+ -- { 3, 201, 1 }, -- Upper body
+ -- { 4, 18, 1 }, -- Legs / Pants
+ -- { 5, 1, 1 }, -- Bags / Parachutes
+ -- { 6, 26, 1 }, -- Shoes
+ -- { 7, 4, 1 }, -- Neck / Scarfs
+ -- { 8, 16, 1 }, -- Shirt / Accessory
+ -- { 9, 2, 1 }, -- Body Armor
+ -- { 10, 2, 1 }, -- Badges / Logos
+ -- { 11, 26, 1 }, -- Jackets
+ -- },
+ -- },
+ -- Add more peds here. Don't forget about defining the correct next index number: [5]
+ },
+ VehicleData = { -- Contains 2 examples.
+ [1] = {
+ modelName = "sheriff",
+ extraIds = {1, 2, 3, 4, 5, 10, 15, 20}, -- Extra's which are turned ON by default.
+ liveryId = -1,
+ vehicleColours = { primary = -1, secondary = -1, pearlescent = -1, wheel = -1},
+ windowTintId = -1, -- 0 to 6 where 0 is no window tint. -1 does nothing which is also fine.
+ dirtLevel = 0.0 -- 0.0 to 15.0 where 15.0 is very dirty.
+ },
+ [2] = {
+ modelName = "sheriff2",
+ extraIds = {1, 2, 3, 4, 5, 10, 15, 20}, -- Extra's which are turned ON by default.
+ liveryId = -1,
+ vehicleColours = { primary = -1, secondary = -1, pearlescent = -1, wheel = -1},
+ windowTintId = -1, -- 0 to 6 where 0 is no window tint. -1 does nothing which is also fine.
+ dirtLevel = 0.0 -- 0.0 to 15.0 where 15.0 is very dirty.
+ },
+ -- Add more here.
+ },
+ },
+ [3] = {
+ PursuitBackupName = "Heavy Backup Request",
+ PursuitBackupDescription = "Requesting heavy backup will make dispatch send out multiple armed units to aid in vehicle pursuit.",
+ PursuitType = "heavy", -- do not change
+ PursuitVehicles = {"riot", "riot2"},
+ PursuitVehicleType = 'automobile', -- Make sure all the vehicles in PursuitVehicles are of this type. https://docs.fivem.net/natives/?_0xA273060E
+ PursuitChaseFlag = 2, -- https://docs.fivem.net/natives/?_0xCC665AAC360D31E7
+ AmountOfUnits = 4,
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) once on foot.
+ "weapon_carbinerifle",
+ },
+ ChanceForPursuitTargetToBeArmed = 30, -- Chance is 30% for the pursued target to be armed in a response to a heavy backup request.
+ PursuitTargetWeaponData = { -- The pursued target will be given one randomly selected weapon (in hand) once on foot.
+ "weapon_assaultrifle",
+ },
+ BlipData = {
+ Enabled = true,
+ Sprite = 42,
+ Category = 2,
+ Display = 4,
+ Scale = 0.8,
+ Colour = 0,
+ ShortRange = true,
+ Flashes = false,
+ Cone = true
+ },
+ PedData = {
+ [1] = {
+ -- Use vMenu to fetch these numbers via Player Appearance. If model is not an MP ped it will not apply any props or components.
+ modelName = "s_m_y_swat_01", -- This is not an MP ped model
+ props = {}, -- No props needed for non-mp peds.
+ components = {}, -- No components needed for non-mp peds.
+ },
+ },
+ VehicleData = { -- Contains 2 examples.
+ [1] = {
+ modelName = "riot",
+ extraIds = {1, 2, 3, 4, 5, 10, 15, 20}, -- Extra's which are turned ON by default.
+ liveryId = -1,
+ vehicleColours = { primary = -1, secondary = -1, pearlescent = -1, wheel = -1},
+ windowTintId = -1, -- 0 to 6 where 0 is no window tint. -1 does nothing which is also fine.
+ dirtLevel = 0.0 -- 0.0 to 15.0 where 15.0 is very dirty.
+ },
+ [2] = {
+ modelName = "riot2",
+ extraIds = {1, 2, 3, 4, 5, 10, 15, 20}, -- Extra's which are turned ON by default.
+ liveryId = -1,
+ vehicleColours = { primary = -1, secondary = -1, pearlescent = -1, wheel = -1},
+ windowTintId = -1, -- 0 to 6 where 0 is no window tint. -1 does nothing which is also fine.
+ dirtLevel = 0.0 -- 0.0 to 15.0 where 15.0 is very dirty.
+ },
+ -- Add more here.
+ },
+ },
+ [4] = {
+ PursuitBackupName = "Air Backup Request",
+ PursuitBackupDescription = "Requesting air backup will make dispatch send out county (NPC) helicopter units to aid in vehicle pursuit.",
+ PursuitType = "air", -- do not change
+ PursuitVehicles = {"polmav"},
+ PursuitVehicleType = 'heli', -- Make sure all the vehicles in PursuitVehicles are of this type. https://docs.fivem.net/natives/?_0xA273060E
+ PursuitChaseFlag = 0, -- Irrelevant for air units
+ AmountOfUnits = 1,
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) once on foot.
+ "weapon_combatpistol",
+ },
+ ChanceForPursuitTargetToBeArmed = 5, -- Chance is 5% for the pursued target to be armed in a response to a air backup request.
+ PursuitTargetWeaponData = { -- The pursued target will be given one randomly selected weapon (in hand) once on foot.
+ "weapon_knife",
+ "weapon_pistol",
+ },
+ BlipData = {
+ Enabled = true,
+ Sprite = 15,
+ Category = 2,
+ Display = 4,
+ Scale = 0.8,
+ Colour = 0,
+ ShortRange = true,
+ Flashes = false,
+ Cone = true
+ },
+ PedData = {
+ [1] = {
+ -- Use vMenu to fetch these numbers via Player Appearance. If model is not an MP ped it will not apply any props or components.
+ modelName = "s_m_y_swat_01", -- This is not an MP ped model
+ props = {}, -- No props needed for non-mp peds.
+ components = {}, -- No components needed for non-mp peds.
+ },
+ },
+ VehicleData = {
+ [1] = {
+ modelName = "polmav",
+ extraIds = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}, -- Extra's which are turned ON by default, some are REQUIRED for custom helicopters to prevent them from crashing!
+ liveryId = -1,
+ vehicleColours = { primary = -1, secondary = -1, pearlescent = -1, wheel = -1},
+ windowTintId = -1, -- 0 to 6 where 0 is no window tint. -1 does nothing which is also fine.
+ dirtLevel = 0.0 -- 0.0 to 15.0 where 15.0 is very dirty.
+ },
+ -- Add more here.
+ },
+ },
+ [5] = {
+ PursuitBackupName = "Army Backup Request",
+ PursuitBackupDescription = "Requesting army backup will make dispatch send out army units to aid in vehicle pursuit.",
+ PursuitType = "army", -- do not change
+ PursuitVehicles = {"barracks", "crusader"},
+ PursuitVehicleType = 'automobile', -- Make sure all the vehicles in PursuitVehicles are of this type. https://docs.fivem.net/natives/?_0xA273060E
+ PursuitChaseFlag = 1, -- https://docs.fivem.net/natives/?_0xCC665AAC360D31E7
+ AmountOfUnits = 4,
+ PedWeaponData = { -- The ped will be given one randomly selected weapon (in hand) once on foot.
+ "weapon_heavyrifle",
+ },
+ ChanceForPursuitTargetToBeArmed = 50, -- Chance is 50% for the pursued target to be armed in a response to a army backup request.
+ PursuitTargetWeaponData = { -- The pursued target will be given one randomly selected weapon (in hand) once on foot.
+ "weapon_assaultrifle",
+ },
+ BlipData = {
+ Enabled = true,
+ Sprite = 42,
+ Category = 2,
+ Display = 4,
+ Scale = 0.8,
+ Colour = 0,
+ ShortRange = true,
+ Flashes = false,
+ Cone = true
+ },
+ PedData = {
+ [1] = {
+ -- Use vMenu to fetch these numbers via Player Appearance. If model is not an MP ped it will not apply any props or components.
+ modelName = "s_m_y_blackops_01", -- This is not an MP ped model
+ props = {}, -- No props needed for non-mp peds.
+ components = {}, -- No components needed for non-mp peds.
+ },
+ [2] = {
+ -- Use vMenu to fetch these numbers via Player Appearance. If model is not an MP ped it will not apply any props or components.
+ modelName = "s_m_y_blackops_02", -- This is not an MP ped model
+ props = {}, -- No props needed for non-mp peds.
+ components = {}, -- No components needed for non-mp peds.
+ },
+ [3] = {
+ -- Use vMenu to fetch these numbers via Player Appearance. If model is not an MP ped it will not apply any props or components.
+ modelName = "s_m_y_blackops_03", -- This is not an MP ped model
+ props = {}, -- No props needed for non-mp peds.
+ components = {}, -- No components needed for non-mp peds.
+ },
+ },
+ VehicleData = { -- Contains 2 examples.
+ [1] = {
+ modelName = "barracks",
+ extraIds = {1, 2, 3, 4, 5, 10, 15, 20}, -- Extra's which are turned ON by default.
+ liveryId = -1,
+ vehicleColours = { primary = -1, secondary = -1, pearlescent = -1, wheel = -1},
+ windowTintId = -1, -- 0 to 6 where 0 is no window tint. -1 does nothing which is also fine.
+ dirtLevel = 0.0 -- 0.0 to 15.0 where 15.0 is very dirty.
+ },
+ [2] = {
+ modelName = "crusader",
+ extraIds = {1, 2, 3, 4, 5, 10, 15, 20}, -- Extra's which are turned ON by default.
+ liveryId = -1,
+ vehicleColours = { primary = -1, secondary = -1, pearlescent = -1, wheel = -1},
+ windowTintId = -1, -- 0 to 6 where 0 is no window tint. -1 does nothing which is also fine.
+ dirtLevel = 0.0 -- 0.0 to 15.0 where 15.0 is very dirty.
+ },
+ -- Add more here.
+ },
+ }
+}
\ No newline at end of file
diff --git a/resources/night_ers/config/questioning-config.lua b/resources/night_ers/config/questioning-config.lua
new file mode 100644
index 000000000..8d771d20c
--- /dev/null
+++ b/resources/night_ers/config/questioning-config.lua
@@ -0,0 +1,975 @@
+Config = Config or {}
+
+--======================= IMPORT NOTE ABOUT ADDING CUSTOM QUESTIONS =======================--
+
+-- [[ WE DO NOT OFFER TICKET SUPPORT FOR ADDING CUSTOM QUESTIONS/ANSWERS. ]]
+
+-- [[ INSTRUCTIONS ]]
+-- To add custom question(s), you need to add a new table entry in the Config.Questioning table.
+-- To add answer(s) to these questions, you need to add a new table entry in the Config.DynamicAnswers table.
+-- You need to consider the ID ("name" for example) and make sure to define them in both tables.
+-- Follow the code structure as displayed in the Config tables below.
+-- For questions, as well as answers, you can add as many options as you like: These are the variations of the question/answer.
+
+-- [[ SOUND FILES ]]
+-- Sound files for the questions and answers should be placed in the ./NUI/sounds/en/ folder. [NOTE: en is replaced by the system for other languages via Config.SoundLanguage]
+-- Female sound files have "_f" added to the end of the file name. The system automatically detects if the NPC/player is male or female and plays the correct sound file.
+
+--======================= QUESTIONING SETTINGS =======================--
+
+Config.EnableSoundBasedQuestions = true -- Setting this to false will not trigger the sound based questions, just text.
+Config.EnableSoundBasedAnswers = true -- Setting this to false will not trigger the sound based answers, just text.
+Config.Enable3DTextDrawingOnAnswers = false -- Setting this to false will not draw 3D text on the answers above the NPC's head.
+
+Config.EnableCinematic = true -- Setting this to false will not trigger the cinematic black bars on the top and bottom of the screen.
+Config.CinematicRectangleHeight = 0.25 -- Defines how big the cinematic black bars are.
+
+Config.ExitQuestioning = {
+ text = "I think I know enough...",
+ soundFile = "q_exit",
+ soundVolume = 0.5
+}
+
+Config.Questioning = {
+ {
+ id = "name", -- Don't change the id, it's linked to Config.DynamicAnswers.
+ orderIndex = 1, -- You can set the order of the questions. A lower number is available earlier in the questioning. You can give multiple questions the same orderIndex to have them available around the same time.
+ serviceTypes = { "police", "ambulance", "fire", "tow" }, -- Which services can ask this question? [OPTIONS: "police", "ambulance", "fire", "tow"]
+ question = {
+ options = {
+ {
+ text = "Can you tell me your name?",
+ soundFile = "q_name_1", -- Find the sound file in path: ./NUI/sounds/en/q_name_1.ogg for example.
+ soundVolume = 0.5, -- 0.5 is the default volume, you can change this to a custom volume if you want.
+ },
+ {
+ text = "How may I call you?",
+ soundFile = "q_name_2",
+ soundVolume = 0.5,
+ },
+ {
+ text = "What is your name?",
+ soundFile = "q_name_3",
+ soundVolume = 0.5,
+ },
+ -- Add another option here if you like, use the code structure as displayed above.
+ }
+ }
+ },
+ {
+ id = "weather",
+ orderIndex = 1,
+ serviceTypes = { "police", "ambulance", "fire", "tow" }, -- Which services can ask this question? [OPTIONS: "police", "ambulance", "fire", "tow"]
+ question = {
+ options = {
+ {
+ text = "Hi there, quite a comfortable temperature we're having today, right?",
+ soundFile = "q_weather_1",
+ soundVolume = 0.5,
+ },
+ {
+ text = "How's the weather treating you today? We've had quite a few good days...",
+ soundFile = "q_weather_2",
+ soundVolume = 0.5,
+ },
+ {
+ text = "I see you're out and about today. How are you finding the conditions outside?",
+ soundFile = "q_weather_3",
+ soundVolume = 0.5,
+ }
+ }
+ }
+ },
+ {
+ id = "dateofbirth", -- Don't change the id, it's linked to Config.DynamicAnswers.
+ orderIndex = 2,
+ serviceTypes = { "police", "ambulance", "fire", "tow" }, -- Which services can ask this question? [OPTIONS: "police", "ambulance", "fire", "tow"]
+ question = {
+ options = {
+ {
+ text = "Can you tell me your date of birth?",
+ soundFile = "q_dob_1",
+ soundVolume = 0.5,
+ },
+ {
+ text = "What is your date of birth?",
+ soundFile = "q_dob_2",
+ soundVolume = 0.5,
+ },
+ {
+ text = "When were you born?",
+ soundFile = "q_dob_3",
+ soundVolume = 0.5,
+ }
+ }
+ }
+ },
+ {
+ id = "address", -- Don't change the id, it's linked to Config.DynamicAnswers.
+ orderIndex = 3,
+ serviceTypes = { "police", "ambulance", "fire", "tow" }, -- Which services can ask this question? [OPTIONS: "police", "ambulance", "fire", "tow"]
+ question = {
+ options = {
+ {
+ text = "Can you tell me your address, please?",
+ soundFile = "q_address_1",
+ soundVolume = 0.5,
+ },
+ {
+ text = "What is your address?",
+ soundFile = "q_address_2",
+ soundVolume = 0.5,
+ },
+ {
+ text = "And what can you tell me about where you live?",
+ soundFile = "q_address_3",
+ soundVolume = 0.5,
+ }
+ }
+ }
+ },
+ {
+ id = "destination", -- Don't change the id, it's linked to Config.DynamicAnswers.
+ orderIndex = 4,
+ serviceTypes = { "police", "ambulance", "fire", "tow" }, -- Which services can ask this question? [OPTIONS: "police", "ambulance", "fire", "tow"]
+ question = {
+ options = {
+ {
+ text = "Can you tell me about what your destination is today?",
+ soundFile = "q_destination_1",
+ soundVolume = 0.5,
+ },
+ {
+ text = "What is your destination?",
+ soundFile = "q_destination_2",
+ soundVolume = 0.5,
+ },
+ {
+ text = "Where are you planning on going to?",
+ soundFile = "q_destination_3",
+ soundVolume = 0.5,
+ }
+ }
+ }
+ },
+ {
+ id = "licenses", -- Don't change the id, it's linked to Config.DynamicAnswers.
+ orderIndex = 5,
+ serviceTypes = { "police" }, -- Which services can ask this question? [OPTIONS: "police", "ambulance", "fire", "tow"]
+ question = {
+ options = {
+ {
+ text = "Can you tell me which driving licenses you possess?",
+ soundFile = "q_licenses_1",
+ soundVolume = 0.5,
+ },
+ {
+ text = "What driving licenses do you have?",
+ soundFile = "q_licenses_2",
+ soundVolume = 0.5,
+ },
+ {
+ text = "Are you licensed to drive or operate any vehicles?",
+ soundFile = "q_licenses_3",
+ soundVolume = 0.5,
+ }
+ }
+ }
+ },
+ {
+ id = "inventory", -- Don't change the id, it's linked to Config.DynamicAnswers.
+ orderIndex = 6,
+ serviceTypes = { "police" }, -- Which services can ask this question? [OPTIONS: "police", "ambulance", "fire", "tow"]
+ question = {
+ options = {
+ {
+ text = "Can you tell me what items you're carrying on or with you?",
+ soundFile = "q_inventory_1",
+ soundVolume = 0.5,
+ },
+ {
+ text = "What items are you carrying on or with you?",
+ soundFile = "q_inventory_2",
+ soundVolume = 0.5,
+ },
+ {
+ text = "What items do you have on or with you?",
+ soundFile = "q_inventory_3",
+ soundVolume = 0.5,
+ }
+ }
+ }
+ },
+ {
+ id = "intoxication", -- Don't change the id, it's linked to Config.DynamicAnswers.
+ orderIndex = 7,
+ serviceTypes = { "police", "ambulance", "fire" }, -- Which services can ask this question? [OPTIONS: "police", "ambulance", "fire", "tow"]
+ question = {
+ options = {
+ {
+ text = "Have you used any drugs or alcohol recently?",
+ soundFile = "q_intoxication_1",
+ soundVolume = 0.5,
+ },
+ {
+ text = "Are you under the influence of any substances or alcohol?",
+ soundFile = "q_intoxication_2",
+ soundVolume = 0.5,
+ },
+ {
+ text = "Have you been drinking or using drugs today?",
+ soundFile = "q_intoxication_3",
+ soundVolume = 0.5,
+ }
+ }
+ }
+ },
+ {
+ id = "medical", -- Don't change the id, it's linked to Config.DynamicAnswers.
+ orderIndex = 8,
+ serviceTypes = { "police", "ambulance", "fire" }, -- Which services can ask this question? [OPTIONS: "police", "ambulance", "fire", "tow"]
+ question = {
+ options = {
+ {
+ text = "Are you hurt in any way?",
+ soundFile = "q_medical_1",
+ soundVolume = 0.5,
+ },
+ {
+ text = "Do you need medical attention?",
+ soundFile = "q_medical_2",
+ soundVolume = 0.5,
+ },
+ {
+ text = "Are you injured or feeling unwell at all?",
+ soundFile = "q_medical_3",
+ soundVolume = 0.5,
+ }
+ }
+ }
+ },
+}
+
+Config.DynamicAnswers = {
+ ["name"] = {
+ templates = {
+ -- Behavior State (The way the NPC are feeling.)
+ normal = {
+ options = {
+ {
+ text = "My parents gave me this name, it's %s.", -- %s will be replaced with name
+ soundFile = "a_name_normal_1", -- If the NPC is a female, suffix "_f" will be added to the sound file. Example: a_name_normal_1_f
+ soundVolume = 0.5
+ },
+ {
+ text = "I've had this name since birth, it's %s.",
+ soundFile = "a_name_normal_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "It's a family tradition, my name is %s.",
+ soundFile = "a_name_normal_3",
+ soundVolume = 0.5
+ }
+ }
+ },
+ positive = {
+ options = {
+ {
+ text = "I'm so happy you asked! My beautiful name is %s.", -- %s will be replaced with name
+ soundFile = "a_name_positive_1",
+ soundVolume = 0.5
+ },
+ {
+ text = "What a lovely question! I'm proud to be called %s.",
+ soundFile = "a_name_positive_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "I love when people ask about my name! It's %s.",
+ soundFile = "a_name_positive_3",
+ soundVolume = 0.5
+ }
+ }
+ },
+ negative = {
+ options = {
+ {
+ text = "Why the fuck would I tell you my name? I don't even know you.",
+ soundFile = "a_name_negative_1",
+ soundVolume = 0.5
+ },
+ {
+ text = "Mind your own business! I don't go around telling strangers my name.",
+ soundFile = "a_name_negative_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "Get lost! I'm not telling you anything about me.",
+ soundFile = "a_name_negative_3",
+ soundVolume = 0.5
+ }
+ }
+ },
+ unusual = {
+ options = {
+ {
+ text = "I think you're funny. Why don't you tell me your name? Nice dog, by the way.",
+ soundFile = "a_name_unusual_1",
+ soundVolume = 0.5
+ },
+ {
+ text = "The voices say I shouldn't tell you... but they're not here right now. Do you see the butterflies too?",
+ soundFile = "a_name_unusual_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "Names are just labels the government uses to track us... but the shadows know my real name.",
+ soundFile = "a_name_unusual_3",
+ soundVolume = 0.5
+ }
+ }
+ }
+ }
+ },
+ ["weather"] = {
+ templates = {
+ normal = {
+ options = {
+ {
+ text = "I think it's been a bit chilly lately, but I'm managing today. I appreciate the %s.", -- %s will be replaced with weather condition.
+ soundFile = "a_weather_normal_1",
+ soundVolume = 0.5
+ },
+ {
+ text = "You are right. I feel kind of the same about the weather. I'm okay with the %s.",
+ soundFile = "a_weather_normal_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "It is all good. Except for when there are strong winds. Other than that, I'm fine with the %s.",
+ soundFile = "a_weather_normal_3",
+ soundVolume = 0.5
+ }
+ }
+ },
+ positive = {
+ options = {
+ {
+ text = "Oh, I absolutely love this weather! The %s makes everything feel so alive!",
+ soundFile = "a_weather_positive_1",
+ soundVolume = 0.5
+ },
+ {
+ text = "Isn't it just perfect today? The %s really brings out the best in the city!",
+ soundFile = "a_weather_positive_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "I've been waiting for weather like this! This is exactly what I needed!",
+ soundFile = "a_weather_positive_3",
+ soundVolume = 0.5
+ }
+ }
+ },
+ negative = {
+ options = {
+ {
+ text = "Why do you care about the weather? Are you a meteorologist or something? Although... I am good with todays conditions.",
+ soundFile = "a_weather_negative_1",
+ soundVolume = 0.5
+ },
+ {
+ text = "I don't have time for small talk about the weather. Got better things to do, but thanks for asking.",
+ soundFile = "a_weather_negative_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "What's with all these questions? The weather's the weather, who cares?",
+ soundFile = "a_weather_negative_3",
+ soundVolume = 0.5
+ }
+ }
+ },
+ unusual = {
+ options = {
+ {
+ text = "The clouds... they're whispering to me... telling me to stay inside...",
+ soundFile = "a_weather_unusual_1",
+ soundVolume = 0.5
+ },
+ {
+ text = "I can feel the weather changing my thoughts... the air is full of voices...",
+ soundFile = "a_weather_unusual_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "The weather patterns... they're forming messages... can't you see them?",
+ soundFile = "a_weather_unusual_3",
+ soundVolume = 0.5
+ }
+ }
+ }
+ }
+ },
+ ["dateofbirth"] = {
+ templates = {
+ normal = {
+ options = {
+ {
+ text = "I was born on %s.", -- %s will be replaced with date of birth
+ soundFile = "a_dob_normal_1",
+ soundVolume = 0.5
+ },
+ {
+ text = "My date of birth is %s.",
+ soundFile = "a_dob_normal_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "I've been alive since %s.",
+ soundFile = "a_dob_normal_3",
+ soundVolume = 0.5
+ }
+ }
+ },
+ positive = {
+ options = {
+ {
+ text = "Oh, I love my birthday! I was born on %s!",
+ soundFile = "a_dob_positive_1",
+ soundVolume = 0.5
+ },
+ {
+ text = "I'm so excited you asked! I was born on %s!",
+ soundFile = "a_dob_positive_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "My special day was %s!",
+ soundFile = "a_dob_positive_3",
+ soundVolume = 0.5
+ }
+ }
+ },
+ negative = {
+ options = {
+ {
+ text = "You won't give a shit about my birthday anyway.",
+ soundFile = "a_dob_negative_1",
+ soundVolume = 0.5
+ },
+ {
+ text = "I don't feel like you need to know that.",
+ soundFile = "a_dob_negative_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "I can't remember that day.",
+ soundFile = "a_dob_negative_3",
+ soundVolume = 0.5
+ }
+ }
+ },
+ unusual = {
+ options = {
+ {
+ text = "The stars say it's on the same day the pope was born.",
+ soundFile = "a_dob_unusual_1",
+ soundVolume = 0.5
+ },
+ {
+ text = "I was reborn last week. I feel perfect since then.",
+ soundFile = "a_dob_unusual_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "Do you feel it too? The time is changing. I think we're shifting dimensions.",
+ soundFile = "a_dob_unusual_3",
+ soundVolume = 0.5
+ }
+ }
+ }
+ }
+ },
+ ["address"] = {
+ templates = {
+ normal = {
+ options = {
+ {
+ text = "Oh you want my address? I live at %s.", -- %s will be replaced with address
+ soundFile = "a_address_normal_1",
+ soundVolume = 0.5
+ },
+ {
+ text = "I see, you want to know where I live. My home is at %s.",
+ soundFile = "a_address_normal_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "You can find me home at %s.",
+ soundFile = "a_address_normal_3",
+ soundVolume = 0.5
+ }
+ }
+ },
+ positive = {
+ options = {
+ {
+ text = "I love my home, you know. We recently moved in. It's at %s!",
+ soundFile = "a_address_positive_1",
+ soundVolume = 0.5
+ },
+ {
+ text = "My wonderful place is in one of the best parts of town, if you ask me! It's at %s!",
+ soundFile = "a_address_positive_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "I live at an incredible place. It's at %s!",
+ soundFile = "a_address_positive_3",
+ soundVolume = 0.5
+ }
+ }
+ },
+ negative = {
+ options = {
+ {
+ text = "You are definitely not going to get my address, you creep.",
+ soundFile = "a_address_negative_1",
+ soundVolume = 0.5
+ },
+ {
+ text = "I can't find any reason in the whole fucking world why you would need to know my address.",
+ soundFile = "a_address_negative_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "Stop asking me about my address, I am not going to tell you...",
+ soundFile = "a_address_negative_3",
+ soundVolume = 0.5
+ }
+ }
+ },
+ unusual = {
+ options = {
+ {
+ text = "What? Where? My address? I don't know where I live. Last time I woke up was in the Sewers.",
+ soundFile = "a_address_unusual_1",
+ soundVolume = 0.5
+ },
+ {
+ text = "They are coming... Our downfall is imminent. If they know where I live, I'll be dead!",
+ soundFile = "a_address_unusual_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "No, I can't handle this right now. You must've confused me for someone else.",
+ soundFile = "a_address_unusual_3",
+ soundVolume = 0.5
+ }
+ }
+ }
+ }
+ },
+ ["destination"] = {
+ templates = {
+ normal = {
+ options = {
+ {
+ text = "I'm heading to %s.", -- %s will be replaced with destination
+ soundFile = "a_destination_normal_1",
+ soundVolume = 0.5
+ },
+ {
+ text = "My next stop is %s.",
+ soundFile = "a_destination_normal_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "I'm on my way to %s.",
+ soundFile = "a_destination_normal_3",
+ soundVolume = 0.5
+ }
+ }
+ },
+ positive = {
+ options = {
+ {
+ text = "I'm so excited to be going to %s!",
+ soundFile = "a_destination_positive_1",
+ soundVolume = 0.5
+ },
+ {
+ text = "Actually, I'm a good hour underway. I can't wait to get to, uh... %s!",
+ soundFile = "a_destination_positive_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "I'll tell you! I'm really looking forward to visiting %s!",
+ soundFile = "a_destination_positive_3",
+ soundVolume = 0.5
+ }
+ }
+ },
+ negative = {
+ options = {
+ {
+ text = "Why do you need to know where I'm going? Mind your own business!",
+ soundFile = "a_destination_negative_1",
+ soundVolume = 0.5
+ },
+ {
+ text = "I'm not telling you where I'm going. Stop following me! Do you do this to everyone?",
+ soundFile = "a_destination_negative_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "That's none of your concern. You are getting on my nerves. Leave me alone!",
+ soundFile = "a_destination_negative_3",
+ soundVolume = 0.5
+ }
+ }
+ },
+ unusual = {
+ options = {
+ {
+ text = "The voices in my head keep changing their minds about where I should go...",
+ soundFile = "a_destination_unusual_1",
+ soundVolume = 0.5
+ },
+ {
+ text = "I think I'm going somewhere... or am I already there?",
+ soundFile = "a_destination_unusual_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "The butterflies told me to follow them, but they keep disappearing...",
+ soundFile = "a_destination_unusual_3",
+ soundVolume = 0.5
+ }
+ }
+ }
+ }
+ },
+ ["licenses"] = {
+ templates = {
+ normal = {
+ options = {
+ {
+ text = "I have the following licenses: %s.", -- %s will be replaced with all licenses the NPC has.
+ soundFile = "a_licenses_normal_1",
+ soundVolume = 0.5
+ },
+ {
+ text = "I'm in possession of some licenses. They are: %s.",
+ soundFile = "a_licenses_normal_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "I'm qualified, because I recently passed the tests for the following licenses: %s.",
+ soundFile = "a_licenses_normal_3",
+ soundVolume = 0.5
+ }
+ }
+ },
+ positive = {
+ options = {
+ {
+ text = "I'm proud to say I have my license(s) for %s!",
+ soundFile = "a_licenses_positive_1",
+ soundVolume = 0.5
+ },
+ {
+ text = "I worked really hard to get my license(s) for %s!",
+ soundFile = "a_licenses_positive_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "I'm fully licensed for driving a %s!",
+ soundFile = "a_licenses_positive_3",
+ soundVolume = 0.5
+ }
+ }
+ },
+ negative = {
+ options = {
+ {
+ text = "Why are you asking about my licenses? Are you a cop?",
+ soundFile = "a_licenses_negative_1",
+ soundVolume = 0.5
+ },
+ {
+ text = "I don't need to show you any licenses. Get lost!",
+ soundFile = "a_licenses_negative_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "What's it to you what licenses I have? Mind your own business!",
+ soundFile = "a_licenses_negative_3",
+ soundVolume = 0.5
+ }
+ }
+ },
+ unusual = {
+ options = {
+ {
+ text = "The government gave me a special license to talk to the trees...",
+ soundFile = "a_licenses_unusual_1",
+ soundVolume = 0.5
+ },
+ {
+ text = "I have a license to see the invisible people, but they keep hiding it...",
+ soundFile = "a_licenses_unusual_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "My pet rock has all my licenses. He's the responsible one...",
+ soundFile = "a_licenses_unusual_3",
+ soundVolume = 0.5
+ }
+ }
+ }
+ }
+ },
+ ["inventory"] = {
+ templates = {
+ normal = {
+ options = {
+ {
+ text = "Yes... Actually I'm carrying some stuff with me: %s.", -- %s will be replaced with inventory items
+ soundFile = "a_inventory_normal_1",
+ soundVolume = 0.5
+ },
+ {
+ text = "I understand you want to know what I have on me. I have these items on me: %s.", -- %s will be replaced with inventory items
+ soundFile = "a_inventory_normal_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "Let me check... I'm carrying %s.", -- %s will be replaced with inventory items
+ soundFile = "a_inventory_normal_3",
+ soundVolume = 0.5
+ }
+ }
+ },
+ positive = {
+ options = {
+ {
+ text = "Oh, I'm so excited to show you what I have! I've got %s!", -- %s will be replaced with inventory items
+ soundFile = "a_inventory_positive_1",
+ soundVolume = 0.5
+ },
+ {
+ text = "I love my belongings! I've got %s", -- %s will be replaced with inventory items
+ soundFile = "a_inventory_positive_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "I'm really proud of what I carry. I have %s!", -- %s will be replaced with inventory items
+ soundFile = "a_inventory_positive_3",
+ soundVolume = 0.5
+ }
+ }
+ },
+ negative = {
+ options = {
+ {
+ text = "Why are you so interested in what I have? Are you planning to rob me?",
+ soundFile = "a_inventory_negative_1",
+ soundVolume = 0.5
+ },
+ {
+ text = "I don't need to tell you what's in my pockets. Mind your own business!",
+ soundFile = "a_inventory_negative_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "Get lost! I'm not showing you what I have. That's private!",
+ soundFile = "a_inventory_negative_3",
+ soundVolume = 0.5
+ }
+ }
+ },
+ unusual = {
+ options = {
+ {
+ text = "The voices in my head tell me not to show you... but then again, I think it's okay...",
+ soundFile = "a_inventory_unusual_1",
+ soundVolume = 0.5
+ },
+ {
+ text = "I think I have something... or did the shadow people take it again?",
+ soundFile = "a_inventory_unusual_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "I feel strange... I think they're empty, but I know you're lying about everything...",
+ soundFile = "a_inventory_unusual_3",
+ soundVolume = 0.5
+ }
+ }
+ }
+ }
+ },
+ ["intoxication"] = {
+ templates = {
+ normal = {
+ options = {
+ {
+ text = "You want to know if I've had anything? I'm %s.", -- %s will be replaced with sober/drunk/drugged
+ soundFile = "a_intoxication_normal_1",
+ soundVolume = 0.5
+ },
+ {
+ text = "I feel fine, thanks for asking. I think I'm %s.", -- %s will be replaced with sober/drunk/drugged
+ soundFile = "a_intoxication_normal_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "I'm clear-headed, you know. I'm %s.", -- %s will be replaced with sober/drunk/drugged
+ soundFile = "a_intoxication_normal_3",
+ soundVolume = 0.5
+ }
+ }
+ },
+ positive = {
+ options = {
+ {
+ text = "I'm feeling amazing! I am totally %s!", -- %s will be replaced with sober/drunk/drugged
+ soundFile = "a_intoxication_positive_1",
+ soundVolume = 0.5
+ },
+ {
+ text = "I'm in perfect condition! I'm %s!", -- %s will be replaced with sober/drunk/drugged
+ soundFile = "a_intoxication_positive_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "I've never felt better! You could call me %s!", -- %s will be replaced with sober/drunk/drugged
+ soundFile = "a_intoxication_positive_3",
+ soundVolume = 0.5
+ }
+ }
+ },
+ negative = {
+ options = {
+ {
+ text = "What are you, a narc? Get lost! And don't ask again...",
+ soundFile = "a_intoxication_negative_1",
+ soundVolume = 0.5
+ },
+ {
+ text = "None of your business what I've had! Mind your own life! You really must be looking for something to do...",
+ soundFile = "a_intoxication_negative_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "I don't need to tell you anything about what I've consumed! What're you concerned about?",
+ soundFile = "a_intoxication_negative_3",
+ soundVolume = 0.5
+ }
+ }
+ },
+ unusual = {
+ options = {
+ {
+ text = "The walls are breathing... but I'm not on anything! Or am I? I can't remember...",
+ soundFile = "a_intoxication_unusual_1",
+ soundVolume = 0.5
+ },
+ {
+ text = "The colors are so beautiful... but I haven't taken anything... have I? I'm not sure...",
+ soundFile = "a_intoxication_unusual_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "I feel like I'm floating... but I'm sure I'm sober... or am I? Perhaps my psychiatrist would know...",
+ soundFile = "a_intoxication_unusual_3",
+ soundVolume = 0.5
+ }
+ }
+ }
+ }
+ },
+ ["medical"] = {
+ templates = {
+ normal = {
+ options = {
+ {
+ text = "You desire to know my medical condition? I am %s.", -- %s will be replaced with healthy/conditions
+ soundFile = "a_medical_normal_1",
+ soundVolume = 0.5
+ },
+ {
+ text = "I think I'm alright. I feel as if I am %s.", -- %s will be replaced with healthy/conditions
+ soundFile = "a_medical_normal_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "I'm usually in a good shape. I'm %s.", -- %s will be replaced with healthy/conditions
+ soundFile = "a_medical_normal_3",
+ soundVolume = 0.5
+ }
+ }
+ },
+ positive = {
+ options = {
+ {
+ text = "I'm actually feeling fantastic. I can tell you that I am, uh... %s!", -- %s will be replaced with healthy/conditions
+ soundFile = "a_medical_positive_1",
+ soundVolume = 0.5
+ },
+ {
+ text = "I've never been better! Logic when you're %s!", -- %s will be replaced with healthy/conditions
+ soundFile = "a_medical_positive_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "I'm in perfect health! I think... I feel %s!", -- %s will be replaced with healthy/conditions
+ soundFile = "a_medical_positive_3",
+ soundVolume = 0.5
+ }
+ }
+ },
+ negative = {
+ options = {
+ {
+ text = "I don't need your help! Just leave me alone! I don't want to see a doctor.",
+ soundFile = "a_medical_negative_1",
+ soundVolume = 0.5
+ },
+ {
+ text = "Stop asking about my health! It's none of your business! That is private, you know...",
+ soundFile = "a_medical_negative_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "I'm fine! Stop bothering me with these questions! I don't need you to survive.",
+ soundFile = "a_medical_negative_3",
+ soundVolume = 0.5
+ }
+ }
+ },
+ unusual = {
+ options = {
+ {
+ text = "The bugs... they're crawling under my skin... but the doctor says I'm fine...",
+ soundFile = "a_medical_unusual_1",
+ soundVolume = 0.5
+ },
+ {
+ text = "I can feel my bones moving... but the voices say it's normal...",
+ soundFile = "a_medical_unusual_2",
+ soundVolume = 0.5
+ },
+ {
+ text = "My blood is flowing like a river... And so the one within me tells me I'm healthy...",
+ soundFile = "a_medical_unusual_3",
+ soundVolume = 0.5
+ }
+ }
+ }
+ }
+ },
+}
\ No newline at end of file
diff --git a/resources/night_ers/config/sound-config.lua b/resources/night_ers/config/sound-config.lua
new file mode 100644
index 000000000..c7badda9a
--- /dev/null
+++ b/resources/night_ers/config/sound-config.lua
@@ -0,0 +1,409 @@
+Config = Config or {}
+
+--====================== VOICE OVER & SOUND SETTINGS ======================--
+
+local SoundFileLanguagePrefix = Config.SoundLanguage -- This setting is to be set in config.lua. Do not change here.
+
+--====================== GAME INTUITION SOUNDS ======================--
+
+-- Main recognition sound for player/NPC events (This one is native GTA and sounds quite good to recognize something is happening!)
+Config.Sounds = {
+ AcceptCalloutSoundLibrary = "Crates_Blipped",
+ AcceptCalloutSoundName = "GTAO_Magnate_Boss_Modes_Soundset",
+}
+
+--====================== GENERIC SOUNDS ======================--
+
+-- Sounds & Effects
+Config.VoiceOverEnabled = true -- Enable or disable voice-over for dispatch events (NUI/sounds/generic-sounds/*.ogg).
+Config.RadioBleepSoundFile = {FileName = "radio_chirp", SoundVolume = 0.25}
+Config.InteractionBtnClickSoundFiles = {
+ ['interactionbutton'] = {
+ Enabled = true, -- Enable / disable sound on button press & interaction (action type) click
+ FileName = "confirm_click", -- (NUI/sounds/generic-sounds/*.ogg)
+ SoundVolume = 0.5,
+ },
+}
+
+--===================== LANGUAGE BASED DISPATCH SOUNDS ======================--
+
+-- Notice about custom sound files: NUI/sounds/en/*.ogg holds sounds for the english language. So NUI/sounds/us/*.ogg holds sounds for the american language.
+-- If you desire to edit sound files, adjust the existing ones or add new ones, make sure to follow the format of sound file names and configure them as the examples below.
+
+Config.CalloutOfferedSoundFiles = { -- You will need to add custom soundfiles and transcribe them yourself if you desire to change these, this is not litterally a TTS system.
+ [1] = {FileName = SoundFileLanguagePrefix .. "_callout_offered", SoundVolume = 0.3, TTS = '"A new emergency call came in, are any units available to respond?"'},
+ [2] = {FileName = SoundFileLanguagePrefix .. "_callout_offered_1", SoundVolume = 0.3, TTS = '"Do we have any units available to respond to an emergency?"'},
+ [3] = {FileName = SoundFileLanguagePrefix .. "_callout_offered_2", SoundVolume = 0.3, TTS = '"We have received another emergency call. Are there any units free to handle it?"'},
+}
+
+Config.CalloutExpiredSoundFiles = { -- You will need to add custom soundfiles and transcribe them yourself if you desire to change these, this is not litterally a TTS system.
+ [1] = {FileName = SoundFileLanguagePrefix .. "_callout_expired", SoundVolume = 0.3, TTS = '"Other units were able to resolve the last emergency call."'},
+ [2] = {FileName = SoundFileLanguagePrefix .. "_callout_expired_1", SoundVolume = 0.3, TTS = '"Other responders managed to deal with the previous emergency call."'},
+ [3] = {FileName = SoundFileLanguagePrefix .. "_callout_expired_2", SoundVolume = 0.3, TTS = '"The last emergency situation has been resolved by other units."'},
+}
+
+Config.CalloutAcceptedSoundFiles = { -- You will need to add custom soundfiles and transcribe them yourself if you desire to change these, this is not litterally a TTS system.
+ [1] = {FileName = SoundFileLanguagePrefix .. "_callout_accepted", SoundVolume = 0.3, TTS = '"I have attached you to the latest emergency call. Please make your way."'},
+ [2] = {FileName = SoundFileLanguagePrefix .. "_callout_accepted_1", SoundVolume = 0.3, TTS = '"You have been assigned to the most recent emergency call. Proceed to the location."'},
+ [3] = {FileName = SoundFileLanguagePrefix .. "_callout_accepted_2", SoundVolume = 0.3, TTS = '"You have been tasked with responding to the latest emergency call. Make your way to the scene."'},
+}
+
+Config.CalloutEndedSoundFiles = { -- You will need to add custom soundfiles and transcribe them yourself if you desire to change these, this is not litterally a TTS system.
+ [1] = {FileName = SoundFileLanguagePrefix .. "_callout_ended", SoundVolume = 0.3, TTS = '"Your unit was detached from the last callout."'},
+ [2] = {FileName = SoundFileLanguagePrefix .. "_callout_ended_1", SoundVolume = 0.3, TTS = '"Your unit has been disengaged from the previous callout."'},
+ [3] = {FileName = SoundFileLanguagePrefix .. "_callout_ended_2", SoundVolume = 0.3, TTS = '"Your unit has been released from its duty in the previous callout."'},
+}
+
+--====================== LANGUAGE BASED GEAR SOUNDS ======================--
+
+Config.GearSoundFiles = {
+ Enabled = true,
+ Files = { -- Only adjust FileName, SoundVolume and/or TTS if you desire to. (NUI/sounds/*/*.ogg)
+ Police = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_police_gear_1", SoundVolume = 0.5, TTS = '"Here is your gear. Have a good shift!"'},
+ },
+ Ambulance = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_ambulance_gear_1", SoundVolume = 0.5, TTS = '"Here is your gear. Have a good shift!"'},
+ },
+ Fire = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_fire_gear_1", SoundVolume = 0.5, TTS = '"Here is your gear. Have a good shift!"'},
+ },
+ Tow = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_tow_gear_1", SoundVolume = 0.5, TTS = '"Here is your gear. Have a good shift!"'},
+ }
+ }
+}
+
+--====================== LANGUAGE BASED IMPOUND SOUNDS ======================--
+
+Config.ImpoundSoundFiles = {
+ Enabled = true,
+ Files = { -- Only adjust FileName, SoundVolume and/or TTS if you desire to. (NUI/sounds/*/*.ogg)
+ [1] = {FileName = SoundFileLanguagePrefix .. "_impound_task_m", SoundVolume = 0.3, TTS = '"To impound your vehicle, drive to the impound location that I marked for you."'},
+ [2] = {FileName = SoundFileLanguagePrefix .. "_impound_done_m", SoundVolume = 0.3, TTS = '"Please get out of the vehicle and step away."'},
+ [3] = {FileName = SoundFileLanguagePrefix .. "_impound_class_m", SoundVolume = 0.3, TTS = '"That vehicle is not allowed here..."'},
+ }
+}
+
+--====================== LANGUAGE BASED PED INTERACTION SOUNDS ======================--
+
+Config.PedInteractionSoundFiles = { -- Only adjust FileName, SoundVolume and/or TTS if you desire to. (NUI/sounds/*/*.ogg)
+ ['greet'] = {
+ Male = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_hello", SoundVolume = 0.3, TTS = '"Hello, how are you today?"'},
+ [2] = {FileName = SoundFileLanguagePrefix .. "_hello_1", SoundVolume = 0.3, TTS = '"Good day. Lets have a chat..."'},
+ [3] = {FileName = SoundFileLanguagePrefix .. "_hello_2", SoundVolume = 0.3, TTS = '"Hello there..."'},
+ },
+ Female = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_hello_f", SoundVolume = 0.3, TTS = '"Hello, how are you today?"'},
+ [2] = {FileName = SoundFileLanguagePrefix .. "_hello_1_f", SoundVolume = 0.3, TTS = '"Good day. Lets have a chat..."'},
+ [3] = {FileName = SoundFileLanguagePrefix .. "_hello_2_f", SoundVolume = 0.3, TTS = '"Hello there..."'},
+ },
+ },
+ ['id'] = {
+ Male = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_id", SoundVolume = 0.3, TTS = '"Can I have your ID please?"'},
+ [2] = {FileName = SoundFileLanguagePrefix .. "_id_1", SoundVolume = 0.3, TTS = '"Please show me your identification card."'},
+ [3] = {FileName = SoundFileLanguagePrefix .. "_id_2", SoundVolume = 0.3, TTS = '"Provide your identification card."'},
+ },
+ Female = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_id_f", SoundVolume = 0.3, TTS = '"Can I have your ID please?"'},
+ [2] = {FileName = SoundFileLanguagePrefix .. "_id_1_f", SoundVolume = 0.3, TTS = '"Please show me your identification card."'},
+ [3] = {FileName = SoundFileLanguagePrefix .. "_id_2_f", SoundVolume = 0.3, TTS = '"Provide your identification card."'},
+ },
+ },
+ ['breathalyze'] = {
+ Male = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_breathalyze", SoundVolume = 0.3, TTS = '"I would like to take a sample of breath. Blow into the device please."'},
+ [2] = {FileName = SoundFileLanguagePrefix .. "_breathalyze_1", SoundVolume = 0.3, TTS = '"Please blow into the device."'},
+ [3] = {FileName = SoundFileLanguagePrefix .. "_breathalyze_2", SoundVolume = 0.3, TTS = '"Blow here, please."'},
+ },
+ Female = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_breathalyze_f", SoundVolume = 0.3, TTS = '"I would like to take a sample of breath. Blow into the device please."'},
+ [2] = {FileName = SoundFileLanguagePrefix .. "_breathalyze_1_f", SoundVolume = 0.3, TTS = '"Please blow into the device."'},
+ [3] = {FileName = SoundFileLanguagePrefix .. "_breathalyze_2_f", SoundVolume = 0.3, TTS = '"Blow here, please."'},
+ },
+ },
+ ['drugtest'] = {
+ Male = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_drugtest", SoundVolume = 0.3, TTS = '"Please open your mouth for a mouth swab drug test."'},
+ -- [2] = {FileName = "en_drugtest_1", SoundVolume = 0.3, TTS = '"Open your mouth for a swab test, please."'},
+ -- [3] = {FileName = "en_drugtest_2", SoundVolume = 0.3, TTS = '"Mouth open for swab test, please."'},
+ },
+ Female = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_drugtest_f", SoundVolume = 0.3, TTS = '"Please open your mouth for a mouth swab drug test."'},
+ -- [2] = {FileName = SoundFileLanguagePrefix .. "_drugtest_1_f", SoundVolume = 0.3, TTS = '"Open your mouth for a swab test, please."'},
+ -- [3] = {FileName = SoundFileLanguagePrefix .. "_drugtest_2_f", SoundVolume = 0.3, TTS = '"Mouth open for swab test, please."'},
+ },
+ },
+ ['warn'] = {
+ Male = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_warn", SoundVolume = 0.3, TTS = '"Consider this a warning."'},
+ -- [2] = {FileName = SoundFileLanguagePrefix .. "_warn_1", SoundVolume = 0.3, TTS = '"You are being warned."'},
+ -- [3] = {FileName = SoundFileLanguagePrefix .. "_warn_2", SoundVolume = 0.3, TTS = '"Consider this a warning."'},
+ },
+ Female = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_warn_f", SoundVolume = 0.3, TTS = '"Consider this a warning."'},
+ -- [2] = {FileName = SoundFileLanguagePrefix .. "_warn_1_f", SoundVolume = 0.3, TTS = '"You are being warned."'},
+ -- [3] = {FileName = SoundFileLanguagePrefix .. "_warn_2_f", SoundVolume = 0.3, TTS = '"Consider this a warning."'},
+ },
+ },
+ ['fine'] = {
+ Male = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_fine", SoundVolume = 0.3, TTS = '"You are being fined."'},
+ -- [2] = {FileName = SoundFileLanguagePrefix .. "_fine_1", SoundVolume = 0.3, TTS = '"Here is your citation."'},
+ -- [3] = {FileName = SoundFileLanguagePrefix .. "_fine_2", SoundVolume = 0.3, TTS = '"This is your ticket."'},
+ },
+ Female = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_fine_f", SoundVolume = 0.3, TTS = '"You are being fined."'},
+ -- [2] = {FileName = SoundFileLanguagePrefix .. "_fine_1_f", SoundVolume = 0.3, TTS = '"Here is your citation."'},
+ -- [3] = {FileName = SoundFileLanguagePrefix .. "_fine_2_f", SoundVolume = 0.3, TTS = '"This is your ticket."'},
+ },
+ },
+ ['getout'] = {
+ Male = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_getout", SoundVolume = 0.3, TTS = '"Please get out of the vehicle."'},
+ },
+ Female = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_getout_f", SoundVolume = 0.3, TTS = '"Please get out of the vehicle."'},
+ },
+ },
+ ['follow'] = {
+ Male = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_follow", SoundVolume = 0.3, TTS = '"Could you follow me please?"'},
+ [2] = {FileName = SoundFileLanguagePrefix .. "_follow_1", SoundVolume = 0.3, TTS = '"Please follow me."'},
+ [3] = {FileName = SoundFileLanguagePrefix .. "_follow_2", SoundVolume = 0.3, TTS = '"Follow me."'},
+ },
+ Female = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_follow_f", SoundVolume = 0.3, TTS = '"Could you follow me please?"'},
+ [2] = {FileName = SoundFileLanguagePrefix .. "_follow_1_f", SoundVolume = 0.3, TTS = '"Please follow me."'},
+ [3] = {FileName = SoundFileLanguagePrefix .. "_follow_2_f", SoundVolume = 0.3, TTS = '"Follow me."'},
+ },
+ },
+ ['wait'] = {
+ Male = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_wait", SoundVolume = 0.3, TTS = '"Wait here please."'},
+ [2] = {FileName = SoundFileLanguagePrefix .. "_wait_1", SoundVolume = 0.3, TTS = '"Could you please wait here?"'},
+ [3] = {FileName = SoundFileLanguagePrefix .. "_wait_2", SoundVolume = 0.3, TTS = '"Wait here."'},
+ },
+ Female = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_wait_f", SoundVolume = 0.3, TTS = '"Wait here please."'},
+ [2] = {FileName = SoundFileLanguagePrefix .. "_wait_1_f", SoundVolume = 0.3, TTS = '"Could you please wait here?"'},
+ [3] = {FileName = SoundFileLanguagePrefix .. "_wait_2_f", SoundVolume = 0.3, TTS = '"Wait here."'},
+ },
+ },
+ ['handsup'] = {
+ Male = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_handsup", SoundVolume = 0.3, TTS = '"Put your hands up and stay where you are."'},
+ [2] = {FileName = SoundFileLanguagePrefix .. "_handsup_1", SoundVolume = 0.3, TTS = '"Put your hands in the air!"'},
+ [3] = {FileName = SoundFileLanguagePrefix .. "_handsup_2", SoundVolume = 0.3, TTS = '"Hands up."'},
+ },
+ Female = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_handsup_f", SoundVolume = 0.3, TTS = '"Put your hands up and stay where you are."'},
+ [2] = {FileName = SoundFileLanguagePrefix .. "_handsup_1_f", SoundVolume = 0.3, TTS = '"Put your hands in the air!"'},
+ [3] = {FileName = SoundFileLanguagePrefix .. "_handsup_2_f", SoundVolume = 0.3, TTS = '"Hands up."'},
+ },
+ },
+ ['search'] = {
+ Male = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_search", SoundVolume = 0.3, TTS = '"I am going to Perform a search on you. Are there any items which can potentially cause harm or are prohibited that you would like to declare before I proceed?"'},
+ -- [2] = {FileName = SoundFileLanguagePrefix .. "_search_1", SoundVolume = 0.3, TTS = '"Make your audio file and write the subtitle here."'},
+ -- [3] = {FileName = SoundFileLanguagePrefix .. "_search_1", SoundVolume = 0.3, TTS = '"Make your audio file and write the subtitle here."'},
+ },
+ Female = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_search_f", SoundVolume = 0.3, TTS = '"I am going to Perform a search on you. Are there any items which can potentially cause harm or are prohibited that you would like to declare before I proceed?"'},
+ -- [2] = {FileName = SoundFileLanguagePrefix .. "_search_1", SoundVolume = 0.3, TTS = '"Make your audio file and write the subtitle here."'},
+ -- [3] = {FileName = SoundFileLanguagePrefix .. "_search_1", SoundVolume = 0.3, TTS = '"Make your audio file and write the subtitle here."'},
+ },
+ },
+ ['cuff'] = {
+ Male = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_cuffs", SoundVolume = 0.3, TTS = '"Turn around so I can work on these cuffs."'},
+ -- [2] = {FileName = SoundFileLanguagePrefix .. "_cuff_1", SoundVolume = 0.3, TTS = '"Make your audio file and write the subtitle here."'},
+ -- [3] = {FileName = SoundFileLanguagePrefix .. "_cuff_2", SoundVolume = 0.3, TTS = '"Make your audio file and write the subtitle here."'},
+ },
+ Female = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_cuffs_f", SoundVolume = 0.3, TTS = '"Turn around so I can work on these cuffs."'},
+ -- [2] = {FileName = SoundFileLanguagePrefix .. "_cuff_1", SoundVolume = 0.3, TTS = '"Make your audio file and write the subtitle here."'},
+ -- [3] = {FileName = SoundFileLanguagePrefix .. "_cuff_2", SoundVolume = 0.3, TTS = '"Make your audio file and write the subtitle here."'},
+ },
+ },
+ ['putinvehicle'] = {
+ Male = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_putinvehicle", SoundVolume = 0.3, TTS = '"Step into the back of the vehicle."'},
+ -- [2] = {FileName = SoundFileLanguagePrefix .. "_putinvehicle_1", SoundVolume = 0.3, TTS = '"Make your audio file and write the subtitle here."'},
+ -- [3] = {FileName = SoundFileLanguagePrefix .. "_putinvehicle_2", SoundVolume = 0.3, TTS = '"Make your audio file and write the subtitle here."'},
+ },
+ Female = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_putinvehicle_f", SoundVolume = 0.3, TTS = '"Step into the back of the vehicle."'},
+ -- [2] = {FileName = SoundFileLanguagePrefix .. "_putinvehicle_f_1", SoundVolume = 0.3, TTS = '"Make your audio file and write the subtitle here."'},
+ -- [3] = {FileName = SoundFileLanguagePrefix .. "_putinvehicle_f_2", SoundVolume = 0.3, TTS = '"Make your audio file and write the subtitle here."'},
+ },
+ },
+ ['end'] = {
+ Male = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_end", SoundVolume = 0.3, TTS = '"You may go now."'},
+ -- [2] = {FileName = SoundFileLanguagePrefix .. "_end_1", SoundVolume = 0.3, TTS = '"Make your audio file and write the subtitle here."'},
+ -- [3] = {FileName = SoundFileLanguagePrefix .. "_end_2", SoundVolume = 0.3, TTS = '"Make your audio file and write the subtitle here."'},
+ },
+ Female = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_end_f", SoundVolume = 0.3, TTS = '"You may go now."'},
+ -- [2] = {FileName = SoundFileLanguagePrefix .. "_end_1_f", SoundVolume = 0.3, TTS = '"Make your audio file and write the subtitle here."'},
+ -- [3] = {FileName = SoundFileLanguagePrefix .. "_end_2_f", SoundVolume = 0.3, TTS = '"Make your audio file and write the subtitle here."'},
+ },
+ },
+}
+
+--====================== LANGUAGE BASED BACKUP SPEECH SOUNDS ======================--
+
+Config.NPCBackupRequestSoundFiles = {
+ ['police'] = {
+ Male = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_backup_police", SoundVolume = 0.3, TTS = '"I require prisoner transport. Please send over a unit."'},
+ -- [2] = {FileName = SoundFileLanguagePrefix .. "_backup_police_1", SoundVolume = 0.3, TTS = '"I require prisoner transport. Please send over a unit."'},
+ -- [3] = {FileName = SoundFileLanguagePrefix .. "_backup_police_2", SoundVolume = 0.3, TTS = '"I require prisoner transport. Please send over a unit."'},
+ },
+ Female = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_backup_police_f", SoundVolume = 0.3, TTS = '"I require prisoner transport. Please send over a unit."'},
+ -- [2] = {FileName = SoundFileLanguagePrefix .. "_backup_police_1_f", SoundVolume = 0.3, TTS = '"I need backup, stand by."'},
+ -- [3] = {FileName = SoundFileLanguagePrefix .. "_backup_police_2_f", SoundVolume = 0.3, TTS = '"I need backup, stand by."'},
+ },
+ },
+ ['ambulance'] = {
+ Male = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_backup_ambulance", SoundVolume = 0.3, TTS = '"I require an ambulance at my location. Please send over a unit ASAP."'},
+ -- [2] = {FileName = SoundFileLanguagePrefix .. "_backup_ambulance_1", SoundVolume = 0.3, TTS = '"I need backup, stand by."'},
+ -- [3] = {FileName = SoundFileLanguagePrefix .. "_backup_ambulance_2", SoundVolume = 0.3, TTS = '"I need backup, stand by."'},
+ },
+ Female = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_backup_ambulance_f", SoundVolume = 0.3, TTS = '"I require an ambulance at my location. Please send over a unit ASAP."'},
+ -- [2] = {FileName = SoundFileLanguagePrefix .. "_backup_ambulance_1_f", SoundVolume = 0.3, TTS = '"I need backup, stand by."'},
+ -- [3] = {FileName = SoundFileLanguagePrefix .. "_backup_ambulance_2_f", SoundVolume = 0.3, TTS = '"I need backup, stand by."'},
+ },
+ },
+ ['taxi'] = {
+ Male = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_backup_taxi", SoundVolume = 0.3, TTS = '"Could you please dispatch a taxi to my location?"'},
+ -- [2] = {FileName = SoundFileLanguagePrefix .. "_backup_taxi_1", SoundVolume = 0.3, TTS = '"I need backup, stand by."'},
+ -- [3] = {FileName = SoundFileLanguagePrefix .. "_backup_taxi_2", SoundVolume = 0.3, TTS = '"I need backup, stand by."'},
+ },
+ Female = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_backup_taxi_f", SoundVolume = 0.3, TTS = '"Could you please dispatch a taxi to my location?"'},
+ -- [2] = {FileName = SoundFileLanguagePrefix .. "_backup_taxi_1_f", SoundVolume = 0.3, TTS = '"I need backup, stand by."'},
+ -- [3] = {FileName = SoundFileLanguagePrefix .. "_backup_taxi_2_f", SoundVolume = 0.3, TTS = '"I need backup, stand by."'},
+ },
+ },
+ ['tow'] = {
+ Male = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_backup_tow", SoundVolume = 0.3, TTS = '"I am in need of vehicle transportation. Please send over a tow truck."'},
+ -- [2] = {FileName = SoundFileLanguagePrefix .. "_backup_tow_1", SoundVolume = 0.3, TTS = '"I need backup, stand by."'},
+ -- [3] = {FileName = SoundFileLanguagePrefix .. "_backup_tow_2", SoundVolume = 0.3, TTS = '"I need backup, stand by."'},
+ },
+ Female = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_backup_tow_f", SoundVolume = 0.3, TTS = '"I am in need of vehicle transportation. Please send over a tow truck."'},
+ -- [2] = {FileName = SoundFileLanguagePrefix .. "_backup_tow_1_f", SoundVolume = 0.3, TTS = '"I need backup, stand by."'},
+ -- [3] = {FileName = SoundFileLanguagePrefix .. "_backup_tow_2_f", SoundVolume = 0.3, TTS = '"I need backup, stand by."'},
+ },
+ },
+ ['animalrescue'] = {
+ Male = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_backup_animalrescue", SoundVolume = 0.3, TTS = '"I require animal rescue services at my location. Please dispatch a unit."'},
+ -- [2] = {FileName = SoundFileLanguagePrefix .. "_backup_animalrescue_1", SoundVolume = 0.3, TTS = '"I need backup, stand by."'},
+ -- [3] = {FileName = SoundFileLanguagePrefix .. "_backup_animalrescue_2", SoundVolume = 0.3, TTS = '"I need backup, stand by."'},
+ },
+ Female = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_backup_animalrescue_f", SoundVolume = 0.3, TTS = '"I require animal rescue services at my location. Please dispatch a unit."'},
+ -- [2] = {FileName = SoundFileLanguagePrefix .. "_backup_animalrescue_1_f", SoundVolume = 0.3, TTS = '"I need backup, stand by."'},
+ -- [3] = {FileName = SoundFileLanguagePrefix .. "_backup_animalrescue_2_f", SoundVolume = 0.3, TTS = '"I need backup, stand by."'},
+ },
+ },
+ ['roadservice'] = {
+ Male = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_backup_roadservice", SoundVolume = 0.3, TTS = '"I require road cleanup services at my location. Please dispatch a unit."'},
+ -- [2] = {FileName = SoundFileLanguagePrefix .. "_backup_roadservice_1", SoundVolume = 0.3, TTS = '"I need backup, stand by."'},
+ -- [3] = {FileName = SoundFileLanguagePrefix .. "_backup_roadservice_2", SoundVolume = 0.3, TTS = '"I need backup, stand by."'},
+ },
+ Female = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_backup_roadservice_f", SoundVolume = 0.3, TTS = '"I require road cleanup services at my location. Please dispatch a unit."'},
+ -- [2] = {FileName = SoundFileLanguagePrefix .. "_backup_roadservice_1_f", SoundVolume = 0.3, TTS = '"I need backup, stand by."'},
+ -- [3] = {FileName = SoundFileLanguagePrefix .. "_backup_roadservice_2_f", SoundVolume = 0.3, TTS = '"I need backup, stand by."'},
+ },
+ },
+ ['coroner'] = {
+ Male = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_backup_coroner", SoundVolume = 0.3, TTS = '"I require a coroner at my location. Please dispatch a unit."'},
+ -- [2] = {FileName = SoundFileLanguagePrefix .. "_backup_coroner_1", SoundVolume = 0.3, TTS = '"I need backup, stand by."'},
+ -- [3] = {FileName = SoundFileLanguagePrefix .. "_backup_coroner_2", SoundVolume = 0.3, TTS = '"I need backup, stand by."'},
+ },
+ Female = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_backup_coroner_f", SoundVolume = 0.3, TTS = '"I require a coroner at my location. Please dispatch a unit."'},
+ -- [2] = {FileName = SoundFileLanguagePrefix .. "_backup_coroner_1_f", SoundVolume = 0.3, TTS = '"I need backup, stand by."'},
+ -- [3] = {FileName = SoundFileLanguagePrefix .. "_backup_coroner_2_f", SoundVolume = 0.3, TTS = '"I need backup, stand by."'},
+ },
+ },
+ ['mechanic'] = {
+ Male = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_backup_mechanic", SoundVolume = 0.3, TTS = '"I require a mechanic at my location. Please dispatch a mechanic ASAP."'},
+ -- [2] = {FileName = SoundFileLanguagePrefix .. "_backup_mechanic_1", SoundVolume = 0.3, TTS = '"I need backup, stand by."'},
+ -- [3] = {FileName = SoundFileLanguagePrefix .. "_backup_mechanic_2", SoundVolume = 0.3, TTS = '"I need backup, stand by."'},
+ },
+ Female = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_backup_mechanic_f", SoundVolume = 0.3, TTS = '"I require a mechanic at my location. Please dispatch a mechanic ASAP."'},
+ -- [2] = {FileName = SoundFileLanguagePrefix .. "_backup_mechanic_1_f", SoundVolume = 0.3, TTS = '"I need backup, stand by."'},
+ -- [3] = {FileName = SoundFileLanguagePrefix .. "_backup_mechanic_2_f", SoundVolume = 0.3, TTS = '"I need backup, stand by."'},
+ },
+ },
+ ['fire'] = {
+ Male = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_backup_fire", SoundVolume = 0.3, TTS = '"I require firefighters at my location. Please dispatch a fire unit ASAP."'},
+ },
+ Female = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_backup_fire_f", SoundVolume = 0.3, TTS = '"I require firefighters at my location. Please dispatch a fire unit ASAP."'},
+ },
+ },
+}
+
+--====================== LANGUAGE BASED PURSUIT BACKUP SPEECH SOUNDS ======================--
+
+Config.PursuitBackupSoundFiles = {
+ ['light'] = {
+ Male = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_pursuit_backup_light", SoundVolume = 0.3, TTS = '"I require backup at my location. Send over a motorbike unit."'},
+ },
+ Female = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_pursuit_backup_light_f", SoundVolume = 0.3, TTS = '"I require backup at my location. Send over a motorbike unit."'},
+ },
+ },
+ ['medium'] = {
+ Male = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_pursuit_backup_medium", SoundVolume = 0.3, TTS = '"I require assistance at my location. Send over a patrol unit."'},
+ },
+ Female = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_pursuit_backup_medium_f", SoundVolume = 0.3, TTS = '"I require assistance at my location. Send over a patrol unit."'},
+ },
+ },
+ ['heavy'] = {
+ Male = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_pursuit_backup_heavy", SoundVolume = 0.3, TTS = '"I require immediate assistance at my location. Send a firearms unit!"'},
+ },
+ Female = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_pursuit_backup_heavy_f", SoundVolume = 0.3, TTS = '"I require immediate assistance at my location. Send a firearms unit!"'},
+ },
+ },
+ ['air'] = {
+ Male = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_pursuit_backup_air", SoundVolume = 0.3, TTS = '"I require eyes in the sky at my location. Please dispatch a helicopter unit."'},
+ },
+ Female = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_pursuit_backup_air_f", SoundVolume = 0.3, TTS = '"I require eyes in the sky at my location. Please dispatch a helicopter unit."'},
+ },
+ },
+ ['army'] = {
+ Male = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_pursuit_backup_army", SoundVolume = 0.3, TTS = '"I require the army at my position. Send them over, quickly!"'},
+ },
+ Female = {
+ [1] = {FileName = SoundFileLanguagePrefix .. "_pursuit_backup_army_f", SoundVolume = 0.3, TTS = '"I require the army at my position. Send them over, quickly!"'},
+ },
+ },
+}
diff --git a/resources/night_ers/config/spikestrip-config.lua b/resources/night_ers/config/spikestrip-config.lua
new file mode 100644
index 000000000..64b2ab0e8
--- /dev/null
+++ b/resources/night_ers/config/spikestrip-config.lua
@@ -0,0 +1,57 @@
+Config = Config or {}
+
+Config.Spikestrips = {
+ Enabled = true, -- Set to false to disable the spikestrip system.
+ EnableSpikestripMarkers = false, -- Set to true to enable the spikestrip marker at the vehicle's trunk.
+
+ -- Spikestrip model and animations
+ SpikestripModel = "p_ld_stinger_s",
+ SpikestripDeployedAnimationDictionary = "p_ld_stinger_s",
+ SpikestripDeployedAnimationName = "p_stinger_s_deploy",
+ SpikestripRetractAnimationName = "p_stinger_s_idle_undeployed",
+
+ -- Player animations
+ PlayerOpenTrunkAnimationDictionary = "mini@repair",
+ PlayerOpenTrunkAnimationName = "fixing_a_ped",
+
+ PlayerDeployAnimationDictionary = "pickup_object",
+ PlayerDeployAnimationName = "pickup_low",
+
+ PlayerPickupAnimationDictionary = "pickup_object",
+ PlayerPickupAnimationName = "pickup_low",
+
+ -- Settings
+ DistanceToDeleteSpikestrips = 150, -- Distance in meters the initial creator of the spikestrips has to be to automatically delete the spikestrips.
+ DoSpikesBlowNPCTires = true, -- If true, the NPCs will blow their tires when they hit a spikestrip.
+
+ -- Vehicle equiped with spikestrips
+ VehiclesEquipedWithSpikestrips = {
+ -- Default vehicles
+ "police",
+ "police2",
+ "police3",
+ "policet",
+ "fbi",
+
+ -- Custom vehicles
+ "tskodae",
+ },
+
+ -- This marker appears near the vehicle's trunk position when the player is near a vehicle with spikestrips. (https://docs.fivem.net/docs/game-references/markers/)
+ SpikestripMarker = {
+ Type = 6,
+ Offset = {x = 0.0, y = 0.0, z = 0.0},
+ Direction = {x = 0.0, y = 0.0, z = 0.0},
+ Rotation = {x = 0.0, y = 0.0, z = 0.0},
+ Scale = {x = 0.15, y = 0.15, z = 0.15},
+ Color = {r = 255, g = 193, b = 7, a = 155},
+ BobUpAndDown = false,
+ FaceCamera = true,
+ P19 = false,
+ Rotate = false,
+ TextureDict = nil,
+ TextureName = nil,
+ DrawOnEnts = false
+ },
+
+}
\ No newline at end of file
diff --git a/resources/night_ers/config/stretcher-config.lua b/resources/night_ers/config/stretcher-config.lua
new file mode 100644
index 000000000..7aa65ce11
--- /dev/null
+++ b/resources/night_ers/config/stretcher-config.lua
@@ -0,0 +1,70 @@
+Config = Config or {}
+
+--====================== Stretcher Settings ======================--
+
+Config.EnableStretcherSpawnEverywhere = true -- false = only allow spawn stretchers from given vehicle models | true = allows stretcher spawn command everywhere + allows grabbing from vehicles.
+Config.PlayerLayDownOnStretcherBedAnimDict = "switch@trevor@annoys_sunbathers"
+Config.PlayerLayDownOnStretcherBedAnim = "trev_annoys_sunbathers_loop_girl"
+Config.RangeToCheckNearbyAmbulance = 10.0 -- Distance to check for nearby ambulances.
+Config.RangeToCheckForStretcherPoint = 3.0 -- Distance (radius) from the ambulance stretcher point (behindVehicle) to get a prompt saying you can put/take stretcher from it.
+Config.VehiclesWithStretchers = {
+ -- INFO: behindVehicle is how far behind the ambulance the stretcher is, depth is how deep into the ambulance the stretcher is, height is the offset height of the stretcher inside the ambulance.
+ {hash = "ambulance", behindVehicle = -6.0, sideways = 0.1, depth = -1.25, height = 0.65}, -- Default setting.
+
+ -- Custom vehicles we used to test.
+ {hash = "ambumercbox", behindVehicle = -6.0, sideways = 0.0, depth = -1.4, height = 0.28},
+ {hash = "ukambu1", behindVehicle = -6.0, sideways = 0.0, depth = -1.5, height = 0.28},
+ {hash = "ukambu2", behindVehicle = -6.0, sideways = 0.0, depth = -1.5, height = 0.28},
+ -- {hash = "your_ambulance", behindVehicle = -6.0, sideways = 0.0, depth = -1.5, height = 0.28},
+ -- Add more here.
+}
+
+Config.ShowSavedScreen = true -- Shows victim saved in GTA style, when dropping off a victim.
+Config.StretcherDropOffRadius = 15.0
+Config.StretcherDropOffBlipData = { -- https://docs.fivem.net/docs/game-references/blips/
+ Enabled = true, -- Set to false to disable blips for the strecher dropoff locations.
+ Name = "Medical Center",
+ Sprite = 153,
+ Display = 2,
+ ShortRange = true,
+ Colour = 1,
+ Scale = 0.75,
+ Alpha = 200,
+}
+Config.StretcherDropOffLocations = { -- Drop off for stretchers with victims on it. Basically a transfer to hospital personel.
+ vector3(358.6897, -591.0747, 28.7968), -- Pillbox Hill
+ vector3(1827.6267, 3692.5576, 34.2244), -- Sandy Shores
+ vector3(-246.6335, 6330.6113, 32.4262), -- Paleto Bay
+ -- Add more here.
+}
+
+Config.StretcherSoundSettings = {
+ Raise = {FileName = "stryker_raise", SoundVolume = 0.3},
+ Lower = {FileName = "stryker_lower", SoundVolume = 0.3},
+ Vehicle = {FileName = "stryker_vehicle", SoundVolume = 0.3},
+}
+
+Config.EnableDropOffMarker = true -- Shows a marker where the target on the stretcher must be to drop them off.
+Config.DropOffMarkerData = {
+ MarkerId = 30 --[[ integer ]],
+ dirX = 0 --[[ number ]],
+ dirY = 0 --[[ number ]],
+ dirZ = 0 --[[ number ]],
+ rotX = 90.0 --[[ number ]],
+ rotY = 0.0 --[[ number ]], -- Unused, entity heading used.
+ rotZ = 0 --[[ number ]],
+ scaleX = 1.0 --[[ number ]],
+ scaleY = 1.0 --[[ number ]],
+ scaleZ = 2.0 --[[ number ]],
+ red = 255 --[[ integer ]],
+ green = 165 --[[ integer ]],
+ blue = 0 --[[ integer ]],
+ alpha = 225 --[[ integer ]],
+ bobUpAndDown = false --[[ boolean ]],
+ faceCamera = false --[[ boolean ]],
+ p19 = 0 --[[ integer ]],
+ rotate = false --[[ boolean ]],
+ textureDict = 0 --[[ string ]],
+ textureName = 0 --[[ string ]],
+ drawOnEnts = 0 --[[ boolean ]]
+}
\ No newline at end of file
diff --git a/resources/night_ers/config/translations/cs.lua b/resources/night_ers/config/translations/cs.lua
new file mode 100644
index 000000000..4784a1844
--- /dev/null
+++ b/resources/night_ers/config/translations/cs.lua
@@ -0,0 +1,628 @@
+Config = Config or {}
+Config.Messages = Config.Messages or {}
+
+ --====================== Language ======================--
+
+Config.Messages['cs'] = {
+ ScriptInitialising = "Skript se stále načítá, čekejte prosím...",
+ Yes = "Ano",
+ No = "Ne",
+ AreYouSureCompleteCallout = "Opravdu chceš výjezd označit jako vyřešený?",
+ CompletingCalloutCannotBeUndone = "Označení výjezdu jako dokončený nelze vrátit zpět.",
+ Controls = "Ovládání",
+ Hint = "Tipy",
+ HotKeys = "Zkratky",
+ Explanation = "Vysvětlivky",
+ Unknown = "Neznámo",
+ ToHideOrShow = "schovat/ukázat",
+ Aim = "Míření",
+ AimToOrderPedTextDrawing = "~p~'~w~E~p~'~w~ » Pokleknout ~p~/ ~w~Vstát ",
+ AimToOrderAnimalTextDrawing = "~p~'~w~E~p~'~w~ » Zastavit ~p~/ ~w~Propustit ",
+ GrabOrReleaseStretcher = "~p~'~w~E~p~'~w~ » Vzít ~p~/ ~w~Pustit",
+ RaiseOrLowerStretcher = "~p~' ~w~↑~p~ | ~w~↓~p~ '~w~ » Zvednout ~p~/ ~w~Snížit",
+ ToggleHints = "Věděl jsi, že můžeš tento displej přepnout?",
+ DisableHints = "Tipy byly vypnuty.",
+ EnableHints = "Tipy byly zapnuty.",
+ DisabledCallouts = "Nabídky výjezdů byly vypnuty.",
+ EnabledCallouts = "Nabídky výjezdů byly zapnuty.",
+ OnShift = "Zahájil jsi svou službu",
+ OffShift = "Ukončil jsi svou službu",
+ NotOnShift = "Nejsi ve službě.",
+ Postal = "Lokace",
+ StreetName = "Ulice",
+ RequiredUnits = "Potřebné složky",
+ ProvideBackupIfRequested = "Na vyžádání poskytni zálohu.",
+ Nearby = "poblíž",
+ OfferedCalloutActiveOrAttachedToACallout = "Tohle nemůžeš udělat: Již jsi na aktivním výjezdu.",
+ CouldNotRequestCalloutCooldown = "Nabídka nebo žádost výjezdu byla zablokována kvůli časovému omezení. Zkus to znovu později...",
+ CouldNotRequestACallout = "Momentálně není k dispozici žádný výjezd (server je zaneprázdněn), zkus to prosím znovu...",
+ CouldNotRequestCallout = "Momentálně není k dispozici žádný výjezd, protože nejsi členem žádné požadované složky nebo nemáš aktivované výjezdy (pro aktuální složku) (callouts_config.lua)...",
+ CalloutMarkedOnYourGPS = "Lokace posledního výjezdu byla označena přes GPS.",
+ AcceptedCallout = "Byl jsi připojen k",
+ CancelCallout = "Tento výjezd byl zrušen.",
+ NotAbleToCancelCallout = "Momentálně tento výjezd nelze zrušit, zkus to prosím za pár sekund...",
+ DetachedFromCallout = "Tvoje jednotka byla odvolána z tohoto výjezdu.",
+ LastCalloutOfferExpired = "Jiné jednotky reagují na tento výjezd.",
+ NotAttachedToCallout = "Nelze zrušit výjezd, ve kterém nejsi připojen.",
+ AnyUnitsAvailableToRespond = "Je nějaká jednotka k dispozici?",
+ CancelUnitsBeforeGoingOffShift = "Musíš zrušit svou žádost o posily než půjdeš mimo službu...",
+ NoPermissionToGoOnShift = "Nejsi oprávněn jít do služby/mimo službu...",
+ ServerCouldNotBuildCalloutError = "CHYBA: Nepodařilo se spustit výjezd kvůli serveru z důvodu chyby ve skriptu.",
+ PersonHasPassedOut = "~r~VAROVÁNÍ ~w~Vypadá to, že osoba ztratila vědomí!",
+ PersonIsTakingOff = "~r~VAROVÁNÍ ~w~Osoba utíká/ujíždí!",
+ PersonIsAgressive = "~r~VAROVÁNÍ ~w~Osoba vypadá agresivně!",
+ PersonIsSurrendering = "~r~VAROVÁNÍ ~w~Osoba se vzdává!",
+ PedCannotEnterVehicle = "Osoba nemůže nastoupit do nejbližšího vozidla.",
+ NoNearbyVehicleFound = "Nebylo nalezeno žádné blízké vozidlo, přiveď osobu k vozidlu...",
+ PulloverModeExplanation = "Přibliž se k vozidlu, které chceš zastavit...",
+ PulloverInitiatedRear = "Vozidlo nyní zůstane za tebou. Stiskni U pro přepnutí manuálního zatáčení.",
+ PulloverInitiatedFront = "Vozidlo nyní zůstane před tebou. Stiskni U pro přepnutí manuálního zatáčení.",
+ PulloverConcluded = "Zastavení vozidla bylo dokončeno...",
+ PulloverFailedToLockInVehicle = "Nepodařilo se zamknout ve vozidle pro zastavení, zkus to prosím znovu...",
+ PulloverManualSteeringEnabled = "Manuální ovládání pro zastavení vozidla bylo zapnuto...",
+ PulloverManualSteeringDisabled = "Manuální ovládání pro zastavení vozidla bylo vypnuto, vozidlo tě bude nyní opět sledovat...",
+ RequestCooldownActive = "Vyčkej prosím alespoň 3 minuty před zasíláním žádosti nebo její rušení...",
+ AlreadyAttachedToCallout = "Jsi již připojen k jinému výjezdu...",
+ DeclinedCalloutOffer = "Zamítl jsi žádost o reagování na výjezd.",
+ NoSpawnPointAvailableForNPC = "Nebyla nalezena žádná blízká stanice pro výjezd posil do této lokality.",
+ CantCancelBackup = "Tuto žádost o posilu již nejde zrušit.",
+ NotEnoughSpaceBehindAmbulance = "Za sanitním vozem není dostatek místa pro vytáhnutí/zandání nosítek",
+ ImpoundVehicleSubtitle = "Pro odtažení vozidla jej dovez na domluvenou lokaci.",
+ ImpoundVehicleLeaveSubtitle = "Vystup prosím z vozidla a ustup.",
+ ImpoundVehicleNotAllowedSubtitle = "Toto vozidlo zde není povoleno...",
+ CannotDoThisWhilePedIsInAVehicle = "Tento úkon nelze provést, když je osoba v autě...",
+ OffDuty = "Mimo službu",
+ OnDuty = "Ve službě",
+ SuspectIsTryingToStealAVehicle = "Podezřelý se snaží ukrást vozidlo!",
+ TrafficStop = "Zastavení provozu",
+
+ -- Dispatch
+ DispatchMessage = "Dispečink",
+ NextDispatchMessage = "Další informace za",
+ Seconds = "sekund",
+ Loading = "Načítání",
+ None = "Žádné",
+ TrackUnitProposal = "Zobrazit tuto jednotku",
+ EmergencyCall = "Příchozí volání",
+ Caller = "Volající:",
+ CallDescription = "Popis:",
+ Location = "Adresa:",
+ Postal = "Lokace:",
+ CalloutUnitsRequired = "Potřebné složky:",
+ UnitResponse = "reaguje na volání.",
+ UnitDetached = "se odpojil z volání.",
+ UnitArrived = "přijel na místo volání.",
+ UnitOnShift = "zahájil službu.",
+ UnitOffShift = "ukončil službu.",
+ DispatchNote = "Poznámka dispečinku:",
+ DispatchNoteText = "Lokace GPS bude odeslána do vozidla.",
+ DispatchNoteResponseText = "V případě nutnosti poskytni zálohu...",
+ CompleteCalloutFooterText = "Stiskni tlačítko pro označení výjezdu jako dokončený:",
+ TimeRemainingToAcceptCallout = "Zbývající čas pro přijmutí výjezdu:",
+ HasRequestedPolice = "požádal o eskortu pro podezřelého.",
+ HasRequestedAmbulance = "požádal o Zdravotnickou záchrannou službu.",
+ HasRequestedTaxi = "požádal o odvoz přes TAXI.",
+ HasRequestedTow = "požádal o odtahovou službu.",
+ HasRequestedRoadService = "požádal o správu silnic.",
+ HasRequestedCoroner = "požádal o účast koronera na aktuální lokaci.",
+ HasRequestedAnimalRescue = "požádal o odchytovou službu zvěře.",
+ HasRequestedMechanic = "požádal o mechanika.",
+ HasRequestedFire = "požádal o Hasičský záchranný sbor.",
+ DispatchMessagesEnabled = "Zprávy z dispečinku byly zapnuty.",
+ DispatchMessagesDisabled = "Zprávy z dispečinku byly vypnuty.",
+
+ -- Tasks
+ InvolvedPedsRemaining = "Zbývající zúčastněné subjekty:",
+ InvolvedVehsRemaining = "Zbývající úkoly pro přepravu vozidel:",
+ InvolvedObjsRemaining = "Zbývajcí úkoly správy silnic:",
+ InvolvedPropsRemaining = "Zbývající úkoly pro koronera:",
+ ExtinguishAllFires = "Uhaste všechny požáry.",
+ ClearAreaOfSmoke = "Vyčistěte oblast od kouře.",
+
+ -- ERS Selection menu
+ Select = "Vybrat",
+ Cancel = "Zrušit",
+ SelectService = "Vybrat složku",
+ Police = "Policie České republiky",
+ Ambulance = "Zdravotnická záchranná služba",
+ Fire = "Hasičská záchranná služba",
+ Tow = "Odtahová služba",
+ PoliceDescription = "Pomáhat a chránit",
+ AmbulanceDescription = "Chceme více! – lékařů, sester, zdrojů",
+ FireDescription = "Každý má právo na život, lidský život je hoden ochrany...",
+ TowDescription = "Pro pojišťovny už jsem dělal, ale zadarmo to prostě neumím...",
+
+ -- Gear Selection menu
+ SelectGear = "Vybrat výstroj a výzbroj",
+
+ -- Radial menu
+ RadialMenuInstructionTitle = "Vyber dostupnou složku jako posilu...",
+ ExitRadialMenuInstruction = "Stiskni pro opuštění radiální nabídky...",
+ RequestPoliceTransportIcon = "fa-solid fa-handcuffs", -- https://fontawesome.com/search?m=free&o=r
+ RequestPoliceTransportInstruction = "Stiskni pro žádost nebo zrušení žádosti o eskortu pro transport nejbližšího podezřelého...",
+ RequestAmbulanceIcon = "fa-solid fa-stethoscope",
+ RequestAmbulanceInstruction = "Stiskni pro žádost nebo zrušení žádosti o Zdravotnickou záchrannou službu pro účast na místě zraněných osob...",
+ RequestTowIcon = "fa-solid fa-car",
+ RequestTowInstruction = "Stiskni pro žádost nebo zrušení žádosti o odtahovou službu pro vyzvednutí nejbližšího vozidla...",
+ RequestTaxiIcon = "fa-solid fa-taxi",
+ RequestTaxiInstruction = "Stiskni pro žádost nebo zrušení žádost o TAXI pro nejbližší osobu...",
+ RequestRoadServiceIcon = "fa-solid fa-road",
+ RequestRoadServiceInstruction = "Stiskni pro žádost nebo zrušení žádosti o správu silnic pro vyčištění blízkých cest...",
+ RequestCoronerIcon = "fa-solid fa-skull-crossbones",
+ RequestCoronerInstruction = "Stiskni pro žádost nebo zrušení žádosti o koronera pro vyzvednutí těl v oblasti...",
+ RequestAnimalRescueIcon = "fa-solid fa-paw",
+ RequestAnimalRescueInstruction = "Stiskni pro žádost nebo zrušení žádosti o odchytovou službu pro péči blízkých zvířat...",
+ RequestMechanicIcon = "fa-solid fa-screwdriver-wrench",
+ RequestMechanicInstruction = "Stiskni pro žádost nebo zrušení žádosti o mechanika pro opravu blízkých vozidel...",
+ RequestFireIcon = "fa-solid fa-fire",
+ RequestFireInstruction = "Stiskni pro žádost nebo zrušení žádosti o hasičskou službu pro uhašení blízkého požáru...",
+ RequestedUnitStrugglingToReach = "Žádaná jednotka má potíže se dostat na tvou lokaci... Je možné, že bude odvolána.",
+
+ -- Pursuit Radial Menu
+ PursuitRadialMenuInstructionTitle = "Vyber jednotku pro výjezd na aktuální pronásledování...",
+ PursuitRadialMenuInstruction = "Stiskni pro žádost nebo zrušení žádosti o posilu pro aktuální pronásledování...",
+ RequestLightBackupIcon = "fa-solid fa-motorcycle",
+ RequestLightBackupInstruction = "Stiskni pro žádost nebo zrušení žádosti o motorkářskou jednotku pro aktuální pronásledování..",
+ RequestMediumBackupIcon = "fa-solid fa-car",
+ RequestMediumBackupInstruction = "Stiskni pro žádost nebo zrušení žádosti o jednotku ve vozidle pro aktuální pronásledování...",
+ RequestHeavyBackupIcon = "fa-solid fa-truck",
+ RequestHeavyBackupInstruction = "Stiskni pro žádost nebo zrušení žádosti o obrněnou jednotku pro aktuální pronásledování...",
+ RequestAirBackupIcon = "fa-solid fa-helicopter",
+ RequestAirBackupInstruction = "Stiskni pro žádost nebo zrušení žádosti o podporu ze vzduchu pro aktuální pronásledování...",
+ RequestArmyBackupIcon = "fa-solid fa-person-military-rifle",
+ RequestArmyBackupInstruction = "Stiskni pro žádost nebo zrušení žádosti o podporu armády pro aktuální pronásledování...",
+
+ -- Pursuit notifications
+ ActivePursuit = "AKTIVNÍ PRONÁSLEDOVÁNÍ",
+ NotInPursuitMode = "Nejsi v aktuálním pronásledování...",
+ CancellingPreviousRequestForBackup = "Rušení poslední žádosti o posily pro aktuální pronásledování...",
+ BackupAlreadyRequested = "Posily již byly vyžádány. Pro zrušení žádosti vyber danou jednotku...",
+ PursuitBackupTooFarAway = "Jedna z posil pro aktuální pronásledování je příliž daleko, proto se odvolává...",
+ PursuitCancelledReasonPersonDied = "Aktuální pronásledování došlo až do konce. Pronásledovaná osoba bohužel zemřela.",
+ PursuitCancelledReasonLostTarget = "Aktuální pronásledování došlo až do konce, jelikož byla pronásledovaná osoba ztracena.",
+ PursuitCancelledReasonPersonVanished = "Aktuální pronásledování bylo přerušeno... Pronásledovaná osoba se ztratila z dohledu.",
+ PursuitCancelledReasonVehicleVanished = "Aktuální pronásledování bylo přerušeno... Pronásledované vozidlo se ztratilo z dohledu.",
+ PursuitCancelledReasonPersonCaught = "Aktuální pronásledování došlo až do konce... Pronásledovaná osoba byla zadržena.",
+ PursuitHotkeyFocus = "soustředění",
+ PursuitHotkeyBackup = "posily",
+ PursuitCancelledReasonNoLongerCapableOfPursuing = "Aktuální pronásledování bylo přerušeno... Nemůžeš již pronásledovat cíl.",
+
+ -- Ambulance
+ AmbulanceAlreadyEnroute = "Již jsi vyžádal Zdravotnickou záchrannou službu...",
+ RequestingAmbulance = "Žádání o Zdravotnickou záchrannou službu...",
+ AmbulanceDone = "Zdravotnická záchranná služba odjíždí z místa.",
+ NoAmbulanceEnroute = "Nebyla vyžádána žádná Zdravotnická záchranná služba.",
+ AmbulanceCancelled = "Žádost o Zdravotnickou záchrannou službu byla zrušena.",
+ NoPeopleFoundAmbulance = "Nebyla nalezena žádná osoba, která by potřebovala léčbu nebo převoz...",
+ AllAmbulancesOccupied = "Všechny složky Zdravotnické záchranná služby jsou v terénu. Vyčkej prosím, a zkus to později...",
+ AmbulanceArrived = "Zdravotnická záchranná služba přijela na místo.",
+ AmbulanceEnroute = "Na místo byla vyslána posádka Zdravotnické záchranné služby a nyní je na cestě...",
+ NextMedicTask = "Lékař byl přidělen pro ošetření dané osoby.",
+
+ -- Police
+ PoliceAlreadyEnroute = "Již jsi vyžádal eskortu pro podezřelého...",
+ RequestingPolice = "Žádání o eskortu pro podezřelého.",
+ PoliceDone = "Místní hlídka odváží podezřelého na stanici.",
+ NoPoliceEnroute = "Nebyla vyžádána žádná eskorta pro podezřelého...",
+ PoliceCancelled = "Žádost o eskortu pro podezřelého byla zrušena...",
+ NoPeopleFoundPolice = "Nebyl nalezen žádný podezřelý, který by měl být předveden na stanici...",
+ AllPoliceOccupied = "Všechny jednotky jsou aktuálně zaneprázdněny. Vyčkej prosím, a zkus to znovu...",
+ PoliceArrived = "Eskorta pro podezřelého dorazila na místo.",
+ PoliceEnroute = "Okolní hlídka byla vyslána pro eskortu podezřelého...",
+ NextPoliceTask = "Policista byl přidělen pro převzetí podezřelého.",
+
+ -- Taxi
+ TaxiAlreadyEnroute = "Již jsi vyžádal TAXI na svou lokaci.",
+ RequestingTaxi = "Žádání o TAXI pro nejbližší osobu.",
+ TaxiDone = "Osoba byla vyzvednuta TAXI a nyní opouští místo.",
+ NoTaxiEnroute = "Nebylo vyžádané žádné TAXI...",
+ TaxiCancelled = "Žádost o TAXI byla zrušena.",
+ NoPeopleFound = "Nebyla nalezena žádná osoba pro odvoz TAXI...",
+ AllTaxisOccupied = "Všechny TAXI vozidla jsou zaplněné. Vyčkej prosím, a zkus to znovu...",
+ TaxiArrived = "Vozidlo TAXI dorazilo na místo.",
+ TaxiEnroute = "Služba TAXI byla vyslána na místo..",
+ NextTaxiTask = "Řidič TAXI byl přidělen pro vyzvědnutí osoby.",
+
+ -- Tow
+ TowAlreadyEnroute = "Již jsi vyžádal odtahovou službu.",
+ RequestingTow = "Žádání o odtahovou službu pro nejbližší vozidlo.",
+ TowDone = "Vozidlo bylo vyzvednuto odtahovou službou, která nyní opouští místo.",
+ NoTowEnroute = "Nebyla vyžádána žádná odtahová služba...",
+ RequestingTowButVehicleOccupied = "Cílové vozidlo pro odtah nesmí být používáno...",
+ TowCancelled = "Žádost o odtahovou službu byla zrušena.",
+ NoVehiclesFound = "Nebylo nalezeno žádné vozidlo pro odtah...",
+ AllTowOccupied = "Všechny odtahové služby jsou momentálně zaneprázděnené. Vyčkej prosím, a zkus to znovu...",
+ TowArrived = "Odtahová služba dorazila na místo.",
+ TowEnroute = "Odtahová služba byla vyslána a je na cestě na místo...",
+ NextTowTask = "Řidič odtahové služby byl přidělen pro vyzvednutí vozidla.",
+
+ -- Road Service
+ RoadServiceAlreadyEnroute = "Již jsi vyžádal správu silnic.",
+ RequestingRoadService = "Žádání o správu silnic pro nejbližší nečistoty.",
+ RoadServiceDone = "Všechny nečistoty byly odstraněny a správa silnic nyní opouští místo.",
+ NoRoadServiceEnroute = "Nebyla vyžádána žádná správa silnic...",
+ RoadServiceCancelled = "Žádost o správu silnic byla zrušena.",
+ NoRoadServiceTaskFound = "Nebyl nalezen žádný úkon pro správu silnic...",
+ AllRoadServiceOccupied = "Všechny správy silnic jsou momentálně zaneprázdněny. Vyčkej prosím, a zkus to znovu...",
+ RoadServiceArrived = "Správa silnic dorazila na místo.",
+ RoadServiceEnroute = "Správa silnic byla vyslána a je na cestě na místo...",
+ NextRoadServiceTask = "Zaměstnanec správy silnic byl přiřazen pro vyčištění silnice.",
+
+ -- Coroner
+ CoronerAlreadyEnroute = "Již jsi vyžádal na místo koronera.",
+ RequestingCoroner = "Žádání o koronera pro nejbližší potřebu.",
+ CoronerDone = "Všechna těla byla zajištěna, naložena a budou odvezena do márnice.",
+ NoCoronerEnroute = "Nebyl vyžádán žádný koroner...",
+ CoronerCancelled = "Žádost o koronera byla zrušena.",
+ NoCoronerTaskFound = "Nebyl nalezen žádný úkon pro koronera...",
+ AllCoronerOccupied = "Všichni koroneři jsou aktuálně nedostupní. Vyčkej prosím, a zkus to znovu...",
+ CoronerArrived = "Koroner dorazil na místo.",
+ CoronerEnroute = "Koroner byl vyslán na místo a je na cestě...",
+ NextCoronerTask = "Koroner byl přiřazen pro zajištění všech těl.",
+
+ -- Animal Rescue
+ AnimalRescueAlreadyEnroute = "Již jsi vyžádal na místo odchytovou službu.",
+ RequestingAnimalRescue = "Žádání o odchytovou službu pro nejbližší zvíře.",
+ AnimalRescueDone = "Všechna zvířata byla zajištěna odchytovou službou.",
+ NoAnimalRescueEnroute = "Nebyla vyžádána žádná odchytová služba...",
+ AnimalRescueCancelled = "Žádost o odchytovou službu byla zrušena.",
+ NoAnimalRescueTaskFound = "Nebyl nalezen žádný úkon pro odchytovou službu...",
+ AllAnimalRescueOccupied = "Všechny odchytové služby jsou v terénu. Vyčkej prosím, a zkus to znovu...",
+ AnimalRescueArrived = "Odchytová služba dorazila na místo.",
+ AnimalRescueEnroute = "Odchytová služba byla vyslána na místo a je na cestě...",
+ NextAnimalRescueTask = "Pracovník odchytové služby byl přidělen pro postarání se o zvěř.",
+
+ -- Mechanic
+ MechanicAlreadyEnroute = "Již jsi vyžádal mechanika na místo.",
+ RequestingMechanic = "Žádání o mechanika pro nejbližší vozidlo.",
+ MechanicDone = "Vozidlo bylo opraveno mechanikem.",
+ NoMechanicEnroute = "Nebyl vyžádán žádný mechanik...",
+ MechanicCancelled = "Žádost o mechanika byla zrušena.",
+ NoMechanicTaskFound = "Nebyla nalezena žádná práce pro mechanika...",
+ AllMechanicOccupied = "Žádný mechanik není aktuálně k dispozici. Vyčkej prosím, a zkus to znovu...",
+ MechanicArrived = "Mechanik dorazil na místo.",
+ MechanicEnroute = "Mechanik byl vyslán na místo a je na cesně...",
+
+ -- Fire
+ FireAlreadyEnroute = "Již jsi vyžádal hasičské služby.",
+ RequestingFire = "Žádání o hasičské služby pro nejbližší požár.",
+ FireDone = "Požár byl uhašen hasiči a nyní odjíždějí.",
+ NoFireEnroute = "Žádní hasiči nejsou na cestě...",
+ FireCancelled = "Žádost o hasiče byla zrušena.",
+ NoFireTaskFound = "Nebyl nalezen žádný úkol pro hasiče...",
+ AllFireOccupied = "Všechny hasičské jednotky jsou zaneprázdněny. Zkus to prosím znovu za pár sekund...",
+ FireArrived = "Hasiči dorazili na místo.",
+ FireEnroute = "Hasičská jednotka byla vyslána a je na cestě...",
+ NextFireTask = "Hasiči byli přiděleni k uhašení blízkého požáru.",
+ NoFireInArea = "V blízkosti není žádný požár...",
+
+ -- Spikestrip
+ SpikestripAlreadyDeployed = "Zastavovací pás máš již nasazen...",
+ PutAwaySpikestrip = "Odebírání zastavovacího pásu",
+ TakeOutSpikestrip = "Vytahování zastavovacího pásu",
+ SpikestripDeployed = "Zastavovací pás byl zničen",
+ SpikestripPickedUp = "Zastavovací pás byl sebrán",
+ SpikestripRemoved = "Zastavovací pás byl odebrán",
+ ToGrabOrPutAwaySpikestripFromVehicle = "pro sebrání nebo schování zastavovacího pásu z/do vozidla",
+ ToDeployOrPickupSpikestrip = "pro rozložení nebo sebrání zastavovacího pásu",
+ FailedToGrabSpikestrip = "Nepodařilo se vzít zastavovací pás...",
+
+ -- Ped Interaction
+ YouSay = "Říkáš",
+ Press = "Stiskni",
+ ToInteract = "pro interakci s nejbližší osobou",
+ ToInteractImpound = "pro interakci s osobou zodpovědnou za zabavení",
+ ToInteractGear = "pro interakci s osobou zodpovědnou za výstroj a výzbroj",
+ ToPerformCPR = "pro interakci se zraněnou osobou",
+ ToUseStretcherVeh = "pro vytažení/zasunutí the nosítek z/do vozidla",
+ ToCleanupObject = "pro vyčištění nečistot",
+ StopInteraction = "Ukončit konverzaci a povolit odchod/odjezd",
+ ExitInteraction = "Ukončit konverzaci",
+ SendToCustody = "Poslat do vazby",
+ PersonTakenIntoCustody = "Osoba byla přejata do vazby.",
+ NoCustodyCenterNearby = "Žádné centrum vazby není v blízkosti.",
+ SuspectArrested = "~b~PODEZŘELÝ ZATČEN",
+ InteractionOptions = "Možnosti interakce...",
+ Greet = "Pozdravit",
+ GreetExplanation = "Pozdravit interagovanou osobu.",
+ AskForId = "Doklad totožnosti",
+ AskForIdExplanation = "Požádat osobu o doklad totožnosti.",
+ Question = "Otázka",
+ QuestionExplanation = "Otázka osobě, s kterou interagujete.",
+ Breathalyze = "Alkohol tester",
+ BreathalyzeExplanation = "Provést test na alkohol v krvi.",
+ DrugTest = "Test na drogy",
+ DrugTestExplanation = "Provést stěr na přítomnost drog.",
+ Warn = "Varování",
+ WarnExplanation = "Dát osobě varování.",
+ Fine = "Pokuta",
+ FineExplanation = "Dát osobě pokutu.",
+ Grab = "Vzít",
+ GrabExplanation = "Vzít osobu.",
+ GetOut = "Vystoupit",
+ GetOutExplanation = "Přikázat osobě vystoupit z vozidla.",
+ AskToFollow = "Následování",
+ AskToFollowExplanation = "Požádat osobu o následování.",
+ AskToWait = "Vyčkání",
+ AskToWaitExplanation = "Požádat osobu o setrvání na místě.",
+ HandsUp = "Ruce nahoru",
+ HandsUpExplanation = "Přikázat osobě dát ruce nahoru.",
+ Search = "Prohledat",
+ SearchExplanation = "Prohledat osobu a oblečení.",
+ Cuff = "Spoutat",
+ CuffExplanation = "Spoutat osobu.",
+ PutInVehicle = "Dát do vozidla",
+ PutInVehicleExplanation = "Přikázat osobě nastoupit do nejbližšího vozidla.",
+ PersonalDetails = "Informace o osobě (Doklad totožnosti)",
+ FullName = "Jméno a přijímení:",
+ DOB = "Datum narození:",
+ DocumentNumber = "Číslo dokumentu:",
+ Nationality = "Národnost:",
+
+ DatabaseCheck = "Kontrola v databázi",
+ RunningDatabaseCheck = "Vyhledávání v databázi...",
+ DatabaseCheckResults = "Informace nalezeny",
+ Address = "Adresa:",
+ DriversLicense = "Řidičský průkaz:",
+ BikeLicense = "Průkaz na motorku:",
+ BoatLicense = "Průkaz na loď:",
+ TruckLicense = "Průkaz na nákladní vozidlo:",
+ PilotLicense = "Pilotní průkaz:",
+ Warrants = "Zatykače:",
+ FlagsOrMarkers = "Označení:",
+
+ ProfilePicture = "Fotografie:",
+ FirstName = "Jméno:",
+ LastName = "Příjmení:",
+ Gender = "Pohlaví:",
+ Email = "Email:",
+ PhoneNumber = "Telefonní číslo:",
+ Country = "Země:",
+ State = "Kraj:",
+ City = "Město:",
+ PostalCode = "PSČ:",
+ AddressType = "Typ adresy:",
+ Licenses = "Oprávnění:",
+
+ -- Warrants
+ armed_and_dangerous = "Ozbrojený a nebezpečný",
+ assault = "Napadení",
+ burglary = "Vloupání",
+ drug_related = "Drogové delikty",
+ gang_affiliation = "Spojení s gangem",
+ homicide = "Vražda",
+ kidnapping = "Únos",
+ mental_health_issues = "Duševní problémy",
+ sex_offense = "Sexuální delikty",
+ terrorism = "Terorismus",
+ theft = "Krádež",
+ traffic_violation = "Dopravní přestupek",
+ wanted_person = "Hledaná osoba",
+ other = "Jiné, viz popis...",
+ active_warrant = "Aktivní zatykač",
+
+ StopGrabbingInstruction = "Stiskni ~INPUT_CELLPHONE_CANCEL~ pro puštění osoby.",
+ CannotInteractWithThisNPC = "S touto osobou nelze interagovat...",
+ GrabWhenNotCuffedResponse = "Nesahej na mě! Nejsem ani zatčený...",
+ PersonAlreadyInteracting = "Této osobě se již někdo věnuje...",
+ PersonAlreadyBeingEscorted = "Tato osoba je již eskortována...",
+ ThisPersonIsCuffed = "Tato osoba je spoutána...",
+ AlreadyPerformingCPR = "Již podáváš první pomoc...",
+ AlreadyCleaningUpObject = "Již odstraňuješ nečistoty...",
+ NoPedFoundToPerformCPROn = "Žádná osoba nevyžaduje první pomoc...",
+ CPRSuccess = "Tato osoba se cítí lépe. Dobrá práce!",
+ CPRFail = "Vypadáto, že... Tato osoba znovu přestala dýchat...",
+ UnableToPerformCPR = "Nelze podat první pomoc, jelikož už ji někdo zkoušel podat před tebou...",
+ UnableToSendPersonAway = "Tuto osobu nemůžeš propostit, musíš ji nejdříve odpoutat...",
+ WorkOnBleeding = "Probíhá aplikace turniketu / hrudního těsnění / gázy na rány kvůli masivnímu krvácení...",
+ WorkOnBleedingAlreadyDone = "Turniket / hrudní těsnění / gáza na rány již byla aplikována od někoho jiného kvůli masivnímu krvácení...",
+ NotBleeding = "Tato osoba nemá masivní krvácení.",
+ WorkOnAirway = "Probíhá čištění úst pro uvolnění dýchacích cest...",
+ WorkOnAirwayAlreadyDone = "Problém s dýcháním již bylo vyřešeno někým jiným...",
+ NoAirwayObstructions = "Nebyly nalezeny problémy s dýchacími cestami.",
+ WorkOnBreathing = "Dechová frekvence této osoby není obvyklá, je třeba navštívit nemocnici co nejdříve...",
+ WorkOnBreathingAlreadyDone = "Někdo jiný již konstatoval problém s dechovou frekvencí, musí co nejdříve do nemocnice...",
+ NoBreathingProblems = "Tato osoba dýchá, ale musí co nejdříve do nemocnice.",
+ WorkOnCirculation = "Něco s frekvencí srdečního tepu je špatně, tato osoba musí okamžitě do nemocnice...",
+ WorkOnCirculationAlreadyDone = "Někdo jiný již konstatoval problém se srdečním tepem, musí ihned do nemocnice...",
+ NoCirculationProblems = "Tato osoba má běžný srdeční tep, ale musí do nemocnice.",
+ PersonFeelsCold = "Tato osoba je na dotek velmi studená...",
+ PersonFeelsWarm = "Tato osoba je na dotek velmi teplá...",
+ NoHypothermiaSigns = "Nebyly zjištěny žádné známky podchlazení.",
+ PersonFeelsColdAlreadyDetected = "Někdo jiný již konstatoval, že je osoba velmi studená...",
+ PersonFeelsWarmAlreadyDetected = "Někdo jiný již konstatoval, že je osoba velmi teplá...",
+ NoHypothermiaSignsAlreadyDetected = "Někdo jiný již konstatoval, že zde nejsou známky podchlazení...",
+ OrderedPedToTheirKnees = "Příkázal jsi této osobě pokleknout.",
+ OrderedPedToStandUp = "Přikázal jsi této osobě stoupnout.",
+ PedIsDrunk = "Test na alkohol ukázal, že osoba překročila legální limit alkoholu pro řízení.",
+ PedIsNotDrunk = "Test na alkohol ukázal, že je osoba pod legálním limitem alkoholu pro řízení.",
+ PedIsUnderInfluenceOfDrugs = "Stěr na drogy ukázal, že je osoba pod vlivem drog.",
+ PedIsNotUnderInfluenceOfDrugs = "Stěr na drogy ukázal, že osoba není pod vlivem drog.",
+ YoureNotAPoliceOfficer = "Nevypadáš jako pravý policista...",
+ InTheWrongService = "Víš, že nejsi na tom správném místě...",
+ AskForGear = "Požádat o výstroj a výzbroj...",
+ GetOutWhenNotInAVehicleResponse = "Nemůžeš vystoupit z vozidla, když jsi v něm...",
+
+ -- qb-target / ox-target
+ VehSpeakTo = "Mluvit s",
+ VehAssist = "Pomoct zraněným",
+ VehDriver = "řidič",
+ VehFrontPassenger = "přední spolujezdec",
+ VehRearPassenger = "zadní spolujezdec",
+ VehPassenger = "spolujezdec",
+
+ -- Dead ped Interaction
+ IdentifyDeadPed = "Identifikovat",
+ DragPed = "Vzít",
+ CheckMassiveBleeding = "Krvácení",
+ CheckAirway = "Dýchací cesty",
+ CheckBreathing = "Dýchání",
+ CheckCirculation = "Cirkulace ",
+ CheckHypothermia = "Podchlazení",
+ PerformCPR = "Podat první pomoc",
+ PutOnStretcher = "Dát na nosítka",
+ TakeOffStretcher = "Sundat s nosítek",
+ PutInBodyBag = "Dát do těla",
+
+ IdentifyDeadPedExplanation = "Identifikovat zraněnou osobu",
+ DragPedExplanation = "Vzít osobu z vozidla",
+ CheckMassiveExplanation = "Zkontrolovat masivní krvácení",
+ CheckAirwayExplanation = "Zkontrolovat funkčnost dýchacích cest",
+ CheckBreathingExplanation = "Zkontrolovat dýchání a frekvenci",
+ CheckCirculationExplanation = "Zkontrolovat puls a frekvenci",
+ CheckHypothermiaExplanation = "Zkontrolovat teplotu těla",
+ PerformCPRExplanation = "Zahájit resuscitaci",
+ PutOnStretcherExplanation = "Dát osobu na nejbližší nosítka",
+ TakeOffStretcherExplanation = "Sundat osobu z nosítek",
+ PutInBodyBagExplanation = "Dát osobu do těla",
+
+ -- Stretcher
+ MustBeOnShiftToDoThis = "Nejsi ve službě...",
+ NoNearbyStretcherFound = "Nosítka nebyla nalezena...",
+ StretcherStillInUse = "Tyto nosítka se stále používají...",
+ StretcherAlreadyInUse = "Tyto nosítka se již používají...",
+ ReleasedStretcher = "Pustil jsi nosítka.",
+ StillUsingStretcher = "Stále používáš nosítka...",
+ NotUsingStretcher = "Nepoužíváš nosítka...",
+ LowerTheNearbyStretcher = "Ujisti se, že jsou nosítka snížené...",
+ StretcherAlreadyOccupied = "Na těchto nosítkách je již pacient...",
+ ThisPersonIsNotOnAStretcher = "Tato osoba není na nosítkách...",
+ CannotDoThisWhenPedIsOnStretcher = "Pokud je osoba na nosítkách, tak tohle nelze udělat...",
+ StretcherAlreadySpawnedForVehicle = "Tohle vozidlo má již vytažené nosítka...",
+ AmbulanceAlreadyHasAStretcherInside = "S vozidlem nelze interagovat, jelikož držíš nosítka a toto vozidlo je má již uvnitř...",
+ VehicleMustBeEmptyForStretcherInteraction = "Vozidlo musí být prázdné, než lze používat nosítka...",
+ CantInteractWithStretcherInsideVehicle = "Ve vozidle nelze používat nosítka...",
+ PlacedStretcherIntoAVehicle = "Zasunul jsi nosítka do vozidla.",
+ TakenStretcherFromAVehicle = "Vytáhl jsi nosítka z vozidla.",
+ PersonTransferredToHospital = "Předal jsi pacienta do péče doktorů v nemocnici.",
+ PersonSaved = "~b~PACIENT ZACHRÁNĚN!",
+ DropOffPersonAtHospital3DText = "Stiskni ~o~ENTER ~w~pro předání pacienta do nemocnice",
+ ThereIsStretcherOnTheGroundNearby = "Na zemi je nosítko poblíž, vezmi si ho a umist do vozidla.",
+ SomeoneElseHasNetworkOwnershipOverTheStretcher = "Někdo jiný má vlastnictví nad těmi nosítky, musíš se od něj odtrhnout.",
+ SomeoneElseHasNetworkOwnershipOverTheVehicle = "Někdo jiný má vlastnictví nad tímto vozidlem, musíš se od něj odtrhnout.",
+ GetOnOrOffStretcher = "Vzít ~p~/~w~ sundat nosítka",
+
+ -- Inventory
+ Inventory = "Nalezeny položky inventáře...",
+
+ -- Vehicle Interactions
+ VehicleDetails = "Informace o vozidle",
+ VehiclePlate = "Poznávací značka",
+ VehicleModel = "Model",
+ VehicleOwner = "Majitel",
+ VehicleColor = "Hlavní barva",
+ VehicleColorSecondary = "Sekundární barva",
+ VehicleBuildYear = "Rok výroby",
+ VehicleTax = "Daň",
+ VehicleMOT = "Technická kontrola",
+ VehicleInsurance = "Pojištění",
+ VehicleStolen = "Hlášeno jako kradené",
+ VehicleStolenDescription = "Kradené vozidlo",
+ VehicleBolo = "Aktivní pátrání",
+ VehicleBoloDescription = "Popis pátrání",
+ Paid = "Zaplaceno",
+ NotPaid = "Nezaplaceno",
+ Valid = "Platné",
+ Invalid = "Neplatné",
+ Passed = "Prošel",
+ Failed = "Neprošel",
+ SearchThe = "Prohledat ",
+ FoundItem = "Našel jsi",
+ ItemWillBeConfiscatedAutomaticallyIn10Seconds = "Položka bude automaticky zabavena za 10 sekund...",
+ NothingFoundInThisPartOfTheVehicle = "V této části vozidla jsi nic nenašel...",
+ NotCloseEnoughToVehicle = "Nejsi dostatečně blízko k vozidlu, které chceš prohledat...",
+ NotCloseEnoughToVehicleSection = "Nejsi dostatečně blízko k části vozidla, kterou chceš prohledat...",
+ VehicleIsNotEmpty = "Toto vozidlo není prázdné...",
+ VehicleDataTimeout = "Momentálně nelze prohledat toto vozidlo kvůli časovému omezení serveru, zkus to později...",
+
+ -- Behaviour State
+ NeutralLabel = "Vypadá to, že je osoba neutrální.",
+ RelaxedLabel = "Vypadá to, že je osoba odpočinku.",
+ BusyLabel = "Vypadá to, že je osoba v tíse.",
+ CheerfulLabel = "Vypadá to, že je osoba veselá.",
+ FriendlyLabel = "Vypadá to, že je osoba přátelská.",
+ IrritatedLabel = "Vypadá to, že je osoba na nervy.",
+ StressedLabel = "Vypadá to, že je osoba stresovaná.",
+ WorriedLabel = "Vypadá to, že je osoba znepokojená.",
+ ConfusedLabel = "Vypadá to, že je osoba zmatená.",
+ SuspiciousLabel = "Vypadá to, že je osoba pod vlivem drog.",
+ DeliriousLabel = "Vypadá to, že se chová nepředvídatelně.",
+ ParanoidLabel = "Vypadá to, že je osoba velice nedůvěřivá.",
+
+ -- Questioning
+ ExitConversation = "Vypadá to, že jsi dokázal všechny otázky zodpovědět...",
+ YouHaveAskedAllQuestions = "Vyplnil jsi všechny dostupné otázky pro tuto interakci.",
+
+ -- Answering questions
+ ConversationHistory = "Historie konverzace",
+ QDriversLicense = "auto",
+ QBikeLicense = "motorka",
+ QBoatLicense = "loď",
+ QTruckLicense = "nákladní vozidlo",
+ QPilotLicense = "letadlo",
+ PrefixDrunk = "Hic!",
+ SuffixDrunk = "**Burp**",
+ PrefixDrugged = "Uh...",
+ SuffixDrugged = "**Chews**",
+ Sober = "v pořádku",
+ Drunk = "pod vlivem alkoholu",
+ High = "pod vlivem drog",
+ Stoned = "pod vlivem drog",
+ BleedingSomewhere = "krvácení",
+ TroubleWithBreathing = "má potíže s dýcháním",
+ SomethingStuckInThroat = "má něco uvízlé v krku",
+ Warm = "přehřátý",
+ Cold = "chladný",
+ Healthy = "v pořádku",
+ Dizzy = "zmrzlý",
+ Extrasunny = "slunečno",
+ Overcast = "zataženo",
+ Rain = "dešťový",
+ Foggy = "mlha",
+ Smog = "mlha",
+ Clouds = "oblačno",
+ Snow = "sníh",
+ Snowlight = "světlý sníh",
+ Xmas = "těžký sníh",
+ Halloween = "tma",
+ Blizzard = "bouře",
+ RainHalloween = "dešťová bouře",
+ SnowHalloween = "těžký sníh",
+ Thunder = "blesk",
+ Clearing = "světlý dešťový",
+ Neutral = "počasí",
+
+ -- Hints
+ OrderOnKneesOrStandUpExplanation = "Přikázat pokleknutí / zvednutí.",
+ AcceptCallout = "Přijmout příchozí volání.",
+ CompleteCallout = "Označit výjezd jako dokončený.",
+ CuffExplanation = "Spoutat/Odpoutat nejbližší osobu.",
+ PullOver = "Zastavit vozidlo.",
+ RadialMenuExplanation = "Nabídka dispečinku (Radiální nabídka)",
+ StopTrackingUnitExplanation = "Zrušit zobrazení jednotky",
+ CannotTrackYourself = "Nelze zobrazit sebe.",
+ TargetNotOnACallout = "Tato jednotka nemá výjezd, takže nelze zobrazit...",
+
+ InputHelpText = "Je nutno zadat RGB barvy nebo přímou barvu. [Příklady: red | 255 0 0]",
+ WaitCooldown = "Musíš vyčkat: časové omezení je stále aktivní...",
+ NoPermission = "Nemáš oprávnění tohle provést.",
+ MustSetNumberValue = "Chyba, musíš zadat číslo jako hráčovo ID.",
+ CannotIdentifySize = "Tuto velikost nelze identifikovat... Zkus to znovu.",
+
+ CannotDoThisOnFoot = "Tohle nelze provést pěšky.",
+ CannotDoThisInAVehicle = "Tohle nelze provést ve vozidle.",
+ CannotDoThisAsPassenger = "Tohle nelze provést jako spolujezdec...",
+
+ UseMDTToToggleShift = "Můžeš přepnout svou službu přes MDT. Pokud chceš vypnout příchozí výjezdy:",
+ CalloutsDisabled = "Výjezdy byly vypnuty.",
+
+ Dispatch = "Dispečink",
+ Responding = "Žádaná jednotka reaguje na poslední tísňové volání.",
+ ArriveAtScene = "Žádaná jednotka je na místě.",
+ AmbulanceDispatched = "Zdravotnická záchranná služba byla vyslána...",
+ PoliceTransportDispatched = "Eskorta byla vyslána...",
+ VehicleTransportDispatched = "Odtahová služba byla vyslána...",
+ TaxiDispatched = "TAXI bylo zavoláno.",
+ TrackingUnit = "Nyní se zobrazuje lokace jednotky přes GPS. Tato lokace bude automaticky aktualizována.",
+ StoppedTrackingUnit = "Přestal si zobrazovat aktuální jednotku.",
+}
\ No newline at end of file
diff --git a/resources/night_ers/config/translations/de.lua b/resources/night_ers/config/translations/de.lua
new file mode 100644
index 000000000..ba7acdfd1
--- /dev/null
+++ b/resources/night_ers/config/translations/de.lua
@@ -0,0 +1,628 @@
+Config = Config or {}
+Config.Messages = Config.Messages or {}
+
+ --====================== Language ======================--
+
+Config.Messages['de'] = {
+ ScriptInitialising = "Das Skript wird noch initialisiert, bitte warten...",
+ Yes = "Ja",
+ No = "Nein",
+ AreYouSureCompleteCallout = "Sind Sie sicher, dass Sie den Notruf abschließen möchten?",
+ CompletingCalloutCannotBeUndone = "Das Abschließen dieses Notrufs kann nicht rückgängig gemacht werden.",
+ Controls = "Steuerung",
+ Hint = "Hinweise",
+ HotKeys = "Tastenkürzel",
+ Explanation = "Erklärungen",
+ Unknown = "Unbekannt",
+ ToHideOrShow = "verstecken/zeigen",
+ Aim = "Zielen",
+ AimToOrderPedTextDrawing = "~p~'~w~E~p~'~w~ » Knie nieder ~p~/ ~w~Aufstehen ",
+ AimToOrderAnimalTextDrawing = "~p~'~w~E~p~'~w~ » Stoppen ~p~/ ~w~Loslassen ",
+ GrabOrReleaseStretcher = "~p~'~w~E~p~'~w~ » Greifen ~p~/ ~w~Loslassen",
+ RaiseOrLowerStretcher = "~p~' ~w~↑~p~ | ~w~↓~p~ '~w~ » Anheben ~p~/ ~w~Absenken",
+ ToggleHints = "Wusstest du, dass du diese Anzeige umschalten kannst?",
+ DisableHints = "Hinweise deaktiviert.",
+ EnableHints = "Hinweise aktiviert.",
+ DisabledCallouts = "Notrufangebote deaktiviert.",
+ EnabledCallouts = "Notrufangebote aktiviert.",
+ OnShift = "Du hast deine Schicht begonnen",
+ OffShift = "Du hast deine Schicht beendet",
+ NotOnShift = "Du bist nicht im Dienst.",
+ Postal = "Postleitzahl",
+ StreetName = "Straßenname",
+ RequiredUnits = "Benötigte Einheiten",
+ ProvideBackupIfRequested = "Backup bereitstellen, falls angefordert.",
+ Nearby = "in der Nähe",
+ OfferedCalloutActiveOrAttachedToACallout = "Du kannst das nicht tun: Du hast bereits ein aktives Notrufangebot oder bist bereits einem Notruf zugeordnet.",
+ CouldNotRequestCalloutCooldown = "Eine Notrufanforderung oder -angebot wurde aufgrund einer Abklingzeit blockiert. Bitte versuche es später noch einmal...",
+ CouldNotRequestACallout = "Der Notruf konnte momentan nicht angeboten werden (Server war beschäftigt), bitte versuche es erneut...",
+ CouldNotRequestCallout = "Der Notruf konnte nicht angeboten werden, weil du nicht Teil einer der erforderlichen Rollen/Gruppen bist, um den Notruf zu erhalten ODER weil keine Notrufe aktiviert waren (für deinen Dienst) (callouts_config.lua)...",
+ CalloutMarkedOnYourGPS = "Die Route zum letzten Notruf wurde auf deinem GPS markiert.",
+ AcceptedCallout = "Du wurdest zugeordnet",
+ CancelCallout = "Der Notruf wurde storniert.",
+ NotAbleToCancelCallout = "Du kannst den Notruf momentan nicht stornieren, bitte versuche es in wenigen Sekunden noch einmal...",
+ DetachedFromCallout = "Deine Einheit wurde vom letzten Notruf getrennt.",
+ LastCalloutOfferExpired = "Andere Einheiten konnten den letzten Notruf bearbeiten.",
+ NotAttachedToCallout = "Du kannst einen Notruf, dem du nicht zugeordnet bist, nicht stornieren.",
+ AnyUnitsAvailableToRespond = "Sind Einheiten verfügbar, um zu reagieren?",
+ CancelUnitsBeforeGoingOffShift = "Du musst deine Anforderung für Einheiten stornieren, bevor du die Schicht beendest...",
+ NoPermissionToGoOnShift = "Du hast keine Berechtigung, die Schicht zu beginnen oder zu beenden...",
+ ServerCouldNotBuildCalloutError = "FEHLER: Der Server konnte den Notruf nicht erstellen, aufgrund eines Fehlers im Code.",
+ PersonHasPassedOut = "~r~ALARM ~w~Die Person scheint das Bewusstsein verloren zu haben!",
+ PersonIsTakingOff = "~r~ALARM ~w~Die Person hebt ab!",
+ PersonIsAgressive = "~r~ALARM ~w~Die Person wirkt aggressiv!",
+ PersonIsSurrendering = "~r~ALARM ~w~Die Person ergibt sich!",
+ PedCannotEnterVehicle = "Die Person kann das nächstgelegene Fahrzeug nicht betreten.",
+ NoNearbyVehicleFound = "Kein nahegelegenes Fahrzeug gefunden, bringe die Person näher zum Fahrzeug...",
+ PulloverModeExplanation = "Fahre nah an das Fahrzeug heran, das du anhalten möchtest...",
+ PulloverConcluded = "Der Anhaltevorgang ist abgeschlossen...",
+ PulloverFailedToLockInVehicle = "Fehler beim Festlegen des Fahrzeugs zum Anhalten, bitte versuche es erneut...",
+ PulloverInitiatedRear = "Das Fahrzeug bleibt nun hinter Ihnen. Drücken Sie U, um die manuelle Lenkung zu aktivieren.",
+ PulloverInitiatedFront = "Das Fahrzeug bleibt nun vor Ihnen. Drücken Sie U, um die manuelle Lenkung zu aktivieren.",
+ PulloverManualSteeringEnabled = "Manuelle Steuerung aktiviert...",
+ PulloverManualSteeringDisabled = "Manuelle Steuerung deaktiviert, das Fahrzeug folgt Ihnen wieder...",
+ RequestCooldownActive = "Bitte warte mindestens 5 Sekunden, bevor du versuchst, eine Anfrage zu stellen oder zu stornieren...",
+ AlreadyAttachedToCallout = "Sie sind bereits mit einem anderen Notruf verknüpft.",
+ DeclinedCalloutOffer = "Sie haben die Bitte, es mit einer Notfallbenachrichtigung zu verknüpfen.",
+ NoSpawnPointAvailableForNPC = "Es wurde eine geeignete Erscheinungsposition für die erforderliche Sicherheitseinheit in dieser Zone gefunden.",
+ CantCancelBackup = "Sie können diese Anfrage nicht mehr abbrechen.",
+ NotEnoughSpaceBehindAmbulance = "Es ist nicht genug Platz hinter der Krankenwagen, um die Bancard zu spawnen oder zu verbergen.",
+ ImpoundVehicleSubtitle = "Um das Fahrzeug zu beschlagnahmen, fahr zu der Markierung, die ich für dich erstellt habe.",
+ ImpoundVehicleLeaveSubtitle = "Verlasse das Fahrzeug und gehe auf die Seite.",
+ ImpoundVehicleNotAllowedSubtitle = "Das Fahrzeug ist hier nicht erlaubt...",
+ CannotDoThisWhilePedIsInAVehicle = "Sie können diesen Vorgang nicht ausführen, wenn die Person im Fahrzeug ist...",
+ OffDuty = "Außer Dienst",
+ OnDuty = "Im Dienst",
+ SuspectIsTryingToStealAVehicle = "Der Verdächtige versucht, ein Fahrzeug zu stehlen!",
+ TrafficStop = "Verkehrsstopp",
+
+ -- Dispatch
+ DispatchMessage = "Einsatznachricht",
+ NextDispatchMessage = "Nächste Nachricht in",
+ Seconds = "Sekunden",
+ Loading = "Laden",
+ None = "Keine.",
+ TrackUnitProposal = "Diese Einheit verfolgen",
+ EmergencyCall = "Notruf",
+ Caller = "Anrufer:",
+ CallDescription = "Beschreibung:",
+ Location = "Standort:",
+ Postal = "Postleitzahl:",
+ CalloutUnitsRequired = "Benötigte Einheiten:",
+ UnitResponse = "reagiert auf einen Notfall.",
+ UnitDetached = "hat sich von ihrem Notruf getrennt.",
+ UnitArrived = "ist am Einsatzort angekommen.",
+ UnitOnShift = "hat ihre Schicht begonnen.",
+ UnitOffShift = "hat ihre Schicht beendet.",
+ DispatchNote = "Einsatznotiz:",
+ DispatchNoteText = "GPS wird auf deiner Karte markiert.",
+ DispatchNoteResponseText = "Backup bereitstellen, falls erforderlich...",
+ CompleteCalloutFooterText = "Drücke die Taste, um den Notruf abzuschließen:",
+ TimeRemainingToAcceptCallout = "Verbleibende Zeit, um den Notruf anzunehmen:",
+ HasRequestedPolice = "hat Polizeitransport für einen Verdächtigen angefordert.",
+ HasRequestedAmbulance = "hat eine Krankenhauseinheit angefordert.",
+ HasRequestedTaxi = "hat ein Taxi angefordert.",
+ HasRequestedTow = "hat eine Fahrzeugtransporteinheit angefordert.",
+ HasRequestedRoadService = "hat eine Straßenserviceeinheit angefordert.",
+ HasRequestedCoroner = "hat einen Gerichtsmediziner angefordert.",
+ HasRequestedAnimalRescue = "hat eine Tierrettungseinheit angefordert.",
+ HasRequestedMechanic = "hat einen Mechaniker angefordert.",
+ HasRequestedFire = "hat die Feuerwehr angefordert.",
+ DispatchMessagesEnabled = "Dispatch-Nachrichten wurden aktiviert.",
+ DispatchMessagesDisabled = "Dispatch-Nachrichten wurden deaktiviert.",
+
+ -- Tasks
+ InvolvedPedsRemaining = "Verbleibende beteiligte Personen:",
+ InvolvedVehsRemaining = "Verbleibende Fahrzeugtransporte Aufgaben:",
+ InvolvedObjsRemaining = "Verbleibende Straßenservice Aufgaben:",
+ InvolvedPropsRemaining = "Verbleibende Gerichtsmedizin Aufgaben:",
+ ExtinguishAllFires = "Lösche alle Brände.",
+ ClearAreaOfSmoke = "Räume den Bereich vom Rauch frei.",
+
+ -- ERS Auswahlmenü
+ Select = "Auswählen",
+ Cancel = "Abbrechen",
+ SelectService = "Dienst auswählen",
+ Police = "Polizei",
+ Ambulance = "Krankenwagen",
+ Fire = "Feuerwehr",
+ Tow = "Abschleppdienst",
+ PoliceDescription = "Wächter der Gerechtigkeit, die mit Mut schützen.",
+ AmbulanceDescription = "Helden des Heilens, die Leben schnell retten.",
+ FireDescription = "Furchtlose Feuerwehrleute, die tapfer kämpfen.",
+ TowDescription = "Pannenhelfer, die schnelle Hilfe leisten.",
+
+ -- Gear Selection menu
+ SelectGear = "Gang auswählen",
+
+ -- Radialmenü
+ RadialMenuInstructionTitle = "Wählen Sie eine verfügbare Backup-Einheit aus...",
+ ExitRadialMenuInstruction = "Klicken, um das Radialmenü zu verlassen...",
+ RequestPoliceTransportIcon = "fa-solid fa-handcuffs", -- https://fontawesome.com/search?m=free&o=r
+ RequestPoliceTransportInstruction = "Klicken, um eine Polizeitransporteinheit für den nächsten Verdächtigen anzufordern oder zu stornieren...",
+ RequestAmbulanceIcon = "fa-solid fa-truck-medical",
+ RequestAmbulanceInstruction = "Klicken, um eine Krankenhauseinheit anzufordern oder zu stornieren, um sich um verletzte Personen in der Umgebung zu kümmern...",
+ RequestTowIcon = "fa-solid fa-car-burst",
+ RequestTowInstruction = "Klicken, um eine Fahrzeugtransporteinheit für das nächstgelegene Fahrzeug anzufordern oder zu stornieren...",
+ RequestTaxiIcon = "fa-solid fa-taxi",
+ RequestTaxiInstruction = "Klicken, um ein Taxi für die nächstgelegene Person anzufordern oder zu stornieren...",
+ RequestRoadServiceIcon = "fa-solid fa-broom",
+ RequestRoadServiceInstruction = "Klicken, um eine Straßenserviceeinheit anzufordern oder zu stornieren, um die nahegelegenen Straßen zu reinigen...",
+ RequestCoronerIcon = "fa-solid fa-book-skull",
+ RequestCoronerInstruction = "Klicken, um eine Gerichtsmedizin-Einheit anzufordern oder zu stornieren, um die Leichensäcke in der Umgebung abzuholen...",
+ RequestAnimalRescueIcon = "fa-solid fa-paw",
+ RequestAnimalRescueInstruction = "Klicken, um eine Tierrettungseinheit anzufordern oder zu stornieren, um sich um nahegelegene Tiere zu kümmern...",
+ RequestMechanicIcon = "fa-solid fa-wrench",
+ RequestMechanicInstruction = "Klicken, um einen Mechaniker anzufordern oder zu stornieren, um ein Fahrzeug zu reparieren...",
+ RequestFireIcon = "fa-solid fa-fire",
+ RequestFireInstruction = "Klicken, um eine Feuerwehr einheit anzufordern oder zu stornieren, om branden in de buurt uit te blussen...",
+ RequestedUnitStrugglingToReach = "Die angeforderte Einheit hat Schwierigkeiten, Ihren Standort zu erreichen... Sie könnte storniert werden.",
+
+ -- Pursuit Radial Menu
+ PursuitRadialMenuInstructionTitle = "Wählen Sie eine Einheit für Verfolgungsunterstützung aus...",
+ PursuitRadialMenuInstruction = "Klicken Sie, um Einheiten für Verfolgungsunterstützung anzufordern...",
+ RequestLightBackupIcon = "fa-solid fa-motorcycle",
+ RequestLightBackupInstruction = "Klicken Sie, um leichte Einheiten für Verfolgungsunterstützung anzufordern...",
+ RequestMediumBackupIcon = "fa-solid fa-car-on",
+ RequestMediumBackupInstruction = "Klicken Sie, um mittlere Einheiten für Verfolgungsunterstützung anzufordern...",
+ RequestHeavyBackupIcon = "fa-solid fa-truck-moving",
+ RequestHeavyBackupInstruction = "Klicken Sie, um schwere Einheiten für Verfolgungsunterstützung anzufordern...",
+ RequestAirBackupIcon = "fa-solid fa-helicopter",
+ RequestAirBackupInstruction = "Klicken Sie, um Luftunterstützung für die Verfolgung anzufordern...",
+ RequestArmyBackupIcon = "fa-solid fa-person-military-rifle",
+ RequestArmyBackupInstruction = "Klicken Sie, um militärische Unterstützung für die Verfolgung anzufordern...",
+
+ -- Pursuit notifications
+ ActivePursuit = "VERFOLGUNG",
+ NotInPursuitMode = "Du bist nicht im Verfolgungsmodus...",
+ CancellingPreviousRequestForBackup = "Vorherige Unterstützungsanfrage wird abgebrochen...",
+ BackupAlreadyRequested = "Unterstützung wurde bereits angefordert. Um die Anfrage zu stornieren, wähle erneut den gleichen Typ von Unterstützungseinheiten...",
+ PursuitBackupTooFarAway = "(Eine der) Verfolgungsunterstützungseinheiten (ist) sind zu weit entfernt, die Anfrage wird abgebrochen...",
+ PursuitCancelledReasonPersonDied = "Die Verfolgung ist beendet. Die verfolgte Person ist verstorben.",
+ PursuitCancelledReasonLostTarget = "Die Verfolgung ist beendet, da das Ziel verloren wurde.",
+ PursuitCancelledReasonPersonVanished = "Die Verfolgung wurde abgebrochen... Die verfolgte Person ist verschwunden.",
+ PursuitCancelledReasonVehicleVanished = "Die Verfolgung wurde abgebrochen... Das verfolgte Fahrzeug ist verschwunden.",
+ PursuitCancelledReasonPersonCaught = "Die Verfolgung ist beendet... Du hast die Person, die du verfolgst, gefangen genommen.",
+ PursuitHotkeyFocus = "fokus",
+ PursuitHotkeyBackup = "Unterstützung",
+ PursuitCancelledReasonNoLongerCapableOfPursuing = "Die Verfolgung wurde abgebrochen... Du kannst die Person nicht mehr verfolgen.",
+
+ -- Krankenwagen
+ AmbulanceAlreadyEnroute = "Du hast bereits einen Krankenwagen angefordert...",
+ RequestingAmbulance = "Krankenwagen wird angefordert...",
+ AmbulanceDone = "Der Krankenwagen verlässt die Einsatzstelle.",
+ NoAmbulanceEnroute = "Es ist kein Krankenwagen unterwegs.",
+ AmbulanceCancelled = "Krankenwagenanfrage storniert.",
+ NoPeopleFoundAmbulance = "Es wurden keine Personen gefunden, für die Behandlung/Transport erforderlich wäre...",
+ AllAmbulancesOccupied = "Alle Krankenwagenten besetzt. Bitte versuche es in wenigen Sekunden erneut...",
+ AmbulanceArrived = "Der Krankenwagen ist angekommen",
+ AmbulanceEnroute = "Ein Krankenwagen wurde geschickt und ist jetzt unterwegs...",
+ NextMedicTask = "Der Sanitäter wurde beauftragt, sich um eine zugewiesene Person zu kümmern.",
+
+ -- Polizei
+ PoliceAlreadyEnroute = "Du hast bereits einen Polizeitransport angefordert...",
+ RequestingPolice = "Polizeitransport wird angefordert.",
+ PoliceDone = "Der Polizeitransport verlässt die Einsatzstelle.",
+ NoPoliceEnroute = "Es ist kein Polizeitransport unterwegs...",
+ PoliceCancelled = "Polizeitransportanfrage storniert...",
+ NoPeopleFoundPolice = "Es wurden keine Personen gefunden, für die Transport erforderlich wäre...",
+ AllPoliceOccupied = "Alle Polizeieinheiten besetzt. Bitte versuche es in wenigen Sekunden erneut...",
+ PoliceArrived = "Der Polizeitransport ist angekommen.",
+ PoliceEnroute = "Der Polizeitransport wurde geschickt und ist jetzt unterwegs...",
+ NextPoliceTask = "Der Polizeibeamte wurde beauftragt, eine zugewiesene Person abzuholen.",
+
+ -- Taxi
+ TaxiAlreadyEnroute = "Du hast bereits ein Taxi angefordert.",
+ RequestingTaxi = "Taxi für die nächstgelegene Person wird angefordert.",
+ TaxiDone = "Die Person wurde vom Taxifahrer abgeholt und verlässt jetzt die Einsatzstelle.",
+ NoTaxiEnroute = "Es ist kein Taxi unterwegs...",
+ TaxiCancelled = "Taxianfrage wurde storniert.",
+ NoPeopleFound = "Es wurden keine Personen gefunden, für die Transport erforderlich wäre...",
+ AllTaxisOccupied = "Alle Taxis besetzt. Bitte versuche es in wenigen Sekunden erneut...",
+ TaxiArrived = "Das Taxi ist angekommen.",
+ TaxiEnroute = "Ein Taxi wurde geschickt und ist jetzt unterwegs...",
+ NextTaxiTask = "Der Taxifahrer wurde beauftragt, eine zugewiesene Person abzuholen.",
+
+ -- Abschleppdienst
+ TowAlreadyEnroute = "Du hast bereits Fahrzeugtransport angefordert.",
+ RequestingTow = "Fahrzeugtransport für das nächstgelegene Fahrzeug wird angefordert.",
+ TowDone = "Das Fahrzeug wurde vom Abschleppwagen abgeholt und verlässt jetzt die Einsatzstelle.",
+ NoTowEnroute = "Es ist kein Fahrzeugtransport unterwegs...",
+ RequestingTowButVehicleOccupied = "Um Fahrzeugtransport anzufordern, muss das Fahrzeug unbesetzt sein...",
+ TowCancelled = "Fahrzeugtransportanfrage storniert.",
+ NoVehiclesFound = "Es wurden keine Fahrzeuge gefunden, für die Transport erforderlich wäre...",
+ AllTowOccupied = "Alle Fahrzeugtransporteinheiten besetzt. Bitte versuche es in wenigen Sekunden erneut...",
+ TowArrived = "Fahrzeugtransport ist angekommen.",
+ TowEnroute = "Eine Fahrzeugtransporteinheit wurde geschickt und ist jetzt unterwegs...",
+ NextTowTask = "Der Abschleppwagenfahrer wurde beauftragt, ein Fahrzeug abzuholen.",
+
+ -- Straßenservice
+ RoadServiceAlreadyEnroute = "Du hast bereits Straßenservice angefordert.",
+ RequestingRoadService = "Straßenservice für die nächstgelegene Aufgabe wird angefordert.",
+ RoadServiceDone = "Die Trümmer wurden beseitigt, die Straßenserviceeinheit verlässt die Einsatzstelle.",
+ NoRoadServiceEnroute = "Es ist kein Straßenservice unterwegs...",
+ RoadServiceCancelled = "Straßenserviceanfrage storniert.",
+ NoRoadServiceTaskFound = "Es wurde keine Aufgabe gefunden, für die Straßenservice erforderlich wäre...",
+ AllRoadServiceOccupied = "Alle Straßenserviceeinheiten besetzt. Bitte versuche es in wenigen Sekunden erneut...",
+ RoadServiceArrived = "Straßenservice ist angekommen.",
+ RoadServiceEnroute = "Eine Straßenserviceeinheit wurde geschickt und ist jetzt unterwegs...",
+ NextRoadServiceTask = "Der Straßenservice-Mitarbeiter wurde beauftragt, die Trümmer in der Umgebung zu beseitigen, um die Straße freizuräumen.",
+
+ -- Gerichtsmedizin
+ CoronerAlreadyEnroute = "Du hast bereits einen Gerichtsmediziner angefordert.",
+ RequestingCoroner = "Gerichtsmediziner für die nächstgelegene Aufgabe wird angefordert.",
+ CoronerDone = "Die Leichen wurden von der Einsatzstelle entfernt und werden in ein Leichenschauhaus gebracht.",
+ NoCoronerEnroute = "Es ist kein Gerichtsmediziner unterwegs...",
+ CoronerCancelled = "Gerichtsmedizineranfrage storniert.",
+ NoCoronerTaskFound = "Es wurde keine Aufgabe gefunden, für die ein Gerichtsmediziner erforderlich wäre...",
+ AllCoronerOccupied = "Alle Gerichtsmediziner-Einheiten besetzt. Bitte versuche es in wenigen Sekunden erneut...",
+ CoronerArrived = "Der Gerichtsmediziner ist angekommen.",
+ CoronerEnroute = "Ein Gerichtsmediziner wurde geschickt und ist jetzt unterwegs...",
+ NextCoronerTask = "Der Gerichtsmediziner wurde beauftragt, die Leichensäcke in der Umgebung abzuholen.",
+
+ -- Tierrettung
+ AnimalRescueAlreadyEnroute = "Du hast bereits Tierrettung angefordert.",
+ RequestingAnimalRescue = "Tierrettung für die nahegelegenen Tiere wird angefordert.",
+ AnimalRescueDone = "Die Tiere wurden von der Einsatzstelle abgeholt.",
+ NoAnimalRescueEnroute = "Es ist keine Tierrettungseinheit unterwegs...",
+ AnimalRescueCancelled = "Tierrettungsanfrage storniert.",
+ NoAnimalRescueTaskFound = "Es wurde keine Aufgabe gefunden, für die Tierrettung erforderlich wäre...",
+ AllAnimalRescueOccupied = "Alle Tierrettungseinheiten besetzt. Bitte versuche es in wenigen Sekunden erneut...",
+ AnimalRescueArrived = "Die Tierrettungseinheit ist angekommen.",
+ AnimalRescueEnroute = "Tierrettung wurde geschickt und ist jetzt unterwegs...",
+ NextAnimalRescueTask = "Die Tierrettung wurde beauftragt, sich um ein zugewiesenes Tier zu kümmern.",
+
+ -- Mechaniker
+ MechanicAlreadyEnroute = "Du hast bereits einen Mechaniker angefordert.",
+ RequestingMechanic = "Mechaniker für das nächstgelegene Fahrzeug wird angefordert.",
+ MechanicDone = "Das Fahrzeug wurde vom Mechaniker repariert und verlässt die Einsatzstelle.",
+ NoMechanicEnroute = "Es ist kein Mechaniker unterwegs...",
+ MechanicCancelled = "Mechanikeranfrage storniert.",
+ NoMechanicTaskFound = "Es wurde keine Aufgabe gefunden, für die ein Mechaniker erforderlich wäre...",
+ AllMechanicOccupied = "Alle Mechaniker-Einheiten besetzt. Bitte versuche es in wenigen Sekunden erneut...",
+ MechanicArrived = "Der Mechaniker ist angekommen.",
+ MechanicEnroute = "Ein Mechaniker wurde geschickt und ist jetzt unterwegs...",
+
+ -- Feuerwehr
+ FireAlreadyEnroute = "Du hast bereits eine Feuerwehr angefordert.",
+ RequestingFire = "Feuerwehr für die nächstgelegene Brandstelle wird angefordert.",
+ FireDone = "Die Brand wurde von der Feuerwehr ausgeblustet und sie verlässt die Einsatzstelle.",
+ NoFireEnroute = "Es ist keine Feuerwehr unterwegs...",
+ FireCancelled = "Feuerwehranfrage storniert.",
+ NoFireTaskFound = "Es wurde keine Aufgabe gefunden, für die Feuerwehr erforderlich wäre...",
+ AllFireOccupied = "Alle Feuerwehr-Einheiten besetzt. Bitte versuche es in wenigen Sekunden erneut...",
+ FireArrived = "Die Feuerwehr ist angekommen.",
+ FireEnroute = "Eine Feuerwehr wurde geschickt und ist jetzt unterwegs...",
+ NextFireTask = "Die Feuerwehr wurde beauftragt, die Brand in der Nähe auszubluten.",
+ NoFireInArea = "Es ist kein Feuer in der Nähe...",
+
+ -- Nagelband
+ SpikestripAlreadyDeployed = "Du hast bereits einen Nagelband ausgelegt...",
+ PutAwaySpikestrip = "Nagelband wegpacken",
+ TakeOutSpikestrip = "Nagelband herausnehmen",
+ SpikestripDeployed = "Nagelband ausgelegt",
+ SpikestripPickedUp = "Nagelband aufgehoben",
+ SpikestripRemoved = "Nagelband entfernt",
+ ToGrabOrPutAwaySpikestripFromVehicle = "Um einen Nagelband aus dem/in das Fahrzeug zu nehmen oder zu legen",
+ ToDeployOrPickupSpikestrip = "Um einen Nagelband auszulegen oder aufzuheben",
+ FailedToGrabSpikestrip = "Kon Nagelband nicht aufheben...",
+
+ -- Ped-Interaktion
+ YouSay = "Du sagst",
+ Press = "Drücke",
+ ToInteract = "um mit der nahegelegenen Person zu interagieren",
+ ToInteractImpound = "um mit dem Impound-Typ zu interagieren",
+ ToInteractGear = "um mit der Gear-Typ zu interagieren",
+ ToPerformCPR = "um mit der verletzten Person in der Nähe zu interagieren",
+ ToUseStretcherVeh = "um die Trage aus/in das Fahrzeug zu nehmen oder zu legen",
+ ToCleanupObject = "um Trümmer in der Nähe aufzuräumen",
+ StopInteraction = "Gespräch beenden und zum Verlassen auffordern",
+ ExitInteraction = "Interaktion beenden",
+ SendToCustody = "In Gewahrsam nehmen",
+ PersonTakenIntoCustody = "Die Person wurde in Gewahrsam genommen.",
+ NoCustodyCenterNearby = "Kein Gewahrsamzentrum in der Nähe.",
+ SuspectArrested = "~b~VERDACHTER FESTGENOMMEN",
+ InteractionOptions = "Interaktionsoptionen...",
+ Greet = "Begrüßen",
+ GreetExplanation = "Begrüße die Person, mit der du interagierst.",
+ AskForId = "ID verlangen",
+ AskForIdExplanation = "Fordere den Ausweis der Person an.",
+ Question = "Frage",
+ QuestionExplanation = "Frage die Person, mit der du interagierst.",
+ Breathalyze = "Alkoholtest",
+ BreathalyzeExplanation = "Führe einen Alkoholtest durch, um eine Alkoholisierung zu überprüfen.",
+ DrugTest = "Drogentest",
+ DrugTestExplanation = "Führe einen Drogentest durch, um das Vorhandensein von Drogen zu erkennen.",
+ Warn = "Warnung",
+ WarnExplanation = "Gib der Person eine Warnung.",
+ Fine = "Bußgeld / Ticket",
+ FineExplanation = "Verteile ein Bußgeld oder Ticket.",
+ Grab = "Trainer",
+ GrabExplanation = "Führen Sie die Person.",
+ GetOut = "Aussteigen",
+ GetOutExplanation = "Fordere die Person auf, aus dem Fahrzeug auszusteigen.",
+ AskToFollow = "Folge mir",
+ AskToFollowExplanation = "Fordere die Person auf, dir zu folgen.",
+ AskToWait = "Hier warten",
+ AskToWaitExplanation = "Fordere die Person auf, hier zu warten.",
+ HandsUp = "Hände hoch",
+ HandsUpExplanation = "Ordne der Person an, die Hände hochzuhalten.",
+ Search = "Durchsuchen",
+ SearchExplanation = "Durchsuche die Kleidung der Person.",
+ Cuff = "Handfesseln",
+ CuffExplanation = "Fessle die Person an.",
+ PutInVehicle = "Ins Fahrzeug bringen",
+ PutInVehicleExplanation = "Weise der Person an, ins nächstgelegene Fahrzeug einzusteigen.",
+ PersonalDetails = "Persönliche Angaben (Personalausweis)",
+ FullName = "Vollständiger Name:",
+ DOB = "Geburtsdatum:",
+ DocumentNumber = "Dokumentnummer:",
+ Nationality = "Nationalität:",
+
+ DatabaseCheck = "Polizeidatenbankprüfung",
+ RunningDatabaseCheck = "Durchsuche die Datenbank...",
+ DatabaseCheckResults = "Datenbankeinträge gefunden",
+ Address = "Adresse:",
+ DriversLicense = "Führerschein(e):",
+ BikeLicense = "Motorradführerschein:",
+ BoatLicense = "Bootsführerschein:",
+ TruckLicense = "LKW-Führerschein:",
+ PilotLicense = "Pilotenlizenz:",
+ Warrants = "Durchsuchungsbefehle:",
+ FlagsOrMarkers = "Marker:",
+
+ ProfilePicture = "Foto:",
+ FirstName = "Vorname:",
+ LastName = "Nachname:",
+ Gender = "Geschlecht:",
+ Email = "E-Mail:",
+ PhoneNumber = "Telefonnummer:",
+ Country = "Land:",
+ State = "Bundesland:",
+ City = "Stadt:",
+ PostalCode = "Postleitzahl:",
+ AddressType = "Adresstyp:",
+ Licenses = "Führerschein(e):",
+
+ -- Warrants
+ armed_and_dangerous = "Bewaffnet und gefährlich",
+ assault = "Körperverletzung",
+ burglary = "Einbruch",
+ drug_related = "Drogenbezogen",
+ gang_affiliation = "Bandenzugehörigkeit",
+ homicide = "Mord",
+ kidnapping = "Entführung",
+ mental_health_issues = "Psychische Probleme",
+ sex_offense = "Sexualdelikt",
+ terrorism = "Terrorismus",
+ theft = "Diebstahl",
+ traffic_violation = "Verkehrsverstoß",
+ wanted_person = "Gesuchte Person",
+ other = "Sonstiges, siehe Beschreibung...",
+ active_warrant = "Aktiver Haftbefehl",
+
+ StopGrabbingInstruction = "Drücke ~INPUT_CELLPHONE_CANCEL~ um die Person loszulassen.",
+ CannotInteractWithThisNPC = "Sie können mit dieser Person nicht kommunizieren...",
+ GrabWhenNotCuffedResponse = "Behalte deine Hände bei dir! Dann solltest du mich aufhalten...",
+ PersonAlreadyInteracting = "Diese Person interagiert bereits...",
+ PersonAlreadyBeingEscorted = "Diese Person wird bereits begleitet...",
+ ThisPersonIsCuffed = "Diese Person ist gefesselt...",
+ AlreadyPerformingCPR = "Du führst bereits CPR durch...",
+ AlreadyCleaningUpObject = "Du räumst bereits ein Objekt auf...",
+ NoPedFoundToPerformCPROn = "Keine Person gefunden, die für CPR geeignet wäre...",
+ CPRSuccess = "Die Person fühlt sich bereits besser. Gute Arbeit!",
+ CPRFail = "Es sieht so aus, als ob... Uh oh, die Person scheint wieder aufgehört zu haben zu atmen...",
+ UnableToPerformCPR = "CPR kann nicht durchgeführt werden, da bereits jemand anderes dies vor dir versucht hat...",
+ UnableToSendPersonAway = "Du kannst die Person nicht wegschicken, fessle sie zuerst...",
+ WorkOnBleeding = "Anwendung eines Tourniquets / Chest Seals / Wundverbands aufgrund massiver Blutung...",
+ WorkOnBleedingAlreadyDone = "Ein Tourniquet / Chest Seal / Wundverband wurde bereits von jemand anderem aufgrund massiver Blutung angewendet...",
+ NotBleeding = "Person hat keine massive Blutung.",
+ WorkOnAirway = "Mund der Person freiräumen, um eine Atemwegsobstruktion zu beheben...",
+ WorkOnAirwayAlreadyDone = "Die Atemwegsobstruktion dieser Person wurde bereits von jemand anderem behoben...",
+ NoAirwayObstructions = "Keine Atemwegsobstruktionen gefunden.",
+ WorkOnBreathing = "Ihre Atmungsrate ist abnormal, sie müssen so schnell wie möglich ins Krankenhaus...",
+ WorkOnBreathingAlreadyDone = "Jemand anderes hat festgestellt, dass ihre Atmungsrate abnormal ist, sie müssen so schnell wie möglich ins Krankenhaus...",
+ NoBreathingProblems = "Die Person atmet, muss aber so schnell wie möglich ins Krankenhaus gebracht werden.",
+ WorkOnCirculation = "Es gibt ein Problem mit der Abfolge ihres Herzschlags, sie müssen so schnell wie möglich ins Krankenhaus...",
+ WorkOnCirculationAlreadyDone = "Jemand anderes hat festgestellt, dass die Herzschlagfolge abnormal ist, sie müssen so schnell wie möglich ins Krankenhaus...",
+ NoCirculationProblems = "Die Person hat einen regelmäßigen Herzschlag. Sie muss trotzdem so schnell wie möglich ins Krankenhaus.",
+ PersonFeelsCold = "Die Person fühlt sich sehr kalt an...",
+ PersonFeelsWarm = "Die Person fühlt sich sehr warm an...",
+ NoHypothermiaSigns = "Keine Anzeichen von Hypothermie festgestellt.",
+ PersonFeelsColdAlreadyDetected = "Jemand anderes hat festgestellt, dass die Person sich sehr kalt anfühlt...",
+ PersonFeelsWarmAlreadyDetected = "Jemand anderes hat festgestellt, dass die Person sich sehr warm anfühlt...",
+ NoHypothermiaSignsAlreadyDetected = "Jemand anderes hat festgestellt, dass keine Anzeichen von Hypothermie vorliegen...",
+ OrderedPedToTheirKnees = "Du hast eine Person befohlen, sich auf die Knie zu setzen.",
+ OrderedPedToStandUp = "Du hast eine Person befohlen, sich zu erheben.",
+ PedIsDrunk = "Der Alkoholtest zeigt, dass die Person die gesetzliche Alkoholgrenze überschritten hat.",
+ PedIsNotDrunk = "Der Alkoholtest zeigt, dass die Person innerhalb der gesetzlichen Alkoholgrenze liegt.",
+ PedIsUnderInfluenceOfDrugs = "Der Drogentest zeigt, dass die Person unter dem Einfluss von Drogen steht.",
+ PedIsNotUnderInfluenceOfDrugs = "Der Drogentest zeigt, dass die Person nicht unter dem Einfluss von Drogen steht.",
+ YoureNotAPoliceOfficer = "Du siehst nicht wie ein Polizeibeamter aus...",
+ InTheWrongService = "Du bist nicht am richtigen Ort, weißt du...",
+ AskForGear = "Frage nach Ausrüstung...",
+ GetOutWhenNotInAVehicleResponse = "Die Person ist nicht in einem Fahrzeug...",
+
+ -- qb-target / ox-target
+ VehSpeakTo = "Speak to",
+ VehAssist = "Assist injured",
+ VehDriver = "driver",
+ VehFrontPassenger = "front passenger",
+ VehRearPassenger = "rear passenger",
+ VehPassenger = "passenger",
+
+ -- Tote Ped-Interaktion
+ IdentifyDeadPed = "Identifizieren",
+ DragPed = "Ziehen",
+ CheckMassiveBleeding = "Massive Blutung",
+ CheckAirway = "Atemweg",
+ CheckBreathing = "Atmung",
+ CheckCirculation = "Kreislauf",
+ CheckHypothermia = "Hypothermie",
+ PerformCPR = "CPR durchführen",
+ PutOnStretcher = "Auf die Trage legen",
+ TakeOffStretcher = "Von der Trage nehmen",
+ PutInBodyBag = "In den Tote-Körper-Behälter legen",
+
+ IdentifyDeadPedExplanation = "Identifizieren der verletzten Person",
+ DragPedExplanation = "Ziehen der Person",
+ CheckMassiveExplanation = "Auf massive Blutungen überprüfen",
+ CheckAirwayExplanation = "Atemweg auf Blockierungen überprüfen",
+ CheckBreathingExplanation = "Überprüfen, ob die Person noch atmet und in welchem Rhythmus",
+ CheckCirculationExplanation = "Überprüfen, ob die Person einen Puls hat und in welchem Rhythmus",
+ CheckHypothermiaExplanation = "Überprüfen, welche Körpertemperatur die Person hat",
+ PerformCPRExplanation = "CPR an der Person beginnen",
+ PutOnStretcherExplanation = "Die Person auf eine nahegelegene Trage legen",
+ TakeOffStretcherExplanation = "Die Person von der Trage nehmen",
+ PutInBodyBagExplanation = "Die Person in ein Tote-Körper-Behälter legen",
+
+ -- Trage
+ MustBeOnShiftToDoThis = "Du bist nicht im Dienst...",
+ NoNearbyStretcherFound = "Keine nahegelegene Trage gefunden...",
+ StretcherStillInUse = "Diese Trage ist noch in Gebrauch...",
+ StretcherAlreadyInUse = "Diese Trage ist bereits in Gebrauch...",
+ ReleasedStretcher = "Du hast die Trage freigegeben.",
+ StillUsingStretcher = "Du benutzt immer noch die Trage...",
+ NotUsingStretcher = "Du benutzt die Trage nicht...",
+ LowerTheNearbyStretcher = "Stelle sicher, dass du eine nahegelegene Trage abgesenkt hast...",
+ StretcherAlreadyOccupied = "Diese Trage ist bereits besetzt...",
+ ThisPersonIsNotOnAStretcher = "Diese Person scheint nicht auf einer Trage zu liegen...",
+ CannotDoThisWhenPedIsOnStretcher = "Du kannst diese Aktion nicht ausführen, während die Person auf einer Trage liegt...",
+ StretcherAlreadySpawnedForVehicle = "Dieses Fahrzeug hat bereits eine Trage...",
+ AmbulanceAlreadyHasAStretcherInside = "Kann nicht mit dem Krankenwagen interagieren, da du eine Trage schiebst und das Fahrzeug bereits eine Trage hat...",
+ VehicleMustBeEmptyForStretcherInteraction = "Fahrzeug muss leer sein, bevor du Trageninteraktionen damit durchführen kannst...",
+ CantInteractWithStretcherInsideVehicle = "Du kannst nicht mit einer Trage im Fahrzeug interagieren...",
+ PlacedStretcherIntoAVehicle = "Du hast die Trage in das Fahrzeug gelegt.",
+ TakenStretcherFromAVehicle = "Du hast die Trage aus dem Fahrzeug genommen.",
+ PersonTransferredToHospital = "Du hast die Person an die Krankenhausmitarbeiter übergeben.",
+ PersonSaved = "~b~OPFER GERETTET!",
+ DropOffPersonAtHospital3DText = "Drücke ~o~ENTER ~w~, um die Person an das Personal dieses Krankenhauses zu übergeben",
+ ThereIsStretcherOnTheGroundNearby = "Es gibt eine Trage auf dem Boden in der Nähe, bitte nehme sie und lege sie in das Fahrzeug.",
+ SomeoneElseHasNetworkOwnershipOverTheStretcher = "Jemand anderes hat Netzwerkbesitz an diesen Tragen, du musst dich von ihm trennen.",
+ SomeoneElseHasNetworkOwnershipOverTheVehicle = "Jemand anderes hat Netzwerkbesitz an diesem Fahrzeug, du musst dich von ihm trennen.",
+ GetOnOrOffStretcher = "Auf die Trage steigen ~p~/w~ von ihr absteigen",
+
+ -- Inventar
+ Inventory = "Inventargegenstände gefunden...",
+
+ -- Fahrzeug Interaktionen
+ VehicleDetails = "Fahrzeugdetails",
+ VehiclePlate = "Fahrzeugkennzeichen",
+ VehicleModel = "Fahrzeugmodell",
+ VehicleOwner = "Fahrzeugeigentümer",
+ VehicleColor = "Fahrzeugfarbe",
+ VehicleColorSecondary = "Zweitfarbe des Fahrzeugs",
+ VehicleBuildYear = "Baujahr des Fahrzeugs",
+ VehicleTax = "Fahrzeugsteuer",
+ VehicleMOT = "Fahrzeugsicherheitsprüfung",
+ VehicleInsurance = "Fahrzeugversicherung",
+ VehicleStolen = "Als gestohlen gemeldet",
+ VehicleStolenDescription = "Gestohlenes Fahrzeug",
+ VehicleBolo = "Aktives BOLO",
+ VehicleBoloDescription = "BOLO Beschreibung",
+ Paid = "Bezahlt",
+ NotPaid = "Nicht bezahlt",
+ Valid = "Gültig",
+ Invalid = "Ungültig",
+ Passed = "Bestanden",
+ Failed = "Nicht bestanden",
+ SearchThe = "Suche nach ",
+ FoundItem = "Gefunden:",
+ ItemWillBeConfiscatedAutomaticallyIn10Seconds = "Der Gegenstand wird in 10 Sekunden automatisch beschlagnahmt...",
+ NothingFoundInThisPartOfTheVehicle = "Du konntest nichts in diesem Teil des Fahrzeugs finden...",
+ NotCloseEnoughToVehicle = "Du bist nicht dicht genug bei dem Fahrzeug, das du durchsuchen willst...",
+ NotCloseEnoughToVehicleSection = "Du bist nicht dicht genug bei dem Teil des Fahrzeugs, das du durchsuchen willst...",
+ VehicleIsNotEmpty = "Das Fahrzeug ist nicht leer...",
+ VehicleDataTimeout = "Du kannst dieses Fahrzeug momentan nicht durchsuchen, aufgrund eines Timeouts, versuche es später erneut...",
+
+ -- Behaviour State
+ NeutralLabel = "Sieht neutral aus",
+ RelaxedLabel = "Sieht entspannt aus",
+ BusyLabel = "Sieht beschäftigt aus",
+ CheerfulLabel = "Sieht glücklich aus",
+ FriendlyLabel = "Sieht freundlich aus",
+ IrritatedLabel = "Sieht genervt aus",
+ StressedLabel = "Sieht gestresst aus",
+ WorriedLabel = "Sieht besorgt aus",
+ ConfusedLabel = "Sieht verwirrt aus",
+ SuspiciousLabel = "Sieht verrückt aus",
+ DeliriousLabel = "Kommt als unvorhersehbar auf",
+ ParanoidLabel = "Sieht extrem misstrauisch aus",
+
+ -- Questioning
+ ExitConversation = "Ich denke, ich weiß genug... (Aussprache beenden)",
+ YouHaveAskedAllQuestions = "Du hast alle verfügbaren Fragen für diese Interaktion beantwortet.",
+
+ -- Answering questions
+ ConversationHistory = "Gesprächsgeschichte",
+ QDriversLicense = "Auto",
+ QBikeLicense = "Motorrad",
+ QBoatLicense = "Boot",
+ QTruckLicense = "LKW",
+ QPilotLicense = "Pilot",
+ PrefixDrunk = "Hic!",
+ SuffixDrunk = "**Burp**",
+ PrefixDrugged = "Uh...",
+ SuffixDrugged = "**Chews**",
+ Sober = "In Ordnung",
+ Drunk = "unter Alkohol",
+ High = "unter Drogen",
+ Stoned = "unter Drogen",
+ BleedingSomewhere = "Blutung irgendwo",
+ TroubleWithBreathing = "Atemprobleme",
+ SomethingStuckInThroat = "etwas ist in deinem Kehlkopf festgefangen",
+ Warm = "zu warm",
+ Cold = "zu kalt",
+ Healthy = "In Ordnung",
+ Dizzy = "schwindlig",
+ Extrasunny = "sonnig",
+ Overcast = "bewölkt",
+ Rain = "regnerisch",
+ Foggy = "neblig",
+ Smog = "neblig",
+ Clouds = "bewölkt",
+ Snow = "schneereich",
+ Snowlight = "leichter Schnee",
+ Xmas = "schneereich",
+ Halloween = "dunkel",
+ Blizzard = "Sturm",
+ RainHalloween = "Regen",
+ SnowHalloween = "Schnee",
+ Thunder = "Blitz",
+ Clearing = "sonnig",
+ Neutral = "neutral",
+
+ -- Hinweise
+ OrderOnKneesOrStandUpExplanation = "Auf Knie / Stehen befehlen.",
+ AcceptCallout = "Notruf annehmen.",
+ CompleteCallout = "Notruf abschließen.",
+ CuffExplanation = "(Ent)fessle die nächste Person.",
+ PullOver = "Fahrzeug anhalten.",
+ RadialMenuExplanation = "Einsatzanforderungen (Radialmenü)",
+ StopTrackingUnitExplanation = "Einheit stoppen",
+ CannotTrackYourself = "Du kannst dich nicht verfolgen...",
+ TargetNotOnACallout = "Diese Einheit ist nicht an einem aktiven Notruf beteiligt, kann also nicht gefunden werden...",
+
+ InputHelpText = "Du solltest RGB-Farben eingeben oder eine Farbe nennen. [Beispiele: rot | 255 0 0]",
+ WaitCooldown = "Du musst warten: die Abkühlzeit ist noch aktiv...",
+ NoPermission = "Du hast keine Erlaubnis, dies zu tun.",
+ MustSetNumberValue = "Fehler, du musst einen Zahlenwert eingeben.",
+ CannotIdentifySize = "Kann diese Größe nicht identifizieren... Versuch es erneut",
+
+ CannotDoThisOnFoot = "Du kannst dies nicht zu Fuß tun.",
+ CannotDoThisInAVehicle = "Du kannst dies nicht in einem Fahrzeug tun.",
+ CannotDoThisAsPassenger = "Als Beifahrer eines Fahrzeugs ist dies nicht möglich...",
+
+ UseMDTToToggleShift = "Du kannst deinen Dienst über das MDT umschalten. Wenn du die Notrufangebote deaktivieren möchtest:",
+ CalloutsDisabled = "Deine Notrufe sind deaktiviert.",
+
+ Dispatch = "Leitstelle",
+ Responding = "Einheiten haben auf den neuesten Notruf reagiert.",
+ ArriveAtScene = "Einheiten sind am Einsatzort angekommen.",
+ AmbulanceDispatched = "Ein Krankenwagen wurde entsandt...",
+ PoliceTransportDispatched = "Polizeitransport wurde entsandt...",
+ VehicleTransportDispatched = "Fahrzeugtransport wurde entsandt...",
+ TaxiDispatched = "Ein Taxi wurde entsandt.",
+ TrackingUnit = "Du verfolgst jetzt den GPS-Standort der Einheit. Dieser Standort wird für eine begrenzte Zeit aktualisiert.",
+ StoppedTrackingUnit = "Sie haben die Verfolgung einer anderen Einheit beendet.",
+}
\ No newline at end of file
diff --git a/resources/night_ers/config/translations/en.lua b/resources/night_ers/config/translations/en.lua
new file mode 100644
index 000000000..6fa72ccdb
--- /dev/null
+++ b/resources/night_ers/config/translations/en.lua
@@ -0,0 +1,628 @@
+Config = Config or {}
+Config.Messages = Config.Messages or {}
+
+ --====================== Language ======================--
+
+Config.Messages['en'] = {
+ ScriptInitialising = "The script is still initialising, please wait...",
+ Yes = "Yes",
+ No = "No",
+ AreYouSureCompleteCallout = "Are you sure you want to complete the callout?",
+ CompletingCalloutCannotBeUndone = "Completing this callout can not be undone.",
+ Controls = "Controls",
+ Hint = "Hints",
+ HotKeys = "Hotkeys",
+ Explanation = "Explanations",
+ Unknown = "Unknown",
+ ToHideOrShow = "to hide/show",
+ Aim = "Aim",
+ AimToOrderPedTextDrawing = "~p~'~w~E~p~'~w~ » Kneel ~p~/ ~w~Stand up ",
+ AimToOrderAnimalTextDrawing = "~p~'~w~E~p~'~w~ » Stop ~p~/ ~w~Let go ",
+ GrabOrReleaseStretcher = "~p~'~w~E~p~'~w~ » Grab ~p~/ ~w~Release",
+ RaiseOrLowerStretcher = "~p~' ~w~↑~p~ | ~w~↓~p~ '~w~ » Raise ~p~/ ~w~Lower",
+ ToggleHints = "Did you know you can toggle this display?",
+ DisableHints = "Disabled hints.",
+ EnableHints = "Enabled hints.",
+ DisabledCallouts = "Disabled callout offers.",
+ EnabledCallouts = "Enabled callout offers.",
+ OnShift = "You've started your shift",
+ OffShift = "You've ended your shift",
+ NotOnShift = "You are not on a shift.",
+ Postal = "Postal",
+ StreetName = "Streetname",
+ RequiredUnits = "Required units",
+ ProvideBackupIfRequested = "Provide backup if requested.",
+ Nearby = "nearby",
+ OfferedCalloutActiveOrAttachedToACallout = "You can't do this: You already have an active callout offer or you're already attached to a callout.",
+ CouldNotRequestCalloutCooldown = "A callout request or offer was blocked due to a cooldown. Please try again later...",
+ CouldNotRequestACallout = "Could not offer a callout at this moment (server was busy), please try again...",
+ CouldNotRequestCallout = "Could not offer a callout because you are not part of any of the required roles/groups to receive the callout OR because no callouts were enabled (for your service) (callouts_config.lua)...",
+ CalloutMarkedOnYourGPS = "The route to the last callout has been marked on your GPS.",
+ AcceptedCallout = "You've been attached to",
+ CancelCallout = "The callout has been cancelled.",
+ NotAbleToCancelCallout = "You can not cancel the callout at this moment, please try again in a few seconds...",
+ DetachedFromCallout = "Your unit was detached from the last callout.",
+ LastCalloutOfferExpired = "Other units were able to resolve the last emergency call.",
+ NotAttachedToCallout = "You can't cancel a callout you're not attached to.",
+ AnyUnitsAvailableToRespond = "Are any units available to respond?",
+ CancelUnitsBeforeGoingOffShift = "You must cancel your request for units before going off shift...",
+ NoPermissionToGoOnShift = "You have no permissions to go on or off shift...",
+ ServerCouldNotBuildCalloutError = "ERROR: The server could not build the callout, due to a mistake in the code.",
+ PersonHasPassedOut = "~r~ALERT ~w~The person seems to have lost consciousness!",
+ PersonIsTakingOff = "~r~ALERT ~w~The person is taking off!",
+ PersonIsAgressive = "~r~ALERT ~w~The person looks aggressive!",
+ PersonIsSurrendering = "~g~ALERT ~w~The person is surrendering!",
+ PedCannotEnterVehicle = "The person is not able to enter the nearest vehicle.",
+ NoNearbyVehicleFound = "No nearby vehicle found, bring the person closer to the vehicle...",
+ PulloverModeExplanation = "Get close to the vehicle you desire to pull over...",
+ PulloverInitiatedRear = "The vehicle will now stay in behind you. Press U to toggle manual steering.",
+ PulloverInitiatedFront = "The vehicle will now stay in front of you. Press U to toggle manual steering.",
+ PulloverConcluded = "The pullover has concluded...",
+ PulloverFailedToLockInVehicle = "Failed to lock in a vehicle to pull over, please try again...",
+ PulloverManualSteeringEnabled = "Manual pullover control enabled...",
+ PulloverManualSteeringDisabled = "Manual pullover control disabled, the vehicle will now mimic your driving again...",
+ RequestCooldownActive = "Please wait at least 3 seconds before attempting to request or cancel a request...",
+ AlreadyAttachedToCallout = "You are already attached to an other callout...",
+ DeclinedCalloutOffer = "You've declined the request to respond to a callout.",
+ NoSpawnPointAvailableForNPC = "No suitable spawn position found for the requested backup unit in this area.",
+ CantCancelBackup = "You can't cancel this backup anymore.",
+ NotEnoughSpaceBehindAmbulance = "Not enough space behind ambulance to spawn or put away the stretcher",
+ ImpoundVehicleSubtitle = "To impound your vehicle, drive to the impound location that I marked for you.",
+ ImpoundVehicleLeaveSubtitle = "Please exit the vehicle and step away.",
+ ImpoundVehicleNotAllowedSubtitle = "That vehicle is not allowed here...",
+ CannotDoThisWhilePedIsInAVehicle = "You can't do this while the person is in a vehicle...",
+ OffDuty = "Off Duty",
+ OnDuty = "On Duty",
+ SuspectIsTryingToStealAVehicle = "The suspect is trying to get away in a vehicle!",
+ TrafficStop = "Traffic Stop",
+
+ -- Dispatch
+ DispatchMessage = "Dispatch Message",
+ NextDispatchMessage = "Next message in",
+ Seconds = "seconds",
+ Loading = "Loading",
+ None = "None",
+ TrackUnitProposal = "Track this unit",
+ EmergencyCall = "Emergency Call",
+ Caller = "Caller:",
+ CallDescription = "Description:",
+ Location = "Location:",
+ Postal = "Postal:",
+ CalloutUnitsRequired = "Units required:",
+ UnitResponse = "is responding to an emergency.",
+ UnitDetached = "has detached from their emergency call.",
+ UnitArrived = "has arrived at the incident.",
+ UnitOnShift = "has started their shift.",
+ UnitOffShift = "has ended their shift.",
+ DispatchNote = "Dispatch note:",
+ DispatchNoteText = "GPS will be marked on your map.",
+ DispatchNoteResponseText = "Provide backup if required...",
+ CompleteCalloutFooterText = "Press button to complete the callout:",
+ TimeRemainingToAcceptCallout = "Time remaining to accept the callout:",
+ HasRequestedPolice = "has requested police transportation for a suspect.",
+ HasRequestedAmbulance = "has requested an ambulance unit.",
+ HasRequestedTaxi = "has requested a taxi.",
+ HasRequestedTow = "has requested a vehicle transportation unit.",
+ HasRequestedRoadService = "has requested a road service unit.",
+ HasRequestedCoroner = "has requested a coroner to attend to their location.",
+ HasRequestedAnimalRescue = "has requested an animal rescue unit.",
+ HasRequestedMechanic = "has requested a mechanic.",
+ HasRequestedFire = "has requested the fire department.",
+ DispatchMessagesEnabled = "Dispatch messages have been enabled.",
+ DispatchMessagesDisabled = "Dispatch messages have been disabled.",
+
+ -- Tasks
+ InvolvedPedsRemaining = "Involved subjects remaining:",
+ InvolvedVehsRemaining = "Vehicle transport tasks remaining:",
+ InvolvedObjsRemaining = "Road Service tasks remaining:",
+ InvolvedPropsRemaining = "Coroner tasks remaining:",
+ ExtinguishAllFires = "Extinguish all fires.",
+ ClearAreaOfSmoke = "Clear the area of smoke.",
+
+ -- ERS Selection menu
+ Select = "Select",
+ Cancel = "Cancel",
+ SelectService = "Select Service",
+ Police = "Police Service",
+ Ambulance = "Ambulance Service",
+ Fire = "Fire Service",
+ Tow = "Tow Service",
+ PoliceDescription = "Guardians of justice, protecting with courage.",
+ AmbulanceDescription = "Heroes of healing, saving lives swiftly.",
+ FireDescription = "Fearless firefighters, battling bravely.",
+ TowDescription = "Roadside rescuers, providing swift aid.",
+
+ -- Gear Selection menu
+ SelectGear = "Select Gear",
+
+ -- Radial menu
+ RadialMenuInstructionTitle = "Select an available backup unit...",
+ ExitRadialMenuInstruction = "Click to exit the radial menu...",
+ RequestPoliceTransportIcon = "fa-solid fa-handcuffs", -- https://fontawesome.com/search?m=free&o=r
+ RequestPoliceTransportInstruction = "Click to request or cancel a police transport unit for the nearest suspect to be transported...",
+ RequestAmbulanceIcon = "fa-solid fa-truck-medical",
+ RequestAmbulanceInstruction = "Click to request or cancel an ambulance unit to attend to wounded people in the area...",
+ RequestTowIcon = "fa-solid fa-car-burst",
+ RequestTowInstruction = "Click to request or cancel a vehicle transport unit for the nearest vehicle to be picked up...",
+ RequestTaxiIcon = "fa-solid fa-taxi",
+ RequestTaxiInstruction = "Click to request or cancel a taxi for the nearest person...",
+ RequestRoadServiceIcon = "fa-solid fa-broom",
+ RequestRoadServiceInstruction = "Click to request or cancel a road service unit to clean up the nearby roads...",
+ RequestCoronerIcon = "fa-solid fa-book-skull",
+ RequestCoronerInstruction = "Click to request or cancel a coroner unit response to pick up the bodybags in the area...",
+ RequestAnimalRescueIcon = "fa-solid fa-paw",
+ RequestAnimalRescueInstruction = "Click to request or cancel an animal rescue unit to take care of nearby animals...",
+ RequestMechanicIcon = "fa-solid fa-screwdriver-wrench",
+ RequestMechanicInstruction = "Click to request or cancel a mechanic unit to fix the nearest vehicle...",
+ RequestFireIcon = "fa-solid fa-fire",
+ RequestFireInstruction = "Click to request or cancel a fire department unit to extinguish the nearby fire...",
+ RequestedUnitStrugglingToReach = "The requested unit is struggling to reach your location... They might be cancelled.",
+
+ -- Pursuit Radial Menu
+ PursuitRadialMenuInstructionTitle = "Select a unit to request pursuit backup...",
+ PursuitRadialMenuInstruction = "Click to request or cancel pursuit backup for the suspect you are pursuing...",
+ RequestLightBackupIcon = "fa-solid fa-motorcycle",
+ RequestLightBackupInstruction = "Click to request or cancel light pursuit backup for the suspect you are pursuing...",
+ RequestMediumBackupIcon = "fa-solid fa-car-on",
+ RequestMediumBackupInstruction = "Click to request or cancel medium pursuit backup for the suspect you are pursuing...",
+ RequestHeavyBackupIcon = "fa-solid fa-truck-moving",
+ RequestHeavyBackupInstruction = "Click to request or cancel heavy pursuit backup for the suspect you are pursuing...",
+ RequestAirBackupIcon = "fa-solid fa-helicopter",
+ RequestAirBackupInstruction = "Click to request or cancel air pursuit backup for the suspect you are pursuing...",
+ RequestArmyBackupIcon = "fa-solid fa-person-military-rifle",
+ RequestArmyBackupInstruction = "Click to request or cancel army pursuit backup for the suspect you are pursuing...",
+
+ -- Pursuit notifications
+ ActivePursuit = "ACTIVE PURSUIT",
+ NotInPursuitMode = "You are not in a pursuit...",
+ CancellingPreviousRequestForBackup = "Cancelling previous request for backup units...",
+ BackupAlreadyRequested = "Backup units have already been requested. To cancel the request, select the same unit...",
+ PursuitBackupTooFarAway = "(One of) the pursuit backup units are too far away, cancelling the request...",
+ PursuitCancelledReasonPersonDied = "The pursuit has come to an end. The person you were chasing has passed away.",
+ PursuitCancelledReasonLostTarget = "The pursuit has come to an end, since you've lost the target.",
+ PursuitCancelledReasonPersonVanished = "The pursuit has been cancelled... The person you were chasing has vanished.",
+ PursuitCancelledReasonVehicleVanished = "The pursuit has been cancelled... The vehicle you were chasing has vanished.",
+ PursuitCancelledReasonPersonCaught = "The pursuit has come to an end... You've caught the person you were chasing.",
+ PursuitHotkeyFocus = "focus",
+ PursuitHotkeyBackup = "backup",
+ PursuitCancelledReasonNoLongerCapableOfPursuing = "The pursuit has been cancelled... You're no longer able to pursue the target.",
+
+ -- Ambulance
+ AmbulanceAlreadyEnroute = "You've already requested an ambulance...",
+ RequestingAmbulance = "Requesting an ambulance...",
+ AmbulanceDone = "The ambulance is leaving the scene.",
+ NoAmbulanceEnroute = "There is no ambulance enroute.",
+ AmbulanceCancelled = "Ambulance request cancelled.",
+ NoPeopleFoundAmbulance = "There were no people found to provide treatment/transport for...",
+ AllAmbulancesOccupied = "All ambulance units occupied. Try again in a few seconds, please...",
+ AmbulanceArrived = "The ambulance has arrived",
+ AmbulanceEnroute = "An ambulance has been dispatched and is now enroute...",
+ NextMedicTask = "The medic has been assigned to take care of an assigned person.",
+
+ -- Police
+ PoliceAlreadyEnroute = "You've already requested police transportation...",
+ RequestingPolice = "Requesting police transport.",
+ PoliceDone = "The police transport is leaving the scene.",
+ NoPoliceEnroute = "There is no police transport enroute...",
+ PoliceCancelled = "Police transport request cancelled...",
+ NoPeopleFoundPolice = "There were no people found to provide transport for...",
+ AllPoliceOccupied = "All police units occupied. Try again in a few seconds, please...",
+ PoliceArrived = "Police transport has arrived.",
+ PoliceEnroute = "Police transport has been dispatched and is now enroute...",
+ NextPoliceTask = "The police officer has been assigned to pick up an assigned person.",
+
+ -- Taxi
+ TaxiAlreadyEnroute = "You've already requested a taxi.",
+ RequestingTaxi = "Requesting taxi for the nearest person.",
+ TaxiDone = "The person has been picked up by the taxi driver and they're now leaving.",
+ NoTaxiEnroute = "There is no taxi enroute...",
+ TaxiCancelled = "Taxi request has been cancelled.",
+ NoPeopleFound = "There were no people found to provide transport for...",
+ AllTaxisOccupied = "All taxis occupied. Try again in a few seconds...",
+ TaxiArrived = "The taxi has arrived.",
+ TaxiEnroute = "A taxi has been dispatched and is now enroute...",
+ NextTaxiTask = "The taxi driver has been assigned to pick up an assigned person.",
+
+ -- Tow
+ TowAlreadyEnroute = "You've already requested vehicle transport.",
+ RequestingTow = "Requesting vehicle transport for the nearest vehicle.",
+ TowDone = "The vehicle has been picked up by the tow truck and they're now leaving.",
+ NoTowEnroute = "There is no vehicle transport enroute...",
+ RequestingTowButVehicleOccupied = "To request vehicle transport the vehicle must be unoccupied...",
+ TowCancelled = "Vehicle transport request cancelled.",
+ NoVehiclesFound = "There were no vehicles found to provide transport for...",
+ AllTowOccupied = "All vehicle transport units occupied. Try again in a few seconds, please...",
+ TowArrived = "Vehicle transport has arrived.",
+ TowEnroute = "A vehicle transport unit has been dispatched and is now enroute...",
+ NextTowTask = "The tow truck driver has been assigned to pick up a vehicle.",
+
+ -- Road Service
+ RoadServiceAlreadyEnroute = "You've already requested road service.",
+ RequestingRoadService = "Requesting road service for the nearest task.",
+ RoadServiceDone = "The rubble has been cleaned, the road service unit is departing from the scene.",
+ NoRoadServiceEnroute = "There is no road service enroute...",
+ RoadServiceCancelled = "Road service request cancelled.",
+ NoRoadServiceTaskFound = "There was no task found to provide road service for...",
+ AllRoadServiceOccupied = "All road service units occupied. Try again in a few seconds, please...",
+ RoadServiceArrived = "Road Service has arrived.",
+ RoadServiceEnroute = "A road service unit has been dispatched and is now enroute...",
+ NextRoadServiceTask = "The road service employee has been tasked to clean up the rubble in the area, to clear the road.",
+
+ -- Coroner
+ CoronerAlreadyEnroute = "You've already requested a coroner.",
+ RequestingCoroner = "Requesting a coroner for the nearest task.",
+ CoronerDone = "The bodies have been cleared from the scene and will be taken to a morgue.",
+ NoCoronerEnroute = "There is no coroner enroute...",
+ CoronerCancelled = "Coroner request cancelled.",
+ NoCoronerTaskFound = "There was no task found to provide a coroner for...",
+ AllCoronerOccupied = "All coroner units occupied. Try again in a few seconds, please...",
+ CoronerArrived = "The coroner has arrived.",
+ CoronerEnroute = "A coroner has been dispatched and is now enroute...",
+ NextCoronerTask = "The coroner has been tasked to pick up the bodybags in the area.",
+
+ -- Animal Rescue
+ AnimalRescueAlreadyEnroute = "You've already requested animal rescue.",
+ RequestingAnimalRescue = "Requesting animal rescue for the nearby animals.",
+ AnimalRescueDone = "The animals have been picked up from the scene.",
+ NoAnimalRescueEnroute = "There is no animal rescue unit enroute...",
+ AnimalRescueCancelled = "Animal rescue request cancelled.",
+ NoAnimalRescueTaskFound = "There was no task found to provide animal rescue for...",
+ AllAnimalRescueOccupied = "All animal rescue units occupied. Try again in a few seconds, please...",
+ AnimalRescueArrived = "The animal rescue unit has arrived.",
+ AnimalRescueEnroute = "Animal rescue has been dispatched and is now enroute...",
+ NextAnimalRescueTask = "Animal rescue has been assigned to take care of an assigned animal.",
+
+ -- Mechanic
+ MechanicAlreadyEnroute = "You've already requested a mechanic.",
+ RequestingMechanic = "Requesting a mechanic for the nearest vehicle.",
+ MechanicDone = "The vehicle has been fixed by the mechanic and they're now leaving.",
+ NoMechanicEnroute = "There is no mechanic enroute...",
+ MechanicCancelled = "Mechanic request cancelled.",
+ NoMechanicTaskFound = "There was no task found to provide a mechanic for...",
+ AllMechanicOccupied = "All mechanic units occupied. Try again in a few seconds, please...",
+ MechanicArrived = "Mechanic has arrived.",
+ MechanicEnroute = "A mechanic has been dispatched and is now enroute...",
+
+ -- Fire
+ FireAlreadyEnroute = "You have already requested fire services.",
+ RequestingFire = "Requesting fire services for the nearest fire.",
+ FireDone = "The fire has been extinguished by the firefighters and they are now leaving.",
+ NoFireEnroute = "There are no firefighters enroute...",
+ FireCancelled = "Firefighter request cancelled.",
+ NoFireTaskFound = "No task found for the firefighters...",
+ AllFireOccupied = "All firefighter units are occupied. Please try again in a few seconds...",
+ FireArrived = "The firefighters have arrived.",
+ FireEnroute = "A firefighter unit has been dispatched and is enroute...",
+ NextFireTask = "The firefighters have been assigned to extinguish the nearby fire.",
+ NoFireInArea = "There is no fire in the area...",
+
+ -- Spikestrip
+ SpikestripAlreadyDeployed = "You already have a spikestrip deployed...",
+ PutAwaySpikestrip = "Putting away spikestrip",
+ TakeOutSpikestrip = "Taking out spikestrip",
+ SpikestripDeployed = "Spikestrip deployed",
+ SpikestripPickedUp = "Spikestrip picked up",
+ SpikestripRemoved = "Spikestrip removed",
+ ToGrabOrPutAwaySpikestripFromVehicle = "to grab or put away a spikestrip from/into a vehicle",
+ ToDeployOrPickupSpikestrip = "to deploy or pick up a spikestrip",
+ FailedToGrabSpikestrip = "Failed to grab spikestrip...",
+
+ -- Ped Interaction
+ YouSay = "You say",
+ Press = "Press",
+ ToInteract = "to interact with the person nearby",
+ ToInteractImpound = "to interact with the person in charge of the impound lot",
+ ToInteractGear = "to interact with the person in charge of the gear",
+ ToPerformCPR = "to interact with the injured person nearby",
+ ToUseStretcherVeh = "to take or place the stretcher from/into the vehicle",
+ ToCleanupObject = "to clean up any rubble nearby",
+ StopInteraction = "End conversation and order to leave",
+ ExitInteraction = "Exit interaction",
+ SendToCustody = "Send to custody",
+ PersonTakenIntoCustody = "The person has been taken into custody.",
+ NoCustodyCenterNearby = "No custody center nearby.",
+ SuspectArrested = "~b~SUSPECT ARRESTED",
+ InteractionOptions = "Interaction options...",
+ Greet = "Greet",
+ GreetExplanation = "Greet the person you are interacting with.",
+ AskForId = "Ask ID",
+ AskForIdExplanation = "Ask for the persons identification card.",
+ Question = "Question",
+ QuestionExplanation = "Question the person you are interacting with.",
+ Breathalyze = "Breathalyze",
+ BreathalyzeExplanation = "Conduct a breathalyzer test to check for alcohol intoxication.",
+ DrugTest = "Drug Test",
+ DrugTestExplanation = "Conduct a drug swab test, to detect the presence of drugs.",
+ Warn = "Warning",
+ WarnExplanation = "Give the person a warning.",
+ Fine = "Fine / Ticket",
+ FineExplanation = "Give the person a fine or ticket.",
+ Grab = "Grab",
+ GrabExplanation = "Grab the person.",
+ GetOut = "Get out",
+ GetOutExplanation = "Order the person to exit the vehicle.",
+ AskToFollow = "Follow me",
+ AskToFollowExplanation = "Tell the person to follow you.",
+ AskToWait = "Wait here",
+ AskToWaitExplanation = "Tell the person to wait here.",
+ HandsUp = "Hands up",
+ HandsUpExplanation = "Order the person to put their hands up.",
+ Search = "Search",
+ SearchExplanation = "Search the person's clothing.",
+ Cuff = "Cuff",
+ CuffExplanation = "Detain the person by cuffing their hands.",
+ PutInVehicle = "Put in vehicle",
+ PutInVehicleExplanation = "Task the person to enter the nearest vehicle.",
+ PersonalDetails = "Personal details (ID Card)",
+ FullName = "Full Name:",
+ DOB = "Date of Birth:",
+ DocumentNumber = "Document Number:",
+ Nationality = "Nationality:",
+
+ DatabaseCheck = "Police Database Check",
+ RunningDatabaseCheck = "Scanning through the database...",
+ DatabaseCheckResults = "Database Entries Found",
+ Address = "Address:",
+ DriversLicense = "Drivers License:",
+ BikeLicense = "Bike License:",
+ BoatLicense = "Boat License:",
+ TruckLicense = "Truck License:",
+ PilotLicense = "Pilot License:",
+ Warrants = "Warrant(s):",
+ FlagsOrMarkers = "Flags / Markers:",
+
+ ProfilePicture = "Photo:",
+ FirstName = "First Name:",
+ LastName = "Last Name:",
+ Gender = "Gender:",
+ Email = "E-mail:",
+ PhoneNumber = "Phone Number:",
+ Country = "Country:",
+ State = "State:",
+ City = "City:",
+ PostalCode = "Postal Code:",
+ AddressType = "Address Type:",
+ Licenses = "Licences:",
+
+ -- Warrants
+ armed_and_dangerous = "Armed and Dangerous",
+ assault = "Assault",
+ burglary = "Burglary",
+ drug_related = "Drug Related",
+ gang_affiliation = "Gang Affiliation",
+ homicide = "Homicide",
+ kidnapping = "Kidnapping",
+ mental_health_issues = "Mental Health Issues",
+ sex_offense = "Sex Offense",
+ terrorism = "Terrorism",
+ theft = "Theft",
+ traffic_violation = "Traffic Violation",
+ wanted_person = "Wanted Person",
+ other = "Other, read description...",
+ active_warrant = "Active Warrant",
+
+ StopGrabbingInstruction = "Press ~INPUT_CELLPHONE_CANCEL~ to release the person.",
+ CannotInteractWithThisNPC = "You can not interact with this person...",
+ GrabWhenNotCuffedResponse = "Keep your hands off me! You'll have to arrest me first...",
+ PersonAlreadyInteracting = "This person is currently engaged...",
+ PersonAlreadyBeingEscorted = "This person is already being escorted...",
+ ThisPersonIsCuffed = "This person is cuffed...",
+ AlreadyPerformingCPR = "You are already performing CPR...",
+ AlreadyCleaningUpObject = "You are already cleaning up an object...",
+ NoPedFoundToPerformCPROn = "No person found eligible for CPR...",
+ CPRSuccess = "The person is feeling better already. Good work!",
+ CPRFail = "It looks like... Uh oh, the person seems to have stopped breathing again...",
+ UnableToPerformCPR = "Unable to perform CPR as someone else has already attempted this before you...",
+ UnableToSendPersonAway = "You can not send the person away, uncuff them first...",
+ WorkOnBleeding = "Applying a tourniquette / chest seal / wound gauze because of a massive bleeding...",
+ WorkOnBleedingAlreadyDone = "A tourniquette / chest seal / wound gauze has already been applied by someone else, due to a massive bleeding...",
+ NotBleeding = "Person does not have a massive bleeding.",
+ WorkOnAirway = "Clearing the person's mouth in an attempt to resolve an airway obstruction...",
+ WorkOnAirwayAlreadyDone = "The airway obstruction this person had, was already resolved by someone else...",
+ NoAirwayObstructions = "No airway obstructions found.",
+ WorkOnBreathing = "Their breathing rate is abnormal, they must visit the hospital ASAP...",
+ WorkOnBreathingAlreadyDone = "Someone else has determined their breathing rate is abnormal, they must visit the hospital ASAP...",
+ NoBreathingProblems = "The person is breathing, but needs to be brought to a hospital ASAP.",
+ WorkOnCirculation = "There is something wrong with the sequence of their heartbeat, they must visit the hospital ASAP...",
+ WorkOnCirculationAlreadyDone = "Someone else has determined their heartbeat sequence is abnormal, they must visit the hospital ASAP...",
+ NoCirculationProblems = "The person has a regular heartbeat. Regardless they must visit a hospital ASAP.",
+ PersonFeelsCold = "The person feels very cold...",
+ PersonFeelsWarm = "The person feels very warm...",
+ NoHypothermiaSigns = "No signs of hypothermia detected.",
+ PersonFeelsColdAlreadyDetected = "Someone else has determined that the person feels very cold...",
+ PersonFeelsWarmAlreadyDetected = "Someone else has determined that the person feels very warm...",
+ NoHypothermiaSignsAlreadyDetected = "Someone else has determined there are no signs of hypothermia...",
+ OrderedPedToTheirKnees = "You have ordered a person to get on their knees.",
+ OrderedPedToStandUp = "You have ordered a person to stand up.",
+ PedIsDrunk = "The breathalyzer indicates the person has exceeded the legal alcohol limit for driving.",
+ PedIsNotDrunk = "The breathalyzer indicates the person is within the legal alcohol limit for driving.",
+ PedIsUnderInfluenceOfDrugs = "The drug test indicates the person is under the influence of drugs.",
+ PedIsNotUnderInfluenceOfDrugs = "The drug test indicates the person is not under the influence of drugs.",
+ YoureNotAPoliceOfficer = "You do not look like a police officer...",
+ InTheWrongService = "You're not at the right place, you know...",
+ AskForGear = "Ask for gear...",
+ GetOutWhenNotInAVehicleResponse = "This person is not in a vehicle.",
+
+ -- qb-target / ox-target
+ VehSpeakTo = "Speak to",
+ VehAssist = "Assist injured",
+ VehDriver = "driver",
+ VehFrontPassenger = "front passenger",
+ VehRearPassenger = "rear passenger",
+ VehPassenger = "passenger",
+
+ -- Dead ped Interaction
+ IdentifyDeadPed = "Identify",
+ DragPed = "Drag",
+ CheckMassiveBleeding = "Bleeding",
+ CheckAirway = "Airway",
+ CheckBreathing = "Breathing",
+ CheckCirculation = "Circulation",
+ CheckHypothermia = "Hypothermia",
+ PerformCPR = "Perform CPR",
+ PutOnStretcher = "Place on stretcher",
+ TakeOffStretcher = "Take off stretcher",
+ PutInBodyBag = "Put in body bag",
+
+ IdentifyDeadPedExplanation = "Identify the injured person",
+ DragPedExplanation = "Drag the person",
+ CheckMassiveExplanation = "Check for massive bleedings",
+ CheckAirwayExplanation = "Check the airway for obstructions",
+ CheckBreathingExplanation = "Check if the person is still breathing and at what sequence",
+ CheckCirculationExplanation = "Check if the person has a pulse and at what sequence",
+ CheckHypothermiaExplanation = "Check what bodytemperature the person has",
+ PerformCPRExplanation = "Start to peform CPR on the person",
+ PutOnStretcherExplanation = "Place the person on a nearby stretcher",
+ TakeOffStretcherExplanation = "Take the person off the stretcher",
+ PutInBodyBagExplanation = "Put the person in a body bag",
+
+ -- Stretcher
+ MustBeOnShiftToDoThis = "You are not on shift...",
+ NoNearbyStretcherFound = "No nearby stretcher found...",
+ StretcherStillInUse = "This stretcher is still in use...",
+ StretcherAlreadyInUse = "This stretcher is already in use...",
+ ReleasedStretcher = "You have released the stretcher.",
+ StillUsingStretcher = "You are still using the stretcher...",
+ NotUsingStretcher = "You are not using the stretcher...",
+ LowerTheNearbyStretcher = "Make sure you have lowered a nearby stretcher...",
+ StretcherAlreadyOccupied = "This stretcher is already occupied...",
+ ThisPersonIsNotOnAStretcher = "This person does not seem to be on a stretcher...",
+ CannotDoThisWhenPedIsOnStretcher = "You cannot perform this action whilst the person is on a stretcher...",
+ StretcherAlreadySpawnedForVehicle = "This vehicle has a stretcher spawned already...",
+ AmbulanceAlreadyHasAStretcherInside = "Can not interact with ambulance because you are pushing a stretcher and the vehicle has a stretcher inside...",
+ VehicleMustBeEmptyForStretcherInteraction = "Vehicle must be empty before performing stretcher interactions with it...",
+ CantInteractWithStretcherInsideVehicle = "You can't interact with a stretcher inside a vehicle...",
+ PlacedStretcherIntoAVehicle = "You've placed the stretcher inside the vehicle.",
+ TakenStretcherFromAVehicle = "You've taken the stretcher out of the vehicle.",
+ PersonTransferredToHospital = "You've transferred the person to the hospital employees.",
+ PersonSaved = "~b~VICTIM BROUGHT TO HOSPITAL!",
+ DropOffPersonAtHospital3DText = "Press ~o~ENTER ~w~to transfer the person to personel of this hospital",
+ ThereIsStretcherOnTheGroundNearby = "There is a stretcher on the ground nearby, please grab it to put it into the vehicle.",
+ SomeoneElseHasNetworkOwnershipOverTheStretcher = "Someone else has network ownership over the stretcher. They must move away for you to interact.",
+ SomeoneElseHasNetworkOwnershipOverTheVehicle = "Someone else has network ownership over the vehicle. They must move away for you to interact.",
+ GetOnOrOffStretcher = "Get on~p~/~w~off stretcher",
+
+ -- Inventory
+ Inventory = "Inventory items found...",
+
+ -- Vehicle Interactions
+ VehicleDetails = "Vehicle Details",
+ VehiclePlate = "Vehicle plate",
+ VehicleModel = "Vehicle model",
+ VehicleOwner = "Vehicle owner",
+ VehicleColor = "Vehicle color",
+ VehicleColorSecondary = "Vehicle secondary color",
+ VehicleBuildYear = "Vehicle build year",
+ VehicleTax = "Vehicle tax",
+ VehicleMOT = "Vehicle Safety Inspection",
+ VehicleInsurance = "Vehicle insurance",
+ VehicleStolen = "Reported stolen",
+ VehicleStolenDescription = "Stolen vehicle",
+ VehicleBolo = "Active BOLO",
+ VehicleBoloDescription = "BOLO Description",
+ Paid = "Paid",
+ NotPaid = "Not paid",
+ Valid = "Valid",
+ Invalid = "Invalid",
+ Passed = "Passed",
+ Failed = "Failed",
+ SearchThe = "Search the ",
+ FoundItem = "You found a",
+ ItemWillBeConfiscatedAutomaticallyIn10Seconds = "The item will be confiscated automatically in 10 seconds...",
+ NothingFoundInThisPartOfTheVehicle = "You couldn't find anything in this part of the vehicle...",
+ NotCloseEnoughToVehicle = "You are not close enough to the vehicle you want to search...",
+ NotCloseEnoughToVehicleSection = "You are not close enough to the section of the vehicle you want to search...",
+ VehicleIsNotEmpty = "The vehicle is not empty...",
+ VehicleDataTimeout = "You could not interact with this vehicle right now due to a timeout, try again later...",
+
+ -- Behaviour State
+ NeutralLabel = "Has a neutral expression on their face",
+ RelaxedLabel = "Comes across as relaxed",
+ BusyLabel = "Seems to be in a hurry",
+ CheerfulLabel = "Looks happy",
+ FriendlyLabel = "Seems to be friendly",
+ IrritatedLabel = "Seems to be annoyed",
+ StressedLabel = "Looks stressed",
+ WorriedLabel = "Looks worried",
+ ConfusedLabel = "Looks confused",
+ SuspiciousLabel = "Looks suspicious",
+ DeliriousLabel = "Comes across as unpredictable",
+ ParanoidLabel = "Appears as extremely distrustful",
+
+ -- Questioning
+ ExitConversation = "I think I know enough... (Exit conversation)",
+ YouHaveAskedAllQuestions = "You have asked all the questions available for this interaction.",
+
+ -- Answering questions
+ ConversationHistory = "Conversation history",
+ QDriversLicense = "car",
+ QBikeLicense = "bike",
+ QBoatLicense = "boat",
+ QTruckLicense = "truck",
+ QPilotLicense = "plane",
+ PrefixDrunk = "Hic!",
+ SuffixDrunk = "**Burp**",
+ PrefixDrugged = "Uh...",
+ SuffixDrugged = "**Chews**",
+ Sober = "sober",
+ Drunk = "drunk",
+ High = "high",
+ Stoned = "stoned",
+ BleedingSomewhere = "bleeding somewhere",
+ TroubleWithBreathing = "troubled with breathing",
+ SomethingStuckInThroat = "troubled with throat",
+ Warm = "overheated",
+ Cold = "cold",
+ Healthy = "healthy",
+ Dizzy = "dizzy",
+ Extrasunny = "sun",
+ Overcast = "overcast",
+ Rain = "rain",
+ Foggy = "fog",
+ Smog = "smog",
+ Clouds = "clouds",
+ Snow = "snow",
+ Snowlight = "light snow",
+ Xmas = "heavy snow",
+ Halloween = "darkness",
+ Blizzard = "blizzard",
+ RainHalloween = "rainy darkness",
+ SnowHalloween = "snowy darkness",
+ Thunder = "thunder",
+ Clearing = "light rain",
+ Neutral = "weather",
+
+ -- Hints
+ OrderOnKneesOrStandUpExplanation = "Order to knees / stand up.",
+ AcceptCallout = "Accept emergency call.",
+ CompleteCallout = "Complete emergency call.",
+ CuffExplanation = "(Un)cuff nearest person.",
+ PullOver = "Pull over vehicle.",
+ RadialMenuExplanation = "Dispatch requests (Radial menu)",
+ StopTrackingUnitExplanation = "Stop tracking unit",
+ CannotTrackYourself = "You can not track yourself.",
+ TargetNotOnACallout = "This unit is not on an active callout, thus can not be located...",
+
+ InputHelpText = "You should input RGB colours or mention a colour. [Examples: red | 255 0 0]",
+ WaitCooldown = "You have to wait: the cooldown is still active...",
+ NoPermission = "You don't have the permission to do this.",
+ MustSetNumberValue = "Error, you must insert a number value representing the player server ID.",
+ CannotIdentifySize = "Can not identify this size... Try again",
+
+ CannotDoThisOnFoot = "You can not do this on foot.",
+ CannotDoThisInAVehicle = "You can not do this in a vehicle.",
+ CannotDoThisAsPassenger = "You can not do this as a passenger of a vehicle...",
+
+ UseMDTToToggleShift = "You can toggle your shift via the MDT. If you desire to disable callout offers:",
+ CalloutsDisabled = "Your callouts are disabled.",
+
+ Dispatch = "Control",
+ Responding = "Received unit responding to the latest emergency call.",
+ ArriveAtScene = "Received unit arrived at scene.",
+ AmbulanceDispatched = "An Ambulance has been dispatched...",
+ PoliceTransportDispatched = "Police Transport has been dispatched...",
+ VehicleTransportDispatched = "Vehicle transport has been dispatched...",
+ TaxiDispatched = "A taxi has been dispatched.",
+ TrackingUnit = "You're now tracking the unit's GPS location. This location is updated for as long as you're tracking.",
+ StoppedTrackingUnit = "You've stopped tracking an other unit.",
+}
\ No newline at end of file
diff --git a/resources/night_ers/config/translations/fr.lua b/resources/night_ers/config/translations/fr.lua
new file mode 100644
index 000000000..4e055867d
--- /dev/null
+++ b/resources/night_ers/config/translations/fr.lua
@@ -0,0 +1,628 @@
+Config = Config or {}
+Config.Messages = Config.Messages or {}
+
+ --====================== Language ======================--
+
+Config.Messages['fr'] = {
+ ScriptInitialising = "Le script est en cours d'initialisation, veuillez patienter...",
+ Yes = "Oui",
+ No = "Non",
+ AreYouSureCompleteCallout = "Êtes-vous sûr de vouloir compléter l'appel ?",
+ CompletingCalloutCannotBeUndone = "La finalisation de l'appel ne peut pas être annulée.",
+ Controls = "Contrôles",
+ Hint = "Conseil",
+ HotKeys = "Touches de raccourci",
+ Explanation = "Explication",
+ Unknown = "Inconnu",
+ ToHideOrShow = "cacher/afficher",
+ Aim = "Viser",
+ AimToOrderPedTextDrawing = "~p~'~w~E~p~'~w~ » S'agenouiller ~p~/ ~w~Se lever",
+ AimToOrderAnimalTextDrawing = "~p~'~w~E~p~'~w~ » Arrêter ~p~/ ~w~Lâcher",
+ GrabOrReleaseStretcher = "~p~'~w~E~p~'~w~ » Attraper ~p~/ ~w~Relâcher",
+ RaiseOrLowerStretcher = "~p~' ~w~↑~p~ | ~w~↓~p~ '~w~ » Élever ~p~/ ~w~Abaisser",
+ ToggleHints = "Saviez-vous que vous pouvez activer ou désactiver cette vue ?",
+ DisableHints = "Conseils désactivés.",
+ EnableHints = "Conseils activés.",
+ DisabledCallouts = "Les appels sont désactivés.",
+ EnabledCallouts = "Les appels sont activés.",
+ OnShift = "Vous avez commencé votre service",
+ OffShift = "Vous avez terminé votre service",
+ NotOnShift = "Vous n'êtes pas en service.",
+ Postal = "Code postal",
+ StreetName = "Nom de la rue",
+ RequiredUnits = "Unités requises",
+ ProvideBackupIfRequested = "Fournir une aide si demandé.",
+ Nearby = "à proximité",
+ OfferedCalloutActiveOrAttachedToACallout = "Vous ne pouvez pas faire cela : vous avez déjà un appel actif ou êtes déjà attaché à un appel.",
+ CouldNotRequestCalloutCooldown = "La demande ou l'offre d'appel a été bloquée par un temps de récupération. Veuillez réessayer plus tard...",
+ CouldNotRequestACallout = "Aucun appel n'a pu être proposé actuellement (le serveur était occupé), veuillez réessayer...",
+ CouldNotRequestCallout = "Impossible de proposer un appel car vous n'appartenez pas à l'un des rôles/groupes requis pour recevoir l'appel OU car aucun appel n'était activé (pour votre service) (callouts_config.lua)...",
+ CalloutMarkedOnYourGPS = "L'itinéraire vers le dernier appel a été marqué sur votre GPS.",
+ AcceptedCallout = "Vous êtes assigné à",
+ CancelCallout = "L'appel a été annulé.",
+ NotAbleToCancelCallout = "Vous ne pouvez pas annuler l'appel en ce moment, veuillez réessayer dans quelques secondes...",
+ DetachedFromCallout = "Votre unité a été détachée du dernier appel.",
+ LastCalloutOfferExpired = "D'autres unités ont résolu le dernier appel d'urgence.",
+ NotAttachedToCallout = "Vous ne pouvez pas annuler un appel auquel vous n'êtes pas attaché.",
+ AnyUnitsAvailableToRespond = "Y a-t-il des unités disponibles pour répondre ?",
+ CancelUnitsBeforeGoingOffShift = "Vous devez annuler votre demande d'unités avant de terminer votre service...",
+ NoPermissionToGoOnShift = "Vous n'avez pas la permission de commencer ou de terminer votre service...",
+ ServerCouldNotBuildCalloutError = "ERREUR : Le serveur n'a pas pu créer l'appel en raison d'une erreur dans le code.",
+ PersonHasPassedOut = "~r~ALERTE ~w~La personne semble être inconsciente !",
+ PersonIsTakingOff = "~r~ALERTE ~w~La personne semble s'enfuir !",
+ PersonIsAgressive = "~r~ALERTE ~w~La personne semble agressive !",
+ PersonIsSurrendering = "~r~ALERTE ~w~La personne se rend !",
+ PedCannotEnterVehicle = "La personne ne peut pas monter dans le véhicule le plus proche.",
+ NoNearbyVehicleFound = "Aucun véhicule à proximité trouvé, amenez la personne plus près du véhicule...",
+ PulloverModeExplanation = "Approchez-vous du véhicule que vous souhaitez arrêter...",
+ PulloverConcluded = "L'action d'arrêt est terminée...",
+ PulloverFailedToLockInVehicle = "Le véhicule n'a pas pu être verrouillé pour l'arrêt, veuillez réessayer...",
+ PulloverInitiatedRear = "Le véhicule reste alors derrière vous. Appuyez sur U pour activer la direction manuelle.",
+ PulloverInitiatedFront = "Le véhicule reste alors devant vous. Appuyez sur U pour activer la direction manuelle.",
+ PulloverManualSteeringEnabled = "Contrôle manuel du pull-over activé...",
+ PulloverManualSteeringDisabled = "Contrôle manuel de la traction désactivé, le véhicule vous suit à nouveau...",
+ RequestCooldownActive = "Attendez au moins 5 secondes avant d'essayer de faire une demande ou d'annuler...",
+ AlreadyAttachedToCallout = "Vous êtes déjà lié à un autre appel d'urgence.",
+ DeclinedCalloutOffer = "Si vous utilisez le bit, il est nécessaire d'améliorer la connexion.",
+ NoSpawnPointAvailableForNPC = "Aucune position d'apparition appropriée trouvée pour l'unité de secours demandée dans cette zone.",
+ CantCancelBackup = "Vous ne pouvez plus annuler cette sauvegarde.",
+ NotEnoughSpaceBehindAmbulance = "Il n'y a pas assez de place derrière l'ambulance pour déplacer ou déplacer la bancard.",
+ ImpoundVehicleSubtitle = "Pour impounder votre véhicule, conduisez à la position que j'ai marquée pour vous.",
+ ImpoundVehicleLeaveSubtitle = "Veuillez quitter le véhicule et aller de l'autre côté.",
+ ImpoundVehicleNotAllowedSubtitle = "Ce véhicule n'est pas autorisé ici...",
+ CannotDoThisWhilePedIsInAVehicle = "Vous ne pouvez pas faire cela lorsque la personne est dans un véhicule...",
+ OffDuty = "Hors service",
+ OnDuty = "En service",
+ SuspectIsTryingToStealAVehicle = "Le suspect essaie de voler un véhicule!",
+ TrafficStop = "Arrêt de circulation",
+
+ -- Dispatch
+ DispatchMessage = "Message de dispatch",
+ NextDispatchMessage = "Prochain message dans",
+ Seconds = "secondes",
+ Loading = "Chargement",
+ None = "Aucun.",
+ TrackUnitProposal = "Suivre cette unité",
+ EmergencyCall = "Appel d'urgence",
+ Caller = "Appelant :",
+ CallDescription = "Description:",
+ Location = "Emplacement :",
+ Postal = "Code postal :",
+ CalloutUnitsRequired = "Unités requises :",
+ UnitResponse = "réagit à une urgence.",
+ UnitDetached = "s'est détaché de son appel d'urgence.",
+ UnitArrived = "est arrivée sur le lieu de l'intervention.",
+ UnitOnShift = "a commencé son service.",
+ UnitOffShift = "a terminé son service.",
+ DispatchNote = "Note de dispatch :",
+ DispatchNoteText = "GPS sera marqué sur votre carte.",
+ DispatchNoteResponseText = "Fournir une assistance si nécessaire...",
+ CompleteCalloutFooterText = "Appuyez sur la touche pour compléter l'appel :",
+ TimeRemainingToAcceptCallout = "Temps restant pour accepter l'appel :",
+ HasRequestedPolice = "a demandé une unité de transport de police pour un suspect.",
+ HasRequestedAmbulance = "a demandé une unité d'ambulance.",
+ HasRequestedTaxi = "a demandé un taxi.",
+ HasRequestedTow = "a demandé une unité de remorquage.",
+ HasRequestedRoadService = "a demandé une unité de service routier.",
+ HasRequestedCoroner = "a demandé une unité de médecin légiste pour se rendre à son emplacement.",
+ HasRequestedAnimalRescue = "a demandé une unité de sauvetage animalier.",
+ HasRequestedMechanic = "a demandé une unité de mécanicien.",
+ HasRequestedFire = "a demandé une unité de pompiers.",
+ DispatchMessagesEnabled = "Les messages de dispatch ont été activés.",
+ DispatchMessagesDisabled = "Les messages de dispatch ont été désactivés.",
+
+ -- Tasks
+ InvolvedPedsRemaining = "Autres personnes impliquées :",
+ InvolvedVehsRemaining = "Transports de véhicules encore ouverts :",
+ InvolvedObjsRemaining = "Tâches de service routier encore ouvertes :",
+ InvolvedPropsRemaining = "Tâches de médecin légiste encore ouvertes :",
+ ExtinguishAllFires = "Éteignez tous les incendies.",
+ ClearAreaOfSmoke = "Débarrasser la zone de la fumée.",
+
+ -- ERS Selection menu
+ Select = "Sélectionner",
+ Cancel = "Annuler",
+ SelectService = "Sélectionner un service",
+ Police = "Police",
+ Ambulance = "Ambulance",
+ Fire = "Pompiers",
+ Tow = "Dépannage",
+ PoliceDescription = "Gardiens de la justice, courageusement protecteurs.",
+ AmbulanceDescription = "Héros de la guérison, sauvant des vies rapidement.",
+ FireDescription = "Pompiers intrépides, luttant courageusement.",
+ TowDescription = "Secouristes routiers, offrant une aide rapide.",
+
+ -- Gear Selection menu
+ SelectGear = "Sélectionner la vitesse",
+
+ -- Menu radial
+ RadialMenuInstructionTitle = "Sélectionnez une unité de renfort disponible...",
+ ExitRadialMenuInstruction = "Cliquez pour quitter le menu radial...",
+ RequestPoliceTransportIcon = "fa-solid fa-handcuffs", -- https://fontawesome.com/search?m=free&o=r
+ RequestPoliceTransportInstruction = "Cliquez pour demander ou annuler une unité de transport de police pour le suspect le plus proche...",
+ RequestAmbulanceIcon = "fa-solid fa-truck-medical",
+ RequestAmbulanceInstruction = "Cliquez pour demander ou annuler une unité d'ambulance pour s'occuper des personnes blessées dans la zone...",
+ RequestTowIcon = "fa-solid fa-car-burst",
+ RequestTowInstruction = "Cliquez pour demander ou annuler une unité de transport de véhicule pour le véhicule le plus proche à récupérer...",
+ RequestTaxiIcon = "fa-solid fa-taxi",
+ RequestTaxiInstruction = "Cliquez pour demander ou annuler un taxi pour la personne la plus proche...",
+ RequestRoadServiceIcon = "fa-solid fa-broom",
+ RequestRoadServiceInstruction = "Cliquez pour demander ou annuler une unité de service routier pour nettoyer les routes à proximité...",
+ RequestCoronerIcon = "fa-solid fa-book-skull",
+ RequestCoronerInstruction = "Cliquez pour demander ou annuler une unité de coroner pour ramasser les corps dans la zone...",
+ RequestAnimalRescueIcon = "fa-solid fa-paw",
+ RequestAnimalRescueInstruction = "Cliquez pour demander ou annuler une unité de sauvetage animal pour s'occuper des animaux à proximité...",
+ RequestMechanicIcon = "fa-solid fa-screwdriver-wrench",
+ RequestMechanicInstruction = "Cliquez pour demander ou annuler une unité de mécanicien pour réparer le véhicule le plus proche...",
+ RequestFireIcon = "fa-solid fa-fire-extinguisher",
+ RequestFireInstruction = "Cliquez pour demander ou annuler une unité de pompiers pour éteindre les incendies à proximité...",
+ RequestedUnitStrugglingToReach = "L'unité demandée a du mal à atteindre votre emplacement... Elle pourrait être annulée.",
+
+ -- Pursuit Radial Menu
+ PursuitRadialMenuInstructionTitle = "Sélectionnez une unité de renfort pour la poursuite...",
+ PursuitRadialMenuInstruction = "Cliquez pour demander des unités de renfort pour la poursuite...",
+ RequestLightBackupIcon = "fa-solid fa-motorcycle",
+ RequestLightBackupInstruction = "Cliquez pour demander des unités légères en renfort pour la poursuite...",
+ RequestMediumBackupIcon = "fa-solid fa-car-on",
+ RequestMediumBackupInstruction = "Cliquez pour demander des unités moyennes en renfort pour la poursuite...",
+ RequestHeavyBackupIcon = "fa-solid fa-truck-moving",
+ RequestHeavyBackupInstruction = "Cliquez pour demander des unités lourdes en renfort pour la poursuite...",
+ RequestAirBackupIcon = "fa-solid fa-helicopter",
+ RequestAirBackupInstruction = "Cliquez pour demander un soutien aérien pour la poursuite...",
+ RequestArmyBackupIcon = "fa-solid fa-person-military-rifle",
+ RequestArmyBackupInstruction = "Cliquez pour demander un soutien militaire pour la poursuite...",
+
+ -- Pursuit notifications
+ ActivePursuit = "POURSUITE",
+ NotInPursuitMode = "Vous n'êtes pas en mode poursuite...",
+ CancellingPreviousRequestForBackup = "Annulation de la demande précédente de renforts...",
+ BackupAlreadyRequested = "Des renforts ont déjà été demandés, pour annuler la demande sélectionnez à nouveau le même type d'unités de renfort...",
+ PursuitBackupTooFarAway = "L'unité (ou les unités) de renfort pour la poursuite est (sont) trop loin, la demande est annulée...",
+ PursuitCancelledReasonPersonDied = "La poursuite est terminée. La personne poursuivie est décédée.",
+ PursuitCancelledReasonLostTarget = "La poursuite est terminée, la cible a été perdue.",
+ PursuitCancelledReasonPersonVanished = "La poursuite a été annulée... La personne poursuivie a disparu.",
+ PursuitCancelledReasonVehicleVanished = "La poursuite a été annulée... Le véhicule poursuivi a disparu.",
+ PursuitCancelledReasonPersonCaught = "La poursuite est terminée... Vous avez capturé la personne que vous poursuivez.",
+ PursuitHotkeyFocus = "focus",
+ PursuitHotkeyBackup = "renfort",
+ PursuitCancelledReasonNoLongerCapableOfPursuing = "La poursuite a été annulée... Vous ne pouvez plus poursuivre la cible.",
+
+ -- Ambulance
+ AmbulanceAlreadyEnroute = "Vous avez déjà demandé une ambulance...",
+ RequestingAmbulance = "Demande d'une ambulance...",
+ AmbulanceDone = "L'ambulance quitte la scène.",
+ NoAmbulanceEnroute = "Aucune ambulance en route.",
+ AmbulanceCancelled = "Demande d'ambulance annulée.",
+ NoPeopleFoundAmbulance = "Aucune personne trouvée pour fournir des soins / transport...",
+ AllAmbulancesOccupied = "Toutes les unités d'ambulance sont occupées. Réessayez dans quelques secondes, s'il vous plaît...",
+ AmbulanceArrived = "L'ambulance est arrivée",
+ AmbulanceEnroute = "Une ambulance a été envoyée et est maintenant en route...",
+ NextMedicTask = "Le médecin a été assigné pour s'occuper d'une personne assignée.",
+
+ -- Police
+ PoliceAlreadyEnroute = "Vous avez déjà demandé un transport de police...",
+ RequestingPolice = "Demande de transport de police.",
+ PoliceDone = "Le transport de police quitte la scène.",
+ NoPoliceEnroute = "Aucun transport de police en route...",
+ PoliceCancelled = "Demande de transport de police annulée...",
+ NoPeopleFoundPolice = "Aucune personne trouvée pour fournir un transport...",
+ AllPoliceOccupied = "Toutes les unités de police sont occupées. Réessayez dans quelques secondes, s'il vous plaît...",
+ PoliceArrived = "Le transport de police est arrivé.",
+ PoliceEnroute = "Le transport de police a été envoyé et est maintenant en route...",
+ NextPoliceTask = "L'agent de police a été assigné pour récupérer une personne assignée.",
+
+ -- Taxi
+ TaxiAlreadyEnroute = "Vous avez déjà demandé un taxi.",
+ RequestingTaxi = "Demande de taxi pour la personne la plus proche.",
+ TaxiDone = "La personne a été prise en charge par le chauffeur de taxi et ils partent maintenant.",
+ NoTaxiEnroute = "Aucun taxi en route...",
+ TaxiCancelled = "Demande de taxi annulée.",
+ NoPeopleFound = "Aucune personne trouvée pour fournir un transport...",
+ AllTaxisOccupied = "Tous les taxis sont occupés. Réessayez dans quelques secondes...",
+ TaxiArrived = "Le taxi est arrivé.",
+ TaxiEnroute = "Un taxi a été envoyé et est maintenant en route...",
+ NextTaxiTask = "Le chauffeur de taxi a été assigné pour récupérer une personne assignée.",
+
+ -- Tow
+ TowAlreadyEnroute = "Vous avez déjà demandé un transport de véhicule.",
+ RequestingTow = "Demande de transport de véhicule pour le véhicule le plus proche.",
+ TowDone = "Le véhicule a été pris en charge par le dépanneuse et il part maintenant.",
+ NoTowEnroute = "Aucun transport de véhicule en route...",
+ RequestingTowButVehicleOccupied = "Pour demander un transport de véhicule, le véhicule doit être inoccupé...",
+ TowCancelled = "Demande de transport de véhicule annulée.",
+ NoVehiclesFound = "Aucun véhicule trouvé pour fournir un transport...",
+ AllTowOccupied = "Toutes les unités de transport de véhicule sont occupées. Réessayez dans quelques secondes, s'il vous plaît...",
+ TowArrived = "Le transport de véhicule est arrivé.",
+ TowEnroute = "Une unité de transport de véhicule a été envoyée et est maintenant en route...",
+ NextTowTask = "Le chauffeur de dépanneuse a été assigné pour récupérer un véhicule.",
+
+ -- Road Service
+ RoadServiceAlreadyEnroute = "Vous avez déjà demandé un service routier.",
+ RequestingRoadService = "Demande de service routier pour la tâche la plus proche.",
+ RoadServiceDone = "Les débris ont été nettoyés, l'unité de service routier quitte la scène.",
+ NoRoadServiceEnroute = "Aucun service routier en route...",
+ RoadServiceCancelled = "Demande de service routier annulée.",
+ NoRoadServiceTaskFound = "Aucune tâche trouvée pour fournir un service routier...",
+ AllRoadServiceOccupied = "Toutes les unités de service routier sont occupées. Réessayez dans quelques secondes, s'il vous plaît...",
+ RoadServiceArrived = "Le service routier est arrivé.",
+ RoadServiceEnroute = "Une unité de service routier a été envoyée et est maintenant en route...",
+ NextRoadServiceTask = "L'employé de service routier a été assigné pour nettoyer les débris dans la zone, pour dégager la route.",
+
+ -- Coroner
+ CoronerAlreadyEnroute = "Vous avez déjà demandé un coroner.",
+ RequestingCoroner = "Demande d'un coroner pour la tâche la plus proche.",
+ CoronerDone = "Les corps ont été enlevés de la scène et seront emmenés à la morgue.",
+ NoCoronerEnroute = "Aucun coroner en route...",
+ CoronerCancelled = "Demande de coroner annulée.",
+ NoCoronerTaskFound = "Aucune tâche trouvée pour fournir un coroner...",
+ AllCoronerOccupied = "Toutes les unités de coroner sont occupées. Réessayez dans quelques secondes, s'il vous plaît...",
+ CoronerArrived = "Le coroner est arrivé.",
+ CoronerEnroute = "Un coroner a été envoyé et est maintenant en route...",
+ NextCoronerTask = "Le coroner a été assigné pour ramasser les sacs mortuaires dans la zone.",
+
+ -- Animal Rescue
+ AnimalRescueAlreadyEnroute = "Vous avez déjà demandé un sauvetage animal.",
+ RequestingAnimalRescue = "Demande de sauvetage animal pour les animaux à proximité.",
+ AnimalRescueDone = "Les animaux ont été pris en charge sur la scène.",
+ NoAnimalRescueEnroute = "Aucune unité de sauvetage animal en route...",
+ AnimalRescueCancelled = "Demande de sauvetage animal annulée.",
+ NoAnimalRescueTaskFound = "Aucune tâche trouvée pour fournir un sauvetage animal...",
+ AllAnimalRescueOccupied = "Toutes les unités de sauvetage animal sont occupées. Réessayez dans quelques secondes, s'il vous plaît...",
+ AnimalRescueArrived = "L'unité de sauvetage animal est arrivée.",
+ AnimalRescueEnroute = "Le sauvetage animal a été envoyé et est maintenant en route...",
+ NextAnimalRescueTask = "Le sauvetage animal a été assigné pour s'occuper d'un animal assigné.",
+
+ -- Mechanic
+ MechanicAlreadyEnroute = "Vous avez déjà demandé un mécanicien.",
+ RequestingMechanic = "Demande d'un mécanicien pour le véhicule le plus proche.",
+ MechanicDone = "Le véhicule a été réparé par le mécanicien et il part maintenant.",
+ NoMechanicEnroute = "Aucun mécanicien en route...",
+ MechanicCancelled = "Demande de mécanicien annulée.",
+ NoMechanicTaskFound = "Aucune tâche trouvée pour fournir un mécanicien...",
+ AllMechanicOccupied = "Tous les mécaniciens sont occupés. Réessayez dans quelques secondes, s'il vous plaît...",
+ MechanicArrived = "Le mécanicien est arrivé.",
+ MechanicEnroute = "Un mécanicien a été envoyé et est maintenant en route...",
+
+ -- Fire
+ FireAlreadyEnroute = "Vous avez déjà demandé un service de pompiers.",
+ RequestingFire = "Demande de service de pompiers pour l'incendie le plus proche.",
+ FireDone = "L'incendie a été éteint par le service de pompiers et il part maintenant.",
+ NoFireEnroute = "Aucun service de pompiers en route...",
+ FireCancelled = "Demande de service de pompiers annulée.",
+ NoFireTaskFound = "Aucune tâche trouvée pour fournir un service de pompiers...",
+ AllFireOccupied = "Tous les services de pompiers sont occupés. Réessayez dans quelques secondes, s'il vous plaît...",
+ FireArrived = "Le service de pompiers est arrivé.",
+ FireEnroute = "Un service de pompiers a été envoyé et est maintenant en route...",
+ NextFireTask = "Le service de pompiers a été assigné pour éteindre l'incendie le plus proche.",
+ NoFireInArea = "Il n'y a pas d'incendie dans la zone...",
+
+ -- Herse
+ SpikestripAlreadyDeployed = "Vous avez déjà déployé une herse...",
+ PutAwaySpikestrip = "Ranger la herse",
+ TakeOutSpikestrip = "Sortir la herse",
+ SpikestripDeployed = "Herse déployée",
+ SpikestripPickedUp = "Herse ramassée",
+ SpikestripRemoved = "Herse retirée",
+ ToGrabOrPutAwaySpikestripFromVehicle = "Pour prendre ou ranger une herse du/dans le véhicule",
+ ToDeployOrPickupSpikestrip = "Pour déployer ou ramasser une herse",
+ FailedToGrabSpikestrip = "Échec lors de la prise de la herse...",
+
+ -- Interaction avec les piétons
+ YouSay = "Vous dites",
+ Press = "Appuyez",
+ ToInteract = "pour interagir avec la personne à proximité",
+ ToInteractImpound = "pour interagir avec le gars de la fourrière",
+ ToInteractGear = "pour interagir avec la personne chargée de l'engrenage",
+ ToPerformCPR = "pour interagir avec la personne blessée à proximité",
+ ToUseStretcherVeh = "pour prendre ou placer la civière du/dans le véhicule",
+ ToCleanupObject = "pour nettoyer les débris à proximité",
+ StopInteraction = "Mettre fin à la conversation et ordonner de partir",
+ ExitInteraction = "Quitter l'interaction",
+ SendToCustody = "Envoyer en garde à vue",
+ PersonTakenIntoCustody = "La personne a été placée en garde à vue.",
+ NoCustodyCenterNearby = "Aucun centre de garde à vue à proximité.",
+ SuspectArrested = "~b~SUSPECT ARRÊTÉ",
+ InteractionOptions = "Options d'interaction...",
+ Greet = "Saluer",
+ GreetExplanation = "Saluez la personne avec laquelle vous interagissez.",
+ AskForId = "Demander une pièce d'identité",
+ AskForIdExplanation = "Demandez la carte d'identité de la personne.",
+ Question = "Question",
+ QuestionExplanation = "Questionnez la personne avec laquelle vous interagissez.",
+ Breathalyze = "Éthylotest",
+ BreathalyzeExplanation = "Effectuez un test d'alcoolémie pour vérifier l'alcoolisation.",
+ DrugTest = "Test de dépistage de drogues",
+ DrugTestExplanation = "Effectuez un test de dépistage de drogues pour détecter la présence de drogues.",
+ Warn = "Avertir",
+ WarnExplanation = "Donnez un avertissement à la personne.",
+ Fine = "Amende / Contravention",
+ FineExplanation = "Donnez une amende ou une contravention à la personne.",
+ Grab = "Guider",
+ GrabExplanation = "Guider la personne.",
+ GetOut = "Sortir",
+ GetOutExplanation = "Demandez à la personne de sortir du véhicule.",
+ AskToFollow = "Suivez-moi",
+ AskToFollowExplanation = "Demandez à la personne de vous suivre.",
+ AskToWait = "Attendez ici",
+ AskToWaitExplanation = "Demandez à la personne d'attendre ici.",
+ HandsUp = "Mains en l'air",
+ HandsUpExplanation = "Ordonnez à la personne de lever les mains.",
+ Search = "Fouiller",
+ SearchExplanation = "Fouiller les vêtements de la personne.",
+ Cuff = "Menotter",
+ CuffExplanation = "Détenez la personne en lui mettant des menottes.",
+ PutInVehicle = "Mettre dans le véhicule",
+ PutInVehicleExplanation = "Demandez à la personne de monter dans le véhicule le plus proche.",
+ PersonalDetails = "Détails personnels (Carte d'identité)",
+ FullName = "Nom complet :",
+ DOB = "Date de naissance :",
+ DocumentNumber = "Numéro de document :",
+ Nationality = "Nationalité :",
+
+ DatabaseCheck = "Vérification de la base de données de police",
+ RunningDatabaseCheck = "Scan de la base de données en cours...",
+ DatabaseCheckResults = "Entrées trouvées dans la base de données",
+ Address = "Adresse :",
+ DriversLicense = "Permis(s) :",
+ BikeLicense = "Permis moto:",
+ BoatLicense = "Permis bateau:",
+ TruckLicense = "Permis poids lourd:",
+ PilotLicense = "Licence de pilote:",
+ Warrants = "Mandat(s) :",
+ FlagsOrMarkers = "Marqueur(s) :",
+
+ ProfilePicture = "Photo:",
+ FirstName = "Prénom:",
+ LastName = "Nom:",
+ Gender = "Genre:",
+ Email = "E-mail:",
+ PhoneNumber = "Numéro de téléphone:",
+ Country = "Pays:",
+ State = "État/Région:",
+ City = "Ville:",
+ PostalCode = "Code postal:",
+ AddressType = "Type d'adresse:",
+ Licenses = "Permis(s):",
+
+ -- Warrants
+ armed_and_dangerous = "Armé et dangereux",
+ assault = "Agression",
+ burglary = "Cambriolage",
+ drug_related = "Lié à la drogue",
+ gang_affiliation = "Affiliation à un gang",
+ homicide = "Homicide",
+ kidnapping = "Enlèvement",
+ mental_health_issues = "Problèmes de santé mentale",
+ sex_offense = "Délit sexuel",
+ terrorism = "Terrorisme",
+ theft = "Vol",
+ traffic_violation = "Infraction routière",
+ wanted_person = "Personne recherchée",
+ other = "Autre, voir description...",
+ active_warrant = "Mandat actif",
+
+ StopGrabbingInstruction = "Appuyez sur ~INPUT_CELLPHONE_CANCEL~ pour libérer la personne.",
+ CannotInteractWithThisNPC = "Vous ne pouvez pas communiquer avec cette personne...",
+ GrabWhenNotCuffedResponse = "Gardez vos mains pour vous! Alors tu devrais m'arrêter...",
+ PersonAlreadyInteracting = "Cette personne interagit déjà...",
+ PersonAlreadyBeingEscorted = "Cette personne est déjà escortée...",
+ ThisPersonIsCuffed = "Cette personne est menottée...",
+ AlreadyPerformingCPR = "Vous êtes déjà en train de pratiquer la RCP...",
+ AlreadyCleaningUpObject = "Vous êtes déjà en train de nettoyer un objet...",
+ NoPedFoundToPerformCPROn = "Aucune personne trouvée éligible pour la RCP...",
+ CPRSuccess = "La personne se sent déjà mieux. Bon travail !",
+ CPRFail = "On dirait que... Oh non, la personne semble avoir cessé de respirer à nouveau...",
+ UnableToPerformCPR = "Impossible de pratiquer la RCP car quelqu'un d'autre a déjà essayé avant vous...",
+ UnableToSendPersonAway = "Vous ne pouvez pas envoyer la personne ailleurs, désentrez-la d'abord...",
+ WorkOnBleeding = "Application d'un garrot / scellé thoracique / gaze pour une hémorragie massive...",
+ WorkOnBleedingAlreadyDone = "Un garrot / scellé thoracique / gaze a déjà été appliqué par quelqu'un d'autre, en raison d'une hémorragie massive...",
+ NotBleeding = "La personne n'a pas de saignement massif.",
+ WorkOnAirway = "Dégagement de la bouche de la personne pour résoudre une obstruction des voies respiratoires...",
+ WorkOnAirwayAlreadyDone = "L'obstruction des voies respiratoires de cette personne a déjà été résolue par quelqu'un d'autre...",
+ NoAirwayObstructions = "Aucune obstruction des voies respiratoires trouvée.",
+ WorkOnBreathing = "Son rythme respiratoire est anormal, elle doit se rendre à l'hôpital dès que possible...",
+ WorkOnBreathingAlreadyDone = "Quelqu'un d'autre a déterminé que son rythme respiratoire est anormal, elle doit se rendre à l'hôpital dès que possible...",
+ NoBreathingProblems = "La personne respire, mais doit être emmenée à l'hôpital dès que possible.",
+ WorkOnCirculation = "Il y a quelque chose qui ne va pas avec le rythme de son cœur, elle doit se rendre à l'hôpital dès que possible...",
+ WorkOnCirculationAlreadyDone = "Quelqu'un d'autre a déterminé que le rythme de son cœur est anormal, elle doit se rendre à l'hôpital dès que possible...",
+ NoCirculationProblems = "La personne a un rythme cardiaque régulier. Quoi qu'il en soit, elle doit se rendre à l'hôpital dès que possible.",
+ PersonFeelsCold = "La personne se sent très froide...",
+ PersonFeelsWarm = "La personne se sent très chaude...",
+ NoHypothermiaSigns = "Aucun signe d'hypothermie détecté.",
+ PersonFeelsColdAlreadyDetected = "Quelqu'un d'autre a déterminé que la personne se sent très froide...",
+ PersonFeelsWarmAlreadyDetected = "Quelqu'un d'autre a déterminé que la personne se sent très chaude...",
+ NoHypothermiaSignsAlreadyDetected = "Quelqu'un d'autre a déterminé qu'il n'y a pas de signes d'hypothermie...",
+ OrderedPedToTheirKnees = "Vous avez ordonné à une personne de se mettre à genoux.",
+ OrderedPedToStandUp = "Vous avez ordonné à une personne de se lever.",
+ PedIsDrunk = "L'éthylotest indique que la personne a dépassé la limite légale d'alcool pour conduire.",
+ PedIsNotDrunk = "L'éthylotest indique que la personne est dans la limite légale d'alcool pour conduire.",
+ PedIsUnderInfluenceOfDrugs = "Le test de dépistage de drogues indique que la personne est sous l'influence de drogues.",
+ PedIsNotUnderInfluenceOfDrugs = "Le test de dépistage de drogues indique que la personne n'est pas sous l'influence de drogues.",
+ YoureNotAPoliceOfficer = "Vous n'avez pas l'air d'un officier de police...",
+ InTheWrongService = "Vous n'êtes pas au bon endroit, vous savez...",
+ AskForGear = "Demander de l'équipement...",
+ GetOutWhenNotInAVehicleResponse = "La personne n'est pas dans un véhicule...",
+
+ -- qb-target / ox-target
+ VehSpeakTo = "Speak to",
+ VehAssist = "Assist injured",
+ VehDriver = "driver",
+ VehFrontPassenger = "front passenger",
+ VehRearPassenger = "rear passenger",
+ VehPassenger = "passenger",
+
+ -- Interaction avec les piétons morts
+ IdentifyDeadPed = "Identifier",
+ DragPed = "Drag",
+ CheckMassiveBleeding = "Hémorragie massive",
+ CheckAirway = "Voies respiratoires",
+ CheckBreathing = "Respiration",
+ CheckCirculation = "Circulation",
+ CheckHypothermia = "Hypothermie",
+ PerformCPR = "Pratiquer la RCP",
+ PutOnStretcher = "Placer sur la civière",
+ TakeOffStretcher = "Retirer de la civière",
+ PutInBodyBag = "Mettre dans un sac pour cadavre",
+
+ IdentifyDeadPedExplanation = "Identifier la personne blessée",
+ DragPedExplanation = "Traîner la personne", -- Drag the person
+ CheckMassiveExplanation = "Vérifiez les hémorragies massives",
+ CheckAirwayExplanation = "Vérifiez les voies respiratoires pour les obstructions",
+ CheckBreathingExplanation = "Vérifiez si la personne respire encore et à quel rythme",
+ CheckCirculationExplanation = "Vérifiez si la personne a un pouls et à quel rythme",
+ CheckHypothermiaExplanation = "Vérifiez la température corporelle de la personne",
+ PerformCPRExplanation = "Commencez à pratiquer la RCP sur la personne",
+ PutOnStretcherExplanation = "Placez la personne sur une civière à proximité",
+ TakeOffStretcherExplanation = "Retirez la personne de la civière",
+ PutInBodyBagExplanation = "Placez la personne dans un sac pour cadavre",
+
+ -- Civière
+ MustBeOnShiftToDoThis = "Vous n'êtes pas en service...",
+ NoNearbyStretcherFound = "Aucune civière à proximité trouvée...",
+ StretcherStillInUse = "Cette civière est encore en usage...",
+ StretcherAlreadyInUse = "Cette civière est déjà utilisée...",
+ ReleasedStretcher = "Vous avez libéré la civière.",
+ StillUsingStretcher = "Vous utilisez encore la civière...",
+ NotUsingStretcher = "Vous n'utilisez pas la civière...",
+ LowerTheNearbyStretcher = "Assurez-vous d'avoir abaissé une civière à proximité...",
+ StretcherAlreadyOccupied = "Cette civière est déjà occupée...",
+ ThisPersonIsNotOnAStretcher = "Cette personne ne semble pas être sur une civière...",
+ CannotDoThisWhenPedIsOnStretcher = "Vous ne pouvez pas effectuer cette action tant que la personne est sur une civière...",
+ StretcherAlreadySpawnedForVehicle = "Ce véhicule a déjà une civière...",
+ AmbulanceAlreadyHasAStretcherInside = "Impossible d'interagir avec l'ambulance car vous poussez une civière et le véhicule en a déjà une à l'intérieur...",
+ VehicleMustBeEmptyForStretcherInteraction = "Le véhicule doit être vide avant d'effectuer des interactions avec la civière...",
+ CantInteractWithStretcherInsideVehicle = "Vous ne pouvez pas interagir avec une civière à l'intérieur d'un véhicule...",
+ PlacedStretcherIntoAVehicle = "Vous avez placé la civière dans le véhicule.",
+ TakenStretcherFromAVehicle = "Vous avez retiré la civière du véhicule.",
+ PersonTransferredToHospital = "Vous avez transféré la personne aux employés de l'hôpital.",
+ PersonSaved = "~b~VICTIME SAUVÉE !",
+ DropOffPersonAtHospital3DText = "Appuyez sur ~o~ENTRER ~w~pour transférer la personne au personnel de cet hôpital",
+ ThereIsStretcherOnTheGroundNearby = "Il y a une civière sur le sol à proximité, veuillez la prendre pour la mettre dans le véhicule.",
+ SomeoneElseHasNetworkOwnershipOverTheStretcher = "Quelqu'un d'autre a le contrôle net de cette civière. Ils doivent se déplacer pour que vous puissiez interagir.",
+ SomeoneElseHasNetworkOwnershipOverTheVehicle = "Quelqu'un d'autre a le contrôle net de ce véhicule. Ils doivent se déplacer pour que vous puissiez interagir.",
+ GetOnOrOffStretcher = "Prendre ~p~/~w~ mettre hors civière",
+
+ -- Inventaire
+ Inventory = "Objets trouvés dans l'inventaire...",
+
+ -- Interactions avec les véhicules
+ VehicleDetails = "Détails du véhicule",
+ VehiclePlate = "Plaque d'immatriculation",
+ VehicleModel = "Modèle du véhicule",
+ VehicleOwner = "Propriétaire du véhicule",
+ VehicleColor = "Couleur du véhicule",
+ VehicleColorSecondary = "Couleur secondaire du véhicule",
+ VehicleBuildYear = "Année de fabrication",
+ VehicleTax = "Taxe du véhicule",
+ VehicleMOT = "Contrôle technique",
+ VehicleInsurance = "Assurance du véhicule",
+ VehicleStolen = "Signalé comme volé",
+ VehicleStolenDescription = "Véhicule volé",
+ VehicleBolo = "BOLO actif",
+ VehicleBoloDescription = "Description du BOLO",
+ Paid = "Payé",
+ NotPaid = "Non payé",
+ Valid = "Valide",
+ Invalid = "Non valide",
+ Passed = "Réussi",
+ Failed = "Échoué",
+ SearchThe = "Rechercher dans ",
+ FoundItem = "Trouvé :",
+ ItemWillBeConfiscatedAutomaticallyIn10Seconds = "L'objet sera automatiquement confisqué dans 10 secondes...",
+ NothingFoundInThisPartOfTheVehicle = "Vous n'avez rien trouvé dans cette partie du véhicule...",
+ NotCloseEnoughToVehicle = "Vous n'êtes pas assez proche du véhicule que vous voulez inspecter...",
+ NotCloseEnoughToVehicleSection = "Vous n'êtes pas assez proche de la section du véhicule que vous voulez inspecter...",
+ VehicleIsNotEmpty = "Le véhicule n'est pas vide...",
+ VehicleDataTimeout = "Vous ne pouvez pas inspecter ce véhicule pour le moment en raison d'un timeout serveur, réessayez plus tard...",
+
+ -- Behaviour State
+ NeutralLabel = "A une expression neutre",
+ RelaxedLabel = "S'affiche comme relaxé",
+ BusyLabel = "S'affiche comme pressé",
+ CheerfulLabel = "S'affiche comme heureux",
+ FriendlyLabel = "S'affiche comme sympathique",
+ IrritatedLabel = "S'affiche comme enervé",
+ StressedLabel = "S'affiche comme stressé",
+ WorriedLabel = "S'affiche comme inquiet",
+ ConfusedLabel = "S'affiche comme confus",
+ SuspiciousLabel = "S'affiche comme suspicieux",
+ DeliriousLabel = "S'affiche comme imprévisible",
+ ParanoidLabel = "S'affiche comme extrêmement méfiant",
+
+ -- Questioning
+ ExitConversation = "Je pense en savoir assez... (Quitter la conversation)",
+ YouHaveAskedAllQuestions = "Vous avez posé toutes les questions disponibles pour cette interaction.",
+
+ -- Answering questions
+ ConversationHistory = "Historique de la conversation",
+ QDriversLicense = "voiture",
+ QBikeLicense = "moto",
+ QBoatLicense = "bateau",
+ QTruckLicense = "camion",
+ QPilotLicense = "avion",
+ PrefixDrunk = "Hic !",
+ SuffixDrunk = "**Rot**",
+ PrefixDrugged = "Euh...",
+ SuffixDrugged = "**Mâche**",
+ Sober = "sobre",
+ Drunk = "ivre",
+ High = "défoncé",
+ Stoned = "stone",
+ BleedingSomewhere = "saigne quelque part",
+ TroubleWithBreathing = "a des difficultés à respirer",
+ SomethingStuckInThroat = "a quelque chose coincé dans la gorge",
+ Warm = "surchauffé",
+ Cold = "froid",
+ Healthy = "en bonne santé",
+ Dizzy = "étourdi",
+ Extrasunny = "ensoleillé",
+ Overcast = "nuageux",
+ Rain = "pluie",
+ Foggy = "brumeux",
+ Smog = "smog",
+ Clouds = "nuages",
+ Snow = "neige",
+ Snowlight = "neige légère",
+ Xmas = "forte neige",
+ Halloween = "obscurité",
+ Blizzard = "blizzard",
+ RainHalloween = "obscurité pluvieuse",
+ SnowHalloween = "obscurité neigeuse",
+ Thunder = "orage",
+ Clearing = "pluie légère",
+ Neutral = "temps",
+
+ -- Conseils
+ OrderOnKneesOrStandUpExplanation = "Ordre de se mettre à genoux / se lever.",
+ AcceptCallout = "Accepter l'appel d'urgence.",
+ CompleteCallout = "Compléter l'appel d'urgence.",
+ CuffExplanation = "(Dé)menotter la personne la plus proche.",
+ PullOver = "Arrêter le véhicule.",
+ RadialMenuExplanation = "Demandes de déploiement (Menu radial)",
+ StopTrackingUnitExplanation = "Stop tracking unit",
+ CannotTrackYourself = "You can not track yourself...",
+ TargetNotOnACallout = "This unit is not on an active callout, thus can not be located...",
+
+ InputHelpText = "Vous devez entrer des couleurs RVB ou mentionner une couleur. [Exemples : rouge | 255 0 0]",
+ WaitCooldown = "Vous devez attendre : le temps de récupération est encore actif...",
+ NoPermission = "Vous n'avez pas la permission de faire cela.",
+ MustSetNumberValue = "Erreur, vous devez entrer une valeur numérique.",
+ CannotIdentifySize = "Impossible d'identifier cette taille... Essayez encore",
+
+ CannotDoThisOnFoot = "Vous ne pouvez pas faire cela à pied.",
+ CannotDoThisInAVehicle = "Vous ne pouvez pas faire cela dans un véhicule.",
+ CannotDoThisAsPassenger = "Vous ne pouvez pas faire cela en tant que passager d'un véhicule...",
+
+ UseMDTToToggleShift = "Vous pouvez activer ou désactiver votre service via le MDT. Si vous souhaitez désactiver les offres d'appels :",
+ CalloutsDisabled = "Vos appels sont désactivés.",
+
+ Dispatch = "Contrôle",
+ Responding = "Unité reçue répondant au dernier appel d'urgence.",
+ ArriveAtScene = "Unité reçue arrivée sur les lieux.",
+ AmbulanceDispatched = "Une ambulance a été dépêchée...",
+ PoliceTransportDispatched = "Le transport de police a été dépêché...",
+ VehicleTransportDispatched = "Le transport de véhicule a été dépêché...",
+ TaxiDispatched = "Un taxi a été dépêché.",
+ TrackingUnit = "Vous suivez maintenant la localisation GPS de l'unité. Cette localisation est mise à jour pour une durée limitée.",
+ StoppedTrackingUnit = "Vous avez arrêté de suivre une autre unité.",
+}
\ No newline at end of file
diff --git a/resources/night_ers/config/translations/he.lua b/resources/night_ers/config/translations/he.lua
new file mode 100644
index 000000000..13cc415ce
--- /dev/null
+++ b/resources/night_ers/config/translations/he.lua
@@ -0,0 +1,628 @@
+Config = Config or {}
+Config.Messages = Config.Messages or {}
+
+ --====================== Language ======================--
+
+Config.Messages['he'] = {
+ ScriptInitialising = "ה-Script עדיין מאתחל, אנא המתן...",
+ Yes = "כן",
+ No = "לא",
+ AreYouSureCompleteCallout = "האם אתה בטוח שברצונך לסיים את הקריאה?",
+ CompletingCalloutCannotBeUndone = "אין לחזור לקריאה אחרי הסיום.",
+ Controls = "לחצנים",
+ Hint = "טיפים",
+ HotKeys = "מקשי קיצור",
+ Explanation = "הסברים",
+ Unknown = "לא ידוע",
+ ToHideOrShow = "כדי להסתיר/להציג",
+ Aim = "לכוון",
+ AimToOrderPedTextDrawing = "~p~'~w~E~p~'~w~ » לכרוע ~p~/ ~w~לעמוד ",
+ AimToOrderAnimalTextDrawing = "~p~'~w~E~p~'~w~ » לעצור ~p~/ ~w~לשחרר ",
+ GrabOrReleaseStretcher = "~p~'~w~E~p~'~w~ » לקחת ~p~/ ~w~לשחרר",
+ RaiseOrLowerStretcher = "~p~' ~w~↑~p~ | ~w~↓~p~ '~w~ » להרים ~p~/ ~w~להנמיך",
+ ToggleHints = "האם ידעת שאתה יכול להדליק/לכבות את התצוגה הזאת?",
+ DisableHints = "רמזים מכובים.",
+ EnableHints = "רמזים מודלקים.",
+ DisabledCallouts = "הצעות לקיראות מכובים",
+ EnabledCallouts = "הצעות לקיראות מודלקים",
+ OnShift = "התחלת את המשמרת שלך",
+ OffShift = "סיימת את המשמרת שלך",
+ NotOnShift = "אתה לא במשמרת.",
+ Postal = "מיקוד",
+ StreetName = "שם הרחוב",
+ RequiredUnits = "יחידות נדרשות",
+ ProvideBackupIfRequested = "ספק גיבוי אם תתבקש.",
+ Nearby = "קרוב",
+ OfferedCalloutActiveOrAttachedToACallout = "אתה לא יכול לעשות זאת: אתה כבר בקריאה.",
+ CouldNotRequestCalloutCooldown = "בקשתך לקריאה נדחתה, אתה בקולדואן . נא נסה שוב מאוחר יותר...",
+ CouldNotRequestACallout = "לא היתה אפשרות להציע קריאה ברגע זה (השרת היה תפוס), נסה שוב...",
+ CouldNotRequestCallout = "לא היתה אפשרות להציע קריאה מאחר שאינך חלק מהתפקידים/קבוצות הדרושים לקבלת הקריאה ...",
+ CalloutMarkedOnYourGPS = "הנתיב לקריאה האחרונה סומן ב-GPS שלך.",
+ AcceptedCallout = "נקשרת אל",
+ CancelCallout = "הקריאה בוטלה.",
+ NotAbleToCancelCallout = "אין באפשרותך לבטל את הקריאה ברגע זה. נסה שוב בעוד כמה שניות...",
+ DetachedFromCallout = "היחידה שלך התנתקה מהקריאה האחרונה.",
+ LastCalloutOfferExpired = "יחידות אחרות הצליחו לפתור את שיחת החירום האחרונה.",
+ NotAttachedToCallout = "אין באפשרותך לבטל קריאה שאינך מחובר אליה.",
+ AnyUnitsAvailableToRespond = "האם יש יחידות זמינות להגיב?",
+ CancelUnitsBeforeGoingOffShift = "עליך לבטל את בקשתך ליחידות לפני שתצא מהמשמרת...",
+ NoPermissionToGoOnShift = "אין לך הרשאות להמשיך או לבטל את המשמרת...",
+ ServerCouldNotBuildCalloutError = "שגיאה: לשרת לא היתה אפשרות לבנות את הקריאה, בגלל טעות בקוד.",
+ PersonHasPassedOut = "~r~התראה ~w~נראה שהאדם איבד את ההכרה!",
+ PersonIsTakingOff = "~r~התראה ~w~האדם ממריא!",
+ PersonIsAgressive = "~r~התראה ~w~האדם נראה תוקפני!",
+ PersonIsSurrendering = "~r~התראה ~w~האדם נכנע!",
+ PedCannotEnterVehicle = "אין אפשרות לאדם להיכנס לרכב הקרוב ביותר.",
+ NoNearbyVehicleFound = "לא נמצא רכב קרוב, לקרב את האדם לרכב...",
+ PulloverModeExplanation = "התקרבו לרכב שאתם רוצים לעצור...",
+ PulloverInitiatedRear = "הרכב יישאר מאחוריכם, תימצא מקום מתאים לעצור בו.",
+ PulloverInitiatedFront = "הרכב יישאר לפניכם, תימצא מקום מתאים לעצור בו.",
+ PulloverConcluded = "העצירה השיגרתית סוימה",
+ PulloverFailedToLockInVehicle = "כשל במציאת רכב לעצור בצד, אנא נסה שוב...",
+ PulloverManualSteeringEnabled = "בקרת סוודר ידנית מופעלת...",
+ PulloverManualSteeringDisabled = "בקרת סוודר ידנית מושבתת, הרכב יעקוב אחריך שוב...",
+ RequestCooldownActive = "אנא המתן לפחות 3 שניות לפני שתנסה לבקש או לבטל בקשה...",
+ AlreadyAttachedToCallout = "אתה כבר מחובר לקריאה אחרת...",
+ DeclinedCalloutOffer = "דחית את הבקשה להגיב לקריאה.",
+ NoSpawnPointAvailableForNPC = "לא נמצא מיקום מתאים לזימון יחידת הגיבוי המבוקשת באזור זה.",
+ CantCancelBackup = "לא ניתן לבטל גיבוי זה עוד.",
+ NotEnoughSpaceBehindAmbulance = "לא נמצא מקום מתאים באחוז האחורי של האמבולנס כדי לספק או להסתיר את הבנקרד.",
+ ImpoundVehicleSubtitle = "כדי להטיל את הרכב שלך, סע למקום ההחזקה שסימנתי עבורך.",
+ ImpoundVehicleLeaveSubtitle = "נא לצאת מהרכב ולהגיע לצד השני.",
+ ImpoundVehicleNotAllowedSubtitle = "הרכב הזה אסור לכאן...",
+ CannotDoThisWhilePedIsInAVehicle = "אין אפשרות לעשות זאת בזמן שהאדם נמצא ברכב...",
+ OffDuty = "לא בתפקיד",
+ OnDuty = "בתפקיד",
+ SuspectIsTryingToStealAVehicle = "החשוד נוסע ברכב ונוסע ברכב!",
+ TrafficStop = "עצירת תנועה",
+
+ -- Dispatch
+ DispatchMessage = "הודעת מוקדן",
+ NextDispatchMessage = "הודעה הבאה",
+ Seconds = "שניות",
+ Loading = "טוען",
+ None = "שום דבר.",
+ TrackUnitProposal = "עקוב אחר יחידה זו",
+ EmergencyCall = "שיחת חירום",
+ Caller = "מתקשר:",
+ CallDescription = "תיאור:",
+ Location = "מיקום:",
+ Postal = "מיקוד:",
+ CalloutUnitsRequired = "יחידות נדרשות:",
+ UnitResponse = "מגיב למצב חירום.",
+ UnitDetached = "התנתק משיחת החירום שלו.",
+ UnitArrived = "הגיע לאירוע.",
+ UnitOnShift = "התחיל את המשמרת.",
+ UnitOffShift = "סיים את המשמרת",
+ DispatchNote = "הודעת המוקדן:",
+ DispatchNoteText = "מיקום GPS יסומן במפה שלך.",
+ DispatchNoteResponseText = "הכנס גיבוי אם יש צורך...",
+ CompleteCalloutFooterText = "לחץ על הלחצן כדי להשלים את הקריאה:",
+ TimeRemainingToAcceptCallout = "הזמן שנותר כדי לקבל את הקריאה:",
+ HasRequestedPolice = "ביקש שישלחו ניידת משטרה לחשוד.",
+ HasRequestedAmbulance = "הזמין אמבולנס.",
+ HasRequestedTaxi = "הזמין מונית.",
+ HasRequestedTow = "ביקש יחידת הובלה של רכב.",
+ HasRequestedRoadService = "ביקש יחידת שירות כבישים.",
+ HasRequestedCoroner = "ביקש עובדי זק\"א למיקום.",
+ HasRequestedAnimalRescue = "ביקש יחידת חילוץ בעלי חיים.",
+ HasRequestedMechanic = "ביקש יחידת מכונית למיקום.",
+ HasRequestedFire = "ביקש יחידת כבאות למיקום.",
+ DispatchMessagesEnabled = "הודעות מוקדן הופעלו.",
+ DispatchMessagesDisabled = "הודעות מוקדן כובו.",
+
+ -- Tasks
+ InvolvedPedsRemaining = "האנשים המעורבים שנותרו:",
+ InvolvedVehsRemaining = "משימות ההובלה של הרכבים שנותרו:",
+ InvolvedObjsRemaining = "משימות שירות הכבישים שנותרו:",
+ InvolvedPropsRemaining = "משימות זק\"א שנותרו:",
+ ExtinguishAllFires = "כבה את כל השריפות.",
+ ClearAreaOfSmoke = "נקה את אזור מעשן.",
+
+ -- ERS Selection menu
+ Select = "בחר",
+ Cancel = "בטל",
+ SelectService = "בחר תפקיד",
+ Police = "משטרה",
+ Ambulance = "מד\"א",
+ Fire = "כבאות",
+ Tow = "גרירה",
+ PoliceDescription = "שומרי הצדק, מגינים באומץ.",
+ AmbulanceDescription = "גיבורים של ריפוי, מצילים חיים במהירות.",
+ FireDescription = "לוחמי אש חסרי פחד, נלחמים באומץ.",
+ TowDescription = "מצילים בצד הדרך, מספקים סיוע מהיר.",
+
+ -- Gear Selection menu
+ SelectGear = "בחר ציוד",
+
+ -- Radial menu
+ RadialMenuInstructionTitle = "בחר יחידת גיבוי זמינה...",
+ ExitRadialMenuInstruction = "לחץ כדי לצאת מהתפריט...",
+ RequestPoliceTransportIcon = "fa-solid fa-handcuffs", -- https://fontawesome.com/search?m=free&o=r
+ RequestPoliceTransportInstruction = "לחץ כדי לבקש או לבטל יחידת הובלה משטרתית עבור החשוד הקרוב ביותר...",
+ RequestAmbulanceIcon = "fa-solid fa-truck-medical",
+ RequestAmbulanceInstruction = "לחץ כדי לבקש או לבטל יחידת אמבולנס לטיפול בפצועים באזור...",
+ RequestTowIcon = "fa-solid fa-car-burst",
+ RequestTowInstruction = "לחץ כדי לבקש או לבטל יחידת הובלת רכב לאיסוף הרכב הקרוב ביותר...",
+ RequestTaxiIcon = "fa-solid fa-taxi",
+ RequestTaxiInstruction = "לחץ כדי לבקש או לבטל מונית עבור האדם הקרוב ביותר...",
+ RequestRoadServiceIcon = "fa-solid fa-broom",
+ RequestRoadServiceInstruction = "לחץ כדי לבקש או לבטל יחידת שירות כבישים כדי לנקות את הכבישים הסמוכים...",
+ RequestCoronerIcon = "fa-solid fa-book-skull",
+ RequestCoronerInstruction = "לחץ כדי לבקש או לבטל תגובה של יחידת זק\"א כדי לאסוף את שקיות המתים באזור...",
+ RequestAnimalRescueIcon = "fa-solid fa-paw",
+ RequestAnimalRescueInstruction = "לחץ כדי לבקש או לבטל יחידת חילוץ בעלי חיים לטיפול בבעלי חיים סמוכים...",
+ RequestMechanicIcon = "fa-solid fa-wrench",
+ RequestMechanicInstruction = "לחץ כדי לבקש או לבטל יחידת מכונית למיקום...",
+ RequestFireIcon = "fa-solid fa-fire-extinguisher",
+ RequestFireInstruction = "לחץ כדי לבקש או לבטל יחידת כבאות למיקום...",
+ RequestedUnitStrugglingToReach = "היחידה המבוקשת נאבקת להגיע למיקום שלך... הם עלולים להתבטל.",
+
+ -- Pursuit Radial Menu
+ PursuitRadialMenuInstructionTitle = "בחר יחידת גיבוי למרדף...",
+ PursuitRadialMenuInstruction = "לחץ כדי לבקש יחידות גיבוי למרדף...",
+ RequestLightBackupIcon = "fa-solid fa-motorcycle",
+ RequestLightBackupInstruction = "לחץ כדי לבקש יחידות גיבוי קלות למרדף...",
+ RequestMediumBackupIcon = "fa-solid fa-car-on",
+ RequestMediumBackupInstruction = "לחץ כדי לבקש יחידות גיבוי בינוניות למרדף...",
+ RequestHeavyBackupIcon = "fa-solid fa-truck-moving",
+ RequestHeavyBackupInstruction = "לחץ כדי לבקש יחידות גיבוי כבדות למרדף...",
+ RequestAirBackupIcon = "fa-solid fa-helicopter",
+ RequestAirBackupInstruction = "לחץ כדי לבקש תמיכה אווירית למרדף...",
+ RequestArmyBackupIcon = "fa-solid fa-person-military-rifle",
+ RequestArmyBackupInstruction = "לחץ כדי לבקש תמיכה צבאית למרדף...",
+
+ -- Pursuit notifications
+ ActivePursuit = "מרדף פעיל",
+ NotInPursuitMode = "אינך במצב מרדף...",
+ CancellingPreviousRequestForBackup = "בקשת תמיכה למרדף נגמרה...",
+ BackupAlreadyRequested = "תמיכה למרדף כבר בקשה, בקש לבטל את הבקשה על ידי בחירת אותו סוג של יחידות תמיכה שוב...",
+ PursuitBackupTooFarAway = "היחידה (או היחידות) של תמיכה למרדף נמצאת רחוקה מדי, הבקשה נגמרה...",
+ PursuitCancelledReasonPersonDied = "המרדף נגמר. האדם שהתפקד נפטר.",
+ PursuitCancelledReasonLostTarget = "המרדף נגמר, כי הוא נפטר.",
+ PursuitCancelledReasonPersonVanished = "המרדף נגמר... האדם שהתפקד נפטר.",
+ PursuitCancelledReasonVehicleVanished = "המרדף נגמר... הרכב שהתפקד נפטר.",
+ PursuitCancelledReasonPersonCaught = "המרדף נגמר... האדם שהתפקד נפטר.",
+ PursuitHotkeyFocus = "התמקדות",
+ PursuitHotkeyBackup = "גיבוי",
+ PursuitCancelledReasonNoLongerCapableOfPursuing = "המרדף נגמר... אינך מסוגל להמשיך למרדף את האדם.",
+
+ -- Ambulance
+ AmbulanceAlreadyEnroute = "כבר ביקשת אמבולנס...",
+ RequestingAmbulance = "מבקש אמבולנס...",
+ AmbulanceDone = "האמבולנס עוזב את המקום.",
+ NoAmbulanceEnroute = "אין אמבולנס בדרך.",
+ AmbulanceCancelled = "בקשת האמבולנס בוטלה.",
+ NoPeopleFoundAmbulance = "לא נמצאו אנשים שיספקו טיפול/הובלה עבורם...",
+ AllAmbulancesOccupied = "כל יחידות האמבולנס תפוסות. נסה שוב בעוד כמה שניות...",
+ AmbulanceArrived = "האמבולנס הגיע",
+ AmbulanceEnroute = "אמבולנס נשלח והוא בדרך...",
+ NextMedicTask = "החובש הוקצה לטפל באדם שהוקצה.",
+
+ -- Police
+ PoliceAlreadyEnroute = "כבר ביקשת תחבורה משטרתית...",
+ RequestingPolice = "מבקש תחבורה משטרתית.",
+ PoliceDone = "תחבורה משטרתית עוזבת את המקום.",
+ NoPoliceEnroute = "אין תחבורה משטרתית בדרך...",
+ PoliceCancelled = "בקשת התחבורה המשטרתית בוטלה...",
+ NoPeopleFoundPolice = "לא נמצאו אנשים לספק תחבורה עבור ...",
+ AllPoliceOccupied = "כל יחידות המשטרה תפוסות. נסה שוב בעוד כמה שניות...",
+ PoliceArrived = "התחבורה המשטרתית הגיעה.",
+ PoliceEnroute = "תחבורה משטרתית נשלחה וכבר בדרכה אליך...",
+ NextPoliceTask = "קצין המשטרה הוקצה לאסוף אדם.",
+
+ -- Taxi
+ TaxiAlreadyEnroute = "כבר ביקשת מונית.",
+ RequestingTaxi = "מבקש מונית לאדם הקרוב ביותר.",
+ TaxiDone = "האדם נאסף על ידי נהג המונית והם כבר עזבו",
+ NoTaxiEnroute = "אין מונית בדרך...",
+ TaxiCancelled = "בקשת המונית בוטלה.",
+ NoPeopleFound = "לא נמצאו אנשים לספק תחבורה עבורם...",
+ AllTaxisOccupied = "כל המוניות תפוסות. נסה שוב בעוד כמה שניות...",
+ TaxiArrived = "המונית הגיעה.",
+ TaxiEnroute = "מונית נשלחה והיא בדרך...",
+ NextTaxiTask = "נהג המונית הוקצה לאסוף אדם.",
+
+ -- Tow
+ TowAlreadyEnroute = "כבר ביקשת גרירת רכב.",
+ RequestingTow = "מבקשים גרירת רכב לרכב הקרוב ביותר.",
+ TowDone = "הרכב נלקח על ידי משאית הגרר והם עכשיו עוזבים.",
+ NoTowEnroute = "אין גרירת רכב בדרך...",
+ RequestingTowButVehicleOccupied = "כדי לבקש גרירת רכב, הרכב חייב להיות ריק...",
+ TowCancelled = "בקשת גרירת הרכב בוטלה.",
+ NoVehiclesFound = "לא נמצאו רכבים לצורך גרירה...",
+ AllTowOccupied = "כל יחידות הגרירה תפוסות. נסה שוב בעוד מספר שניות, בבקשה...",
+ TowArrived = "גרירת הרכב הגיעה.",
+ TowEnroute = "יחידת גרירת רכב נשלחה והיא בדרך...",
+ NextTowTask = "נהג משאית הגרר הוקצה לקחת רכב.",
+
+ -- Road Service
+ RoadServiceAlreadyEnroute = "כבר ביקשת שירות דרך.",
+ RequestingRoadService = "מבקשים שירות דרך למשימה הקרובה ביותר.",
+ RoadServiceDone = "ההריסות נוקו, יחידת שירות הדרך עוזבת את המקום.",
+ NoRoadServiceEnroute = "אין שירות דרך בדרך...",
+ RoadServiceCancelled = "בקשת שירות הדרך בוטלה.",
+ NoRoadServiceTaskFound = "לא נמצאה משימה לספק שירות דרך...",
+ AllRoadServiceOccupied = "כל יחידות שירות הדרך תפוסות. נסה שוב בעוד מספר שניות...",
+ RoadServiceArrived = "שירות הדרך הגיע.",
+ RoadServiceEnroute = "יחידת שירות דרך נשלחה והיא בדרך...",
+ NextRoadServiceTask = "העובד של שירות הדרך הוקצה לנקות את ההריסות באזור, כדי לפנות את הדרך.",
+
+ -- Coroner
+ CoronerAlreadyEnroute = "כבר ביקשת זק\"א.",
+ RequestingCoroner = "מבקשים זק\"א למשימה הקרובה ביותר.",
+ CoronerDone = "הגופות פונו מהמקום ויועברו למכון.",
+ NoCoronerEnroute = "אין זק\"א בדרך...",
+ CoronerCancelled = "בקשת זק\"א בוטלה.",
+ NoCoronerTaskFound = "לא נמצאה משימה לספק זק\"א...",
+ AllCoronerOccupied = "כל יחידות זק\"א תפוסות. נסה שוב בעוד מספר שניות, בבקשה...",
+ CoronerArrived = "זק\"א הגיע.",
+ CoronerEnroute = "זק\"א נשלח והוא בדרך...",
+ NextCoronerTask = "זק\"א הוקצה לאסוף את שקיות הגופות באזור.",
+
+ -- Animal Rescue
+ AnimalRescueAlreadyEnroute = "כבר ביקשת חילוץ בעלי חיים.",
+ RequestingAnimalRescue = "מבקשים חילוץ בעלי חיים לבעלי החיים הקרובים.",
+ AnimalRescueDone = "בעלי החיים נלקחו מהמקום.",
+ NoAnimalRescueEnroute = "אין יחידת חילוץ בעלי חיים בדרך...",
+ AnimalRescueCancelled = "בקשת חילוץ בעלי חיים בוטלה.",
+ NoAnimalRescueTaskFound = "לא נמצאה משימה לספק חילוץ בעלי חיים...",
+ AllAnimalRescueOccupied = "כל יחידות חילוץ בעלי החיים תפוסות. נסה שוב בעוד מספר שניות, בבקשה...",
+ AnimalRescueArrived = "יחידת חילוץ בעלי החיים הגיעה.",
+ AnimalRescueEnroute = "חילוץ בעלי חיים נשלח והוא בדרך...",
+ NextAnimalRescueTask = "חילוץ בעלי החיים הוקצה לטפל בבעל חיים שהוקצה.",
+
+ -- Mechanic
+ MechanicAlreadyEnroute = "כבר ביקשת מכונית.",
+ RequestingMechanic = "מבקשים מכונית למיקום...",
+ MechanicDone = "המכונית עוזבת את המקום.",
+ NoMechanicEnroute = "אין מכונית בדרך...",
+ MechanicCancelled = "בקשת המכונית בוטלה.",
+ NoMechanicTaskFound = "לא נמצאה משימה לספק מכונית...",
+ AllMechanicOccupied = "כל יחידות המכונית תפוסות. נסה שוב בעוד מספר שניות, בבקשה...",
+ MechanicArrived = "מכונית הגיעה.",
+ MechanicEnroute = "מכונית נשלחה והיא בדרך...",
+
+ -- Fire
+ FireAlreadyEnroute = "כבר ביקשת כבאות.",
+ RequestingFire = "מבקשים כבאות למשימה הקרובה ביותר.",
+ FireDone = "הכבאות עוזבות את המקום.",
+ NoFireEnroute = "אין כבאות בדרך...",
+ FireCancelled = "בקשת הכבאות בוטלה.",
+ NoFireTaskFound = "לא נמצאה משימה לספק כבאות...",
+ AllFireOccupied = "כל יחידות הכבאות תפוסות. נסה שוב בעוד מספר שניות, בבקשה...",
+ FireArrived = "כבאות הגיעה.",
+ FireEnroute = "כבאות נשלחה והיא בדרך...",
+ NextFireTask = "יחידת כבאות הוקצה לטפל בבעל חיים שהוקצה.",
+ NoFireInArea = "אין כבאות בקרבת מקום...",
+
+ -- מחסום מסמרים
+ SpikestripAlreadyDeployed = "כבר פרסת מחסום מסמרים...",
+ PutAwaySpikestrip = "אחסן את מחסום המסמרים",
+ TakeOutSpikestrip = "הוצא את מחסום המסמרים",
+ SpikestripDeployed = "מחסום המסמרים נפרס",
+ SpikestripPickedUp = "מחסום המסמרים נאסף",
+ SpikestripRemoved = "מחסום המסמרים הוסר",
+ ToGrabOrPutAwaySpikestripFromVehicle = "כדי לקחת או לאחסן מחסום מסמרים מהרכב/לרכב",
+ ToDeployOrPickupSpikestrip = "כדי לפרוס או לאסוף מחסום מסמרים",
+ FailedToGrabSpikestrip = "נכשל בקחת מחסום מסמרים...",
+
+ -- Ped Interaction
+ YouSay = "אתה אומר",
+ Press = "תלחץ",
+ ToInteract = "כדי לתקשר עם האדם הקרוב",
+ ToInteractImpound = "לקיים אינטראקציה עם האחראי על מגרש ההחזקה",
+ ToInteractGear = "לקיים אינטראקציה עם האחראי על הציוד",
+ ToPerformCPR = "כדי לתקשר עם הנפגע בקרבת מקום",
+ ToUseStretcherVeh = "לקחת או להכניס את האלונקה מהרכב",
+ ToCleanupObject = "כדי לנקות את כל ההריסות בקרבת מקום",
+ StopInteraction = "סיים את השיחה והורה לעזוב",
+ ExitInteraction = "יציאה מהאינטרקציה",
+ SendToCustody = "שלח למעצר",
+ PersonTakenIntoCustody = "האדם נלקח למעצר.",
+ NoCustodyCenterNearby = "אין מרכז מעצרים בקרבת מקום.",
+ SuspectArrested = "~b~החשוד נעצר",
+ InteractionOptions = "אפשרויות אינטראקציה...",
+ Greet = "להגיד שלום",
+ GreetExplanation = "להגיד שלום לאדם שאיתו אתם נמצאים באינטראקציה.",
+ AskForId = "לבקש ת.ז",
+ AskForIdExplanation = "בקש את תעודת הזהות של האדם.",
+ Question = "שאלה",
+ QuestionExplanation = "שאל את האדם שאיתו אתם נמצאים באינטראקציה.",
+ Breathalyze = "ינשוף",
+ BreathalyzeExplanation = "בצע בדיקת אלכוהול.",
+ DrugTest = "בדיקת סמים",
+ DrugTestExplanation = "בצע בדיקת ספוגית סמים, כדי לזהות האם האדם מסומם.",
+ Warn = "אזהרה",
+ WarnExplanation = "תן לאדם אזהרה.",
+ Fine = "דוח/קנס",
+ FineExplanation = "תן לאדם דוח/קנס.",
+ Grab = "לתפוס",
+ GrabExplanation = "תפוס את האדם.",
+ GetOut = "לצאת",
+ GetOutExplanation = "הורה לאדם לצאת מהרכב.",
+ AskToFollow = "בוא אחרי",
+ AskToFollowExplanation = "תגיד לאדם לעקוב אחריך.",
+ AskToWait = "חכה כאן",
+ AskToWaitExplanation = "תגיד לאדם לחכות כאן.",
+ HandsUp = "ידיים למעלה",
+ HandsUpExplanation = "הורה לאדם להרים את ידיו.",
+ Search = "חיפוש",
+ SearchExplanation = "חפש את בגדיו של האדם.",
+ Cuff = "לאזוק",
+ CuffExplanation = "לעצור את האדם על ידי אזיקת ידיהם.",
+ PutInVehicle = "שים ברכב",
+ PutInVehicleExplanation = "בקש מהאדם להיכנס לרכב הקרוב ביותר.",
+ PersonalDetails = "פרטים אישיים (תעודת זהות)",
+ FullName = "שם מלא:",
+ DOB = "תאריך לידה:",
+ DocumentNumber = "מספר מסמך:",
+ Nationality = "לאום:",
+
+ DatabaseCheck = "בדיקה במאגר הנתונים של המשטרה",
+ RunningDatabaseCheck = "סורק דרך מסד הנתונים...",
+ DatabaseCheckResults = "נמצאו ערכי מסד נתונים",
+ Address = "כתובת:",
+ DriversLicense = "רשיון/ות:",
+ BikeLicense = "רשיון מונית:",
+ BoatLicense = "רשיון ספינה:",
+ TruckLicense = "רשיון רכב משא:",
+ PilotLicense = "רשיון ספינה שמש:",
+ Warrants = "צו/ים:",
+ FlagsOrMarkers = "סימון/ים:",
+
+ ProfilePicture = "תמונה:",
+ FirstName = "שם פרטי:",
+ LastName = "שם משפחה:",
+ Gender = "מגדר:",
+ Email = "דוא\"ל:",
+ PhoneNumber = "מספר טלפון:",
+ Country = "מדינה:",
+ State = "מחוז/אזור:",
+ City = "עיר:",
+ PostalCode = "מיקוד:",
+ AddressType = "סוג כתובת:",
+ Licenses = "רשיונות:",
+
+ -- Warrants
+ armed_and_dangerous = "חמוש ומסוכן",
+ assault = "תקיפה",
+ burglary = "פריצה",
+ drug_related = "עבירות סמים",
+ gang_affiliation = "קשר לכנופיה",
+ homicide = "רצח",
+ kidnapping = "חטיפה",
+ mental_health_issues = "בעיות נפשיות",
+ sex_offense = "עבירות מין",
+ terrorism = "טרור",
+ theft = "גניבה",
+ traffic_violation = "עבירת תנועה",
+ wanted_person = "אדם מבוקש",
+ other = "אחר, ראה תיאור...",
+ active_warrant = "צו מעצר פעיל",
+
+ StopGrabbingInstruction = "לחצ/י ~INPUT_CELLPHONE_CANCEL~ כדי לשחרר את האדם.",
+ CannotInteractWithThisNPC = "אינך יכול לתקשר עם האדם הזה...",
+ GrabWhenNotCuffedResponse = "תרים את הידיים שלך ממני! תצטרך לעצור אותי קודם...",
+ PersonAlreadyInteracting = "האדם הזה כבר עוסק במשהו...",
+ PersonAlreadyBeingEscorted = "האדם הזה כבר מלווה...",
+ ThisPersonIsCuffed = "האדם הזה אזוק...",
+ AlreadyPerformingCPR = "אתה כבר מבצע החייאה...",
+ AlreadyCleaningUpObject = "אתה כבר מנקה אובייקט...",
+ NoPedFoundToPerformCPROn = "לא נמצא אדם מתאים לביצוע החייאה...",
+ CPRSuccess = "האדם כבר מרגיש טוב יותר. עבודה טובה!",
+ CPRFail = "נראה ש... אוי לא, נראה שהאדם הפסיק לנשום שוב...",
+ UnableToPerformCPR = "לא ניתן לבצע החייאה מכיוון שמישהו אחר כבר ניסה זאת לפניך...",
+ UnableToSendPersonAway = "אינך יכול לשלוח את האדם לדרכו, עליך לשחרר אותו קודם...",
+ WorkOnBleeding = "מיישם חסם עורקים / חותם חזה / גזה לפצע בגלל דימום מסיבי...",
+ WorkOnBleedingAlreadyDone = "חסם עורקים / חותם חזה / גזה לפצע כבר הושם על ידי מישהו אחר, בגלל דימום מסיבי...",
+ NotBleeding = "האדם אינו מדמם באופן מסיבי.",
+ WorkOnAirway = "מנקה את פיו של האדם בניסיון לפתור חסימת דרכי נשימה...",
+ WorkOnAirwayAlreadyDone = "חסימת דרכי הנשימה שהייתה לאדם הזה כבר נפתרה על ידי מישהו אחר...",
+ NoAirwayObstructions = "לא נמצאו חסימות בדרכי הנשימה.",
+ WorkOnBreathing = "קצב הנשימה שלהם לא תקין, הם חייבים לבקר בבית חולים בהקדם...",
+ WorkOnBreathingAlreadyDone = "מישהו אחר קבע שקצב הנשימה שלהם לא תקין, הם חייבים לבקר בבית חולים בהקדם...",
+ NoBreathingProblems = "האדם נושם, אבל צריך להביא אותו לבית חולים בהקדם.",
+ WorkOnCirculation = "יש משהו לא בסדר ברצף פעימות הלב שלהם, הם חייבים לבקר בבית חולים בהקדם...",
+ WorkOnCirculationAlreadyDone = "מישהו אחר קבע שרצף פעימות הלב שלהם לא תקין, הם חייבים לבקר בבית חולים בהקדם...",
+ NoCirculationProblems = "האדם בעל קצב לב רגיל. עם זאת, הם חייבים לבקר בבית חולים בהקדם.",
+ PersonFeelsCold = "האדם מרגיש קר מאוד...",
+ PersonFeelsWarm = "האדם מרגיש חם מאוד...",
+ NoHypothermiaSigns = "לא זוהו סימני היפותרמיה.",
+ PersonFeelsColdAlreadyDetected = "מישהו אחר קבע שהאדם מרגיש קר מאוד...",
+ PersonFeelsWarmAlreadyDetected = "מישהו אחר קבע שהאדם מרגיש חם מאוד...",
+ NoHypothermiaSignsAlreadyDetected = "מישהו אחר קבע שאין סימני היפותרמיה...",
+ OrderedPedToTheirKnees = "הורית לאדם לרדת על ברכיו.",
+ OrderedPedToStandUp = "הורית לאדם לעמוד.",
+ PedIsDrunk = "הבדיקה מראה שהאדם חרג מהמגבלות החוקיות לשתיית אלכוהול בעת נהיגה.",
+ PedIsNotDrunk = "הבדיקה מראה שהאדם נמצא במגבלות החוקיות לשתיית אלכוהול בעת נהיגה.",
+ PedIsUnderInfluenceOfDrugs = "הבדיקה מראה שהאדם תחת השפעת סמים.",
+ PedIsNotUnderInfluenceOfDrugs = "הבדיקה מראה שהאדם אינו תחת השפעת סמים.",
+ YoureNotAPoliceOfficer = "אתה לא נראה כמו שוטר...",
+ InTheWrongService = "אתה לא במקום הנכון, אתה יודע...",
+ AskForGear = "בקש ציוד...",
+ GetOutWhenNotInAVehicleResponse = "האדם לא נמצא ברכב...",
+
+ -- qb-target / ox-target
+ VehSpeakTo = "דבר אל",
+ VehAssist = "עזרה בפצע",
+ VehDriver = "נהג",
+ VehFrontPassenger = "נוסע מקדימה",
+ VehRearPassenger = "נוסע מאחור",
+ VehPassenger = "נוסע",
+
+ -- Dead ped Interaction
+ IdentifyDeadPed = "מזהה מת",
+ DragPed = "מושך מהרכב",
+ CheckMassiveBleeding = "דימום",
+ CheckAirway = "דרכי נשימה",
+ CheckBreathing = "נשימה",
+ CheckCirculation = "מחזור הדם",
+ CheckHypothermia = "היפותרמיה",
+ PerformCPR = "בצע החייאה",
+ PutOnStretcher = "הנח על אלונקה",
+ TakeOffStretcher = "הסר מהאלונקה",
+ PutInBodyBag = "שים בגופן מת",
+
+ IdentifyDeadPedExplanation = "בדוק אם האדם מת",
+ DragPedExplanation = "מושך את האדם מהרכב",
+ CheckMassiveExplanation = "בדוק אם יש דימומים מסיביים",
+ CheckAirwayExplanation = "בדוק אם יש חסימות בדרכי הנשימה",
+ CheckBreathingExplanation = "בדוק אם האדם עדיין נושם ובאיזה קצב",
+ CheckCirculationExplanation = "בדוק אם לאדם יש דופק ובאיזה קצב",
+ CheckHypothermiaExplanation = "בדוק מהי טמפרטורת הגוף של האדם",
+ PerformCPRExplanation = "התחל בביצוע החייאה על האדם",
+ PutOnStretcherExplanation = "הנח את האדם על אלונקה קרובה",
+ TakeOffStretcherExplanation = "הסר את האדם מהאלונקה",
+ PutInBodyBagExplanation = "שים את האדם בגופן מת",
+
+ -- Stretcher
+ MustBeOnShiftToDoThis = "אתה לא במשמרת...",
+ NoNearbyStretcherFound = "לא נמצאה אלונקה בקרבת מקום...",
+ StretcherStillInUse = "האלונקה הזו עדיין בשימוש...",
+ StretcherAlreadyInUse = "האלונקה הזו כבר בשימוש...",
+ ReleasedStretcher = "שחררת את האלונקה.",
+ StillUsingStretcher = "אתה עדיין משתמש באלונקה...",
+ NotUsingStretcher = "אתה לא משתמש באלונקה...",
+ LowerTheNearbyStretcher = "וודא שהנמכת אלונקה בקרבת מקום...",
+ StretcherAlreadyOccupied = "האלונקה הזו כבר תפוסה...",
+ ThisPersonIsNotOnAStretcher = "האדם הזה לא נראה שהוא על אלונקה...",
+ CannotDoThisWhenPedIsOnStretcher = "לא ניתן לבצע את הפעולה הזו כשהאדם על אלונקה...",
+ StretcherAlreadySpawnedForVehicle = "אלונקה כבר הוזמנה עבור הרכב הזה...",
+ AmbulanceAlreadyHasAStretcherInside = "לא ניתן לתקשר עם האמבולנס כי אתה דוחף אלונקה והרכב כבר מכיל אלונקה...",
+ VehicleMustBeEmptyForStretcherInteraction = "הרכב חייב להיות ריק לפני ביצוע אינטראקציה עם אלונקה...",
+ CantInteractWithStretcherInsideVehicle = "לא ניתן לתקשר עם אלונקה בתוך הרכב...",
+ PlacedStretcherIntoAVehicle = "הכנסת את האלונקה לרכב.",
+ TakenStretcherFromAVehicle = "הוצאת את האלונקה מהרכב.",
+ PersonTransferredToHospital = "העברת את האדם לעובדי בית החולים.",
+ PersonSaved = "~b~הקורבן ניצל!",
+ DropOffPersonAtHospital3DText = "לחץ ~o~ENTER ~w~להעביר את האדם לצוות של בית החולים הזה",
+ ThereIsStretcherOnTheGroundNearby = "יש אלונקה בקרבת המקום, נא לקחת אותה ולשים אותה לרכב.",
+ SomeoneElseHasNetworkOwnershipOverTheStretcher = "מישהו אחר מחזיק את האלונקה. הם חייבים להזיז אותה כדי שתוכל להתקשר אליה.",
+ SomeoneElseHasNetworkOwnershipOverTheVehicle = "מישהו אחר מחזיק את הרכב. הם חייבים להזיז אותו כדי שתוכל להתקשר אליו.",
+ GetOnOrOffStretcher = "לקחת / לשים מחוץ לאלונקה",
+
+ -- Inventory
+ Inventory = "נמצאו פריטים באינוונטורי...",
+
+ -- אינטראקציות עם רכבים
+ VehicleDetails = "פרטי הרכב",
+ VehiclePlate = "מספר רישוי",
+ VehicleModel = "דגם הרכב",
+ VehicleOwner = "בעל הרכב",
+ VehicleColor = "צבע הרכב",
+ VehicleColorSecondary = "צבע משני של הרכב",
+ VehicleBuildYear = "שנת ייצור",
+ VehicleTax = "מס רכב",
+ VehicleMOT = "טסט",
+ VehicleInsurance = "ביטוח רכב",
+ VehicleStolen = "דווח כגנוב",
+ VehicleStolenDescription = "רכב גנוב",
+ VehicleBolo = "התראת BOLO פעילה",
+ VehicleBoloDescription = "תיאור ה-BOLO",
+ Paid = "שולם",
+ NotPaid = "לא שולם",
+ Valid = "בתוקף",
+ Invalid = "לא בתוקף",
+ Passed = "עבר",
+ Failed = "נכשל",
+ SearchThe = "חפש ב ",
+ FoundItem = "נמצא:",
+ ItemWillBeConfiscatedAutomaticallyIn10Seconds = "הפריט יוחרם אוטומטית בעוד 10 שניות...",
+ NothingFoundInThisPartOfTheVehicle = "לא נמצאו פריטים בחלק זה של הרכב...",
+ NotCloseEnoughToVehicle = "אתה לא קרוב מספיק לרכב שאתה רוצה לחפש...",
+ NotCloseEnoughToVehicleSection = "אתה לא קרוב מספיק לחלק של הרכב שאתה רוצה לחפש...",
+ VehicleIsNotEmpty = "הרכב אינו ריק...",
+ VehicleDataTimeout = "לא ניתן לחפש ברכב זה כעת בגלל שפעולת השרת נכשלה, נסה שוב מאוחר יותר...",
+
+ -- Behaviour State
+ NeutralLabel = "נראה כמו שגרת",
+ RelaxedLabel = "נראה כמו שגרת",
+ BusyLabel = "נראה כמו שגרת",
+ CheerfulLabel = "נראה כמו שגרת",
+ FriendlyLabel = "נראה כמו שגרת",
+ IrritatedLabel = "נראה כמו שגרת",
+ StressedLabel = "נראה כמו שגרת",
+ WorriedLabel = "נראה כמו שגרת",
+ ConfusedLabel = "נראה כמו שגרת",
+ SuspiciousLabel = "נראה כמו שגרת",
+ DeliriousLabel = "נראה כמו שגרת",
+ ParanoidLabel = "נראה כמו שגרת",
+
+ -- Questioning
+ ExitConversation = "אני חושב שאני יודע מספיק... (צא מהשיחה)",
+ YouHaveAskedAllQuestions = "שאלת את כל השאלות הזמינות לאינטראקציה זו.",
+
+ -- Answering questions
+ ConversationHistory = "היסטוריית שיחה",
+ QDriversLicense = "רכב",
+ QBikeLicense = "אופנוע",
+ QBoatLicense = "סירה",
+ QTruckLicense = "משאית",
+ QPilotLicense = "מטוס",
+ PrefixDrunk = "היק!",
+ SuffixDrunk = "**גיהוק**",
+ PrefixDrugged = "אה...",
+ SuffixDrugged = "**לועס**",
+ Sober = "פיכח",
+ Drunk = "שיכור",
+ High = "מסטול",
+ Stoned = "מסומם",
+ BleedingSomewhere = "מדמם איפשהו",
+ TroubleWithBreathing = "מתקשה בנשימה",
+ SomethingStuckInThroat = "משהו תקוע בגרון",
+ Warm = "חם מדי",
+ Cold = "קר",
+ Healthy = "בריא",
+ Dizzy = "סחרחר",
+ Extrasunny = "שמשי",
+ Overcast = "מעונן",
+ Rain = "גשם",
+ Foggy = "ערפילי",
+ Smog = "ערפיח",
+ Clouds = "עננים",
+ Snow = "שלג",
+ Snowlight = "שלג קל",
+ Xmas = "שלג כבד",
+ Halloween = "חושך",
+ Blizzard = "סופת שלג",
+ RainHalloween = "חושך גשום",
+ SnowHalloween = "חושך מושלג",
+ Thunder = "רעמים",
+ Clearing = "גשם קל",
+ Neutral = "מזג אוויר",
+
+ -- Hints
+ OrderOnKneesOrStandUpExplanation = "להורות לרדת לברכים / לעמוד.",
+ AcceptCallout = "לקבל את שיחת החירום.",
+ CompleteCallout = "לסיים את שיחת החירום.",
+ CuffExplanation = "לאזוק הקרוב ביותר אדם.",
+ PullOver = "לעצור בצד רכב.",
+ RadialMenuExplanation = "בקשות לגיבוי",
+ StopTrackingUnitExplanation = "עצור יחידת מעקב",
+ CannotTrackYourself = "אתה לא יכול לעקוב אחר עצמך.",
+ TargetNotOnACallout = "יחידה זו אינה נמצאת בקריאה פעילה, ולכן לא ניתן לאתר אותה...",
+
+ InputHelpText = "עליך להזין צבעי RGB או לציין צבע. [דוגמה: red | 255 0 0]",
+ WaitCooldown = "אתה צריך לחכות: הקולדאון עדיין פעיל...",
+ NoPermission = "אין לך רשות לעשות את זה.",
+ MustSetNumberValue = "שגיאה, עליך להוסיף ID של שחקן.",
+ CannotIdentifySize = "לא ניתן לזהות את הגודל הזה... נסה שוב",
+
+ CannotDoThisOnFoot = "אתה לא יכול לעשות את זה ברגל.",
+ CannotDoThisInAVehicle = "אי אפשר לעשות את זה ברכב.",
+ CannotDoThisAsPassenger = "אתה לא יכול לעשות את זה כנוסע של רכב ...",
+
+ UseMDTToToggleShift = "השתמש ב-MDT כדי להפעיל את המשמרת.",
+ CalloutsDisabled = "הקריאות שלך מכובות.",
+
+ Dispatch = "שליטה",
+ Responding = "התקבלה תגובה של היחידה לשיחת החירום האחרונה.",
+ ArriveAtScene = "היחידה שהתקבלה הגיעה לזירת האירוע.",
+ AmbulanceDispatched = "אמבולנס נשלח...",
+ PoliceTransportDispatched = "תחבורה משטרתית נשלחה...",
+ VehicleTransportDispatched = "הובלת רכב נשלחה...",
+ TaxiDispatched = "מונית נשלחה.",
+ TrackingUnit = "אתה עכשיו מעקב מיקום GPS של היחידה. מיקום זה מתעדכן כל עוד אתה עוקב.",
+ StoppedTrackingUnit = "הפסקת לעקוב אחר יחידה.",
+}
\ No newline at end of file
diff --git a/resources/night_ers/config/translations/nl.lua b/resources/night_ers/config/translations/nl.lua
new file mode 100644
index 000000000..80a7e0b45
--- /dev/null
+++ b/resources/night_ers/config/translations/nl.lua
@@ -0,0 +1,628 @@
+Config = Config or {}
+Config.Messages = Config.Messages or {}
+
+ --====================== Language ======================--
+
+Config.Messages['nl'] = {
+ ScriptInitialising = "Het script wordt nog geïnitieerd, even geduld aub...",
+ Yes = "Ja",
+ No = "Nee",
+ AreYouSureCompleteCallout = "Weet je zeker dat je de oproep wilt afronden?",
+ CompletingCalloutCannotBeUndone = "Het afronden van deze oproep kan niet ongedaan worden gemaakt.",
+ Controls = "Besturing",
+ Hint = "Hints",
+ HotKeys = "Sneltoetsen",
+ Explanation = "Uitleg",
+ Unknown = "Onbekend",
+ ToHideOrShow = "om te verbergen/tonen",
+ Aim = "Richt",
+ AimToOrderPedTextDrawing = "~p~'~w~E~p~'~w~ » Kniel ~p~/ ~w~Sta op ",
+ AimToOrderAnimalTextDrawing = "~p~'~w~E~p~'~w~ » Stop ~p~/ ~w~Laat los ",
+ GrabOrReleaseStretcher = "~p~'~w~E~p~'~w~ » Grijp ~p~/ ~w~Laat los",
+ RaiseOrLowerStretcher = "~p~' ~w~↑~p~ | ~w~↓~p~ '~w~ » Hef ~p~/ ~w~Verlaag",
+ ToggleHints = "Wist je dat je deze weergave kunt in- of uitschakelen?",
+ DisableHints = "Hints uitgeschakeld.",
+ EnableHints = "Hints ingeschakeld.",
+ DisabledCallouts = "Oproep aanbiedingen uitgeschakeld.",
+ EnabledCallouts = "Oproep aanbiedingen ingeschakeld.",
+ OnShift = "Je bent begonnen met je dienst",
+ OffShift = "Je hebt je dienst beëindigd",
+ NotOnShift = "Je bent niet op dienst.",
+ Postal = "Postcode",
+ StreetName = "Straatnaam",
+ RequiredUnits = "Benodigde eenheden",
+ ProvideBackupIfRequested = "Verleen bijstand indien gevraagd.",
+ Nearby = "in de buurt",
+ OfferedCalloutActiveOrAttachedToACallout = "Je kunt dit niet doen: Je hebt al een actieve oproep aanbieding of je bent al gekoppeld aan een oproep.",
+ CouldNotRequestCalloutCooldown = "Een oproep aanvraag of aanbieding werd geblokkeerd vanwege een cooldown. Probeer het later opnieuw...",
+ CouldNotRequestACallout = "Kon op dit moment geen oproep aanbieden (server was bezig), probeer het opnieuw...",
+ CouldNotRequestCallout = "Kon geen oproep aanbieden omdat je geen deel uitmaakt van een van de vereiste rollen/groepen om de oproep te ontvangen OF omdat er geen oproepen waren ingeschakeld (voor jouw dienst) (callouts_config.lua)...",
+ CalloutMarkedOnYourGPS = "De route naar de laatste oproep is gemarkeerd op je GPS.",
+ AcceptedCallout = "Je bent gekoppeld aan",
+ CancelCallout = "De oproep is geannuleerd.",
+ NotAbleToCancelCallout = "Je kunt de oproep op dit moment niet annuleren, probeer het over een paar seconden opnieuw...",
+ DetachedFromCallout = "Je eenheid is losgekoppeld van de laatste oproep.",
+ LastCalloutOfferExpired = "Andere eenheden konden de laatste noodoproep oplossen.",
+ NotAttachedToCallout = "Je kunt een oproep niet annuleren waar je niet aan gekoppeld bent.",
+ AnyUnitsAvailableToRespond = "Zijn er eenheden beschikbaar om te reageren?",
+ CancelUnitsBeforeGoingOffShift = "Je moet je verzoek om eenheden annuleren voordat je je dienst beëindigt...",
+ NoPermissionToGoOnShift = "Je hebt geen toestemming om op of van dienst te gaan...",
+ ServerCouldNotBuildCalloutError = "FOUT: De server kon de oproep niet opbouwen vanwege een fout in de code.",
+ PersonHasPassedOut = "~r~ALERT ~w~De persoon lijkt bewusteloos te zijn!",
+ PersonIsTakingOff = "~r~ALERT ~w~De persoon is aan het vluchten!",
+ PersonIsAgressive = "~r~ALERT ~w~De persoon lijkt agressief!",
+ PersonIsSurrendering = "~r~ALERT ~w~De persoon geeft zich over!",
+ PedCannotEnterVehicle = "De persoon kan het dichtstbijzijnde voertuig niet betreden.",
+ NoNearbyVehicleFound = "Geen nabijgelegen voertuig gevonden, breng de persoon dichter bij het voertuig...",
+ PulloverModeExplanation = "Kom dicht bij het voertuig dat je wilt laten stoppen...",
+ PulloverInitiatedRear = "Het voertuig blijft nu achter je rijden. Druk op U om handmatig sturen in te schakelen.",
+ PulloverInitiatedFront = "Het voertuig blijft nu voor je rijden. Druk op U om handmatig sturen in te schakelen.",
+ PulloverConcluded = "De stopactie is afgerond...",
+ PulloverFailedToLockInVehicle = "Kon geen voertuig vastzetten om te stoppen, probeer het opnieuw...",
+ PulloverManualSteeringEnabled = "Handmatige pullover-regeling ingeschakeld...",
+ PulloverManualSteeringDisabled = "Handmatige pull-over uitgeschakeld, het voertuig zal je nu weer volgen...",
+ RequestCooldownActive = "Wacht minimaal 5 seconden voordat je probeert een verzoek te doen of te annuleren...",
+ AlreadyAttachedToCallout = "Je bent al gekoppeld aan een andere melding...",
+ DeclinedCalloutOffer = "Je hebt de aanvraag tot het koppelen aan een melding afgewezen.",
+ NoSpawnPointAvailableForNPC = "De assistentie eenheden kunnen deze locatie niet bereiken.",
+ CantCancelBackup = "Je kunt het verzoek tot een extra eenheid niet meer annuleren.",
+ NotEnoughSpaceBehindAmbulance = "Er is niet genoeg ruimte achter de ambulance om de bancard uit te halen of in te laden.",
+ ImpoundVehicleSubtitle = "Rijdt naar de gemarkeerde locatie om je voertuig te deponeren.",
+ ImpoundVehicleLeaveSubtitle = "Ga uit het voertuig en ga opzij.",
+ ImpoundVehicleNotAllowedSubtitle = "Dat voertuig mag hier niet komen...",
+ CannotDoThisWhilePedIsInAVehicle = "Je kunt dit niet doen wanneer de persoon in een voertuig zit...",
+ OffDuty = "Buiten dienst",
+ OnDuty = "Op dienst",
+ SuspectIsTryingToStealAVehicle = "De verdachte probeert weg te gaan in een voertuig!",
+ TrafficStop = "Staandehouding van een voertuig",
+
+ -- Dispatch
+ DispatchMessage = "Bericht Meldkamer",
+ NextDispatchMessage = "Volgend bericht in",
+ Seconds = "seconden",
+ Loading = "Laden",
+ None = "Geen.",
+ TrackUnitProposal = "Volg deze eenheid",
+ EmergencyCall = "112 Melding",
+ Caller = "Melder:",
+ CallDescription = "Melding:",
+ Location = "Locatie:",
+ Postal = "Postcode:",
+ CalloutUnitsRequired = "Benodigde eenheden:",
+ UnitResponse = "reageert op een noodsituatie.",
+ UnitDetached = "heeft zich losgekoppeld van zijn melding.",
+ UnitArrived = "is aangekomen bij het incident.",
+ UnitOnShift = "is zijn dienst begonnen.",
+ UnitOffShift = "heeft zijn dienst beëindigd.",
+ DispatchNote = "Extra informatie:",
+ DispatchNoteText = "GPS zal op je kaart worden gemarkeerd.",
+ DispatchNoteResponseText = "Verleen bijstand indien nodig...",
+ CompleteCalloutFooterText = "Druk op de knop om de oproep af te ronden:",
+ TimeRemainingToAcceptCallout = "Overgebleven tijd om de oproep te accepteren:",
+ HasRequestedPolice = "heeft politie transport aangevraagd voor een verdachte.",
+ HasRequestedAmbulance = "heeft een ambulance eenheid aangevraagd.",
+ HasRequestedTaxi = "heeft een taxi aangevraagd.",
+ HasRequestedTow = "heeft een sleepwagen aangevraagd.",
+ HasRequestedRoadService = "heeft een wegenservice eenheid aangevraagd.",
+ HasRequestedCoroner = "heeft een lijkschouwer aangevraagd om naar hun locatie te komen.",
+ HasRequestedAnimalRescue = "heeft een dierenambulance aangevraagd.",
+ HasRequestedMechanic = "heeft de ANWB aangevraagd.",
+ HasRequestedFire = "heeft een brandweer eenheid aangevraagd.",
+ DispatchMessagesEnabled = "Meldkamerberichten zijn ingeschakeld.",
+ DispatchMessagesDisabled = "Meldkamerberichten zijn uitgeschakeld.",
+
+ -- Tasks
+ InvolvedPedsRemaining = "Betrokken personen resterend:",
+ InvolvedVehsRemaining = "Voertuig transport taken resterend:",
+ InvolvedObjsRemaining = "Wegenservice taken resterend:",
+ InvolvedPropsRemaining = "Lijkschouwer taken resterend:",
+ ExtinguishAllFires = "Blus alle branden.",
+ ClearAreaOfSmoke = "Maak het gebied rookvrij.",
+
+ -- ERS Selectie menu
+ Select = "Selecteer",
+ Cancel = "Annuleer",
+ SelectService = "Selecteer Dienst",
+ Police = "Politie",
+ Ambulance = "Ambulance",
+ Fire = "Brandweer",
+ Tow = "Rijkswaterstaat",
+ PoliceDescription = "Waakzaam en Dienstbaar",
+ AmbulanceDescription = "Als iedere seconde telt",
+ FireDescription = "Maak er levenswerk van",
+ TowDescription = "Houdt het wegennet in orde",
+
+ -- Gear Selection menu
+ SelectGear = "Selecteer uitrusting",
+
+ -- Radial menu
+ RadialMenuInstructionTitle = "Selecteer een beschikbare backup-eenheid...",
+ ExitRadialMenuInstruction = "Klik om het radiaal menu te verlaten...",
+ RequestPoliceTransportIcon = "fa-solid fa-handcuffs", -- https://fontawesome.com/search?m=free&o=r
+ RequestPoliceTransportInstruction = "Klik om een politietransporteenheid aan te vragen of te annuleren voor de dichtstbijzijnde verdachte...",
+ RequestAmbulanceIcon = "fa-solid fa-truck-medical",
+ RequestAmbulanceInstruction = "Klik om een ambulance-eenheid aan te vragen of te annuleren om gewonden in de buurt te verzorgen...",
+ RequestTowIcon = "fa-solid fa-car-burst",
+ RequestTowInstruction = "Klik om een voertuigtransport-eenheid aan te vragen of te annuleren voor het ophalen van het dichtstbijzijnde voertuig...",
+ RequestTaxiIcon = "fa-solid fa-taxi",
+ RequestTaxiInstruction = "Klik om een taxi aan te vragen of te annuleren voor de dichtstbijzijnde persoon...",
+ RequestRoadServiceIcon = "fa-solid fa-broom",
+ RequestRoadServiceInstruction = "Klik om een wegenservice-eenheid aan te vragen of te annuleren om de nabijgelegen wegen schoon te maken...",
+ RequestCoronerIcon = "fa-solid fa-book-skull",
+ RequestCoronerInstruction = "Klik om een lijkschouwer-eenheid aan te vragen of te annuleren om de lijkzakken in de buurt op te halen...",
+ RequestAnimalRescueIcon = "fa-solid fa-paw",
+ RequestAnimalRescueInstruction = "Klik om een dierenreddings-eenheid aan te vragen of te annuleren om voor de nabijgelegen dieren te zorgen...",
+ RequestMechanicIcon = "fa-solid fa-wrench",
+ RequestMechanicInstruction = "Klik om een automonteur aan te vragen of te annuleren om het dichtstbijzijnde voertuig te repareren...",
+ RequestFireIcon = "fa-solid fa-fire-extinguisher",
+ RequestFireInstruction = "Klik om een brandweer-eenheid aan te vragen of te annuleren om de brand in de buurt te blussen...",
+ RequestedUnitStrugglingToReach = "De aangevraagde eenheid heeft moeite om je locatie te bereiken... Ze kunnen worden geannuleerd.",
+
+ -- Pursuit Radial Menu
+ PursuitRadialMenuInstructionTitle = "Selecteer een eenheid om steun bij een achtervolging aan te vragen...",
+ PursuitRadialMenuInstruction = "Klik om eenheden aan te vragen die bij een achtervolging kunnen ondersteunen...",
+ RequestLightBackupIcon = "fa-solid fa-motorcycle",
+ RequestLightBackupInstruction = "Klik om eenheden aan te vragen die bij een achtervolging kunnen ondersteunen...",
+ RequestMediumBackupIcon = "fa-solid fa-car-on",
+ RequestMediumBackupInstruction = "Klik om eenheden aan te vragen die bij een achtervolging kunnen ondersteunen...",
+ RequestHeavyBackupIcon = "fa-solid fa-truck-moving",
+ RequestHeavyBackupInstruction = "Klik om eenheden aan te vragen die bij een achtervolging kunnen ondersteunen....",
+ RequestAirBackupIcon = "fa-solid fa-helicopter",
+ RequestAirBackupInstruction = "Klik om eenheden aan te vragen die bij een achtervolging kunnen ondersteunen...",
+ RequestArmyBackupIcon = "fa-solid fa-person-military-rifle",
+ RequestArmyBackupInstruction = "Klik om eenheden aan te vragen die bij een achtervolging kunnen ondersteunen...",
+
+ -- Pursuit notifications
+ ActivePursuit = "ACHTERVOLGING",
+ NotInPursuitMode = "Je bent niet in een achtervolging...",
+ CancellingPreviousRequestForBackup = "Vorige verzoek voor extra eenheden wordt geannuleerd...",
+ BackupAlreadyRequested = "Extra eenheden zijn al aangevraagd. Om het verzoek te annuleren, selecteer dezelfde eenheid...",
+ PursuitBackupTooFarAway = "(Eén van) de achtervolgingseenheden (is) zijn te ver weg, het verzoek wordt geannuleerd...",
+ PursuitCancelledReasonPersonDied = "De achtervolging is beëindigd. De persoon die je achtervolgde is heengegaan.",
+ PursuitCancelledReasonLostTarget = "De achtervolging is beëindigd, omdat je het doelwit bent kwijtgeraakt.",
+ PursuitCancelledReasonPersonVanished = "De achtervolging is geannuleerd... De persoon die je achtervolgde is verdwenen.",
+ PursuitCancelledReasonVehicleVanished = "De achtervolging is geannuleerd... Het voertuig dat je achtervolgde is verdwenen.",
+ PursuitCancelledReasonPersonCaught = "De achtervolging is voorbij... Je hebt de persoon die je achtervolgde gevangen.",
+ PursuitHotkeyFocus = "focus",
+ PursuitHotkeyBackup = "assistentie",
+ PursuitCancelledReasonNoLongerCapableOfPursuing = "De achtervolging is geannuleerd... Je kunt de persoon niet meer achtervolgen.",
+
+ -- Ambulance
+ AmbulanceAlreadyEnroute = "Je hebt al een ambulance aangevraagd...",
+ RequestingAmbulance = "Een ambulance wordt aangevraagd...",
+ AmbulanceDone = "De ambulance verlaat de plaats.",
+ NoAmbulanceEnroute = "Er is geen ambulance onderweg.",
+ AmbulanceCancelled = "Ambulanceverzoek geannuleerd.",
+ NoPeopleFoundAmbulance = "Er zijn geen mensen gevonden om te behandelen/transporteren...",
+ AllAmbulancesOccupied = "Alle ambulance-eenheden zijn bezet. Probeer het over een paar seconden opnieuw, alstublieft...",
+ AmbulanceArrived = "De ambulance is aangekomen.",
+ AmbulanceEnroute = "Een ambulance is uitgezonden en onderweg...",
+ NextMedicTask = "De medicus is toegewezen om voor een toegewezen persoon te zorgen.",
+
+ -- Politie
+ PoliceAlreadyEnroute = "Je hebt al politie transport aangevraagd...",
+ RequestingPolice = "Politie transport wordt aangevraagd.",
+ PoliceDone = "Het politie transport verlaat de plaats.",
+ NoPoliceEnroute = "Er is geen politie transport onderweg...",
+ PoliceCancelled = "Politie transport verzoek geannuleerd...",
+ NoPeopleFoundPolice = "Er zijn geen mensen gevonden om te vervoeren...",
+ AllPoliceOccupied = "Alle politie-eenheden zijn bezet. Probeer het over een paar seconden opnieuw, alstublieft...",
+ PoliceArrived = "Politie transport is aangekomen.",
+ PoliceEnroute = "Politie transport is uitgezonden en onderweg...",
+ NextPoliceTask = "De politieagent is toegewezen om een toegewezen persoon op te halen.",
+
+ -- Taxi
+ TaxiAlreadyEnroute = "Je hebt al een taxi aangevraagd.",
+ RequestingTaxi = "Taxi voor de dichtstbijzijnde persoon wordt aangevraagd.",
+ TaxiDone = "De persoon is opgehaald door de taxichauffeur en ze vertrekken nu.",
+ NoTaxiEnroute = "Er is geen taxi onderweg...",
+ TaxiCancelled = "Taxi verzoek geannuleerd.",
+ NoPeopleFound = "Er zijn geen mensen gevonden om te vervoeren...",
+ AllTaxisOccupied = "Alle taxi's zijn bezet. Probeer het over een paar seconden opnieuw...",
+ TaxiArrived = "De taxi is aangekomen.",
+ TaxiEnroute = "Een taxi is uitgezonden en onderweg...",
+ NextTaxiTask = "De taxichauffeur is toegewezen om een toegewezen persoon op te halen.",
+
+ -- Takel
+ TowAlreadyEnroute = "Je hebt al voertuigtransport aangevraagd.",
+ RequestingTow = "Voertuigtransport voor het dichtstbijzijnde voertuig wordt aangevraagd.",
+ TowDone = "Het voertuig is opgehaald door de takelwagen en ze vertrekken nu.",
+ NoTowEnroute = "Er is geen voertuigtransport onderweg...",
+ RequestingTowButVehicleOccupied = "Om voertuigtransport aan te vragen moet het voertuig onbezet zijn...",
+ TowCancelled = "Voertuigtransport verzoek geannuleerd.",
+ NoVehiclesFound = "Er zijn geen voertuigen gevonden om te vervoeren...",
+ AllTowOccupied = "Alle voertuigtransport eenheden zijn bezet. Probeer het over een paar seconden opnieuw, alstublieft...",
+ TowArrived = "Voertuigtransport is aangekomen.",
+ TowEnroute = "Een voertuigtransport eenheid is uitgezonden en onderweg...",
+ NextTowTask = "De takelwagenchauffeur is toegewezen om een voertuig op te halen.",
+
+ -- Wegenservice
+ RoadServiceAlreadyEnroute = "Je hebt al wegenservice aangevraagd.",
+ RequestingRoadService = "Wegenservice voor de dichtstbijzijnde taak wordt aangevraagd.",
+ RoadServiceDone = "Het puin is opgeruimd, de wegenservice eenheid vertrekt van de plaats.",
+ NoRoadServiceEnroute = "Er is geen wegenservice onderweg...",
+ RoadServiceCancelled = "Wegenservice verzoek geannuleerd.",
+ NoRoadServiceTaskFound = "Er is geen taak gevonden waarvoor wegenservice moet worden verleend...",
+ AllRoadServiceOccupied = "Alle wegenservice eenheden zijn bezet. Probeer het over een paar seconden opnieuw, alstublieft...",
+ RoadServiceArrived = "Wegenservice is aangekomen.",
+ RoadServiceEnroute = "Een wegenservice eenheid is uitgezonden en onderweg...",
+ NextRoadServiceTask = "De wegenservice medewerker is toegewezen om het puin in de buurt op te ruimen, om de weg vrij te maken.",
+
+ -- Lijkschouwer
+ CoronerAlreadyEnroute = "Je hebt al een lijkschouwer aangevraagd.",
+ RequestingCoroner = "Een lijkschouwer wordt aangevraagd voor de dichtstbijzijnde taak.",
+ CoronerDone = "De lichamen zijn van de plaats verwijderd en zullen naar een mortuarium worden gebracht.",
+ NoCoronerEnroute = "Er is geen lijkschouwer onderweg...",
+ CoronerCancelled = "Lijkschouwer verzoek geannuleerd.",
+ NoCoronerTaskFound = "Er is geen taak gevonden waarvoor een lijkschouwer moet worden verleend...",
+ AllCoronerOccupied = "Alle lijkschouwer eenheden zijn bezet. Probeer het over een paar seconden opnieuw, alstublieft...",
+ CoronerArrived = "De lijkschouwer is aangekomen.",
+ CoronerEnroute = "Een lijkschouwer is uitgezonden en onderweg...",
+ NextCoronerTask = "De lijkschouwer is toegewezen om de lijkzakken in de buurt op te halen.",
+
+ -- Dierenredding
+ AnimalRescueAlreadyEnroute = "Je hebt al dierenredding aangevraagd.",
+ RequestingAnimalRescue = "Dierenredding voor de nabijgelegen dieren wordt aangevraagd.",
+ AnimalRescueDone = "De dieren zijn van de plaats gehaald.",
+ NoAnimalRescueEnroute = "Er is geen dierenredding eenheid onderweg...",
+ AnimalRescueCancelled = "Dierenredding verzoek geannuleerd.",
+ NoAnimalRescueTaskFound = "Er is geen taak gevonden waarvoor dierenredding moet worden verleend...",
+ AllAnimalRescueOccupied = "Alle dierenredding eenheden zijn bezet. Probeer het over een paar seconden opnieuw, alstublieft...",
+ AnimalRescueArrived = "De dierenredding eenheid is aangekomen.",
+ AnimalRescueEnroute = "Dierenredding is uitgezonden en onderweg...",
+ NextAnimalRescueTask = "Dierenredding is toegewezen om voor een toegewezen dier te zorgen.",
+
+ -- Monteur
+ MechanicAlreadyEnroute = "Je hebt al een automonteur aangevraagd.",
+ RequestingMechanic = "Automonteur voor het dichtstbijzijnde voertuig wordt aangevraagd.",
+ MechanicDone = "Het voertuig is gerepareerd door de automonteur en ze vertrekken nu.",
+ NoMechanicEnroute = "Er is geen automonteur onderweg...",
+ MechanicCancelled = "Automonteur verzoek geannuleerd.",
+ NoMechanicTaskFound = "Er is geen taak gevonden waarvoor automonteur moet worden verleend...",
+ AllMechanicOccupied = "Alle automonteur eenheden zijn bezet. Probeer het over een paar seconden opnieuw, alstublieft...",
+ MechanicArrived = "Automonteur is aangekomen.",
+ MechanicEnroute = "Een automonteur is uitgezonden en onderweg...",
+
+ -- Brandweer
+ FireAlreadyEnroute = "Je hebt al een brandweer aangevraagd.",
+ RequestingFire = "Brandweer voor de dichtstbijzijnde brand wordt aangevraagd.",
+ FireDone = "De brand is uitgeblust door de brandweer en ze vertrekken nu.",
+ NoFireEnroute = "Er is geen brandweer onderweg...",
+ FireCancelled = "Brandweer verzoek geannuleerd.",
+ NoFireTaskFound = "Er is geen taak gevonden waarvoor brandweer moet worden verleend...",
+ AllFireOccupied = "Alle brandweer eenheden zijn bezet. Probeer het over een paar seconden opnieuw, alstublieft...",
+ FireArrived = "Brandweer is aangekomen.",
+ FireEnroute = "Een brandweer eenheid is uitgezonden en onderweg...",
+ NextFireTask = "De brandweer is toegewezen om de brand in de buurt uit te blussen.",
+ NoFireInArea = "Er is geen brand in de buurt...",
+
+ -- Spikestrip
+ SpikestripAlreadyDeployed = "Je hebt al een spijkermat geplaatst...",
+ PutAwaySpikestrip = "Spijkermat opbergen",
+ TakeOutSpikestrip = "Spijkermat pakken",
+ SpikestripDeployed = "Spijkermat geplaatst",
+ SpikestripPickedUp = "Spijkermat opgepakt",
+ SpikestripRemoved = "Spijkermat verwijderd",
+ ToGrabOrPutAwaySpikestripFromVehicle = "Om een spijkermat op te pakken of op te bergen uit/in een voertuig",
+ ToDeployOrPickupSpikestrip = "Om een spijkermat te plaatsen of op te pakken",
+ FailedToGrabSpikestrip = "Kon spijkermat niet oppakken...",
+
+ -- Ped Interactie
+ YouSay = "Jij zegt",
+ Press = "Druk op",
+ ToInteract = "om te communiceren met de persoon in de buurt",
+ ToInteractImpound = "om te communiceren met de impound dude",
+ ToInteractGear = "om te communiceren met de gear ped",
+ ToPerformCPR = "om te communiceren met de gewonde persoon in de buurt",
+ ToUseStretcherVeh = "om de brancard uit/naar het voertuig te nemen of te plaatsen",
+ ToCleanupObject = "om puin in de buurt op te ruimen",
+ StopInteraction = "Beëindig gesprek en geef opdracht om te vertrekken",
+ ExitInteraction = "Verlaat interactie",
+ SendToCustody = "Naar detentie sturen",
+ PersonTakenIntoCustody = "De persoon is in hechtenis genomen.",
+ NoCustodyCenterNearby = "Geen detentiecentrum in de buurt.",
+ SuspectArrested = "~b~VERDACHTE AANGEHOUDEN",
+ InteractionOptions = "Interactiemogelijkheden...",
+ Greet = "Begroet",
+ GreetExplanation = "Begroet de persoon waarmee je interactie hebt.",
+ AskForId = "Vraag ID",
+ AskForIdExplanation = "Vraag om de identificatiekaart van de persoon.",
+ Question = "Verhoren",
+ QuestionExplanation = "Verhoor de persoon waarmee je interactie hebt.",
+ Breathalyze = "Ademtest",
+ BreathalyzeExplanation = "Voer een ademtest uit om alcoholintoxicatie te controleren.",
+ DrugTest = "Drugstest",
+ DrugTestExplanation = "Voer een drugstest uit om de aanwezigheid van drugs te detecteren.",
+ Warn = "Waarschuwing",
+ WarnExplanation = "Geef de persoon een waarschuwing.",
+ Fine = "Boete / Bon",
+ FineExplanation = "Geef de persoon een boete of bon.",
+ Grab = "Begeleiden",
+ GrabExplanation = "Beleid de persoon.",
+ GetOut = "Uitstappen",
+ GetOutExplanation = "Vertel de persoon om uit het voertuig te stappen.",
+ AskToFollow = "Volg mij",
+ AskToFollowExplanation = "Vertel de persoon dat hij je moet volgen.",
+ AskToWait = "Wacht hier",
+ AskToWaitExplanation = "Vertel de persoon dat hij hier moet wachten.",
+ HandsUp = "Handen omhoog",
+ HandsUpExplanation = "Vertel de persoon om zijn handen omhoog te doen.",
+ Search = "Doorzoek",
+ SearchExplanation = "Doorzoek de kleding van de persoon.",
+ Cuff = "Boeien",
+ CuffExplanation = "Houd de persoon vast door zijn handen te boeien.",
+ PutInVehicle = "In voertuig zetten",
+ PutInVehicleExplanation = "Opdracht aan de persoon om het dichtstbijzijnde voertuig binnen te gaan.",
+ PersonalDetails = "Persoonlijke gegevens (ID-kaart)",
+ FullName = "Volledige Naam:",
+ DOB = "Geboortedatum:",
+ DocumentNumber = "Documentnummer:",
+ Nationality = "Nationaliteit:",
+
+ DatabaseCheck = "Politie Database Controle",
+ RunningDatabaseCheck = "Database wordt gescand...",
+ DatabaseCheckResults = "Database-invoer gevonden",
+ Address = "Adres:",
+ DriversLicense = "Rijbewijs B:",
+ BikeLicense = "Rijbewijs A:",
+ BoatLicense = "Vaarbewijs:",
+ TruckLicense = "Rijbewijs C:",
+ PilotLicense = "Vliegbrevet:",
+ Warrants = "Bevel(en):",
+ FlagsOrMarkers = "Signaleringen:",
+
+ ProfilePicture = "Photo:",
+ FirstName = "Naam:",
+ LastName = "Achternaam:",
+ Gender = "Geslacht:",
+ Email = "E-mail:",
+ PhoneNumber = "Telefoonnummer:",
+ Country = "Land:",
+ State = "Provincie:",
+ City = "Plaats:",
+ PostalCode = "Postcode:",
+ AddressType = "Adres Type:",
+ Licenses = "Rijbewijzen:",
+
+ -- Warrants
+ armed_and_dangerous = "Gewapend en gevaarlijk",
+ assault = "Mishandeling",
+ burglary = "Inbraak",
+ drug_related = "Drugs gerelateerd",
+ gang_affiliation = "Bende lidmaatschap",
+ homicide = "Moord",
+ kidnapping = "Ontvoering",
+ mental_health_issues = "Psychische problemen",
+ sex_offense = "Zedenmisdrijf",
+ terrorism = "Terrorisme",
+ theft = "Diefstal",
+ traffic_violation = "Verkeersovertreding",
+ wanted_person = "Gezocht persoon",
+ other = "Anders, lees beschrijving...",
+ active_warrant = "Actief arrestatiebevel",
+
+ StopGrabbingInstruction = "Druk op ~INPUT_CELLPHONE_CANCEL~ om de persoon los te laten.",
+ CannotInteractWithThisNPC = "Interactie met deze persoon is niet mogelijk...",
+ GrabWhenNotCuffedResponse = "Houd je handen thuis! Dan moet je mij maar aanhouden...",
+ PersonAlreadyInteracting = "Deze persoon is momenteel in gesprek met iemand anders...",
+ PersonAlreadyBeingEscorted = "Deze persoon wordt al begeleid...",
+ ThisPersonIsCuffed = "Deze persoon heeft handboeien om...",
+ AlreadyPerformingCPR = "Je voert al reanimatie uit...",
+ AlreadyCleaningUpObject = "Je bent al een object aan het opruimen...",
+ NoPedFoundToPerformCPROn = "Geen persoon gevonden die in aanmerking komt voor reanimatie...",
+ CPRSuccess = "De persoon voelt zich al beter. Goed werk!",
+ CPRFail = "Het lijkt erop dat... Oei, de persoon lijkt weer gestopt met ademen...",
+ UnableToPerformCPR = "Kan geen reanimatie uitvoeren omdat iemand anders dit al heeft geprobeerd...",
+ UnableToSendPersonAway = "Je kunt de persoon niet wegsturen, maak eerst de boeien los...",
+ WorkOnBleeding = "Toepassen van een tourniquet / borstdeksel / wondgaas vanwege een ernstige bloeding...",
+ WorkOnBleedingAlreadyDone = "Een tourniquet / borstdeksel / wondgaas is al door iemand anders toegepast vanwege een ernstige bloeding...",
+ NotBleeding = "De persoon heeft geen ernstige bloeding.",
+ WorkOnAirway = "Mond van de persoon vrijmaken in een poging om een luchtwegobstructie op te lossen...",
+ WorkOnAirwayAlreadyDone = "De luchtwegobstructie die deze persoon had, is al door iemand anders opgelost...",
+ NoAirwayObstructions = "Geen luchtwegobstructies gevonden.",
+ WorkOnBreathing = "Hun ademhalingsfrequentie is abnormaal, ze moeten zo snel mogelijk naar het ziekenhuis...",
+ WorkOnBreathingAlreadyDone = "Iemand anders heeft vastgesteld dat hun ademhalingsfrequentie abnormaal is, ze moeten zo snel mogelijk naar het ziekenhuis...",
+ NoBreathingProblems = "De persoon ademt, maar moet zo snel mogelijk naar het ziekenhuis worden gebracht.",
+ WorkOnCirculation = "Er is iets mis met de hartslagvolgorde, ze moeten zo snel mogelijk naar het ziekenhuis...",
+ WorkOnCirculationAlreadyDone = "Iemand anders heeft vastgesteld dat hun hartslagvolgorde abnormaal is, ze moeten zo snel mogelijk naar het ziekenhuis...",
+ NoCirculationProblems = "De persoon heeft een regelmatige hartslag. Desondanks moeten ze zo snel mogelijk naar het ziekenhuis.",
+ PersonFeelsCold = "De persoon voelt zich erg koud...",
+ PersonFeelsWarm = "De persoon voelt zich erg warm...",
+ NoHypothermiaSigns = "Geen tekenen van onderkoeling gedetecteerd.",
+ PersonFeelsColdAlreadyDetected = "Iemand anders heeft vastgesteld dat de persoon zich erg koud voelt...",
+ PersonFeelsWarmAlreadyDetected = "Iemand anders heeft vastgesteld dat de persoon zich erg warm voelt...",
+ NoHypothermiaSignsAlreadyDetected = "Iemand anders heeft vastgesteld dat er geen tekenen van onderkoeling zijn...",
+ OrderedPedToTheirKnees = "Je hebt de persoon opgedragen om op hun knieën te gaan.",
+ OrderedPedToStandUp = "Je hebt de persoon opgedragen om op te staan.",
+ PedIsDrunk = "De ademtest geeft aan dat de persoon de wettelijke alcoholgrens voor rijden heeft overschreden.",
+ PedIsNotDrunk = "De ademtest geeft aan dat de persoon binnen de wettelijke alcoholgrens voor rijden is.",
+ PedIsUnderInfluenceOfDrugs = "De drugstest geeft aan dat de persoon onder invloed van drugs is.",
+ PedIsNotUnderInfluenceOfDrugs = "De drugstest geeft aan dat de persoon niet onder invloed van drugs is.",
+ YoureNotAPoliceOfficer = "Je lijkt geen politieagent...",
+ InTheWrongService = "Je bent niet op de juiste plek, weet je...",
+ AskForGear = "Vraag om uitrusting...",
+ GetOutWhenNotInAVehicleResponse = "De persoon is niet in een voertuig...",
+
+ -- qb-target / ox-target
+ VehSpeakTo = "Speak to",
+ VehAssist = "Assist injured",
+ VehDriver = "driver",
+ VehFrontPassenger = "front passenger",
+ VehRearPassenger = "rear passenger",
+ VehPassenger = "passenger",
+
+ -- Dode ped Interactie
+ IdentifyDeadPed = "Identificeren",
+ DragPed = "Drag",
+ CheckMassiveBleeding = "Ernstige bloeding",
+ CheckAirway = "Luchtweg",
+ CheckBreathing = "Ademhaling",
+ CheckCirculation = "Circulatie",
+ CheckHypothermia = "Onderkoeling",
+ PerformCPR = "Voer reanimatie uit",
+ PutOnStretcher = "Plaats op brancard",
+ TakeOffStretcher = "Neem van brancard",
+ PutInBodyBag = "Plaats in lijkzak",
+
+ IdentifyDeadPedExplanation = "Identificeer de persoon",
+ DragPedExplanation = "Draag de persoon",
+ CheckMassiveExplanation = "Controleer op ernstige bloedingen",
+ CheckAirwayExplanation = "Controleer de luchtweg op obstructies",
+ CheckBreathingExplanation = "Controleer of de persoon nog ademt en de frequentie",
+ CheckCirculationExplanation = "Controleer of de persoon een pols heeft en de frequentie",
+ CheckHypothermiaExplanation = "Controleer de lichaamstemperatuur van de persoon",
+ PerformCPRExplanation = "Begin met reanimatie op de persoon",
+ PutOnStretcherExplanation = "Plaats de persoon op een nabijgelegen brancard",
+ TakeOffStretcherExplanation = "Neem de persoon van de brancard af",
+ PutInBodyBagExplanation = "Plaats de persoon in een lijkzak",
+
+ -- Brancard
+ MustBeOnShiftToDoThis = "Je bent op dienst...",
+ NoNearbyStretcherFound = "Geen nabijgelegen brancard gevonden...",
+ StretcherStillInUse = "Deze brancard is nog in gebruik...",
+ StretcherAlreadyInUse = "Deze brancard is al in gebruik...",
+ ReleasedStretcher = "Je hebt de brancard losgelaten.",
+ StillUsingStretcher = "Je bent nog steeds de brancard aan het gebruiken...",
+ NotUsingStretcher = "Je gebruikt de brancard niet...",
+ LowerTheNearbyStretcher = "Zorg ervoor dat je een nabijgelegen brancard hebt neergelaten...",
+ StretcherAlreadyOccupied = "Deze brancard is al bezet...",
+ ThisPersonIsNotOnAStretcher = "Deze persoon lijkt niet op een brancard te liggen...",
+ CannotDoThisWhenPedIsOnStretcher = "Je kunt deze actie niet uitvoeren terwijl de persoon op een brancard ligt...",
+ StretcherAlreadySpawnedForVehicle = "Dit voertuig heeft al een brancard gespawned...",
+ AmbulanceAlreadyHasAStretcherInside = "Kan niet interactie hebben met ambulance omdat je een brancard duwt en het voertuig al een brancard binnen heeft...",
+ VehicleMustBeEmptyForStretcherInteraction = "Voertuig moet leeg zijn voordat je interactie kunt hebben met de brancard...",
+ CantInteractWithStretcherInsideVehicle = "Je kunt niet interactie hebben met een brancard binnen een voertuig...",
+ PlacedStretcherIntoAVehicle = "Je hebt de brancard in het voertuig geplaatst.",
+ TakenStretcherFromAVehicle = "Je hebt de brancard uit het voertuig gehaald.",
+ PersonTransferredToHospital = "Je hebt de persoon overgedragen aan de ziekenhuis medewerkers.",
+ PersonSaved = "~b~HET ZIEKENHUIS NEEMT HET OVER!",
+ DropOffPersonAtHospital3DText = "Druk op ~o~ENTER ~w~om de persoon over te dragen aan het personeel van dit ziekenhuis",
+ ThereIsStretcherOnTheGroundNearby = "Er is een brancard in de buurt, pak deze vast om hem in het voertuig te zetten.",
+ SomeoneElseHasNetworkOwnershipOverTheStretcher = "Een ander heeft netwerk eigendom over de brancard. Zij moeten weg gaan voordat jij hem kan gebruiken.",
+ SomeoneElseHasNetworkOwnershipOverTheVehicle = "Een ander heeft netwerk eigendom over het voertuig. Zij moeten weg gaan voordat jij hem kan gebruiken.",
+ GetOnOrOffStretcher = "Stap op~p~/~w~van brancard",
+
+ -- Inventaris
+ Inventory = "Inventarisitems gevonden...",
+
+ -- Vehicle Interactions
+ VehicleDetails = "Voertuigdetails",
+ VehiclePlate = "Kenteken",
+ VehicleModel = "Merk",
+ VehicleOwner = "Eigenaar",
+ VehicleColor = "Kleur",
+ VehicleColorSecondary = "Secundaire kleur",
+ VehicleBuildYear = "Bouwjaar",
+ VehicleTax = "Belasting",
+ VehicleMOT = "APK",
+ VehicleInsurance = "Verzekering",
+ VehicleStolen = "Gestolen",
+ VehicleStolenDescription = "Gestolen voertuig",
+ VehicleBolo = "Actieve BOLO",
+ VehicleBoloDescription = "BOLO Beschrijving",
+ Paid = "Betaald",
+ NotPaid = "Niet betaald",
+ Valid = "Valide",
+ Invalid = "Ongeldig",
+ Passed = "Geslaagd",
+ Failed = "Mislukt",
+ SearchThe = "Doorzoek de ",
+ FoundItem = "Gevonden:",
+ ItemWillBeConfiscatedAutomaticallyIn10Seconds = "Het object wordt automatisch over 10 seconden in beslag genomen...",
+ NothingFoundInThisPartOfTheVehicle = "Je kon niets vinden in deze deel van het voertuig...",
+ NotCloseEnoughToVehicle = "Je bent niet dicht genoeg bij het voertuig dat je wilt doorzoeken...",
+ NotCloseEnoughToVehicleSection = "Je bent niet dicht genoeg bij het deel van het voertuig dat je wilt doorzoeken...",
+ VehicleIsNotEmpty = "Het voertuig is niet leeg...",
+ VehicleDataTimeout = "Je kunt momenteel niet met dit voertuig interageren vanwege een timeout, probeer het later opnieuw...",
+
+ -- Behaviour State
+ NeutralLabel = "Heeft een neutrale uitdrukking op het gezicht",
+ RelaxedLabel = "Komt over als ontspannen",
+ BusyLabel = "Lijkt met van alles bezig te zijn",
+ CheerfulLabel = "Ziet er blij uit",
+ FriendlyLabel = "Ziet er vriendelijk uit",
+ IrritatedLabel = "Gedraagd zich irritant",
+ StressedLabel = "Ziet er gestresst uit",
+ WorriedLabel = "Ziet er bezorgd uit",
+ ConfusedLabel = "Ziet er verward uit",
+ SuspiciousLabel = "Gedraagd zich verdacht",
+ DeliriousLabel = "Komt onvoorspelbaar over",
+ ParanoidLabel = "Gedraagd zich onbetrouwbaar",
+
+ -- Questioning
+ ExitConversation = "Ik denk dat ik genoeg weet... (Gesprek beëindigen)",
+ YouHaveAskedAllQuestions = "Je hebt alle beschikbare vragen voor deze interactie gesteld.",
+
+ -- Answering questions
+ ConversationHistory = "Gespreksgeschiedenis",
+ QDriversLicense = "auto",
+ QBikeLicense = "motor",
+ QBoatLicense = "boot",
+ QTruckLicense = "vrachtwagen",
+ QPilotLicense = "vliegtuig",
+ PrefixDrunk = "Hik!",
+ SuffixDrunk = "**Boer**",
+ PrefixDrugged = "Eh...",
+ SuffixDrugged = "**Kauwt**",
+ Sober = "nuchter",
+ Drunk = "dronken",
+ High = "high",
+ Stoned = "stoned",
+ BleedingSomewhere = "bloedt ergens",
+ TroubleWithBreathing = "heb moeite met ademen",
+ SomethingStuckInThroat = "iets vast in keel",
+ Warm = "oververhit",
+ Cold = "onderkoeld",
+ Healthy = "gezond",
+ Dizzy = "duizelig",
+ Extrasunny = "zonnig",
+ Overcast = "bewolkt",
+ Rain = "regen",
+ Foggy = "mist",
+ Smog = "smog",
+ Clouds = "wolken",
+ Snow = "sneeuw",
+ Snowlight = "lichte sneeuw",
+ Xmas = "zware sneeuw",
+ Halloween = "duisternis",
+ Blizzard = "sneeuwstorm",
+ RainHalloween = "regenachtige duisternis",
+ SnowHalloween = "sneeuwachtige duisternis",
+ Thunder = "onweer",
+ Clearing = "lichte regen",
+ Neutral = "weer",
+
+ -- Tips
+ OrderOnKneesOrStandUpExplanation = "Bevel om op de knieën te gaan / op te staan.",
+ AcceptCallout = "Accepteer noodoproep.",
+ CompleteCallout = "Voltooi noodoproep.",
+ CuffExplanation = "(Ont)boeien van de dichtstbijzijnde persoon.",
+ PullOver = "Voertuig staandehouden.",
+ RadialMenuExplanation = "Meldkamer aanvragen (Radiaal menu)",
+ StopTrackingUnitExplanation = "Stop met het traceren van een eenheid",
+ CannotTrackYourself = "Je kunt jezelf niet traceren.",
+ TargetNotOnACallout = "Deze eenheid kan niet getraceerd worden, omdat deze niet is gekoppeld aan een melding...",
+
+ InputHelpText = "Je moet RGB-kleuren invoeren of een kleur noemen. [Voorbeelden: rood | 255 0 0]",
+ WaitCooldown = "Je moet wachten: de cooldown is nog steeds actief...",
+ NoPermission = "Je hebt niet de toestemming om dit te doen.",
+ MustSetNumberValue = "Fout, je moet een numerieke waarde invoeren.",
+ CannotIdentifySize = "Kan deze maat niet identificeren... Probeer het opnieuw",
+
+ CannotDoThisOnFoot = "Je kunt dit niet te voet doen.",
+ CannotDoThisInAVehicle = "Je kunt dit niet in een voertuig doen.",
+ CannotDoThisAsPassenger = "Je kunt dit niet als bijrijder van een voertuig doen...",
+
+ UseMDTToToggleShift = "Je kunt je dienst wisselen via de MDT. Als je callout-aanbiedingen wilt uitschakelen:",
+ CalloutsDisabled = "Je callouts zijn uitgeschakeld.",
+
+ Dispatch = "Controle",
+ Responding = "Een eenheid reageert op de laatste noodoproep.",
+ ArriveAtScene = "Eenheid aangekomen op de locatie.",
+ AmbulanceDispatched = "Een ambulance is gestuurd...",
+ PoliceTransportDispatched = "Politie-transport is gestuurd...",
+ VehicleTransportDispatched = "Voertuigtransport is gestuurd...",
+ TaxiDispatched = "Een taxi is gestuurd.",
+ TrackingUnit = "Je volgt nu de GPS-locatie van een andere eenheid.",
+ StoppedTrackingUnit = "Je bent losgekoppeld van de andere eenheid.",
+}
\ No newline at end of file
diff --git a/resources/night_ers/config/translations/pt-br.lua b/resources/night_ers/config/translations/pt-br.lua
new file mode 100644
index 000000000..eb0d694b8
--- /dev/null
+++ b/resources/night_ers/config/translations/pt-br.lua
@@ -0,0 +1,628 @@
+Config = Config or {}
+Config.Messages = Config.Messages or {}
+
+ --====================== Linguagem ======================--
+
+Config.Messages['pt-br'] = {
+ ScriptInitialising = "O Script está iniciando, por favor espere...",
+ Yes = "Sim",
+ No = "Não",
+ AreYouSureCompleteCallout = "Tem certeza que quer terminar o chamado?",
+ CompletingCalloutCannotBeUndone = "O chamado não pode ser cancelado",
+ Controls = "Controles",
+ Hint = "Dicas",
+ HotKeys = "Teclas de atalho",
+ Explanation = "Explicações",
+ Unknown = "Desconhecido",
+ ToHideOrShow = "Mostrar/Esconder",
+ Aim = "Objetivo",
+ AimToOrderPedTextDrawing = "~p~'~w~E~p~'~w~ » Ajoelhar ~p~/ ~w~Levantar ",
+ AimToOrderAnimalTextDrawing = "~p~'~w~E~p~'~w~ » Parar ~p~/ ~w~Soltar ",
+ GrabOrReleaseStretcher = "~p~'~w~E~p~'~w~ » Pegar ~p~/ ~w~Liberar",
+ RaiseOrLowerStretcher = "~p~' ~w~↑~p~ | ~w~↓~p~ '~w~ » Aumentar ~p~/ ~w~Baixar",
+ ToggleHints = "Você sabia que pode trocar essa exibição?",
+ DisableHints = "Dicas desativadas.",
+ EnableHints = "Dicas Ativadas.",
+ DisabledCallouts = "Chamadas Desativadas.",
+ EnabledCallouts = "Chamadas Ativadas.",
+ OnShift = "Você entrou em serviço",
+ OffShift = "Você saiu do serviço",
+ NotOnShift = "Você não tem emprego.",
+ Postal = "Postal",
+ StreetName = "Nome da Rua",
+ RequiredUnits = "Unidades necessárias",
+ ProvideBackupIfRequested = "Fornecer apoio se solicitado",
+ Nearby = "Próximo",
+ OfferedCalloutActiveOrAttachedToACallout = "Negado. Você já tem um chamado ativo.",
+ CouldNotRequestCalloutCooldown = "Bloqueado, por favor espere o tempo. Tente novamente...",
+ CouldNotRequestACallout = "Não foi possível (servidor ocupado), Tente Novamente...",
+ CouldNotRequestCallout = "Não foi possível. Você não selecionou um trabalho para receber um chamado (Para o seu serviço) (callouts_config.lua)...",
+ CalloutMarkedOnYourGPS = "A rota foi marcada no seu GPS.",
+ AcceptedCallout = "Chamado Aceito",
+ CancelCallout = "O chamado foi cancelado.",
+ NotAbleToCancelCallout = "Você não pode cancelar um chamado nesse momento, tente dentro de alguns segundos...",
+ DetachedFromCallout = "A sua unidade foi separada do ultimo chamado",
+ LastCalloutOfferExpired = "Unidades disponiveís para resolver o chamado de emergência.",
+ NotAttachedToCallout = "Você não pode cancelar o chamado enquanto estiver em andamento",
+ AnyUnitsAvailableToRespond = "Alguma unidade disponível para resposta?",
+ CancelUnitsBeforeGoingOffShift = "É necessário cancelar chamado antes de sair do serviço...",
+ NoPermissionToGoOnShift = "Você não tem permição para entrar ou sair do trabalho...",
+ ServerCouldNotBuildCalloutError = "Erro: O servidos não conseguiu criar chamado devido algum erro no código.",
+ PersonHasPassedOut = "~r~ALERTA ~w~A pessoa está inconciente!",
+ PersonIsTakingOff = "~r~ALERTA ~w~A pessoa está partindo...",
+ PersonIsAgressive = "~r~ALERTA ~w~Parece estar agressivo",
+ PersonIsSurrendering = "~r~ALERTA ~w~Se rendeu",
+ PedCannotEnterVehicle = "Não consegue entrar no veículo próximo",
+ NoNearbyVehicleFound = "Nenhum veículo próximo encontrado, aproxime a pessoa do veículo...",
+ PulloverModeExplanation = "Aproxime do veículo que quer encostar...",
+ PulloverInitiatedRear = "O veículo está atrás de você. Aperte U para trocar a direção manual...",
+ PulloverInitiatedFront = "O veículo está na sua frente. Aperte U para trocar a direção manual...",
+ PulloverConcluded = "Você estacionou!",
+ PulloverFailedToLockInVehicle = "Erro ao trancar veículo, tente novamente...",
+ PulloverManualSteeringEnabled = "Controle manual ativado...",
+ PulloverManualSteeringDisabled = "Estacionamento manual foi desativado, O veículo voltará a sua posição...",
+ RequestCooldownActive = "Aguarde 3 segundos antes de iniciar ou cancelar...",
+ AlreadyAttachedToCallout = "Você já está ativo em um chamado...",
+ DeclinedCalloutOffer = "Você demorou para responder o chamado.",
+ NoSpawnPointAvailableForNPC = "Não foi encontrado nenhum local disponivél para a unidade nessa área.",
+ CantCancelBackup = "Não é possível cancelar apoio...",
+ NotEnoughSpaceBehindAmbulance = "Não há espaço suficiente para tirar ou guardar a maca da ambulância",
+ ImpoundVehicleSubtitle = "Para tirar seu veículo, vá até a marcação do gps...",
+ ImpoundVehicleLeaveSubtitle = "Por favor, saia do veículo e se afaste",
+ ImpoundVehicleNotAllowedSubtitle = "Esse veículo não é permitdo",
+ CannotDoThisWhilePedIsInAVehicle = "Você não pode fazer isso enquanto a pessoa está no veículo...",
+ OffDuty = "Fora de serviço",
+ OnDuty = "Em serviço",
+ SuspectIsTryingToStealAVehicle = "O suspeito está tentando roubar um veículo!",
+ TrafficStop = "Parada de trânsito",
+
+ -- Dispatch
+ DispatchMessage = "Mensagens",
+ NextDispatchMessage = "Próxima mensagem em",
+ Seconds = "Segundos",
+ Loading = "Carregando",
+ None = "Nenhum",
+ TrackUnitProposal = "Rastrear unidade",
+ EmergencyCall = "Chamada de Emergencia",
+ Caller = "Usuário:",
+ CallDescription = "Descrição:",
+ Location = "Localização:",
+ Postal = "Postal:",
+ CalloutUnitsRequired = "Unidades requeridas:",
+ UnitResponse = "Está indo a emergência",
+ UnitDetached = "Cancelou chamado de emergência",
+ UnitArrived = "Chegou ao local.",
+ UnitOnShift = "Iniciou trabalho.",
+ UnitOffShift = "Saiu do trabalho.",
+ DispatchNote = "Dispatch note:",
+ DispatchNoteText = "Localização marcada no gps.",
+ DispatchNoteResponseText = "Forneça apoio se necessário..",
+ CompleteCalloutFooterText = "Aperte para concluir chamado:",
+ TimeRemainingToAcceptCallout = "Tempo restante para aceitar chamado:",
+ HasRequestedPolice = "Solicitou transporte policial para suspeito.",
+ HasRequestedAmbulance = "Solicitou uma ambulância",
+ HasRequestedTaxi = "Solicitou um taxi.",
+ HasRequestedTow = "Solicitou um transporte de veículos.",
+ HasRequestedRoadService = "Solicitada unidade rodovíaria.",
+ HasRequestedCoroner = "Você solicitou um oficial",
+ HasRequestedAnimalRescue = "Você solicitou unidade de resgate animal",
+ HasRequestedMechanic = "Você solicitou um mecânico.",
+ HasRequestedFire = "Bombeiro solicitado.",
+ DispatchMessagesEnabled = "As mensagens foram ativadas.",
+ DispatchMessagesDisabled = "As mensagens foram desativadas.",
+
+ -- Tarefas
+ InvolvedPedsRemaining = "Envolvidos restantes:",
+ InvolvedVehsRemaining = "Tarefas dos veículos de transportes restantes:",
+ InvolvedObjsRemaining = "Tarefas da Serviço Rodoviário",
+ InvolvedPropsRemaining = "Tarefas do legista:",
+ ExtinguishAllFires = "Extinguir todos os incéndios.",
+ ClearAreaOfSmoke = "Retirar smoke da área",
+
+ -- ERS Menu de seleção
+ Select = "Selecionar",
+ Cancel = "Cancelar",
+ SelectService = "Selecionar Serviço",
+ Police = "Polícia",
+ Ambulance = "Ambulância",
+ Fire = "Bombeiro",
+ Tow = "Reboque",
+ PoliceDescription = "Guardiões da justiça, protegendo a população.",
+ AmbulanceDescription = "Heróis, salvando a vida dos demais.",
+ FireDescription = "Apagando incendios e ajudando a população, com a bravura de ser um bombeiro.",
+ TowDescription = "Guinchadores do dilema, ajudando a liberar o trânsito",
+
+ -- Gear Menu de seleção
+ SelectGear = "Selecionar Equipamento",
+
+ -- Radial menu
+ RadialMenuInstructionTitle = "Selecionar equipamento de suporte disponível...",
+ ExitRadialMenuInstruction = "Clique para sair do menú...",
+ RequestPoliceTransportIcon = "fa-solid fa-handcuffs", -- https://fontawesome.com/search?m=free&o=r
+ RequestPoliceTransportInstruction = "Solicitar ou Cancelar transporte policial para o suspeito...",
+ RequestAmbulanceIcon = "fa-solid fa-truck-medical",
+ RequestAmbulanceInstruction = "Solicitar ou Cancelar ambulância para pessoas feridas no local...",
+ RequestTowIcon = "fa-solid fa-car-burst",
+ RequestTowInstruction = "Solicitar ou Cancelar guincho para a retirada do veículo...",
+ RequestTaxiIcon = "fa-solid fa-taxi",
+ RequestTaxiInstruction = "Solicitar taxi mais rápido possível...",
+ RequestRoadServiceIcon = "fa-solid fa-broom",
+ RequestRoadServiceInstruction = "Solicitar serviço Rodoviário mais próximo...",
+ RequestCoronerIcon = "fa-solid fa-book-skull",
+ RequestCoronerInstruction = "Solicitar um legista no local para recolher os corpos...",
+ RequestAnimalRescueIcon = "fa-solid fa-paw",
+ RequestAnimalRescueInstruction = "Solicitar serviço de proteção animal...",
+ RequestMechanicIcon = "fa-solid fa-screwdriver-wrench",
+ RequestMechanicInstruction = "Solicitar um mecânico mais próximo...",
+ RequestFireIcon = "fa-solid fa-fire",
+ RequestFireInstruction = "Solicitar ou cancelar um bombeiro para apagar o incêndio mais próximo...",
+ RequestedUnitStrugglingToReach = "A únidade está com problemas para chegar na sua localização. Entre em contato ou o serviço será cancelado!",
+
+ -- Pursuit Radial Menu
+ PursuitRadialMenuInstructionTitle = "Selecione uma unidade para solicitar o apoio de busca...",
+ PursuitRadialMenuInstruction = "Clique para solicitar ou cancelar apoio da perseguição para o suspeito...",
+ RequestLightBackupIcon = "fa-solid fa-motorcycle",
+ RequestLightBackupInstruction = "Clique para solicitar ou cancelar apoio facil do suspeito que você está perseguindo...",
+ RequestMediumBackupIcon = "fa-solid fa-car-on",
+ RequestMediumBackupInstruction = "Clique para solicitar ou cancelar apoio médio do suspeito que você está perseguindo...",
+ RequestHeavyBackupIcon = "fa-solid fa-truck-moving",
+ RequestHeavyBackupInstruction = "Clique para solicitar ou cancelar apoio dificíl do suspeito que você está perseguindo...",
+ RequestAirBackupIcon = "fa-solid fa-helicopter",
+ RequestAirBackupInstruction = "Clique para solicitar ou cancelar apoio aéreo para o suspeito que você está perseguindo...",
+ RequestArmyBackupIcon = "fa-solid fa-person-military-rifle",
+ RequestArmyBackupInstruction = "Clique para solicitar ou cancelar apoio militar para o suspeito que você está perseguindo...",
+
+ -- Pursuit notifications
+ ActivePursuit = "BUSCA ATIVA",
+ NotInPursuitMode = "Você não está em uma busca...",
+ CancellingPreviousRequestForBackup = "Cancelamento da solicitação anterior de unidades de apôio...",
+ BackupAlreadyRequested = "Unidades de apôio já foram solicitadas. Para cancelar, selecione a mesma unidade...",
+ PursuitBackupTooFarAway = "(Uma das) unidades de apôio está muito distante, cancelando a solicitação...",
+ PursuitCancelledReasonPersonDied = "A perseguição acabou. A pessoa que você estava perseguindo faleceu.",
+ PursuitCancelledReasonLostTarget = "A perseguição chegou ao fim, pois você perdeu o alvo de vista.",
+ PursuitCancelledReasonPersonVanished = "A perseguição foi cancelada... A pessoa que você estava perseguindo desapareceu.",
+ PursuitCancelledReasonVehicleVanished = "A perseguição foi cancelada... O veículo que você estava perseguindo desapareceu.",
+ PursuitCancelledReasonPersonCaught = "A perseguição chegou ao fim... Você pegou a pessoa que estava perseguindo.",
+ PursuitHotkeyFocus = "Foco",
+ PursuitHotkeyBackup = "Apôio",
+ PursuitCancelledReasonNoLongerCapableOfPursuing = "A perseguição foi cancelada... Você não pode mais perseguir o alvo.",
+
+ -- Ambulance
+ AmbulanceAlreadyEnroute = "Você já solicitou uma ambulância...",
+ RequestingAmbulance = "Solicitando ambulância...",
+ AmbulanceDone = "A ambulância está saindo do local.",
+ NoAmbulanceEnroute = "Não há ambulâncias a caminho.",
+ AmbulanceCancelled = "Solicitação de ambulância cancelada.",
+ NoPeopleFoundAmbulance = "Não foram encontradas pessoas para oferecer tratamento/transporte...",
+ AllAmbulancesOccupied = "Todas as unidades estão ocupadas. Tente novamente em alguns segundos...",
+ AmbulanceArrived = "Unidade a caminho",
+ AmbulanceEnroute = "Unidade acabou de sair para o destino...",
+ NextMedicTask = "Um médico foi designado.",
+
+ -- Policia
+ PoliceAlreadyEnroute = "Você já solicitou viatura policial",
+ RequestingPolice = "Solicitação de viatura policial.",
+ PoliceDone = "A viatura da está deixando o local.",
+ NoPoliceEnroute = "Não há viaturas no trajeto...",
+ PoliceCancelled = "Viatura policial cancelada...",
+ NoPeopleFoundPolice = "Não foram encontradas pessoas para viatura...",
+ AllPoliceOccupied = "Todas as unidades policiais estão ocupadas. Tente novamente em alguns segundos...",
+ PoliceArrived = "A viatura chegou.",
+ PoliceEnroute = "A viatura acabou de sair, e já está a caminho...",
+ NextPoliceTask = "Um policial foi designado e está a caminho.",
+
+ -- Taxi
+ TaxiAlreadyEnroute = "Você já solicitou um táxi.",
+ RequestingTaxi = "Solicitar de táxi para a pessoa mais próxima.",
+ TaxiDone = "O passageiro já está dentro do taxi em direção ao seu destino.",
+ NoTaxiEnroute = "Não há táxi na rota...",
+ TaxiCancelled = "O táxi foi cancelado.",
+ NoPeopleFound = "Não encontramos os passageiros...",
+ AllTaxisOccupied = "Todos os táxis estão ocupados. Tente novamente em alguns segundos...",
+ TaxiArrived = "O táxi chegou.",
+ TaxiEnroute = "Um táxi foi enviado e já está a caminho...",
+ NextTaxiTask = "O motorista de táxi foi designado para buscar uma pessoa.",
+
+ -- Reboque
+ TowAlreadyEnroute = "Você já solicitou o reboque.",
+ RequestingTow = "Solicitar reboque para o veículo próximo.",
+ TowDone = "O veículo já está no reboque em direção ao seu destino.",
+ NoTowEnroute = "Não há reboque a caminho...",
+ RequestingTowButVehicleOccupied = "Todos os reboques estão ocupados. Tente novamente...",
+ TowCancelled = "O reboque foi cancelado.",
+ NoVehiclesFound = "Não encontramos o veículo para guinchar...",
+ AllTowOccupied = "Todos os reboques estão ocupados...Tente novamente",
+ TowArrived = "O reboque acabou de chegar.",
+ TowEnroute = "Uma unidade de reboque foi enviada e está a caminho...",
+ NextTowTask = "Foi designado um motoristo para o reboque.",
+
+ -- Serviço Rodoviário
+ RoadServiceAlreadyEnroute = "Você já solicitou o serviço rodoviário.",
+ RequestingRoadService = "Solicitação do serviço rodoviário para a tarefa mais próxima.",
+ RoadServiceDone = "Os escombros foram limpos e a unidade de serviço rodoviário está saindo do local.",
+ NoRoadServiceEnroute = "Não há serviço rodoviário no trajeto...",
+ RoadServiceCancelled = "Serviço rodoviário cancelado.",
+ NoRoadServiceTaskFound = "Não foi encontrada nenhuma tarefa para o serviço rodoviário...",
+ AllRoadServiceOccupied = "Você não está perto o suficiente da seção do veículo que deseja procurar...",
+ RoadServiceArrived = "O serviço rodoviário chegou.",
+ RoadServiceEnroute = "Uma unidade de serviço rodoviário foi enviada e está a caminho...",
+ NextRoadServiceTask = "O funcionário do serviço rodoviário foi encarregado de limpar o entulho na área, para liberar a estrada.",
+
+ -- Legista
+ CoronerAlreadyEnroute = "Você já solicitou um legista.",
+ RequestingCoroner = "Solicitação de um médico legista...",
+ CoronerDone = "Os corpos foram retirados do local e serão levados para um necrotério.",
+ NoCoronerEnroute = "Não há nenhum legista a caminho...",
+ CoronerCancelled = "Solicitação do legista cancelada.",
+ NoCoronerTaskFound = "Não foi encontrado nenhum trabalho para o legista...",
+ AllCoronerOccupied = "Todas os legista estão ocupados. Tente novamente em alguns segundos, por favor...",
+ CoronerArrived = "O legista chegou.",
+ CoronerEnroute = "O legista acabou de sair, e está a caminho...",
+ NextCoronerTask = "O médico legista que foi encarregado de recolher os sacos de cadáveres na área.",
+
+ -- Resgate de animais
+ AnimalRescueAlreadyEnroute = "Você já solicitou o resgate de animais.",
+ RequestingAnimalRescue = "Solicitação de resgate de animais para os animais próximos.",
+ AnimalRescueDone = "Os animais foram retirados do local.",
+ NoAnimalRescueEnroute = "Não há unidade de resgate de animais no caminho...",
+ AnimalRescueCancelled = "Pedido de resgate de animais cancelado.",
+ NoAnimalRescueTaskFound = "Não foi encontrado nenhum animal para resgate...",
+ AllAnimalRescueOccupied = "Todas unidades de resgate estão ocupadas. Tente novamente...",
+ AnimalRescueArrived = "A unidade de resgate de animais já chegou.",
+ AnimalRescueEnroute = "O resgate de animais foi enviado e já está a caminho...",
+ NextAnimalRescueTask = "O resgate de animais foi designado para cuidar de um animal.",
+
+ -- Mechanic
+ MechanicAlreadyEnroute = "Você já solicitou um mecânico.",
+ RequestingMechanic = "Solicitar um mecânico para o veículo mais próximo.",
+ MechanicDone = "O veículo foi consertado pelo mecânico e agora eles estão indo embora.",
+ NoMechanicEnroute = "Não há nenhum mecânico a caminho...",
+ MechanicCancelled = "Pedido de mecânico cancelado.",
+ NoMechanicTaskFound = "Não foi encontrada nenhum veículo para o mecânico reparar...",
+ AllMechanicOccupied = "Todos os mecânicos estão ocupados. Tente novamente...",
+ MechanicArrived = "Um mecânico acabou de chegar.",
+ MechanicEnroute = "Um mecânico foi enviado e já está a caminho...",
+
+ -- Fire
+ FireAlreadyEnroute = "Você já solicitou um bombeiro.",
+ RequestingFire = "Solicitando bombeiro para o incêndio mais próximo.",
+ FireDone = "O incêndio foi apagado pelos bombeiros e eles estão saindo agora.",
+ NoFireEnroute = "Não há bombeiros a caminho...",
+ FireCancelled = "Solicitação de bombeiro cancelada.",
+ NoFireTaskFound = "Não foi encontrada nenhuma tarefa para os bombeiros...",
+ AllFireOccupied = "Todas as unidades de bombeiros estão ocupadas. Tente novamente em alguns segundos, por favor...",
+ FireArrived = "Os bombeiros chegaram.",
+ FireEnroute = "Uma unidade de bombeiros foi enviada e está a caminho...",
+ NextFireTask = "Os bombeiros foram designados para apagar o incêndio nas proximidades.",
+ NoFireInArea = "Não há incêndio nas proximidades...",
+
+ -- Spikestrip
+ SpikestripAlreadyDeployed = "Você já tem uma faixa de pregos instalado...",
+ PutAwaySpikestrip = "Guardando a faixa de pregos",
+ TakeOutSpikestrip = "Remoção da faixa de pregos",
+ SpikestripDeployed = "Faixa de pregos colocada",
+ SpikestripPickedUp = "A faixa de pregos foi recolhida",
+ SpikestripRemoved = "Faixa de pregos removida",
+ ToGrabOrPutAwaySpikestripFromVehicle = "para pegar ou guardar a faixa de pregos de/em um veículo",
+ ToDeployOrPickupSpikestrip = "Para instalar ou retirar uma Faixa de pregos",
+ FailedToGrabSpikestrip = "Falha ao retirar...",
+
+ -- Ped Interaction
+ YouSay = "Você diz",
+ Press = "Aperte",
+ ToInteract = "Para interagir com a pessoa próxima",
+ ToInteractImpound = "interagir com a pessoa responsável pelo local de apreensão",
+ ToInteractGear = "interagir com o responsável pelo equipamento",
+ ToPerformCPR = "interagir com a pessoa ferida nas proximidades",
+ ToUseStretcherVeh = "Para retirar ou colocar a maca do/no veículo",
+ ToCleanupObject = "Para limpar os escombros próximos",
+ StopInteraction = "Terminar a conversa e ordenar que saiam",
+ ExitInteraction = "Sair da interação",
+ SendToCustody = "Enviar para custódia",
+ PersonTakenIntoCustody = "A pessoa foi levada em custódia.",
+ NoCustodyCenterNearby = "Nenhuma delegacia próxima.",
+ SuspectArrested = "~b~Suspeito arrestado",
+ InteractionOptions = "Opção de interações...",
+ Greet = "Cumprimentar",
+ GreetExplanation = "Cumprimentar a pessoa com quem está interagindo.",
+ AskForId = "Perguntar passaporte",
+ AskForIdExplanation = "Pedir a identidade.",
+ Question = "Questionar",
+ QuestionExplanation = "Questionar a pessoa com quem está interagindo.",
+ Breathalyze = "Analisar o fôlego",
+ BreathalyzeExplanation = "Realizar um teste de bafômetro para verificar se há intoxicação por álcool.",
+ DrugTest = "Teste de drogas",
+ DrugTestExplanation = "Realizar um teste de digital para detectar a presença de drogas.",
+ Warn = "Cuidado",
+ WarnExplanation = "Dê uma advertência à pessoa.",
+ Fine = "Bem",
+ FineExplanation = "Aplicar uma multa.",
+ Grab = "Pegar",
+ GrabExplanation = "Pegar a pessoa.",
+ GetOut = "Saia",
+ GetOutExplanation = "Ordenar que a pessoa saia do veículo.",
+ AskToFollow = "Siga-me",
+ AskToFollowExplanation = "Diga ao suspeito para seguir você.",
+ AskToWait = "Espere Aqui",
+ AskToWaitExplanation = "Diz para o suspeito esperar aqui.",
+ HandsUp = "Mão pra cima",
+ HandsUpExplanation = "Ordene as pessoas que levantem as mãos.",
+ Search = "Revistar",
+ SearchExplanation = "Revistar as roupas do suspeito.",
+ Cuff = "Algema",
+ CuffExplanation = "Detenha a pessoa algemando suas mãos.",
+ PutInVehicle = "Coloque no veículo",
+ PutInVehicleExplanation = "Peça à pessoa para entrar no veículo mais próximo.",
+ PersonalDetails = "Dados pessoais (ID Card)",
+ FullName = "Nome Completo:",
+ DOB = "Data de aniversário:",
+ DocumentNumber = "Número da identidade:",
+ Nationality = "Nacionalidade:",
+
+ DatabaseCheck = "Verificação do banco de dados da polícia",
+ RunningDatabaseCheck = "Verificação do banco de dados...",
+ DatabaseCheckResults = "Entradas do banco de dados encontradas",
+ Address = "Endereço:",
+ DriversLicense = "Carteira de motorista:",
+ BikeLicense = "Licença para bicicletas:",
+ BoatLicense = "Licença para embarcações:",
+ TruckLicense = "Licença para caminhões:",
+ PilotLicense = "Licença de piloto:",
+ Warrants = "Mandado(s) de segurança:",
+ FlagsOrMarkers = "Bandeiras/marcadores:",
+
+ ProfilePicture = "Foto:",
+ FirstName = "Nome:",
+ LastName = "Sobrenome:",
+ Gender = "Gênero:",
+ Email = "E-mail:",
+ PhoneNumber = "Telefone:",
+ Country = "País:",
+ State = "Estado:",
+ City = "Cidade:",
+ PostalCode = "Código Postal:",
+ AddressType = "Endereço:",
+ Licenses = "Licenças:",
+
+ -- Warrants
+ armed_and_dangerous = "Armado e perigoso",
+ assault = "Assaltante",
+ burglary = "Ladrão",
+ drug_related = "Usúario",
+ gang_affiliation = "Afiliado com gangs",
+ homicide = "Homicida",
+ kidnapping = "Sequestrador",
+ mental_health_issues = "Problemas mentáis",
+ sex_offense = "Ofença sexual",
+ terrorism = "Terrorismo",
+ theft = "Roubo",
+ traffic_violation = "Violação de trânsito",
+ wanted_person = "Pessoa procurada",
+ other = "Outro, descreva...",
+ active_warrant = "Recompensa ativa",
+
+ StopGrabbingInstruction = "Pressione ~INPUT_CELLPHONE_CANCEL~ para liberar a pessoa.",
+ CannotInteractWithThisNPC = "Não é possível interagir com essa pessoa...",
+ GrabWhenNotCuffedResponse = "Tire suas mãos de mim! Você terá que me prender primeiro...",
+ PersonAlreadyInteracting = "Essa pessoa está envolvida no momento...",
+ PersonAlreadyBeingEscorted = "Essa pessoa já está sendo escoltada...",
+ ThisPersonIsCuffed = "Essa pessoa está algemada...",
+ AlreadyPerformingCPR = "Você já está fazendo RCP...",
+ AlreadyCleaningUpObject = "Já está limpando um objeto...",
+ NoPedFoundToPerformCPROn = "Nenhuma pessoa foi considerada elegível para RCP...",
+ CPRSuccess = "A pessoa já está se sentindo melhor. Bom trabalho!",
+ CPRFail = "Parece que... Uh oh, a pessoa parece ter parado de respirar novamente...",
+ UnableToPerformCPR = "Incapaz de realizar a RCP, pois outra pessoa já tentou fazer isso antes de você...",
+ UnableToSendPersonAway = "Você não pode mandar a pessoa embora, tire suas algemas primeiro...",
+ WorkOnBleeding = "Aplicação de um torniquete/vedação torácica/gaze de ferimento devido a um sangramento intenso...",
+ WorkOnBleedingAlreadyDone = "Um torniquete/vedação torácica/gaze de ferimento já foi aplicado por outra pessoa, devido a um sangramento intenso...",
+ NotBleeding = "A pessoa não apresenta sangramento intenso.",
+ WorkOnAirway = "Desobstruir a boca da pessoa em uma tentativa de resolver uma obstrução das vias aéreas...",
+ WorkOnAirwayAlreadyDone = "A obstrução das vias aéreas que essa pessoa tinha já foi resolvida por outra pessoa...",
+ NoAirwayObstructions = "Não foram encontradas obstruções nas vias aéreas.",
+ WorkOnBreathing = "Sua taxa de respiração está anormal, ele deve ir ao hospital o mais rápido possível...",
+ WorkOnBreathingAlreadyDone = "Outra pessoa determinou que sua frequência respiratória está anormal, ela deve ir ao hospital o mais rápido possível...",
+ NoBreathingProblems = "A pessoa está respirando, mas precisa ser levada a um hospital o mais rápido possível.",
+ WorkOnCirculation = "Há algo errado com a sequência de seus batimentos cardíacos; é preciso ir ao hospital o mais rápido possível...",
+ WorkOnCirculationAlreadyDone = "Outra pessoa determinou que sua sequência de batimentos cardíacos está anormal, ela deve ir ao hospital o mais rápido possível...",
+ NoCirculationProblems = "A pessoa tem batimentos cardíacos regulares. Independentemente disso, ela deve ir ao hospital o mais rápido possível.",
+ PersonFeelsCold = "A pessoa sente muito frio...",
+ PersonFeelsWarm = "A pessoa sente muito calor...",
+ NoHypothermiaSigns = "Não foram detectados sinais de hipotermia.",
+ PersonFeelsColdAlreadyDetected = "A pessoa está começando a sentir muito frio...",
+ PersonFeelsWarmAlreadyDetected = "A pessoa está começando a sentir muito calor...",
+ NoHypothermiaSignsAlreadyDetected = "Não há sinais de hipotermia...",
+ OrderedPedToTheirKnees = "Você ordenou que a pessoa se ajoelhasse.",
+ OrderedPedToStandUp = "Você ordenou que uma pessoa se levante.",
+ PedIsDrunk = "O bafômetro indica que a pessoa excedeu o limite legal de álcool para dirigir.",
+ PedIsNotDrunk = "O bafômetro indica que a pessoa está dentro do limite legal de álcool para dirigir.",
+ PedIsUnderInfluenceOfDrugs = "O teste de drogas indica que a pessoa está sob a influência de drogas.",
+ PedIsNotUnderInfluenceOfDrugs = "O teste de drogas indica que a pessoa não está sob a influência de drogas.",
+ YoureNotAPoliceOfficer = "O senhor não se parece com um policial...",
+ InTheWrongService = "Você não está no lugar certo, sabe...",
+ AskForGear = "Solicite equipamentos...",
+ GetOutWhenNotInAVehicleResponse = "Esta pessoa não está em um veículo.",
+
+ -- qb-target / ox-target
+ VehSpeakTo = "Fale com",
+ VehAssist = "Ajudar feridos",
+ VehDriver = "Dirija",
+ VehFrontPassenger = "passageiro da frente",
+ VehRearPassenger = "passageiro traseiro",
+ VehPassenger = "passageiro",
+
+ -- Dead ped Interaction
+ IdentifyDeadPed = "Identificar",
+ DragPed = "Arrastar",
+ CheckMassiveBleeding = "Sangramento",
+ CheckAirway = "Via aérea",
+ CheckBreathing = "Respirando",
+ CheckCirculation = "Circulação",
+ CheckHypothermia = "Hipotermia",
+ PerformCPR = "Realize RCP",
+ PutOnStretcher = "Coloque na maca",
+ TakeOffStretcher = "Tire a maca",
+ PutInBodyBag = "Coloque na bolsa para cadáver",
+
+ IdentifyDeadPedExplanation = "Identifique a pessoa ferida",
+ DragPedExplanation = "Arraste a pessoa",
+ CheckMassiveExplanation = "Verifique se há sangramentos",
+ CheckAirwayExplanation = "Verifique se há obstruções nas vias aéreas",
+ CheckBreathingExplanation = "Verifique se a pessoa ainda está respirando e em que sequência",
+ CheckCirculationExplanation = "Verifique se a pessoa tem pulso",
+ CheckHypothermiaExplanation = "Verifique qual é a temperatura corporal da pessoa",
+ PerformCPRExplanation = "Comece a realizar RCP na pessoa",
+ PutOnStretcherExplanation = "Coloque a pessoa em uma maca próxima",
+ TakeOffStretcherExplanation = "Tire a pessoa da maca",
+ PutInBodyBagExplanation = "Coloque a pessoa em um saco para cadáver",
+
+ -- Stretcher
+ MustBeOnShiftToDoThis = "Você não está em serviço...",
+ NoNearbyStretcherFound = "Nenhuma maca próxima foi encontrada...",
+ StretcherStillInUse = "Esta maca ainda está em uso...",
+ StretcherAlreadyInUse = "Esta maca já está em uso...",
+ ReleasedStretcher = "Você liberou a maca.",
+ StillUsingStretcher = "Você ainda está usando a maca...",
+ NotUsingStretcher = "Você não está usando a maca...",
+ LowerTheNearbyStretcher = "Certifique-se de ter baixado uma maca próxima...",
+ StretcherAlreadyOccupied = "Esta maca já está ocupada...",
+ ThisPersonIsNotOnAStretcher = "Esta pessoa não parece estar em uma maca...",
+ CannotDoThisWhenPedIsOnStretcher = "Você não pode realizar esta ação enquanto a pessoa estiver em uma maca...",
+ StretcherAlreadySpawnedForVehicle = "Este veículo já tem uma maca...",
+ AmbulanceAlreadyHasAStretcherInside = "Não é possível interagir com a ambulância porque você está empurrando uma maca e o veículo possui uma maca dentro...",
+ VehicleMustBeEmptyForStretcherInteraction = "O veículo deve estar vazio antes de realizar interações de maca com ele...",
+ CantInteractWithStretcherInsideVehicle = "Você não pode interagir com uma maca dentro de um veículo...",
+ PlacedStretcherIntoAVehicle = "Você colocou a maca dentro do veículo.",
+ TakenStretcherFromAVehicle = "Você tirou a maca do veículo.",
+ PersonTransferredToHospital = "Você transferiu a pessoa para os funcionários do hospital.",
+ PersonSaved = "~b~VÍTIMA RESGATADA!",
+ DropOffPersonAtHospital3DText = "Pressione ~o~ENTER~w~ para transferir a pessoa para o pessoal deste hospital",
+ ThereIsStretcherOnTheGroundNearby = "Há uma maca no chão perto, pegue-a para colocá-la no veículo.",
+ SomeoneElseHasNetworkOwnershipOverTheStretcher = "Alguém mais tem posse da maca. Eles devem se mover para que você possa interagir.",
+ SomeoneElseHasNetworkOwnershipOverTheVehicle = "Alguém mais tem posse do veículo. Eles devem se mover para que você possa interagir.",
+ GetOnOrOffStretcher = "Pegar/Colocar na maca",
+
+ -- Inventory
+ Inventory = "Itens do inventório carregados...",
+
+ -- Vehicle Interactions
+ VehicleDetails = "Detalhes do veículo",
+ VehiclePlate = "Placa do veículo",
+ VehicleModel = "Modelo do veículo",
+ VehicleOwner = "Proprietário do veículo",
+ VehicleColor = "Cor do veículo",
+ VehicleColorSecondary = "Cor secundária do veículo",
+ VehicleBuildYear = "Ano de fabricação do veículo",
+ VehicleTax = "Imposto dos veículos",
+ VehicleMOT = "Inspeção de segurança veicular",
+ VehicleInsurance = "Seguro de veículos",
+ VehicleStolen = "Denunciado como roubado",
+ VehicleStolenDescription = "Veículo roubado",
+ VehicleBolo = "BOLO ativo",
+ VehicleBoloDescription = "Descrição BOLO",
+ Paid = "PAGO",
+ NotPaid = "Sem pagar",
+ Valid = "Feito",
+ Invalid = "Invalido",
+ Passed = "Passou",
+ Failed = "Falho",
+ SearchThe = "Busca de ",
+ FoundItem = "Você encontrou a",
+ ItemWillBeConfiscatedAutomaticallyIn10Seconds = "O item será confiscado automaticamente em 10 segundos...",
+ NothingFoundInThisPartOfTheVehicle = "Não foi possível encontrar nada nessa parte do veículo...",
+ NotCloseEnoughToVehicle = "Você não está perto o suficiente do veículo que deseja vereficar...",
+ NotCloseEnoughToVehicleSection = "Você não está perto o suficiente da seção do veículo que deseja procurar...",
+ VehicleIsNotEmpty = "O veículo não está vazio...",
+ VehicleDataTimeout = "Não foi possível interagir com este veículo no momento devido ao tempo limite, tente novamente mais tarde...",
+
+ -- Behaviour State
+ NeutralLabel = "Tem uma expressão neutra no rosto",
+ RelaxedLabel = "Parece relaxado",
+ BusyLabel = "Parece estar em prontidão",
+ CheerfulLabel = "Parece feliz",
+ FriendlyLabel = "Parece amigável",
+ IrritatedLabel = "Parece irritado",
+ StressedLabel = "Parece estressado",
+ WorriedLabel = "Parece preocupado",
+ ConfusedLabel = "Parece confuso",
+ SuspiciousLabel = "Parece suspeito",
+ DeliriousLabel = "Parece imprevisível",
+ ParanoidLabel = "Parece extremamente desconfiado",
+
+ -- Questioning
+ ExitConversation = "Acho que já sei o suficiente... (Sair da conversa)",
+ YouHaveAskedAllQuestions = "Você fez todas as perguntas disponíveis para esta interação.",
+
+ -- Answering questions
+ ConversationHistory = "Histórico da conversa",
+ QDriversLicense = "carro",
+ QBikeLicense = "moto",
+ QBoatLicense = "barco",
+ QTruckLicense = "caminhão",
+ QPilotLicense = "avião",
+ PrefixDrunk = "Hic!",
+ SuffixDrunk = "**Arroto**",
+ PrefixDrugged = "Ah...",
+ SuffixDrugged = "**Mastiga**",
+ Sober = "sóbrio",
+ Drunk = "bêbado",
+ High = "chapado",
+ Stoned = "doidão",
+ BleedingSomewhere = "sangrando em algum lugar",
+ TroubleWithBreathing = "com dificuldade para respirar",
+ SomethingStuckInThroat = "com algo preso na garganta",
+ Warm = "superaquecido",
+ Cold = "frio",
+ Healthy = "saudável",
+ Dizzy = "tonto",
+ Extrasunny = "ensolarado",
+ Overcast = "nublado",
+ Rain = "chuva",
+ Foggy = "neblina",
+ Smog = "poluição",
+ Clouds = "nuvens",
+ Snow = "neve",
+ Snowlight = "neve leve",
+ Xmas = "neve pesada",
+ Halloween = "escuridão",
+ Blizzard = "nevasca",
+ RainHalloween = "escuridão chuvosa",
+ SnowHalloween = "escuridão nevada",
+ Thunder = "trovão",
+ Clearing = "chuva leve",
+ Neutral = "clima",
+
+ -- Hints
+ OrderOnKneesOrStandUpExplanation = "Ordem para ajoelhar-se / levantar-se.",
+ AcceptCallout = "Aceitar chamado.",
+ CompleteCallout = "Chamada de emergência completa.",
+ CuffExplanation = "Tire/Coloque as algemas da pessoa mais próxima.",
+ PullOver = "Encostar o veículo.",
+ RadialMenuExplanation = "Solicitações de despacho (Radial menu)",
+ StopTrackingUnitExplanation = "Parar a unidade de rastreamento",
+ CannotTrackYourself = "Não é possível rastrear a si mesmo.",
+ TargetNotOnACallout = "Essa unidade não está em uma chamada ativa, portanto, não pode ser localizada...",
+
+ InputHelpText = "Você deve inserir cores RGB ou mencionar uma cor. [Exemplos: red | 255 0 0]",
+ WaitCooldown = "Você precisa esperar: o tempo de espera ainda está ativo...",
+ NoPermission = "Você não tem permissão para fazer isso.",
+ MustSetNumberValue = "Erro. você deve inserir um valor numérico que represente o ID do servidor do jogador.",
+ CannotIdentifySize = "Não é possível identificar esse tamanho... Tente novamente",
+
+ CannotDoThisOnFoot = "Não é possível fazer isso a pé.",
+ CannotDoThisInAVehicle = "Não é possível fazer isso em um veículo.",
+ CannotDoThisAsPassenger = "Você não pode fazer isso como passageiro de um veículo...",
+
+ UseMDTToToggleShift = "Você pode alternar seu trabalho por meio do MDT. Se você quiser desativar as ofertas de chamada:",
+ CalloutsDisabled = "Seus chamados estão desativados.",
+
+ Dispatch = "Despacho",
+ Responding = "Unidade respondendo à última chamada de emergência.",
+ ArriveAtScene = "A unidade chegou ao local.",
+ AmbulanceDispatched = "Foi enviada uma ambulância...",
+ PoliceTransportDispatched = "A viatura policial foi enviada...",
+ VehicleTransportDispatched = "O guincho foi enviado...",
+ TaxiDispatched = "Um táxi foi enviado.",
+ TrackingUnit = "Agora você está rastreando a localização GPS da unidade. Essa localização é atualizada enquanto você estiver rastreando.",
+ StoppedTrackingUnit = "Você parou de rastrear outra unidade.",
+}
\ No newline at end of file
diff --git a/resources/night_ers/config/translations/us.lua b/resources/night_ers/config/translations/us.lua
new file mode 100644
index 000000000..d9f92ea09
--- /dev/null
+++ b/resources/night_ers/config/translations/us.lua
@@ -0,0 +1,628 @@
+Config = Config or {}
+Config.Messages = Config.Messages or {}
+
+ --====================== Language ======================--
+
+Config.Messages['us'] = {
+ ScriptInitialising = "The script is still initialising, please wait...",
+ Yes = "Yes",
+ No = "No",
+ AreYouSureCompleteCallout = "Are you sure you want to complete the callout?",
+ CompletingCalloutCannotBeUndone = "Completing this callout can not be undone.",
+ Controls = "Controls",
+ Hint = "Hints",
+ HotKeys = "Hotkeys",
+ Explanation = "Explanations",
+ Unknown = "Unknown",
+ ToHideOrShow = "to hide/show",
+ Aim = "Aim",
+ AimToOrderPedTextDrawing = "~p~'~w~E~p~'~w~ » Kneel ~p~/ ~w~Stand up ",
+ AimToOrderAnimalTextDrawing = "~p~'~w~E~p~'~w~ » Stop ~p~/ ~w~Let go ",
+ GrabOrReleaseStretcher = "~p~'~w~E~p~'~w~ » Grab ~p~/ ~w~Release",
+ RaiseOrLowerStretcher = "~p~' ~w~↑~p~ | ~w~↓~p~ '~w~ » Raise ~p~/ ~w~Lower",
+ ToggleHints = "Did you know you can toggle this display?",
+ DisableHints = "Disabled hints.",
+ EnableHints = "Enabled hints.",
+ DisabledCallouts = "Disabled callout offers.",
+ EnabledCallouts = "Enabled callout offers.",
+ OnShift = "You've started your shift",
+ OffShift = "You've ended your shift",
+ NotOnShift = "You are not on a shift.",
+ Postal = "Postal",
+ StreetName = "Streetname",
+ RequiredUnits = "Required units",
+ ProvideBackupIfRequested = "Provide backup if requested.",
+ Nearby = "nearby",
+ OfferedCalloutActiveOrAttachedToACallout = "You can't do this: You already have an active callout offer or you're already attached to a callout.",
+ CouldNotRequestCalloutCooldown = "A callout request or offer was blocked due to a cooldown. Please try again later...",
+ CouldNotRequestACallout = "Could not offer a callout at this moment (server was busy), please try again...",
+ CouldNotRequestCallout = "Could not offer a callout because you are not part of any of the required roles/groups to receive the callout OR because no callouts were enabled (for your service) (callouts_config.lua)...",
+ CalloutMarkedOnYourGPS = "The route to the last callout has been marked on your GPS.",
+ AcceptedCallout = "You've been attached to",
+ CancelCallout = "The callout has been cancelled.",
+ NotAbleToCancelCallout = "You can not cancel the callout at this moment, please try again in a few seconds...",
+ DetachedFromCallout = "Your unit was detached from the last callout.",
+ LastCalloutOfferExpired = "Other units were able to resolve the last emergency call.",
+ NotAttachedToCallout = "You can't cancel a callout you're not attached to.",
+ AnyUnitsAvailableToRespond = "Are any units available to respond?",
+ CancelUnitsBeforeGoingOffShift = "You must cancel your request for units before going off shift...",
+ NoPermissionToGoOnShift = "You have no permissions to go on or off shift...",
+ ServerCouldNotBuildCalloutError = "ERROR: The server could not build the callout, due to a mistake in the code.",
+ PersonHasPassedOut = "~r~ALERT ~w~The person seems to have lost consciousness!",
+ PersonIsTakingOff = "~r~ALERT ~w~The person is taking off!",
+ PersonIsAgressive = "~r~ALERT ~w~The person looks aggressive!",
+ PersonIsSurrendering = "~g~ALERT ~w~The person is surrendering!",
+ PedCannotEnterVehicle = "The person is not able to enter the nearest vehicle.",
+ NoNearbyVehicleFound = "No nearby vehicle found, bring the person closer to the vehicle...",
+ PulloverModeExplanation = "Get close to the vehicle you desire to pull over...",
+ PulloverInitiatedRear = "The vehicle will now stay in behind you. Press U to toggle manual steering.",
+ PulloverInitiatedFront = "The vehicle will now stay in front of you. Press U to toggle manual steering.",
+ PulloverConcluded = "The pullover has concluded...",
+ PulloverFailedToLockInVehicle = "Failed to lock in a vehicle to pull over, please try again...",
+ PulloverManualSteeringEnabled = "Manual pullover control enabled...",
+ PulloverManualSteeringDisabled = "Manual pullover control disabled, the vehicle will now mimic your driving again...",
+ RequestCooldownActive = "Please wait at least 3 seconds before attempting to request or cancel a request...",
+ AlreadyAttachedToCallout = "You are already attached to an other callout...",
+ DeclinedCalloutOffer = "You've declined the request to respond to a callout.",
+ NoSpawnPointAvailableForNPC = "No suitable spawn position found for the requested backup unit in this area.",
+ CantCancelBackup = "You can't cancel this backup anymore.",
+ NotEnoughSpaceBehindAmbulance = "Not enough space behind ambulance to spawn or put away the stretcher",
+ ImpoundVehicleSubtitle = "To impound your vehicle, drive to the impound location that I marked for you.",
+ ImpoundVehicleLeaveSubtitle = "Please exit the vehicle and step away.",
+ ImpoundVehicleNotAllowedSubtitle = "That vehicle is not allowed here...",
+ CannotDoThisWhilePedIsInAVehicle = "You can't do this while the person is in a vehicle...",
+ OffDuty = "Off Duty",
+ OnDuty = "On Duty",
+ SuspectIsTryingToStealAVehicle = "The suspect is trying to get away in a vehicle!",
+ TrafficStop = "Traffic Stop",
+
+ -- Dispatch
+ DispatchMessage = "Dispatch Message",
+ NextDispatchMessage = "Next message in",
+ Seconds = "seconds",
+ Loading = "Loading",
+ None = "None",
+ TrackUnitProposal = "Track this unit",
+ EmergencyCall = "Emergency Call",
+ Caller = "Caller:",
+ CallDescription = "Description:",
+ Location = "Location:",
+ Postal = "Postal:",
+ CalloutUnitsRequired = "Units required:",
+ UnitResponse = "is responding to an emergency.",
+ UnitDetached = "has detached from their emergency call.",
+ UnitArrived = "has arrived at the incident.",
+ UnitOnShift = "has started their shift.",
+ UnitOffShift = "has ended their shift.",
+ DispatchNote = "Dispatch note:",
+ DispatchNoteText = "GPS will be marked on your map.",
+ DispatchNoteResponseText = "Provide backup if required...",
+ CompleteCalloutFooterText = "Press button to complete the callout:",
+ TimeRemainingToAcceptCallout = "Time remaining to accept the callout:",
+ HasRequestedPolice = "has requested police transportation for a suspect.",
+ HasRequestedAmbulance = "has requested an ambulance unit.",
+ HasRequestedTaxi = "has requested a taxi.",
+ HasRequestedTow = "has requested a vehicle transportation unit.",
+ HasRequestedRoadService = "has requested a road service unit.",
+ HasRequestedCoroner = "has requested a coroner to attend to their location.",
+ HasRequestedAnimalRescue = "has requested an animal rescue unit.",
+ HasRequestedMechanic = "has requested a mechanic.",
+ HasRequestedFire = "has requested the fire department.",
+ DispatchMessagesEnabled = "Dispatch messages have been enabled.",
+ DispatchMessagesDisabled = "Dispatch messages have been disabled.",
+
+ -- Tasks
+ InvolvedPedsRemaining = "Involved subjects remaining:",
+ InvolvedVehsRemaining = "Vehicle transport tasks remaining:",
+ InvolvedObjsRemaining = "Road Service tasks remaining:",
+ InvolvedPropsRemaining = "Coroner tasks remaining:",
+ ExtinguishAllFires = "Extinguish all fires.",
+ ClearAreaOfSmoke = "Clear the area of smoke.",
+
+ -- ERS Selection menu
+ Select = "Select",
+ Cancel = "Cancel",
+ SelectService = "Select Service",
+ Police = "Police Service",
+ Ambulance = "Ambulance Service",
+ Fire = "Fire Service",
+ Tow = "Tow Service",
+ PoliceDescription = "Guardians of justice, protecting with courage.",
+ AmbulanceDescription = "Heroes of healing, saving lives swiftly.",
+ FireDescription = "Fearless firefighters, battling bravely.",
+ TowDescription = "Roadside rescuers, providing swift aid.",
+
+ -- Gear Selection menu
+ SelectGear = "Select Gear",
+
+ -- Radial menu
+ RadialMenuInstructionTitle = "Select an available backup unit...",
+ ExitRadialMenuInstruction = "Click to exit the radial menu...",
+ RequestPoliceTransportIcon = "fa-solid fa-handcuffs", -- https://fontawesome.com/search?m=free&o=r
+ RequestPoliceTransportInstruction = "Click to request or cancel a police transport unit for the nearest suspect to be transported...",
+ RequestAmbulanceIcon = "fa-solid fa-truck-medical",
+ RequestAmbulanceInstruction = "Click to request or cancel an ambulance unit to attend to wounded people in the area...",
+ RequestTowIcon = "fa-solid fa-car-burst",
+ RequestTowInstruction = "Click to request or cancel a vehicle transport unit for the nearest vehicle to be picked up...",
+ RequestTaxiIcon = "fa-solid fa-taxi",
+ RequestTaxiInstruction = "Click to request or cancel a taxi for the nearest person...",
+ RequestRoadServiceIcon = "fa-solid fa-broom",
+ RequestRoadServiceInstruction = "Click to request or cancel a road service unit to clean up the nearby roads...",
+ RequestCoronerIcon = "fa-solid fa-book-skull",
+ RequestCoronerInstruction = "Click to request or cancel a coroner unit response to pick up the bodybags in the area...",
+ RequestAnimalRescueIcon = "fa-solid fa-paw",
+ RequestAnimalRescueInstruction = "Click to request or cancel an animal rescue unit to take care of nearby animals...",
+ RequestMechanicIcon = "fa-solid fa-screwdriver-wrench",
+ RequestMechanicInstruction = "Click to request or cancel a mechanic unit to fix the nearest vehicle...",
+ RequestFireIcon = "fa-solid fa-fire",
+ RequestFireInstruction = "Click to request or cancel a fire department unit to extinguish the nearby fire...",
+ RequestedUnitStrugglingToReach = "The requested unit is struggling to reach your location... They might be cancelled.",
+
+ -- Pursuit Radial Menu
+ PursuitRadialMenuInstructionTitle = "Select a unit to request pursuit backup...",
+ PursuitRadialMenuInstruction = "Click to request or cancel pursuit backup for the suspect you are pursuing...",
+ RequestLightBackupIcon = "fa-solid fa-motorcycle",
+ RequestLightBackupInstruction = "Click to request or cancel light pursuit backup for the suspect you are pursuing...",
+ RequestMediumBackupIcon = "fa-solid fa-car-on",
+ RequestMediumBackupInstruction = "Click to request or cancel medium pursuit backup for the suspect you are pursuing...",
+ RequestHeavyBackupIcon = "fa-solid fa-truck-moving",
+ RequestHeavyBackupInstruction = "Click to request or cancel heavy pursuit backup for the suspect you are pursuing...",
+ RequestAirBackupIcon = "fa-solid fa-helicopter",
+ RequestAirBackupInstruction = "Click to request or cancel air pursuit backup for the suspect you are pursuing...",
+ RequestArmyBackupIcon = "fa-solid fa-person-military-rifle",
+ RequestArmyBackupInstruction = "Click to request or cancel army pursuit backup for the suspect you are pursuing...",
+
+ -- Pursuit notifications
+ ActivePursuit = "ACTIVE PURSUIT",
+ NotInPursuitMode = "You are not in a pursuit...",
+ CancellingPreviousRequestForBackup = "Cancelling previous request for backup units...",
+ BackupAlreadyRequested = "Backup units have already been requested. To cancel the request, select the same unit...",
+ PursuitBackupTooFarAway = "(One of) the pursuit backup units are too far away, cancelling the request...",
+ PursuitCancelledReasonPersonDied = "The pursuit has come to an end. The person you were chasing has passed away.",
+ PursuitCancelledReasonLostTarget = "The pursuit has come to an end, since you've lost the target.",
+ PursuitCancelledReasonPersonVanished = "The pursuit has been cancelled... The person you were chasing has vanished.",
+ PursuitCancelledReasonVehicleVanished = "The pursuit has been cancelled... The vehicle you were chasing has vanished.",
+ PursuitCancelledReasonPersonCaught = "The pursuit has come to an end... You've caught the person you were chasing.",
+ PursuitHotkeyFocus = "focus",
+ PursuitHotkeyBackup = "backup",
+ PursuitCancelledReasonNoLongerCapableOfPursuing = "The pursuit has been cancelled... You're no longer able to pursue the target.",
+
+ -- Ambulance
+ AmbulanceAlreadyEnroute = "You've already requested an ambulance...",
+ RequestingAmbulance = "Requesting an ambulance...",
+ AmbulanceDone = "The ambulance is leaving the scene.",
+ NoAmbulanceEnroute = "There is no ambulance enroute.",
+ AmbulanceCancelled = "Ambulance request cancelled.",
+ NoPeopleFoundAmbulance = "There were no people found to provide treatment/transport for...",
+ AllAmbulancesOccupied = "All ambulance units occupied. Try again in a few seconds, please...",
+ AmbulanceArrived = "The ambulance has arrived",
+ AmbulanceEnroute = "An ambulance has been dispatched and is now enroute...",
+ NextMedicTask = "The medic has been assigned to take care of an assigned person.",
+
+ -- Police
+ PoliceAlreadyEnroute = "You've already requested police transportation...",
+ RequestingPolice = "Requesting police transport.",
+ PoliceDone = "The police transport is leaving the scene.",
+ NoPoliceEnroute = "There is no police transport enroute...",
+ PoliceCancelled = "Police transport request cancelled...",
+ NoPeopleFoundPolice = "There were no people found to provide transport for...",
+ AllPoliceOccupied = "All police units occupied. Try again in a few seconds, please...",
+ PoliceArrived = "Police transport has arrived.",
+ PoliceEnroute = "Police transport has been dispatched and is now enroute...",
+ NextPoliceTask = "The police officer has been assigned to pick up an assigned person.",
+
+ -- Taxi
+ TaxiAlreadyEnroute = "You've already requested a taxi.",
+ RequestingTaxi = "Requesting taxi for the nearest person.",
+ TaxiDone = "The person has been picked up by the taxi driver and they're now leaving.",
+ NoTaxiEnroute = "There is no taxi enroute...",
+ TaxiCancelled = "Taxi request has been cancelled.",
+ NoPeopleFound = "There were no people found to provide transport for...",
+ AllTaxisOccupied = "All taxis occupied. Try again in a few seconds...",
+ TaxiArrived = "The taxi has arrived.",
+ TaxiEnroute = "A taxi has been dispatched and is now enroute...",
+ NextTaxiTask = "The taxi driver has been assigned to pick up an assigned person.",
+
+ -- Tow
+ TowAlreadyEnroute = "You've already requested vehicle transport.",
+ RequestingTow = "Requesting vehicle transport for the nearest vehicle.",
+ TowDone = "The vehicle has been picked up by the tow truck and they're now leaving.",
+ NoTowEnroute = "There is no vehicle transport enroute...",
+ RequestingTowButVehicleOccupied = "To request vehicle transport the vehicle must be unoccupied...",
+ TowCancelled = "Vehicle transport request cancelled.",
+ NoVehiclesFound = "There were no vehicles found to provide transport for...",
+ AllTowOccupied = "All vehicle transport units occupied. Try again in a few seconds, please...",
+ TowArrived = "Vehicle transport has arrived.",
+ TowEnroute = "A vehicle transport unit has been dispatched and is now enroute...",
+ NextTowTask = "The tow truck driver has been assigned to pick up a vehicle.",
+
+ -- Road Service
+ RoadServiceAlreadyEnroute = "You've already requested road service.",
+ RequestingRoadService = "Requesting road service for the nearest task.",
+ RoadServiceDone = "The rubble has been cleaned, the road service unit is departing from the scene.",
+ NoRoadServiceEnroute = "There is no road service enroute...",
+ RoadServiceCancelled = "Road service request cancelled.",
+ NoRoadServiceTaskFound = "There was no task found to provide road service for...",
+ AllRoadServiceOccupied = "All road service units occupied. Try again in a few seconds, please...",
+ RoadServiceArrived = "Road Service has arrived.",
+ RoadServiceEnroute = "A road service unit has been dispatched and is now enroute...",
+ NextRoadServiceTask = "The road service employee has been tasked to clean up the rubble in the area, to clear the road.",
+
+ -- Coroner
+ CoronerAlreadyEnroute = "You've already requested a coroner.",
+ RequestingCoroner = "Requesting a coroner for the nearest task.",
+ CoronerDone = "The bodies have been cleared from the scene and will be taken to a morgue.",
+ NoCoronerEnroute = "There is no coroner enroute...",
+ CoronerCancelled = "Coroner request cancelled.",
+ NoCoronerTaskFound = "There was no task found to provide a coroner for...",
+ AllCoronerOccupied = "All coroner units occupied. Try again in a few seconds, please...",
+ CoronerArrived = "The coroner has arrived.",
+ CoronerEnroute = "A coroner has been dispatched and is now enroute...",
+ NextCoronerTask = "The coroner has been tasked to pick up the bodybags in the area.",
+
+ -- Animal Rescue
+ AnimalRescueAlreadyEnroute = "You've already requested animal rescue.",
+ RequestingAnimalRescue = "Requesting animal rescue for the nearby animals.",
+ AnimalRescueDone = "The animals have been picked up from the scene.",
+ NoAnimalRescueEnroute = "There is no animal rescue unit enroute...",
+ AnimalRescueCancelled = "Animal rescue request cancelled.",
+ NoAnimalRescueTaskFound = "There was no task found to provide animal rescue for...",
+ AllAnimalRescueOccupied = "All animal rescue units occupied. Try again in a few seconds, please...",
+ AnimalRescueArrived = "The animal rescue unit has arrived.",
+ AnimalRescueEnroute = "Animal rescue has been dispatched and is now enroute...",
+ NextAnimalRescueTask = "Animal rescue has been assigned to take care of an assigned animal.",
+
+ -- Mechanic
+ MechanicAlreadyEnroute = "You've already requested a mechanic.",
+ RequestingMechanic = "Requesting a mechanic for the nearest vehicle.",
+ MechanicDone = "The vehicle has been fixed by the mechanic and they're now leaving.",
+ NoMechanicEnroute = "There is no mechanic enroute...",
+ MechanicCancelled = "Mechanic request cancelled.",
+ NoMechanicTaskFound = "There was no task found to provide a mechanic for...",
+ AllMechanicOccupied = "All mechanic units occupied. Try again in a few seconds, please...",
+ MechanicArrived = "Mechanic has arrived.",
+ MechanicEnroute = "A mechanic has been dispatched and is now enroute...",
+
+ -- Fire
+ FireAlreadyEnroute = "You have already requested fire services.",
+ RequestingFire = "Requesting fire services for the nearest fire.",
+ FireDone = "The fire has been extinguished by the firefighters and they are now leaving.",
+ NoFireEnroute = "There are no firefighters enroute...",
+ FireCancelled = "Firefighter request cancelled.",
+ NoFireTaskFound = "No task found for the firefighters...",
+ AllFireOccupied = "All firefighter units are occupied. Please try again in a few seconds...",
+ FireArrived = "The firefighters have arrived.",
+ FireEnroute = "A firefighter unit has been dispatched and is enroute...",
+ NextFireTask = "The firefighters have been assigned to extinguish the nearby fire.",
+ NoFireInArea = "There is no fire in the area...",
+
+ -- Spikestrip
+ SpikestripAlreadyDeployed = "You already have a spikestrip deployed...",
+ PutAwaySpikestrip = "Putting away spikestrip",
+ TakeOutSpikestrip = "Taking out spikestrip",
+ SpikestripDeployed = "Spikestrip deployed",
+ SpikestripPickedUp = "Spikestrip picked up",
+ SpikestripRemoved = "Spikestrip removed",
+ ToGrabOrPutAwaySpikestripFromVehicle = "to grab or put away a spikestrip from/into a vehicle",
+ ToDeployOrPickupSpikestrip = "to deploy or pick up a spikestrip",
+ FailedToGrabSpikestrip = "Failed to grab spikestrip...",
+
+ -- Ped Interaction
+ YouSay = "You say",
+ Press = "Press",
+ ToInteract = "to interact with the person nearby",
+ ToInteractImpound = "to interact with the person in charge of the impound lot",
+ ToInteractGear = "to interact with the person in charge of the gear",
+ ToPerformCPR = "to interact with the injured person nearby",
+ ToUseStretcherVeh = "to take or place the stretcher from/into the vehicle",
+ ToCleanupObject = "to clean up any rubble nearby",
+ StopInteraction = "End conversation and order to leave",
+ ExitInteraction = "Exit interaction",
+ SendToCustody = "Send to custody",
+ PersonTakenIntoCustody = "The person has been taken into custody.",
+ NoCustodyCenterNearby = "No custody center nearby.",
+ SuspectArrested = "~b~SUSPECT ARRESTED",
+ InteractionOptions = "Interaction options...",
+ Greet = "Greet",
+ GreetExplanation = "Greet the person you are interacting with.",
+ AskForId = "Ask ID",
+ AskForIdExplanation = "Ask for the persons identification card.",
+ Question = "Question",
+ QuestionExplanation = "Question the person you are interacting with.",
+ Breathalyze = "Breathalyze",
+ BreathalyzeExplanation = "Conduct a breathalyzer test to check for alcohol intoxication.",
+ DrugTest = "Drug Test",
+ DrugTestExplanation = "Conduct a drug swab test, to detect the presence of drugs.",
+ Warn = "Warning",
+ WarnExplanation = "Give the person a warning.",
+ Fine = "Fine / Ticket",
+ FineExplanation = "Give the person a fine or ticket.",
+ Grab = "Grab",
+ GrabExplanation = "Grab the person.",
+ GetOut = "Get out",
+ GetOutExplanation = "Order the person to exit the vehicle.",
+ AskToFollow = "Follow me",
+ AskToFollowExplanation = "Tell the person to follow you.",
+ AskToWait = "Wait here",
+ AskToWaitExplanation = "Tell the person to wait here.",
+ HandsUp = "Hands up",
+ HandsUpExplanation = "Order the person to put their hands up.",
+ Search = "Search",
+ SearchExplanation = "Search the person's clothing.",
+ Cuff = "Cuff",
+ CuffExplanation = "Detain the person by cuffing their hands.",
+ PutInVehicle = "Put in vehicle",
+ PutInVehicleExplanation = "Task the person to enter the nearest vehicle.",
+ PersonalDetails = "Personal details (ID Card)",
+ FullName = "Full Name:",
+ DOB = "Date of Birth:",
+ DocumentNumber = "Document Number:",
+ Nationality = "Nationality:",
+
+ DatabaseCheck = "Police Database Check",
+ RunningDatabaseCheck = "Scanning through the database...",
+ DatabaseCheckResults = "Database Entries Found",
+ Address = "Address:",
+ DriversLicense = "Drivers License:",
+ BikeLicense = "Bike License:",
+ BoatLicense = "Boat License:",
+ TruckLicense = "Truck License:",
+ PilotLicense = "Pilot License:",
+ Warrants = "Warrant(s):",
+ FlagsOrMarkers = "Flags / Markers:",
+
+ ProfilePicture = "Photo:",
+ FirstName = "First Name:",
+ LastName = "Last Name:",
+ Gender = "Gender:",
+ Email = "E-mail:",
+ PhoneNumber = "Phone Number:",
+ Country = "Country:",
+ State = "State:",
+ City = "City:",
+ PostalCode = "Postal Code:",
+ AddressType = "Address Type:",
+ Licenses = "Licences:",
+
+ -- Warrants
+ armed_and_dangerous = "Armed and Dangerous",
+ assault = "Assault",
+ burglary = "Burglary",
+ drug_related = "Drug Related",
+ gang_affiliation = "Gang Affiliation",
+ homicide = "Homicide",
+ kidnapping = "Kidnapping",
+ mental_health_issues = "Mental Health Issues",
+ sex_offense = "Sex Offense",
+ terrorism = "Terrorism",
+ theft = "Theft",
+ traffic_violation = "Traffic Violation",
+ wanted_person = "Wanted Person",
+ other = "Other, read description...",
+ active_warrant = "Active Warrant",
+
+ StopGrabbingInstruction = "Press ~INPUT_CELLPHONE_CANCEL~ to release the person.",
+ CannotInteractWithThisNPC = "You can not interact with this person...",
+ GrabWhenNotCuffedResponse = "Keep your hands off me! You'll have to arrest me first...",
+ PersonAlreadyInteracting = "This person is currently engaged...",
+ PersonAlreadyBeingEscorted = "This person is already being escorted...",
+ ThisPersonIsCuffed = "This person is cuffed...",
+ AlreadyPerformingCPR = "You are already performing CPR...",
+ AlreadyCleaningUpObject = "You are already cleaning up an object...",
+ NoPedFoundToPerformCPROn = "No person found eligible for CPR...",
+ CPRSuccess = "The person is feeling better already. Good work!",
+ CPRFail = "It looks like... Uh oh, the person seems to have stopped breathing again...",
+ UnableToPerformCPR = "Unable to perform CPR as someone else has already attempted this before you...",
+ UnableToSendPersonAway = "You can not send the person away, uncuff them first...",
+ WorkOnBleeding = "Applying a tourniquette / chest seal / wound gauze because of a massive bleeding...",
+ WorkOnBleedingAlreadyDone = "A tourniquette / chest seal / wound gauze has already been applied by someone else, due to a massive bleeding...",
+ NotBleeding = "Person does not have a massive bleeding.",
+ WorkOnAirway = "Clearing the person's mouth in an attempt to resolve an airway obstruction...",
+ WorkOnAirwayAlreadyDone = "The airway obstruction this person had, was already resolved by someone else...",
+ NoAirwayObstructions = "No airway obstructions found.",
+ WorkOnBreathing = "Their breathing rate is abnormal, they must visit the hospital ASAP...",
+ WorkOnBreathingAlreadyDone = "Someone else has determined their breathing rate is abnormal, they must visit the hospital ASAP...",
+ NoBreathingProblems = "The person is breathing, but needs to be brought to a hospital ASAP.",
+ WorkOnCirculation = "There is something wrong with the sequence of their heartbeat, they must visit the hospital ASAP...",
+ WorkOnCirculationAlreadyDone = "Someone else has determined their heartbeat sequence is abnormal, they must visit the hospital ASAP...",
+ NoCirculationProblems = "The person has a regular heartbeat. Regardless they must visit a hospital ASAP.",
+ PersonFeelsCold = "The person feels very cold...",
+ PersonFeelsWarm = "The person feels very warm...",
+ NoHypothermiaSigns = "No signs of hypothermia detected.",
+ PersonFeelsColdAlreadyDetected = "Someone else has determined that the person feels very cold...",
+ PersonFeelsWarmAlreadyDetected = "Someone else has determined that the person feels very warm...",
+ NoHypothermiaSignsAlreadyDetected = "Someone else has determined there are no signs of hypothermia...",
+ OrderedPedToTheirKnees = "You have ordered a person to get on their knees.",
+ OrderedPedToStandUp = "You have ordered a person to stand up.",
+ PedIsDrunk = "The breathalyzer indicates the person has exceeded the legal alcohol limit for driving.",
+ PedIsNotDrunk = "The breathalyzer indicates the person is within the legal alcohol limit for driving.",
+ PedIsUnderInfluenceOfDrugs = "The drug test indicates the person is under the influence of drugs.",
+ PedIsNotUnderInfluenceOfDrugs = "The drug test indicates the person is not under the influence of drugs.",
+ YoureNotAPoliceOfficer = "You do not look like a police officer...",
+ InTheWrongService = "You're not at the right place, you know...",
+ AskForGear = "Ask for gear...",
+ GetOutWhenNotInAVehicleResponse = "This person is not in a vehicle.",
+
+ -- qb-target / ox-target
+ VehSpeakTo = "Speak to",
+ VehAssist = "Assist injured",
+ VehDriver = "driver",
+ VehFrontPassenger = "front passenger",
+ VehRearPassenger = "rear passenger",
+ VehPassenger = "passenger",
+
+ -- Dead ped Interaction
+ IdentifyDeadPed = "Identify",
+ DragPed = "Drag",
+ CheckMassiveBleeding = "Bleeding",
+ CheckAirway = "Airway",
+ CheckBreathing = "Breathing",
+ CheckCirculation = "Circulation",
+ CheckHypothermia = "Hypothermia",
+ PerformCPR = "Perform CPR",
+ PutOnStretcher = "Place on stretcher",
+ TakeOffStretcher = "Take off stretcher",
+ PutInBodyBag = "Put in body bag",
+
+ IdentifyDeadPedExplanation = "Identify the injured person",
+ DragPedExplanation = "Drag the person",
+ CheckMassiveExplanation = "Check for massive bleedings",
+ CheckAirwayExplanation = "Check the airway for obstructions",
+ CheckBreathingExplanation = "Check if the person is still breathing and at what sequence",
+ CheckCirculationExplanation = "Check if the person has a pulse and at what sequence",
+ CheckHypothermiaExplanation = "Check what bodytemperature the person has",
+ PerformCPRExplanation = "Start to peform CPR on the person",
+ PutOnStretcherExplanation = "Place the person on a nearby stretcher",
+ TakeOffStretcherExplanation = "Take the person off the stretcher",
+ PutInBodyBagExplanation = "Put the person in a body bag",
+
+ -- Stretcher
+ MustBeOnShiftToDoThis = "You are not on shift...",
+ NoNearbyStretcherFound = "No nearby stretcher found...",
+ StretcherStillInUse = "This stretcher is still in use...",
+ StretcherAlreadyInUse = "This stretcher is already in use...",
+ ReleasedStretcher = "You have released the stretcher.",
+ StillUsingStretcher = "You are still using the stretcher...",
+ NotUsingStretcher = "You are not using the stretcher...",
+ LowerTheNearbyStretcher = "Make sure you have lowered a nearby stretcher...",
+ StretcherAlreadyOccupied = "This stretcher is already occupied...",
+ ThisPersonIsNotOnAStretcher = "This person does not seem to be on a stretcher...",
+ CannotDoThisWhenPedIsOnStretcher = "You cannot perform this action whilst the person is on a stretcher...",
+ StretcherAlreadySpawnedForVehicle = "This vehicle has a stretcher spawned already...",
+ AmbulanceAlreadyHasAStretcherInside = "Can not interact with ambulance because you are pushing a stretcher and the vehicle has a stretcher inside...",
+ VehicleMustBeEmptyForStretcherInteraction = "Vehicle must be empty before performing stretcher interactions with it...",
+ CantInteractWithStretcherInsideVehicle = "You can't interact with a stretcher inside a vehicle...",
+ PlacedStretcherIntoAVehicle = "You've placed the stretcher inside the vehicle.",
+ TakenStretcherFromAVehicle = "You've taken the stretcher out of the vehicle.",
+ PersonTransferredToHospital = "You've transferred the person to the hospital employees.",
+ PersonSaved = "~b~VICTIM BROUGHT TO HOSPITAL!",
+ DropOffPersonAtHospital3DText = "Press ~o~ENTER ~w~to transfer the person to personel of this hospital",
+ ThereIsStretcherOnTheGroundNearby = "There is a stretcher on the ground nearby, please grab it to put it into the vehicle.",
+ SomeoneElseHasNetworkOwnershipOverTheStretcher = "Someone else has network ownership over the stretcher. They must move away for you to interact.",
+ SomeoneElseHasNetworkOwnershipOverTheVehicle = "Someone else has network ownership over the vehicle. They must move away for you to interact.",
+ GetOnOrOffStretcher = "Get on~p~/~w~off stretcher",
+
+ -- Inventory
+ Inventory = "Inventory items found...",
+
+ -- Vehicle Interactions
+ VehicleDetails = "Vehicle Details",
+ VehiclePlate = "Vehicle plate",
+ VehicleModel = "Vehicle model",
+ VehicleOwner = "Vehicle owner",
+ VehicleColor = "Vehicle color",
+ VehicleColorSecondary = "Vehicle secondary color",
+ VehicleBuildYear = "Vehicle build year",
+ VehicleTax = "Vehicle tax",
+ VehicleMOT = "Vehicle Safety Inspection",
+ VehicleInsurance = "Vehicle insurance",
+ VehicleStolen = "Reported stolen",
+ VehicleStolenDescription = "Stolen vehicle",
+ VehicleBolo = "Active BOLO",
+ VehicleBoloDescription = "BOLO Description",
+ Paid = "Paid",
+ NotPaid = "Not paid",
+ Valid = "Valid",
+ Invalid = "Invalid",
+ Passed = "Passed",
+ Failed = "Failed",
+ SearchThe = "Search the ",
+ FoundItem = "You found a",
+ ItemWillBeConfiscatedAutomaticallyIn10Seconds = "The item will be confiscated automatically in 10 seconds...",
+ NothingFoundInThisPartOfTheVehicle = "You couldn't find anything in this part of the vehicle...",
+ NotCloseEnoughToVehicle = "You are not close enough to the vehicle you want to search...",
+ NotCloseEnoughToVehicleSection = "You are not close enough to the section of the vehicle you want to search...",
+ VehicleIsNotEmpty = "The vehicle is not empty...",
+ VehicleDataTimeout = "You could not interact with this vehicle right now due to a timeout, try again later...",
+
+ -- Behaviour State
+ NeutralLabel = "Has a neutral expression on their face",
+ RelaxedLabel = "Comes across as relaxed",
+ BusyLabel = "Seems to be in a hurry",
+ CheerfulLabel = "Looks happy",
+ FriendlyLabel = "Seems to be friendly",
+ IrritatedLabel = "Seems to be annoyed",
+ StressedLabel = "Looks stressed",
+ WorriedLabel = "Looks worried",
+ ConfusedLabel = "Looks confused",
+ SuspiciousLabel = "Looks suspicious",
+ DeliriousLabel = "Comes across as unpredictable",
+ ParanoidLabel = "Appears as extremely distrustful",
+
+ -- Questioning
+ ExitConversation = "I think I know enough... (Exit conversation)",
+ YouHaveAskedAllQuestions = "You have asked all the questions available for this interaction.",
+
+ -- Answering questions
+ ConversationHistory = "Conversation history",
+ QDriversLicense = "car",
+ QBikeLicense = "bike",
+ QBoatLicense = "boat",
+ QTruckLicense = "truck",
+ QPilotLicense = "plane",
+ PrefixDrunk = "Hic!",
+ SuffixDrunk = "**Burp**",
+ PrefixDrugged = "Uh...",
+ SuffixDrugged = "**Chews**",
+ Sober = "sober",
+ Drunk = "drunk",
+ High = "high",
+ Stoned = "stoned",
+ BleedingSomewhere = "bleeding somewhere",
+ TroubleWithBreathing = "troubled with breathing",
+ SomethingStuckInThroat = "troubled with throat",
+ Warm = "overheated",
+ Cold = "cold",
+ Healthy = "healthy",
+ Dizzy = "dizzy",
+ Extrasunny = "sun",
+ Overcast = "overcast",
+ Rain = "rain",
+ Foggy = "fog",
+ Smog = "smog",
+ Clouds = "clouds",
+ Snow = "snow",
+ Snowlight = "light snow",
+ Xmas = "heavy snow",
+ Halloween = "darkness",
+ Blizzard = "blizzard",
+ RainHalloween = "rainy darkness",
+ SnowHalloween = "snowy darkness",
+ Thunder = "thunder",
+ Clearing = "light rain",
+ Neutral = "weather",
+
+ -- Hints
+ OrderOnKneesOrStandUpExplanation = "Order to knees / stand up.",
+ AcceptCallout = "Accept emergency call.",
+ CompleteCallout = "Complete emergency call.",
+ CuffExplanation = "(Un)cuff nearest person.",
+ PullOver = "Pull over vehicle.",
+ RadialMenuExplanation = "Dispatch requests (Radial menu)",
+ StopTrackingUnitExplanation = "Stop tracking unit",
+ CannotTrackYourself = "You can not track yourself.",
+ TargetNotOnACallout = "This unit is not on an active callout, thus can not be located...",
+
+ InputHelpText = "You should input RGB colours or mention a colour. [Examples: red | 255 0 0]",
+ WaitCooldown = "You have to wait: the cooldown is still active...",
+ NoPermission = "You don't have the permission to do this.",
+ MustSetNumberValue = "Error, you must insert a number value representing the player server ID.",
+ CannotIdentifySize = "Can not identify this size... Try again",
+
+ CannotDoThisOnFoot = "You can not do this on foot.",
+ CannotDoThisInAVehicle = "You can not do this in a vehicle.",
+ CannotDoThisAsPassenger = "You can not do this as a passenger of a vehicle...",
+
+ UseMDTToToggleShift = "You can toggle your shift via the MDT. If you desire to disable callout offers:",
+ CalloutsDisabled = "Your callouts are disabled.",
+
+ Dispatch = "Dispatch",
+ Responding = "Received unit responding to the latest emergency call.",
+ ArriveAtScene = "Received unit arrived at scene.",
+ AmbulanceDispatched = "An Ambulance has been dispatched...",
+ PoliceTransportDispatched = "Police Transport has been dispatched...",
+ VehicleTransportDispatched = "Vehicle transport has been dispatched...",
+ TaxiDispatched = "A taxi has been dispatched.",
+ TrackingUnit = "You're now tracking the unit's GPS location. This location is updated for as long as you're tracking.",
+ StoppedTrackingUnit = "You've stopped tracking an other unit.",
+}
\ No newline at end of file
diff --git a/resources/night_ers/config/vehinteractions-config.lua b/resources/night_ers/config/vehinteractions-config.lua
new file mode 100644
index 000000000..46fec5213
--- /dev/null
+++ b/resources/night_ers/config/vehinteractions-config.lua
@@ -0,0 +1,304 @@
+Config = Config or {}
+
+--====================== Vehicle Interactions Settings ======================--
+
+Config.DisableTaxAndMOT = false -- Disables tax / MOT checks if you have a US server for example.
+
+Config.VehicleBuildYearRange = {1990, 2024} -- Years
+Config.VehicleTaxNotPaidChance = 15 -- Out of 100%
+Config.VehicleMOTInvalidChance = 15
+Config.VehicleInsuranceInvalidChance = 15
+Config.VehicleStolenChance = 15
+Config.VehicleBoloChance = 15
+Config.BoloDescriptions = { -- Randomly selected from this list.
+ "Vehicle involved in a hit and run.",
+ "Vehicle reported as driving recklessly.",
+ "Vehicle reported as being driven under the influence.",
+ "Vehicle reported as being used in a recent robbery.",
+ "Vehicle reported as being used in a recent shooting.",
+ "Vehicle reported as being used in a recent kidnapping.",
+ "Vehicle reported as being used in a recent drug trafficking.",
+ "Vehicle reported as being used in a recent arson attack.",
+ "Vehicle reported as being used in a recent human trafficking incident.",
+}
+
+Config.EnableVehicleSearch = true
+Config.VehicleSearchChance = 15 -- Out of 100%
+Config.VehicleSearchDuration = 5000 -- Milliseconds (5 sec default.)
+Config.PropListOfPropsToFindInVehicle = {
+ -- Illegal generic props
+ { Name = "gun", Model = "w_sg_assaultshotgun_mag1", Illegal = true },
+ { Name = "pack of drugs", Model = "ex_office_swag_drugbag2", Illegal = true },
+ { Name = "bundle of cash", Model = "bkr_prop_bkr_cashpile_01", Illegal = true },
+ { Name = "cash pile", Model = "prop_cash_pile_01", Illegal = true },
+ { Name = "bundle of weed", Model = "bkr_prop_weed_bigbag_01a", Illegal = true },
+ { Name = "open bundle of weed", Model = "bkr_prop_weed_bigbag_open_01a", Illegal = true },
+ { Name = "bag of cash", Model = "hei_p_f_bag_var6_bus_s", Illegal = true },
+ { Name = "knife", Model = "prop_knife_01", Illegal = true },
+ { Name = "pistol", Model = "w_pi_pistol", Illegal = true },
+ { Name = "baseball bat", Model = "w_me_bat", Illegal = true },
+ { Name = "crowbar", Model = "w_me_crowbar", Illegal = true },
+ { Name = "screwdriver", Model = "prop_tool_screwdvr01", Illegal = true },
+ { Name = "bulletproof vest", Model = "prop_armour_pickup", Illegal = true },
+ { Name = "stack of cocaine bricks", Model = "bkr_prop_coke_block_01a", Illegal = true },
+ { Name = "meth tray", Model = "bkr_prop_meth_tray_02a", Illegal = true },
+ { Name = "bag of counterfeit money", Model = "bkr_prop_fakeid_binbag_01", Illegal = true },
+ { Name = "stolen piece of jewelry", Model = "p_jewel_necklace01_s", Illegal = true },
+
+ -- Drug related props
+ { Name = "can of ammonia", Model = "bkr_prop_meth_ammonia", Illegal = true },
+ { Name = "can of acetone", Model = "bkr_prop_meth_acetone", Illegal = true },
+ { Name = "can of hydrochloric acid", Model = "bkr_prop_meth_hcacid", Illegal = true },
+ { Name = "can of lithium", Model = "bkr_prop_meth_lithium", Illegal = true },
+ { Name = "can of sulfuric acid", Model = "bkr_prop_meth_sacid", Illegal = true },
+ { Name = "can of sodium", Model = "bkr_prop_meth_sodium", Illegal = true },
+ { Name = "burger", Model = "prop_cs_burger_01", Illegal = false },
+ { Name = "baking soda", Model = "bkr_prop_coke_bakingsoda", Illegal = true },
+
+ -- Food & drinks related props
+ { Name = "sodacan", Model = "ng_proc_sodacan_02a", Illegal = false },
+ { Name = "sodacup", Model = "ng_proc_sodacup_01c", Illegal = false },
+ { Name = "sodacup", Model = "ng_proc_sodacup_03a", Illegal = false },
+ { Name = "bottle of alcohol", Model = "apa_mp_h_acc_bottle_02", Illegal = false },
+ { Name = "bottle of alcohol", Model = "apa_mp_h_acc_bottle_01", Illegal = false },
+ { Name = "bottle of cognac", Model = "prop_bottle_cognac", Illegal = false },
+ { Name = "bottle of brandy", Model = "prop_bottle_brandy", Illegal = false },
+ { Name = "beer bottle", Model = "prop_beer_bottle", Illegal = false },
+ { Name = "richard bottle", Model = "prop_bottle_richard", Illegal = false },
+ { Name = "whiskey bottle", Model = "prop_cs_whiskey_bottle", Illegal = false },
+ { Name = "set of body parts", Model = "v_ilev_body_parts", Illegal = false },
+ { Name = "food bag", Model = "ng_proc_food_bag01a", Illegal = false },
+ { Name = "food bag", Model = "ng_proc_food_bag02a", Illegal = false },
+ { Name = "coffee cup", Model = "prop_food_bs_coffee", Illegal = false },
+ { Name = "juice cup", Model = "prop_food_bs_juice02", Illegal = false },
+ { Name = "food tray", Model = "prop_food_cb_tray_02", Illegal = false },
+
+ -- Clothing related props
+ { Name = "set of panties", Model = "prop_cs_panties", Illegal = false },
+ { Name = "t-shirt", Model = "prop_ld_tshirt_02", Illegal = false },
+
+ -- Other props (add yours here in the correct format)
+ -- { Name = "item name", Model = "object_model", Illegal = false },
+}
+
+Config.VehicleBonesToSearch = {
+ -- Driver front door - camera positioned to look through the door into the interior
+ { Name = "front door", DoorBone = "door_dside_f", DoorIndex = 0, SeatBone = "seat_dside_f", SeatIndex = -1, SearchRadius = 3.0,
+ AnimationDictionary = "amb@code_human_police_investigate@idle_a", AnimationName = "idle_c",
+ CamSideOffest = -2.5, CamForwardOffset = 0.0, CamHeightOffset = 0.8, OffsetDistance = 0.75 },
+
+ -- Passenger front door
+ { Name = "front door", DoorBone = "door_pside_f", DoorIndex = 1, SeatBone = "seat_pside_f", SeatIndex = 0, SearchRadius = 3.0,
+ AnimationDictionary = "amb@code_human_police_investigate@idle_a", AnimationName = "idle_c",
+ CamSideOffest = 2.5, CamForwardOffset = 0.0, CamHeightOffset = 0.8, OffsetDistance = 0.75 },
+
+ -- Driver rear door
+ { Name = "rear door", DoorBone = "door_dside_r", DoorIndex = 2, SeatBone = "seat_dside_r", SeatIndex = 1, SearchRadius = 3.0,
+ AnimationDictionary = "amb@code_human_police_investigate@idle_a", AnimationName = "idle_c",
+ CamSideOffest = -2.5, CamForwardOffset = -1.2, CamHeightOffset = 0.8, OffsetDistance = 0.75 },
+
+ -- Passenger rear door
+ { Name = "rear door", DoorBone = "door_pside_r", DoorIndex = 3, SeatBone = "seat_pside_r", SeatIndex = 2, SearchRadius = 3.0,
+ AnimationDictionary = "amb@code_human_police_investigate@idle_a", AnimationName = "idle_c",
+ CamSideOffest = 2.5, CamForwardOffset = -1.2, CamHeightOffset = 0.8, OffsetDistance = 0.75 },
+
+ -- Bonnet - closer overhead view
+ { Name = "bonnet", DoorBone = "bonnet", DoorIndex = 4, SeatBone = nil, SeatIndex = nil, SearchRadius = 3.0,
+ AnimationDictionary = "mini@repair", AnimationName = "fixing_a_ped",
+ CamSideOffest = 0.0, CamForwardOffset = 3.5, CamHeightOffset = 1.8, OffsetDistance = 1.8 },
+
+ -- Boot - closer overhead view
+ { Name = "boot", DoorBone = "boot", DoorIndex = 5, SeatBone = nil, SeatIndex = nil, SearchRadius = 3.0,
+ AnimationDictionary = "mini@repair", AnimationName = "fixing_a_ped",
+ CamSideOffest = 0.0, CamForwardOffset = -3.5, CamHeightOffset = 1.8, OffsetDistance = 1.5 },
+}
+
+Config.BonePropOffsetData = {
+ -- This is used for prop positioning relative to the bones for seats, bonnet and boot. (We left it default, because most props are attached fine by default.)
+ {bone = "seat_dside_f", relatedDoorBone = "door_dside_f", offsetX = 0.0, offsetY = 0.0, offsetZ = 0.0, rotationX = 0.0, rotationY = 0.0, rotationZ = 0.0},
+ {bone = "seat_pside_f", relatedDoorBone = "door_pside_f", offsetX = 0.0, offsetY = 0.0, offsetZ = 0.0, rotationX = 0.0, rotationY = 0.0, rotationZ = 0.0},
+ {bone = "seat_dside_r", relatedDoorBone = "door_dside_r", offsetX = 0.0, offsetY = 0.0, offsetZ = 0.0, rotationX = 0.0, rotationY = 0.0, rotationZ = 0.0},
+ {bone = "seat_pside_r", relatedDoorBone = "door_pside_r", offsetX = 0.0, offsetY = 0.0, offsetZ = 0.0, rotationX = 0.0, rotationY = 0.0, rotationZ = 0.0},
+ {bone = "bonnet", relatedDoorBone = "bonnet", offsetX = 0.0, offsetY = 0.0, offsetZ = 0.0, rotationX = 0.0, rotationY = 0.0, rotationZ = 0.0},
+ {bone = "boot", relatedDoorBone = "boot", offsetX = 0.0, offsetY = 0.0, offsetZ = 0.0, rotationX = 0.0, rotationY = 0.0, rotationZ = 0.0},
+}
+
+Config.VehicleSearchMarkerData = {
+ Type = 6,
+ Offset = {x = 0.0, y = 0.0, z = 0.1},
+ Direction = {x = 0.0, y = 0.0, z = 0.0},
+ Rotation = {x = 0.0, y = 0.0, z = 0.0},
+ Scale = {x = 0.15, y = 0.15, z = 0.15},
+ Color = {r = 255, g = 193, b = 7, a = 155},
+ BobUpAndDown = false,
+ FaceCamera = true,
+ P19 = false,
+ Rotate = false,
+ TextureDict = nil,
+ TextureName = nil,
+ DrawOnEnts = false
+}
+
+Config.VehicleColours = {
+ [0] = "Metallic Black",
+ [1] = "Metallic Graphite Black",
+ [2] = "Metallic Black Steel",
+ [3] = "Metallic Dark Silver",
+ [4] = "Metallic Silver",
+ [5] = "Metallic Blue Silver",
+ [6] = "Metallic Steel Gray",
+ [7] = "Metallic Shadow Silver",
+ [8] = "Metallic Stone Silver",
+ [9] = "Metallic Midnight Silver",
+ [10] = "Metallic Gun Metal",
+ [11] = "Metallic Anthracite Grey",
+ [12] = "Matte Black",
+ [13] = "Matte Gray",
+ [14] = "Matte Light Grey",
+ [15] = "Util Black",
+ [16] = "Util Black Poly",
+ [17] = "Util Dark silver",
+ [18] = "Util Silver",
+ [19] = "Util Gun Metal",
+ [20] = "Util Shadow Silver",
+ [21] = "Worn Black",
+ [22] = "Worn Graphite",
+ [23] = "Worn Silver Grey",
+ [24] = "Worn Silver",
+ [25] = "Worn Blue Silver",
+ [26] = "Worn Shadow Silver",
+ [27] = "Metallic Red",
+ [28] = "Metallic Torino Red",
+ [29] = "Metallic Formula Red",
+ [30] = "Metallic Blaze Red",
+ [31] = "Metallic Graceful Red",
+ [32] = "Metallic Garnet Red",
+ [33] = "Metallic Desert Red",
+ [34] = "Metallic Cabernet Red",
+ [35] = "Metallic Candy Red",
+ [36] = "Metallic Sunrise Orange",
+ [37] = "Metallic Classic Gold",
+ [38] = "Metallic Orange",
+ [39] = "Matte Red",
+ [40] = "Matte Dark Red",
+ [41] = "Matte Orange",
+ [42] = "Matte Yellow",
+ [43] = "Util Red",
+ [44] = "Util Bright Red",
+ [45] = "Util Garnet Red",
+ [46] = "Worn Red",
+ [47] = "Worn Golden Red",
+ [48] = "Worn Dark Red",
+ [49] = "Metallic Dark Green",
+ [50] = "Metallic Racing Green",
+ [51] = "Metallic Sea Green",
+ [52] = "Metallic Olive Green",
+ [53] = "Metallic Green",
+ [54] = "Metallic Gasoline Blue Green",
+ [55] = "Matte Lime Green",
+ [56] = "Util Dark Green",
+ [57] = "Util Green",
+ [58] = "Worn Dark Green",
+ [59] = "Worn Green",
+ [60] = "Worn Sea Wash",
+ [61] = "Metallic Midnight Blue",
+ [62] = "Metallic Dark Blue",
+ [63] = "Metallic Saxony Blue",
+ [64] = "Metallic Blue",
+ [65] = "Metallic Mariner Blue",
+ [66] = "Metallic Harbor Blue",
+ [67] = "Metallic Diamond Blue",
+ [68] = "Metallic Surf Blue",
+ [69] = "Metallic Nautical Blue",
+ [70] = "Metallic Bright Blue",
+ [71] = "Metallic Purple Blue",
+ [72] = "Metallic Spinnaker Blue",
+ [73] = "Metallic Ultra Blue",
+ [74] = "Metallic Bright Blue",
+ [75] = "Util Dark Blue",
+ [76] = "Util Midnight Blue",
+ [77] = "Util Blue",
+ [78] = "Util Sea Foam Blue",
+ [79] = "Util Lightning blue",
+ [80] = "Util Maui Blue Poly",
+ [81] = "Util Bright Blue",
+ [82] = "Matte Dark Blue",
+ [83] = "Matte Blue",
+ [84] = "Matte Midnight Blue",
+ [85] = "Worn Dark blue",
+ [86] = "Worn Blue",
+ [87] = "Worn Light blue",
+ [88] = "Metallic Taxi Yellow",
+ [89] = "Metallic Race Yellow",
+ [90] = "Metallic Bronze",
+ [91] = "Metallic Yellow Bird",
+ [92] = "Metallic Lime",
+ [93] = "Metallic Champagne",
+ [94] = "Metallic Pueblo Beige",
+ [95] = "Metallic Dark Ivory",
+ [96] = "Metallic Choco Brown",
+ [97] = "Metallic Golden Brown",
+ [98] = "Metallic Light Brown",
+ [99] = "Metallic Straw Beige",
+ [100] = "Metallic Moss Brown",
+ [101] = "Metallic Biston Brown",
+ [102] = "Metallic Beechwood",
+ [103] = "Metallic Dark Beechwood",
+ [104] = "Metallic Choco Orange",
+ [105] = "Metallic Beach Sand",
+ [106] = "Metallic Sun Bleeched Sand",
+ [107] = "Metallic Cream",
+ [108] = "Util Brown",
+ [109] = "Util Medium Brown",
+ [110] = "Util Light Brown",
+ [111] = "Metallic White",
+ [112] = "Metallic Frost White",
+ [113] = "Worn Honey Beige",
+ [114] = "Worn Brown",
+ [115] = "Worn Dark Brown",
+ [116] = "Worn straw beige",
+ [117] = "Brushed Steel",
+ [118] = "Brushed Black steel",
+ [119] = "Brushed Aluminium",
+ [120] = "Chrome",
+ [121] = "Worn Off White",
+ [122] = "Util Off White",
+ [123] = "Worn Orange",
+ [124] = "Worn Light Orange",
+ [125] = "Metallic Securicor Green",
+ [126] = "Worn Taxi Yellow",
+ [127] = "police car blue",
+ [128] = "Matte Green",
+ [129] = "Matte Brown",
+ [130] = "Worn Orange",
+ [131] = "Matte White",
+ [132] = "Worn White",
+ [133] = "Worn Olive Army Green",
+ [134] = "Pure White",
+ [135] = "Hot Pink",
+ [136] = "Salmon pink",
+ [137] = "Metallic Vermillion Pink",
+ [138] = "Orange",
+ [139] = "Green",
+ [140] = "Blue",
+ [141] = "Mettalic Black Blue",
+ [142] = "Metallic Black Purple",
+ [143] = "Metallic Black Red",
+ [144] = "hunter green",
+ [145] = "Metallic Purple",
+ [146] = "Metaillic V Dark Blue",
+ [147] = "MODSHOP BLACK1",
+ [148] = "Matte Purple",
+ [149] = "Matte Dark Purple",
+ [150] = "Metallic Lava Red",
+ [151] = "Matte Forest Green",
+ [152] = "Matte Olive Drab",
+ [153] = "Matte Desert Brown",
+ [154] = "Matte Desert Tan",
+ [155] = "Matte Foliage Green",
+ [156] = "DEFAULT ALLOY COLOR",
+ [157] = "Epsilon Blue",
+ [158] = "Pure Gold",
+ [159] = "Brushed Gold",
+ [160] = "MP100_GOLD"
+}
diff --git a/resources/night_ers/data/hose/dlctext.meta b/resources/night_ers/data/hose/dlctext.meta
new file mode 100644
index 000000000..3871d7419
--- /dev/null
+++ b/resources/night_ers/data/hose/dlctext.meta
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/night_ers/data/hose/pedpersonality.meta b/resources/night_ers/data/hose/pedpersonality.meta
new file mode 100644
index 000000000..029de4dd0
--- /dev/null
+++ b/resources/night_ers/data/hose/pedpersonality.meta
@@ -0,0 +1,372 @@
+
+
+
+
+ -
+ UNHOLSTER_UNARMED
+
+
-
+
+
- WEAPON_ERS_HOSE
+
+ unarmed_holster_unarmed
+
+
+
+ -
+ UNHOLSTER_2H_MELEE
+
+
-
+
+
- WEAPON_ERS_HOSE
+
+ 2h_melee_holster_unarmed
+
+
+
+ -
+ UNHOLSTER_1H
+
+
-
+
+
- WEAPON_ERS_HOSE
+
+ 1h_holster_unarmed
+
+
+
+ -
+ UNHOLSTER_2H
+
+
-
+
+
- WEAPON_ERS_HOSE
+
+ 2h_holster_unarmed
+
+
+
+ -
+ UNHOLSTER_MINIGUN
+
+
-
+
+
- WEAPON_ERS_HOSE
+
+ mini_holster_2h_unarmed
+
+
+
+ -
+ UNHOLSTER_UNARMED_STEALTH
+
+
-
+
+
- WEAPON_ERS_HOSE
+
+ unarmed_holster_unarmed
+
+
+
+ -
+ UNHOLSTER_2H_MELEE_STEALTH
+
+
-
+
+
- WEAPON_ERS_HOSE
+
+ unarmed_holster_unarmed
+
+
+
+ -
+ UNHOLSTER_1H_STEALTH
+
+
-
+
+
- WEAPON_ERS_HOSE
+
+ 1h_holster_unarmed
+
+
+
+ -
+ UNHOLSTER_2H_STEALTH
+
+
-
+
+
- WEAPON_ERS_HOSE
+
+ 2h_holster_unarmed
+
+
+
+
+
+ -
+ DEFAULT_ACTION
+
+
-
+
-
+
+
- WEAPON_ERS_HOSE
+
+
+ -
+ move_action@p_m_zero@unarmed@core
+
+
+
+
+
+
+
+
+
- MOVE_ACTION@GENERIC@TRANS@UNARMED
+
+ MOVE_ACTION@P_M_ZERO@HOLSTER
+ UNHOLSTER_UNARMED
+
+
+
+
+ -
+
-
+
+
- WEAPON_ERS_HOSE
+
+
+ -
+ move_stealth@p_m_zero@unarmed@core
+ weapons@melee_stealth_1h
+ UpperbodyAndIk_filter
+
+
+
+
+
+
+
- move_stealth@generic@trans@unarmed
+
+ move_stealth@p_m_zero@holster
+ UNHOLSTER_UNARMED_STEALTH
+
+
+
+
+
+
+ -
+ MP_FEMALE_ACTION
+
+
-
+
-
+
+
- WEAPON_ERS_HOSE
+
+
+ -
+ MOVE_ACTION@MP_FEMALE@UNARMED@CORE
+
+
+
+
+
+
+
+
+
- MOVE_ACTION@MP_FEMALE@UNARMED@TRANS@
+
+ MOVE_ACTION@P_M_ZERO@HOLSTER
+ UNHOLSTER_UNARMED
+
+
+
+
+ -
+
-
+
+
- WEAPON_ERS_HOSE
+
+
+ -
+ move_stealth@p_m_zero@unarmed@core
+ weapons@melee_stealth_1h
+ UpperbodyAndIk_filter
+
+
+
+
+
+
+
- MOVE_STEALTH@MP_FEMALE@UNARMED@TRANS
+
+ move_stealth@p_m_zero@holster
+ UNHOLSTER_UNARMED_STEALTH
+
+
+
+
+
+
+ -
+ MICHAEL_ACTION
+
+
-
+
-
+
+
- WEAPON_ERS_HOSE
+
+
+ -
+ move_action@p_m_zero@unarmed@core
+
+
+
+
+
+
+
+
+
- MOVE_ACTION@P_M_ZERO@UNARMED@TRANS@A
+
+ MOVE_ACTION@P_M_ZERO@HOLSTER
+ UNHOLSTER_UNARMED
+
+
+
+
+ -
+
-
+
+
- WEAPON_ERS_HOSE
+
+
+ -
+ move_stealth@p_m_zero@unarmed@core
+ weapons@melee_stealth_1h
+ UpperbodyAndIk_filter
+
+
+
+
+
+
+
- move_stealth@p_m_zero@unarmed@trans@a
+
+ move_stealth@p_m_zero@holster
+ UNHOLSTER_UNARMED_STEALTH
+
+
+
+
+
+
+ -
+ FRANKLIN_ACTION
+
+
-
+
-
+
+
- WEAPON_ERS_HOSE
+
+
+ -
+ move_action@p_m_one@unarmed@core
+
+
+
+
+
+
+
+
+
- MOVE_ACTION@P_M_ONE@UNARMED@TRANS@A
+
+ MOVE_ACTION@P_M_ONE@HOLSTER
+ UNHOLSTER_UNARMED
+
+
+
+
+ -
+
-
+
+
- WEAPON_ERS_HOSE
+
+
+ -
+ move_stealth@p_m_one@unarmed@core
+ weapons@melee_stealth_1h@p_m_one
+ UpperbodyAndIk_filter
+
+
+
+
+
+
+
- move_stealth@p_m_one@unarmed@trans@a
+
+ MOVE_STEALTH@P_M_ONE@HOLSTER
+ UNHOLSTER_UNARMED_STEALTH
+
+
+
+
+
+
+ -
+ TREVOR_ACTION
+
+
-
+
-
+
+
- WEAPON_ERS_HOSE
+
+
+ -
+ move_action@p_m_two@unarmed@core
+
+
+
+
+
+
+
+
+
- MOVE_ACTION@P_M_TWO@UNARMED@TRANS@A
+
+ MOVE_ACTION@P_M_TWO@HOLSTER
+ UNHOLSTER_UNARMED
+
+
+
+
+ -
+
-
+
+
- WEAPON_ERS_HOSE
+
+
+ -
+ move_stealth@p_m_two@unarmed@core
+ weapons@melee_stealth_1h@p_m_two
+ UpperbodyAndIk_filter
+
+
+
+
+
+
+
- move_stealth@p_m_two@unarmed@trans@a
+
+ MOVE_STEALTH@P_M_TWO@HOLSTER
+ UNHOLSTER_UNARMED_STEALTH
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/night_ers/data/hose/weaponanimations.meta b/resources/night_ers/data/hose/weaponanimations.meta
new file mode 100644
index 000000000..3533e7b9e
--- /dev/null
+++ b/resources/night_ers/data/hose/weaponanimations.meta
@@ -0,0 +1,13012 @@
+
+
+
+
+ -
+ Default
+
+
-
+
+
+
+
+ move_ballistic_2h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ move_ballistic_2h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ move_ballistic_2h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ move_ballistic_2h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ move_ballistic_2h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ move_ballistic_2h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ move_ballistic_2h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ move_ballistic_2h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ move_ballistic_2h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ move_ballistic_2h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ move_ballistic_2h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ move_ballistic_2h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ move_ballistic_2h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ move_ballistic_2h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ move_ballistic_2h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ move_ballistic_2h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ move_ballistic_2h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ move_ballistic_minigun
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+ cover@move@base@2h
+ cover@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_Wpn_RifleAdvanced
+ weapons@submg@advanced_rifle
+ BothArms_filter
+
+
+
+
+ weapons@submg@advanced_rifle
+ weapons@submg@advanced_rifle_str
+
+ weapons@submg@advanced_rifle@stealth
+
+
+
+
+
+ combat_fire_variations_rifle
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ Wpn_Thrown_Grenade_Aiming_Rifle
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+ CREATURES@ROTTWEILER@MELEE@BASE@
+
+
+
+
+
+
+
+
+
+
+
+
+ CREATURES@ROTTWEILER@MELEE@STREAMED_CORE@
+
+ CREATURES@ROTTWEILER@MELEE@STREAMED_TAUNTS@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ cover@move@ai@base@1h
+ Cover_Wpn_APPistol
+ weapons@pistol@ap_pistol
+ BothArms_filter
+
+
+
+
+ weapons@pistol@ap_pistol
+ weapons@pistol@ap_pistol_str
+ weapons@pistol@ap_pistol_injured
+ weapons@pistol@ap_pistol@stealth
+
+
+
+
+
+ combat_fire_variations_pistol
+
+ combat_aim_turns_pistol
+
+ melee@pistol@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+ MOVE_JUMP@WEAPONS@PISTOL
+ MOVE_FALL@WEAPONS@PISTOL
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+ Wpn_Thrown_Grenade_Aiming_Rifle
+
+
+ -
+ cover@move@base@2h
+ cover@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_Wpn_RifleHi
+ weapons@rifle@hi@assault_rifle
+ BothArms_filter
+
+
+
+
+ weapons@rifle@hi@assault_rifle
+ weapons@rifle@hi@assault_rifle_str
+
+ weapons@rifle@hi@assault_rifle@stealth
+
+
+
+
+
+ combat_fire_variations_rifle
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ Wpn_Thrown_Grenade_Aiming_Rifle
+
+
+ -
+ cover@move@base@2h
+ cover@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_Wpn_ShotgunAssault
+ weapons@rifle@lo@shotgun_assault
+ BothArms_filter
+
+
+
+
+ weapons@rifle@lo@shotgun_assault
+ weapons@rifle@lo@shotgun_assault_str
+
+ weapons@rifle@lo@shotgun_assault@stealth
+
+
+
+
+
+
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ Wpn_Thrown_Grenade_Aiming_Rifle
+
+
+ -
+ cover@move@base@2h
+ cover@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_Wpn_AssaultSMG
+ weapons@submg@assault_smg
+ BothArms_filter
+
+
+
+
+ weapons@submg@assault_smg
+ weapons@submg@assault_smg_str
+
+ weapons@submg@assault_smg@stealth
+
+
+
+
+
+
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ Wpn_Thrown_Grenade_Aiming_Rifle
+
+
+ -
+
+
+
+ Cover_Wpn_Thrown_Grenade
+ Wpn_Grenade_WeaponHolding
+ BothArms_filter
+
+
+
+
+ Wpn_Thrown_Grenade
+ Wpn_Thrown_Grenade_Str
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ reaction@shellshock@unarmed
+
+
+
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ weapons@melee_2h
+ BothArms_filter
+
+ move_strafe_melee_unarmed
+ move_ped_strafing_stealth
+ move_strafe@melee_large_weapon
+ melee@holster
+
+
+
+
+
+
+
+
+
+
+
+
+ melee@large_wpn@streamed_core
+ melee@large_wpn@streamed_variations
+
+
+
+ reaction@shellshock@unarmed
+ MOVE_JUMP@WEAPONS@2H_MELEE
+ MOVE_FALL@WEAPONS@2H_MELEE
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ cover@move@ai@base@1h
+ Cover_Wpn_Pistol
+ move_ped_wpn_jerrycan_generic
+ BothArms_filter
+
+
+
+
+ Wpn_PetrolCan
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@JERRYCAN
+ MOVE_FALL@WEAPONS@JERRYCAN
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ cover@move@ai@base@1h
+ Cover_Wpn_Pistol
+ move_ped_wpn_jerrycan_generic
+ BothArms_filter
+
+
+
+
+ Wpn_PetrolCan
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@JERRYCAN
+ MOVE_FALL@WEAPONS@JERRYCAN
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+ cover@move@base@2h
+ cover@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_Wpn_ShotgunBullpup
+ weapons@rifle@lo@shotgun_bullpup
+ BothArms_filter
+
+
+
+
+ weapons@rifle@lo@shotgun_bullpup
+ weapons@rifle@lo@shotgun_bullpup_str
+
+ weapons@rifle@lo@shotgun_bullpup@stealth
+
+
+
+
+
+
+
+
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ Wpn_Thrown_Grenade_Aiming_Rifle
+
+
+ -
+
+
+
+ Cover_Wpn_Thrown_Grenade
+ Wpn_Grenade_WeaponHolding
+ BothArms_filter
+
+
+
+
+ Wpn_Thrown_Grenade
+ Wpn_Thrown_Grenade_Str
+
+
+
+
+
+
+
+
+
+
+
+ melee@thrown@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+
+
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+
+ -
+ cover@move@base@2h
+ cover@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_Wpn_RifleLo
+ weapons@rifle@lo@carbine
+ BothArms_filter
+
+
+
+
+ weapons@rifle@lo@carbine
+ weapons@rifle@lo@carbine_str
+
+ weapons@rifle@lo@carbine@stealth
+
+
+
+
+
+ combat_fire_variations_rifle
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ Wpn_Thrown_Grenade_Aiming_Rifle
+
+
+ -
+ cover@move@base@2h
+ cover@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_Wpn_CombatMG
+ weapons@machinegun@combat_mg
+ BothArms_filter
+
+
+
+
+ weapons@machinegun@combat_mg
+ weapons@machinegun@combat_mg_str
+
+ weapons@machinegun@combat_mg@stealth
+ weapons@machinegun@combat_mg@hi
+ weapons@machinegun@combat_mg@hi
+ weapons@machinegun@combat_mg@hi
+
+
+
+
+
+
+ melee@rifle@streamed_core
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ Wpn_Thrown_Grenade_Aiming_MG
+ Wpn_Thrown_Grenade_Aiming_Rifle
+
+ -
+
+
+ cover@move@ai@base@1h
+ Cover_Wpn_Pistol
+ weapons@pistol@
+ BothArms_filter
+
+
+
+
+ weapons@pistol@combat_pistol
+ weapons@pistol@combat_pistol_str
+ Wpn_Pistol_Injured
+ weapons@pistol@combat_pistol@w_stealth
+
+
+
+
+
+ combat_fire_variations_pistol
+
+ combat_aim_turns_pistol
+
+ melee@pistol@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+ MOVE_JUMP@WEAPONS@PISTOL
+ MOVE_FALL@WEAPONS@PISTOL
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+ Wpn_Thrown_Grenade_Aiming_Rifle
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+ CREATURES@COUGAR@MELEE@BASE@
+
+
+
+
+
+
+
+
+
+
+
+
+ CREATURES@COUGAR@MELEE@STREAMED_CORE@
+
+ creatures@cougar@melee@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+ Cover_Wpn_Melee1h
+ weapons@melee_1h
+ BothArms_filter
+
+ move_strafe_melee_unarmed
+ move_ped_strafing_stealth
+ move_strafe@melee_small_weapon
+ melee@holster
+
+
+
+
+
+
+
+
+
+
+
+
+ melee@small_wpn@streamed_core
+ melee@small_wpn@streamed_variations
+
+
+
+ reaction@shellshock@unarmed
+
+
+
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+
+ -
+
+ cover@move@extra@1h
+ cover@move@ai@base@1h
+ Cover_Wpn_Pistol
+ weapons@melee_1h
+ BothArms_filter
+
+
+
+
+ weapons@misc@digi_scanner
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ cover@move@ai@base@1h
+ Cover_Wpn_Pistol
+ move_ped_wpn_exting_generic
+ BothArms_filter
+
+
+
+
+ weapons@misc@fire_ext
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ cover@move@ai@base@1h
+ Cover_Wpn_Pistol
+ move_ped_wpn_exting_generic
+ BothArms_filter
+
+
+
+
+ weapons@misc@fire_ext
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+ Cover_Wpn_Thrown_Grenade
+ Wpn_Grenade_WeaponHolding
+ BothArms_filter
+
+
+
+
+ Wpn_Thrown_Grenade
+ Wpn_Thrown_Grenade_Str
+
+
+
+
+
+
+
+
+
+
+
+ melee@thrown@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+
+
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ weapons@melee_2h@golfclub
+ BothArms_filter
+
+ move_strafe_melee_unarmed
+ move_ped_strafing_stealth
+ move_strafe@melee_large_weapon
+ melee@holster
+
+
+
+
+
+
+
+
+
+
+
+
+ melee@large_wpn@streamed_core
+ melee@large_wpn@streamed_variations
+
+
+
+ reaction@shellshock@unarmed
+ MOVE_JUMP@WEAPONS@2H_MELEE
+ MOVE_FALL@WEAPONS@2H_MELEE
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+ Cover_Wpn_Thrown_Grenade
+ Wpn_Grenade_WeaponHolding
+ BothArms_filter
+
+
+
+
+ Wpn_Thrown_Grenade
+ Wpn_Thrown_Grenade_Str
+
+
+
+
+
+
+
+
+
+
+
+ melee@thrown@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+
+
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+
+ -
+ cover@move@base@2h
+ cover@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_Wpn_GrnLch
+ weapons@rifle@
+ BothArms_filter
+
+
+
+
+ weapons@heavy@grenade_launcher
+ weapons@heavy@grenade_launcher_str
+
+ weapons@heavy@grenade_launcher@stealth
+
+
+
+
+
+
+
+
+
+ melee@rifle@streamed_core
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+
+
+
+ -
+ cover@move@base@2h
+ cover@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_Wpn_GrnLch
+ weapons@rifle@
+ BothArms_filter
+
+
+
+
+ weapons@heavy@grenade_launcher
+ weapons@heavy@grenade_launcher_str
+
+ weapons@heavy@grenade_launcher@stealth
+
+ weapons@rifle@lo@
+
+
+
+
+
+
+
+ melee@rifle@streamed_core
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+ Cover_Wpn_Melee1h
+ weapons@melee_1h
+ BothArms_filter
+
+ move_strafe_melee_unarmed
+ move_ped_strafing_stealth
+ move_strafe@melee_small_weapon
+ melee@holster
+
+
+
+
+
+
+
+
+
+
+
+
+ melee@small_wpn@streamed_core
+ melee@small_wpn@streamed_variations
+
+
+
+ reaction@shellshock@unarmed
+
+
+
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+
+ -
+ cover@move@base@2h
+ cover@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_Wpn_RifleSniperHeavy
+ weapons@rifle@lo@sniper_heavy
+ BothArms_filter
+
+
+
+
+ weapons@rifle@lo@sniper_heavy
+ weapons@rifle@lo@sniper_heavy_str
+
+ weapons@rifle@lo@sniper_heavy@stealth
+
+
+
+
+
+
+
+
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+ Cover_Wpn_Melee1h
+ weapons@melee_1h
+ BothArms_filter
+
+ move_strafe_melee_unarmed
+ move_ped_strafing_stealth
+ move_strafe@knife
+ melee@holster
+
+
+
+
+
+
+
+
+
+
+
+
+ melee@knife@streamed_core
+ melee@knife@streamed_variations
+
+
+
+ reaction@shellshock@unarmed
+
+
+
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+
+ -
+ cover@move@base@2h
+ cover@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_Wpn_MachineGun
+ weapons@machinegun@mg
+ BothArms_filter
+
+
+
+
+ weapons@machinegun@mg
+ weapons@machinegun@mg_str
+
+ weapons@machinegun@mg@stealth
+ weapons@machinegun@mg@hi
+ weapons@machinegun@mg@hi
+ weapons@machinegun@mg@hi
+
+
+
+
+
+
+ melee@rifle@streamed_core
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ Wpn_Thrown_Grenade_Aiming_MG
+ Wpn_Thrown_Grenade_Aiming_Rifle
+
+ -
+
+
+ cover@move@ai@base@1h
+ Cover_Wpn_MicroSMG
+ weapons@submg@micro_smg
+ BothArms_filter
+
+
+
+
+ weapons@submg@micro_smg
+ weapons@submg@micro_smg_str
+
+ weapons@submg@micro_smg@stealth
+ weapons@submg@micro_smg@hi
+ weapons@submg@micro_smg@hi
+ weapons@submg@advanced_rifle@micro_w_fire
+
+
+
+
+
+
+ melee@pistol@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@PISTOL
+ MOVE_FALL@WEAPONS@PISTOL
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+ Wpn_Thrown_Grenade_Aiming_MG
+ Wpn_Thrown_Grenade_Aiming_Rifle
+
+ -
+
+
+
+
+ weapons@heavy@minigun
+ BothArms_filter
+
+
+
+
+ weapons@heavy@minigun
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+ Cover_Wpn_Thrown_Grenade
+ Wpn_Molotov_WeaponHolding
+ BothArms_filter
+
+
+
+
+ Wpn_Thrown_Molotov
+ Wpn_Thrown_Grenade_Str
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ reaction@shellshock@unarmed
+
+
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ BothArms_filter
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+ Cover_Wpn_Melee1h
+ weapons@melee_1h
+ BothArms_filter
+
+ move_strafe_melee_unarmed
+ move_ped_strafing_stealth
+ move_strafe@melee_small_weapon
+ melee@holster
+
+
+
+
+
+
+
+
+
+
+
+
+ melee@small_wpn@streamed_core
+ melee@small_wpn@streamed_variations
+
+
+
+ reaction@shellshock@unarmed
+
+
+
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+
+ -
+ cover@move@base@rpg
+ cover@move@extra@rpg
+
+ Cover_Wpn_RPG
+ weapons@heavy@rpg
+ BothArms_filter
+
+
+
+
+ weapons@heavy@rpg
+ weapons@heavy@rpg_str
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@RPG
+ MOVE_FALL@WEAPONS@RPG
+ weapons@rifle@
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ cover@move@ai@base@1h
+ Cover_Wpn_Pistol
+ move_ped_wpn_jerrycan_generic
+ BothArms_filter
+
+
+
+
+ Wpn_PetrolCan
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@JERRYCAN
+ MOVE_FALL@WEAPONS@JERRYCAN
+
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ cover@move@ai@base@1h
+ Cover_Wpn_Pistol
+ weapons@pistol@pistol
+ BothArms_filter
+
+
+
+
+ weapons@pistol@pistol
+ weapons@pistol@pistol_str
+ weapons@pistol@pistol_injured
+ weapons@pistol@pistol@stealth
+
+
+
+
+
+ combat_fire_variations_pistol
+
+ combat_aim_turns_pistol
+
+ melee@pistol@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+ MOVE_JUMP@WEAPONS@PISTOL
+ MOVE_FALL@WEAPONS@PISTOL
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+ Wpn_Thrown_Grenade_Aiming_Rifle
+
+
+ -
+
+
+ cover@move@ai@base@1h
+ Cover_Wpn_Pistol50
+ weapons@pistol@
+ BothArms_filter
+
+
+
+
+ weapons@pistol@pistol_50
+ weapons@pistol@pistol_50_str
+ weapons@pistol@pistol_injured
+ weapons@pistol@pistol_50@stealth
+
+
+
+
+
+ combat_fire_variations_pistol
+
+ combat_aim_turns_pistol
+
+ melee@pistol@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+ MOVE_JUMP@WEAPONS@PISTOL
+ MOVE_FALL@WEAPONS@PISTOL
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+ Wpn_Thrown_Grenade_Aiming_Rifle
+
+
+ -
+ cover@move@base@2h
+ cover@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_Wpn_ShotgunLo
+ weapons@rifle@lo@pump
+ BothArms_filter
+
+
+
+
+ weapons@rifle@lo@pump
+ weapons@rifle@lo@pump_str
+
+ weapons@rifle@lo@pump@stealth
+
+
+
+
+
+
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ Wpn_Thrown_Grenade_Aiming_Rifle
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+ cover@move@base@rpg
+ cover@move@extra@rpg
+
+ Cover_Wpn_RPG
+ weapons@heavy@rpg
+ BothArms_filter
+
+
+
+
+ weapons@heavy@rpg
+ weapons@heavy@rpg_str
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@RPG
+ MOVE_FALL@WEAPONS@RPG
+ weapons@heavy@rpg
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+ cover@move@base@2h
+ cover@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_Wpn_ShotgunSawnoff
+ weapons@rifle@lo@sawnoff
+ BothArms_filter
+
+
+
+
+ weapons@rifle@lo@sawnoff
+ weapons@rifle@lo@sawnoff_str
+
+ weapons@rifle@lo@sawnoff@stealth
+
+
+
+
+
+
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ Wpn_Thrown_Grenade_Aiming_Rifle
+
+
+ -
+ cover@move@base@2h
+ cover@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_Wpn_RifleSMG
+ weapons@rifle@lo@smg
+ BothArms_filter
+
+
+
+
+ weapons@rifle@lo@smg
+ weapons@rifle@lo@smg_str
+
+ weapons@rifle@lo@smg@stealth
+
+
+
+
+
+
+
+ combat_aim_turns_rifle
+
+ melee@pistol@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ Wpn_Thrown_Grenade_Aiming_Rifle
+
+
+ -
+
+
+
+ Cover_Wpn_Thrown_Grenade
+ Wpn_Grenade_WeaponHolding
+ BothArms_filter
+
+
+
+
+ Wpn_Thrown_Grenade
+ Wpn_Thrown_Grenade_Str
+
+
+
+
+
+
+
+
+
+
+
+ melee@thrown@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+
+
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+
+ -
+ cover@move@base@2h
+ cover@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_Wpn_RifleSniper
+ weapons@rifle@hi@sniper_rifle
+ BothArms_filter
+
+
+
+
+ weapons@rifle@hi@sniper_rifle
+ weapons@rifle@hi@sniper_rifle_str
+
+ weapons@rifle@hi@sniper_rifle@stealth
+
+
+
+
+
+
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+ Cover_Wpn_Thrown_Grenade
+ Wpn_StickyBomb_WeaponHolding
+ BothArms_filter
+
+
+
+
+ Wpn_Thrown_Sticky_Bomb
+ Wpn_Thrown_Grenade_Str
+
+
+
+
+
+
+
+
+
+
+
+ melee@thrown@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+
+
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+
+ -
+ cover@move@base@rpg
+ cover@move@extra@rpg
+
+ Cover_Wpn_RPG
+ weapons@heavy@rpg
+ BothArms_filter
+
+
+
+
+ weapons@heavy@rpg
+ weapons@heavy@rpg_str
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@RPG
+ MOVE_FALL@WEAPONS@RPG
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ cover@move@ai@base@1h
+ Cover_Wpn_Pistol
+ weapon@w_pi_stungun
+ BothArms_filter
+
+
+
+
+ weapon@w_pi_stungun
+ weapons@pistol@pistol_str
+ weapon@w_pi_stungun_injured
+ weapon@w_pi_stungun@stealth
+
+
+
+
+
+
+
+
+
+ melee@pistol@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+ MOVE_JUMP@WEAPONS@PISTOL
+ MOVE_FALL@WEAPONS@PISTOL
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+ Wpn_Thrown_Grenade_Aiming_Rifle
+
+
+ -
+
+
+
+ Cover_Wpn_Melee1h
+
+
+
+ move_strafe_melee_unarmed
+ move_ped_strafing_stealth
+
+ weapons@unarmed
+
+
+
+
+
+
+
+
+
+
+
+
+ melee@unarmed@base
+ melee@unarmed@streamed_core
+ melee@unarmed@streamed_variations
+ melee@unarmed@streamed_taunts
+ melee@unarmed@streamed_background
+ melee@unarmed@streamed_stealth
+ reaction@shellshock@unarmed
+
+
+
+ RightArm_NoSpine_filter
+ LegsOnly_filter
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+ creatures@retriever@melee@base@
+
+
+
+
+
+
+
+
+
+
+
+
+ creatures@retriever@melee@streamed_core@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+ creatures@pug@melee@streamed_core@
+
+
+
+
+
+
+
+
+
+
+
+
+ creatures@pug@melee@streamed_core@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+ creatures@shark@melee@streamed_core@
+
+
+
+
+
+
+
+
+
+
+
+
+ creatures@shark@melee@streamed_core@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+ creatures@hammerhead@melee@streamed_core@
+
+
+
+
+
+
+
+
+
+
+
+
+ creatures@hammerhead@melee@streamed_core@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+ creatures@killerwhale@melee@streamed_core@
+
+
+
+
+
+
+
+
+
+
+
+
+ creatures@killerwhale@melee@streamed_core@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+ CREATURES@BOAR@MELEE@STREAMED_CORE@
+
+
+
+
+
+
+
+
+
+
+
+
+ CREATURES@BOAR@MELEE@STREAMED_CORE@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+ CREATURES@PIG@MELEE@STREAMED_CORE@
+
+
+
+
+
+
+
+
+
+
+
+
+ CREATURES@PIG@MELEE@STREAMED_CORE@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+ CREATURES@COYOTE@MELEE@STREAMED_CORE@
+
+
+
+
+
+
+
+
+
+
+
+
+ CREATURES@COYOTE@MELEE@STREAMED_CORE@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+ creatures@deer@melee@streamed_core@
+
+
+
+
+
+
+
+
+
+
+
+
+ creatures@deer@melee@streamed_core@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+ creatures@hen@player_action@
+
+
+
+
+
+
+
+
+
+
+
+
+ creatures@hen@player_action@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+ creatures@rabbit@player_action@
+
+
+
+
+
+
+
+
+
+
+
+
+ creatures@rabbit@player_action@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+ creatures@cat@player_action@
+
+
+
+
+
+
+
+
+
+
+
+
+ creatures@cat@player_action@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+ creatures@cow@player_action@
+
+
+
+
+
+
+
+
+
+
+
+
+ creatures@cow@player_action@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+ Default
+
+
-
+
+
+
+
+ move_ped_wpn_jerrycan_franklin
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ move_ped_wpn_jerrycan_franklin
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ move_ped_wpn_jerrycan_franklin
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+ Default
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ combat_fire_variations_gang_pistol
+
+
+
+
+
+
+
+
+
+
+
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ combat_fire_variations_gang_smg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+ weapons@pistol@combat_pistol@stealth
+
+
+
+
+
+ combat_fire_variations_gang_pistol
+
+
+
+
+
+
+
+
+
+
+
+ weapons@pistol@
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ combat_fire_variations_gang_smg
+
+
+
+
+
+
+
+
+
+
+
+ weapons@pistol@
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ combat_fire_variations_gang_pistol
+
+
+
+
+
+
+
+
+
+
+
+ weapons@pistol@
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ combat_fire_variations_gang_pistol
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ combat_fire_variations_gang_smg
+
+
+
+
+
+
+
+
+
+
+
+ weapons@rifle@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+ Default
+
+
-
+
+
+
+
+
+
+
+
+
+
+ weapons@submg@advanced_rifle@micro_w_fire
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ move_ped_wpn_jerrycan_michael
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ move_ped_wpn_jerrycan_michael
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ move_ped_wpn_jerrycan_michael
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+ Gang
+
+
-
+
+
+
+
+ weapons@submg@f
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ weapons@rifle@f
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ weapons@rifle@f
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ weapons@submg@f
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ weapons@rifle@f
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ weapons@rifle@f
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ weapons@machinegun@f
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ weapons@rifle@f
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ weapons@rifle@f
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ weapons@rifle@f
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ weapons@machinegun@f
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ weapons@rifle@f
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ weapons@heavy@rpg@f
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ weapons@rifle@f
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ weapons@rifle@f
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ weapons@rifle@f
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ weapons@heavy@rpg@f
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+ Default
+
+
-
+
+
+
+
+ move_ped_wpn_jerrycan_trevor
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ move_ped_wpn_jerrycan_trevor
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+ move_ped_wpn_jerrycan_trevor
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+ Default
+
+
-
+
+
+ cover@move@ai@base@1h
+ Cover_Wpn_Pistol
+ weapons@pistol_1h@hillbilly
+ BothArms_filter
+
+
+
+
+ weapons@pistol_1h@hillbilly
+ weapons@pistol_1h@hillbilly_str
+ weapons@pistol@pistol_injured
+ weapons@pistol@pistol@stealth
+
+
+
+
+
+ combat_fire_variations_hillbilly_pistol_1H
+
+ combat_aim_turns_pistol
+
+ melee@pistol@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+ MOVE_JUMP@WEAPONS@PISTOL
+ MOVE_FALL@WEAPONS@PISTOL
+ weapons@pistol_1h@hillbilly
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+ combat_gestures_beckon_pistol_1h_hillbilly
+ combat_gestures_overthere_pistol_1h_hillbilly
+ combat_gestures_halt_pistol_1h_hillbilly
+ combat_gestures_glances_pistol_1h_hillbilly
+ combat_reactions_pistol_1h_hillbilly
+
+
+
+
+ -
+ Gang
+
+
-
+
+
+ cover@move@ai@base@1h
+ Cover_Wpn_Pistol
+ weapons@pistol_1h@gang
+ BothArms_filter
+
+
+
+
+ weapons@pistol_1h@gang
+ weapons@pistol_1h@gang_str
+ weapons@pistol@pistol_injured
+ weapons@pistol@pistol@stealth
+
+
+
+
+
+ combat_fire_variations_gang_pistol_1H
+
+ combat_aim_turns_pistol
+
+ melee@pistol@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+ MOVE_JUMP@WEAPONS@PISTOL
+ MOVE_FALL@WEAPONS@PISTOL
+ weapons@pistol_1h@gang
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+ combat_gestures_beckon_pistol_1h_gang
+ combat_gestures_overthere_pistol_1h_gang
+ combat_gestures_halt_pistol_1h_gang
+ combat_gestures_glances_pistol_1h_gang
+ combat_reactions_pistol_1h_gang
+
+
+
+
+ -
+ Default
+
+
-
+ move_m@generic
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_RifleAdvanced
+ weapons@first_person@aim_rng@generic@assault_rifle@advanced_rifle@
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_idle@generic@assault_rifle@advanced_rifle@
+ weapons@first_person@aim_rng@generic@assault_rifle@advanced_rifle@str
+
+ weapons@first_person@aim_stealth@generic@assault_rifle@advanced_rifle@
+
+
+
+
+
+ combat_fire_variations_rifle
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@advanced_rifle@aim_trans@rng_to_idle
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@advanced_rifle@aim_trans@lt_to_idle
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@advanced_rifle@aim_trans@scope_to_idle
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@advanced_rifle@aim_trans@unhlstr_2_idle
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@advanced_rifle@aim_trans@stealth_to_idle
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@advanced_rifle@aim_trans@idle_to_stealth
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@advanced_rifle@aim_trans@unholster_to_stealth
+
+
- weapons@first_person@aim_idle@p_m_zero@assault_rifle@advanced_rifle@fidgets@b
+ - weapons@first_person@aim_idle@p_m_zero@assault_rifle@advanced_rifle@fidgets@c
+
+ weapons@first_person@aim_idle@remote_clone@assault_rifle@advanced_rifle@
+
+ -
+ move_m@generic
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_AssaultSMG
+ weapons@first_person@aim_rng@generic@assault_rifle@advanced_rifle@
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_idle@generic@submachine_gun@assault_smg@
+ weapons@first_person@aim_rng@generic@submachine_gun@assault_smg@str
+
+ weapons@first_person@aim_stealth@generic@assault_rifle@advanced_rifle@
+
+
+
+
+
+
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@advanced_rifle@aim_trans@rng_to_idle
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@advanced_rifle@aim_trans@lt_to_idle
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@advanced_rifle@aim_trans@scope_to_idle
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@advanced_rifle@aim_trans@unhlstr_2_idle
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@advanced_rifle@aim_trans@stealth_to_idle
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@advanced_rifle@aim_trans@idle_to_stealth
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@advanced_rifle@aim_trans@unholster_to_stealth
+ weapons@first_person@aim_idle@remote_clone@assault_rifle@advanced_rifle@
+
+
- weapons@first_person@aim_idle@p_m_zero@submachine_gun@assault_smg@fidgets@a
+ - weapons@first_person@aim_idle@p_m_zero@submachine_gun@assault_smg@fidgets@b
+ - weapons@first_person@aim_idle@p_m_zero@submachine_gun@assault_smg@fidgets@c
+
+
+ -
+ move_m@generic
+
+
+ cover@move@ai@base@1h
+ Cover_FirstPerson_Wpn_APPistol
+ weapons@first_person@aim_idle@generic@pistol@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_idle@generic@pistol@shared@core
+ weapons@first_person@aim_rng@generic@pistol@ap_pistol@str
+ weapons@pistol@ap_pistol_injured
+ weapons@first_person@aim_stealth@generic@pistol@shared@core
+
+
+
+
+
+ combat_fire_variations_pistol
+
+ combat_aim_turns_pistol
+
+ melee@pistol@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+ MOVE_JUMP@WEAPONS@PISTOL
+ MOVE_FALL@WEAPONS@PISTOL
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@pistol@shared@core
+
+
+ weapons@first_person@aim_rng@p_m_zero@pistol@shared@aim_trans@rng_to_idle
+ weapons@first_person@aim_lt@p_m_zero@pistol@shared@aim_trans@lt_to_idle
+ weapons@first_person@aim_scope@p_m_zero@pistol@shared@aim_trans@scope_to_idle
+ weapons@first_person@aim_idle@p_m_zero@pistol@shared@aim_trans@unholster_to_idle
+ weapons@first_person@aim_stealth@p_m_zero@pistol@shared@aim_trans@stealth_to_idle
+ weapons@first_person@aim_idle@p_m_zero@pistol@shared@aim_trans@idle_to_stealth
+ weapons@first_person@aim_stealth@p_m_zero@pistol@shared@aim_trans@unholster_to_stealth
+
+
- weapons@first_person@aim_idle@p_m_zero@pistol@shared@fidgets@a
+ - weapons@first_person@aim_idle@p_m_zero@pistol@shared@fidgets@b
+ - weapons@first_person@aim_idle@p_m_zero@pistol@shared@fidgets@c
+
+ weapons@first_person@aim_idle@remote_clone@pistol@shared@core
+
+ -
+ move_m@generic
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_RifleHi
+ weapons@first_person@aim_idle@generic@assault_rifle@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_idle@generic@assault_rifle@shared@core
+ weapons@first_person@aim_rng@generic@assault_rifle@assault_rifle_str
+
+ weapons@first_person@aim_stealth@generic@assault_rifle@shared@core
+
+
+
+
+
+ combat_fire_variations_rifle
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_fps
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_idle
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_idle
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_idle
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_idle
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_idle
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_stealth
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_stealth
+
+
- weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@a
+ - WEAPONS@FIRST_PERSON@AIM_IDLE@P_M_ZERO@ASSAULT_RIFLE@SHARED@FIDGETS@B
+ - WEAPONS@FIRST_PERSON@AIM_IDLE@P_M_ZERO@ASSAULT_RIFLE@SHARED@FIDGETS@C
+
+ weapons@first_person@aim_idle@remote_clone@assault_rifle@shared@core
+
+ -
+ move_m@generic
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_ShotgunAssault
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_idle@generic@assault_rifle@shared@core
+ weapons@first_person@aim_rng@generic@shotgun@assault_shotgun@str
+
+ weapons@first_person@aim_stealth@generic@assault_rifle@shared@core
+
+
+
+
+
+
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_idle
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_idle
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_idle
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_idle
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_idle
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_stealth
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_stealth
+ weapons@first_person@aim_idle@remote_clone@assault_rifle@shared@core
+
+
- weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@a
+ - weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@c
+
+
+ -
+ move_m@generic
+
+
+
+ Cover_Wpn_Thrown_Grenade
+ fps_projectile_motion_ball
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_idle@generic@projectile@ball@
+ weapons@first_person@aim_rng@generic@projectile@ball@ball_str
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ reaction@shellshock@unarmed
+
+
+
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_lt@p_m_zero@projectile@misc@shared@aim_trans@lt_to_idle
+ weapons@first_person@aim_idle@p_m_zero@projectile@ball@aim_trans@unholster_to_idle
+ weapons@first_person@aim_idle@remote_clone@projectile@shared@core
+
+
- weapons@first_person@aim_idle@p_m_zero@projectile@ball@fidgets@a
+ - weapons@first_person@aim_idle@p_m_zero@projectile@ball@fidgets@b
+ - weapons@first_person@aim_idle@p_m_zero@projectile@ball@fidgets@c
+
+
+ -
+ move_m@generic
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_Wpn_FirstPerson_ShotgunBullpup
+ weapons@first_person@aim_rng@generic@shotgun@bullpup_shotgun@
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_idle@generic@assault_rifle@shared@core
+ weapons@first_person@aim_rng@generic@shotgun@bullpup_shotgun@str
+
+ weapons@first_person@aim_stealth@generic@assault_rifle@shared@core
+
+
+
+
+
+
+
+
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_idle
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_idle
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_idle
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_idle
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_idle
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_stealth
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_stealth
+ weapons@first_person@aim_idle@remote_clone@assault_rifle@shared@core
+
+
- weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@a
+ - weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@c
+
+
+ -
+ move_m@generic
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_RifleLo
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_idle@generic@assault_rifle@shared@core
+ weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str
+
+ weapons@first_person@aim_stealth@generic@assault_rifle@carbine_rifle
+
+
+
+
+
+ combat_fire_variations_rifle
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_fps
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_idle
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_idle
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_idle
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_idle
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_idle
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_stealth
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_stealth
+
+
- weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@a
+ - weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@b
+ - weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@c
+
+ weapons@first_person@aim_idle@remote_clone@assault_rifle@shared@core
+
+ -
+ move_m@generic
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_CombatMG
+ weapons@first_person@aim_rng@generic@light_machine_gun@combat_mg@
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_idle@generic@light_machine_gun@combat_mg@
+ weapons@first_person@aim_rng@generic@light_machine_gun@combat_mg@str
+
+ weapons@first_person@aim_stealth@generic@light_machine_gun@combat_mg@
+ weapons@first_person@aim_idle@generic@light_machine_gun@combat_mg@
+ weapons@first_person@aim_idle@generic@light_machine_gun@combat_mg@
+ weapons@first_person@aim_idle@generic@light_machine_gun@combat_mg@
+
+
+
+
+
+
+ melee@rifle@streamed_core
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ Wpn_Thrown_Grenade_Aiming_Rifle
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_idle
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_idle
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_idle
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_idle
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_idle
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_stealth
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_stealth
+ weapons@first_person@aim_idle@remote_clone@assault_rifle@shared@core
+
+
- weapons@first_person@aim_idle@p_m_zero@light_machine_gun@combat_mg@fidgets@a
+ - weapons@first_person@aim_idle@p_m_zero@light_machine_gun@combat_mg@fidgets@b
+ - weapons@first_person@aim_idle@p_m_zero@light_machine_gun@combat_mg@fidgets@c
+
+
+ -
+ move_m@generic
+
+
+ cover@move@ai@base@1h
+ Cover_FirstPerson_Wpn_Pistol
+ weapons@first_person@aim_idle@generic@pistol@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_idle@generic@pistol@shared@core
+ weapons@first_person@aim_rng@generic@pistol@combat_pistol@str
+ Wpn_Pistol_Injured
+ weapons@first_person@aim_stealth@generic@pistol@shared@core
+
+
+
+
+
+ combat_fire_variations_pistol
+
+ combat_aim_turns_pistol
+
+ melee@pistol@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+ MOVE_JUMP@WEAPONS@PISTOL
+ MOVE_FALL@WEAPONS@PISTOL
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@pistol@shared@core
+
+
+ weapons@first_person@aim_rng@p_m_zero@pistol@shared@aim_trans@rng_to_idle
+ weapons@first_person@aim_lt@p_m_zero@pistol@shared@aim_trans@lt_to_idle
+ weapons@first_person@aim_scope@p_m_zero@pistol@shared@aim_trans@scope_to_idle
+ weapons@first_person@aim_idle@p_m_zero@pistol@shared@aim_trans@unholster_to_idle
+ weapons@first_person@aim_stealth@p_m_zero@pistol@shared@aim_trans@stealth_to_idle
+ weapons@first_person@aim_idle@p_m_zero@pistol@shared@aim_trans@idle_to_stealth
+ weapons@first_person@aim_stealth@p_m_zero@pistol@shared@aim_trans@unholster_to_stealth
+
+
- weapons@first_person@aim_idle@p_m_zero@pistol@shared@fidgets@a
+ - weapons@first_person@aim_idle@p_m_zero@pistol@shared@fidgets@b
+ - weapons@first_person@aim_idle@p_m_zero@pistol@shared@fidgets@c
+
+ weapons@first_person@aim_idle@remote_clone@pistol@shared@core
+
+ -
+
+ cover@move@extra@1h
+ cover@move@ai@base@1h
+ Cover_FirstPerson_Wpn_Pistol
+ weapons@first_person@aim_idle@generic@misc@digi_scanner@
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_idle@generic@misc@digi_scanner@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@misc@digi_scanner@aim_trans@unholster_to_idle
+
+ -
+ move_m@generic
+
+
+
+ Cover_Wpn_Thrown_Grenade
+ fps_projectile_motion_flare
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_idle@generic@projectile@misc@flare@
+ weapons@first_person@aim_rng@generic@projectile@flare@flare_str
+
+
+
+
+
+
+
+
+
+
+
+ melee@thrown@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+
+
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_lt@p_m_zero@projectile@misc@flare@aim_trans@lt_to_idle
+ weapons@first_person@aim_idle@p_m_zero@projectile@misc@flare@aim_trans@unholster_to_idle
+ weapons@first_person@aim_idle@remote_clone@melee@one_handed@shared@core
+
+
- weapons@first_person@aim_idle@p_m_zero@projectile@misc@flare@fidgets@a
+ - weapons@first_person@aim_idle@p_m_zero@projectile@misc@flare@fidgets@b
+ - weapons@first_person@aim_idle@p_m_zero@projectile@misc@flare@fidgets@c
+
+
+ -
+ move_m@generic
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_GrnLch
+ weapons@first_person@aim_rng@generic@heavy@grenade_launcher@
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_idle@generic@heavy@grenade_launcher@
+ weapons@first_person@aim_rng@generic@heavy@grenade_launcher@str
+
+ weapons@heavy@grenade_launcher@stealth
+
+
+
+
+
+
+
+
+
+ melee@rifle@streamed_core
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@p_m_zero@heavy@grenade_launcher@aim_trans@rng_to_idle
+ weapons@first_person@aim_lt@p_m_zero@heavy@grenade_launcher@aim_trans@lt_to_idle
+ weapons@first_person@aim_scope@p_m_zero@heavy@grenade_launcher@aim_trans@scope_to_idle
+ weapons@first_person@aim_idle@p_m_zero@heavy@grenade_launcher@aim_trans@unhlstr_2_idle
+ weapons@first_person@aim_stealth@p_m_zero@heavy@grenade_launcher@aim_trans@stealth_to_idle
+ weapons@first_person@aim_idle@p_m_zero@heavy@grenade_launcher@aim_trans@idle_to_stealth
+ weapons@first_person@aim_stealth@p_m_zero@heavy@grenade_launcher@aim_trans@unholster_to_stealth
+ weapons@first_person@aim_idle@remote_clone@heavy@grenade_launcher@
+
+
- weapons@first_person@aim_idle@p_m_zero@heavy@grenade_launcher@fidgets@a
+ - weapons@first_person@aim_idle@p_m_zero@heavy@grenade_launcher@fidgets@b
+ - weapons@first_person@aim_idle@p_m_zero@heavy@grenade_launcher@fidgets@c
+
+
+ -
+ move_m@generic
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_GrnLch
+ weapons@first_person@aim_rng@generic@heavy@grenade_launcher@
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_idle@generic@heavy@grenade_launcher@
+ weapons@first_person@aim_rng@generic@heavy@grenade_launcher@str
+
+ weapons@heavy@grenade_launcher@stealth
+
+
+
+
+
+
+
+
+
+ melee@rifle@streamed_core
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_idle
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_idle
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_idle
+ weapons@first_person@aim_idle@p_m_zero@heavy@grenade_launcher@aim_trans@unhlstr_2_idle
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_idle
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_stealth
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_stealth
+ weapons@first_person@aim_idle@remote_clone@heavy@grenade_launcher@
+
+ -
+ move_m@generic
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_RifleSniperHeavy
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_idle@generic@assault_rifle@shared@core
+ weapons@first_person@aim_rng@generic@sniper_rifle@heavy_sniper@str
+
+ weapons@first_person@aim_stealth@generic@shotgun@shared@core
+
+
+
+
+
+
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_idle
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_idle
+ weapons@first_person@aim_scope@p_m_zero@sniper_rifle@heavy_sniper@aim_trans@scope_to_idle
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_idle
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_idle
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_stealth
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_stealth
+ weapons@first_person@aim_idle@remote_clone@assault_rifle@shared@core
+
+
- weapons@first_person@aim_idle@p_m_zero@sniper_rifle@heavy_sniper@fidgets@a
+ - weapons@first_person@aim_idle@p_m_zero@sniper_rifle@heavy_sniper@fidgets@b
+ - weapons@first_person@aim_idle@p_m_zero@sniper_rifle@heavy_sniper@fidgets@c
+
+
+ -
+ move_m@generic
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_MachineGun
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_idle@generic@assault_rifle@shared@core
+ weapons@first_person@aim_rng@generic@light_machine_gun@shared@core
+
+ weapons@first_person@aim_stealth@generic@assault_rifle@shared@core
+ weapons@first_person@aim_idle@generic@assault_rifle@shared@core
+ weapons@first_person@aim_idle@generic@assault_rifle@shared@core
+ weapons@first_person@aim_idle@generic@assault_rifle@shared@core
+
+
+
+
+
+
+ melee@rifle@streamed_core
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ Wpn_Thrown_Grenade_Aiming_Rifle
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_idle
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_idle
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_idle
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_idle
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_idle
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_stealth
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_stealth
+ weapons@first_person@aim_idle@remote_clone@assault_rifle@shared@core
+
+
- weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@a
+ - weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@b
+ - weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@c
+
+
+
+ -
+ move_m@generic
+
+
+ cover@move@ai@base@1h
+ Cover_FirstPerson_Wpn_MicroSMG
+ weapons@first_person@aim_rng@generic@submachine_gun@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_idle@generic@submachine_gun@shared@core
+ weapons@first_person@aim_rng@generic@submachine_gun@micro_smg_str
+
+ weapons@first_person@aim_stealth@generic@submachine_gun@shared@core
+ weapons@first_person@aim_idle@generic@submachine_gun@shared@core
+ weapons@first_person@aim_idle@generic@submachine_gun@shared@core
+ weapons@first_person@aim_idle@generic@submachine_gun@shared@core
+
+
+
+
+
+
+ melee@pistol@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@PISTOL
+ MOVE_FALL@WEAPONS@PISTOL
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ Wpn_Thrown_Grenade_Aiming_Rifle
+ weapons@first_person@aim_rng@p_m_zero@submachine_gun@shared@aim_trans@rng_to_idle
+ weapons@first_person@aim_lt@p_m_zero@submachine_gun@shared@aim_trans@lt_to_idle
+ weapons@first_person@aim_scope@p_m_zero@submachine_gun@shared@aim_trans@scope_to_idle
+ weapons@first_person@aim_idle@p_m_zero@submachine_gun@shared@aim_trans@unholster_to_idle
+ weapons@first_person@aim_stealth@p_m_zero@submachine_gun@shared@aim_trans@stealth_to_idle
+ weapons@first_person@aim_idle@p_m_zero@submachine_gun@shared@aim_trans@idle_to_stealth
+ weapons@first_person@aim_stealth@p_m_zero@submachine_gun@shared@aim_trans@unholster_to_stealth
+ weapons@first_person@aim_idle@remote_clone@pistol@shared@core
+
+
- weapons@first_person@aim_idle@p_m_zero@submachine_gun@shared@fidgets@a
+ - weapons@first_person@aim_idle@p_m_zero@submachine_gun@shared@fidgets@b
+ - weapons@first_person@aim_idle@p_m_zero@submachine_gun@shared@fidgets@c
+
+
+ -
+ move_m@generic
+
+
+
+
+ weapons@first_person@aim_rng@generic@heavy@minigun@
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_idle@generic@heavy@minigun@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@p_m_zero@heavy@minigun@aim_trans@rng_to_idle
+ weapons@first_person@aim_lt@p_m_zero@heavy@minigun@aim_trans@lt_to_idle
+
+ weapons@first_person@aim_idle@p_m_zero@heavy@minigun@aim_trans@unholster_to_idle
+
+
+
+ weapons@first_person@aim_idle@remote_clone@heavy@minigun@
+
+ -
+ move_m@generic
+
+
+
+ Cover_Wpn_Thrown_Grenade
+ fps_projectile_motion_molotov
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_idle@generic@projectile@misc@molotov
+ weapons@first_person@aim_rng@generic@projectile@molotov@molotov_str
+
+
+
+
+
+
+
+
+
+
+
+ melee@thrown@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+
+
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@projectile@misc@molotov@aim_trans@unholster_to_idle
+ weapons@first_person@aim_lt@p_m_zero@projectile@misc@molotov@aim_trans@lt_to_idle
+ weapons@first_person@aim_idle@p_m_zero@projectile@misc@molotov@aim_trans@unholster_to_idle
+ weapons@first_person@aim_idle@remote_clone@projectile@shared@core
+
+
- weapons@first_person@aim_idle@p_m_zero@projectile@misc@shared@fidgets@a
+ - weapons@first_person@aim_idle@p_m_zero@projectile@misc@shared@fidgets@b
+ - weapons@first_person@aim_idle@p_m_zero@projectile@misc@shared@fidgets@c
+
+
+ -
+ move_m@generic
+
+
+ cover@move@ai@base@1h
+ Cover_FirstPerson_Wpn_Pistol
+ weapons@first_person@aim_idle@generic@pistol@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_idle@generic@pistol@shared@core
+ weapons@first_person@aim_rng@generic@pistol@pistol_str
+ weapons@pistol@pistol_injured
+ weapons@first_person@aim_stealth@generic@pistol@shared@core
+
+
+
+
+
+ combat_fire_variations_pistol
+
+ combat_aim_turns_pistol
+
+ melee@pistol@streamed_fps
+
+
+
+
+ reaction@shellshock@unarmed
+ MOVE_JUMP@WEAPONS@PISTOL
+ MOVE_FALL@WEAPONS@PISTOL
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@pistol@shared@core
+
+
+ weapons@first_person@aim_rng@p_m_zero@pistol@shared@aim_trans@rng_to_idle
+ weapons@first_person@aim_lt@p_m_zero@pistol@shared@aim_trans@lt_to_idle
+ weapons@first_person@aim_scope@p_m_zero@pistol@shared@aim_trans@scope_to_idle
+ weapons@first_person@aim_idle@p_m_zero@pistol@shared@aim_trans@unholster_to_idle
+ weapons@first_person@aim_stealth@p_m_zero@pistol@shared@aim_trans@stealth_to_idle
+ weapons@first_person@aim_idle@p_m_zero@pistol@shared@aim_trans@idle_to_stealth
+ weapons@first_person@aim_stealth@p_m_zero@pistol@shared@aim_trans@unholster_to_stealth
+
+
- weapons@first_person@aim_idle@p_m_zero@pistol@shared@fidgets@a
+ - weapons@first_person@aim_idle@p_m_zero@pistol@shared@fidgets@b
+ - weapons@first_person@aim_idle@p_m_zero@pistol@shared@fidgets@c
+
+ weapons@first_person@aim_idle@remote_clone@pistol@shared@core
+
+ -
+ move_m@generic
+
+
+ cover@move@ai@base@1h
+ Cover_FirstPerson_Wpn_Pistol50
+ weapons@first_person@aim_rng@generic@pistol@pistol_50@
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_idle@generic@pistol@pistol_50@
+ weapons@first_person@aim_rng@generic@pistol@pistol_50@str
+ weapons@pistol@pistol_injured
+ weapons@first_person@aim_stealth@generic@pistol@pistol_50@
+
+
+
+
+
+ combat_fire_variations_pistol
+
+ combat_aim_turns_pistol
+
+ melee@pistol@streamed_fps
+
+
+
+
+ reaction@shellshock@unarmed
+ MOVE_JUMP@WEAPONS@PISTOL
+ MOVE_FALL@WEAPONS@PISTOL
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@pistol@shared@core
+
+
+ weapons@first_person@aim_rng@p_m_zero@pistol@pistol_50@aim_trans@rng_to_idle
+ weapons@first_person@aim_lt@p_m_zero@pistol@pistol_50@aim_trans@lt_to_idle
+ weapons@first_person@aim_scope@p_m_zero@pistol@pistol_50@aim_trans@scope_to_idle
+ weapons@first_person@aim_idle@p_m_zero@pistol@pistol_50@aim_trans@unholster_to_idle
+ weapons@first_person@aim_stealth@p_m_zero@pistol@pistol_50@aim_trans@stealth_to_idle
+ weapons@first_person@aim_idle@p_m_zero@pistol@pistol_50@aim_trans@idle_to_stealth
+ weapons@first_person@aim_stealth@p_m_zero@pistol@pistol_50@aim_trans@unholster_to_stealth
+
+
- weapons@first_person@aim_idle@p_m_zero@pistol@pistol_50@fidgets@a
+ - weapons@first_person@aim_idle@p_m_zero@pistol@pistol_50@fidgets@b
+ - weapons@first_person@aim_idle@p_m_zero@pistol@pistol_50@fidgets@c
+
+ weapons@first_person@aim_idle@remote_clone@pistol@shared@core
+
+ -
+ move_m@generic
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_ShotgunLo
+ weapons@first_person@aim_idle@generic@assault_rifle@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_idle@generic@assault_rifle@shared@core
+ weapons@first_person@aim_rng@generic@shotgun@pump_shotgun_str
+
+ weapons@first_person@aim_stealth@generic@shotgun@shared@core
+
+
+
+
+
+
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_idle
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_idle
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_idle
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_idle
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_idle
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_stealth
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_stealth
+ weapons@first_person@aim_idle@remote_clone@assault_rifle@shared@core
+
+
- weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@a
+ - weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@fidgets@b
+
+
+ -
+ move_m@generic
+ cover@first_person@move@base@rpg
+ cover@first_person@move@extra@rpg
+
+ Cover_FirstPerson_Wpn_RPG
+ weapons@first_person@aim_rng@generic@heavy@rpg@
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_idle@generic@heavy@rpg@
+ weapons@first_person@aim_rng@generic@heavy@rpg@str
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@RPG
+ MOVE_FALL@WEAPONS@RPG
+ weapons@heavy@rpg
+
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@p_m_zero@heavy@rpg@aim_trans@rng_to_idle
+ weapons@first_person@aim_rng@p_m_zero@heavy@rpg@aim_trans@rng_to_idle
+ weapons@first_person@aim_scope@p_m_zero@heavy@rpg@aim_trans@scope_to_idle
+ weapons@first_person@aim_idle@p_m_zero@heavy@rpg@aim_trans@unholster_to_idle
+
+
+
+
+
- weapons@first_person@aim_idle@p_m_zero@heavy@rpg@fidgets@a
+ - weapons@first_person@aim_idle@p_m_zero@heavy@rpg@fidgets@b
+ - weapons@first_person@aim_idle@p_m_zero@heavy@rpg@fidgets@c
+
+ weapons@first_person@aim_idle@remote_clone@heavy@rpg@
+
+ -
+ move_m@generic
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_ShotgunSawnoff
+ weapons@first_person@aim_rng@generic@shotgun@sawnoff@
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_idle@generic@shotgun@sawnoff@
+ weapons@first_person@aim_rng@generic@shotgun@sawnoff@str
+
+ weapons@first_person@aim_stealth@generic@shotgun@sawnoff@
+
+
+
+
+
+
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_idle
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_idle
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_idle
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_idle
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_idle
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_stealth
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_stealth
+ weapons@first_person@aim_idle@remote_clone@assault_rifle@shared@core
+
+
- weapons@first_person@aim_idle@p_m_zero@shotgun@sawnoff@fidgets@a
+ - weapons@first_person@aim_idle@p_m_zero@shotgun@sawnoff@fidgets@b
+ - weapons@first_person@aim_idle@p_m_zero@shotgun@sawnoff@fidgets@c
+
+
+ -
+ move_m@generic
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_RifleSMG
+ weapons@first_person@aim_rng@generic@submachine_gun@smg@
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_idle@generic@submachine_gun@smg@
+ weapons@first_person@aim_rng@generic@submachine_gun@smg@str
+
+ weapons@first_person@aim_stealth@generic@submachine_gun@smg@
+
+
+
+
+
+
+
+ combat_aim_turns_rifle
+
+ melee@pistol@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_idle
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_idle
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_idle
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_idle
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_idle
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_stealth
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_stealth
+ weapons@first_person@aim_idle@remote_clone@submachine_gun@shared@core
+
+
- weapons@first_person@aim_idle@p_m_zero@submachine_gun@smg@fidgets@a
+ - weapons@first_person@aim_idle@p_m_zero@submachine_gun@smg@fidgets@b
+ - weapons@first_person@aim_idle@p_m_zero@submachine_gun@smg@fidgets@c
+
+
+ -
+ move_m@generic
+
+
+
+ Cover_Wpn_Thrown_Grenade
+ fps_projectile_motion_tear_gas
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_idle@generic@projectile@tear_gas@
+ weapons@first_person@aim_rng@generic@projectile@grenade_str
+
+
+
+
+
+
+
+
+
+
+
+ melee@thrown@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+
+
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@projectile@tear_gas@aim_trans@unholster_to_idle
+ weapons@first_person@aim_lt@p_m_zero@projectile@tear_gas@aim_trans@lt_to_idle
+ weapons@first_person@aim_idle@p_m_zero@projectile@tear_gas@aim_trans@unholster_to_idle
+ weapons@first_person@aim_idle@remote_clone@projectile@shared@core
+
+
- weapons@first_person@aim_idle@p_m_zero@projectile@tear_gas@fidgets@a
+ - weapons@first_person@aim_idle@p_m_zero@projectile@tear_gas@fidgets@b
+ - weapons@first_person@aim_idle@p_m_zero@projectile@tear_gas@fidgets@c
+
+
+ -
+ move_m@generic
+
+
+
+ Cover_Wpn_Thrown_Grenade
+ fps_projectile_motion_tear_gas
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_idle@generic@projectile@tear_gas@
+ weapons@first_person@aim_rng@generic@projectile@grenade_str
+
+
+
+
+
+
+
+
+
+
+
+ melee@thrown@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+
+
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@projectile@tear_gas@aim_trans@unholster_to_idle
+ weapons@first_person@aim_lt@p_m_zero@projectile@tear_gas@aim_trans@lt_to_idle
+ weapons@first_person@aim_idle@p_m_zero@projectile@tear_gas@aim_trans@unholster_to_idle
+ weapons@first_person@aim_idle@remote_clone@projectile@shared@core
+
+
- weapons@first_person@aim_idle@p_m_zero@projectile@tear_gas@fidgets@a
+ - weapons@first_person@aim_idle@p_m_zero@projectile@tear_gas@fidgets@b
+ - weapons@first_person@aim_idle@p_m_zero@projectile@tear_gas@fidgets@c
+
+
+ -
+ move_m@generic
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_RifleSniper
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_idle@generic@sniper_rifle@shared@core
+ weapons@first_person@aim_rng@generic@sniper_rifle@sniper_rifle_str
+
+ weapons@first_person@aim_stealth@generic@sniper_rifle@shared@core
+
+
+
+
+
+
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_idle
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_idle
+ weapons@first_person@aim_scope@p_m_zero@sniper_rifle@shared@aim_trans@scope_to_idle
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_idle
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_idle
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_stealth
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_stealth
+ weapons@first_person@aim_idle@remote_clone@assault_rifle@shared@core
+
+
- weapons@first_person@aim_idle@p_m_zero@sniper_rifle@shared@fidgets@a
+ - weapons@first_person@aim_idle@p_m_zero@sniper_rifle@shared@fidgets@b
+ - weapons@first_person@aim_idle@p_m_zero@sniper_rifle@shared@fidgets@c
+
+
+ -
+
+
+
+ Cover_Wpn_Thrown_Grenade
+ fps_projectile_motion_sticky_bomb
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_idle@generic@projectile@misc@stickybomb@
+ weapons@first_person@aim_rng@generic@projectile@sticky_bomb@sticky_bomb_str
+
+
+
+
+
+
+
+
+
+
+
+ melee@thrown@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+
+
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@projectile@shared@aim_trans@unholster_to_idle
+ weapons@first_person@aim_lt@p_m_zero@projectile@misc@sticky_bomb@aim_trans@lt_to_idle
+ weapons@first_person@aim_idle@p_m_zero@projectile@misc@sticky_bomb@aim_trans@unholster_to_idle
+
+
- weapons@first_person@aim_idle@p_m_zero@projectile@misc@sticky_bomb@fidgets@a
+ - weapons@first_person@aim_idle@p_m_zero@projectile@misc@sticky_bomb@fidgets@b
+ - weapons@first_person@aim_idle@p_m_zero@projectile@misc@sticky_bomb@fidgets@c
+
+
+ -
+ move_m@generic
+
+
+ cover@move@ai@base@1h
+ Cover_FirstPerson_Wpn_Pistol
+ weapons@first_person@aim_idle@generic@pistol@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_idle@generic@pistol@shared@core
+ weapons@first_person@aim_rng@generic@pistol@pistol_str
+ weapons@pistol@pistol_injured
+ weapons@first_person@aim_stealth@generic@pistol@shared@core
+
+
+
+
+
+
+
+
+
+ melee@pistol@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+ MOVE_JUMP@WEAPONS@PISTOL
+ MOVE_FALL@WEAPONS@PISTOL
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@pistol@shared@core
+
+
+ weapons@first_person@aim_rng@p_m_zero@pistol@shared@aim_trans@rng_to_idle
+ weapons@first_person@aim_lt@p_m_zero@pistol@shared@aim_trans@lt_to_idle
+ weapons@first_person@aim_scope@p_m_zero@pistol@shared@aim_trans@scope_to_idle
+ weapons@first_person@aim_idle@p_m_zero@pistol@shared@aim_trans@unholster_to_idle
+ weapons@first_person@aim_stealth@p_m_zero@pistol@shared@aim_trans@stealth_to_idle
+ weapons@first_person@aim_idle@p_m_zero@pistol@shared@aim_trans@idle_to_stealth
+ weapons@first_person@aim_stealth@p_m_zero@pistol@shared@aim_trans@unholster_to_stealth
+
+
- weapons@first_person@aim_idle@p_m_zero@pistol@shared@fidgets@a
+ - weapons@first_person@aim_idle@p_m_zero@pistol@shared@fidgets@b
+ - weapons@first_person@aim_idle@p_m_zero@pistol@shared@fidgets@c
+
+ weapons@first_person@aim_idle@remote_clone@pistol@shared@core
+
+ -
+
+
+
+ Cover_Wpn_Melee1h
+
+
+
+ move_strafe_melee_unarmed_fps
+ move_ped_strafing_stealth
+
+ weapons@unarmed
+
+
+ weapons@first_person@aim_stealth@generic@unarmed@shared@core
+
+
+
+
+
+
+
+
+
+ melee@unarmed@base
+ melee@unarmed@streamed_core_fps
+ melee@unarmed@streamed_variations
+ melee@unarmed@streamed_taunts
+ melee@unarmed@streamed_background
+ melee@unarmed@streamed_stealth
+ reaction@shellshock@unarmed
+
+
+ move_m@generic
+
+ RightArm_NoSpine_filter
+ LegsOnly_filter
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@melee@unarmed@aimtrans@idle_to_relaxed
+ weapons@first_person@aim_stealth@p_m_zero@unarmed@shared@aim_trans@stealth_to_unarmed
+ weapons@first_person@aim_stealth@p_m_zero@unarmed@shared@aim_trans@unarmed_to_stealth
+ weapons@first_person@aim_stealth@p_m_zero@unarmed@shared@aim_trans@unholster_to_stealth
+
+ -
+ move_m@generic
+
+
+
+ Cover_Wpn_Melee1h
+ weapons@first_person@aim_idle@generic@melee@knife@shared@core
+ BothArms_filter
+
+ move_strafe_melee_unarmed_fps
+ move_ped_strafing_stealth
+ move_strafe@melee_knife_fps
+ weapons@first_person@aim_idle@generic@melee@knife@shared@core
+ weapons@first_person@aim_rng@generic@pistol@pistol_str
+
+
+
+
+
+
+
+
+
+
+
+ melee@knife@streamed_core_fps
+ melee@knife@streamed_variations
+
+
+
+ reaction@shellshock@unarmed
+
+
+
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@melee@knife@aim_trans@unholster_to_idle
+ weapons@first_person@aim_idle@remote_clone@melee@one_handed@shared@core
+
+
- weapons@first_person@aim_idle@p_m_zero@melee@knife@fidgets@a
+ - weapons@first_person@aim_idle@p_m_zero@melee@knife@fidgets@b
+ - weapons@first_person@aim_idle@p_m_zero@melee@knife@fidgets@c
+
+
+ -
+ move_m@generic
+
+
+
+
+ weapons@first_person@aim_idle@generic@melee@large_wpn@bat@
+ BothArms_filter
+
+ move_strafe_melee_unarmed_fps
+ move_ped_strafing_stealth
+ move_strafe@melee_large_weapon_fps
+ weapons@first_person@aim_idle@generic@melee@large_wpn@bat@
+ weapons@first_person@aim_rng@generic@pistol@pistol_str
+
+
+
+
+
+
+
+
+
+
+
+ melee@large_wpn@streamed_core_fps
+ melee@large_wpn@streamed_variations
+
+
+
+ reaction@shellshock@unarmed
+ MOVE_JUMP@WEAPONS@2H_MELEE
+ MOVE_FALL@WEAPONS@2H_MELEE
+
+
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@melee@large_wpn@bat@aim_trans@unholster_to_idle
+ weapons@first_person@aim_idle@remote_clone@melee@two_handed@bat
+
+
- weapons@first_person@aim_idle@p_m_zero@melee@large_wpn@bat@fidgets@a
+ - weapons@first_person@aim_idle@p_m_zero@melee@large_wpn@bat@fidgets@b
+ - weapons@first_person@aim_idle@p_m_zero@melee@large_wpn@bat@fidgets@c
+
+
+ -
+ move_m@generic
+
+
+
+ Cover_Wpn_Melee1h
+ weapons@first_person@aim_idle@generic@melee@large_wpn@gclub@
+ BothArms_filter
+
+ move_strafe_melee_unarmed_fps
+ move_ped_strafing_stealth
+ move_strafe@melee_large_weapon_fps_gclub
+ weapons@first_person@aim_idle@generic@melee@large_wpn@gclub@
+ weapons@first_person@aim_rng@generic@pistol@pistol_str
+
+
+
+
+
+
+
+
+
+
+
+ melee@large_wpn@streamed_core_fps_gclub
+ melee@large_wpn@streamed_variations
+
+
+
+ reaction@shellshock@unarmed
+
+
+
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@melee@large_wpn@gclub@aim_trans@unholster_to_idle
+ weapons@first_person@aim_idle@remote_clone@melee@two_handed@golf_club
+
+
- weapons@first_person@aim_idle@p_m_zero@melee@large_wpn@gclub@fidgets@a
+ - weapons@first_person@aim_idle@p_m_zero@melee@large_wpn@gclub@fidgets@b
+ - weapons@first_person@aim_idle@p_m_zero@melee@large_wpn@gclub@fidgets@c
+
+
+ -
+ move_m@generic
+
+
+
+ Cover_Wpn_Melee1h
+ weapons@first_person@aim_idle@generic@melee@small_wpn@crowbar@
+ BothArms_filter
+
+ move_strafe_melee_unarmed_fps
+ move_ped_strafing_stealth
+ move_strafe@melee_small_weapon_fps
+ weapons@first_person@aim_idle@generic@melee@small_wpn@crowbar@
+
+
+
+
+
+
+
+
+
+
+
+
+ melee@small_wpn@streamed_core_fps
+ melee@small_wpn@streamed_variations
+
+
+
+ reaction@shellshock@unarmed
+
+
+
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@melee@small_wpn@crowbar@aim_trans@unholster_to_idle
+ weapons@first_person@aim_idle@remote_clone@melee@one_handed@shared@core
+
+
- weapons@first_person@aim_idle@p_m_zero@melee@small_wpn@crowbar@fidgets@a
+ - weapons@first_person@aim_idle@p_m_zero@melee@small_wpn@crowbar@fidgets@b
+ - weapons@first_person@aim_idle@p_m_zero@melee@small_wpn@crowbar@fidgets@c
+
+
+ -
+ move_m@generic
+
+
+
+ Cover_Wpn_Melee1h
+ weapons@first_person@aim_idle@generic@melee@small_wpn@hammer@
+ BothArms_filter
+
+ move_strafe_melee_unarmed_fps
+ move_ped_strafing_stealth
+ move_strafe@melee_small_weapon_fps
+ weapons@first_person@aim_idle@generic@melee@small_wpn@hammer@
+
+
+
+
+
+
+
+
+
+
+
+
+ melee@small_wpn@streamed_core_fps
+ melee@small_wpn@streamed_variations
+
+
+
+ reaction@shellshock@unarmed
+
+
+
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@melee@small_wpn@hammer@aim_trans@unholster_to_idle
+ weapons@first_person@aim_idle@remote_clone@melee@one_handed@shared@core
+
+
- weapons@first_person@aim_idle@p_m_zero@melee@small_wpn@hammer@fidgets@a
+ - weapons@first_person@aim_idle@p_m_zero@melee@small_wpn@hammer@fidgets@b
+ - weapons@first_person@aim_idle@p_m_zero@melee@small_wpn@hammer@fidgets@c
+
+
+ -
+ move_m@generic
+
+
+
+ Cover_Wpn_Melee1h
+ weapons@first_person@aim_idle@generic@melee@small_wpn@nightstick@
+ BothArms_filter
+
+ move_strafe_melee_unarmed_fps
+ move_ped_strafing_stealth
+ move_strafe@melee_small_weapon_fps
+ weapons@first_person@aim_idle@generic@melee@small_wpn@nightstick@
+
+
+
+
+
+
+
+
+
+
+
+
+ melee@small_wpn@streamed_core_fps
+ melee@small_wpn@streamed_variations
+
+
+
+ reaction@shellshock@unarmed
+
+
+
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@melee@small_wpn@nightstick@aim_trans@unholster_to_idle
+ weapons@first_person@aim_idle@remote_clone@melee@one_handed@shared@core
+
+
- weapons@first_person@aim_idle@p_m_zero@melee@small_wpn@nightstick@fidgets@a
+ - weapons@first_person@aim_idle@p_m_zero@melee@small_wpn@nightstick@fidgets@b
+ - weapons@first_person@aim_idle@p_m_zero@melee@small_wpn@nightstick@fidgets@c
+
+
+ -
+ move_m@generic
+
+
+
+ Cover_Wpn_Thrown_Grenade
+ fps_projectile_motion
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_idle@generic@projectile@shared@core
+ weapons@first_person@aim_rng@generic@projectile@grenade_str
+
+
+
+
+
+
+
+
+
+
+
+ melee@thrown@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+
+
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@projectile@shared@aim_trans@unholster_to_idle
+ weapons@first_person@aim_lt@p_m_zero@projectile@shared@aim_trans@lt_to_idle
+ weapons@first_person@aim_idle@p_m_zero@projectile@shared@aim_trans@unholster_to_idle
+ weapons@first_person@aim_idle@remote_clone@projectile@shared@core
+
+
- weapons@first_person@aim_idle@p_m_zero@projectile@shared@fidgets@a
+ - weapons@first_person@aim_idle@p_m_zero@projectile@shared@fidgets@b
+ - weapons@first_person@aim_idle@p_m_zero@projectile@shared@fidgets@c
+
+
+ -
+ move_m@generic
+
+
+ cover@move@ai@base@1h
+ Cover_Wpn_Pistol
+ weapons@first_person@aim_rng@generic@misc@jerrycan
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_rng@generic@misc@jerrycan
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@JERRYCAN
+ MOVE_FALL@WEAPONS@JERRYCAN
+
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@p_m_zero@misc@jerrycan@aim_trans@unholster_to_rng
+ weapons@first_person@aim_idle@remote_clone@misc@jerrycan@
+
+ -
+
+
+ cover@move@ai@base@1h
+ Cover_Wpn_Pistol
+ move_ped_wpn_jerrycan_generic
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_rng@generic@misc@briefcase@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@JERRYCAN
+ MOVE_FALL@WEAPONS@JERRYCAN
+
+
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@p_m_zero@misc@briefcase@aim_trans@unholster_to_rng
+
+
+
+ -
+ Default
+
+
-
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_RifleAdvanced
+ weapons@first_person@aim_rng@generic@assault_rifle@advanced_rifle@
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_lt@generic@assault_rifle@advanced_rifle@w_fire
+ weapons@first_person@aim_rng@generic@assault_rifle@advanced_rifle@str
+
+ weapons@first_person@aim_lt@generic@assault_rifle@advanced_rifle@w_fire
+
+
+
+
+
+ combat_fire_variations_rifle
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_lt
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_lt
+
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_lt
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_lt
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@advanced_rifle@aim_trans@stealth_to_lt
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@advanced_rifle@aim_trans@lt_to_stealth
+
+
- weapons@first_person@aim_lt@p_m_zero@assault_rifle@advanced_rifle@fidgets@a
+ - weapons@first_person@aim_lt@p_m_zero@assault_rifle@advanced_rifle@fidgets@b
+ - weapons@first_person@aim_lt@p_m_zero@assault_rifle@advanced_rifle@fidgets@c
+
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_AssaultSMG
+ weapons@first_person@aim_rng@generic@assault_rifle@advanced_rifle@
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_lt@generic@submachine_gun@assault_smg@w_fire
+ weapons@first_person@aim_rng@generic@submachine_gun@assault_smg@str
+
+ weapons@first_person@aim_lt@generic@submachine_gun@assault_smg@w_fire
+
+
+
+
+
+
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_lt
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_lt
+
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_lt
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_lt
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@advanced_rifle@aim_trans@stealth_to_lt
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@advanced_rifle@aim_trans@lt_to_stealth
+
+
- weapons@first_person@aim_lt@p_m_zero@submachine_gun@assault_smg@fidgets@a
+ - weapons@first_person@aim_lt@p_m_zero@submachine_gun@assault_smg@fidgets@b
+ - weapons@first_person@aim_lt@p_m_zero@submachine_gun@assault_smg@fidgets@c
+ - weapons@first_person@aim_lt@p_m_zero@submachine_gun@assault_smg@fidgets@d
+
+
+ -
+
+
+ cover@move@ai@base@1h
+ Cover_FirstPerson_Wpn_APPistol
+ weapons@first_person@aim_lt@generic@pistol@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_lt@generic@pistol@ap_pistol@w_fire
+ weapons@first_person@aim_rng@generic@pistol@ap_pistol@str
+ weapons@pistol@ap_pistol_injured
+ weapons@first_person@aim_lt@generic@pistol@ap_pistol@w_fire
+
+
+
+
+
+ combat_fire_variations_pistol
+
+ combat_aim_turns_pistol
+
+ melee@pistol@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+ MOVE_JUMP@WEAPONS@PISTOL
+ MOVE_FALL@WEAPONS@PISTOL
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@pistol@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@pistol@shared@aim_trans@idle_to_lt
+ weapons@first_person@aim_rng@p_m_zero@pistol@shared@aim_trans@rng_to_lt
+
+ weapons@first_person@aim_scope@p_m_zero@pistol@shared@aim_trans@scope_to_lt
+ weapons@first_person@aim_lt@p_m_zero@pistol@shared@aim_trans@unholster_to_lt
+ weapons@first_person@aim_stealth@p_m_zero@pistol@shared@aim_trans@stealth_to_lt
+ weapons@first_person@aim_lt@p_m_zero@pistol@shared@aim_trans@lt_to_stealth
+
+
- weapons@first_person@aim_lt@p_m_zero@pistol@shared@fidgets@a
+ - weapons@first_person@aim_lt@p_m_zero@pistol@shared@fidgets@b
+ - weapons@first_person@aim_lt@p_m_zero@pistol@shared@fidgets@c
+ - weapons@first_person@aim_lt@p_m_zero@pistol@shared@fidgets@d
+
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_ShotgunAssault
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_lt@generic@shotgun@assault_shotgun@w_fire
+ weapons@first_person@aim_rng@generic@shotgun@assault_shotgun@str
+
+ weapons@first_person@aim_lt@generic@shotgun@assault_shotgun@w_fire
+
+
+
+
+
+
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_lt
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_lt
+
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_lt
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_lt
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_lt
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_stealth
+
+
- weapons@first_person@aim_lt@p_m_zero@shotgun@assault_shotgun@fidgets@a
+ - weapons@first_person@aim_lt@p_m_zero@shotgun@assault_shotgun@fidgets@b
+ - weapons@first_person@aim_lt@p_m_zero@shotgun@assault_shotgun@fidgets@c
+
+
+ -
+
+
+
+ Cover_Wpn_Thrown_Grenade
+ fps_projectile_motion_ball
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_lt@generic@projectile@misc@shared@core
+ weapons@first_person@aim_rng@generic@projectile@ball@ball_str
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ reaction@shellshock@unarmed
+
+
+
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@projectile@ball@aim_trans@idle_to_lt
+
+
+ weapons@first_person@aim_lt@p_m_zero@projectile@misc@shared@aim_trans@unholster_to_lt
+
+
- weapons@first_person@aim_lt@p_m_zero@projectile@misc@shared@fidgets@a
+ - weapons@first_person@aim_lt@p_m_zero@projectile@misc@shared@fidgets@b
+ - weapons@first_person@aim_lt@p_m_zero@projectile@misc@shared@fidgets@C
+
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_Wpn_FirstPerson_ShotgunBullpup
+ weapons@first_person@aim_rng@generic@shotgun@bullpup_shotgun@
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_lt@generic@shotgun@bullpup_shotgun@w_fire
+ weapons@first_person@aim_rng@generic@shotgun@bullpup_shotgun@str
+
+ weapons@first_person@aim_lt@generic@shotgun@bullpup_shotgun@
+
+
+
+
+
+
+
+
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_lt
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_lt
+
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_lt
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_lt
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_lt
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_stealth
+
+
- weapons@first_person@aim_lt@p_m_zero@shotgun@bullpup_shotgun@fidgets@a
+ - weapons@first_person@aim_lt@p_m_zero@shotgun@bullpup_shotgun@fidgets@b
+ - weapons@first_person@aim_lt@p_m_zero@shotgun@bullpup_shotgun@fidgets@c
+
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_CombatMG
+ weapons@first_person@aim_rng@generic@light_machine_gun@combat_mg@
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_lt@generic@light_machine_gun@combat_mg@w_fire
+ weapons@first_person@aim_rng@generic@light_machine_gun@combat_mg@str
+
+ weapons@first_person@aim_lt@generic@light_machine_gun@combat_mg@w_fire
+ weapons@first_person@aim_lt@generic@light_machine_gun@combat_mg@w_fire
+ weapons@first_person@aim_lt@generic@light_machine_gun@combat_mg@w_fire
+ weapons@first_person@aim_lt@generic@light_machine_gun@combat_mg@w_fire
+
+
+
+
+
+
+ melee@rifle@streamed_core
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ Wpn_Thrown_Grenade_Aiming_Rifle
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_lt
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_lt
+
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_lt
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_lt
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_lt
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_stealth
+
+
- weapons@first_person@aim_lt@p_m_zero@light_machine_gun@combat_mg@fidgets@a
+ - weapons@first_person@aim_lt@p_m_zero@light_machine_gun@combat_mg@fidgets@b
+ - weapons@first_person@aim_lt@p_m_zero@light_machine_gun@combat_mg@fidgets@c
+
+
+ -
+
+
+ cover@move@ai@base@1h
+ Cover_FirstPerson_Wpn_Pistol
+ weapons@first_person@aim_rng@generic@pistol@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_lt@generic@pistol@combat_pistol@w_fire
+ weapons@first_person@aim_rng@generic@pistol@combat_pistol@str
+ Wpn_Pistol_Injured
+ weapons@first_person@aim_lt@generic@pistol@combat_pistol@w_fire
+
+
+
+
+
+ combat_fire_variations_pistol
+
+ combat_aim_turns_pistol
+
+ melee@pistol@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+ MOVE_JUMP@WEAPONS@PISTOL
+ MOVE_FALL@WEAPONS@PISTOL
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@pistol@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@pistol@shared@aim_trans@idle_to_lt
+ weapons@first_person@aim_rng@p_m_zero@pistol@shared@aim_trans@rng_to_lt
+
+ weapons@first_person@aim_scope@p_m_zero@pistol@shared@aim_trans@scope_to_lt
+ weapons@first_person@aim_lt@p_m_zero@pistol@shared@aim_trans@unholster_to_lt
+ weapons@first_person@aim_stealth@p_m_zero@pistol@shared@aim_trans@stealth_to_lt
+ weapons@first_person@aim_lt@p_m_zero@pistol@shared@aim_trans@lt_to_stealth
+
+
- weapons@first_person@aim_lt@p_m_zero@pistol@shared@fidgets@a
+ - weapons@first_person@aim_lt@p_m_zero@pistol@shared@fidgets@b
+ - weapons@first_person@aim_lt@p_m_zero@pistol@shared@fidgets@c
+ - weapons@first_person@aim_lt@p_m_zero@pistol@shared@fidgets@d
+
+
+ -
+
+
+
+ Cover_Wpn_Thrown_Grenade
+ fps_projectile_motion_flare
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_lt@generic@projectile@misc@flare@
+ weapons@first_person@aim_rng@generic@projectile@flare@flare_str
+
+
+
+
+
+
+
+
+
+
+
+ melee@thrown@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+
+
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@projectile@misc@flare@aim_trans@idle_to_lt
+
+
+ weapons@first_person@aim_lt@p_m_zero@projectile@misc@flare@aim_trans@unholster_to_lt
+
+
- weapons@first_person@aim_lt@p_m_zero@projectile@misc@flare@fidgets@a
+ - weapons@first_person@aim_lt@p_m_zero@projectile@misc@flare@fidgets@b
+ - weapons@first_person@aim_lt@p_m_zero@projectile@misc@flare@fidgets@c
+
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_GrnLch
+ weapons@first_person@aim_rng@generic@heavy@grenade_launcher@
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_lt@generic@heavy@grenade_launcher@w_fire
+ weapons@first_person@aim_rng@generic@heavy@grenade_launcher@str
+
+ weapons@heavy@grenade_launcher@stealth
+
+
+
+
+
+
+
+
+
+ melee@rifle@streamed_core
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@heavy@grenade_launcher@aim_trans@idle_to_lt
+ weapons@first_person@aim_rng@p_m_zero@heavy@grenade_launcher@aim_trans@rng_to_lt
+
+ weapons@first_person@aim_scope@p_m_zero@heavy@grenade_launcher@aim_trans@scope_to_lt
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_lt
+ weapons@first_person@aim_stealth@p_m_zero@heavy@grenade_launcher@aim_trans@stealth_to_lt
+ weapons@first_person@aim_lt@p_m_zero@heavy@grenade_launcher@aim_trans@lt_to_stealth
+
+
- weapons@first_person@aim_lt@p_m_zero@heavy@grenade_launcher@fidgets@a
+ - weapons@first_person@aim_lt@p_m_zero@heavy@grenade_launcher@fidgets@b
+ - weapons@first_person@aim_lt@p_m_zero@heavy@grenade_launcher@fidgets@c
+
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_GrnLch
+ weapons@first_person@aim_rng@generic@heavy@grenade_launcher@
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_lt@generic@heavy@grenade_launcher@w_fire
+ weapons@first_person@aim_rng@generic@heavy@grenade_launcher@str
+
+ weapons@heavy@grenade_launcher@stealth
+
+
+
+
+
+
+
+
+
+ melee@rifle@streamed_core
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_lt
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_lt
+
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_lt
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_lt
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_lt
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_stealth
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_RifleSniperHeavy
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_lt@generic@sniper_rifle@heavy_sniper@w_fire
+ weapons@first_person@aim_rng@generic@sniper_rifle@heavy_sniper@str
+
+ weapons@first_person@aim_lt@generic@sniper_rifle@heavy_sniper@w_fire
+
+
+
+
+
+
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_lt
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_lt
+
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_lt
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_lt
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_lt
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_stealth
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_MachineGun
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_lt@generic@light_machine_gun@shared@core@w_fire
+ weapons@first_person@aim_rng@generic@light_machine_gun@mg_str
+
+ weapons@first_person@aim_lt@generic@light_machine_gun@shared@core@w_fire
+ weapons@first_person@aim_lt@generic@light_machine_gun@shared@core@w_fire
+ weapons@first_person@aim_lt@generic@light_machine_gun@shared@core@w_fire
+ weapons@first_person@aim_lt@generic@light_machine_gun@shared@core@w_fire
+
+
+
+
+
+
+ melee@rifle@streamed_core
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ Wpn_Thrown_Grenade_Aiming_Rifle
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_lt
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_lt
+
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_lt
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_lt
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_lt
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_stealth
+
+
- weapons@first_person@aim_lt@p_m_zero@light_machine_gun@shared@fidgets@a
+ - weapons@first_person@aim_lt@p_m_zero@light_machine_gun@shared@fidgets@b
+ - weapons@first_person@aim_lt@p_m_zero@light_machine_gun@shared@fidgets@c
+
+
+ -
+
+
+ cover@move@ai@base@1h
+ Cover_FirstPerson_Wpn_MicroSMG
+ weapons@first_person@aim_rng@generic@submachine_gun@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_lt@generic@submachine_gun@shared@core@w_fire
+ weapons@first_person@aim_rng@generic@submachine_gun@micro_smg_str
+
+ weapons@first_person@aim_lt@generic@submachine_gun@shared@core@w_fire
+ weapons@first_person@aim_lt@generic@submachine_gun@shared@core@w_fire
+ weapons@first_person@aim_lt@generic@submachine_gun@shared@core@w_fire
+ weapons@first_person@aim_lt@generic@submachine_gun@shared@core@w_fire
+
+
+
+
+
+
+ melee@pistol@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@PISTOL
+ MOVE_FALL@WEAPONS@PISTOL
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ Wpn_Thrown_Grenade_Aiming_Rifle
+ weapons@first_person@aim_idle@p_m_zero@submachine_gun@shared@aim_trans@idle_to_lt
+ weapons@first_person@aim_rng@p_m_zero@submachine_gun@shared@aim_trans@rng_to_lt
+
+ weapons@first_person@aim_scope@p_m_zero@submachine_gun@shared@aim_trans@scope_to_lt
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_lt
+ weapons@first_person@aim_stealth@p_m_zero@submachine_gun@shared@aim_trans@stealth_to_lt
+ weapons@first_person@aim_lt@p_m_zero@submachine_gun@shared@aim_trans@lt_to_stealth
+
+
- weapons@first_person@aim_lt@p_m_zero@submachine_gun@shared@fidgets@a
+ - weapons@first_person@aim_lt@p_m_zero@submachine_gun@shared@fidgets@b
+ - weapons@first_person@aim_lt@p_m_zero@submachine_gun@shared@fidgets@c
+
+
+ -
+
+
+
+
+ weapons@first_person@aim_rng@generic@heavy@minigun@
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_lt@generic@heavy@minigun@w_fire
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@heavy@minigun@aim_trans@idle_to_lt
+ weapons@first_person@aim_rng@p_m_zero@heavy@minigun@aim_trans@rng_to_lt
+
+
+ weapons@first_person@aim_lt@p_m_zero@heavy@minigun@aim_trans@unholster_to_lt
+
+
+
+ -
+
+
+
+ Cover_Wpn_Thrown_Grenade
+ fps_projectile_motion_molotov
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_lt@generic@projectile@misc@molotov@
+ weapons@first_person@aim_rng@generic@projectile@molotov@molotov_str
+
+
+
+
+
+
+
+
+
+
+
+ melee@thrown@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+
+
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@projectile@misc@molotov@aim_trans@idle_to_lt
+ weapons@first_person@aim_idle@p_m_zero@projectile@misc@molotov@aim_trans@unholster_to_idle
+
+ weapons@first_person@aim_lt@p_m_zero@projectile@misc@molotov@aim_trans@unholster_to_lt
+
+
- weapons@first_person@aim_lt@p_m_zero@projectile@misc@molotov@fidgets@a
+ - weapons@first_person@aim_lt@p_m_zero@projectile@misc@molotov@fidgets@b
+ - weapons@first_person@aim_lt@p_m_zero@projectile@misc@molotov@fidgets@c
+
+
+ -
+
+
+ cover@move@ai@base@1h
+ Cover_FirstPerson_Wpn_Pistol
+ weapons@first_person@aim_rng@generic@pistol@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_lt@generic@pistol@w_fire
+ weapons@first_person@aim_rng@generic@pistol@pistol_str
+ weapons@pistol@pistol_injured
+ weapons@first_person@aim_lt@generic@pistol@w_fire
+
+
+
+
+
+ combat_fire_variations_pistol
+
+ combat_aim_turns_pistol
+
+ melee@pistol@streamed_fps
+
+
+
+
+ reaction@shellshock@unarmed
+ MOVE_JUMP@WEAPONS@PISTOL
+ MOVE_FALL@WEAPONS@PISTOL
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@pistol@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@pistol@shared@aim_trans@idle_to_lt
+ weapons@first_person@aim_rng@p_m_zero@pistol@shared@aim_trans@rng_to_lt
+
+ weapons@first_person@aim_scope@p_m_zero@pistol@shared@aim_trans@scope_to_lt
+ weapons@first_person@aim_lt@p_m_zero@pistol@shared@aim_trans@unholster_to_lt
+ weapons@first_person@aim_stealth@p_m_zero@pistol@shared@aim_trans@stealth_to_lt
+ weapons@first_person@aim_lt@p_m_zero@pistol@shared@aim_trans@lt_to_stealth
+
+
- weapons@first_person@aim_lt@p_m_zero@pistol@shared@fidgets@a
+ - weapons@first_person@aim_lt@p_m_zero@pistol@shared@fidgets@b
+ - weapons@first_person@aim_lt@p_m_zero@pistol@shared@fidgets@c
+ - weapons@first_person@aim_lt@p_m_zero@pistol@shared@fidgets@d
+
+
+ -
+
+
+ cover@move@ai@base@1h
+ Cover_FirstPerson_Wpn_Pistol50
+ weapons@first_person@aim_lt@generic@pistol@pistol_50@
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_lt@generic@pistol@pistol_50@w_fire
+ weapons@first_person@aim_rng@generic@pistol@pistol_50@str
+ weapons@pistol@pistol_injured
+ weapons@first_person@aim_lt@generic@pistol@pistol_50@w_fire
+
+
+
+
+
+ combat_fire_variations_pistol
+
+ combat_aim_turns_pistol
+
+ melee@pistol@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+ MOVE_JUMP@WEAPONS@PISTOL
+ MOVE_FALL@WEAPONS@PISTOL
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@pistol@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@pistol@pistol_50@aim_trans@idle_to_lt
+ weapons@first_person@aim_rng@p_m_zero@pistol@pistol_50@aim_trans@rng_to_lt
+
+ weapons@first_person@aim_scope@p_m_zero@pistol@pistol_50@aim_trans@scope_to_lt
+ weapons@first_person@aim_lt@p_m_zero@pistol@pistol_50@aim_trans@unholster_to_lt
+ weapons@first_person@aim_stealth@p_m_zero@pistol@pistol_50@aim_trans@stealth_to_lt
+ weapons@first_person@aim_lt@p_m_zero@pistol@pistol_50@aim_trans@lt_to_stealth
+
+
- weapons@first_person@aim_lt@p_m_zero@pistol@pistol_50@fidgets@a
+ - weapons@first_person@aim_lt@p_m_zero@pistol@pistol_50@fidgets@b
+ - weapons@first_person@aim_lt@p_m_zero@pistol@pistol_50@fidgets@c
+ - weapons@first_person@aim_lt@p_m_zero@pistol@pistol_50@fidgets@d
+
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_RifleHi
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_lt@generic@assault_rifle@shared@core
+ weapons@first_person@aim_rng@generic@assault_rifle@assault_rifle_str
+
+ weapons@first_person@aim_lt@generic@assault_rifle@shared@core
+
+
+
+
+
+ combat_fire_variations_rifle
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_fps
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_lt
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_lt
+
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_lt
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_lt
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_lt
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_stealth
+
+
- weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@fidgets@a
+ - weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@fidgets@b
+ - weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@fidgets@c
+
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_RifleLo
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_lt@generic@assault_rifle@carbine_rifle@w_fire
+ weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str
+
+ weapons@first_person@aim_lt@generic@assault_rifle@carbine_rifle@w_fire
+
+
+
+
+
+ combat_fire_variations_rifle
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_fps
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_lt
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_lt
+
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_lt
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_lt
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_lt
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_stealth
+
+
- weapons@first_person@aim_lt@p_m_zero@assault_rifle@carbine_rifle@fidgets@a
+ - weapons@first_person@aim_lt@p_m_zero@assault_rifle@carbine_rifle@fidgets@b
+ - weapons@first_person@aim_lt@p_m_zero@assault_rifle@carbine_rifle@fidgets@c
+
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_ShotgunLo
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_lt@generic@shotgun@shared@core@w_fire
+ weapons@first_person@aim_rng@generic@shotgun@pump_shotgun_str
+
+ weapons@first_person@aim_lt@generic@shotgun@shared@core@w_fire
+
+
+
+
+
+
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_lt
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_lt
+
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_lt
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_lt
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_lt
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_stealth
+
+
- weapons@first_person@aim_lt@p_m_zero@shotgun@shared@fidgets@a
+ - weapons@first_person@aim_lt@p_m_zero@shotgun@shared@fidgets@b
+ - weapons@first_person@aim_lt@p_m_zero@shotgun@shared@fidgets@c
+
+
+ -
+ cover@first_person@move@base@rpg
+ cover@first_person@move@extra@rpg
+
+ Cover_FirstPerson_Wpn_RPG
+ weapons@first_person@aim_rng@generic@heavy@rpg@
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_rng@generic@heavy@rpg@w_fire
+ weapons@first_person@aim_rng@generic@heavy@rpg@str
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@RPG
+ MOVE_FALL@WEAPONS@RPG
+ weapons@heavy@rpg
+
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@heavy@rpg@aim_trans@idle_to_rng
+
+
+ weapons@first_person@aim_scope@p_m_zero@heavy@rpg@aim_trans@scope_to_rng
+ weapons@first_person@aim_rng@p_m_zero@heavy@rpg@aim_trans@unholster_to_rng
+
+
+
+
- weapons@first_person@aim_rng@p_m_zero@heavy@rpg@fidgets@a
+ - weapons@first_person@aim_rng@p_m_zero@heavy@rpg@fidgets@b
+ - weapons@first_person@aim_rng@p_m_zero@heavy@rpg@fidgets@c
+
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_ShotgunSawnoff
+ weapons@first_person@aim_rng@generic@shotgun@sawnoff@
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_lt@generic@shotgun@sawnoff@w_fire
+ weapons@first_person@aim_rng@generic@shotgun@sawnoff@str
+
+ weapons@first_person@aim_lt@generic@shotgun@sawnoff@w_fire
+
+
+
+
+
+
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_lt
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_lt
+
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_lt
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_lt
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_lt
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_stealth
+
+
- weapons@first_person@aim_lt@p_m_zero@shotgun@sawnoff@fidgets@a
+ - weapons@first_person@aim_lt@p_m_zero@shotgun@sawnoff@fidgets@b
+ - weapons@first_person@aim_lt@p_m_zero@shotgun@sawnoff@fidgets@c
+
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_RifleSMG
+ weapons@first_person@aim_rng@generic@submachine_gun@smg@
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_lt@generic@submachine_gun@smg@w_fire
+ weapons@first_person@aim_rng@generic@submachine_gun@smg@str
+
+ weapons@first_person@aim_lt@generic@submachine_gun@smg@w_fire
+
+
+
+
+
+
+
+ combat_aim_turns_rifle
+
+ melee@pistol@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_lt
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_lt
+
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_lt
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_lt
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_lt
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_stealth
+
+
- weapons@first_person@aim_lt@p_m_zero@submachine_gun@smg@fidgets@a
+ - weapons@first_person@aim_lt@p_m_zero@submachine_gun@smg@fidgets@b
+ - weapons@first_person@aim_lt@p_m_zero@submachine_gun@smg@fidgets@c
+
+
+ -
+
+
+
+ Cover_Wpn_Thrown_Grenade
+ fps_projectile_motion_tear_gas
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_lt@generic@projectile@tear_gas@
+ weapons@first_person@aim_rng@generic@projectile@grenade_str
+
+
+
+
+
+
+
+
+
+
+
+ melee@thrown@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+
+
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@projectile@tear_gas@aim_trans@idle_to_lt
+ weapons@first_person@aim_idle@p_m_zero@projectile@tear_gas@aim_trans@unholster_to_idle
+
+ weapons@first_person@aim_lt@p_m_zero@projectile@tear_gas@aim_trans@unholster_to_lt
+
+
- weapons@first_person@aim_lt@p_m_zero@projectile@tear_gas@fidgets@a
+ - weapons@first_person@aim_lt@p_m_zero@projectile@tear_gas@fidgets@b
+ - weapons@first_person@aim_lt@p_m_zero@projectile@tear_gas@fidgets@c
+
+
+ -
+
+
+
+ Cover_Wpn_Thrown_Grenade
+ fps_projectile_motion_tear_gas
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_lt@generic@projectile@tear_gas@
+ weapons@first_person@aim_rng@generic@projectile@grenade_str
+
+
+
+
+
+
+
+
+
+
+
+ melee@thrown@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+
+
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@projectile@tear_gas@aim_trans@idle_to_lt
+ weapons@first_person@aim_idle@p_m_zero@projectile@tear_gas@aim_trans@unholster_to_idle
+
+ weapons@first_person@aim_lt@p_m_zero@projectile@tear_gas@aim_trans@unholster_to_lt
+
+
- weapons@first_person@aim_lt@p_m_zero@projectile@tear_gas@fidgets@a
+ - weapons@first_person@aim_lt@p_m_zero@projectile@tear_gas@fidgets@b
+ - weapons@first_person@aim_lt@p_m_zero@projectile@tear_gas@fidgets@c
+
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_RifleSniper
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_lt@generic@sniper_rifle@shared@core@w_fire
+ weapons@first_person@aim_rng@generic@sniper_rifle@sniper_rifle_str
+
+ weapons@first_person@aim_lt@generic@sniper_rifle@shared@core@w_fire
+
+
+
+
+
+
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_lt
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_lt
+
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_lt
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_lt
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_lt
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_stealth
+
+ -
+
+
+
+ Cover_Wpn_Thrown_Grenade
+ fps_projectile_motion_sticky_bomb
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_lt@generic@projectile@misc@sticky_bomb
+ weapons@first_person@aim_rng@generic@projectile@sticky_bomb@sticky_bomb_str
+
+
+
+
+
+
+
+
+
+
+
+ melee@thrown@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+
+
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@projectile@misc@sticky_bomb@aim_trans@idle_to_lt
+ weapons@first_person@aim_idle@p_m_zero@projectile@shared@aim_trans@unholster_to_idle
+
+ weapons@first_person@aim_lt@p_m_zero@projectile@misc@sticky_bomb@aim_trans@unholster_to_lt
+
+
- weapons@first_person@aim_lt@p_m_zero@projectile@misc@sticky_bomb@fidgets@a
+ - weapons@first_person@aim_lt@p_m_zero@projectile@misc@sticky_bomb@fidgets@b
+ - weapons@first_person@aim_lt@p_m_zero@projectile@misc@sticky_bomb@fidgets@c
+
+
+ -
+
+
+ cover@move@ai@base@1h
+ Cover_FirstPerson_Wpn_Pistol
+ weapons@first_person@aim_rng@generic@pistol@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_lt@generic@pistol@w_fire
+ weapons@first_person@aim_rng@generic@pistol@pistol_str
+ weapons@pistol@pistol_injured
+ weapons@first_person@aim_lt@generic@pistol@w_fire
+
+
+
+
+
+
+
+
+
+ melee@pistol@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+ MOVE_JUMP@WEAPONS@PISTOL
+ MOVE_FALL@WEAPONS@PISTOL
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@pistol@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@pistol@shared@aim_trans@idle_to_lt
+ weapons@first_person@aim_rng@p_m_zero@pistol@shared@aim_trans@rng_to_lt
+
+ weapons@first_person@aim_scope@p_m_zero@pistol@shared@aim_trans@scope_to_lt
+ weapons@first_person@aim_lt@p_m_zero@pistol@shared@aim_trans@unholster_to_lt
+ weapons@first_person@aim_stealth@p_m_zero@pistol@shared@aim_trans@stealth_to_lt
+ weapons@first_person@aim_lt@p_m_zero@pistol@shared@aim_trans@lt_to_stealth
+
+
- weapons@first_person@aim_lt@p_m_zero@pistol@shared@fidgets@a
+ - weapons@first_person@aim_lt@p_m_zero@pistol@shared@fidgets@b
+ - weapons@first_person@aim_lt@p_m_zero@pistol@shared@fidgets@c
+ - weapons@first_person@aim_lt@p_m_zero@pistol@shared@fidgets@d
+
+
+ -
+
+
+
+ Cover_Wpn_Thrown_Grenade
+ fps_projectile_motion
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_lt@generic@projectile@shared@core
+ weapons@first_person@aim_rng@generic@projectile@grenade_str
+
+
+
+
+
+
+
+
+
+
+
+ melee@thrown@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+
+
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@projectile@shared@aim_trans@idle_to_lt
+ weapons@first_person@aim_idle@p_m_zero@projectile@shared@aim_trans@unholster_to_idle
+
+ weapons@first_person@aim_lt@p_m_zero@projectile@shared@aim_trans@unholster_to_lt
+
+
- weapons@first_person@aim_lt@p_m_zero@projectile@shared@fidgets@a
+ - weapons@first_person@aim_lt@p_m_zero@projectile@shared@fidgets@b
+ - weapons@first_person@aim_lt@p_m_zero@projectile@shared@fidgets@c
+
+
+ -
+
+
+
+ Cover_Wpn_Melee1h
+ weapons@first_person@aim_idle@generic@melee@knife@shared@core
+
+
+ move_strafe_melee_unarmed_fps
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_idle@generic@melee@unarmed@
+
+
+
+
+
+
+
+
+
+
+
+
+ melee@unarmed@base
+ melee@unarmed@streamed_core_fps
+ melee@unarmed@streamed_variations
+ melee@unarmed@streamed_taunts
+ melee@unarmed@streamed_background
+ melee@unarmed@streamed_stealth
+ reaction@shellshock@unarmed
+
+
+
+ RightArm_NoSpine_filter
+ LegsOnly_filter
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@melee@unarmed@aimtrans@unholster_to_idle
+ weapons@first_person@aim_idle@p_m_zero@melee@unarmed@aimtrans@unholster_to_idle
+ weapons@first_person@aim_stealth@p_m_zero@unarmed@shared@aim_trans@stealth_to_idle
+ weapons@first_person@aim_idle@p_m_zero@unarmed@aim_trans@idle_to_stealth
+
+
+
+ -
+ Default
+
+
-
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_RifleAdvanced
+ weapons@first_person@aim_rng@generic@assault_rifle@advanced_rifle@
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_rng@generic@assault_rifle@advanced_rifle@w_fire
+ weapons@first_person@aim_rng@generic@assault_rifle@advanced_rifle@str
+
+ weapons@first_person@aim_rng@generic@assault_rifle@advanced_rifle@w_fire
+
+
+
+
+
+ combat_fire_variations_rifle
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_rng
+
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_rng
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_rng
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_rng
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@advanced_rifle@aim_trans@stealth_to_rng
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@advanced_rifle@aim_trans@rng_to_stealth
+
+
- weapons@first_person@aim_rng@p_m_zero@assault_rifle@advanced_rifle@fidgets@a
+ - weapons@first_person@aim_rng@p_m_zero@assault_rifle@advanced_rifle@fidgets@b
+ - weapons@first_person@aim_rng@p_m_zero@assault_rifle@advanced_rifle@fidgets@c
+
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_AssaultSMG
+ weapons@first_person@aim_rng@generic@assault_rifle@advanced_rifle@
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_rng@generic@submachine_gun@assault_smg@w_fire
+ weapons@first_person@aim_rng@generic@submachine_gun@assault_smg@str
+
+ weapons@first_person@aim_rng@generic@submachine_gun@assault_smg@w_fire
+
+
+
+
+
+
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_rng
+
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_rng
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_rng
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_rng
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@advanced_rifle@aim_trans@stealth_to_rng
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@advanced_rifle@aim_trans@rng_to_stealth
+
+
- weapons@first_person@aim_rng@p_m_zero@submachine_gun@assault_smg@fidgets@a
+ - weapons@first_person@aim_rng@p_m_zero@submachine_gun@assault_smg@fidgets@b
+ - weapons@first_person@aim_rng@p_m_zero@submachine_gun@assault_smg@fidgets@c
+
+
+ -
+
+
+ cover@move@ai@base@1h
+ Cover_FirstPerson_Wpn_APPistol
+ weapons@first_person@aim_rng@generic@pistol@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_rng@generic@pistol@ap_pistol@w_fire
+ weapons@first_person@aim_rng@generic@pistol@ap_pistol@str
+ weapons@pistol@ap_pistol_injured
+ weapons@first_person@aim_rng@generic@pistol@ap_pistol@w_fire
+
+
+
+
+
+ combat_fire_variations_pistol
+
+ combat_aim_turns_pistol
+
+ melee@pistol@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+ MOVE_JUMP@WEAPONS@PISTOL
+ MOVE_FALL@WEAPONS@PISTOL
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@pistol@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@pistol@shared@aim_trans@idle_to_rng
+
+ weapons@first_person@aim_lt@p_m_zero@pistol@shared@aim_trans@lt_to_rng
+ weapons@first_person@aim_scope@p_m_zero@pistol@shared@aim_trans@scope_to_rng
+ weapons@first_person@aim_rng@p_m_zero@pistol@shared@aim_trans@unholster_to_rng
+ weapons@first_person@aim_stealth@p_m_zero@pistol@shared@aim_trans@stealth_to_rng
+ weapons@first_person@aim_rng@p_m_zero@pistol@shared@aim_trans@rng_to_stealth
+
+
- weapons@first_person@aim_rng@p_m_zero@pistol@shared@fidgets@a
+ - weapons@first_person@aim_rng@p_m_zero@pistol@shared@fidgets@b
+ - weapons@first_person@aim_rng@p_m_zero@pistol@shared@fidgets@c
+
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_ShotgunAssault
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_rng@generic@shotgun@assault_shotgun@w_fire
+ weapons@first_person@aim_rng@generic@shotgun@assault_shotgun@str
+
+ weapons@first_person@aim_rng@generic@shotgun@assault_shotgun@w_fire
+
+
+
+
+
+
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_rng
+
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_rng
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_rng
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_rng
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_rng
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_stealth
+
+
- weapons@first_person@aim_rng@p_m_zero@shotgun@assault_shotgun@fidgets@a
+ - weapons@first_person@aim_rng@p_m_zero@shotgun@assault_shotgun@fidgets@b
+ - weapons@first_person@aim_rng@p_m_zero@shotgun@assault_shotgun@fidgets@c
+
+
+ -
+
+
+
+ Cover_Wpn_Thrown_Grenade
+ fps_projectile_motion_ball
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_rng@generic@projectile@ball@
+ weapons@first_person@aim_rng@generic@projectile@ball@ball_str
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ reaction@shellshock@unarmed
+
+
+
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@projectile@ball@aim_trans@idle_to_idlerng
+
+ weapons@first_person@aim_lt@p_m_zero@projectile@misc@shared@aim_trans@lt_to_rng
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_Wpn_FirstPerson_ShotgunBullpup
+ weapons@first_person@aim_rng@generic@shotgun@bullpup_shotgun@
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_rng@generic@shotgun@bullpup_shotgun@w_fire
+ weapons@first_person@aim_rng@generic@shotgun@bullpup_shotgun@str
+
+ weapons@first_person@aim_rng@generic@shotgun@bullpup_shotgun@
+
+
+
+
+
+
+
+
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_rng
+
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_rng
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_rng
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_rng
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_rng
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_stealth
+
+
- weapons@first_person@aim_rng@p_m_zero@shotgun@bullpup_shotgun@fidgets@a
+ - weapons@first_person@aim_rng@p_m_zero@shotgun@bullpup_shotgun@fidgets@b
+ - weapons@first_person@aim_rng@p_m_zero@shotgun@bullpup_shotgun@fidgets@c
+
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_CombatMG
+ weapons@first_person@aim_rng@generic@light_machine_gun@combat_mg@
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_rng@generic@light_machine_gun@combat_mg@w_fire
+ weapons@first_person@aim_rng@generic@light_machine_gun@combat_mg@str
+
+ weapons@first_person@aim_rng@generic@light_machine_gun@combat_mg@w_fire
+ weapons@first_person@aim_rng@generic@light_machine_gun@combat_mg@w_fire
+ weapons@first_person@aim_rng@generic@light_machine_gun@combat_mg@w_fire
+ weapons@first_person@aim_rng@generic@light_machine_gun@combat_mg@w_fire
+
+
+
+
+
+
+ melee@rifle@streamed_core
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ Wpn_Thrown_Grenade_Aiming_Rifle
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_rng
+
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_rng
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_rng
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_rng
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_rng
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_stealth
+
+
- weapons@first_person@aim_rng@p_m_zero@light_machine_gun@combat_mg@fidgets@a
+ - weapons@first_person@aim_rng@p_m_zero@light_machine_gun@combat_mg@fidgets@b
+ - weapons@first_person@aim_rng@p_m_zero@light_machine_gun@combat_mg@fidgets@c
+
+
+ -
+
+
+ cover@move@ai@base@1h
+ Cover_FirstPerson_Wpn_Pistol
+ weapons@first_person@aim_rng@generic@pistol@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_rng@generic@pistol@combat_pistol@w_fire
+ weapons@first_person@aim_rng@generic@pistol@combat_pistol@str
+ Wpn_Pistol_Injured
+ weapons@first_person@aim_rng@generic@pistol@combat_pistol@w_fire
+
+
+
+
+
+ combat_fire_variations_pistol
+
+ combat_aim_turns_pistol
+
+ melee@pistol@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+ MOVE_JUMP@WEAPONS@PISTOL
+ MOVE_FALL@WEAPONS@PISTOL
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@pistol@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@pistol@shared@aim_trans@idle_to_rng
+
+ weapons@first_person@aim_lt@p_m_zero@pistol@shared@aim_trans@lt_to_rng
+ weapons@first_person@aim_scope@p_m_zero@pistol@shared@aim_trans@scope_to_rng
+ weapons@first_person@aim_rng@p_m_zero@pistol@shared@aim_trans@unholster_to_rng
+ weapons@first_person@aim_stealth@p_m_zero@pistol@shared@aim_trans@stealth_to_rng
+ weapons@first_person@aim_rng@p_m_zero@pistol@shared@aim_trans@rng_to_stealth
+
+
- weapons@first_person@aim_rng@p_m_zero@pistol@shared@fidgets@a
+ - weapons@first_person@aim_rng@p_m_zero@pistol@shared@fidgets@b
+ - weapons@first_person@aim_rng@p_m_zero@pistol@shared@fidgets@c
+
+
+ -
+
+ cover@move@extra@1h
+ cover@move@ai@base@1h
+ Cover_FirstPerson_Wpn_Pistol
+ weapons@first_person@aim_idle@generic@misc@digi_scanner@
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_idle@generic@misc@digi_scanner@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@misc@digi_scanner@aim_trans@unholster_to_idle
+
+ -
+
+
+
+ Cover_Wpn_Thrown_Grenade
+ fps_projectile_motion_flare
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_rng@generic@projectile@flare@
+ weapons@first_person@aim_rng@generic@projectile@flare@flare_str
+
+
+
+
+
+
+
+
+
+
+
+ melee@thrown@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+
+
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@projectile@misc@flare@aim_trans@idle_to_idlerng
+
+ weapons@first_person@aim_lt@p_m_zero@projectile@misc@flare@aim_trans@lt_to_rng
+
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_GrnLch
+ weapons@first_person@aim_rng@generic@heavy@grenade_launcher@
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_rng@generic@heavy@grenade_launcher@w_fire
+ weapons@first_person@aim_rng@generic@heavy@grenade_launcher@str
+
+ weapons@heavy@grenade_launcher@stealth
+
+
+
+
+
+
+
+
+
+ melee@rifle@streamed_core
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@heavy@grenade_launcher@aim_trans@idle_to_rng
+
+ weapons@first_person@aim_lt@p_m_zero@heavy@grenade_launcher@aim_trans@lt_to_rng
+ weapons@first_person@aim_scope@p_m_zero@heavy@grenade_launcher@aim_trans@scope_to_rng
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_rng
+ weapons@first_person@aim_stealth@p_m_zero@heavy@grenade_launcher@aim_trans@stealth_to_rng
+ weapons@first_person@aim_rng@p_m_zero@heavy@grenade_launcher@aim_trans@rng_to_stealth
+
+
- weapons@first_person@aim_rng@p_m_zero@heavy@grenade_launcher@fidgets@a
+ - weapons@first_person@aim_rng@p_m_zero@heavy@grenade_launcher@fidgets@b
+ - weapons@first_person@aim_rng@p_m_zero@heavy@grenade_launcher@fidgets@c
+
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_GrnLch
+ weapons@first_person@aim_rng@generic@heavy@grenade_launcher@
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_rng@generic@heavy@grenade_launcher@w_fire
+ weapons@first_person@aim_rng@generic@heavy@grenade_launcher@str
+
+ weapons@heavy@grenade_launcher@stealth
+
+
+
+
+
+
+
+
+
+ melee@rifle@streamed_core
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_rng
+
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_rng
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_rng
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_rng
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_rng
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_stealth
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_RifleSniperHeavy
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_rng@generic@sniper_rifle@heavy_sniper@w_fire
+ weapons@first_person@aim_rng@generic@sniper_rifle@heavy_sniper@str
+
+ weapons@first_person@aim_rng@generic@sniper_rifle@heavy_sniper@w_fire
+
+
+
+
+
+
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_rng
+
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_rng
+ weapons@first_person@aim_scope@p_m_zero@sniper_rifle@heavy_sniper@aim_trans@scope_to_rng
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_rng
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_rng
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_stealth
+
+
- weapons@first_person@aim_rng@p_m_zero@sniper_rifle@heavy_sniper@fidgets@a
+ - weapons@first_person@aim_rng@p_m_zero@sniper_rifle@heavy_sniper@fidgets@b
+ - weapons@first_person@aim_rng@p_m_zero@sniper_rifle@heavy_sniper@fidgets@c
+
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_MachineGun
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_rng@generic@light_machine_gun@shared@core@w_fire
+ weapons@first_person@aim_rng@generic@light_machine_gun@mg_str
+
+ weapons@first_person@aim_rng@generic@light_machine_gun@shared@core
+ weapons@first_person@aim_rng@generic@light_machine_gun@shared@core@w_fire
+ weapons@first_person@aim_rng@generic@light_machine_gun@shared@core@w_fire
+ weapons@first_person@aim_rng@generic@light_machine_gun@shared@core@w_fire
+
+
+
+
+
+
+ melee@rifle@streamed_core
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ Wpn_Thrown_Grenade_Aiming_Rifle
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_rng
+
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_rng
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_rng
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_rng
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_rng
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_stealth
+
+
- weapons@first_person@aim_rng@p_m_zero@light_machine_gun@shared@fidgets@a
+ - weapons@first_person@aim_rng@p_m_zero@light_machine_gun@shared@fidgets@b
+ - weapons@first_person@aim_rng@p_m_zero@light_machine_gun@shared@fidgets@c
+
+
+ -
+
+
+ cover@move@ai@base@1h
+ Cover_FirstPerson_Wpn_MicroSMG
+ weapons@first_person@aim_rng@generic@submachine_gun@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_rng@generic@submachine_gun@shared@core@w_fire
+ weapons@first_person@aim_rng@generic@submachine_gun@micro_smg_str
+
+ weapons@first_person@aim_rng@generic@submachine_gun@shared@core@w_fire
+ weapons@first_person@aim_rng@generic@submachine_gun@shared@core@w_fire
+ weapons@first_person@aim_rng@generic@submachine_gun@shared@core@w_fire
+ weapons@first_person@aim_rng@generic@submachine_gun@shared@core@w_fire
+
+
+
+
+
+
+ melee@pistol@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@PISTOL
+ MOVE_FALL@WEAPONS@PISTOL
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ Wpn_Thrown_Grenade_Aiming_Rifle
+ weapons@first_person@aim_idle@p_m_zero@submachine_gun@shared@aim_trans@idle_to_rng
+
+ weapons@first_person@aim_lt@p_m_zero@submachine_gun@shared@aim_trans@lt_to_rng
+ weapons@first_person@aim_scope@p_m_zero@submachine_gun@shared@aim_trans@scope_to_rng
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_rng
+ weapons@first_person@aim_stealth@p_m_zero@submachine_gun@shared@aim_trans@stealth_to_rng
+ weapons@first_person@aim_rng@p_m_zero@submachine_gun@shared@aim_trans@rng_to_stealth
+
+
- weapons@first_person@aim_rng@p_m_zero@submachine_gun@shared@fidgets@a
+ - weapons@first_person@aim_rng@p_m_zero@submachine_gun@shared@fidgets@b
+ - weapons@first_person@aim_rng@p_m_zero@submachine_gun@shared@fidgets@c
+
+
+ -
+
+
+
+
+ weapons@first_person@aim_rng@generic@heavy@minigun@
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_rng@generic@heavy@minigun@w_fire
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@heavy@minigun@aim_trans@idle_to_rng
+
+ weapons@first_person@aim_lt@p_m_zero@heavy@minigun@aim_trans@lt_to_rng
+
+ weapons@first_person@aim_rng@p_m_zero@heavy@minigun@aim_trans@unholster_to_rng
+
+
+
+ -
+
+
+
+ Cover_Wpn_Thrown_Grenade
+ fps_projectile_motion_molotov
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_rng@generic@projectile@molotov@
+ weapons@first_person@aim_rng@generic@projectile@molotov@molotov_str
+
+
+
+
+
+
+
+
+
+
+
+ melee@thrown@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+
+
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@projectile@misc@molotov@aim_trans@idle_to_idlerng
+ weapons@first_person@aim_idle@p_m_zero@projectile@misc@molotov@aim_trans@unholster_to_idle
+ weapons@first_person@aim_lt@p_m_zero@projectile@misc@molotov@aim_trans@lt_to_rng
+
+
+ -
+
+
+ cover@move@ai@base@1h
+ Cover_FirstPerson_Wpn_Pistol
+ weapons@first_person@aim_rng@generic@pistol@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_rng@pistol@pistol
+ weapons@first_person@aim_rng@generic@pistol@pistol_str
+ weapons@pistol@pistol_injured
+ weapons@first_person@aim_rng@pistol@pistol
+
+
+
+
+
+ combat_fire_variations_pistol
+
+ combat_aim_turns_pistol
+
+ melee@pistol@streamed_fps
+
+
+
+
+ reaction@shellshock@unarmed
+ MOVE_JUMP@WEAPONS@PISTOL
+ MOVE_FALL@WEAPONS@PISTOL
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@pistol@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@pistol@shared@aim_trans@idle_to_rng
+
+ weapons@first_person@aim_lt@p_m_zero@pistol@shared@aim_trans@lt_to_rng
+ weapons@first_person@aim_scope@p_m_zero@pistol@shared@aim_trans@scope_to_rng
+ weapons@first_person@aim_rng@p_m_zero@pistol@shared@aim_trans@unholster_to_rng
+ weapons@first_person@aim_stealth@p_m_zero@pistol@shared@aim_trans@stealth_to_rng
+ weapons@first_person@aim_rng@p_m_zero@pistol@shared@aim_trans@rng_to_stealth
+
+
- weapons@first_person@aim_rng@p_m_zero@pistol@shared@fidgets@a
+ - weapons@first_person@aim_rng@p_m_zero@pistol@shared@fidgets@b
+ - weapons@first_person@aim_rng@p_m_zero@pistol@shared@fidgets@c
+
+
+ -
+
+
+ cover@move@ai@base@1h
+ Cover_FirstPerson_Wpn_Pistol50
+ weapons@first_person@aim_rng@generic@pistol@pistol_50@
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_rng@generic@pistol@pistol_50@w_fire
+ weapons@first_person@aim_rng@generic@pistol@pistol_50@str
+ weapons@pistol@pistol_injured
+ weapons@first_person@aim_rng@generic@pistol@pistol_50@w_fire
+
+
+
+
+
+ combat_fire_variations_pistol
+
+ combat_aim_turns_pistol
+
+ melee@pistol@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+ MOVE_JUMP@WEAPONS@PISTOL
+ MOVE_FALL@WEAPONS@PISTOL
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@pistol@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@pistol@pistol_50@aim_trans@idle_to_rng
+
+ weapons@first_person@aim_lt@p_m_zero@pistol@pistol_50@aim_trans@lt_to_rng
+ weapons@first_person@aim_scope@p_m_zero@pistol@pistol_50@aim_trans@scope_to_rng
+ weapons@first_person@aim_rng@p_m_zero@pistol@pistol_50@aim_trans@unholster_to_rng
+ weapons@first_person@aim_stealth@p_m_zero@pistol@pistol_50@aim_trans@stealth_to_rng
+ weapons@first_person@aim_rng@p_m_zero@pistol@pistol_50@aim_trans@rng_to_stealth
+
+
- weapons@first_person@aim_rng@p_m_zero@pistol@pistol_50@fidgets@a
+ - weapons@first_person@aim_rng@p_m_zero@pistol@pistol_50@fidgets@b
+ - weapons@first_person@aim_rng@p_m_zero@pistol@pistol_50@fidgets@c
+
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_RifleHi
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ weapons@first_person@aim_rng@generic@assault_rifle@assault_rifle_str
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+
+
+
+
+ combat_fire_variations_rifle
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_fps
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_rng
+
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_rng
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_rng
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_rng
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_rng
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_stealth
+
+
- weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@fidgets@a
+ - weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@fidgets@b
+ - weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@fidgets@c
+
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_RifleLo
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@w_fire
+ weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str
+
+ weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@w_fire
+
+
+
+
+
+ combat_fire_variations_rifle
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_fps
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_rng
+
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_rng
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_rng
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_rng
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_rng
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_stealth
+
+
- weapons@first_person@aim_rng@p_m_zero@assault_rifle@carbine_rifle@fidgets@a
+ - weapons@first_person@aim_rng@p_m_zero@assault_rifle@carbine_rifle@fidgets@b
+ - weapons@first_person@aim_rng@p_m_zero@assault_rifle@carbine_rifle@fidgets@c
+
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_ShotgunLo
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_rng@generic@shotgun@shared@core@w_fire
+ weapons@first_person@aim_rng@generic@shotgun@pump_shotgun_str
+
+ weapons@first_person@aim_rng@generic@shotgun@shared@core@w_fire
+
+
+
+
+
+
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_rng
+
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_rng
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_rng
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_rng
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_rng
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_stealth
+
+
- weapons@first_person@aim_rng@p_m_zero@shotgun@shared@fidgets@a
+ - weapons@first_person@aim_rng@p_m_zero@shotgun@shared@fidgets@b
+ - weapons@first_person@aim_rng@p_m_zero@shotgun@shared@fidgets@c
+
+
+ -
+ cover@first_person@move@base@rpg
+ cover@first_person@move@extra@rpg
+
+ Cover_FirstPerson_Wpn_RPG
+ weapons@first_person@aim_rng@generic@heavy@rpg@
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_rng@generic@heavy@rpg@w_fire
+ weapons@first_person@aim_rng@generic@heavy@rpg@str
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@RPG
+ MOVE_FALL@WEAPONS@RPG
+ weapons@heavy@rpg
+
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@heavy@rpg@aim_trans@idle_to_rng
+
+
+ weapons@first_person@aim_scope@p_m_zero@heavy@rpg@aim_trans@scope_to_rng
+ weapons@first_person@aim_rng@p_m_zero@heavy@rpg@aim_trans@unholster_to_rng
+
+
+
+
- weapons@first_person@aim_rng@p_m_zero@heavy@rpg@fidgets@a
+ - weapons@first_person@aim_rng@p_m_zero@heavy@rpg@fidgets@b
+ - weapons@first_person@aim_rng@p_m_zero@heavy@rpg@fidgets@c
+
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_ShotgunSawnoff
+ weapons@first_person@aim_rng@generic@shotgun@sawnoff@
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_rng@generic@shotgun@sawnoff@w_fire
+ weapons@first_person@aim_rng@generic@shotgun@sawnoff@str
+
+ weapons@first_person@aim_rng@generic@shotgun@sawnoff@w_fire
+
+
+
+
+
+
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_rng
+
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_rng
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_rng
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_rng
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_rng
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_stealth
+
+
- weapons@first_person@aim_rng@p_m_zero@shotgun@sawnoff@fidgets@a
+ - weapons@first_person@aim_rng@p_m_zero@shotgun@sawnoff@fidgets@b
+ - weapons@first_person@aim_rng@p_m_zero@shotgun@sawnoff@fidgets@c
+
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_RifleSMG
+ weapons@first_person@aim_rng@generic@submachine_gun@smg@
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_rng@generic@submachine_gun@smg@w_fire
+ weapons@first_person@aim_rng@generic@submachine_gun@smg@str
+
+ weapons@first_person@aim_rng@generic@submachine_gun@smg@w_fire
+
+
+
+
+
+
+
+ combat_aim_turns_rifle
+
+ melee@pistol@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_rng
+
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_rng
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_rng
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_rng
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_rng
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_stealth
+
+
- weapons@first_person@aim_rng@p_m_zero@submachine_gun@smg@fidgets@a
+ - weapons@first_person@aim_rng@p_m_zero@submachine_gun@smg@fidgets@b
+ - weapons@first_person@aim_rng@p_m_zero@submachine_gun@smg@fidgets@c
+
+
+ -
+
+
+
+ Cover_Wpn_Thrown_Grenade
+ fps_projectile_motion_tear_gas
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_rng@generic@projectile@tear_gas@
+ weapons@first_person@aim_rng@generic@projectile@grenade_str
+
+
+
+
+
+
+
+
+
+
+
+ melee@thrown@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+
+
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@projectile@tear_gas@aim_trans@idle_to_idlerng
+
+ weapons@first_person@aim_lt@p_m_zero@projectile@tear_gas@aim_trans@lt_to_rng
+ weapons@first_person@aim_idle@p_m_zero@projectile@shared@aim_trans@unholster_to_idle
+
+ -
+
+
+
+ Cover_Wpn_Thrown_Grenade
+ fps_projectile_motion_tear_gas
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_rng@generic@projectile@tear_gas@
+ weapons@first_person@aim_rng@generic@projectile@grenade_str
+
+
+
+
+
+
+
+
+
+
+
+ melee@thrown@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+
+
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@projectile@tear_gas@aim_trans@idle_to_idlerng
+
+ weapons@first_person@aim_lt@p_m_zero@projectile@tear_gas@aim_trans@lt_to_rng
+ weapons@first_person@aim_idle@p_m_zero@projectile@shared@aim_trans@unholster_to_idle
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_RifleSniper
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_rng@generic@sniper_rifle@shared@core@w_fire
+ weapons@first_person@aim_rng@generic@sniper_rifle@sniper_rifle_str
+
+ weapons@first_person@aim_rng@generic@sniper_rifle@shared@core@w_fire
+
+
+
+
+
+
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_rng
+
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_rng
+ weapons@first_person@aim_scope@p_m_zero@sniper_rifle@shared@aim_trans@scope_to_rng
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_rng
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_rng
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_stealth
+
+
- weapons@first_person@aim_rng@p_m_zero@sniper_rifle@shared@fidgets@a
+ - weapons@first_person@aim_rng@p_m_zero@sniper_rifle@shared@fidgets@b
+ - weapons@first_person@aim_rng@p_m_zero@sniper_rifle@shared@fidgets@c
+
+
+ -
+
+
+
+ Cover_Wpn_Thrown_Grenade
+ fps_projectile_motion_sticky_bomb
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_rng@generic@projectile@sticky_bomb@
+ weapons@first_person@aim_rng@generic@projectile@sticky_bomb@sticky_bomb_str
+
+
+
+
+
+
+
+
+
+
+
+ melee@thrown@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+
+
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@projectile@misc@sticky_bomb@aim_trans@idle_to_idlerng
+
+ weapons@first_person@aim_lt@p_m_zero@projectile@misc@sticky_bomb@aim_trans@lt_to_rng
+ weapons@first_person@aim_idle@p_m_zero@projectile@shared@aim_trans@unholster_to_idle
+
+ -
+
+
+ cover@move@ai@base@1h
+ Cover_FirstPerson_Wpn_Pistol
+ weapons@first_person@aim_rng@generic@pistol@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_rng@pistol@pistol
+ weapons@first_person@aim_rng@generic@pistol@pistol_str
+ weapons@pistol@pistol_injured
+ weapons@first_person@aim_rng@pistol@pistol
+
+
+
+
+
+
+
+
+
+ melee@pistol@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+ MOVE_JUMP@WEAPONS@PISTOL
+ MOVE_FALL@WEAPONS@PISTOL
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@pistol@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@pistol@shared@aim_trans@idle_to_rng
+
+ weapons@first_person@aim_lt@p_m_zero@pistol@shared@aim_trans@lt_to_rng
+ weapons@first_person@aim_scope@p_m_zero@pistol@shared@aim_trans@scope_to_rng
+ weapons@first_person@aim_rng@p_m_zero@pistol@shared@aim_trans@unholster_to_rng
+ weapons@first_person@aim_stealth@p_m_zero@pistol@shared@aim_trans@stealth_to_rng
+ weapons@first_person@aim_rng@p_m_zero@pistol@shared@aim_trans@rng_to_stealth
+
+
- weapons@first_person@aim_rng@p_m_zero@pistol@shared@fidgets@a
+ - weapons@first_person@aim_rng@p_m_zero@pistol@shared@fidgets@b
+ - weapons@first_person@aim_rng@p_m_zero@pistol@shared@fidgets@c
+
+
+ -
+
+
+
+ Cover_Wpn_Thrown_Grenade
+ fps_projectile_motion
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_rng@generic@projectile@shared@core
+ weapons@first_person@aim_rng@generic@projectile@grenade_str
+
+
+
+
+
+
+
+
+
+
+
+ melee@thrown@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+
+
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@projectile@shared@aim_trans@idle_to_idlerng
+
+ weapons@first_person@aim_lt@p_m_zero@projectile@shared@aim_trans@lt_to_rng
+ weapons@first_person@aim_idle@p_m_zero@projectile@shared@aim_trans@unholster_to_idle
+
+ -
+
+
+ cover@move@ai@base@1h
+ Cover_Wpn_Pistol
+ move_ped_wpn_jerrycan_generic
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_rng@generic@misc@jerrycan
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@JERRYCAN
+ MOVE_FALL@WEAPONS@JERRYCAN
+
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@p_m_zero@misc@jerrycan@aim_trans@unholster_to_rng
+
+
+
+ -
+ Default
+
+
-
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_RifleAdvanced
+ weapons@first_person@aim_rng@generic@assault_rifle@advanced_rifle@
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_scope@generic@assault_rifle@advanced_rifle@w_fire
+ weapons@first_person@aim_rng@generic@assault_rifle@advanced_rifle@str
+
+ weapons@first_person@aim_scope@generic@assault_rifle@advanced_rifle@w_fire
+
+
+
+
+
+ combat_fire_variations_rifle
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_scope
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_scope
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_scope
+
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_scope
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@advanced_rifle@aim_trans@stealth_to_scope
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@advanced_rifle@aim_trans@scope_to_stealth
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_AssaultSMG
+ weapons@first_person@aim_rng@generic@assault_rifle@advanced_rifle@
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_scope@generic@submachine_gun@assault_smg@w_fire
+ weapons@first_person@aim_rng@generic@submachine_gun@assault_smg@str
+
+ weapons@first_person@aim_scope@generic@submachine_gun@assault_smg@w_fire
+
+
+
+
+
+
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_scope
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_scope
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_scope
+
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_scope
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@advanced_rifle@aim_trans@stealth_to_scope
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@advanced_rifle@aim_trans@scope_to_stealth
+
+ -
+
+
+ cover@move@ai@base@1h
+ Cover_FirstPerson_Wpn_APPistol
+ weapons@first_person@aim_scope@generic@pistol@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_scope@generic@pistol@ap_pistol@w_fire
+ weapons@first_person@aim_rng@generic@pistol@ap_pistol@str
+ weapons@pistol@ap_pistol_injured
+ weapons@first_person@aim_scope@generic@pistol@ap_pistol@w_fire
+
+
+
+
+
+ combat_fire_variations_pistol
+
+ combat_aim_turns_pistol
+
+ melee@pistol@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+ MOVE_JUMP@WEAPONS@PISTOL
+ MOVE_FALL@WEAPONS@PISTOL
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@pistol@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@pistol@shared@aim_trans@idle_to_scope
+ weapons@first_person@aim_rng@p_m_zero@pistol@shared@aim_trans@rng_to_scope
+ weapons@first_person@aim_lt@p_m_zero@pistol@shared@aim_trans@lt_to_scope
+
+ weapons@first_person@aim_scope@p_m_zero@pistol@shared@aim_trans@unholster_to_scope
+ weapons@first_person@aim_stealth@p_m_zero@pistol@shared@aim_trans@stealth_to_scope
+ weapons@first_person@aim_scope@p_m_zero@pistol@shared@aim_trans@scope_to_stealth
+
+
- weapons@first_person@aim_rng@p_m_zero@pistol@shared@fidgets@a
+ - weapons@first_person@aim_rng@p_m_zero@pistol@shared@fidgets@b
+ - weapons@first_person@aim_rng@p_m_zero@pistol@shared@fidgets@c
+
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_ShotgunAssault
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_scope@generic@shotgun@assault_shotgun@w_fire
+ weapons@first_person@aim_rng@generic@shotgun@assault_shotgun@str
+
+ weapons@first_person@aim_scope@generic@shotgun@assault_shotgun@w_fire
+
+
+
+
+
+
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_scope
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_scope
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_scope
+
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_scope
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_scope
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_stealth
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_Wpn_FirstPerson_ShotgunBullpup
+ weapons@first_person@aim_rng@generic@shotgun@bullpup_shotgun@
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_scope@generic@shotgun@bullpup_shotgun@w_fire
+ weapons@first_person@aim_rng@generic@shotgun@bullpup_shotgun@str
+
+ weapons@first_person@aim_scope@generic@shotgun@bullpup_shotgun@
+
+
+
+
+
+
+
+
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_scope
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_scope
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_scope
+
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_scope
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_scope
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_stealth
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_CombatMG
+ weapons@first_person@aim_rng@generic@light_machine_gun@combat_mg@
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_scope@generic@light_machine_gun@combat_mg@w_fire
+ weapons@first_person@aim_rng@generic@light_machine_gun@combat_mg@str
+
+ weapons@first_person@aim_scope@generic@light_machine_gun@combat_mg@w_fire
+ weapons@first_person@aim_scope@generic@light_machine_gun@combat_mg@w_fire
+ weapons@first_person@aim_scope@generic@light_machine_gun@combat_mg@w_fire
+ weapons@first_person@aim_scope@generic@light_machine_gun@combat_mg@w_fire
+
+
+
+
+
+
+ melee@rifle@streamed_core
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ Wpn_Thrown_Grenade_Aiming_Rifle
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_scope
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_scope
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_scope
+
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_scope
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_scope
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_stealth
+
+ -
+
+
+ cover@move@ai@base@1h
+ Cover_FirstPerson_Wpn_Pistol
+ weapons@first_person@aim_rng@generic@pistol@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_scope@generic@pistol@combat_pistol@w_fire
+ weapons@first_person@aim_rng@generic@pistol@combat_pistol@str
+ Wpn_Pistol_Injured
+ weapons@first_person@aim_scope@generic@pistol@combat_pistol@w_fire
+
+
+
+
+
+ combat_fire_variations_pistol
+
+ combat_aim_turns_pistol
+
+ melee@pistol@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+ MOVE_JUMP@WEAPONS@PISTOL
+ MOVE_FALL@WEAPONS@PISTOL
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@pistol@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@pistol@shared@aim_trans@idle_to_scope
+ weapons@first_person@aim_rng@p_m_zero@pistol@shared@aim_trans@rng_to_scope
+ weapons@first_person@aim_lt@p_m_zero@pistol@shared@aim_trans@lt_to_scope
+
+ weapons@first_person@aim_scope@p_m_zero@pistol@shared@aim_trans@unholster_to_scope
+ weapons@first_person@aim_stealth@p_m_zero@pistol@shared@aim_trans@stealth_to_scope
+ weapons@first_person@aim_scope@p_m_zero@pistol@shared@aim_trans@scope_to_stealth
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_GrnLch
+ weapons@first_person@aim_rng@generic@heavy@grenade_launcher@
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_scope@generic@heavy@grenade_launcher@w_fire
+ weapons@first_person@aim_rng@generic@heavy@grenade_launcher@str
+
+ weapons@heavy@grenade_launcher@stealth
+
+
+
+
+
+
+
+
+
+ melee@rifle@streamed_core
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@heavy@grenade_launcher@aim_trans@idle_to_scope
+ weapons@first_person@aim_rng@p_m_zero@heavy@grenade_launcher@aim_trans@rng_to_scope
+ weapons@first_person@aim_lt@p_m_zero@heavy@grenade_launcher@aim_trans@lt_to_scope
+
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_scope
+ weapons@first_person@aim_stealth@p_m_zero@heavy@grenade_launcher@aim_trans@stealth_to_scope
+ weapons@first_person@aim_scope@p_m_zero@heavy@grenade_launcher@aim_trans@scope_to_stealth
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_GrnLch
+ weapons@first_person@aim_rng@generic@heavy@grenade_launcher@
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_scope@generic@heavy@grenade_launcher@w_fire
+ weapons@first_person@aim_rng@generic@heavy@grenade_launcher@str
+
+ weapons@heavy@grenade_launcher@stealth
+
+
+
+
+
+
+
+
+
+ melee@rifle@streamed_core
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_scope
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_scope
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_scope
+
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_scope
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_scope
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_stealth
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_RifleSniperHeavy
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_scope@generic@sniper_rifle@heavy_sniper@w_fire
+ weapons@first_person@aim_rng@generic@sniper_rifle@heavy_sniper@str
+
+ weapons@first_person@aim_scope@generic@sniper_rifle@heavy_sniper@w_fire
+
+
+
+
+
+
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@sniper_rifle@heavy_sniper@aim_trans@idle_to_scope
+ weapons@first_person@aim_rng@p_m_zero@sniper_rifle@heavy_sniper@aim_trans@rng_to_scope
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_scope
+
+ weapons@first_person@aim_scope@p_m_zero@sniper_rifle@heavy_sniper@aim_trans@unholster_to_scope
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_scope
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_stealth
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_MachineGun
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_scope@generic@light_machine_gun@shared@core@w_fire
+ weapons@first_person@aim_rng@generic@light_machine_gun@mg_str
+
+ weapons@first_person@aim_scope@generic@light_machine_gun@shared@core@w_fire
+ weapons@first_person@aim_scope@generic@light_machine_gun@shared@core@w_fire
+ weapons@first_person@aim_scope@generic@light_machine_gun@shared@core@w_fire
+ weapons@first_person@aim_scope@generic@light_machine_gun@shared@core@w_fire
+
+
+
+
+
+
+ melee@rifle@streamed_core
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_scope
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_scope
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_scope
+
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_scope
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_scope
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_stealth
+
+ -
+
+
+ cover@move@ai@base@1h
+ Cover_FirstPerson_Wpn_MicroSMG
+ weapons@first_person@aim_rng@generic@submachine_gun@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_scope@generic@submachine_gun@shared@core@w_fire
+ weapons@first_person@aim_rng@generic@submachine_gun@micro_smg_str
+
+ weapons@first_person@aim_scope@generic@submachine_gun@shared@core@w_fire
+ weapons@first_person@aim_scope@generic@submachine_gun@shared@core@w_fire
+ weapons@first_person@aim_scope@generic@submachine_gun@shared@core@w_fire
+ weapons@first_person@aim_scope@generic@submachine_gun@shared@core@w_fire
+
+
+
+
+
+
+ melee@pistol@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@PISTOL
+ MOVE_FALL@WEAPONS@PISTOL
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ Wpn_Thrown_Grenade_Aiming_Rifle
+ weapons@first_person@aim_idle@p_m_zero@submachine_gun@shared@aim_trans@idle_to_scope
+ weapons@first_person@aim_rng@p_m_zero@submachine_gun@shared@aim_trans@rng_to_scope
+ weapons@first_person@aim_lt@p_m_zero@submachine_gun@shared@aim_trans@lt_to_scope
+
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_scope
+ weapons@first_person@aim_stealth@p_m_zero@submachine_gun@shared@aim_trans@stealth_to_scope
+ weapons@first_person@aim_scope@p_m_zero@submachine_gun@shared@aim_trans@scope_to_stealth
+
+ -
+
+
+ cover@move@ai@base@1h
+ Cover_FirstPerson_Wpn_Pistol
+ weapons@first_person@aim_rng@generic@pistol@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_scope@generic@pistol@w_fire
+ weapons@first_person@aim_rng@generic@pistol@pistol_str
+ weapons@pistol@pistol_injured
+ weapons@first_person@aim_scope@generic@pistol@w_fire
+
+
+
+
+
+ combat_fire_variations_pistol
+
+ combat_aim_turns_pistol
+
+ melee@pistol@streamed_fps
+
+
+
+
+ reaction@shellshock@unarmed
+ MOVE_JUMP@WEAPONS@PISTOL
+ MOVE_FALL@WEAPONS@PISTOL
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@pistol@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@pistol@shared@aim_trans@idle_to_scope
+ weapons@first_person@aim_rng@p_m_zero@pistol@shared@aim_trans@rng_to_scope
+ weapons@first_person@aim_lt@p_m_zero@pistol@shared@aim_trans@lt_to_scope
+
+ weapons@first_person@aim_scope@p_m_zero@pistol@shared@aim_trans@unholster_to_scope
+ weapons@first_person@aim_stealth@p_m_zero@pistol@shared@aim_trans@stealth_to_scope
+ weapons@first_person@aim_scope@p_m_zero@pistol@shared@aim_trans@scope_to_stealth
+
+ -
+
+
+ cover@move@ai@base@1h
+ Cover_FirstPerson_Wpn_Pistol50
+ weapons@first_person@aim_scope@generic@pistol@pistol_50@
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_scope@generic@pistol@pistol_50@w_fire
+ weapons@first_person@aim_rng@generic@pistol@pistol_50@str
+ weapons@pistol@pistol_injured
+ weapons@first_person@aim_scope@generic@pistol@pistol_50@w_fire
+
+
+
+
+
+ combat_fire_variations_pistol
+
+ combat_aim_turns_pistol
+
+ melee@pistol@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+ MOVE_JUMP@WEAPONS@PISTOL
+ MOVE_FALL@WEAPONS@PISTOL
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@pistol@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@pistol@pistol_50@aim_trans@idle_to_scope
+ weapons@first_person@aim_rng@p_m_zero@pistol@pistol_50@aim_trans@rng_to_scope
+ weapons@first_person@aim_lt@p_m_zero@pistol@pistol_50@aim_trans@lt_to_scope
+
+ weapons@first_person@aim_scope@p_m_zero@pistol@pistol_50@aim_trans@unholster_to_scope
+ weapons@first_person@aim_stealth@p_m_zero@pistol@pistol_50@aim_trans@stealth_to_scope
+ weapons@first_person@aim_scope@p_m_zero@pistol@pistol_50@aim_trans@scope_to_stealth
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_RifleHi
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_scope@generic@assault_rifle@w_fire
+ weapons@first_person@aim_rng@generic@assault_rifle@assault_rifle_str
+
+ weapons@first_person@aim_scope@generic@assault_rifle@shared@core
+
+
+
+
+
+ combat_fire_variations_rifle
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_fps
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_scope
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_scope
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_scope
+
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_scope
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_scope
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_stealth
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_RifleLo
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_scope@generic@assault_rifle@carbine_rifle@w_fire
+ weapons@first_person@aim_rng@generic@assault_rifle@carbine_rifle@str
+
+ weapons@first_person@aim_scope@generic@assault_rifle@carbine_rifle@w_fire
+
+
+
+
+
+ combat_fire_variations_rifle
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_fps
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_scope
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_scope
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_scope
+
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_scope
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_scope
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_stealth
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_ShotgunLo
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_scope@generic@shotgun@shared@core@w_fire
+ weapons@first_person@aim_rng@generic@shotgun@pump_shotgun_str
+
+ weapons@first_person@aim_scope@generic@shotgun@shared@core@w_fire
+
+
+
+
+
+
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_scope
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_scope
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_scope
+
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_scope
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_scope
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_stealth
+
+ -
+ cover@first_person@move@base@rpg
+ cover@first_person@move@extra@rpg
+
+ Cover_FirstPerson_Wpn_RPG
+ weapons@first_person@aim_rng@generic@heavy@rpg@
+ BothArms_filter
+
+
+
+
+ weapons@first_person@aim_scope@generic@heavy@rpg@w_fire
+ weapons@first_person@aim_rng@generic@heavy@rpg@str
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MOVE_JUMP@WEAPONS@RPG
+ MOVE_FALL@WEAPONS@RPG
+ weapons@heavy@rpg
+
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@heavy@rpg@aim_trans@idle_to_scope
+ weapons@first_person@aim_rng@p_m_zero@heavy@rpg@aim_trans@rng_to_scope
+ weapons@first_person@aim_rng@p_m_zero@heavy@rpg@aim_trans@rng_to_scope
+
+ weapons@first_person@aim_scope@p_m_zero@heavy@rpg@aim_trans@unholster_to_scope
+
+
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_ShotgunSawnoff
+ weapons@first_person@aim_rng@generic@shotgun@sawnoff@
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_scope@generic@shotgun@sawnoff@w_fire
+ weapons@first_person@aim_rng@generic@shotgun@sawnoff@str
+
+ weapons@first_person@aim_scope@generic@shotgun@sawnoff@w_fire
+
+
+
+
+
+
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_scope
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_scope
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_scope
+
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_scope
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_scope
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_stealth
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_RifleSMG
+ weapons@first_person@aim_rng@generic@submachine_gun@smg@
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_scope@generic@submachine_gun@smg@w_fire
+ weapons@first_person@aim_rng@generic@submachine_gun@smg@str
+
+ weapons@first_person@aim_scope@generic@submachine_gun@smg@w_fire
+
+
+
+
+
+
+
+ combat_aim_turns_rifle
+
+ melee@pistol@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@assault_rifle@shared@aim_trans@idle_to_scope
+ weapons@first_person@aim_rng@p_m_zero@assault_rifle@shared@aim_trans@rng_to_scope
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_scope
+
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@unholster_to_scope
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_scope
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_stealth
+
+ -
+ cover@first_person@move@base@2h
+ cover@first_person@move@extra@2h
+ cover@move@ai@base@2h
+ Cover_FirstPerson_Wpn_RifleSniper
+ weapons@first_person@aim_rng@generic@assault_rifle@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_scope@generic@sniper_rifle@shared@core@w_fire
+ weapons@first_person@aim_rng@generic@sniper_rifle@sniper_rifle_str
+
+ weapons@first_person@aim_scope@generic@sniper_rifle@shared@core@w_fire
+
+
+
+
+
+
+
+ combat_aim_turns_rifle
+
+ melee@rifle@streamed_core
+
+
+
+
+ reaction@shellshock@2h
+ MOVE_JUMP@WEAPONS@RIFLE
+ MOVE_FALL@WEAPONS@RIFLE
+ weapons@rifle@
+
+
+
+
+
+
+
+
+
+
+ weapons@first_person@aim_idle@p_m_zero@sniper_rifle@shared@aim_trans@idle_to_scope
+ weapons@first_person@aim_rng@p_m_zero@sniper_rifle@shared@aim_trans@rng_to_scope
+ weapons@first_person@aim_lt@p_m_zero@assault_rifle@shared@aim_trans@lt_to_scope
+
+ weapons@first_person@aim_scope@p_m_zero@sniper_rifle@shared@aim_trans@unholster_to_scope
+ weapons@first_person@aim_stealth@p_m_zero@assault_rifle@shared@aim_trans@stealth_to_scope
+ weapons@first_person@aim_scope@p_m_zero@assault_rifle@shared@aim_trans@scope_to_stealth
+
+ -
+
+
+ cover@move@ai@base@1h
+ Cover_FirstPerson_Wpn_Pistol
+ weapons@first_person@aim_rng@generic@pistol@shared@core
+ BothArms_filter
+
+
+ move_ped_strafing_stealth
+
+ weapons@first_person@aim_scope@generic@pistol@w_fire
+ weapons@first_person@aim_rng@generic@pistol@pistol_str
+ weapons@pistol@pistol_injured
+ weapons@first_person@aim_scope@generic@pistol@w_fire
+
+
+
+
+
+
+
+
+
+ melee@pistol@streamed_core
+
+
+
+
+ reaction@shellshock@unarmed
+ MOVE_JUMP@WEAPONS@PISTOL
+ MOVE_FALL@WEAPONS@PISTOL
+ weapons@pistol@
+ RightArm_NoSpine_filter
+ RightArm_NoSpine_filter
+
+
+
+
+
+
+ weapons@first_person@aim_rng@generic@pistol@shared@core
+
+ weapons@first_person@aim_idle@p_m_zero@pistol@shared@aim_trans@idle_to_scope
+ weapons@first_person@aim_rng@p_m_zero@pistol@shared@aim_trans@rng_to_scope
+ weapons@first_person@aim_lt@p_m_zero@pistol@shared@aim_trans@lt_to_scope
+
+ weapons@first_person@aim_scope@p_m_zero@pistol@shared@aim_trans@unholster_to_scope
+ weapons@first_person@aim_stealth@p_m_zero@pistol@shared@aim_trans@stealth_to_scope
+ weapons@first_person@aim_scope@p_m_zero@pistol@shared@aim_trans@scope_to_stealth
+
+
+
+ -
+ FirstPerson
+ move_ped_strafing_firstperson_p_m_zero
+
+
-
+
+
+
+ Cover_Wpn_Melee1h
+
+
+
+ move_strafe_melee_unarmed
+ move_ped_strafing_stealth
+
+ weapons@unarmed
+
+
+
+
+
+
+
+
+
+
+
+
+ melee@unarmed@base
+ melee@unarmed@streamed_core
+ melee@unarmed@streamed_variations
+ melee@unarmed@streamed_taunts
+ melee@unarmed@streamed_background
+ melee@unarmed@streamed_stealth
+ reaction@shellshock@unarmed
+
+
+
+ RightArm_NoSpine_filter
+ LegsOnly_filter
+
+
+
+
+
+
+
+
+ move_m@generic
+
+
- clipset@weapons@first_person@aim_idle@p_m_zero@unarmed@fidgets@b
+ - clipset@weapons@first_person@aim_idle@p_m_zero@unarmed@fidgets@c
+ - clipset@weapons@first_person@aim_idle@p_m_zero@unarmed@fidgets@e
+
+
+
+
+ -
+ FirstPersonAiming
+
+
+ -
+ FirstPersonRNG
+
+
+ -
+ FirstPersonScope
+
+
+ -
+ FirstPerson
+ move_ped_strafing_firstperson_p_m_one
+
+
-
+
+
- clipset@weapons@first_person@aim_idle@p_m_one@unarmed@fidgets@a
+ - clipset@weapons@first_person@aim_idle@p_m_one@unarmed@fidgets@b
+ - clipset@weapons@first_person@aim_idle@p_m_one@unarmed@fidgets@c
+ - clipset@weapons@first_person@aim_idle@p_m_one@unarmed@fidgets@d
+
+
+
+
+ -
+ FirstPersonAiming
+
+
+ -
+ FirstPersonRNG
+
+
+ -
+ FirstPersonScope
+
+
+ -
+ FirstPerson
+ move_ped_strafing_firstperson_p_m_two
+
+
-
+
+
- clipset@weapons@first_person@aim_idle@p_m_two@unarmed@fidgets@a
+ - clipset@weapons@first_person@aim_idle@p_m_two@unarmed@fidgets@b
+ - clipset@weapons@first_person@aim_idle@p_m_two@unarmed@fidgets@c
+
+
+
+
+ -
+ FirstPersonAiming
+
+
+ -
+ FirstPersonRNG
+
+
+ -
+ FirstPersonScope
+
+
+ -
+ FirstPerson
+ move_ped_strafing_firstperson_mp_female
+
+
+
+
\ No newline at end of file
diff --git a/resources/night_ers/data/hose/weaponarchetypes.meta b/resources/night_ers/data/hose/weaponarchetypes.meta
new file mode 100644
index 000000000..0fc4e261e
--- /dev/null
+++ b/resources/night_ers/data/hose/weaponarchetypes.meta
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+ -
+ w_ers_npc_hose
+ w_ers_npc_hose
+ NULL
+
+
+
+
diff --git a/resources/night_ers/data/hose/weapons.meta b/resources/night_ers/data/hose/weapons.meta
new file mode 100644
index 000000000..c16ca4889
--- /dev/null
+++ b/resources/night_ers/data/hose/weapons.meta
@@ -0,0 +1,236 @@
+
+
+
+
+ -
+
+
-
+
+ SLOT_HOSE
+
+
+
+
+ -
+
+
+
-
+
+ SLOT_HOSE
+
+
+
+
+
+
+
+
+ -
+
+ SLOT_HOSE
+
+
+
+
+
+
+ -
+
+
+ -
+
+
-
+ WEAPON_ERS_HOSE
+ w_ers_npc_hose
+
+ SLOT_HOSE
+ FIRE_EXTINGUISHER
+
+ DONTCARE
+ DONTCARE
+ DONTCARE
+ DONTCARE
+ DONTCARE
+ DONTCARE
+
+ VOLUMETRIC_PARTICLE
+ WHEEL_THROWABLE_SPECIAL
+ GROUP_FIREEXTINGUISHER
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ WEAPON_EFFECT_GROUP_PISTOL_SMALL
+ weap_extinguisher
+
+
+
+
+
+
+
+ BulletSmall
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ HIP_AIM_CAMERA
+ HIP_AIM_IN_COVER_CAMERA
+
+ HIP_RUN_AND_GUN_CAMERA
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ WEAPON_PISTOL
+
+
+
+ WT_HOSE
+
+ EXTINGUISHER
+
+
+ Normal
+
+
+
+ CarriedInHand Automatic CanFreeAim AnimCrouchFire UsableOnFoot UsableClimbing AllowEarlyExitFromFireAnimAfterBulletFired DoesRevivableDamage CanBeFiredLikeGun NonViolent SuppressGunshotEvent
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hose
+
diff --git a/resources/night_ers/data/stretcher/carvariations.meta b/resources/night_ers/data/stretcher/carvariations.meta
new file mode 100644
index 000000000..d85fe248b
--- /dev/null
+++ b/resources/night_ers/data/stretcher/carvariations.meta
@@ -0,0 +1,144 @@
+
+
+
+ -
+ stretcher
+
+
-
+
+ 111
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+ 111
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+ 111
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+ 111
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+ 111
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+ 111
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+ 111
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+ 111
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ - 0_default_modkit
+
+
+
+
+ -
+ police guv plate
+
+
+
+
+
+
+
+
+
diff --git a/resources/night_ers/data/stretcher/handling.meta b/resources/night_ers/data/stretcher/handling.meta
new file mode 100644
index 000000000..96626e5e1
--- /dev/null
+++ b/resources/night_ers/data/stretcher/handling.meta
@@ -0,0 +1,67 @@
+
+
+
+
+ -
+ stretcher
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 440010
+ 0
+ 0
+ AVERAGE
+
+
-
+
+
+
+
+
+
+
+
+
+
diff --git a/resources/night_ers/data/stretcher/vehicles.meta b/resources/night_ers/data/stretcher/vehicles.meta
new file mode 100644
index 000000000..e040b20a0
--- /dev/null
+++ b/resources/night_ers/data/stretcher/vehicles.meta
@@ -0,0 +1,122 @@
+
+
+ vehshare
+
+
+ -
+ stretcher
+ stretcher
+ stretcher
+ stretcher
+ stretcher
+ null
+ null
+ anim@stretcher
+ stretcher
+
+ null
+
+ LAYOUT_LOW_RESTRICTED
+ stretcher_COVER_OFFSET_INFO
+ EXPLOSION_INFO_DEFAULT
+
+ DEFAULT_FOLLOW_VEHICLE_CAMERA
+ DEFAULT_THIRD_PERSON_VEHICLE_AIM_CAMERA
+ VEHICLE_BONNET_CAMERA_NEAR
+ DEFAULT_POV_CAMERA
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ VFXVEHICLEINFO_CAR_GENERIC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 500.000000
+ 500.000000
+ 500.000000
+ 500.000000
+ 500.000000
+ 500.000000
+
+
+
+
+
+
+
+
+
+
+ SWANKNESS_5
+
+ FLAG_NO_BOOT FLAG_SPORTS FLAG_SPAWN_ON_TRAILER FLAG_EXTRAS_REQUIRE FLAG_EXTRAS_STRONG FLAG_RICH_CAR FLAG_NO_BROKEN_DOWN_SCENARIO FLAG_COUNT_AS_FACEBOOK_DRIVEN FLAG_HAS_INTERIOR_EXTRAS FLAG_CAN_HAVE_NEONS
+ VEHICLE_TYPE_CAR
+ VPT_BACK_PLATES
+ VDT_SUPERGT
+ VC_SUPER
+ VWT_HIEND
+
+
+
+
+
+
+
+
+
+
+
+
- WHEEL_FRONT_RIGHT_CAMERA
+ - WHEEL_FRONT_LEFT_CAMERA
+ - WHEEL_REAR_RIGHT_CAMERA
+ - WHEEL_REAR_LEFT_CAMERA
+
+
+
+
+
+
+ - LOW_stretcher_FRONT_LEFT
+ - LOW_stretcher_FRONT_RIGHT
+
+
+
+
+ -
+ vehshare_truck
+ watercarrier
+
+
+
diff --git a/resources/night_ers/fxmanifest.lua b/resources/night_ers/fxmanifest.lua
new file mode 100644
index 000000000..7956da707
--- /dev/null
+++ b/resources/night_ers/fxmanifest.lua
@@ -0,0 +1,70 @@
+-- Resource Metadata
+fx_version 'cerulean'
+games { 'gta5' }
+
+author 'Nights Software'
+description 'Emergency Response Simulator'
+version '1.8.0'
+lua54 'yes'
+
+shared_scripts {
+ 'config/config.lua',
+ 'config/*.lua',
+ 'config/translations/*.lua',
+ 'callouts/plugins/*.lua'
+}
+
+server_scripts {
+ '@oxmysql/lib/MySQL.lua',
+ 'server/*.lua',
+ 'callouts/callouts_server.lua'
+}
+
+client_scripts {
+ 'client/*.lua',
+ 'callouts/callouts_client.lua'
+}
+
+ui_page "index.html"
+files {
+ "index.html",
+ 'NUI/fonts/*.ttf',
+ 'NUI/images/*.jpg',
+ 'NUI/images/*.png',
+ 'NUI/sounds/generic-sounds/*.ogg',
+ 'NUI/sounds/en/*.ogg',
+ 'NUI/sounds/us/*.ogg',
+ 'NUI/sounds/fr/*.ogg',
+ 'NUI/sounds/de/*.ogg',
+ -- 'NUI/sounds/nl/*.ogg',
+ -- 'NUI/sounds/cs/*.ogg',
+ -- 'NUI/sounds/he/*.ogg',
+ 'NUI/*.js',
+ 'NUI/*.css',
+ 'data/stretcher/*.meta',
+ 'data/hose/*.meta',
+ 'stream/*.ytyp'
+}
+
+data_file 'DLC_ITYP_REQUEST' 'stream/neko_night_barrier_assets'
+data_file 'DLC_ITYP_REQUEST' 'stream/cages/v_storage_2.ytyp'
+data_file 'HANDLING_FILE' 'data/stretcher/handling.meta'
+data_file 'VEHICLE_METADATA_FILE' 'data/stretcher/vehicles.meta'
+data_file 'VEHICLE_VARIATION_FILE' 'data/stretcher/carvariations.meta'
+
+data_file 'WEAPONINFO_FILE' 'data/hose/weapons.meta'
+data_file 'WEAPON_METADATA_FILE' 'data/hose/weaponarchetypes.meta'
+data_file 'WEAPON_ANIMATIONS_FILE' 'data/hose/weaponanimations.meta'
+data_file 'PED_PERSONALITY_FILE' 'data/hose/pedpersonality.meta'
+
+escrow_ignore {
+ 'config/*.lua',
+ 'config/translations/*.lua',
+ 'callouts/*.lua',
+ 'callouts/plugins/*.lua',
+ 'client/c_functions.lua',
+ 'client/exports_client.lua',
+ 'server/s_functions.lua',
+ 'server/exports_server.lua'
+}
+dependency '/assetpacks'
\ No newline at end of file
diff --git a/resources/night_ers/index.html b/resources/night_ers/index.html
new file mode 100644
index 000000000..61f60800f
--- /dev/null
+++ b/resources/night_ers/index.html
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ »
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/night_ers/stream/[Cages]/prop_dog_cage_03.ydr b/resources/night_ers/stream/[Cages]/prop_dog_cage_03.ydr
new file mode 100644
index 000000000..b90c2b556
--- /dev/null
+++ b/resources/night_ers/stream/[Cages]/prop_dog_cage_03.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:895de9850cd9bc39ede65508f4e5a35c095e0b05f91b4d61d91bac5d9db9ad60
+size 283459
diff --git a/resources/night_ers/stream/[Cages]/prop_dog_cage_04.ydr b/resources/night_ers/stream/[Cages]/prop_dog_cage_04.ydr
new file mode 100644
index 000000000..ced863a96
--- /dev/null
+++ b/resources/night_ers/stream/[Cages]/prop_dog_cage_04.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e9160355abf71ad8f33d466669cccdaaf9a75cf00385bb6835bd1ce49fd869d2
+size 285657
diff --git a/resources/night_ers/stream/[Cages]/prop_dog_cage_05.ydr b/resources/night_ers/stream/[Cages]/prop_dog_cage_05.ydr
new file mode 100644
index 000000000..2d0fd3667
--- /dev/null
+++ b/resources/night_ers/stream/[Cages]/prop_dog_cage_05.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1fd3349e1d8702738a5af6bcdafdc0583266c4345875519cfd6dcba5a83a03b7
+size 286917
diff --git a/resources/night_ers/stream/[Cages]/v_storage_2.ytyp b/resources/night_ers/stream/[Cages]/v_storage_2.ytyp
new file mode 100644
index 000000000..d21c4bf0a
Binary files /dev/null and b/resources/night_ers/stream/[Cages]/v_storage_2.ytyp differ
diff --git a/resources/night_ers/stream/[Cuffs]/p_cs_cuffs_02_s.ydr b/resources/night_ers/stream/[Cuffs]/p_cs_cuffs_02_s.ydr
new file mode 100644
index 000000000..a7dcfc351
--- /dev/null
+++ b/resources/night_ers/stream/[Cuffs]/p_cs_cuffs_02_s.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f35c593d8b2a44e62d7dcca4cd039a13b4230eb59205fe2e2742641d744df936
+size 1109675
diff --git a/resources/night_ers/stream/[Custom Emotes]/DarkAnimations/cop_badge_1@dad.ycd b/resources/night_ers/stream/[Custom Emotes]/DarkAnimations/cop_badge_1@dad.ycd
new file mode 100644
index 000000000..ab18ae658
Binary files /dev/null and b/resources/night_ers/stream/[Custom Emotes]/DarkAnimations/cop_badge_1@dad.ycd differ
diff --git a/resources/night_ers/stream/[Custom Emotes]/ultrahacx/custom@police.ycd b/resources/night_ers/stream/[Custom Emotes]/ultrahacx/custom@police.ycd
new file mode 100644
index 000000000..a0bbf8374
Binary files /dev/null and b/resources/night_ers/stream/[Custom Emotes]/ultrahacx/custom@police.ycd differ
diff --git a/resources/night_ers/stream/[NXP Props]/_manifest.ymf b/resources/night_ers/stream/[NXP Props]/_manifest.ymf
new file mode 100644
index 000000000..a0122bc83
Binary files /dev/null and b/resources/night_ers/stream/[NXP Props]/_manifest.ymf differ
diff --git a/resources/night_ers/stream/[NXP Props]/neko_night_arrow_board_00.ydr b/resources/night_ers/stream/[NXP Props]/neko_night_arrow_board_00.ydr
new file mode 100644
index 000000000..376bd158c
--- /dev/null
+++ b/resources/night_ers/stream/[NXP Props]/neko_night_arrow_board_00.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a3968037b10ea60f575c938b78b4ef250a6b5395461b4ca03ebf0184aa8f7575
+size 149589
diff --git a/resources/night_ers/stream/[NXP Props]/neko_night_arrow_board_00_l.ydr b/resources/night_ers/stream/[NXP Props]/neko_night_arrow_board_00_l.ydr
new file mode 100644
index 000000000..951108b6d
--- /dev/null
+++ b/resources/night_ers/stream/[NXP Props]/neko_night_arrow_board_00_l.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0d3d2717f6c76f1afb8273de143b0298802a639eeee56d1ceae836b90f10e5be
+size 148139
diff --git a/resources/night_ers/stream/[NXP Props]/neko_night_arrow_board_00_r.ydr b/resources/night_ers/stream/[NXP Props]/neko_night_arrow_board_00_r.ydr
new file mode 100644
index 000000000..34320c6ef
--- /dev/null
+++ b/resources/night_ers/stream/[NXP Props]/neko_night_arrow_board_00_r.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:456c25290153005aaf6cda27c2f01346309dbb69a42a807e8721eeb20553b755
+size 148334
diff --git a/resources/night_ers/stream/[NXP Props]/neko_night_barrier_00.ydr b/resources/night_ers/stream/[NXP Props]/neko_night_barrier_00.ydr
new file mode 100644
index 000000000..a407a3b69
--- /dev/null
+++ b/resources/night_ers/stream/[NXP Props]/neko_night_barrier_00.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2094ffccbdfce2f119cc9d3ad36fd467d813b8637e6f0f3e8d0605106f1ccfaa
+size 67744
diff --git a/resources/night_ers/stream/[NXP Props]/neko_night_barrier_01.ydr b/resources/night_ers/stream/[NXP Props]/neko_night_barrier_01.ydr
new file mode 100644
index 000000000..dce495bf3
--- /dev/null
+++ b/resources/night_ers/stream/[NXP Props]/neko_night_barrier_01.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:372bcf2aa27dc073cdd8e6e9da4d0f1d1508fdb2dc4310684abb73e63184dc41
+size 42341
diff --git a/resources/night_ers/stream/[NXP Props]/neko_night_barrier_02.ydr b/resources/night_ers/stream/[NXP Props]/neko_night_barrier_02.ydr
new file mode 100644
index 000000000..2acf96f43
--- /dev/null
+++ b/resources/night_ers/stream/[NXP Props]/neko_night_barrier_02.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d50365ff50becb34f4e8c252cbbb0ef23691ff8d19dddbc77032c11d082d2b07
+size 25808
diff --git a/resources/night_ers/stream/[NXP Props]/neko_night_barrier_assets.ytyp b/resources/night_ers/stream/[NXP Props]/neko_night_barrier_assets.ytyp
new file mode 100644
index 000000000..701def4bf
Binary files /dev/null and b/resources/night_ers/stream/[NXP Props]/neko_night_barrier_assets.ytyp differ
diff --git a/resources/night_ers/stream/[NXP Props]/neko_night_barrier_txd.ytd b/resources/night_ers/stream/[NXP Props]/neko_night_barrier_txd.ytd
new file mode 100644
index 000000000..ff95b8c10
--- /dev/null
+++ b/resources/night_ers/stream/[NXP Props]/neko_night_barrier_txd.ytd
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f760540e35f51c4f0341b28e914e1c409b14b6069738713abb92648c191a2191
+size 930176
diff --git a/resources/night_ers/stream/[NXP Props]/neko_night_cone_00.ydr b/resources/night_ers/stream/[NXP Props]/neko_night_cone_00.ydr
new file mode 100644
index 000000000..6448003cf
--- /dev/null
+++ b/resources/night_ers/stream/[NXP Props]/neko_night_cone_00.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c89145cf22ea6f48c27d2dc3d2d8d5f94e553c0fae3e1c6af61d598709cd2316
+size 14730
diff --git a/resources/night_ers/stream/[NXP Props]/neko_night_rubber_barrier_00.ydr b/resources/night_ers/stream/[NXP Props]/neko_night_rubber_barrier_00.ydr
new file mode 100644
index 000000000..228c4eb48
--- /dev/null
+++ b/resources/night_ers/stream/[NXP Props]/neko_night_rubber_barrier_00.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a8e2c8295e473ebdaf5fa225f6fbc5584bc49afb4bcd54f2a2acc15b859696b4
+size 7903
diff --git a/resources/night_ers/stream/[NXP Props]/neko_night_warning_tri_00.ydr b/resources/night_ers/stream/[NXP Props]/neko_night_warning_tri_00.ydr
new file mode 100644
index 000000000..2d2af91b4
--- /dev/null
+++ b/resources/night_ers/stream/[NXP Props]/neko_night_warning_tri_00.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a0a38e3959b395de6cf621d7a148064072c1c67cab8aa42b5485a2e9924dfc43
+size 20166
diff --git a/resources/night_ers/stream/[NXP Props]/neko_night_water_barrier_00.ydr b/resources/night_ers/stream/[NXP Props]/neko_night_water_barrier_00.ydr
new file mode 100644
index 000000000..5bb7252d5
--- /dev/null
+++ b/resources/night_ers/stream/[NXP Props]/neko_night_water_barrier_00.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2dd8dc98977919e849ce7aad1f1ffb74076e645f852cfdddf50594c5513dc1f6
+size 84742
diff --git a/resources/night_ers/stream/[SmartHose]/w_ers_npc_hose.ydr b/resources/night_ers/stream/[SmartHose]/w_ers_npc_hose.ydr
new file mode 100644
index 000000000..27a81c254
--- /dev/null
+++ b/resources/night_ers/stream/[SmartHose]/w_ers_npc_hose.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e2e50aadae64dcc7e41f6fc9119989118c8db8b45d7c449464709eeb8d01b162
+size 251507
diff --git a/resources/night_ers/stream/[SmartHose]/w_ers_npc_hose.ytd b/resources/night_ers/stream/[SmartHose]/w_ers_npc_hose.ytd
new file mode 100644
index 000000000..6c74bda43
--- /dev/null
+++ b/resources/night_ers/stream/[SmartHose]/w_ers_npc_hose.ytd
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9a182f44d9446d16d2a1074eb6b4da68ebbd76b90fb554e83792c0fa0eae2acb
+size 639048
diff --git a/resources/night_ers/stream/[Stretcher]/anim@stretcher.ycd b/resources/night_ers/stream/[Stretcher]/anim@stretcher.ycd
new file mode 100644
index 000000000..e00aad431
Binary files /dev/null and b/resources/night_ers/stream/[Stretcher]/anim@stretcher.ycd differ
diff --git a/resources/night_ers/stream/[Stretcher]/stretcher.yft b/resources/night_ers/stream/[Stretcher]/stretcher.yft
new file mode 100644
index 000000000..6668e22e7
--- /dev/null
+++ b/resources/night_ers/stream/[Stretcher]/stretcher.yft
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7167955deebd1e70e78a4951f47832e661057ea706257eb53bd739a7fd2d6e92
+size 5925533
diff --git a/resources/night_ers/stream/[Stretcher]/stretcher.ytd b/resources/night_ers/stream/[Stretcher]/stretcher.ytd
new file mode 100644
index 000000000..4abfdee6b
--- /dev/null
+++ b/resources/night_ers/stream/[Stretcher]/stretcher.ytd
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:38356d1569fc4541f1b240de5f405f50428bb25887c1e12881ac4a2b41bc13a8
+size 2750460
diff --git a/resources/night_ers/stream/[Stretcher]/stretcher_hi.yft b/resources/night_ers/stream/[Stretcher]/stretcher_hi.yft
new file mode 100644
index 000000000..89b599eeb
--- /dev/null
+++ b/resources/night_ers/stream/[Stretcher]/stretcher_hi.yft
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a9ade806946479648cf6bce81d4d57b10c1534a491d2903bb9729cbb705819d6
+size 5925533
diff --git a/resources/ulc/config.lua b/resources/ulc/config.lua
index 279937578..04136d259 100644
--- a/resources/ulc/config.lua
+++ b/resources/ulc/config.lua
@@ -394,7 +394,8 @@ Config = {
"lapd16fpiutraffic",
"metro16fpiu",
"metro16fpiu2",
- "metro16fpiu3",
+ "metro16fpiu3",
+ "f350bubba",
diff --git a/resources/vMenu/config/addons.json b/resources/vMenu/config/addons.json
index 7b600f2bf..99df5ff14 100644
--- a/resources/vMenu/config/addons.json
+++ b/resources/vMenu/config/addons.json
@@ -1149,9 +1149,13 @@
"btsupra94",
"fnfcivic",
"flyspur24",
+ "24tactrd",
+ "fire22exp",
" ",
" ",
" ",
+ " ",
+ " ",
],
"peds": [
diff --git a/server.cfg b/server.cfg
index 1dc1ac034..d2348ff29 100644
--- a/server.cfg
+++ b/server.cfg
@@ -68,7 +68,7 @@ ensure npwd
ensure vMenu
ensure Delete-Vehicle
ensure night_subtitles
-ensure night_discordapi
+ensure night_ers
ensure SmartHoseLite
ensure SmartFiresLite
ensure SmartFiresLite
@@ -514,7 +514,10 @@ ensure 08lapdcvpipack
ensure New_LAPD_CVPI_Pack
ensure lapd16fpiu
ensure lapd2pack
-ensure
+ensure f350bubba
+ensure 24tactrd
+ensure fire22exp
+ensure 19mustgt
ensure generic_texture_renderer_gfx
ensure ox_lib