diff --git a/Client/DoorManager/doormanager.js b/Client/DoorManager/doormanager.js new file mode 100644 index 00000000..b411b8ca --- /dev/null +++ b/Client/DoorManager/doormanager.js @@ -0,0 +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/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/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..87dd5a66 --- /dev/null +++ b/Server/Entities/Door.cs @@ -0,0 +1,33 @@ +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; } + public float Radius { 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 new file mode 100644 index 00000000..a4954731 --- /dev/null +++ b/Server/Managers/DoorManager.cs @@ -0,0 +1,52 @@ +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; +using reallife_gamemode.Server.Util; +/** +* @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) + { + List NearDoors = new List(); + var user = player.GetUser(); + + using (var saveDoor = new DatabaseContext()) + { + 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); + + if(!user.IsAdmin(AdminLevel.ADMIN) && (d.FactionId != user.FactionId || d.FactionId == null)) + { + 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(); + } + } + } +} diff --git a/Server/Managers/LoadManager.cs b/Server/Managers/LoadManager.cs index 031c7497..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(); - [ServerEvent(Event.ResourceStart)] public void OnResourceStart() {