diff --git a/Model/DatabaseContext.cs b/Model/DatabaseContext.cs index 4255923e..fd90f1c1 100644 --- a/Model/DatabaseContext.cs +++ b/Model/DatabaseContext.cs @@ -39,6 +39,10 @@ namespace reallife_gamemode.Model modelBuilder.Entity() .HasIndex(b => b.BusinessId) .IsUnique(true); + + modelBuilder.Entity() + .HasIndex(u => u.BusinessId) + .IsUnique(true); } //User diff --git a/Server/Business/BusinessBase.cs b/Server/Business/BusinessBase.cs index bc9a2b1d..271df4aa 100644 --- a/Server/Business/BusinessBase.cs +++ b/Server/Business/BusinessBase.cs @@ -1,5 +1,6 @@ using GTANetworkAPI; using reallife_gamemode.Model; +using reallife_gamemode.Server.Entities; using reallife_gamemode.Server.Util; using System; using System.Collections.Generic; @@ -10,6 +11,8 @@ namespace reallife_gamemode.Server.Business { public abstract class BusinessBase : IBankAccountOwner { + private TextLabel _informationLabel; + public abstract int Id { get; } public abstract string Name { get; } @@ -21,12 +24,36 @@ namespace reallife_gamemode.Server.Business { using (databaseContext = new DatabaseContext()) { - return databaseContext.BusinessBankAccounts.FirstOrDefault(u => u.BusinessId == this.Id); + return databaseContext.BusinessBankAccounts.FirstOrDefault(u => u.BusinessId == Id); } } else { - return databaseContext.BusinessBankAccounts.FirstOrDefault(u => u.BusinessId == this.Id); + return databaseContext.BusinessBankAccounts.FirstOrDefault(u => u.BusinessId == Id); + } + } + + public void Setup() + { + _informationLabel = NAPI.TextLabel.CreateTextLabel(Name, Position, 20.0f, 1.3f, 0, new Color(255, 255, 255)); + } + + public void Update() + { + //NAPI.Util.ConsoleOutput("Updating Business: " + Name); + + User owner = GetOwner(); + string infoText = Name + "\n" + "Besitzer: " + (owner == null ? "Niemand" : owner.Name) + "\nKasse: " + (GetBankAccount()?.Balance ?? 0); + _informationLabel.Text = infoText; + } + + public User GetOwner() + { + using (var dbContext = new DatabaseContext()) + { + User user = dbContext.Users.FirstOrDefault(u => u.BusinessId == Id); + //NAPI.Util.ConsoleOutput("[" + Name + "] GetOwner: " + (user?.Name ?? "null")); + return user; } } diff --git a/Server/Business/SmsBusiness.cs b/Server/Business/SmsBusiness.cs new file mode 100644 index 00000000..d8cec834 --- /dev/null +++ b/Server/Business/SmsBusiness.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Text; +using GTANetworkAPI; + +namespace reallife_gamemode.Server.Business +{ + public class SmsBusiness : BusinessBase + { + public override int Id => 1; + + public override string Name => "SMS Business"; + + public override Vector3 Position => new Vector3(-423, 1130, 326); + + public override void Load() + { + + } + } +} diff --git a/Server/Business/TestBusiness.cs b/Server/Business/TestBusiness.cs index d856214c..5dd58e44 100644 --- a/Server/Business/TestBusiness.cs +++ b/Server/Business/TestBusiness.cs @@ -9,15 +9,15 @@ namespace reallife_gamemode.Server.Business { class TestBusiness : BusinessBase { - public override int Id => 1; + public override int Id => 0; public override string Name => "Test Business"; - public override Vector3 Position => throw new NotImplementedException(); + public override Vector3 Position => new Vector3(-443, 1134, 326); public override void Load() { - throw new NotImplementedException(); + } } } diff --git a/Server/Commands/Admin.cs b/Server/Commands/Admin.cs index 0263a0ec..b70c7148 100644 --- a/Server/Commands/Admin.cs +++ b/Server/Commands/Admin.cs @@ -15,6 +15,7 @@ using reallife_gamemode.Server.Services; using reallife_gamemode.Server.Util; using reallife_gamemode.Server.Managers; using reallife_gamemode.Server.Saves; +using reallife_gamemode.Server.Business; /** * @overview Life of German Reallife - Admin Commands (Admin.cs) @@ -172,6 +173,22 @@ namespace reallife_gamemode.Server.Commands } } } + + [Command("businesslist", "~m~Benutzung: ~s~/businesslist")] + public void CmdAdminBusinessList(Client player) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + player.SendChatMessage("~m~__________ ~s~Businesses ~m~__________"); + foreach (Business.BusinessBase b in BusinessManager.Businesses) + { + player.SendChatMessage(b.Id.ToString().PadRight(3) + " | " + b.Name); + } + } #endregion @@ -1644,6 +1661,7 @@ namespace reallife_gamemode.Server.Commands NAPI.Chat.SendChatMessageToPlayer(player, "~w~Das Wetter konnte nicht geändert werden"); } } + [Command("aspeed", "~m~Benutzung: ~s~/aspeed [Modifier]")] //TODO: Überarbeiten ?? SetPlayerVelocity ?? public void CmdAdminAspeed(Client player, float modifier) { @@ -1661,7 +1679,8 @@ namespace reallife_gamemode.Server.Commands player.Vehicle.EnginePowerMultiplier = modifier; } - [Command("setmoney")] + + [Command("setmoney", "~m~Benutzung: ~s~/setmoney [Name] [Menge]")] public void SetPlayerMoney(Client player, string receiver, int amount) { if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) @@ -1685,7 +1704,7 @@ namespace reallife_gamemode.Server.Commands target.SendChatMessage("~b~[ADMIN]~s~ Dein Geld wurde von Admin " + player.Name + " auf ~g~$" + amount + "~s~ gesetzt."); } - [Command("givemoney")] + [Command("givemoney", "~m~Benutzung: ~s~/givemoney [Name] [Menge]")] public void GivePlayerMoney(Client player, string receiver, int amount) { if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) @@ -1693,6 +1712,7 @@ namespace reallife_gamemode.Server.Commands ChatService.NotAuthorized(player); return; } + Client target = ClientService.GetClientByNameOrId(receiver); if (target == null || !target.IsLoggedIn()) { @@ -1708,6 +1728,46 @@ namespace reallife_gamemode.Server.Commands player.SendChatMessage("~b~[ADMIN]~s~ Du hast " + target.Name + " ~g~$" + amount + "~s~ gegeben."); target.SendChatMessage("~b~[ADMIN]~s~ Admin " + player.Name + " hat dir ~g~$" + amount + "~s~ gegeben."); } + + [Command("setbusinessowner", "~m~Benutzung: ~s~/setbusinessowner [Name] [Business ID]")] + public void CmdAdminSetbusinessowner(Client player, string name, int businessid) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + Client target = ClientService.GetClientByNameOrId(name); + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(player); + return; + } + + BusinessBase business = BusinessManager.GetBusiness(businessid); + if(business == null) + { + player.SendChatMessage("~r~[FEHLER]~s~ Dieses Business existiert nicht. ~m~/businesslist"); + return; + } + + if(business.GetOwner() != null) + { + player.SendChatMessage("~r~[FEHLER]~s~ Das Business hat momentan noch einen Besitzer: ~o~" + business.GetOwner().Name + "~s~. Entferne diesen Besitzer erst mit ~m~/clearbusiness"); + return; + } + + using(var dbContext = new DatabaseContext()) + { + Entities.User targetUser = target.GetUser(dbContext); + targetUser.BusinessId = businessid; + + business.Update(); + + dbContext.SaveChanges(); + } + } #endregion #region ALevel1338 diff --git a/Server/Entities/User.cs b/Server/Entities/User.cs index 6f488be3..bb0f3399 100644 --- a/Server/Entities/User.cs +++ b/Server/Entities/User.cs @@ -58,6 +58,8 @@ namespace reallife_gamemode.Server.Entities public int? FactionRankId { get; set; } public FactionRank FactionRank { get;set; } + public int? BusinessId { get; set; } + public Faction GetFaction() { using(var context = new DatabaseContext()) diff --git a/Server/Managers/BusinessManager.cs b/Server/Managers/BusinessManager.cs index be3e0ef7..6f78bf18 100644 --- a/Server/Managers/BusinessManager.cs +++ b/Server/Managers/BusinessManager.cs @@ -11,6 +11,7 @@ namespace reallife_gamemode.Server.Managers class BusinessManager : Script { private static List businesses; + public static List Businesses { get => businesses; } public static void LoadBusinesses() { @@ -22,12 +23,14 @@ namespace reallife_gamemode.Server.Managers NAPI.Util.ConsoleOutput($"Loading Business {item.Name}"); if (Activator.CreateInstance(item) is BusinessBase o) { - if (businesses.Find(b => b.GetType() == item) != null) + if (businesses.Any(x => x.Id == o.Id)) { - throw new InvalidOperationException($"Double Business found: {o.Id} | {o.Name}"); + throw new InvalidOperationException($"Double Business ID found: {o.Id} | {o.Name}"); } businesses.Add(o); + o.Setup(); o.Load(); + o.Update(); } } } @@ -37,5 +40,9 @@ namespace reallife_gamemode.Server.Managers return (T)businesses.Find(b => b.GetType() == typeof(T)); } + public static BusinessBase GetBusiness(int id) + { + return businesses.Find(b => b.Id == id); + } } }