haus system auf core geändert

This commit is contained in:
hydrant
2020-03-29 12:18:17 +02:00
parent 6bd3d4a3d0
commit bcfc2105ea
68 changed files with 1366 additions and 810 deletions

View File

@@ -2793,144 +2793,10 @@ namespace ReallifeGamemode.Server.Commands
ChatService.SendMessage(player, "~b~[ADMIN]~s~ Die Türen wurden erfolgreich neugeladen.");
}
[Command("house", "~m~Benutzung: ~s~/house [add / remove / price / type / reloadhouses]", GreedyArg = true)]
public void CmdAdminHouse(Player player, string option1 = null, string option2 = null)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
option1 = option1?.ToLower();
if (option1 == "add")
{
House nearHouse = HouseManager.GetNearHouse(player.Position);
if (nearHouse != null)
{
ChatService.ErrorMessage(player, "In der Nähe ist schon ein Haus");
return;
}
using (var dbContext = new DatabaseContext())
{
House house = new House()
{
Price = 0,
Type = "Haus",
X = player.Position.X,
Y = player.Position.Y,
Z = player.Position.Z
};
dbContext.Houses.Add(house);
dbContext.SaveChanges();
HouseManager.LoadHouse(house);
player.SendNotification("Das Haus wurde erstellt");
}
return;
}
else if (option1 == "remove")
{
using (var dbContext = new DatabaseContext())
{
House nearHouse = HouseManager.GetNearHouse(player.Position, dbContext);
if (nearHouse == null)
{
ChatService.ErrorMessage(player, "In deiner Nähe befindet sich kein Haus");
return;
}
if (nearHouse.OwnerId != null)
{
dbContext.Users.Where(u => u.Id == nearHouse.OwnerId).First().HouseId = null;
}
foreach (HouseRental rental in dbContext.HouseRentals.Include(r => r.User).Where(r => r.HouseId == nearHouse.Id))
{
rental.User.Player?.SendChatMessage("!{#81F7BE}* Dein Mietvertrag wurde administrativ aufgelöst!");
dbContext.HouseRentals.Remove(rental);
}
dbContext.Houses.Remove(nearHouse);
dbContext.SaveChanges();
HouseManager.RemoveHouse(nearHouse);
player.SendNotification("Das Haus wurde gelöscht");
}
return;
}
else if (option1 == "price")
{
if (!int.TryParse(option2, out int price))
{
ChatService.SendMessage(player, "~m~Benutzung: ~s~/house price [Price]");
return;
}
using (var dbContext = new DatabaseContext())
{
House nearHouse = HouseManager.GetNearHouse(player.Position, dbContext);
if (nearHouse == null)
{
ChatService.ErrorMessage(player, "In deiner Nähe befindet sich kein Haus");
return;
}
nearHouse.Price = price;
dbContext.SaveChanges();
HouseManager.RemoveHouse(nearHouse);
HouseManager.LoadHouse(nearHouse);
player.SendNotification("Der Hauspreis wurde gesetzt");
}
return;
}
else if (option1 == "type")
{
if (option2 == null)
{
ChatService.ErrorMessage(player, "~m~Benutzung: ~s~/house type [Type]");
return;
}
using (var dbContext = new DatabaseContext())
{
House nearHouse = HouseManager.GetNearHouse(player.Position, dbContext);
if (nearHouse == null)
{
ChatService.ErrorMessage(player, "In deiner Nähe befindet sich kein Haus");
return;
}
nearHouse.Type = option2;
dbContext.SaveChanges();
HouseManager.RemoveHouse(nearHouse);
HouseManager.LoadHouse(nearHouse);
player.SendNotification("Der Haustyp wurde gesetzt");
}
return;
}
else if (option1 == "reloadhouses")
{
HouseManager.ReloadAllHouses();
player.SendNotification("Alle Häuser wurden neu geladen");
return;
}
player.SendChatMessage("~m~Benutzung: ~s~/house [add / remove / price / type / reloadhouses]");
}
//[Command("house", "~m~Benutzung: ~s~/house [add / remove / price / type / reloadhouses]", GreedyArg = true)]
//public void CmdAdminHouse(Player player, string option1 = null, string option2 = null)
//{
//}
[Command("paydaydrop", "~m~Benutzung: ~s~/paydaydrop")]
public void CmdAdminPaydaydrop(Player player)

