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