diff --git a/Main.cs b/Main.cs index c7d0af49..ff5c3174 100644 --- a/Main.cs +++ b/Main.cs @@ -47,6 +47,8 @@ namespace reallife_gamemode TimeManager.StartTimeManager(); DatabaseHelper.InitDatabaseFirstTime(); + + InteriorManager.LoadInteriors(); FactionHelper.CheckFactionBankAccounts(); BusinessManager.LoadBusinesses(); diff --git a/Server/Business/BusinessBase.cs b/Server/Business/BusinessBase.cs index 921156ee..1591402e 100644 --- a/Server/Business/BusinessBase.cs +++ b/Server/Business/BusinessBase.cs @@ -39,7 +39,7 @@ namespace reallife_gamemode.Server.Business public void Setup() { _informationLabel = NAPI.TextLabel.CreateTextLabel(Name, Position.Add(new Vector3(0, 0, 0.5)), 20.0f, 1.3f, 0, new Color(255, 255, 255)); - _marker = NAPI.Marker.CreateMarker(MarkerType.VerticalCylinder, Position.Subtract(new Vector3(0, 0, 1.5)), new Vector3(), new Vector3(), 1f, new Color(255, 255, 255), true); + _marker = NAPI.Marker.CreateMarker(MarkerType.VerticalCylinder, Position.Subtract(new Vector3(0, 0, 1.5)), new Vector3(), new Vector3(), 1f, new Color(255, 255, 255)); _colShape = NAPI.ColShape.CreateSphereColShape(Position.Subtract(new Vector3(0, 0, 1.5)), 3f); _colShape.OnEntityEnterColShape += EntityEnterBusinessColShape; diff --git a/Server/Commands/Admin.cs b/Server/Commands/Admin.cs index 925fb356..274ba4f5 100644 --- a/Server/Commands/Admin.cs +++ b/Server/Commands/Admin.cs @@ -2156,6 +2156,19 @@ namespace reallife_gamemode.Server.Commands player.SendChatMessage("~r~[FEHLER]~s~ Dieses Interior existiert nicht."); return; } + + TextLabel enT = InteriorManager.GetInteriorEnterTextLabel(interiorRemove); + TextLabel exT = InteriorManager.GetInteriorExitTextLabel(interiorRemove); + Marker enM = InteriorManager.GetInteriorEnterMarker(interiorRemove); + Marker exM = InteriorManager.GetInteriorExitMarkers(interiorRemove); + + if (enT != null) enT.Delete(); + if (exT != null) exT.Delete(); + if (enM != null) enM.Delete(); + if (exM != null) exM.Delete(); + + InteriorManager.DeleteInterior(interiorRemove); + dbContext.Interiors.Remove(interiorRemove); dbContext.SaveChanges(); } @@ -2172,6 +2185,7 @@ namespace reallife_gamemode.Server.Commands } interior.EnterPosition = player.Position; dbContext.SaveChanges(); + InteriorManager.LoadInteriors(); } player.SendChatMessage("~b~[ADMIN]~s~ Die Eingangs-Position vom Interior ~y~" + option2 + "~s~ wurde gesetzt."); break; @@ -2186,6 +2200,7 @@ namespace reallife_gamemode.Server.Commands } interior.ExitPosition = player.Position; dbContext.SaveChanges(); + InteriorManager.LoadInteriors(); } player.SendChatMessage("~b~[ADMIN]~s~ Die Ausgangs-Position vom Interior ~y~" + option2 + "~s~ wurde gesetzt."); break; diff --git a/Server/Entities/Interior.cs b/Server/Entities/Interior.cs index b6e7e56e..e4502de1 100644 --- a/Server/Entities/Interior.cs +++ b/Server/Entities/Interior.cs @@ -18,7 +18,6 @@ namespace reallife_gamemode.Server.Entities [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; } - public string Name { get; set; } [Column("EnterPosition")] @@ -59,6 +58,7 @@ namespace reallife_gamemode.Server.Entities this._enterPosition = value; } } + [NotMapped] public Vector3 ExitPosition { diff --git a/Server/Managers/InteriorManager.cs b/Server/Managers/InteriorManager.cs index c59eb14b..b6443009 100644 --- a/Server/Managers/InteriorManager.cs +++ b/Server/Managers/InteriorManager.cs @@ -1,4 +1,5 @@ -using reallife_gamemode.Model; +using GTANetworkAPI; +using reallife_gamemode.Model; using reallife_gamemode.Server.Entities; using System; using System.Collections.Generic; @@ -9,6 +10,11 @@ namespace reallife_gamemode.Server.Managers { public class InteriorManager { + public static Dictionary _interiorEnterTextLabels = new Dictionary(); + public static Dictionary _interiorExitTextLabels = new Dictionary(); + public static Dictionary _interiorEnterMarkers = new Dictionary(); + public static Dictionary _interiorExitMarkers = new Dictionary(); + public static Interior GetInteriorByName(string name, DatabaseContext dbContext = null) { if(dbContext == null) @@ -23,5 +29,51 @@ namespace reallife_gamemode.Server.Managers return dbContext.Interiors.Where(i => i.Name.ToLower() == name.ToLower()).FirstOrDefault(); } } + + public static void LoadInteriors() + { + using (var dbContext = new DatabaseContext()) + { + foreach (Interior interior in dbContext.Interiors) + { + TextLabel enT = GetInteriorEnterTextLabel(interior); + TextLabel exT = GetInteriorExitTextLabel(interior); + Marker enM = GetInteriorEnterMarker(interior); + Marker exM = GetInteriorExitMarkers(interior); + + if (enT != null) enT.Delete(); + if (exT != null) exT.Delete(); + if (enM != null) enM.Delete(); + if (exM != null) exM.Delete(); + if (interior.EnterPosition != null) + { + NAPI.Util.ConsoleOutput("enterposition not null"); + _interiorEnterTextLabels[interior.Id] = NAPI.TextLabel.CreateTextLabel("~y~" + interior.Name + "\n~s~Eingang", interior.EnterPosition, 10f, 1f, 0, new Color(255, 255, 255)); + _interiorEnterMarkers[interior.Id] = NAPI.Marker.CreateMarker(MarkerType.VerticalCylinder, interior.EnterPosition.Subtract(new Vector3(0, 0, 1.5)), new Vector3(), new Vector3(), 1.0f, new Color(255, 255, 255)); + } + + if(interior.ExitPosition != null) + { + NAPI.Util.ConsoleOutput("exitposition not null"); + _interiorExitTextLabels[interior.Id] = NAPI.TextLabel.CreateTextLabel("~y~" + interior.Name + "\n~s~Ausgang", interior.ExitPosition, 10f, 1f, 0, new Color(255, 255, 255)); + _interiorExitMarkers[interior.Id] = NAPI.Marker.CreateMarker(MarkerType.VerticalCylinder, interior.ExitPosition.Subtract(new Vector3(0, 0, 1.5)), new Vector3(), new Vector3(), 1.0f, new Color(255, 255, 255)); + } + } + dbContext.SaveChanges(); + } + } + + public static void DeleteInterior(Interior interior) + { + _interiorEnterTextLabels.Remove(interior.Id); + _interiorExitTextLabels.Remove(interior.Id); + _interiorEnterMarkers.Remove(interior.Id); + _interiorExitMarkers.Remove(interior.Id); + } + + public static TextLabel GetInteriorEnterTextLabel(Interior interior) => NAPI.Pools.GetAllTextLabels().Find(t => t.Handle.Value == _interiorEnterTextLabels.FirstOrDefault(x => x.Key == interior.Id).Value.Value); + public static TextLabel GetInteriorExitTextLabel(Interior interior) => NAPI.Pools.GetAllTextLabels().Find(t => t.Handle.Value == _interiorExitTextLabels.FirstOrDefault(x => x.Key == interior.Id).Value.Value); + public static Marker GetInteriorEnterMarker(Interior interior) => NAPI.Pools.GetAllMarkers().Find(t => t.Handle.Value == _interiorEnterMarkers.FirstOrDefault(x => x.Key == interior.Id).Value.Value); + public static Marker GetInteriorExitMarkers(Interior interior) => NAPI.Pools.GetAllMarkers().Find(t => t.Handle.Value == _interiorExitMarkers.FirstOrDefault(x => x.Key == interior.Id).Value.Value); } } diff --git a/Server/Managers/VehicleManager.cs b/Server/Managers/VehicleManager.cs index d2b55bbc..e9c1dd16 100644 --- a/Server/Managers/VehicleManager.cs +++ b/Server/Managers/VehicleManager.cs @@ -62,7 +62,9 @@ namespace reallife_gamemode.Server.Managers "zr3803", "flashgt", "gb200", - "dominator3" + "dominator3", + "models", + "teslamodels" }; private static Dictionary _serverVehicles = new Dictionary();