diff --git a/resources/firehose/settings/trucks.ini b/resources/firehose/settings/trucks.ini
index 443e14619..97cffadb7 100644
--- a/resources/firehose/settings/trucks.ini
+++ b/resources/firehose/settings/trucks.ini
@@ -632,3 +632,14 @@ Capacity 520
CanAttachToOthers false
Weapons WATER,FOAM,PRESSURE
}
+
+
+{[TruckInfo]
+Model ftanker
+AttachOffset -1,0.65,0.2
+OtherAttachOffset -1,0.8,-0.2
+HelpTextOffset -1.205,0.7,0.4
+Capacity 120
+CanAttachToOthers false
+Weapons WATER,FOAM,PRESSURE
+}
diff --git a/resources/tanker_water-main/.gitattributes b/resources/tanker_water-main/.gitattributes
new file mode 100644
index 000000000..dfe077042
--- /dev/null
+++ b/resources/tanker_water-main/.gitattributes
@@ -0,0 +1,2 @@
+# Auto detect text files and perform LF normalization
+* text=auto
diff --git a/resources/tanker_water-main/README.md b/resources/tanker_water-main/README.md
new file mode 100644
index 000000000..86327553d
--- /dev/null
+++ b/resources/tanker_water-main/README.md
@@ -0,0 +1,22 @@
+# Tanker Water Script
+
+Tanker water release script for the Free Mode Designs LTD Tanker
+
+# How to use
+
+- Ensure the spawncode in the config.lua is the same as the vehicle spawn code
+- When sat in the vehicle, run the command /fillpool,
+- When you want to empty the pool, run the command /emptypool
+
+# Future Developments
+
+In the future, I would like to be able to link it up with some other products to allow for refilling of engines etc from the tanker.
+
+If anyone wants to contribute to the project please feel free to shoot me a DM on discord @ JackTheDev
+
+# Contact us
+
+- Website -> [https://www.freemodedesigns.shop](https://www.freemodedesigns.shop)
+- Discord -> [https://discord.gg/fmd](https://discord.gg/fmd)
+- Email - > jackthedev@freemodedesigns.shop
+
diff --git a/resources/tanker_water-main/client/client.lua b/resources/tanker_water-main/client/client.lua
new file mode 100644
index 000000000..23b38dd88
--- /dev/null
+++ b/resources/tanker_water-main/client/client.lua
@@ -0,0 +1,206 @@
+local display = false
+local fillingUp = false
+
+local currentVeh
+local txdDetail
+local duiObjDetail
+local duiDetail
+local txDetail
+
+local txdBump
+local duiObjBump
+local duiBump
+local txBump
+
+
+Citizen.CreateThread(function()
+ while true do
+ Citizen.Wait(1)
+ if display then
+ -- If ped gets out of vehicle
+ if not IsPedSittingInAnyVehicle(PlayerPedId()) then
+ SetDisplay(false)
+ end
+ elseif IsPedSittingInAnyVehicle(PlayerPedId()) and not display and fillingUp then
+
+ local currentVeh = GetDisplayNameFromVehicleModel(GetEntityModel(GetVehiclePedIsIn(PlayerPedId(), false)))
+ local inVehicle = false
+
+ if currentVeh == config.spawnCodes then
+ inVehicle = true
+ end
+
+ if inVehicle then
+ SetDisplay(true)
+ end
+
+ end
+ end
+end)
+
+-- Commands
+RegisterCommand("fillpool", function()
+ local ped = PlayerPedId()
+ local pedCoords = GetEntityCoords(ped)
+ currentVeh = GetDisplayNameFromVehicleModel(GetEntityModel(GetVehiclePedIsIn(ped, false)))
+ local vehEntity = GetVehiclePedIsIn(GetPlayerPed(-1), false)
+ local inVehicle = False
+
+ for _, data in pairs(config.spawnCode) do
+ if data == currentVeh then
+ inVehicle = true
+ break
+ end
+ end
+
+ if inVehicle then
+ if IsVehicleAConvertible(vehEntity, false) == 1 then
+ fillingUp = true
+
+ if config.useUI then
+ SetDisplay(true)
+ SendNUIMessage({
+ waterType = "filling"
+ })
+ end
+
+ TriggerServerEvent("setWaterTexture")
+
+ SetConvertibleRoof(vehEntity)
+ LowerConvertibleRoof(vehEntity, false)
+
+ SetVehicleModKit(vehEntity, 0)
+ SetVehicleMod(vehEntity, 37, GetNumVehicleMods(vehEntity, 37)-1, false)
+
+ TriggerServerEvent("createWaterParticles", vehEntity)
+
+ Citizen.CreateThread(function()
+ Citizen.Wait(50000) -- 50 Seconds
+
+ fillingUp = false
+ end)
+
+ end
+ else
+ notify("You need to be in the tanker truck to do this!")
+ end
+
+end,false)
+
+
+RegisterCommand("emptypool", function()
+ local ped = PlayerPedId()
+ local pedCoords = GetEntityCoords(ped)
+ local currentVeh = GetDisplayNameFromVehicleModel(GetEntityModel(GetVehiclePedIsIn(ped, false)))
+ local vehEntity = GetVehiclePedIsIn(GetPlayerPed(-1), false)
+ local inVehicle = False
+
+
+ for _, data in pairs(config.spawnCode) do
+ if data == currentVeh then
+ inVehicle = true
+ break
+ end
+ end
+
+
+ if inVehicle then
+ if not fillingUp then
+ if IsVehicleAConvertible(vehEntity, false) == 1 then
+ fillingUp = false
+
+ if config.useUI then
+ SetDisplay(true)
+ SendNUIMessage({
+ waterType = "emptying"
+ })
+ end
+
+ local state = GetConvertibleRoofState(vehEntity)
+
+ if state ~= 0 then
+ SetConvertibleRoof(vehEntity)
+ RaiseConvertibleRoof(vehEntity, false)
+ end
+
+ Citizen.CreateThread(function()
+ Citizen.Wait(50000) -- 50 Seconds
+
+ TriggerServerEvent("resetWaterTexture")
+ end)
+
+ end
+ else
+ notify("You need to wait to complete filling up before emptying.")
+ end
+ else
+ notify("You need to be in the tanker truck to do this!")
+ end
+
+end,false)
+
+
+RegisterNetEvent("waterParticles")
+AddEventHandler("waterParticles", function(vehEntity)
+
+ local waterSpoutBone = config.bone
+ local boneSpoutIndex = GetEntityBoneIndexByName(vehEntity, waterSpoutBone)
+
+ if boneSpoutIndex ~= -1 then
+
+ Citizen.CreateThread(function()
+ UseParticleFxAssetNextCall('core')
+ waterSpout = StartParticleFxLoopedOnEntityBone('water_cannon_jet', vehEntity, 0, 0, 0 , 180.0, 0.0, 0.0, boneSpoutIndex, 0.50, false, false, false)
+ Citizen.Wait(50000) -- 50 Seconds
+ StopParticleFxLooped(waterSpout)
+ end)
+
+ end
+
+end)
+
+RegisterNetEvent("updateTexture")
+AddEventHandler("updateTexture", function(toggle)
+
+ if toggle then
+
+ -- Detail
+ txdDetail = CreateRuntimeTxd("duiTxdDetail")
+ duiObjDetail = CreateDui(config.detailTexture, config.detailSizeX, config.detailSizeY)
+ _G.duiObjDetail = duiObjDetail
+ duiDetail = GetDuiHandle(duiObjDetail)
+ txDetail = CreateRuntimeTextureFromDuiHandle(txdDetail, 'duiTexDetail', duiDetail)
+ AddReplaceTexture(currentVeh, config.detailTextureName, 'duiTxdDetail', 'duiTexDetail')
+
+ -- Bump
+ txdBump = CreateRuntimeTxd("duiTxdBump")
+ duiObjBump = CreateDui(config.bumpTexture, config.bumpSizeX, config.bumpSizeY)
+ _G.duiObjBump = duiObjBump
+ duiBump = GetDuiHandle(duiObjBump)
+ txBump = CreateRuntimeTextureFromDuiHandle(txdBump, 'duiTexBump', duiBump)
+ AddReplaceTexture(currentVeh, config.bumpTextureName, 'duiTxdBump', 'duiTexBump')
+
+ else
+
+ RemoveReplaceTexture(currentVeh, config.detailTextureName)
+ RemoveReplaceTexture(currentVeh, config.bumpTextureName)
+
+ end
+
+end)
+
+
+function notify(str)
+ BeginTextCommandThefeedPost("STRING")
+ AddTextComponentSubstringPlayerName(str)
+ EndTextCommandThefeedPostTicker(true, false)
+end
+
+
+function SetDisplay(bool)
+ display = bool
+ SendNUIMessage({
+ type = "ui",
+ status = bool,
+ })
+end
diff --git a/resources/tanker_water-main/client/html/imgs/lights.png b/resources/tanker_water-main/client/html/imgs/lights.png
new file mode 100644
index 000000000..d9d3abefd
Binary files /dev/null and b/resources/tanker_water-main/client/html/imgs/lights.png differ
diff --git a/resources/tanker_water-main/client/html/imgs/water.png b/resources/tanker_water-main/client/html/imgs/water.png
new file mode 100644
index 000000000..9f81567a5
Binary files /dev/null and b/resources/tanker_water-main/client/html/imgs/water.png differ
diff --git a/resources/tanker_water-main/client/html/index.css b/resources/tanker_water-main/client/html/index.css
new file mode 100644
index 000000000..ab23de811
--- /dev/null
+++ b/resources/tanker_water-main/client/html/index.css
@@ -0,0 +1,151 @@
+body {
+ background: none !important;
+}
+
+#container {
+ position: absolute;
+ left: 1735px;
+ top: 10px;
+ background-color: rgb(44, 44, 44, 0);
+}
+
+.turnOffImage {
+ opacity: 0;
+}
+
+.turnOnImage {
+ opacity: 100;
+}
+
+#image {
+ height: 300px;
+ width: 175px;
+}
+
+#light1 {
+ position: absolute;
+ left: 52px;
+ top: 62px;
+ height: 20px;
+ width: 70px;
+}
+
+#light2 {
+ position: absolute;
+ left: 52px;
+ top: 86px;
+ height: 20px;
+ width: 70px;
+}
+
+#light3 {
+ position: absolute;
+ left: 52px;
+ top: 108px;
+ height: 20px;
+ width: 70px;
+}
+
+#light4 {
+ position: absolute;
+ left: 52px;
+ top: 130px;
+ height: 20px;
+ width: 70px;
+}
+
+#light5 {
+ position: absolute;
+ left: 52px;
+ top: 152px;
+ height: 20px;
+ width: 70px;
+}
+
+#light6 {
+ position: absolute;
+ left: 52px;
+ top: 174px;
+ height: 20px;
+ width: 70px;
+}
+
+#light7 {
+ position: absolute;
+ left: 52px;
+ top: 194px;
+ height: 20px;
+ width: 70px;
+}
+
+#light8 {
+ position: absolute;
+ left: 52px;
+ top: 216px;
+ height: 20px;
+ width: 70px;
+}
+
+#light1 {
+ position: absolute;
+ left: 52px;
+ top: 62px;
+ height: 20px;
+ width: 70px;
+}
+
+#light2 {
+ position: absolute;
+ left: 52px;
+ top: 86px;
+ height: 20px;
+ width: 70px;
+}
+
+#light3 {
+ position: absolute;
+ left: 52px;
+ top: 108px;
+ height: 20px;
+ width: 70px;
+}
+
+#light4 {
+ position: absolute;
+ left: 52px;
+ top: 130px;
+ height: 20px;
+ width: 70px;
+}
+
+#light5 {
+ position: absolute;
+ left: 52px;
+ top: 152px;
+ height: 20px;
+ width: 70px;
+}
+
+#light6 {
+ position: absolute;
+ left: 52px;
+ top: 174px;
+ height: 20px;
+ width: 70px;
+}
+
+#light7 {
+ position: absolute;
+ left: 52px;
+ top: 194px;
+ height: 20px;
+ width: 70px;
+}
+
+#light8 {
+ position: absolute;
+ left: 52px;
+ top: 216px;
+ height: 20px;
+ width: 70px;
+}
diff --git a/resources/tanker_water-main/client/html/index.html b/resources/tanker_water-main/client/html/index.html
new file mode 100644
index 000000000..8fa24afa5
--- /dev/null
+++ b/resources/tanker_water-main/client/html/index.html
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/resources/tanker_water-main/client/html/index.js b/resources/tanker_water-main/client/html/index.js
new file mode 100644
index 000000000..de8e5bd2e
--- /dev/null
+++ b/resources/tanker_water-main/client/html/index.js
@@ -0,0 +1,72 @@
+$(function () {
+ function display(bool) {
+ if (bool) {
+ $('#container').show();
+ } else {
+ $('#container').hide();
+ }
+ }
+
+ display(false);
+
+ function decreaseLights() {
+ let counter = 6;
+ let counter2 = 0;
+
+ for (let i = 51; i > 0; i--) {
+ setTimeout(function () {
+ if (50 - i == counter) {
+ counter = counter + 6;
+ counter2++;
+
+ document.getElementById('light' + counter2).className =
+ 'turnOffImage';
+ }
+ }, (51 - i) * 1000);
+ }
+
+ display(false);
+ }
+
+ function increaseLights() {
+ let counter = 6;
+ let counter2 = 8;
+
+ for (let i = 1; i < 9; i++) {
+ document.getElementById('light' + i).className = 'turnOffImage';
+ }
+
+ for (let i = 51; i > 0; i--) {
+ setTimeout(function () {
+ if (50 - i == counter) {
+ counter = counter + 6;
+
+ document.getElementById('light' + counter2).className = 'turnOnImage';
+
+ counter2--;
+ }
+ }, (51 - i) * 1000);
+ }
+
+ display(false);
+ }
+
+ window.addEventListener('message', function (event) {
+ var item = event.data;
+ if (item.type === 'ui') {
+ if (item.status == true) {
+ display(true);
+ } else {
+ display(false);
+ }
+ } else {
+ if (item.waterType === 'filling') {
+ decreaseLights();
+ } else {
+ if (item.waterType === 'emptying') {
+ increaseLights();
+ }
+ }
+ }
+ });
+});
diff --git a/resources/tanker_water-main/client/html/reset.css b/resources/tanker_water-main/client/html/reset.css
new file mode 100644
index 000000000..22632965c
--- /dev/null
+++ b/resources/tanker_water-main/client/html/reset.css
@@ -0,0 +1,129 @@
+/* http://meyerweb.com/eric/tools/css/reset/
+ v2.0 | 20110126
+ License: none (public domain)
+*/
+
+html,
+body,
+div,
+span,
+applet,
+object,
+iframe,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+p,
+blockquote,
+pre,
+a,
+abbr,
+acronym,
+address,
+big,
+cite,
+code,
+del,
+dfn,
+em,
+img,
+ins,
+kbd,
+q,
+s,
+samp,
+small,
+strike,
+strong,
+sub,
+sup,
+tt,
+var,
+b,
+u,
+i,
+center,
+dl,
+dt,
+dd,
+ol,
+ul,
+li,
+fieldset,
+form,
+label,
+legend,
+table,
+caption,
+tbody,
+tfoot,
+thead,
+tr,
+th,
+td,
+article,
+aside,
+canvas,
+details,
+embed,
+figure,
+figcaption,
+footer,
+header,
+hgroup,
+menu,
+nav,
+output,
+ruby,
+section,
+summary,
+time,
+mark,
+audio,
+video {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 100%;
+ font: inherit;
+ vertical-align: baseline;
+}
+/* HTML5 display-role reset for older browsers */
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+menu,
+nav,
+section {
+ display: block;
+}
+body {
+ line-height: 1;
+}
+ol,
+ul {
+ list-style: none;
+}
+blockquote,
+q {
+ quotes: none;
+}
+blockquote:before,
+blockquote:after,
+q:before,
+q:after {
+ content: '';
+ content: none;
+}
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
diff --git a/resources/tanker_water-main/config.lua b/resources/tanker_water-main/config.lua
new file mode 100644
index 000000000..7c46bcc30
--- /dev/null
+++ b/resources/tanker_water-main/config.lua
@@ -0,0 +1,27 @@
+config = {}
+
+-- Add more to this if you are using the same truck with different spawn codes.
+config.spawnCode = {
+ "ftanker",
+ "ftanker2"
+}
+config.useUI = true
+
+-- !!!! DO NOT CHANGE ANYTHING BELOW THIS !!!! --
+config.resourceName = "tanker_water"
+config.bone = "misc_z"
+
+
+-- Detail texture
+
+config.detailTextureName = "water_sign_1"
+config.detailTexture = "https://cdn.shopify.com/s/files/1/0526/1030/2149/files/water.gif?v=1714823830"
+config.detailSizeX = 32
+config.detailSizeY = 32
+
+-- Bump Texture
+
+config.bumpTextureName = "waterbump_sign_1"
+config.bumpTexture = "https://cdn.shopify.com/s/files/1/0526/1030/2149/files/water_bump.gif?v=1714823842"
+config.bumpSizeX = 32
+config.bumpSizeY = 32
diff --git a/resources/tanker_water-main/fxmanifest.lua b/resources/tanker_water-main/fxmanifest.lua
new file mode 100644
index 000000000..8b627de76
--- /dev/null
+++ b/resources/tanker_water-main/fxmanifest.lua
@@ -0,0 +1,26 @@
+fx_version 'cerulean'
+games { 'gta5' }
+
+
+client_scripts {
+ 'client/client.lua'
+}
+
+server_scripts {
+ 'server/server.lua'
+}
+
+shared_script {
+ 'config.lua'
+}
+
+ui_page 'client/html/index.html'
+files {
+ 'client/html/index.html',
+ 'client/html/index.js',
+ 'client/html/index.css',
+ 'client/html/reset.css',
+ 'client/html/imgs/water.png',
+ 'client/html/imgs/lights.png',
+ 'grill.png'
+}
\ No newline at end of file
diff --git a/resources/tanker_water-main/license.md b/resources/tanker_water-main/license.md
new file mode 100644
index 000000000..8f8c783de
--- /dev/null
+++ b/resources/tanker_water-main/license.md
@@ -0,0 +1,228 @@
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC
+LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
+CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+ a) in the case of the initial Contributor, the initial code and
+
+documentation distributed under this Agreement, and
+
+ b) in the case of each subsequent Contributor:
+
+ i) changes to the Program, and
+
+ ii) additions to the Program;
+
+ where such changes and/or additions to the Program originate from and are
+
+distributed by that particular Contributor. A Contribution 'originates' from a
+Contributor if it was added to the Program by such Contributor itself or anyone
+acting on such Contributor's behalf. Contributions do not include additions to
+the Program which: (i) are separate modules of software distributed in
+conjunction with the Program under their own license agreement, and (ii) are not
+derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor which are
+necessarily infringed by the use or sale of its Contribution alone or when
+combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement,
+including all Contributors.
+
+2. GRANT OF RIGHTS
+
+ a) Subject to the terms of this Agreement, each Contributor hereby grants
+
+ Recipient a non-exclusive, worldwide, royalty-free copyright license to
+ reproduce, prepare derivative works of, publicly display, publicly perform,
+ distribute and sublicense the Contribution of such Contributor, if any, and such
+ derivative works, in source code and object code form.
+
+ b) Subject to the terms of this Agreement, each Contributor hereby grants
+
+ Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed
+ Patents to make, use, sell, offer to sell, import and otherwise transfer the
+ Contribution of such Contributor, if any, in source code and object code form.
+ This patent license shall apply to the combination of the Contribution and the
+ Program if, at the time the Contribution is added by the Contributor, such
+ addition of the Contribution causes such combination to be covered by the
+ Licensed Patents. The patent license shall not apply to any other combinations
+ which include the Contribution. No hardware per se is licensed hereunder.
+
+ c) Recipient understands that although each Contributor grants the licenses
+
+ to its Contributions set forth herein, no assurances are provided by any
+ Contributor that the Program does not infringe the patent or other intellectual
+ property rights of any other entity. Each Contributor disclaims any liability to
+ Recipient for claims brought by any other entity based on infringement of
+ intellectual property rights or otherwise. As a condition to exercising the
+ rights and licenses granted hereunder, each Recipient hereby assumes sole
+ responsibility to secure any other intellectual property rights needed, if any.
+ For example, if a third party patent license is required to allow Recipient to
+ distribute the Program, it is Recipient's responsibility to acquire that license
+ before distributing the Program.
+
+ d) Each Contributor represents that to its knowledge it has sufficient
+
+ copyright rights in its Contribution, if any, to grant the copyright license set
+ forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under its
+own license agreement, provided that:
+
+ a) it complies with the terms and conditions of this Agreement; and
+
+ b) its license agreement:
+
+ i) effectively disclaims on behalf of all Contributors all warranties and
+
+conditions, express and implied, including warranties or conditions of title and
+non-infringement, and implied warranties or conditions of merchantability and
+fitness for a particular purpose;
+
+ ii) effectively excludes on behalf of all Contributors all liability for
+
+damages, including direct, indirect, special, incidental and consequential
+damages, such as lost profits;
+
+ iii) states that any provisions which differ from this Agreement are offered
+
+by that Contributor alone and not by any other party; and
+
+ iv) states that source code for the Program is available from such
+
+Contributor, and informs licensees how to obtain it in a reasonable manner on or
+through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+ a) it must be made available under this Agreement; and
+
+ b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within the
+Program.
+
+Each Contributor must identify itself as the originator of its Contribution, if
+any, in a manner that reasonably allows subsequent Recipients to identify the
+originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with
+respect to end users, business partners and the like. While this license is
+intended to facilitate the commercial use of the Program, the Contributor who
+includes the Program in a commercial product offering should do so in a manner
+which does not create potential liability for other Contributors. Therefore, if
+a Contributor includes the Program in a commercial product offering, such
+Contributor ("Commercial Contributor") hereby agrees to defend and indemnify
+every other Contributor ("Indemnified Contributor") against any losses, damages
+and costs (collectively "Losses") arising from claims, lawsuits and other legal
+actions brought by a third party against the Indemnified Contributor to the
+extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor to
+control, and cooperate with the Commercial Contributor in, the defense and any
+related settlement negotiations. The Indemnified Contributor may participate in
+any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product
+offering, Product X. That Contributor is then a Commercial Contributor. If that
+Commercial Contributor then makes performance claims, or offers warranties
+related to Product X, those performance claims and warranties are such
+Commercial Contributor's responsibility alone. Under this section, the
+Commercial Contributor would have to defend claims against the other
+Contributors related to those performance claims and warranties, and if a court
+requires any other Contributor to pay any damages as a result, the Commercial
+Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
+IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each
+Recipient is solely responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with its exercise of
+rights under this Agreement, including but not limited to the risks and costs of
+program errors, compliance with applicable laws, damage to or loss of data,
+programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
+CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
+PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable
+law, it shall not affect the validity or enforceability of the remainder of the
+terms of this Agreement, and without further action by the parties hereto, such
+provision shall be reformed to the minimum extent necessary to make such
+provision valid and enforceable.
+
+If Recipient institutes patent litigation against a Contributor with respect to
+a patent applicable to software (including a cross-claim or counterclaim in a
+lawsuit), then any patent licenses granted by that Contributor to such Recipient
+under this Agreement shall terminate as of the date such litigation is filed. In
+addition, if Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the Program
+itself (excluding combinations of the Program with other software or hardware)
+infringes such Recipient's patent(s), then such Recipient's rights granted under
+Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to
+comply with any of the material terms or conditions of this Agreement and does
+not cure such failure in a reasonable period of time after becoming aware of
+such noncompliance. If all Recipient's rights under this Agreement terminate,
+Recipient agrees to cease use and distribution of the Program as soon as
+reasonably practicable. However, Recipient's obligations under this Agreement
+and any licenses granted by Recipient relating to the Program shall continue and
+survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in
+order to avoid inconsistency the Agreement is copyrighted and may only be
+modified in the following manner. The Agreement Steward reserves the right to
+publish new versions (including revisions) of this Agreement from time to time.
+No one other than the Agreement Steward has the right to modify this Agreement.
+IBM is the initial Agreement Steward. IBM may assign the responsibility to serve
+as the Agreement Steward to a suitable separate entity. Each new version of the
+Agreement will be given a distinguishing version number. The Program (including
+Contributions) may always be distributed subject to the version of the Agreement
+under which it was received. In addition, after a new version of the Agreement
+is published, Contributor may elect to distribute the Program (including its
+Contributions) under the new version. Except as expressly stated in Sections
+2(a) and 2(b) above, Recipient receives no rights or licenses to the
+intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.
+
+These Terms shall be governed by, and construed in accordance with, English law.
+The parties irrevocably agree that the courts of England shall
+(Subject to the paragraph below) have exclusive jurisdiction to settle any dispute
+which may arise out of, under, or in connection with these Terms or the legal
+relationship established by them, and for these purposes irrevocably submit all
+disputes to the jurisdiction of the English Courts.
+
+For the exclusive benefit of Free Mode Designs LTD, Free Mode Designs LTD shall
+also retain the right to bring proceedings as to the substance of the matter in
+the courts of your county of your residence or, where these Terms are entered
+into in the course of your trade or profession, the county of your principal
+place of business.
diff --git a/resources/tanker_water-main/server/server.lua b/resources/tanker_water-main/server/server.lua
new file mode 100644
index 000000000..6553c9f41
--- /dev/null
+++ b/resources/tanker_water-main/server/server.lua
@@ -0,0 +1,22 @@
+AddEventHandler('onResourceStart', function(resourceName)
+ if (GetCurrentResourceName() ~= config.resourceName ) then
+ print("\n\n\n^8TANKER_WATER SCRIPT ERROR ^3\n\nPLEASE ENSURE THE NAME OF THE RESOURCE MATCHES THE NAME IN THE CONFIG.LUA^7\n\n\n")
+ end
+end)
+
+RegisterNetEvent("createWaterParticles")
+AddEventHandler("createWaterParticles", function(vehEntity)
+ TriggerClientEvent("waterParticles", -1, vehEntity)
+end)
+
+RegisterNetEvent("setWaterTexture")
+AddEventHandler("setWaterTexture", function()
+ TriggerClientEvent("updateTexture", -1, true)
+end)
+
+
+RegisterNetEvent("resetWaterTexture")
+AddEventHandler("resetWaterTexture", function()
+ TriggerClientEvent("updateTexture", -1, false)
+end)
+
diff --git a/resources/tanker_water-main/tanker_water.code-workspace b/resources/tanker_water-main/tanker_water.code-workspace
new file mode 100644
index 000000000..57097327f
--- /dev/null
+++ b/resources/tanker_water-main/tanker_water.code-workspace
@@ -0,0 +1,8 @@
+{
+ "folders": [
+ {
+ "path": "."
+ }
+ ],
+ "settings": {}
+}
diff --git a/server.cfg b/server.cfg
index 7c2a77110..240d09263 100644
--- a/server.cfg
+++ b/server.cfg
@@ -191,6 +191,7 @@ ensure EGRP-Notifications
ensure firehose
ensure firehook
ensure firehosemodels
+ensure tanker_water-main
ensure dpemotes-master
ensure RageUI
ensure lvc