Added door locked state sync
This commit is contained in:
1
Main.cs
1
Main.cs
@@ -51,6 +51,7 @@ namespace reallife_gamemode
|
|||||||
FactionHelper.CheckFactionBankAccounts();
|
FactionHelper.CheckFactionBankAccounts();
|
||||||
BusinessManager.LoadBusinesses();
|
BusinessManager.LoadBusinesses();
|
||||||
InteriorManager.LoadInteriors();
|
InteriorManager.LoadInteriors();
|
||||||
|
DoorManager.LoadDoors();
|
||||||
|
|
||||||
|
|
||||||
TempBlip tempBlip = new TempBlip()
|
TempBlip tempBlip = new TempBlip()
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
using System;
|
using GTANetworkAPI;
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
using System.Numerics;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -26,6 +26,9 @@ namespace reallife_gamemode.Server.Entities
|
|||||||
public float Z { get; set; }
|
public float Z { get; set; }
|
||||||
public float Radius { get; set; }
|
public float Radius { get; set; }
|
||||||
|
|
||||||
|
[NotMapped]
|
||||||
|
public Vector3 Position => new Vector3(X, Y, Z);
|
||||||
|
|
||||||
[ForeignKey("FactionId")]
|
[ForeignKey("FactionId")]
|
||||||
public int? FactionId { get; set; }
|
public int? FactionId { get; set; }
|
||||||
public Faction Faction { get; set; }
|
public Faction Faction { get; set; }
|
||||||
|
|||||||
@@ -17,18 +17,34 @@ namespace reallife_gamemode.Server.Managers
|
|||||||
{
|
{
|
||||||
public class DoorManager : Script
|
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()
|
||||||
|
{
|
||||||
|
_doorColShapes.Clear();
|
||||||
|
LoadDoors();
|
||||||
|
}
|
||||||
|
|
||||||
public static void ChangeDoorState(Client player)
|
public static void ChangeDoorState(Client player)
|
||||||
{
|
{
|
||||||
List<Door> NearDoors = new List<Door>();
|
|
||||||
var user = player.GetUser();
|
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)
|
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))
|
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!";
|
string lockState = "~r~Du hast kein Recht diese T\u00fcr " + (d.Locked == true ? "auf" : "ab") + "zuschlie\u00dfen!";
|
||||||
@@ -36,15 +52,31 @@ namespace reallife_gamemode.Server.Managers
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
currentDoor.Locked = !currentDoor.Locked;
|
d.Locked = !d.Locked;
|
||||||
|
|
||||||
string notStr = d.Name + " " + (d.Locked == false ? "~g~auf" : "~r~ab") + "geschlossen";
|
string notStr = d.Name + " " + (d.Locked == false ? "~g~auf" : "~r~ab") + "geschlossen";
|
||||||
|
|
||||||
player.SendNotification(notStr, true);
|
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;
|
||||||
|
NAPI.Util.ConsoleOutput("entered door colshape id = " + doorId);
|
||||||
|
|
||||||
|
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();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user