diff --git a/ReallifeGamemode.Server.Core/Managers/HouseManager.cs b/ReallifeGamemode.Server.Core/Managers/HouseManager.cs index aaf43688..0ccca564 100644 --- a/ReallifeGamemode.Server.Core/Managers/HouseManager.cs +++ b/ReallifeGamemode.Server.Core/Managers/HouseManager.cs @@ -10,6 +10,7 @@ using ReallifeGamemode.Server.Core.Extensions; using System.Linq; using ReallifeGamemode.Database.Models; using ReallifeGamemode.Server.Common; +using Microsoft.Extensions.Logging; namespace ReallifeGamemode.Server.Core.Managers { @@ -451,6 +452,8 @@ namespace ReallifeGamemode.Server.Core.Managers return; } + Log.LogInformation("Player {0} did a withdraw of {1} dollars from house {2}", player.Name, amount, house.Id); + user.BankAccount.Balance += amount; house.BankAccount.Balance -= amount; diff --git a/ReallifeGamemode.Server.Core/Menus/PoliceDepartment.cs b/ReallifeGamemode.Server.Core/Menus/PoliceDepartment.cs index f4e9c3ef..67021b46 100644 --- a/ReallifeGamemode.Server.Core/Menus/PoliceDepartment.cs +++ b/ReallifeGamemode.Server.Core/Menus/PoliceDepartment.cs @@ -6,12 +6,13 @@ using ReallifeGamemode.Server.Types; using ReallifeGamemode.Server.Core.Extensions; using Microsoft.EntityFrameworkCore; using System.Linq; +using Microsoft.Extensions.Logging; namespace ReallifeGamemode.Server.Core.Menus { internal class PoliceDepartment : Script { - + private const int WEAPONLICENSE_PRICE = 5000; public PoliceDepartment() { @@ -40,13 +41,15 @@ namespace ReallifeGamemode.Server.Core.Menus var account = user.BankAccount; - if (account.Balance < 5000) + if (account.Balance < WEAPONLICENSE_PRICE) { player.SendMessage("Du hast nicht genug Geld auf der Bank (5.000$)!", ChatPrefix.Error); return; } - account.Balance -= 5000; + Log.LogInformation("Player {0} bought a weapon license for {1} dollars", player.Name); + + account.Balance -= WEAPONLICENSE_PRICE; player.SendMessage("Du hast den Waffenschein erfolgreich erworben.", ChatPrefix.Info); diff --git a/ReallifeGamemode.Server/Bank/bank.cs b/ReallifeGamemode.Server/Bank/bank.cs index a17e81c6..b074d0a9 100644 --- a/ReallifeGamemode.Server/Bank/bank.cs +++ b/ReallifeGamemode.Server/Bank/bank.cs @@ -4,18 +4,20 @@ * @copyright (c) 2008 - 2021 Life of German */ using GTANetworkAPI; +using Microsoft.Extensions.Logging; using Newtonsoft.Json; using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Database.Models; using ReallifeGamemode.Server.Extensions; using ReallifeGamemode.Server.Finance; +using ReallifeGamemode.Server.Log; using ReallifeGamemode.Services; using System; namespace ReallifeGamemode.Server.Bank { - class bank : Script + class Bank : Script { private static TextLabel informationLabel; private static TextLabel factionInformationLabel; @@ -25,6 +27,7 @@ namespace ReallifeGamemode.Server.Bank private static ColShape _factioncolShape; public static Vector3 Position { get; } + private static readonly ILogger logger = LogManager.GetLogger(); public static void Setup() { @@ -58,7 +61,7 @@ namespace ReallifeGamemode.Server.Bank } private static void EntityEnterFactionBankColShape(ColShape colShape, Player client) - { + { if (client.IsInVehicle || !client.IsLoggedIn() || client.GetUser().FactionId is null) return; User user = client.GetUser(); @@ -92,6 +95,7 @@ namespace ReallifeGamemode.Server.Bank } else { + logger.LogInformation("Player {0} did a deposit of {1} dollars at the bank", player.Name, amount); player.SendNotification($"~w~Du hast $~g~{amount} ~w~eingezahlt."); player.GetUser(dbContext).Handmoney -= amount; player.GetUser(dbContext).BankAccount.Balance += amount; @@ -115,6 +119,7 @@ namespace ReallifeGamemode.Server.Bank } else { + logger.LogInformation("Player {0} did a withdraw of {1} dollars at the bank", player.Name, amount); player.SendNotification($"~w~Du hast $~g~{amount} ~w~abgehoben."); player.GetUser(dbContext).Handmoney += amount; player.GetUser(dbContext).BankAccount.Balance -= amount; @@ -130,34 +135,40 @@ namespace ReallifeGamemode.Server.Bank int amount = Int32.Parse(stringAmount); Player target = PlayerService.GetPlayerByNameOrId(nameOrId); + if (!target.IsLoggedIn()) + { + player.SendNotification($"~r~Dieser Spieler ist nicht Online."); + return; + } + using (var dbContext = new DatabaseContext()) { - if (player.GetUser().PlayedMinutes < 180) + User user = player.GetUser(dbContext); + if (user.PlayedMinutes < 180) { player.SendNotification("~r~Du kannst Geld erst ab 3 Spielstunden vergeben"); return; } - if (player.GetUser(dbContext) == target.GetUser(dbContext)) + + User targetUser = target.GetUser(dbContext); + + if (user == targetUser) { player.SendNotification($"~r~Du kannst dir selber kein Geld überweisen."); return; } - else if (!target.IsLoggedIn()) - { - player.SendNotification($"~r~Dieser Spieler ist nicht Online."); - - } - else if (amount <= 0 || (int)(amount * 1.05) > player.GetUser(dbContext).BankAccount.Balance) + else if (amount <= 0 || (int)(amount * 1.05) > user.BankAccount.Balance) { player.SendNotification($"~r~Dieser Betrag kann nicht überwiesen werden."); return; } else { + logger.LogInformation("Player {0} did a transfer of {1} dollars to {2}", user.Name, amount, targetUser.Name); player.SendNotification($"~w~Du hast {target.Name} $~g~{amount} ~w~Überwiesen."); target.SendNotification($"~w~{player.Name} hat dir $~g~{amount} ~w~Überwiesen."); - player.GetUser(dbContext).BankAccount.Balance -= (int)(amount * 1.05); - target.GetUser(dbContext).otheramount += amount; + user.BankAccount.Balance -= (int)(amount * 1.05); + targetUser.otheramount += amount; dbContext.SaveChanges(); } } @@ -170,17 +181,23 @@ namespace ReallifeGamemode.Server.Bank using (var dbContext = new DatabaseContext()) { + User user = player.GetUser(dbContext); + if (user.FactionId == null) + { + return; + } - if (amount <= 0 || amount > player.GetUser(dbContext).BankAccount.Balance) + if (amount <= 0 || amount > user.BankAccount.Balance) { player.SendNotification($"~r~Dieser Betrag ist ungültig."); return; } else { + logger.LogInformation("Player {0} did a faction payin of {1} dollars to faction {2}", user.Name, amount, user.Faction.Id); player.SendNotification($"~w~Du hast $~g~{amount}~w~ in die Fraktionskasse eingezahlt."); - player.GetUser(dbContext).BankAccount.Balance -= amount; - player.GetUser(dbContext).Faction.BankAccount.Balance += amount; + user.BankAccount.Balance -= amount; + user.Faction.BankAccount.Balance += amount; dbContext.SaveChanges(); } } @@ -193,23 +210,28 @@ namespace ReallifeGamemode.Server.Bank int amount = Int32.Parse(stringAmount); Player target = PlayerService.GetPlayerByNameOrId(nameOrId); + if (!target.IsLoggedIn()) + { + player.SendNotification($"~r~Dieser Spieler ist nicht Online."); + return; + } + using (var dbContext = new DatabaseContext()) { - if (!target.IsLoggedIn()) - { - player.SendNotification($"~r~Dieser Spieler ist nicht Online."); - - } - else if (amount <= 0 || (int)(amount * 1.05) > player.GetUser(dbContext).Faction.BankAccount.Balance) + User user = player.GetUser(dbContext); + User targetUser = target.GetUser(dbContext); + if (amount <= 0 || (int)(amount * 1.05) > user.Faction.BankAccount.Balance) { player.SendNotification($"~r~Dieser Betrag kann nicht überwiesen werden."); return; } else { - player.SendNotification($"~w~Du hast {target.Name} $~g~{amount} ~w~Überwiesen."); - player.GetUser(dbContext).Faction.BankAccount.Balance -= (int)(amount * 1.05); - target.GetUser(dbContext).otheramount += amount; + logger.LogInformation("Player {0} did a faction transfer of {1} dollars from faction {2} to {3}", user.Name, amount, user.Faction.Id, target); + player.SendNotification($"Du hast ~g~{amount.ToMoneyString()}~s~ an ~y~{targetUser.Name}~s~ überwiesen"); + target.SendNotification($"Dir wurden ~g~{amount.ToMoneyString()}~s~ von ~y~{user.Name}~s~ überwiesen"); + user.Faction.BankAccount.Balance -= (int)(amount * 1.05); + targetUser.otheramount += amount; dbContext.SaveChanges(); } } diff --git a/ReallifeGamemode.Server/Commands/AdminCommands.cs b/ReallifeGamemode.Server/Commands/AdminCommands.cs index 0c61a0bb..dbf19e4d 100644 --- a/ReallifeGamemode.Server/Commands/AdminCommands.cs +++ b/ReallifeGamemode.Server/Commands/AdminCommands.cs @@ -2287,6 +2287,7 @@ namespace ReallifeGamemode.Server.Commands { var user = target.GetUser(context); user.Handmoney = amount; + logger.LogInformation("Admin {0} set the handmoney of player {1} to {2} dollars", admin.Name, target.Name, amount); context.SaveChanges(); //target.TriggerEvent("SERVER:SET_HANDMONEY", amount); } @@ -2313,6 +2314,7 @@ namespace ReallifeGamemode.Server.Commands { var user = target.GetUser(context); user.Handmoney += amount; + logger.LogInformation("Admin {0} added {2} dollarsto the handmoney of player {1}", admin.Name, target.Name, amount); context.SaveChanges(); //target.TriggerEvent("SERVER:SET_HANDMONEY", user.Handmoney); } @@ -3356,6 +3358,7 @@ namespace ReallifeGamemode.Server.Commands using (var dbContext = new DatabaseContext()) { + logger.LogInformation("Admin {0} set the bank account of {1} to {2} dollars", player.Name, target.Name, amount); target.GetUser(dbContext).BankAccount.Balance = amount; dbContext.SaveChanges(); } @@ -3381,6 +3384,7 @@ namespace ReallifeGamemode.Server.Commands using (var dbContext = new DatabaseContext()) { + logger.LogInformation("Admin {0} added {2} dollars to the bank account of {1}", player.Name, target.Name, amount); target.GetUser(dbContext).BankAccount.Balance += amount; dbContext.SaveChanges(); } diff --git a/ReallifeGamemode.Server/Commands/FactionCommands.cs b/ReallifeGamemode.Server/Commands/FactionCommands.cs index 9d90d3a2..7dd4e5b7 100644 --- a/ReallifeGamemode.Server/Commands/FactionCommands.cs +++ b/ReallifeGamemode.Server/Commands/FactionCommands.cs @@ -1,9 +1,10 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; using GTANetworkAPI; using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Logging; using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Database.Entities.Logs.Chat; using ReallifeGamemode.Database.Models; @@ -15,6 +16,7 @@ using ReallifeGamemode.Server.Services; using ReallifeGamemode.Server.Types; using ReallifeGamemode.Server.Util; using ReallifeGamemode.Services; +using ReallifeGamemode.Server.Log; /** * @overview Life of German Reallife - Faction Commands (Faction.cs) @@ -26,6 +28,8 @@ namespace ReallifeGamemode.Server.Commands { internal class FactionCommands : Script { + private static readonly ILogger logger = LogManager.GetLogger(); + #region Chat Commands [Command("f", "~m~Benutzung: ~s~/f [Nachricht]", GreedyArg = true)] @@ -413,17 +417,19 @@ namespace ReallifeGamemode.Server.Commands return; } - if (deadPlayerUser.Handmoney >= 100) + if (deadPlayerUser.Handmoney >= Medic.ReviveIncome) { - deadPlayerUser.Handmoney -= 100; + deadPlayerUser.Handmoney -= Medic.ReviveIncome; } else { - int bankMoney = 100 - deadPlayerUser.Handmoney; + int bankMoney = Medic.ReviveIncome - deadPlayerUser.Handmoney; deadPlayerUser.Handmoney = 0; deadPlayerUser.BankAccount.Balance -= bankMoney; } + logger.LogInformation("Player {0} has been revived by {1} for {2} dollars", deadPlayer.Name, player.Name, Medic.ReviveIncome); + player.PlayAnimation("amb@medic@standing@kneel@enter", "enter", 0); deadPlayer.TriggerEvent("onPlayerRevived"); diff --git a/ReallifeGamemode.Server/Commands/UserCommands.cs b/ReallifeGamemode.Server/Commands/UserCommands.cs index 2ed40def..ec9dfcd2 100644 --- a/ReallifeGamemode.Server/Commands/UserCommands.cs +++ b/ReallifeGamemode.Server/Commands/UserCommands.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; using GTANetworkAPI; +using Microsoft.Extensions.Logging; using Newtonsoft.Json; using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Database.Models; @@ -13,11 +14,16 @@ using ReallifeGamemode.Server.Services; using ReallifeGamemode.Server.Types; using ReallifeGamemode.Server.Util; using ReallifeGamemode.Services; +using ReallifeGamemode.Server.Log; namespace ReallifeGamemode.Server.Commands { internal class UserCommands : Script { + private static readonly ILogger logger = LogManager.GetLogger(); + + private const int SMS_PRICE = 5; + [Command("rent", "~m~rent stop")] public void CmdUserStopRent(Player player, String option = "") { @@ -113,13 +119,15 @@ namespace ReallifeGamemode.Server.Commands using (var dbContext = new DatabaseContext()) { User user = player.GetUser(dbContext); - if (user.BankAccount.Balance < 5) + if (user.BankAccount.Balance < SMS_PRICE) { ChatService.ErrorMessage(player, "Dafür hast du nicht genug Geld auf deinem Bankkonto"); return; } - user.BankAccount.Balance -= 5; + logger.LogInformation("Player {0} sent a sms to {1} for {2} dollars", player.Name, target.Name, SMS_PRICE); + + user.BankAccount.Balance -= SMS_PRICE; dbContext.SaveChanges(); } diff --git a/ReallifeGamemode.Server/DrivingSchool/DrivingSchool.cs b/ReallifeGamemode.Server/DrivingSchool/DrivingSchool.cs index 590bbf7e..3f333409 100644 --- a/ReallifeGamemode.Server/DrivingSchool/DrivingSchool.cs +++ b/ReallifeGamemode.Server/DrivingSchool/DrivingSchool.cs @@ -6,17 +6,24 @@ using ReallifeGamemode.Server.Extensions; using ReallifeGamemode.Server.Managers; using ReallifeGamemode.Server.Util; using System; +using Microsoft.Extensions.Logging; +using ReallifeGamemode.Server.Log; namespace ReallifeGamemode.Server.DrivingSchool { internal class DrivingSchool : Script { + private static readonly ILogger logger = LogManager.GetLogger(); + private static TextLabel informationLabel; private static Marker marker; private static ColShape _colShape; public static Vector3 Position { get; } private const int FAILPOINTS = 2; + private const int CAR_LICENSE_PRICE = 2500; + private const int BIKE_LICENSE_PRICE = 3500; + private readonly IReadOnlyCollection BikeRoute = new List { new Vector3(-741.98, -1283.46, 6.17), @@ -122,14 +129,14 @@ namespace ReallifeGamemode.Server.DrivingSchool public void StartDrivingSchool(Player client) { User user = client.GetUser(); - + if (user.DriverLicenseVehicle || client.HasData("ActiveSchool")) { client.SendChatMessage("~b~[INFO]~s~ Du besitzt schon einen Führerschein."); return; } - - if (user.Handmoney < 2500) + + if (user.Handmoney < CAR_LICENSE_PRICE) { client.SendNotification("~r~[FEHLER]~s~ Du hast nicht genug Geld auf der Hand($2.500)!", true); return; @@ -138,7 +145,8 @@ namespace ReallifeGamemode.Server.DrivingSchool using (var dbContext = new DatabaseContext()) { User payer = client.GetUser(dbContext); - payer.Handmoney -= 2500; + payer.Handmoney -= CAR_LICENSE_PRICE; + logger.LogInformation("Player {0} bought the driving school (car) for {1} dollars", client.Name, CAR_LICENSE_PRICE); // client.TriggerEvent("SERVER:SET_HANDMONEY", payer.Handmoney); dbContext.SaveChanges(); } @@ -174,8 +182,8 @@ namespace ReallifeGamemode.Server.DrivingSchool [RemoteEvent("drivingSchoolEventEnd")] public void DrivingSchoolEventEnd(Player user, int checkpoint) { - using (var dbContext = new DatabaseContext()) - { + using (var dbContext = new DatabaseContext()) + { User drivingUser = user.GetUser(dbContext); if (drivingUser.failpoints > FAILPOINTS) @@ -186,13 +194,13 @@ namespace ReallifeGamemode.Server.DrivingSchool else { user.TriggerEvent("renderTextOnScreen", "Du hast den Führerschein bestanden. Glückwunsch!"); - user.ResetData("ActiveSchool"); + user.ResetData("ActiveSchool"); drivingUser.DriverLicenseVehicle = true; drivingUser.failpoints = 0; dbContext.SaveChanges(); } - - } + + } Vehicle veh = user.Vehicle; user.WarpOutOfVehicle(); ServerVehicle sVeh = VehicleManager.GetServerVehicleFromVehicle(veh); @@ -208,31 +216,31 @@ namespace ReallifeGamemode.Server.DrivingSchool [RemoteEvent("drivingSchoolEvent")] public void DrivingSchoolEvent(Player user, int checkpoint) { - /* for (int i = 0; i >= 33; i++) - { - if (checkpoint <= 24) - { - user.TriggerEvent("kmh100"); - } - else if (checkpoint >= 25 && checkpoint <= 26) - { - user.TriggerEvent("kmh150"); - } - else if (checkpoint >= 26 && checkpoint <= 28) - { - user.TriggerEvent("kmh100"); - } - else if (checkpoint >= 29 && checkpoint <= 31) - { - user.TriggerEvent("kmh150"); - } - else if (checkpoint >= 32 && checkpoint <= 33) - { - user.TriggerEvent("kmh100"); - } - } - */ - switch(checkpoint) + /* for (int i = 0; i >= 33; i++) + { + if (checkpoint <= 24) + { + user.TriggerEvent("kmh100"); + } + else if (checkpoint >= 25 && checkpoint <= 26) + { + user.TriggerEvent("kmh150"); + } + else if (checkpoint >= 26 && checkpoint <= 28) + { + user.TriggerEvent("kmh100"); + } + else if (checkpoint >= 29 && checkpoint <= 31) + { + user.TriggerEvent("kmh150"); + } + else if (checkpoint >= 32 && checkpoint <= 33) + { + user.TriggerEvent("kmh100"); + } + } + */ + switch (checkpoint) { case 25: case 26: @@ -275,7 +283,7 @@ namespace ReallifeGamemode.Server.DrivingSchool client.SendChatMessage("~b~[INFO]~s~ Du besitzt schon einen Motorradschein."); return; } - if (user.Handmoney < 3500) + if (user.Handmoney < BIKE_LICENSE_PRICE) { client.SendNotification("~r~[FEHLER]~s~Du hast nicht genug Geld auf der Hand($3.500)!", true); return; @@ -284,7 +292,8 @@ namespace ReallifeGamemode.Server.DrivingSchool using (var dbContext = new DatabaseContext()) { User payer = client.GetUser(dbContext); - payer.Handmoney -= 3500; + payer.Handmoney -= BIKE_LICENSE_PRICE; + logger.LogInformation("Player {0} bought the driving school (bike) for {1} dollars", client.Name, BIKE_LICENSE_PRICE); // client.TriggerEvent("SERVER:SET_HANDMONEY", payer.Handmoney); dbContext.SaveChanges(); } diff --git a/ReallifeGamemode.Server/DrivingSchool/PlaneSchool.cs b/ReallifeGamemode.Server/DrivingSchool/PlaneSchool.cs index 310860ec..94873705 100644 --- a/ReallifeGamemode.Server/DrivingSchool/PlaneSchool.cs +++ b/ReallifeGamemode.Server/DrivingSchool/PlaneSchool.cs @@ -1,8 +1,10 @@ using System.Collections.Generic; using GTANetworkAPI; +using Microsoft.Extensions.Logging; using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Database.Models; using ReallifeGamemode.Server.Extensions; +using ReallifeGamemode.Server.Log; using ReallifeGamemode.Server.Managers; using ReallifeGamemode.Server.Util; @@ -15,8 +17,12 @@ namespace ReallifeGamemode.Server.DrivingSchool private static ColShape _colShape1; public static Vector3 Position { get; } + private static readonly ILogger logger = LogManager.GetLogger(); + private const int CHECKPOINT_MARKER_ID = 6; + private const int PLANE_LICENSE_PRICE = 5000; + private readonly IReadOnlyCollection planeRoute = new List { new Vector3(-1114.39, -2333.09, 14.87), @@ -74,7 +80,7 @@ namespace ReallifeGamemode.Server.DrivingSchool client.SendChatMessage("~b~[INFO]~s~ Du besitzt schon einen Flugschein."); return; } - if (user.Handmoney < 5000) + if (user.Handmoney < PLANE_LICENSE_PRICE) { client.SendNotification("~r~Du brauchst ~g~$5.000~r~ auf der Hand, um die Prüfung starten zu können.", true); return; @@ -82,7 +88,8 @@ namespace ReallifeGamemode.Server.DrivingSchool using (var dbContext = new DatabaseContext()) { User payer = client.GetUser(dbContext); - payer.Handmoney -= 5000; + payer.Handmoney -= PLANE_LICENSE_PRICE; + logger.LogInformation("Player {0} bought the plane school for {1} dollars", client.Name, PLANE_LICENSE_PRICE); //client.TriggerEvent("SERVER:SET_HANDMONEY", payer.Handmoney); dbContext.SaveChanges(); } @@ -171,7 +178,7 @@ namespace ReallifeGamemode.Server.DrivingSchool case 14: user.TriggerEvent("renderTextOnScreen", "Setzen Sie zum Landeanflug an. Drücken Sie 'G', um das Fahrwerk auszufahren."); - CheckPointHandle.StartCheckPointRoute(user, planeRouteEnd, 5000, CHECKPOINT_MARKER_ID, 12, 5, true, "planeSchoolEventEnd"); + CheckPointHandle.StartCheckPointRoute(user, planeRouteEnd, PLANE_LICENSE_PRICE, CHECKPOINT_MARKER_ID, 12, 5, true, "planeSchoolEventEnd"); break; } } diff --git a/ReallifeGamemode.Server/Events/UpdateCharacterCloth.cs b/ReallifeGamemode.Server/Events/UpdateCharacterCloth.cs index ea2d67d6..086ec118 100644 --- a/ReallifeGamemode.Server/Events/UpdateCharacterCloth.cs +++ b/ReallifeGamemode.Server/Events/UpdateCharacterCloth.cs @@ -6,11 +6,15 @@ using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Database.Models; using ReallifeGamemode.Server.Extensions; using System; +using Microsoft.Extensions.Logging; +using ReallifeGamemode.Server.Log; namespace ReallifeGamemode.Server.Events { public class UpdateCharacterCloth : Script { + private static readonly ILogger logger = LogManager.GetLogger(); + [RemoteEvent("updateDutyProp")] public void UpdateDutyProp(Player player, int componentId, int componentVariation) { @@ -280,7 +284,8 @@ namespace ReallifeGamemode.Server.Events } } - if(data[0] == 2){ + if (data[0] == 2) + { User payer = client.GetUser(dbContext); payer.GetCharacter(dbContext); payer.Character.Hair = Convert.ToByte(data[2]); @@ -288,13 +293,14 @@ namespace ReallifeGamemode.Server.Events } client.GetUser(dbContext).Handmoney -= data[6]; + logger.LogInformation("Player {0} bought clothing for {1} dollars: slot = {2}, cloth = {3}, texture = {4}", client.Name, data[6], data[0], data[2], data[1]); dbContext.SaveChanges(); //client.TriggerEvent("SERVER:SET_HANDMONEY", user.Handmoney); } client.TriggerEvent("clothesMenu:updateLast", data[2], data[1], data[4], data[5], data[3]); } } - + [RemoteEvent("SERVER:BuyHairColor")] public void BuyHairColor(Player client, byte HairColor) @@ -332,7 +338,7 @@ namespace ReallifeGamemode.Server.Events User payer = client.GetUser(dbContext); payer.GetCharacter(dbContext); payer.Handmoney -= 50; - payer.Character.HairHighlightColor = HairlightColor; + payer.Character.HairHighlightColor = HairlightColor; // client.TriggerEvent("SERVER:SET_HANDMONEY", payer.Handmoney); dbContext.SaveChanges(); } diff --git a/ReallifeGamemode.Server/Events/Weapon.cs b/ReallifeGamemode.Server/Events/Weapon.cs index c32f22c0..34d7661d 100644 --- a/ReallifeGamemode.Server/Events/Weapon.cs +++ b/ReallifeGamemode.Server/Events/Weapon.cs @@ -130,7 +130,7 @@ namespace ReallifeGamemode.Server.Events player.SendNotification("Du hast nicht genügend Geld bei dir"); return; } - logger.LogInformation("Player {0} bought a {1} in ammunation", user.Name, weaponmodel); + logger.LogInformation("Player {0} bought a weapon {1} in ammunation for {2} dollars", user.Name, weaponmodel, price); user.Handmoney -= price; dbContext.SaveChanges(); player.GiveWeapon(NAPI.Util.WeaponNameToModel(weaponmodel), ammo); diff --git a/ReallifeGamemode.Server/Extensions/ClientExtension.cs b/ReallifeGamemode.Server/Extensions/ClientExtension.cs index dcd4d284..2b57264b 100644 --- a/ReallifeGamemode.Server/Extensions/ClientExtension.cs +++ b/ReallifeGamemode.Server/Extensions/ClientExtension.cs @@ -3,10 +3,12 @@ using System.Collections.Generic; using System.Linq; using GTANetworkAPI; using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Logging; using Newtonsoft.Json; using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Database.Models; using ReallifeGamemode.Server.Admin; +using ReallifeGamemode.Server.Log; using ReallifeGamemode.Server.Managers; using ReallifeGamemode.Server.Services; using ReallifeGamemode.Server.Types; @@ -22,6 +24,8 @@ namespace ReallifeGamemode.Server.Extensions { public static class PlayerExtension { + private static ILogger Logger => LogManager.GetLogger(typeof(PlayerExtension)); + /// /// Gibt das User-Objekt eines Player's zurück. /// Gibt nichts zurück, wenn der Player nicht eingeloggt ist @@ -108,6 +112,8 @@ namespace ReallifeGamemode.Server.Extensions faction.BankAccount.Balance += factionMoney; } + Logger.LogInformation("Player {0} was sent to jail for {1} seconds, executive factions got {2} dollars each", user.Name, time, factionMoney); + user.Wanteds = 0; user.JailTime = time; } diff --git a/ReallifeGamemode.Server/Factions/Medic/Medic.cs b/ReallifeGamemode.Server/Factions/Medic/Medic.cs index 1bc98dcd..58847dcf 100644 --- a/ReallifeGamemode.Server/Factions/Medic/Medic.cs +++ b/ReallifeGamemode.Server/Factions/Medic/Medic.cs @@ -9,6 +9,8 @@ using ReallifeGamemode.Database.Models; using Microsoft.EntityFrameworkCore; using System; using ReallifeGamemode.Server.Extensions; +using Microsoft.Extensions.Logging; +using ReallifeGamemode.Server.Log; /** * @overview Life of German Reallife - Server Factions Medic Medic.cs @@ -20,6 +22,8 @@ namespace ReallifeGamemode.Server.Factions.Medic { public class Medic : Script { + private static readonly ILogger logger = LogManager.GetLogger(); + public static List ReviveTasks = new List(); public static List HealTasks = new List(); public static List FireTasks = new List(); @@ -34,7 +38,7 @@ namespace ReallifeGamemode.Server.Factions.Medic public Player dTarget; public int dPrice; } - + public static void AddTaskToList(MedicTask task) { if (task == null) @@ -84,7 +88,7 @@ namespace ReallifeGamemode.Server.Factions.Medic public static void UpdateReviveSperre() { var allRevivedPlayers = NAPI.Pools.GetAllPlayers().Where(c => c.HasData("reviveSperre")); - foreach(var player in allRevivedPlayers) + foreach (var player in allRevivedPlayers) { var timeLeft = player.GetData("reviveSperre"); @@ -101,7 +105,7 @@ namespace ReallifeGamemode.Server.Factions.Medic public static void CheckHealDecisionDistance() { - foreach(var healAuftrag in HealDecisions.ToList()) + foreach (var healAuftrag in HealDecisions.ToList()) { if (healAuftrag.dMedic.Position.DistanceTo(healAuftrag.dTarget.Position) > 5) { @@ -117,9 +121,9 @@ namespace ReallifeGamemode.Server.Factions.Medic public static void MakeHealDecision(Player target, bool decision) { var activeDecision = HealDecisions.FirstOrDefault(d => d.dTarget == target); - if(decision == false) + if (decision == false) { - activeDecision.dMedic.SendNotification(activeDecision.dTarget.Name + " hat den Heal ~r~abgelehnt",false); + activeDecision.dMedic.SendNotification(activeDecision.dTarget.Name + " hat den Heal ~r~abgelehnt", false); activeDecision.dTarget.SendNotification("Du hast den Heal ~r~abgelehnt", false); } else @@ -141,6 +145,8 @@ namespace ReallifeGamemode.Server.Factions.Medic targetUser.BankAccount.Balance -= bankMoney; } + logger.LogInformation("Player {0} accepted a heal for {1} dollars from medic {2}", target.Name, activeDecision.dPrice, activeDecision.dMedic.Name); + dbContext.Factions.Include(f => f.BankAccount).Where(f => f.Id == 2).First().BankAccount.Balance += activeDecision.dPrice / 2; activeDecision.dMedic.GetUser(dbContext).Wage += activeDecision.dPrice / 2; @@ -149,7 +155,7 @@ namespace ReallifeGamemode.Server.Factions.Medic activeDecision.dTarget.SafeSetHealth(100); activeDecision.dTarget.SendNotification($"Du wurdest von ~g~{activeDecision.dMedic.Name} ~s~ für ~g~{activeDecision.dPrice.ToMoneyString()} geheilt", false); activeDecision.dMedic.SendNotification($"Du hast ~g~{activeDecision.dTarget.Name} ~s~ für {activeDecision.dPrice.ToMoneyString()} geheilt", false); - delHealTask(activeDecision.dTarget); + delHealTask(activeDecision.dTarget); } HealDecisions.Remove(activeDecision); } @@ -166,7 +172,7 @@ namespace ReallifeGamemode.Server.Factions.Medic var taskTimeLeft = Math.Abs((int)(((DateTimeOffset)actualTime).ToUnixTimeSeconds() - ((DateTimeOffset)task.Time).ToUnixTimeSeconds() - reviveTaskTime)); task.TimeLeft = taskTimeLeft; var medic = PlayerService.GetPlayerByNameOrId(task.MedicName); - if(medic != null) medic.TriggerEvent("setTaskTimeLeft", taskTimeLeft); + if (medic != null) medic.TriggerEvent("setTaskTimeLeft", taskTimeLeft); } } } @@ -176,14 +182,14 @@ namespace ReallifeGamemode.Server.Factions.Medic { if (HealTasks.Count != 0) { - foreach(var task in HealTasks) + foreach (var task in HealTasks) { - if(task.MedicName != "none") + if (task.MedicName != "none") { var medic = PlayerService.GetPlayerByNameOrId(task.MedicName); var victim = PlayerService.GetPlayerByNameOrId(task.Victim); - if(medic == null || victim == null) + if (medic == null || victim == null) { continue; } @@ -241,11 +247,11 @@ namespace ReallifeGamemode.Server.Factions.Medic { reviveTask.MedicName = "none"; } - else + else { reviveTask.MedicName = player.Name; } - + ChatService.BroadcastFaction("~y~[MEDIC] ~w~" + player.Name + " hat den Reviveauftrag von " + victim + " angenommen.", new List() { 2 }); target.SendNotification("~w~Sanitäter~g~ " + player.Name + "~w~ eilt zur Rettung."); break; @@ -261,7 +267,7 @@ namespace ReallifeGamemode.Server.Factions.Medic healTask.MedicName = player.Name; ChatService.BroadcastFaction("~y~[MEDIC] ~w~" + player.Name + " hat den Healauftrag von " + victim + " angenommen.", new List() { 2 }); target.SendNotification("~w~Sanitäter~g~ " + player.Name + "~w~ hat deinen Auftrag angenommen."); - } + } break; case 2: @@ -275,7 +281,7 @@ namespace ReallifeGamemode.Server.Factions.Medic { MedicTask task = HealTasks.FirstOrDefault(t => t.Victim == player.Name); if (task != null) - { + { player.SetData("healauftrag", false); var medicPlayer = PlayerService.GetPlayerByNameOrId(task.MedicName); if (medicPlayer != null) diff --git a/ReallifeGamemode.Server/Finance/Economy.cs b/ReallifeGamemode.Server/Finance/Economy.cs index f602fb3a..65fa002f 100644 --- a/ReallifeGamemode.Server/Finance/Economy.cs +++ b/ReallifeGamemode.Server/Finance/Economy.cs @@ -9,9 +9,11 @@ using System.Collections.Generic; using System.Linq; using GTANetworkAPI; using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Logging; using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Database.Models; using ReallifeGamemode.Server.Extensions; +using ReallifeGamemode.Server.Log; using ReallifeGamemode.Server.Services; using ReallifeGamemode.Server.Wanted; @@ -19,6 +21,8 @@ namespace ReallifeGamemode.Server.Finance { public class Economy { + private static readonly ILogger logger = LogManager.GetLogger(); + public static Dictionary Paychecks { get; set; } = new Dictionary(); public static (int, float, float) GetEconomyClass(Player client, int wage) @@ -162,6 +166,8 @@ namespace ReallifeGamemode.Server.Finance } } + logger.LogInformation("Player {0} has a payday of {1} dollars. old balance: {2}, new balance: {3}", client.Name, paycheck.Amount, u.BankAccount.Balance, u.BankAccount.Balance + paycheck.Amount); + u.BankAccount.Balance += paycheck.Amount; u.Wage = 0; u.otheramount = 0; @@ -173,7 +179,7 @@ namespace ReallifeGamemode.Server.Finance .Where(hR => hR.UserId == u.Id); dbContext.Factions.Include(f => f.BankAccount).Where(f => f.Id == 2).First().BankAccount.Balance += (int)(paycheck.HealthInsurance * 0.1); - + logger.LogInformation("Medic faction got a health insurance payment of {0} dollars from player {1}", paycheck.HealthInsurance * 0.1, client.Name); if (rentals.Any()) { foreach (var rental in rentals) @@ -181,6 +187,7 @@ namespace ReallifeGamemode.Server.Finance if (rental?.House?.BankAccount != null) { rental.House.BankAccount.Balance += (int)(rental.House.RentalFee * 0.7); + logger.LogInformation("House {0} got a rentalfee of {1} from paycheck from user {2}", rental.House.Id, rental.House.RentalFee * 0.7, u.Name); } } } diff --git a/ReallifeGamemode.Server/Gangwar/Turf.cs b/ReallifeGamemode.Server/Gangwar/Turf.cs index 3cd1d52b..88573919 100644 --- a/ReallifeGamemode.Server/Gangwar/Turf.cs +++ b/ReallifeGamemode.Server/Gangwar/Turf.cs @@ -5,16 +5,20 @@ using System.Threading.Tasks; using System.Timers; using GTANetworkAPI; using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Logging; using Newtonsoft.Json; using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Database.Models; using ReallifeGamemode.Server.Extensions; +using ReallifeGamemode.Server.Log; using ReallifeGamemode.Server.Services; namespace ReallifeGamemode.Server.Gangwar { public class Turf { + private static readonly ILogger logger = LogManager.GetLogger(); + public int TurfID { get; set; } public string TurfName { get; set; } public int Color { get; set; } @@ -203,7 +207,7 @@ namespace ReallifeGamemode.Server.Gangwar public void enter(Player client) { User user = client.GetUser(); - if(user == null || user.FactionId == null) + if (user == null || user.FactionId == null) { return; } @@ -276,6 +280,7 @@ namespace ReallifeGamemode.Server.Gangwar a.TriggerEvent("CLIENT:loose"); } ownerFaction.BankAccount.Balance += 15000; + logger.LogInformation("Gang {0} successfully defended the turf {1} against gang {2} and gained {3} dollars", getOwner(), getAttacker(), 15000); } else if (getOwner() != FactionName) { @@ -292,6 +297,7 @@ namespace ReallifeGamemode.Server.Gangwar if (a != null) a.TriggerEvent("CLIENT:win"); } + logger.LogInformation("Gang {0} successfully took over the turf {1} from gang {2} and gained {3} dollars", getAttacker(), getOwner(), 10000); this.Owner = FactionName; attackerFaction.BankAccount.Balance += 10000; Turfs turf = dbContext.Turfs.Where(t => t.Id == getId()).FirstOrDefault(); @@ -379,7 +385,7 @@ namespace ReallifeGamemode.Server.Gangwar { if (getOwner() == FactionName) { - NAPI.Util.ConsoleOutput($"GangwarKill - Adding Point for Faction {getAttacker()}"); + NAPI.Util.ConsoleOutput($"GangwarKill - Adding Point for Faction {getAttacker()}"); Att_Score += 1; } else if (getAttacker() == FactionName) diff --git a/ReallifeGamemode.Server/Main.cs b/ReallifeGamemode.Server/Main.cs index 28e226d3..c50c6ce4 100644 --- a/ReallifeGamemode.Server/Main.cs +++ b/ReallifeGamemode.Server/Main.cs @@ -29,212 +29,212 @@ using System.IO; namespace ReallifeGamemode.Server { - public class Main : Script - { - public static readonly Vector3 DEFAULT_SPAWN_POSITION = new Vector3(-1033.93603515625, -2731.572998046875, 13.756634712219238); - public static readonly float DEFAULT_SPAWN_HEADING = -32.23991012573242f; - - public static readonly CultureInfo SERVER_CULTURE = new CultureInfo("de-DE"); - - private Core.Events.EventHandler eventHandler; - - private readonly Mutex logMutex = new Mutex(false, "RAGE_MAIN_LOG_MUTEX"); - - public Main() + public class Main : Script { - AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; - } + public static readonly Vector3 DEFAULT_SPAWN_POSITION = new Vector3(-1033.93603515625, -2731.572998046875, 13.756634712219238); + public static readonly float DEFAULT_SPAWN_HEADING = -32.23991012573242f; - [ServerEvent(Event.ResourceStart)] - public void OnResourceStart() - { - try - { - if (System.Environment.GetEnvironmentVariable("RAGEMP_UPDATE_DATABASE_ON_STARTUP", System.EnvironmentVariableTarget.User) == "true") + public static readonly CultureInfo SERVER_CULTURE = new CultureInfo("de-DE"); + + private Core.Events.EventHandler eventHandler; + + private readonly Mutex logMutex = new Mutex(false, "RAGE_MAIN_LOG_MUTEX"); + + public Main() { - using var dbContext = new DatabaseContext(true); - - var pendingMigrations = dbContext.Database.GetPendingMigrations(); - - if (!pendingMigrations.Any()) - { - System.Console.WriteLine("No migrations to apply"); - } - else - { - System.Console.WriteLine("Applying {0} migrations", pendingMigrations.Count()); - foreach (var migration in pendingMigrations) - { - System.Console.WriteLine("\t{0}", migration); - } - - try - { - dbContext.Database.Migrate(); - } - catch (System.Exception e) - { - System.Console.WriteLine("Error while updating database: {0}", e.ToString()); - System.Console.ReadLine(); - System.Environment.Exit(1); - } - - System.Console.WriteLine("Migrations successfull"); - } + AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; } - var methods = Assembly.GetExecutingAssembly() - .GetTypes() - .SelectMany(t => t.GetMethods()) - .Where(m => m.GetCustomAttributes(typeof(CommandAttribute), false).Length > 0) - .ToArray(); - - var cmdAttributes = methods.Select(c => c.GetCustomAttribute()).ToList(); - - var registeredCommands = cmdAttributes.Select(c => c.CommandString).ToList(); - cmdAttributes.Where(c => c.Alias?.Any() ?? false).ToList().ForEach(a => + [ServerEvent(Event.ResourceStart)] + public void OnResourceStart() { - registeredCommands.AddRange(a.Alias.Split(',')); - }); - - IAPI apiInstance = new RageAPI(); - eventHandler = new Core.Events.EventHandler(apiInstance); - - new Core.Main(apiInstance, eventHandler, registeredCommands.ToArray()); - - NAPI.Server.SetGlobalServerChat(false); - - NAPI.Server.SetCommandErrorMessage(""); - NAPI.Server.SetDefaultSpawnLocation(DEFAULT_SPAWN_POSITION, DEFAULT_SPAWN_HEADING); - NAPI.Server.SetAutoSpawnOnConnect(false); - NAPI.Server.SetAutoRespawnAfterDeath(false); - NAPI.Data.SetWorldData("playerCreatorDimension", 0); - - JsonConvert.DefaultSettings = () => - { - return new JsonSerializerSettings() - { - NullValueHandling = NullValueHandling.Ignore - }; - }; - - InventoryManager.LoadItems(); - ShopManager.LoadClotheShops(); - ShopManager.LoadItemShops(); - ShopManager.LoadFriseur(); - ShopManager.LoadAmmunations(); - TuningManager.LoadTuningGarages(); - - TimeManager.StartTimeManager(); - VehicleManager.CheckEnabledMods(); - - DatabaseHelper.InitDatabaseFirstTime(); - - FactionHelper.CheckFactionBankAccounts(); - BusinessManager.LoadBusinesses(); - //InteriorManager.LoadInteriors(); - DoorManager.LoadDoors(); - ATMManager.InitATMs(); - CityHallManager.LoadCityHall(); - JobManager.LoadJobs(); - //TaxiDriverJob.StartTaxiTimer(); Obselete - //HouseManager.LoadHouses(); - DrivingSchool.DrivingSchool.Setup(); - PlaneSchool.Setup(); - Gangwar.Gangwar.loadTurfs(); - Bank.bank.Setup(); - Introduction.Setup(); - PositionManager.LoadPositionManager(); - LoadManager.LoadLoadManager(); - Rentcar.Setup(); - - World.WeatherSync.Load(); - - TempBlip tempBlip = new TempBlip() - { - Color = 1, - Name = "", - Transparency = 0, - ShortRange = true, - Sprite = 1, - Scale = 1, - }; - - NAPI.Data.SetWorldData("blipTemplate", tempBlip); - - //WantedEscapeTimer.WantedTimer(); Obselete - //Jail.JailTimer(); Obselete - //Economy.PaydayTimer(); Obselete - // WeaponDealManager.WeaponDealTimer(); Obselete - - ThreadTimers.StartAllTimers(); - - Managers.SVarManager.LoadSVars(); - - UserBankAccount.BalanceChanged += (account) => - { - using (var dbContext = new DatabaseContext()) - { - var user = dbContext.Users.Where(u => u.BankAccountId == account.Id).Select(u => u.Name).FirstOrDefault(); - if (user == null) + try { - return; + if (System.Environment.GetEnvironmentVariable("RAGEMP_UPDATE_DATABASE_ON_STARTUP", System.EnvironmentVariableTarget.User) == "true") + { + using var dbContext = new DatabaseContext(true); + + var pendingMigrations = dbContext.Database.GetPendingMigrations(); + + if (!pendingMigrations.Any()) + { + System.Console.WriteLine("No migrations to apply"); + } + else + { + System.Console.WriteLine("Applying {0} migrations", pendingMigrations.Count()); + foreach (var migration in pendingMigrations) + { + System.Console.WriteLine("\t{0}", migration); + } + + try + { + dbContext.Database.Migrate(); + } + catch (System.Exception e) + { + System.Console.WriteLine("Error while updating database: {0}", e.ToString()); + System.Console.ReadLine(); + System.Environment.Exit(1); + } + + System.Console.WriteLine("Migrations successfull"); + } + } + + var methods = Assembly.GetExecutingAssembly() + .GetTypes() + .SelectMany(t => t.GetMethods()) + .Where(m => m.GetCustomAttributes(typeof(CommandAttribute), false).Length > 0) + .ToArray(); + + var cmdAttributes = methods.Select(c => c.GetCustomAttribute()).ToList(); + + var registeredCommands = cmdAttributes.Select(c => c.CommandString).ToList(); + cmdAttributes.Where(c => c.Alias?.Any() ?? false).ToList().ForEach(a => + { + registeredCommands.AddRange(a.Alias.Split(',')); + }); + + IAPI apiInstance = new RageAPI(); + eventHandler = new Core.Events.EventHandler(apiInstance); + + new Core.Main(apiInstance, eventHandler, registeredCommands.ToArray()); + + NAPI.Server.SetGlobalServerChat(false); + + NAPI.Server.SetCommandErrorMessage(""); + NAPI.Server.SetDefaultSpawnLocation(DEFAULT_SPAWN_POSITION, DEFAULT_SPAWN_HEADING); + NAPI.Server.SetAutoSpawnOnConnect(false); + NAPI.Server.SetAutoRespawnAfterDeath(false); + NAPI.Data.SetWorldData("playerCreatorDimension", 0); + + JsonConvert.DefaultSettings = () => + { + return new JsonSerializerSettings() + { + NullValueHandling = NullValueHandling.Ignore + }; + }; + + InventoryManager.LoadItems(); + ShopManager.LoadClotheShops(); + ShopManager.LoadItemShops(); + ShopManager.LoadFriseur(); + ShopManager.LoadAmmunations(); + TuningManager.LoadTuningGarages(); + + TimeManager.StartTimeManager(); + VehicleManager.CheckEnabledMods(); + + DatabaseHelper.InitDatabaseFirstTime(); + + FactionHelper.CheckFactionBankAccounts(); + BusinessManager.LoadBusinesses(); + //InteriorManager.LoadInteriors(); + DoorManager.LoadDoors(); + ATMManager.InitATMs(); + CityHallManager.LoadCityHall(); + JobManager.LoadJobs(); + //TaxiDriverJob.StartTaxiTimer(); Obselete + //HouseManager.LoadHouses(); + DrivingSchool.DrivingSchool.Setup(); + PlaneSchool.Setup(); + Gangwar.Gangwar.loadTurfs(); + Bank.Bank.Setup(); + Introduction.Setup(); + PositionManager.LoadPositionManager(); + LoadManager.LoadLoadManager(); + Rentcar.Setup(); + + World.WeatherSync.Load(); + + TempBlip tempBlip = new TempBlip() + { + Color = 1, + Name = "", + Transparency = 0, + ShortRange = true, + Sprite = 1, + Scale = 1, + }; + + NAPI.Data.SetWorldData("blipTemplate", tempBlip); + + //WantedEscapeTimer.WantedTimer(); Obselete + //Jail.JailTimer(); Obselete + //Economy.PaydayTimer(); Obselete + // WeaponDealManager.WeaponDealTimer(); Obselete + + ThreadTimers.StartAllTimers(); + + Managers.SVarManager.LoadSVars(); + + UserBankAccount.BalanceChanged += (account) => + { + using (var dbContext = new DatabaseContext()) + { + var user = dbContext.Users.Where(u => u.BankAccountId == account.Id).Select(u => u.Name).FirstOrDefault(); + if (user == null) + { + return; + } + + Player player = PlayerService.GetPlayerByNameOrId(user); + if (player == null) + { + return; + } + + player.TriggerEvent("updateMoney", account.Balance); + } + }; + + User.HandMoneyChanged += (user) => + { + user.Player.TriggerEvent("SERVER:SET_HANDMONEY", user.Handmoney); + }; + + //IPLS + NAPI.World.RequestIpl("vw_casino_garage"); + + } + catch (Exception e) + { + Log(e.ToString()); + } + } + + private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) + { + Log(e.ExceptionObject.ToString()); + } + + private void Log(string message) + { + string basePath = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); + string log = Path.Combine(basePath, "log.txt"); + + logMutex.WaitOne(); + + if (!File.Exists(log)) + { + File.Create(log); } - Player player = PlayerService.GetPlayerByNameOrId(user); - if(player == null) - { - return; - } + string msg = $"[{DateTime.Now:s}] - Error: {message}{Environment.NewLine}"; - player.TriggerEvent("updateMoney", account.Balance); - } - }; + File.AppendAllText(log, msg); - User.HandMoneyChanged += (user) => + logMutex.ReleaseMutex(); + } + + [RemoteEvent("CLIENT:Event")] + public void OnClientEvent(Player player, string dataStr) { - user.Player.TriggerEvent("SERVER:SET_HANDMONEY", user.Handmoney); - }; - - //IPLS - NAPI.World.RequestIpl("vw_casino_garage"); - - } - catch (Exception e) - { - Log(e.ToString()); - } + var data = dataStr.DeserializeJson>(); + eventHandler.HandleEvent(new RagePlayer(player), data); + } } - - private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) - { - Log(e.ExceptionObject.ToString()); - } - - private void Log(string message) - { - string basePath = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); - string log = Path.Combine(basePath, "log.txt"); - - logMutex.WaitOne(); - - if (!File.Exists(log)) - { - File.Create(log); - } - - string msg = $"[{DateTime.Now:s}] - Error: {message}{Environment.NewLine}"; - - File.AppendAllText(log, msg); - - logMutex.ReleaseMutex(); - } - - [RemoteEvent("CLIENT:Event")] - public void OnClientEvent(Player player, string dataStr) - { - var data = dataStr.DeserializeJson>(); - eventHandler.HandleEvent(new RagePlayer(player), data); - } - } } diff --git a/ReallifeGamemode.Server/Managers/ATMManager.cs b/ReallifeGamemode.Server/Managers/ATMManager.cs index 2fab284c..ec10ddae 100644 --- a/ReallifeGamemode.Server/Managers/ATMManager.cs +++ b/ReallifeGamemode.Server/Managers/ATMManager.cs @@ -2,9 +2,11 @@ using System.Linq; using System.Numerics; using GTANetworkAPI; +using Microsoft.Extensions.Logging; using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Database.Models; using ReallifeGamemode.Server.Extensions; +using ReallifeGamemode.Server.Log; /** * @overview Life of German Reallife - Managers ATMManager (ATMManager.cs) @@ -18,6 +20,8 @@ namespace ReallifeGamemode.Server.Managers { public static List ATMColShapes = new List(); + private static readonly ILogger logger = LogManager.GetLogger(); + public static void InitATMs() { var addedATMs = 0; @@ -112,15 +116,16 @@ namespace ReallifeGamemode.Server.Managers //client.TriggerEvent("SERVER:WORLD_INTERACTION:ATM_ERROR", 0, checkATM.Balance); client.SendNotification("~r~Nicht genügend Geld auf der Hand!"); } - else if(inputField1 < 0) + else if (inputField1 < 0) { client.SendNotification("~r~Ungültiger Betrag!"); - } - else + } + else { var updateBankMoneyIn = user.BankAccount; var updateATMBalanceIn = dbContext.ATMs.FirstOrDefault(a => a.Id == nearATM); user.Handmoney -= inputField1; + logger.LogInformation("Player {0} did a deposit of {1} dollars at atm {2}", client.Name, inputField1, nearATM); updateBankMoneyIn.Balance += inputField1; updateATMBalanceIn.Balance += inputField1; //client.TriggerEvent("SERVER:SET_HANDMONEY", user.Handmoney); @@ -149,6 +154,7 @@ namespace ReallifeGamemode.Server.Managers var updateATMBalanceOut = dbContext.ATMs.FirstOrDefault(a => a.Id == nearATM); updateHandMoneyOut.Handmoney += inputField1; user.BankAccount.Balance -= inputField1; + logger.LogInformation("Player {0} did a withdraw of {1} dollars at atm {2}", client.Name, inputField1, nearATM); updateATMBalanceOut.Balance -= inputField1; //client.TriggerEvent("SERVER:SET_HANDMONEY", updateHandMoneyOut.Handmoney); } diff --git a/ReallifeGamemode.Server/Managers/CharacterCreator.cs b/ReallifeGamemode.Server/Managers/CharacterCreator.cs index f0c2ee73..4815ec7c 100644 --- a/ReallifeGamemode.Server/Managers/CharacterCreator.cs +++ b/ReallifeGamemode.Server/Managers/CharacterCreator.cs @@ -1,11 +1,13 @@ using System.Linq; using GTANetworkAPI; +using Microsoft.Extensions.Logging; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Database.Models; using ReallifeGamemode.Server.Events; using ReallifeGamemode.Server.Extensions; +using ReallifeGamemode.Server.Log; namespace ReallifeGamemode.Server.Managers { @@ -14,6 +16,8 @@ namespace ReallifeGamemode.Server.Managers public static Vector3 surgeryPoint = new Vector3(342.30032, -1397.7542, 32.50923); public const int SURGERY_PRICE = 15000; + private static readonly ILogger logger = LogManager.GetLogger(); + public CharacterCreator() { //LoadSurgery(); @@ -273,6 +277,7 @@ namespace ReallifeGamemode.Server.Managers } else { + logger.LogInformation("Player {0} bought a surgery for {1} dollars", player.Name, SURGERY_PRICE); user.BankAccount.Balance -= SURGERY_PRICE; } saveCharacter.Remove(oldChar); diff --git a/ReallifeGamemode.Server/Managers/CityHallManager.cs b/ReallifeGamemode.Server/Managers/CityHallManager.cs index 428c90de..53259373 100644 --- a/ReallifeGamemode.Server/Managers/CityHallManager.cs +++ b/ReallifeGamemode.Server/Managers/CityHallManager.cs @@ -1,9 +1,11 @@ using System.Linq; using GTANetworkAPI; +using Microsoft.Extensions.Logging; using Newtonsoft.Json; using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Database.Models; using ReallifeGamemode.Server.Extensions; +using ReallifeGamemode.Server.Log; using ReallifeGamemode.Server.Services; using ReallifeGamemode.Server.Types; @@ -11,8 +13,11 @@ namespace ReallifeGamemode.Server.Managers { internal class CityHallManager : Script { + private const int GROUP_PRICE = 50000; private static readonly Vector3 _cityHallPosition = new Vector3(273.22, -278.14, 53.9); + private static readonly ILogger logger = LogManager.GetLogger(); + public static void LoadCityHall() { NAPI.Marker.CreateMarker(GTANetworkAPI.MarkerType.VerticalCylinder, _cityHallPosition.Subtract(new Vector3(0, 0, 1.7)), new Vector3(), new Vector3(), 1.0f, new Color(255, 255, 255)); @@ -57,13 +62,14 @@ namespace ReallifeGamemode.Server.Managers u.Group = group; u.GroupRank = GroupRank.OWNER; - if (player.GetUser(dbContext).BankAccount.Balance < 50000) + if (u.BankAccount.Balance < GROUP_PRICE) { ChatService.ErrorMessage(player, "Du hast nicht genug Geld"); return; } - player.GetUser(dbContext).BankAccount.Balance -= 50000; + logger.LogInformation("Player {0} created a group for {1} dollars", player.Name, GROUP_PRICE); + u.BankAccount.Balance -= GROUP_PRICE; dbContext.SaveChanges(); ChatService.BroadcastGroup($"Die Gruppe \"{name}\" wurde erfolgreich erstellt.", group); diff --git a/ReallifeGamemode.Server/Managers/InteractionManager.cs b/ReallifeGamemode.Server/Managers/InteractionManager.cs index 536a9fe9..4d799e80 100644 --- a/ReallifeGamemode.Server/Managers/InteractionManager.cs +++ b/ReallifeGamemode.Server/Managers/InteractionManager.cs @@ -16,6 +16,8 @@ using ReallifeGamemode.Server.Events; using System; using ReallifeGamemode.Server.Core.API; using ReallifeGamemode.Server.Factions.Medic; +using Microsoft.Extensions.Logging; +using ReallifeGamemode.Server.Log; /** * @overview Life of German Reallife - Managers Interaction (InteractionManager.cs) @@ -27,6 +29,8 @@ namespace ReallifeGamemode.Server.Managers { public class InteractionManager : Script { + private static readonly ILogger logger = LogManager.GetLogger(); + #region Eigeninteraktionen Taste-M [RemoteEvent("CLIENT:InteractionMenu_AcceptInvite")] @@ -484,8 +488,8 @@ namespace ReallifeGamemode.Server.Managers using var dbContext = new DatabaseContext(); var user = player.GetUser(dbContext); ServerVehicle serverVehicle = dbContext.ServerVehicles.FirstOrDefault(v => v.Id == id); - - if(serverVehicle is UserVehicle) + + if (serverVehicle is UserVehicle) { UserVehicle userVehicle = dbContext.UserVehicles.Where(v => v.Id == id && v.UserId == user.Id).FirstOrDefault(); var vehPrice = userVehicle.Price; @@ -493,25 +497,29 @@ namespace ReallifeGamemode.Server.Managers GTANetworkAPI.Vehicle veh = VehicleManager.GetVehicleFromServerVehicle(userVehicle); user.BankAccount.Balance += backPrice; - ChatService.SendMessage(player, $"~b~[INFO]~s~ Du hast durch den Autoverkauf ~g~{backPrice.ToMoneyString()} ~s~erhalten."); + logger.LogInformation("Player {0} sold his uservehicle {1} for {2} dollars", player.Name, userVehicle.Model.ToString(), backPrice); + + ChatService.SendMessage(player, $"~b~[INFO]~s~ Du hast durch den Autoverkauf ~g~{backPrice.ToMoneyString()}~s~ erhalten."); VehicleManager.DeleteVehicle(veh); dbContext.UserVehicles.Remove(userVehicle); player.SendNotification("~g~Du hast dein Fahrzeug verkauft"); } - else if(serverVehicle is FactionVehicle) + else if (serverVehicle is FactionVehicle) { FactionVehicle factionVehicle = dbContext.FactionVehicles.FirstOrDefault(v => v.Id == id); var backPrice = (int)(factionVehicle.BuyPrice * 1.5 * 0.4); user.Faction.BankAccount.Balance += backPrice; + logger.LogInformation("Player {0} sold thr factionvehicle {1} of faction {2} for {3} dollars", player.Name, factionVehicle.Model.ToString(), user.Faction.Id, backPrice); + ChatService.SendMessage(player, $"~b~[INFO]~s~ Die Fraktionskasse hat ~g~{backPrice.ToMoneyString()}~s~ erhalten."); VehicleManager.DeleteVehicle(VehicleManager.GetVehicleFromServerVehicle(factionVehicle)); dbContext.FactionVehicles.Remove(factionVehicle); player.SendNotification("~g~Du hast dein Fraktionsfahrzeug verkauft"); - } + } dbContext.SaveChanges(); } @@ -564,13 +572,13 @@ namespace ReallifeGamemode.Server.Managers ChatService.ErrorMessage(player, "Das Fahrzeug konnte nicht verkauft werden. Bitte melde dich bei der Leaderverwaltung"); return; } - + var backPrice = (int)(price.Price * 1.5 * 0.4); player.SetData("SellVehicleDecision", true); player.SetData("VehicleToSell", id); - ChatService.SendMessage(player, "~s~Möchtest du das Fahrzeug ~y~" + veh.DisplayName + " ~s~wirklich für ~g~" + backPrice.ToMoneyString() + " ~s~verkaufen? Drücke ~g~J~s~ zum Bestätigen oder ~r~N ~s~zum Abbrechen."); + ChatService.SendMessage(player, "~s~Möchtest du das Fahrzeug ~y~" + veh.DisplayName + " ~s~wirklich für ~g~" + backPrice.ToMoneyString() + " ~s~verkaufen? Drücke ~g~J~s~ zum Bestätigen oder ~r~N ~s~zum Abbrechen."); } } @@ -733,6 +741,7 @@ namespace ReallifeGamemode.Server.Managers fibBankAccount.Balance += (int)(ticket_amount / 100 * 60); lspdBankAccount.Balance += (int)(ticket_amount / 100 * 40); } + logger.LogInformation("Player {0} accepted a ticket of {1} dollars", player.Name, ticket_amount); dbContext.SaveChanges(); } target.ResetData("ticket_boolean"); @@ -798,6 +807,7 @@ namespace ReallifeGamemode.Server.Managers if (amount > 0 && amount <= 5000) { + logger.LogInformation("Player {0} did a local payment of {1} dollars to player {2}", player.Name, amount, target.Name); player.SendNotification($"~w~Du hast ~y~{targetname} ~w~{amount.ToMoneyString()} gegeben."); target.SendNotification($"~w~ Du hast von ~y~{playername} ~w~{amount.ToMoneyString()} erhalten.", true); diff --git a/ReallifeGamemode.Server/Managers/InventoryManager.cs b/ReallifeGamemode.Server/Managers/InventoryManager.cs index ffeb557b..e0dc309d 100644 --- a/ReallifeGamemode.Server/Managers/InventoryManager.cs +++ b/ReallifeGamemode.Server/Managers/InventoryManager.cs @@ -14,6 +14,8 @@ using ReallifeGamemode.Server.Services; using ReallifeGamemode.Server.Util; using ReallifeGamemode.Services; using ReallifeGamemode.Server.Types; +using Microsoft.Extensions.Logging; +using ReallifeGamemode.Server.Log; /** * @overview Life of German Reallife - Managers InventoryManager (InventoryManager.cs) @@ -25,6 +27,9 @@ namespace ReallifeGamemode.Server.Managers { public class InventoryManager : Script { + private const int MAX_USER_INVENTORY = 40000; + private static readonly ILogger logger = LogManager.GetLogger(); + public static List itemList; private static Dictionary TradeItems { get; set; } = new Dictionary(); @@ -224,7 +229,7 @@ namespace ReallifeGamemode.Server.Managers using (var context = new DatabaseContext()) { - List userItems = context.UserItems.ToList().FindAll(i => i.UserId == user.Id); + List userItems = context.UserItems.Where(i => i.UserId == user.Id).ToList(); foreach (var item in userItems) { IItem iItem = GetItemById(item.ItemId); @@ -381,7 +386,7 @@ namespace ReallifeGamemode.Server.Managers int setAmount = 0; for (int i = 1; i <= amount; i++) { - if (GetUserInventoryWeight(player) + (i * GetItemById(itemId).Gewicht) > 40000) + if (GetUserInventoryWeight(player) + (i * GetItemById(itemId).Gewicht) > MAX_USER_INVENTORY) { break; } @@ -589,7 +594,7 @@ namespace ReallifeGamemode.Server.Managers break; } context.SaveChanges(); - + } } @@ -608,6 +613,14 @@ namespace ReallifeGamemode.Server.Managers return; } + logger.LogInformation("Player {0} bought the item {1} for {2} dollars", client.Name, shopItem.Name, shopItem.Price); + + if (GetUserInventoryWeight(client) + shopItem.Gewicht > MAX_USER_INVENTORY) + { + + return; + } + UserItem item = dbContext.UserItems.Where(i => i.ItemId == shopItem.Id && i.UserId == user.Id).FirstOrDefault(); if (item == null) { diff --git a/ReallifeGamemode.Server/Managers/TuningManager.cs b/ReallifeGamemode.Server/Managers/TuningManager.cs index af39a796..c3834da0 100644 --- a/ReallifeGamemode.Server/Managers/TuningManager.cs +++ b/ReallifeGamemode.Server/Managers/TuningManager.cs @@ -2,14 +2,17 @@ using System.Collections.Generic; using System.Linq; using GTANetworkAPI; +using Microsoft.Extensions.Logging; using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Database.Models; using ReallifeGamemode.Server.Extensions; +using ReallifeGamemode.Server.Log; namespace ReallifeGamemode.Server.Managers { internal class TuningManager : Script { + private static readonly ILogger logger = LogManager.GetLogger(); private static List tuningGarages = new List(); public static void LoadTuningGarages() @@ -220,6 +223,7 @@ namespace ReallifeGamemode.Server.Managers ServerVehicle sV = player.Vehicle.GetServerVehicle(dbContext); if (sV == null) return; + logger.LogInformation("Player {0} bought a tuning part for server vehicle {1}, slot: {2}, mod: {3} for {4} dollars", player.Name, sV.Id, slot, index, price); VehicleMod vMod = dbContext.VehicleMods.FirstOrDefault(m => m.ServerVehicleId == sV.Id && m.Slot == slot); if (vMod == null && index != -1) @@ -265,7 +269,7 @@ namespace ReallifeGamemode.Server.Managers veh.SecondaryColor = color; } - using var dbContext = new DatabaseContext(true); + using var dbContext = new DatabaseContext(); ServerVehicle serverVeh = VehicleManager.GetServerVehicleFromVehicle(veh, dbContext); if (serverVeh == null) @@ -311,6 +315,7 @@ namespace ReallifeGamemode.Server.Managers if (serverVehicle != null) { + logger.LogInformation("Player {0} bought wheels for server vehicle {1}, type: {2}, wheels: {3} for {4} dollars", player.Name, serverVehicle.Id, wheelType, wheelIndex, price); VehicleMod typeMod = dbContext.VehicleMods.Where(m => m.ServerVehicleId == serverVehicle.Id && m.Slot == -2).FirstOrDefault(); if (typeMod == null) { diff --git a/ReallifeGamemode.Server/Util/Rentcar.cs b/ReallifeGamemode.Server/Util/Rentcar.cs index ff17b584..b5828f64 100644 --- a/ReallifeGamemode.Server/Util/Rentcar.cs +++ b/ReallifeGamemode.Server/Util/Rentcar.cs @@ -2,9 +2,11 @@ using System.Collections.Generic; using System.Text; using GTANetworkAPI; +using Microsoft.Extensions.Logging; using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Database.Models; using ReallifeGamemode.Server.Extensions; +using ReallifeGamemode.Server.Log; using ReallifeGamemode.Server.Managers; using ReallifeGamemode.Server.Services; @@ -12,6 +14,7 @@ namespace ReallifeGamemode.Server.Util { class Rentcar : Script { + private static readonly ILogger logger = LogManager.GetLogger(); //In Sekunden public static int PAY_TIMER = 180; @@ -69,6 +72,7 @@ namespace ReallifeGamemode.Server.Util { User user = player.GetUser(dbContext); user.BankAccount.Balance -= mapPlayerRentcarBill[player.Name].Item2; + logger.LogInformation("Player {0} cancelled a rent and payed {1} dollars", player.Name, mapPlayerRentcarBill[player.Name].Item2); dbContext.SaveChanges(); } @@ -105,9 +109,9 @@ namespace ReallifeGamemode.Server.Util { return; } - + player.TriggerEvent("BN_Show", "Fahrzeug seit ~b~" + (int)(time / 60) + "~w~ Minuten gemietet (Gesamtkosten: ~g~$~s~" + bill + ")."); - mapPlayerRentcarBill[player.Name] = (mapPlayerRentcarBill[player.Name].Item1, bill); + mapPlayerRentcarBill[player.Name] = (mapPlayerRentcarBill[player.Name].Item1, bill); } [RemoteEvent("SERVER:rentcarBooked")]