From f1495fbb826afd55105775de976eb9a514353e8b Mon Sep 17 00:00:00 2001 From: VegaZ Date: Thu, 1 Nov 2018 14:16:55 +0100 Subject: [PATCH 1/6] Add doormanager --- Client/Player/keys.js | 5 +++++ Client/index.js | 12 +++++++----- Main.cs | 1 + Server/Managers/LoadManager.cs | 6 +++++- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/Client/Player/keys.js b/Client/Player/keys.js index 3469f649..7c0c7ffa 100644 --- a/Client/Player/keys.js +++ b/Client/Player/keys.js @@ -35,6 +35,11 @@ mp.keys.bind(0x49, false, function () { } }); +//L +mp.keys.bind(0x4C, false, function () { + mp.events.callRemote("ChangeDoorState"); +}); + //N mp.keys.bind(0x4E, false, function () { if (!chat) { diff --git a/Client/index.js b/Client/index.js index 97cb6b39..825cc7c1 100644 --- a/Client/index.js +++ b/Client/index.js @@ -11,19 +11,21 @@ let globalData = { require('./CharCreator/index.js'); -require('./Login/main.js'); +require('./FactionManagement/main.js'); -require('./Save/main.js'); +require('./DoorManager/doormanager.js'); require('./Gui/deathscreen.js'); require('./Gui/infobox.js'); require('./Gui/nametags.js'); require('./Gui/playerlist.js'); +require('./Login/main.js'); + require('./Player/keys.js'); -require('./FactionManagement/main.js'); +require('./Save/main.js'); + +require('./Speedometer/index.js'); require('./Tuning/main.js'); - -require('./Speedometer/index.js'); \ No newline at end of file diff --git a/Main.cs b/Main.cs index d64ad995..dcadbeda 100644 --- a/Main.cs +++ b/Main.cs @@ -29,6 +29,7 @@ namespace reallife_gamemode NAPI.Server.SetAutoSpawnOnConnect(false); NAPI.Server.SetAutoRespawnAfterDeath(false); NAPI.Data.SetWorldData("playerCreatorDimension", 0); + NAPI.Data.SetWorldData("policeDoors", false); TuningManager.AddTuningGarage(new Vector3(-341, -134, 38.5)); diff --git a/Server/Managers/LoadManager.cs b/Server/Managers/LoadManager.cs index 031c7497..02281802 100644 --- a/Server/Managers/LoadManager.cs +++ b/Server/Managers/LoadManager.cs @@ -20,7 +20,7 @@ namespace reallife_gamemode.Server.Managers public static List ShopVehicleList = new List(); public static List UserVehicleList = new List(); - + public static ColShape policeDoors; [ServerEvent(Event.ResourceStart)] public void OnResourceStart() { @@ -79,6 +79,10 @@ namespace reallife_gamemode.Server.Managers current.SetData("ownerId", v.UserId); UserVehicleList.Add(current); } + policeDoors = NAPI.ColShape.CreateCylinderColShape(new Vector3(434.7479, -983.2151, 30.83926), 4, 3, 0); + List colshapes = new List(); + colshapes.Add(policeDoors); + } } } From 8e46680218e96b782b1f951ef82e5050e7b61d43 Mon Sep 17 00:00:00 2001 From: VegaZ Date: Thu, 1 Nov 2018 15:08:54 +0100 Subject: [PATCH 2/6] Add ClientSide Files --- Client/DoorManager/doormanager.js | 3 +++ Server/Managers/DoorManager.cs | 39 +++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 Client/DoorManager/doormanager.js create mode 100644 Server/Managers/DoorManager.cs diff --git a/Client/DoorManager/doormanager.js b/Client/DoorManager/doormanager.js new file mode 100644 index 00000000..7f37f7ce --- /dev/null +++ b/Client/DoorManager/doormanager.js @@ -0,0 +1,3 @@ +mp.events.add('changeDoorState', (doorHash, x, y, z, locked, p5, p6, p7) => { + mp.game.object.doorControl(doorHash, x, y, z, locked, p5, p6, p7); +}); \ No newline at end of file diff --git a/Server/Managers/DoorManager.cs b/Server/Managers/DoorManager.cs new file mode 100644 index 00000000..50548df1 --- /dev/null +++ b/Server/Managers/DoorManager.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Text; +using GTANetworkAPI; +/** +* @overview Life of German Reallife - Managers BankManager (BankManager.cs) +* @author VegaZ +* @copyright (c) 2008 - 2018 Life of German +*/ + +namespace reallife_gamemode.Server.Managers +{ + public class DoorManager : Script + { + [RemoteEvent("ChangeDoorState")] + public void ChangeDoorState(Client player) + { + var isNearDoor = NAPI.ColShape.IsPointWithinColshape(LoadManager.policeDoors, player.Position); + + if (isNearDoor) + { + if (NAPI.Data.GetWorldData("policeDoors") == false) + { + player.SendNotification("Polizeitüren ~r~abgeschlossen", false); + NAPI.ClientEvent.TriggerClientEventForAll("changeDoorState", 320433149, 434.7479f, -983.2151f, 30.83926f, 1, 0.0f, 0.0f, 0.0f); + NAPI.ClientEvent.TriggerClientEventForAll("changeDoorState", -1215222675, 434.7479f, -980.6184f, 30.83926f, 1, 0.0f, 0.0f, 0.0f); + NAPI.Data.SetWorldData("policeDoors", true); + } + else + { + player.SendNotification("Polizeitüren ~g~aufgeschlossen", false); + NAPI.ClientEvent.TriggerClientEventForAll("changeDoorState", 320433149, 434.7479f, -983.2151f, 30.83926f, 0, 0.0f, 0.0f, 0.0f); + NAPI.ClientEvent.TriggerClientEventForAll("changeDoorState", -1215222675, 434.7479f, -980.6184f, 30.83926f, 0, 0.0f, 0.0f, 0.0f); + NAPI.Data.SetWorldData("policeDoors", false); + } + } + } + } +} From 488f42a3657a001101bfbdd0e32ce048611d4874 Mon Sep 17 00:00:00 2001 From: hydrant Date: Thu, 1 Nov 2018 15:19:09 +0100 Subject: [PATCH 3/6] Fixed doormanager --- Client/DoorManager/doormanager.js | 2 ++ Server/Managers/DoorManager.cs | 8 ++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Client/DoorManager/doormanager.js b/Client/DoorManager/doormanager.js index 7f37f7ce..b411b8ca 100644 --- a/Client/DoorManager/doormanager.js +++ b/Client/DoorManager/doormanager.js @@ -1,3 +1,5 @@ mp.events.add('changeDoorState', (doorHash, x, y, z, locked, p5, p6, p7) => { + locked === 1 ? locked = true : locked = false; + mp.game.object.doorControl(doorHash, x, y, z, locked, p5, p6, p7); }); \ No newline at end of file diff --git a/Server/Managers/DoorManager.cs b/Server/Managers/DoorManager.cs index 50548df1..0e4a23e6 100644 --- a/Server/Managers/DoorManager.cs +++ b/Server/Managers/DoorManager.cs @@ -22,15 +22,15 @@ namespace reallife_gamemode.Server.Managers if (NAPI.Data.GetWorldData("policeDoors") == false) { player.SendNotification("Polizeitüren ~r~abgeschlossen", false); - NAPI.ClientEvent.TriggerClientEventForAll("changeDoorState", 320433149, 434.7479f, -983.2151f, 30.83926f, 1, 0.0f, 0.0f, 0.0f); - NAPI.ClientEvent.TriggerClientEventForAll("changeDoorState", -1215222675, 434.7479f, -980.6184f, 30.83926f, 1, 0.0f, 0.0f, 0.0f); + NAPI.Pools.GetAllPlayers().ForEach(p => p.TriggerEvent("changeDoorState", 320433149, 434.7479f, -983.2151f, 30.83926f, 1, 0.0f, 0.0f, 0.0f)); + NAPI.Pools.GetAllPlayers().ForEach(p => p.TriggerEvent("changeDoorState", -1215222675, 434.7479f, -980.6184f, 30.83926f, 1, 0.0f, 0.0f, 0.0f)); NAPI.Data.SetWorldData("policeDoors", true); } else { player.SendNotification("Polizeitüren ~g~aufgeschlossen", false); - NAPI.ClientEvent.TriggerClientEventForAll("changeDoorState", 320433149, 434.7479f, -983.2151f, 30.83926f, 0, 0.0f, 0.0f, 0.0f); - NAPI.ClientEvent.TriggerClientEventForAll("changeDoorState", -1215222675, 434.7479f, -980.6184f, 30.83926f, 0, 0.0f, 0.0f, 0.0f); + NAPI.Pools.GetAllPlayers().ForEach(p => p.TriggerEvent("changeDoorState", 320433149, 434.7479f, -983.2151f, 30.83926f, 0, 0.0f, 0.0f, 0.0f)); + NAPI.Pools.GetAllPlayers().ForEach(p => p.TriggerEvent("changeDoorState", -1215222675, 434.7479f, -980.6184f, 30.83926f, 0, 0.0f, 0.0f, 0.0f)); NAPI.Data.SetWorldData("policeDoors", false); } } From 82dac7481b581cf414b3f0b6b8766dbb60459077 Mon Sep 17 00:00:00 2001 From: VegaZ Date: Fri, 2 Nov 2018 22:23:41 +0100 Subject: [PATCH 4/6] Finish DoorManager --- Model/DatabaseContext.cs | 1 + Server/Entities/Door.cs | 32 +++++++++++++ Server/Managers/DoorManager.cs | 83 ++++++++++++++++++++++++++++------ Server/Managers/LoadManager.cs | 5 -- 4 files changed, 102 insertions(+), 19 deletions(-) create mode 100644 Server/Entities/Door.cs diff --git a/Model/DatabaseContext.cs b/Model/DatabaseContext.cs index edaa517c..d8bf8a59 100644 --- a/Model/DatabaseContext.cs +++ b/Model/DatabaseContext.cs @@ -59,6 +59,7 @@ namespace reallife_gamemode.Model //Saves public DbSet Blips { get; set; } + public DbSet Doors { get; set; } public DbSet GotoPoints { get; set; } public DbSet Markers { get; set; } public DbSet Peds { get; set; } diff --git a/Server/Entities/Door.cs b/Server/Entities/Door.cs new file mode 100644 index 00000000..30046952 --- /dev/null +++ b/Server/Entities/Door.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Numerics; +using System.Text; + +/** +* @overview Life of German Reallife - Entities Door (Door.cs) +* @author VegaZ +* @copyright (c) 2008 - 2018 Life of German +*/ + +namespace reallife_gamemode.Server.Entities +{ + public class Door + { + [Key] + public int Id { get; set; } + public string Category { get; set; } + public string Name { get; set; } + public bool Locked { get; set; } + public int Model { get; set; } + public float X { get; set; } + public float Y { get; set; } + public float Z { get; set; } + + [ForeignKey("FactionId")] + public int? FactionId { get; set; } + public Faction Faction { get; set; } + } +} diff --git a/Server/Managers/DoorManager.cs b/Server/Managers/DoorManager.cs index 0e4a23e6..f443e374 100644 --- a/Server/Managers/DoorManager.cs +++ b/Server/Managers/DoorManager.cs @@ -1,7 +1,11 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Text; using GTANetworkAPI; +using reallife_gamemode.Model; +using reallife_gamemode.Server.Entities; +using reallife_gamemode.Server.Extensions; /** * @overview Life of German Reallife - Managers BankManager (BankManager.cs) * @author VegaZ @@ -15,24 +19,75 @@ namespace reallife_gamemode.Server.Managers [RemoteEvent("ChangeDoorState")] public void ChangeDoorState(Client player) { - var isNearDoor = NAPI.ColShape.IsPointWithinColshape(LoadManager.policeDoors, player.Position); + List NearDoors = new List(); + var user = player.GetUser(); - if (isNearDoor) + using (var saveDoor = new DatabaseContext()) { - if (NAPI.Data.GetWorldData("policeDoors") == false) + NearDoors = saveDoor.Doors.ToList().FindAll(d => new Vector3(d.X, d.Y, d.Z).DistanceTo(player.Position) <= 2); + foreach (Door d in NearDoors) { - player.SendNotification("Polizeitüren ~r~abgeschlossen", false); - NAPI.Pools.GetAllPlayers().ForEach(p => p.TriggerEvent("changeDoorState", 320433149, 434.7479f, -983.2151f, 30.83926f, 1, 0.0f, 0.0f, 0.0f)); - NAPI.Pools.GetAllPlayers().ForEach(p => p.TriggerEvent("changeDoorState", -1215222675, 434.7479f, -980.6184f, 30.83926f, 1, 0.0f, 0.0f, 0.0f)); - NAPI.Data.SetWorldData("policeDoors", true); - } - else - { - player.SendNotification("Polizeitüren ~g~aufgeschlossen", false); - NAPI.Pools.GetAllPlayers().ForEach(p => p.TriggerEvent("changeDoorState", 320433149, 434.7479f, -983.2151f, 30.83926f, 0, 0.0f, 0.0f, 0.0f)); - NAPI.Pools.GetAllPlayers().ForEach(p => p.TriggerEvent("changeDoorState", -1215222675, 434.7479f, -980.6184f, 30.83926f, 0, 0.0f, 0.0f, 0.0f)); - NAPI.Data.SetWorldData("policeDoors", false); + Door currentDoor = saveDoor.Doors.FirstOrDefault(c => c.Id == d.Id); + if (d.Locked == true) + { + if (d.FactionId == null) + { + if (user.AdminLevel >= Util.AdminLevel.ADMIN) + { + player.SendNotification(d.Name + " ~g~aufgeschlossen.", false); + NAPI.Pools.GetAllPlayers().ForEach(p => p.TriggerEvent("changeDoorState", d.Model, d.X, d.Y, d.Z, 0, 0.0f, 0.0f, 0.0f)); + currentDoor.Locked = false; + } + else + { + player.SendNotification("~r~Du hast kein Recht diese T\u00fcr aufzuschlie\u00dfen!"); + } + } + else + { + if (d.FactionId == user.FactionId) + { + player.SendNotification(d.Name + " ~g~aufgeschlossen.", false); + NAPI.Pools.GetAllPlayers().ForEach(p => p.TriggerEvent("changeDoorState", d.Model, d.X, d.Y, d.Z, 0, 0.0f, 0.0f, 0.0f)); + currentDoor.Locked = false; + } + else + { + player.SendNotification("~r~Du hast kein Recht diese T\u00fcr aufzuschlie\u00dfen!"); + } + } + } + else + { + if (d.FactionId == null) + { + if (user.AdminLevel >= Util.AdminLevel.ADMIN) + { + player.SendNotification(d.Name + " ~r~abgeschlossen.", false); + NAPI.Pools.GetAllPlayers().ForEach(p => p.TriggerEvent("changeDoorState", d.Model, d.X, d.Y, d.Z, 1, 0.0f, 0.0f, 0.0f)); + currentDoor.Locked = true; + } + else + { + player.SendNotification("~r~Du hast kein Recht diese T\u00fcr abzuschlie\u00dfen!"); + } + } + else + { + if (d.FactionId == user.FactionId) + { + player.SendNotification(d.Name + " ~r~abgeschlossen.", false); + NAPI.Pools.GetAllPlayers().ForEach(p => p.TriggerEvent("changeDoorState", d.Model, d.X, d.Y, d.Z, 1, 0.0f, 0.0f, 0.0f)); + currentDoor.Locked = true; + } + else + { + player.SendNotification("~r~Du hast kein Recht diese T\u00fcr abzuschlie\u00dfen!"); + } + } + } } + saveDoor.SaveChanges(); } } } diff --git a/Server/Managers/LoadManager.cs b/Server/Managers/LoadManager.cs index 02281802..b97c8f48 100644 --- a/Server/Managers/LoadManager.cs +++ b/Server/Managers/LoadManager.cs @@ -20,7 +20,6 @@ namespace reallife_gamemode.Server.Managers public static List ShopVehicleList = new List(); public static List UserVehicleList = new List(); - public static ColShape policeDoors; [ServerEvent(Event.ResourceStart)] public void OnResourceStart() { @@ -79,10 +78,6 @@ namespace reallife_gamemode.Server.Managers current.SetData("ownerId", v.UserId); UserVehicleList.Add(current); } - policeDoors = NAPI.ColShape.CreateCylinderColShape(new Vector3(434.7479, -983.2151, 30.83926), 4, 3, 0); - List colshapes = new List(); - colshapes.Add(policeDoors); - } } } From 8dd87b25051dfb2cb0195367dfddeab89140ce5c Mon Sep 17 00:00:00 2001 From: hydrant Date: Fri, 2 Nov 2018 22:54:27 +0100 Subject: [PATCH 5/6] Simplified doormanager --- Server/Managers/DoorManager.cs | 70 +++++++--------------------------- 1 file changed, 14 insertions(+), 56 deletions(-) diff --git a/Server/Managers/DoorManager.cs b/Server/Managers/DoorManager.cs index f443e374..bee1cac8 100644 --- a/Server/Managers/DoorManager.cs +++ b/Server/Managers/DoorManager.cs @@ -6,6 +6,7 @@ using GTANetworkAPI; using reallife_gamemode.Model; using reallife_gamemode.Server.Entities; using reallife_gamemode.Server.Extensions; +using reallife_gamemode.Server.Util; /** * @overview Life of German Reallife - Managers BankManager (BankManager.cs) * @author VegaZ @@ -28,64 +29,21 @@ namespace reallife_gamemode.Server.Managers foreach (Door d in NearDoors) { Door currentDoor = saveDoor.Doors.FirstOrDefault(c => c.Id == d.Id); - if (d.Locked == true) + + if(!user.IsAdmin(AdminLevel.ADMIN) && (d.FactionId != user.FactionId || d.FactionId == null)) { - if (d.FactionId == null) - { - if (user.AdminLevel >= Util.AdminLevel.ADMIN) - { - player.SendNotification(d.Name + " ~g~aufgeschlossen.", false); - NAPI.Pools.GetAllPlayers().ForEach(p => p.TriggerEvent("changeDoorState", d.Model, d.X, d.Y, d.Z, 0, 0.0f, 0.0f, 0.0f)); - currentDoor.Locked = false; - } - else - { - player.SendNotification("~r~Du hast kein Recht diese T\u00fcr aufzuschlie\u00dfen!"); - } - } - else - { - if (d.FactionId == user.FactionId) - { - player.SendNotification(d.Name + " ~g~aufgeschlossen.", false); - NAPI.Pools.GetAllPlayers().ForEach(p => p.TriggerEvent("changeDoorState", d.Model, d.X, d.Y, d.Z, 0, 0.0f, 0.0f, 0.0f)); - currentDoor.Locked = false; - } - else - { - player.SendNotification("~r~Du hast kein Recht diese T\u00fcr aufzuschlie\u00dfen!"); - } - } - } - else - { - if (d.FactionId == null) - { - if (user.AdminLevel >= Util.AdminLevel.ADMIN) - { - player.SendNotification(d.Name + " ~r~abgeschlossen.", false); - NAPI.Pools.GetAllPlayers().ForEach(p => p.TriggerEvent("changeDoorState", d.Model, d.X, d.Y, d.Z, 1, 0.0f, 0.0f, 0.0f)); - currentDoor.Locked = true; - } - else - { - player.SendNotification("~r~Du hast kein Recht diese T\u00fcr abzuschlie\u00dfen!"); - } - } - else - { - if (d.FactionId == user.FactionId) - { - player.SendNotification(d.Name + " ~r~abgeschlossen.", false); - NAPI.Pools.GetAllPlayers().ForEach(p => p.TriggerEvent("changeDoorState", d.Model, d.X, d.Y, d.Z, 1, 0.0f, 0.0f, 0.0f)); - currentDoor.Locked = true; - } - else - { - player.SendNotification("~r~Du hast kein Recht diese T\u00fcr abzuschlie\u00dfen!"); - } - } + string lockState = "~r~Du hast kein Recht diese T\u00fcr " + (d.Locked == true ? "auf" : "ab") + "zuschlie\u00dfen!"; + player.SendNotification(lockState, false); + continue; } + + currentDoor.Locked = !currentDoor.Locked; + + string notStr = d.Name + " " + (d.Locked == false ? "auf" : "ab") + "geschlossen"; + + player.SendNotification(notStr, false); + + NAPI.Pools.GetAllPlayers().ForEach(p => p.TriggerEvent("changeDoorState", d.Model, d.X, d.Y, d.Z, (currentDoor.Locked ? 1 : 0), 0.0f, 0.0f, 0.0f)); } saveDoor.SaveChanges(); } From 102a7de99787f0446894b933e04826b76e479329 Mon Sep 17 00:00:00 2001 From: VegaZ Date: Fri, 2 Nov 2018 23:07:40 +0100 Subject: [PATCH 6/6] Add Radius for Doors and Gates --- Server/Entities/Door.cs | 1 + Server/Managers/DoorManager.cs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Server/Entities/Door.cs b/Server/Entities/Door.cs index 30046952..87dd5a66 100644 --- a/Server/Entities/Door.cs +++ b/Server/Entities/Door.cs @@ -24,6 +24,7 @@ namespace reallife_gamemode.Server.Entities public float X { get; set; } public float Y { get; set; } public float Z { get; set; } + public float Radius { get; set; } [ForeignKey("FactionId")] public int? FactionId { get; set; } diff --git a/Server/Managers/DoorManager.cs b/Server/Managers/DoorManager.cs index bee1cac8..a4954731 100644 --- a/Server/Managers/DoorManager.cs +++ b/Server/Managers/DoorManager.cs @@ -25,7 +25,7 @@ namespace reallife_gamemode.Server.Managers using (var saveDoor = new DatabaseContext()) { - NearDoors = saveDoor.Doors.ToList().FindAll(d => new Vector3(d.X, d.Y, d.Z).DistanceTo(player.Position) <= 2); + NearDoors = saveDoor.Doors.ToList().FindAll(d => new Vector3(d.X, d.Y, d.Z).DistanceTo(player.Position) <= d.Radius); foreach (Door d in NearDoors) { Door currentDoor = saveDoor.Doors.FirstOrDefault(c => c.Id == d.Id);