From 82dac7481b581cf414b3f0b6b8766dbb60459077 Mon Sep 17 00:00:00 2001 From: VegaZ Date: Fri, 2 Nov 2018 22:23:41 +0100 Subject: [PATCH] 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); - } } }