View File

@@ -10,6 +10,7 @@ using ReallifeGamemode.Server.Wanted;
using ReallifeGamemode.Database;
using ReallifeGamemode.Server.Types;
using ReallifeGamemode.Database.Entities;
using Newtonsoft.Json;
/**
* @overview Life of German Reallife - Event Login (Login.cs)
@@ -52,6 +53,7 @@ namespace ReallifeGamemode.Server.Events
player.Name = username;
player.TriggerEvent("SERVER:Login_Success");
player.SetData("isLoggedIn", true);
player.SetSharedData("isLoggedIn", JsonConvert.SerializeObject(true));
player.SetData("spec", true);
player.SetData("duty", false);
player.TriggerEvent("SERVER:SET_HANDMONEY", user.Handmoney, 0);

View File

@@ -96,7 +96,7 @@ namespace ReallifeGamemode.Server
CityHallManager.LoadCityHall();
JobManager.LoadJobs();
TaxiDriverJob.StartTaxiTimer();
HouseManager.LoadHouses();
//HouseManager.LoadHouses();
DrivingSchool.DrivingSchool.Setup();
PlaneSchool.Setup();
Gangwar.Gangwar.loadTurfs();

View File

@@ -12,439 +12,432 @@ using System.Text;
namespace ReallifeGamemode.Server.Managers
{
public class HouseManager : Script
{
private static readonly Dictionary<int, NetHandle> houseMarkers = new Dictionary<int, NetHandle>();
private static readonly Dictionary<int, NetHandle> houseLabels = new Dictionary<int, NetHandle>();
private static readonly Dictionary<int, NetHandle> houseColShapes = new Dictionary<int, NetHandle>();
private static readonly Dictionary<int, NetHandle> houseBlips = new Dictionary<int, NetHandle>();
private static readonly Dictionary<int, List<Player>> playerInColShape = new Dictionary<int, List<Player>>();
public static async void LoadHouses()
{
using (var dbContext = new DatabaseContext())
{
List<House> houses = await dbContext.Houses.Include(h => h.Owner).ToListAsync();
foreach (House house in houses)
{
LoadHouse(house, true);
}
}
}
public static async void ReloadAllHouses()
{
using (var dbContext = new DatabaseContext())
{
foreach (House house in await dbContext.Houses.Include(h => h.Owner).ToListAsync())
{
RemoveHouse(house);
LoadHouse(house, false);
}
}
}
public static House GetNearHouse(Vector3 position, DatabaseContext dbContext = null)
{
if (dbContext == null)
{
using (dbContext = new DatabaseContext())
{
return dbContext.Houses.Where(h => h.Position.DistanceTo(position) <= 5f).Include(h => h.Owner).OrderBy(h => h.Position.DistanceTo(position)).FirstOrDefault();
}
}
else
{
return dbContext.Houses.Where(h => h.Position.DistanceTo(position) <= 5f).Include(h => h.Owner).OrderBy(h => h.Position.DistanceTo(position)).FirstOrDefault();
}
}
public void AddHouse(string type, int price, Vector3 position)
{
using (var dbContext = new DatabaseContext())
{
var house = new House()
{
Price = price,
Type = type,
X = position.X,
Y = position.Y,
Z = position.Z
};
dbContext.Houses.Add(house);
dbContext.SaveChanges();
LoadHouse(house);
}
}
public static House GetHouseById(int id, DatabaseContext dbContext = null)
{
if (dbContext == null)
{
using (dbContext = new DatabaseContext())
{
return dbContext.Houses.Where(h => h.Id == id).Include(h => h.Owner).FirstOrDefault();
}
}
else
{
return dbContext.Houses.Where(h => h.Id == id).Include(h => h.Owner).FirstOrDefault();
}
}
public static void LoadHouse(House house, bool loadUser = true)
{
if (loadUser) house = house.Refresh();
playerInColShape[house.Id] = new List<Player>();
houseMarkers[house.Id] = NAPI.Marker.CreateMarker(MarkerType.VerticalCylinder, house.Position.Subtract(new Vector3(0, 0, 1.7)), new Vector3(), new Vector3(), 1.6f, new Color(255, 255, 255)).Handle;
string text = $"~g~Zum Verkauf\n~s~{house.Type}\nPreis: ~y~{(house.Price == 0 ? "~r~Nicht verkäuflich" : house.Price.ToMoneyString())}";
if (house.OwnerId != null)
{
text = $"{house.Type}\n~s~Besitzer: ~y~{house.Owner.Name}";
if (house.RentalFee != 0)
{
text += $"\n~s~Mietpreis: ~g~{house.RentalFee.ToMoneyString()}";
}
}
else
{
//houseBlips[house.Id] = NAPI.Blip.CreateBlip(40, house.Position, 0.7f, 11, "Haus", shortRange: true); too many blips
}
houseLabels[house.Id] = NAPI.TextLabel.CreateTextLabel(text, house.Position, 10f, 1f, 0, new Color(255, 255, 255));
if (house.Price != 0)
{
houseColShapes[house.Id] = NAPI.ColShape.CreateCylinderColShape(house.Position.Subtract(new Vector3(0, 0, 2)), 2.0f, 5f);
houseColShapes[house.Id].Entity<ColShape>().OnEntityEnterColShape += HouseManager_OnEntityEnterColShape;
houseColShapes[house.Id].Entity<ColShape>().OnEntityExitColShape += HouseManager_OnEntityExitColShape;
}
}
private static void HouseManager_OnEntityExitColShape(ColShape colShape, Player client)
{
if (!client.IsLoggedIn() || client.IsInVehicle) return;
if (!houseColShapes.ContainsValue(colShape.Handle))
{
return;
}
int houseId = houseColShapes.Where(p => p.Value.Value == colShape.Handle.Value).FirstOrDefault().Key;
playerInColShape[houseId].Remove(client);
client.TriggerEvent("SERVER:CloseHouseMenu");
}
private static void HouseManager_OnEntityEnterColShape(ColShape colShape, Player client)
{
if (!client.IsLoggedIn() || client.IsInVehicle) return;
if (!houseColShapes.ContainsValue(colShape.Handle))
{
return;
}
int houseId = houseColShapes.Where(p => p.Value.Value == colShape.Handle.Value).FirstOrDefault().Key;
playerInColShape[houseId].Add(client);
House house = GetHouseById(houseId);
User user = client.GetUser();
client.TriggerEvent("SERVER:ShowHouseMenu");
SendPlayerHouseData(client, house);
}
private static void SendPlayerHouseData(Player player, House house)
{
User user = player.GetUser();
var userHouseStatus = -1;
using (var dbContext = new DatabaseContext())
{
if (house.OwnerId == null) userHouseStatus = 0;
else if (house.OwnerId == user?.Id) userHouseStatus = 1;
else if (dbContext.HouseRentals.Where(h => h.HouseId == house.Id && h.UserId == user.Id).Count() == 1) userHouseStatus = 2;
var rentals = dbContext.HouseRentals.Where(h => h.HouseId == house.Id).Include(h => h.User).Select(h => h.User.Name).ToList();
var newHouse = new
{
OwnerName = house.Owner?.Name,
house.RentalFee,
house.Price,
house.Type,
Rentals = rentals
};
player.TriggerEvent("SERVER:SetHouseData", JsonConvert.SerializeObject(newHouse), userHouseStatus);
}
}
public static void RemoveHouse(House house)
{
if (houseMarkers.ContainsKey(house.Id))
{
houseMarkers[house.Id].Entity<Marker>().Delete();
houseMarkers.Remove(house.Id);
}
if (houseLabels.ContainsKey(house.Id))
{
houseLabels[house.Id].Entity<TextLabel>().Delete();
houseLabels.Remove(house.Id);
}
if (houseColShapes.ContainsKey(house.Id))
{
houseColShapes[house.Id].Entity<ColShape>().Delete();
houseColShapes.Remove(house.Id);
}
if (houseBlips.ContainsKey(house.Id))
{
houseBlips[house.Id].Entity<Blip>().Delete();
houseBlips.Remove(house.Id);
}
foreach (Player client in playerInColShape[house.Id])
{
client.TriggerEvent("SERVER:CloseHouseMenu");
}
}
[RemoteEvent("CLIENT:House_BuyHouse")]
public void HouseManagerBuyHouseEvent(Player player)
{
using (var dbContext = new DatabaseContext())
{
User user = player.GetUser(dbContext);
if (user.HouseId != null)
{
ChatService.ErrorMessage(player, "Du kann nicht mehrere Häuser besitzen");
return;
}
House house = GetNearHouse(player.Position, dbContext);
var userBank = user.BankAccount;
if (userBank.Balance < house.Price)
{
ChatService.ErrorMessage(player, $"Du hast nicht genug Geld für das Haus ({house.Price.ToMoneyString()})");
return;
}
house.Owner = user;
user.House = house;
userBank.Balance -= house.Price;
dbContext.SaveChanges();
RemoveHouse(house);
LoadHouse(house);
}
}
[RemoteEvent("CLIENT:House_SetRentalFee")]
public void HouseManagerSetRentalFeeEvent(Player player, int rentalFee)
{
using (var dbContext = new DatabaseContext())
{
User user = player.GetUser(dbContext);
if (user.HouseId == null)
{
ChatService.ErrorMessage(player, "Du besitzt kein Haus");
return;
}
House house = GetHouseById(user.HouseId.Value, dbContext);
if (DateTime.Now - house.LastRentSetTime < TimeSpan.FromDays(7))
{
DateTime newPossibility = house.LastRentSetTime.AddDays(7);
string dateStr = newPossibility.ToLongDateString();
string timeStr = newPossibility.ToShortTimeString();
player.SendNotification(
$"~r~Die Miete wurde in den letzten 7 Tagen schon verändert. Die nächste Änderung kann am {dateStr} um {timeStr} Uhr geändert werden.");
return;
}
if (rentalFee < 0)
{
player.SendNotification("~r~Die Miete darf kein negativer Betrag sein!");
return;
}
if (rentalFee > 5000)
{
player.SendNotification($"~r~Die Miete darf einen Preis von {5000.ToMoneyString()} nicht überschreiten!");
return;
}
house.LastRentSetTime = DateTime.Now;
house.RentalFee = rentalFee;
dbContext.SaveChanges();
player.SendNotification($"Der Mietpreis wurde auf ~g~{rentalFee.ToMoneyString()}~s~ gesetzt");
RemoveHouse(house);
LoadHouse(house);
}
}
[RemoteEvent("CLIENT:House_CancelUserRental")]
public void HouseManagerCancelUserRentalEvent(Player player, string userName)
{
using (var dbContext = new DatabaseContext())
{
User user = player.GetUser(dbContext);
if (user.HouseId == null)
{
ChatService.ErrorMessage(player, "Du besitzt kein Haus");
return;
}
User target = dbContext.Users.Where(u => u.Name == userName).FirstOrDefault();
if (target == null)
{
player.SendNotification("~r~Dieser Spieler wurde nicht gefunden.");
return;
}
House house = GetHouseById(user.HouseId.Value, dbContext);
HouseRental rental = dbContext.HouseRentals.Where(h => h.HouseId == house.Id && h.UserId == target.Id).FirstOrDefault();
if (rental == null)
{
player.SendNotification("~r~Der Spieler ist nicht in deinem Haus eingemietet");
return;
}
dbContext.HouseRentals.Remove(rental);
dbContext.SaveChanges();
target.Player?.SendNotification($"~y~{player.Name}~s~ hat deinen Mietvertrag ~g~gekündigt~s~.");
player.SendNotification("Du hast dem Spieler ~y~" + target.Name + "~s~ den Mietvertrag gekündigt.");
SendPlayerHouseData(player, house);
}
}
[RemoteEvent("CLIENT:House_RentInHouse")]
public void HouseManagerRentInHouseEvent(Player player)
{
using (var dbContext = new DatabaseContext())
{
User user = player.GetUser(dbContext);
House house = GetNearHouse(player.Position, dbContext);
if (house == null)
{
ChatService.ErrorMessage(player, "In deiner Nähe ist kein Haus");
return;
}
if (house.RentalFee == 0)
{
player.SendChatMessage("~r~Dieses Haus hat keinen Platz für Mieter!");
return;
}
HouseRental newRental = new HouseRental
{
HouseId = house.Id,
UserId = user.Id
};
dbContext.HouseRentals.Add(newRental);
dbContext.SaveChanges();
player.SendNotification("~g~Du hast dich in das Haus eingemietet");
house.User?.SendNotification($"~y~{player.Name}~s~ hat sich in dein Haus eingemietet.");
SendPlayerHouseData(player, house);
}
}
[RemoteEvent("CLIENT:House_CancelOwnRental")]
public void HouseManagerCancelOwnRentalEvent(Player player)
{
using (var dbContext = new DatabaseContext())
{
User user = player.GetUser(dbContext);
House house = GetNearHouse(player.Position, dbContext);
if (house == null)
{
ChatService.ErrorMessage(player, "In deiner Nähe ist kein Haus");
return;
}
HouseRental rental = dbContext.HouseRentals.Where(h => h.HouseId == house.Id && h.UserId == user.Id).FirstOrDefault();
if (rental == null)
{
player.SendNotification("~r~Du bist nin diesem Haus nicht eingemietet");
return;
}
dbContext.HouseRentals.Remove(rental);
dbContext.SaveChanges();
player.SendNotification("~g~Du hast den Mietvertrag gekündigt.");
house.User?.SendNotification($"~y~{player.Name}~s~ hat seinen Mietvertrag gekündigt.");
RemoveHouse(house);
LoadHouse(house);
SendPlayerHouseData(player, house);
}
}
[RemoteEvent("CLIENT:House_SellHouse")]
public void HouseManagerSellHouseEvent(Player player)
{
using (var dbContext = new DatabaseContext())
{
User user = player.GetUser(dbContext);
if (user.HouseId == null)
{
ChatService.ErrorMessage(player, "Du besitzt kein Haus");
return;
}
House house = GetHouseById(user.HouseId.Value, dbContext);
house.OwnerId = null;
user.HouseId = null;
//public class HouseManager : Script
//{
// private static readonly Dictionary<int, NetHandle> houseMarkers = new Dictionary<int, NetHandle>();
// private static readonly Dictionary<int, NetHandle> houseLabels = new Dictionary<int, NetHandle>();
// private static readonly Dictionary<int, NetHandle> houseColShapes = new Dictionary<int, NetHandle>();
// private static readonly Dictionary<int, NetHandle> houseBlips = new Dictionary<int, NetHandle>();
// private static readonly Dictionary<int, List<Player>> playerInColShape = new Dictionary<int, List<Player>>();
// public static async void LoadHouses()
// {
// }
// public static async void ReloadAllHouses()
// {
// using (var dbContext = new DatabaseContext())
// {
// foreach (House house in await dbContext.Houses.Include(h => h.Owner).ToListAsync())
// {
// RemoveHouse(house);
// LoadHouse(house, false);
// }
// }
// }
// public static House GetNearHouse(Vector3 position, DatabaseContext dbContext = null)
// {
// if (dbContext == null)
// {
// using (dbContext = new DatabaseContext())
// {
// return dbContext.Houses.Where(h => h.Position.DistanceTo(position) <= 5f).Include(h => h.Owner).OrderBy(h => h.Position.DistanceTo(position)).FirstOrDefault();
// }
// }
// else
// {
// return dbContext.Houses.Where(h => h.Position.DistanceTo(position) <= 5f).Include(h => h.Owner).OrderBy(h => h.Position.DistanceTo(position)).FirstOrDefault();
// }
// }
// public void AddHouse(string type, int price, Vector3 position)
// {
// using (var dbContext = new DatabaseContext())
// {
// var house = new House()
// {
// Price = price,
// Type = type,
// X = position.X,
// Y = position.Y,
// Z = position.Z
// };
// dbContext.Houses.Add(house);
// dbContext.SaveChanges();
// LoadHouse(house);
// }
// }
// public static House GetHouseById(int id, DatabaseContext dbContext = null)
// {
// if (dbContext == null)
// {
// using (dbContext = new DatabaseContext())
// {
// return dbContext.Houses.Where(h => h.Id == id).Include(h => h.Owner).FirstOrDefault();
// }
// }
// else
// {
// return dbContext.Houses.Where(h => h.Id == id).Include(h => h.Owner).FirstOrDefault();
// }
// }
// public static void LoadHouse(House house, bool loadUser = true)
// {
// if (loadUser) house = house.Refresh();
// playerInColShape[house.Id] = new List<Player>();
// houseMarkers[house.Id] = NAPI.Marker.CreateMarker(MarkerType.VerticalCylinder, house.Position.Subtract(new Vector3(0, 0, 1.7)), new Vector3(), new Vector3(), 1.6f, new Color(255, 255, 255)).Handle;
// string text = $"~g~Zum Verkauf\n~s~{house.Type}\nPreis: ~y~{(house.Price == 0 ? "~r~Nicht verkäuflich" : house.Price.ToMoneyString())}";
// if (house.OwnerId != null)
// {
// text = $"{house.Type}\n~s~Besitzer: ~y~{house.Owner.Name}";
// if (house.RentalFee != 0)
// {
// text += $"\n~s~Mietpreis: ~g~{house.RentalFee.ToMoneyString()}";
// }
// }
// else
// {
// //houseBlips[house.Id] = NAPI.Blip.CreateBlip(40, house.Position, 0.7f, 11, "Haus", shortRange: true); too many blips
// }
// houseLabels[house.Id] = NAPI.TextLabel.CreateTextLabel(text, house.Position, 10f, 1f, 0, new Color(255, 255, 255));
// if (house.Price != 0)
// {
// houseColShapes[house.Id] = NAPI.ColShape.CreateCylinderColShape(house.Position.Subtract(new Vector3(0, 0, 2)), 2.0f, 5f);
// houseColShapes[house.Id].Entity<ColShape>().OnEntityEnterColShape += HouseManager_OnEntityEnterColShape;
// houseColShapes[house.Id].Entity<ColShape>().OnEntityExitColShape += HouseManager_OnEntityExitColShape;
// }
// }
// private static void HouseManager_OnEntityExitColShape(ColShape colShape, Player client)
// {
// if (!client.IsLoggedIn() || client.IsInVehicle) return;
// if (!houseColShapes.ContainsValue(colShape.Handle))
// {
// return;
// }
// int houseId = houseColShapes.Where(p => p.Value.Value == colShape.Handle.Value).FirstOrDefault().Key;
// playerInColShape[houseId].Remove(client);
// client.TriggerEvent("SERVER:CloseHouseMenu");
// }
// private static void HouseManager_OnEntityEnterColShape(ColShape colShape, Player client)
// {
// if (!client.IsLoggedIn() || client.IsInVehicle) return;
// if (!houseColShapes.ContainsValue(colShape.Handle))
// {
// return;
// }
// int houseId = houseColShapes.Where(p => p.Value.Value == colShape.Handle.Value).FirstOrDefault().Key;
// playerInColShape[houseId].Add(client);
// House house = GetHouseById(houseId);
// User user = client.GetUser();
// client.TriggerEvent("SERVER:ShowHouseMenu");
// SendPlayerHouseData(client, house);
// }
// private static void SendPlayerHouseData(Player player, House house)
// {
// User user = player.GetUser();
// var userHouseStatus = -1;
// using (var dbContext = new DatabaseContext())
// {
// if (house.OwnerId == null) userHouseStatus = 0;
// else if (house.OwnerId == user?.Id) userHouseStatus = 1;
// else if (dbContext.HouseRentals.Where(h => h.HouseId == house.Id && h.UserId == user.Id).Count() == 1) userHouseStatus = 2;
// var rentals = dbContext.HouseRentals.Where(h => h.HouseId == house.Id).Include(h => h.User).Select(h => h.User.Name).ToList();
// var newHouse = new
// {
// OwnerName = house.Owner?.Name,
// house.RentalFee,
// house.Price,
// house.Type,
// Rentals = rentals
// };
// player.TriggerEvent("SERVER:SetHouseData", JsonConvert.SerializeObject(newHouse), userHouseStatus);
// }
// }
// public static void RemoveHouse(House house)
// {
// if (houseMarkers.ContainsKey(house.Id))
// {
// houseMarkers[house.Id].Entity<Marker>().Delete();
// houseMarkers.Remove(house.Id);
// }
// if (houseLabels.ContainsKey(house.Id))
// {
// houseLabels[house.Id].Entity<TextLabel>().Delete();
// houseLabels.Remove(house.Id);
// }
// if (houseColShapes.ContainsKey(house.Id))
// {
// houseColShapes[house.Id].Entity<ColShape>().Delete();
// houseColShapes.Remove(house.Id);
// }
// if (houseBlips.ContainsKey(house.Id))
// {
// houseBlips[house.Id].Entity<Blip>().Delete();
// houseBlips.Remove(house.Id);
// }
// foreach (Player client in playerInColShape[house.Id])
// {
// client.TriggerEvent("SERVER:CloseHouseMenu");
// }
// }
// [RemoteEvent("CLIENT:House_BuyHouse")]
// public void HouseManagerBuyHouseEvent(Player player)
// {
// using (var dbContext = new DatabaseContext())
// {
// User user = player.GetUser(dbContext);
// if (user.HouseId != null)
// {
// ChatService.ErrorMessage(player, "Du kann nicht mehrere Häuser besitzen");
// return;
// }
// House house = GetNearHouse(player.Position, dbContext);
// var userBank = user.BankAccount;
// if (userBank.Balance < house.Price)
// {
// ChatService.ErrorMessage(player, $"Du hast nicht genug Geld für das Haus ({house.Price.ToMoneyString()})");
// return;
// }
// house.Owner = user;
// user.House = house;
// userBank.Balance -= house.Price;
// dbContext.SaveChanges();
// RemoveHouse(house);
// LoadHouse(house);
// }
// }
// [RemoteEvent("CLIENT:House_SetRentalFee")]
// public void HouseManagerSetRentalFeeEvent(Player player, int rentalFee)
// {
// using (var dbContext = new DatabaseContext())
// {
// User user = player.GetUser(dbContext);
// if (user.HouseId == null)
// {
// ChatService.ErrorMessage(player, "Du besitzt kein Haus");
// return;
// }
// House house = GetHouseById(user.HouseId.Value, dbContext);
// if (DateTime.Now - house.LastRentSetTime < TimeSpan.FromDays(7))
// {
// DateTime newPossibility = house.LastRentSetTime.AddDays(7);
// string dateStr = newPossibility.ToLongDateString();
// string timeStr = newPossibility.ToShortTimeString();
// player.SendNotification(
// $"~r~Die Miete wurde in den letzten 7 Tagen schon verändert. Die nächste Änderung kann am {dateStr} um {timeStr} Uhr geändert werden.");
// return;
// }
// if (rentalFee < 0)
// {
// player.SendNotification("~r~Die Miete darf kein negativer Betrag sein!");
// return;
// }
// if (rentalFee > 5000)
// {
// player.SendNotification($"~r~Die Miete darf einen Preis von {5000.ToMoneyString()} nicht überschreiten!");
// return;
// }
// house.LastRentSetTime = DateTime.Now;
// house.RentalFee = rentalFee;
// dbContext.SaveChanges();
// player.SendNotification($"Der Mietpreis wurde auf ~g~{rentalFee.ToMoneyString()}~s~ gesetzt");
// RemoveHouse(house);
// LoadHouse(house);
// }
// }
// [RemoteEvent("CLIENT:House_CancelUserRental")]
// public void HouseManagerCancelUserRentalEvent(Player player, string userName)
// {
// using (var dbContext = new DatabaseContext())
// {
// User user = player.GetUser(dbContext);
// if (user.HouseId == null)
// {
// ChatService.ErrorMessage(player, "Du besitzt kein Haus");
// return;
// }
// User target = dbContext.Users.Where(u => u.Name == userName).FirstOrDefault();
// if (target == null)
// {
// player.SendNotification("~r~Dieser Spieler wurde nicht gefunden.");
// return;
// }
// House house = GetHouseById(user.HouseId.Value, dbContext);
// HouseRental rental = dbContext.HouseRentals.Where(h => h.HouseId == house.Id && h.UserId == target.Id).FirstOrDefault();
// if (rental == null)
// {
// player.SendNotification("~r~Der Spieler ist nicht in deinem Haus eingemietet");
// return;
// }
// dbContext.HouseRentals.Remove(rental);
// dbContext.SaveChanges();
// target.Player?.SendNotification($"~y~{player.Name}~s~ hat deinen Mietvertrag ~g~gekündigt~s~.");
// player.SendNotification("Du hast dem Spieler ~y~" + target.Name + "~s~ den Mietvertrag gekündigt.");
// SendPlayerHouseData(player, house);
// }
// }
// [RemoteEvent("CLIENT:House_RentInHouse")]
// public void HouseManagerRentInHouseEvent(Player player)
// {
// using (var dbContext = new DatabaseContext())
// {
// User user = player.GetUser(dbContext);
// House house = GetNearHouse(player.Position, dbContext);
// if (house == null)
// {
// ChatService.ErrorMessage(player, "In deiner Nähe ist kein Haus");
// return;
// }
// if (house.RentalFee == 0)
// {
// player.SendChatMessage("~r~Dieses Haus hat keinen Platz für Mieter!");
// return;
// }
// HouseRental newRental = new HouseRental
// {
// HouseId = house.Id,
// UserId = user.Id
// };
// dbContext.HouseRentals.Add(newRental);
// dbContext.SaveChanges();
// player.SendNotification("~g~Du hast dich in das Haus eingemietet");
// house.User?.SendNotification($"~y~{player.Name}~s~ hat sich in dein Haus eingemietet.");
// SendPlayerHouseData(player, house);
// }
// }
// [RemoteEvent("CLIENT:House_CancelOwnRental")]
// public void HouseManagerCancelOwnRentalEvent(Player player)
// {
// using (var dbContext = new DatabaseContext())
// {
// User user = player.GetUser(dbContext);
// House house = GetNearHouse(player.Position, dbContext);
// if (house == null)
// {
// ChatService.ErrorMessage(player, "In deiner Nähe ist kein Haus");
// return;
// }
// HouseRental rental = dbContext.HouseRentals.Where(h => h.HouseId == house.Id && h.UserId == user.Id).FirstOrDefault();
// if (rental == null)
// {
// player.SendNotification("~r~Du bist nin diesem Haus nicht eingemietet");
// return;
// }
// dbContext.HouseRentals.Remove(rental);
// dbContext.SaveChanges();
// player.SendNotification("~g~Du hast den Mietvertrag gekündigt.");
// house.User?.SendNotification($"~y~{player.Name}~s~ hat seinen Mietvertrag gekündigt.");
// RemoveHouse(house);
// LoadHouse(house);
// SendPlayerHouseData(player, house);
// }
// }
// [RemoteEvent("CLIENT:House_SellHouse")]
// public void HouseManagerSellHouseEvent(Player player)
// {
// using (var dbContext = new DatabaseContext())
// {
// User user = player.GetUser(dbContext);
// if (user.HouseId == null)
// {
// ChatService.ErrorMessage(player, "Du besitzt kein Haus");
// return;
// }
// House house = GetHouseById(user.HouseId.Value, dbContext);
// house.OwnerId = null;
// user.HouseId = null;
var backMoney = (int)(house.Price * 0.4);
ChatService.SendMessage(player, "Du bekommst vom Hausverkauf ~g~" + backMoney.ToMoneyString() + "~s~ zurück.");
// var backMoney = (int)(house.Price * 0.4);
// ChatService.SendMessage(player, "Du bekommst vom Hausverkauf ~g~" + backMoney.ToMoneyString() + "~s~ zurück.");
user.BankAccount.Balance += backMoney;
dbContext.SaveChanges();
player.SendChatMessage("!{#81F7BE}* Du hast dein Haus verkauft.");
RemoveHouse(house);
LoadHouse(house);
SendPlayerHouseData(player, house);
}
}
}
// user.BankAccount.Balance += backMoney;
// dbContext.SaveChanges();
// player.SendChatMessage("!{#81F7BE}* Du hast dein Haus verkauft.");
// RemoveHouse(house);
// LoadHouse(house);
// SendPlayerHouseData(player, house);
// }
// }
//}
}