using GTANetworkAPI; using ReallifeGamemode.Server.Entities; using ReallifeGamemode.Server.Extensions; using ReallifeGamemode.Server.Models; using ReallifeGamemode.Server.Util; using System.Linq; namespace ReallifeGamemode.Server.Business { public abstract class BusinessBase : IBankAccountOwner { private TextLabel _informationLabel; private Marker _marker; private ColShape _colShape; public abstract int Id { get; } public abstract string Name { get; } public abstract Vector3 Position { get; } public IBankAccount GetBankAccount(DatabaseContext databaseContext = null) { if (databaseContext == null) { using (databaseContext = new DatabaseContext()) { return databaseContext.BusinessBankAccounts.FirstOrDefault(u => u.BusinessId == Id); } } else { return databaseContext.BusinessBankAccounts.FirstOrDefault(u => u.BusinessId == Id); } } 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)); _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.OnEntityEnterColShape += EntityEnterBusinessColShape; _colShape.OnEntityExitColShape += EntityExitBusinessColShape; if (GetBankAccount() == null) { NAPI.Util.ConsoleOutput("Creating Bank Account for Business: " + Name); using (var dbContext = new DatabaseContext()) { dbContext.BusinessBankAccounts.Add(new BusinessBankAccount() { BusinessId = Id, Balance = 0 }); dbContext.SaveChanges(); } } } private void EntityExitBusinessColShape(ColShape colShape, Client client) { client.TriggerEvent("business_removeHelp", true); } private void EntityEnterBusinessColShape(ColShape colShape, Client client) { if (GetOwner() != null && GetOwner().Id == client.GetUser()?.Id && !client.IsInVehicle) { client.TriggerEvent("business_showHelp", Name, (GetBankAccount()?.Balance ?? 0).ToMoneyString()); } } public void Update(int? money = null) { if (money == null) money = GetBankAccount()?.Balance ?? 0; User owner = GetOwner(); string infoText = Name + "\n" + "Besitzer: " + (owner == null ? "Niemand" : owner.Name) + "\nKasse: ~g~" + money.ToMoneyString(); _informationLabel.Text = infoText; } public User GetOwner(DatabaseContext dbContext = null) { if(dbContext == null) { using (dbContext = new DatabaseContext()) { return dbContext.Users.FirstOrDefault(u => u.BusinessId == Id); } } else { return dbContext.Users.FirstOrDefault(u => u.BusinessId == Id); } } public abstract void Load(); } }