Resolve merge conflict

This commit is contained in:
VegaZ
2018-12-26 23:00:53 +01:00
13 changed files with 501 additions and 132 deletions

View File

@@ -17,18 +17,38 @@ namespace reallife_gamemode.Server.Managers
{
public class DoorManager : Script
{
private static Dictionary<int, NetHandle> _doorColShapes = new Dictionary<int, NetHandle>();
public static void LoadDoors()
{
using (var dbContext = new DatabaseContext())
{
foreach(Door door in dbContext.Doors)
{
_doorColShapes[door.Id] = NAPI.ColShape.CreateSphereColShape(door.Position, 30f);
}
}
}
public static void ReloadDoors()
{
foreach(var doorPair in _doorColShapes)
{
doorPair.Value.Entity<ColShape>().Delete();
}
_doorColShapes.Clear();
LoadDoors();
}
public static void ChangeDoorState(Client player)
{
List<Door> NearDoors = new List<Door>();
var user = player.GetUser();
using (var saveDoor = new DatabaseContext())
using (var dbContext = new DatabaseContext())
{
NearDoors = saveDoor.Doors.ToList().FindAll(d => new Vector3(d.X, d.Y, d.Z).DistanceTo(player.Position) <= d.Radius);
IQueryable<Door> NearDoors = dbContext.Doors.Where(d => d.Position.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!";
@@ -36,15 +56,30 @@ namespace reallife_gamemode.Server.Managers
continue;
}
currentDoor.Locked = !currentDoor.Locked;
d.Locked = !d.Locked;
string notStr = d.Name + " " + (d.Locked == false ? "~g~auf" : "~r~ab") + "geschlossen";
player.SendNotification(notStr, true);
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));
NAPI.Pools.GetAllPlayers().ForEach(p => p.TriggerEvent("changeDoorState", d.Model, d.X, d.Y, d.Z, (d.Locked ? 1 : 0), 0.0f, 0.0f, 0.0f));
}
dbContext.SaveChanges();
}
}
[ServerEvent(Event.PlayerEnterColshape)]
public void DoorManagerPlayerEnterColShapeEvent(ColShape colShape, Client player)
{
if(_doorColShapes.ContainsValue(colShape.Handle))
{
int doorId = _doorColShapes.Where(d => d.Value.Value == colShape.Handle.Value).FirstOrDefault().Key;
using(var dbContext = new DatabaseContext())
{
Door door = dbContext.Doors.Where(d => d.Id == doorId).First();
player.TriggerEvent("changeDoorState", door.Model, door.X, door.Y, door.Z, (door.Locked ? 1 : 0), 0.0f, 0.0f, 0.0f);
}
saveDoor.SaveChanges();
}
}
}

View File

@@ -8,12 +8,14 @@ using System.Text;
namespace reallife_gamemode.Server.Managers
{
public class InteriorManager
public class InteriorManager : Script
{
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 Dictionary<int, NetHandle> _interiorEnterColShapes = new Dictionary<int, NetHandle>();
public static Dictionary<int, NetHandle> _interiorExitColShapes = new Dictionary<int, NetHandle>();
public static Interior GetInteriorByName(string name, DatabaseContext dbContext = null)
{
@@ -30,50 +32,116 @@ namespace reallife_gamemode.Server.Managers
}
}
public static Interior GetInteriorById(int id, DatabaseContext dbContext = null)
{
if (dbContext == null)
{
using (dbContext = new DatabaseContext())
{
return dbContext.Interiors.Where(i => i.Id == id).FirstOrDefault();
}
}
else
{
return dbContext.Interiors.Where(i => i.Id == id).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));
}
LoadInterior(interior);
}
dbContext.SaveChanges();
}
}
public static void LoadInterior(Interior interior)
{
if (interior.EnterPosition != 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.7)), new Vector3(), new Vector3(), 2.0f, new Color(255, 255, 255, 100));
_interiorEnterColShapes[interior.Id] = NAPI.ColShape.CreateSphereColShape(interior.EnterPosition, 1.5f);
}
if (interior.ExitPosition != 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.7)), new Vector3(), new Vector3(), 1.6f, new Color(255, 255, 255, 100));
_interiorExitColShapes[interior.Id] = NAPI.ColShape.CreateSphereColShape(interior.ExitPosition, 1.3f);
}
}
public static void DeleteInterior(Interior interior)
{
TextLabel enT = GetInteriorEnterTextLabel(interior);
TextLabel exT = GetInteriorExitTextLabel(interior);
Marker enM = GetInteriorEnterMarker(interior);
Marker exM = GetInteriorExitMarkers(interior);
ColShape enC = GetInteriorEnterColShape(interior);
ColShape exC = GetInteriorExitColShape(interior);
if (enT != null) enT.Delete();
if (exT != null) exT.Delete();
if (enM != null) enM.Delete();
if (exM != null) exM.Delete();
if (enC != null) enC.Delete();
if (exC != null) exC.Delete();
_interiorEnterTextLabels.Remove(interior.Id);
_interiorExitTextLabels.Remove(interior.Id);
_interiorEnterMarkers.Remove(interior.Id);
_interiorExitMarkers.Remove(interior.Id);
_interiorEnterColShapes.Remove(interior.Id);
_interiorExitColShapes.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);
public static ColShape GetInteriorEnterColShape(Interior interior) => NAPI.Pools.GetAllColShapes().Find(t => t.Handle.Value == _interiorEnterColShapes.FirstOrDefault(x => x.Key == interior.Id).Value.Value);
public static ColShape GetInteriorExitColShape(Interior interior) => NAPI.Pools.GetAllColShapes().Find(t => t.Handle.Value == _interiorExitColShapes.FirstOrDefault(x => x.Key == interior.Id).Value.Value);
public static int GetInteriorIdFromEnterColShape(NetHandle handle) => _interiorEnterColShapes.FirstOrDefault(c => c.Value.Value == handle.Value).Key;
public static int GetInteriorIdFromExitColShape(NetHandle handle) => _interiorExitColShapes.FirstOrDefault(c => c.Value.Value == handle.Value).Key;
[ServerEvent(Event.PlayerEnterColshape)]
public void InteriorManagerPlayerEnterColshapeEvent(ColShape colShape, Client player)
{
int enterId = GetInteriorIdFromEnterColShape(colShape);
int exitId = GetInteriorIdFromExitColShape(colShape);
if(enterId != 0)
{
Interior interior = GetInteriorById(enterId);
player.TriggerEvent("InteriorManager_ShowHelpText", interior.Name, interior.Id, 0);
}
else if(exitId != 0)
{
Interior interior = GetInteriorById(exitId);
player.TriggerEvent("InteriorManager_ShowHelpText", interior.Name, interior.Id, 1);
}
}
[ServerEvent(Event.PlayerExitColshape)]
public void InteriorManagerPlayerExitColshapeEvent(ColShape colShape, Client player)
{
if(GetInteriorIdFromEnterColShape(colShape) != 0 || GetInteriorIdFromExitColShape(colShape) != 0)
{
player.TriggerEvent("InteriorManager_ClearHelpText");
}
}
[RemoteEvent("InteriorManager_UseTeleport")]
public void InteriorManagerUseTeleportEvent(Client player, int id, int enterExit)
{
Interior interior = GetInteriorById(id);
player.Position = enterExit == 0 ? interior.ExitPosition : interior.EnterPosition;
}
}
}