Added interior marker / textlabel repositioning when changing enter / exit position

This commit is contained in:
hydrant
2018-12-25 12:14:32 +01:00
parent d22cf6e1ba
commit 13a0997d53
6 changed files with 75 additions and 4 deletions

View File

@@ -47,6 +47,8 @@ namespace reallife_gamemode
TimeManager.StartTimeManager(); TimeManager.StartTimeManager();
DatabaseHelper.InitDatabaseFirstTime(); DatabaseHelper.InitDatabaseFirstTime();
InteriorManager.LoadInteriors();
FactionHelper.CheckFactionBankAccounts(); FactionHelper.CheckFactionBankAccounts();
BusinessManager.LoadBusinesses(); BusinessManager.LoadBusinesses();

View File

@@ -39,7 +39,7 @@ namespace reallife_gamemode.Server.Business
public void Setup() 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)); _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 = NAPI.ColShape.CreateSphereColShape(Position.Subtract(new Vector3(0, 0, 1.5)), 3f);
_colShape.OnEntityEnterColShape += EntityEnterBusinessColShape; _colShape.OnEntityEnterColShape += EntityEnterBusinessColShape;

View File

@@ -2156,6 +2156,19 @@ namespace reallife_gamemode.Server.Commands
player.SendChatMessage("~r~[FEHLER]~s~ Dieses Interior existiert nicht."); player.SendChatMessage("~r~[FEHLER]~s~ Dieses Interior existiert nicht.");
return; 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.Interiors.Remove(interiorRemove);
dbContext.SaveChanges(); dbContext.SaveChanges();
} }
@@ -2172,6 +2185,7 @@ namespace reallife_gamemode.Server.Commands
} }
interior.EnterPosition = player.Position; interior.EnterPosition = player.Position;
dbContext.SaveChanges(); dbContext.SaveChanges();
InteriorManager.LoadInteriors();
} }
player.SendChatMessage("~b~[ADMIN]~s~ Die Eingangs-Position vom Interior ~y~" + option2 + "~s~ wurde gesetzt."); player.SendChatMessage("~b~[ADMIN]~s~ Die Eingangs-Position vom Interior ~y~" + option2 + "~s~ wurde gesetzt.");
break; break;
@@ -2186,6 +2200,7 @@ namespace reallife_gamemode.Server.Commands
} }
interior.ExitPosition = player.Position; interior.ExitPosition = player.Position;
dbContext.SaveChanges(); dbContext.SaveChanges();
InteriorManager.LoadInteriors();
} }
player.SendChatMessage("~b~[ADMIN]~s~ Die Ausgangs-Position vom Interior ~y~" + option2 + "~s~ wurde gesetzt."); player.SendChatMessage("~b~[ADMIN]~s~ Die Ausgangs-Position vom Interior ~y~" + option2 + "~s~ wurde gesetzt.");
break; break;

View File

@@ -18,7 +18,6 @@ namespace reallife_gamemode.Server.Entities
[Key] [Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; } public int Id { get; set; }
public string Name { get; set; } public string Name { get; set; }
[Column("EnterPosition")] [Column("EnterPosition")]
@@ -59,6 +58,7 @@ namespace reallife_gamemode.Server.Entities
this._enterPosition = value; this._enterPosition = value;
} }
} }
[NotMapped] [NotMapped]
public Vector3 ExitPosition public Vector3 ExitPosition
{ {

View File

@@ -1,4 +1,5 @@
using reallife_gamemode.Model; using GTANetworkAPI;
using reallife_gamemode.Model;
using reallife_gamemode.Server.Entities; using reallife_gamemode.Server.Entities;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -9,6 +10,11 @@ namespace reallife_gamemode.Server.Managers
{ {
public class InteriorManager public class InteriorManager
{ {
public static Dictionary<int, NetHandle> _interiorEnterTextLabels = new Dictionary<int, NetHandle>();
public static Dictionary<int, NetHandle> _interiorExitTextLabels = new Dictionary<int, NetHandle>();
public static Dictionary<int, NetHandle> _interiorEnterMarkers = new Dictionary<int, NetHandle>();
public static Dictionary<int, NetHandle> _interiorExitMarkers = new Dictionary<int, NetHandle>();
public static Interior GetInteriorByName(string name, DatabaseContext dbContext = null) public static Interior GetInteriorByName(string name, DatabaseContext dbContext = null)
{ {
if(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(); 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);
} }
} }

View File

@@ -62,7 +62,9 @@ namespace reallife_gamemode.Server.Managers
"zr3803", "zr3803",
"flashgt", "flashgt",
"gb200", "gb200",
"dominator3" "dominator3",
"models",
"teslamodels"
}; };
private static Dictionary<int, NetHandle> _serverVehicles = new Dictionary<int, NetHandle>(); private static Dictionary<int, NetHandle> _serverVehicles = new Dictionary<int, NetHandle>();