From 92e344d79c2a914ca9040ccc09329f6146ec2558 Mon Sep 17 00:00:00 2001 From: hydrant Date: Sun, 9 Dec 2018 14:05:26 +0100 Subject: [PATCH] Added tuning sync for headhlights and turbo, added siren silence (B key) --- Client/Tuning/main.js | 35 +++++++++++++++++++++++++++---- Client/Tuning/sirensilence.js | 15 +++++++++++++ Client/Tuning/sync.js | 18 ++++++++++++++-- Client/index.js | 1 + Server/Events/Siren.cs | 26 +++++++++++++++++++++++ Server/Managers/TuningManager.cs | 23 ++++++++++++++++++-- Server/Managers/VehicleManager.cs | 3 ++- 7 files changed, 112 insertions(+), 9 deletions(-) create mode 100644 Client/Tuning/sirensilence.js create mode 100644 Server/Events/Siren.cs diff --git a/Client/Tuning/main.js b/Client/Tuning/main.js index 185df4a1..30355d12 100644 --- a/Client/Tuning/main.js +++ b/Client/Tuning/main.js @@ -194,7 +194,7 @@ mp.events.add("showTuningMenu", () => { var menuItem = new UIMenuItem(slotName); - if(localVehicle.getNumMods(modType) !== 0) mainMenu.AddItem(menuItem); + if(localVehicle.getNumMods(modType) !== 0 || modType === 18 || modType === 22) mainMenu.AddItem(menuItem); } }); @@ -217,9 +217,15 @@ mp.events.add("showTuningMenu", () => { } var currentMod = localVehicle.getMod(modSlot); + var oldToggleValue; + if (modSlot === 18 || modSlot === 22) { + oldToggleValue = localVehicle.isToggleModOn(modSlot); + currentMod = oldToggleValue ? 0 : -1; + } var currentModItem; var modNum = localVehicle.getNumMods(modSlot); + if (modSlot === 18 || modSlot === 22) modNum = 1; modMenu = new Menu(item.Text, "Änderung: " + item.Text, new Point(50, 50)); @@ -230,6 +236,10 @@ mp.events.add("showTuningMenu", () => { modItem = new UIMenuItem("Serie", ""); } else { var modName = getModName(localVehicle, modSlot, i); + + if (modSlot === 18) modName = "Turbolader"; + if (modSlot === 22) modName = "Xenon-Licht"; + modItem = new UIMenuItem(modName, ""); } @@ -251,11 +261,21 @@ mp.events.add("showTuningMenu", () => { currentModItem = selectedItem; } mp.events.callRemote("setVehicleMod", modSlot, index); + + if (modSlot === 18 || modSlot === 22) { + oldToggleValue = index === 0 ? false : true; + return; + } + if (index === 0) index = -1; currentMod = index - 1; }); modMenu.IndexChange.on((index) => { + if (modSlot === 18 || modSlot === 22) { + localVehicle.toggleMod(modSlot, index === 0 ? false : true); + return; + } if (index === 0) index = -1; localVehicle.setMod(modSlot, index - 1); }); @@ -269,8 +289,6 @@ mp.events.add("showTuningMenu", () => { localVehicle.setDoorShut(door, false); } - localVehicle.setMod(modSlot, currentMod); - if (closeMenu) { closeMenu = false; return; @@ -278,6 +296,13 @@ mp.events.add("showTuningMenu", () => { mainMenu.Visible = true; modMenu.Visible = false; + + if (modSlot === 18 || modSlot === 22) { + oldToggleValue = (oldToggleValue === false) ? 0 : 1; + localVehicle.toggleMod(modSlot, oldToggleValue === 0 ? false : true); + return; + } + localVehicle.setMod(modSlot, currentMod); }); mainMenu.Visible = false; @@ -292,7 +317,9 @@ mp.events.add("showTuningMenu", () => { }); mp.events.add("playerLeaveVehicle", () => { - mp.events.call("hideTuningInfo", true); + if (keyBound) { + mp.events.call("hideTuningInfo", true); + } }); function getSlotName(slot) { diff --git a/Client/Tuning/sirensilence.js b/Client/Tuning/sirensilence.js new file mode 100644 index 00000000..3d066623 --- /dev/null +++ b/Client/Tuning/sirensilence.js @@ -0,0 +1,15 @@ +mp.keys.bind(0x42, true, _ => { + mp.events.callRemote("keyPress:B:toggleSiren"); +}); + +mp.events.add('toggleVehicleSiren', (vehicle, state) => { + vehicle.setSirenSound(state); +}); + +mp.events.add('entityStreamIn', (entity) => { + if (entity.isAVehicle()) { + var state = entity.getVariable("sirenSound"); + if (state === undefined) return; + entity.setSirenSound(state); + } +}); \ No newline at end of file diff --git a/Client/Tuning/sync.js b/Client/Tuning/sync.js index 24baf472..bee8e5a0 100644 --- a/Client/Tuning/sync.js +++ b/Client/Tuning/sync.js @@ -1,4 +1,18 @@ mp.events.add('entityStreamIn', (entity) => { - mp.gui.chat.push("streamed in:"); - mp.gui.chat.push(entity.Model); + if (entity.isAVehicle()) { + var mod18 = entity.getVariable('mod18'); + var mod22 = entity.getVariable('mod22'); + + if (mod18 !== undefined) { + entity.toggleMod(18, mod18); + } + + if (mod22 !== undefined) { + entity.toggleMod(22, mod22); + } + } +}); + +mp.events.add('vehicleToggleMod', (veh, slot, newval) => { + veh.toggleMod(slot, newval); }); \ No newline at end of file diff --git a/Client/index.js b/Client/index.js index 7a5fa58a..b7c5675d 100644 --- a/Client/index.js +++ b/Client/index.js @@ -35,5 +35,6 @@ require('./Speedometer/index.js'); require('./Tuning/main.js'); require('./Tuning/sync.js'); +require('./Tuning/sirensilence.js'); require('./Business/main.js'); diff --git a/Server/Events/Siren.cs b/Server/Events/Siren.cs new file mode 100644 index 00000000..7c542eb4 --- /dev/null +++ b/Server/Events/Siren.cs @@ -0,0 +1,26 @@ +using GTANetworkAPI; +using System; +using System.Collections.Generic; +using System.Text; + +namespace reallife_gamemode.Server.Events +{ + class Siren : Script + { + private Dictionary _sirenStates = new Dictionary(); + + [RemoteEvent("keyPress:B:toggleSiren")] + public void ToggleSirenEvent(Client player) + { + if (!player.IsInVehicle || player.VehicleSeat != -1) return; + Vehicle pV = player.Vehicle; + bool oldValue = _sirenStates.ContainsKey(pV.Handle) ? _sirenStates[pV.Handle] : false; + bool newValue = !oldValue; + + _sirenStates[pV.Handle] = newValue; + pV.SetSharedData("sirenSound", newValue); + + NAPI.ClientEvent.TriggerClientEventForAll("toggleVehicleSiren", pV, newValue); + } + } +} diff --git a/Server/Managers/TuningManager.cs b/Server/Managers/TuningManager.cs index 5318d077..7e0a7089 100644 --- a/Server/Managers/TuningManager.cs +++ b/Server/Managers/TuningManager.cs @@ -45,10 +45,18 @@ namespace reallife_gamemode.Server.Managers Vehicle veh = VehicleManager.GetVehicleFromServerVehicle(sVeh); if (veh == null) return; - using(var dbContext = new DatabaseContext()) + + veh.SetSharedData("mod18", false); + veh.SetSharedData("mod22", false); + + using (var dbContext = new DatabaseContext()) { foreach(VehicleMod vMod in dbContext.VehicleMods.ToList().FindAll(vM => vM.ServerVehicleId == sVeh.Id)) { + if(vMod.Slot == 18 || vMod.Slot == 22) + { + veh.SetSharedData("mod" + vMod.Slot, true); + } veh.SetMod(vMod.Slot, vMod.ModId - 1); } } @@ -72,8 +80,19 @@ namespace reallife_gamemode.Server.Managers [RemoteEvent("setVehicleMod")] public void SetVehicleMod(Client player, int slot, int index) { + Vehicle pV = player.Vehicle; if (index == 0) index--; - player.Vehicle.SetMod(slot, index - 1); + + if(slot != 18 && slot != 22) + { + pV.SetMod(slot, index - 1); + } + else + { + bool newVal = index == -1 ? false : true; + pV.SetSharedData("mod" + slot, newVal); + NAPI.ClientEvent.TriggerClientEventForAll("vehicleToggleMod", pV, slot, newVal); + } ServerVehicle sV = player.Vehicle.GetServerVehicle(); if (sV == null) return; diff --git a/Server/Managers/VehicleManager.cs b/Server/Managers/VehicleManager.cs index 6359dbd3..32ef77b7 100644 --- a/Server/Managers/VehicleManager.cs +++ b/Server/Managers/VehicleManager.cs @@ -11,7 +11,8 @@ namespace reallife_gamemode.Server.Managers { private static readonly List _enabledMods = new List() { - "polamggtr" + "polamggtr", + "g65amg" }; private static Dictionary _serverVehicles = new Dictionary();