/*** @overview Life of German - Economy @author kookroach @copyright (c) 2008 - 2019 Life of German */ using System; using System.Collections.Generic; using System.Linq; using System.Text; using GTANetworkAPI; using ReallifeGamemode.Server.Entities; using ReallifeGamemode.Server.Extensions; using ReallifeGamemode.Server.Models; using ReallifeGamemode.Server.Services; namespace ReallifeGamemode.Server.Finance { public class Economy { public static Dictionary Paychecks { get; set; } = new Dictionary(); public static (int, float, float) GetEconomyClass(Client client, int wage) { int bankAccount = client.GetUser().GetBankAccount().Balance; float financialHelp = -(float)Math.Pow(1.0005, -bankAccount) * -1000; float financialInterest = 1 - (float)Math.Pow(1.00006, -wage) * 1; if (financialInterest >= 0.7) financialInterest = 0.7f; return (bankAccount, financialHelp, financialInterest); } public static int GetVehicleTaxation(Client client) { int vehicleTaxation = 0; using (var dbContext = new DatabaseContext()) { User user = client.GetUser(dbContext); foreach (VehicleHash vehHash in dbContext.UserVehicles.Where(u => u.UserId == user.Id).Select(u => u.Model)) { int type = NAPI.Vehicle.GetVehicleClass(vehHash); switch (type) { /* 0 Compacts 1 Sedans 2 SUVs 3 Coupes 4 Muscle 5 Sports 6 Sports 7 Super 8 Motorcycles 9 Off-Road 10 Industrial 11 Utility 12 Vans 13 Cycles 14 Boats 15 Helicopters 16 Planes 17 Service 18 Emergency 19 Military 20 Commercial 21 Trains */ case 0: vehicleTaxation += 250; break; case 1: vehicleTaxation += 350; break; case 2: vehicleTaxation += 500; break; case 3: vehicleTaxation += 400; break; case 4: vehicleTaxation += 300; break; case 5: vehicleTaxation += 800; break; case 6: vehicleTaxation += 950; break; case 7: vehicleTaxation += 0; break; case 8: vehicleTaxation += 400; break; case 9: vehicleTaxation += 500; break; case 10: vehicleTaxation += 300; break; case 11: vehicleTaxation += 0; break; case 12: vehicleTaxation += 350; break; case 13: vehicleTaxation += 0; break; case 14: vehicleTaxation += 500; break; case 15: vehicleTaxation += 650; break; case 16: vehicleTaxation += 750; break; case 17: vehicleTaxation += 0; break; case 18: vehicleTaxation += 0; break; case 19: vehicleTaxation += 0; break; case 20: vehicleTaxation += 400; break; case 21: vehicleTaxation += 69696969; break; } } } return vehicleTaxation; } public static float GetPropertyTaxation(Client client) { float propertyTaxation = 0; User user = client.GetUser(); if (user.HouseId != null) { propertyTaxation += user.House.Price * 0.005f; } return propertyTaxation; } public static void SetPaycheck(Client client, int wage) { (int bankAccount, float financialHelp, float financialInterest) = GetEconomyClass(client, wage); float propertyTax = GetPropertyTaxation(client); int vehicleTaxation = GetVehicleTaxation(client); int amount = wage - (int)(wage * financialInterest) - vehicleTaxation - (int)propertyTax + (int)financialHelp; Paycheck paycheck = new Paycheck(financialHelp, financialInterest, vehicleTaxation, propertyTax, wage, amount); User user = client.GetUser(); Paychecks[user.Id] = paycheck; ReleasePayDay(client, paycheck); } public static void ReleasePayDay(Client client, Paycheck paycheck) { using (var dbContext = new DatabaseContext()) { client.GetUser().GetBankAccount(dbContext).Balance += paycheck.Amount; dbContext.SaveChanges(); } if (paycheck.Amount > 0) ChatService.SendMessage(client, "~g~[PAYDAY]~s~ Du hast einen Payday von ~g~$" + paycheck.Amount + "~s~ bekommen."); else ChatService.SendMessage(client, "~g~[PAYDAY]~s~ Du hast einen Payday von ~r~$" + paycheck.Amount + "~s~ bekommen."); } } }