diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/fxmanifest.lua b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/fxmanifest.lua
new file mode 100644
index 000000000..592efc370
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/fxmanifest.lua
@@ -0,0 +1,7 @@
+fx_version 'cerulean'
+game 'gta5'
+
+lua54 'yes'
+author 'John Chin'
+description 'Weigh Station Shared Props'
+version '1.0.0'
\ No newline at end of file
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation.ybn b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation.ybn
new file mode 100644
index 000000000..59e37df70
Binary files /dev/null and b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation.ybn differ
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_curtain01.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_curtain01.ydr
new file mode 100644
index 000000000..fe766be7c
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_curtain01.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:eb116aab74ae9fa8c4c4c6637ead8f7036da4a66d47ebc48f03d995ecffed425
+size 257201
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_curtainint.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_curtainint.ydr
new file mode 100644
index 000000000..b0dddd988
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_curtainint.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:027d5e892b3061eae025a1c1fd9ccea3aa0909bcc1e42987cbe9a215beef8ff2
+size 3776714
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_doormain.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_doormain.ydr
new file mode 100644
index 000000000..f4552bb0a
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_doormain.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f42b473a4c1c00fd8e25ee0281a4ea6a6cba4e65eea882257a2a42e24f6c950a
+size 65220
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_ext.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_ext.ydr
new file mode 100644
index 000000000..ffd6f6fda
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_ext.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a7609037bc0e847f0393b387726ed245c285d88fc78cbe7afdb653a69ae136bf
+size 16132
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_ext.ytd b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_ext.ytd
new file mode 100644
index 000000000..cec735080
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_ext.ytd
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5d205bb255fb80ffd96e9ce2e383b40f4af6e176d4431a4a1d40408f639012f3
+size 5882146
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_ext.ytyp b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_ext.ytyp
new file mode 100644
index 000000000..3363ca27f
Binary files /dev/null and b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_ext.ytyp differ
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_extshared.ytyp b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_extshared.ytyp
new file mode 100644
index 000000000..474b55af1
Binary files /dev/null and b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_extshared.ytyp differ
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_int.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_int.ydr
new file mode 100644
index 000000000..09a71ff7c
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_int.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f9ef2fc8728f3aa47d113e7263055caa3ce72ef271e2fbffd0220418fe06158e
+size 6106
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_int.ytd b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_int.ytd
new file mode 100644
index 000000000..ea2af4f9c
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_int.ytd
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bdd68e71be156d2a8effa604ff3c7e727d3e916259dabfbc64c1da80034c5000
+size 2556072
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_int.ytyp b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_int.ytyp
new file mode 100644
index 000000000..76de4c595
Binary files /dev/null and b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_int.ytyp differ
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_intfireext.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_intfireext.ydr
new file mode 100644
index 000000000..ddcfee620
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_intfireext.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fcabadef362ddce058733ed4826ac1d9cd1f30d22751f32035d515fd6b1dd40e
+size 165756
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_intlod.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_intlod.ydr
new file mode 100644
index 000000000..781b4db01
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_intlod.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:86da96ab36a6bb9d0ca6472287b50c2a4e9624b79822ceaa9adc9eabd602ea17
+size 5513
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_intposters.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_intposters.ydr
new file mode 100644
index 000000000..c05885103
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_intposters.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:902a283fcfe33362efc85b79bb956982d149aed6a5584b74e3347fc3df83ec59
+size 10390
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_inttrimdet01.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_inttrimdet01.ydr
new file mode 100644
index 000000000..56a77b3e0
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_inttrimdet01.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:28410807636ed30a88220bfb068d92d417d50a43bd607a413af5a93788ac1aff
+size 327731
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_light01.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_light01.ydr
new file mode 100644
index 000000000..20b1a1e11
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_light01.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7480fea83d6b7bea5828a0f95f20dc61002e9fdeccd06218374ce0e80a5bb08b
+size 37135
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_lightamber.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_lightamber.ydr
new file mode 100644
index 000000000..d02686b82
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_lightamber.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b6a3689e672f2b9d2646586b98262fc75cc8113db3140bc62f2cacfadf6ed168
+size 897
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_lightgreen.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_lightgreen.ydr
new file mode 100644
index 000000000..9b6c7805a
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_lightgreen.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ffa98460d7af6e1276fdcdf5c22636264c4617e626cbd50eb06d72a069a6f13f
+size 1641
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_lightred.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_lightred.ydr
new file mode 100644
index 000000000..d79097de7
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_lightred.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:06b51cc9f35ed36d4ba66aafcc20e6b0ac40a251a8f14c70a95cb08b7f05fd78
+size 1643
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_lights01.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_lights01.ydr
new file mode 100644
index 000000000..dd8e8ce70
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_lights01.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2be7d53a49031482b39fe4a2c01f1c7bf82d3a6074e435f5c90858586d2cf4a4
+size 882
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_mirrorbathroom.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_mirrorbathroom.ydr
new file mode 100644
index 000000000..1a8d2ba5c
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_mirrorbathroom.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4a0b10e181f5361852cde7081f3b29c22ae6016a4c35d14d9a07cbde3029bedc
+size 2494
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_monitor01.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_monitor01.ydr
new file mode 100644
index 000000000..eff17507e
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_monitor01.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ac105e260e2fd954ab9eb542aa85c31d78f18d1d37b82b3bfb40e2e0ffc73fb5
+size 3409
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_monitor02.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_monitor02.ydr
new file mode 100644
index 000000000..57f93aed9
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_monitor02.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:377b95afe3db2db3500188ff4efc46918c143b239dad97afb3c9656a2ae35765
+size 3484
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_monitor03.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_monitor03.ydr
new file mode 100644
index 000000000..17825afa0
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_monitor03.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b8950e3289f708814519f1328b50f32ae6aadc3684add8f5e60033797e206e63
+size 2122
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_props.ytd b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_props.ytd
new file mode 100644
index 000000000..220912694
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_props.ytd
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:92a858e78a43721bb0cbd4c717b7a19974777980c8ce9e0d1e316d3f4981c194
+size 27137788
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_props.ytyp b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_props.ytyp
new file mode 100644
index 000000000..c2cbf0853
Binary files /dev/null and b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_props.ytyp differ
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_props2.ytd b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_props2.ytd
new file mode 100644
index 000000000..3d2592d24
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_props2.ytd
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d234f23607fb75d25124463436b95e0a9bd7896f5d05a211dc4a61da35345efc
+size 1294748
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_radioprop.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_radioprop.ydr
new file mode 100644
index 000000000..8c02d23fe
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_radioprop.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0f52d82cf30b7c138b81704d58abba4ffe6e5fc93bb00974943e37851bd6ee58
+size 694965
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_roadsign01.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_roadsign01.ydr
new file mode 100644
index 000000000..d82719eaf
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_roadsign01.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:202387d54b9af6bbf0847afdcd928a5903af4a5fd1c769aee45f091357f3067a
+size 214415
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_roadsign02.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_roadsign02.ydr
new file mode 100644
index 000000000..6e95c7b39
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_roadsign02.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:45e858517d6dce480c45d4d786292aa891ed4467c18d4f151835a99bf30c021f
+size 1190440
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_roadsign03.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_roadsign03.ydr
new file mode 100644
index 000000000..0664f354c
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_roadsign03.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:572b71cd29f21bb7c6360d7f8255e42fdce5d2868bf97a3e75cbd398e5b94ab5
+size 354785
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_roadsign04.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_roadsign04.ydr
new file mode 100644
index 000000000..7cb3507d5
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_roadsign04.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1b51d4752664da8242f8b5efdbb6bc2cee815ffc343a79fbe6db1ca9f0afaa31
+size 214420
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_sign01.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_sign01.ydr
new file mode 100644
index 000000000..8e742c54d
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_sign01.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e5200636a9f09e5577fc8f758c89f1ecf3f27168e7bf479119f5d2f59ba6b941
+size 8706
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_sign02.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_sign02.ydr
new file mode 100644
index 000000000..6fe59bc0e
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_sign02.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3c59ffd24bed92e6b7217693683ddf91586281c675fd3259df6f370aa58371f8
+size 501763
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_sink.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_sink.ydr
new file mode 100644
index 000000000..1f6c9b01a
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_sink.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ec4dc752aa6479b1b46ebd8d4253e9ed8d68beb6aa626eabd7ff8759db559d3c
+size 308970
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_table.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_table.ydr
new file mode 100644
index 000000000..e0a34ba5e
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_table.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:57589fa86b403a54914789d6b59526c9383d3f4139a2a63c31b48f567d5683f9
+size 3879
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_toilet.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_toilet.ydr
new file mode 100644
index 000000000..a5a0b1d95
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_toilet.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:eca64cab30ef6537131545249c0f641a7a17e9a0b1d8253c1d09e5ba5aab0825
+size 527803
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_toiletroll.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_toiletroll.ydr
new file mode 100644
index 000000000..ea21f2a65
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_toiletroll.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:05ae1f78b84ff4c028067758da9110efa4629a7c42c78dcbd6f906b9ad7ea0dd
+size 135524
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_vent.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_vent.ydr
new file mode 100644
index 000000000..f2891eb1e
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_vent.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a19825f1aeb5fb80989dccdec21535586c5d36a4c87f115502663d5bafafde79
+size 35477
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_windowint.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_windowint.ydr
new file mode 100644
index 000000000..eae7adfda
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation-shared/stream/jd_weighstation_windowint.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:68cd2c2adf97533ed8f0d0cac2a6c7a1039192477ab3892151cc9d236c998a54
+size 2784
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/MainLights/client.lua b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/MainLights/client.lua
new file mode 100644
index 000000000..6692779a0
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/MainLights/client.lua
@@ -0,0 +1,285 @@
+local redLightModel = `jd_weighstation_lightred`
+local greenLightModel = `jd_weighstation_lightgreen`
+
+-- Active lights per lane (Now local entities)
+local activeLights = {
+ LaneA = {}
+}
+
+-- Lane states: true = green, false = red, nil = off
+local laneStates = {
+ LaneA = nil
+}
+
+local isInRange = false
+local isNearControl = false
+local playerAllowed = false
+
+-- AutoMode tracking (single lane)
+local autoTrack = {
+ LaneA = {
+ detected = false,
+ active = false,
+ detectionThread = nil,
+ lastVeh = nil,
+ lastTrigger = 0
+ }
+}
+
+-- ============================================================
+-- THE FIX: GHOST OBJECT CLEANUP
+-- ============================================================
+local function ForceCleanUp()
+ local models = { redLightModel, greenLightModel }
+ for _, model in ipairs(models) do
+ local handle, entity = FindFirstObject()
+ local success
+ repeat
+ if GetEntityModel(entity) == model then
+ SetEntityAsMissionEntity(entity, true, true)
+ DeleteEntity(entity)
+ end
+ success, entity = FindNextObject(handle)
+ until not success
+ EndFindObject(handle)
+ end
+end
+
+-- ============================================================
+-- PERMISSION SYSTEM
+-- ============================================================
+CreateThread(function()
+ ForceCleanUp() -- Run cleanup once when script starts
+ if Config.ACL.UseACL then
+ TriggerServerEvent("weigh_lights:checkPermissionMain")
+ else
+ playerAllowed = true
+ end
+end)
+
+RegisterNetEvent("weigh_lights:permissionResultMain", function(allowed)
+ playerAllowed = allowed
+end)
+
+-- ============================================================
+-- MODEL LOADING & SPAWNING
+-- ============================================================
+local function loadModel(model)
+ if not HasModelLoaded(model) then
+ RequestModel(model)
+ local t0 = GetGameTimer()
+ while not HasModelLoaded(model) do
+ Wait(10)
+ if GetGameTimer() - t0 > 5000 then RequestModel(model) end
+ end
+ end
+end
+
+local function clearLaneObjects(lane)
+ if activeLights[lane] then
+ for _, obj in ipairs(activeLights[lane]) do
+ if DoesEntityExist(obj) then
+ SetEntityAsMissionEntity(obj, true, true)
+ DeleteEntity(obj)
+ end
+ end
+ end
+ activeLights[lane] = {}
+end
+
+local function spawnLaneLight(lane, model)
+ loadModel(model)
+ if not Config.MainLights.Lanes[lane] then return end
+
+ clearLaneObjects(lane) -- Ensure clean slate before spawning
+
+ for _, light in ipairs(Config.MainLights.Lanes[lane].Lights) do
+ local pos = light.coords
+ -- CRITICAL: 5th param is FALSE (Not networked)
+ local obj = CreateObjectNoOffset(model, pos.x, pos.y, pos.z, false, false, false)
+
+ SetEntityCoordsNoOffset(obj, pos.x, pos.y, pos.z)
+ if light.rotation then
+ SetEntityRotation(obj, light.rotation.x, light.rotation.y, light.rotation.z, 2, true)
+ end
+ FreezeEntityPosition(obj, true)
+ SetEntityInvincible(obj, true)
+ table.insert(activeLights[lane], obj)
+ end
+end
+
+-- ============================================================
+-- REFRESH LANE
+-- ============================================================
+local function refreshLane(lane)
+ local state = laneStates[lane]
+ if state == nil then
+ clearLaneObjects(lane)
+ return
+ end
+ local model = state and greenLightModel or redLightModel
+ spawnLaneLight(lane, model)
+end
+
+local function setLaneStateLocal(lane, state, notify)
+ laneStates[lane] = state
+
+ if isInRange then
+ refreshLane(lane)
+ end
+
+ if notify then
+ local desc = state == nil and "OFF" or (state and "GREEN" or "RED")
+ lib.notify({
+ title = 'Weigh Station',
+ description = ("Lane A set to %s"):format(desc),
+ type = state == nil and 'inform' or (state and 'success' or 'error')
+ })
+ end
+end
+
+-- ============================================================
+-- NETWORK SYNC
+-- ============================================================
+RegisterNetEvent("jd_weighlight:setLaneState", function(lane, state)
+ if lane ~= "LaneA" then return end
+ setLaneStateLocal(lane, state, false)
+end)
+
+CreateThread(function()
+ Wait(3000)
+ TriggerServerEvent("jd_weighlight:requestState")
+end)
+
+-- ============================================================
+-- RANGE CHECK
+-- ============================================================
+CreateThread(function()
+ while true do
+ Wait(1000)
+ local pCoords = GetEntityCoords(PlayerPedId())
+ local nearAny = false
+
+ if Config.MainLights.Lanes.LaneA then
+ for _, light in ipairs(Config.MainLights.Lanes.LaneA.Lights) do
+ if #(pCoords - light.coords) < (Config.MainLights.LightSpawnRange or 200.0) then
+ nearAny = true
+ break
+ end
+ end
+ end
+
+ if nearAny and not isInRange then
+ isInRange = true
+ TriggerServerEvent("jd_weighlight:requestState")
+ elseif not nearAny and isInRange then
+ isInRange = false
+ clearLaneObjects("LaneA")
+ autoTrack.LaneA.detected = false
+ autoTrack.LaneA.active = false
+ autoTrack.LaneA.lastVeh = nil
+ end
+ end
+end)
+
+-- ============================================================
+-- CONTROL MENU
+-- ============================================================
+local function openControlMenu()
+ local menu = {
+ id = 'jd_weighlight_menu_single',
+ title = 'Weigh Station Light Control',
+ options = {
+ { title = 'Lane A → GREEN', icon = 'check-circle', onSelect = function()
+ TriggerServerEvent("jd_weighlight:setLaneState", "LaneA", true)
+ end },
+ { title = 'Lane A → RED', icon = 'ban', onSelect = function()
+ TriggerServerEvent("jd_weighlight:setLaneState", "LaneA", false)
+ end },
+ { title = 'Lane A → OFF', icon = 'power-off', onSelect = function()
+ TriggerServerEvent("jd_weighlight:setLaneState", "LaneA", nil)
+ end },
+ }
+ }
+ lib.registerContext(menu)
+ lib.showContext('jd_weighlight_menu_single')
+end
+
+CreateThread(function()
+ while true do
+ Wait(300)
+ local dist = #(GetEntityCoords(PlayerPedId()) - Config.MainLights.ControlCoords)
+ if not Config.MainLights.AutoMode then
+ if dist < (Config.MainLights.ControlDistance or 1.5) and not isNearControl then
+ isNearControl = true
+ if playerAllowed then lib.showTextUI("[E] Control Weigh Lights") end
+ elseif dist >= (Config.MainLights.ControlDistance or 1.5) and isNearControl then
+ isNearControl = false
+ lib.hideTextUI()
+ end
+ end
+ end
+end)
+
+CreateThread(function()
+ while true do
+ Wait(0)
+ if not Config.MainLights.AutoMode and isNearControl and playerAllowed and IsControlJustPressed(0, 38) then
+ openControlMenu()
+ end
+ end
+end)
+
+-- ============================================================
+-- AUTO MODE (SINGLE LANE)
+-- ============================================================
+local laneTriggerCenters = {
+ LaneA = vector3(2905.2993, 4171.1538, 50.2786)
+}
+local laneRadius = 1.0
+local leaveThreshold = 8.0
+
+local function isVehicleAllowed(vehicle)
+ if not DoesEntityExist(vehicle) then return false end
+ local modelName = tostring(GetDisplayNameFromVehicleModel(GetEntityModel(vehicle)) or ""):lower()
+ local vClass = GetVehicleClass(vehicle)
+ if Config.RampLight.AllowedModels then
+ for _, m in ipairs(Config.RampLight.AllowedModels) do
+ if modelName == tostring(m):lower() then return true end
+ end
+ end
+ return Config.RampLight.AllowedClasses[vClass] ~= nil
+end
+
+local function startLaneAutoThread()
+ local track = autoTrack.LaneA
+ if track.detectionThread then return end
+
+ track.detectionThread = CreateThread(function()
+ while true do
+ Wait(400)
+ if isInRange then
+ local veh = GetVehiclePedIsIn(PlayerPedId(), false)
+ if veh ~= 0 and isVehicleAllowed(veh) then
+ local dist = #(GetEntityCoords(veh) - laneTriggerCenters.LaneA)
+ if dist <= laneRadius and not track.detected then
+ track.detected = true
+ track.lastVeh = veh
+ TriggerServerEvent("jd_weighlight:autoTrigger", "LaneA")
+ elseif dist > leaveThreshold and track.detected then
+ track.detected = false
+ track.lastVeh = nil
+ TriggerServerEvent("jd_weighlight:setLaneState", "LaneA", true)
+ end
+ end
+ end
+ end
+ end)
+end
+
+if Config.MainLights.AutoMode then
+ CreateThread(function()
+ Wait(2000)
+ startLaneAutoThread()
+ end)
+end
\ No newline at end of file
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/MainLights/server.lua b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/MainLights/server.lua
new file mode 100644
index 000000000..3a1301c6d
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/MainLights/server.lua
@@ -0,0 +1,83 @@
+-- ============================================================
+-- LANE STATE (SINGLE LANE)
+-- ============================================================
+local laneStates = {
+ LaneA = Config.MainLights and Config.MainLights.AutoMode and true or nil
+}
+
+-- Prevent multiple timers from overlapping
+local autoTimers = {
+ LaneA = false
+}
+
+-- ============================================================
+-- SEND STATE TO PLAYER
+-- ============================================================
+RegisterNetEvent("jd_weighlight:requestState")
+AddEventHandler("jd_weighlight:requestState", function()
+ local src = source
+ -- Sends the current server truth to the client
+ TriggerClientEvent("jd_weighlight:setLaneState", src, "LaneA", laneStates.LaneA)
+end)
+
+-- ============================================================
+-- SET LANE STATE (MANUAL)
+-- ============================================================
+RegisterNetEvent("jd_weighlight:setLaneState")
+AddEventHandler("jd_weighlight:setLaneState", function(lane, state)
+ local src = source
+ if lane ~= "LaneA" then return end
+
+ -- ACL check
+ if Config.ACL.UseACL and not IsPlayerAceAllowed(src, Config.ACL.MainLights) then
+ print(("[weigh_lights] Player %d denied access"):format(src))
+ return
+ end
+
+ -- Update the Master State and tell EVERYONE to update their local objects
+ laneStates.LaneA = state
+ TriggerClientEvent("jd_weighlight:setLaneState", -1, "LaneA", state)
+end)
+
+-- ============================================================
+-- AUTO MODE TRIGGER
+-- ============================================================
+RegisterNetEvent("jd_weighlight:autoTrigger")
+AddEventHandler("jd_weighlight:autoTrigger", function(lane)
+ if lane ~= "LaneA" or not Config.MainLights.AutoMode then return end
+
+ -- Safety: If a timer is already running, don't start another one
+ if autoTimers.LaneA then return end
+
+ -- Turn the light RED for everyone
+ laneStates.LaneA = false
+ TriggerClientEvent("jd_weighlight:setLaneState", -1, "LaneA", false)
+
+ autoTimers.LaneA = true
+ CreateThread(function()
+ Wait(30000) -- 30 Seconds
+
+ autoTimers.LaneA = false
+
+ -- Only set back to GREEN if a staff member hasn't manually changed it or turned it OFF
+ if laneStates.LaneA == false then
+ laneStates.LaneA = true
+ TriggerClientEvent("jd_weighlight:setLaneState", -1, "LaneA", true)
+ end
+ end)
+end)
+
+-- ============================================================
+-- PERMISSION CHECK
+-- ============================================================
+RegisterNetEvent("weigh_lights:checkPermissionMain")
+AddEventHandler("weigh_lights:checkPermissionMain", function()
+ local src = source
+ local allowed = true
+
+ if Config.ACL.UseACL then
+ allowed = IsPlayerAceAllowed(src, Config.ACL.MainLights)
+ end
+
+ TriggerClientEvent("weigh_lights:permissionResultMain", src, allowed)
+end)
\ No newline at end of file
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/RoadSignLights/client.lua b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/RoadSignLights/client.lua
new file mode 100644
index 000000000..c38f15124
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/RoadSignLights/client.lua
@@ -0,0 +1,180 @@
+local lightSets = {}
+local playerAllowed = false
+
+-- ============================================================
+-- REQUEST PERMISSION IF ACL IS ENABLED
+-- ============================================================
+CreateThread(function()
+ if Config.ACL.UseACL then
+ TriggerServerEvent("weigh_lights:checkPermission")
+ else
+ playerAllowed = true -- bypass permission
+ end
+end)
+
+RegisterNetEvent("weigh_lights:permissionResult", function(allowed)
+ playerAllowed = allowed
+end)
+
+-- ============================================================
+-- LOAD CONFIGURED AMBER LIGHT SETS
+-- ============================================================
+CreateThread(function()
+ for _, cfg in ipairs(Config.RoadSigns.LightSets) do
+ table.insert(lightSets, {
+ name = cfg.name,
+ model = cfg.model,
+ coordsA = cfg.coordsA,
+ coordsB = cfg.coordsB,
+ rotA = cfg.rotA or vector3(0.0, 0.0, 0.0),
+ rotB = cfg.rotB or vector3(0.0, 0.0, 0.0),
+ control = cfg.control,
+ distance = cfg.distance or 2.0,
+ propA = nil,
+ propB = nil,
+ flashing = false,
+ pointCreated = false
+ })
+ end
+end)
+
+-- ============================================================
+-- REQUEST SYNC EVERY 10 SECONDS
+-- ============================================================
+CreateThread(function()
+ while true do
+ TriggerServerEvent("weigh_lights:requestSync")
+ Wait(10000)
+ end
+end)
+
+-- ============================================================
+-- SYNC ALL STATES
+-- ============================================================
+RegisterNetEvent("weigh_lights:syncAll", function(states)
+ for _, set in ipairs(lightSets) do
+ if states[set.name] ~= nil then
+ local desired = states[set.name]
+
+ if desired and not set.flashing then
+ StartFlashing(set)
+ set.flashing = true
+ elseif not desired and set.flashing then
+ StopFlashing(set)
+ set.flashing = false
+ end
+ end
+ end
+end)
+
+-- ============================================================
+-- SYNC A SINGLE SET
+-- ============================================================
+RegisterNetEvent("weigh_lights:syncSingle", function(setName, state)
+ for _, set in ipairs(lightSets) do
+ if set.name == setName then
+ if state and not set.flashing then
+ StartFlashing(set)
+ set.flashing = true
+ elseif not state and set.flashing then
+ StopFlashing(set)
+ set.flashing = false
+ end
+ break
+ end
+ end
+end)
+
+-- ============================================================
+-- FLASHING LOGIC
+-- ============================================================
+function StartFlashing(set)
+ if DoesEntityExist(set.propA) then DeleteEntity(set.propA) end
+ if DoesEntityExist(set.propB) then DeleteEntity(set.propB) end
+
+ if not HasModelLoaded(set.model) then
+ RequestModel(set.model)
+ while not HasModelLoaded(set.model) do Wait(10) end
+ end
+
+ local zOffset = -0.09
+ local posA = set.coordsA + vector3(0.0, 0.0, zOffset)
+ local posB = set.coordsB + vector3(0.0, 0.0, zOffset)
+
+ set.propA = CreateObject(set.model, posA.x, posA.y, posA.z, false, false, false)
+ set.propB = CreateObject(set.model, posB.x, posB.y, posB.z, false, false, false)
+
+ SetEntityRotation(set.propA, set.rotA.x, set.rotA.y, set.rotA.z, 2, true)
+ SetEntityRotation(set.propB, set.rotB.x, set.rotB.y, set.rotB.z, 2, true)
+
+ SetEntityVisible(set.propA, false, false)
+ SetEntityVisible(set.propB, false, false)
+
+ SetEntityAsMissionEntity(set.propA, true, true)
+ SetEntityAsMissionEntity(set.propB, true, true)
+
+ CreateThread(function()
+ local toggle = true
+ while set.flashing do
+ if toggle then
+ SetEntityVisible(set.propA, true, false)
+ SetEntityVisible(set.propB, false, false)
+ else
+ SetEntityVisible(set.propA, false, false)
+ SetEntityVisible(set.propB, true, false)
+ end
+ toggle = not toggle
+ Wait(500)
+ end
+
+ if DoesEntityExist(set.propA) then DeleteEntity(set.propA) end
+ if DoesEntityExist(set.propB) then DeleteEntity(set.propB) end
+ set.propA = nil
+ set.propB = nil
+ end)
+end
+
+function StopFlashing(set)
+ set.flashing = false
+end
+
+-- ============================================================
+-- OX_LIB E-KEY INTERACTION (with ACL toggle)
+-- ============================================================
+CreateThread(function()
+ while #lightSets == 0 do Wait(100) end
+
+ -- wait until permission is determined
+ if Config.ACL.UseACL then
+ while playerAllowed == false do Wait(100) end
+ end
+
+ for _, set in ipairs(lightSets) do
+ if set.control and not set.pointCreated then
+ local point = lib.points.new(set.control, set.distance)
+ set.pointCreated = true
+
+ function point:nearby()
+ -- bypass or check permission
+ if Config.ACL.UseACL and not playerAllowed then
+ lib.hideTextUI()
+ return
+ end
+
+ if self.currentDistance < set.distance then
+ lib.showTextUI("[E] Toggle Amber Light: " .. set.name)
+
+ if IsControlJustPressed(0, 38) then
+ TriggerServerEvent("weigh_lights:toggleLight", set.name, not set.flashing)
+ end
+ else
+ lib.hideTextUI()
+ end
+ end
+
+ function point:onExit()
+ lib.hideTextUI()
+ end
+ end
+ end
+end)
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/RoadSignLights/server.lua b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/RoadSignLights/server.lua
new file mode 100644
index 000000000..4673e7622
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/RoadSignLights/server.lua
@@ -0,0 +1,44 @@
+local lightStates = {}
+
+-- ============================================================
+-- REQUEST SYNC
+-- ============================================================
+RegisterNetEvent("weigh_lights:requestSync")
+AddEventHandler("weigh_lights:requestSync", function()
+ local src = source
+ TriggerClientEvent("weigh_lights:syncAll", src, lightStates)
+end)
+
+-- ============================================================
+-- TOGGLE LIGHT
+-- ============================================================
+RegisterNetEvent("weigh_lights:toggleLight")
+AddEventHandler("weigh_lights:toggleLight", function(setName, newState)
+ local src = source
+
+ -- Only check ACL if UseACL is true
+ if Config.ACL.UseACL then
+ if not IsPlayerAceAllowed(src, Config.ACL.AmberLights) then
+ print(("[weigh_lights] Player %d tried to toggle light '%s' without permission!"):format(src, setName))
+ return
+ end
+ end
+
+ lightStates[setName] = newState
+ TriggerClientEvent("weigh_lights:syncSingle", -1, setName, newState)
+end)
+
+-- ============================================================
+-- CHECK PERMISSION
+-- ============================================================
+RegisterNetEvent("weigh_lights:checkPermission")
+AddEventHandler("weigh_lights:checkPermission", function()
+ local src = source
+ local allowed = true -- default allow if ACL disabled
+
+ if Config.ACL.UseACL then
+ allowed = IsPlayerAceAllowed(src, Config.ACL.AmberLights)
+ end
+
+ TriggerClientEvent("weigh_lights:permissionResult", src, allowed)
+end)
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/WeighUi/client.lua b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/WeighUi/client.lua
new file mode 100644
index 000000000..7cb956540
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/WeighUi/client.lua
@@ -0,0 +1,185 @@
+-- WeighUi/client.lua
+local uiOpen = false
+local checkDistance = 4.0
+local truckWeights = {}
+local truckTrailers = {}
+local trucksOnLane = {}
+local lastLaneWeight = {}
+
+local serverCallbacks = {}
+
+-- =========================
+-- CUSTOM COORDINATES
+-- =========================
+local laneTriggerCenters = {
+ LaneA = vector3(2905.2993, 4171.1538, 50.2786)
+}
+
+-- =========================
+-- Helpers
+-- =========================
+local function IsModelInList(modelHash, list)
+ for _, name in ipairs(list or {}) do
+ if GetHashKey(name) == modelHash then
+ return true
+ end
+ end
+ return false
+end
+
+function TriggerServerCallback(name, cb, ...)
+ local id = math.random(1, 999999)
+ serverCallbacks[id] = cb
+ TriggerServerEvent(name, id, ...)
+end
+
+RegisterNetEvent("weighstation:serverCallback", function(id, ...)
+ if serverCallbacks[id] then
+ serverCallbacks[id](...)
+ serverCallbacks[id] = nil
+ end
+end)
+
+-- =========================
+-- Lane initialization
+-- =========================
+trucksOnLane["LaneA"] = {}
+lastLaneWeight["LaneA"] = nil
+
+-- =========================
+-- UI Logic
+-- =========================
+local function ToggleUI(open)
+ uiOpen = open
+ SetNuiFocus(open, open)
+ SendNUIMessage({ action = open and "showUI" or "hideUI" })
+
+ if open then
+ TriggerServerCallback("weighstation:getRecentVehicles", function(recent)
+ SendNUIMessage({ action = "updateRecentVehicles", recent = recent })
+ end)
+ TriggerServerCallback("weighstation:getStats", function(stats)
+ SendNUIMessage({
+ action = "updateStats",
+ totalTrucks = stats.totalTrucks or 0,
+ avgWeight = stats.avgWeight or 0
+ })
+ end)
+ end
+end
+
+local function ShowPopup(text)
+ SendNUIMessage({ action = "showPopup", text = text })
+end
+
+local function HidePopup()
+ SendNUIMessage({ action = "hidePopup" })
+end
+
+-- =========================
+-- Detection Threads
+-- =========================
+CreateThread(function()
+ while true do
+ Wait(0)
+ local ped = PlayerPedId()
+ local pos = GetEntityCoords(ped)
+ local controlPos = Config.MainLights.ControlCoords
+ local dist = #(pos - controlPos)
+
+ if dist < (Config.MainLights.ControlDistance or 2.0) then
+ ShowPopup("[G] Open Weigh Station")
+ if IsControlJustPressed(0, 47) and not uiOpen then
+ ToggleUI(true)
+ end
+ else
+ HidePopup()
+ end
+ end
+end)
+
+CreateThread(function()
+ while true do
+ Wait(1000)
+ local vehicles = GetGamePool('CVehicle')
+ local laneName = "LaneA"
+ local laneCenter = laneTriggerCenters[laneName]
+
+ if laneCenter then
+ local laneWeight = nil
+ local laneTruckFound = nil
+ local minDist = checkDistance + 0.01
+
+ for _, vehicle in ipairs(vehicles) do
+ if DoesEntityExist(vehicle) and not IsEntityDead(vehicle) then
+ local model = GetEntityModel(vehicle)
+
+ if IsModelInList(model, Config.RampLight.AllowedModels) then
+ local vehiclePos = GetEntityCoords(vehicle)
+ local distToLane = #(vehiclePos - laneCenter)
+
+ if distToLane <= checkDistance and distToLane < minDist then
+ minDist = distToLane
+ local hasTrailer, trailer = GetVehicleTrailerVehicle(vehicle)
+ local plate = GetVehicleNumberPlateText(vehicle)
+
+ -- PERSISTENT WEIGHT LOGIC START
+ if not truckWeights[vehicle] or truckTrailers[vehicle] ~= trailer then
+
+ -- 1. Generate Seed from License Plate
+ local seed = 0
+ for i = 1, #plate do
+ seed = seed + string.byte(plate, i)
+ end
+
+ -- 2. Set Seed (Forces math.random to be identical to Station 02)
+ math.randomseed(seed)
+
+ if hasTrailer and trailer ~= 0 then
+ local trailerModel = GetEntityModel(trailer)
+ if IsModelInList(trailerModel, Config.RampLight.HeavyModels) then
+ truckWeights[vehicle] = math.random(85000, 125000)
+ elseif IsModelInList(trailerModel, Config.RampLight.LightModels) then
+ truckWeights[vehicle] = math.random(35000, 55000)
+ else
+ truckWeights[vehicle] = math.random(40000, 100000)
+ end
+ else
+ truckWeights[vehicle] = math.random(32000, 45000) -- Bobtail
+ end
+
+ -- 3. Reset Seed for other system functions
+ math.randomseed(GetGameTimer())
+
+ truckTrailers[vehicle] = trailer
+ local truckModel = GetDisplayNameFromVehicleModel(model)
+ local trailerModelName = (hasTrailer and trailer ~= 0) and GetDisplayNameFromVehicleModel(GetEntityModel(trailer)) or nil
+
+ TriggerServerEvent("weighstation:logTruck", plate, truckModel, trailerModelName, truckWeights[vehicle])
+ end
+ -- PERSISTENT WEIGHT LOGIC END
+
+ laneWeight = truckWeights[vehicle]
+ laneTruckFound = vehicle
+ end
+ end
+ end
+ end
+
+ if lastLaneWeight[laneName] ~= laneWeight then
+ lastLaneWeight[laneName] = laneWeight
+ SendNUIMessage({
+ action = "updateWeight",
+ lane = laneName,
+ weight = laneWeight,
+ vehicle = laneTruckFound or nil
+ })
+ end
+ end
+ end
+end)
+
+RegisterNUICallback('closeUI', function(data, cb)
+ ToggleUI(false)
+ cb('ok')
+end)
\ No newline at end of file
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/WeighUi/html/script.js b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/WeighUi/html/script.js
new file mode 100644
index 000000000..997f9e53b
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/WeighUi/html/script.js
@@ -0,0 +1,98 @@
+document.addEventListener("DOMContentLoaded", () => {
+ const win = document.getElementById("browser-window");
+ const closeBtn = document.getElementById("close-btn");
+
+ // Lane status (Lane B Removed)
+ const statusLaneA = document.getElementById("status-laneA");
+
+ // Recent vehicles log
+ const recentVehicles = document.getElementById("recent-vehicles");
+
+ // Totals / Summary
+ const totalTrucksEl = document.getElementById("total-trucks");
+ const avgWeightEl = document.getElementById("avg-weight");
+ const overweightCountEl = document.getElementById("overweight-count");
+
+ // Popup Logic (Keep existing)
+ const popup = document.createElement("div");
+ popup.id = "popup";
+ popup.style.position = "fixed";
+ popup.style.top = "20px";
+ popup.style.left = "20px";
+ popup.style.padding = "10px 20px";
+ popup.style.backgroundColor = "#000080";
+ popup.style.color = "#fff";
+ popup.style.fontFamily = "MS Sans Serif, Arial, sans-serif";
+ popup.style.fontSize = "14px";
+ popup.style.fontWeight = "bold";
+ popup.style.border = "2px solid #000";
+ popup.style.display = "none";
+ popup.style.zIndex = "9999";
+ popup.style.borderRadius = "4px";
+ document.body.appendChild(popup);
+
+ let recentVehiclesData = [];
+ let totalTrucks = 0;
+ let totalWeight = 0;
+ let overweightCount = 0;
+ let loggedVehicles = {};
+
+ window.addEventListener("message", (event) => {
+ const data = event.data;
+
+ if (data.action === "showUI") {
+ win.style.display = "block";
+ document.body.style.cursor = "default";
+ } else if (data.action === "hideUI") {
+ win.style.display = "none";
+ document.body.style.cursor = "none";
+ } else if (data.action === "showPopup") {
+ popup.innerText = data.text;
+ popup.style.display = "block";
+ } else if (data.action === "hidePopup") {
+ popup.style.display = "none";
+ } else if (data.action === "updateWeight") {
+ // Filter: Only update if the data is for LaneA
+ if (data.lane !== "LaneA") return;
+
+ const laneWeightEl = document.getElementById("laneA-weight");
+ laneWeightEl.innerText = data.weight ? data.weight + " LBS" : "-- LBS";
+
+ if (data.weight) {
+ statusLaneA.innerText = data.weight > 80000 ? `Lane A: ⚠️ Overweight` : `Lane A: Occupied`;
+ } else {
+ statusLaneA.innerText = `Lane A: Open`;
+ }
+
+ if (data.vehicle && data.weight && !loggedVehicles[data.vehicle]) {
+ loggedVehicles[data.vehicle] = true;
+ totalTrucks++;
+ totalWeight += data.weight;
+ if (data.weight > 80000) overweightCount++;
+
+ totalTrucksEl.innerText = totalTrucks;
+ avgWeightEl.innerText = Math.floor(totalWeight / totalTrucks);
+ overweightCountEl.innerText = overweightCount;
+
+ const entry = `${new Date().toLocaleTimeString()} - Lane A - ${data.weight} LBS`;
+ recentVehiclesData.unshift(entry);
+ if (recentVehiclesData.length > 10) recentVehiclesData.pop();
+ recentVehicles.innerHTML = recentVehiclesData.map(e => `
${e}`).join("");
+ }
+
+ if (!data.weight && data.vehicle) {
+ loggedVehicles[data.vehicle] = false;
+ }
+ }
+ });
+
+ closeBtn.addEventListener("click", () => {
+ fetch(`https://${GetParentResourceName()}/closeUI`, {
+ method: 'POST',
+ body: JSON.stringify({})
+ }).finally(() => {
+ win.style.display = "none";
+ document.body.style.cursor = "none";
+ });
+ });
+});
\ No newline at end of file
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/WeighUi/html/style.css b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/WeighUi/html/style.css
new file mode 100644
index 000000000..a62bdf677
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/WeighUi/html/style.css
@@ -0,0 +1,116 @@
+body {
+ font-family: "MS Sans Serif", Arial, sans-serif;
+ background-color: transparent;
+ margin: 0;
+ padding: 0;
+}
+
+/* Browser window */
+#browser-window {
+ width: 800px;
+ height: 600px;
+ background-color: #c0c0c0;
+ border: 3px solid #000;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ display: none;
+ box-shadow: 7px 7px 0px #000;
+ padding: 0;
+ overflow: hidden;
+}
+
+/* Top bar */
+#browser-topbar {
+ height: 30px;
+ background-color: #000080;
+ color: #fff;
+ padding: 6px;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ font-weight: bold;
+ font-size: 14px;
+}
+
+/* URL tab */
+#tab {
+ font-weight: normal;
+ background-color: #c0c0c0;
+ color: #000;
+ padding: 4px 8px;
+ border: 2px inset #fff;
+ margin-left: 4px;
+ font-size: 13px;
+}
+
+/* Close button */
+#close-btn {
+ width: 25px;
+ height: 25px;
+ cursor: pointer;
+ font-weight: bold;
+}
+#close-btn:hover {
+ background: #ff0000;
+ color: #fff;
+}
+
+/* Menu buttons */
+#browser-menu {
+ display: flex;
+ height: 30px;
+ background-color: #c0c0c0;
+ border-bottom: 2px inset #fff;
+}
+.menu-btn {
+ border: 2px outset #fff;
+ margin: 2px;
+ padding: 4px 10px;
+ background-color: #c0c0c0;
+ cursor: pointer;
+ font-size: 13px;
+}
+.menu-btn:active {
+ border-style: inset;
+}
+
+/* Content area */
+#browser-content {
+ background-color: #e0e0e0;
+ padding: 30px;
+ font-size: 16px;
+ border-top: 2px solid #fff;
+ border-bottom: 2px solid #000;
+ height: calc(100% - 30px - 30px);
+ overflow-y: auto;
+}
+
+/* Lane boxes */
+.lane {
+ margin-top: 15px;
+ padding: 10px;
+ border: 2px inset #fff;
+ background-color: #c0c0c0;
+ font-size: 16px;
+}
+.lane-name {
+ font-weight: bold;
+}
+
+/* Lane status, log, summary */
+.lane-status, .log, .summary {
+ margin-top: 20px;
+ padding: 10px;
+ border: 2px inset #fff;
+ background-color: #c0c0c0;
+}
+.lane-status h3, .log h3, .summary h3 {
+ margin: 0 0 5px 0;
+ font-size: 16px;
+}
+.log ul {
+ padding-left: 20px;
+ margin: 0;
+}
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/WeighUi/html/ui.html b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/WeighUi/html/ui.html
new file mode 100644
index 000000000..9b9271ff4
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/WeighUi/html/ui.html
@@ -0,0 +1,51 @@
+
+
+
+
+Weigh Station UI
+
+
+
+
+
+ www.sanandreasdot.gov/panel
+
+
+
+
+
+
+
Weigh Station Panel
+
+
+ Lane A: -- LBS
+
+
+
+
Lane Status
+
Lane A: Open
+
+
+
+
+
+
Summary
+
Total Trucks Today: 0
+
Average Weight: 0 LBS
+
Overweight Trucks: 0
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/WeighUi/server.lua b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/WeighUi/server.lua
new file mode 100644
index 000000000..394c45858
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/WeighUi/server.lua
@@ -0,0 +1,46 @@
+-- WeighUi/server.lua
+-- In-memory logging for weigh station
+
+local recentTrucks = {} -- FIFO queue for last 10 trucks
+local totalWeightToday = 0
+local totalTrucksToday = 0
+
+-- =========================
+-- Log a truck
+-- =========================
+RegisterNetEvent("weighstation:logTruck", function(plate, truckModel, trailerModel, weight)
+ -- Add to recent trucks (at front)
+ table.insert(recentTrucks, 1, {
+ plate = plate,
+ truckModel = truckModel,
+ trailerModel = trailerModel or "none",
+ weight = weight
+ })
+
+ -- Keep only last 10
+ if #recentTrucks > 10 then
+ table.remove(recentTrucks)
+ end
+
+ -- Update totals
+ totalTrucksToday = totalTrucksToday + 1
+ totalWeightToday = totalWeightToday + weight
+end)
+
+-- =========================
+-- Get recent vehicles
+-- =========================
+RegisterNetEvent("weighstation:getRecentVehicles", function(id)
+ TriggerClientEvent("weighstation:serverCallback", source, id, recentTrucks)
+end)
+
+-- =========================
+-- Get stats
+-- =========================
+RegisterNetEvent("weighstation:getStats", function(id)
+ local avgWeight = totalTrucksToday > 0 and totalWeightToday / totalTrucksToday or 0
+ TriggerClientEvent("weighstation:serverCallback", source, id, {
+ totalTrucks = totalTrucksToday,
+ avgWeight = avgWeight
+ })
+end)
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/config.lua b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/config.lua
new file mode 100644
index 000000000..cbbcb577d
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/config.lua
@@ -0,0 +1,81 @@
+Config = {}
+
+-- =============================================
+-- ACE PERMISSIONS
+-- =============================================
+Config.ACL = {
+ UseACL = false, -- set to false to disable ACE checks allowing anyone to use the light controls
+ MainLights = "weighstation.mainlights",
+ AmberLights = "weighstation.amberlights"
+}
+
+-- =============================================
+-- MAIN WEIGH STATION TRAFFIC LIGHTS
+-- =============================================
+Config.MainLights = {
+ AutoMode = true,
+ Lanes = {
+ LaneA = {
+ Lights = {
+ {
+ coords = vector3(2911.517090, 4153.126465, 58.026089),
+ rotation = vector3(0.0, 0.0, 0.0)
+ },
+ {
+ coords = vector3(2896.470703, 4179.305664, 56.372925),
+ rotation = vector3(20.0, -90.0, 20.0)
+ },
+ },
+ }
+ },
+
+ ControlCoords = vector3(2920.2078, 4191.4390, 50.4580),
+ ControlDistance = 1.0,
+ LightSpawnRange = 1000.0,
+ ResyncTime = 60000
+}
+
+
+-- =============================================
+-- ROAD SIGN / AMBER LIGHT SETS
+-- =============================================
+Config.RoadSigns = {
+ LightSets = {
+ {
+ name = "San Chainski",
+ model = `jd_weighstation_lightamber`,
+ coordsA = vector3(2946.227051, 3795.911865, 54.827042),
+ rotA = vector3(0.0, 0.0, -18.46),
+ coordsB = vector3(2947.412842, 3795.516113, 54.827042),
+ rotB = vector3(0.0, 0.0, -18.46),
+ control = vector3(2946.8794, 3795.7717, 52.5899),
+ distance = 1.0
+ }
+ }
+}
+
+
+
+-- =============================================
+-- WEIGH STATION RAMP LIGHT SYSTEM
+-- =============================================
+Config.RampLight = {
+ AllowedClasses = {
+ [18] = false,
+ [20] = false,
+ },
+AllowedModels = { "phantom", "hauler", "packer", "phantom3", "hauler2", "packer2" }, -- ← container truck models
+
+ HeavyModels = {
+ "TRAILER", -- ← container heavy trailers
+ "TRAILERS", "TRAILER2", "TRAILER3", "TRAILER4",
+ "trailers", "trailers2", "trailers3", "trailers4",
+ "freighttrailer", "armytanker", "docktrailer"
+ },
+
+ LightModels = {
+ "tr2", "tr3", "tr4", "trflat", -- ← container light trailers
+ "tanker", "tanker2", "trailerlogs",
+ "tvtrailer", "baletrailer", "graintrailer"
+ },
+}
\ No newline at end of file
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/fxmanifest.lua b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/fxmanifest.lua
new file mode 100644
index 000000000..83a956c61
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/fxmanifest.lua
@@ -0,0 +1,33 @@
+fx_version 'cerulean'
+game 'gta5'
+
+lua54 'yes'
+author 'John Chin'
+description 'Weigh Stations'
+version '1.0.0'
+
+
+shared_scripts {
+ '@ox_lib/init.lua',
+ 'config.lua'
+}
+
+client_scripts {
+ 'MainLights/client.lua',
+ 'RoadSignLights/client.lua',
+ 'WeighUi/client.lua'
+}
+
+server_scripts {
+ 'MainLights/server.lua',
+ 'RoadSignLights/server.lua',
+ 'WeighUi/server.lua'
+}
+
+ui_page 'WeighUi/html/ui.html'
+
+files {
+ 'WeighUi/html/ui.html',
+ 'WeighUi/html/style.css',
+ 'WeighUi/html/script.js'
+}
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/_manifest.ymf b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/_manifest.ymf
new file mode 100644
index 000000000..ff88eb036
Binary files /dev/null and b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/_manifest.ymf differ
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/cs2_05_land09_d.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/cs2_05_land09_d.ydr
new file mode 100644
index 000000000..c085677c8
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/cs2_05_land09_d.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:97dc57e2b3700d3f4866a9011706db998c3f6c0d8ddba747eb905dc8c5575191
+size 247298
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/cs2_05_land09_desert.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/cs2_05_land09_desert.ydr
new file mode 100644
index 000000000..e7fc8ad77
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/cs2_05_land09_desert.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3ef7860d513942d9f5f2333344451dd09399895de684744d88fa3facbe4fc337
+size 67871
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/cs2_05_land09b_desert.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/cs2_05_land09b_desert.ydr
new file mode 100644
index 000000000..b16c5012d
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/cs2_05_land09b_desert.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b88ccdcf9ca315751f8a7986128df933a272c4164d4e459e7b111d7f76088d4d
+size 1197072
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/cs2_roads_3.ybn b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/cs2_roads_3.ybn
new file mode 100644
index 000000000..001585721
Binary files /dev/null and b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/cs2_roads_3.ybn differ
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/cs2_roads_fw_09.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/cs2_roads_fw_09.ydr
new file mode 100644
index 000000000..4b25e3d14
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/cs2_roads_fw_09.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:88c89d8979e70d409c764643d30c02d641e891e6144867aec0f1e19072924628
+size 529262
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/cs2_roads_fw_10.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/cs2_roads_fw_10.ydr
new file mode 100644
index 000000000..082bc3ab5
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/cs2_roads_fw_10.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:98183394ebdb3db7cf7cea56cb8a4570430f75c1d2930ed285aeb99c54f26e84
+size 397673
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/cs2_roads_fw_10_dcl.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/cs2_roads_fw_10_dcl.ydr
new file mode 100644
index 000000000..207aa428f
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/cs2_roads_fw_10_dcl.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6d8c40a81bd305600265682f3cacf0722dfbaccfc10c5fa9cf6bbb969d1f1d28
+size 668898
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/cs2_roads_fw_9_dcl.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/cs2_roads_fw_9_dcl.ydr
new file mode 100644
index 000000000..37acdc3ab
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/cs2_roads_fw_9_dcl.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1ae2ddd2c07cdda504280719f6ffc9431b50b6f1b48164bea11c0d9255357ae0
+size 2283783
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/cs2_roads_tele_pole_wirm03.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/cs2_roads_tele_pole_wirm03.ydr
new file mode 100644
index 000000000..455e9148f
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/cs2_roads_tele_pole_wirm03.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2fbb3d7c38fdb92c9fb5922437f714c868e235fa7158b4a2fcb75a26d1f0630f
+size 1856
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/hei_cs2_05.ymap b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/hei_cs2_05.ymap
new file mode 100644
index 000000000..25b505e1d
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/hei_cs2_05.ymap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ed3c8a0cb4fd542442b8d18fab213c281076f8e98b2f13821f419665b9637c81
+size 11444
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/hei_cs2_05_10.ybn b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/hei_cs2_05_10.ybn
new file mode 100644
index 000000000..5d28116c0
Binary files /dev/null and b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/hei_cs2_05_10.ybn differ
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/hei_cs2_05_critical_0.ymap b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/hei_cs2_05_critical_0.ymap
new file mode 100644
index 000000000..1eecbcbcb
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/hei_cs2_05_critical_0.ymap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1b545e2c39e826b03514a3416baba98ab661bd4007f953cb4c9a7ea9bf1f74fb
+size 11249
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/hei_cs2_05_grass_0.ymap b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/hei_cs2_05_grass_0.ymap
new file mode 100644
index 000000000..93e0394d3
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/hei_cs2_05_grass_0.ymap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:96a194c297d4c8a513e458772ea0ccb6095800f9beccd6d36147aa0be751f173
+size 966748
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/hei_cs2_05_long_0.ymap b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/hei_cs2_05_long_0.ymap
new file mode 100644
index 000000000..fdf800376
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/hei_cs2_05_long_0.ymap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:544d76ec9b75fc5d10bdcf1c2f270e8c1db4118addeedf7d539cee5c1c9b0d06
+size 10231
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/hei_cs2_05_strm_3.ymap b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/hei_cs2_05_strm_3.ymap
new file mode 100644
index 000000000..20376b166
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/hei_cs2_05_strm_3.ymap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c26360951758e06870c6969fa71ba1a634bc72c1751b6aa817db8e2e6b8c9210
+size 10157
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/hei_cs2_roads.ymap b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/hei_cs2_roads.ymap
new file mode 100644
index 000000000..670570292
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/hei_cs2_roads.ymap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:38128e3388090299ed4f42ad83ca64ef43a6e0c8bbc537bf7cef3afc9b695200
+size 11260
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/hei_cs2_roads_critical_0.ymap b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/hei_cs2_roads_critical_0.ymap
new file mode 100644
index 000000000..60510a6c9
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/hei_cs2_roads_critical_0.ymap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4bb754e8f266c540bde02ae82231a265fc9cc4db7c99f7d80f9ec1c413d049f4
+size 10038
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/hei_cs2_roads_strm_1.ymap b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/hei_cs2_roads_strm_1.ymap
new file mode 100644
index 000000000..51a119e9a
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/hei_cs2_roads_strm_1.ymap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:be470576c1d41a347960872635fa80dd983a9c0fb0a2b300d9b3a279a8bcf694
+size 15538
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation01_extlod_1.ymap b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation01_extlod_1.ymap
new file mode 100644
index 000000000..42c32532c
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation01_extlod_1.ymap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:18a74a1b486bd7239de2043252b1bdf8dba68e3115042048d277efaef3d577b4
+size 1161
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation01_int_1.ymap b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation01_int_1.ymap
new file mode 100644
index 000000000..9670512b6
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation01_int_1.ymap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d872fbab8f8833ca50f2ec689b9f6498b51c9a30cc15e7835b10f800184faded
+size 1167
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation01_roadconnect.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation01_roadconnect.ydr
new file mode 100644
index 000000000..9419e1b61
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation01_roadconnect.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a59f399a364a88797c6303a453bed3e7174e30c5e45ab1cee853719b634b74bb
+size 1857994
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation01_roadwire01.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation01_roadwire01.ydr
new file mode 100644
index 000000000..e8fed8ae3
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation01_roadwire01.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1f8615c3fbacbf92b1e4a29df05e083688ae807e1e5c4277950f2633b2594014
+size 2010
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation_01_det01.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation_01_det01.ydr
new file mode 100644
index 000000000..3e4be2f74
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation_01_det01.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b6ffc55e30aa5bc78ec2f08457fd035d13d8b31244ea620f39b1347911901b52
+size 2514175
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation_01_det02.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation_01_det02.ydr
new file mode 100644
index 000000000..2e41ceb53
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation_01_det02.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0a10a7ea8eec2cc3840116b19da715fb3329c11d306a23d4c6cb71586d6586d3
+size 39407
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation_01_det03.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation_01_det03.ydr
new file mode 100644
index 000000000..a390a0187
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation_01_det03.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d5ddc2cb4d23537d52f9d53271329f6cc649fc224fe5733b8b9b9b8a4158c824
+size 154723
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation_01_outsidelight.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation_01_outsidelight.ydr
new file mode 100644
index 000000000..4ddf37e00
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation_01_outsidelight.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f06d8b3c71c15b0151ffd4af595b96b4fc6078915f6958eb9db7229380060cd2
+size 31443
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation_extlandtrim.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation_extlandtrim.ydr
new file mode 100644
index 000000000..60cf207ae
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation_extlandtrim.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b972d60ea87bf20ee7c2f1983307fdaa6f729fa6aea17490797fe6d1962dec33
+size 20074
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation_extlod1.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation_extlod1.ydr
new file mode 100644
index 000000000..dfe9d1fe1
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation_extlod1.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:284d2c80f5ab45b1f7651cfd1dc328fb53b3d458e17f448786f9035f8990ae5c
+size 4293348
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation_extplot.ydr b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation_extplot.ydr
new file mode 100644
index 000000000..5d58a5107
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation_extplot.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d0401add74b13683542e900dcfa2bbd20e651510b904c9e6781123f142819f65
+size 95815
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation_int_1_lod.ymap b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation_int_1_lod.ymap
new file mode 100644
index 000000000..6f01a88f9
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weighstation_int_1_lod.ymap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:77bec8ac2a5de7331bed336abb5e038da836dded8e37695658706a674c753969
+size 1172
diff --git a/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weightstation01_ext_1.ymap b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weightstation01_ext_1.ymap
new file mode 100644
index 000000000..89fddd599
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/[jd-weighstations]/jd-weighstation01/stream/jd_weightstation01_ext_1.ymap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0966956d9fb0c32c7682fd1f778a27b699ce3d0a0aeab0b1a3758c9805e7e12f
+size 2664
diff --git a/resources/[EGRP-Map-Addons]/jd-scenarios/fxmanifest.lua b/resources/[EGRP-Map-Addons]/jd-scenarios/fxmanifest.lua
new file mode 100644
index 000000000..41f8c5c08
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-scenarios/fxmanifest.lua
@@ -0,0 +1,12 @@
+fx_version "cerulean"
+game "gta5"
+
+lua54 'yes'
+author 'John Chin'
+description 'Weigh Station Scenarios'
+version '1.0.0'
+
+
+file "sp_manifest.ymt"
+data_file "SCENARIO_POINTS_OVERRIDE_PSO_FILE" "sp_manifest.ymt"
+
diff --git a/resources/[EGRP-Map-Addons]/jd-scenarios/sp_manifest.ymt b/resources/[EGRP-Map-Addons]/jd-scenarios/sp_manifest.ymt
new file mode 100644
index 000000000..9493dc660
Binary files /dev/null and b/resources/[EGRP-Map-Addons]/jd-scenarios/sp_manifest.ymt differ
diff --git a/resources/[EGRP-Map-Addons]/jd-scenarios/stream/los_santos_freeway.ymt b/resources/[EGRP-Map-Addons]/jd-scenarios/stream/los_santos_freeway.ymt
new file mode 100644
index 000000000..783e69973
Binary files /dev/null and b/resources/[EGRP-Map-Addons]/jd-scenarios/stream/los_santos_freeway.ymt differ
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/fxmanifest.lua b/resources/[EGRP-Map-Addons]/jd-weighstation/fxmanifest.lua
new file mode 100644
index 000000000..592efc370
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/fxmanifest.lua
@@ -0,0 +1,7 @@
+fx_version 'cerulean'
+game 'gta5'
+
+lua54 'yes'
+author 'John Chin'
+description 'Weigh Station Shared Props'
+version '1.0.0'
\ No newline at end of file
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation.ybn b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation.ybn
new file mode 100644
index 000000000..59e37df70
Binary files /dev/null and b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation.ybn differ
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_curtain01.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_curtain01.ydr
new file mode 100644
index 000000000..fe766be7c
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_curtain01.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:eb116aab74ae9fa8c4c4c6637ead8f7036da4a66d47ebc48f03d995ecffed425
+size 257201
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_curtainint.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_curtainint.ydr
new file mode 100644
index 000000000..b0dddd988
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_curtainint.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:027d5e892b3061eae025a1c1fd9ccea3aa0909bcc1e42987cbe9a215beef8ff2
+size 3776714
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_doormain.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_doormain.ydr
new file mode 100644
index 000000000..f4552bb0a
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_doormain.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f42b473a4c1c00fd8e25ee0281a4ea6a6cba4e65eea882257a2a42e24f6c950a
+size 65220
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_ext.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_ext.ydr
new file mode 100644
index 000000000..ffd6f6fda
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_ext.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a7609037bc0e847f0393b387726ed245c285d88fc78cbe7afdb653a69ae136bf
+size 16132
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_ext.ytd b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_ext.ytd
new file mode 100644
index 000000000..cec735080
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_ext.ytd
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5d205bb255fb80ffd96e9ce2e383b40f4af6e176d4431a4a1d40408f639012f3
+size 5882146
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_ext.ytyp b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_ext.ytyp
new file mode 100644
index 000000000..3363ca27f
Binary files /dev/null and b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_ext.ytyp differ
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_extshared.ytyp b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_extshared.ytyp
new file mode 100644
index 000000000..474b55af1
Binary files /dev/null and b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_extshared.ytyp differ
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_int.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_int.ydr
new file mode 100644
index 000000000..09a71ff7c
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_int.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f9ef2fc8728f3aa47d113e7263055caa3ce72ef271e2fbffd0220418fe06158e
+size 6106
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_int.ytd b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_int.ytd
new file mode 100644
index 000000000..ea2af4f9c
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_int.ytd
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bdd68e71be156d2a8effa604ff3c7e727d3e916259dabfbc64c1da80034c5000
+size 2556072
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_int.ytyp b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_int.ytyp
new file mode 100644
index 000000000..76de4c595
Binary files /dev/null and b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_int.ytyp differ
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_intfireext.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_intfireext.ydr
new file mode 100644
index 000000000..ddcfee620
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_intfireext.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fcabadef362ddce058733ed4826ac1d9cd1f30d22751f32035d515fd6b1dd40e
+size 165756
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_intlod.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_intlod.ydr
new file mode 100644
index 000000000..781b4db01
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_intlod.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:86da96ab36a6bb9d0ca6472287b50c2a4e9624b79822ceaa9adc9eabd602ea17
+size 5513
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_intposters.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_intposters.ydr
new file mode 100644
index 000000000..c05885103
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_intposters.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:902a283fcfe33362efc85b79bb956982d149aed6a5584b74e3347fc3df83ec59
+size 10390
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_inttrimdet01.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_inttrimdet01.ydr
new file mode 100644
index 000000000..56a77b3e0
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_inttrimdet01.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:28410807636ed30a88220bfb068d92d417d50a43bd607a413af5a93788ac1aff
+size 327731
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_light01.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_light01.ydr
new file mode 100644
index 000000000..20b1a1e11
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_light01.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7480fea83d6b7bea5828a0f95f20dc61002e9fdeccd06218374ce0e80a5bb08b
+size 37135
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_lightamber.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_lightamber.ydr
new file mode 100644
index 000000000..d02686b82
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_lightamber.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b6a3689e672f2b9d2646586b98262fc75cc8113db3140bc62f2cacfadf6ed168
+size 897
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_lightgreen.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_lightgreen.ydr
new file mode 100644
index 000000000..9b6c7805a
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_lightgreen.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ffa98460d7af6e1276fdcdf5c22636264c4617e626cbd50eb06d72a069a6f13f
+size 1641
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_lightred.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_lightred.ydr
new file mode 100644
index 000000000..d79097de7
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_lightred.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:06b51cc9f35ed36d4ba66aafcc20e6b0ac40a251a8f14c70a95cb08b7f05fd78
+size 1643
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_lights01.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_lights01.ydr
new file mode 100644
index 000000000..dd8e8ce70
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_lights01.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2be7d53a49031482b39fe4a2c01f1c7bf82d3a6074e435f5c90858586d2cf4a4
+size 882
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_mirrorbathroom.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_mirrorbathroom.ydr
new file mode 100644
index 000000000..1a8d2ba5c
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_mirrorbathroom.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4a0b10e181f5361852cde7081f3b29c22ae6016a4c35d14d9a07cbde3029bedc
+size 2494
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_monitor01.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_monitor01.ydr
new file mode 100644
index 000000000..eff17507e
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_monitor01.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ac105e260e2fd954ab9eb542aa85c31d78f18d1d37b82b3bfb40e2e0ffc73fb5
+size 3409
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_monitor02.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_monitor02.ydr
new file mode 100644
index 000000000..57f93aed9
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_monitor02.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:377b95afe3db2db3500188ff4efc46918c143b239dad97afb3c9656a2ae35765
+size 3484
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_monitor03.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_monitor03.ydr
new file mode 100644
index 000000000..17825afa0
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_monitor03.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b8950e3289f708814519f1328b50f32ae6aadc3684add8f5e60033797e206e63
+size 2122
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_props.ytd b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_props.ytd
new file mode 100644
index 000000000..220912694
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_props.ytd
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:92a858e78a43721bb0cbd4c717b7a19974777980c8ce9e0d1e316d3f4981c194
+size 27137788
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_props.ytyp b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_props.ytyp
new file mode 100644
index 000000000..c2cbf0853
Binary files /dev/null and b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_props.ytyp differ
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_props2.ytd b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_props2.ytd
new file mode 100644
index 000000000..3d2592d24
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_props2.ytd
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d234f23607fb75d25124463436b95e0a9bd7896f5d05a211dc4a61da35345efc
+size 1294748
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_radioprop.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_radioprop.ydr
new file mode 100644
index 000000000..8c02d23fe
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_radioprop.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0f52d82cf30b7c138b81704d58abba4ffe6e5fc93bb00974943e37851bd6ee58
+size 694965
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_roadsign01.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_roadsign01.ydr
new file mode 100644
index 000000000..d82719eaf
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_roadsign01.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:202387d54b9af6bbf0847afdcd928a5903af4a5fd1c769aee45f091357f3067a
+size 214415
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_roadsign02.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_roadsign02.ydr
new file mode 100644
index 000000000..6e95c7b39
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_roadsign02.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:45e858517d6dce480c45d4d786292aa891ed4467c18d4f151835a99bf30c021f
+size 1190440
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_roadsign03.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_roadsign03.ydr
new file mode 100644
index 000000000..0664f354c
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_roadsign03.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:572b71cd29f21bb7c6360d7f8255e42fdce5d2868bf97a3e75cbd398e5b94ab5
+size 354785
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_roadsign04.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_roadsign04.ydr
new file mode 100644
index 000000000..7cb3507d5
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_roadsign04.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1b51d4752664da8242f8b5efdbb6bc2cee815ffc343a79fbe6db1ca9f0afaa31
+size 214420
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_sign01.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_sign01.ydr
new file mode 100644
index 000000000..8e742c54d
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_sign01.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e5200636a9f09e5577fc8f758c89f1ecf3f27168e7bf479119f5d2f59ba6b941
+size 8706
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_sign02.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_sign02.ydr
new file mode 100644
index 000000000..6fe59bc0e
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_sign02.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3c59ffd24bed92e6b7217693683ddf91586281c675fd3259df6f370aa58371f8
+size 501763
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_sink.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_sink.ydr
new file mode 100644
index 000000000..1f6c9b01a
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_sink.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ec4dc752aa6479b1b46ebd8d4253e9ed8d68beb6aa626eabd7ff8759db559d3c
+size 308970
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_table.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_table.ydr
new file mode 100644
index 000000000..e0a34ba5e
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_table.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:57589fa86b403a54914789d6b59526c9383d3f4139a2a63c31b48f567d5683f9
+size 3879
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_toilet.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_toilet.ydr
new file mode 100644
index 000000000..a5a0b1d95
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_toilet.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:eca64cab30ef6537131545249c0f641a7a17e9a0b1d8253c1d09e5ba5aab0825
+size 527803
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_toiletroll.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_toiletroll.ydr
new file mode 100644
index 000000000..ea21f2a65
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_toiletroll.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:05ae1f78b84ff4c028067758da9110efa4629a7c42c78dcbd6f906b9ad7ea0dd
+size 135524
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_vent.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_vent.ydr
new file mode 100644
index 000000000..f2891eb1e
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_vent.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a19825f1aeb5fb80989dccdec21535586c5d36a4c87f115502663d5bafafde79
+size 35477
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_windowint.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_windowint.ydr
new file mode 100644
index 000000000..eae7adfda
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation/stream/jd_weighstation_windowint.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:68cd2c2adf97533ed8f0d0cac2a6c7a1039192477ab3892151cc9d236c998a54
+size 2784
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/MainLights/client.lua b/resources/[EGRP-Map-Addons]/jd-weighstation02/MainLights/client.lua
new file mode 100644
index 000000000..0dc0a78e8
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/MainLights/client.lua
@@ -0,0 +1,221 @@
+local redLightModel = `jd_weighstation_lightred`
+local greenLightModel = `jd_weighstation_lightgreen`
+
+-- Active lights per lane (local entities)
+local activeLights = {
+ LaneA = {},
+ LaneB = {}
+}
+
+-- Lane states: true = green, false = red, nil = off
+local laneStates = {
+ LaneA = nil,
+ LaneB = nil
+}
+
+local isInRange = false
+local isNearControl = false
+local playerAllowed = false
+
+-- Per-lane runtime trackers for AutoMode
+local autoTrack = {
+ LaneA = { detected = false, active = false, detectionThread = nil, lastVeh = nil },
+ LaneB = { detected = false, active = false, detectionThread = nil, lastVeh = nil }
+}
+
+-- ============================================================
+-- 1. THE FIX: GHOST OBJECT CLEANUP
+-- ============================================================
+local function ForceCleanUp()
+ local models = { redLightModel, greenLightModel }
+ for _, model in ipairs(models) do
+ -- Find every instance of these lights in the world and delete them
+ local handle, entity = FindFirstObject()
+ local success
+ repeat
+ if GetEntityModel(entity) == model then
+ SetEntityAsMissionEntity(entity, true, true)
+ DeleteEntity(entity)
+ end
+ success, entity = FindNextObject(handle)
+ until not success
+ EndFindObject(handle)
+ end
+end
+
+-- ============================================================
+-- MODEL LOADING
+-- ============================================================
+local function loadModel(model)
+ if not HasModelLoaded(model) then
+ RequestModel(model)
+ local t0 = GetGameTimer()
+ while not HasModelLoaded(model) do
+ Wait(10)
+ if GetGameTimer() - t0 > 5000 then RequestModel(model) end
+ end
+ end
+end
+
+-- ============================================================
+-- SPAWNING (LOCAL ONLY)
+-- ============================================================
+local function clearLaneObjects(lane)
+ if activeLights[lane] then
+ for _, obj in ipairs(activeLights[lane]) do
+ if DoesEntityExist(obj) then
+ SetEntityAsMissionEntity(obj, true, true)
+ DeleteEntity(obj)
+ end
+ end
+ end
+ activeLights[lane] = {}
+end
+
+local function spawnLaneLight(lane, model)
+ loadModel(model)
+ if not Config.MainLights.Lanes[lane] then return end
+
+ clearLaneObjects(lane)
+
+ for _, light in ipairs(Config.MainLights.Lanes[lane].Lights) do
+ local pos = light.coords
+ -- CRITICAL: 5th param 'isNetwork' is FALSE.
+ -- Each player now manages their own visual lights.
+ local obj = CreateObjectNoOffset(model, pos.x, pos.y, pos.z, false, false, false)
+
+ SetEntityCoordsNoOffset(obj, pos.x, pos.y, pos.z)
+ if light.rotation then
+ SetEntityRotation(obj, light.rotation.x, light.rotation.y, light.rotation.z, 2, true)
+ end
+ FreezeEntityPosition(obj, true)
+ SetEntityInvincible(obj, true)
+ table.insert(activeLights[lane], obj)
+ end
+end
+
+-- ============================================================
+-- REFRESH & SYNC
+-- ============================================================
+local function refreshLane(lane)
+ local state = laneStates[lane]
+ if state == nil then
+ clearLaneObjects(lane)
+ return
+ end
+ local model = state and greenLightModel or redLightModel
+ spawnLaneLight(lane, model)
+end
+
+RegisterNetEvent("jd_weighlight02:setLaneState", function(lane, state)
+ laneStates[lane] = state
+ if isInRange then
+ refreshLane(lane)
+ end
+end)
+
+-- ============================================================
+-- INITIALIZATION
+-- ============================================================
+CreateThread(function()
+ ForceCleanUp() -- Clear stuck networked objects from world
+ Wait(1000)
+ TriggerServerEvent("jd_weighlight02:requestState")
+
+ if Config.ACL.UseACL then
+ TriggerServerEvent("weigh_lights02:checkPermissionMain")
+ else
+ playerAllowed = true
+ end
+end)
+
+RegisterNetEvent("weigh_lights02:permissionResultMain", function(allowed)
+ playerAllowed = allowed
+end)
+
+-- ============================================================
+-- RANGE CHECK
+-- ============================================================
+CreateThread(function()
+ while true do
+ Wait(1000)
+ local pCoords = GetEntityCoords(PlayerPedId())
+ local nearAny = false
+ for _, lane in pairs(Config.MainLights.Lanes) do
+ for _, light in ipairs(lane.Lights) do
+ if #(pCoords - light.coords) < (Config.MainLights.LightSpawnRange or 200.0) then
+ nearAny = true
+ break
+ end
+ end
+ if nearAny then break end
+ end
+
+ if nearAny and not isInRange then
+ isInRange = true
+ TriggerServerEvent("jd_weighlight02:requestState")
+ elseif not nearAny and isInRange then
+ isInRange = false
+ clearLaneObjects("LaneA")
+ clearLaneObjects("LaneB")
+ end
+ end
+end)
+
+-- ============================================================
+-- AUTO MODE & CONTROLS
+-- ============================================================
+local laneTriggerCenters = {
+ LaneA = vector3(1357.8718, 710.4775, 80.2744),
+ LaneB = vector3(1351.8080, 714.3249, 80.2743),
+}
+local laneRadius = 2.5
+local leaveThreshold = 8.0
+
+local function isVehicleAllowed(vehicle)
+ if not DoesEntityExist(vehicle) then return false end
+ local modelName = tostring(GetDisplayNameFromVehicleModel(GetEntityModel(vehicle)) or ""):lower()
+ local vClass = GetVehicleClass(vehicle)
+ if Config.RampLight and Config.RampLight.AllowedModels then
+ for _, m in ipairs(Config.RampLight.AllowedModels) do
+ if modelName == tostring(m):lower() then return true end
+ end
+ end
+ return (Config.RampLight and Config.RampLight.AllowedClasses and Config.RampLight.AllowedClasses[vClass])
+end
+
+local function startLaneAutoThread(lane)
+ local track = autoTrack[lane]
+ if not track or track.detectionThread ~= nil then return end
+
+ track.detectionThread = CreateThread(function()
+ while true do
+ Wait(400)
+ if isInRange then
+ local ped = PlayerPedId()
+ local playerVeh = GetVehiclePedIsIn(ped, false)
+
+ if playerVeh ~= 0 and isVehicleAllowed(playerVeh) then
+ local dist = #(GetEntityCoords(playerVeh) - laneTriggerCenters[lane])
+ if dist <= laneRadius and not track.detected then
+ track.detected = true
+ track.lastVeh = playerVeh
+ TriggerServerEvent("jd_weighlight02:autoTrigger", lane)
+ elseif dist > leaveThreshold and track.detected then
+ track.detected = false
+ track.lastVeh = nil
+ TriggerServerEvent("jd_weighlight02:setLaneState", lane, true)
+ end
+ end
+ end
+ end
+ end)
+end
+
+if Config.MainLights and Config.MainLights.AutoMode then
+ CreateThread(function()
+ Wait(2000)
+ startLaneAutoThread("LaneA")
+ startLaneAutoThread("LaneB")
+ end)
+end
\ No newline at end of file
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/MainLights/server.lua b/resources/[EGRP-Map-Addons]/jd-weighstation02/MainLights/server.lua
new file mode 100644
index 000000000..60deb99ce
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/MainLights/server.lua
@@ -0,0 +1,97 @@
+-- ============================================================
+-- LANE STATES (Isolated for Station 02)
+-- ============================================================
+local laneStates02 = {
+ LaneA = Config.MainLights and Config.MainLights.AutoMode and true or nil,
+ LaneB = Config.MainLights and Config.MainLights.AutoMode and true or nil
+}
+
+-- Track if a timer is already running to prevent overlapping threads
+local autoTimers = {
+ LaneA = false,
+ LaneB = false
+}
+
+-- ============================================================
+-- SEND ALL LANE STATES TO PLAYER
+-- ============================================================
+RegisterNetEvent("jd_weighlight02:requestState")
+AddEventHandler("jd_weighlight02:requestState", function()
+ local src = source
+ -- Send current states to the player who just joined or entered range
+ TriggerClientEvent("jd_weighlight02:setLaneState", src, "LaneA", laneStates02.LaneA)
+ TriggerClientEvent("jd_weighlight02:setLaneState", src, "LaneB", laneStates02.LaneB)
+end)
+
+-- ============================================================
+-- SET INDIVIDUAL LANE STATE (manual/admin)
+-- ============================================================
+RegisterNetEvent("jd_weighlight02:setLaneState")
+AddEventHandler("jd_weighlight02:setLaneState", function(lane, state)
+ local src = source
+
+ -- ACL check
+ if Config.ACL.UseACL then
+ if not IsPlayerAceAllowed(src, Config.ACL.MainLights) then
+ print(("[weigh_lights02] Player %d tried to edit lane %s without permission!"):format(src, tostring(lane)))
+ return
+ end
+ end
+
+ if lane ~= "LaneA" and lane ~= "LaneB" then
+ print(("[weigh_lights02] Invalid lane name from player %d: %s"):format(src, tostring(lane)))
+ return
+ end
+
+ -- Update state and sync to ALL players (-1)
+ laneStates02[lane] = state
+ TriggerClientEvent("jd_weighlight02:setLaneState", -1, lane, state)
+end)
+
+-- ============================================================
+-- AUTOMODE TRIGGER (called from client detection)
+-- RED -> 30s -> GREEN
+-- ============================================================
+RegisterNetEvent("jd_weighlight02:autoTrigger")
+AddEventHandler("jd_weighlight02:autoTrigger", function(lane)
+ if not Config.MainLights.AutoMode then return end
+ if lane ~= "LaneA" and lane ~= "LaneB" then return end
+
+ -- Safety: If a timer is already counting down for this lane, ignore new triggers
+ if autoTimers[lane] then return end
+
+ -- Force RED immediately for all players
+ laneStates02[lane] = false
+ TriggerClientEvent("jd_weighlight02:setLaneState", -1, lane, false)
+
+ -- Start the reset timer thread
+ autoTimers[lane] = true
+ CreateThread(function()
+ Wait(30000) -- Wait 30 Seconds
+
+ -- Reset timer tracking so it can be triggered again
+ autoTimers[lane] = false
+
+ -- Only set back to GREEN if the state is still RED
+ -- (This ensures manual overrides by staff aren't broken by the timer)
+ if laneStates02[lane] == false then
+ laneStates02[lane] = true
+ TriggerClientEvent("jd_weighlight02:setLaneState", -1, lane, true)
+ end
+ end)
+end)
+
+-- ============================================================
+-- CHECK PERMISSION (for client UI)
+-- ============================================================
+RegisterNetEvent("weigh_lights02:checkPermissionMain")
+AddEventHandler("weigh_lights02:checkPermissionMain", function()
+ local src = source
+ local allowed = true
+
+ if Config.ACL.UseACL then
+ allowed = IsPlayerAceAllowed(src, Config.ACL.MainLights)
+ end
+
+ TriggerClientEvent("weigh_lights02:permissionResultMain", src, allowed)
+end)
\ No newline at end of file
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/RampLight/client.lua b/resources/[EGRP-Map-Addons]/jd-weighstation02/RampLight/client.lua
new file mode 100644
index 000000000..a301844e2
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/RampLight/client.lua
@@ -0,0 +1,122 @@
+local spawnedObjects = {} -- Now only tracks the single active light set
+local lastState = nil
+local isRampOwner = false -- Tracks if this client is the one currently controlling the light
+
+-- ==========================
+-- DEEP CLEANUP
+-- ==========================
+local function ForceCleanUp()
+ local models = { GetHashKey(Config.RampLight.ModelRed), GetHashKey(Config.RampLight.ModelGreen) }
+ for _, model in ipairs(models) do
+ local handle, entity = FindFirstObject()
+ local success
+ repeat
+ if GetEntityModel(entity) == model then
+ SetEntityAsMissionEntity(entity, true, true)
+ DeleteEntity(entity)
+ end
+ success, entity = FindNextObject(handle)
+ until not success
+ EndFindObject(handle)
+ end
+end
+
+-- ==========================
+-- HELPER FUNCTIONS
+-- ==========================
+local function listContains(list, hash)
+ for _, v in ipairs(list or {}) do
+ if GetHashKey(v) == hash then return true end
+ end
+ return false
+end
+
+local function vehicleIsAllowed(veh)
+ local model = GetEntityModel(veh)
+ local class = GetVehicleClass(veh)
+ if listContains(Config.RampLight.AllowedModels, model) then return true end
+ return Config.RampLight.AllowedClasses[class] == true
+end
+
+-- ==========================
+-- SYNC LOGIC
+-- ==========================
+RegisterNetEvent("jd_ramplight:updateLights", function(state)
+ -- Cleanup previous objects regardless of state
+ for _, obj in ipairs(spawnedObjects) do
+ if DoesEntityExist(obj) then DeleteEntity(obj) end
+ end
+ spawnedObjects = {}
+
+ if state == nil then return end
+
+ RequestModel(Config.RampLight.ModelGreen)
+ RequestModel(Config.RampLight.ModelRed)
+ while not HasModelLoaded(Config.RampLight.ModelGreen) or not HasModelLoaded(Config.RampLight.ModelRed) do Wait(0) end
+
+ local posRed = Config.RampLight.RedCoords
+ local posGreen = Config.RampLight.GreenCoords
+ local zOffset = 0.0
+ local rObj, gObj
+
+ if state == "heavy" then
+ rObj = CreateObjectNoOffset(Config.RampLight.ModelRed, posRed.x, posRed.y, posRed.z + zOffset, false, false, false)
+ gObj = CreateObjectNoOffset(Config.RampLight.ModelGreen, posGreen.x, posGreen.y, posGreen.z + zOffset, false, false, false)
+ elseif state == "light" then
+ gObj = CreateObjectNoOffset(Config.RampLight.ModelGreen, posRed.x, posRed.y, posRed.z + zOffset, false, false, false)
+ rObj = CreateObjectNoOffset(Config.RampLight.ModelRed, posGreen.x, posGreen.y, posGreen.z + zOffset, false, false, false)
+ end
+
+ local function finalizeObj(obj, rot)
+ if obj then
+ if rot then
+ SetEntityRotation(obj, rot.x, rot.y, rot.z, 2, true)
+ elseif Config.RampLight.Heading then
+ SetEntityHeading(obj, Config.RampLight.Heading)
+ end
+ FreezeEntityPosition(obj, true)
+ SetEntityInvincible(obj, true)
+ table.insert(spawnedObjects, obj)
+ end
+ end
+
+ finalizeObj(rObj, Config.RampLight.RedRotation)
+ finalizeObj(gObj, Config.RampLight.GreenRotation)
+end)
+
+-- ==========================
+-- DETECTION THREAD
+-- ==========================
+CreateThread(function()
+ ForceCleanUp()
+ while true do
+ Wait(500)
+ local ped = PlayerPedId()
+ local pCoords = GetEntityCoords(ped)
+ local veh = GetVehiclePedIsIn(ped, false)
+
+ -- Check distance to ramp
+ local dist = #(pCoords - Config.RampLight.CenterPoint)
+ local state = nil
+
+ -- Only the single closest player to the ramp should "Own" the light
+ -- We use a server-side check to see if we are the closest one
+ if veh ~= 0 and GetPedInVehicleSeat(veh, -1) == ped and vehicleIsAllowed(veh) then
+ if dist <= Config.RampLight.DetectionDistance then
+ -- Determine state locally
+ state = "light"
+ local hasTrailer, trailer = GetVehicleTrailerVehicle(veh)
+ if hasTrailer and trailer then
+ local tModel = GetEntityModel(trailer)
+ if listContains(Config.RampLight.HeavyModels, tModel) then state = "heavy" end
+ end
+ end
+ end
+
+ -- Only trigger server if our local state calculation changed
+ if state ~= lastState then
+ lastState = state
+ TriggerServerEvent("jd_ramplight:requestSync", state, dist)
+ end
+ end
+end)
\ No newline at end of file
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/RampLight/server.lua b/resources/[EGRP-Map-Addons]/jd-weighstation02/RampLight/server.lua
new file mode 100644
index 000000000..b011988f5
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/RampLight/server.lua
@@ -0,0 +1,48 @@
+local currentOwner = nil
+local ownerDist = 999.0
+local currentState = nil
+
+RegisterNetEvent("jd_ramplight:requestSync")
+AddEventHandler("jd_ramplight:requestSync", function(state, dist)
+ local src = source
+
+ -- Logic: If there is no owner, or we are closer than the current owner
+ if currentOwner == nil or src == currentOwner or dist < ownerDist then
+ currentOwner = src
+ ownerDist = dist
+ currentState = state
+
+ -- Broadcast the single state to everyone
+ TriggerClientEvent("jd_ramplight:updateLights", -1, currentState)
+ end
+end)
+
+-- Reset owner if they drive too far away or disconnect
+CreateThread(function()
+ while true do
+ Wait(2000)
+ if currentOwner then
+ local ped = GetPlayerPed(currentOwner)
+ local coords = GetEntityCoords(ped)
+ local dist = #(coords - Config.RampLight.CenterPoint)
+
+ -- If owner is no longer valid or drives too far, reset
+ if dist > Config.RampLight.DetectionDistance or ped == 0 then
+ currentOwner = nil
+ ownerDist = 999.0
+ currentState = nil
+ TriggerClientEvent("jd_ramplight:updateLights", -1, nil)
+ else
+ ownerDist = dist
+ end
+ end
+ end
+end)
+
+AddEventHandler('playerDropped', function()
+ if source == currentOwner then
+ currentOwner = nil
+ ownerDist = 999.0
+ TriggerClientEvent("jd_ramplight:updateLights", -1, nil)
+ end
+end)
\ No newline at end of file
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/RoadSignLights/client.lua b/resources/[EGRP-Map-Addons]/jd-weighstation02/RoadSignLights/client.lua
new file mode 100644
index 000000000..3da383dc7
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/RoadSignLights/client.lua
@@ -0,0 +1,143 @@
+local lightSets = {}
+local playerAllowed = false
+
+-- ============================================================
+-- REQUEST PERMISSION IF ACL IS ENABLED (Version 02)
+-- ============================================================
+CreateThread(function()
+ if Config.ACL.UseACL then
+ TriggerServerEvent("weigh_lights02:checkPermission")
+ else
+ playerAllowed = true -- bypass permission
+ end
+end)
+
+RegisterNetEvent("weigh_lights02:permissionResult", function(allowed)
+ playerAllowed = allowed
+end)
+
+-- ============================================================
+-- LOAD CONFIGURED AMBER LIGHT SETS
+-- ============================================================
+CreateThread(function()
+ for _, cfg in ipairs(Config.RoadSigns.LightSets) do
+ table.insert(lightSets, {
+ name = cfg.name,
+ model = cfg.model,
+ coordsA = cfg.coordsA,
+ coordsB = cfg.coordsB,
+ rotA = cfg.rotA or vector3(0.0, 0.0, 0.0),
+ rotB = cfg.rotB or vector3(0.0, 0.0, 0.0),
+ control = cfg.control,
+ distance = cfg.distance or 2.0,
+ propA = nil,
+ propB = nil,
+ flashing = false,
+ pointCreated = false
+ })
+ end
+end)
+
+-- ============================================================
+-- SYNC LOGIC (Version 02)
+-- ============================================================
+CreateThread(function()
+ Wait(1000)
+ TriggerServerEvent("weigh_lights02:requestSync")
+end)
+
+RegisterNetEvent("weigh_lights02:syncAll", function(states)
+ for name, state in pairs(states) do
+ for _, set in ipairs(lightSets) do
+ if set.name == name then
+ if state then StartFlashing(set) else StopFlashing(set) end
+ end
+ end
+ end
+end)
+
+RegisterNetEvent("weigh_lights02:syncSingle", function(setName, newState)
+ for _, set in ipairs(lightSets) do
+ if set.name == setName then
+ if newState then StartFlashing(set) else StopFlashing(set) end
+ end
+ end
+end)
+
+-- ============================================================
+-- FLASHING LOGIC
+-- ============================================================
+function StartFlashing(set)
+ if set.flashing then return end
+ set.flashing = true
+
+ CreateThread(function()
+ -- Offset logic added here
+ local zOffset = -0.09
+ local posA = set.coordsA + vector3(0.0, 0.0, zOffset)
+ local posB = set.coordsB + vector3(0.0, 0.0, zOffset)
+
+ set.propA = CreateObject(set.model, posA.x, posA.y, posA.z, false, false, false)
+ set.propB = CreateObject(set.model, posB.x, posB.y, posB.z, false, false, false)
+
+ SetEntityRotation(set.propA, set.rotA.x, set.rotA.y, set.rotA.z, 2, true)
+ SetEntityRotation(set.propB, set.rotB.x, set.rotB.y, set.rotB.z, 2, true)
+
+ FreezeEntityPosition(set.propA, true)
+ FreezeEntityPosition(set.propB, true)
+
+ local visible = true
+ while set.flashing do
+ visible = not visible
+ SetEntityVisible(set.propA, visible, false)
+ SetEntityVisible(set.propB, not visible, false)
+ Wait(500)
+ end
+
+ if DoesEntityExist(set.propA) then DeleteEntity(set.propA) end
+ if DoesEntityExist(set.propB) then DeleteEntity(set.propB) end
+ set.propA = nil
+ set.propB = nil
+ end)
+end
+
+function StopFlashing(set)
+ set.flashing = false
+end
+
+-- ============================================================
+-- INTERACTION (E-KEY)
+-- ============================================================
+CreateThread(function()
+ while #lightSets == 0 do Wait(100) end
+ if Config.ACL.UseACL then
+ while playerAllowed == false do Wait(100) end
+ end
+
+ for _, set in ipairs(lightSets) do
+ if set.control and not set.pointCreated then
+ local point = lib.points.new(set.control, set.distance)
+ set.pointCreated = true
+
+ function point:nearby()
+ if Config.ACL.UseACL and not playerAllowed then
+ lib.hideTextUI()
+ return
+ end
+
+ if self.currentDistance < set.distance then
+ lib.showTextUI("[E] Toggle Amber Light: " .. set.name)
+ if IsControlJustPressed(0, 38) then -- 38 = E
+ TriggerServerEvent("weigh_lights02:toggleLight", set.name, not set.flashing)
+ end
+ else
+ lib.hideTextUI()
+ end
+ end
+
+ function point:onExit()
+ lib.hideTextUI()
+ end
+ end
+ end
+end)
\ No newline at end of file
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/RoadSignLights/server.lua b/resources/[EGRP-Map-Addons]/jd-weighstation02/RoadSignLights/server.lua
new file mode 100644
index 000000000..626cf1a2d
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/RoadSignLights/server.lua
@@ -0,0 +1,44 @@
+local lightStates02 = {}
+
+-- ============================================================
+-- REQUEST SYNC
+-- ============================================================
+RegisterNetEvent("weigh_lights02:requestSync")
+AddEventHandler("weigh_lights02:requestSync", function()
+ local src = source
+ TriggerClientEvent("weigh_lights02:syncAll", src, lightStates02)
+end)
+
+-- ============================================================
+-- TOGGLE LIGHT
+-- ============================================================
+RegisterNetEvent("weigh_lights02:toggleLight")
+AddEventHandler("weigh_lights02:toggleLight", function(setName, newState)
+ local src = source
+
+ -- Only check ACL if UseACL is true
+ if Config.ACL.UseACL then
+ if not IsPlayerAceAllowed(src, Config.ACL.AmberLights) then
+ print(("[weigh_lights02] Player %d tried to toggle light '%s' without permission!"):format(src, setName))
+ return
+ end
+ end
+
+ lightStates02[setName] = newState
+ TriggerClientEvent("weigh_lights02:syncSingle", -1, setName, newState)
+end)
+
+-- ============================================================
+-- CHECK PERMISSION
+-- ============================================================
+RegisterNetEvent("weigh_lights02:checkPermission")
+AddEventHandler("weigh_lights02:checkPermission", function()
+ local src = source
+ local allowed = true -- default allow if ACL disabled
+
+ if Config.ACL.UseACL then
+ allowed = IsPlayerAceAllowed(src, Config.ACL.AmberLights)
+ end
+
+ TriggerClientEvent("weigh_lights02:permissionResult", src, allowed)
+end)
\ No newline at end of file
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/WeighUi/client.lua b/resources/[EGRP-Map-Addons]/jd-weighstation02/WeighUi/client.lua
new file mode 100644
index 000000000..6f31c203d
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/WeighUi/client.lua
@@ -0,0 +1,212 @@
+-- =============================================
+-- Client logic for weigh station 02
+-- =============================================
+
+local uiOpen = false
+local checkDistance = 12.0
+local truckWeights = {}
+local truckTrailers = {}
+local trucksOnLane = {}
+local lastLaneWeight = {}
+
+local serverCallbacks02 = {}
+
+-- =========================
+-- Helper: Server callback (02)
+-- =========================
+function TriggerServerCallback02(name, cb, ...)
+ local id = math.random(1, 999999)
+ serverCallbacks02[id] = cb
+ TriggerServerEvent(name, id, ...)
+end
+
+RegisterNetEvent("weighstation02:serverCallback", function(id, ...)
+ if serverCallbacks02[id] then
+ serverCallbacks02[id](...)
+ serverCallbacks02[id] = nil
+ end
+end)
+
+-- =========================
+-- Lane initialization
+-- =========================
+for laneName,_ in pairs(Config.MainLights.Lanes) do
+ trucksOnLane[laneName] = {}
+ lastLaneWeight[laneName] = nil
+end
+
+-- =========================
+-- UI Management
+-- =========================
+local function ToggleUI(open)
+ uiOpen = open
+ SetNuiFocus(open, open)
+ SendNUIMessage({ action = open and "showUI" or "hideUI" })
+
+ if open then
+ TriggerServerCallback02("weighstation02:getRecentVehicles", function(recent)
+ SendNUIMessage({ action = "updateRecentVehicles", recent = recent })
+ end)
+ TriggerServerCallback02("weighstation02:getStats", function(stats)
+ SendNUIMessage({
+ action = "updateStats",
+ totalTrucks = stats.totalTrucks or 0,
+ avgWeight = stats.avgWeight or 0
+ })
+ end)
+ end
+end
+
+local function ShowPopup(text)
+ SendNUIMessage({ action = "showPopup", text = text })
+end
+
+local function HidePopup()
+ SendNUIMessage({ action = "hidePopup" })
+end
+
+-- =========================
+-- Helpers
+-- =========================
+local function IsModelInList(modelHash, list)
+ for _, name in ipairs(list or {}) do
+ if GetHashKey(name) == modelHash then return true end
+ end
+ return false
+end
+
+local function GetLaneCenter(lane)
+ local sum = vector3(0.0, 0.0, 0.0)
+ for _, light in pairs(lane.Lights) do
+ sum = sum + light.coords
+ end
+ return sum / #lane.Lights
+end
+
+-- =========================
+-- Control Point Detection
+-- =========================
+CreateThread(function()
+ while true do
+ Wait(0)
+ local ped = PlayerPedId()
+ local pos = GetEntityCoords(ped)
+ local controlPos = Config.MainLights.ControlCoords
+ local dist = #(pos - controlPos)
+
+ if dist < (Config.MainLights.ControlDistance or 2.0) then
+ ShowPopup("[G] Open Weigh Station 02")
+ if IsControlJustPressed(0, 47) and not uiOpen then
+ ToggleUI(true)
+ end
+ else
+ HidePopup()
+ end
+ end
+end)
+
+-- =========================
+-- MAIN TRUCK DETECTION (NEAREST LANE LOGIC)
+-- =========================
+CreateThread(function()
+ while true do
+ Wait(1000)
+ local vehicles = GetGamePool('CVehicle')
+
+ -- Temporary storage for this tick's results
+ local tickResults = {}
+ for laneName, _ in pairs(Config.MainLights.Lanes) do
+ tickResults[laneName] = { weight = 0, truck = nil, minDist = checkDistance + 0.1 }
+ end
+
+ -- Iterate through all vehicles
+ for _, vehicle in ipairs(vehicles) do
+ if DoesEntityExist(vehicle) and not IsEntityDead(vehicle) then
+ local model = GetEntityModel(vehicle)
+
+ if IsModelInList(model, Config.RampLight.AllowedModels) then
+ local vehiclePos = GetEntityCoords(vehicle)
+ local nearestLaneName = nil
+ local nearestLaneDist = checkDistance
+
+ -- Find which specific lane this truck is closest to
+ for laneName, laneData in pairs(Config.MainLights.Lanes) do
+ local laneCenter = GetLaneCenter(laneData)
+ local distToLane = #(vehiclePos - laneCenter)
+
+ if distToLane < nearestLaneDist then
+ nearestLaneDist = distToLane
+ nearestLaneName = laneName
+ end
+ end
+
+ -- If a truck found a "best" lane within range
+ if nearestLaneName then
+ local hasTrailer, trailer = GetVehicleTrailerVehicle(vehicle)
+ local plate = GetVehicleNumberPlateText(vehicle)
+
+ -- PERSISTENT WEIGHT LOGIC
+ if not truckWeights[vehicle] or truckTrailers[vehicle] ~= trailer then
+ local seed = 0
+ for i = 1, #plate do seed = seed + string.byte(plate, i) end
+ math.randomseed(seed)
+
+ if hasTrailer and trailer ~= 0 then
+ local trailerModel = GetEntityModel(trailer)
+ if IsModelInList(trailerModel, Config.RampLight.HeavyModels) then
+ truckWeights[vehicle] = math.random(85000, 125000)
+ elseif IsModelInList(trailerModel, Config.RampLight.LightModels) then
+ truckWeights[vehicle] = math.random(35000, 55000)
+ else
+ truckWeights[vehicle] = math.random(40000, 100000)
+ end
+ else
+ truckWeights[vehicle] = math.random(32000, 45000)
+ end
+
+ math.randomseed(GetGameTimer())
+ truckTrailers[vehicle] = trailer
+
+ -- Server Logging
+ local truckModelName = GetDisplayNameFromVehicleModel(model)
+ local trailerModelName = (hasTrailer and trailer ~= 0) and GetDisplayNameFromVehicleModel(GetEntityModel(trailer)) or "N/A"
+ TriggerServerEvent("weighstation02:logTruck", plate, truckModelName, trailerModelName, truckWeights[vehicle])
+ end
+
+ -- Assign this truck to the lane if it's the closest one found for that lane so far
+ if nearestLaneDist < tickResults[nearestLaneName].minDist then
+ tickResults[nearestLaneName].weight = truckWeights[vehicle]
+ tickResults[nearestLaneName].truck = vehicle
+ tickResults[nearestLaneName].minDist = nearestLaneDist
+ end
+ end
+ end
+ end
+ end
+
+ -- Update UI based on final tick results
+ for laneName, data in pairs(tickResults) do
+ if lastLaneWeight[laneName] ~= data.weight then
+ lastLaneWeight[laneName] = data.weight
+ SendNUIMessage({
+ action = "updateWeight",
+ lane = laneName,
+ weight = data.weight,
+ vehicle = data.truck or nil
+ })
+ end
+ end
+ end
+end)
+
+-- =========================
+-- NUI Callback
+-- =========================
+RegisterNUICallback('closeUI', function(data, cb)
+ if uiOpen then
+ uiOpen = false
+ SetNuiFocus(false, false)
+ SendNUIMessage({ action = "hideUI" })
+ end
+ cb('ok')
+end)
\ No newline at end of file
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/WeighUi/html/script.js b/resources/[EGRP-Map-Addons]/jd-weighstation02/WeighUi/html/script.js
new file mode 100644
index 000000000..4137c0e08
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/WeighUi/html/script.js
@@ -0,0 +1,101 @@
+document.addEventListener("DOMContentLoaded", () => {
+ const win = document.getElementById("browser-window");
+ const closeBtn = document.getElementById("close-btn");
+
+ // Lane status
+ const statusLaneA = document.getElementById("status-laneA");
+ const statusLaneB = document.getElementById("status-laneB");
+
+ // Recent vehicles log
+ const recentVehicles = document.getElementById("recent-vehicles");
+
+ // Totals / Summary
+ const totalTrucksEl = document.getElementById("total-trucks");
+ const avgWeightEl = document.getElementById("avg-weight");
+ const overweightCountEl = document.getElementById("overweight-count");
+
+ // Popup
+ const popup = document.createElement("div");
+ popup.id = "popup";
+ popup.style.position = "fixed";
+ popup.style.top = "20px";
+ popup.style.left = "20px";
+ popup.style.padding = "10px 20px";
+ popup.style.backgroundColor = "#000080";
+ popup.style.color = "#fff";
+ popup.style.fontFamily = "MS Sans Serif, Arial, sans-serif";
+ popup.style.fontSize = "14px";
+ popup.style.fontWeight = "bold";
+ popup.style.border = "2px solid #000";
+ popup.style.display = "none";
+ popup.style.zIndex = "9999";
+ popup.style.borderRadius = "4px";
+ document.body.appendChild(popup);
+
+ // Tracking
+ let recentVehiclesData = [];
+ let totalTrucks = 0;
+ let totalWeight = 0;
+ let overweightCount = 0;
+ let loggedVehicles = {}; // track by unique vehicle ID
+
+ window.addEventListener("message", (event) => {
+ const data = event.data;
+
+ if (data.action === "showUI") {
+ win.style.display = "block";
+ document.body.style.cursor = "default";
+ } else if (data.action === "hideUI") {
+ win.style.display = "none";
+ document.body.style.cursor = "none";
+ } else if (data.action === "showPopup") {
+ popup.innerText = data.text;
+ popup.style.display = "block";
+ } else if (data.action === "hidePopup") {
+ popup.style.display = "none";
+ } else if (data.action === "updateWeight") {
+ const laneWeightEl = data.lane === "LaneA" ? document.getElementById("laneA-weight") : document.getElementById("laneB-weight");
+ laneWeightEl.innerText = data.weight ? data.weight + " LBS" : "-- LBS";
+
+ const statusEl = data.lane === "LaneA" ? statusLaneA : statusLaneB;
+ if (data.weight) {
+ statusEl.innerText = data.weight > 80000 ? `${data.lane}: ⚠️ Overweight` : `${data.lane}: Occupied`;
+ } else {
+ statusEl.innerText = `${data.lane}: Open`;
+ }
+
+ // Only log new vehicles once globally
+ if (data.vehicle && data.weight && !loggedVehicles[data.vehicle]) {
+ loggedVehicles[data.vehicle] = true;
+
+ totalTrucks++;
+ totalWeight += data.weight;
+ if (data.weight > 80000) overweightCount++;
+
+ totalTrucksEl.innerText = totalTrucks;
+ avgWeightEl.innerText = Math.floor(totalWeight / totalTrucks);
+ overweightCountEl.innerText = overweightCount;
+
+ const entry = `${new Date().toLocaleTimeString()} - ${data.lane} - ${data.weight} LBS`;
+ recentVehiclesData.unshift(entry);
+ if (recentVehiclesData.length > 10) recentVehiclesData.pop();
+ recentVehicles.innerHTML = recentVehiclesData.map(e => `${e}`).join("");
+ }
+
+ // Remove from logged if lane is empty
+ if (!data.weight && data.vehicle) {
+ loggedVehicles[data.vehicle] = false;
+ }
+ }
+ });
+
+ closeBtn.addEventListener("click", () => {
+ fetch(`https://${GetParentResourceName()}/closeUI`, {
+ method: 'POST',
+ body: JSON.stringify({})
+ }).finally(() => {
+ win.style.display = "none";
+ document.body.style.cursor = "none";
+ });
+ });
+});
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/WeighUi/html/style.css b/resources/[EGRP-Map-Addons]/jd-weighstation02/WeighUi/html/style.css
new file mode 100644
index 000000000..a62bdf677
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/WeighUi/html/style.css
@@ -0,0 +1,116 @@
+body {
+ font-family: "MS Sans Serif", Arial, sans-serif;
+ background-color: transparent;
+ margin: 0;
+ padding: 0;
+}
+
+/* Browser window */
+#browser-window {
+ width: 800px;
+ height: 600px;
+ background-color: #c0c0c0;
+ border: 3px solid #000;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ display: none;
+ box-shadow: 7px 7px 0px #000;
+ padding: 0;
+ overflow: hidden;
+}
+
+/* Top bar */
+#browser-topbar {
+ height: 30px;
+ background-color: #000080;
+ color: #fff;
+ padding: 6px;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ font-weight: bold;
+ font-size: 14px;
+}
+
+/* URL tab */
+#tab {
+ font-weight: normal;
+ background-color: #c0c0c0;
+ color: #000;
+ padding: 4px 8px;
+ border: 2px inset #fff;
+ margin-left: 4px;
+ font-size: 13px;
+}
+
+/* Close button */
+#close-btn {
+ width: 25px;
+ height: 25px;
+ cursor: pointer;
+ font-weight: bold;
+}
+#close-btn:hover {
+ background: #ff0000;
+ color: #fff;
+}
+
+/* Menu buttons */
+#browser-menu {
+ display: flex;
+ height: 30px;
+ background-color: #c0c0c0;
+ border-bottom: 2px inset #fff;
+}
+.menu-btn {
+ border: 2px outset #fff;
+ margin: 2px;
+ padding: 4px 10px;
+ background-color: #c0c0c0;
+ cursor: pointer;
+ font-size: 13px;
+}
+.menu-btn:active {
+ border-style: inset;
+}
+
+/* Content area */
+#browser-content {
+ background-color: #e0e0e0;
+ padding: 30px;
+ font-size: 16px;
+ border-top: 2px solid #fff;
+ border-bottom: 2px solid #000;
+ height: calc(100% - 30px - 30px);
+ overflow-y: auto;
+}
+
+/* Lane boxes */
+.lane {
+ margin-top: 15px;
+ padding: 10px;
+ border: 2px inset #fff;
+ background-color: #c0c0c0;
+ font-size: 16px;
+}
+.lane-name {
+ font-weight: bold;
+}
+
+/* Lane status, log, summary */
+.lane-status, .log, .summary {
+ margin-top: 20px;
+ padding: 10px;
+ border: 2px inset #fff;
+ background-color: #c0c0c0;
+}
+.lane-status h3, .log h3, .summary h3 {
+ margin: 0 0 5px 0;
+ font-size: 16px;
+}
+.log ul {
+ padding-left: 20px;
+ margin: 0;
+}
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/WeighUi/html/ui.html b/resources/[EGRP-Map-Addons]/jd-weighstation02/WeighUi/html/ui.html
new file mode 100644
index 000000000..07c53fe3e
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/WeighUi/html/ui.html
@@ -0,0 +1,63 @@
+
+
+
+
+Weigh Station UI
+
+
+
+
+
+
+ www.sanandreasdot.gov/panel
+
+
+
+
+
+
+
+
+
Weigh Station Panel
+
+
+
+ Lane A: -- LBS
+
+
+ Lane B: -- LBS
+
+
+
+
+
Lane Status
+
Lane A: Open
+
Lane B: Open
+
+
+
+
+
+
+
+
Summary
+
Total Trucks Today: 0
+
Average Weight: 0 LBS
+
Overweight Trucks: 0
+
+
+
+
+
+
+
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/WeighUi/server.lua b/resources/[EGRP-Map-Addons]/jd-weighstation02/WeighUi/server.lua
new file mode 100644
index 000000000..356e1cf44
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/WeighUi/server.lua
@@ -0,0 +1,41 @@
+-- WeighUi/server.lua (Station 02)
+local recentTrucks02 = {}
+local totalWeightToday02 = 0
+local totalTrucksToday02 = 0
+
+-- =========================
+-- Log a truck
+-- =========================
+RegisterNetEvent("weighstation02:logTruck", function(plate, truckModel, trailerModel, weight)
+ table.insert(recentTrucks02, 1, {
+ plate = plate,
+ truckModel = truckModel,
+ trailerModel = trailerModel or "none",
+ weight = weight
+ })
+
+ if #recentTrucks02 > 10 then
+ table.remove(recentTrucks02)
+ end
+
+ totalTrucksToday02 = totalTrucksToday02 + 1
+ totalWeightToday02 = totalWeightToday02 + weight
+end)
+
+-- =========================
+-- Get recent vehicles
+-- =========================
+RegisterNetEvent("weighstation02:getRecentVehicles", function(id)
+ TriggerClientEvent("weighstation02:serverCallback", source, id, recentTrucks02)
+end)
+
+-- =========================
+-- Get stats
+-- =========================
+RegisterNetEvent("weighstation02:getStats", function(id)
+ local avgWeight = totalTrucksToday02 > 0 and totalWeightToday02 / totalTrucksToday02 or 0
+ TriggerClientEvent("weighstation02:serverCallback", source, id, {
+ totalTrucks = totalTrucksToday02,
+ avgWeight = math.floor(avgWeight)
+ })
+end)
\ No newline at end of file
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/config.lua b/resources/[EGRP-Map-Addons]/jd-weighstation02/config.lua
new file mode 100644
index 000000000..eb2d64c85
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/config.lua
@@ -0,0 +1,101 @@
+Config = {}
+
+-- =============================================
+-- ACE PERMISSIONS
+-- =============================================
+Config.ACL = {
+ UseACL = false, -- set to false to disable ACE checks allowing anyone to use the light controls
+ MainLights = "weighstation.mainlights",
+ AmberLights = "weighstation.amberlights"
+}
+
+-- =============================================
+-- MAIN WEIGH STATION TRAFFIC LIGHTS
+-- =============================================
+Config.MainLights = {
+ AutoMode = true,
+ Lanes = {
+ LaneA = {
+ Lights = {
+ {
+ coords = vector3(1367.994019, 722.601624, 85.697609),
+ rotation = vector3(0.0, 0.0, 120.0)
+ },
+ {
+ coords = vector3(1357.042480, 703.875916, 84.116707),
+ rotation = vector3(20.0, -90.0, 140.00)
+ },
+ },
+ },
+
+ LaneB = {
+ Lights = {
+ {
+ coords = vector3(1362.476318, 727.231506, 85.748299),
+ rotation = vector3(0.0, 0.0, 120.0)
+ },
+ {
+ coords = vector3(1351.536743, 708.495789, 84.167625),
+ rotation = vector3(20.0, -90.0, 140.00)
+ },
+ },
+ }
+ },
+
+ ControlCoords = vector3(1340.9390, 724.1892, 80.4113),
+ ControlDistance = 1.0,
+ LightSpawnRange = 200.0,
+ ResyncTime = 60000
+}
+
+
+-- =============================================
+-- ROAD SIGN / AMBER LIGHT SETS
+-- =============================================
+Config.RoadSigns = {
+ LightSets = {
+ {
+ name = "Vinewood Hills",
+ model = `jd_weighstation_lightamber`,
+ coordsA = vector3(1571.847534, 1026.343872, 81.914368),
+ rotA = vector3(0.0, 0.0, 150.0),
+ coordsB = vector3(1570.765015, 1026.968872, 81.914368),
+ rotB = vector3(0.0, 0.0, 150.0),
+
+ control = vector3(1571.1840, 1026.4595, 79.3332),
+ distance = 1.0
+ }
+ }
+}
+
+
+
+-- =============================================
+-- WEIGH STATION RAMP LIGHT SYSTEM
+-- =============================================
+Config.RampLight = {
+ CenterPoint = vector3(1417.9015, 778.4647, 80.4922),
+ DetectionDistance = 19.0,
+ ModelGreen = `jd_weightstation02_greencheck`,
+ ModelRed = `jd_weightstation02_redx`,
+ RedCoords = vector3(1415.399902, 762.453735, 88.028511),
+ GreenCoords = vector3(1413.101807, 764.382080, 88.028511),
+ AllowedClasses = {
+ [18] = false,
+ [20] = false,
+ },
+AllowedModels = { "phantom", "hauler", "packer", "phantom3", "hauler2", "commandtruck", "commandtruckr", "01inter4700", "bc950m", "bc950mf", "bcap1055", "bcd8t", "bce55", "bcf750tma", "bcfl", "bchauler", "bcls", "bcmack", "bct590", "brickade3", "classicxl", "ct660", "ct660dump", "Ford9000", "FreightlinerToter", "galaxyroamer", "kw900", "libexcavator", "mixer3", "pete352custom", "razerdump", "semihauler", "t680", "t680a", "trans_mbenzarocs", "vnl780", "w900", "baggedram", "bc24v", "bc205500w", "bclandscape", "cartr16", "cat140m3", "cat745c", "hdwrecker", "rollback1", "rollback14", "tow", "towing", "23rambh", "23ramtdm", "23sirchas", "193500hd", "brf450", "00f350dually", "00f350d", "20denalihd", "22silvlt", "22sierra", "megacabdually", "vframb", "vframg", "packer2" }, -- ← container truck models
+
+ HeavyModels = {
+ "TRAILER", -- ← container heavy trailers
+ "TRAILERS", "TRAILER2", "TRAILER3", "TRAILER4",
+ "trailers", "trailers2", "trailers3", "trailers4",
+ "freighttrailer", "armytanker", "docktrailer"
+ },
+
+ LightModels = {
+ "tr2", "tr3", "tr4", "trflat", -- ← container light trailers
+ "tanker", "tanker2", "trailerlogs",
+ "tvtrailer", "baletrailer", "graintrailer"
+ },
+}
\ No newline at end of file
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/fxmanifest.lua b/resources/[EGRP-Map-Addons]/jd-weighstation02/fxmanifest.lua
new file mode 100644
index 000000000..21b1c2152
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/fxmanifest.lua
@@ -0,0 +1,34 @@
+fx_version 'cerulean'
+game 'gta5'
+
+lua54 'yes'
+author 'John Chin'
+description 'Weigh Stations (2nd Location)'
+version '1.0.0'
+
+shared_scripts {
+ '@ox_lib/init.lua',
+ 'config.lua'
+}
+
+client_scripts {
+ 'MainLights/client.lua',
+ 'RoadSignLights/client.lua',
+ 'RampLight/client.lua',
+ 'WeighUi/client.lua'
+}
+
+server_scripts {
+ 'MainLights/server.lua',
+ 'RoadSignLights/server.lua',
+ 'RampLight/server.lua',
+ 'WeighUi/server.lua'
+}
+
+ui_page 'WeighUi/html/ui.html'
+
+files {
+ 'WeighUi/html/ui.html',
+ 'WeighUi/html/style.css',
+ 'WeighUi/html/script.js'
+}
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/_manifest.ymf b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/_manifest.ymf
new file mode 100644
index 000000000..9e131d233
Binary files /dev/null and b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/_manifest.ymf differ
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/apa_ch2_03b.ymap b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/apa_ch2_03b.ymap
new file mode 100644
index 000000000..cecedebd4
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/apa_ch2_03b.ymap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7f854975ec37e6f59c4e60c7505430ebd047f341bdffec7040bf39ffc3ca3157
+size 14676
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/apa_ch2_03b_critical_2.ymap b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/apa_ch2_03b_critical_2.ymap
new file mode 100644
index 000000000..156e43158
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/apa_ch2_03b_critical_2.ymap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:46d4d00797cc829bac8fd8e073ee0f9ce9e1f3e9718af87ae04fddfeca9b7edc
+size 16816
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/apa_ch2_03b_long_0.ymap b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/apa_ch2_03b_long_0.ymap
new file mode 100644
index 000000000..651c23adb
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/apa_ch2_03b_long_0.ymap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a77101e86a63656e1380f4d3479b584117cffc0a8e9016ff7c146410292d5ec5
+size 15299
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/apa_ch2_03b_long_1.ymap b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/apa_ch2_03b_long_1.ymap
new file mode 100644
index 000000000..6fb33e2d3
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/apa_ch2_03b_long_1.ymap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4cd27ceb0a4f7bd3d8a0a42e19851c8bceedda1d994742b97e883511962e9eb9
+size 12049
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/apa_ch2_03b_strm_1.ymap b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/apa_ch2_03b_strm_1.ymap
new file mode 100644
index 000000000..cd7f4614e
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/apa_ch2_03b_strm_1.ymap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cc40fbb90790ab8e1930d25fe173f5edc115dbed9533698d6329eeedf34873c5
+size 17670
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_10.ybn b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_10.ybn
new file mode 100644
index 000000000..ba78891b0
Binary files /dev/null and b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_10.ybn differ
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_6.ybn b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_6.ybn
new file mode 100644
index 000000000..40e5e0ca7
Binary files /dev/null and b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_6.ybn differ
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_7.ybn b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_7.ybn
new file mode 100644
index 000000000..96e1a4d7b
Binary files /dev/null and b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_7.ybn differ
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_9.ybn b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_9.ybn
new file mode 100644
index 000000000..e677d4b9f
Binary files /dev/null and b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_9.ybn differ
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_decal_01.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_decal_01.ydr
new file mode 100644
index 000000000..ab0d27c77
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_decal_01.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c22f93cfa8d1fe61f23b892b0be6b3f2091e01ec2e0f207c42974929be5eb184
+size 3341
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_decal_10.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_decal_10.ydr
new file mode 100644
index 000000000..a6e32cca3
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_decal_10.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5734b5db362128aeb5f2c0414dbd862d0c5132c5138a62be8e6a8b35f7e0b01b
+size 1585
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_decal_14.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_decal_14.ydr
new file mode 100644
index 000000000..f39713818
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_decal_14.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:def03f7ea2e87acf13c120049259bb4030f27a20741235f8c983c1b0e8700bc2
+size 15640
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_grass_0.ymap b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_grass_0.ymap
new file mode 100644
index 000000000..638aa28cb
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_grass_0.ymap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:64d70d8e17f15937dbf6f6e2147b9651734903b5a45c41df8105e5b520f69604
+size 2395309
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_grass_1.ymap b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_grass_1.ymap
new file mode 100644
index 000000000..7ec268266
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_grass_1.ymap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:34d77f9c60834ee0113b4bb7d347d46e9702c1fc0a47f74d29096724c523475c
+size 2219093
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_land16.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_land16.ydr
new file mode 100644
index 000000000..2bcfc4fc7
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_land16.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e0b7a504971e471fb0a43266f8d3a9f216546d27ea69789d5436646dd6006d39
+size 1413915
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_land19.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_land19.ydr
new file mode 100644
index 000000000..6fb04f3d6
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_land19.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:74253d47234949eec84c895f20f9d2d9ba9421ee22d96a9383175c638f539b62
+size 980534
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_road_decal.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_road_decal.ydr
new file mode 100644
index 000000000..203ff24ec
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_road_decal.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:494b878862ab87f3d8622c2d499137bb5dd11b1f093697a891bcde048ef80018
+size 26451
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_sloda_children.ydd b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_sloda_children.ydd
new file mode 100644
index 000000000..882b70ab8
Binary files /dev/null and b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch2_03b_sloda_children.ydd differ
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch3_rd2b_1.ybn b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch3_rd2b_1.ybn
new file mode 100644
index 000000000..1767b6cb9
Binary files /dev/null and b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch3_rd2b_1.ybn differ
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch3_rd2b_rd1_17.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch3_rd2b_rd1_17.ydr
new file mode 100644
index 000000000..29cc2633a
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch3_rd2b_rd1_17.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6fb54d602f0e3d4de3d22017d2bfeeeb32ee1e43188b1a67612c13fe8ab9bdf0
+size 35361
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch3_rd2b_rd1_18.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch3_rd2b_rd1_18.ydr
new file mode 100644
index 000000000..c556a2965
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch3_rd2b_rd1_18.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f5a3bf1098177e04d96b38c5eb82b89f978d485ccaa02a5dfa8e3ef254ddf444
+size 33504
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch3_rd2b_rd1_19.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch3_rd2b_rd1_19.ydr
new file mode 100644
index 000000000..337408c4e
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/ch3_rd2b_rd1_19.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f2c3c84337f4fed3a01aba8fc9c6824e8a4de56ab2439e0fa6cbb2853efffeb5
+size 42233
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/fwy_04_3.ybn b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/fwy_04_3.ybn
new file mode 100644
index 000000000..d2d671b97
Binary files /dev/null and b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/fwy_04_3.ybn differ
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/hei_fwy_04.ymap b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/hei_fwy_04.ymap
new file mode 100644
index 000000000..86b239d4f
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/hei_fwy_04.ymap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e29bbe5afd86c00b21dac7b538a4087242f29b7e708a9b27119f311eca779d75
+size 4709
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/hei_fwy_04_long_0.ymap b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/hei_fwy_04_long_0.ymap
new file mode 100644
index 000000000..c89b652fc
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/hei_fwy_04_long_0.ymap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:230df36ecf24971b48888fa7e19b0d8f4b276709aeae539d47d53ed28e80912e
+size 3175
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/hei_fwy_04_strm_0.ymap b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/hei_fwy_04_strm_0.ymap
new file mode 100644
index 000000000..fe29ba93d
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/hei_fwy_04_strm_0.ymap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9ef4e5dbe14fb47baa16e57be0aed72cd891d455a5a808f24783ea937c546970
+size 11078
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/hi@ch2_03b_16.ybn b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/hi@ch2_03b_16.ybn
new file mode 100644
index 000000000..2145b9088
Binary files /dev/null and b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/hi@ch2_03b_16.ybn differ
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_ext.ymap b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_ext.ymap
new file mode 100644
index 000000000..e5058c733
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_ext.ymap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:eac77e9d72a1b34dd7bffc1c3d42ac44371a257f274d7afa96fade9707ba6838
+size 3952
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_ext.ytd b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_ext.ytd
new file mode 100644
index 000000000..1fe619e88
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_ext.ytd
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:539d7cd8e877f016398111571d478b9abccb157801bef4cb2019f24bca657b68
+size 6577287
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_ext.ytyp b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_ext.ytyp
new file mode 100644
index 000000000..5cb8060e3
Binary files /dev/null and b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_ext.ytyp differ
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_ext02.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_ext02.ydr
new file mode 100644
index 000000000..1fcfce52c
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_ext02.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:27a33f62ee2cf31282af6dd265f5fddb577981a224ac9d64b48bab28ebaebbd6
+size 552370
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_ext_lod.ymap b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_ext_lod.ymap
new file mode 100644
index 000000000..8b5c8d547
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_ext_lod.ymap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3b8cec02206b042c89830bc53f19d259066e5e1a1d90723302337c6d763a504d
+size 1164
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_extlod.ytd b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_extlod.ytd
new file mode 100644
index 000000000..e28e04b8f
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_extlod.ytd
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b39af3b6da0b7fcc9941580faaea1d4c1b7ec177cdeae3efd4dc39bea3297b87
+size 11290722
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_exttrim.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_exttrim.ydr
new file mode 100644
index 000000000..4472089af
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_exttrim.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:250d91bdcb68cbe2b045cd17430a72c036e50dfa5011ed6159dfb8a2e7a0cebe
+size 1609
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_grnddec.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_grnddec.ydr
new file mode 100644
index 000000000..2bb61e986
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_grnddec.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:59fa2b853fece9ba1c8b57af79ee512466b8236457062a49732f899302bf5f0f
+size 773805
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_int.ymap b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_int.ymap
new file mode 100644
index 000000000..e47a5819d
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_int.ymap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:74268e482cfef168f224c2b9ea6b31d5a3266ddbc55ed69c2724cc23f8dff70d
+size 1166
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_int_lod.ymap b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_int_lod.ymap
new file mode 100644
index 000000000..7a46665d3
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_int_lod.ymap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2650430ab90b1f79be21f7bc095c44258192987f5b5188762b19b2614c1e8e06
+size 1173
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_lightwires.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_lightwires.ydr
new file mode 100644
index 000000000..ef37535f7
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_lightwires.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d6ba9df8f8eaf9523b19a2e24ad8c3fd434afb76cf80700c1ba2c3ea07b7d4e2
+size 446808
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_parking01.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_parking01.ydr
new file mode 100644
index 000000000..a2bdd0a85
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_parking01.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5ab6ecaca34fed8b4dd5b57f9eee0eeec1a0f3c79f8851475282bd8c78a349b9
+size 369296
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_scalebuild.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_scalebuild.ydr
new file mode 100644
index 000000000..8dc87ff5f
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_scalebuild.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6dc4ca78fb8d87d6903a3ea89f28203340abe98743e2a77752907ff901823ce9
+size 79064
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_signpole01.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_signpole01.ydr
new file mode 100644
index 000000000..67169784a
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02_signpole01.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fae68103c4c7695311bd850875014472c4964ec1ccea02088ee137d899251c8c
+size 212747
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02bath.ybn b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02bath.ybn
new file mode 100644
index 000000000..21553a6bb
Binary files /dev/null and b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02bath.ybn differ
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02bath_det01.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02bath_det01.ydr
new file mode 100644
index 000000000..413655df5
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02bath_det01.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:baf5ffa8c37e1a12a0e4ce93ceee7de7dc90e94d836d2c73a52e74c378b179d6
+size 626384
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02bath_det02.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02bath_det02.ydr
new file mode 100644
index 000000000..b1eab668d
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02bath_det02.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:446dfb79d866c2850a2b0e57113b12b232327159c94a7b2aa5ce3c69ceb3447c
+size 454469
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02bath_doorframe.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02bath_doorframe.ydr
new file mode 100644
index 000000000..47ee559e4
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02bath_doorframe.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0663ef3e319f875c5497e9fdf2b9164fedecfb42443f7934ff595166f1536e19
+size 5280
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02bath_int.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02bath_int.ydr
new file mode 100644
index 000000000..2e01804b3
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02bath_int.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ae04de1ef5d0fef4b6d1fd2a1095bc4fd62ba3186eab64a52cf723e96b88e514
+size 2222
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02bath_int.ymap b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02bath_int.ymap
new file mode 100644
index 000000000..5aa8efc9b
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02bath_int.ymap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4fe7715fe0290d336da540f0ad2ebf5c66b1d324a55b179d513f724b118190d8
+size 1171
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02bath_int.ytyp b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02bath_int.ytyp
new file mode 100644
index 000000000..00210e1c0
Binary files /dev/null and b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02bath_int.ytyp differ
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02bath_intlod.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02bath_intlod.ydr
new file mode 100644
index 000000000..960890f1a
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02bath_intlod.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:86c00b07dc0fd35b885aec2c0b27717ee35600644e34054c31c589d0f22af8f5
+size 66910
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02bath_intlod.ymap b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02bath_intlod.ymap
new file mode 100644
index 000000000..2d584e39d
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02bath_intlod.ymap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b812347b18cd939ac291c11f3f89324cba417d373b8b1cbe1dea17a653bb5134
+size 1175
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02bath_lights01.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02bath_lights01.ydr
new file mode 100644
index 000000000..acfa7d671
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02bath_lights01.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:42ab6cfd87e29d30f365bef37a226c57a84316fa6e7f8d541cb537f894cf3d43
+size 839
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02bath_mirror.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02bath_mirror.ydr
new file mode 100644
index 000000000..8b6e8d5ec
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation02bath_mirror.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:824c5329889fdc411f5c90bab8dd063b3fe95ab342ff66b0b0284c610a73120e
+size 3182
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation_02_det01.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation_02_det01.ydr
new file mode 100644
index 000000000..d12311e3d
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation_02_det01.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:933c9c6ef57e6bdfcba782304df33da94490259bce56712f64731e0ad5e802a5
+size 545636
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation_02_outsidelight.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation_02_outsidelight.ydr
new file mode 100644
index 000000000..2bb6e8243
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weighstation_02_outsidelight.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:da2d4b058f5b10fec3db402f5a030ad58a4c65033134fdf53c2853e117a356f2
+size 45471
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_extlod.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_extlod.ydr
new file mode 100644
index 000000000..a46c80384
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_extlod.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:62dbbb315adf6ece8c0db68247f5c8a33b2cd973b9f71faf0fcae6a010cb0bb1
+size 1705516
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_extplot.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_extplot.ydr
new file mode 100644
index 000000000..2ed6eb14d
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_extplot.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:143c1c64794008ac68003e330bf925c9c8480c91e6f101e11de761ea883fcd95
+size 15206
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_greencheck.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_greencheck.ydr
new file mode 100644
index 000000000..a14af4135
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_greencheck.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5c64011b2b6102f7c70673f9f7c01ea948c128ce6246c5321bf3a44116993a53
+size 939
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_land.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_land.ydr
new file mode 100644
index 000000000..af0fd9aed
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_land.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3c556c91ded1562d0b6bfdc46a323b254b33d91f722d980fe5362b780ce5af52
+size 234929
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_land1.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_land1.ydr
new file mode 100644
index 000000000..4eec9f227
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_land1.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2196cccbc1572e9ffd6f940def22ecdd7fd47297336d8b94647ab7ff698427d3
+size 627759
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_land2.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_land2.ydr
new file mode 100644
index 000000000..223df4f6d
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_land2.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f81d07d3f9eec22e66ed5b1075aa9d7411fea92cf06f4e54ccba93002c4080c5
+size 222985
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_land3.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_land3.ydr
new file mode 100644
index 000000000..04c7b9e64
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_land3.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c926f383040b4b662a59066c416dc9028b48877eeeebdd6e1783bc2c1deca0ce
+size 233013
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_lines.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_lines.ydr
new file mode 100644
index 000000000..9047fd65e
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_lines.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2beceb5be8d36e3a2eef3cb85de8ccf2d8e0f87010184fa553317140c3bd6de5
+size 127187
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_lines01.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_lines01.ydr
new file mode 100644
index 000000000..9dfbe3d2c
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_lines01.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:40f1117abbd294a022ca963e046b553a72ab11f6e782a88439fafc79f23073b7
+size 118745
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_polesign.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_polesign.ydr
new file mode 100644
index 000000000..dce91f65b
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_polesign.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f366e44177f8df857149279b94f7c7aaca95a2bb4e3c9b189ad3c48533aeb3df
+size 2156
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_redx.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_redx.ydr
new file mode 100644
index 000000000..a9abeb2c8
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_redx.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6428fda3780ee6e94e5cc4aca6335c6f8bb7608432769d7f9f4e223e4a7d859b
+size 1012
diff --git a/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_roadwall01.ydr b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_roadwall01.ydr
new file mode 100644
index 000000000..fec5665fa
--- /dev/null
+++ b/resources/[EGRP-Map-Addons]/jd-weighstation02/stream/jd_weightstation02_roadwall01.ydr
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ad55e681d9fdddefbe431f010217fb76b45d32e17bd8ef8060ab9ca5b1833522
+size 157517
diff --git a/server.cfg b/server.cfg
index b56dfc717..fb796e96f 100644
--- a/server.cfg
+++ b/server.cfg
@@ -660,7 +660,19 @@ ensure ed_white_mansion
ensure jd-dot1
ensure int_mphouse01
ensure RealCalifornIArchitecture
-ensure 25sandydealership_rsm
+
+
+
+ensure jd-weighstation
+ensure jd-weighstation02
+ensure jd-scenarios
+
+ [jd-weighstations]
+ensure jd-weighstation01
+ensure jd-weighstation-shared
+ensure
+
+
#[-----[25sandyltdpizza]-----]
ensure
@@ -1096,7 +1108,8 @@ add_ace builtin.everyone rhud.priority.reset allow
add_ace builtin.everyone rhud.player.heal_self allow
add_ace group.admin rhud.player.heal_other allow
-
+add_ace group.admin weighstation.mainlights allow
+add_ace group.admin weighstation.amberlights allow