diff --git a/ReallifeGamemode.Server/.editorconfig b/ReallifeGamemode.Server/.editorconfig new file mode 100644 index 00000000..b2d3909e --- /dev/null +++ b/ReallifeGamemode.Server/.editorconfig @@ -0,0 +1,124 @@ +# Informationen zu EDITORCONFIG-Dateien finden Sie unter https://aka.ms/editorconfigdocs +############################### +# Core EditorConfig Options # +############################### +root = true +# All files +[*] +indent_style = space +# Code files +[*.{cs,csx,vb,vbx}] +indent_size = 2 +insert_final_newline = true +charset = utf-8-bom +############################### +# .NET Coding Conventions # +############################### +[*.{cs,vb}] +# Organize usings +dotnet_sort_system_directives_first = true +# this. preferences +dotnet_style_qualification_for_field = true:warn +dotnet_style_qualification_for_property = true:warn +dotnet_style_qualification_for_method = true:warn +dotnet_style_qualification_for_event = true:warn +# Language keywords vs BCL types preferences +dotnet_style_predefined_type_for_locals_parameters_members = true:silent +dotnet_style_predefined_type_for_member_access = true:silent +# Parentheses preferences +dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent +# Modifier preferences +dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent +dotnet_style_readonly_field = true:suggestion +# Expression-level preferences +dotnet_style_object_initializer = true:suggestion +dotnet_style_collection_initializer = true:suggestion +dotnet_style_explicit_tuple_names = true:suggestion +dotnet_style_null_propagation = true:suggestion +dotnet_style_coalesce_expression = true:suggestion +dotnet_style_prefer_is_null_check_over_reference_equality_method = true:silent +dotnet_prefer_inferred_tuple_names = true:suggestion +dotnet_prefer_inferred_anonymous_type_member_names = true:suggestion +dotnet_style_prefer_auto_properties = true:silent +dotnet_style_prefer_conditional_expression_over_assignment = true:silent +dotnet_style_prefer_conditional_expression_over_return = true:silent +############################### +# Naming Conventions # +############################### +# Style Definitions +dotnet_naming_style.pascal_case_style.capitalization = pascal_case +# Use PascalCase for constant fields +dotnet_naming_rule.constant_fields_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.constant_fields_should_be_pascal_case.symbols = constant_fields +dotnet_naming_rule.constant_fields_should_be_pascal_case.style = pascal_case_style +dotnet_naming_symbols.constant_fields.applicable_kinds = field +dotnet_naming_symbols.constant_fields.applicable_accessibilities = * +dotnet_naming_symbols.constant_fields.required_modifiers = const +############################### +# C# Coding Conventions # +############################### +[*.cs] +# var preferences +csharp_style_var_for_built_in_types = true:silent +csharp_style_var_when_type_is_apparent = true:silent +csharp_style_var_elsewhere = true:silent +# Expression-bodied members +csharp_style_expression_bodied_methods = false:silent +csharp_style_expression_bodied_constructors = false:silent +csharp_style_expression_bodied_operators = false:silent +csharp_style_expression_bodied_properties = true:silent +csharp_style_expression_bodied_indexers = true:silent +csharp_style_expression_bodied_accessors = true:silent +# Pattern matching preferences +csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion +csharp_style_pattern_matching_over_as_with_null_check = true:suggestion +# Null-checking preferences +csharp_style_throw_expression = true:suggestion +csharp_style_conditional_delegate_call = true:suggestion +# Modifier preferences +csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:suggestion +# Expression-level preferences +csharp_prefer_braces = true:silent +csharp_style_deconstructed_variable_declaration = true:suggestion +csharp_prefer_simple_default_expression = true:suggestion +csharp_style_pattern_local_over_anonymous_function = true:suggestion +csharp_style_inlined_variable_declaration = true:suggestion +############################### +# C# Formatting Rules # +############################### +# New line preferences +csharp_new_line_before_open_brace = all +csharp_new_line_before_else = true +csharp_new_line_before_catch = true +csharp_new_line_before_finally = true +csharp_new_line_before_members_in_object_initializers = true +csharp_new_line_before_members_in_anonymous_types = true +csharp_new_line_between_query_expression_clauses = true +# Indentation preferences +csharp_indent_case_contents = true +csharp_indent_switch_labels = true +csharp_indent_labels = flush_left +# Space preferences +csharp_space_after_cast = false +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_between_method_call_parameter_list_parentheses = false +csharp_space_between_method_declaration_parameter_list_parentheses = false +csharp_space_between_parentheses = false +csharp_space_before_colon_in_inheritance_clause = true +csharp_space_after_colon_in_inheritance_clause = true +csharp_space_around_binary_operators = before_and_after +csharp_space_between_method_declaration_empty_parameter_list_parentheses = false +csharp_space_between_method_call_name_and_opening_parenthesis = false +csharp_space_between_method_call_empty_parameter_list_parentheses = false +# Wrapping preferences +csharp_preserve_single_line_statements = true +csharp_preserve_single_line_blocks = true +############################### +# VB Coding Conventions # +############################### +[*.vb] +# Modifier preferences +visual_basic_preferred_modifier_order = Partial,Default,Private,Protected,Public,Friend,NotOverridable,Overridable,MustOverride,Overloads,Overrides,MustInherit,NotInheritable,Static,Shared,Shadows,ReadOnly,WriteOnly,Dim,Const,WithEvents,Widening,Narrowing,Custom,Async:suggestion diff --git a/ReallifeGamemode.Server/Business/BusinessBase.cs b/ReallifeGamemode.Server/Business/BusinessBase.cs index 34328daf..3f70baa3 100644 --- a/ReallifeGamemode.Server/Business/BusinessBase.cs +++ b/ReallifeGamemode.Server/Business/BusinessBase.cs @@ -7,92 +7,92 @@ using System.Linq; namespace ReallifeGamemode.Server.Business { - public abstract class BusinessBase : IBankAccountOwner + public abstract class BusinessBase : IBankAccountOwner + { + private TextLabel _informationLabel; + private ColShape _colShape; + + public abstract int Id { get; } + public abstract string Name { get; } + + public abstract Vector3 Position { get; } + + public IBankAccount GetBankAccount(DatabaseContext databaseContext = null) { - private TextLabel _informationLabel; - 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()) { - if (databaseContext == null) - { - using (databaseContext = new DatabaseContext()) - { - return databaseContext.BusinessBankAccounts.FirstOrDefault(u => u.BusinessId == Id); - } - } - else - { - return databaseContext.BusinessBankAccounts.FirstOrDefault(u => u.BusinessId == Id); - } + 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)); - 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(); + } + 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)); + 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(); + } } diff --git a/ReallifeGamemode.Server/Business/CarDealerBusinessBase.cs b/ReallifeGamemode.Server/Business/CarDealerBusinessBase.cs index e9a6399b..49e926fd 100644 --- a/ReallifeGamemode.Server/Business/CarDealerBusinessBase.cs +++ b/ReallifeGamemode.Server/Business/CarDealerBusinessBase.cs @@ -5,9 +5,9 @@ using System.Text; namespace ReallifeGamemode.Server.Business { - public abstract class CarDealerBusinessBase : BusinessBase - { - public abstract Vector3 CarSpawnPositon { get; } - public abstract float CarSpawnHeading { get; } - } + public abstract class CarDealerBusinessBase : BusinessBase + { + public abstract Vector3 CarSpawnPositon { get; } + public abstract float CarSpawnHeading { get; } + } } diff --git a/ReallifeGamemode.Server/Business/ShopBusiness.cs b/ReallifeGamemode.Server/Business/ShopBusiness.cs index 204e9077..38fa7c2e 100644 --- a/ReallifeGamemode.Server/Business/ShopBusiness.cs +++ b/ReallifeGamemode.Server/Business/ShopBusiness.cs @@ -5,17 +5,17 @@ using GTANetworkAPI; namespace ReallifeGamemode.Server.Business { - public class ShopBusiness : BusinessBase + public class ShopBusiness : BusinessBase + { + public override int Id => 2; + + public override string Name => "24/7 Business"; + + public override Vector3 Position => new Vector3(-443, 1134, 326); + + public override void Load() { - public override int Id => 2; - public override string Name => "24/7 Business"; - - public override Vector3 Position => new Vector3(-443, 1134, 326); - - public override void Load() - { - - } } + } } diff --git a/ReallifeGamemode.Server/Business/TelefonBusiness.cs b/ReallifeGamemode.Server/Business/TelefonBusiness.cs index ecdb5c66..5e87f151 100644 --- a/ReallifeGamemode.Server/Business/TelefonBusiness.cs +++ b/ReallifeGamemode.Server/Business/TelefonBusiness.cs @@ -5,17 +5,17 @@ using GTANetworkAPI; namespace ReallifeGamemode.Server.Business { - public class TelefonBusiness : BusinessBase + public class TelefonBusiness : BusinessBase + { + public override int Id => 1; + + public override string Name => "Telefon Business"; + + public override Vector3 Position => new Vector3(-423, 1130, 326); + + public override void Load() { - public override int Id => 1; - public override string Name => "Telefon Business"; - - public override Vector3 Position => new Vector3(-423, 1130, 326); - - public override void Load() - { - - } } + } } diff --git a/ReallifeGamemode.Server/Business/VapidCarDealerBusiness.cs b/ReallifeGamemode.Server/Business/VapidCarDealerBusiness.cs index 07afd1c6..a97d9961 100644 --- a/ReallifeGamemode.Server/Business/VapidCarDealerBusiness.cs +++ b/ReallifeGamemode.Server/Business/VapidCarDealerBusiness.cs @@ -5,21 +5,21 @@ using GTANetworkAPI; namespace ReallifeGamemode.Server.Business { - public class VapidCarDealerBusiness : CarDealerBusinessBase + public class VapidCarDealerBusiness : CarDealerBusinessBase + { + public override int Id => 3; + + public override string Name => "Vapid Autohaus"; + + public override Vector3 Position => new Vector3(-177, -1156, 23); + + public override Vector3 CarSpawnPositon => new Vector3(-222, -1162, 22.5); + + public override float CarSpawnHeading => 356.6f; + + public override void Load() { - public override int Id => 3; - public override string Name => "Vapid Autohaus"; - - public override Vector3 Position => new Vector3(-177, -1156, 23); - - public override Vector3 CarSpawnPositon => new Vector3(-222, -1162, 22.5); - - public override float CarSpawnHeading => 356.6f; - - public override void Load() - { - - } } + } } diff --git a/ReallifeGamemode.Server/Classes/TempBlip.cs b/ReallifeGamemode.Server/Classes/TempBlip.cs index 41f1c175..c5eae011 100644 --- a/ReallifeGamemode.Server/Classes/TempBlip.cs +++ b/ReallifeGamemode.Server/Classes/TempBlip.cs @@ -4,13 +4,13 @@ using System.Text; namespace ReallifeGamemode.Server.Classes { - public class TempBlip - { - public byte Color { get; set; } - public string Name { get; set; } - public byte Transparency { get; set; } - public bool ShortRange { get; set; } - public uint Sprite { get; set; } - public float Scale { get; set; } - } + public class TempBlip + { + public byte Color { get; set; } + public string Name { get; set; } + public byte Transparency { get; set; } + public bool ShortRange { get; set; } + public uint Sprite { get; set; } + public float Scale { get; set; } + } } diff --git a/ReallifeGamemode.Server/Commands/AdminCommands.cs b/ReallifeGamemode.Server/Commands/AdminCommands.cs index bab67146..4c97d5b2 100644 --- a/ReallifeGamemode.Server/Commands/AdminCommands.cs +++ b/ReallifeGamemode.Server/Commands/AdminCommands.cs @@ -25,2664 +25,2664 @@ using ReallifeGamemode.Server.Finance; namespace ReallifeGamemode.Server.Commands { - public class AdminCommands : Script + public class AdminCommands : Script + { + #region Test + [Command("eat", "~m~Benutzung: ~s~/eat [Item]")] + public void CmdAdminEat(Client player, string item) { - #region Test - [Command("eat", "~m~Benutzung: ~s~/eat [Item]")] - public void CmdAdminEat(Client player, string item) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - IItem iItem = InventoryManager.GetItemByName(item); - - if (iItem == null) - { - ChatService.SendMessage(player, "Dieses Essen existiert nicht."); - return; - } - - List itemList = player.GetUser().GetItems(); - UserItem eatItem = itemList.FirstOrDefault(i => i.ItemId == iItem.Id); - - if (eatItem == null) - { - ChatService.SendMessage(player, "Du hast dieses Item nicht"); - return; - } - - if (iItem is IUsableItem usableItemObj) - { - usableItemObj.Use(eatItem); - } - } - - [Command("myvehicles")] - public void CmdAdminMyVehicles(Client player) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - ChatService.SendMessage(player, "Deine Fahrzeuge: "); - - int userID = player.GetUser().Id; - using (var loadData = new DatabaseContext()) - { - foreach (UserVehicle v in loadData.UserVehicles) - { - if (v.UserId == userID) - { - ChatService.SendMessage(player, "~b~" + v.Model); - } - } - } - } - - //TODO - [Command("fpay")] - public void FPay(Client player, string receiver, int amount) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - using (var getFaction = new DatabaseContext()) - { - Faction receiverUser = getFaction.Factions.FirstOrDefault(u => u.Name == receiver); - - if (receiverUser == null) - { - ChatService.ErrorMessage(player, "Diese Fraktion existiert nicht"); - return; - } - - BankManager.TransferMoney(player.GetUser(), receiverUser, amount, "/FPAY"); - } - } - - [Command("saveall")] - public void SaveAll(Client player) - { - SaveManager.SaveAllOnSave(); - } - - [Command("hash")] - public void CmdHash(Client player, string toHash) - { - string msg = $"{toHash} => {NAPI.Util.GetHashKey(toHash)}"; - NAPI.Util.ConsoleOutput(msg); - ChatService.SendMessage(player, msg); - } - - #endregion - #region Support - [Command("o", "~m~Benutzung: ~s~/o [Nachricht]", GreedyArg = true)] - public void CmdAdminO(Client player, string message) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - message = Regex.Replace(message, "(~[a-zA-Z]~)|(!{(.*)})", ""); - message = Regex.Replace(message, "#([0-9A-Fa-f]{6})", m => "!{" + m.Groups[0].Value + "}"); - - string publicMessage = "~b~(( " + player.GetUser().AdminLevel.GetName() + " " + player.Name + ": " + message + " ~b~))"; - ChatService.Broadcast(publicMessage); - } - - [Command("team", "~m~Benutzung: ~s~/team")] - public void CmdAdminTeam(Client player) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - ChatService.SendMessage(player, "Online Teammitglieder:"); - - List playerlist = NAPI.Pools.GetAllPlayers().FindAll(c => c.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? false).OrderByDescending(c => c.GetUser().AdminLevel).ToList(); - foreach (Client currentPlayer in playerlist) - { - ChatService.SendMessage(player, currentPlayer.GetUser().AdminLevel.GetName() + " | " + currentPlayer.Name); - } - } - - [Command("dimension", "~m~Benutzung: ~s~/dimension")] - public void CmdAdminDimension(Client player) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - ChatService.SendMessage(player, "Deine Dimension ist ~g~" + player.Dimension); - } - - [Command("to", "~m~Benutzung: ~s~/to [Name]")] - public void CmdAdminGoto(Client player, string name) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - Client target = ClientService.GetClientByNameOrId(name); - - if (target == null || !target.IsLoggedIn()) - { - ChatService.PlayerNotFound(player); - return; - } - //TODO: Als Supporter nur, wenn mit dem Ziel ein offenes Ticket besteht. Ansonsten kein Teleport - if (player.IsInVehicle && player.VehicleSeat == -1) - { - player.Vehicle.Position = target.Position; - NAPI.Entity.SetEntityVelocity(player.Vehicle, new Vector3()); - } - else player.Position = target.Position; - } - - [Command("position", "~m~Benutzung: ~s~/position")] - public void CmdAdminShowPos(Client player) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - ChatService.SendMessage(player, "Position: X Y Z: " + player.Position); - } - - [Command("gh", "~m~Benutzung: ~s~/gh [Name]")] - public void CmdAdminGethere(Client player, string name) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - Client target = ClientService.GetClientByNameOrId(name); - - if (target == null || !target.IsLoggedIn()) - { - ChatService.PlayerNotFound(player); - return; - } - - if (target.IsInVehicle && target.VehicleSeat == -1) - { - target.Vehicle.Position = player.Position; - NAPI.Entity.SetEntityVelocity(target.Vehicle, new Vector3()); - } - else target.Position = player.Position; - ChatService.SendMessage(target, "Du wurdest von " + player.Name + " teleportiert."); - } - - [Command("aw", "~m~Benutzung: ~s~/aw [Spieler] [Nachricht]", GreedyArg = true)] - public void CmdAdminMsg(Client player, string name, string msg) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - Client target = ClientService.GetClientByNameOrId(name); - if (target == null || !target.IsLoggedIn()) - { - ChatService.PlayerNotFound(player); - return; - } - - if (target == player) - { - ChatService.ErrorMessage(player, "Du kannst dir nicht selber zuflüstern"); - return; - } - - msg = Regex.Replace(msg, "(~[a-zA-Z]~)|(!{(.*)})", ""); - - ChatService.SendMessage(player, "~y~PM an " + target.Name + ": " + msg + " "); - string Message = "~y~PM von " + player.GetUser().AdminLevel.GetName() + " " + player.Name + ": " + msg + ""; - ChatService.SendMessage(target, Message); - } - - [Command("factionlist", "~m~Benutzung: ~s~/factionlist")] - public void CmdAdminFactionlist(Client player) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - using (var dbContext = new DatabaseContext()) - { - ChatService.SendMessage(player, "~m~__________ ~s~Fraktionen ~m~__________"); - foreach (Entities.Faction f in dbContext.Factions) - { - ChatService.SendMessage(player, f.Id.ToString().PadRight(3) + " | " + f.Name); - } - } - } - - [Command("businesslist", "~m~Benutzung: ~s~/businesslist")] - public void CmdAdminBusinessList(Client player) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - ChatService.SendMessage(player, "~m~__________ ~s~Businesses ~m~__________"); - foreach (BusinessBase b in BusinessManager.Businesses.OrderBy(b => b.Id)) - { - ChatService.SendMessage(player, b.Id.ToString().PadRight(3) + " | " + b.Name + (b is CarDealerBusinessBase ? " | Autohaus" : "")); - } - } - - [Command("joblist", "~m~Benutzung: ~s~/joblist")] - public void CmdAdminJoblist(Client player) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - ChatService.SendMessage(player, "~m~__________ ~s~Jobs ~m~__________"); - foreach (JobBase job in JobManager.GetJobs()) - { - ChatService.SendMessage(player, job.Id.ToString().PadRight(3) + " | " + job.Name); - } - } - #endregion - - #region ALevel1 - [Command("a", "~m~Benutzung: ~s~/a [Nachricht]", GreedyArg = true)] - public void CmdAdminA(Client player, string message) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - message = Regex.Replace(message, "(~[a-zA-Z]~)|(!{(.*)})", ""); - - ChatService.BroadcastAdmin("~r~[ADMINCHAT]~s~ " + player.GetUser().AdminLevel.GetName() + " " + player.Name + "~w~: " + message, AdminLevel.ADMIN); - } - - [Command("freeze", "~m~Benutzung: ~s~/freeze [Spieler]")] - public void CmdAdminFreeze(Client player, string targetname) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - Client target = ClientService.GetClientByNameOrId(targetname); - if (target == null || !target.IsLoggedIn()) - { - ChatService.PlayerNotFound(player); - return; - } - ChatService.SendMessage(player, "Du hast ~y~" + target.Name + " ~s~gefreezed."); - ChatService.SendMessage(target, "Du wurdest von ~y~" + player.Name + "~s~ gefreezed."); - target.Freeze(true); - } - - [Command("unfreeze", "~m~Benutzung: ~s~/unfreeze [Spieler]")] - public void CmdAdminUnfreeze(Client player, string targetname) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - Client target = ClientService.GetClientByNameOrId(targetname); - if (target == null || !target.IsLoggedIn()) - { - ChatService.PlayerNotFound(player); - return; - } - ChatService.SendMessage(player, "Du hast ~y~" + target.Name + " ~s~unfreezed."); - ChatService.SendMessage(target, "Du wurdest von ~y~" + player.Name + "~s~ unfreezed."); - target.Freeze(false); - } - - [Command("gotolist", "~m~Benutzung: ~s~/gotolist")] //TODO Als Browser anzeigeN?? - public void CmdAdminGotoList(Client player) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - var gotoString = ""; - using (var dbContext = new DatabaseContext()) - { - foreach (GotoPoint point in dbContext.GotoPoints) - { - if (point.Active) - { - gotoString += point.Description + ", "; - } - } - } - ChatService.SendMessage(player, gotoString); - } - - [Command("mark", "~m~Benutzung: ~s~/mark")] - public void CmdAdminMark(Client player) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - player.SetData("mark", player.Position); - player.SendNotification("~y~Mark ~s~gespeichert", true); - } - - [Command("gotomark", "~m~Benutzung: ~s~/gotomark")] - public void CmdAdminGotoMark(Client player) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - if (!player.HasData("mark")) - { - ChatService.ErrorMessage(player, "Du hast noch keine Markierung gesetzt. ~m~(/mark)"); - return; - } - - if (player.IsInVehicle && player.VehicleSeat == -1) player.Vehicle.Position = player.GetData("mark"); - else player.Position = player.GetData("mark"); - } - - [Command("clearchat", "~m~Benutzung: ~s~/clearchat")] - public void CmdAdminClearchat(Client player) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - for (int i = 0; i < 20; i++) - { - ChatService.Broadcast(""); - } - } - - [Command("up", "~m~Benutzung: ~s~/up [Wert]")] - public void CmdAdminUp(Client player, int value = 5) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - if (player.IsInVehicle) - { - player.Vehicle.Position = new Vector3(player.Vehicle.Position.X, player.Vehicle.Position.Y, player.Vehicle.Position.Z + value); - } - else - { - player.Position = new Vector3(player.Position.X, player.Position.Y, player.Position.Z + value); - } - } - - [Command("dn", "~m~Benutzung: ~s~/dn [Wert]")] - public void CmdAdminDn(Client player, int value = 5) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - if (player.IsInVehicle) - { - player.Vehicle.Position = new Vector3(player.Vehicle.Position.X, player.Vehicle.Position.Y, player.Vehicle.Position.Z - value); - } - else - { - player.Position = new Vector3(player.Position.X, player.Position.Y, player.Position.Z - value); - } - } - - [Command("rt", "~m~Benutzung: ~s~/rt [Wert]")] - public void CmdAdminRt(Client player, int value = 5) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - float playerHeading = player.Heading; - - if (playerHeading < 45 || playerHeading >= 315) - { - Vector3 playerPosition = new Vector3(player.Position.X + value, player.Position.Y, player.Position.Z); - if (player.IsInVehicle && player.VehicleSeat == -1) player.Vehicle.Position = playerPosition; - else player.Position = playerPosition; - } - else if (playerHeading < 315 && playerHeading >= 225) - { - Vector3 playerPosition = new Vector3(player.Position.X, player.Position.Y - value, player.Position.Z); - if (player.IsInVehicle && player.VehicleSeat == -1) player.Vehicle.Position = playerPosition; - else player.Position = playerPosition; - } - else if (playerHeading >= 135 && playerHeading < 225) - { - Vector3 playerPosition = new Vector3(player.Position.X - value, player.Position.Y, player.Position.Z); - if (player.IsInVehicle && player.VehicleSeat == -1) player.Vehicle.Position = playerPosition; - else player.Position = playerPosition; - } - else if (playerHeading >= 45 && playerHeading < 135) - { - Vector3 playerPosition = new Vector3(player.Position.X, player.Position.Y + value, player.Position.Z); - if (player.IsInVehicle && player.VehicleSeat == -1) player.Vehicle.Position = playerPosition; - else player.Position = playerPosition; - } - } - - [Command("lt", "~m~Benutzung: ~s~/lt [Wert]")] - public void CmdAdminLt(Client player, int value = 5) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - float playerHeading = player.Heading; - - if (playerHeading < 45 || playerHeading >= 315) - { - Vector3 playerPosition = new Vector3(player.Position.X - value, player.Position.Y, player.Position.Z); - if (player.IsInVehicle && player.VehicleSeat == -1) player.Vehicle.Position = playerPosition; - else player.Position = playerPosition; - } - else if (playerHeading < 315 && playerHeading >= 225) - { - Vector3 playerPosition = new Vector3(player.Position.X, player.Position.Y + value, player.Position.Z); - if (player.IsInVehicle && player.VehicleSeat == -1) player.Vehicle.Position = playerPosition; - else player.Position = playerPosition; - } - else if (playerHeading >= 135 && playerHeading < 225) - { - Vector3 playerPosition = new Vector3(player.Position.X + value, player.Position.Y, player.Position.Z); - if (player.IsInVehicle && player.VehicleSeat == -1) player.Vehicle.Position = playerPosition; - else player.Position = playerPosition; - } - else if (playerHeading >= 45 && playerHeading < 135) - { - Vector3 playerPosition = new Vector3(player.Position.X, player.Position.Y - value, player.Position.Z); - if (player.IsInVehicle && player.VehicleSeat == -1) player.Vehicle.Position = playerPosition; - else player.Position = playerPosition; - } - } - - [Command("setdimension", "~m~Benutzung: ~s~/setdimension [Spieler] [Dimension]")] - public void CmdAdminSetDimension(Client player, string targetname, uint dimension) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - Client target = ClientService.GetClientByNameOrId(targetname); - if (target == null || !target.IsLoggedIn()) - { - ChatService.PlayerNotFound(player); - return; - } - target.Dimension = dimension; - ChatService.SendMessage(target, "~s~Deine Dimension wurde auf ~g~" + dimension + "~s~ geändert."); - ChatService.SendMessage(player, "~s~Die Dimension von ~y~" + target.Name + " ~s~wurde auf ~g~" + dimension + "~s~ geändert."); - } - - [Command("kick", "~m~Benutzung: ~s~/kick [Player] [Grund]", GreedyArg = true)] - public void CmdAdminKick(Client player, string targetname, string reason) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - Client target = ClientService.GetClientByNameOrId(targetname); - if (target == null || !target.IsLoggedIn()) - { - ChatService.PlayerNotFound(player); - return; - } - - string targetPlayername = NAPI.Player.GetPlayerName(target); - string adminPlayername = NAPI.Player.GetPlayerName(player); - - ChatService.SendMessage(target, "~r~KICKINFO: ~w~Du wurdest von " + adminPlayername + " vom Server gekickt: " + reason); - target.Kick(); - ChatService.Broadcast("~y~INFO: ~w~" + targetPlayername + " wurde von " + player.GetUser().AdminLevel.GetName() + " " + adminPlayername + " gekickt: " + reason); - } - - [Command("ip", "~m~Benutzung: ~s~/ip [Spieler]")] - public void CmdAdminIp(Client player, string targetname) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - Client target = ClientService.GetClientByNameOrId(targetname); - if (target == null || !target.IsLoggedIn()) - { - ChatService.PlayerNotFound(player); - return; - } - ChatService.SendMessage(player, "IP von ~y~" + NAPI.Player.GetPlayerName(target) + ": ~g~" + target.Address); - } - - [Command("ban", "~m~Benutzung: ~s~/ban [User] [Zeit in Minuten(0 für Permanent)] [Grund] ", GreedyArg = true)] - public void CmdAdminBan(Client admin, string user, int mins, string reason) - { - if (!admin.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) - { - ChatService.NotAuthorized(admin); - return; - } - - Client target = ClientService.GetClientByNameOrId(user); - - if (target == null || !target.IsLoggedIn()) - { - ChatService.PlayerNotFound(admin); - return; - } - - reason = Regex.Replace(reason, "(~[a-zA-Z]~)|(!{(.*)})", ""); - - target.GetUser().BanPlayer(admin, reason, mins); - } - - [Command("unban", "~m~Benutzung: ~s~/unban [Name] ")] - public void CmdAdminUnban(Client admin, string userName) - { - if (!admin.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) - { - ChatService.NotAuthorized(admin); - return; - } - - User user; - - using (var dbContext = new DatabaseContext()) - { - user = dbContext.Users.FirstOrDefault(u => u.Name == userName); - if (user == null) - { - ChatService.ErrorMessage(admin, "Dieser Spieler existiert nicht"); - return; - } - - if (user.BanId == null) - { - ChatService.ErrorMessage(admin, "Dieser Spieler ist nicht gebannt"); - return; - } - - Ban ban = dbContext.Bans.FirstOrDefault(b => b.Id == user.BanId); - if (ban == null) - { - ChatService.ErrorMessage(admin, "Dieser Spieler ist nicht gebannt"); - return; - } - - if (ban.Applied == ban.UntilDateTime) - { - user.UnbanPlayer(); - } - else - { - int currentTimestamp = (int)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; - if (ban.UntilDateTime < currentTimestamp) - { - ChatService.ErrorMessage(admin, "Dieser Spieler ist nicht gebannt"); - return; - } - } - user.UnbanPlayer(); - } - - string message = "~b~[ADMIN] ~s~Der Spieler ~y~" + user.Name + " ~s~wurde von ~y~" + admin.Name + " ~s~entbannt."; - ChatService.BroadcastAdmin(message, AdminLevel.ADMIN); - } - - [Command("goto", "~m~Benutzung: ~s~/goto [Ort]")] - public void CmdAdminGotoPoint(Client player, string location) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - using (var dbContext = new DatabaseContext()) - { - GotoPoint p = dbContext.GotoPoints.FirstOrDefault(x => x.Description == location); - - if (p == null) - { - ChatService.ErrorMessage(player, "Dieser Goto-Punkt existiert nicht"); - return; - } - - if (player.IsInVehicle && player.VehicleSeat == -1) player.Vehicle.Position = new Vector3(p.X, p.Y, p.Z); - else player.Position = new Vector3(p.X, p.Y, p.Z); - - } - } - - [Command("spec", "~m~Benutzung: ~s~/spec [Player]")] - public void CmdAdminSpectate(Client player, string name) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - Client target = ClientService.GetClientByNameOrId(name); - if (target == null || !target.IsLoggedIn()) - { - ChatService.PlayerNotFound(player); - return; - } - if (target == player) - { - ChatService.ErrorMessage(player, "Du kannst dich nicht selber spectaten"); - return; - } - - bool spec = player.GetData("spec"); - - if (spec == false) - { - NAPI.Player.SetPlayerToSpectatePlayer(player, target); - player.SetData("spec", true); - } - else - { - NAPI.Player.UnspectatePlayer(player); - player.SetData("spec", false); - } - - } - - [Command("slap", "~m~Benutzung: ~s~/slap [Spieler] (Höhe)")] - public void CmdAdminSlap(Client player, string name, int wert = 5) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - Client target = ClientService.GetClientByNameOrId(name); - if (target == null || !target.IsLoggedIn()) - { - ChatService.PlayerNotFound(player); - return; - } - - Vector3 oldPos = target.Position; - - target.Position = new Vector3(oldPos.X, oldPos.Y, oldPos.Z + wert); - ChatService.SendMessage(player, "Du hast " + target.Name + " geslappt. Höhe: " + wert + ""); - } - - [Command("takeweapon", "~m~Benutzung: ~s~/takeweapon [Spieler]")] - public void CmdAdminTakeWeapon(Client player, string name) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - Client target = ClientService.GetClientByNameOrId(name); - if (target == null || !target.IsLoggedIn()) - { - ChatService.PlayerNotFound(player); - return; - } - target.RemoveAllWeapons(); - ChatService.SendMessage(target, "~b~Deine Waffen wurden dir von " + player.Name + "(Admin) abgenommen"); - ChatService.SendMessage(player, "~b~Dem Spieler " + target.Name + " wurden erfolgreich alle Waffen abgenommen "); - } - - [Command("tov", "~m~Benutzung: ~s~/tov [Fahrzeug ID]")] - public void CmdAdminTov(Client player, int vehid) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - Vehicle v = VehicleManager.GetVehicleFromId(vehid); - if (v == null) - { - ChatService.ErrorMessage(player, "Dieses Fahrzeug existiert nicht"); - return; - } - - player.Position = v.Position.Add(new Vector3(0, 0, 2)); - } - - [Command("ghv", "~m~Benutzung: ~s~/ghv [Fahrzeug ID]")] - public void CmdAdminGhv(Client player, int vehid) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - Vehicle v = VehicleManager.GetVehicleFromId(vehid); - if (v == null) - { - ChatService.ErrorMessage(player, "Dieses Fahrzeug existiert nicht"); - return; - } - - v.Position = player.Position; - player.Position = player.Position.Add(new Vector3(0, 0, 2)); - } - #endregion - #region ALevel2 - [Command("sethp", "~m~Benutzung: ~s~/sethp [Spieler] (Hp)")] - public void CmdAdminSetHp(Client player, string name, int hp = 100) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN2) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - Client target = ClientService.GetClientByNameOrId(name); - if (target == null || !target.IsLoggedIn()) - { - ChatService.PlayerNotFound(player); - return; - } - - target.Health = hp; - ChatService.SendMessage(target, "~b~Deine HP wurden von " + player.Name + " auf " + hp + " gesetzt."); - ChatService.SendMessage(player, "~b~Du hast die HP von " + target.Name + " auf " + hp + " gesetzt."); - } - - [Command("clothes", "~m~Benutzung: ~s~/clothes [Spieler] [Component ID] [Drawable] (Textur)")] - public void CmdAdminClothes(Client player, string name, int component, int drawable, int texture = 0) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN2) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - Client target = ClientService.GetClientByNameOrId(name); - if (target == null || !target.IsLoggedIn()) - { - ChatService.PlayerNotFound(player); - return; - } - - using (var dbContext = new DatabaseContext()) - { - User user = target.GetUser(dbContext); - bool duty = user.GetData("duty"); - CharacterCloth cloth = dbContext.CharacterClothes.Where(c => c.UserId == user.Id && c.SlotId == component && c.SlotType == 0 && c.Duty == duty).FirstOrDefault(); - if (cloth == null) - { - cloth = new CharacterCloth() - { - Duty = duty, - ClothId = drawable, - SlotId = component, - SlotType = 0, - Texture = texture, - UserId = user.Id, - }; - dbContext.CharacterClothes.Add(cloth); - } - else - { - cloth.ClothId = drawable; - cloth.Texture = texture; - } - dbContext.SaveChanges(); - target.SetClothes(component, drawable, texture); - } - } - - [Command("props", "~m~Benutzung: ~s~/props [Spieler] [Component ID] [Drawable] (Textur)")] - public void CmdAdminProps(Client player, string name, int slot, int component, int texture = 0) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN2) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - Client target = ClientService.GetClientByNameOrId(name); - if (target == null || !target.IsLoggedIn()) - { - ChatService.PlayerNotFound(player); - return; - } - - if (component == -1) - { - target.ClearAccessory(slot); - return; - } - target.SetAccessories(slot, component, texture); - } - - [Command("gotox", "~m~Benutzung: ~s~/gotox [X] [Y] [Z]")] - public void CmdAdminGotoxyz(Client player, float x, float y, float z) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN2) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - if (player.IsInVehicle && player.VehicleSeat == -1) player.Vehicle.Position = new Vector3(x, y, z); - else player.Position = new Vector3(x, y, z); - } - #endregion - #region ALevel3 - - [Command("veh", "~m~Benutzung: ~s~/veh [Fahrzeug] (Farbe 1) (Farbe 2)")] - public void CmdAdminVeh(Client player, string hash, int color1 = 111, int color2 = 111) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN3) ?? true) - //TODO: Bestimmte Autos nur ab Adminlevel 1337, "normale Fahrzeuge" schon ab Adminlevel 3. - { - ChatService.NotAuthorized(player); - return; - } - - if (player.IsInVehicle) // Man darf keine Autos erstellen, wenn man selbst in einem sitzt (verhindert Bugs) - { - ChatService.ErrorMessage(player, "Du sitzt momentan schon in einem Fahrzeug"); - return; - } - - if (!uint.TryParse(hash, out uint uHash)) - uHash = NAPI.Util.GetHashKey(hash); - - if (!VehicleManager.IsValidHash(uHash)) - { - ChatService.ErrorMessage(player, "Dieses Fahrzeug existiert nicht"); - return; - } - - Vehicle v = NAPI.Vehicle.CreateVehicle(uHash, player.Position, player.Rotation.Z, color1, color2, engine: false); - VehicleStreaming.SetEngineState(v, true); - VehicleStreaming.SetLockStatus(v, false); - player.SetIntoVehicle(v.Handle, -1); - } - - [Command("fv", "~m~Benutzung: ~s~/fv")] - public void CmdAdminFixveh(Client player) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN3) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - if (!player.IsInVehicle) - { - ChatService.ErrorMessage(player, "Du sitzt momentan nicht in einem Fahrzeug"); - return; - } - player.Vehicle.Repair(); - } - - [Command("vdestroy", "~m~Benutzung: ~s~/vdestroy (ID)")] - public void CmdAdminVdestroy(Client player, int vid = -1) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN3) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - Vehicle targetVeh; - - if (vid == -1) - { - if (!player.IsInVehicle) - { - ChatService.SendMessage(player, "~m~Benutzung: ~s~/vdestroy (ID)"); - return; - } - targetVeh = player.Vehicle; - } - else - { - targetVeh = VehicleManager.GetVehicleFromId(vid); - if (targetVeh == null) - { - ChatService.ErrorMessage(player, "Dieses Fahrzeug existiert nicht"); - return; - } - } - - ServerVehicle veh = VehicleManager.GetServerVehicleFromVehicle(targetVeh); - if (veh != null) - { - ChatService.ErrorMessage(player, "Dieses Fahrzeug wird von einem Server-System benutzt: ~m~" + veh.GetType().Name); - return; - } - - VehicleManager.DeleteVehicle(targetVeh); - targetVeh.Trailer?.Delete(); - } - - [Command("vlivery", "~m~Benutzung: ~s~/vlivery [Livery]")] - public void CmdAdminVlivery(Client player, int livery) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN3) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - if (!player.IsInVehicle) - { - ChatService.ErrorMessage(player, "Du sitzt momentan nicht in einem Fahrzeug"); - return; - } - - Vehicle playerVeh = player.Vehicle; - - playerVeh.Livery = livery; - } - - [Command("vcolor", "~m~Benutzung: ~s~/vcolor [Farb-ID1] [Farb-ID2]")] - public void CmdAdminColor(Client player, int color1, int color2) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN3) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - if (!player.IsInVehicle) - { - ChatService.ErrorMessage(player, "Du sitzt momentan in keinem Fahrzeug"); - return; - } - - player.Vehicle.PrimaryColor = color1; - player.Vehicle.SecondaryColor = color2; - ChatService.SendMessage(player, "Farb-ID1 " + color1 + ", Farb-ID2 " + color2 + ""); - } - - [Command("giveweapon", "~m~Benutzung: ~s~/giveweapon [Spieler] [Waffe] [Munition]")] - public void CmdAdminGiveweapon(Client player, string name, string hash, int ammo) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN3) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - if (ammo <= 0) - { - ChatService.ErrorMessage(player, "Es muss mindestens 1 Munition vergeben werden"); - return; - } - - hash = hash.ToLower(); - - Client target = ClientService.GetClientByNameOrId(name); - if (target == null || !target.IsLoggedIn()) - { - ChatService.PlayerNotFound(player); - return; - } - - if (!uint.TryParse(hash, out uint uHash)) - { - if (hash.Contains("mk2") && !hash.Contains("_mk2")) hash = hash.Replace("mk2", "_mk2"); - uHash = NAPI.Util.GetHashKey($"weapon_{hash}"); - } - - if (!WeaponManager.IsValidHash(uHash)) - { - ChatService.ErrorMessage(player, "Diese Waffe existiert nicht"); - return; - } - - target.GiveWeapon((WeaponHash)uHash, ammo); - ChatService.SendMessage(target, "~b~Du hast von " + player.Name + " eine/n " + hash + " mit einer Munition von " + ammo + " erhalten."); - ChatService.SendMessage(player, "~b~Du hast " + target.Name + " eine/n " + hash + " mit einer Munition von " + ammo + " gegeben."); - } - - [Command("arevive", "~m~Benutzung: ~s~/arevive [Spieler]")] - public void CmdAdminRevive(Client player, string name) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN3) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - Client target = ClientService.GetClientByNameOrId(name); - if (target == null || !target.IsLoggedIn()) - { - ChatService.PlayerNotFound(player); - return; - } - if (target.Health != 0) - { - ChatService.ErrorMessage(player, "Der Spieler ist nicht tot"); - return; - } - target.TriggerEvent("onPlayerRevived"); - target.SendNotification("Du wurdest von Admin ~y~" + player.Name + "~s~ wiederbelebt."); - target.SetData("isDead", false); - NAPI.Player.SpawnPlayer(target, target.Position); - target.Health = 100; - - MedicTask task = Medic.ReviveTasks.FirstOrDefault(t => t.Victim == target.Name); - Medic.RemoveTaskFromList(task); - } - - [Command("setarmor", "~m~Benutzung: ~s~/setarmor [Spieler] (Armor)")] - public void CmdAdminSetArmor(Client player, string name, int armor = 100) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN3) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - Client target = ClientService.GetClientByNameOrId(name); - if (target == null || !target.IsLoggedIn()) - { - ChatService.PlayerNotFound(player); - return; - } - - target.Armor = armor; - ChatService.SendMessage(target, "~b~Deine Rüstung wurde von " + player.Name + " auf " + armor + " gesetzt."); - ChatService.SendMessage(player, "~b~Du hast die Rüstung von " + target.Name + " auf " + armor + " gesetzt."); - } - #endregion - #region ALevel1337 - [Command("sethandmoney", "~m~Benutzung: ~s~/sethandmoney [Target] [Geld]")] - public void CmdAdminSetUserHandMoney(Client admin, string targetname, int amount) - { - if (!admin.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) - { - ChatService.NotAuthorized(admin); - return; - } - - Client target = ClientService.GetClientByNameOrId(targetname); - if (target == null || !target.IsLoggedIn()) - { - ChatService.PlayerNotFound(target); - return; - } - using (var context = new DatabaseContext()) - { - var user = target.GetUser(context); - user.Handmoney = amount; - context.SaveChanges(); - } - target.TriggerEvent("SERVER:SET_HANDMONEY", amount); - } - - [Command("givehandmoney", "~m~Benutzung: ~s~/givehandmoney [Target] [Geld]")] - public void CmdAdminGiveUserHandMoney(Client admin, string targetname, int amount) - { - if (!admin.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) - { - ChatService.NotAuthorized(admin); - return; - } - - Client target = ClientService.GetClientByNameOrId(targetname); - if (target == null || !target.IsLoggedIn()) - { - ChatService.PlayerNotFound(target); - return; - } - using (var context = new DatabaseContext()) - { - var user = target.GetUser(context); - user.Handmoney += amount; - context.SaveChanges(); - target.TriggerEvent("SERVER:SET_HANDMONEY", user.Handmoney); - } - } - - [Command("quicksavemode", "~m~Benutzung: ~s~/quicksavemode [Modus]: ~g~blip, ~g~atm")] - public void CmdAdminSetQuickSaveMode(Client player, string mode) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - player.SetData("quicksavemode", mode.ToLower()); - } - - [Command("giveitem", "~m~Benutzung: ~s~/giveitem [Target] [Item ID] [Anzahl]")] - public void CmdAdminGiveItem(Client player, string targetname, int itemId, int amount) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - Client target = ClientService.GetClientByNameOrId(targetname); - if (target == null || !target.IsLoggedIn()) - { - ChatService.PlayerNotFound(player); - return; - } - - var invWeight = 0; - - using (var context = new DatabaseContext()) - { - List userItems = context.UserItems.ToList().FindAll(i => i.UserId == target.GetUser().Id); - foreach (var uItem in userItems) - { - invWeight += uItem.Amount * InventoryManager.GetItemById(uItem.ItemId).Gewicht; - } - } - - if (invWeight + (amount * InventoryManager.GetItemById(itemId).Gewicht) > 40000) - { - ChatService.SendMessage(player, "~y~" + target.Name + " ~s~hat nicht mehr genug Platz in seinem Inventar."); - } - else - { - UserItem item = new UserItem() { ItemId = itemId, UserId = target.GetUser().Id, Amount = amount }; - InventoryManager.AddItemToInventory(target, item); - } - } - - [Command("inventory", "~m~Benutzung: ~s~/inventory [Spieler]")] - public void CmdAdminGiveItem(Client player, string targetname) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - Client target = ClientService.GetClientByNameOrId(targetname); - if (target == null || !target.IsLoggedIn()) - { - ChatService.PlayerNotFound(player); - return; - } - - var user = target.GetUser(); - - InventoryManager.GetUserItemsAsAdmin(player, user); - } - - [Command("editmode", "~m~Benutzung: ~s~/editmode")] - public void CmdAdminToggleEditMode(Client player) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - if (player.GetData("editmode") == false) - { - player.SetData("editmode", true); - player.SendNotification("Edit-Mode ~g~aktiviert"); - player.TriggerEvent("toggleEditMode", true); - } - else - { - player.SetData("editmode", false); - player.SendNotification("Edit-Mode ~r~deaktiviert"); - player.TriggerEvent("toggleEditMode", false); - } - - } - - [Command("setbliptemplate", "~m~Benutzung: ~s~/setbliptemplate [byte COLOR] [byte ALPHA] [bool SHORTRANGE] [uint SPRITE] [float SCALE] [string NAME]", GreedyArg = true)] - public void CmdAdminSetBlipTemplate(Client player, byte color, byte alpha, bool shortRange, uint sprite, float scale, string name) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - TempBlip newTempBlip = new TempBlip() - { - Color = color, - Name = name, - Transparency = alpha, - ShortRange = shortRange, - Sprite = sprite, - Scale = scale, - }; - - NAPI.Data.SetWorldData("blipTemplate", newTempBlip); - } - - [Command("vmod", "~m~Benutzung: ~s~/vmod [Slot] [Mod ID]")] - public void CmdAdminVmod(Client player, int slot, int mod) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - if (!player.IsInVehicle) - { - ChatService.ErrorMessage(player, "Du sitzt momentan nicht in einem Fahrzeug"); - return; - } - - player.Vehicle.SetMod(slot, mod); - } - - [Command("aneon", "~m~Benutzung: ~s~/aneon [R][G][B]")] - public void CmdAdminNeon(Client player, int r, int g, int b) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - if (!player.IsInVehicle) - { - ChatService.ErrorMessage(player, "Du sitzt momentan nicht in einem Fahrzeug"); - return; - } - - Vehicle veh = NAPI.Player.GetPlayerVehicle(player); - NAPI.Vehicle.SetVehicleNeonColor(veh, r, g, b); - NAPI.Vehicle.SetVehicleNeonState(veh, true); - } - - [Command("vehsmoke", "~m~Benutzung: ~s~/vehsmoke [R][G][B]")] - public void CmdAdminVehSmoke(Client player, int r, int g, int b) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - if (!player.IsInVehicle) - { - ChatService.ErrorMessage(player, "Du sitzt momentan nicht in einem Fahrzeug"); - return; - } - - Vehicle veh = NAPI.Player.GetPlayerVehicle(player); - NAPI.Vehicle.SetVehicleTyreSmokeColor(veh, new Color(r, g, b)); - } - - [Command("ipl", "~m~Benutzung: ~s~/ipl [Load / Remove] [Name]")] - public void CmdAdminIpl(Client player, string option, string name) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - option = option.ToLower(); - - if (option == "load") - { - NAPI.World.RequestIpl(name); - ChatService.SendMessage(player, "~g~Das IPL ~s~" + name + " ~g~wurde erfolgreich geladen"); - } - else if (option == "remove") - { - NAPI.World.RemoveIpl(name); - ChatService.SendMessage(player, "~g~Das IPL ~s~" + name + " ~g~wurde erfolgreich entladen"); - } - else - { - ChatService.SendMessage(player, "~m~Benutzung: ~s~/ipl [Load / Remove] [Name]"); - } - } - - [Command("rsethp", "~m~Benutzung: ~s~/rsethp [Radius] (Leben)")] - public void CmdAdminRangeSetHP(Client player, float radius, int hp = 100) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - var peopleInRange = NAPI.Player.GetPlayersInRadiusOfPlayer(radius, player); - - foreach (var managedClient in peopleInRange) - { - if (!managedClient.IsLoggedIn()) return; - managedClient.Health = hp; - ChatService.SendMessage(managedClient, "~b~Admin " + player.Name + " hat im Radius von " + radius + " die HP auf " + hp + " gesetzt."); - } - ChatService.SendMessage(player, "~b~Das Leben von " + peopleInRange.Count + " Spielern wurde auf " + hp + " gesetzt."); - } - - [Command("freekh", "~m~Benutzung: ~s~/freekh (Radius)")] - public void CmdAdminFreekh(Client player, float radius = -1) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - var peopleInRange = radius == -1 ? NAPI.Pools.GetAllPlayers() : NAPI.Player.GetPlayersInRadiusOfPlayer(radius, player); - int playerRevided = 0; - - string toPlayerChat = "~b~Admin " + player.Name + " hat alle Spieler wiederbelebt"; - string toPlayerNotification = "Du wurdest von Admin ~y~" + player.Name + "~s~ wiederbelebt."; - - foreach (var managedClient in peopleInRange) - { - if (!managedClient.IsLoggedIn()) return; - if (!managedClient.HasData("isDead") || managedClient.GetData("isDead") == false) continue; - playerRevided++; - - managedClient.TriggerEvent("onPlayerRevived"); - managedClient.SetData("isDead", false); - managedClient.SendNotification(toPlayerNotification); - ChatService.SendMessage(managedClient, toPlayerChat); - - NAPI.Player.SpawnPlayer(managedClient, managedClient.Position); - managedClient.Health = 100; - - MedicTask task = Medic.ReviveTasks.FirstOrDefault(t => t.Victim == managedClient.Name); - Medic.RemoveTaskFromList(task); - } - - ChatService.SendMessage(player, "~b~Du hast " + playerRevided + " Spieler wiederbelebt."); - } - - [Command("rsetarmor", "~m~Benutzung: ~s~/rsetarmor [Radius] (Armor)")] - public void CmdAdminRangeSetArmor(Client player, float radius, int Armor = 100) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - var peopleInRange = NAPI.Player.GetPlayersInRadiusOfPlayer(radius, player); - - foreach (var managedClient in peopleInRange) - { - if (!managedClient.IsLoggedIn()) return; - managedClient.Armor = Armor; - ChatService.SendMessage(managedClient, "~b~Admin " + player.Name + " hat im Radius von " + radius + " die Rüstung auf " + Armor + " gesetzt."); - } - ChatService.SendMessage(player, "~b~Die Rüstung von " + peopleInRange.Count + " Spielern wurde auf " + Armor + " gesetzt."); - } - - [Command("rgiveweapon", "~m~Benutzung: ~s~/rgiveweapon [Radius] [Waffe] [Munition]")] - public void CmdAdminRangeGiveWeapon(Client player, float radius, string weapon, int munition) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - weapon = weapon.ToLower(); - - if (!uint.TryParse(weapon, out uint uHash)) - { - if (weapon.Contains("mk2") && !weapon.Contains("_mk2")) weapon = weapon.Replace("mk2", "_mk2"); - uHash = NAPI.Util.GetHashKey($"weapon_{weapon}"); - } - - if (!WeaponManager.IsValidHash(uHash)) - { - ChatService.ErrorMessage(player, "Diese Waffe existiert nicht"); - return; - } - - WeaponHash weaponHash = (WeaponHash)uHash; - - var peopleInRange = NAPI.Player.GetPlayersInRadiusOfPlayer(radius, player); - - foreach (var managedClient in peopleInRange) - { - if (!managedClient.IsLoggedIn()) return; - managedClient.GiveWeapon(weaponHash, munition); - ChatService.SendMessage(managedClient, "~b~Admin " + player.Name + " hat im Radius von " + radius + " eine/n " + weapon + " mit " + munition + " Munition vergeben."); - } - ChatService.SendMessage(player, "~b~Du hast " + peopleInRange.Count + " Spielern eine " + weapon + " mit " + munition + " Munition gegeben"); - } - - [Command("time", "~m~Benutzung: ~s~/time [Stunde] (Minuten) (Sekunden)")] - public void CmdAdminTime(Client player, int hour, int min = 0, int sec = 0) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - if (hour > 23 || min > 59 || sec > 59) - { - ChatService.ErrorMessage(player, "Es wurde eine ungültige Zeit eingegeben"); - return; - } - - if (hour == -1) - { - ChatService.SendMessage(player, "Es wird nun wieder die Echtzeit genutzt."); - TimeManager.StartTimeManager(); - return; - } - - string broadcastMsg = $"Serverzeit wurde auf {hour:D2}:{min:D2}:{sec:D2} gesetzt!"; - NAPI.Notification.SendNotificationToAll(broadcastMsg); - TimeManager.PauseTimeManager(); - NAPI.World.SetTime(hour, min, sec); - return; - - } - - [Command("ainvite", "~m~Benutzung: ~s~/ainvite [Name] [Fraktion]")] - public void CmdAdminAinvite(Client player, string name, int faction) - { - 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; - } - - using (var dbContext = new DatabaseContext()) - { - Entities.Faction f = dbContext.Factions.FirstOrDefault(x => x.Id == faction); - if (f == null && faction != 0) - { - ChatService.ErrorMessage(player, "Diese Fraktion existiert nicht (Liste: ~m~/factionlist~s~)"); - return; - } - - Entities.User u = target.GetUser(dbContext); - - if (faction != 0) - { - u.FactionId = f.Id; - u.FactionRankId = dbContext.FactionRanks. - OrderBy(x => x.Order) - .FirstOrDefault(r => r.FactionId == f.Id)?.Id ?? null; - - ChatService.SendMessage(player, "~b~[ADMIN]~s~ Du hast hast den Spieler ~y~" + target.Name + "~s~ administrativ in die Fraktion ~o~" + f.Name + "~s~ eingeladen."); - ChatService.SendMessage(target, "~b~[ADMIN]~s~ Du wurdest von ~y~" + player.Name + "~s~ administrativ in die Fraktion ~o~" + f.Name + "~s~ eingeladen."); - } - else - { - u.FactionId = null; - u.FactionRankId = null; - ChatService.SendMessage(player, "~b~[ADMIN]~s~ Du hast hast den Spieler ~y~" + target.Name + "~s~ administrativ aus seiner Fraktion geworfen."); - ChatService.SendMessage(target, "~b~[ADMIN]~s~ Du wurdest von ~y~" + player.Name + "~s~ administrativ aus deiner Fraktion geworfen."); - } - - u.FactionLeader = false; - - dbContext.SaveChanges(); - } - } - - [Command("makeleader", "~m~Benutzung: ~s~/makeleader [Name] [Fraktion]")] - public void CmdAdminMakeleader(Client player, string name, int faction) - { - 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; - } - - using (var dbContext = new DatabaseContext()) - { - Entities.Faction f = dbContext.Factions.FirstOrDefault(x => x.Id == faction); - if (f == null) - { - ChatService.ErrorMessage(player, "Diese Fraktion existiert nicht (Liste: ~m~/factionlist~s~)"); - return; - } - - Entities.User u = target.GetUser(dbContext); - - u.FactionId = f.Id; - u.FactionRankId = dbContext.FactionRanks. - OrderByDescending(x => x.Order) - .FirstOrDefault(r => r.FactionId == f.Id)?.Id ?? null; - u.FactionLeader = true; - - ChatService.SendMessage(player, "~b~[ADMIN]~s~ Du hast hast den Spieler ~y~" + target.Name + "~s~ zum Leader der Fraktion ~o~" + f.Name + "~s~ ernannt."); - ChatService.SendMessage(target, "~b~[ADMIN]~s~ Du wurdest von ~y~" + player.Name + "~s~ zum Leader der Fraktion ~o~" + f.Name + "~s~ ernannt."); - - dbContext.SaveChanges(); - } - } - - [Command("save", "~m~Benutzung: ~s~/save [Typ = ~g~Blip~s~, ~g~Goto (X)~s~, ~r~Marker~s~, ~r~Ped~s~, ~r~Pickup~s~, ~r~TextLabel~s~, ~g~Vehicle~s~, ~g~FVehicle~s~, ~g~SVehicle (X)~s~, ~g~JVehicle (X)~s~] (Weitere Angaben) = (X)")] - public void CmdAdminSave(Client player, string typ, string option1 = null, string option2 = null) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - switch (typ.ToLower()) - { - case "blip": - player.TriggerEvent("saveBlip"); - break; - case "goto": - if (option1 == null) - { - ChatService.SendMessage(player, "Für Goto musst du einen dritten Parameter angeben. Beispiel: Ort des Goto-Punktes."); - return; - } - else - { - using (var dbContext = new DatabaseContext()) - { - GotoPoint p = dbContext.GotoPoints.FirstOrDefault(x => x.Description == option1); - if (p == null) - { - SaveManager.SaveGotoPoint(player, option1); - player.SendNotification("Goto-Punkt ~g~" + option1 + "~s~ gespeichert.", true); - } - else - { - ChatService.SendMessage(player, "Einen Goto-Punkt mit dieser Bezeichnung gibt es schon!"); - } - } - - } - - break; - case "vehicle": - if (player.IsInVehicle) - { - Vehicle vehicle = player.Vehicle; - int playerSeat = player.VehicleSeat; - vehicle = SaveManager.SaveVehicleData(vehicle, (VehicleHash)vehicle.Model, vehicle.Position, vehicle.Heading, vehicle.NumberPlate, - Convert.ToByte(vehicle.PrimaryColor), Convert.ToByte(vehicle.SecondaryColor), vehicle.Locked); - player.SendNotification("Fahrzeug ~g~" + vehicle.DisplayName + "~s~ gespeichert.", true); - player.SetIntoVehicle(vehicle, playerSeat); - } - else ChatService.SendMessage(player, "~m~Du sitzt in keinem Fahrzeug!"); - break; - case "fvehicle": - if (player.IsInVehicle) - { - if (player.GetUser().Faction == null) - { - ChatService.SendMessage(player, "~m~Du bist in keiner Fraktion! Invite dich erst mit ~y~/ainvite"); - return; - } - else - { - Vehicle vehicle = player.Vehicle; - int playerSeat = player.VehicleSeat; - vehicle = SaveManager.SaveFactionVehicleData(vehicle, (VehicleHash)vehicle.Model, vehicle.Position, vehicle.Heading, vehicle.NumberPlate, - vehicle.PrimaryColor, vehicle.SecondaryColor, vehicle.Locked, vehicle.EngineStatus, player.GetUser().FactionId.Value); - player.SendNotification("Fraktionsfahrzeug ~g~" + vehicle.DisplayName + "~s~ gespeichert.", true); - player.SetIntoVehicle(vehicle, playerSeat); - } - } - else ChatService.SendMessage(player, "~m~Du sitzt in keinem Fahrzeug!"); - break; - case "jvehicle": - if (player.IsInVehicle) - { - if (option1 == null) - { - ChatService.ErrorMessage(player, "Du musst eine JobID als Parameter angeben"); - return; - } - else - { - if (!int.TryParse(option1, out int jobId)) - { - ChatService.ErrorMessage(player, "Du musst eine gültige Zahl als JobID angeben"); - return; - } - - Vehicle vehicle = player.Vehicle; - vehicle = SaveManager.SaveJobVehicleData(vehicle, (VehicleHash)vehicle.Model, vehicle.Position, vehicle.Heading, vehicle.NumberPlate, - vehicle.PrimaryColor, vehicle.SecondaryColor, vehicle.Locked, vehicle.EngineStatus, jobId); - player.SendNotification("Jobfahrzeug ~g~" + vehicle.DisplayName + "~s~ gespeichert.", true); - player.SetIntoVehicle(vehicle, -1); - } - } - else ChatService.SendMessage(player, "~m~Du sitzt in keinem Fahrzeug!"); - break; - case "svehicle": - if (player.IsInVehicle) - { - if (option1 == null || option2 == null) - { - ChatService.SendMessage(player, "~m~Benutzung: ~s~/save SVehicle [Carshop Business ID] [Preis]"); - return; - } - - if (!int.TryParse(option1, out int businessId) || !int.TryParse(option2, out int price)) - { - ChatService.SendMessage(player, "~m~Benutzung: ~s~/save SVehicle [Carshop Business ID] [Preis]"); - return; - } - - BusinessBase business = BusinessManager.GetBusiness(businessId); - if (business == null) - { - ChatService.ErrorMessage(player, "Dieses Business existiert nicht"); - return; - } - - if (!(business is CarDealerBusinessBase)) - { - ChatService.ErrorMessage(player, "Dieses Business ist kein Fahrzeug-Business"); - return; - } - - Vehicle vehicle = player.Vehicle; - int playerSeat = player.VehicleSeat; - vehicle = SaveManager.SaveShopVehicleData(vehicle, (VehicleHash)vehicle.Model, vehicle.DisplayName, vehicle.Position, vehicle.Heading, vehicle.NumberPlate, - Convert.ToByte(vehicle.PrimaryColor), Convert.ToByte(vehicle.SecondaryColor), business, price); - player.SendNotification("Shopfahrzeug ~g~" + vehicle.DisplayName + "~s~ gespeichert.", true); - Vector3 oldPos = player.Position; - player.Position = new Vector3(oldPos.X, oldPos.Y, oldPos.Z + 2.5); - } - else ChatService.SendMessage(player, "~m~Du sitzt in keinem Fahrzeug!"); - break; - - } - } - - [Command("remove", "~m~Benutzung: ~s~/remove [Vehicle, Goto] [Option]")] - public void CmdAdminRemove(Client player, string type, string option = "") - { - if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - switch (type.ToLower()) - { - case "vehicle": - if (!player.IsInVehicle) - { - ChatService.SendMessage(player, "~m~Du sitzt in keinem Fahrzeug!"); - return; - } - - ServerVehicle veh = player.Vehicle.GetServerVehicle(); - if (veh == null) - { - ChatService.ErrorMessage(player, "Dieses Fahrzeug wird nicht von einem Server-System genutzt"); - return; - } - - if (option.ToLower() != "yes") - { - ChatService.SendMessage(player, "Bist du sicher, dass du folgendes Fahrzeug löschen willst: ~m~" + veh.ToString() + " ~s~?"); - ChatService.SendMessage(player, "Falls ~g~Ja~s~, nutze ~y~/remove vehicle yes"); - return; - } - - using (var dbContext = new DatabaseContext()) - { - VehicleManager.DeleteVehicle(player.Vehicle); - dbContext.ServerVehicles.Remove(veh); - - dbContext.SaveChanges(); - } - break; - - case "goto": - if (option == "") - { - ChatService.SendMessage(player, "~m~Benutzung: ~s~/remove [Goto] [Punkt]"); - return; - } - if (!player.GetUser()?.IsAdmin(AdminLevel.PROJEKTLEITUNG) ?? true) //1338 - { - ChatService.NotAuthorized(player); - return; - } - using (var dbContext = new DatabaseContext()) - { - GotoPoint p = dbContext.GotoPoints.FirstOrDefault(x => x.Description == option); - if (p == null) - { - ChatService.ErrorMessage(player, "Dieser Goto-Punkt existiert nicht"); - return; - } - - dbContext.GotoPoints.Remove(p); - dbContext.SaveChanges(); - - player.SendNotification("Der Goto-Punkt ~r~" + p.Description + "~s~ wurde erfolgreich gelöscht."); - } - break; - } - } - - #region loadCommand - [Command("load", "~m~Benutzung: ~s~/load [Typ = OnlineBunkers, ArcadiusBusinessCentre, MazeBankBuilding, LomBank, MazeBankWest, ClubWareHouse, SpecialLocations, GRHYacht, DHYacht, PYacht, AircraftCarrier, BridgeTC, BridgeTN, NorthYankton, ONeilsFarmB, ONeilsFarm, Morgue")] - public void CmdAdminloadlocation(Client player, string typ) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - switch (typ) - { - case "OnlineBunkers": - NAPI.World.RequestIpl("gr_case10_bunkerclosed"); - NAPI.World.RequestIpl("gr_case9_bunkerclosed"); - NAPI.World.RequestIpl("gr_case3_bunkerclosed"); - NAPI.World.RequestIpl("gr_case0_bunkerclosed"); - NAPI.World.RequestIpl("gr_case1_bunkerclosed"); - NAPI.World.RequestIpl("gr_case2_bunkerclosed"); - NAPI.World.RequestIpl("gr_case5_bunkerclosed"); - NAPI.World.RequestIpl("gr_case7_bunkerclosed"); - NAPI.World.RequestIpl("gr_case11_bunkerclosed"); - NAPI.World.RequestIpl("gr_case6_bunkerclosed"); - NAPI.World.RequestIpl("gr_case11_bunkerclosed"); - NAPI.World.RequestIpl("gr_case6_bunkerclosed"); - NAPI.World.RequestIpl("gr_case4_bunkerclosed"); - ChatService.SendMessage(player, "~y~ Online Bunkers~s~ erfolgreich geladen!"); - break; - case "ArcadiusBusinessCentre": - NAPI.World.RequestIpl("ex_dt1_02_office_02b"); - NAPI.World.RequestIpl("ex_dt1_02_office_02c"); - NAPI.World.RequestIpl("ex_dt1_02_office_02a"); - NAPI.World.RequestIpl("ex_dt1_02_office_01a"); - NAPI.World.RequestIpl("ex_dt1_02_office_01b"); - NAPI.World.RequestIpl("ex_dt1_02_office_01c"); - NAPI.World.RequestIpl("ex_dt1_02_office_03a"); - NAPI.World.RequestIpl("ex_dt1_02_office_03b"); - NAPI.World.RequestIpl("ex_dt1_02_office_03c"); - NAPI.World.RequestIpl("imp_dt1_02_cargarage_a"); - NAPI.World.RequestIpl("imp_dt1_02_cargarage_b"); - NAPI.World.RequestIpl("imp_dt1_02_cargarage_c"); - NAPI.World.RequestIpl("imp_dt1_02_modgarage"); - ChatService.SendMessage(player, "~y~ Arcadius Business Centre~s~ erfolgreich geladen!"); - break; - case "MazeBankBuilding": - NAPI.World.RequestIpl("ex_dt1_11_office_02b"); - NAPI.World.RequestIpl("ex_dt1_11_office_02c"); - NAPI.World.RequestIpl("ex_dt1_11_office_02a"); - NAPI.World.RequestIpl("ex_dt1_11_office_01a"); - NAPI.World.RequestIpl("ex_dt1_11_office_01b"); - NAPI.World.RequestIpl("ex_dt1_11_office_01c"); - NAPI.World.RequestIpl("ex_dt1_11_office_03a"); - NAPI.World.RequestIpl("ex_dt1_11_office_03b"); - NAPI.World.RequestIpl("ex_dt1_11_office_03c"); - NAPI.World.RequestIpl("imp_dt1_11_cargarage_a"); - NAPI.World.RequestIpl("imp_dt1_11_cargarage_b"); - NAPI.World.RequestIpl("imp_dt1_11_cargarage_c"); - NAPI.World.RequestIpl("imp_dt1_11_modgarage"); - ChatService.SendMessage(player, "~y~ Maze Bank Building~s~ erfolgreich geladen!"); - break; - case "LomBank": - NAPI.World.RequestIpl("ex_sm_13_office_02b"); - NAPI.World.RequestIpl("ex_sm_13_office_02c"); - NAPI.World.RequestIpl("ex_sm_13_office_02a"); - NAPI.World.RequestIpl("ex_sm_13_office_01a"); - NAPI.World.RequestIpl("ex_sm_13_office_01b"); - NAPI.World.RequestIpl("ex_sm_13_office_01c"); - NAPI.World.RequestIpl("ex_sm_13_office_03a"); - NAPI.World.RequestIpl("ex_sm_13_office_03b"); - NAPI.World.RequestIpl("ex_sm_13_office_03c"); - NAPI.World.RequestIpl("imp_sm_13_cargarage_a"); - NAPI.World.RequestIpl("imp_sm_13_cargarage_b"); - NAPI.World.RequestIpl("imp_sm_13_cargarage_c"); - NAPI.World.RequestIpl("imp_sm_13_modgarage"); - ChatService.SendMessage(player, "~y~Lom Bank~s~ erfolgreich geladen!"); - break; - case "MazeBankWest": - NAPI.World.RequestIpl("ex_sm_15_office_02b"); - NAPI.World.RequestIpl("ex_sm_15_office_02c"); - NAPI.World.RequestIpl("ex_sm_15_office_02a"); - NAPI.World.RequestIpl("ex_sm_15_office_01a"); - NAPI.World.RequestIpl("ex_sm_15_office_01b"); - NAPI.World.RequestIpl("ex_sm_15_office_01c"); - NAPI.World.RequestIpl("ex_sm_15_office_03a"); - NAPI.World.RequestIpl("ex_sm_15_office_03b"); - NAPI.World.RequestIpl("ex_sm_15_office_03c"); - NAPI.World.RequestIpl("imp_sm_15_cargarage_a"); - NAPI.World.RequestIpl("imp_sm_15_cargarage_b"); - NAPI.World.RequestIpl("imp_sm_15_cargarage_c"); - NAPI.World.RequestIpl("imp_sm_15_modgarage"); - ChatService.SendMessage(player, "~y~Maze Bank West~s~ erfolgreich geladen!"); - break; - case "ClubWareHouse": - NAPI.World.RequestIpl("bkr_biker_interior_placement_interior_0_biker_dlc_int_01_milo"); - NAPI.World.RequestIpl("bkr_biker_interior_placement_interior_1_biker_dlc_int_02_milo"); - NAPI.World.RequestIpl("bkr_biker_interior_placement_interior_2_biker_dlc_int_ware01_milo"); - NAPI.World.RequestIpl("bkr_biker_interior_placement_interior_3_biker_dlc_int_ware02_milo"); - NAPI.World.RequestIpl("bkr_biker_interior_placement_interior_4_biker_dlc_int_ware03_milo"); - NAPI.World.RequestIpl("bkr_biker_interior_placement_interior_5_biker_dlc_int_ware04_milo"); - NAPI.World.RequestIpl("bkr_biker_interior_placement_interior_6_biker_dlc_int_ware05_milo"); - NAPI.World.RequestIpl("ex_exec_warehouse_placement_interior_1_int_warehouse_s_dlc_milo"); - NAPI.World.RequestIpl("ex_exec_warehouse_placement_interior_0_int_warehouse_m_dlc_milo"); - NAPI.World.RequestIpl("ex_exec_warehouse_placement_interior_2_int_warehouse_l_dlc_milo"); - NAPI.World.RequestIpl("imp_impexp_interior_placement_interior_1_impexp_intwaremed_milo_"); - NAPI.World.RequestIpl("bkr_bi_hw1_13_int"); - ChatService.SendMessage(player, "~y~Clubs & Warehouses~s~ erfolgreich geladen!"); - break; - case "SpecialLocations": - NAPI.World.RequestIpl("cargoship"); - NAPI.World.RequestIpl("sunkcargoship"); - NAPI.World.RequestIpl("SUNK_SHIP_FIRE"); - NAPI.World.RequestIpl("redCarpet"); - NAPI.World.RequestIpl("DES_StiltHouse_imapend"); - NAPI.World.RequestIpl("DES_stilthouse_rebuild"); - NAPI.World.RequestIpl("FINBANK"); - NAPI.World.RequestIpl("TrevorsMP"); - NAPI.World.RequestIpl("TrevorsTrailerTidy"); - NAPI.World.RequestIpl("SP1_10_real_interior"); - NAPI.World.RequestIpl("refit_unload"); - NAPI.World.RequestIpl("post_hiest_unload"); - NAPI.World.RequestIpl("FIBlobby"); - ChatService.SendMessage(player, "~y~Special Locations~s~ erfolgreich geladen!"); - break; - case "GRHYacht": - NAPI.World.RequestIpl("gr_heist_yacht2"); - NAPI.World.RequestIpl("gr_heist_yacht2_bar"); - NAPI.World.RequestIpl("gr_heist_yacht2_bedrm"); - NAPI.World.RequestIpl("gr_heist_yacht2_bridge"); - NAPI.World.RequestIpl("gr_heist_yacht2_enginrm"); - NAPI.World.RequestIpl("gr_heist_yacht2_lounge"); - ChatService.SendMessage(player, "~y~Gunrunning heist Yacht~s~ erfolgreich geladen!"); - break; - case "DHYacht": - NAPI.World.RequestIpl("hei_yacht_heist"); - NAPI.World.RequestIpl("hei_yacht_heist_enginrm"); - NAPI.World.RequestIpl("hei_yacht_heist_Lounge"); - NAPI.World.RequestIpl("hei_yacht_heist_Bridge"); - NAPI.World.RequestIpl("hei_yacht_heist_Bar"); - NAPI.World.RequestIpl("hei_yacht_heist_Bedrm"); - NAPI.World.RequestIpl("hei_yacht_heist_DistantLights"); - NAPI.World.RequestIpl("hei_yacht_heist_LODLights"); - ChatService.SendMessage(player, "~y~Dignity heist Yacht~s~ erfolgreich geladen!"); - break; - case "PYacht": - NAPI.World.RequestIpl("smboat"); - NAPI.World.RequestIpl("smboat_lod"); - ChatService.SendMessage(player, "~y~Party Yacht~s~ erfolgreich geladen!"); - break; - case "AircraftCarrier": - NAPI.World.RequestIpl("hei_carrier"); - NAPI.World.RequestIpl("hei_carrier_DistantLights"); - NAPI.World.RequestIpl("hei_Carrier_int1"); - NAPI.World.RequestIpl("hei_Carrier_int2"); - NAPI.World.RequestIpl("hei_Carrier_int3"); - NAPI.World.RequestIpl("hei_Carrier_int4"); - NAPI.World.RequestIpl("hei_Carrier_int5"); - NAPI.World.RequestIpl("hei_Carrier_int6"); - NAPI.World.RequestIpl("hei_carrier_LODLights"); - ChatService.SendMessage(player, "~y~Aircraft Carrier~s~ erfolgreich geladen!"); - break; - case "BridgeTC": - NAPI.World.RequestIpl("canyonriver01_traincrash"); - NAPI.World.RequestIpl("canyonriver01_traincrash"); - ChatService.SendMessage(player, "~y~Bridge Train Crash~s~ erfolgreich geladen!"); - break; - case "BridgeTN": - NAPI.World.RequestIpl("canyonriver01"); - NAPI.World.RequestIpl("railing_start"); - ChatService.SendMessage(player, "~y~Bridge Train Normal~s~ erfolgreich geladen!"); - break; - case "NorthYankton": - NAPI.World.RequestIpl("prologue01"); - NAPI.World.RequestIpl("prologue01c"); - NAPI.World.RequestIpl("prologue01d"); - NAPI.World.RequestIpl("prologue01e"); - NAPI.World.RequestIpl("prologue01f"); - NAPI.World.RequestIpl("prologue01g"); - NAPI.World.RequestIpl("prologue01h"); - NAPI.World.RequestIpl("prologue01i"); - NAPI.World.RequestIpl("prologue01j"); - NAPI.World.RequestIpl("prologue01k"); - NAPI.World.RequestIpl("prologue01z"); - NAPI.World.RequestIpl("prologue02"); - NAPI.World.RequestIpl("prologue03"); - NAPI.World.RequestIpl("prologue03b"); - NAPI.World.RequestIpl("prologue03_grv_dug"); - NAPI.World.RequestIpl("prologue_grv_torch"); - NAPI.World.RequestIpl("prologue04"); - NAPI.World.RequestIpl("prologue04b"); - NAPI.World.RequestIpl("prologue04_cover"); - NAPI.World.RequestIpl("des_protree_end"); - NAPI.World.RequestIpl("des_protree_start"); - NAPI.World.RequestIpl("prologue05"); - NAPI.World.RequestIpl("prologue05b"); - NAPI.World.RequestIpl("prologue06"); - NAPI.World.RequestIpl("prologue06b"); - NAPI.World.RequestIpl("prologue06_int"); - NAPI.World.RequestIpl("prologue06_pannel"); - NAPI.World.RequestIpl("plg_occl_00"); - NAPI.World.RequestIpl("prologue_occl"); - NAPI.World.RequestIpl("prologuerd"); - NAPI.World.RequestIpl("prologuerdb"); - ChatService.SendMessage(player, "~y~North Yankton~s~ erfolgreich geladen!"); - break; - case "ONeilsFarmB": - NAPI.World.RequestIpl("farmint"); - NAPI.World.RequestIpl("farm_burnt"); - NAPI.World.RequestIpl("farm_burnt_props"); - NAPI.World.RequestIpl("des_farmhs_endimap"); - NAPI.World.RequestIpl("des_farmhs_end_occl"); - ChatService.SendMessage(player, "~y~ONeils Farm Burnt~s~ erfolgreich geladen!"); - break; - case "ONeilsFarm": - NAPI.World.RequestIpl("farm"); - NAPI.World.RequestIpl("farm_props"); - NAPI.World.RequestIpl("farm_int"); - ChatService.SendMessage(player, "~y~ONeils Farm~s~ erfolgreich geladen!"); - break; - case "Morgue": - NAPI.World.RequestIpl("coronertrash"); - NAPI.World.RequestIpl("Coroner_Int_On"); - ChatService.SendMessage(player, "~y~Morgue~s~ erfolgreich geladen!"); - break; - } - - } - #endregion - - // - [Command("managefactionranks", "~m~Benutzung: ~s~/managefactionranks [Fraktions-ID]")] - public void CmdFactionManageFactionRanks(Client player, int factionID) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - using (var context = new DatabaseContext()) - { - Entities.Faction f = context.Factions.FirstOrDefault(id => id.Id == factionID); - if (f == null) - { - ChatService.ErrorMessage(player, "Diese Fraktion existiert nicht (Liste: ~m~/factionlist~s~)"); - return; - } - - List factionRanks = context.FactionRanks.ToList().FindAll(r => r.FactionId == f.Id).OrderByDescending(o => o.Order).ToList(); - List rankList = new List(); - - factionRanks.ForEach(r => - { - rankList.Add(new Rank - { - Id = r.Id, - Name = r.RankName - }); - }); - - FactionRankHelper helper = new FactionRankHelper - { - FactionId = f.Id, - Ranks = rankList - }; - - string json = JsonConvert.SerializeObject(helper, Formatting.None); - player.TriggerEvent("manageFactionRanks", json); - } - } - - [Command("setweather", "~m~Benutzung: ~s~/setweather [Wetter]")] - public void CmdAdminSetweather(Client player, string weather) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - bool found = false; - foreach (string w in Enum.GetNames(typeof(Weather))) - { - if (w.ToLower() == weather) - { - found = true; - break; - } - } - - if (!found) - { - ChatService.ErrorMessage(player, "Dieses Wetter existiert nicht"); - return; - } - - Weather weatherBefore = NAPI.World.GetWeather(); - NAPI.World.SetWeather(weather); - Weather weatherAfter = NAPI.World.GetWeather(); - - if (!weatherBefore.Equals(weatherAfter)) - { - ChatService.SendMessage(player, "~w~Wetter geändert: " + NAPI.World.GetWeather()); - NAPI.Notification.SendNotificationToAll("Das Wetter wurde auf ~g~ " + NAPI.World.GetWeather() + "~s~ geändert.", true); - } - else - { - ChatService.SendMessage(player, "~w~Das Wetter konnte nicht geändert werden"); - } - } - - [Command("aspeed", "~m~Benutzung: ~s~/aspeed [Modifier]")] //TODO: Überarbeiten ?? SetPlayerVelocity ?? - public void CmdAdminAspeed(Client player, int modifier) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - if (!player.IsInVehicle) - { - ChatService.ErrorMessage(player, "Du sitzt momentan nicht in einem Fahrzeug"); - return; - } - - player.Vehicle.SetSharedData("vehicleAdminSpeed", modifier); - } - - [Command("setmoney", "~m~Benutzung: ~s~/setmoney [Name] [Menge]")] - public void SetPlayerMoney(Client player, string receiver, int amount) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - Client target = ClientService.GetClientByNameOrId(receiver); - if (target == null || !target.IsLoggedIn()) - { - ChatService.PlayerNotFound(player); - return; - } - - using (var dbContext = new DatabaseContext()) - { - target.GetUser().GetBankAccount(dbContext).Balance = amount; - dbContext.SaveChanges(); - } - ChatService.SendMessage(player, "~b~[ADMIN]~s~ Du hast das Geld von " + target.Name + " auf ~g~$" + amount + "~s~ gesetzt."); - ChatService.SendMessage(target, "~b~[ADMIN]~s~ Dein Geld wurde von Admin " + player.Name + " auf ~g~$" + amount + "~s~ gesetzt."); - } - - [Command("givemoney", "~m~Benutzung: ~s~/givemoney [Name] [Menge]")] - public void GivePlayerMoney(Client player, string receiver, int amount) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - Client target = ClientService.GetClientByNameOrId(receiver); - if (target == null || !target.IsLoggedIn()) - { - ChatService.PlayerNotFound(player); - return; - } - - using (var dbContext = new DatabaseContext()) - { - target.GetUser().GetBankAccount(dbContext).Balance += amount; - dbContext.SaveChanges(); - } - ChatService.SendMessage(player, "~b~[ADMIN]~s~ Du hast " + target.Name + " ~g~$" + amount + "~s~ gegeben."); - ChatService.SendMessage(target, "~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; - } - - if (target.GetUser().BusinessId != null) - { - ChatService.ErrorMessage(player, "Der Spieler besitzt momentan schon ein Business: ~o~" + BusinessManager.GetBusiness(target.GetUser().BusinessId).Name); - return; - } - - BusinessBase business = BusinessManager.GetBusiness(businessid); - if (business == null) - { - ChatService.ErrorMessage(player, "Dieses Business existiert nicht. ~m~/businesslist"); - return; - } - - if (business.GetOwner() != null) - { - ChatService.ErrorMessage(player, "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; - - dbContext.SaveChanges(); - business.Update(); - } - } - - [Command("clearbusiness", "~m~Benutzung:~s~ /clearbusiness [Business ID]")] - public void CmdAdminClearbusiness(Client player, int businessid) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - BusinessBase business = BusinessManager.GetBusiness(businessid); - if (business == null) - { - ChatService.ErrorMessage(player, "Dieses Business existiert nicht. ~m~/businesslist"); - return; - } - - using (var dbContext = new DatabaseContext()) - { - User owner = business.GetOwner(dbContext); - if (owner == null) - { - ChatService.ErrorMessage(player, "Dieses Business hat momentan keinen Besitzer"); - return; - } - - owner.BusinessId = null; - business.GetBankAccount(dbContext).Balance = 0; - - ChatService.SendMessage(owner.Client, "~b~[ADMIN]~s~ Dir wurde von ~y~" + player.Name + "~s~ dein Business entzogen."); - ChatService.SendMessage(player, "~b~[ADMIN]~s~ Du hast ~y~" + owner.Name + "~s~ sein Business ~o~" + business.Name + "~s~ entzogen."); - - dbContext.SaveChanges(); - business.Update(); - } - } - - [Command("setbusinessbankbalance", "~m~Benutzung: ~s~/setbusinessbankbalance [Business ID] [Menge]")] - public void CmdAdminGivebusinessbankbalance(Client player, int businessid, int amount) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - BusinessBase business = BusinessManager.GetBusiness(businessid); - if (business == null) - { - ChatService.ErrorMessage(player, "Dieses Business existiert nicht. ~m~/businesslist"); - return; - } - - BankManager.SetMoney(player, business, amount, "Admin"); - } - - [Command("showtuningmenu", "~m~Benutzung: ~s~/showtuningmenu")] - public void CmdAdminShowtuningmenu(Client player) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - player.TriggerEvent("showTuningMenu"); - } - - [Command("interior", "~m~Benutzung: ~s~/interior [Add / Remove / SetEnterPosition / SetExitPosition] [Name / ID]")] - public void CmdAdminInterior(Client player, string option1, string option2) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - option1 = option1.ToString(); - - if (option1 != "add" && option1 != "remove" && option1 != "setenterposition" && option1 != "setexitposition") - { - ChatService.SendMessage(player, "~m~Benutzung: ~s~/interior [Add / Remove / SetEnterPosition / SetExitPosition] [Name]"); - return; - } - - switch (option1) - { - case "add": - using (var dbContext = new DatabaseContext()) - { - Interior interiorAdd = new Interior - { - Name = option2 - }; - dbContext.Interiors.Add(interiorAdd); - dbContext.SaveChanges(); - ChatService.SendMessage(player, "~b~[ADMIN]~s~ Das Interior ~y~" + option2 + "~s~ wurde erstellt. ~m~ID: " + interiorAdd.Id); - } - break; - case "remove": - using (var dbContext = new DatabaseContext()) - { - if (!int.TryParse(option2, out int intId)) - { - ChatService.ErrorMessage(player, "Es muss eine Nummer angegeben werden"); - return; - } - Interior interiorRemove = InteriorManager.GetInteriorById(intId, dbContext); - if (interiorRemove == null) - { - ChatService.ErrorMessage(player, "Dieses Interior existiert nicht"); - return; - } - - InteriorManager.DeleteInterior(interiorRemove); - - dbContext.Interiors.Remove(interiorRemove); - dbContext.SaveChanges(); - } - ChatService.SendMessage(player, "~b~[ADMIN]~s~ Das Interior wurde gelöscht."); - break; - case "setenterposition": - using (var dbContext = new DatabaseContext()) - { - if (!int.TryParse(option2, out int intIdEnter)) - { - ChatService.ErrorMessage(player, "Es muss eine Nummer angegeben werden"); - return; - } - Interior interior = InteriorManager.GetInteriorById(intIdEnter, dbContext); - if (interior == null) - { - ChatService.ErrorMessage(player, "Dieses Interior existiert nicht"); - return; - } - interior.EnterPosition = player.Position; - dbContext.SaveChanges(); - InteriorManager.DeleteInterior(interior); - InteriorManager.LoadInterior(interior); - ChatService.SendMessage(player, "~b~[ADMIN]~s~ Die Eingangs-Position vom Interior ~y~" + interior.Name + "~s~ wurde gesetzt."); - InteriorManager.LoadInteriors(); - } - break; - case "setexitposition": - using (var dbContext = new DatabaseContext()) - { - if (!int.TryParse(option2, out int intIdExit)) - { - ChatService.ErrorMessage(player, "Es muss eine Nummer angegeben werden"); - return; - } - Interior interior = InteriorManager.GetInteriorById(intIdExit, dbContext); - if (interior == null) - { - ChatService.ErrorMessage(player, "Dieses Interior existiert nicht"); - return; - } - interior.ExitPosition = player.Position; - dbContext.SaveChanges(); - InteriorManager.DeleteInterior(interior); - InteriorManager.LoadInterior(interior); - ChatService.SendMessage(player, "~b~[ADMIN]~s~ Die Eingangs-Position vom Interior ~y~" + interior.Name + "~s~ wurde gesetzt."); - InteriorManager.LoadInteriors(); - } - break; - } - } - - [Command("reloaddoors", "~m~Benutzung: ~s~/reloaddoors")] - public void CmdAdminReloaddoors(Client player) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - DoorManager.ReloadDoors(); - 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(Client player, string option1, 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; - } - - 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.ErrorMessage(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"); - } - - player.SendChatMessage("~m~Benutzung: ~s~/house [add / remove / price / type / reloadhouses]"); - } - - [Command("paydaydrop", "~m~Benutzung: ~s~/paydaydrop")] - public void CmdAdminPaydaydrop(Client player) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - foreach (var target in NAPI.Pools.GetAllPlayers().Select(c => c.GetUser())) - { - Economy.SetPaycheck(target.Client, target.Wage); - } - - ChatService.SendMessage(player, "~b~[ADMIN]~s~ Du hast ein Payday gedroppt."); - } - - [Command("setwage", "~m~Benutzung: ~s~/setwage [Name/Id] [Lohn]")] - public void CmdAdminSetWage(Client player, string nameOrId, int wage) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - Client target = ClientService.GetClientByNameOrId(nameOrId); - if (target == null || !target.IsLoggedIn()) - { - ChatService.PlayerNotFound(player); - return; - } - - using (var dbContext = new DatabaseContext()) - { - target.GetUser(dbContext).Wage = wage; - dbContext.SaveChanges(); - } - } - - #endregion - - #region ALevel1338 - [Command("whitelist", "~m~Benutzung: ~s~/whitelist [Add / Remove] [Socialclub Name]")] - public void CmdAdminWhitelist(Client player, string option, string scName) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.PROJEKTLEITUNG) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - option = option.ToLower(); - - if (option != "add" && option != "remove") - { - ChatService.SendMessage(player, "~m~Benutzung: ~s~/whitelist [Add / Remove] [Socialclub Name]"); - return; - } - - using (var dbContext = new DatabaseContext()) - { - if (option == "add") - { - if (dbContext.WhitelistEntries.Any(w => w.SocialClubName.ToLower() == scName.ToLower())) - { - ChatService.ErrorMessage(player, "Dieser Name ist schon auf der Whitelist"); - return; - } - - Whitelist whitelist = new Whitelist { SocialClubName = scName.ToLower() }; - dbContext.WhitelistEntries.Add(whitelist); - - ChatService.SendMessage(player, "~b~[ADMIN]~s~ ~y~" + scName + "~s~ wurde erfolgreich zur Whitelist hinzugefügt."); - } - else if (option == "remove") - { - if (!dbContext.WhitelistEntries.Any(w => w.SocialClubName.ToLower() == scName.ToLower())) - { - ChatService.ErrorMessage(player, "Dieser Name ist nicht auf der Whitelist"); - return; - } - - Whitelist whitelist = dbContext.WhitelistEntries.FirstOrDefault(w => w.SocialClubName.ToLower() == scName.ToLower()); - dbContext.WhitelistEntries.Remove(whitelist); - - ChatService.SendMessage(player, "~b~[ADMIN]~s~ ~y~" + scName + "~s~ wurde erfolgreich aus der Whitelist entfernt."); - } - dbContext.SaveChanges(); - } - } - - [Command("makeadmin", "~m~Benutzung: ~s~/makeadmin [Name] [Adminlevel]")] - public void CmdAdminSetadmin(Client player, string name, int rank) - { - if (!player.GetUser()?.IsAdmin(AdminLevel.PROJEKTLEITUNG) ?? true) - { - ChatService.NotAuthorized(player); - return; - } - - if (!Enum.IsDefined(typeof(AdminLevel), rank)) - { - ChatService.ErrorMessage(player, "Dieser Adminrang ist nicht definiert"); - return; - } - - Client target = ClientService.GetClientByNameOrId(name); - if (target == null || !target.IsLoggedIn()) - { - ChatService.PlayerNotFound(player); - return; - } - - using (var dbContext = new DatabaseContext()) - { - target.GetUser(dbContext).AdminLevel = (AdminLevel)rank; - dbContext.SaveChanges(); - } - ChatService.SendMessage(target, "Du wurdest durch " + player.Name + " auf Adminlevel " + target.GetUser().AdminLevel.GetName() + ":(" + rank + ") gesetzt."); - ChatService.SendMessage(player, "Du hast " + target.Name + " auf Adminlevel " + target.GetUser().AdminLevel.GetName() + ":(" + rank + ") gesetzt."); - - } - #endregion + if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + IItem iItem = InventoryManager.GetItemByName(item); + + if (iItem == null) + { + ChatService.SendMessage(player, "Dieses Essen existiert nicht."); + return; + } + + List itemList = player.GetUser().GetItems(); + UserItem eatItem = itemList.FirstOrDefault(i => i.ItemId == iItem.Id); + + if (eatItem == null) + { + ChatService.SendMessage(player, "Du hast dieses Item nicht"); + return; + } + + if (iItem is IUsableItem usableItemObj) + { + usableItemObj.Use(eatItem); + } } + + [Command("myvehicles")] + public void CmdAdminMyVehicles(Client player) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + ChatService.SendMessage(player, "Deine Fahrzeuge: "); + + int userID = player.GetUser().Id; + using (var loadData = new DatabaseContext()) + { + foreach (UserVehicle v in loadData.UserVehicles) + { + if (v.UserId == userID) + { + ChatService.SendMessage(player, "~b~" + v.Model); + } + } + } + } + + //TODO + [Command("fpay")] + public void FPay(Client player, string receiver, int amount) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + using (var getFaction = new DatabaseContext()) + { + Faction receiverUser = getFaction.Factions.FirstOrDefault(u => u.Name == receiver); + + if (receiverUser == null) + { + ChatService.ErrorMessage(player, "Diese Fraktion existiert nicht"); + return; + } + + BankManager.TransferMoney(player.GetUser(), receiverUser, amount, "/FPAY"); + } + } + + [Command("saveall")] + public void SaveAll(Client player) + { + SaveManager.SaveAllOnSave(); + } + + [Command("hash")] + public void CmdHash(Client player, string toHash) + { + string msg = $"{toHash} => {NAPI.Util.GetHashKey(toHash)}"; + NAPI.Util.ConsoleOutput(msg); + ChatService.SendMessage(player, msg); + } + + #endregion + #region Support + [Command("o", "~m~Benutzung: ~s~/o [Nachricht]", GreedyArg = true)] + public void CmdAdminO(Client player, string message) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + message = Regex.Replace(message, "(~[a-zA-Z]~)|(!{(.*)})", ""); + message = Regex.Replace(message, "#([0-9A-Fa-f]{6})", m => "!{" + m.Groups[0].Value + "}"); + + string publicMessage = "~b~(( " + player.GetUser().AdminLevel.GetName() + " " + player.Name + ": " + message + " ~b~))"; + ChatService.Broadcast(publicMessage); + } + + [Command("team", "~m~Benutzung: ~s~/team")] + public void CmdAdminTeam(Client player) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + ChatService.SendMessage(player, "Online Teammitglieder:"); + + List playerlist = NAPI.Pools.GetAllPlayers().FindAll(c => c.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? false).OrderByDescending(c => c.GetUser().AdminLevel).ToList(); + foreach (Client currentPlayer in playerlist) + { + ChatService.SendMessage(player, currentPlayer.GetUser().AdminLevel.GetName() + " | " + currentPlayer.Name); + } + } + + [Command("dimension", "~m~Benutzung: ~s~/dimension")] + public void CmdAdminDimension(Client player) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + ChatService.SendMessage(player, "Deine Dimension ist ~g~" + player.Dimension); + } + + [Command("to", "~m~Benutzung: ~s~/to [Name]")] + public void CmdAdminGoto(Client player, string name) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + Client target = ClientService.GetClientByNameOrId(name); + + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(player); + return; + } + //TODO: Als Supporter nur, wenn mit dem Ziel ein offenes Ticket besteht. Ansonsten kein Teleport + if (player.IsInVehicle && player.VehicleSeat == -1) + { + player.Vehicle.Position = target.Position; + NAPI.Entity.SetEntityVelocity(player.Vehicle, new Vector3()); + } + else player.Position = target.Position; + } + + [Command("position", "~m~Benutzung: ~s~/position")] + public void CmdAdminShowPos(Client player) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + ChatService.SendMessage(player, "Position: X Y Z: " + player.Position); + } + + [Command("gh", "~m~Benutzung: ~s~/gh [Name]")] + public void CmdAdminGethere(Client player, string name) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + Client target = ClientService.GetClientByNameOrId(name); + + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(player); + return; + } + + if (target.IsInVehicle && target.VehicleSeat == -1) + { + target.Vehicle.Position = player.Position; + NAPI.Entity.SetEntityVelocity(target.Vehicle, new Vector3()); + } + else target.Position = player.Position; + ChatService.SendMessage(target, "Du wurdest von " + player.Name + " teleportiert."); + } + + [Command("aw", "~m~Benutzung: ~s~/aw [Spieler] [Nachricht]", GreedyArg = true)] + public void CmdAdminMsg(Client player, string name, string msg) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + Client target = ClientService.GetClientByNameOrId(name); + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(player); + return; + } + + if (target == player) + { + ChatService.ErrorMessage(player, "Du kannst dir nicht selber zuflüstern"); + return; + } + + msg = Regex.Replace(msg, "(~[a-zA-Z]~)|(!{(.*)})", ""); + + ChatService.SendMessage(player, "~y~PM an " + target.Name + ": " + msg + " "); + string Message = "~y~PM von " + player.GetUser().AdminLevel.GetName() + " " + player.Name + ": " + msg + ""; + ChatService.SendMessage(target, Message); + } + + [Command("factionlist", "~m~Benutzung: ~s~/factionlist")] + public void CmdAdminFactionlist(Client player) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + using (var dbContext = new DatabaseContext()) + { + ChatService.SendMessage(player, "~m~__________ ~s~Fraktionen ~m~__________"); + foreach (Entities.Faction f in dbContext.Factions) + { + ChatService.SendMessage(player, f.Id.ToString().PadRight(3) + " | " + f.Name); + } + } + } + + [Command("businesslist", "~m~Benutzung: ~s~/businesslist")] + public void CmdAdminBusinessList(Client player) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + ChatService.SendMessage(player, "~m~__________ ~s~Businesses ~m~__________"); + foreach (BusinessBase b in BusinessManager.Businesses.OrderBy(b => b.Id)) + { + ChatService.SendMessage(player, b.Id.ToString().PadRight(3) + " | " + b.Name + (b is CarDealerBusinessBase ? " | Autohaus" : "")); + } + } + + [Command("joblist", "~m~Benutzung: ~s~/joblist")] + public void CmdAdminJoblist(Client player) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + ChatService.SendMessage(player, "~m~__________ ~s~Jobs ~m~__________"); + foreach (JobBase job in JobManager.GetJobs()) + { + ChatService.SendMessage(player, job.Id.ToString().PadRight(3) + " | " + job.Name); + } + } + #endregion + + #region ALevel1 + [Command("a", "~m~Benutzung: ~s~/a [Nachricht]", GreedyArg = true)] + public void CmdAdminA(Client player, string message) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + message = Regex.Replace(message, "(~[a-zA-Z]~)|(!{(.*)})", ""); + + ChatService.BroadcastAdmin("~r~[ADMINCHAT]~s~ " + player.GetUser().AdminLevel.GetName() + " " + player.Name + "~w~: " + message, AdminLevel.ADMIN); + } + + [Command("freeze", "~m~Benutzung: ~s~/freeze [Spieler]")] + public void CmdAdminFreeze(Client player, string targetname) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + Client target = ClientService.GetClientByNameOrId(targetname); + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(player); + return; + } + ChatService.SendMessage(player, "Du hast ~y~" + target.Name + " ~s~gefreezed."); + ChatService.SendMessage(target, "Du wurdest von ~y~" + player.Name + "~s~ gefreezed."); + target.Freeze(true); + } + + [Command("unfreeze", "~m~Benutzung: ~s~/unfreeze [Spieler]")] + public void CmdAdminUnfreeze(Client player, string targetname) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + Client target = ClientService.GetClientByNameOrId(targetname); + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(player); + return; + } + ChatService.SendMessage(player, "Du hast ~y~" + target.Name + " ~s~unfreezed."); + ChatService.SendMessage(target, "Du wurdest von ~y~" + player.Name + "~s~ unfreezed."); + target.Freeze(false); + } + + [Command("gotolist", "~m~Benutzung: ~s~/gotolist")] //TODO Als Browser anzeigeN?? + public void CmdAdminGotoList(Client player) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + var gotoString = ""; + using (var dbContext = new DatabaseContext()) + { + foreach (GotoPoint point in dbContext.GotoPoints) + { + if (point.Active) + { + gotoString += point.Description + ", "; + } + } + } + ChatService.SendMessage(player, gotoString); + } + + [Command("mark", "~m~Benutzung: ~s~/mark")] + public void CmdAdminMark(Client player) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + player.SetData("mark", player.Position); + player.SendNotification("~y~Mark ~s~gespeichert", true); + } + + [Command("gotomark", "~m~Benutzung: ~s~/gotomark")] + public void CmdAdminGotoMark(Client player) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + if (!player.HasData("mark")) + { + ChatService.ErrorMessage(player, "Du hast noch keine Markierung gesetzt. ~m~(/mark)"); + return; + } + + if (player.IsInVehicle && player.VehicleSeat == -1) player.Vehicle.Position = player.GetData("mark"); + else player.Position = player.GetData("mark"); + } + + [Command("clearchat", "~m~Benutzung: ~s~/clearchat")] + public void CmdAdminClearchat(Client player) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + for (int i = 0; i < 20; i++) + { + ChatService.Broadcast(""); + } + } + + [Command("up", "~m~Benutzung: ~s~/up [Wert]")] + public void CmdAdminUp(Client player, int value = 5) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + if (player.IsInVehicle) + { + player.Vehicle.Position = new Vector3(player.Vehicle.Position.X, player.Vehicle.Position.Y, player.Vehicle.Position.Z + value); + } + else + { + player.Position = new Vector3(player.Position.X, player.Position.Y, player.Position.Z + value); + } + } + + [Command("dn", "~m~Benutzung: ~s~/dn [Wert]")] + public void CmdAdminDn(Client player, int value = 5) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + if (player.IsInVehicle) + { + player.Vehicle.Position = new Vector3(player.Vehicle.Position.X, player.Vehicle.Position.Y, player.Vehicle.Position.Z - value); + } + else + { + player.Position = new Vector3(player.Position.X, player.Position.Y, player.Position.Z - value); + } + } + + [Command("rt", "~m~Benutzung: ~s~/rt [Wert]")] + public void CmdAdminRt(Client player, int value = 5) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + float playerHeading = player.Heading; + + if (playerHeading < 45 || playerHeading >= 315) + { + Vector3 playerPosition = new Vector3(player.Position.X + value, player.Position.Y, player.Position.Z); + if (player.IsInVehicle && player.VehicleSeat == -1) player.Vehicle.Position = playerPosition; + else player.Position = playerPosition; + } + else if (playerHeading < 315 && playerHeading >= 225) + { + Vector3 playerPosition = new Vector3(player.Position.X, player.Position.Y - value, player.Position.Z); + if (player.IsInVehicle && player.VehicleSeat == -1) player.Vehicle.Position = playerPosition; + else player.Position = playerPosition; + } + else if (playerHeading >= 135 && playerHeading < 225) + { + Vector3 playerPosition = new Vector3(player.Position.X - value, player.Position.Y, player.Position.Z); + if (player.IsInVehicle && player.VehicleSeat == -1) player.Vehicle.Position = playerPosition; + else player.Position = playerPosition; + } + else if (playerHeading >= 45 && playerHeading < 135) + { + Vector3 playerPosition = new Vector3(player.Position.X, player.Position.Y + value, player.Position.Z); + if (player.IsInVehicle && player.VehicleSeat == -1) player.Vehicle.Position = playerPosition; + else player.Position = playerPosition; + } + } + + [Command("lt", "~m~Benutzung: ~s~/lt [Wert]")] + public void CmdAdminLt(Client player, int value = 5) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + float playerHeading = player.Heading; + + if (playerHeading < 45 || playerHeading >= 315) + { + Vector3 playerPosition = new Vector3(player.Position.X - value, player.Position.Y, player.Position.Z); + if (player.IsInVehicle && player.VehicleSeat == -1) player.Vehicle.Position = playerPosition; + else player.Position = playerPosition; + } + else if (playerHeading < 315 && playerHeading >= 225) + { + Vector3 playerPosition = new Vector3(player.Position.X, player.Position.Y + value, player.Position.Z); + if (player.IsInVehicle && player.VehicleSeat == -1) player.Vehicle.Position = playerPosition; + else player.Position = playerPosition; + } + else if (playerHeading >= 135 && playerHeading < 225) + { + Vector3 playerPosition = new Vector3(player.Position.X + value, player.Position.Y, player.Position.Z); + if (player.IsInVehicle && player.VehicleSeat == -1) player.Vehicle.Position = playerPosition; + else player.Position = playerPosition; + } + else if (playerHeading >= 45 && playerHeading < 135) + { + Vector3 playerPosition = new Vector3(player.Position.X, player.Position.Y - value, player.Position.Z); + if (player.IsInVehicle && player.VehicleSeat == -1) player.Vehicle.Position = playerPosition; + else player.Position = playerPosition; + } + } + + [Command("setdimension", "~m~Benutzung: ~s~/setdimension [Spieler] [Dimension]")] + public void CmdAdminSetDimension(Client player, string targetname, uint dimension) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + Client target = ClientService.GetClientByNameOrId(targetname); + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(player); + return; + } + target.Dimension = dimension; + ChatService.SendMessage(target, "~s~Deine Dimension wurde auf ~g~" + dimension + "~s~ geändert."); + ChatService.SendMessage(player, "~s~Die Dimension von ~y~" + target.Name + " ~s~wurde auf ~g~" + dimension + "~s~ geändert."); + } + + [Command("kick", "~m~Benutzung: ~s~/kick [Player] [Grund]", GreedyArg = true)] + public void CmdAdminKick(Client player, string targetname, string reason) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + Client target = ClientService.GetClientByNameOrId(targetname); + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(player); + return; + } + + string targetPlayername = NAPI.Player.GetPlayerName(target); + string adminPlayername = NAPI.Player.GetPlayerName(player); + + ChatService.SendMessage(target, "~r~KICKINFO: ~w~Du wurdest von " + adminPlayername + " vom Server gekickt: " + reason); + target.Kick(); + ChatService.Broadcast("~y~INFO: ~w~" + targetPlayername + " wurde von " + player.GetUser().AdminLevel.GetName() + " " + adminPlayername + " gekickt: " + reason); + } + + [Command("ip", "~m~Benutzung: ~s~/ip [Spieler]")] + public void CmdAdminIp(Client player, string targetname) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + Client target = ClientService.GetClientByNameOrId(targetname); + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(player); + return; + } + ChatService.SendMessage(player, "IP von ~y~" + NAPI.Player.GetPlayerName(target) + ": ~g~" + target.Address); + } + + [Command("ban", "~m~Benutzung: ~s~/ban [User] [Zeit in Minuten(0 für Permanent)] [Grund] ", GreedyArg = true)] + public void CmdAdminBan(Client admin, string user, int mins, string reason) + { + if (!admin.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) + { + ChatService.NotAuthorized(admin); + return; + } + + Client target = ClientService.GetClientByNameOrId(user); + + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(admin); + return; + } + + reason = Regex.Replace(reason, "(~[a-zA-Z]~)|(!{(.*)})", ""); + + target.GetUser().BanPlayer(admin, reason, mins); + } + + [Command("unban", "~m~Benutzung: ~s~/unban [Name] ")] + public void CmdAdminUnban(Client admin, string userName) + { + if (!admin.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) + { + ChatService.NotAuthorized(admin); + return; + } + + User user; + + using (var dbContext = new DatabaseContext()) + { + user = dbContext.Users.FirstOrDefault(u => u.Name == userName); + if (user == null) + { + ChatService.ErrorMessage(admin, "Dieser Spieler existiert nicht"); + return; + } + + if (user.BanId == null) + { + ChatService.ErrorMessage(admin, "Dieser Spieler ist nicht gebannt"); + return; + } + + Ban ban = dbContext.Bans.FirstOrDefault(b => b.Id == user.BanId); + if (ban == null) + { + ChatService.ErrorMessage(admin, "Dieser Spieler ist nicht gebannt"); + return; + } + + if (ban.Applied == ban.UntilDateTime) + { + user.UnbanPlayer(); + } + else + { + int currentTimestamp = (int)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; + if (ban.UntilDateTime < currentTimestamp) + { + ChatService.ErrorMessage(admin, "Dieser Spieler ist nicht gebannt"); + return; + } + } + user.UnbanPlayer(); + } + + string message = "~b~[ADMIN] ~s~Der Spieler ~y~" + user.Name + " ~s~wurde von ~y~" + admin.Name + " ~s~entbannt."; + ChatService.BroadcastAdmin(message, AdminLevel.ADMIN); + } + + [Command("goto", "~m~Benutzung: ~s~/goto [Ort]")] + public void CmdAdminGotoPoint(Client player, string location) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + using (var dbContext = new DatabaseContext()) + { + GotoPoint p = dbContext.GotoPoints.FirstOrDefault(x => x.Description == location); + + if (p == null) + { + ChatService.ErrorMessage(player, "Dieser Goto-Punkt existiert nicht"); + return; + } + + if (player.IsInVehicle && player.VehicleSeat == -1) player.Vehicle.Position = new Vector3(p.X, p.Y, p.Z); + else player.Position = new Vector3(p.X, p.Y, p.Z); + + } + } + + [Command("spec", "~m~Benutzung: ~s~/spec [Player]")] + public void CmdAdminSpectate(Client player, string name) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + Client target = ClientService.GetClientByNameOrId(name); + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(player); + return; + } + if (target == player) + { + ChatService.ErrorMessage(player, "Du kannst dich nicht selber spectaten"); + return; + } + + bool spec = player.GetData("spec"); + + if (spec == false) + { + NAPI.Player.SetPlayerToSpectatePlayer(player, target); + player.SetData("spec", true); + } + else + { + NAPI.Player.UnspectatePlayer(player); + player.SetData("spec", false); + } + + } + + [Command("slap", "~m~Benutzung: ~s~/slap [Spieler] (Höhe)")] + public void CmdAdminSlap(Client player, string name, int wert = 5) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + Client target = ClientService.GetClientByNameOrId(name); + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(player); + return; + } + + Vector3 oldPos = target.Position; + + target.Position = new Vector3(oldPos.X, oldPos.Y, oldPos.Z + wert); + ChatService.SendMessage(player, "Du hast " + target.Name + " geslappt. Höhe: " + wert + ""); + } + + [Command("takeweapon", "~m~Benutzung: ~s~/takeweapon [Spieler]")] + public void CmdAdminTakeWeapon(Client player, string name) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + Client target = ClientService.GetClientByNameOrId(name); + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(player); + return; + } + target.RemoveAllWeapons(); + ChatService.SendMessage(target, "~b~Deine Waffen wurden dir von " + player.Name + "(Admin) abgenommen"); + ChatService.SendMessage(player, "~b~Dem Spieler " + target.Name + " wurden erfolgreich alle Waffen abgenommen "); + } + + [Command("tov", "~m~Benutzung: ~s~/tov [Fahrzeug ID]")] + public void CmdAdminTov(Client player, int vehid) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + Vehicle v = VehicleManager.GetVehicleFromId(vehid); + if (v == null) + { + ChatService.ErrorMessage(player, "Dieses Fahrzeug existiert nicht"); + return; + } + + player.Position = v.Position.Add(new Vector3(0, 0, 2)); + } + + [Command("ghv", "~m~Benutzung: ~s~/ghv [Fahrzeug ID]")] + public void CmdAdminGhv(Client player, int vehid) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + Vehicle v = VehicleManager.GetVehicleFromId(vehid); + if (v == null) + { + ChatService.ErrorMessage(player, "Dieses Fahrzeug existiert nicht"); + return; + } + + v.Position = player.Position; + player.Position = player.Position.Add(new Vector3(0, 0, 2)); + } + #endregion + #region ALevel2 + [Command("sethp", "~m~Benutzung: ~s~/sethp [Spieler] (Hp)")] + public void CmdAdminSetHp(Client player, string name, int hp = 100) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN2) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + Client target = ClientService.GetClientByNameOrId(name); + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(player); + return; + } + + target.Health = hp; + ChatService.SendMessage(target, "~b~Deine HP wurden von " + player.Name + " auf " + hp + " gesetzt."); + ChatService.SendMessage(player, "~b~Du hast die HP von " + target.Name + " auf " + hp + " gesetzt."); + } + + [Command("clothes", "~m~Benutzung: ~s~/clothes [Spieler] [Component ID] [Drawable] (Textur)")] + public void CmdAdminClothes(Client player, string name, int component, int drawable, int texture = 0) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN2) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + Client target = ClientService.GetClientByNameOrId(name); + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(player); + return; + } + + using (var dbContext = new DatabaseContext()) + { + User user = target.GetUser(dbContext); + bool duty = user.GetData("duty"); + CharacterCloth cloth = dbContext.CharacterClothes.Where(c => c.UserId == user.Id && c.SlotId == component && c.SlotType == 0 && c.Duty == duty).FirstOrDefault(); + if (cloth == null) + { + cloth = new CharacterCloth() + { + Duty = duty, + ClothId = drawable, + SlotId = component, + SlotType = 0, + Texture = texture, + UserId = user.Id, + }; + dbContext.CharacterClothes.Add(cloth); + } + else + { + cloth.ClothId = drawable; + cloth.Texture = texture; + } + dbContext.SaveChanges(); + target.SetClothes(component, drawable, texture); + } + } + + [Command("props", "~m~Benutzung: ~s~/props [Spieler] [Component ID] [Drawable] (Textur)")] + public void CmdAdminProps(Client player, string name, int slot, int component, int texture = 0) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN2) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + Client target = ClientService.GetClientByNameOrId(name); + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(player); + return; + } + + if (component == -1) + { + target.ClearAccessory(slot); + return; + } + target.SetAccessories(slot, component, texture); + } + + [Command("gotox", "~m~Benutzung: ~s~/gotox [X] [Y] [Z]")] + public void CmdAdminGotoxyz(Client player, float x, float y, float z) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN2) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + if (player.IsInVehicle && player.VehicleSeat == -1) player.Vehicle.Position = new Vector3(x, y, z); + else player.Position = new Vector3(x, y, z); + } + #endregion + #region ALevel3 + + [Command("veh", "~m~Benutzung: ~s~/veh [Fahrzeug] (Farbe 1) (Farbe 2)")] + public void CmdAdminVeh(Client player, string hash, int color1 = 111, int color2 = 111) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN3) ?? true) + //TODO: Bestimmte Autos nur ab Adminlevel 1337, "normale Fahrzeuge" schon ab Adminlevel 3. + { + ChatService.NotAuthorized(player); + return; + } + + if (player.IsInVehicle) // Man darf keine Autos erstellen, wenn man selbst in einem sitzt (verhindert Bugs) + { + ChatService.ErrorMessage(player, "Du sitzt momentan schon in einem Fahrzeug"); + return; + } + + if (!uint.TryParse(hash, out uint uHash)) + uHash = NAPI.Util.GetHashKey(hash); + + if (!VehicleManager.IsValidHash(uHash)) + { + ChatService.ErrorMessage(player, "Dieses Fahrzeug existiert nicht"); + return; + } + + Vehicle v = NAPI.Vehicle.CreateVehicle(uHash, player.Position, player.Rotation.Z, color1, color2, engine: false); + VehicleStreaming.SetEngineState(v, true); + VehicleStreaming.SetLockStatus(v, false); + player.SetIntoVehicle(v.Handle, -1); + } + + [Command("fv", "~m~Benutzung: ~s~/fv")] + public void CmdAdminFixveh(Client player) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN3) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + if (!player.IsInVehicle) + { + ChatService.ErrorMessage(player, "Du sitzt momentan nicht in einem Fahrzeug"); + return; + } + player.Vehicle.Repair(); + } + + [Command("vdestroy", "~m~Benutzung: ~s~/vdestroy (ID)")] + public void CmdAdminVdestroy(Client player, int vid = -1) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN3) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + Vehicle targetVeh; + + if (vid == -1) + { + if (!player.IsInVehicle) + { + ChatService.SendMessage(player, "~m~Benutzung: ~s~/vdestroy (ID)"); + return; + } + targetVeh = player.Vehicle; + } + else + { + targetVeh = VehicleManager.GetVehicleFromId(vid); + if (targetVeh == null) + { + ChatService.ErrorMessage(player, "Dieses Fahrzeug existiert nicht"); + return; + } + } + + ServerVehicle veh = VehicleManager.GetServerVehicleFromVehicle(targetVeh); + if (veh != null) + { + ChatService.ErrorMessage(player, "Dieses Fahrzeug wird von einem Server-System benutzt: ~m~" + veh.GetType().Name); + return; + } + + VehicleManager.DeleteVehicle(targetVeh); + targetVeh.Trailer?.Delete(); + } + + [Command("vlivery", "~m~Benutzung: ~s~/vlivery [Livery]")] + public void CmdAdminVlivery(Client player, int livery) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN3) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + if (!player.IsInVehicle) + { + ChatService.ErrorMessage(player, "Du sitzt momentan nicht in einem Fahrzeug"); + return; + } + + Vehicle playerVeh = player.Vehicle; + + playerVeh.Livery = livery; + } + + [Command("vcolor", "~m~Benutzung: ~s~/vcolor [Farb-ID1] [Farb-ID2]")] + public void CmdAdminColor(Client player, int color1, int color2) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN3) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + if (!player.IsInVehicle) + { + ChatService.ErrorMessage(player, "Du sitzt momentan in keinem Fahrzeug"); + return; + } + + player.Vehicle.PrimaryColor = color1; + player.Vehicle.SecondaryColor = color2; + ChatService.SendMessage(player, "Farb-ID1 " + color1 + ", Farb-ID2 " + color2 + ""); + } + + [Command("giveweapon", "~m~Benutzung: ~s~/giveweapon [Spieler] [Waffe] [Munition]")] + public void CmdAdminGiveweapon(Client player, string name, string hash, int ammo) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN3) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + if (ammo <= 0) + { + ChatService.ErrorMessage(player, "Es muss mindestens 1 Munition vergeben werden"); + return; + } + + hash = hash.ToLower(); + + Client target = ClientService.GetClientByNameOrId(name); + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(player); + return; + } + + if (!uint.TryParse(hash, out uint uHash)) + { + if (hash.Contains("mk2") && !hash.Contains("_mk2")) hash = hash.Replace("mk2", "_mk2"); + uHash = NAPI.Util.GetHashKey($"weapon_{hash}"); + } + + if (!WeaponManager.IsValidHash(uHash)) + { + ChatService.ErrorMessage(player, "Diese Waffe existiert nicht"); + return; + } + + target.GiveWeapon((WeaponHash)uHash, ammo); + ChatService.SendMessage(target, "~b~Du hast von " + player.Name + " eine/n " + hash + " mit einer Munition von " + ammo + " erhalten."); + ChatService.SendMessage(player, "~b~Du hast " + target.Name + " eine/n " + hash + " mit einer Munition von " + ammo + " gegeben."); + } + + [Command("arevive", "~m~Benutzung: ~s~/arevive [Spieler]")] + public void CmdAdminRevive(Client player, string name) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN3) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + Client target = ClientService.GetClientByNameOrId(name); + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(player); + return; + } + if (target.Health != 0) + { + ChatService.ErrorMessage(player, "Der Spieler ist nicht tot"); + return; + } + target.TriggerEvent("onPlayerRevived"); + target.SendNotification("Du wurdest von Admin ~y~" + player.Name + "~s~ wiederbelebt."); + target.SetData("isDead", false); + NAPI.Player.SpawnPlayer(target, target.Position); + target.Health = 100; + + MedicTask task = Medic.ReviveTasks.FirstOrDefault(t => t.Victim == target.Name); + Medic.RemoveTaskFromList(task); + } + + [Command("setarmor", "~m~Benutzung: ~s~/setarmor [Spieler] (Armor)")] + public void CmdAdminSetArmor(Client player, string name, int armor = 100) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN3) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + Client target = ClientService.GetClientByNameOrId(name); + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(player); + return; + } + + target.Armor = armor; + ChatService.SendMessage(target, "~b~Deine Rüstung wurde von " + player.Name + " auf " + armor + " gesetzt."); + ChatService.SendMessage(player, "~b~Du hast die Rüstung von " + target.Name + " auf " + armor + " gesetzt."); + } + #endregion + #region ALevel1337 + [Command("sethandmoney", "~m~Benutzung: ~s~/sethandmoney [Target] [Geld]")] + public void CmdAdminSetUserHandMoney(Client admin, string targetname, int amount) + { + if (!admin.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) + { + ChatService.NotAuthorized(admin); + return; + } + + Client target = ClientService.GetClientByNameOrId(targetname); + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(target); + return; + } + using (var context = new DatabaseContext()) + { + var user = target.GetUser(context); + user.Handmoney = amount; + context.SaveChanges(); + } + target.TriggerEvent("SERVER:SET_HANDMONEY", amount); + } + + [Command("givehandmoney", "~m~Benutzung: ~s~/givehandmoney [Target] [Geld]")] + public void CmdAdminGiveUserHandMoney(Client admin, string targetname, int amount) + { + if (!admin.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) + { + ChatService.NotAuthorized(admin); + return; + } + + Client target = ClientService.GetClientByNameOrId(targetname); + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(target); + return; + } + using (var context = new DatabaseContext()) + { + var user = target.GetUser(context); + user.Handmoney += amount; + context.SaveChanges(); + target.TriggerEvent("SERVER:SET_HANDMONEY", user.Handmoney); + } + } + + [Command("quicksavemode", "~m~Benutzung: ~s~/quicksavemode [Modus]: ~g~blip, ~g~atm")] + public void CmdAdminSetQuickSaveMode(Client player, string mode) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + player.SetData("quicksavemode", mode.ToLower()); + } + + [Command("giveitem", "~m~Benutzung: ~s~/giveitem [Target] [Item ID] [Anzahl]")] + public void CmdAdminGiveItem(Client player, string targetname, int itemId, int amount) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + Client target = ClientService.GetClientByNameOrId(targetname); + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(player); + return; + } + + var invWeight = 0; + + using (var context = new DatabaseContext()) + { + List userItems = context.UserItems.ToList().FindAll(i => i.UserId == target.GetUser().Id); + foreach (var uItem in userItems) + { + invWeight += uItem.Amount * InventoryManager.GetItemById(uItem.ItemId).Gewicht; + } + } + + if (invWeight + (amount * InventoryManager.GetItemById(itemId).Gewicht) > 40000) + { + ChatService.SendMessage(player, "~y~" + target.Name + " ~s~hat nicht mehr genug Platz in seinem Inventar."); + } + else + { + UserItem item = new UserItem() { ItemId = itemId, UserId = target.GetUser().Id, Amount = amount }; + InventoryManager.AddItemToInventory(target, item); + } + } + + [Command("inventory", "~m~Benutzung: ~s~/inventory [Spieler]")] + public void CmdAdminGiveItem(Client player, string targetname) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + Client target = ClientService.GetClientByNameOrId(targetname); + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(player); + return; + } + + var user = target.GetUser(); + + InventoryManager.GetUserItemsAsAdmin(player, user); + } + + [Command("editmode", "~m~Benutzung: ~s~/editmode")] + public void CmdAdminToggleEditMode(Client player) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + if (player.GetData("editmode") == false) + { + player.SetData("editmode", true); + player.SendNotification("Edit-Mode ~g~aktiviert"); + player.TriggerEvent("toggleEditMode", true); + } + else + { + player.SetData("editmode", false); + player.SendNotification("Edit-Mode ~r~deaktiviert"); + player.TriggerEvent("toggleEditMode", false); + } + + } + + [Command("setbliptemplate", "~m~Benutzung: ~s~/setbliptemplate [byte COLOR] [byte ALPHA] [bool SHORTRANGE] [uint SPRITE] [float SCALE] [string NAME]", GreedyArg = true)] + public void CmdAdminSetBlipTemplate(Client player, byte color, byte alpha, bool shortRange, uint sprite, float scale, string name) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + TempBlip newTempBlip = new TempBlip() + { + Color = color, + Name = name, + Transparency = alpha, + ShortRange = shortRange, + Sprite = sprite, + Scale = scale, + }; + + NAPI.Data.SetWorldData("blipTemplate", newTempBlip); + } + + [Command("vmod", "~m~Benutzung: ~s~/vmod [Slot] [Mod ID]")] + public void CmdAdminVmod(Client player, int slot, int mod) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + if (!player.IsInVehicle) + { + ChatService.ErrorMessage(player, "Du sitzt momentan nicht in einem Fahrzeug"); + return; + } + + player.Vehicle.SetMod(slot, mod); + } + + [Command("aneon", "~m~Benutzung: ~s~/aneon [R][G][B]")] + public void CmdAdminNeon(Client player, int r, int g, int b) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + if (!player.IsInVehicle) + { + ChatService.ErrorMessage(player, "Du sitzt momentan nicht in einem Fahrzeug"); + return; + } + + Vehicle veh = NAPI.Player.GetPlayerVehicle(player); + NAPI.Vehicle.SetVehicleNeonColor(veh, r, g, b); + NAPI.Vehicle.SetVehicleNeonState(veh, true); + } + + [Command("vehsmoke", "~m~Benutzung: ~s~/vehsmoke [R][G][B]")] + public void CmdAdminVehSmoke(Client player, int r, int g, int b) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + if (!player.IsInVehicle) + { + ChatService.ErrorMessage(player, "Du sitzt momentan nicht in einem Fahrzeug"); + return; + } + + Vehicle veh = NAPI.Player.GetPlayerVehicle(player); + NAPI.Vehicle.SetVehicleTyreSmokeColor(veh, new Color(r, g, b)); + } + + [Command("ipl", "~m~Benutzung: ~s~/ipl [Load / Remove] [Name]")] + public void CmdAdminIpl(Client player, string option, string name) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + option = option.ToLower(); + + if (option == "load") + { + NAPI.World.RequestIpl(name); + ChatService.SendMessage(player, "~g~Das IPL ~s~" + name + " ~g~wurde erfolgreich geladen"); + } + else if (option == "remove") + { + NAPI.World.RemoveIpl(name); + ChatService.SendMessage(player, "~g~Das IPL ~s~" + name + " ~g~wurde erfolgreich entladen"); + } + else + { + ChatService.SendMessage(player, "~m~Benutzung: ~s~/ipl [Load / Remove] [Name]"); + } + } + + [Command("rsethp", "~m~Benutzung: ~s~/rsethp [Radius] (Leben)")] + public void CmdAdminRangeSetHP(Client player, float radius, int hp = 100) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + var peopleInRange = NAPI.Player.GetPlayersInRadiusOfPlayer(radius, player); + + foreach (var managedClient in peopleInRange) + { + if (!managedClient.IsLoggedIn()) return; + managedClient.Health = hp; + ChatService.SendMessage(managedClient, "~b~Admin " + player.Name + " hat im Radius von " + radius + " die HP auf " + hp + " gesetzt."); + } + ChatService.SendMessage(player, "~b~Das Leben von " + peopleInRange.Count + " Spielern wurde auf " + hp + " gesetzt."); + } + + [Command("freekh", "~m~Benutzung: ~s~/freekh (Radius)")] + public void CmdAdminFreekh(Client player, float radius = -1) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + var peopleInRange = radius == -1 ? NAPI.Pools.GetAllPlayers() : NAPI.Player.GetPlayersInRadiusOfPlayer(radius, player); + int playerRevided = 0; + + string toPlayerChat = "~b~Admin " + player.Name + " hat alle Spieler wiederbelebt"; + string toPlayerNotification = "Du wurdest von Admin ~y~" + player.Name + "~s~ wiederbelebt."; + + foreach (var managedClient in peopleInRange) + { + if (!managedClient.IsLoggedIn()) return; + if (!managedClient.HasData("isDead") || managedClient.GetData("isDead") == false) continue; + playerRevided++; + + managedClient.TriggerEvent("onPlayerRevived"); + managedClient.SetData("isDead", false); + managedClient.SendNotification(toPlayerNotification); + ChatService.SendMessage(managedClient, toPlayerChat); + + NAPI.Player.SpawnPlayer(managedClient, managedClient.Position); + managedClient.Health = 100; + + MedicTask task = Medic.ReviveTasks.FirstOrDefault(t => t.Victim == managedClient.Name); + Medic.RemoveTaskFromList(task); + } + + ChatService.SendMessage(player, "~b~Du hast " + playerRevided + " Spieler wiederbelebt."); + } + + [Command("rsetarmor", "~m~Benutzung: ~s~/rsetarmor [Radius] (Armor)")] + public void CmdAdminRangeSetArmor(Client player, float radius, int Armor = 100) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + var peopleInRange = NAPI.Player.GetPlayersInRadiusOfPlayer(radius, player); + + foreach (var managedClient in peopleInRange) + { + if (!managedClient.IsLoggedIn()) return; + managedClient.Armor = Armor; + ChatService.SendMessage(managedClient, "~b~Admin " + player.Name + " hat im Radius von " + radius + " die Rüstung auf " + Armor + " gesetzt."); + } + ChatService.SendMessage(player, "~b~Die Rüstung von " + peopleInRange.Count + " Spielern wurde auf " + Armor + " gesetzt."); + } + + [Command("rgiveweapon", "~m~Benutzung: ~s~/rgiveweapon [Radius] [Waffe] [Munition]")] + public void CmdAdminRangeGiveWeapon(Client player, float radius, string weapon, int munition) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + weapon = weapon.ToLower(); + + if (!uint.TryParse(weapon, out uint uHash)) + { + if (weapon.Contains("mk2") && !weapon.Contains("_mk2")) weapon = weapon.Replace("mk2", "_mk2"); + uHash = NAPI.Util.GetHashKey($"weapon_{weapon}"); + } + + if (!WeaponManager.IsValidHash(uHash)) + { + ChatService.ErrorMessage(player, "Diese Waffe existiert nicht"); + return; + } + + WeaponHash weaponHash = (WeaponHash)uHash; + + var peopleInRange = NAPI.Player.GetPlayersInRadiusOfPlayer(radius, player); + + foreach (var managedClient in peopleInRange) + { + if (!managedClient.IsLoggedIn()) return; + managedClient.GiveWeapon(weaponHash, munition); + ChatService.SendMessage(managedClient, "~b~Admin " + player.Name + " hat im Radius von " + radius + " eine/n " + weapon + " mit " + munition + " Munition vergeben."); + } + ChatService.SendMessage(player, "~b~Du hast " + peopleInRange.Count + " Spielern eine " + weapon + " mit " + munition + " Munition gegeben"); + } + + [Command("time", "~m~Benutzung: ~s~/time [Stunde] (Minuten) (Sekunden)")] + public void CmdAdminTime(Client player, int hour, int min = 0, int sec = 0) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + if (hour > 23 || min > 59 || sec > 59) + { + ChatService.ErrorMessage(player, "Es wurde eine ungültige Zeit eingegeben"); + return; + } + + if (hour == -1) + { + ChatService.SendMessage(player, "Es wird nun wieder die Echtzeit genutzt."); + TimeManager.StartTimeManager(); + return; + } + + string broadcastMsg = $"Serverzeit wurde auf {hour:D2}:{min:D2}:{sec:D2} gesetzt!"; + NAPI.Notification.SendNotificationToAll(broadcastMsg); + TimeManager.PauseTimeManager(); + NAPI.World.SetTime(hour, min, sec); + return; + + } + + [Command("ainvite", "~m~Benutzung: ~s~/ainvite [Name] [Fraktion]")] + public void CmdAdminAinvite(Client player, string name, int faction) + { + 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; + } + + using (var dbContext = new DatabaseContext()) + { + Entities.Faction f = dbContext.Factions.FirstOrDefault(x => x.Id == faction); + if (f == null && faction != 0) + { + ChatService.ErrorMessage(player, "Diese Fraktion existiert nicht (Liste: ~m~/factionlist~s~)"); + return; + } + + Entities.User u = target.GetUser(dbContext); + + if (faction != 0) + { + u.FactionId = f.Id; + u.FactionRankId = dbContext.FactionRanks. + OrderBy(x => x.Order) + .FirstOrDefault(r => r.FactionId == f.Id)?.Id ?? null; + + ChatService.SendMessage(player, "~b~[ADMIN]~s~ Du hast hast den Spieler ~y~" + target.Name + "~s~ administrativ in die Fraktion ~o~" + f.Name + "~s~ eingeladen."); + ChatService.SendMessage(target, "~b~[ADMIN]~s~ Du wurdest von ~y~" + player.Name + "~s~ administrativ in die Fraktion ~o~" + f.Name + "~s~ eingeladen."); + } + else + { + u.FactionId = null; + u.FactionRankId = null; + ChatService.SendMessage(player, "~b~[ADMIN]~s~ Du hast hast den Spieler ~y~" + target.Name + "~s~ administrativ aus seiner Fraktion geworfen."); + ChatService.SendMessage(target, "~b~[ADMIN]~s~ Du wurdest von ~y~" + player.Name + "~s~ administrativ aus deiner Fraktion geworfen."); + } + + u.FactionLeader = false; + + dbContext.SaveChanges(); + } + } + + [Command("makeleader", "~m~Benutzung: ~s~/makeleader [Name] [Fraktion]")] + public void CmdAdminMakeleader(Client player, string name, int faction) + { + 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; + } + + using (var dbContext = new DatabaseContext()) + { + Entities.Faction f = dbContext.Factions.FirstOrDefault(x => x.Id == faction); + if (f == null) + { + ChatService.ErrorMessage(player, "Diese Fraktion existiert nicht (Liste: ~m~/factionlist~s~)"); + return; + } + + Entities.User u = target.GetUser(dbContext); + + u.FactionId = f.Id; + u.FactionRankId = dbContext.FactionRanks. + OrderByDescending(x => x.Order) + .FirstOrDefault(r => r.FactionId == f.Id)?.Id ?? null; + u.FactionLeader = true; + + ChatService.SendMessage(player, "~b~[ADMIN]~s~ Du hast hast den Spieler ~y~" + target.Name + "~s~ zum Leader der Fraktion ~o~" + f.Name + "~s~ ernannt."); + ChatService.SendMessage(target, "~b~[ADMIN]~s~ Du wurdest von ~y~" + player.Name + "~s~ zum Leader der Fraktion ~o~" + f.Name + "~s~ ernannt."); + + dbContext.SaveChanges(); + } + } + + [Command("save", "~m~Benutzung: ~s~/save [Typ = ~g~Blip~s~, ~g~Goto (X)~s~, ~r~Marker~s~, ~r~Ped~s~, ~r~Pickup~s~, ~r~TextLabel~s~, ~g~Vehicle~s~, ~g~FVehicle~s~, ~g~SVehicle (X)~s~, ~g~JVehicle (X)~s~] (Weitere Angaben) = (X)")] + public void CmdAdminSave(Client player, string typ, string option1 = null, string option2 = null) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + switch (typ.ToLower()) + { + case "blip": + player.TriggerEvent("saveBlip"); + break; + case "goto": + if (option1 == null) + { + ChatService.SendMessage(player, "Für Goto musst du einen dritten Parameter angeben. Beispiel: Ort des Goto-Punktes."); + return; + } + else + { + using (var dbContext = new DatabaseContext()) + { + GotoPoint p = dbContext.GotoPoints.FirstOrDefault(x => x.Description == option1); + if (p == null) + { + SaveManager.SaveGotoPoint(player, option1); + player.SendNotification("Goto-Punkt ~g~" + option1 + "~s~ gespeichert.", true); + } + else + { + ChatService.SendMessage(player, "Einen Goto-Punkt mit dieser Bezeichnung gibt es schon!"); + } + } + + } + + break; + case "vehicle": + if (player.IsInVehicle) + { + Vehicle vehicle = player.Vehicle; + int playerSeat = player.VehicleSeat; + vehicle = SaveManager.SaveVehicleData(vehicle, (VehicleHash)vehicle.Model, vehicle.Position, vehicle.Heading, vehicle.NumberPlate, + Convert.ToByte(vehicle.PrimaryColor), Convert.ToByte(vehicle.SecondaryColor), vehicle.Locked); + player.SendNotification("Fahrzeug ~g~" + vehicle.DisplayName + "~s~ gespeichert.", true); + player.SetIntoVehicle(vehicle, playerSeat); + } + else ChatService.SendMessage(player, "~m~Du sitzt in keinem Fahrzeug!"); + break; + case "fvehicle": + if (player.IsInVehicle) + { + if (player.GetUser().Faction == null) + { + ChatService.SendMessage(player, "~m~Du bist in keiner Fraktion! Invite dich erst mit ~y~/ainvite"); + return; + } + else + { + Vehicle vehicle = player.Vehicle; + int playerSeat = player.VehicleSeat; + vehicle = SaveManager.SaveFactionVehicleData(vehicle, (VehicleHash)vehicle.Model, vehicle.Position, vehicle.Heading, vehicle.NumberPlate, + vehicle.PrimaryColor, vehicle.SecondaryColor, vehicle.Locked, vehicle.EngineStatus, player.GetUser().FactionId.Value); + player.SendNotification("Fraktionsfahrzeug ~g~" + vehicle.DisplayName + "~s~ gespeichert.", true); + player.SetIntoVehicle(vehicle, playerSeat); + } + } + else ChatService.SendMessage(player, "~m~Du sitzt in keinem Fahrzeug!"); + break; + case "jvehicle": + if (player.IsInVehicle) + { + if (option1 == null) + { + ChatService.ErrorMessage(player, "Du musst eine JobID als Parameter angeben"); + return; + } + else + { + if (!int.TryParse(option1, out int jobId)) + { + ChatService.ErrorMessage(player, "Du musst eine gültige Zahl als JobID angeben"); + return; + } + + Vehicle vehicle = player.Vehicle; + vehicle = SaveManager.SaveJobVehicleData(vehicle, (VehicleHash)vehicle.Model, vehicle.Position, vehicle.Heading, vehicle.NumberPlate, + vehicle.PrimaryColor, vehicle.SecondaryColor, vehicle.Locked, vehicle.EngineStatus, jobId); + player.SendNotification("Jobfahrzeug ~g~" + vehicle.DisplayName + "~s~ gespeichert.", true); + player.SetIntoVehicle(vehicle, -1); + } + } + else ChatService.SendMessage(player, "~m~Du sitzt in keinem Fahrzeug!"); + break; + case "svehicle": + if (player.IsInVehicle) + { + if (option1 == null || option2 == null) + { + ChatService.SendMessage(player, "~m~Benutzung: ~s~/save SVehicle [Carshop Business ID] [Preis]"); + return; + } + + if (!int.TryParse(option1, out int businessId) || !int.TryParse(option2, out int price)) + { + ChatService.SendMessage(player, "~m~Benutzung: ~s~/save SVehicle [Carshop Business ID] [Preis]"); + return; + } + + BusinessBase business = BusinessManager.GetBusiness(businessId); + if (business == null) + { + ChatService.ErrorMessage(player, "Dieses Business existiert nicht"); + return; + } + + if (!(business is CarDealerBusinessBase)) + { + ChatService.ErrorMessage(player, "Dieses Business ist kein Fahrzeug-Business"); + return; + } + + Vehicle vehicle = player.Vehicle; + int playerSeat = player.VehicleSeat; + vehicle = SaveManager.SaveShopVehicleData(vehicle, (VehicleHash)vehicle.Model, vehicle.DisplayName, vehicle.Position, vehicle.Heading, vehicle.NumberPlate, + Convert.ToByte(vehicle.PrimaryColor), Convert.ToByte(vehicle.SecondaryColor), business, price); + player.SendNotification("Shopfahrzeug ~g~" + vehicle.DisplayName + "~s~ gespeichert.", true); + Vector3 oldPos = player.Position; + player.Position = new Vector3(oldPos.X, oldPos.Y, oldPos.Z + 2.5); + } + else ChatService.SendMessage(player, "~m~Du sitzt in keinem Fahrzeug!"); + break; + + } + } + + [Command("remove", "~m~Benutzung: ~s~/remove [Vehicle, Goto] [Option]")] + public void CmdAdminRemove(Client player, string type, string option = "") + { + if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + switch (type.ToLower()) + { + case "vehicle": + if (!player.IsInVehicle) + { + ChatService.SendMessage(player, "~m~Du sitzt in keinem Fahrzeug!"); + return; + } + + ServerVehicle veh = player.Vehicle.GetServerVehicle(); + if (veh == null) + { + ChatService.ErrorMessage(player, "Dieses Fahrzeug wird nicht von einem Server-System genutzt"); + return; + } + + if (option.ToLower() != "yes") + { + ChatService.SendMessage(player, "Bist du sicher, dass du folgendes Fahrzeug löschen willst: ~m~" + veh.ToString() + " ~s~?"); + ChatService.SendMessage(player, "Falls ~g~Ja~s~, nutze ~y~/remove vehicle yes"); + return; + } + + using (var dbContext = new DatabaseContext()) + { + VehicleManager.DeleteVehicle(player.Vehicle); + dbContext.ServerVehicles.Remove(veh); + + dbContext.SaveChanges(); + } + break; + + case "goto": + if (option == "") + { + ChatService.SendMessage(player, "~m~Benutzung: ~s~/remove [Goto] [Punkt]"); + return; + } + if (!player.GetUser()?.IsAdmin(AdminLevel.PROJEKTLEITUNG) ?? true) //1338 + { + ChatService.NotAuthorized(player); + return; + } + using (var dbContext = new DatabaseContext()) + { + GotoPoint p = dbContext.GotoPoints.FirstOrDefault(x => x.Description == option); + if (p == null) + { + ChatService.ErrorMessage(player, "Dieser Goto-Punkt existiert nicht"); + return; + } + + dbContext.GotoPoints.Remove(p); + dbContext.SaveChanges(); + + player.SendNotification("Der Goto-Punkt ~r~" + p.Description + "~s~ wurde erfolgreich gelöscht."); + } + break; + } + } + + #region loadCommand + [Command("load", "~m~Benutzung: ~s~/load [Typ = OnlineBunkers, ArcadiusBusinessCentre, MazeBankBuilding, LomBank, MazeBankWest, ClubWareHouse, SpecialLocations, GRHYacht, DHYacht, PYacht, AircraftCarrier, BridgeTC, BridgeTN, NorthYankton, ONeilsFarmB, ONeilsFarm, Morgue")] + public void CmdAdminloadlocation(Client player, string typ) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + switch (typ) + { + case "OnlineBunkers": + NAPI.World.RequestIpl("gr_case10_bunkerclosed"); + NAPI.World.RequestIpl("gr_case9_bunkerclosed"); + NAPI.World.RequestIpl("gr_case3_bunkerclosed"); + NAPI.World.RequestIpl("gr_case0_bunkerclosed"); + NAPI.World.RequestIpl("gr_case1_bunkerclosed"); + NAPI.World.RequestIpl("gr_case2_bunkerclosed"); + NAPI.World.RequestIpl("gr_case5_bunkerclosed"); + NAPI.World.RequestIpl("gr_case7_bunkerclosed"); + NAPI.World.RequestIpl("gr_case11_bunkerclosed"); + NAPI.World.RequestIpl("gr_case6_bunkerclosed"); + NAPI.World.RequestIpl("gr_case11_bunkerclosed"); + NAPI.World.RequestIpl("gr_case6_bunkerclosed"); + NAPI.World.RequestIpl("gr_case4_bunkerclosed"); + ChatService.SendMessage(player, "~y~ Online Bunkers~s~ erfolgreich geladen!"); + break; + case "ArcadiusBusinessCentre": + NAPI.World.RequestIpl("ex_dt1_02_office_02b"); + NAPI.World.RequestIpl("ex_dt1_02_office_02c"); + NAPI.World.RequestIpl("ex_dt1_02_office_02a"); + NAPI.World.RequestIpl("ex_dt1_02_office_01a"); + NAPI.World.RequestIpl("ex_dt1_02_office_01b"); + NAPI.World.RequestIpl("ex_dt1_02_office_01c"); + NAPI.World.RequestIpl("ex_dt1_02_office_03a"); + NAPI.World.RequestIpl("ex_dt1_02_office_03b"); + NAPI.World.RequestIpl("ex_dt1_02_office_03c"); + NAPI.World.RequestIpl("imp_dt1_02_cargarage_a"); + NAPI.World.RequestIpl("imp_dt1_02_cargarage_b"); + NAPI.World.RequestIpl("imp_dt1_02_cargarage_c"); + NAPI.World.RequestIpl("imp_dt1_02_modgarage"); + ChatService.SendMessage(player, "~y~ Arcadius Business Centre~s~ erfolgreich geladen!"); + break; + case "MazeBankBuilding": + NAPI.World.RequestIpl("ex_dt1_11_office_02b"); + NAPI.World.RequestIpl("ex_dt1_11_office_02c"); + NAPI.World.RequestIpl("ex_dt1_11_office_02a"); + NAPI.World.RequestIpl("ex_dt1_11_office_01a"); + NAPI.World.RequestIpl("ex_dt1_11_office_01b"); + NAPI.World.RequestIpl("ex_dt1_11_office_01c"); + NAPI.World.RequestIpl("ex_dt1_11_office_03a"); + NAPI.World.RequestIpl("ex_dt1_11_office_03b"); + NAPI.World.RequestIpl("ex_dt1_11_office_03c"); + NAPI.World.RequestIpl("imp_dt1_11_cargarage_a"); + NAPI.World.RequestIpl("imp_dt1_11_cargarage_b"); + NAPI.World.RequestIpl("imp_dt1_11_cargarage_c"); + NAPI.World.RequestIpl("imp_dt1_11_modgarage"); + ChatService.SendMessage(player, "~y~ Maze Bank Building~s~ erfolgreich geladen!"); + break; + case "LomBank": + NAPI.World.RequestIpl("ex_sm_13_office_02b"); + NAPI.World.RequestIpl("ex_sm_13_office_02c"); + NAPI.World.RequestIpl("ex_sm_13_office_02a"); + NAPI.World.RequestIpl("ex_sm_13_office_01a"); + NAPI.World.RequestIpl("ex_sm_13_office_01b"); + NAPI.World.RequestIpl("ex_sm_13_office_01c"); + NAPI.World.RequestIpl("ex_sm_13_office_03a"); + NAPI.World.RequestIpl("ex_sm_13_office_03b"); + NAPI.World.RequestIpl("ex_sm_13_office_03c"); + NAPI.World.RequestIpl("imp_sm_13_cargarage_a"); + NAPI.World.RequestIpl("imp_sm_13_cargarage_b"); + NAPI.World.RequestIpl("imp_sm_13_cargarage_c"); + NAPI.World.RequestIpl("imp_sm_13_modgarage"); + ChatService.SendMessage(player, "~y~Lom Bank~s~ erfolgreich geladen!"); + break; + case "MazeBankWest": + NAPI.World.RequestIpl("ex_sm_15_office_02b"); + NAPI.World.RequestIpl("ex_sm_15_office_02c"); + NAPI.World.RequestIpl("ex_sm_15_office_02a"); + NAPI.World.RequestIpl("ex_sm_15_office_01a"); + NAPI.World.RequestIpl("ex_sm_15_office_01b"); + NAPI.World.RequestIpl("ex_sm_15_office_01c"); + NAPI.World.RequestIpl("ex_sm_15_office_03a"); + NAPI.World.RequestIpl("ex_sm_15_office_03b"); + NAPI.World.RequestIpl("ex_sm_15_office_03c"); + NAPI.World.RequestIpl("imp_sm_15_cargarage_a"); + NAPI.World.RequestIpl("imp_sm_15_cargarage_b"); + NAPI.World.RequestIpl("imp_sm_15_cargarage_c"); + NAPI.World.RequestIpl("imp_sm_15_modgarage"); + ChatService.SendMessage(player, "~y~Maze Bank West~s~ erfolgreich geladen!"); + break; + case "ClubWareHouse": + NAPI.World.RequestIpl("bkr_biker_interior_placement_interior_0_biker_dlc_int_01_milo"); + NAPI.World.RequestIpl("bkr_biker_interior_placement_interior_1_biker_dlc_int_02_milo"); + NAPI.World.RequestIpl("bkr_biker_interior_placement_interior_2_biker_dlc_int_ware01_milo"); + NAPI.World.RequestIpl("bkr_biker_interior_placement_interior_3_biker_dlc_int_ware02_milo"); + NAPI.World.RequestIpl("bkr_biker_interior_placement_interior_4_biker_dlc_int_ware03_milo"); + NAPI.World.RequestIpl("bkr_biker_interior_placement_interior_5_biker_dlc_int_ware04_milo"); + NAPI.World.RequestIpl("bkr_biker_interior_placement_interior_6_biker_dlc_int_ware05_milo"); + NAPI.World.RequestIpl("ex_exec_warehouse_placement_interior_1_int_warehouse_s_dlc_milo"); + NAPI.World.RequestIpl("ex_exec_warehouse_placement_interior_0_int_warehouse_m_dlc_milo"); + NAPI.World.RequestIpl("ex_exec_warehouse_placement_interior_2_int_warehouse_l_dlc_milo"); + NAPI.World.RequestIpl("imp_impexp_interior_placement_interior_1_impexp_intwaremed_milo_"); + NAPI.World.RequestIpl("bkr_bi_hw1_13_int"); + ChatService.SendMessage(player, "~y~Clubs & Warehouses~s~ erfolgreich geladen!"); + break; + case "SpecialLocations": + NAPI.World.RequestIpl("cargoship"); + NAPI.World.RequestIpl("sunkcargoship"); + NAPI.World.RequestIpl("SUNK_SHIP_FIRE"); + NAPI.World.RequestIpl("redCarpet"); + NAPI.World.RequestIpl("DES_StiltHouse_imapend"); + NAPI.World.RequestIpl("DES_stilthouse_rebuild"); + NAPI.World.RequestIpl("FINBANK"); + NAPI.World.RequestIpl("TrevorsMP"); + NAPI.World.RequestIpl("TrevorsTrailerTidy"); + NAPI.World.RequestIpl("SP1_10_real_interior"); + NAPI.World.RequestIpl("refit_unload"); + NAPI.World.RequestIpl("post_hiest_unload"); + NAPI.World.RequestIpl("FIBlobby"); + ChatService.SendMessage(player, "~y~Special Locations~s~ erfolgreich geladen!"); + break; + case "GRHYacht": + NAPI.World.RequestIpl("gr_heist_yacht2"); + NAPI.World.RequestIpl("gr_heist_yacht2_bar"); + NAPI.World.RequestIpl("gr_heist_yacht2_bedrm"); + NAPI.World.RequestIpl("gr_heist_yacht2_bridge"); + NAPI.World.RequestIpl("gr_heist_yacht2_enginrm"); + NAPI.World.RequestIpl("gr_heist_yacht2_lounge"); + ChatService.SendMessage(player, "~y~Gunrunning heist Yacht~s~ erfolgreich geladen!"); + break; + case "DHYacht": + NAPI.World.RequestIpl("hei_yacht_heist"); + NAPI.World.RequestIpl("hei_yacht_heist_enginrm"); + NAPI.World.RequestIpl("hei_yacht_heist_Lounge"); + NAPI.World.RequestIpl("hei_yacht_heist_Bridge"); + NAPI.World.RequestIpl("hei_yacht_heist_Bar"); + NAPI.World.RequestIpl("hei_yacht_heist_Bedrm"); + NAPI.World.RequestIpl("hei_yacht_heist_DistantLights"); + NAPI.World.RequestIpl("hei_yacht_heist_LODLights"); + ChatService.SendMessage(player, "~y~Dignity heist Yacht~s~ erfolgreich geladen!"); + break; + case "PYacht": + NAPI.World.RequestIpl("smboat"); + NAPI.World.RequestIpl("smboat_lod"); + ChatService.SendMessage(player, "~y~Party Yacht~s~ erfolgreich geladen!"); + break; + case "AircraftCarrier": + NAPI.World.RequestIpl("hei_carrier"); + NAPI.World.RequestIpl("hei_carrier_DistantLights"); + NAPI.World.RequestIpl("hei_Carrier_int1"); + NAPI.World.RequestIpl("hei_Carrier_int2"); + NAPI.World.RequestIpl("hei_Carrier_int3"); + NAPI.World.RequestIpl("hei_Carrier_int4"); + NAPI.World.RequestIpl("hei_Carrier_int5"); + NAPI.World.RequestIpl("hei_Carrier_int6"); + NAPI.World.RequestIpl("hei_carrier_LODLights"); + ChatService.SendMessage(player, "~y~Aircraft Carrier~s~ erfolgreich geladen!"); + break; + case "BridgeTC": + NAPI.World.RequestIpl("canyonriver01_traincrash"); + NAPI.World.RequestIpl("canyonriver01_traincrash"); + ChatService.SendMessage(player, "~y~Bridge Train Crash~s~ erfolgreich geladen!"); + break; + case "BridgeTN": + NAPI.World.RequestIpl("canyonriver01"); + NAPI.World.RequestIpl("railing_start"); + ChatService.SendMessage(player, "~y~Bridge Train Normal~s~ erfolgreich geladen!"); + break; + case "NorthYankton": + NAPI.World.RequestIpl("prologue01"); + NAPI.World.RequestIpl("prologue01c"); + NAPI.World.RequestIpl("prologue01d"); + NAPI.World.RequestIpl("prologue01e"); + NAPI.World.RequestIpl("prologue01f"); + NAPI.World.RequestIpl("prologue01g"); + NAPI.World.RequestIpl("prologue01h"); + NAPI.World.RequestIpl("prologue01i"); + NAPI.World.RequestIpl("prologue01j"); + NAPI.World.RequestIpl("prologue01k"); + NAPI.World.RequestIpl("prologue01z"); + NAPI.World.RequestIpl("prologue02"); + NAPI.World.RequestIpl("prologue03"); + NAPI.World.RequestIpl("prologue03b"); + NAPI.World.RequestIpl("prologue03_grv_dug"); + NAPI.World.RequestIpl("prologue_grv_torch"); + NAPI.World.RequestIpl("prologue04"); + NAPI.World.RequestIpl("prologue04b"); + NAPI.World.RequestIpl("prologue04_cover"); + NAPI.World.RequestIpl("des_protree_end"); + NAPI.World.RequestIpl("des_protree_start"); + NAPI.World.RequestIpl("prologue05"); + NAPI.World.RequestIpl("prologue05b"); + NAPI.World.RequestIpl("prologue06"); + NAPI.World.RequestIpl("prologue06b"); + NAPI.World.RequestIpl("prologue06_int"); + NAPI.World.RequestIpl("prologue06_pannel"); + NAPI.World.RequestIpl("plg_occl_00"); + NAPI.World.RequestIpl("prologue_occl"); + NAPI.World.RequestIpl("prologuerd"); + NAPI.World.RequestIpl("prologuerdb"); + ChatService.SendMessage(player, "~y~North Yankton~s~ erfolgreich geladen!"); + break; + case "ONeilsFarmB": + NAPI.World.RequestIpl("farmint"); + NAPI.World.RequestIpl("farm_burnt"); + NAPI.World.RequestIpl("farm_burnt_props"); + NAPI.World.RequestIpl("des_farmhs_endimap"); + NAPI.World.RequestIpl("des_farmhs_end_occl"); + ChatService.SendMessage(player, "~y~ONeils Farm Burnt~s~ erfolgreich geladen!"); + break; + case "ONeilsFarm": + NAPI.World.RequestIpl("farm"); + NAPI.World.RequestIpl("farm_props"); + NAPI.World.RequestIpl("farm_int"); + ChatService.SendMessage(player, "~y~ONeils Farm~s~ erfolgreich geladen!"); + break; + case "Morgue": + NAPI.World.RequestIpl("coronertrash"); + NAPI.World.RequestIpl("Coroner_Int_On"); + ChatService.SendMessage(player, "~y~Morgue~s~ erfolgreich geladen!"); + break; + } + + } + #endregion + + // + [Command("managefactionranks", "~m~Benutzung: ~s~/managefactionranks [Fraktions-ID]")] + public void CmdFactionManageFactionRanks(Client player, int factionID) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + using (var context = new DatabaseContext()) + { + Entities.Faction f = context.Factions.FirstOrDefault(id => id.Id == factionID); + if (f == null) + { + ChatService.ErrorMessage(player, "Diese Fraktion existiert nicht (Liste: ~m~/factionlist~s~)"); + return; + } + + List factionRanks = context.FactionRanks.ToList().FindAll(r => r.FactionId == f.Id).OrderByDescending(o => o.Order).ToList(); + List rankList = new List(); + + factionRanks.ForEach(r => + { + rankList.Add(new Rank + { + Id = r.Id, + Name = r.RankName + }); + }); + + FactionRankHelper helper = new FactionRankHelper + { + FactionId = f.Id, + Ranks = rankList + }; + + string json = JsonConvert.SerializeObject(helper, Formatting.None); + player.TriggerEvent("manageFactionRanks", json); + } + } + + [Command("setweather", "~m~Benutzung: ~s~/setweather [Wetter]")] + public void CmdAdminSetweather(Client player, string weather) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + bool found = false; + foreach (string w in Enum.GetNames(typeof(Weather))) + { + if (w.ToLower() == weather) + { + found = true; + break; + } + } + + if (!found) + { + ChatService.ErrorMessage(player, "Dieses Wetter existiert nicht"); + return; + } + + Weather weatherBefore = NAPI.World.GetWeather(); + NAPI.World.SetWeather(weather); + Weather weatherAfter = NAPI.World.GetWeather(); + + if (!weatherBefore.Equals(weatherAfter)) + { + ChatService.SendMessage(player, "~w~Wetter geändert: " + NAPI.World.GetWeather()); + NAPI.Notification.SendNotificationToAll("Das Wetter wurde auf ~g~ " + NAPI.World.GetWeather() + "~s~ geändert.", true); + } + else + { + ChatService.SendMessage(player, "~w~Das Wetter konnte nicht geändert werden"); + } + } + + [Command("aspeed", "~m~Benutzung: ~s~/aspeed [Modifier]")] //TODO: Überarbeiten ?? SetPlayerVelocity ?? + public void CmdAdminAspeed(Client player, int modifier) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + if (!player.IsInVehicle) + { + ChatService.ErrorMessage(player, "Du sitzt momentan nicht in einem Fahrzeug"); + return; + } + + player.Vehicle.SetSharedData("vehicleAdminSpeed", modifier); + } + + [Command("setmoney", "~m~Benutzung: ~s~/setmoney [Name] [Menge]")] + public void SetPlayerMoney(Client player, string receiver, int amount) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + Client target = ClientService.GetClientByNameOrId(receiver); + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(player); + return; + } + + using (var dbContext = new DatabaseContext()) + { + target.GetUser().GetBankAccount(dbContext).Balance = amount; + dbContext.SaveChanges(); + } + ChatService.SendMessage(player, "~b~[ADMIN]~s~ Du hast das Geld von " + target.Name + " auf ~g~$" + amount + "~s~ gesetzt."); + ChatService.SendMessage(target, "~b~[ADMIN]~s~ Dein Geld wurde von Admin " + player.Name + " auf ~g~$" + amount + "~s~ gesetzt."); + } + + [Command("givemoney", "~m~Benutzung: ~s~/givemoney [Name] [Menge]")] + public void GivePlayerMoney(Client player, string receiver, int amount) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + Client target = ClientService.GetClientByNameOrId(receiver); + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(player); + return; + } + + using (var dbContext = new DatabaseContext()) + { + target.GetUser().GetBankAccount(dbContext).Balance += amount; + dbContext.SaveChanges(); + } + ChatService.SendMessage(player, "~b~[ADMIN]~s~ Du hast " + target.Name + " ~g~$" + amount + "~s~ gegeben."); + ChatService.SendMessage(target, "~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; + } + + if (target.GetUser().BusinessId != null) + { + ChatService.ErrorMessage(player, "Der Spieler besitzt momentan schon ein Business: ~o~" + BusinessManager.GetBusiness(target.GetUser().BusinessId).Name); + return; + } + + BusinessBase business = BusinessManager.GetBusiness(businessid); + if (business == null) + { + ChatService.ErrorMessage(player, "Dieses Business existiert nicht. ~m~/businesslist"); + return; + } + + if (business.GetOwner() != null) + { + ChatService.ErrorMessage(player, "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; + + dbContext.SaveChanges(); + business.Update(); + } + } + + [Command("clearbusiness", "~m~Benutzung:~s~ /clearbusiness [Business ID]")] + public void CmdAdminClearbusiness(Client player, int businessid) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + BusinessBase business = BusinessManager.GetBusiness(businessid); + if (business == null) + { + ChatService.ErrorMessage(player, "Dieses Business existiert nicht. ~m~/businesslist"); + return; + } + + using (var dbContext = new DatabaseContext()) + { + User owner = business.GetOwner(dbContext); + if (owner == null) + { + ChatService.ErrorMessage(player, "Dieses Business hat momentan keinen Besitzer"); + return; + } + + owner.BusinessId = null; + business.GetBankAccount(dbContext).Balance = 0; + + ChatService.SendMessage(owner.Client, "~b~[ADMIN]~s~ Dir wurde von ~y~" + player.Name + "~s~ dein Business entzogen."); + ChatService.SendMessage(player, "~b~[ADMIN]~s~ Du hast ~y~" + owner.Name + "~s~ sein Business ~o~" + business.Name + "~s~ entzogen."); + + dbContext.SaveChanges(); + business.Update(); + } + } + + [Command("setbusinessbankbalance", "~m~Benutzung: ~s~/setbusinessbankbalance [Business ID] [Menge]")] + public void CmdAdminGivebusinessbankbalance(Client player, int businessid, int amount) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + BusinessBase business = BusinessManager.GetBusiness(businessid); + if (business == null) + { + ChatService.ErrorMessage(player, "Dieses Business existiert nicht. ~m~/businesslist"); + return; + } + + BankManager.SetMoney(player, business, amount, "Admin"); + } + + [Command("showtuningmenu", "~m~Benutzung: ~s~/showtuningmenu")] + public void CmdAdminShowtuningmenu(Client player) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + player.TriggerEvent("showTuningMenu"); + } + + [Command("interior", "~m~Benutzung: ~s~/interior [Add / Remove / SetEnterPosition / SetExitPosition] [Name / ID]")] + public void CmdAdminInterior(Client player, string option1, string option2) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + option1 = option1.ToString(); + + if (option1 != "add" && option1 != "remove" && option1 != "setenterposition" && option1 != "setexitposition") + { + ChatService.SendMessage(player, "~m~Benutzung: ~s~/interior [Add / Remove / SetEnterPosition / SetExitPosition] [Name]"); + return; + } + + switch (option1) + { + case "add": + using (var dbContext = new DatabaseContext()) + { + Interior interiorAdd = new Interior + { + Name = option2 + }; + dbContext.Interiors.Add(interiorAdd); + dbContext.SaveChanges(); + ChatService.SendMessage(player, "~b~[ADMIN]~s~ Das Interior ~y~" + option2 + "~s~ wurde erstellt. ~m~ID: " + interiorAdd.Id); + } + break; + case "remove": + using (var dbContext = new DatabaseContext()) + { + if (!int.TryParse(option2, out int intId)) + { + ChatService.ErrorMessage(player, "Es muss eine Nummer angegeben werden"); + return; + } + Interior interiorRemove = InteriorManager.GetInteriorById(intId, dbContext); + if (interiorRemove == null) + { + ChatService.ErrorMessage(player, "Dieses Interior existiert nicht"); + return; + } + + InteriorManager.DeleteInterior(interiorRemove); + + dbContext.Interiors.Remove(interiorRemove); + dbContext.SaveChanges(); + } + ChatService.SendMessage(player, "~b~[ADMIN]~s~ Das Interior wurde gelöscht."); + break; + case "setenterposition": + using (var dbContext = new DatabaseContext()) + { + if (!int.TryParse(option2, out int intIdEnter)) + { + ChatService.ErrorMessage(player, "Es muss eine Nummer angegeben werden"); + return; + } + Interior interior = InteriorManager.GetInteriorById(intIdEnter, dbContext); + if (interior == null) + { + ChatService.ErrorMessage(player, "Dieses Interior existiert nicht"); + return; + } + interior.EnterPosition = player.Position; + dbContext.SaveChanges(); + InteriorManager.DeleteInterior(interior); + InteriorManager.LoadInterior(interior); + ChatService.SendMessage(player, "~b~[ADMIN]~s~ Die Eingangs-Position vom Interior ~y~" + interior.Name + "~s~ wurde gesetzt."); + InteriorManager.LoadInteriors(); + } + break; + case "setexitposition": + using (var dbContext = new DatabaseContext()) + { + if (!int.TryParse(option2, out int intIdExit)) + { + ChatService.ErrorMessage(player, "Es muss eine Nummer angegeben werden"); + return; + } + Interior interior = InteriorManager.GetInteriorById(intIdExit, dbContext); + if (interior == null) + { + ChatService.ErrorMessage(player, "Dieses Interior existiert nicht"); + return; + } + interior.ExitPosition = player.Position; + dbContext.SaveChanges(); + InteriorManager.DeleteInterior(interior); + InteriorManager.LoadInterior(interior); + ChatService.SendMessage(player, "~b~[ADMIN]~s~ Die Eingangs-Position vom Interior ~y~" + interior.Name + "~s~ wurde gesetzt."); + InteriorManager.LoadInteriors(); + } + break; + } + } + + [Command("reloaddoors", "~m~Benutzung: ~s~/reloaddoors")] + public void CmdAdminReloaddoors(Client player) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + DoorManager.ReloadDoors(); + 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(Client player, string option1, 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; + } + + 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.ErrorMessage(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"); + } + + player.SendChatMessage("~m~Benutzung: ~s~/house [add / remove / price / type / reloadhouses]"); + } + + [Command("paydaydrop", "~m~Benutzung: ~s~/paydaydrop")] + public void CmdAdminPaydaydrop(Client player) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + foreach (var target in NAPI.Pools.GetAllPlayers().Select(c => c.GetUser())) + { + Economy.SetPaycheck(target.Client, target.Wage); + } + + ChatService.SendMessage(player, "~b~[ADMIN]~s~ Du hast ein Payday gedroppt."); + } + + [Command("setwage", "~m~Benutzung: ~s~/setwage [Name/Id] [Lohn]")] + public void CmdAdminSetWage(Client player, string nameOrId, int wage) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + Client target = ClientService.GetClientByNameOrId(nameOrId); + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(player); + return; + } + + using (var dbContext = new DatabaseContext()) + { + target.GetUser(dbContext).Wage = wage; + dbContext.SaveChanges(); + } + } + + #endregion + + #region ALevel1338 + [Command("whitelist", "~m~Benutzung: ~s~/whitelist [Add / Remove] [Socialclub Name]")] + public void CmdAdminWhitelist(Client player, string option, string scName) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.PROJEKTLEITUNG) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + option = option.ToLower(); + + if (option != "add" && option != "remove") + { + ChatService.SendMessage(player, "~m~Benutzung: ~s~/whitelist [Add / Remove] [Socialclub Name]"); + return; + } + + using (var dbContext = new DatabaseContext()) + { + if (option == "add") + { + if (dbContext.WhitelistEntries.Any(w => w.SocialClubName.ToLower() == scName.ToLower())) + { + ChatService.ErrorMessage(player, "Dieser Name ist schon auf der Whitelist"); + return; + } + + Whitelist whitelist = new Whitelist { SocialClubName = scName.ToLower() }; + dbContext.WhitelistEntries.Add(whitelist); + + ChatService.SendMessage(player, "~b~[ADMIN]~s~ ~y~" + scName + "~s~ wurde erfolgreich zur Whitelist hinzugefügt."); + } + else if (option == "remove") + { + if (!dbContext.WhitelistEntries.Any(w => w.SocialClubName.ToLower() == scName.ToLower())) + { + ChatService.ErrorMessage(player, "Dieser Name ist nicht auf der Whitelist"); + return; + } + + Whitelist whitelist = dbContext.WhitelistEntries.FirstOrDefault(w => w.SocialClubName.ToLower() == scName.ToLower()); + dbContext.WhitelistEntries.Remove(whitelist); + + ChatService.SendMessage(player, "~b~[ADMIN]~s~ ~y~" + scName + "~s~ wurde erfolgreich aus der Whitelist entfernt."); + } + dbContext.SaveChanges(); + } + } + + [Command("makeadmin", "~m~Benutzung: ~s~/makeadmin [Name] [Adminlevel]")] + public void CmdAdminSetadmin(Client player, string name, int rank) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.PROJEKTLEITUNG) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + if (!Enum.IsDefined(typeof(AdminLevel), rank)) + { + ChatService.ErrorMessage(player, "Dieser Adminrang ist nicht definiert"); + return; + } + + Client target = ClientService.GetClientByNameOrId(name); + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(player); + return; + } + + using (var dbContext = new DatabaseContext()) + { + target.GetUser(dbContext).AdminLevel = (AdminLevel)rank; + dbContext.SaveChanges(); + } + ChatService.SendMessage(target, "Du wurdest durch " + player.Name + " auf Adminlevel " + target.GetUser().AdminLevel.GetName() + ":(" + rank + ") gesetzt."); + ChatService.SendMessage(player, "Du hast " + target.Name + " auf Adminlevel " + target.GetUser().AdminLevel.GetName() + ":(" + rank + ") gesetzt."); + + } + #endregion + } } diff --git a/ReallifeGamemode.Server/Commands/FactionCommands.cs b/ReallifeGamemode.Server/Commands/FactionCommands.cs index d347e821..b28760c7 100644 --- a/ReallifeGamemode.Server/Commands/FactionCommands.cs +++ b/ReallifeGamemode.Server/Commands/FactionCommands.cs @@ -15,236 +15,236 @@ using System.Text.RegularExpressions; namespace ReallifeGamemode.Server.Commands { - class FactionCommands : Script + class FactionCommands : Script + { + #region Chat Commands + + [Command("f", "~m~Benutzung: ~s~/f [Nachricht]", GreedyArg = true)] + public void CmdFactionF(Client player, string message) { - #region Chat Commands + Faction f = player.GetUser()?.Faction; + if (f == null || f.StateOwned) + { + ChatService.NotAuthorized(player); + return; + } - [Command("f", "~m~Benutzung: ~s~/f [Nachricht]", GreedyArg = true)] - public void CmdFactionF(Client player, string message) - { - Faction f = player.GetUser()?.Faction; - if (f == null || f.StateOwned) - { - ChatService.NotAuthorized(player); - return; - } + message = Regex.Replace(message, "(~[a-zA-Z]~)|(!{(.*)})", ""); - message = Regex.Replace(message, "(~[a-zA-Z]~)|(!{(.*)})", ""); - - string broadcastMessage = "!{02FCFF}** " + player.GetUser().GetFactionRank().RankName + " " + player.Name + ": " + message + " )) **"; - ChatService.BroadcastFaction(broadcastMessage, f); - } - - [Command("r", "~m~Benutzung: ~s~/r [Nachricht]", GreedyArg = true)] - public void CmdFactionR(Client player, string message) - { - Entities.Faction f = player.GetUser()?.Faction; - if (f == null || !f.StateOwned) - { - ChatService.NotAuthorized(player); - return; - } - - message = Regex.Replace(message, "(~[a-zA-Z]~)|(!{(.*)})", ""); - - string broadcastMessage = "!{33AA33}** " + player.GetUser().GetFactionRank().RankName + " " + player.Name + ": " + message + ", over **"; - ChatService.BroadcastFaction(broadcastMessage, f); - } - - [Command("d", "~m~Benutzung: ~s~/d [Nachricht]", GreedyArg = true)] - public void CmdFactionD(Client player, string message) - { - Faction f = player.GetUser()?.Faction; - if (f == null || !f.StateOwned) - { - ChatService.NotAuthorized(player); - return; - } - - message = Regex.Replace(message, "(~[a-zA-Z]~)|(!{(.*)})", ""); - - string broadcastMessage = "!{CC3333}** " + player.GetUser().GetFactionRank().RankName + " " + player.Name + ": " + message + ", over **"; - using (var context = new DatabaseContext()) - { - ChatService.BroadcastFaction(broadcastMessage, context.Factions.ToList().FindAll(c => c.StateOwned)); - } - } - #endregion - #region Leader Commands - [Command("giverank", "~m~Benutzung: ~s~/giverank [Name] [Rang]", GreedyArg = true)] - public void CmdFactionGiverank(Client player, string name, string rank) - { - if (player.GetUser()?.FactionId == null || player.GetUser().FactionLeader == false) - { - ChatService.NotAuthorized(player); - return; - } - - Client target = ClientService.GetClientByNameOrId(name); - if (target == null || !target.IsLoggedIn()) - { - ChatService.PlayerNotFound(player); - return; - } - - if (target.GetUser()?.FactionId != player.GetUser()?.FactionId) - { - ChatService.ErrorMessage(player, "Dieser Spieler ist nicht in deiner Fraktion"); - return; - } - - using (var dbContext = new DatabaseContext()) - { - FactionRank fr = dbContext.FactionRanks.FirstOrDefault(r => r.RankName == rank && r.FactionId == player.GetUser(dbContext).FactionId); - if (fr == null) - { - ChatService.ErrorMessage(player, "Dieser Rang existiert nicht"); - return; - } - - target.GetUser(dbContext).FactionRankId = fr.Id; - - ChatService.SendMessage(player, "!{02FCFF}Du hast " + target.Name + " den Rang '" + fr.RankName + "' gegeben."); - ChatService.SendMessage(target, "!{02FCFF}Du hast von " + player.Name + " den Rang '" + fr.RankName + "' erhalten."); - - dbContext.SaveChanges(); - } - } - - [Command("lc", "~m~Benutzung: ~s~/lc [Nachricht]", GreedyArg = true)] - public void CmdFactionLc(Client player, string message) - { - if (player.GetUser()?.FactionId == null || player.GetUser().FactionLeader == false) - { - ChatService.NotAuthorized(player); - return; - } - - message = Regex.Replace(message, "(~[a-zA-Z]~)|(!{(.*)})", ""); - - string broadcastMsg = "~y~[" + player.GetUser().Faction.Name + "] " + player.Name + ": " + message; - - NAPI.Pools.GetAllPlayers().ForEach(p => - { - if (p.GetUser()?.FactionLeader ?? false) ChatService.SendMessage(p, broadcastMsg); - }); - } - #endregion - #region Sanitäter Commands - - [Command("revive", "~m~Benutzung: ~s~/revive")] - public void CmdFactionMedicRevive(Client player) - { - if (player.GetUser()?.FactionId == null || player.GetUser().FactionId != 2) - { - ChatService.NotAuthorized(player); - return; - } - if (player.IsInVehicle) - { - ChatService.ErrorMessage(player, "Du kannst in einem Auto nicht wiederbeleben"); - return; - } - - var nearPlayers = NAPI.Player.GetPlayersInRadiusOfPlayer(2, player); - var deadPlayer = nearPlayers.Where(i => i.GetData("isDead") == true).FirstOrDefault(); - if (player == deadPlayer) - { - ChatService.ErrorMessage(player, "Du kannst dich nicht selbst wiederbeleben"); - return; - } - player.PlayAnimation("amb@medic@standing@kneel@enter", "enter", 0); - - deadPlayer.TriggerEvent("onPlayerRevived"); - deadPlayer.SendNotification("Du wurdest von ~r~" + player.Name + "~s~ wiederbelebt."); - deadPlayer.SetData("isDead", false); - NAPI.Player.SpawnPlayer(deadPlayer, deadPlayer.Position); - deadPlayer.Health = 50; - - MedicTask task = Medic.ReviveTasks.FirstOrDefault(t => t.Victim == deadPlayer.Name); - Medic.RemoveTaskFromList(task); - } - - [Command("heal", "~m~Benutzung: ~s~/heal [Spieler]")] //TODO Eventuell noch mit Geldbetrag wie bei SA:MP - public void CmdFactionMedicHealive(Client player, string receiver) - { - if (player.GetUser()?.FactionId == null || player.GetUser().FactionId != 2) - { - ChatService.NotAuthorized(player); - return; - } - if (player.IsInVehicle) - { - ChatService.ErrorMessage(player, "Du kannst in einem Auto nicht heilen"); - return; - } - Client target = ClientService.GetClientByNameOrId(receiver); - target.Health = 100; - target.SendNotification("Du wurdest von ~g~" + player.Name + " ~s~geheilt.", false); - player.SendNotification("Du hast~g~" + target.Name + " ~s~geheilt.", false); - } - #endregion - #region Staatsfraktionen (LSPD / FBI) Commands - [Command("wanted", "~m~Benutzung: ~s~/wa(nted) [Name / ID] [Anzahl] [Grund]", Alias = "wa", GreedyArg = true)] - public void CmdFactionWanted(Client player, string nameOrId, int amount, string reason) - { - User user = player.GetUser(); - if (user == null || (user.FactionId != 1 && user.FactionId != 2)) - { - ChatService.NotAuthorized(player); - return; - } - - if(amount <= 0) - { - ChatService.ErrorMessage(player, "Es muss eine positive Wantedanzahl vergeben werden"); - return; - } - - Client target = ClientService.GetClientByNameOrId(nameOrId); - if (target == null || !target.IsLoggedIn()) - { - ChatService.PlayerNotFound(player); - return; - } - - User targetUser = target.GetUser(); - targetUser.GiveWanteds(player, amount, reason); - } - - [Command("clear", "~m~Benutzung: ~s~/clear [Name / ID] [Grund]")] - public void CmdFactionClear(Client player, string nameOrId, string reason) - { - - User user = player.GetUser(); - if (user == null || (user.FactionId != 1 && user.FactionId != 2)) - { - ChatService.NotAuthorized(player); - return; - } - - Client target = ClientService.GetClientByNameOrId(nameOrId); - if (target == null || !target.IsLoggedIn()) - { - ChatService.PlayerNotFound(player); - return; - } - - using (var dbContext = new DatabaseContext()) - { - User targetUser = target.GetUser(dbContext); - if(targetUser.Wanteds == 0) - { - ChatService.ErrorMessage(player, "Der Spieler hat keine Wanteds"); - return; - } - - targetUser.Wanteds = 0; - dbContext.SaveChanges(); - } - } - #endregion - #region Global Fraktions Commands - #endregion + string broadcastMessage = "!{02FCFF}** " + player.GetUser().GetFactionRank().RankName + " " + player.Name + ": " + message + " )) **"; + ChatService.BroadcastFaction(broadcastMessage, f); } + + [Command("r", "~m~Benutzung: ~s~/r [Nachricht]", GreedyArg = true)] + public void CmdFactionR(Client player, string message) + { + Entities.Faction f = player.GetUser()?.Faction; + if (f == null || !f.StateOwned) + { + ChatService.NotAuthorized(player); + return; + } + + message = Regex.Replace(message, "(~[a-zA-Z]~)|(!{(.*)})", ""); + + string broadcastMessage = "!{33AA33}** " + player.GetUser().GetFactionRank().RankName + " " + player.Name + ": " + message + ", over **"; + ChatService.BroadcastFaction(broadcastMessage, f); + } + + [Command("d", "~m~Benutzung: ~s~/d [Nachricht]", GreedyArg = true)] + public void CmdFactionD(Client player, string message) + { + Faction f = player.GetUser()?.Faction; + if (f == null || !f.StateOwned) + { + ChatService.NotAuthorized(player); + return; + } + + message = Regex.Replace(message, "(~[a-zA-Z]~)|(!{(.*)})", ""); + + string broadcastMessage = "!{CC3333}** " + player.GetUser().GetFactionRank().RankName + " " + player.Name + ": " + message + ", over **"; + using (var context = new DatabaseContext()) + { + ChatService.BroadcastFaction(broadcastMessage, context.Factions.ToList().FindAll(c => c.StateOwned)); + } + } + #endregion + #region Leader Commands + [Command("giverank", "~m~Benutzung: ~s~/giverank [Name] [Rang]", GreedyArg = true)] + public void CmdFactionGiverank(Client player, string name, string rank) + { + if (player.GetUser()?.FactionId == null || player.GetUser().FactionLeader == false) + { + ChatService.NotAuthorized(player); + return; + } + + Client target = ClientService.GetClientByNameOrId(name); + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(player); + return; + } + + if (target.GetUser()?.FactionId != player.GetUser()?.FactionId) + { + ChatService.ErrorMessage(player, "Dieser Spieler ist nicht in deiner Fraktion"); + return; + } + + using (var dbContext = new DatabaseContext()) + { + FactionRank fr = dbContext.FactionRanks.FirstOrDefault(r => r.RankName == rank && r.FactionId == player.GetUser(dbContext).FactionId); + if (fr == null) + { + ChatService.ErrorMessage(player, "Dieser Rang existiert nicht"); + return; + } + + target.GetUser(dbContext).FactionRankId = fr.Id; + + ChatService.SendMessage(player, "!{02FCFF}Du hast " + target.Name + " den Rang '" + fr.RankName + "' gegeben."); + ChatService.SendMessage(target, "!{02FCFF}Du hast von " + player.Name + " den Rang '" + fr.RankName + "' erhalten."); + + dbContext.SaveChanges(); + } + } + + [Command("lc", "~m~Benutzung: ~s~/lc [Nachricht]", GreedyArg = true)] + public void CmdFactionLc(Client player, string message) + { + if (player.GetUser()?.FactionId == null || player.GetUser().FactionLeader == false) + { + ChatService.NotAuthorized(player); + return; + } + + message = Regex.Replace(message, "(~[a-zA-Z]~)|(!{(.*)})", ""); + + string broadcastMsg = "~y~[" + player.GetUser().Faction.Name + "] " + player.Name + ": " + message; + + NAPI.Pools.GetAllPlayers().ForEach(p => + { + if (p.GetUser()?.FactionLeader ?? false) ChatService.SendMessage(p, broadcastMsg); + }); + } + #endregion + #region Sanitäter Commands + + [Command("revive", "~m~Benutzung: ~s~/revive")] + public void CmdFactionMedicRevive(Client player) + { + if (player.GetUser()?.FactionId == null || player.GetUser().FactionId != 2) + { + ChatService.NotAuthorized(player); + return; + } + if (player.IsInVehicle) + { + ChatService.ErrorMessage(player, "Du kannst in einem Auto nicht wiederbeleben"); + return; + } + + var nearPlayers = NAPI.Player.GetPlayersInRadiusOfPlayer(2, player); + var deadPlayer = nearPlayers.Where(i => i.GetData("isDead") == true).FirstOrDefault(); + if (player == deadPlayer) + { + ChatService.ErrorMessage(player, "Du kannst dich nicht selbst wiederbeleben"); + return; + } + player.PlayAnimation("amb@medic@standing@kneel@enter", "enter", 0); + + deadPlayer.TriggerEvent("onPlayerRevived"); + deadPlayer.SendNotification("Du wurdest von ~r~" + player.Name + "~s~ wiederbelebt."); + deadPlayer.SetData("isDead", false); + NAPI.Player.SpawnPlayer(deadPlayer, deadPlayer.Position); + deadPlayer.Health = 50; + + MedicTask task = Medic.ReviveTasks.FirstOrDefault(t => t.Victim == deadPlayer.Name); + Medic.RemoveTaskFromList(task); + } + + [Command("heal", "~m~Benutzung: ~s~/heal [Spieler]")] //TODO Eventuell noch mit Geldbetrag wie bei SA:MP + public void CmdFactionMedicHealive(Client player, string receiver) + { + if (player.GetUser()?.FactionId == null || player.GetUser().FactionId != 2) + { + ChatService.NotAuthorized(player); + return; + } + if (player.IsInVehicle) + { + ChatService.ErrorMessage(player, "Du kannst in einem Auto nicht heilen"); + return; + } + Client target = ClientService.GetClientByNameOrId(receiver); + target.Health = 100; + target.SendNotification("Du wurdest von ~g~" + player.Name + " ~s~geheilt.", false); + player.SendNotification("Du hast~g~" + target.Name + " ~s~geheilt.", false); + } + #endregion + #region Staatsfraktionen (LSPD / FBI) Commands + [Command("wanted", "~m~Benutzung: ~s~/wa(nted) [Name / ID] [Anzahl] [Grund]", Alias = "wa", GreedyArg = true)] + public void CmdFactionWanted(Client player, string nameOrId, int amount, string reason) + { + User user = player.GetUser(); + if (user == null || (user.FactionId != 1 && user.FactionId != 2)) + { + ChatService.NotAuthorized(player); + return; + } + + if (amount <= 0) + { + ChatService.ErrorMessage(player, "Es muss eine positive Wantedanzahl vergeben werden"); + return; + } + + Client target = ClientService.GetClientByNameOrId(nameOrId); + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(player); + return; + } + + User targetUser = target.GetUser(); + targetUser.GiveWanteds(player, amount, reason); + } + + [Command("clear", "~m~Benutzung: ~s~/clear [Name / ID] [Grund]")] + public void CmdFactionClear(Client player, string nameOrId, string reason) + { + + User user = player.GetUser(); + if (user == null || (user.FactionId != 1 && user.FactionId != 2)) + { + ChatService.NotAuthorized(player); + return; + } + + Client target = ClientService.GetClientByNameOrId(nameOrId); + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(player); + return; + } + + using (var dbContext = new DatabaseContext()) + { + User targetUser = target.GetUser(dbContext); + if (targetUser.Wanteds == 0) + { + ChatService.ErrorMessage(player, "Der Spieler hat keine Wanteds"); + return; + } + + targetUser.Wanteds = 0; + dbContext.SaveChanges(); + } + } + #endregion + #region Global Fraktions Commands + #endregion + } } diff --git a/ReallifeGamemode.Server/Commands/GroupCommands.cs b/ReallifeGamemode.Server/Commands/GroupCommands.cs index fdb77fa3..8c32ab00 100644 --- a/ReallifeGamemode.Server/Commands/GroupCommands.cs +++ b/ReallifeGamemode.Server/Commands/GroupCommands.cs @@ -8,24 +8,24 @@ using System.Text.RegularExpressions; namespace ReallifeGamemode.Server.Commands { - class GroupCommands : Script + class GroupCommands : Script + { + #region Chat Commands + [Command("g", "~m~Benutzung: ~s~/g [Nachricht]", GreedyArg = true)] + public void CmdGroupG(Client player, string message) { - #region Chat Commands - [Command("g", "~m~Benutzung: ~s~/g [Nachricht]", GreedyArg = true)] - public void CmdGroupG(Client player, string message) - { - Entities.Group group = player.GetUser().Group; - if (group == null) - { - ChatService.NotAuthorized(player); - return; - } + Entities.Group group = player.GetUser().Group; + if (group == null) + { + ChatService.NotAuthorized(player); + return; + } - message = Regex.Replace(message, "(~[a-zA-Z]~)|(!{(.*)})", ""); - message = $"{player.Name}: {message}"; + message = Regex.Replace(message, "(~[a-zA-Z]~)|(!{(.*)})", ""); + message = $"{player.Name}: {message}"; - ChatService.BroadcastGroup(message, group); - } - #endregion + ChatService.BroadcastGroup(message, group); } + #endregion + } } diff --git a/ReallifeGamemode.Server/Commands/UserCommands.cs b/ReallifeGamemode.Server/Commands/UserCommands.cs index c297e6ad..2156662f 100644 --- a/ReallifeGamemode.Server/Commands/UserCommands.cs +++ b/ReallifeGamemode.Server/Commands/UserCommands.cs @@ -9,45 +9,45 @@ using System.Linq; namespace ReallifeGamemode.Server.Commands { - class UserCommands : Script + class UserCommands : Script + { + + [Command("car", "~m~Benutzung: ~s~/car")] + public void CmdUserCar(Client player) + { + if (!player.IsLoggedIn()) return; + if (!player.IsInVehicle) return; + + Vehicle pVeh = player.Vehicle; + + if (pVeh.GetServerVehicle() is ServerVehicle veh) + { + if (player.GetUser().IsAdmin(AdminLevel.SUPPORTER)) + { + ChatService.SendMessage(player, "~m~" + ((VehicleHash)pVeh.Model) + " | " + veh.ToString() + " | Farbe 1: " + pVeh.PrimaryColor + " | Farbe 2: " + pVeh.SecondaryColor + " | ID: " + pVeh.Handle.Value); + return; + } + } + ChatService.SendMessage(player, "~m~" + ((VehicleHash)pVeh.Model) + " | Farbe 1: " + pVeh.PrimaryColor + " | Farbe 2: " + pVeh.SecondaryColor + " | ID: " + pVeh.Handle.Value); + } + + [Command("paycheck", "~m~Benutzung: ~s~/paycheck")] + public void CmdUserPaycheck(Client client) { - [Command("car", "~m~Benutzung: ~s~/car")] - public void CmdUserCar(Client player) - { - if (!player.IsLoggedIn()) return; - if (!player.IsInVehicle) return; - - Vehicle pVeh = player.Vehicle; - - if (pVeh.GetServerVehicle() is ServerVehicle veh) - { - if (player.GetUser().IsAdmin(AdminLevel.SUPPORTER)) - { - ChatService.SendMessage(player, "~m~" + ((VehicleHash)pVeh.Model) + " | " + veh.ToString() + " | Farbe 1: " + pVeh.PrimaryColor + " | Farbe 2: " + pVeh.SecondaryColor + " | ID: " + pVeh.Handle.Value); - return; - } - } - ChatService.SendMessage(player, "~m~" + ((VehicleHash)pVeh.Model) + " | Farbe 1: " + pVeh.PrimaryColor + " | Farbe 2: " + pVeh.SecondaryColor + " | ID: " + pVeh.Handle.Value); - } - - [Command("paycheck", "~m~Benutzung: ~s~/paycheck")] - public void CmdUserPaycheck(Client client) - { - - User user = client.GetUser(); - if (Economy.Paychecks.ContainsKey(user.Id)) - { - ChatService.SendMessage(client, "~g~[PAYCHECK] -------------------------------------------------------"); - ChatService.SendMessage(client, "~g~[PAYCHECK]~s~ Lohn : ~g~+$" + Economy.Paychecks[user.Id].Wage); - ChatService.SendMessage(client, "~g~[PAYCHECK]~s~ Finanzhilfe : ~g~+$" + (int)Economy.Paychecks[user.Id].FinancialHelp); - ChatService.SendMessage(client, "~g~[PAYCHECK]~s~ Fahrzeugsteuer : ~r~-$" + Economy.Paychecks[user.Id].VehicleTaxation); - ChatService.SendMessage(client, "~g~[PAYCHECK]~s~ Grundsteuer (Haus) : ~r~-$" + Economy.Paychecks[user.Id].PropertyTaxation); - ChatService.SendMessage(client, "~g~[PAYCHECK]~s~ Einkommen Steuer : ~r~" + (int)(Economy.Paychecks[user.Id].FinancialInterest * 100) + " %"); - ChatService.SendMessage(client, ""); - ChatService.SendMessage(client, "~g~[PAYCHECK]~s~ Ausgaben : ~r~-$" + (Economy.Paychecks[user.Id].Wage - Economy.Paychecks[user.Id].Amount)); - ChatService.SendMessage(client, "~g~[PAYCHECK] -------------------------------------------------------"); - } - } + User user = client.GetUser(); + if (Economy.Paychecks.ContainsKey(user.Id)) + { + ChatService.SendMessage(client, "~g~[PAYCHECK] -------------------------------------------------------"); + ChatService.SendMessage(client, "~g~[PAYCHECK]~s~ Lohn : ~g~+$" + Economy.Paychecks[user.Id].Wage); + ChatService.SendMessage(client, "~g~[PAYCHECK]~s~ Finanzhilfe : ~g~+$" + (int)Economy.Paychecks[user.Id].FinancialHelp); + ChatService.SendMessage(client, "~g~[PAYCHECK]~s~ Fahrzeugsteuer : ~r~-$" + Economy.Paychecks[user.Id].VehicleTaxation); + ChatService.SendMessage(client, "~g~[PAYCHECK]~s~ Grundsteuer (Haus) : ~r~-$" + Economy.Paychecks[user.Id].PropertyTaxation); + ChatService.SendMessage(client, "~g~[PAYCHECK]~s~ Einkommen Steuer : ~r~" + (int)(Economy.Paychecks[user.Id].FinancialInterest * 100) + " %"); + ChatService.SendMessage(client, ""); + ChatService.SendMessage(client, "~g~[PAYCHECK]~s~ Ausgaben : ~r~-$" + (Economy.Paychecks[user.Id].Wage - Economy.Paychecks[user.Id].Amount)); + ChatService.SendMessage(client, "~g~[PAYCHECK] -------------------------------------------------------"); + } } + } } diff --git a/ReallifeGamemode.Server/Entities/ATM.cs b/ReallifeGamemode.Server/Entities/ATM.cs index 22427592..28070577 100644 --- a/ReallifeGamemode.Server/Entities/ATM.cs +++ b/ReallifeGamemode.Server/Entities/ATM.cs @@ -16,27 +16,27 @@ using System.Text; namespace ReallifeGamemode.Server.Entities { - public class ATM : IBankAccountOwner, IBankAccount + public class ATM : IBankAccountOwner, IBankAccount + { + [Key] + public int Id { get; set; } + public int Balance { get; set; } + public float X { get; set; } + public float Y { get; set; } + public float Z { get; set; } + + [NotMapped] + public Vector3 Position => new Vector3(X, Y, Z); + + public bool Faulty { get; set; } = false; + public bool Active { get; set; } = true; + + public string Name => throw new NotImplementedException(); + + public IBankAccount GetBankAccount(DatabaseContext databaseContext = null) { - [Key] - public int Id { get; set; } - public int Balance { get; set; } - public float X { get; set; } - public float Y { get; set; } - public float Z { get; set; } - - [NotMapped] - public Vector3 Position => new Vector3(X, Y, Z); - - public bool Faulty { get; set; } = false; - public bool Active { get; set; } = true; - - public string Name => throw new NotImplementedException(); - - public IBankAccount GetBankAccount(DatabaseContext databaseContext = null) - { - databaseContext = databaseContext ?? new DatabaseContext(); - return databaseContext.ATMs.Where(a => a.Id == this.Id).First(); - } + databaseContext = databaseContext ?? new DatabaseContext(); + return databaseContext.ATMs.Where(a => a.Id == this.Id).First(); } + } } diff --git a/ReallifeGamemode.Server/Entities/Ban.cs b/ReallifeGamemode.Server/Entities/Ban.cs index 3ae95e87..6b677b8b 100644 --- a/ReallifeGamemode.Server/Entities/Ban.cs +++ b/ReallifeGamemode.Server/Entities/Ban.cs @@ -13,20 +13,20 @@ using ReallifeGamemode.Server.Entities; namespace ReallifeGamemode.Server.Entities { - public class Ban - { - [Key] - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public int Id { get; set; } + public class Ban + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } - [ForeignKey("User")] - public int UserId { get; set; } - public User User { get; set; } + [ForeignKey("User")] + public int UserId { get; set; } + public User User { get; set; } - public string Reason { get; set; } - public string BannedBy { get; set; } + public string Reason { get; set; } + public string BannedBy { get; set; } - public int Applied { get; set; } - public int UntilDateTime { get; set; } - } + public int Applied { get; set; } + public int UntilDateTime { get; set; } + } } diff --git a/ReallifeGamemode.Server/Entities/BusRoute.cs b/ReallifeGamemode.Server/Entities/BusRoute.cs index 27cd23c6..caae7648 100644 --- a/ReallifeGamemode.Server/Entities/BusRoute.cs +++ b/ReallifeGamemode.Server/Entities/BusRoute.cs @@ -6,34 +6,34 @@ using System.Text; namespace ReallifeGamemode.Server.Entities { - public class BusRoute - { - [Key] - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public int Id { get; set; } + public class BusRoute + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } - public string Description { get; set; } + public string Description { get; set; } - public List RoutePoints { get; set; } - } + public List RoutePoints { get; set; } + } - public class BusRoutePoint - { - [Key] - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public int Id { get; set; } + public class BusRoutePoint + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } - public string Description { get; set; } + public string Description { get; set; } - public float X { get; set; } + public float X { get; set; } - public float Y { get; set; } + public float Y { get; set; } - public float Z { get; set; } + public float Z { get; set; } - [ForeignKey("BusRouteId")] - public int? BusRouteId { get; set; } + [ForeignKey("BusRouteId")] + public int? BusRouteId { get; set; } - public BusRoute BusRoute { get; set; } - } + public BusRoute BusRoute { get; set; } + } } diff --git a/ReallifeGamemode.Server/Entities/BusinessBankAccount.cs b/ReallifeGamemode.Server/Entities/BusinessBankAccount.cs index d25e1fa9..44ce9f4e 100644 --- a/ReallifeGamemode.Server/Entities/BusinessBankAccount.cs +++ b/ReallifeGamemode.Server/Entities/BusinessBankAccount.cs @@ -9,24 +9,24 @@ using System.Text; namespace ReallifeGamemode.Server.Entities { - public class BusinessBankAccount : IBankAccount + public class BusinessBankAccount : IBankAccount + { + [NotMapped] + private int _balance; + + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } + public int Balance { - [NotMapped] - private int _balance; - - [Key] - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public int Id { get; set; } - public int Balance - { - get => _balance; - set - { - _balance = value; - BusinessManager.GetBusiness(BusinessId).Update(value); - } - } - - public int BusinessId { get; set; } + get => _balance; + set + { + _balance = value; + BusinessManager.GetBusiness(BusinessId).Update(value); + } } + + public int BusinessId { get; set; } + } } diff --git a/ReallifeGamemode.Server/Entities/Character.cs b/ReallifeGamemode.Server/Entities/Character.cs index e3166f5b..d4d25b3f 100644 --- a/ReallifeGamemode.Server/Entities/Character.cs +++ b/ReallifeGamemode.Server/Entities/Character.cs @@ -9,74 +9,74 @@ using System.ComponentModel.DataAnnotations.Schema; namespace ReallifeGamemode.Server.Entities { - public class Character - { - [Key] - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public int Id { get; set; } + public class Character + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } - [ForeignKey("User")] - public int UserId { get; set; } - public User User { get; set; } + [ForeignKey("User")] + public int UserId { get; set; } + public User User { get; set; } - public bool Gender { get; set; } - public byte Father { get; set; } - public byte Mother { get; set; } - public float Similarity { get; set; } - public float SkinSimilarity { get; set; } + public bool Gender { get; set; } + public byte Father { get; set; } + public byte Mother { get; set; } + public float Similarity { get; set; } + public float SkinSimilarity { get; set; } - public float NoseWidth { get; set; } - public float NoseBottomHeight { get; set; } - public float NoseTipLength { get; set; } - public float NoseBridgeDepth { get; set; } - public float NoseTipHeight { get; set; } - public float NoseBroken { get; set; } - public float BrowHeight { get; set; } - public float BrowDepth { get; set; } - public float CheekboneHeight { get; set; } - public float CheekboneWidth { get; set; } - public float CheekDepth { get; set; } - public float EyeSize { get; set; } - public float LipThickness { get; set; } - public float JawWidth { get; set; } - public float JawShape { get; set; } - public float ChinHeight { get; set; } - public float ChinDepth { get; set; } - public float ChinWidth { get; set; } - public float ChinIndent { get; set; } - public float NeckWidth { get; set; } + public float NoseWidth { get; set; } + public float NoseBottomHeight { get; set; } + public float NoseTipLength { get; set; } + public float NoseBridgeDepth { get; set; } + public float NoseTipHeight { get; set; } + public float NoseBroken { get; set; } + public float BrowHeight { get; set; } + public float BrowDepth { get; set; } + public float CheekboneHeight { get; set; } + public float CheekboneWidth { get; set; } + public float CheekDepth { get; set; } + public float EyeSize { get; set; } + public float LipThickness { get; set; } + public float JawWidth { get; set; } + public float JawShape { get; set; } + public float ChinHeight { get; set; } + public float ChinDepth { get; set; } + public float ChinWidth { get; set; } + public float ChinIndent { get; set; } + public float NeckWidth { get; set; } - public byte Blemishes { get; set; } - public float BlemishesOpacity { get; set; } - public byte FacialHair { get; set; } - public float FacialHairOpacity { get; set; } - public byte Eyebrows { get; set; } - public float EyebrowsOpacity { get; set; } - public byte Ageing { get; set; } - public float AgeingOpacity { get; set; } - public byte Makeup { get; set; } - public float MakeupOpacity { get; set; } - public byte Blush { get; set; } - public float BlushOpacity { get; set; } - public byte Complexion { get; set; } - public float ComplexionOpacity { get; set; } - public byte SunDamage { get; set; } - public float SunDamageOpacity { get; set; } - public byte Lipstick { get; set; } - public float LipstickOpacity { get; set; } - public byte Freckles { get; set; } - public float FrecklesOpacity { get; set; } - public byte ChestHair { get; set; } - public float ChestHairOpacity { get; set; } + public byte Blemishes { get; set; } + public float BlemishesOpacity { get; set; } + public byte FacialHair { get; set; } + public float FacialHairOpacity { get; set; } + public byte Eyebrows { get; set; } + public float EyebrowsOpacity { get; set; } + public byte Ageing { get; set; } + public float AgeingOpacity { get; set; } + public byte Makeup { get; set; } + public float MakeupOpacity { get; set; } + public byte Blush { get; set; } + public float BlushOpacity { get; set; } + public byte Complexion { get; set; } + public float ComplexionOpacity { get; set; } + public byte SunDamage { get; set; } + public float SunDamageOpacity { get; set; } + public byte Lipstick { get; set; } + public float LipstickOpacity { get; set; } + public byte Freckles { get; set; } + public float FrecklesOpacity { get; set; } + public byte ChestHair { get; set; } + public float ChestHairOpacity { get; set; } - public byte Hair { get; set; } - public byte HairColor { get; set; } - public byte HairHighlightColor { get; set; } - public byte EyebrowColor { get; set; } - public byte BeardColor { get; set; } - public byte EyeColor { get; set; } - public byte BlushColor { get; set; } - public byte LipstickColor { get; set; } - public byte ChestHairColor { get; set; } - } + public byte Hair { get; set; } + public byte HairColor { get; set; } + public byte HairHighlightColor { get; set; } + public byte EyebrowColor { get; set; } + public byte BeardColor { get; set; } + public byte EyeColor { get; set; } + public byte BlushColor { get; set; } + public byte LipstickColor { get; set; } + public byte ChestHairColor { get; set; } + } } diff --git a/ReallifeGamemode.Server/Entities/CharacterCloth.cs b/ReallifeGamemode.Server/Entities/CharacterCloth.cs index 6d05697d..cddbca6f 100644 --- a/ReallifeGamemode.Server/Entities/CharacterCloth.cs +++ b/ReallifeGamemode.Server/Entities/CharacterCloth.cs @@ -9,21 +9,21 @@ using System.ComponentModel.DataAnnotations.Schema; namespace ReallifeGamemode.Server.Entities { - public class CharacterCloth - { - [Key] - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public int Id { get; set; } + public class CharacterCloth + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } - [ForeignKey("User")] - public int UserId { get; set; } - public User User { get; set; } + [ForeignKey("User")] + public int UserId { get; set; } + public User User { get; set; } - public bool Duty { get; set; } + public bool Duty { get; set; } - public byte SlotType { get; set; } - public int SlotId { get; set; } - public int ClothId { get; set; } - public int Texture { get; set; } - } + public byte SlotType { get; set; } + public int SlotId { get; set; } + public int ClothId { get; set; } + public int Texture { get; set; } + } } diff --git a/ReallifeGamemode.Server/Entities/ClothCombination.cs b/ReallifeGamemode.Server/Entities/ClothCombination.cs index b1842416..b78f0572 100644 --- a/ReallifeGamemode.Server/Entities/ClothCombination.cs +++ b/ReallifeGamemode.Server/Entities/ClothCombination.cs @@ -13,13 +13,13 @@ using System.Text; namespace ReallifeGamemode.Server.Entities { - public class ClothCombination - { - [Key] - public int Id { get; set; } - public bool Gender { get; set; } - public int Top { get; set; } - public int Torso { get; set; } - public int Undershirt { get; set; } - } + public class ClothCombination + { + [Key] + public int Id { get; set; } + public bool Gender { get; set; } + public int Top { get; set; } + public int Torso { get; set; } + public int Undershirt { get; set; } + } } diff --git a/ReallifeGamemode.Server/Entities/Door.cs b/ReallifeGamemode.Server/Entities/Door.cs index ff50a249..f7f4e4e9 100644 --- a/ReallifeGamemode.Server/Entities/Door.cs +++ b/ReallifeGamemode.Server/Entities/Door.cs @@ -13,24 +13,24 @@ using System.Text; namespace ReallifeGamemode.Server.Entities { - public class Door - { - [Key] - public int Id { get; set; } - public string Category { get; set; } - public string Name { get; set; } - public bool Locked { get; set; } - public int Model { get; set; } - public float X { get; set; } - public float Y { get; set; } - public float Z { get; set; } - public float Radius { get; set; } + public class Door + { + [Key] + public int Id { get; set; } + public string Category { get; set; } + public string Name { get; set; } + public bool Locked { get; set; } + public int Model { get; set; } + public float X { get; set; } + public float Y { get; set; } + public float Z { get; set; } + public float Radius { get; set; } - [NotMapped] - public Vector3 Position => new Vector3(X, Y, Z); + [NotMapped] + public Vector3 Position => new Vector3(X, Y, Z); - [ForeignKey("FactionId")] - public int? FactionId { get; set; } - public Faction Faction { get; set; } - } + [ForeignKey("FactionId")] + public int? FactionId { get; set; } + public Faction Faction { get; set; } + } } diff --git a/ReallifeGamemode.Server/Entities/DutyCloth.cs b/ReallifeGamemode.Server/Entities/DutyCloth.cs index 647b3729..4b986ac3 100644 --- a/ReallifeGamemode.Server/Entities/DutyCloth.cs +++ b/ReallifeGamemode.Server/Entities/DutyCloth.cs @@ -12,20 +12,20 @@ using System.Text; namespace ReallifeGamemode.Server.Entities { - public class DutyCloth - { - [Key] - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public int Id { get; set; } + public class DutyCloth + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } - [ForeignKey("Faction")] - public int FactionId { get; set; } - public Faction Faction { get; set; } + [ForeignKey("Faction")] + public int FactionId { get; set; } + public Faction Faction { get; set; } - public bool Gender { get; set; } + public bool Gender { get; set; } - public byte SlotType { get; set; } - public int SlotId { get; set; } - public int ClothId { get; set; } - } + public byte SlotType { get; set; } + public int SlotId { get; set; } + public int ClothId { get; set; } + } } diff --git a/ReallifeGamemode.Server/Entities/Faction.cs b/ReallifeGamemode.Server/Entities/Faction.cs index 6a6e9621..534c5d75 100644 --- a/ReallifeGamemode.Server/Entities/Faction.cs +++ b/ReallifeGamemode.Server/Entities/Faction.cs @@ -12,28 +12,28 @@ using System.Linq; namespace ReallifeGamemode.Server.Entities { - public class Faction : IBankAccountOwner - { - [Key] - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public int Id { get; set; } - [StringLength(32)] - public string Name { get; set; } - public bool StateOwned { get; set; } + public class Faction : IBankAccountOwner + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } + [StringLength(32)] + public string Name { get; set; } + public bool StateOwned { get; set; } - public IBankAccount GetBankAccount(DatabaseContext databaseContext = null) + public IBankAccount GetBankAccount(DatabaseContext databaseContext = null) + { + if (databaseContext == null) + { + using (databaseContext = new DatabaseContext()) { - if (databaseContext == null) - { - using (databaseContext = new DatabaseContext()) - { - return databaseContext.FactionBankAccounts.FirstOrDefault(u => u.FactionId == this.Id); - } - } - else - { - return databaseContext.FactionBankAccounts.FirstOrDefault(u => u.FactionId == this.Id); - } + return databaseContext.FactionBankAccounts.FirstOrDefault(u => u.FactionId == this.Id); } + } + else + { + return databaseContext.FactionBankAccounts.FirstOrDefault(u => u.FactionId == this.Id); + } } + } } diff --git a/ReallifeGamemode.Server/Entities/FactionBankAccount.cs b/ReallifeGamemode.Server/Entities/FactionBankAccount.cs index 1502f972..5784d745 100644 --- a/ReallifeGamemode.Server/Entities/FactionBankAccount.cs +++ b/ReallifeGamemode.Server/Entities/FactionBankAccount.cs @@ -13,19 +13,19 @@ using System.Text; */ namespace ReallifeGamemode.Server.Entities { - public class FactionBankAccount : IBankAccount - { - [Key] - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public int Id { get; set; } - [ForeignKey("Faction")] - public int FactionId { get; set; } - public Faction Faction { get; set; } - [StringLength(12)] - public string Bic { get; set; } - [StringLength(32)] - public string Iban { get; set; } - public int Balance { get; set; } - public bool Active { get; set; } - } + public class FactionBankAccount : IBankAccount + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } + [ForeignKey("Faction")] + public int FactionId { get; set; } + public Faction Faction { get; set; } + [StringLength(12)] + public string Bic { get; set; } + [StringLength(32)] + public string Iban { get; set; } + public int Balance { get; set; } + public bool Active { get; set; } + } } diff --git a/ReallifeGamemode.Server/Entities/FactionRank.cs b/ReallifeGamemode.Server/Entities/FactionRank.cs index 9130f483..eadaf972 100644 --- a/ReallifeGamemode.Server/Entities/FactionRank.cs +++ b/ReallifeGamemode.Server/Entities/FactionRank.cs @@ -4,23 +4,23 @@ using System.Linq; namespace ReallifeGamemode.Server.Entities { - public class FactionRank + public class FactionRank + { + [Key] + public int Id { get; set; } + public string RankName { get; set; } + public int Order { get; set; } + + + public int FactionId { get; set; } + public Faction Faction { get; set; } + + public Faction GetFaction() { - [Key] - public int Id { get; set; } - public string RankName { get; set; } - public int Order { get; set; } - - - public int FactionId { get; set; } - public Faction Faction { get; set; } - - public Faction GetFaction() - { - using (var context = new DatabaseContext()) - { - return context.Factions.FirstOrDefault(f => f.Id == FactionId); - } - } + using (var context = new DatabaseContext()) + { + return context.Factions.FirstOrDefault(f => f.Id == FactionId); + } } + } } diff --git a/ReallifeGamemode.Server/Entities/FactionVehicles.cs b/ReallifeGamemode.Server/Entities/FactionVehicles.cs index 553958b7..1a503b28 100644 --- a/ReallifeGamemode.Server/Entities/FactionVehicles.cs +++ b/ReallifeGamemode.Server/Entities/FactionVehicles.cs @@ -10,24 +10,24 @@ using System.Linq; namespace ReallifeGamemode.Server.Entities { - [Table("FactionVehicles")] - public class FactionVehicle : ServerVehicle + [Table("FactionVehicles")] + public class FactionVehicle : ServerVehicle + { + [ForeignKey("Faction")] + public int? FactionId { get; set; } + public Faction Faction { get; set; } + + public Faction GetFaction() { - [ForeignKey("Faction")] - public int? FactionId { get; set; } - public Faction Faction { get; set; } - - public Faction GetFaction() - { - using (var context = new DatabaseContext()) - { - return context.Factions.FirstOrDefault(f => f.Id == FactionId); - } - } - - public override string ToString() - { - return "Fraktions Fahrzeug | Fraktion: " + GetFaction().Name; - } + using (var context = new DatabaseContext()) + { + return context.Factions.FirstOrDefault(f => f.Id == FactionId); + } } + + public override string ToString() + { + return "Fraktions Fahrzeug | Fraktion: " + GetFaction().Name; + } + } } diff --git a/ReallifeGamemode.Server/Entities/GotoPoints.cs b/ReallifeGamemode.Server/Entities/GotoPoints.cs index 36c1cc7b..ff825c71 100644 --- a/ReallifeGamemode.Server/Entities/GotoPoints.cs +++ b/ReallifeGamemode.Server/Entities/GotoPoints.cs @@ -13,16 +13,16 @@ using ReallifeGamemode.Server.Entities; namespace ReallifeGamemode.Server.Entities { - public class GotoPoint - { - [Key] - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public int Id { get; set; } - [StringLength(32)] - public string Description { get; set; } - public float X { get; set; } - public float Y { get; set; } - public float Z { get; set; } - public bool Active { get; set; } - } + public class GotoPoint + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } + [StringLength(32)] + public string Description { get; set; } + public float X { get; set; } + public float Y { get; set; } + public float Z { get; set; } + public bool Active { get; set; } + } } diff --git a/ReallifeGamemode.Server/Entities/Group.cs b/ReallifeGamemode.Server/Entities/Group.cs index ff537168..4ec74086 100644 --- a/ReallifeGamemode.Server/Entities/Group.cs +++ b/ReallifeGamemode.Server/Entities/Group.cs @@ -10,42 +10,42 @@ using System.Text; namespace ReallifeGamemode.Server.Entities { - public class Group : IBankAccountOwner + public class Group : IBankAccountOwner + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } + + public string Name { get; set; } + + public IBankAccount GetBankAccount(DatabaseContext databaseContext = null) { - [Key] - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public int Id { get; set; } - - public string Name { get; set; } - - public IBankAccount GetBankAccount(DatabaseContext databaseContext = null) + GroupBankAccount bankAccount = null; + if (databaseContext == null) + { + using (databaseContext = new DatabaseContext()) { - GroupBankAccount bankAccount = null; - if (databaseContext == null) - { - using (databaseContext = new DatabaseContext()) - { - bankAccount = databaseContext.GroupBankAccounts.Include(g => g.Group).Where(g => g.Group == this).FirstOrDefault(); - } - } - else - { - bankAccount = databaseContext.GroupBankAccounts.Include(g => g.Group).Where(g => g.Group == this).FirstOrDefault(); - } - - if (bankAccount == null) - { - bankAccount = new GroupBankAccount - { - Group = this, - Balance = 0 - }; - - databaseContext.GroupBankAccounts.Add(bankAccount); - databaseContext.SaveChanges(); - } - - return bankAccount; + bankAccount = databaseContext.GroupBankAccounts.Include(g => g.Group).Where(g => g.Group == this).FirstOrDefault(); } + } + else + { + bankAccount = databaseContext.GroupBankAccounts.Include(g => g.Group).Where(g => g.Group == this).FirstOrDefault(); + } + + if (bankAccount == null) + { + bankAccount = new GroupBankAccount + { + Group = this, + Balance = 0 + }; + + databaseContext.GroupBankAccounts.Add(bankAccount); + databaseContext.SaveChanges(); + } + + return bankAccount; } + } } diff --git a/ReallifeGamemode.Server/Entities/GroupBankAccount.cs b/ReallifeGamemode.Server/Entities/GroupBankAccount.cs index 62d1e1ae..3b674e18 100644 --- a/ReallifeGamemode.Server/Entities/GroupBankAccount.cs +++ b/ReallifeGamemode.Server/Entities/GroupBankAccount.cs @@ -7,14 +7,14 @@ using System.Text; namespace ReallifeGamemode.Server.Entities { - public class GroupBankAccount : IBankAccount - { - [Key] - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public int Id { get; set; } + public class GroupBankAccount : IBankAccount + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } - public Group Group { get; set; } + public Group Group { get; set; } - public int Balance { get; set; } - } + public int Balance { get; set; } + } } diff --git a/ReallifeGamemode.Server/Entities/GroupVehicle.cs b/ReallifeGamemode.Server/Entities/GroupVehicle.cs index e89b849b..95791b53 100644 --- a/ReallifeGamemode.Server/Entities/GroupVehicle.cs +++ b/ReallifeGamemode.Server/Entities/GroupVehicle.cs @@ -8,17 +8,17 @@ using System.Text; namespace ReallifeGamemode.Server.Entities { - public class GroupVehicle : ServerVehicle + public class GroupVehicle : ServerVehicle + { + public Group Group { get; set; } + + [ForeignKey("Group")] + public int? GroupId { get; set; } + + public override string ToString() { - public Group Group { get; set; } - - [ForeignKey("Group")] - public int? GroupId { get; set; } - - public override string ToString() - { - using(var dbContext = new DatabaseContext()) - return "Gruppen Fahrzeug | Gruppe: " + dbContext.GroupVehicles.Include(g => g.Group).First(g => g.Id == this.Id).Group.Name; - } + using (var dbContext = new DatabaseContext()) + return "Gruppen Fahrzeug | Gruppe: " + dbContext.GroupVehicles.Include(g => g.Group).First(g => g.Id == this.Id).Group.Name; } + } } diff --git a/ReallifeGamemode.Server/Entities/House.cs b/ReallifeGamemode.Server/Entities/House.cs index 54565626..9cf55faf 100644 --- a/ReallifeGamemode.Server/Entities/House.cs +++ b/ReallifeGamemode.Server/Entities/House.cs @@ -9,28 +9,28 @@ using System.Text; namespace ReallifeGamemode.Server.Entities { - public class House - { - [Key] - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public int Id { get; set; } + public class House + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } - public string Type { get; set; } + public string Type { get; set; } - public int Price { get; set; } + public int Price { get; set; } - public float X { get; set; } - public float Y { get; set; } - public float Z { get; set; } + public float X { get; set; } + public float Y { get; set; } + public float Z { get; set; } - [NotMapped] - public Vector3 Position => new Vector3(X, Y, Z); + [NotMapped] + public Vector3 Position => new Vector3(X, Y, Z); - [ForeignKey("Owner")] - public int? OwnerId { get; set; } - public User Owner { get; set; } + [ForeignKey("Owner")] + public int? OwnerId { get; set; } + public User Owner { get; set; } - [NotMapped] - public Client User => Owner?.Client; - } + [NotMapped] + public Client User => Owner?.Client; + } } diff --git a/ReallifeGamemode.Server/Entities/Interior.cs b/ReallifeGamemode.Server/Entities/Interior.cs index aa96a080..53513724 100644 --- a/ReallifeGamemode.Server/Entities/Interior.cs +++ b/ReallifeGamemode.Server/Entities/Interior.cs @@ -8,68 +8,68 @@ using System.Text; namespace ReallifeGamemode.Server.Entities { - public class Interior + public class Interior + { + [NotMapped] + private Vector3 _enterPosition; + [NotMapped] + private Vector3 _exitPosition; + + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } + public string Name { get; set; } + + [Column("EnterPosition")] + public string EnterPositionStr { - [NotMapped] - private Vector3 _enterPosition; - [NotMapped] - private Vector3 _exitPosition; - - [Key] - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public int Id { get; set; } - public string Name { get; set; } - - [Column("EnterPosition")] - public string EnterPositionStr - { - get - { - return JsonConvert.SerializeObject(this._enterPosition); - } - set - { - this._enterPosition = JsonConvert.DeserializeObject(value); - } - } - - [Column("ExitPosition")] - public string ExitPositionStr - { - get - { - return JsonConvert.SerializeObject(this._exitPosition); - } - set - { - this._exitPosition = JsonConvert.DeserializeObject(value); - } - } - - [NotMapped] - public Vector3 EnterPosition - { - get - { - return this._enterPosition; - } - set - { - this._enterPosition = value; - } - } - - [NotMapped] - public Vector3 ExitPosition - { - get - { - return this._exitPosition; - } - set - { - this._exitPosition = value; - } - } + get + { + return JsonConvert.SerializeObject(this._enterPosition); + } + set + { + this._enterPosition = JsonConvert.DeserializeObject(value); + } } + + [Column("ExitPosition")] + public string ExitPositionStr + { + get + { + return JsonConvert.SerializeObject(this._exitPosition); + } + set + { + this._exitPosition = JsonConvert.DeserializeObject(value); + } + } + + [NotMapped] + public Vector3 EnterPosition + { + get + { + return this._enterPosition; + } + set + { + this._enterPosition = value; + } + } + + [NotMapped] + public Vector3 ExitPosition + { + get + { + return this._exitPosition; + } + set + { + this._exitPosition = value; + } + } + } } diff --git a/ReallifeGamemode.Server/Entities/JobVehicle.cs b/ReallifeGamemode.Server/Entities/JobVehicle.cs index 75d8bec2..7bcaab77 100644 --- a/ReallifeGamemode.Server/Entities/JobVehicle.cs +++ b/ReallifeGamemode.Server/Entities/JobVehicle.cs @@ -9,16 +9,16 @@ using System.Text; namespace ReallifeGamemode.Server.Entities { - public class JobVehicle : ServerVehicle + public class JobVehicle : ServerVehicle + { + public int JobId { get; set; } + + public JobBase GetJob() => JobManager.GetJob(JobId); + + public override string ToString() { - public int JobId { get; set; } - - public JobBase GetJob() => JobManager.GetJob(JobId); - - public override string ToString() - { - using (var dbContext = new DatabaseContext()) - return "Job Fahrzeug | Job: " + this.GetJob().Name; - } + using (var dbContext = new DatabaseContext()) + return "Job Fahrzeug | Job: " + this.GetJob().Name; } + } } diff --git a/ReallifeGamemode.Server/Entities/Logs/BankAccountTransactionHistory.cs b/ReallifeGamemode.Server/Entities/Logs/BankAccountTransactionHistory.cs index b078c631..ff47e816 100644 --- a/ReallifeGamemode.Server/Entities/Logs/BankAccountTransactionHistory.cs +++ b/ReallifeGamemode.Server/Entities/Logs/BankAccountTransactionHistory.cs @@ -12,25 +12,25 @@ using System.Text; namespace ReallifeGamemode.Server.Entities.Logs { - public class BankAccountTransactionHistory - { - [Key] - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public int Id { get; set; } + public class BankAccountTransactionHistory + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } - [StringLength(32)] - public string Sender { get; set; } - public int SenderBalance { get; set; } - public int MoneySent { get; set; } - [StringLength(32)] - public string Receiver { get; set; } - public int ReceiverBalance { get; set; } - public int NewSenderBalance { get; set; } - public int NewReceiverBalance { get; set; } - public int Fee { get; set; } - [StringLength(32)] - public string Origin { get; set; } - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public DateTime Timestamp { get; set; } - } + [StringLength(32)] + public string Sender { get; set; } + public int SenderBalance { get; set; } + public int MoneySent { get; set; } + [StringLength(32)] + public string Receiver { get; set; } + public int ReceiverBalance { get; set; } + public int NewSenderBalance { get; set; } + public int NewReceiverBalance { get; set; } + public int Fee { get; set; } + [StringLength(32)] + public string Origin { get; set; } + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public DateTime Timestamp { get; set; } + } } diff --git a/ReallifeGamemode.Server/Entities/Logs/Death.cs b/ReallifeGamemode.Server/Entities/Logs/Death.cs index 9e6a6afa..caaa4806 100644 --- a/ReallifeGamemode.Server/Entities/Logs/Death.cs +++ b/ReallifeGamemode.Server/Entities/Logs/Death.cs @@ -13,33 +13,33 @@ using ReallifeGamemode.Server.Entities; namespace ReallifeGamemode.Server.Entities.Logs { - public class Death - { - [Key] - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public int Id { get; set; } + public class Death + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } - [ForeignKey("Victim")] - public int VictimId { get; set; } - public User Victim { get; set; } + [ForeignKey("Victim")] + public int VictimId { get; set; } + public User Victim { get; set; } - [ForeignKey("Killer")] - public int? KillerId { get; set; } - public User Killer { get; set; } + [ForeignKey("Killer")] + public int? KillerId { get; set; } + public User Killer { get; set; } - public float VictimPositionX { get; set; } - public float VictimPositionY { get; set; } - public float VictimPositionZ { get; set; } - public float VictimHeading { get; set; } + public float VictimPositionX { get; set; } + public float VictimPositionY { get; set; } + public float VictimPositionZ { get; set; } + public float VictimHeading { get; set; } - public float KillerPositionX { get; set; } - public float KillerPositionY { get; set; } - public float KillerPositionZ { get; set; } - public float KillerHeading { get; set; } + public float KillerPositionX { get; set; } + public float KillerPositionY { get; set; } + public float KillerPositionZ { get; set; } + public float KillerHeading { get; set; } - [StringLength(64)] - public string CauseOfDeath { get; set; } - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public DateTime Timestamp { get; set; } - } + [StringLength(64)] + public string CauseOfDeath { get; set; } + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public DateTime Timestamp { get; set; } + } } diff --git a/ReallifeGamemode.Server/Entities/News.cs b/ReallifeGamemode.Server/Entities/News.cs index 0dae2e5e..20905116 100644 --- a/ReallifeGamemode.Server/Entities/News.cs +++ b/ReallifeGamemode.Server/Entities/News.cs @@ -6,19 +6,19 @@ using System.Text; namespace ReallifeGamemode.Server.Entities { - public class News - { - [Key] - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public int Id { get; set; } + public class News + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } - [ForeignKey("User")] - public int? UserId { get; set; } - public User User { get; set; } + [ForeignKey("User")] + public int? UserId { get; set; } + public User User { get; set; } - public string Caption { get; set; } - public string Content { get; set; } - public bool Active { get; set; } - public int Timestamp { get; set; } - } + public string Caption { get; set; } + public string Content { get; set; } + public bool Active { get; set; } + public int Timestamp { get; set; } + } } diff --git a/ReallifeGamemode.Server/Entities/Saves/SavedBlip.cs b/ReallifeGamemode.Server/Entities/Saves/SavedBlip.cs index 097d8be3..4f1bcb9d 100644 --- a/ReallifeGamemode.Server/Entities/Saves/SavedBlip.cs +++ b/ReallifeGamemode.Server/Entities/Saves/SavedBlip.cs @@ -12,27 +12,27 @@ using System.ComponentModel.DataAnnotations.Schema; namespace ReallifeGamemode.Server.Entities.Saves { - public class SavedBlip - { - [Key] - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public int Id { get; set; } - [Required] - public short Sprite { get; set; } - [Required] - public float PositionX { get; set; } - [Required] - public float PositionY { get; set; } - [Required] - public float PositionZ { get; set; } - public string Name { get; set; } - public float Scale { get; set; } - public byte Color { get; set; } - public byte Alpha { get; set; } - public float DrawDistance { get; set; } - public bool ShortRange { get; set; } - public float Rotation { get; set; } - public byte Dimension { get; set; } - public bool Active { get; set; } - } + public class SavedBlip + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } + [Required] + public short Sprite { get; set; } + [Required] + public float PositionX { get; set; } + [Required] + public float PositionY { get; set; } + [Required] + public float PositionZ { get; set; } + public string Name { get; set; } + public float Scale { get; set; } + public byte Color { get; set; } + public byte Alpha { get; set; } + public float DrawDistance { get; set; } + public bool ShortRange { get; set; } + public float Rotation { get; set; } + public byte Dimension { get; set; } + public bool Active { get; set; } + } } diff --git a/ReallifeGamemode.Server/Entities/Saves/SavedMarker.cs b/ReallifeGamemode.Server/Entities/Saves/SavedMarker.cs index 754ee86c..f69b88c8 100644 --- a/ReallifeGamemode.Server/Entities/Saves/SavedMarker.cs +++ b/ReallifeGamemode.Server/Entities/Saves/SavedMarker.cs @@ -12,28 +12,28 @@ using System.ComponentModel.DataAnnotations.Schema; namespace ReallifeGamemode.Server.Entities.Saves { - public class SavedMarker - { - [Key] - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public int Id { get; set; } - public byte Type { get; set; } - public float PositionX { get; set; } - public float PositionY { get; set; } - public float PositionZ { get; set; } - public float Scale { get; set; } - public float DirectionX { get; set; } - public float DirectionY { get; set; } - public float DirectionZ { get; set; } - public float RotationX { get; set; } - public float RotationY { get; set; } - public float RotationZ { get; set; } - public byte ColorR { get; set; } - public byte ColorG { get; set; } - public byte ColorB { get; set; } - public byte ColorA { get; set; } - public bool Visible { get; set; } - public byte Dimension { get; set; } - public bool Active { get; set; } - } + public class SavedMarker + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } + public byte Type { get; set; } + public float PositionX { get; set; } + public float PositionY { get; set; } + public float PositionZ { get; set; } + public float Scale { get; set; } + public float DirectionX { get; set; } + public float DirectionY { get; set; } + public float DirectionZ { get; set; } + public float RotationX { get; set; } + public float RotationY { get; set; } + public float RotationZ { get; set; } + public byte ColorR { get; set; } + public byte ColorG { get; set; } + public byte ColorB { get; set; } + public byte ColorA { get; set; } + public bool Visible { get; set; } + public byte Dimension { get; set; } + public bool Active { get; set; } + } } diff --git a/ReallifeGamemode.Server/Entities/Saves/SavedPed.cs b/ReallifeGamemode.Server/Entities/Saves/SavedPed.cs index e2cc3007..97c5d84d 100644 --- a/ReallifeGamemode.Server/Entities/Saves/SavedPed.cs +++ b/ReallifeGamemode.Server/Entities/Saves/SavedPed.cs @@ -12,17 +12,17 @@ using System.ComponentModel.DataAnnotations.Schema; namespace ReallifeGamemode.Server.Entities.Saves { - public class SavedPed - { - [Key] - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public int Id { get; set; } - public string HashModel { get; set; } - public float PositionX { get; set; } - public float PositionY { get; set; } - public float PositionZ { get; set; } - public float Heading { get; set; } - public byte Dimension { get; set; } - public bool Active { get; set; } - } + public class SavedPed + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } + public string HashModel { get; set; } + public float PositionX { get; set; } + public float PositionY { get; set; } + public float PositionZ { get; set; } + public float Heading { get; set; } + public byte Dimension { get; set; } + public bool Active { get; set; } + } } diff --git a/ReallifeGamemode.Server/Entities/Saves/SavedPickup.cs b/ReallifeGamemode.Server/Entities/Saves/SavedPickup.cs index 51a69247..c99d4788 100644 --- a/ReallifeGamemode.Server/Entities/Saves/SavedPickup.cs +++ b/ReallifeGamemode.Server/Entities/Saves/SavedPickup.cs @@ -12,21 +12,21 @@ using System.ComponentModel.DataAnnotations.Schema; namespace ReallifeGamemode.Server.Entities.Saves { - public class SavedPickup - { - [Key] - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public int Id { get; set; } - [StringLength(128)] - public float PositionX { get; set; } - public float PositionY { get; set; } - public float PositionZ { get; set; } - public float RotationX { get; set; } - public float RotationY { get; set; } - public float RotationZ { get; set; } - public bool Vehicle { get; set; } - public int RespawnTime { get; set; } - public byte Dimension { get; set; } - public bool Active { get; set; } - } + public class SavedPickup + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } + [StringLength(128)] + public float PositionX { get; set; } + public float PositionY { get; set; } + public float PositionZ { get; set; } + public float RotationX { get; set; } + public float RotationY { get; set; } + public float RotationZ { get; set; } + public bool Vehicle { get; set; } + public int RespawnTime { get; set; } + public byte Dimension { get; set; } + public bool Active { get; set; } + } } diff --git a/ReallifeGamemode.Server/Entities/Saves/SavedTextLabel.cs b/ReallifeGamemode.Server/Entities/Saves/SavedTextLabel.cs index 17bc73b4..65b3a0fb 100644 --- a/ReallifeGamemode.Server/Entities/Saves/SavedTextLabel.cs +++ b/ReallifeGamemode.Server/Entities/Saves/SavedTextLabel.cs @@ -12,27 +12,27 @@ using System.ComponentModel.DataAnnotations.Schema; namespace ReallifeGamemode.Server.Entities.Saves { - public class SavedTextLabel - { - [Key] - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public int Id { get; set; } - [Required] - public string Text { get; set; } - [Required] - public float PositionX { get; set; } - [Required] - public float PositionY { get; set; } - [Required] - public float PositionZ { get; set; } - public bool LOS { get; set; } - public byte Font { get; set; } - public float DrawDistance { get; set; } - public byte ColorR { get; set; } - public byte ColorG { get; set; } - public byte ColorB { get; set; } - public byte ColorA { get; set; } - public byte Dimension { get; set; } - public bool Active { get; set; } - } + public class SavedTextLabel + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } + [Required] + public string Text { get; set; } + [Required] + public float PositionX { get; set; } + [Required] + public float PositionY { get; set; } + [Required] + public float PositionZ { get; set; } + public bool LOS { get; set; } + public byte Font { get; set; } + public float DrawDistance { get; set; } + public byte ColorR { get; set; } + public byte ColorG { get; set; } + public byte ColorB { get; set; } + public byte ColorA { get; set; } + public byte Dimension { get; set; } + public bool Active { get; set; } + } } diff --git a/ReallifeGamemode.Server/Entities/Saves/SavedVehicle.cs b/ReallifeGamemode.Server/Entities/Saves/SavedVehicle.cs index 53e8e973..8aaed488 100644 --- a/ReallifeGamemode.Server/Entities/Saves/SavedVehicle.cs +++ b/ReallifeGamemode.Server/Entities/Saves/SavedVehicle.cs @@ -14,11 +14,11 @@ using ReallifeGamemode.Server.Entities; namespace ReallifeGamemode.Server.Entities.Saves { - public class SavedVehicle : ServerVehicle + public class SavedVehicle : ServerVehicle + { + public override string ToString() { - public override string ToString() - { - return "Gespeichertes Fahrzeug"; - } + return "Gespeichertes Fahrzeug"; } + } } diff --git a/ReallifeGamemode.Server/Entities/ServerVehicle.cs b/ReallifeGamemode.Server/Entities/ServerVehicle.cs index 1a09b92d..4c1679e2 100644 --- a/ReallifeGamemode.Server/Entities/ServerVehicle.cs +++ b/ReallifeGamemode.Server/Entities/ServerVehicle.cs @@ -7,85 +7,85 @@ using System.ComponentModel.DataAnnotations.Schema; namespace ReallifeGamemode.Server.Entities { - public abstract class ServerVehicle + public abstract class ServerVehicle + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } + + public VehicleHash Model { get; set; } + public float PositionX { get; set; } + public float PositionY { get; set; } + public float PositionZ { get; set; } + public float Heading { get; set; } + [StringLength(8)] + public string NumberPlate { get; set; } + public int PrimaryColor { get; set; } + public int SecondaryColor { get; set; } + public bool Locked { get; set; } + public bool Active { get; set; } + public float DistanceDriven { get; set; } + public float TankAmount { get; set; } + + [NotMapped] + public Vector3 Position => new Vector3(PositionX, PositionY, PositionZ); + + [NotMapped] + public Vehicle Vehicle => VehicleManager.GetVehicleFromServerVehicle(this); + + public Vehicle Spawn(Vehicle currentVeh = null) { - [Key] - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public int Id { get; set; } + if (currentVeh != null) VehicleManager.DeleteVehicle(currentVeh); + Vector3 position = this.Position; + uint model = (uint)this.Model; + float heading = this.Heading; + int c1 = this.PrimaryColor; + int c2 = this.SecondaryColor; + string np = this.NumberPlate; + Vehicle veh = NAPI.Vehicle.CreateVehicle(Model, position, heading, c1, c2, "", 255, false, false); + VehicleStreaming.SetEngineState(veh, false); + VehicleStreaming.SetLockStatus(veh, this.Locked); + VehicleManager.AddVehicle(this, veh); - public VehicleHash Model { get; set; } - public float PositionX { get; set; } - public float PositionY { get; set; } - public float PositionZ { get; set; } - public float Heading { get; set; } - [StringLength(8)] - public string NumberPlate { get; set; } - public int PrimaryColor { get; set; } - public int SecondaryColor { get; set; } - public bool Locked { get; set; } - public bool Active { get; set; } - public float DistanceDriven { get; set; } - public float TankAmount { get; set; } + veh.SetSharedData("drivenDistance", this.DistanceDriven); - [NotMapped] - public Vector3 Position => new Vector3(PositionX, PositionY, PositionZ); + string numberplate = $"{this.Id}"; - [NotMapped] - public Vehicle Vehicle => VehicleManager.GetVehicleFromServerVehicle(this); + if (this is FactionVehicle fV) + { + numberplate = $"F{fV.FactionId} " + numberplate; + } - public Vehicle Spawn(Vehicle currentVeh = null) - { - if (currentVeh != null) VehicleManager.DeleteVehicle(currentVeh); - Vector3 position = this.Position; - uint model = (uint)this.Model; - float heading = this.Heading; - int c1 = this.PrimaryColor; - int c2 = this.SecondaryColor; - string np = this.NumberPlate; - Vehicle veh = NAPI.Vehicle.CreateVehicle(Model, position, heading, c1, c2, "", 255, false, false); - VehicleStreaming.SetEngineState(veh, false); - VehicleStreaming.SetLockStatus(veh, this.Locked); - VehicleManager.AddVehicle(this, veh); + if (this is UserVehicle uV) + { + numberplate = $"U{uV.UserId} " + numberplate; + } - veh.SetSharedData("drivenDistance", this.DistanceDriven); + if (this is ShopVehicle sV) + { + numberplate = "Shop"; + VehicleStreaming.SetLockStatus(veh, false); + TextLabel label = NAPI.TextLabel.CreateTextLabel("SHOPVEHICLE\n" + "~g~" + sV.Price.ToMoneyString(), + veh.Position.Add(new Vector3(0, 0, 1.3)), 10.0f, 1f, 1, new Color(255, 255, 255)); - string numberplate = $"{this.Id}"; + veh.SetSharedData("shopVehicleTextLabel", label.Handle.Value); + } - if (this is FactionVehicle fV) - { - numberplate = $"F{fV.FactionId} " + numberplate; - } + if (this is GroupVehicle gV) + { + numberplate = $"G{gV.GroupId} " + numberplate; + } - if (this is UserVehicle uV) - { - numberplate = $"U{uV.UserId} " + numberplate; - } + if (this is JobVehicle jV) + { + numberplate = $"J{jV.JobId} " + numberplate; + } - if (this is ShopVehicle sV) - { - numberplate = "Shop"; - VehicleStreaming.SetLockStatus(veh, false); - TextLabel label = NAPI.TextLabel.CreateTextLabel("SHOPVEHICLE\n" + "~g~" + sV.Price.ToMoneyString(), - veh.Position.Add(new Vector3(0, 0, 1.3)), 10.0f, 1f, 1, new Color(255, 255, 255)); + veh.NumberPlate = numberplate; - veh.SetSharedData("shopVehicleTextLabel", label.Handle.Value); - } - - if (this is GroupVehicle gV) - { - numberplate = $"G{gV.GroupId} " + numberplate; - } - - if(this is JobVehicle jV) - { - numberplate = $"J{jV.JobId} " + numberplate; - } - - veh.NumberPlate = numberplate; - - return veh; - } - - public abstract override string ToString(); + return veh; } + + public abstract override string ToString(); + } } diff --git a/ReallifeGamemode.Server/Entities/ShopVehicles.cs b/ReallifeGamemode.Server/Entities/ShopVehicles.cs index ade17fb1..cb3dcfbc 100644 --- a/ReallifeGamemode.Server/Entities/ShopVehicles.cs +++ b/ReallifeGamemode.Server/Entities/ShopVehicles.cs @@ -16,15 +16,15 @@ using System.Text; namespace ReallifeGamemode.Server.Entities { - [Table("ShopVehicles")] - public class ShopVehicle : ServerVehicle - { - public int BusinessId { get; set; } - public int Price { get; set; } + [Table("ShopVehicles")] + public class ShopVehicle : ServerVehicle + { + public int BusinessId { get; set; } + public int Price { get; set; } - public override string ToString() - { - return "ShopVehicle | Shop: " + BusinessManager.GetBusiness(BusinessId).Name; - } + public override string ToString() + { + return "ShopVehicle | Shop: " + BusinessManager.GetBusiness(BusinessId).Name; } + } } diff --git a/ReallifeGamemode.Server/Entities/TuningGarage.cs b/ReallifeGamemode.Server/Entities/TuningGarage.cs index d48d20e7..39e86ec9 100644 --- a/ReallifeGamemode.Server/Entities/TuningGarage.cs +++ b/ReallifeGamemode.Server/Entities/TuningGarage.cs @@ -7,19 +7,19 @@ using System.Text; namespace ReallifeGamemode.Server.Entities { - public class TuningGarage - { - [Key] - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public int Id { get; set; } + public class TuningGarage + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } - public float X { get; set; } + public float X { get; set; } - public float Y { get; set; } + public float Y { get; set; } - public float Z { get; set; } + public float Z { get; set; } - [NotMapped] - public Vector3 Position => new Vector3(X, Y, Z); - } + [NotMapped] + public Vector3 Position => new Vector3(X, Y, Z); + } } diff --git a/ReallifeGamemode.Server/Entities/User.cs b/ReallifeGamemode.Server/Entities/User.cs index 0162c69a..26d50619 100644 --- a/ReallifeGamemode.Server/Entities/User.cs +++ b/ReallifeGamemode.Server/Entities/User.cs @@ -17,101 +17,101 @@ using System.Linq; namespace ReallifeGamemode.Server.Entities { - public class User : IBankAccountOwner + public class User : IBankAccountOwner + { + [NotMapped] + private int _wanteds; + + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } + [StringLength(32)] + public string Name { get; set; } + [StringLength(32)] + public string SocialClubName { get; set; } + [StringLength(64)] + public string Password { get; set; } + public int LogUserId { get; set; } + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public DateTime RegistrationDate { get; set; } + + [EmailAddress] + [StringLength(64)] + public string Email { get; set; } + public AdminLevel AdminLevel { get; set; } + + public bool Dead { get; set; } + public int Handmoney { get; set; } + + public float PositionX { get; set; } + public float PositionY { get; set; } + public float PositionZ { get; set; } + + [ForeignKey("Character")] + public int? CharacterId { get; set; } + public Character Character { get; set; } + + [ForeignKey("Ban")] + public int? BanId { get; set; } + public Ban Ban { get; set; } + + public int? BusinessId { get; set; } + + public int? FactionId { get; set; } + public Faction Faction { get; set; } + + public bool FactionLeader { get; set; } + + public int? FactionRankId { get; set; } + public FactionRank FactionRank { get; set; } + + public Group Group { get; set; } + + public GroupRank GroupRank { get; set; } + + [ForeignKey("House")] + public int? HouseId { get; set; } + public House House { get; set; } + + public int? JobId { get; set; } + + public int Wanteds { - [NotMapped] - private int _wanteds; - - [Key] - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public int Id { get; set; } - [StringLength(32)] - public string Name { get; set; } - [StringLength(32)] - public string SocialClubName { get; set; } - [StringLength(64)] - public string Password { get; set; } - public int LogUserId { get; set; } - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public DateTime RegistrationDate { get; set; } - - [EmailAddress] - [StringLength(64)] - public string Email { get; set; } - public AdminLevel AdminLevel { get; set; } - - public bool Dead { get; set; } - public int Handmoney { get; set; } - - public float PositionX { get; set; } - public float PositionY { get; set; } - public float PositionZ { get; set; } - - [ForeignKey("Character")] - public int? CharacterId { get; set; } - public Character Character { get; set; } - - [ForeignKey("Ban")] - public int? BanId { get; set; } - public Ban Ban { get; set; } - - public int? BusinessId { get; set; } - - public int? FactionId { get; set; } - public Faction Faction { get; set; } - - public bool FactionLeader { get; set; } - - public int? FactionRankId { get; set; } - public FactionRank FactionRank { get; set; } - - public Group Group { get; set; } - - public GroupRank GroupRank { get; set; } - - [ForeignKey("House")] - public int? HouseId { get; set; } - public House House { get; set; } - - public int? JobId { get; set; } - - public int Wanteds - { - get => _wanteds; - set - { - this._wanteds = value; - Client.TriggerEvent("SERVER:SetWanteds", value); - } - } - - public int Wage { get; set; } - - public int JailTime { get; set; } - - public bool IsAdmin(AdminLevel level) => AdminLevel >= level; - - public IBankAccount GetBankAccount(DatabaseContext databaseContext = null) - { - if (databaseContext == null) - { - using (databaseContext = new DatabaseContext()) - { - return databaseContext.UserBankAccounts.FirstOrDefault(u => u.UserId == this.Id); - } - } - else - { - return databaseContext.UserBankAccounts.FirstOrDefault(u => u.UserId == this.Id); - } - } - - [NotMapped] - public Client Client - { - get => NAPI.Pools.GetAllPlayers().Where(c => c.Name.ToLower() == this.Name.ToLower()).FirstOrDefault(); - } - - + get => _wanteds; + set + { + this._wanteds = value; + Client.TriggerEvent("SERVER:SetWanteds", value); + } } + + public int Wage { get; set; } + + public int JailTime { get; set; } + + public bool IsAdmin(AdminLevel level) => AdminLevel >= level; + + public IBankAccount GetBankAccount(DatabaseContext databaseContext = null) + { + if (databaseContext == null) + { + using (databaseContext = new DatabaseContext()) + { + return databaseContext.UserBankAccounts.FirstOrDefault(u => u.UserId == this.Id); + } + } + else + { + return databaseContext.UserBankAccounts.FirstOrDefault(u => u.UserId == this.Id); + } + } + + [NotMapped] + public Client Client + { + get => NAPI.Pools.GetAllPlayers().Where(c => c.Name.ToLower() == this.Name.ToLower()).FirstOrDefault(); + } + + + } } diff --git a/ReallifeGamemode.Server/Entities/UserBankAccount.cs b/ReallifeGamemode.Server/Entities/UserBankAccount.cs index 72073afa..7a4d89fe 100644 --- a/ReallifeGamemode.Server/Entities/UserBankAccount.cs +++ b/ReallifeGamemode.Server/Entities/UserBankAccount.cs @@ -13,33 +13,33 @@ using System.Linq; namespace ReallifeGamemode.Server.Entities { - public class UserBankAccount : IBankAccount - { - [NotMapped] - private int _balance; + public class UserBankAccount : IBankAccount + { + [NotMapped] + private int _balance; - [Key] - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public int Id { get; set; } - [ForeignKey("User")] - public int UserId { get; set; } - public User User { get; set; } - [StringLength(12)] - public string Bic { get; set; } - [StringLength(32)] - public string Iban { get; set; } - public int Balance + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } + [ForeignKey("User")] + public int UserId { get; set; } + public User User { get; set; } + [StringLength(12)] + public string Bic { get; set; } + [StringLength(32)] + public string Iban { get; set; } + public int Balance + { + get => _balance; + set + { + _balance = value; + using (var dbContext = new DatabaseContext()) { - get => _balance; - set - { - _balance = value; - using (var dbContext = new DatabaseContext()) - { - ClientService.GetClientByNameOrId(dbContext.Users.First(u => u.Id == UserId).Name).TriggerEvent("updateMoney", value); - } - } + ClientService.GetClientByNameOrId(dbContext.Users.First(u => u.Id == UserId).Name).TriggerEvent("updateMoney", value); } - public bool Active { get; set; } + } } + public bool Active { get; set; } + } } \ No newline at end of file diff --git a/ReallifeGamemode.Server/Entities/UserItem.cs b/ReallifeGamemode.Server/Entities/UserItem.cs index d463511d..1fc4fa1e 100644 --- a/ReallifeGamemode.Server/Entities/UserItem.cs +++ b/ReallifeGamemode.Server/Entities/UserItem.cs @@ -11,27 +11,27 @@ using System.Linq; namespace ReallifeGamemode.Server.Entities { - public class UserItem + public class UserItem + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } + + public int ItemId { get; set; } + + [ForeignKey("User")] + public int UserId { get; set; } + public User User { get; set; } + + public int Amount { get; set; } + public int Slot { get; set; } + + public User GetUser() { - [Key] - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public int Id { get; set; } - - public int ItemId { get; set; } - - [ForeignKey("User")] - public int UserId { get; set; } - public User User { get; set; } - - public int Amount { get; set; } - public int Slot { get; set; } - - public User GetUser() - { - using (var dbContext = new DatabaseContext()) - { - return dbContext.Users.FirstOrDefault(u => u.Id == UserId); - } - } + using (var dbContext = new DatabaseContext()) + { + return dbContext.Users.FirstOrDefault(u => u.Id == UserId); + } } + } } \ No newline at end of file diff --git a/ReallifeGamemode.Server/Entities/UserVehicle.cs b/ReallifeGamemode.Server/Entities/UserVehicle.cs index a262af13..334a625c 100644 --- a/ReallifeGamemode.Server/Entities/UserVehicle.cs +++ b/ReallifeGamemode.Server/Entities/UserVehicle.cs @@ -10,31 +10,31 @@ using System.Linq; namespace ReallifeGamemode.Server.Entities { - [Table("UserVehicles")] - public class UserVehicle : ServerVehicle + [Table("UserVehicles")] + public class UserVehicle : ServerVehicle + { + [ForeignKey("User")] + public int UserId { get; set; } + public User User { get; set; } + + public override string ToString() { - [ForeignKey("User")] - public int UserId { get; set; } - public User User { get; set; } - - public override string ToString() - { - return "Spieler Fahrzeug | Besitzer: " + GetOwner().Name; - } - - public User GetOwner(DatabaseContext dbContext = null) - { - if (dbContext == null) - { - using (dbContext = new DatabaseContext()) - { - return dbContext.Users.FirstOrDefault(u => u.Id == UserId); - } - } - else - { - return dbContext.Users.FirstOrDefault(u => u.Id == UserId); - } - } + return "Spieler Fahrzeug | Besitzer: " + GetOwner().Name; } + + public User GetOwner(DatabaseContext dbContext = null) + { + if (dbContext == null) + { + using (dbContext = new DatabaseContext()) + { + return dbContext.Users.FirstOrDefault(u => u.Id == UserId); + } + } + else + { + return dbContext.Users.FirstOrDefault(u => u.Id == UserId); + } + } + } } diff --git a/ReallifeGamemode.Server/Entities/VehicleMod.cs b/ReallifeGamemode.Server/Entities/VehicleMod.cs index 84d485da..8bd6fcc5 100644 --- a/ReallifeGamemode.Server/Entities/VehicleMod.cs +++ b/ReallifeGamemode.Server/Entities/VehicleMod.cs @@ -6,17 +6,17 @@ using System.Text; namespace ReallifeGamemode.Server.Entities { - public class VehicleMod - { - [Key] - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public int Id { get; set; } + public class VehicleMod + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } - [ForeignKey("Vehicle")] - public int ServerVehicleId { get; set; } - public ServerVehicle Vehicle { get; set; } + [ForeignKey("Vehicle")] + public int ServerVehicleId { get; set; } + public ServerVehicle Vehicle { get; set; } - public int Slot { get; set; } - public int ModId { get; set; } - } + public int Slot { get; set; } + public int ModId { get; set; } + } } diff --git a/ReallifeGamemode.Server/Entities/Whitelist.cs b/ReallifeGamemode.Server/Entities/Whitelist.cs index 65962ff4..9008c790 100644 --- a/ReallifeGamemode.Server/Entities/Whitelist.cs +++ b/ReallifeGamemode.Server/Entities/Whitelist.cs @@ -6,11 +6,11 @@ using System.Text; namespace ReallifeGamemode.Server.Entities { - public class Whitelist - { - [Key] - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - public int Id { get; set; } - public string SocialClubName { get; set; } - } + public class Whitelist + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } + public string SocialClubName { get; set; } + } } diff --git a/ReallifeGamemode.Server/Events/Chat.cs b/ReallifeGamemode.Server/Events/Chat.cs index 5269b9cc..c493bd74 100644 --- a/ReallifeGamemode.Server/Events/Chat.cs +++ b/ReallifeGamemode.Server/Events/Chat.cs @@ -4,17 +4,17 @@ using System.Text.RegularExpressions; namespace ReallifeGamemode.Server.Events { - public class Chat : Script + public class Chat : Script + { + [ServerEvent(Event.ChatMessage)] + public void ChatEvent(Client player, string message) { - [ServerEvent(Event.ChatMessage)] - public void ChatEvent(Client player, string message) - { - string serverMsg = Regex.Replace(message, "(~[a-zA-Z]~)|(!{(.*)})", ""); - if (serverMsg.Trim().Length == 0) return; - NAPI.Player.GetPlayersInRadiusOfPlayer(10, player).ForEach(p => - { - ChatService.SendMessage(p, $"{player.Name} sagt: {serverMsg}"); - }); - } + string serverMsg = Regex.Replace(message, "(~[a-zA-Z]~)|(!{(.*)})", ""); + if (serverMsg.Trim().Length == 0) return; + NAPI.Player.GetPlayersInRadiusOfPlayer(10, player).ForEach(p => + { + ChatService.SendMessage(p, $"{player.Name} sagt: {serverMsg}"); + }); } + } } \ No newline at end of file diff --git a/ReallifeGamemode.Server/Events/Connect.cs b/ReallifeGamemode.Server/Events/Connect.cs index 1d48bf46..f49508bd 100644 --- a/ReallifeGamemode.Server/Events/Connect.cs +++ b/ReallifeGamemode.Server/Events/Connect.cs @@ -14,78 +14,78 @@ using ReallifeGamemode.Server.Wanted; namespace ReallifeGamemode.Server.Events { - class Connect : Script + class Connect : Script + { + [ServerEvent(Event.PlayerConnected)] + public void OnPlayerConnected(Client player) { - [ServerEvent(Event.PlayerConnected)] - public void OnPlayerConnected(Client player) + player.SetData("isLoggedIn", false); + player.Position = new Vector3(-1883.736, -781.4911, -10); + player.FreezePosition = true; + + using (var dbContext = new DatabaseContext()) + { + if (!dbContext.WhitelistEntries.Any(w => w.SocialClubName.ToLower() == player.SocialClubName.ToLower())) { - player.SetData("isLoggedIn", false); - player.Position = new Vector3(-1883.736, -781.4911, -10); - player.FreezePosition = true; + string msg2 = "~m~*** " + player.Name + "[" + player.SocialClubName + "] (" + player.Address + ") hat versucht, sich einzuloggen, steht aber nicht auf der Whitelist."; + ChatService.BroadcastAdmin(msg2, AdminLevel.ADMIN); - using (var dbContext = new DatabaseContext()) - { - if (!dbContext.WhitelistEntries.Any(w => w.SocialClubName.ToLower() == player.SocialClubName.ToLower())) - { - string msg2 = "~m~*** " + player.Name + "[" + player.SocialClubName + "] (" + player.Address + ") hat versucht, sich einzuloggen, steht aber nicht auf der Whitelist."; - ChatService.BroadcastAdmin(msg2, AdminLevel.ADMIN); + NAPI.Util.ConsoleOutput(player.Name + " tried to join without whitelist entry"); - NAPI.Util.ConsoleOutput(player.Name + " tried to join without whitelist entry"); + ChatService.SendMessage(player, "~m~Du stehst nicht auf der Whitelist"); - ChatService.SendMessage(player, "~m~Du stehst nicht auf der Whitelist"); - - player.Kick(); - return; - } - } - - if (IsPlayerBanned(player)) return; - player.TriggerEvent("SERVER:Login_ShowBrowser"); - string msg = "~m~*** " + player.Name + " [" + player.SocialClubName + "] [ID:" + player.Handle.Value + "] (" + player.Address + ")"; - ChatService.BroadcastAdmin(msg, AdminLevel.ADMIN); - + player.Kick(); + return; } + } - private bool IsPlayerBanned(Client player) - { - using (var dbContext = new DatabaseContext()) - { - var user = dbContext.Users.SingleOrDefault(b => b.Name == player.Name); - if (user == null) - { - return false; - } - if (user.BanId != null) - { - var dt = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); - var bannedUser = dbContext.Bans.SingleOrDefault(u => u.Id == user.BanId); - if (bannedUser.Applied == bannedUser.UntilDateTime) - { - ChatService.SendMessage(player, "!{#FF4040}Du wurdest permanent gebannt! [" + bannedUser.Reason + "]"); - player.Kick(); - return true; - } - else - { - var timeStamp = bannedUser.UntilDateTime; - int unixTimestamp = (int)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; + if (IsPlayerBanned(player)) return; + player.TriggerEvent("SERVER:Login_ShowBrowser"); + string msg = "~m~*** " + player.Name + " [" + player.SocialClubName + "] [ID:" + player.Handle.Value + "] (" + player.Address + ")"; + ChatService.BroadcastAdmin(msg, AdminLevel.ADMIN); - if (timeStamp > unixTimestamp) - { - ChatService.SendMessage(player, "Du bist noch bis zum !{#FF4040}" + dt.AddSeconds(timeStamp).ToLocalTime() + " Uhr ~s~gebannt. [" + bannedUser.Reason + "]"); - player.Kick(); - return true; - } - else - { - user.BanId = null; - dbContext.SaveChanges(); - return false; - } - } - } - return false; - } - } } + + private bool IsPlayerBanned(Client player) + { + using (var dbContext = new DatabaseContext()) + { + var user = dbContext.Users.SingleOrDefault(b => b.Name == player.Name); + if (user == null) + { + return false; + } + if (user.BanId != null) + { + var dt = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); + var bannedUser = dbContext.Bans.SingleOrDefault(u => u.Id == user.BanId); + if (bannedUser.Applied == bannedUser.UntilDateTime) + { + ChatService.SendMessage(player, "!{#FF4040}Du wurdest permanent gebannt! [" + bannedUser.Reason + "]"); + player.Kick(); + return true; + } + else + { + var timeStamp = bannedUser.UntilDateTime; + int unixTimestamp = (int)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; + + if (timeStamp > unixTimestamp) + { + ChatService.SendMessage(player, "Du bist noch bis zum !{#FF4040}" + dt.AddSeconds(timeStamp).ToLocalTime() + " Uhr ~s~gebannt. [" + bannedUser.Reason + "]"); + player.Kick(); + return true; + } + else + { + user.BanId = null; + dbContext.SaveChanges(); + return false; + } + } + } + return false; + } + } + } } \ No newline at end of file diff --git a/ReallifeGamemode.Server/Events/Death.cs b/ReallifeGamemode.Server/Events/Death.cs index 5fcaeb94..a4ec7bda 100644 --- a/ReallifeGamemode.Server/Events/Death.cs +++ b/ReallifeGamemode.Server/Events/Death.cs @@ -15,112 +15,112 @@ using ReallifeGamemode.Server.Wanted; namespace ReallifeGamemode.Server.Events { - public class Death : Script + public class Death : Script + { + [ServerEvent(Event.PlayerDeath)] + public void OnPlayerDeath(Client player, Client killer, uint reason) { - [ServerEvent(Event.PlayerDeath)] - public void OnPlayerDeath(Client player, Client killer, uint reason) + if (!player.IsLoggedIn()) player.Kick(); + player.SetData("isDead", true); + + if (player.GetUser().IsAdmin(AdminLevel.ADMIN) == true) + { + player.TriggerEvent("startDeathTimer", true); + } + else + { + player.TriggerEvent("startDeathTimer", false); + } + + //var dutyMedics = 0; + //var allPlayers = NAPI.Pools.GetAllPlayers(); + + //foreach (Client medic in allPlayers) + //{ + // if (medic.GetUser()?.FactionId == 2) + // { + // dutyMedics++; + // } + //} + //player.TriggerEvent("medicInfo", dutyMedics); + + //TODO: Zum Full Release entfernen + ChatService.SendMessage(player, "Du bist durch " + killer.Name + " gestorben: " + reason.ToString()); + + int? killerId; + float killerPosX; + float killerPosY; + float killerPosZ; + float killerHeading; + + if (killer.IsNull) + { + killerId = null; + killerPosX = -1; + killerPosY = -1; + killerPosZ = -1; + killerHeading = -1; + } + else + { + killerId = killer.GetUser().Id; + killerPosX = killer.Position.X; + killerPosY = killer.Position.Y; + killerPosZ = killer.Position.Z; + killerHeading = killer.Heading; + if (player != killer) { - if (!player.IsLoggedIn()) player.Kick(); - player.SetData("isDead", true); - - if (player.GetUser().IsAdmin(AdminLevel.ADMIN) == true) - { - player.TriggerEvent("startDeathTimer", true); - } - else - { - player.TriggerEvent("startDeathTimer", false); - } - - //var dutyMedics = 0; - //var allPlayers = NAPI.Pools.GetAllPlayers(); - - //foreach (Client medic in allPlayers) - //{ - // if (medic.GetUser()?.FactionId == 2) - // { - // dutyMedics++; - // } - //} - //player.TriggerEvent("medicInfo", dutyMedics); - - //TODO: Zum Full Release entfernen - ChatService.SendMessage(player, "Du bist durch " + killer.Name + " gestorben: " + reason.ToString()); - - int? killerId; - float killerPosX; - float killerPosY; - float killerPosZ; - float killerHeading; - - if (killer.IsNull) - { - killerId = null; - killerPosX = -1; - killerPosY = -1; - killerPosZ = -1; - killerHeading = -1; - } - else - { - killerId = killer.GetUser().Id; - killerPosX = killer.Position.X; - killerPosY = killer.Position.Y; - killerPosZ = killer.Position.Z; - killerHeading = killer.Heading; - if (player != killer) - { - string message = "~y~[HINWEIS]: " + killer.Name + " hat " + player.Name + " getötet (" + NAPI.Player.GetPlayerCurrentWeapon(killer) + ")"; - ChatService.BroadcastAdmin(message, AdminLevel.ADMIN); - } - } - - //JailTime.cs - Jail.Check_PutBehindBars(player); - - - //MEDIC AUFTRAG - MedicTask reviveTask = new MedicTask() - { - Victim = player.Name, - Position = player.Position, - CauseOfDeath = reason.ToString(), - Caller = null, - Description = "Gestorben", - Time = DateTime.Now, - Type = MedicTaskType.REVIVE, - MedicName = "none" - }; - Medic.AddTaskToList(reviveTask); - - //TODO PICTURE NOTIFICATION + SOUND für Medics - - using (var userDeath = new DatabaseContext()) - { - var dead = new Entities.Logs.Death - { - VictimId = player.GetUser().Id, - KillerId = killerId, - KillerPositionX = killerPosX, - KillerPositionY = killerPosY, - KillerPositionZ = killerPosZ, - KillerHeading = killerHeading, - VictimPositionX = player.Position.X, - VictimPositionY = player.Position.Y, - VictimPositionZ = player.Position.Z, - VictimHeading = player.Heading, - CauseOfDeath = reason.ToString() - }; - userDeath.DeathLogs.Add(dead); - userDeath.SaveChanges(); - } + string message = "~y~[HINWEIS]: " + killer.Name + " hat " + player.Name + " getötet (" + NAPI.Player.GetPlayerCurrentWeapon(killer) + ")"; + ChatService.BroadcastAdmin(message, AdminLevel.ADMIN); } - [RemoteEvent("RespawnPlayerAtHospital")] - public void RespawnPlayerAtHospital(Client player) + } + + //JailTime.cs + Jail.Check_PutBehindBars(player); + + + //MEDIC AUFTRAG + MedicTask reviveTask = new MedicTask() + { + Victim = player.Name, + Position = player.Position, + CauseOfDeath = reason.ToString(), + Caller = null, + Description = "Gestorben", + Time = DateTime.Now, + Type = MedicTaskType.REVIVE, + MedicName = "none" + }; + Medic.AddTaskToList(reviveTask); + + //TODO PICTURE NOTIFICATION + SOUND für Medics + + using (var userDeath = new DatabaseContext()) + { + var dead = new Entities.Logs.Death { - player.SetData("isDead", false); - player.RemoveAllWeapons(); - NAPI.Player.SpawnPlayer(player, new Vector3(-495.45, -336.33, 34.5)); - } + VictimId = player.GetUser().Id, + KillerId = killerId, + KillerPositionX = killerPosX, + KillerPositionY = killerPosY, + KillerPositionZ = killerPosZ, + KillerHeading = killerHeading, + VictimPositionX = player.Position.X, + VictimPositionY = player.Position.Y, + VictimPositionZ = player.Position.Z, + VictimHeading = player.Heading, + CauseOfDeath = reason.ToString() + }; + userDeath.DeathLogs.Add(dead); + userDeath.SaveChanges(); + } } + [RemoteEvent("RespawnPlayerAtHospital")] + public void RespawnPlayerAtHospital(Client player) + { + player.SetData("isDead", false); + player.RemoveAllWeapons(); + NAPI.Player.SpawnPlayer(player, new Vector3(-495.45, -336.33, 34.5)); + } + } } diff --git a/ReallifeGamemode.Server/Events/Disconnect.cs b/ReallifeGamemode.Server/Events/Disconnect.cs index 709b2abe..990fd80e 100644 --- a/ReallifeGamemode.Server/Events/Disconnect.cs +++ b/ReallifeGamemode.Server/Events/Disconnect.cs @@ -16,41 +16,41 @@ using ReallifeGamemode.Server.Models; namespace ReallifeGamemode.Server.Events { - public class Disconnect : Script + public class Disconnect : Script + { + [ServerEvent(Event.PlayerDisconnected)] + public void OnPlayerDisconnected(Client player, DisconnectionType type, string reason) { - [ServerEvent(Event.PlayerDisconnected)] - public void OnPlayerDisconnected(Client player, DisconnectionType type, string reason) - { - if (!player.IsLoggedIn()) return; + if (!player.IsLoggedIn()) return; - if (type == DisconnectionType.Left) - { - NAPI.Util.ConsoleOutput(player.Name + " left"); - } - if (type == DisconnectionType.Kicked) - { - NAPI.Util.ConsoleOutput(player.Name + " kicked"); - } - if (type == DisconnectionType.Timeout) - { - NAPI.Util.ConsoleOutput(player.Name + " Timeoutet"); - } + if (type == DisconnectionType.Left) + { + NAPI.Util.ConsoleOutput(player.Name + " left"); + } + if (type == DisconnectionType.Kicked) + { + NAPI.Util.ConsoleOutput(player.Name + " kicked"); + } + if (type == DisconnectionType.Timeout) + { + NAPI.Util.ConsoleOutput(player.Name + " Timeoutet"); + } - JobBase job = JobManager.GetJob(player.GetUser().JobId ?? -1); - if (job != null) job.StopJob(player, true); + JobBase job = JobManager.GetJob(player.GetUser().JobId ?? -1); + if (job != null) job.StopJob(player, true); - using (var saveUser = new DatabaseContext()) - { - var user = player.GetUser(saveUser); - Vector3 pos = player.Position; + using (var saveUser = new DatabaseContext()) + { + var user = player.GetUser(saveUser); + Vector3 pos = player.Position; - user.PositionX = pos.X; - user.PositionY = pos.Y; - user.PositionZ = pos.Z; - saveUser.SaveChanges(); - user.Dead = player.HasData("isDead") ? (bool)player.GetData("isDead") : false; - } - player.SetData("isLoggedIn", false); - } + user.PositionX = pos.X; + user.PositionY = pos.Y; + user.PositionZ = pos.Z; + saveUser.SaveChanges(); + user.Dead = player.HasData("isDead") ? (bool)player.GetData("isDead") : false; + } + player.SetData("isLoggedIn", false); } + } } \ No newline at end of file diff --git a/ReallifeGamemode.Server/Events/EnterVehicleAttempt.cs b/ReallifeGamemode.Server/Events/EnterVehicleAttempt.cs index 958c293e..43133258 100644 --- a/ReallifeGamemode.Server/Events/EnterVehicleAttempt.cs +++ b/ReallifeGamemode.Server/Events/EnterVehicleAttempt.cs @@ -8,28 +8,28 @@ using ReallifeGamemode.Server.Extensions; namespace ReallifeGamemode.Server.Events { - public class EnterVehicleAttempt : Script + public class EnterVehicleAttempt : Script + { + [ServerEvent(Event.PlayerEnterVehicleAttempt)] + public void OnPlayerEnterVehicleAttempt(Client player, Vehicle vehicle, sbyte seat) { - [ServerEvent(Event.PlayerEnterVehicleAttempt)] - public void OnPlayerEnterVehicleAttempt(Client player, Vehicle vehicle, sbyte seat) + if ((VehicleHash)vehicle.Model == VehicleHash.Dune3) + { + if (seat == 1) seat = 0; + else if (seat == 0) seat = 1; + } + + if (seat != 0) return; + + if (vehicle.GetServerVehicle() is FactionVehicle veh) + { + if (veh.FactionId != player.GetUser().FactionId) { - if ((VehicleHash)vehicle.Model == VehicleHash.Dune3) - { - if (seat == 1) seat = 0; - else if (seat == 0) seat = 1; - } - - if (seat != 0) return; - - if (vehicle.GetServerVehicle() is FactionVehicle veh) - { - if (veh.FactionId != player.GetUser().FactionId) - { - player.StopAnimation(); - player.SendNotification("~r~Du darfst dieses Fahrzeug nicht benutzen!", true); - return; - } - } + player.StopAnimation(); + player.SendNotification("~r~Du darfst dieses Fahrzeug nicht benutzen!", true); + return; } + } } + } } diff --git a/ReallifeGamemode.Server/Events/Faction.cs b/ReallifeGamemode.Server/Events/Faction.cs index 420bfc2f..e818dc5e 100644 --- a/ReallifeGamemode.Server/Events/Faction.cs +++ b/ReallifeGamemode.Server/Events/Faction.cs @@ -9,60 +9,60 @@ using System.Linq; namespace ReallifeGamemode.Server.Events { - class Faction : Script + class Faction : Script + { + [RemoteEvent("OnFactionRanksEdit")] + public void OnFactionRanksEdit(Client player, string jsonData) { - [RemoteEvent("OnFactionRanksEdit")] - public void OnFactionRanksEdit(Client player, string jsonData) + FactionRankHelper helper = JsonConvert.DeserializeObject(jsonData); + using (var context = new DatabaseContext()) + { + Entities.Faction f = context.Factions.FirstOrDefault(x => x.Id == helper.FactionId); + if (f == null) { - FactionRankHelper helper = JsonConvert.DeserializeObject(jsonData); - using (var context = new DatabaseContext()) - { - Entities.Faction f = context.Factions.FirstOrDefault(x => x.Id == helper.FactionId); - if (f == null) - { - ChatService.ErrorMessage(player, "Bei der Bearbeitung der Ränge ist ein Fehler aufgetreten: Die Fraktion existiert nicht"); - return; - } - - List ranks = helper.Ranks; - int length = ranks.Count; - - List factionRanks = context.FactionRanks.ToList().FindAll(fR => fR.FactionId == f.Id); - - List found = new List(); - - for (int i = 0; i < ranks.Count; i++) - { - Rank newRank = ranks[i]; - if (newRank.Id == 0) - { - context.FactionRanks.Add(new FactionRank - { - RankName = newRank.Name, - FactionId = f.Id, - Order = length - i - }); - } - else - { - FactionRank factionRank = factionRanks.Find(r => r.Id == newRank.Id); - factionRank.RankName = newRank.Name; - factionRank.Order = length - i; - found.Add(factionRank.Id); - } - } - - for (int i = 0; i < factionRanks.Count; i++) - { - if (!found.Contains(factionRanks[i].Id)) - { - context.FactionRanks.Remove(factionRanks[i]); - } - } - - ChatService.SendMessage(player, "~g~Die Ränge wurden erfolgreich gespeichert."); - context.SaveChanges(); - } + ChatService.ErrorMessage(player, "Bei der Bearbeitung der Ränge ist ein Fehler aufgetreten: Die Fraktion existiert nicht"); + return; } + + List ranks = helper.Ranks; + int length = ranks.Count; + + List factionRanks = context.FactionRanks.ToList().FindAll(fR => fR.FactionId == f.Id); + + List found = new List(); + + for (int i = 0; i < ranks.Count; i++) + { + Rank newRank = ranks[i]; + if (newRank.Id == 0) + { + context.FactionRanks.Add(new FactionRank + { + RankName = newRank.Name, + FactionId = f.Id, + Order = length - i + }); + } + else + { + FactionRank factionRank = factionRanks.Find(r => r.Id == newRank.Id); + factionRank.RankName = newRank.Name; + factionRank.Order = length - i; + found.Add(factionRank.Id); + } + } + + for (int i = 0; i < factionRanks.Count; i++) + { + if (!found.Contains(factionRanks[i].Id)) + { + context.FactionRanks.Remove(factionRanks[i]); + } + } + + ChatService.SendMessage(player, "~g~Die Ränge wurden erfolgreich gespeichert."); + context.SaveChanges(); + } } + } } diff --git a/ReallifeGamemode.Server/Events/Key.cs b/ReallifeGamemode.Server/Events/Key.cs index 950f413f..2002dedd 100644 --- a/ReallifeGamemode.Server/Events/Key.cs +++ b/ReallifeGamemode.Server/Events/Key.cs @@ -19,290 +19,290 @@ using ReallifeGamemode.Server.Util; namespace ReallifeGamemode.Server.Events { - public class Key : Script + public class Key : Script + { + [RemoteEvent("keyPress:NUM2")] + public void KeyPressNUM2(Client player) { - [RemoteEvent("keyPress:NUM2")] - public void KeyPressNUM2(Client player) + if (!player.IsLoggedIn()) return; + if (player.GetData("editmode") == true && player.GetUser().IsAdmin(AdminLevel.HEADADMIN) == true) + { + var saveMode = player.GetData("quicksavemode"); + switch (saveMode) { - if (!player.IsLoggedIn()) return; - if (player.GetData("editmode") == true && player.GetUser().IsAdmin(AdminLevel.HEADADMIN) == true) + case "none": + ChatService.SendMessage(player, "~r~Keinen Modus ausgewählt! ~y~/quicksavemode ~r~für mehr Infos!"); + break; + + case "blip": + TempBlip tempBlip = NAPI.Data.GetWorldData("blipTemplate"); + SaveManager.OnSaveBlipData(player, tempBlip.Sprite.ToString(), tempBlip.Name, tempBlip.Scale.ToString(), tempBlip.Color.ToString(), + tempBlip.Transparency.ToString(), 200.ToString(), tempBlip.ShortRange.ToString(), 0.ToString(), 0.ToString()); + player.SendNotification("~y~Blip~s~ erstellt!", false); + break; + case "atm": + SaveManager.OnSaveBlipData(player, "500", "Geldautomat", 0.7.ToString(), "11", + "0", "200", true.ToString(), 0.ToString(), 0.ToString()); + player.SendNotification("~y~ATM~s~ erstellt!", false); + break; + } + } + + GroundItem.PickUpGroundItem(player); + } + + [RemoteEvent("keyPress:UP_ARROW")] + public void KeyPressUpArrow(Client player) + { + if (!player.IsLoggedIn()) return; + if (player.HasData("nearATM")) + { + ATMManager.ShowAtmUi(player, player.GetData("nearATM")); + } + } + + [RemoteEvent("keyPress:LEFT_ARROW")] + public void KeyPressLeftArrow(Client player) + { + if (!player.IsLoggedIn()) return; + List nearbyPlayers = NAPI.Player.GetPlayersInRadiusOfPlayer(3, player); + + if (nearbyPlayers.Count > 1) + { + List nearbyPlayerList = new List(); + foreach (Client nearPlayer in nearbyPlayers) + { + if (nearPlayer.Name != player.Name) + { + nearbyPlayerList.Add(nearPlayer.Name); + } + else + { + continue; + } + } + player.TriggerEvent("showPlayerInteraction", JsonConvert.SerializeObject(nearbyPlayerList)); + } + } + + [RemoteEvent("keyPress:RIGHT_ARROW")] + public void KeyPressRightArrow(Client player) + { + if (!player.IsLoggedIn()) return; + User user = player.GetUser(); + switch (user.FactionId) + { + //LSFD + case 2: + player.TriggerEvent("showFactionInteraction", user.FactionId, user.GetData("duty"), user.Faction.Name, user.FactionLeader, Medic.ReviveTasks.Count.ToString(), Medic.HealTasks.Count.ToString(), Medic.FireTasks.Count.ToString()); + break; + } + } + + [RemoteEvent("keyPress:DOWN_ARROW")] + public void KeyPressDownArrow(Client player) + { + User u = player.GetUser(); + if (u == null) return; + + var accountData = new + { + regDate = u.RegistrationDate.ToShortDateString(), + adminLevel = u.AdminLevel.GetName(), + faction = u.Faction?.Name ?? "Zivilist", + factionRank = u.GetFactionRank().RankName, + group = u.Group?.Name ?? "Keine", + groupRank = u.GroupRank.GetName(), + job = JobManager.GetJob(u.JobId ?? 0)?.Name ?? "Keiner" + }; + + string faction = u.FactionLeader ? u.Faction.Name : null; + string group = u.Group != null && u.GroupRank >= GroupRank.MANAGER ? u.Group.Name : null; + bool factionInvite = player.HasData("accept_faction_invite"); + bool groupInvite = player.HasData("accept_group_invite"); + + player.TriggerEvent("SERVER:InteractionMenu_OpenMenu", JsonConvert.SerializeObject(accountData), faction, group, factionInvite, groupInvite); + } + + [RemoteEvent("keyPress:E")] + public void KeyPressE(Client player) + { + if (!player.IsLoggedIn()) return; + var user = player.GetUser(); + if (user?.FactionId != null) + { + DutyPoint nearest = PositionManager.DutyPoints.Find(d => d.Position.DistanceTo(player.Position) <= 1.5 && d.FactionId == user.FactionId); + if (nearest == null) return; + var nameTagColor = new Color(0, 0, 0); + var factionId = user.FactionId; + + if (user.GetData("duty") == false) + { + user.SetData("duty", true); + player.SendNotification("Du bist nun ~g~im Dienst."); + if (player.GetUser().FactionId == 2) //Fire Department + { + int medicCount = 0; + foreach (Client c in NAPI.Pools.GetAllPlayers()) { - var saveMode = player.GetData("quicksavemode"); - switch (saveMode) + if ((c.GetUser()?.Faction.Id ?? 0) == 2) + { + medicCount++; + } + } + NAPI.ClientEvent.TriggerClientEventForAll("updateDutyMedics", medicCount); + } + switch (factionId) + { + //LSPD + case 1: + nameTagColor = new Color(28, 134, 238); + break; + } + player.NametagColor = nameTagColor; + using (var context = new DatabaseContext()) + { + List clothes = context.CharacterClothes.Where(u => u.UserId == user.Id && u.Duty == true).ToList(); + + foreach (var cloth in clothes) + { + if (cloth.SlotType == 0) + { + player.SetClothes(cloth.SlotId, cloth.ClothId, 0); + } + else + { + if (cloth.ClothId != -1) { - case "none": - ChatService.SendMessage(player, "~r~Keinen Modus ausgewählt! ~y~/quicksavemode ~r~für mehr Infos!"); - break; - - case "blip": - TempBlip tempBlip = NAPI.Data.GetWorldData("blipTemplate"); - SaveManager.OnSaveBlipData(player, tempBlip.Sprite.ToString(), tempBlip.Name, tempBlip.Scale.ToString(), tempBlip.Color.ToString(), - tempBlip.Transparency.ToString(), 200.ToString(), tempBlip.ShortRange.ToString(), 0.ToString(), 0.ToString()); - player.SendNotification("~y~Blip~s~ erstellt!", false); - break; - case "atm": - SaveManager.OnSaveBlipData(player, "500", "Geldautomat", 0.7.ToString(), "11", - "0", "200", true.ToString(), 0.ToString(), 0.ToString()); - player.SendNotification("~y~ATM~s~ erstellt!", false); - break; - } - } - - GroundItem.PickUpGroundItem(player); - } - - [RemoteEvent("keyPress:UP_ARROW")] - public void KeyPressUpArrow(Client player) - { - if (!player.IsLoggedIn()) return; - if (player.HasData("nearATM")) - { - ATMManager.ShowAtmUi(player, player.GetData("nearATM")); - } - } - - [RemoteEvent("keyPress:LEFT_ARROW")] - public void KeyPressLeftArrow(Client player) - { - if (!player.IsLoggedIn()) return; - List nearbyPlayers = NAPI.Player.GetPlayersInRadiusOfPlayer(3, player); - - if (nearbyPlayers.Count > 1) - { - List nearbyPlayerList = new List(); - foreach (Client nearPlayer in nearbyPlayers) - { - if (nearPlayer.Name != player.Name) - { - nearbyPlayerList.Add(nearPlayer.Name); - } - else - { - continue; - } - } - player.TriggerEvent("showPlayerInteraction", JsonConvert.SerializeObject(nearbyPlayerList)); - } - } - - [RemoteEvent("keyPress:RIGHT_ARROW")] - public void KeyPressRightArrow(Client player) - { - if (!player.IsLoggedIn()) return; - User user = player.GetUser(); - switch (user.FactionId) - { - //LSFD - case 2: - player.TriggerEvent("showFactionInteraction", user.FactionId, user.GetData("duty"), user.Faction.Name, user.FactionLeader, Medic.ReviveTasks.Count.ToString(), Medic.HealTasks.Count.ToString(), Medic.FireTasks.Count.ToString()); - break; - } - } - - [RemoteEvent("keyPress:DOWN_ARROW")] - public void KeyPressDownArrow(Client player) - { - User u = player.GetUser(); - if (u == null) return; - - var accountData = new - { - regDate = u.RegistrationDate.ToShortDateString(), - adminLevel = u.AdminLevel.GetName(), - faction = u.Faction?.Name ?? "Zivilist", - factionRank = u.GetFactionRank().RankName, - group = u.Group?.Name ?? "Keine", - groupRank = u.GroupRank.GetName(), - job = JobManager.GetJob(u.JobId ?? 0)?.Name ?? "Keiner" - }; - - string faction = u.FactionLeader ? u.Faction.Name : null; - string group = u.Group != null && u.GroupRank >= GroupRank.MANAGER ? u.Group.Name : null; - bool factionInvite = player.HasData("accept_faction_invite"); - bool groupInvite = player.HasData("accept_group_invite"); - - player.TriggerEvent("SERVER:InteractionMenu_OpenMenu", JsonConvert.SerializeObject(accountData), faction, group, factionInvite, groupInvite); - } - - [RemoteEvent("keyPress:E")] - public void KeyPressE(Client player) - { - if (!player.IsLoggedIn()) return; - var user = player.GetUser(); - if (user?.FactionId != null) - { - DutyPoint nearest = PositionManager.DutyPoints.Find(d => d.Position.DistanceTo(player.Position) <= 1.5 && d.FactionId == user.FactionId); - if (nearest == null) return; - var nameTagColor = new Color(0, 0, 0); - var factionId = user.FactionId; - - if (user.GetData("duty") == false) - { - user.SetData("duty", true); - player.SendNotification("Du bist nun ~g~im Dienst."); - if (player.GetUser().FactionId == 2) //Fire Department - { - int medicCount = 0; - foreach (Client c in NAPI.Pools.GetAllPlayers()) - { - if ((c.GetUser()?.Faction.Id ?? 0) == 2) - { - medicCount++; - } - } - NAPI.ClientEvent.TriggerClientEventForAll("updateDutyMedics", medicCount); - } - switch (factionId) - { - //LSPD - case 1: - nameTagColor = new Color(28, 134, 238); - break; - } - player.NametagColor = nameTagColor; - using (var context = new DatabaseContext()) - { - List clothes = context.CharacterClothes.Where(u => u.UserId == user.Id && u.Duty == true).ToList(); - - foreach (var cloth in clothes) - { - if (cloth.SlotType == 0) - { - player.SetClothes(cloth.SlotId, cloth.ClothId, 0); - } - else - { - if (cloth.ClothId != -1) - { - player.SetAccessories(cloth.SlotId, cloth.ClothId, 0); - } - else - { - player.ClearAccessory(cloth.SlotId); - } - } - } - } + player.SetAccessories(cloth.SlotId, cloth.ClothId, 0); } else { - user.SetData("duty", false); - player.SendNotification("Du bist nun ~r~außer Dienst."); - NAPI.ClientEvent.TriggerClientEventForAll("updateDutyMedics", false); - player.NametagColor = new Color(255, 255, 255); - UpdateCharacterCloth.LoadCharacterDefaults(player); + player.ClearAccessory(cloth.SlotId); } + } } + } } - - [RemoteEvent("keyPress:I")] - public void KeyPressI(Client player) + else { - if (!player.IsLoggedIn()) return; - InventoryManager.GetUserItems(player); - } - - [RemoteEvent("keyPress:O")] - public void KeyPressJ(Client player) - { - if (!player.IsLoggedIn()) return; - List players = NAPI.Pools.GetAllPlayers(); - var listPlayers = players.Select(p => new - { - Id = p.Handle.Value, - p.Name, - p.Ping - }); - player.TriggerEvent("fetchPlayerList", JsonConvert.SerializeObject(listPlayers)); - } - - [RemoteEvent("keyPress:K")] - public void KeyPressK(Client player) - { - if (!player.IsLoggedIn()) return; - var user = player.GetUser(); - if (user?.FactionId != null) - { - DutyPoint nearest = PositionManager.DutyPoints.Find(d => d.Position.DistanceTo(player.Position) <= 1.5); - if (nearest == null) return; - if (player.Position.DistanceTo(nearest.Position) <= 1.5 && nearest.FactionId == user.FactionId) - { - List hats = new List(); - List tops = new List(); - List legs = new List(); - List shoes = new List(); - - using (var context = new DatabaseContext()) - { - List clothes = context.DutyClothes.ToList().FindAll(c => c.FactionId == user.FactionId && c.Gender == user.GetCharacter().Gender); - foreach (var cloth in clothes) - { - if (cloth.SlotType == 1) - { - if (cloth.ClothId != -1) - { - hats.Add(cloth.ClothId.ToString()); - } - else - { - hats.Add("Keinen"); - } - continue; - } - - switch (cloth.SlotId) - { - case 11: - tops.Add(cloth.ClothId.ToString()); - break; - case 4: - legs.Add(cloth.ClothId.ToString()); - break; - case 6: - shoes.Add(cloth.ClothId.ToString()); - break; - } - } - } - player.TriggerEvent("showDutyClothMenu", hats.ToArray(), tops.ToArray(), legs.ToArray(), shoes.ToArray()); - } - } - - } - - [RemoteEvent("keyPress:L")] - public void KeyPressL(Client player) - { - if (!player.IsLoggedIn()) return; - DoorManager.ChangeDoorState(player); - } - - [RemoteEvent("keyPress:N")] - public void KeyPressN(Client player) - { - if (!player.IsLoggedIn()) return; - } - - [RemoteEvent("keyPress:X")] - public void KeyPressX(Client player) - { - if (!player.IsLoggedIn()) return; - if (player.IsInVehicle && player.VehicleSeat == -1) - { - ServerVehicle veh = player.Vehicle.GetServerVehicle(); - if (veh != null) - { - if (veh is FactionVehicle fV && fV.FactionId != player.GetUser()?.FactionId && (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN3) ?? false)) - { - return; - } - else if (veh is ShopVehicle) - { - return; - } - } - player.TriggerEvent("ToggleVehicleMenu"); - } + user.SetData("duty", false); + player.SendNotification("Du bist nun ~r~außer Dienst."); + NAPI.ClientEvent.TriggerClientEventForAll("updateDutyMedics", false); + player.NametagColor = new Color(255, 255, 255); + UpdateCharacterCloth.LoadCharacterDefaults(player); } + } } + + [RemoteEvent("keyPress:I")] + public void KeyPressI(Client player) + { + if (!player.IsLoggedIn()) return; + InventoryManager.GetUserItems(player); + } + + [RemoteEvent("keyPress:O")] + public void KeyPressJ(Client player) + { + if (!player.IsLoggedIn()) return; + List players = NAPI.Pools.GetAllPlayers(); + var listPlayers = players.Select(p => new + { + Id = p.Handle.Value, + p.Name, + p.Ping + }); + player.TriggerEvent("fetchPlayerList", JsonConvert.SerializeObject(listPlayers)); + } + + [RemoteEvent("keyPress:K")] + public void KeyPressK(Client player) + { + if (!player.IsLoggedIn()) return; + var user = player.GetUser(); + if (user?.FactionId != null) + { + DutyPoint nearest = PositionManager.DutyPoints.Find(d => d.Position.DistanceTo(player.Position) <= 1.5); + if (nearest == null) return; + if (player.Position.DistanceTo(nearest.Position) <= 1.5 && nearest.FactionId == user.FactionId) + { + List hats = new List(); + List tops = new List(); + List legs = new List(); + List shoes = new List(); + + using (var context = new DatabaseContext()) + { + List clothes = context.DutyClothes.ToList().FindAll(c => c.FactionId == user.FactionId && c.Gender == user.GetCharacter().Gender); + foreach (var cloth in clothes) + { + if (cloth.SlotType == 1) + { + if (cloth.ClothId != -1) + { + hats.Add(cloth.ClothId.ToString()); + } + else + { + hats.Add("Keinen"); + } + continue; + } + + switch (cloth.SlotId) + { + case 11: + tops.Add(cloth.ClothId.ToString()); + break; + case 4: + legs.Add(cloth.ClothId.ToString()); + break; + case 6: + shoes.Add(cloth.ClothId.ToString()); + break; + } + } + } + player.TriggerEvent("showDutyClothMenu", hats.ToArray(), tops.ToArray(), legs.ToArray(), shoes.ToArray()); + } + } + + } + + [RemoteEvent("keyPress:L")] + public void KeyPressL(Client player) + { + if (!player.IsLoggedIn()) return; + DoorManager.ChangeDoorState(player); + } + + [RemoteEvent("keyPress:N")] + public void KeyPressN(Client player) + { + if (!player.IsLoggedIn()) return; + } + + [RemoteEvent("keyPress:X")] + public void KeyPressX(Client player) + { + if (!player.IsLoggedIn()) return; + if (player.IsInVehicle && player.VehicleSeat == -1) + { + ServerVehicle veh = player.Vehicle.GetServerVehicle(); + if (veh != null) + { + if (veh is FactionVehicle fV && fV.FactionId != player.GetUser()?.FactionId && (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN3) ?? false)) + { + return; + } + else if (veh is ShopVehicle) + { + return; + } + } + player.TriggerEvent("ToggleVehicleMenu"); + } + } + } } diff --git a/ReallifeGamemode.Server/Events/Login.cs b/ReallifeGamemode.Server/Events/Login.cs index 725be1f2..205bc67e 100644 --- a/ReallifeGamemode.Server/Events/Login.cs +++ b/ReallifeGamemode.Server/Events/Login.cs @@ -15,109 +15,109 @@ using ReallifeGamemode.Server.Wanted; namespace ReallifeGamemode.Server.Events { - public class Login : Script + public class Login : Script + { + [RemoteEvent("CLIENT:Login_LoginRequest")] + public void OnPlayerLogin(Client player, string username, string password) { - [RemoteEvent("CLIENT:Login_LoginRequest")] - public void OnPlayerLogin(Client player, string username, string password) + using (var dbContext = new DatabaseContext()) + { + var user = dbContext.Users + .Include(u => u.Group) + .SingleOrDefault(b => b.Name == username); + + if (user == null) { - using (var dbContext = new DatabaseContext()) - { - var user = dbContext.Users - .Include(u => u.Group) - .SingleOrDefault(b => b.Name == username); - - if (user == null) - { - player.TriggerEvent("SERVER:Login_Error", "Benutzer existiert nicht! Registriere dich zuerst!"); - } - else - { - if (user.SocialClubName != player.SocialClubName && user.Password == NAPI.Util.GetHashSha256(password)) - { - player.TriggerEvent("SERVER:Login_Error", "Dieser Benutzer gehört dir nicht!"); - //TODO ?? Log einbauen für den bösen Bub. - player.Kick(); - } - if (user.Password != NAPI.Util.GetHashSha256(password)) - { - player.TriggerEvent("SERVER:Login_Error", "Passwort inkorrekt!"); - } - else - { - player.Name = username; - player.TriggerEvent("SERVER:Login_Success"); - player.SetData("isLoggedIn", true); - player.SetData("spec", true); - player.SetData("duty", false); - player.TriggerEvent("SERVER:SET_HANDMONEY", user.Handmoney, 0); - - if (user.IsAdmin(AdminLevel.HEADADMIN) == true) - { - player.SetData("editmode", false); - player.SetData("quicksavemode", "none"); - } - - var userBankAccount = user.GetBankAccount(); - userBankAccount.Balance = userBankAccount.Balance; - - user.Wanteds = user.Wanteds; - - if(user.Group != null) - { - string msg = $"{player.Name} ist wieder online."; - ChatService.BroadcastGroup(msg, user.Group); - } - - var userItems = dbContext.UserItems.Where(u => u.UserId == user.Id).ToList(); - player.SetData("items", userItems); - - if (user.CharacterId == null) - { - var currentPlayerCreatorDimension = (uint)NAPI.Data.GetWorldData("playerCreatorDimension"); - currentPlayerCreatorDimension++; - NAPI.Data.SetWorldData("playerCreatorDimension", currentPlayerCreatorDimension); - player.Dimension = NAPI.Data.GetWorldData("playerCreatorDimension"); - player.Position = new Vector3(402.8664, -996.4108, -99.00027); - player.TriggerEvent("toggleCreator"); - } - else - { - CharacterCreator.ApplyCharacter(player); - UpdateCharacterCloth.LoadCharacterDefaults(player); - if(user.JailTime == 0) - { - NAPI.Player.SpawnPlayer(player, new Vector3(user.PositionX, user.PositionY, user.PositionZ), 0); - } - else - { - Jail.Check_PutBehindBars(player); - } - - - } - - player.TriggerEvent("draw", player.Name, player.Handle.Value); - if (user.Dead == true) - { - if (user.IsAdmin(AdminLevel.ADMIN) == true) - { - player.TriggerEvent("startDeathTimer", true); - player.Health = 0; - } - else - { - player.TriggerEvent("startDeathTimer", false); - player.Health = 0; - } - player.SetData("isDead", true); - } - else - { - player.SetData("isDead", false); - } - } - } - } + player.TriggerEvent("SERVER:Login_Error", "Benutzer existiert nicht! Registriere dich zuerst!"); } + else + { + if (user.SocialClubName != player.SocialClubName && user.Password == NAPI.Util.GetHashSha256(password)) + { + player.TriggerEvent("SERVER:Login_Error", "Dieser Benutzer gehört dir nicht!"); + //TODO ?? Log einbauen für den bösen Bub. + player.Kick(); + } + if (user.Password != NAPI.Util.GetHashSha256(password)) + { + player.TriggerEvent("SERVER:Login_Error", "Passwort inkorrekt!"); + } + else + { + player.Name = username; + player.TriggerEvent("SERVER:Login_Success"); + player.SetData("isLoggedIn", true); + player.SetData("spec", true); + player.SetData("duty", false); + player.TriggerEvent("SERVER:SET_HANDMONEY", user.Handmoney, 0); + + if (user.IsAdmin(AdminLevel.HEADADMIN) == true) + { + player.SetData("editmode", false); + player.SetData("quicksavemode", "none"); + } + + var userBankAccount = user.GetBankAccount(); + userBankAccount.Balance = userBankAccount.Balance; + + user.Wanteds = user.Wanteds; + + if (user.Group != null) + { + string msg = $"{player.Name} ist wieder online."; + ChatService.BroadcastGroup(msg, user.Group); + } + + var userItems = dbContext.UserItems.Where(u => u.UserId == user.Id).ToList(); + player.SetData("items", userItems); + + if (user.CharacterId == null) + { + var currentPlayerCreatorDimension = (uint)NAPI.Data.GetWorldData("playerCreatorDimension"); + currentPlayerCreatorDimension++; + NAPI.Data.SetWorldData("playerCreatorDimension", currentPlayerCreatorDimension); + player.Dimension = NAPI.Data.GetWorldData("playerCreatorDimension"); + player.Position = new Vector3(402.8664, -996.4108, -99.00027); + player.TriggerEvent("toggleCreator"); + } + else + { + CharacterCreator.ApplyCharacter(player); + UpdateCharacterCloth.LoadCharacterDefaults(player); + if (user.JailTime == 0) + { + NAPI.Player.SpawnPlayer(player, new Vector3(user.PositionX, user.PositionY, user.PositionZ), 0); + } + else + { + Jail.Check_PutBehindBars(player); + } + + + } + + player.TriggerEvent("draw", player.Name, player.Handle.Value); + if (user.Dead == true) + { + if (user.IsAdmin(AdminLevel.ADMIN) == true) + { + player.TriggerEvent("startDeathTimer", true); + player.Health = 0; + } + else + { + player.TriggerEvent("startDeathTimer", false); + player.Health = 0; + } + player.SetData("isDead", true); + } + else + { + player.SetData("isDead", false); + } + } + } + } } + } } diff --git a/ReallifeGamemode.Server/Events/Register.cs b/ReallifeGamemode.Server/Events/Register.cs index 370c5b47..4c46cd12 100644 --- a/ReallifeGamemode.Server/Events/Register.cs +++ b/ReallifeGamemode.Server/Events/Register.cs @@ -10,59 +10,59 @@ using ReallifeGamemode.Server.Models; namespace ReallifeGamemode.Server.Events { - class Register : Script + class Register : Script + { + [RemoteEvent("CLIENT:Login_RegisterRequest")] + public void OnPlayerRegister(Client player, string username, string password, string passwordRepeat) { - [RemoteEvent("CLIENT:Login_RegisterRequest")] - public void OnPlayerRegister(Client player, string username, string password, string passwordRepeat) + using (var dbContext = new DatabaseContext()) + { + if (!dbContext.Users.Any(u => u.Name.ToLower() == username.ToLower().Trim())) { - using (var dbContext = new DatabaseContext()) - { - if (!dbContext.Users.Any(u => u.Name.ToLower() == username.ToLower().Trim())) - { - var user = new Entities.User - { - Name = player.Name, - SocialClubName = player.SocialClubName, - Password = NAPI.Util.GetHashSha256(password), - PositionX = Main.DEFAULT_SPAWN_POSITION.X, - PositionY = Main.DEFAULT_SPAWN_POSITION.Y, - PositionZ = Main.DEFAULT_SPAWN_POSITION.Z - }; + var user = new Entities.User + { + Name = player.Name, + SocialClubName = player.SocialClubName, + Password = NAPI.Util.GetHashSha256(password), + PositionX = Main.DEFAULT_SPAWN_POSITION.X, + PositionY = Main.DEFAULT_SPAWN_POSITION.Y, + PositionZ = Main.DEFAULT_SPAWN_POSITION.Z + }; - dbContext.Users.Add(user); - dbContext.SaveChanges(); - var userBankAccount = new Entities.UserBankAccount - { - UserId = user.Id, - Balance = 5000, - Active = true - }; + dbContext.Users.Add(user); + dbContext.SaveChanges(); + var userBankAccount = new Entities.UserBankAccount + { + UserId = user.Id, + Balance = 5000, + Active = true + }; - dbContext.UserBankAccounts.Add(userBankAccount); - dbContext.SaveChanges(); + dbContext.UserBankAccounts.Add(userBankAccount); + dbContext.SaveChanges(); - player.TriggerEvent("SERVER:Login_Success"); - player.SetData("isLoggedIn", true); - player.SetData("isDead", false); + player.TriggerEvent("SERVER:Login_Success"); + player.SetData("isLoggedIn", true); + player.SetData("isDead", false); + + var currentPlayerCreatorDimension = (uint)NAPI.Data.GetWorldData("playerCreatorDimension"); + currentPlayerCreatorDimension++; + NAPI.Data.SetWorldData("playerCreatorDimension", currentPlayerCreatorDimension); + player.Dimension = NAPI.Data.GetWorldData("playerCreatorDimension"); + player.TriggerEvent("toggleCreator"); + player.Position = new Vector3(402.8664, -996.4108, -99.00027); + //player.Position = new Vector3(user.PositionX, user.PositionY, user.PositionZ); - var currentPlayerCreatorDimension = (uint)NAPI.Data.GetWorldData("playerCreatorDimension"); - currentPlayerCreatorDimension++; - NAPI.Data.SetWorldData("playerCreatorDimension", currentPlayerCreatorDimension); - player.Dimension = NAPI.Data.GetWorldData("playerCreatorDimension"); - player.TriggerEvent("toggleCreator"); - player.Position = new Vector3(402.8664, -996.4108, -99.00027); - //player.Position = new Vector3(user.PositionX, user.PositionY, user.PositionZ); - - } - else if (dbContext.Users.Where(u => u.SocialClubName == player.SocialClubName).Count() >= 3) - { - player.TriggerEvent("SERVER:Login_Error", "Es sind schon 3 Konten mit dieser Socialclub-ID registriert."); - } - else - { - player.TriggerEvent("SERVER:Login_Error", "Dieser Benutzername kann nicht registriert werden."); - } - } } + else if (dbContext.Users.Where(u => u.SocialClubName == player.SocialClubName).Count() >= 3) + { + player.TriggerEvent("SERVER:Login_Error", "Es sind schon 3 Konten mit dieser Socialclub-ID registriert."); + } + else + { + player.TriggerEvent("SERVER:Login_Error", "Dieser Benutzername kann nicht registriert werden."); + } + } } + } } diff --git a/ReallifeGamemode.Server/Events/ResourceStop.cs b/ReallifeGamemode.Server/Events/ResourceStop.cs index 6c1c1c8d..0274622c 100644 --- a/ReallifeGamemode.Server/Events/ResourceStop.cs +++ b/ReallifeGamemode.Server/Events/ResourceStop.cs @@ -15,25 +15,25 @@ using System.Text; namespace ReallifeGamemode.Server.Events { - public class ResourceStop : Script + public class ResourceStop : Script + { + [ServerEvent(Event.ResourceStop)] + public void OnResourceStop() { - [ServerEvent(Event.ResourceStop)] - public void OnResourceStop() + var users = NAPI.Pools.GetAllPlayers(); + + foreach (Client user in users) + { + using (var saveUsers = new DatabaseContext()) { - var users = NAPI.Pools.GetAllPlayers(); + var saveUser = saveUsers.Users.SingleOrDefault(u => u.Name == user.Name); - foreach (Client user in users) - { - using (var saveUsers = new DatabaseContext()) - { - var saveUser = saveUsers.Users.SingleOrDefault(u => u.Name == user.Name); - - saveUser.PositionX = user.Position.X; - saveUser.PositionY = user.Position.Y; - saveUser.PositionZ = user.Position.Z; - saveUsers.SaveChanges(); - } - } + saveUser.PositionX = user.Position.X; + saveUser.PositionY = user.Position.Y; + saveUser.PositionZ = user.Position.Z; + saveUsers.SaveChanges(); } + } } + } } diff --git a/ReallifeGamemode.Server/Events/Siren.cs b/ReallifeGamemode.Server/Events/Siren.cs index 6e78d0c2..8c7adf23 100644 --- a/ReallifeGamemode.Server/Events/Siren.cs +++ b/ReallifeGamemode.Server/Events/Siren.cs @@ -5,22 +5,22 @@ using System.Text; namespace ReallifeGamemode.Server.Events { - class Siren : Script + class Siren : Script + { + private readonly Dictionary _sirenStates = new Dictionary(); + + [RemoteEvent("keyPress:B:toggleSiren")] + public void ToggleSirenEvent(Client player) { - private readonly Dictionary _sirenStates = new Dictionary(); + if (!player.IsInVehicle || player.VehicleSeat != -1) return; + Vehicle pV = player.Vehicle; + bool oldValue = _sirenStates.ContainsKey(pV.Handle) ? _sirenStates[pV.Handle] : false; + bool newValue = !oldValue; - [RemoteEvent("keyPress:B:toggleSiren")] - public void ToggleSirenEvent(Client player) - { - if (!player.IsInVehicle || player.VehicleSeat != -1) return; - Vehicle pV = player.Vehicle; - bool oldValue = _sirenStates.ContainsKey(pV.Handle) ? _sirenStates[pV.Handle] : false; - bool newValue = !oldValue; + _sirenStates[pV.Handle] = newValue; + pV.SetSharedData("sirenSound", newValue); - _sirenStates[pV.Handle] = newValue; - pV.SetSharedData("sirenSound", newValue); - - NAPI.ClientEvent.TriggerClientEventForAll("toggleVehicleSiren", pV, newValue); - } + NAPI.ClientEvent.TriggerClientEventForAll("toggleVehicleSiren", pV, newValue); } + } } diff --git a/ReallifeGamemode.Server/Events/Update.cs b/ReallifeGamemode.Server/Events/Update.cs index d6717603..05014693 100644 --- a/ReallifeGamemode.Server/Events/Update.cs +++ b/ReallifeGamemode.Server/Events/Update.cs @@ -8,12 +8,12 @@ using System.Text; namespace ReallifeGamemode.Server.Events { - class Update : Script + class Update : Script + { + [ServerEvent(Event.Update)] + public void UpdateEvent() { - [ServerEvent(Event.Update)] - public void UpdateEvent() - { - } } + } } diff --git a/ReallifeGamemode.Server/Events/UpdateCharacterCloth.cs b/ReallifeGamemode.Server/Events/UpdateCharacterCloth.cs index 2d909025..b5d61072 100644 --- a/ReallifeGamemode.Server/Events/UpdateCharacterCloth.cs +++ b/ReallifeGamemode.Server/Events/UpdateCharacterCloth.cs @@ -8,147 +8,147 @@ using ReallifeGamemode.Server.Models; namespace ReallifeGamemode.Server.Events { - public class UpdateCharacterCloth : Script + public class UpdateCharacterCloth : Script + { + [RemoteEvent("updateDutyProp")] + public void UpdateDutyProp(Client player, int componentId, int componentVariation) { - [RemoteEvent("updateDutyProp")] - public void UpdateDutyProp(Client player, int componentId, int componentVariation) - { - if (componentId != -1) - { - player.SetAccessories(componentId, componentVariation, 0); - } - else - { - player.ClearAccessory(0); - } + if (componentId != -1) + { + player.SetAccessories(componentId, componentVariation, 0); + } + else + { + player.ClearAccessory(0); + } - } - - [RemoteEvent("updateDutyCloth")] - public void UpdateDutyCloth(Client player, int componentId, int componentVariation) - { - if (componentId == 11) - { - //TODO Spezielle Duty Kleidung in Datenbank einpflegen (Ergibt bei Cop-Kleidung NULL) - using (var context = new DatabaseContext()) - { - var character = player.GetUser().GetCharacter(); - - var combination = context.ClothCombinations.FirstOrDefault(c => c.Top == componentVariation && c.Gender == character.Gender); - player.SetClothes(11, componentVariation, 0); - if (combination != null) - { - player.SetClothes(3, combination.Torso, 0); - player.SetClothes(8, combination.Undershirt, 0); - } - } - } - else - { - player.SetClothes(componentId, componentVariation, 0); - } - } - - [RemoteEvent("saveCharacterCloth")] - public void SaveDutyCloth(Client client, string JSlotType, string JSlotId, string JClothId) - { - using (var context = new DatabaseContext()) - { - int[] slotType = JsonConvert.DeserializeObject(JSlotType); - int[] slotId = JsonConvert.DeserializeObject(JSlotId); - int[] clothId = JsonConvert.DeserializeObject(JClothId); - - User user = client.GetUser(); - user = context.Users.FirstOrDefault(u => u.Id == user.Id); - - var character = client.GetUser().GetCharacter(); - - var charClothes = context.CharacterClothes.FirstOrDefault(c => c.UserId == user.Id); - if (charClothes == null) - { - for (var x = 0; x < slotType.Length; x++) - { - CharacterCloth newCloth = new CharacterCloth - { - UserId = user.Id, - - Duty = true, - - SlotType = (byte)slotType[x], - SlotId = slotId[x], - ClothId = clothId[x] - }; - context.CharacterClothes.Add(newCloth); - } - if (user.GetCharacter().Gender == false) - { - CharacterCloth newTorso = new CharacterCloth - { - UserId = user.Id, - - Duty = true, - - SlotType = 0, - SlotId = 3, - ClothId = context.ClothCombinations.FirstOrDefault(c => c.Top == clothId[1] && c.Gender == character.Gender).Torso - }; - CharacterCloth newUndershirt = new CharacterCloth - { - UserId = user.Id, - - Duty = true, - - SlotType = 0, - SlotId = 8, - ClothId = context.ClothCombinations.FirstOrDefault(c => c.Top == clothId[1] && c.Gender == character.Gender).Undershirt - }; - context.CharacterClothes.Add(newTorso); - context.CharacterClothes.Add(newUndershirt); - } - } - else - { - for (var x = 0; x < slotType.Length; x++) - { - var loopCloth = context.CharacterClothes.FirstOrDefault(u => u.UserId == user.Id && u.SlotType == slotType[x] && u.SlotId == slotId[x]); - loopCloth.ClothId = clothId[x]; - } - CharacterCloth torso = context.CharacterClothes.FirstOrDefault(u => u.UserId == user.Id && u.SlotType == 0 && u.SlotId == 3); - CharacterCloth undershirt = context.CharacterClothes.FirstOrDefault(u => u.UserId == user.Id && u.SlotType == 0 && u.SlotId == 8); - - torso.ClothId = context.ClothCombinations.FirstOrDefault(c => c.Top == clothId[1] && c.Gender == character.Gender).Torso; - undershirt.ClothId = context.ClothCombinations.FirstOrDefault(c => c.Top == clothId[1] && c.Gender == character.Gender).Undershirt; - } - context.SaveChanges(); - } - LoadCharacterDefaults(client); - } - - [RemoteEvent("defaultCharacterCloth")] - public static void LoadCharacterDefaults(Client player) - { - User user = player.GetUser(); - using (var context = new DatabaseContext()) - { - List charClothes = context.CharacterClothes.ToList().FindAll(c => c.UserId == user.Id && c.Duty == false); - player.ClearAccessory(0); - player.ClearAccessory(1); - player.ClearAccessory(2); - player.ClearAccessory(6); - player.ClearAccessory(7); - - foreach (var cloth in charClothes) - { - if (cloth.SlotType == 1) - { - player.SetAccessories(cloth.SlotId, cloth.ClothId, 0); - } - else - { - player.SetClothes(cloth.SlotId, cloth.ClothId, cloth.Texture); - } - } - } - } } + + [RemoteEvent("updateDutyCloth")] + public void UpdateDutyCloth(Client player, int componentId, int componentVariation) + { + if (componentId == 11) + { + //TODO Spezielle Duty Kleidung in Datenbank einpflegen (Ergibt bei Cop-Kleidung NULL) + using (var context = new DatabaseContext()) + { + var character = player.GetUser().GetCharacter(); + + var combination = context.ClothCombinations.FirstOrDefault(c => c.Top == componentVariation && c.Gender == character.Gender); + player.SetClothes(11, componentVariation, 0); + if (combination != null) + { + player.SetClothes(3, combination.Torso, 0); + player.SetClothes(8, combination.Undershirt, 0); + } + } + } + else + { + player.SetClothes(componentId, componentVariation, 0); + } + } + + [RemoteEvent("saveCharacterCloth")] + public void SaveDutyCloth(Client client, string JSlotType, string JSlotId, string JClothId) + { + using (var context = new DatabaseContext()) + { + int[] slotType = JsonConvert.DeserializeObject(JSlotType); + int[] slotId = JsonConvert.DeserializeObject(JSlotId); + int[] clothId = JsonConvert.DeserializeObject(JClothId); + + User user = client.GetUser(); + user = context.Users.FirstOrDefault(u => u.Id == user.Id); + + var character = client.GetUser().GetCharacter(); + + var charClothes = context.CharacterClothes.FirstOrDefault(c => c.UserId == user.Id); + if (charClothes == null) + { + for (var x = 0; x < slotType.Length; x++) + { + CharacterCloth newCloth = new CharacterCloth + { + UserId = user.Id, + + Duty = true, + + SlotType = (byte)slotType[x], + SlotId = slotId[x], + ClothId = clothId[x] + }; + context.CharacterClothes.Add(newCloth); + } + if (user.GetCharacter().Gender == false) + { + CharacterCloth newTorso = new CharacterCloth + { + UserId = user.Id, + + Duty = true, + + SlotType = 0, + SlotId = 3, + ClothId = context.ClothCombinations.FirstOrDefault(c => c.Top == clothId[1] && c.Gender == character.Gender).Torso + }; + CharacterCloth newUndershirt = new CharacterCloth + { + UserId = user.Id, + + Duty = true, + + SlotType = 0, + SlotId = 8, + ClothId = context.ClothCombinations.FirstOrDefault(c => c.Top == clothId[1] && c.Gender == character.Gender).Undershirt + }; + context.CharacterClothes.Add(newTorso); + context.CharacterClothes.Add(newUndershirt); + } + } + else + { + for (var x = 0; x < slotType.Length; x++) + { + var loopCloth = context.CharacterClothes.FirstOrDefault(u => u.UserId == user.Id && u.SlotType == slotType[x] && u.SlotId == slotId[x]); + loopCloth.ClothId = clothId[x]; + } + CharacterCloth torso = context.CharacterClothes.FirstOrDefault(u => u.UserId == user.Id && u.SlotType == 0 && u.SlotId == 3); + CharacterCloth undershirt = context.CharacterClothes.FirstOrDefault(u => u.UserId == user.Id && u.SlotType == 0 && u.SlotId == 8); + + torso.ClothId = context.ClothCombinations.FirstOrDefault(c => c.Top == clothId[1] && c.Gender == character.Gender).Torso; + undershirt.ClothId = context.ClothCombinations.FirstOrDefault(c => c.Top == clothId[1] && c.Gender == character.Gender).Undershirt; + } + context.SaveChanges(); + } + LoadCharacterDefaults(client); + } + + [RemoteEvent("defaultCharacterCloth")] + public static void LoadCharacterDefaults(Client player) + { + User user = player.GetUser(); + using (var context = new DatabaseContext()) + { + List charClothes = context.CharacterClothes.ToList().FindAll(c => c.UserId == user.Id && c.Duty == false); + player.ClearAccessory(0); + player.ClearAccessory(1); + player.ClearAccessory(2); + player.ClearAccessory(6); + player.ClearAccessory(7); + + foreach (var cloth in charClothes) + { + if (cloth.SlotType == 1) + { + player.SetAccessories(cloth.SlotId, cloth.ClothId, 0); + } + else + { + player.SetClothes(cloth.SlotId, cloth.ClothId, cloth.Texture); + } + } + } + } + } } \ No newline at end of file diff --git a/ReallifeGamemode.Server/Events/VehicleMenu.cs b/ReallifeGamemode.Server/Events/VehicleMenu.cs index 9cc2479f..057bdd73 100644 --- a/ReallifeGamemode.Server/Events/VehicleMenu.cs +++ b/ReallifeGamemode.Server/Events/VehicleMenu.cs @@ -9,195 +9,195 @@ using System.Text; namespace ReallifeGamemode.Server.Events { - public class VehicleMenu : Script + public class VehicleMenu : Script + { + [RemoteEvent("VehicleMenu_ToggleEngine")] + public void VehicleMenuToggleEngineEvent(Client player) { - [RemoteEvent("VehicleMenu_ToggleEngine")] - public void VehicleMenuToggleEngineEvent(Client player) + if (player.IsInVehicle && player.VehicleSeat == -1) + { + Vehicle v = player.Vehicle; + + User u = player.GetUser(); + if (u == null) return; + + if (NAPI.Entity.GetEntityVelocity(v).Length() > 1) { - if (player.IsInVehicle && player.VehicleSeat == -1) + player.SendNotification("~r~Der Motor kann nur im Stand betätigt werden.", true); + return; + } + + bool state = VehicleStreaming.GetEngineState(v); + ServerVehicle sV = v.GetServerVehicle(); + if (sV != null) + { + if (sV is ShopVehicle) + { + VehicleStreaming.SetEngineState(v, false); + return; + } + else if (sV is FactionVehicle fV) + { + if (fV.FactionId != u.FactionId && !state && !u.IsAdmin(AdminLevel.ADMIN3)) { - Vehicle v = player.Vehicle; - - User u = player.GetUser(); - if (u == null) return; - - if (NAPI.Entity.GetEntityVelocity(v).Length() > 1) - { - player.SendNotification("~r~Der Motor kann nur im Stand betätigt werden.", true); - return; - } - - bool state = VehicleStreaming.GetEngineState(v); - ServerVehicle sV = v.GetServerVehicle(); - if (sV != null) - { - if (sV is ShopVehicle) - { - VehicleStreaming.SetEngineState(v, false); - return; - } - else if (sV is FactionVehicle fV) - { - if (fV.FactionId != u.FactionId && !state && !u.IsAdmin(AdminLevel.ADMIN3)) - { - player.SendNotification("~r~Du hast keinen Schlüssel."); - return; - } - } - else if (sV is GroupVehicle gV) - { - if(gV.GroupId != u.Group.Id && !state && !u.IsAdmin(AdminLevel.ADMIN3)) - { - player.SendNotification("~r~Du hast keinen Schlüssel."); - return; - } - } - else if(sV is JobVehicle jV) - { - if(!jV.GetJob().GetUsersInJob().Contains(player) && !u.IsAdmin(AdminLevel.ADMIN3)) - { - player.SendNotification("~r~Du hast keinen Schlüssel."); - return; - } - } - } - VehicleStreaming.SetEngineState(v, !state); + player.SendNotification("~r~Du hast keinen Schlüssel."); + return; } - } - - [RemoteEvent("VehicleMenu_LockCar")] - public void VehicleMenuLockCarEvent(Client player) - { - if (player.IsInVehicle && player.VehicleSeat == -1) + } + else if (sV is GroupVehicle gV) + { + if (gV.GroupId != u.Group.Id && !state && !u.IsAdmin(AdminLevel.ADMIN3)) { - Vehicle v = player.Vehicle; - - User u = player.GetUser(); - if (u == null) return; - - bool state = VehicleStreaming.GetLockState(v); - ServerVehicle sV = v.GetServerVehicle(); - - if (sV != null) - { - if (sV is ShopVehicle) - { - VehicleStreaming.SetEngineState(v, false); - return; - } - else if (sV is FactionVehicle fV) - { - if (fV.FactionId != u.FactionId) - { - return; - } - } - else if (sV is UserVehicle uV) - { - if (uV.UserId != u.Id) - { - return; - } - } - } - state = !state; - VehicleStreaming.SetLockStatus(v, state); - string msg = "Fahrzeug "; - msg += state ? "~g~abgeschlossen" : "~r~aufgeschlossen"; - player.SendNotification(msg); + player.SendNotification("~r~Du hast keinen Schlüssel."); + return; } - } - - [RemoteEvent("CLIENT:VehicleMenu_ParkCar")] - public void VehicleMenuParkCarEvent(Client player) - { - if (player.IsInVehicle && player.VehicleSeat == -1) + } + else if (sV is JobVehicle jV) + { + if (!jV.GetJob().GetUsersInJob().Contains(player) && !u.IsAdmin(AdminLevel.ADMIN3)) { - Vehicle v = player.Vehicle; - - User u = player.GetUser(); - if (u == null) return; - - using (var dbContext = new DatabaseContext()) - { - ServerVehicle sV = v.GetServerVehicle(dbContext); - - if (sV == null) return; - - if (sV is UserVehicle uV) - { - if (uV.UserId != u.Id) - { - player.SendNotification("~r~Du darfst dieses Fahrzeug nicht parken."); - return; - } - } - else if(sV is FactionVehicle fV) - { - if(fV.FactionId != u.FactionId || !u.FactionLeader) - { - player.SendNotification("~r~Du darfst dieses Fahrzeug nicht parken."); - return; - } - } - else if(sV is GroupVehicle gV) - { - if (gV.GroupId != u.Group.Id || u.GroupRank < GroupRank.MANAGER) - { - player.SendNotification("~r~Du darfst dieses Fahrzeug nicht parken."); - return; - } - } - - Vector3 pos = v.Position; - - sV.PositionX = pos.X; - sV.PositionY = pos.Y; - sV.PositionZ = pos.Z; - sV.Heading = v.Heading; - - player.SendNotification("~g~Das Fahrzeug wurde geparkt."); - - dbContext.SaveChanges(); - } - } - } - - [RemoteEvent("VehicleMenu_ToggleSingleDoor")] - public void VehicleMenuToggleSingleDoorEvent(Client player, int door) - { - if (!player.IsInVehicle) return; - Vehicle veh = player.Vehicle; - - DoorID doorId = (DoorID)door; - - DoorState state = VehicleStreaming.GetDoorState(veh, doorId); - - VehicleStreaming.SetDoorState(veh, doorId, state == DoorState.DoorOpen ? DoorState.DoorClosed : DoorState.DoorOpen); - } - - [RemoteEvent("VehicleMenu_OpenAllDoors")] - public void VehicleMenuOpenAllDoorsEvent(Client player) - { - if (!player.IsInVehicle) return; - Vehicle veh = player.Vehicle; - - foreach (DoorID doorId in Enum.GetValues(typeof(DoorID))) - { - VehicleStreaming.SetDoorState(veh, doorId, DoorState.DoorOpen); - } - } - - [RemoteEvent("VehicleMenu_CloseAllDoors")] - public void VehicleMenuCloseAllDoorsEvent(Client player) - { - if (!player.IsInVehicle) return; - Vehicle veh = player.Vehicle; - - foreach (DoorID doorId in Enum.GetValues(typeof(DoorID))) - { - VehicleStreaming.SetDoorState(veh, doorId, DoorState.DoorClosed); + player.SendNotification("~r~Du hast keinen Schlüssel."); + return; } + } } + VehicleStreaming.SetEngineState(v, !state); + } } + + [RemoteEvent("VehicleMenu_LockCar")] + public void VehicleMenuLockCarEvent(Client player) + { + if (player.IsInVehicle && player.VehicleSeat == -1) + { + Vehicle v = player.Vehicle; + + User u = player.GetUser(); + if (u == null) return; + + bool state = VehicleStreaming.GetLockState(v); + ServerVehicle sV = v.GetServerVehicle(); + + if (sV != null) + { + if (sV is ShopVehicle) + { + VehicleStreaming.SetEngineState(v, false); + return; + } + else if (sV is FactionVehicle fV) + { + if (fV.FactionId != u.FactionId) + { + return; + } + } + else if (sV is UserVehicle uV) + { + if (uV.UserId != u.Id) + { + return; + } + } + } + state = !state; + VehicleStreaming.SetLockStatus(v, state); + string msg = "Fahrzeug "; + msg += state ? "~g~abgeschlossen" : "~r~aufgeschlossen"; + player.SendNotification(msg); + } + } + + [RemoteEvent("CLIENT:VehicleMenu_ParkCar")] + public void VehicleMenuParkCarEvent(Client player) + { + if (player.IsInVehicle && player.VehicleSeat == -1) + { + Vehicle v = player.Vehicle; + + User u = player.GetUser(); + if (u == null) return; + + using (var dbContext = new DatabaseContext()) + { + ServerVehicle sV = v.GetServerVehicle(dbContext); + + if (sV == null) return; + + if (sV is UserVehicle uV) + { + if (uV.UserId != u.Id) + { + player.SendNotification("~r~Du darfst dieses Fahrzeug nicht parken."); + return; + } + } + else if (sV is FactionVehicle fV) + { + if (fV.FactionId != u.FactionId || !u.FactionLeader) + { + player.SendNotification("~r~Du darfst dieses Fahrzeug nicht parken."); + return; + } + } + else if (sV is GroupVehicle gV) + { + if (gV.GroupId != u.Group.Id || u.GroupRank < GroupRank.MANAGER) + { + player.SendNotification("~r~Du darfst dieses Fahrzeug nicht parken."); + return; + } + } + + Vector3 pos = v.Position; + + sV.PositionX = pos.X; + sV.PositionY = pos.Y; + sV.PositionZ = pos.Z; + sV.Heading = v.Heading; + + player.SendNotification("~g~Das Fahrzeug wurde geparkt."); + + dbContext.SaveChanges(); + } + } + } + + [RemoteEvent("VehicleMenu_ToggleSingleDoor")] + public void VehicleMenuToggleSingleDoorEvent(Client player, int door) + { + if (!player.IsInVehicle) return; + Vehicle veh = player.Vehicle; + + DoorID doorId = (DoorID)door; + + DoorState state = VehicleStreaming.GetDoorState(veh, doorId); + + VehicleStreaming.SetDoorState(veh, doorId, state == DoorState.DoorOpen ? DoorState.DoorClosed : DoorState.DoorOpen); + } + + [RemoteEvent("VehicleMenu_OpenAllDoors")] + public void VehicleMenuOpenAllDoorsEvent(Client player) + { + if (!player.IsInVehicle) return; + Vehicle veh = player.Vehicle; + + foreach (DoorID doorId in Enum.GetValues(typeof(DoorID))) + { + VehicleStreaming.SetDoorState(veh, doorId, DoorState.DoorOpen); + } + } + + [RemoteEvent("VehicleMenu_CloseAllDoors")] + public void VehicleMenuCloseAllDoorsEvent(Client player) + { + if (!player.IsInVehicle) return; + Vehicle veh = player.Vehicle; + + foreach (DoorID doorId in Enum.GetValues(typeof(DoorID))) + { + VehicleStreaming.SetDoorState(veh, doorId, DoorState.DoorClosed); + } + } + } } diff --git a/ReallifeGamemode.Server/Events/Voice.cs b/ReallifeGamemode.Server/Events/Voice.cs index 3e1318ce..992bf698 100644 --- a/ReallifeGamemode.Server/Events/Voice.cs +++ b/ReallifeGamemode.Server/Events/Voice.cs @@ -8,18 +8,18 @@ namespace ReallifeGamemode.Server.Events { - class Voice : Script + class Voice : Script + { + [RemoteEvent("CLIENT:AddVoiceListener")] + public void AddPlayerVoiceListenerEvent(Client player, Client target) { - [RemoteEvent("CLIENT:AddVoiceListener")] - public void AddPlayerVoiceListenerEvent(Client player, Client target) - { - player.EnableVoiceTo(target); - } - - [RemoteEvent("CLIENT:RemoveVoiceListener")] - public void RemovePlayerVoiceListenerEvent(Client player, Client target) - { - player.DisableVoiceTo(target); - } + player.EnableVoiceTo(target); } + + [RemoteEvent("CLIENT:RemoveVoiceListener")] + public void RemovePlayerVoiceListenerEvent(Client player, Client target) + { + player.DisableVoiceTo(target); + } + } } diff --git a/ReallifeGamemode.Server/Extensions/ClientExtension.cs b/ReallifeGamemode.Server/Extensions/ClientExtension.cs index 7d263b2e..9f21662a 100644 --- a/ReallifeGamemode.Server/Extensions/ClientExtension.cs +++ b/ReallifeGamemode.Server/Extensions/ClientExtension.cs @@ -16,164 +16,164 @@ using System.Linq; namespace ReallifeGamemode.Server.Extensions { - public static class ClientExtension + public static class ClientExtension + { + /// + /// Gibt das User-Objekt eines Client's zurück. + /// Gibt nichts zurück, wenn der Client nicht eingeloggt ist + /// + /// Der Client, dessen User man bekommen möchte + /// Ein eventuell vorhandener Datenbank-Context, falls man Änderungen in der Datenbank vornehmen will + /// + public static User GetUser(this Client client, DatabaseContext context = null) { - /// - /// Gibt das User-Objekt eines Client's zurück. - /// Gibt nichts zurück, wenn der Client nicht eingeloggt ist - /// - /// Der Client, dessen User man bekommen möchte - /// Ein eventuell vorhandener Datenbank-Context, falls man Änderungen in der Datenbank vornehmen will - /// - public static User GetUser(this Client client, DatabaseContext context = null) - { - context = context ?? new DatabaseContext(); - if (!client.IsLoggedIn()) return null; - return context - .Users - .Include(u => u.Faction) - .Include(u => u.FactionRank) - .Include(u => u.Group) - .Include(u => u.House) - .Where(u => u.Name == client.Name) - .FirstOrDefault(); - } - - public static Character GetCharacter(this User user, DatabaseContext context = null) - { - if (context == null) - { - using (context = new DatabaseContext()) - { - return context.Characters.FirstOrDefault(u => u.UserId == user.Id); - } - } - else - { - return context.Characters.FirstOrDefault(u => u.UserId == user.Id); - } - } - - /// - /// Gibt zurück, ob ein Client eingeloggt ist - /// - /// Der Client, dessen Login-Status man bekommen möchte - /// - public static bool IsLoggedIn(this Client player) - { - return player.HasData("isLoggedIn") ? player.GetData("isLoggedIn") : false; - } - - public static Vector3 GetPositionFromPlayer(Client player, float distance, int offset = 0) - { - var pos = player.Position; - var a = player.Heading + offset; - var rad = a * Math.PI / 180; - var newpos = new Vector3(pos.X + (distance * Math.Sin(-rad)), - pos.Y + (distance * Math.Cos(-rad)), - pos.Z); - return newpos; - } - - internal static T GetData(this User user, string key, T nullValue) - { - key += "data_"; - if (!user.Client.HasData(key)) return nullValue; - return JsonConvert.DeserializeObject(user.Client.GetData(key)); - } - - internal static T GetData(this User user, string key) => user.GetData(key, default); - - internal static void SetData(this User user, string key, object value) - { - key += "data_"; - user.Client.SetData(key, JsonConvert.SerializeObject(value)); - } - - internal static void GiveWanteds(this User user, Client cop, int amount, string reason) - { - if (user.Wanteds + amount > 40) - { - ChatService.ErrorMessage(cop, "Die Wanteds dürfen ein Limit von 40 nicht überschreiten"); - return; - } - using (var dbContext = new DatabaseContext()) - { - User dbUser = dbContext.Users.Where(u => u.Id == user.Id).FirstOrDefault(); - dbUser.Wanteds += amount; - dbContext.SaveChanges(); - } - } - public static FactionRank GetFactionRank(this User user) - { - using (var dbContext = new DatabaseContext()) - { - FactionRank toReturn = dbContext.FactionRanks.FirstOrDefault(fR => fR.Id == user.FactionRankId); - if (toReturn == null) - { - toReturn = dbContext.FactionRanks.OrderBy(f => f.Order).FirstOrDefault(f => f.FactionId == user.FactionId); - } - - if (toReturn == null) - { - toReturn = new FactionRank - { - RankName = "Rang-Fehler" - }; - } - - return toReturn; - } - } - - public static void BanPlayer(this User user, Client admin, string reason, int mins) - { - using (var banUserContext = new DatabaseContext()) - { - int unixTimestamp = (int)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; - Ban banUser; - - if (mins == 0) - { - ChatService.Broadcast("!{#FF4040}[BAN] " + user.Name + " wurde von " + admin.Name + " permanent gebannt. [" + reason + "]"); - banUser = new Ban { UserId = user.Id, Reason = reason, BannedBy = admin.Name, Applied = unixTimestamp, UntilDateTime = unixTimestamp }; - - user.Client?.Kick(); - - mins--; - } - else - { - ChatService.Broadcast("!{#FF4040}[BAN] " + user.Name + " wurde von " + admin.Name + " für " + mins + " Minuten gebannt. [" + reason + "]"); - banUser = new Ban { UserId = user.Id, Reason = reason, BannedBy = admin.Name, Applied = unixTimestamp, UntilDateTime = unixTimestamp + mins * 60 }; - user.Client?.Kick(); - } - - banUserContext.Bans.Add(banUser); - banUserContext.SaveChanges(); - - var targetUser = banUserContext.Users.Where(u => u.Name == user.Name).FirstOrDefault(); - targetUser.BanId = banUser.Id; - banUserContext.SaveChanges(); - } - } - - public static void UnbanPlayer(this User user) - { - using (var unbanUser = new DatabaseContext()) - { - var targetUser = unbanUser.Users.Where(u => u.Id == user.Id).FirstOrDefault(); - targetUser.BanId = null; - unbanUser.SaveChanges(); - } - } - - public static List GetItems(this User user) - { - using (var dbContext = new DatabaseContext()) - { - return dbContext.UserItems.Where(u => u.UserId == user.Id).ToList(); - } - } + context = context ?? new DatabaseContext(); + if (!client.IsLoggedIn()) return null; + return context + .Users + .Include(u => u.Faction) + .Include(u => u.FactionRank) + .Include(u => u.Group) + .Include(u => u.House) + .Where(u => u.Name == client.Name) + .FirstOrDefault(); } + + public static Character GetCharacter(this User user, DatabaseContext context = null) + { + if (context == null) + { + using (context = new DatabaseContext()) + { + return context.Characters.FirstOrDefault(u => u.UserId == user.Id); + } + } + else + { + return context.Characters.FirstOrDefault(u => u.UserId == user.Id); + } + } + + /// + /// Gibt zurück, ob ein Client eingeloggt ist + /// + /// Der Client, dessen Login-Status man bekommen möchte + /// + public static bool IsLoggedIn(this Client player) + { + return player.HasData("isLoggedIn") ? player.GetData("isLoggedIn") : false; + } + + public static Vector3 GetPositionFromPlayer(Client player, float distance, int offset = 0) + { + var pos = player.Position; + var a = player.Heading + offset; + var rad = a * Math.PI / 180; + var newpos = new Vector3(pos.X + (distance * Math.Sin(-rad)), + pos.Y + (distance * Math.Cos(-rad)), + pos.Z); + return newpos; + } + + internal static T GetData(this User user, string key, T nullValue) + { + key += "data_"; + if (!user.Client.HasData(key)) return nullValue; + return JsonConvert.DeserializeObject(user.Client.GetData(key)); + } + + internal static T GetData(this User user, string key) => user.GetData(key, default); + + internal static void SetData(this User user, string key, object value) + { + key += "data_"; + user.Client.SetData(key, JsonConvert.SerializeObject(value)); + } + + internal static void GiveWanteds(this User user, Client cop, int amount, string reason) + { + if (user.Wanteds + amount > 40) + { + ChatService.ErrorMessage(cop, "Die Wanteds dürfen ein Limit von 40 nicht überschreiten"); + return; + } + using (var dbContext = new DatabaseContext()) + { + User dbUser = dbContext.Users.Where(u => u.Id == user.Id).FirstOrDefault(); + dbUser.Wanteds += amount; + dbContext.SaveChanges(); + } + } + public static FactionRank GetFactionRank(this User user) + { + using (var dbContext = new DatabaseContext()) + { + FactionRank toReturn = dbContext.FactionRanks.FirstOrDefault(fR => fR.Id == user.FactionRankId); + if (toReturn == null) + { + toReturn = dbContext.FactionRanks.OrderBy(f => f.Order).FirstOrDefault(f => f.FactionId == user.FactionId); + } + + if (toReturn == null) + { + toReturn = new FactionRank + { + RankName = "Rang-Fehler" + }; + } + + return toReturn; + } + } + + public static void BanPlayer(this User user, Client admin, string reason, int mins) + { + using (var banUserContext = new DatabaseContext()) + { + int unixTimestamp = (int)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; + Ban banUser; + + if (mins == 0) + { + ChatService.Broadcast("!{#FF4040}[BAN] " + user.Name + " wurde von " + admin.Name + " permanent gebannt. [" + reason + "]"); + banUser = new Ban { UserId = user.Id, Reason = reason, BannedBy = admin.Name, Applied = unixTimestamp, UntilDateTime = unixTimestamp }; + + user.Client?.Kick(); + + mins--; + } + else + { + ChatService.Broadcast("!{#FF4040}[BAN] " + user.Name + " wurde von " + admin.Name + " für " + mins + " Minuten gebannt. [" + reason + "]"); + banUser = new Ban { UserId = user.Id, Reason = reason, BannedBy = admin.Name, Applied = unixTimestamp, UntilDateTime = unixTimestamp + mins * 60 }; + user.Client?.Kick(); + } + + banUserContext.Bans.Add(banUser); + banUserContext.SaveChanges(); + + var targetUser = banUserContext.Users.Where(u => u.Name == user.Name).FirstOrDefault(); + targetUser.BanId = banUser.Id; + banUserContext.SaveChanges(); + } + } + + public static void UnbanPlayer(this User user) + { + using (var unbanUser = new DatabaseContext()) + { + var targetUser = unbanUser.Users.Where(u => u.Id == user.Id).FirstOrDefault(); + targetUser.BanId = null; + unbanUser.SaveChanges(); + } + } + + public static List GetItems(this User user) + { + using (var dbContext = new DatabaseContext()) + { + return dbContext.UserItems.Where(u => u.UserId == user.Id).ToList(); + } + } + } } diff --git a/ReallifeGamemode.Server/Extensions/EnumExtensions.cs b/ReallifeGamemode.Server/Extensions/EnumExtensions.cs index df2bde5b..884d66bf 100644 --- a/ReallifeGamemode.Server/Extensions/EnumExtensions.cs +++ b/ReallifeGamemode.Server/Extensions/EnumExtensions.cs @@ -6,45 +6,45 @@ using System.Text; namespace ReallifeGamemode.Server.Extensions { - public static class EnumExtensions + public static class EnumExtensions + { + /// + /// Gibt den richtigen Namen eines Admin Levels zurück + /// + /// Das Admin Level, dessen Namen man bekommen möchte + /// + public static string GetName(this AdminLevel level) { - /// - /// Gibt den richtigen Namen eines Admin Levels zurück - /// - /// Das Admin Level, dessen Namen man bekommen möchte - /// - public static string GetName(this AdminLevel level) - { - switch (level) - { - case SUPPORTER: - return "Supporter"; - case ADMIN: - case ADMIN2: - case ADMIN3: - return "Admin"; - case HEADADMIN: - return "Headadmin"; - case PROJEKTLEITUNG: - return "Projektleiter"; - default: - return "Spieler"; - } - } - - public static string GetName(this GroupRank rank) - { - switch(rank) - { - case GroupRank.OWNER: - return "Besitzer"; - case GroupRank.MANAGER: - return "Manager"; - case GroupRank.MEMBER: - return "Mitglied"; - default: - return "Keiner"; - } - } + switch (level) + { + case SUPPORTER: + return "Supporter"; + case ADMIN: + case ADMIN2: + case ADMIN3: + return "Admin"; + case HEADADMIN: + return "Headadmin"; + case PROJEKTLEITUNG: + return "Projektleiter"; + default: + return "Spieler"; + } } + + public static string GetName(this GroupRank rank) + { + switch (rank) + { + case GroupRank.OWNER: + return "Besitzer"; + case GroupRank.MANAGER: + return "Manager"; + case GroupRank.MEMBER: + return "Mitglied"; + default: + return "Keiner"; + } + } + } } diff --git a/ReallifeGamemode.Server/Extensions/HouseExtensions.cs b/ReallifeGamemode.Server/Extensions/HouseExtensions.cs index 2056c6b6..0b1f15c2 100644 --- a/ReallifeGamemode.Server/Extensions/HouseExtensions.cs +++ b/ReallifeGamemode.Server/Extensions/HouseExtensions.cs @@ -8,14 +8,14 @@ using System.Text; namespace ReallifeGamemode.Server.Extensions { - static class HouseExtensions + static class HouseExtensions + { + public static House Refresh(this House house) { - public static House Refresh(this House house) - { - using(var dbContext = new DatabaseContext()) - { - return dbContext.Houses.Where(h => h.Id == house.Id).Include(h => h.Owner).FirstOrDefault(); - } - } + using (var dbContext = new DatabaseContext()) + { + return dbContext.Houses.Where(h => h.Id == house.Id).Include(h => h.Owner).FirstOrDefault(); + } } + } } diff --git a/ReallifeGamemode.Server/Extensions/IntegerExtension.cs b/ReallifeGamemode.Server/Extensions/IntegerExtension.cs index 3232526b..9d59b688 100644 --- a/ReallifeGamemode.Server/Extensions/IntegerExtension.cs +++ b/ReallifeGamemode.Server/Extensions/IntegerExtension.cs @@ -4,15 +4,15 @@ using System.Text; namespace ReallifeGamemode.Server.Extensions { - public static class IntegerExtension + public static class IntegerExtension + { + public static string ToMoneyString(this int? money) { - public static string ToMoneyString(this int? money) - { - return ToMoneyString(money ?? 0); - } - public static string ToMoneyString(this int money) - { - return "$" + string.Format(Main.SERVER_CULTURE, "{0:C0}", money).Replace("€", ""); - } + return ToMoneyString(money ?? 0); } + public static string ToMoneyString(this int money) + { + return "$" + string.Format(Main.SERVER_CULTURE, "{0:C0}", money).Replace("€", ""); + } + } } diff --git a/ReallifeGamemode.Server/Extensions/ListExtensions.cs b/ReallifeGamemode.Server/Extensions/ListExtensions.cs index e8599db4..b8fedb14 100644 --- a/ReallifeGamemode.Server/Extensions/ListExtensions.cs +++ b/ReallifeGamemode.Server/Extensions/ListExtensions.cs @@ -6,11 +6,11 @@ using System.Text; namespace ReallifeGamemode.Server.Extensions { - static class ListExtensions + static class ListExtensions + { + public static bool Contains(this List list, Client client) { - public static bool Contains(this List list, Client client) - { - return list.Any(l => l.Handle.Value == client.Handle.Value); - } + return list.Any(l => l.Handle.Value == client.Handle.Value); } + } } diff --git a/ReallifeGamemode.Server/Extensions/VehicleExtension.cs b/ReallifeGamemode.Server/Extensions/VehicleExtension.cs index dd0f5b79..28c7a96f 100644 --- a/ReallifeGamemode.Server/Extensions/VehicleExtension.cs +++ b/ReallifeGamemode.Server/Extensions/VehicleExtension.cs @@ -9,16 +9,16 @@ using System.Text; namespace ReallifeGamemode.Server.Extensions { - public static class VehicleExtension + public static class VehicleExtension + { + public static ServerVehicle GetServerVehicle(this Vehicle veh, DatabaseContext context = null) { - public static ServerVehicle GetServerVehicle(this Vehicle veh, DatabaseContext context = null) - { - return VehicleManager.GetServerVehicleFromVehicle(veh, context); - } - - public static Client GetDriver(this Vehicle veh) - { - return NAPI.Pools.GetAllPlayers().Where(p => p.Vehicle.Handle == veh.Handle && p.VehicleSeat == -1).FirstOrDefault(); - } + return VehicleManager.GetServerVehicleFromVehicle(veh, context); } + + public static Client GetDriver(this Vehicle veh) + { + return NAPI.Pools.GetAllPlayers().Where(p => p.Vehicle.Handle == veh.Handle && p.VehicleSeat == -1).FirstOrDefault(); + } + } } diff --git a/ReallifeGamemode.Server/Factions/Medic/Medic.cs b/ReallifeGamemode.Server/Factions/Medic/Medic.cs index ba7e453b..5c35a560 100644 --- a/ReallifeGamemode.Server/Factions/Medic/Medic.cs +++ b/ReallifeGamemode.Server/Factions/Medic/Medic.cs @@ -14,84 +14,84 @@ using ReallifeGamemode.Server.Services; namespace ReallifeGamemode.Server.Factions.Medic { - public class Medic : Script + public class Medic : Script + { + public static List ReviveTasks = new List(); + public static List HealTasks = new List(); + public static List FireTasks = new List(); + + public static void AddTaskToList(MedicTask task) { - public static List ReviveTasks = new List(); - public static List HealTasks = new List(); - public static List FireTasks = new List(); + if (task == null) + { + return; + } - public static void AddTaskToList(MedicTask task) - { - if (task == null) - { - return; - } - - switch (task.Type) - { - case MedicTaskType.REVIVE: - ReviveTasks.Add(task); - break; - case MedicTaskType.HEAL: - HealTasks.Add(task); - break; - case MedicTaskType.FIRE: - FireTasks.Add(task); - break; - } - } - - public static void RemoveTaskFromList(MedicTask task) - { - if(task == null) - { - return; - } - - switch (task.Type) - { - case MedicTaskType.REVIVE: - ReviveTasks.Remove(task); - break; - case MedicTaskType.HEAL: - HealTasks.Remove(task); - break; - case MedicTaskType.FIRE: - FireTasks.Remove(task); - break; - } - } - [RemoteEvent("loadMedicTasks")] - public void LoadMedicTasks(Client player, int type) - { - switch (type) - { - case 0: - player.TriggerEvent("showMedicTasks", 0, JsonConvert.SerializeObject(ReviveTasks)); - break; - case 1: - player.TriggerEvent("showMedicTasks", 1, JsonConvert.SerializeObject(HealTasks)); - break; - case 2: - player.TriggerEvent("showMedicTasks", 2, JsonConvert.SerializeObject(FireTasks)); - break; - } - } - [RemoteEvent("updateMedicTask")] - public void UpdateMedicTasks(Client player, int type, int index, string medicName) - { - switch (type) - { - case 0: - ReviveTasks[index].MedicName = medicName; - break; - case 1: - HealTasks[index].MedicName = medicName; - break; - case 2: - FireTasks[index].MedicName = medicName; - break; - } - } + switch (task.Type) + { + case MedicTaskType.REVIVE: + ReviveTasks.Add(task); + break; + case MedicTaskType.HEAL: + HealTasks.Add(task); + break; + case MedicTaskType.FIRE: + FireTasks.Add(task); + break; + } } + + public static void RemoveTaskFromList(MedicTask task) + { + if (task == null) + { + return; + } + + switch (task.Type) + { + case MedicTaskType.REVIVE: + ReviveTasks.Remove(task); + break; + case MedicTaskType.HEAL: + HealTasks.Remove(task); + break; + case MedicTaskType.FIRE: + FireTasks.Remove(task); + break; + } + } + [RemoteEvent("loadMedicTasks")] + public void LoadMedicTasks(Client player, int type) + { + switch (type) + { + case 0: + player.TriggerEvent("showMedicTasks", 0, JsonConvert.SerializeObject(ReviveTasks)); + break; + case 1: + player.TriggerEvent("showMedicTasks", 1, JsonConvert.SerializeObject(HealTasks)); + break; + case 2: + player.TriggerEvent("showMedicTasks", 2, JsonConvert.SerializeObject(FireTasks)); + break; + } + } + [RemoteEvent("updateMedicTask")] + public void UpdateMedicTasks(Client player, int type, int index, string medicName) + { + switch (type) + { + case 0: + ReviveTasks[index].MedicName = medicName; + break; + case 1: + HealTasks[index].MedicName = medicName; + break; + case 2: + FireTasks[index].MedicName = medicName; + break; + } + } + } } diff --git a/ReallifeGamemode.Server/Factions/Medic/MedicTask.cs b/ReallifeGamemode.Server/Factions/Medic/MedicTask.cs index 8be1577c..5f5365ed 100644 --- a/ReallifeGamemode.Server/Factions/Medic/MedicTask.cs +++ b/ReallifeGamemode.Server/Factions/Medic/MedicTask.cs @@ -12,22 +12,22 @@ using GTANetworkAPI; namespace ReallifeGamemode.Server.Factions.Medic { - public class MedicTask - { - public string Victim { get; set; } - public Vector3 Position { get; set; } - public MedicTaskType Type { get; set; } - public string CauseOfDeath { get; set; } - public string Description { get; set; } - public string Caller { get; set; } - public DateTime Time { get; set; } - public string MedicName { get; set; } - } + public class MedicTask + { + public string Victim { get; set; } + public Vector3 Position { get; set; } + public MedicTaskType Type { get; set; } + public string CauseOfDeath { get; set; } + public string Description { get; set; } + public string Caller { get; set; } + public DateTime Time { get; set; } + public string MedicName { get; set; } + } - public enum MedicTaskType - { - REVIVE, - HEAL, - FIRE - } + public enum MedicTaskType + { + REVIVE, + HEAL, + FIRE + } } diff --git a/ReallifeGamemode.Server/Finance/Economy.cs b/ReallifeGamemode.Server/Finance/Economy.cs index 4804553b..94e2b98c 100644 --- a/ReallifeGamemode.Server/Finance/Economy.cs +++ b/ReallifeGamemode.Server/Finance/Economy.cs @@ -17,169 +17,169 @@ using ReallifeGamemode.Server.Services; namespace ReallifeGamemode.Server.Finance { - public class Economy + public class Economy + { + public static Dictionary Paychecks { get; set; } = new Dictionary(); + + public static (int, float, float) GetEconomyClass(Client client, int wage) { - public static Dictionary Paychecks { get; set; } = new Dictionary(); + 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; - 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; - client.GetUser(dbContext).Wage = 0; - 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."); - - } + 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; + client.GetUser(dbContext).Wage = 0; + 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."); + + } + } } diff --git a/ReallifeGamemode.Server/Finance/Paycheck.cs b/ReallifeGamemode.Server/Finance/Paycheck.cs index 1ba5bd14..7eb75a83 100644 --- a/ReallifeGamemode.Server/Finance/Paycheck.cs +++ b/ReallifeGamemode.Server/Finance/Paycheck.cs @@ -10,25 +10,25 @@ using ReallifeGamemode.Server.Services; namespace ReallifeGamemode.Server.Finance { - public class Paycheck + public class Paycheck + { + public float FinancialHelp { get; set; } = 0; + public float FinancialInterest { get; set; } = 0; + public int VehicleTaxation { get; set; } = 0; + public float PropertyTaxation { get; set; } = 0; + public int Wage { get; set; } = 0; + public int Amount { get; set; } = 0; + + public Paycheck(float FinancialHelp, float FinancialInterest, int VehicleTaxation, float PropertyTaxation, int Wage, int Amount) { - public float FinancialHelp { get; set; } = 0; - public float FinancialInterest { get; set; } = 0; - public int VehicleTaxation { get; set; } = 0; - public float PropertyTaxation { get; set; } = 0; - public int Wage { get; set; } = 0; - public int Amount { get; set; } = 0; - - public Paycheck(float FinancialHelp, float FinancialInterest, int VehicleTaxation, float PropertyTaxation, int Wage, int Amount) - { - this.FinancialHelp = FinancialHelp; - this.FinancialInterest = FinancialInterest; - this.VehicleTaxation = VehicleTaxation; - this.PropertyTaxation = PropertyTaxation; - this.Wage = Wage; - this.Amount = Amount; - } - - + this.FinancialHelp = FinancialHelp; + this.FinancialInterest = FinancialInterest; + this.VehicleTaxation = VehicleTaxation; + this.PropertyTaxation = PropertyTaxation; + this.Wage = Wage; + this.Amount = Amount; } + + + } } diff --git a/ReallifeGamemode.Server/Inventory/GroundItem.cs b/ReallifeGamemode.Server/Inventory/GroundItem.cs index 8bea67af..9737783a 100644 --- a/ReallifeGamemode.Server/Inventory/GroundItem.cs +++ b/ReallifeGamemode.Server/Inventory/GroundItem.cs @@ -9,102 +9,102 @@ using ReallifeGamemode.Server.Models; namespace ReallifeGamemode.Server.Inventory { - public class GroundItem : Script + public class GroundItem : Script + { + public int ItemId { get; set; } + public int Amount { get; set; } + public Vector3 Position { get; set; } + + public static List GroundItems = new List(); + public static List GroundObjects = new List(); + public static List GroundTextLabels = new List(); + + public static void AddGroundItem(GroundItem grndItem, GTANetworkAPI.Object grndObject, TextLabel grndTextLabel) { - public int ItemId { get; set; } - public int Amount { get; set; } - public Vector3 Position { get; set; } - - public static List GroundItems = new List(); - public static List GroundObjects = new List(); - public static List GroundTextLabels = new List(); - - public static void AddGroundItem(GroundItem grndItem, GTANetworkAPI.Object grndObject, TextLabel grndTextLabel) - { - GroundItems.Add(grndItem); - GroundObjects.Add(grndObject); - GroundTextLabels.Add(grndTextLabel); - } - - public static void PickUpGroundItem(Client player) - { - GroundItem nearest = GroundItems.FirstOrDefault(d => d.Position.DistanceTo(player.Position) <= 1.2); - if (nearest != null) - { - var invWeight = InventoryManager.GetUserInventoryWeight(player); - var itemsToAdd = 0; - GTANetworkAPI.Object nearestObject = GroundObjects.FirstOrDefault(d => d.Position == nearest.Position); - TextLabel nearestTextLabel = GroundTextLabels.FirstOrDefault(d => d.Position == nearest.Position); - IItem nearestItem = InventoryManager.GetItemById(nearest.ItemId); - UserItem existingItem = InventoryManager.UserHasThisItem(player, nearest.ItemId); - var user = player.GetUser(); - if (nearestItem.Gewicht * nearest.Amount + invWeight > 40000) - { - for (var i = 1; i <= nearest.Amount; i++) - { - if (invWeight + (i * nearestItem.Gewicht) > 40000) - { - break; - } - else - { - itemsToAdd = i; - } - } - if (itemsToAdd < 1) - { - player.SendNotification("~r~Du hast keinen Platz im Inventar!", false); - } - else - { - if (existingItem != null) - { - using (var context = new DatabaseContext()) - { - UserItem existingUserItem = context.UserItems.FirstOrDefault(i => i.Id == existingItem.Id); - existingUserItem.Amount += itemsToAdd; - context.SaveChanges(); - } - } - else - { - UserItem newItem = new UserItem { ItemId = nearest.ItemId, UserId = user.Id, Amount = nearest.Amount }; - InventoryManager.AddItemToInventory(player, newItem); - } - nearest.Amount -= itemsToAdd; - nearestTextLabel.Text = nearestItem.Name + " ~s~(~y~" + nearest.Amount + "~s~)"; - player.SendNotification("Du hast nur ~g~" + itemsToAdd + " ~y~" + nearestItem.Name + "~s~ aufgehoben."); - } - } - else - { - if (existingItem != null) - { - using (var context = new DatabaseContext()) - { - UserItem existingUserItem = context.UserItems.FirstOrDefault(i => i.Id == existingItem.Id && i.UserId == user.Id); - existingUserItem.Amount += nearest.Amount; - context.SaveChanges(); - } - } - else - { - UserItem item = new UserItem() { ItemId = nearest.ItemId, UserId = user.Id, Amount = nearest.Amount }; - InventoryManager.AddItemToInventory(player, item); - } - RemoveGroundItem(nearest, nearestObject, nearestTextLabel); - player.SendNotification("Du hast ~g~" + nearest.Amount + " ~y~" + nearestItem.Name + " ~s~aufgehoben."); - } - } - } - - public static void RemoveGroundItem(GroundItem grndItem, GTANetworkAPI.Object grndObject, TextLabel grndTextLabel) - { - GroundItems.Remove(grndItem); - NAPI.Entity.DeleteEntity(grndObject); - NAPI.Entity.DeleteEntity(grndTextLabel); - GroundObjects.Remove(grndObject); - GroundTextLabels.Remove(grndTextLabel); - } + GroundItems.Add(grndItem); + GroundObjects.Add(grndObject); + GroundTextLabels.Add(grndTextLabel); } + + public static void PickUpGroundItem(Client player) + { + GroundItem nearest = GroundItems.FirstOrDefault(d => d.Position.DistanceTo(player.Position) <= 1.2); + if (nearest != null) + { + var invWeight = InventoryManager.GetUserInventoryWeight(player); + var itemsToAdd = 0; + GTANetworkAPI.Object nearestObject = GroundObjects.FirstOrDefault(d => d.Position == nearest.Position); + TextLabel nearestTextLabel = GroundTextLabels.FirstOrDefault(d => d.Position == nearest.Position); + IItem nearestItem = InventoryManager.GetItemById(nearest.ItemId); + UserItem existingItem = InventoryManager.UserHasThisItem(player, nearest.ItemId); + var user = player.GetUser(); + if (nearestItem.Gewicht * nearest.Amount + invWeight > 40000) + { + for (var i = 1; i <= nearest.Amount; i++) + { + if (invWeight + (i * nearestItem.Gewicht) > 40000) + { + break; + } + else + { + itemsToAdd = i; + } + } + if (itemsToAdd < 1) + { + player.SendNotification("~r~Du hast keinen Platz im Inventar!", false); + } + else + { + if (existingItem != null) + { + using (var context = new DatabaseContext()) + { + UserItem existingUserItem = context.UserItems.FirstOrDefault(i => i.Id == existingItem.Id); + existingUserItem.Amount += itemsToAdd; + context.SaveChanges(); + } + } + else + { + UserItem newItem = new UserItem { ItemId = nearest.ItemId, UserId = user.Id, Amount = nearest.Amount }; + InventoryManager.AddItemToInventory(player, newItem); + } + nearest.Amount -= itemsToAdd; + nearestTextLabel.Text = nearestItem.Name + " ~s~(~y~" + nearest.Amount + "~s~)"; + player.SendNotification("Du hast nur ~g~" + itemsToAdd + " ~y~" + nearestItem.Name + "~s~ aufgehoben."); + } + } + else + { + if (existingItem != null) + { + using (var context = new DatabaseContext()) + { + UserItem existingUserItem = context.UserItems.FirstOrDefault(i => i.Id == existingItem.Id && i.UserId == user.Id); + existingUserItem.Amount += nearest.Amount; + context.SaveChanges(); + } + } + else + { + UserItem item = new UserItem() { ItemId = nearest.ItemId, UserId = user.Id, Amount = nearest.Amount }; + InventoryManager.AddItemToInventory(player, item); + } + RemoveGroundItem(nearest, nearestObject, nearestTextLabel); + player.SendNotification("Du hast ~g~" + nearest.Amount + " ~y~" + nearestItem.Name + " ~s~aufgehoben."); + } + } + } + + public static void RemoveGroundItem(GroundItem grndItem, GTANetworkAPI.Object grndObject, TextLabel grndTextLabel) + { + GroundItems.Remove(grndItem); + NAPI.Entity.DeleteEntity(grndObject); + NAPI.Entity.DeleteEntity(grndTextLabel); + GroundObjects.Remove(grndObject); + GroundTextLabels.Remove(grndTextLabel); + } + } } diff --git a/ReallifeGamemode.Server/Inventory/Interfaces/IDroppableItem.cs b/ReallifeGamemode.Server/Inventory/Interfaces/IDroppableItem.cs index a9e3e042..0626bd76 100644 --- a/ReallifeGamemode.Server/Inventory/Interfaces/IDroppableItem.cs +++ b/ReallifeGamemode.Server/Inventory/Interfaces/IDroppableItem.cs @@ -12,8 +12,8 @@ using System.Text; namespace ReallifeGamemode.Server.Inventory.Interfaces { - public interface IDroppableItem : IItem - { - uint Object { get; } - } + public interface IDroppableItem : IItem + { + uint Object { get; } + } } diff --git a/ReallifeGamemode.Server/Inventory/Interfaces/IItem.cs b/ReallifeGamemode.Server/Inventory/Interfaces/IItem.cs index 07bd4124..656e03d6 100644 --- a/ReallifeGamemode.Server/Inventory/Interfaces/IItem.cs +++ b/ReallifeGamemode.Server/Inventory/Interfaces/IItem.cs @@ -10,12 +10,12 @@ using System.Text; namespace ReallifeGamemode.Server.Inventory.Interfaces { - public interface IItem - { - int Id { get; } - string Name { get; } - string Description { get; } - int Gewicht { get; } - string Einheit { get; } - } + public interface IItem + { + int Id { get; } + string Name { get; } + string Description { get; } + int Gewicht { get; } + string Einheit { get; } + } } diff --git a/ReallifeGamemode.Server/Inventory/Interfaces/IUsableItem.cs b/ReallifeGamemode.Server/Inventory/Interfaces/IUsableItem.cs index ca56a496..c0e32fa9 100644 --- a/ReallifeGamemode.Server/Inventory/Interfaces/IUsableItem.cs +++ b/ReallifeGamemode.Server/Inventory/Interfaces/IUsableItem.cs @@ -12,8 +12,8 @@ using System.Text; namespace ReallifeGamemode.Server.Inventory.Interfaces { - public interface IUsableItem : IItem, IDroppableItem - { - void Use(UserItem uItem); - } + public interface IUsableItem : IItem, IDroppableItem + { + void Use(UserItem uItem); + } } diff --git a/ReallifeGamemode.Server/Inventory/Items/Cheeseburger.cs b/ReallifeGamemode.Server/Inventory/Items/Cheeseburger.cs index 47e97388..818ada87 100644 --- a/ReallifeGamemode.Server/Inventory/Items/Cheeseburger.cs +++ b/ReallifeGamemode.Server/Inventory/Items/Cheeseburger.cs @@ -11,14 +11,14 @@ using System.Text; namespace ReallifeGamemode.Server.Inventory.Items { - public class Cheeseburger : FoodItem - { - public override int Id => 2; - public override string Name => "Cheeseburger"; - public override string Description => "Wie der Hamburger, nur mit Käse."; - public override int Gewicht => 320; - public override string Einheit => "g"; - public override int HpAmount => 20; - public override uint Object => 2240524752; - } + public class Cheeseburger : FoodItem + { + public override int Id => 2; + public override string Name => "Cheeseburger"; + public override string Description => "Wie der Hamburger, nur mit Käse."; + public override int Gewicht => 320; + public override string Einheit => "g"; + public override int HpAmount => 20; + public override uint Object => 2240524752; + } } diff --git a/ReallifeGamemode.Server/Inventory/Items/Chickenburger.cs b/ReallifeGamemode.Server/Inventory/Items/Chickenburger.cs index 1f8cc8b0..eefd430c 100644 --- a/ReallifeGamemode.Server/Inventory/Items/Chickenburger.cs +++ b/ReallifeGamemode.Server/Inventory/Items/Chickenburger.cs @@ -11,14 +11,14 @@ using System.Text; namespace ReallifeGamemode.Server.Inventory.Items { - public class Chickenburger : FoodItem - { - public override int Id => 3; - public override string Name => "Chickenburger"; - public override string Description => "Hühnchenburger"; - public override int Gewicht => 330; - public override string Einheit => "g"; - public override int HpAmount => 25; - public override uint Object => 2240524752; - } + public class Chickenburger : FoodItem + { + public override int Id => 3; + public override string Name => "Chickenburger"; + public override string Description => "Hühnchenburger"; + public override int Gewicht => 330; + public override string Einheit => "g"; + public override int HpAmount => 25; + public override uint Object => 2240524752; + } } diff --git a/ReallifeGamemode.Server/Inventory/Items/DropItem.cs b/ReallifeGamemode.Server/Inventory/Items/DropItem.cs index 8bc62255..91be6728 100644 --- a/ReallifeGamemode.Server/Inventory/Items/DropItem.cs +++ b/ReallifeGamemode.Server/Inventory/Items/DropItem.cs @@ -9,20 +9,20 @@ using System.Text; namespace ReallifeGamemode.Server.Inventory.Items { - public abstract class DropItem : IDroppableItem - { - public abstract int HpAmount { get; } - public abstract int Id { get; } - public abstract string Name { get; } - public abstract string Description { get; } - public abstract int Gewicht { get; } - public abstract string Einheit { get; } - public abstract uint Object { get; } + public abstract class DropItem : IDroppableItem + { + public abstract int HpAmount { get; } + public abstract int Id { get; } + public abstract string Name { get; } + public abstract string Description { get; } + public abstract int Gewicht { get; } + public abstract string Einheit { get; } + public abstract uint Object { get; } - public void Drop(UserItem uItem, Client player, int amount) - { - player.SendNotification("Du hast ~g~" + amount + " ~y~" + InventoryManager.GetItemById(uItem.ItemId).Name + " ~s~weggeworfen.", false); - InventoryManager.RemoveUserItem(player.GetUser(), uItem, amount); - } + public void Drop(UserItem uItem, Client player, int amount) + { + player.SendNotification("Du hast ~g~" + amount + " ~y~" + InventoryManager.GetItemById(uItem.ItemId).Name + " ~s~weggeworfen.", false); + InventoryManager.RemoveUserItem(player.GetUser(), uItem, amount); } + } } diff --git a/ReallifeGamemode.Server/Inventory/Items/FoodItem.cs b/ReallifeGamemode.Server/Inventory/Items/FoodItem.cs index 3f191d20..eee68551 100644 --- a/ReallifeGamemode.Server/Inventory/Items/FoodItem.cs +++ b/ReallifeGamemode.Server/Inventory/Items/FoodItem.cs @@ -9,29 +9,29 @@ using System.Text; namespace ReallifeGamemode.Server.Inventory.Items { - public abstract class FoodItem : IUsableItem + public abstract class FoodItem : IUsableItem + { + public abstract int HpAmount { get; } + public abstract int Id { get; } + public abstract string Name { get; } + public abstract string Description { get; } + public abstract int Gewicht { get; } + public abstract string Einheit { get; } + public abstract uint Object { get; } + + public void Use(UserItem uItem) { - public abstract int HpAmount { get; } - public abstract int Id { get; } - public abstract string Name { get; } - public abstract string Description { get; } - public abstract int Gewicht { get; } - public abstract string Einheit { get; } - public abstract uint Object { get; } + Client player = uItem.GetUser().Client; - public void Use(UserItem uItem) - { - Client player = uItem.GetUser().Client; + int amountToAdd = HpAmount; + if (player.Health + amountToAdd > 100) + { + amountToAdd = 100 - player.Health; + } - int amountToAdd = HpAmount; - if (player.Health + amountToAdd > 100) - { - amountToAdd = 100 - player.Health; - } - - player.Health += amountToAdd; - player.SendNotification("Du hast ein/einen ~y~" + InventoryManager.GetItemById(uItem.ItemId).Name + " ~s~gegessen.", false); - InventoryManager.RemoveUserItem(player.GetUser(), uItem, 1); - } + player.Health += amountToAdd; + player.SendNotification("Du hast ein/einen ~y~" + InventoryManager.GetItemById(uItem.ItemId).Name + " ~s~gegessen.", false); + InventoryManager.RemoveUserItem(player.GetUser(), uItem, 1); } + } } diff --git a/ReallifeGamemode.Server/Inventory/Items/Hamburger.cs b/ReallifeGamemode.Server/Inventory/Items/Hamburger.cs index a1985372..f843a390 100644 --- a/ReallifeGamemode.Server/Inventory/Items/Hamburger.cs +++ b/ReallifeGamemode.Server/Inventory/Items/Hamburger.cs @@ -11,14 +11,14 @@ using System.Text; namespace ReallifeGamemode.Server.Inventory.Items { - public class Hamburger : FoodItem - { - public override int Id => 1; - public override string Name => "Hamburger"; - public override string Description => "Ein leckerer Hamburger."; - public override int Gewicht => 300; - public override string Einheit => "g"; - public override int HpAmount => 20; - public override uint Object => 2240524752; - } + public class Hamburger : FoodItem + { + public override int Id => 1; + public override string Name => "Hamburger"; + public override string Description => "Ein leckerer Hamburger."; + public override int Gewicht => 300; + public override string Einheit => "g"; + public override int HpAmount => 20; + public override uint Object => 2240524752; + } } diff --git a/ReallifeGamemode.Server/Inventory/Items/Holz.cs b/ReallifeGamemode.Server/Inventory/Items/Holz.cs index 4c3faa49..c784a872 100644 --- a/ReallifeGamemode.Server/Inventory/Items/Holz.cs +++ b/ReallifeGamemode.Server/Inventory/Items/Holz.cs @@ -11,13 +11,13 @@ using System.Text; namespace ReallifeGamemode.Server.Inventory.Items { - public class Holz : IDroppableItem - { - public int Id => 4; - public string Name => "Holz"; - public string Description => "Ich und mein Holz."; - public int Gewicht => 1000; - public string Einheit => "g"; - public uint Object => 1805779401; - } + public class Holz : IDroppableItem + { + public int Id => 4; + public string Name => "Holz"; + public string Description => "Ich und mein Holz."; + public int Gewicht => 1000; + public string Einheit => "g"; + public uint Object => 1805779401; + } } diff --git a/ReallifeGamemode.Server/Inventory/Items/Kraftstoff.cs b/ReallifeGamemode.Server/Inventory/Items/Kraftstoff.cs index 9d613592..7f3a3d9a 100644 --- a/ReallifeGamemode.Server/Inventory/Items/Kraftstoff.cs +++ b/ReallifeGamemode.Server/Inventory/Items/Kraftstoff.cs @@ -11,14 +11,14 @@ using System.Text; namespace ReallifeGamemode.Server.Inventory.Items { - public class Kraftstoff : DropItem - { - public override int Id => 5; - public override string Name => "Kraftstoff"; - public override string Description => "Der Stoff gibt dir Kraft."; - public override int Gewicht => 1000; - public override string Einheit => "g"; - public override int HpAmount => 20; - public override uint Object => 786272259; - } + public class Kraftstoff : DropItem + { + public override int Id => 5; + public override string Name => "Kraftstoff"; + public override string Description => "Der Stoff gibt dir Kraft."; + public override int Gewicht => 1000; + public override string Einheit => "g"; + public override int HpAmount => 20; + public override uint Object => 786272259; + } } diff --git a/ReallifeGamemode.Server/Job/BusDriverJob.cs b/ReallifeGamemode.Server/Job/BusDriverJob.cs index 5e7eb5f5..5987d364 100644 --- a/ReallifeGamemode.Server/Job/BusDriverJob.cs +++ b/ReallifeGamemode.Server/Job/BusDriverJob.cs @@ -4,12 +4,12 @@ using System.Text; namespace ReallifeGamemode.Server.Job { - class BusDriverJob : JobBase - { - public override int Id => 4; + class BusDriverJob : JobBase + { + public override int Id => 4; - public override string Name => "Busfahrer"; + public override string Name => "Busfahrer"; - public override bool NeedVehicleToStart => true; - } + public override bool NeedVehicleToStart => true; + } } diff --git a/ReallifeGamemode.Server/Job/JobBase.cs b/ReallifeGamemode.Server/Job/JobBase.cs index c952e9cd..16376fb1 100644 --- a/ReallifeGamemode.Server/Job/JobBase.cs +++ b/ReallifeGamemode.Server/Job/JobBase.cs @@ -11,53 +11,53 @@ using System.Text; namespace ReallifeGamemode.Server.Job { - public abstract class JobBase + public abstract class JobBase + { + public delegate void JobStartHandler(Client player); + public delegate void JobStopHandler(Client player); + + public event JobStartHandler JobStart; + public event JobStopHandler JobStop; + + private readonly List _inJob = new List(); + + public abstract int Id { get; } + + public abstract string Name { get; } + + public abstract bool NeedVehicleToStart { get; } + + public void StartJob(Client player) { - public delegate void JobStartHandler(Client player); - public delegate void JobStopHandler(Client player); + if (_inJob.Contains(player)) return; + _inJob.Add(player); - public event JobStartHandler JobStart; - public event JobStopHandler JobStop; + ChatService.SendMessage(player, $"~y~[JOB]~s~ Du hast deinen Job ~o~{this.Name}~s~ gestartet."); - private readonly List _inJob = new List(); - - public abstract int Id { get; } - - public abstract string Name { get; } - - public abstract bool NeedVehicleToStart { get; } - - public void StartJob(Client player) - { - if (_inJob.Contains(player)) return; - _inJob.Add(player); - - ChatService.SendMessage(player, $"~y~[JOB]~s~ Du hast deinen Job ~o~{this.Name}~s~ gestartet."); - - JobStart?.Invoke(player); - } - - public void StopJob(Client player, bool quit = false) - { - if (!_inJob.Contains(player)) return; - _inJob.Remove(player); - - if (quit) - { - ChatService.SendMessage(player, $"~y~[JOB]~s~ Du hast deinen Job ~o~{this.Name}~s~ beendet."); - } - - JobStop?.Invoke(player); - } - - public List GetJobVehicles() - { - using (var dbContext = new DatabaseContext()) - { - return dbContext.JobVehicles.Where(j => j.JobId == Id).ToList(); - } - } - - public List GetUsersInJob() => _inJob; + JobStart?.Invoke(player); } + + public void StopJob(Client player, bool quit = false) + { + if (!_inJob.Contains(player)) return; + _inJob.Remove(player); + + if (quit) + { + ChatService.SendMessage(player, $"~y~[JOB]~s~ Du hast deinen Job ~o~{this.Name}~s~ beendet."); + } + + JobStop?.Invoke(player); + } + + public List GetJobVehicles() + { + using (var dbContext = new DatabaseContext()) + { + return dbContext.JobVehicles.Where(j => j.JobId == Id).ToList(); + } + } + + public List GetUsersInJob() => _inJob; + } } diff --git a/ReallifeGamemode.Server/Job/PilotJob.cs b/ReallifeGamemode.Server/Job/PilotJob.cs index 5e8fee70..b6adaa41 100644 --- a/ReallifeGamemode.Server/Job/PilotJob.cs +++ b/ReallifeGamemode.Server/Job/PilotJob.cs @@ -4,12 +4,12 @@ using System.Text; namespace ReallifeGamemode.Server.Job { - class PilotJob : JobBase - { - public override int Id => 3; + class PilotJob : JobBase + { + public override int Id => 3; - public override string Name => "Pilot"; + public override string Name => "Pilot"; - public override bool NeedVehicleToStart => true; - } + public override bool NeedVehicleToStart => true; + } } diff --git a/ReallifeGamemode.Server/Job/RefuseCollectorJob.cs b/ReallifeGamemode.Server/Job/RefuseCollectorJob.cs index 0b2a14e3..eeb8324c 100644 --- a/ReallifeGamemode.Server/Job/RefuseCollectorJob.cs +++ b/ReallifeGamemode.Server/Job/RefuseCollectorJob.cs @@ -4,12 +4,12 @@ using System.Text; namespace ReallifeGamemode.Server.Job { - public class RefuseCollectorJob : JobBase - { - public override int Id => 2; + public class RefuseCollectorJob : JobBase + { + public override int Id => 2; - public override string Name => "Müllmann"; + public override string Name => "Müllmann"; - public override bool NeedVehicleToStart => false; - } + public override bool NeedVehicleToStart => false; + } } diff --git a/ReallifeGamemode.Server/Job/TaxiDriverJob.cs b/ReallifeGamemode.Server/Job/TaxiDriverJob.cs index 5a998bbc..f8d1ba37 100644 --- a/ReallifeGamemode.Server/Job/TaxiDriverJob.cs +++ b/ReallifeGamemode.Server/Job/TaxiDriverJob.cs @@ -6,30 +6,30 @@ using ReallifeGamemode.Server.Util; namespace ReallifeGamemode.Server.Job { - class TaxiDriverJob : JobBase + class TaxiDriverJob : JobBase + { + public List TaxiContracts { get; set; } = new List(); + + public override int Id => 1; + + public override string Name => "Taxifahrer"; + + public override bool NeedVehicleToStart => true; + + public TaxiDriverJob() { - public List TaxiContracts { get; set; } = new List(); - - public override int Id => 1; - - public override string Name => "Taxifahrer"; - - public override bool NeedVehicleToStart => true; - - public TaxiDriverJob() - { - JobStart += TaxiDriverJobJobStart; - JobStop += TaxiDriverJobJobStop; - } - - private void TaxiDriverJobJobStart(Client player) - { - player.Vehicle.SetSharedData("vehicleTaxiLight", true); - } - - private void TaxiDriverJobJobStop(Client player) - { - player.Vehicle.SetSharedData("vehicleTaxiLight", false); - } + JobStart += TaxiDriverJobJobStart; + JobStop += TaxiDriverJobJobStop; } + + private void TaxiDriverJobJobStart(Client player) + { + player.Vehicle.SetSharedData("vehicleTaxiLight", true); + } + + private void TaxiDriverJobJobStop(Client player) + { + player.Vehicle.SetSharedData("vehicleTaxiLight", false); + } + } } diff --git a/ReallifeGamemode.Server/Main.cs b/ReallifeGamemode.Server/Main.cs index 0d9a354c..f0a780b7 100644 --- a/ReallifeGamemode.Server/Main.cs +++ b/ReallifeGamemode.Server/Main.cs @@ -13,60 +13,60 @@ using ReallifeGamemode.Server.Wanted; namespace ReallifeGamemode.Server { - public class Main : Script + public class Main : Script + { + public static readonly Vector3 DEFAULT_SPAWN_POSITION = new Vector3(-427.5189, 1116.453, 326.7829); + public static readonly float DEFAULT_SPAWN_HEADING = 340.8f; + + public static readonly CultureInfo SERVER_CULTURE = new CultureInfo("de-DE"); + + [ServerEvent(Event.ResourceStart)] + public void OnResourceStart() { - public static readonly Vector3 DEFAULT_SPAWN_POSITION = new Vector3(-427.5189, 1116.453, 326.7829); - public static readonly float DEFAULT_SPAWN_HEADING = 340.8f; + NAPI.Server.SetGlobalServerChat(false); - public static readonly CultureInfo SERVER_CULTURE = new CultureInfo("de-DE"); - - [ServerEvent(Event.ResourceStart)] - public void OnResourceStart() - { - NAPI.Server.SetGlobalServerChat(false); - - NAPI.Server.SetCommandErrorMessage("~r~[FEHLER]~s~ Dieser Command existiert nicht."); - NAPI.Server.SetDefaultSpawnLocation(DEFAULT_SPAWN_POSITION, DEFAULT_SPAWN_HEADING); - NAPI.Server.SetAutoSpawnOnConnect(false); - NAPI.Server.SetAutoRespawnAfterDeath(false); - NAPI.Data.SetWorldData("playerCreatorDimension", 0); + NAPI.Server.SetCommandErrorMessage("~r~[FEHLER]~s~ Dieser Command existiert nicht."); + NAPI.Server.SetDefaultSpawnLocation(DEFAULT_SPAWN_POSITION, DEFAULT_SPAWN_HEADING); + NAPI.Server.SetAutoSpawnOnConnect(false); + NAPI.Server.SetAutoRespawnAfterDeath(false); + NAPI.Data.SetWorldData("playerCreatorDimension", 0); - InventoryManager.LoadItems(); + InventoryManager.LoadItems(); - TuningManager.LoadTuningGarages(); + TuningManager.LoadTuningGarages(); - TimeManager.StartTimeManager(); - VehicleManager.StartTimer(); + TimeManager.StartTimeManager(); + VehicleManager.StartTimer(); - DatabaseHelper.InitDatabaseFirstTime(); + DatabaseHelper.InitDatabaseFirstTime(); - FactionHelper.CheckFactionBankAccounts(); - BusinessManager.LoadBusinesses(); - InteriorManager.LoadInteriors(); - DoorManager.LoadDoors(); - ATMManager.InitATMs(); - CityHallManager.LoadCityHall(); - JobManager.LoadJobs(); - HouseManager.LoadHouses(); + FactionHelper.CheckFactionBankAccounts(); + BusinessManager.LoadBusinesses(); + InteriorManager.LoadInteriors(); + DoorManager.LoadDoors(); + ATMManager.InitATMs(); + CityHallManager.LoadCityHall(); + JobManager.LoadJobs(); + HouseManager.LoadHouses(); - TempBlip tempBlip = new TempBlip() - { - Color = 1, - Name = "", - Transparency = 0, - ShortRange = true, - Sprite = 1, - Scale = 1, - }; + TempBlip tempBlip = new TempBlip() + { + Color = 1, + Name = "", + Transparency = 0, + ShortRange = true, + Sprite = 1, + Scale = 1, + }; - NAPI.Data.SetWorldData("blipTemplate", tempBlip); + NAPI.Data.SetWorldData("blipTemplate", tempBlip); - WantedEscapeTimer.WantedTimer(); - Jail.JailTimer(); + WantedEscapeTimer.WantedTimer(); + Jail.JailTimer(); - } } + } } \ No newline at end of file diff --git a/ReallifeGamemode.Server/Managers/ATMManager.cs b/ReallifeGamemode.Server/Managers/ATMManager.cs index 3a2aa8b8..d1e0545d 100644 --- a/ReallifeGamemode.Server/Managers/ATMManager.cs +++ b/ReallifeGamemode.Server/Managers/ATMManager.cs @@ -15,141 +15,141 @@ using ReallifeGamemode.Server.Models; namespace ReallifeGamemode.Server.Managers { - public class ATMManager : Script + public class ATMManager : Script + { + public static List ATMColShapes = new List(); + + public static void InitATMs() { - public static List ATMColShapes = new List(); - - public static void InitATMs() + var addedATMs = 0; + using (var dbContext = new DatabaseContext()) + { + foreach (var currentATM in dbContext.Blips) { - var addedATMs = 0; - using (var dbContext = new DatabaseContext()) + if (currentATM.Sprite == 500) + { + if (dbContext.ATMs.FirstOrDefault(a => a.Id == currentATM.Id) == null) { - foreach (var currentATM in dbContext.Blips) - { - if (currentATM.Sprite == 500) - { - if (dbContext.ATMs.FirstOrDefault(a => a.Id == currentATM.Id) == null) - { - var dataSet = new ATM - { - Id = currentATM.Id, - X = currentATM.PositionX, - Y = currentATM.PositionY, - Z = currentATM.PositionZ - }; - dbContext.Add(dataSet); - addedATMs++; - } - else - { - continue; - } - } - } - if (addedATMs > 0) - { - NAPI.Util.ConsoleOutput(addedATMs + " Geldautomaten hinzugefügt"); - } - else - { - NAPI.Util.ConsoleOutput("Keine Geldautomaten hinzugefügt"); - } - - dbContext.SaveChanges(); - LoadATMs(); + var dataSet = new ATM + { + Id = currentATM.Id, + X = currentATM.PositionX, + Y = currentATM.PositionY, + Z = currentATM.PositionZ + }; + dbContext.Add(dataSet); + addedATMs++; } - } - public static void LoadATMs() - { - using (var dbContext = new DatabaseContext()) + else { - foreach (var currentATM in dbContext.ATMs) - { - var currentColShape = NAPI.ColShape.CreateCylinderColShape(new Vector3(currentATM.X, currentATM.Y, currentATM.Z), 2.5f, 3, 0); - currentColShape.OnEntityEnterColShape += EnterATMRange; - currentColShape.OnEntityExitColShape += ExitATMRange; - ATMColShapes.Add(currentColShape); - currentColShape.SetData("id", currentATM.Id); - } + continue; } + } } - public static void EnterATMRange(ColShape colShape, Client client) + if (addedATMs > 0) { - client.SetData("nearATM", colShape.GetData("id")); + NAPI.Util.ConsoleOutput(addedATMs + " Geldautomaten hinzugefügt"); } - public static void ExitATMRange(ColShape colShape, Client client) + else { - client.ResetData("nearATM"); - } - public static void ShowAtmUi(Client player, int atmId) - { - player.TriggerEvent("SERVER:ShowAtmUi", atmId); + NAPI.Util.ConsoleOutput("Keine Geldautomaten hinzugefügt"); } - [RemoteEvent("CLIENT:ATM_MANAGER:ATM_ACTION")] - public void AtmAction(Client client, int site, int inputField1, int inputField2) - { - var user = client.GetUser(); - using (var dbContext = new DatabaseContext()) - { - int nearATM = client.GetData("nearATM"); - //SITE //0 Geld einzahlen //1 Geld auszahlen //2 Geld überweisen - switch (site) - { - //GELD EINZAHLEN in1 - case 0: - var checkPlayer = dbContext.Users.FirstOrDefault(u => u.Id == user.Id); - - if (checkPlayer.Handmoney < inputField1) - { - //TODO im CEFBrowser anzeigen - //client.TriggerEvent("SERVER:WORLD_INTERACTION:ATM_ERROR", 0, checkATM.Balance); - client.SendNotification("~r~Nicht genügend Geld auf der Hand!"); - } - else - { - var updateHandMoneyIn = dbContext.Users.FirstOrDefault(u => u.Id == user.Id); - var updateBankMoneyIn = dbContext.UserBankAccounts.FirstOrDefault(b => b.UserId == user.Id); - var updateATMBalanceIn = dbContext.ATMs.FirstOrDefault(a => a.Id == nearATM); - updateHandMoneyIn.Handmoney -= inputField1; - updateBankMoneyIn.Balance += inputField1; - updateATMBalanceIn.Balance += inputField1; - client.TriggerEvent("SERVER:SET_HANDMONEY", updateHandMoneyIn.Handmoney); - } - break; - - //GELD AUSZAHLEN in1 - case 1: - var checkATM = dbContext.ATMs.FirstOrDefault(a => a.Id == nearATM); - var checkBankAccount = dbContext.UserBankAccounts.FirstOrDefault(b => b.UserId == user.Id); - - if (checkBankAccount.Balance < inputField1) - { - client.SendNotification("~r~Nicht genügend Geld auf dem Bankkonto!"); //TODO Im Automaten anzeigen lassen - } - else if (checkATM.Balance < inputField1) - { - client.SendNotification("~r~Nicht genügend Geld im Automaten vorhanden!"); //TODO Im Automaten anzeigen lassen |||| oder OUT OF ORDER anzeigen wenn leer - } - else - { - var updateHandMoneyOut = dbContext.Users.FirstOrDefault(u => u.Id == user.Id); - var updateBankMoneyOut = dbContext.UserBankAccounts.FirstOrDefault(b => b.UserId == user.Id); - var updateATMBalanceOut = dbContext.ATMs.FirstOrDefault(a => a.Id == nearATM); - updateHandMoneyOut.Handmoney += inputField1; - updateBankMoneyOut.Balance -= inputField1; - updateATMBalanceOut.Balance -= inputField1; - client.TriggerEvent("SERVER:SET_HANDMONEY", updateHandMoneyOut.Handmoney); - } - break; - - //GELD ÜBERWEISEN in1 = Kontonr // in2 = Betrag - case 2: - - break; - } - dbContext.SaveChanges(); - } - } + dbContext.SaveChanges(); + LoadATMs(); + } } + public static void LoadATMs() + { + using (var dbContext = new DatabaseContext()) + { + foreach (var currentATM in dbContext.ATMs) + { + var currentColShape = NAPI.ColShape.CreateCylinderColShape(new Vector3(currentATM.X, currentATM.Y, currentATM.Z), 2.5f, 3, 0); + currentColShape.OnEntityEnterColShape += EnterATMRange; + currentColShape.OnEntityExitColShape += ExitATMRange; + ATMColShapes.Add(currentColShape); + currentColShape.SetData("id", currentATM.Id); + } + } + } + public static void EnterATMRange(ColShape colShape, Client client) + { + client.SetData("nearATM", colShape.GetData("id")); + } + public static void ExitATMRange(ColShape colShape, Client client) + { + client.ResetData("nearATM"); + } + public static void ShowAtmUi(Client player, int atmId) + { + player.TriggerEvent("SERVER:ShowAtmUi", atmId); + } + + [RemoteEvent("CLIENT:ATM_MANAGER:ATM_ACTION")] + public void AtmAction(Client client, int site, int inputField1, int inputField2) + { + var user = client.GetUser(); + using (var dbContext = new DatabaseContext()) + { + int nearATM = client.GetData("nearATM"); + //SITE //0 Geld einzahlen //1 Geld auszahlen //2 Geld überweisen + switch (site) + { + //GELD EINZAHLEN in1 + case 0: + var checkPlayer = dbContext.Users.FirstOrDefault(u => u.Id == user.Id); + + if (checkPlayer.Handmoney < inputField1) + { + //TODO im CEFBrowser anzeigen + //client.TriggerEvent("SERVER:WORLD_INTERACTION:ATM_ERROR", 0, checkATM.Balance); + client.SendNotification("~r~Nicht genügend Geld auf der Hand!"); + } + else + { + var updateHandMoneyIn = dbContext.Users.FirstOrDefault(u => u.Id == user.Id); + var updateBankMoneyIn = dbContext.UserBankAccounts.FirstOrDefault(b => b.UserId == user.Id); + var updateATMBalanceIn = dbContext.ATMs.FirstOrDefault(a => a.Id == nearATM); + updateHandMoneyIn.Handmoney -= inputField1; + updateBankMoneyIn.Balance += inputField1; + updateATMBalanceIn.Balance += inputField1; + client.TriggerEvent("SERVER:SET_HANDMONEY", updateHandMoneyIn.Handmoney); + } + break; + + //GELD AUSZAHLEN in1 + case 1: + var checkATM = dbContext.ATMs.FirstOrDefault(a => a.Id == nearATM); + var checkBankAccount = dbContext.UserBankAccounts.FirstOrDefault(b => b.UserId == user.Id); + + if (checkBankAccount.Balance < inputField1) + { + client.SendNotification("~r~Nicht genügend Geld auf dem Bankkonto!"); //TODO Im Automaten anzeigen lassen + } + else if (checkATM.Balance < inputField1) + { + client.SendNotification("~r~Nicht genügend Geld im Automaten vorhanden!"); //TODO Im Automaten anzeigen lassen |||| oder OUT OF ORDER anzeigen wenn leer + } + else + { + var updateHandMoneyOut = dbContext.Users.FirstOrDefault(u => u.Id == user.Id); + var updateBankMoneyOut = dbContext.UserBankAccounts.FirstOrDefault(b => b.UserId == user.Id); + var updateATMBalanceOut = dbContext.ATMs.FirstOrDefault(a => a.Id == nearATM); + updateHandMoneyOut.Handmoney += inputField1; + updateBankMoneyOut.Balance -= inputField1; + updateATMBalanceOut.Balance -= inputField1; + client.TriggerEvent("SERVER:SET_HANDMONEY", updateHandMoneyOut.Handmoney); + } + break; + + //GELD ÜBERWEISEN in1 = Kontonr // in2 = Betrag + case 2: + + break; + } + dbContext.SaveChanges(); + } + } + } } diff --git a/ReallifeGamemode.Server/Managers/BankManager.cs b/ReallifeGamemode.Server/Managers/BankManager.cs index ef870224..53c9933f 100644 --- a/ReallifeGamemode.Server/Managers/BankManager.cs +++ b/ReallifeGamemode.Server/Managers/BankManager.cs @@ -18,79 +18,79 @@ using ReallifeGamemode.Server.Util; namespace ReallifeGamemode.Server.Managers { - public class BankManager + public class BankManager + { + public static TransactionResult SetMoney(Client admin, IBankAccountOwner owner, int amount, string reason = "Von Admin gesetzt") { - public static TransactionResult SetMoney(Client admin, IBankAccountOwner owner, int amount, string reason = "Von Admin gesetzt") + using (var transferMoney = new DatabaseContext()) + { + if (amount < 0) return TransactionResult.NEGATIVE_MONEY_SENT; + + IBankAccount account = owner.GetBankAccount(transferMoney); + + if (account == null) return TransactionResult.RECEIVER_NO_BANKACCOUNT; + + var transactionLog = new BankAccountTransactionHistory { - using (var transferMoney = new DatabaseContext()) - { - if (amount < 0) return TransactionResult.NEGATIVE_MONEY_SENT; + Sender = "ADMIN: " + admin.Name, + SenderBalance = 0, + Receiver = owner.Name, + ReceiverBalance = amount, + NewReceiverBalance = amount, + NewSenderBalance = 0, + MoneySent = amount, + Fee = 0, + Origin = reason + }; - IBankAccount account = owner.GetBankAccount(transferMoney); + // add log + transferMoney.BankAccountTransactionLogs.Add(transactionLog); - if (account == null) return TransactionResult.RECEIVER_NO_BANKACCOUNT; + account.Balance = amount; - var transactionLog = new BankAccountTransactionHistory - { - Sender = "ADMIN: " + admin.Name, - SenderBalance = 0, - Receiver = owner.Name, - ReceiverBalance = amount, - NewReceiverBalance = amount, - NewSenderBalance = 0, - MoneySent = amount, - Fee = 0, - Origin = reason - }; + transferMoney.SaveChanges(); - // add log - transferMoney.BankAccountTransactionLogs.Add(transactionLog); - - account.Balance = amount; - - transferMoney.SaveChanges(); - - return TransactionResult.SUCCESS; - } - } - - public static TransactionResult TransferMoney(IBankAccountOwner sender, IBankAccountOwner receiver, int amount, string origin) - { - using (var transferMoney = new DatabaseContext()) - { - if (amount < 0) return TransactionResult.NEGATIVE_MONEY_SENT; - - IBankAccount senderAccount = sender.GetBankAccount(transferMoney); - IBankAccount receiverAccount = receiver.GetBankAccount(transferMoney); - - if (senderAccount == null) return TransactionResult.SENDER_NO_BANKACCOUNT; - if (receiverAccount == null) return TransactionResult.RECEIVER_NO_BANKACCOUNT; - - if (senderAccount.Balance < amount) return TransactionResult.SENDER_NOT_ENOUGH_MONEY; - - var transactionLog = new BankAccountTransactionHistory - { - Sender = sender.Name, - SenderBalance = senderAccount.Balance, - Receiver = receiver.Name, - ReceiverBalance = receiverAccount.Balance, - NewReceiverBalance = receiverAccount.Balance + amount, - NewSenderBalance = senderAccount.Balance - amount, - MoneySent = amount, - Fee = 0, - Origin = origin - }; - - // add log - transferMoney.BankAccountTransactionLogs.Add(transactionLog); - - senderAccount.Balance -= amount; - receiverAccount.Balance += amount; - - transferMoney.SaveChanges(); - - return TransactionResult.SUCCESS; - } - } + return TransactionResult.SUCCESS; + } } + + public static TransactionResult TransferMoney(IBankAccountOwner sender, IBankAccountOwner receiver, int amount, string origin) + { + using (var transferMoney = new DatabaseContext()) + { + if (amount < 0) return TransactionResult.NEGATIVE_MONEY_SENT; + + IBankAccount senderAccount = sender.GetBankAccount(transferMoney); + IBankAccount receiverAccount = receiver.GetBankAccount(transferMoney); + + if (senderAccount == null) return TransactionResult.SENDER_NO_BANKACCOUNT; + if (receiverAccount == null) return TransactionResult.RECEIVER_NO_BANKACCOUNT; + + if (senderAccount.Balance < amount) return TransactionResult.SENDER_NOT_ENOUGH_MONEY; + + var transactionLog = new BankAccountTransactionHistory + { + Sender = sender.Name, + SenderBalance = senderAccount.Balance, + Receiver = receiver.Name, + ReceiverBalance = receiverAccount.Balance, + NewReceiverBalance = receiverAccount.Balance + amount, + NewSenderBalance = senderAccount.Balance - amount, + MoneySent = amount, + Fee = 0, + Origin = origin + }; + + // add log + transferMoney.BankAccountTransactionLogs.Add(transactionLog); + + senderAccount.Balance -= amount; + receiverAccount.Balance += amount; + + transferMoney.SaveChanges(); + + return TransactionResult.SUCCESS; + } + } + } } diff --git a/ReallifeGamemode.Server/Managers/BusinessManager.cs b/ReallifeGamemode.Server/Managers/BusinessManager.cs index d0b2051d..ce66ffc1 100644 --- a/ReallifeGamemode.Server/Managers/BusinessManager.cs +++ b/ReallifeGamemode.Server/Managers/BusinessManager.cs @@ -12,202 +12,202 @@ using System.Reflection; namespace ReallifeGamemode.Server.Managers { - class BusinessManager : Script + class BusinessManager : Script + { + public static List Businesses { get; private set; } + + public static void LoadBusinesses() { - public static List Businesses { get; private set; } + Businesses = new List(); - public static void LoadBusinesses() + IEnumerable allTypes = Assembly.GetExecutingAssembly().GetTypes().Where(type => type.IsClass && !type.IsAbstract && type.IsSubclassOf(typeof(BusinessBase))); + foreach (Type item in allTypes) + { + NAPI.Util.ConsoleOutput($"Loading Business {item.Name}"); + if (Activator.CreateInstance(item) is BusinessBase o) { - Businesses = new List(); - - IEnumerable allTypes = Assembly.GetExecutingAssembly().GetTypes().Where(type => type.IsClass && !type.IsAbstract && type.IsSubclassOf(typeof(BusinessBase))); - foreach (Type item in allTypes) - { - NAPI.Util.ConsoleOutput($"Loading Business {item.Name}"); - if (Activator.CreateInstance(item) is BusinessBase o) - { - if (GetBusiness(o.Id) != null) - { - throw new InvalidOperationException($"Double Business ID found: {o.Id} | {o.Name}"); - } - Businesses.Add(o); - o.Setup(); - o.Load(); - o.Update(); - } - } + if (GetBusiness(o.Id) != null) + { + throw new InvalidOperationException($"Double Business ID found: {o.Id} | {o.Name}"); + } + Businesses.Add(o); + o.Setup(); + o.Load(); + o.Update(); } + } + } - public static T GetBusiness() where T : BusinessBase - { - return (T)Businesses.Find(b => b.GetType() == typeof(T)); - } + public static T GetBusiness() where T : BusinessBase + { + return (T)Businesses.Find(b => b.GetType() == typeof(T)); + } - public static BusinessBase GetBusiness(int? id) - { - return Businesses.Find(b => b.Id == id); - } + public static BusinessBase GetBusiness(int? id) + { + return Businesses.Find(b => b.Id == id); + } - [RemoteEvent("Business_DepositMoney")] - public void BusinessDepositMoney(Client player, int amount) - { - User user = player.GetUser(); - if (user == null) - { - return; - } + [RemoteEvent("Business_DepositMoney")] + public void BusinessDepositMoney(Client player, int amount) + { + User user = player.GetUser(); + if (user == null) + { + return; + } - BusinessBase playerBusiness = GetBusiness(user.BusinessId); + BusinessBase playerBusiness = GetBusiness(user.BusinessId); - TransactionResult result = BankManager.TransferMoney(user, playerBusiness, amount, "Überweisung"); + TransactionResult result = BankManager.TransferMoney(user, playerBusiness, amount, "Überweisung"); - /*if(result == TransactionResult.NEGATIVE_MONEY_SENT) - { - player.SendNotification("~r~Es können nur positive Beträge überwiesen werden"); - return; - } - else if(result == TransactionResult.SENDER_NOT_ENOUGH_MONEY) - { - player.SendNotification("~r~Du hast nicht genug Geld"); - return; - } - else */ - if (result == TransactionResult.SUCCESS) - { - player.TriggerEvent("business_updateMoney", playerBusiness.GetBankAccount().Balance.ToMoneyString()); - player.SendNotification("~g~Du hast erfolgreich ~s~" + amount.ToMoneyString() + " ~g~ überwiesen"); - return; - } - } + /*if(result == TransactionResult.NEGATIVE_MONEY_SENT) + { + player.SendNotification("~r~Es können nur positive Beträge überwiesen werden"); + return; + } + else if(result == TransactionResult.SENDER_NOT_ENOUGH_MONEY) + { + player.SendNotification("~r~Du hast nicht genug Geld"); + return; + } + else */ + if (result == TransactionResult.SUCCESS) + { + player.TriggerEvent("business_updateMoney", playerBusiness.GetBankAccount().Balance.ToMoneyString()); + player.SendNotification("~g~Du hast erfolgreich ~s~" + amount.ToMoneyString() + " ~g~ überwiesen"); + return; + } + } - [RemoteEvent("Business_WithdrawMoney")] - public void BusinessWithdrawMoney(Client player, int amount) - { - User user = player.GetUser(); - if (user == null) - { - return; - } + [RemoteEvent("Business_WithdrawMoney")] + public void BusinessWithdrawMoney(Client player, int amount) + { + User user = player.GetUser(); + if (user == null) + { + return; + } - BusinessBase playerBusiness = GetBusiness(user.BusinessId); + BusinessBase playerBusiness = GetBusiness(user.BusinessId); - TransactionResult result = BankManager.TransferMoney(playerBusiness, user, amount, "Überweisung"); + TransactionResult result = BankManager.TransferMoney(playerBusiness, user, amount, "Überweisung"); - if (result == TransactionResult.NEGATIVE_MONEY_SENT) - { - player.SendNotification("~r~Es können nur positive Beträge überwiesen werden"); - return; - } - else if (result == TransactionResult.SENDER_NOT_ENOUGH_MONEY) - { - player.SendNotification("~r~Es ist nicht genug Geld auf der Businesskasse vorhanden"); - return; - } - else if (result == TransactionResult.SUCCESS) - { - player.TriggerEvent("business_updateMoney", playerBusiness.GetBankAccount().Balance.ToMoneyString()); - player.SendNotification("~g~Du hast erfolgreich ~s~" + amount.ToMoneyString() + " ~g~ überwiesen"); - return; - } - } + if (result == TransactionResult.NEGATIVE_MONEY_SENT) + { + player.SendNotification("~r~Es können nur positive Beträge überwiesen werden"); + return; + } + else if (result == TransactionResult.SENDER_NOT_ENOUGH_MONEY) + { + player.SendNotification("~r~Es ist nicht genug Geld auf der Businesskasse vorhanden"); + return; + } + else if (result == TransactionResult.SUCCESS) + { + player.TriggerEvent("business_updateMoney", playerBusiness.GetBankAccount().Balance.ToMoneyString()); + player.SendNotification("~g~Du hast erfolgreich ~s~" + amount.ToMoneyString() + " ~g~ überwiesen"); + return; + } + } - [ServerEvent(Event.PlayerEnterVehicle)] - public void CarDealerBusiness_PlayerEnterVehicle(Client player, Vehicle veh, int seat) - { - ServerVehicle sVeh = veh.GetServerVehicle(); - if (sVeh == null) return; - if (!(sVeh is ShopVehicle)) return; - ShopVehicle shopVehicle = (ShopVehicle)sVeh; + [ServerEvent(Event.PlayerEnterVehicle)] + public void CarDealerBusiness_PlayerEnterVehicle(Client player, Vehicle veh, int seat) + { + ServerVehicle sVeh = veh.GetServerVehicle(); + if (sVeh == null) return; + if (!(sVeh is ShopVehicle)) return; + ShopVehicle shopVehicle = (ShopVehicle)sVeh; - List availableTargets = new List() + List availableTargets = new List() { "Spieler" }; - if (player.GetUser().FactionLeader && !player.GetUser().Faction.StateOwned) availableTargets.Add("Fraktion"); - if (player.GetUser().GroupRank == GroupRank.OWNER) availableTargets.Add("Gruppe"); + if (player.GetUser().FactionLeader && !player.GetUser().Faction.StateOwned) availableTargets.Add("Fraktion"); + if (player.GetUser().GroupRank == GroupRank.OWNER) availableTargets.Add("Gruppe"); - player.TriggerEvent("ShopVehicle_OpenMenu", GetBusiness(shopVehicle.BusinessId).Name, shopVehicle.Price, availableTargets.ToArray()); - } - - [RemoteEvent("VehShop_BuyVehicle")] - public void CarDealerBusiness_BuyVehicle(Client player, string target) - { - ServerVehicle sVeh = player.Vehicle?.GetServerVehicle(); - if (sVeh == null) return; - if (!(sVeh is ShopVehicle)) return; - ShopVehicle shopVehicle = (ShopVehicle)sVeh; - int price = shopVehicle.Price; - CarDealerBusinessBase business = GetBusiness(shopVehicle.BusinessId) as CarDealerBusinessBase; - TransactionResult result = BankManager.TransferMoney(player.GetUser(), business, price, "Auto gekauft"); - if (result == TransactionResult.SENDER_NOT_ENOUGH_MONEY) - { - player.SendNotification("~r~Du hast nicht genug Geld: " + price.ToMoneyString()); - return; - } - - Vector3 spawnPos = business.CarSpawnPositon.Around(3); - - player.TriggerEvent("SERVER:Util_setWaypoint", spawnPos.X, spawnPos.Y); - - ServerVehicle newVeh = null; - - if(target == "Spieler") - { - newVeh = new UserVehicle - { - Heading = business.CarSpawnHeading, - PositionX = spawnPos.X, - PositionY = spawnPos.Y, - PositionZ = spawnPos.Z, - Locked = false, - UserId = player.GetUser().Id, - Model = shopVehicle.Model, - PrimaryColor = 111, - SecondaryColor = 111, - Active = true, - }; - } - else if(target == "Fraktion") - { - newVeh = new FactionVehicle - { - Heading = business.CarSpawnHeading, - PositionX = spawnPos.X, - PositionY = spawnPos.Y, - PositionZ = spawnPos.Z, - Locked = false, - FactionId = player.GetUser().FactionId, - Model = shopVehicle.Model, - PrimaryColor = 111, - SecondaryColor = 111, - Active = true, - }; - } - else if(target == "Gruppe") - { - newVeh = new GroupVehicle - { - Heading = business.CarSpawnHeading, - PositionX = spawnPos.X, - PositionY = spawnPos.Y, - PositionZ = spawnPos.Z, - Locked = false, - GroupId = player.GetUser().Group.Id, - Model = shopVehicle.Model, - PrimaryColor = 111, - SecondaryColor = 111, - Active = true, - }; - } - - using (var dbContext = new DatabaseContext()) - { - dbContext.ServerVehicles.Add(newVeh); - dbContext.SaveChanges(); - } - - newVeh.Spawn(); - } + player.TriggerEvent("ShopVehicle_OpenMenu", GetBusiness(shopVehicle.BusinessId).Name, shopVehicle.Price, availableTargets.ToArray()); } + + [RemoteEvent("VehShop_BuyVehicle")] + public void CarDealerBusiness_BuyVehicle(Client player, string target) + { + ServerVehicle sVeh = player.Vehicle?.GetServerVehicle(); + if (sVeh == null) return; + if (!(sVeh is ShopVehicle)) return; + ShopVehicle shopVehicle = (ShopVehicle)sVeh; + int price = shopVehicle.Price; + CarDealerBusinessBase business = GetBusiness(shopVehicle.BusinessId) as CarDealerBusinessBase; + TransactionResult result = BankManager.TransferMoney(player.GetUser(), business, price, "Auto gekauft"); + if (result == TransactionResult.SENDER_NOT_ENOUGH_MONEY) + { + player.SendNotification("~r~Du hast nicht genug Geld: " + price.ToMoneyString()); + return; + } + + Vector3 spawnPos = business.CarSpawnPositon.Around(3); + + player.TriggerEvent("SERVER:Util_setWaypoint", spawnPos.X, spawnPos.Y); + + ServerVehicle newVeh = null; + + if (target == "Spieler") + { + newVeh = new UserVehicle + { + Heading = business.CarSpawnHeading, + PositionX = spawnPos.X, + PositionY = spawnPos.Y, + PositionZ = spawnPos.Z, + Locked = false, + UserId = player.GetUser().Id, + Model = shopVehicle.Model, + PrimaryColor = 111, + SecondaryColor = 111, + Active = true, + }; + } + else if (target == "Fraktion") + { + newVeh = new FactionVehicle + { + Heading = business.CarSpawnHeading, + PositionX = spawnPos.X, + PositionY = spawnPos.Y, + PositionZ = spawnPos.Z, + Locked = false, + FactionId = player.GetUser().FactionId, + Model = shopVehicle.Model, + PrimaryColor = 111, + SecondaryColor = 111, + Active = true, + }; + } + else if (target == "Gruppe") + { + newVeh = new GroupVehicle + { + Heading = business.CarSpawnHeading, + PositionX = spawnPos.X, + PositionY = spawnPos.Y, + PositionZ = spawnPos.Z, + Locked = false, + GroupId = player.GetUser().Group.Id, + Model = shopVehicle.Model, + PrimaryColor = 111, + SecondaryColor = 111, + Active = true, + }; + } + + using (var dbContext = new DatabaseContext()) + { + dbContext.ServerVehicles.Add(newVeh); + dbContext.SaveChanges(); + } + + newVeh.Spawn(); + } + } } diff --git a/ReallifeGamemode.Server/Managers/CharacterCreator.cs b/ReallifeGamemode.Server/Managers/CharacterCreator.cs index 39b69967..7988d272 100644 --- a/ReallifeGamemode.Server/Managers/CharacterCreator.cs +++ b/ReallifeGamemode.Server/Managers/CharacterCreator.cs @@ -6,326 +6,326 @@ using ReallifeGamemode.Server.Models; namespace ReallifeGamemode.Server.Managers { - public class CharacterCreator : Script + public class CharacterCreator : Script + { + public CharacterCreator() { - public CharacterCreator() + } + + [RemoteEvent("creatorSave")] + public void CreatorSave(Client player, bool gender, string parentData, string featureData, string appearanceData, string hairAndColorData) + { + var jParentData = JObject.Parse(parentData); + var jFeatureData = JArray.Parse(featureData); + var jAppearanceData = JArray.Parse(appearanceData); + var jHairAndColorData = JArray.Parse(hairAndColorData); + + byte father = jParentData.Value("Father"); + byte mother = jParentData.Value("Mother"); + float similarity = jParentData.Value("Similarity"); + float skinSimilarity = jParentData.Value("SkinSimilarity"); + + float noseWidth = jFeatureData.Value(0); + float noseBottomHeight = jFeatureData.Value(1); + float noseTipLength = jFeatureData.Value(2); + float noseBridgeDepth = jFeatureData.Value(3); + float noseTipHeight = jFeatureData.Value(4); + float noseBroken = jFeatureData.Value(5); + float browHeight = jFeatureData.Value(6); + float browDepth = jFeatureData.Value(7); + float cheekboneHeight = jFeatureData.Value(8); + float cheekboneWidth = jFeatureData.Value(9); + float cheekDepth = jFeatureData.Value(10); + float eyeSize = jFeatureData.Value(11); + float lipThickness = jFeatureData.Value(12); + float jawWidth = jFeatureData.Value(13); + float jawShape = jFeatureData.Value(14); + float chinHeight = jFeatureData.Value(15); + float chinDepth = jFeatureData.Value(16); + float chinWidth = jFeatureData.Value(17); + float chinIndent = jFeatureData.Value(18); + float neckWidth = jFeatureData.Value(19); + + byte blemishes = jAppearanceData[0].Value("Value"); + float blemishesOpacity = jAppearanceData[0].Value("Opacity"); + byte facialHair = jAppearanceData[1].Value("Value"); + float facialHairOpacity = jAppearanceData[1].Value("Opacity"); + byte eyebrows = jAppearanceData[2].Value("Value"); + float eyebrowsOpacity = jAppearanceData[2].Value("Opacity"); + byte ageing = jAppearanceData[3].Value("Value"); + float ageingOpacity = jAppearanceData[3].Value("Opacity"); + byte makeup = jAppearanceData[4].Value("Value"); + float makeupOpacity = jAppearanceData[4].Value("Opacity"); + byte blush = jAppearanceData[5].Value("Value"); + float blushOpacity = jAppearanceData[5].Value("Opacity"); + byte complexion = jAppearanceData[6].Value("Value"); + float complexionOpacity = jAppearanceData[6].Value("Opacity"); + byte sunDamage = jAppearanceData[7].Value("Value"); + float sunDamageOpacity = jAppearanceData[7].Value("Opacity"); + byte lipstick = jAppearanceData[8].Value("Value"); + float lipstickOpacity = jAppearanceData[8].Value("Opacity"); + byte freckles = jAppearanceData[9].Value("Value"); + float frecklesOpacity = jAppearanceData[9].Value("Opacity"); + byte chestHair = jAppearanceData[10].Value("Value"); + float chestHairOpacity = jAppearanceData[10].Value("Opacity"); + + byte hair = jHairAndColorData.Value(0); + byte hairColor = jHairAndColorData.Value(1); + byte hairHighlightColor = jHairAndColorData.Value(2); + byte eyebrowColor = jHairAndColorData.Value(3); + byte beardColor = jHairAndColorData.Value(4); + byte eyeColor = jHairAndColorData.Value(5); + byte blushColor = jHairAndColorData.Value(6); + byte lipstickColor = jHairAndColorData.Value(7); + byte chestHairColor = jHairAndColorData.Value(8); + + using (var saveCharacter = new DatabaseContext()) + { + var character = new Entities.Character { + UserId = player.GetUser().Id, + Gender = gender, + Father = father, + Mother = mother, + Similarity = similarity, + SkinSimilarity = skinSimilarity, + + NoseWidth = noseWidth, + NoseBottomHeight = noseBottomHeight, + NoseTipLength = noseTipLength, + NoseBridgeDepth = noseBridgeDepth, + NoseTipHeight = noseTipHeight, + NoseBroken = noseBroken, + BrowHeight = browHeight, + BrowDepth = browDepth, + CheekboneHeight = cheekboneHeight, + CheekboneWidth = cheekboneWidth, + CheekDepth = cheekDepth, + EyeSize = eyeSize, + LipThickness = lipThickness, + JawWidth = jawWidth, + JawShape = jawShape, + ChinHeight = chinHeight, + ChinDepth = chinDepth, + ChinWidth = chinWidth, + ChinIndent = chinIndent, + NeckWidth = neckWidth, + + Blemishes = blemishes, + BlemishesOpacity = blemishesOpacity, + FacialHair = facialHair, + FacialHairOpacity = facialHairOpacity, + Eyebrows = eyebrows, + EyebrowsOpacity = eyebrowsOpacity, + Ageing = ageing, + AgeingOpacity = ageingOpacity, + Makeup = makeup, + MakeupOpacity = makeupOpacity, + Blush = blush, + BlushOpacity = blushOpacity, + Complexion = complexion, + ComplexionOpacity = complexionOpacity, + SunDamage = sunDamage, + SunDamageOpacity = sunDamageOpacity, + Lipstick = lipstick, + LipstickOpacity = lipstickOpacity, + Freckles = freckles, + FrecklesOpacity = frecklesOpacity, + ChestHair = chestHair, + ChestHairOpacity = chestHairOpacity, + + Hair = hair, + HairColor = hairColor, + HairHighlightColor = hairHighlightColor, + EyebrowColor = eyebrowColor, + BeardColor = beardColor, + EyeColor = eyeColor, + BlushColor = blushColor, + LipstickColor = lipstickColor, + ChestHairColor = chestHairColor + }; + + saveCharacter.Characters.Add(character); + saveCharacter.SaveChanges(); + + var userId = player.GetUser().Id; + var user = saveCharacter.Users.SingleOrDefault(u => u.Id == userId); + + user.CharacterId = character.Id; + saveCharacter.SaveChanges(); + } + //HeadOverlay makeupHo = new HeadOverlay() + //{ + // Index = 0, + // Opacity = 0.0f, + // Color = 0, + // SecondaryColor = 0 + //}; + //HeadOverlay blushHo = new HeadOverlay() + //{ + // Index = 0, + // Opacity = 0.0f, + // Color = 0, + // SecondaryColor = 0 + //}; + //player.SetHeadOverlay(4, makeupHo); + //player.SetHeadOverlay(5, blushHo); + NAPI.Player.SpawnPlayer(player, Main.DEFAULT_SPAWN_POSITION, Main.DEFAULT_SPAWN_HEADING); + player.TriggerEvent("draw", player.Name, player.Handle.Value); + player.Dimension = 0; + } + + /// + /// Wendet den Character eines Spielers auf diesen an + /// + /// Der Client, dessen Aussehen man setzen will + public static void ApplyCharacter(Client player) + { + var userId = player.GetUser().Id; + using (var loadCharacter = new DatabaseContext()) + { + var character = loadCharacter.Characters.SingleOrDefault(c => c.UserId == userId); + + if (character == null) return; + + //Männlich / Weiblich + if (character.Gender == false) + { + player.SetSkin(PedHash.FreemodeMale01); + } + else + { + player.SetSkin(PedHash.FreemodeFemale01); } - [RemoteEvent("creatorSave")] - public void CreatorSave(Client player, bool gender, string parentData, string featureData, string appearanceData, string hairAndColorData) - { - var jParentData = JObject.Parse(parentData); - var jFeatureData = JArray.Parse(featureData); - var jAppearanceData = JArray.Parse(appearanceData); - var jHairAndColorData = JArray.Parse(hairAndColorData); - - byte father = jParentData.Value("Father"); - byte mother = jParentData.Value("Mother"); - float similarity = jParentData.Value("Similarity"); - float skinSimilarity = jParentData.Value("SkinSimilarity"); - - float noseWidth = jFeatureData.Value(0); - float noseBottomHeight = jFeatureData.Value(1); - float noseTipLength = jFeatureData.Value(2); - float noseBridgeDepth = jFeatureData.Value(3); - float noseTipHeight = jFeatureData.Value(4); - float noseBroken = jFeatureData.Value(5); - float browHeight = jFeatureData.Value(6); - float browDepth = jFeatureData.Value(7); - float cheekboneHeight = jFeatureData.Value(8); - float cheekboneWidth = jFeatureData.Value(9); - float cheekDepth = jFeatureData.Value(10); - float eyeSize = jFeatureData.Value(11); - float lipThickness = jFeatureData.Value(12); - float jawWidth = jFeatureData.Value(13); - float jawShape = jFeatureData.Value(14); - float chinHeight = jFeatureData.Value(15); - float chinDepth = jFeatureData.Value(16); - float chinWidth = jFeatureData.Value(17); - float chinIndent = jFeatureData.Value(18); - float neckWidth = jFeatureData.Value(19); - - byte blemishes = jAppearanceData[0].Value("Value"); - float blemishesOpacity = jAppearanceData[0].Value("Opacity"); - byte facialHair = jAppearanceData[1].Value("Value"); - float facialHairOpacity = jAppearanceData[1].Value("Opacity"); - byte eyebrows = jAppearanceData[2].Value("Value"); - float eyebrowsOpacity = jAppearanceData[2].Value("Opacity"); - byte ageing = jAppearanceData[3].Value("Value"); - float ageingOpacity = jAppearanceData[3].Value("Opacity"); - byte makeup = jAppearanceData[4].Value("Value"); - float makeupOpacity = jAppearanceData[4].Value("Opacity"); - byte blush = jAppearanceData[5].Value("Value"); - float blushOpacity = jAppearanceData[5].Value("Opacity"); - byte complexion = jAppearanceData[6].Value("Value"); - float complexionOpacity = jAppearanceData[6].Value("Opacity"); - byte sunDamage = jAppearanceData[7].Value("Value"); - float sunDamageOpacity = jAppearanceData[7].Value("Opacity"); - byte lipstick = jAppearanceData[8].Value("Value"); - float lipstickOpacity = jAppearanceData[8].Value("Opacity"); - byte freckles = jAppearanceData[9].Value("Value"); - float frecklesOpacity = jAppearanceData[9].Value("Opacity"); - byte chestHair = jAppearanceData[10].Value("Value"); - float chestHairOpacity = jAppearanceData[10].Value("Opacity"); - - byte hair = jHairAndColorData.Value(0); - byte hairColor = jHairAndColorData.Value(1); - byte hairHighlightColor = jHairAndColorData.Value(2); - byte eyebrowColor = jHairAndColorData.Value(3); - byte beardColor = jHairAndColorData.Value(4); - byte eyeColor = jHairAndColorData.Value(5); - byte blushColor = jHairAndColorData.Value(6); - byte lipstickColor = jHairAndColorData.Value(7); - byte chestHairColor = jHairAndColorData.Value(8); - - using (var saveCharacter = new DatabaseContext()) - { - var character = new Entities.Character - { - UserId = player.GetUser().Id, - Gender = gender, - Father = father, - Mother = mother, - Similarity = similarity, - SkinSimilarity = skinSimilarity, - - NoseWidth = noseWidth, - NoseBottomHeight = noseBottomHeight, - NoseTipLength = noseTipLength, - NoseBridgeDepth = noseBridgeDepth, - NoseTipHeight = noseTipHeight, - NoseBroken = noseBroken, - BrowHeight = browHeight, - BrowDepth = browDepth, - CheekboneHeight = cheekboneHeight, - CheekboneWidth = cheekboneWidth, - CheekDepth = cheekDepth, - EyeSize = eyeSize, - LipThickness = lipThickness, - JawWidth = jawWidth, - JawShape = jawShape, - ChinHeight = chinHeight, - ChinDepth = chinDepth, - ChinWidth = chinWidth, - ChinIndent = chinIndent, - NeckWidth = neckWidth, - - Blemishes = blemishes, - BlemishesOpacity = blemishesOpacity, - FacialHair = facialHair, - FacialHairOpacity = facialHairOpacity, - Eyebrows = eyebrows, - EyebrowsOpacity = eyebrowsOpacity, - Ageing = ageing, - AgeingOpacity = ageingOpacity, - Makeup = makeup, - MakeupOpacity = makeupOpacity, - Blush = blush, - BlushOpacity = blushOpacity, - Complexion = complexion, - ComplexionOpacity = complexionOpacity, - SunDamage = sunDamage, - SunDamageOpacity = sunDamageOpacity, - Lipstick = lipstick, - LipstickOpacity = lipstickOpacity, - Freckles = freckles, - FrecklesOpacity = frecklesOpacity, - ChestHair = chestHair, - ChestHairOpacity = chestHairOpacity, - - Hair = hair, - HairColor = hairColor, - HairHighlightColor = hairHighlightColor, - EyebrowColor = eyebrowColor, - BeardColor = beardColor, - EyeColor = eyeColor, - BlushColor = blushColor, - LipstickColor = lipstickColor, - ChestHairColor = chestHairColor - }; - - saveCharacter.Characters.Add(character); - saveCharacter.SaveChanges(); - - var userId = player.GetUser().Id; - var user = saveCharacter.Users.SingleOrDefault(u => u.Id == userId); - - user.CharacterId = character.Id; - saveCharacter.SaveChanges(); - } - //HeadOverlay makeupHo = new HeadOverlay() - //{ - // Index = 0, - // Opacity = 0.0f, - // Color = 0, - // SecondaryColor = 0 - //}; - //HeadOverlay blushHo = new HeadOverlay() - //{ - // Index = 0, - // Opacity = 0.0f, - // Color = 0, - // SecondaryColor = 0 - //}; - //player.SetHeadOverlay(4, makeupHo); - //player.SetHeadOverlay(5, blushHo); - NAPI.Player.SpawnPlayer(player, Main.DEFAULT_SPAWN_POSITION, Main.DEFAULT_SPAWN_HEADING); - player.TriggerEvent("draw", player.Name, player.Handle.Value); - player.Dimension = 0; - } - - /// - /// Wendet den Character eines Spielers auf diesen an - /// - /// Der Client, dessen Aussehen man setzen will - public static void ApplyCharacter(Client player) - { - var userId = player.GetUser().Id; - using (var loadCharacter = new DatabaseContext()) - { - var character = loadCharacter.Characters.SingleOrDefault(c => c.UserId == userId); - - if (character == null) return; - - //Männlich / Weiblich - if (character.Gender == false) - { - player.SetSkin(PedHash.FreemodeMale01); - } - else - { - player.SetSkin(PedHash.FreemodeFemale01); - } - - //Gesichtszüge - float[] faceFeatures = new float[] { character.NoseWidth, character.NoseBottomHeight, character.NoseTipLength, character.NoseBridgeDepth, character.NoseTipHeight, + //Gesichtszüge + float[] faceFeatures = new float[] { character.NoseWidth, character.NoseBottomHeight, character.NoseTipLength, character.NoseBridgeDepth, character.NoseTipHeight, character.NoseBroken, character.BrowHeight, character.BrowDepth, character.CheekboneHeight, character.CheekboneWidth, character.CheekboneWidth, character.CheekDepth, character.EyeSize, character.LipThickness, character.JawWidth, character.JawShape, character.ChinHeight, character.ChinDepth, character.ChinWidth, character.ChinIndent, character.NeckWidth }; - for (var i = 0; i < faceFeatures.Length; i++) - { - player.SetFaceFeature(i, faceFeatures[i]); - } - - //Gesichtsmerkmale - HeadOverlay blemishes = new HeadOverlay() - { - Index = character.Blemishes, - Opacity = character.BlemishesOpacity, - Color = 255, - SecondaryColor = 255 - }; - HeadOverlay facialHair = new HeadOverlay() - { - Index = character.FacialHair, - Opacity = character.FacialHairOpacity, - Color = character.BeardColor, - SecondaryColor = 255 - }; - HeadOverlay eyebrows = new HeadOverlay() - { - Index = character.Eyebrows, - Opacity = character.EyebrowsOpacity, - Color = character.EyebrowColor, - SecondaryColor = 255 - }; - HeadOverlay ageing = new HeadOverlay() - { - Index = character.Ageing, - Opacity = character.AgeingOpacity, - Color = 255, - SecondaryColor = 255 - }; - HeadOverlay makeup = new HeadOverlay() - { - Index = character.Makeup, - Opacity = character.MakeupOpacity, - Color = 255, - SecondaryColor = 255 - }; - HeadOverlay blush = new HeadOverlay() - { - Index = character.Blush, - Opacity = character.BlushOpacity, - Color = character.BlushColor, - SecondaryColor = 255 - }; - HeadOverlay complexion = new HeadOverlay() - { - Index = character.Complexion, - Opacity = character.ComplexionOpacity, - Color = 255, - SecondaryColor = 255 - }; - HeadOverlay sunDamage = new HeadOverlay() - { - Index = character.SunDamage, - Opacity = character.SunDamageOpacity, - Color = 255, - SecondaryColor = 255 - }; - HeadOverlay lipstick = new HeadOverlay() - { - Index = character.Lipstick, - Opacity = character.LipstickOpacity, - Color = character.LipstickColor, - SecondaryColor = 255 - }; - HeadOverlay freckles = new HeadOverlay() - { - Index = character.Freckles, - Opacity = character.FrecklesOpacity, - Color = 255, - SecondaryColor = 255 - }; - HeadOverlay chestHair = new HeadOverlay() - { - Index = character.ChestHair, - Opacity = character.ChestHairOpacity, - Color = character.ChestHairColor, - SecondaryColor = 255 - }; - - player.SetHeadOverlay(0, blemishes); - player.SetHeadOverlay(1, facialHair); - player.SetHeadOverlay(2, eyebrows); - player.SetHeadOverlay(3, ageing); - player.SetHeadOverlay(4, makeup); - player.SetHeadOverlay(5, blush); - player.SetHeadOverlay(6, complexion); - player.SetHeadOverlay(7, sunDamage); - player.SetHeadOverlay(8, lipstick); - player.SetHeadOverlay(9, freckles); - player.SetHeadOverlay(10, chestHair); - player.SetHeadOverlay(11, blemishes); - player.SetHeadOverlay(12, blemishes); - - - //Gesicht (Vererbung durch Mutter / Vater) - HeadBlend headBlend = new HeadBlend() - { - ShapeFirst = character.Mother, - ShapeSecond = character.Father, - ShapeThird = 0, - SkinFirst = character.Mother, - SkinSecond = character.Father, - SkinThird = 0, - ShapeMix = character.Similarity, - SkinMix = character.SkinSimilarity, - ThirdMix = 0.0f - }; - NAPI.Player.SetPlayerHeadBlend(player, headBlend); - - //Haare und Haarfarbe - player.SetClothes(2, character.Hair, 0); - NAPI.Player.SetPlayerHairColor(player, character.HairColor, character.HairHighlightColor); - - //Augenfarbe - NAPI.Player.SetPlayerEyeColor(player, character.EyeColor); - - } + for (var i = 0; i < faceFeatures.Length; i++) + { + player.SetFaceFeature(i, faceFeatures[i]); } + + //Gesichtsmerkmale + HeadOverlay blemishes = new HeadOverlay() + { + Index = character.Blemishes, + Opacity = character.BlemishesOpacity, + Color = 255, + SecondaryColor = 255 + }; + HeadOverlay facialHair = new HeadOverlay() + { + Index = character.FacialHair, + Opacity = character.FacialHairOpacity, + Color = character.BeardColor, + SecondaryColor = 255 + }; + HeadOverlay eyebrows = new HeadOverlay() + { + Index = character.Eyebrows, + Opacity = character.EyebrowsOpacity, + Color = character.EyebrowColor, + SecondaryColor = 255 + }; + HeadOverlay ageing = new HeadOverlay() + { + Index = character.Ageing, + Opacity = character.AgeingOpacity, + Color = 255, + SecondaryColor = 255 + }; + HeadOverlay makeup = new HeadOverlay() + { + Index = character.Makeup, + Opacity = character.MakeupOpacity, + Color = 255, + SecondaryColor = 255 + }; + HeadOverlay blush = new HeadOverlay() + { + Index = character.Blush, + Opacity = character.BlushOpacity, + Color = character.BlushColor, + SecondaryColor = 255 + }; + HeadOverlay complexion = new HeadOverlay() + { + Index = character.Complexion, + Opacity = character.ComplexionOpacity, + Color = 255, + SecondaryColor = 255 + }; + HeadOverlay sunDamage = new HeadOverlay() + { + Index = character.SunDamage, + Opacity = character.SunDamageOpacity, + Color = 255, + SecondaryColor = 255 + }; + HeadOverlay lipstick = new HeadOverlay() + { + Index = character.Lipstick, + Opacity = character.LipstickOpacity, + Color = character.LipstickColor, + SecondaryColor = 255 + }; + HeadOverlay freckles = new HeadOverlay() + { + Index = character.Freckles, + Opacity = character.FrecklesOpacity, + Color = 255, + SecondaryColor = 255 + }; + HeadOverlay chestHair = new HeadOverlay() + { + Index = character.ChestHair, + Opacity = character.ChestHairOpacity, + Color = character.ChestHairColor, + SecondaryColor = 255 + }; + + player.SetHeadOverlay(0, blemishes); + player.SetHeadOverlay(1, facialHair); + player.SetHeadOverlay(2, eyebrows); + player.SetHeadOverlay(3, ageing); + player.SetHeadOverlay(4, makeup); + player.SetHeadOverlay(5, blush); + player.SetHeadOverlay(6, complexion); + player.SetHeadOverlay(7, sunDamage); + player.SetHeadOverlay(8, lipstick); + player.SetHeadOverlay(9, freckles); + player.SetHeadOverlay(10, chestHair); + player.SetHeadOverlay(11, blemishes); + player.SetHeadOverlay(12, blemishes); + + + //Gesicht (Vererbung durch Mutter / Vater) + HeadBlend headBlend = new HeadBlend() + { + ShapeFirst = character.Mother, + ShapeSecond = character.Father, + ShapeThird = 0, + SkinFirst = character.Mother, + SkinSecond = character.Father, + SkinThird = 0, + ShapeMix = character.Similarity, + SkinMix = character.SkinSimilarity, + ThirdMix = 0.0f + }; + NAPI.Player.SetPlayerHeadBlend(player, headBlend); + + //Haare und Haarfarbe + player.SetClothes(2, character.Hair, 0); + NAPI.Player.SetPlayerHairColor(player, character.HairColor, character.HairHighlightColor); + + //Augenfarbe + NAPI.Player.SetPlayerEyeColor(player, character.EyeColor); + + } } + } } diff --git a/ReallifeGamemode.Server/Managers/CityHallManager.cs b/ReallifeGamemode.Server/Managers/CityHallManager.cs index dbc61fe4..24f35520 100644 --- a/ReallifeGamemode.Server/Managers/CityHallManager.cs +++ b/ReallifeGamemode.Server/Managers/CityHallManager.cs @@ -12,58 +12,58 @@ using System.Text; namespace ReallifeGamemode.Server.Managers { - class CityHallManager : Script + class CityHallManager : Script + { + private static readonly Vector3 _cityHallPosition = new Vector3(273.22, -278.14, 53.9); + + public static void LoadCityHall() { - private static readonly Vector3 _cityHallPosition = new Vector3(273.22, -278.14, 53.9); + NAPI.Marker.CreateMarker(MarkerType.VerticalCylinder, _cityHallPosition.Subtract(new Vector3(0, 0, 1.7)), new Vector3(), new Vector3(), 1.0f, new Color(255, 255, 255)); + NAPI.TextLabel.CreateTextLabel("~y~Stadthalle~s~\nDrücke ~o~E~s~, um das Menü zu öffnen", _cityHallPosition, 5.0f, 1f, 0, new Color(255, 255, 255)); + var colShape = NAPI.ColShape.CreateSphereColShape(_cityHallPosition, 1.0f); + colShape.OnEntityEnterColShape += (s, c) => + { + var jobs = JobManager.GetJobs().Select(j => j.Name).ToArray(); + c.TriggerEvent("SERVER:CityHall_ShowHelpText", JsonConvert.SerializeObject(jobs)); + }; - public static void LoadCityHall() - { - NAPI.Marker.CreateMarker(MarkerType.VerticalCylinder, _cityHallPosition.Subtract(new Vector3(0, 0, 1.7)), new Vector3(), new Vector3(), 1.0f, new Color(255, 255, 255)); - NAPI.TextLabel.CreateTextLabel("~y~Stadthalle~s~\nDrücke ~o~E~s~, um das Menü zu öffnen", _cityHallPosition, 5.0f, 1f, 0, new Color(255, 255, 255)); - var colShape = NAPI.ColShape.CreateSphereColShape(_cityHallPosition, 1.0f); - colShape.OnEntityEnterColShape += (s, c) => - { - var jobs = JobManager.GetJobs().Select(j => j.Name).ToArray(); - c.TriggerEvent("SERVER:CityHall_ShowHelpText", JsonConvert.SerializeObject(jobs)); - }; - - colShape.OnEntityExitColShape += (s, c) => - { - c.TriggerEvent("SERVER:CityHall_ClearHelpText"); - }; - } - - [RemoteEvent("CLIENT:CityHall_CreateGroup")] - public void CreateGroup(Client player, string name) - { - using (var dbContext = new DatabaseContext()) - { - User u = player.GetUser(dbContext); - if(u.Group != null) - { - ChatService.ErrorMessage(player, "Du bist schon in einer Gruppe"); - return; - } - if(dbContext.Groups.Any(g => g.Name.ToLower() == name.ToLower())) - { - ChatService.ErrorMessage(player, "Dieser Name ist schon vergeben"); - return; - } - - Group group = new Group - { - Name = name - }; - - dbContext.Groups.Add(group); - - u.Group = group; - u.GroupRank = GroupRank.OWNER; - - dbContext.SaveChanges(); - - ChatService.BroadcastGroup($"Die Gruppe \"{name}\" wurde erfolgreich erstellt.", group); - } - } + colShape.OnEntityExitColShape += (s, c) => + { + c.TriggerEvent("SERVER:CityHall_ClearHelpText"); + }; } + + [RemoteEvent("CLIENT:CityHall_CreateGroup")] + public void CreateGroup(Client player, string name) + { + using (var dbContext = new DatabaseContext()) + { + User u = player.GetUser(dbContext); + if (u.Group != null) + { + ChatService.ErrorMessage(player, "Du bist schon in einer Gruppe"); + return; + } + if (dbContext.Groups.Any(g => g.Name.ToLower() == name.ToLower())) + { + ChatService.ErrorMessage(player, "Dieser Name ist schon vergeben"); + return; + } + + Group group = new Group + { + Name = name + }; + + dbContext.Groups.Add(group); + + u.Group = group; + u.GroupRank = GroupRank.OWNER; + + dbContext.SaveChanges(); + + ChatService.BroadcastGroup($"Die Gruppe \"{name}\" wurde erfolgreich erstellt.", group); + } + } + } } diff --git a/ReallifeGamemode.Server/Managers/DoorManager.cs b/ReallifeGamemode.Server/Managers/DoorManager.cs index 13645f62..7d6c61dc 100644 --- a/ReallifeGamemode.Server/Managers/DoorManager.cs +++ b/ReallifeGamemode.Server/Managers/DoorManager.cs @@ -13,72 +13,72 @@ using ReallifeGamemode.Server.Util; namespace ReallifeGamemode.Server.Managers { - public class DoorManager : Script + public class DoorManager : Script + { + private static Dictionary _doorColShapes = new Dictionary(); + + public static void LoadDoors() { - private static Dictionary _doorColShapes = new Dictionary(); - - public static void LoadDoors() + using (var dbContext = new DatabaseContext()) + { + foreach (Door door in dbContext.Doors) { - using (var dbContext = new DatabaseContext()) - { - foreach (Door door in dbContext.Doors) - { - _doorColShapes[door.Id] = NAPI.ColShape.CreateSphereColShape(door.Position, 30f); - } - } - } - - public static void ReloadDoors() - { - foreach (var doorPair in _doorColShapes) - { - doorPair.Value.Entity().Delete(); - } - _doorColShapes.Clear(); - LoadDoors(); - } - - public static void ChangeDoorState(Client player) - { - var user = player.GetUser(); - - using (var dbContext = new DatabaseContext()) - { - IQueryable NearDoors = dbContext.Doors.Where(d => d.Position.DistanceTo(player.Position) <= d.Radius); - foreach (Door d in NearDoors) - { - if (!user.IsAdmin(AdminLevel.ADMIN) && (d.FactionId != user.FactionId || d.FactionId == null)) - { - string lockState = "~r~Du hast kein Recht diese T\u00fcr " + (d.Locked == true ? "auf" : "ab") + "zuschlie\u00dfen!"; - player.SendNotification(lockState, true); - continue; - } - - d.Locked = !d.Locked; - - string notStr = d.Name + " " + (d.Locked == false ? "~g~auf" : "~r~ab") + "geschlossen"; - - player.SendNotification(notStr, true); - - NAPI.Pools.GetAllPlayers().ForEach(p => p.TriggerEvent("changeDoorState", d.Model, d.X, d.Y, d.Z, (d.Locked ? 1 : 0), 0.0f, 0.0f, 0.0f)); - } - dbContext.SaveChanges(); - } - } - - [ServerEvent(Event.PlayerEnterColshape)] - public void DoorManagerPlayerEnterColShapeEvent(ColShape colShape, Client player) - { - if (_doorColShapes.ContainsValue(colShape.Handle)) - { - int doorId = _doorColShapes.Where(d => d.Value.Value == colShape.Handle.Value).FirstOrDefault().Key; - - using (var dbContext = new DatabaseContext()) - { - Door door = dbContext.Doors.Where(d => d.Id == doorId).First(); - player.TriggerEvent("changeDoorState", door.Model, door.X, door.Y, door.Z, (door.Locked ? 1 : 0), 0.0f, 0.0f, 0.0f); - } - } + _doorColShapes[door.Id] = NAPI.ColShape.CreateSphereColShape(door.Position, 30f); } + } } + + public static void ReloadDoors() + { + foreach (var doorPair in _doorColShapes) + { + doorPair.Value.Entity().Delete(); + } + _doorColShapes.Clear(); + LoadDoors(); + } + + public static void ChangeDoorState(Client player) + { + var user = player.GetUser(); + + using (var dbContext = new DatabaseContext()) + { + IQueryable NearDoors = dbContext.Doors.Where(d => d.Position.DistanceTo(player.Position) <= d.Radius); + foreach (Door d in NearDoors) + { + if (!user.IsAdmin(AdminLevel.ADMIN) && (d.FactionId != user.FactionId || d.FactionId == null)) + { + string lockState = "~r~Du hast kein Recht diese T\u00fcr " + (d.Locked == true ? "auf" : "ab") + "zuschlie\u00dfen!"; + player.SendNotification(lockState, true); + continue; + } + + d.Locked = !d.Locked; + + string notStr = d.Name + " " + (d.Locked == false ? "~g~auf" : "~r~ab") + "geschlossen"; + + player.SendNotification(notStr, true); + + NAPI.Pools.GetAllPlayers().ForEach(p => p.TriggerEvent("changeDoorState", d.Model, d.X, d.Y, d.Z, (d.Locked ? 1 : 0), 0.0f, 0.0f, 0.0f)); + } + dbContext.SaveChanges(); + } + } + + [ServerEvent(Event.PlayerEnterColshape)] + public void DoorManagerPlayerEnterColShapeEvent(ColShape colShape, Client player) + { + if (_doorColShapes.ContainsValue(colShape.Handle)) + { + int doorId = _doorColShapes.Where(d => d.Value.Value == colShape.Handle.Value).FirstOrDefault().Key; + + using (var dbContext = new DatabaseContext()) + { + Door door = dbContext.Doors.Where(d => d.Id == doorId).First(); + player.TriggerEvent("changeDoorState", door.Model, door.X, door.Y, door.Z, (door.Locked ? 1 : 0), 0.0f, 0.0f, 0.0f); + } + } + } + } } diff --git a/ReallifeGamemode.Server/Managers/HouseManager.cs b/ReallifeGamemode.Server/Managers/HouseManager.cs index bc1391dd..66ad6780 100644 --- a/ReallifeGamemode.Server/Managers/HouseManager.cs +++ b/ReallifeGamemode.Server/Managers/HouseManager.cs @@ -10,96 +10,96 @@ using System.Text; namespace ReallifeGamemode.Server.Managers { - class HouseManager + class HouseManager + { + private static readonly Dictionary houseMarkers = new Dictionary(); + private static readonly Dictionary houseLabels = new Dictionary(); + private static readonly Dictionary houseColShapes = new Dictionary(); + + public static void LoadHouses() { - private static readonly Dictionary houseMarkers = new Dictionary(); - private static readonly Dictionary houseLabels = new Dictionary(); - private static readonly Dictionary houseColShapes = new Dictionary(); - - public static void LoadHouses() + using (var dbContext = new DatabaseContext()) + { + foreach (House house in dbContext.Houses.Include(h => h.Owner)) { - using(var dbContext = new DatabaseContext()) - { - foreach (House house in dbContext.Houses.Include(h => h.Owner)) - { - LoadHouse(house, false); - } - } - } - - public async static 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).FirstOrDefault(); - } - } - else - { - return dbContext.Houses.Where(h => h.Position.DistanceTo(position) <= 5f).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 void LoadHouse(House house, bool loadUser = true) - { - if (loadUser) house = house.Refresh(); - - 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)); - string text = $"~g~Zum Verkauf\n~s~{house.Type}\nPreis: ~y~{house.Price.ToMoneyString()}"; - if(house.User != null) - { - text = $"{house.Type}\n~s~Besitzer: ~y~{house.User.Name}"; - } - houseLabels[house.Id] = NAPI.TextLabel.CreateTextLabel(text, house.Position, 10f, 1f, 0, new Color(255, 255, 255)); - } - - public static void RemoveHouse(House house) - { - if (houseMarkers.ContainsKey(house.Id)) - { - houseMarkers[house.Id].Entity().Delete(); - houseMarkers.Remove(house.Id); - } - - if(houseLabels.ContainsKey(house.Id)) - { - houseLabels[house.Id].Entity().Delete(); - houseLabels.Remove(house.Id); - } + LoadHouse(house, false); } + } } + + public async static 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).FirstOrDefault(); + } + } + else + { + return dbContext.Houses.Where(h => h.Position.DistanceTo(position) <= 5f).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 void LoadHouse(House house, bool loadUser = true) + { + if (loadUser) house = house.Refresh(); + + 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)); + string text = $"~g~Zum Verkauf\n~s~{house.Type}\nPreis: ~y~{house.Price.ToMoneyString()}"; + if (house.User != null) + { + text = $"{house.Type}\n~s~Besitzer: ~y~{house.User.Name}"; + } + houseLabels[house.Id] = NAPI.TextLabel.CreateTextLabel(text, house.Position, 10f, 1f, 0, new Color(255, 255, 255)); + } + + public static void RemoveHouse(House house) + { + if (houseMarkers.ContainsKey(house.Id)) + { + houseMarkers[house.Id].Entity().Delete(); + houseMarkers.Remove(house.Id); + } + + if (houseLabels.ContainsKey(house.Id)) + { + houseLabels[house.Id].Entity().Delete(); + houseLabels.Remove(house.Id); + } + } + } } diff --git a/ReallifeGamemode.Server/Managers/InteractionManager.cs b/ReallifeGamemode.Server/Managers/InteractionManager.cs index 8b14fcc8..7a5935de 100644 --- a/ReallifeGamemode.Server/Managers/InteractionManager.cs +++ b/ReallifeGamemode.Server/Managers/InteractionManager.cs @@ -19,318 +19,318 @@ using System.Text; namespace ReallifeGamemode.Server.Managers { - public class InteractionManager : Script + public class InteractionManager : Script + { + #region Umgebungsinteraktionen PFEILTASTE-HOCH + #endregion + #region Eigeninteraktionen PFEILTASTE-RUNTER + [RemoteEvent("CLIENT:InteractionMenu_AcceptInvite")] + public void InteractionMenuAcceptInvite(Client player, string type) { - #region Umgebungsinteraktionen PFEILTASTE-HOCH - #endregion - #region Eigeninteraktionen PFEILTASTE-RUNTER - [RemoteEvent("CLIENT:InteractionMenu_AcceptInvite")] - public void InteractionMenuAcceptInvite(Client player, string type) + if (type != "Fraktion" && type != "Gruppe") return; + + if (type == "Fraktion") // Fraktions Invite annehmen + { + if (!player.HasData("accept_faction_invite")) { - if (type != "Fraktion" && type != "Gruppe") return; - - if (type == "Fraktion") // Fraktions Invite annehmen - { - if (!player.HasData("accept_faction_invite")) - { - ChatService.ErrorMessage(player, "Du hast keine Einladung in eine Fraktion erhalten"); - return; - } - - Client leader = NAPI.Player.GetPlayerFromHandle((NetHandle)player.GetData("accept_faction_invite")); - player.ResetData("accept_faction_invite"); - - if (leader == null) - { - ChatService.ErrorMessage(player, "Die Einladung ist abgelaufen"); - return; - } - - using (var dbContext = new DatabaseContext()) - { - User u = leader.GetUser(dbContext); - User own = player.GetUser(dbContext); - - own.FactionId = u.FactionId; - own.FactionLeader = false; - own.FactionRankId = dbContext - .FactionRanks - .OrderBy(x => x.Order) - .Where(r => r.FactionId == own.FactionId) - .FirstOrDefault()?.Id ?? null; - - ChatService.SendMessage(leader, "!{02FCFF}" + player.Name + " hat die Einladung angenommen."); - ChatService.SendMessage(player, "!{02FCFF}Du hast die Einladung angenommen."); - - dbContext.SaveChanges(); - } - } - else if (type == "Gruppe") // Gruppen Einladung annehmen - { - if (!player.HasData("accept_group_invite")) - { - ChatService.ErrorMessage(player, "Du hast keine Einladung in eine Gruppe erhalten"); - return; - } - - Client leader = NAPI.Player.GetPlayerFromHandle((NetHandle)player.GetData("accept_group_invite")); - player.ResetData("accept_group_invite"); - - if (leader == null) - { - ChatService.ErrorMessage(player, "Die Einladung ist abgelaufen"); - return; - } - - using (var dbContext = new DatabaseContext()) - { - User u = leader.GetUser(dbContext); - User own = player.GetUser(dbContext); - - own.Group = u.Group; - own.GroupRank = GroupRank.MEMBER; - - ChatService.SendMessage(leader, "!{02FCFF}" + player.Name + " hat die Einladung angenommen."); - ChatService.SendMessage(player, "!{02FCFF}Du hast die Einladung angenommen."); - - dbContext.SaveChanges(); - } - } + ChatService.ErrorMessage(player, "Du hast keine Einladung in eine Fraktion erhalten"); + return; } - [RemoteEvent("CLIENT:InteractionMenu_Invite")] - public void InteractionMenuInviteFaction(Client player, string type, string nameOrId) + Client leader = NAPI.Player.GetPlayerFromHandle((NetHandle)player.GetData("accept_faction_invite")); + player.ResetData("accept_faction_invite"); + + if (leader == null) { - if (type != "Fraktion" && type != "Gruppe") return; - - Client target = ClientService.GetClientByNameOrId(nameOrId); - if (target == null || !target.IsLoggedIn()) - { - ChatService.PlayerNotFound(player); - return; - } - - User targetUser = target.GetUser(); - User playerUser = player.GetUser(); - - if (type == "Fraktion") - { - if (playerUser?.FactionId == null || playerUser?.FactionLeader == false) - { - ChatService.NotAuthorized(player); - return; - } - - if (targetUser?.FactionId != null) - { - ChatService.ErrorMessage(player, "Dieser Spieler ist schon in einer Fraktion"); - return; - } - - target.SetData("accept_faction_invite", player.Handle); - - ChatService.SendMessage(player, "!{02FCFF}Du hast dem Spieler " + target.Name + " eine Einladung in deine Fraktion gesendet."); - ChatService.SendMessage(target, "!{02FCFF}Du hast von " + player.Name + " eine Einladung in die Fraktion \"" + playerUser.Faction.Name + "\" erhalten."); - ChatService.SendMessage(target, "!{02FCFF}Benutze das Interaktionsmenü, um die Einladung anzunehmen"); - } - else if (type == "Gruppe") - { - if (playerUser?.Group == null || playerUser.GroupRank < GroupRank.MANAGER) - { - ChatService.NotAuthorized(player); - return; - } - - if (targetUser?.Group != null) - { - ChatService.ErrorMessage(player, "Dieser Spieler ist schon in einer Gruppe"); - return; - } - - target.SetData("accept_group_invite", player.Handle); - - ChatService.SendMessage(player, "!{02FCFF}Du hast dem Spieler " + target.Name + " eine Einladung in deine Gruppe gesendet."); - ChatService.SendMessage(target, "!{02FCFF}Du hast von " + player.Name + " eine Einladung in die Gruppe \"" + playerUser.Group.Name + "\" erhalten."); - ChatService.SendMessage(target, "!{02FCFF}Benutze das Interaktionsmenü, um die Einladung anzunehmen"); - } + ChatService.ErrorMessage(player, "Die Einladung ist abgelaufen"); + return; } - [RemoteEvent("CLIENT:InteractionMenu_Uninvite")] - public void InteractionMenuInviteGroup(Client player, string type, string name) + using (var dbContext = new DatabaseContext()) { - if (type != "Fraktion" && type != "Gruppe") return; + User u = leader.GetUser(dbContext); + User own = player.GetUser(dbContext); - Client target = ClientService.GetClientByNameOrId(name); - if (target == null || !target.IsLoggedIn()) - { - ChatService.PlayerNotFound(player); - return; - } + own.FactionId = u.FactionId; + own.FactionLeader = false; + own.FactionRankId = dbContext + .FactionRanks + .OrderBy(x => x.Order) + .Where(r => r.FactionId == own.FactionId) + .FirstOrDefault()?.Id ?? null; - User targetUser = target.GetUser(); - User playerUser = player.GetUser(); + ChatService.SendMessage(leader, "!{02FCFF}" + player.Name + " hat die Einladung angenommen."); + ChatService.SendMessage(player, "!{02FCFF}Du hast die Einladung angenommen."); - if (type == "Fraktion") - { - if (playerUser?.FactionId == null || playerUser.FactionLeader == false) - { - ChatService.NotAuthorized(player); - return; - } - - if (targetUser?.FactionId != playerUser?.FactionId) - { - ChatService.ErrorMessage(player, "Dieser Spieler ist nicht in deiner Fraktion"); - return; - } - - if (player.Handle == target.Handle) - { - ChatService.ErrorMessage(player, "Du kannst dich nicht selber uninviten"); - return; - } - - if (targetUser?.FactionLeader ?? false) - { - ChatService.ErrorMessage(player, "Du kannst keinen Leader uninviten"); - return; - } - - using (var dbContext = new DatabaseContext()) - { - - target.GetUser(dbContext).FactionRankId = null; - target.GetUser(dbContext).FactionId = null; - - ChatService.SendMessage(player, "!{02FCFF}Du hast " + target.Name + " aus der Fraktion geworfen."); - ChatService.SendMessage(target, "!{02FCFF}Du wurdest von " + player.Name + " aus der Fraktion geworfen."); - - dbContext.SaveChanges(); - } - } - else if (type == "Gruppe") - { - if (playerUser?.Group == null || playerUser.GroupRank < GroupRank.MANAGER) - { - ChatService.NotAuthorized(player); - return; - } - - if (targetUser?.Group.Id != playerUser?.Group.Id) - { - ChatService.ErrorMessage(player, "Dieser Spieler ist nicht in deiner Fraktion"); - return; - } - - if (player.Handle == target.Handle) - { - ChatService.ErrorMessage(player, "Du kannst dich nicht selber uninviten"); - return; - } - - if (targetUser?.GroupRank >= GroupRank.MANAGER && playerUser?.GroupRank != GroupRank.OWNER) - { - ChatService.ErrorMessage(player, "Du kannst keinen Leader uninviten"); - return; - } - - using (var dbContext = new DatabaseContext()) - { - - target.GetUser(dbContext).Group = null; - target.GetUser(dbContext).GroupRank = GroupRank.NONE; - - ChatService.SendMessage(player, "!{02FCFF}Du hast " + target.Name + " aus der Gruppe geworfen."); - ChatService.SendMessage(target, "!{02FCFF}Du wurdest von " + player.Name + " aus der Gruppe geworfen."); - - dbContext.SaveChanges(); - } - } + dbContext.SaveChanges(); + } + } + else if (type == "Gruppe") // Gruppen Einladung annehmen + { + if (!player.HasData("accept_group_invite")) + { + ChatService.ErrorMessage(player, "Du hast keine Einladung in eine Gruppe erhalten"); + return; } - [RemoteEvent("CLIENT:InteractionMenu_CallService_Taxi")] - public void CallServiceTaxi(Client player, string street, string zone) + Client leader = NAPI.Player.GetPlayerFromHandle((NetHandle)player.GetData("accept_group_invite")); + player.ResetData("accept_group_invite"); + + if (leader == null) { - var taxiJob = JobManager.GetJob(); - - if(taxiJob.TaxiContracts.Where(t => t.Name == player.Name).Count() != 0) - { - ChatService.ErrorMessage(player, "Du kannst nur einmal ein Taxi rufen"); - return; - } - - taxiJob.TaxiContracts.Add(new TaxiContract() - { - Name = player.Name, - Position = player.Position - }); - - string msg = $"!{{02FCFF}}{player.Name} hat in der Straße {street} in {zone} ein Taxi gerufen."; - ChatService.BroadcastJob(msg, taxiJob); - ChatService.SendMessage(player, "!{02FCFF}Du hast erfolgreich ein Taxi zu deiner aktuellen Position gerufen."); - } - #endregion - #region Spielerinteraktionen PFEILTASTE-LINKS - [RemoteEvent("openTradeInventory")] - public void OpenTradeInventory(Client player, string targetPlayer) - { - InventoryManager.GetUserItems(player); - player.TriggerEvent("openTradeMenu", targetPlayer); + ChatService.ErrorMessage(player, "Die Einladung ist abgelaufen"); + return; } - [RemoteEvent("sendTradeItemsToPartner")] - public void SendTradeItemsToPartner(Client player, string tradeItemArray, int tradePrize, string tradePartnerName) + using (var dbContext = new DatabaseContext()) { - var tradeItems = JsonConvert.DeserializeObject(tradeItemArray); - Client tradePartner = ClientService.GetClientByNameOrId(tradePartnerName); - InventoryManager.GetUserItems(player); - tradePartner.TriggerEvent("showTradeRequest", player.Name, tradeItems, tradePrize); - player.TriggerEvent("startTradeRequestTimer"); + User u = leader.GetUser(dbContext); + User own = player.GetUser(dbContext); + + own.Group = u.Group; + own.GroupRank = GroupRank.MEMBER; + + ChatService.SendMessage(leader, "!{02FCFF}" + player.Name + " hat die Einladung angenommen."); + ChatService.SendMessage(player, "!{02FCFF}Du hast die Einladung angenommen."); + + dbContext.SaveChanges(); } - - [RemoteEvent("tradeDecision")] - public void TradeDecision(Client player, string tradeSelection, string tradeItemArray, string tradeRequesterName, int tradePrize) - { - var tradeItems = JsonConvert.DeserializeObject(tradeItemArray); - Client tradeRequester = ClientService.GetClientByNameOrId(tradeRequesterName); - if (tradeSelection == "accept") - { - if (player.GetUser().Handmoney < tradePrize) - { - tradeRequester.TriggerEvent("unlockTradeItems"); - tradeRequester.SendNotification("~y~" + player.Name + " ~r~hat nicht genügend Bargeld! ~s~Handel abgebrochen."); - player.SendNotification("~r~Du hast nicht genügend Bargeld! ~s~Handel abgebrochen."); - } - else - { - InventoryManager.GetUserItems(player); - tradeRequester.TriggerEvent("clearTradeItems"); - player.TriggerEvent("showTradeItems", tradeItemArray); - - using (var dbContext = new DatabaseContext()) - { - var playerUserId = player.GetUser().Id; - var tradeRUserId = tradeRequester.GetUser().Id; - var playerUser = dbContext.Users.FirstOrDefault(u => u.Id == playerUserId); - var tradeRequesterUser = dbContext.Users.FirstOrDefault(u => u.Id == tradeRUserId); - - playerUser.Handmoney -= tradePrize; - player.TriggerEvent("SERVER:WORLD_INTERACTION:UPDATE_HANDMONEY", playerUser.Handmoney); - - tradeRequesterUser.Handmoney += tradePrize; - tradeRequester.TriggerEvent("SERVER:WORLD_INTERACTION:UPDATE_HANDMONEY", tradeRequesterUser.Handmoney); - - dbContext.SaveChanges(); - } - } - } - else - { - tradeRequester.TriggerEvent("unlockTradeItems"); - } - } - #endregion - #region Fraktionsinteraktionen / Jobinteraktionen PFEILTASTE-RECHTS - #endregion + } } + + [RemoteEvent("CLIENT:InteractionMenu_Invite")] + public void InteractionMenuInviteFaction(Client player, string type, string nameOrId) + { + if (type != "Fraktion" && type != "Gruppe") return; + + Client target = ClientService.GetClientByNameOrId(nameOrId); + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(player); + return; + } + + User targetUser = target.GetUser(); + User playerUser = player.GetUser(); + + if (type == "Fraktion") + { + if (playerUser?.FactionId == null || playerUser?.FactionLeader == false) + { + ChatService.NotAuthorized(player); + return; + } + + if (targetUser?.FactionId != null) + { + ChatService.ErrorMessage(player, "Dieser Spieler ist schon in einer Fraktion"); + return; + } + + target.SetData("accept_faction_invite", player.Handle); + + ChatService.SendMessage(player, "!{02FCFF}Du hast dem Spieler " + target.Name + " eine Einladung in deine Fraktion gesendet."); + ChatService.SendMessage(target, "!{02FCFF}Du hast von " + player.Name + " eine Einladung in die Fraktion \"" + playerUser.Faction.Name + "\" erhalten."); + ChatService.SendMessage(target, "!{02FCFF}Benutze das Interaktionsmenü, um die Einladung anzunehmen"); + } + else if (type == "Gruppe") + { + if (playerUser?.Group == null || playerUser.GroupRank < GroupRank.MANAGER) + { + ChatService.NotAuthorized(player); + return; + } + + if (targetUser?.Group != null) + { + ChatService.ErrorMessage(player, "Dieser Spieler ist schon in einer Gruppe"); + return; + } + + target.SetData("accept_group_invite", player.Handle); + + ChatService.SendMessage(player, "!{02FCFF}Du hast dem Spieler " + target.Name + " eine Einladung in deine Gruppe gesendet."); + ChatService.SendMessage(target, "!{02FCFF}Du hast von " + player.Name + " eine Einladung in die Gruppe \"" + playerUser.Group.Name + "\" erhalten."); + ChatService.SendMessage(target, "!{02FCFF}Benutze das Interaktionsmenü, um die Einladung anzunehmen"); + } + } + + [RemoteEvent("CLIENT:InteractionMenu_Uninvite")] + public void InteractionMenuInviteGroup(Client player, string type, string name) + { + if (type != "Fraktion" && type != "Gruppe") return; + + Client target = ClientService.GetClientByNameOrId(name); + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(player); + return; + } + + User targetUser = target.GetUser(); + User playerUser = player.GetUser(); + + if (type == "Fraktion") + { + if (playerUser?.FactionId == null || playerUser.FactionLeader == false) + { + ChatService.NotAuthorized(player); + return; + } + + if (targetUser?.FactionId != playerUser?.FactionId) + { + ChatService.ErrorMessage(player, "Dieser Spieler ist nicht in deiner Fraktion"); + return; + } + + if (player.Handle == target.Handle) + { + ChatService.ErrorMessage(player, "Du kannst dich nicht selber uninviten"); + return; + } + + if (targetUser?.FactionLeader ?? false) + { + ChatService.ErrorMessage(player, "Du kannst keinen Leader uninviten"); + return; + } + + using (var dbContext = new DatabaseContext()) + { + + target.GetUser(dbContext).FactionRankId = null; + target.GetUser(dbContext).FactionId = null; + + ChatService.SendMessage(player, "!{02FCFF}Du hast " + target.Name + " aus der Fraktion geworfen."); + ChatService.SendMessage(target, "!{02FCFF}Du wurdest von " + player.Name + " aus der Fraktion geworfen."); + + dbContext.SaveChanges(); + } + } + else if (type == "Gruppe") + { + if (playerUser?.Group == null || playerUser.GroupRank < GroupRank.MANAGER) + { + ChatService.NotAuthorized(player); + return; + } + + if (targetUser?.Group.Id != playerUser?.Group.Id) + { + ChatService.ErrorMessage(player, "Dieser Spieler ist nicht in deiner Fraktion"); + return; + } + + if (player.Handle == target.Handle) + { + ChatService.ErrorMessage(player, "Du kannst dich nicht selber uninviten"); + return; + } + + if (targetUser?.GroupRank >= GroupRank.MANAGER && playerUser?.GroupRank != GroupRank.OWNER) + { + ChatService.ErrorMessage(player, "Du kannst keinen Leader uninviten"); + return; + } + + using (var dbContext = new DatabaseContext()) + { + + target.GetUser(dbContext).Group = null; + target.GetUser(dbContext).GroupRank = GroupRank.NONE; + + ChatService.SendMessage(player, "!{02FCFF}Du hast " + target.Name + " aus der Gruppe geworfen."); + ChatService.SendMessage(target, "!{02FCFF}Du wurdest von " + player.Name + " aus der Gruppe geworfen."); + + dbContext.SaveChanges(); + } + } + } + + [RemoteEvent("CLIENT:InteractionMenu_CallService_Taxi")] + public void CallServiceTaxi(Client player, string street, string zone) + { + var taxiJob = JobManager.GetJob(); + + if (taxiJob.TaxiContracts.Where(t => t.Name == player.Name).Count() != 0) + { + ChatService.ErrorMessage(player, "Du kannst nur einmal ein Taxi rufen"); + return; + } + + taxiJob.TaxiContracts.Add(new TaxiContract() + { + Name = player.Name, + Position = player.Position + }); + + string msg = $"!{{02FCFF}}{player.Name} hat in der Straße {street} in {zone} ein Taxi gerufen."; + ChatService.BroadcastJob(msg, taxiJob); + ChatService.SendMessage(player, "!{02FCFF}Du hast erfolgreich ein Taxi zu deiner aktuellen Position gerufen."); + } + #endregion + #region Spielerinteraktionen PFEILTASTE-LINKS + [RemoteEvent("openTradeInventory")] + public void OpenTradeInventory(Client player, string targetPlayer) + { + InventoryManager.GetUserItems(player); + player.TriggerEvent("openTradeMenu", targetPlayer); + } + + [RemoteEvent("sendTradeItemsToPartner")] + public void SendTradeItemsToPartner(Client player, string tradeItemArray, int tradePrize, string tradePartnerName) + { + var tradeItems = JsonConvert.DeserializeObject(tradeItemArray); + Client tradePartner = ClientService.GetClientByNameOrId(tradePartnerName); + InventoryManager.GetUserItems(player); + tradePartner.TriggerEvent("showTradeRequest", player.Name, tradeItems, tradePrize); + player.TriggerEvent("startTradeRequestTimer"); + } + + [RemoteEvent("tradeDecision")] + public void TradeDecision(Client player, string tradeSelection, string tradeItemArray, string tradeRequesterName, int tradePrize) + { + var tradeItems = JsonConvert.DeserializeObject(tradeItemArray); + Client tradeRequester = ClientService.GetClientByNameOrId(tradeRequesterName); + if (tradeSelection == "accept") + { + if (player.GetUser().Handmoney < tradePrize) + { + tradeRequester.TriggerEvent("unlockTradeItems"); + tradeRequester.SendNotification("~y~" + player.Name + " ~r~hat nicht genügend Bargeld! ~s~Handel abgebrochen."); + player.SendNotification("~r~Du hast nicht genügend Bargeld! ~s~Handel abgebrochen."); + } + else + { + InventoryManager.GetUserItems(player); + tradeRequester.TriggerEvent("clearTradeItems"); + player.TriggerEvent("showTradeItems", tradeItemArray); + + using (var dbContext = new DatabaseContext()) + { + var playerUserId = player.GetUser().Id; + var tradeRUserId = tradeRequester.GetUser().Id; + var playerUser = dbContext.Users.FirstOrDefault(u => u.Id == playerUserId); + var tradeRequesterUser = dbContext.Users.FirstOrDefault(u => u.Id == tradeRUserId); + + playerUser.Handmoney -= tradePrize; + player.TriggerEvent("SERVER:WORLD_INTERACTION:UPDATE_HANDMONEY", playerUser.Handmoney); + + tradeRequesterUser.Handmoney += tradePrize; + tradeRequester.TriggerEvent("SERVER:WORLD_INTERACTION:UPDATE_HANDMONEY", tradeRequesterUser.Handmoney); + + dbContext.SaveChanges(); + } + } + } + else + { + tradeRequester.TriggerEvent("unlockTradeItems"); + } + } + #endregion + #region Fraktionsinteraktionen / Jobinteraktionen PFEILTASTE-RECHTS + #endregion + } } diff --git a/ReallifeGamemode.Server/Managers/InteriorManager.cs b/ReallifeGamemode.Server/Managers/InteriorManager.cs index f3fd1cc9..a84d2de5 100644 --- a/ReallifeGamemode.Server/Managers/InteriorManager.cs +++ b/ReallifeGamemode.Server/Managers/InteriorManager.cs @@ -6,140 +6,140 @@ using System.Linq; namespace ReallifeGamemode.Server.Managers { - public class InteriorManager : Script + public class InteriorManager : Script + { + public static Dictionary _interiorEnterTextLabels = new Dictionary(); + public static Dictionary _interiorExitTextLabels = new Dictionary(); + public static Dictionary _interiorEnterMarkers = new Dictionary(); + public static Dictionary _interiorExitMarkers = new Dictionary(); + public static Dictionary _interiorEnterColShapes = new Dictionary(); + public static Dictionary _interiorExitColShapes = new Dictionary(); + + public static Interior GetInteriorByName(string name, DatabaseContext dbContext = null) { - public static Dictionary _interiorEnterTextLabels = new Dictionary(); - public static Dictionary _interiorExitTextLabels = new Dictionary(); - public static Dictionary _interiorEnterMarkers = new Dictionary(); - public static Dictionary _interiorExitMarkers = new Dictionary(); - public static Dictionary _interiorEnterColShapes = new Dictionary(); - public static Dictionary _interiorExitColShapes = new Dictionary(); - - public static Interior GetInteriorByName(string name, DatabaseContext dbContext = null) + if (dbContext == null) + { + using (dbContext = new DatabaseContext()) { - if (dbContext == null) - { - using (dbContext = new DatabaseContext()) - { - return dbContext.Interiors.Where(i => i.Name.ToLower() == name.ToLower()).FirstOrDefault(); - } - } - else - { - return dbContext.Interiors.Where(i => i.Name.ToLower() == name.ToLower()).FirstOrDefault(); - } - } - - public static Interior GetInteriorById(int id, DatabaseContext dbContext = null) - { - if (dbContext == null) - { - using (dbContext = new DatabaseContext()) - { - return dbContext.Interiors.Where(i => i.Id == id).FirstOrDefault(); - } - } - else - { - return dbContext.Interiors.Where(i => i.Id == id).FirstOrDefault(); - } - } - - public static void LoadInteriors() - { - using (var dbContext = new DatabaseContext()) - { - foreach (Interior interior in dbContext.Interiors) - { - LoadInterior(interior); - } - } - } - - public static void LoadInterior(Interior interior) - { - if (interior.EnterPosition != null) - { - _interiorEnterTextLabels[interior.Id] = NAPI.TextLabel.CreateTextLabel("~y~" + interior.Name + "\n~s~Eingang", interior.EnterPosition, 10f, 1f, 0, new Color(255, 255, 255)); - _interiorEnterMarkers[interior.Id] = NAPI.Marker.CreateMarker(MarkerType.VerticalCylinder, interior.EnterPosition.Subtract(new Vector3(0, 0, 1.7)), new Vector3(), new Vector3(), 1.6f, new Color(255, 255, 255, 100)); - _interiorEnterColShapes[interior.Id] = NAPI.ColShape.CreateSphereColShape(interior.EnterPosition, 1.5f); - } - - if (interior.ExitPosition != null) - { - _interiorExitTextLabels[interior.Id] = NAPI.TextLabel.CreateTextLabel("~y~" + interior.Name + "\n~s~Ausgang", interior.ExitPosition, 10f, 1f, 0, new Color(255, 255, 255)); - _interiorExitMarkers[interior.Id] = NAPI.Marker.CreateMarker(MarkerType.VerticalCylinder, interior.ExitPosition.Subtract(new Vector3(0, 0, 1.7)), new Vector3(), new Vector3(), 1.6f, new Color(255, 255, 255, 100)); - _interiorExitColShapes[interior.Id] = NAPI.ColShape.CreateSphereColShape(interior.ExitPosition, 1.5f); - } - } - - public static void DeleteInterior(Interior interior) - { - TextLabel enT = GetInteriorEnterTextLabel(interior); - TextLabel exT = GetInteriorExitTextLabel(interior); - Marker enM = GetInteriorEnterMarker(interior); - Marker exM = GetInteriorExitMarkers(interior); - ColShape enC = GetInteriorEnterColShape(interior); - ColShape exC = GetInteriorExitColShape(interior); - - if (enT != null) enT.Delete(); - if (exT != null) exT.Delete(); - if (enM != null) enM.Delete(); - if (exM != null) exM.Delete(); - if (enC != null) enC.Delete(); - if (exC != null) exC.Delete(); - - _interiorEnterTextLabels.Remove(interior.Id); - _interiorExitTextLabels.Remove(interior.Id); - _interiorEnterMarkers.Remove(interior.Id); - _interiorExitMarkers.Remove(interior.Id); - _interiorEnterColShapes.Remove(interior.Id); - _interiorExitColShapes.Remove(interior.Id); - } - - public static TextLabel GetInteriorEnterTextLabel(Interior interior) => NAPI.Pools.GetAllTextLabels().Find(t => t.Handle.Value == _interiorEnterTextLabels.FirstOrDefault(x => x.Key == interior.Id).Value.Value); - public static TextLabel GetInteriorExitTextLabel(Interior interior) => NAPI.Pools.GetAllTextLabels().Find(t => t.Handle.Value == _interiorExitTextLabels.FirstOrDefault(x => x.Key == interior.Id).Value.Value); - - public static Marker GetInteriorEnterMarker(Interior interior) => NAPI.Pools.GetAllMarkers().Find(t => t.Handle.Value == _interiorEnterMarkers.FirstOrDefault(x => x.Key == interior.Id).Value.Value); - public static Marker GetInteriorExitMarkers(Interior interior) => NAPI.Pools.GetAllMarkers().Find(t => t.Handle.Value == _interiorExitMarkers.FirstOrDefault(x => x.Key == interior.Id).Value.Value); - - public static ColShape GetInteriorEnterColShape(Interior interior) => NAPI.Pools.GetAllColShapes().Find(t => t.Handle.Value == _interiorEnterColShapes.FirstOrDefault(x => x.Key == interior.Id).Value.Value); - public static ColShape GetInteriorExitColShape(Interior interior) => NAPI.Pools.GetAllColShapes().Find(t => t.Handle.Value == _interiorExitColShapes.FirstOrDefault(x => x.Key == interior.Id).Value.Value); - - public static int GetInteriorIdFromEnterColShape(NetHandle handle) => _interiorEnterColShapes.FirstOrDefault(c => c.Value.Value == handle.Value).Key; - public static int GetInteriorIdFromExitColShape(NetHandle handle) => _interiorExitColShapes.FirstOrDefault(c => c.Value.Value == handle.Value).Key; - - [ServerEvent(Event.PlayerEnterColshape)] - public void InteriorManagerPlayerEnterColshapeEvent(ColShape colShape, Client player) - { - int enterId = GetInteriorIdFromEnterColShape(colShape); - int exitId = GetInteriorIdFromExitColShape(colShape); - if (enterId != 0) - { - Interior interior = GetInteriorById(enterId); - player.TriggerEvent("InteriorManager_ShowHelpText", interior.Name, interior.Id, 0); - } - else if (exitId != 0) - { - Interior interior = GetInteriorById(exitId); - player.TriggerEvent("InteriorManager_ShowHelpText", interior.Name, interior.Id, 1); - } - } - - [ServerEvent(Event.PlayerExitColshape)] - public void InteriorManagerPlayerExitColshapeEvent(ColShape colShape, Client player) - { - if (GetInteriorIdFromEnterColShape(colShape) != 0 || GetInteriorIdFromExitColShape(colShape) != 0) - { - player.TriggerEvent("InteriorManager_ClearHelpText"); - } - } - - [RemoteEvent("InteriorManager_UseTeleport")] - public void InteriorManagerUseTeleportEvent(Client player, int id, int enterExit) - { - Interior interior = GetInteriorById(id); - player.Position = enterExit == 0 ? interior.ExitPosition : interior.EnterPosition; + return dbContext.Interiors.Where(i => i.Name.ToLower() == name.ToLower()).FirstOrDefault(); } + } + else + { + return dbContext.Interiors.Where(i => i.Name.ToLower() == name.ToLower()).FirstOrDefault(); + } } + + public static Interior GetInteriorById(int id, DatabaseContext dbContext = null) + { + if (dbContext == null) + { + using (dbContext = new DatabaseContext()) + { + return dbContext.Interiors.Where(i => i.Id == id).FirstOrDefault(); + } + } + else + { + return dbContext.Interiors.Where(i => i.Id == id).FirstOrDefault(); + } + } + + public static void LoadInteriors() + { + using (var dbContext = new DatabaseContext()) + { + foreach (Interior interior in dbContext.Interiors) + { + LoadInterior(interior); + } + } + } + + public static void LoadInterior(Interior interior) + { + if (interior.EnterPosition != null) + { + _interiorEnterTextLabels[interior.Id] = NAPI.TextLabel.CreateTextLabel("~y~" + interior.Name + "\n~s~Eingang", interior.EnterPosition, 10f, 1f, 0, new Color(255, 255, 255)); + _interiorEnterMarkers[interior.Id] = NAPI.Marker.CreateMarker(MarkerType.VerticalCylinder, interior.EnterPosition.Subtract(new Vector3(0, 0, 1.7)), new Vector3(), new Vector3(), 1.6f, new Color(255, 255, 255, 100)); + _interiorEnterColShapes[interior.Id] = NAPI.ColShape.CreateSphereColShape(interior.EnterPosition, 1.5f); + } + + if (interior.ExitPosition != null) + { + _interiorExitTextLabels[interior.Id] = NAPI.TextLabel.CreateTextLabel("~y~" + interior.Name + "\n~s~Ausgang", interior.ExitPosition, 10f, 1f, 0, new Color(255, 255, 255)); + _interiorExitMarkers[interior.Id] = NAPI.Marker.CreateMarker(MarkerType.VerticalCylinder, interior.ExitPosition.Subtract(new Vector3(0, 0, 1.7)), new Vector3(), new Vector3(), 1.6f, new Color(255, 255, 255, 100)); + _interiorExitColShapes[interior.Id] = NAPI.ColShape.CreateSphereColShape(interior.ExitPosition, 1.5f); + } + } + + public static void DeleteInterior(Interior interior) + { + TextLabel enT = GetInteriorEnterTextLabel(interior); + TextLabel exT = GetInteriorExitTextLabel(interior); + Marker enM = GetInteriorEnterMarker(interior); + Marker exM = GetInteriorExitMarkers(interior); + ColShape enC = GetInteriorEnterColShape(interior); + ColShape exC = GetInteriorExitColShape(interior); + + if (enT != null) enT.Delete(); + if (exT != null) exT.Delete(); + if (enM != null) enM.Delete(); + if (exM != null) exM.Delete(); + if (enC != null) enC.Delete(); + if (exC != null) exC.Delete(); + + _interiorEnterTextLabels.Remove(interior.Id); + _interiorExitTextLabels.Remove(interior.Id); + _interiorEnterMarkers.Remove(interior.Id); + _interiorExitMarkers.Remove(interior.Id); + _interiorEnterColShapes.Remove(interior.Id); + _interiorExitColShapes.Remove(interior.Id); + } + + public static TextLabel GetInteriorEnterTextLabel(Interior interior) => NAPI.Pools.GetAllTextLabels().Find(t => t.Handle.Value == _interiorEnterTextLabels.FirstOrDefault(x => x.Key == interior.Id).Value.Value); + public static TextLabel GetInteriorExitTextLabel(Interior interior) => NAPI.Pools.GetAllTextLabels().Find(t => t.Handle.Value == _interiorExitTextLabels.FirstOrDefault(x => x.Key == interior.Id).Value.Value); + + public static Marker GetInteriorEnterMarker(Interior interior) => NAPI.Pools.GetAllMarkers().Find(t => t.Handle.Value == _interiorEnterMarkers.FirstOrDefault(x => x.Key == interior.Id).Value.Value); + public static Marker GetInteriorExitMarkers(Interior interior) => NAPI.Pools.GetAllMarkers().Find(t => t.Handle.Value == _interiorExitMarkers.FirstOrDefault(x => x.Key == interior.Id).Value.Value); + + public static ColShape GetInteriorEnterColShape(Interior interior) => NAPI.Pools.GetAllColShapes().Find(t => t.Handle.Value == _interiorEnterColShapes.FirstOrDefault(x => x.Key == interior.Id).Value.Value); + public static ColShape GetInteriorExitColShape(Interior interior) => NAPI.Pools.GetAllColShapes().Find(t => t.Handle.Value == _interiorExitColShapes.FirstOrDefault(x => x.Key == interior.Id).Value.Value); + + public static int GetInteriorIdFromEnterColShape(NetHandle handle) => _interiorEnterColShapes.FirstOrDefault(c => c.Value.Value == handle.Value).Key; + public static int GetInteriorIdFromExitColShape(NetHandle handle) => _interiorExitColShapes.FirstOrDefault(c => c.Value.Value == handle.Value).Key; + + [ServerEvent(Event.PlayerEnterColshape)] + public void InteriorManagerPlayerEnterColshapeEvent(ColShape colShape, Client player) + { + int enterId = GetInteriorIdFromEnterColShape(colShape); + int exitId = GetInteriorIdFromExitColShape(colShape); + if (enterId != 0) + { + Interior interior = GetInteriorById(enterId); + player.TriggerEvent("InteriorManager_ShowHelpText", interior.Name, interior.Id, 0); + } + else if (exitId != 0) + { + Interior interior = GetInteriorById(exitId); + player.TriggerEvent("InteriorManager_ShowHelpText", interior.Name, interior.Id, 1); + } + } + + [ServerEvent(Event.PlayerExitColshape)] + public void InteriorManagerPlayerExitColshapeEvent(ColShape colShape, Client player) + { + if (GetInteriorIdFromEnterColShape(colShape) != 0 || GetInteriorIdFromExitColShape(colShape) != 0) + { + player.TriggerEvent("InteriorManager_ClearHelpText"); + } + } + + [RemoteEvent("InteriorManager_UseTeleport")] + public void InteriorManagerUseTeleportEvent(Client player, int id, int enterExit) + { + Interior interior = GetInteriorById(id); + player.Position = enterExit == 0 ? interior.ExitPosition : interior.EnterPosition; + } + } } diff --git a/ReallifeGamemode.Server/Managers/InventoryManager.cs b/ReallifeGamemode.Server/Managers/InventoryManager.cs index 861db28e..983ac15d 100644 --- a/ReallifeGamemode.Server/Managers/InventoryManager.cs +++ b/ReallifeGamemode.Server/Managers/InventoryManager.cs @@ -19,302 +19,302 @@ using System.Reflection; namespace ReallifeGamemode.Server.Managers { - public class InventoryManager : Script + public class InventoryManager : Script + { + public static List itemList; + + public static void LoadItems() { - public static List itemList; + itemList = new List(); - public static void LoadItems() + Type[] allTypes = Assembly.GetExecutingAssembly().GetTypes(); + foreach (Type item in allTypes) + { + if (item.GetInterfaces().Contains((typeof(IItem))) && !item.IsAbstract) { - itemList = new List(); - - Type[] allTypes = Assembly.GetExecutingAssembly().GetTypes(); - foreach (Type item in allTypes) + NAPI.Util.ConsoleOutput($"Loading Item {item.Name}"); + if (Activator.CreateInstance(item) is IItem o) + { + if (GetItemById(o.Id) != null) { - if (item.GetInterfaces().Contains((typeof(IItem))) && !item.IsAbstract) - { - NAPI.Util.ConsoleOutput($"Loading Item {item.Name}"); - if (Activator.CreateInstance(item) is IItem o) - { - if (GetItemById(o.Id) != null) - { - throw new InvalidOperationException($"Double ItemID found: {o.Id} | {o.Name}"); - } - itemList.Add(o); - } - } - } - } - - public static IItem GetItemById(int id) - { - return itemList.Find(i => i.Id == id); - } - - public static IItem GetItemByName(string name) - { - return itemList.Find(i => i.Name.ToLower() == name.ToLower()); - } - - public static void RemoveUserItem(User user, UserItem item, int amount) - { - using (var dbContext = new DatabaseContext()) - { - var userItem = dbContext.UserItems.FirstOrDefault(i => i.Id == item.Id); - - userItem.Amount -= amount; - - dbContext.SaveChanges(); - - if (userItem.Amount == 0) - { - dbContext.Remove(userItem); - dbContext.SaveChanges(); - } - } - } - - public static void GetUserItems(Client player) - { - var user = player.GetUser(); - var inventoryWeight = 0; - - using (var context = new DatabaseContext()) - { - List userItems = context.UserItems.ToList().FindAll(i => i.UserId == user.Id); - string[][] items = new string[userItems.Count][]; - foreach (var item in userItems) - { - IItem iItem = GetItemById(item.ItemId); - var currentItemWeight = iItem.Gewicht * item.Amount; - inventoryWeight += currentItemWeight; - - items[userItems.IndexOf(item)] = new string[6]; - items[userItems.IndexOf(item)][0] = iItem.Name; - items[userItems.IndexOf(item)][1] = iItem.Description; - items[userItems.IndexOf(item)][2] = iItem.Gewicht.ToString(); - items[userItems.IndexOf(item)][3] = item.Amount.ToString(); - items[userItems.IndexOf(item)][4] = item.Slot.ToString(); - items[userItems.IndexOf(item)][5] = item.Id.ToString(); - } - player.TriggerEvent("showInventory", inventoryWeight, items); - } - } - - public static int GetUserInventoryWeight(Client player) - { - var user = player.GetUser(); - var inventoryWeight = 0; - - using (var context = new DatabaseContext()) - { - List userItems = context.UserItems.ToList().FindAll(i => i.UserId == user.Id); - foreach (var item in userItems) - { - IItem iItem = GetItemById(item.ItemId); - var currentItemWeight = iItem.Gewicht * item.Amount; - inventoryWeight += currentItemWeight; - } - } - - return inventoryWeight; - } - - public static UserItem UserHasThisItem(Client player, int itemId) - { - var user = player.GetUser(); - using (var context = new DatabaseContext()) - { - UserItem existingItem = context.UserItems.FirstOrDefault(i => i.UserId == user.Id && i.ItemId == itemId); - return existingItem; - } - } - - public static void GetUserItemsAsAdmin(Client player, Entities.User user) - { - var inventoryWeight = 0; - - using (var context = new DatabaseContext()) - { - List userItems = context.UserItems.ToList().FindAll(i => i.UserId == user.Id); - string[][] items = new string[userItems.Count][]; - foreach (var item in userItems) - { - IItem iItem = GetItemById(item.ItemId); - var currentItemWeight = iItem.Gewicht * item.Amount; - inventoryWeight += currentItemWeight; - - items[userItems.IndexOf(item)] = new string[6]; - items[userItems.IndexOf(item)][0] = iItem.Name; - items[userItems.IndexOf(item)][1] = iItem.Description; - items[userItems.IndexOf(item)][2] = iItem.Gewicht.ToString(); - items[userItems.IndexOf(item)][3] = item.Amount.ToString(); - items[userItems.IndexOf(item)][4] = item.Slot.ToString(); - items[userItems.IndexOf(item)][5] = item.Id.ToString(); - } - player.TriggerEvent("showInventoryToAdmin", user.Name, inventoryWeight, items); - } - } - - [RemoteEvent("saveInventory")] - public void SavePlayerInventory(Client player, string itemArray) - { - - var user = player.GetUser(); - var items = JsonConvert.DeserializeObject(itemArray); - - using (var context = new DatabaseContext()) - { - for (var i = 0; i < items.Length; i++) - { - UserItem cItem = new UserItem - { - Amount = int.Parse(items[i][3]), - ItemId = GetItemByName(items[i][0]).Id, - UserId = user.Id, - Slot = int.Parse(items[i][4]), - }; - - if (int.Parse(items[i][5]) == -1) - { - context.UserItems.Add(cItem); - } - else if (cItem.Slot == -1) - { - UserItem fItem = context.UserItems.FirstOrDefault(j => j.Id == int.Parse(items[i][5])); - context.UserItems.Remove(fItem); - } - else - { - UserItem fItem = context.UserItems.FirstOrDefault(j => j.Id == int.Parse(items[i][5])); - fItem.Amount = cItem.Amount; - fItem.Slot = cItem.Slot; - } - } - context.SaveChanges(); - player.TriggerEvent("SERVER:INVENTORY_SYNC"); - } - } - - public static void AddItemToInventory(Client player, UserItem item) - { - var user = player.GetUser(); - using (var context = new DatabaseContext()) - { - UserItem existingItem = context.UserItems.FirstOrDefault(i => i.ItemId == item.ItemId && i.UserId == item.UserId); - if (existingItem != null) - { - existingItem.Amount += item.Amount; - } - else - { - List allItemsByUser = context.UserItems.ToList().FindAll(i => i.UserId == user.Id); - var slotArr = Enumerable.Range(1, 20).ToList(); - allItemsByUser.ForEach(allItem => - { - if (slotArr.Contains(allItem.Slot)) slotArr.Remove(allItem.Slot); - }); - - int newSlot = slotArr.Min(); - - item.Slot = newSlot; - context.UserItems.Add(item); - - IItem iItem = GetItemById(item.ItemId); - - string[] newItem = new string[] { iItem.Name, iItem.Description, iItem.Gewicht.ToString(), item.Amount.ToString(), newSlot.ToString(), item.Id.ToString() }; - - player.TriggerEvent("addItem", JsonConvert.SerializeObject(newItem)); - } - context.SaveChanges(); - } - } - - [RemoteEvent("removeItemAsAdmin")] - public void SavePlayerInventory(Client player, string amount, string userItemId, string targetPlayerName) - { - using (var context = new DatabaseContext()) - { - UserItem fItem = context.UserItems.FirstOrDefault(j => j.Id == int.Parse(userItemId)); - - Client targetPlayer = ClientService.GetClientByNameOrId(targetPlayerName); - - if (amount == "stack") - { - var itemSlot = fItem.Slot; - targetPlayer.TriggerEvent("removeItem", userItemId, fItem.Amount); - context.UserItems.Remove(fItem); - } - else if (amount == "one") - { - var itemSlot = fItem.Slot; - targetPlayer.TriggerEvent("removeItem", userItemId, 1); - fItem.Amount--; - } - context.SaveChanges(); - } - } - [RemoteEvent("itemInteract")] - public void ItemInteract(Client player, string type, string itemId, int amount) - { - using (var context = new DatabaseContext()) - { - UserItem fItem = context.UserItems.FirstOrDefault(j => j.Id == int.Parse(itemId)); - IItem iItem = GetItemById(fItem.ItemId); - - switch (type) - { - case "use": - ChatService.SendMessage(player, "use item: " + iItem.Name); - if (iItem == null) - { - ChatService.SendMessage(player, "Dieses Essen existiert nicht."); - return; - } - - if (fItem == null) - { - ChatService.SendMessage(player, "Du hast dieses Item nicht"); - return; - } - - if (iItem is IUsableItem usableItemObj) - { - usableItemObj.Use(fItem); - player.TriggerEvent("removeItem", itemId, amount); - } - else ChatService.SendMessage(player, "not useable"); - break; - case "drop": - - if (iItem == null) - { - ChatService.SendMessage(player, "Dieses Item existiert nicht."); - return; - } - - if (fItem == null) - { - ChatService.SendMessage(player, "Du hast dieses Item nicht"); - return; - } - - if (iItem is IDroppableItem usableItemObj2) - { - Vector3 dropPosition = ClientExtension.GetPositionFromPlayer(player, 0.6f, 0); - dropPosition.Z -= 0.8f; - //new Vector3(player.Position.X, player.Position.Y, player.Position.Z - 0.8f); - Random r = new Random(); - GTANetworkAPI.Object grndObject = NAPI.Object.CreateObject(3777723516, dropPosition, new Vector3(0, 0, r.Next(0, 360)), 0); - GroundItem grndItem = new GroundItem { ItemId = iItem.Id, Amount = amount, Position = dropPosition }; - TextLabel grndTxtLbl = NAPI.TextLabel.CreateTextLabel(iItem.Name + " ~s~(~y~" + amount + "~s~)", dropPosition, 5, 0.5f, 4, new Color(255, 255, 255), false, 0); - GroundItem.AddGroundItem(grndItem, grndObject, grndTxtLbl); - fItem.Amount -= amount; - player.TriggerEvent("removeItem", itemId, amount); - } - break; - } - context.SaveChanges(); + throw new InvalidOperationException($"Double ItemID found: {o.Id} | {o.Name}"); } + itemList.Add(o); + } } + } } + + public static IItem GetItemById(int id) + { + return itemList.Find(i => i.Id == id); + } + + public static IItem GetItemByName(string name) + { + return itemList.Find(i => i.Name.ToLower() == name.ToLower()); + } + + public static void RemoveUserItem(User user, UserItem item, int amount) + { + using (var dbContext = new DatabaseContext()) + { + var userItem = dbContext.UserItems.FirstOrDefault(i => i.Id == item.Id); + + userItem.Amount -= amount; + + dbContext.SaveChanges(); + + if (userItem.Amount == 0) + { + dbContext.Remove(userItem); + dbContext.SaveChanges(); + } + } + } + + public static void GetUserItems(Client player) + { + var user = player.GetUser(); + var inventoryWeight = 0; + + using (var context = new DatabaseContext()) + { + List userItems = context.UserItems.ToList().FindAll(i => i.UserId == user.Id); + string[][] items = new string[userItems.Count][]; + foreach (var item in userItems) + { + IItem iItem = GetItemById(item.ItemId); + var currentItemWeight = iItem.Gewicht * item.Amount; + inventoryWeight += currentItemWeight; + + items[userItems.IndexOf(item)] = new string[6]; + items[userItems.IndexOf(item)][0] = iItem.Name; + items[userItems.IndexOf(item)][1] = iItem.Description; + items[userItems.IndexOf(item)][2] = iItem.Gewicht.ToString(); + items[userItems.IndexOf(item)][3] = item.Amount.ToString(); + items[userItems.IndexOf(item)][4] = item.Slot.ToString(); + items[userItems.IndexOf(item)][5] = item.Id.ToString(); + } + player.TriggerEvent("showInventory", inventoryWeight, items); + } + } + + public static int GetUserInventoryWeight(Client player) + { + var user = player.GetUser(); + var inventoryWeight = 0; + + using (var context = new DatabaseContext()) + { + List userItems = context.UserItems.ToList().FindAll(i => i.UserId == user.Id); + foreach (var item in userItems) + { + IItem iItem = GetItemById(item.ItemId); + var currentItemWeight = iItem.Gewicht * item.Amount; + inventoryWeight += currentItemWeight; + } + } + + return inventoryWeight; + } + + public static UserItem UserHasThisItem(Client player, int itemId) + { + var user = player.GetUser(); + using (var context = new DatabaseContext()) + { + UserItem existingItem = context.UserItems.FirstOrDefault(i => i.UserId == user.Id && i.ItemId == itemId); + return existingItem; + } + } + + public static void GetUserItemsAsAdmin(Client player, Entities.User user) + { + var inventoryWeight = 0; + + using (var context = new DatabaseContext()) + { + List userItems = context.UserItems.ToList().FindAll(i => i.UserId == user.Id); + string[][] items = new string[userItems.Count][]; + foreach (var item in userItems) + { + IItem iItem = GetItemById(item.ItemId); + var currentItemWeight = iItem.Gewicht * item.Amount; + inventoryWeight += currentItemWeight; + + items[userItems.IndexOf(item)] = new string[6]; + items[userItems.IndexOf(item)][0] = iItem.Name; + items[userItems.IndexOf(item)][1] = iItem.Description; + items[userItems.IndexOf(item)][2] = iItem.Gewicht.ToString(); + items[userItems.IndexOf(item)][3] = item.Amount.ToString(); + items[userItems.IndexOf(item)][4] = item.Slot.ToString(); + items[userItems.IndexOf(item)][5] = item.Id.ToString(); + } + player.TriggerEvent("showInventoryToAdmin", user.Name, inventoryWeight, items); + } + } + + [RemoteEvent("saveInventory")] + public void SavePlayerInventory(Client player, string itemArray) + { + + var user = player.GetUser(); + var items = JsonConvert.DeserializeObject(itemArray); + + using (var context = new DatabaseContext()) + { + for (var i = 0; i < items.Length; i++) + { + UserItem cItem = new UserItem + { + Amount = int.Parse(items[i][3]), + ItemId = GetItemByName(items[i][0]).Id, + UserId = user.Id, + Slot = int.Parse(items[i][4]), + }; + + if (int.Parse(items[i][5]) == -1) + { + context.UserItems.Add(cItem); + } + else if (cItem.Slot == -1) + { + UserItem fItem = context.UserItems.FirstOrDefault(j => j.Id == int.Parse(items[i][5])); + context.UserItems.Remove(fItem); + } + else + { + UserItem fItem = context.UserItems.FirstOrDefault(j => j.Id == int.Parse(items[i][5])); + fItem.Amount = cItem.Amount; + fItem.Slot = cItem.Slot; + } + } + context.SaveChanges(); + player.TriggerEvent("SERVER:INVENTORY_SYNC"); + } + } + + public static void AddItemToInventory(Client player, UserItem item) + { + var user = player.GetUser(); + using (var context = new DatabaseContext()) + { + UserItem existingItem = context.UserItems.FirstOrDefault(i => i.ItemId == item.ItemId && i.UserId == item.UserId); + if (existingItem != null) + { + existingItem.Amount += item.Amount; + } + else + { + List allItemsByUser = context.UserItems.ToList().FindAll(i => i.UserId == user.Id); + var slotArr = Enumerable.Range(1, 20).ToList(); + allItemsByUser.ForEach(allItem => + { + if (slotArr.Contains(allItem.Slot)) slotArr.Remove(allItem.Slot); + }); + + int newSlot = slotArr.Min(); + + item.Slot = newSlot; + context.UserItems.Add(item); + + IItem iItem = GetItemById(item.ItemId); + + string[] newItem = new string[] { iItem.Name, iItem.Description, iItem.Gewicht.ToString(), item.Amount.ToString(), newSlot.ToString(), item.Id.ToString() }; + + player.TriggerEvent("addItem", JsonConvert.SerializeObject(newItem)); + } + context.SaveChanges(); + } + } + + [RemoteEvent("removeItemAsAdmin")] + public void SavePlayerInventory(Client player, string amount, string userItemId, string targetPlayerName) + { + using (var context = new DatabaseContext()) + { + UserItem fItem = context.UserItems.FirstOrDefault(j => j.Id == int.Parse(userItemId)); + + Client targetPlayer = ClientService.GetClientByNameOrId(targetPlayerName); + + if (amount == "stack") + { + var itemSlot = fItem.Slot; + targetPlayer.TriggerEvent("removeItem", userItemId, fItem.Amount); + context.UserItems.Remove(fItem); + } + else if (amount == "one") + { + var itemSlot = fItem.Slot; + targetPlayer.TriggerEvent("removeItem", userItemId, 1); + fItem.Amount--; + } + context.SaveChanges(); + } + } + [RemoteEvent("itemInteract")] + public void ItemInteract(Client player, string type, string itemId, int amount) + { + using (var context = new DatabaseContext()) + { + UserItem fItem = context.UserItems.FirstOrDefault(j => j.Id == int.Parse(itemId)); + IItem iItem = GetItemById(fItem.ItemId); + + switch (type) + { + case "use": + ChatService.SendMessage(player, "use item: " + iItem.Name); + if (iItem == null) + { + ChatService.SendMessage(player, "Dieses Essen existiert nicht."); + return; + } + + if (fItem == null) + { + ChatService.SendMessage(player, "Du hast dieses Item nicht"); + return; + } + + if (iItem is IUsableItem usableItemObj) + { + usableItemObj.Use(fItem); + player.TriggerEvent("removeItem", itemId, amount); + } + else ChatService.SendMessage(player, "not useable"); + break; + case "drop": + + if (iItem == null) + { + ChatService.SendMessage(player, "Dieses Item existiert nicht."); + return; + } + + if (fItem == null) + { + ChatService.SendMessage(player, "Du hast dieses Item nicht"); + return; + } + + if (iItem is IDroppableItem usableItemObj2) + { + Vector3 dropPosition = ClientExtension.GetPositionFromPlayer(player, 0.6f, 0); + dropPosition.Z -= 0.8f; + //new Vector3(player.Position.X, player.Position.Y, player.Position.Z - 0.8f); + Random r = new Random(); + GTANetworkAPI.Object grndObject = NAPI.Object.CreateObject(3777723516, dropPosition, new Vector3(0, 0, r.Next(0, 360)), 0); + GroundItem grndItem = new GroundItem { ItemId = iItem.Id, Amount = amount, Position = dropPosition }; + TextLabel grndTxtLbl = NAPI.TextLabel.CreateTextLabel(iItem.Name + " ~s~(~y~" + amount + "~s~)", dropPosition, 5, 0.5f, 4, new Color(255, 255, 255), false, 0); + GroundItem.AddGroundItem(grndItem, grndObject, grndTxtLbl); + fItem.Amount -= amount; + player.TriggerEvent("removeItem", itemId, amount); + } + break; + } + context.SaveChanges(); + } + } + } } \ No newline at end of file diff --git a/ReallifeGamemode.Server/Managers/JobManager.cs b/ReallifeGamemode.Server/Managers/JobManager.cs index d06df557..8c893ae4 100644 --- a/ReallifeGamemode.Server/Managers/JobManager.cs +++ b/ReallifeGamemode.Server/Managers/JobManager.cs @@ -14,259 +14,259 @@ using System.Text; namespace ReallifeGamemode.Server.Managers { - class JobManager : Script + class JobManager : Script + { + private static List _jobs = new List(); + + public static void LoadJobs() { - private static List _jobs = new List(); + IEnumerable jobTypes = Assembly.GetExecutingAssembly().GetTypes().Where(t => t.IsSubclassOf(typeof(JobBase)) && !t.IsAbstract); - public static void LoadJobs() + foreach (var type in jobTypes) + { + var instance = Activator.CreateInstance(type) as JobBase; + if (GetJob(instance.Id) != null) { - IEnumerable jobTypes = Assembly.GetExecutingAssembly().GetTypes().Where(t => t.IsSubclassOf(typeof(JobBase)) && !t.IsAbstract); - - foreach (var type in jobTypes) - { - var instance = Activator.CreateInstance(type) as JobBase; - if (GetJob(instance.Id) != null) - { - throw new InvalidOperationException($"Double Job ID found: {instance.Id} | {instance.Name}"); - } - _jobs.Add(instance); - NAPI.Util.ConsoleOutput($"Loading job {instance.Name}"); - } - - NAPI.Util.ConsoleOutput($"Loaded {_jobs.Count} jobs"); + throw new InvalidOperationException($"Double Job ID found: {instance.Id} | {instance.Name}"); } + _jobs.Add(instance); + NAPI.Util.ConsoleOutput($"Loading job {instance.Name}"); + } - public static JobBase GetJob(int id) => _jobs.Where(j => j.Id == id).FirstOrDefault(); - - public static T GetJob() where T : JobBase - { - return _jobs.Where(j => j.GetType() == typeof(T)).FirstOrDefault() as T; - } - - public static List GetJobs() => _jobs.OrderBy(j => j.Id).ToList(); - - [RemoteEvent("CLIENT:JobCenter_CancelJob")] - public void CancelJobEvent(Client player) - { - using (var dbContext = new DatabaseContext()) - { - User u = player.GetUser(dbContext); - - if (u == null) return; - - if (u.JobId == null) - { - ChatService.ErrorMessage(player, "Du hast momentan keinen Job, den du kündigen könntest."); - return; - } - - u.JobId = null; - - ChatService.SendMessage(player, "~y~[JOBCENTER]~s~ Du hast deinen Job erfolgreich gekündigt."); - - dbContext.SaveChanges(); - } - } - - [RemoteEvent("CLIENT:JobCenter_AcceptJob")] - public void AcceptJobEvent(Client player, int jobId) - { - using (var dbContext = new DatabaseContext()) - { - User u = player.GetUser(dbContext); - - if (u == null) return; - - if (u.JobId != null) - { - ChatService.ErrorMessage(player, "Du musst deinen alten Job kündigen, bevor du einen neuen ausüben kannst"); - return; - } - - JobBase job = JobManager.GetJob(jobId); - - if (job == null) - { - ChatService.ErrorMessage(player, "Bei der Job-Annahme ist ein Fehler aufgetretet: Dieser Job wurde nicht gefunden"); - return; - } - - ChatService.SendMessage(player, $"~y~[JOBCENTER]~s~ Du hast erfolgreich deinen neuen Job: ~o~{job.Name}~s~ angenommen."); - - u.JobId = jobId; - - dbContext.SaveChanges(); - } - } - - [RemoteEvent("CLIENT:JobManager_ShowJobMenu")] - public void ShowJobMenuEvent(Client player) - { - User u = player.GetUser(); - - if (u.JobId == null) return; - - JobBase job = GetJob(u.JobId.Value); - - dynamic data = null; - - if (job.Id == 1 && job.GetUsersInJob().Contains(player)) - { - var taxiCalls = JobManager.GetJob().TaxiContracts; - if (!taxiCalls.Any(t => t.Driver?.Handle == player.Handle)) // Spieler in keiner aktiven Fahrt - { - data = new - { - job.Id, - Status = 0, - JobData = new - { - TaxiCalls = taxiCalls - .Where(t => t.Driver == null) - .Select(t => new - { - t.Name, - Distance = Math.Round(t.Position.DistanceTo(player.Position), 0) - }) - .OrderBy(t => t.Distance) - } - }; - } - else // Spieler in aktiver Fahrt - { - data = new - { - job.Id, - Status = 1, - JobData = new - { - taxiCalls.Where(t => t.Driver.Handle == player.Handle).First().Name - } - }; - } - - } - - var json = JsonConvert.SerializeObject(data); - - player.TriggerEvent("SERVER:Job_ShowJobMenu", job.Name, json); - } - - [RemoteEvent("CLIENT:Job_StartJob")] - public void StartJobEvent(Client player) - { - User u = player.GetUser(); - - if (u.JobId == null) return; - - JobBase job = GetJob(u.JobId.Value); - - if (job.GetUsersInJob().Contains(player)) - { - ChatService.ErrorMessage(player, "Du bist schon in deinem Job aktiv"); - return; - } - - if (job.NeedVehicleToStart && !job.GetJobVehicles().Any(v => v.Vehicle.Handle.Value == player.Vehicle?.Handle.Value)) - { - ChatService.ErrorMessage(player, "Zum Start dieses Jobs musst du in einem Jobfahrzeug sein"); - return; - } - - job.StartJob(player); - } - - [RemoteEvent("CLIENT:Job_StopJob")] - public void StopJob(Client player) - { - User u = player.GetUser(); - - if (u.JobId == null) return; - - JobBase job = GetJob(u.JobId.Value); - - if (!job.GetUsersInJob().Contains(player)) - { - ChatService.ErrorMessage(player, "Du führst deinen Job momentan nicht aus"); - return; - } - - if (job.NeedVehicleToStart && player.Vehicle != null) - { - VehicleStreaming.SetEngineState(player.Vehicle, false); - } - - job.StopJob(player); - } - - [ServerEvent(Event.PlayerExitVehicle)] - public void JobManagerPlayerExitVehicle(Client player, Vehicle veh) - { - User u = player.GetUser(); - - if (u.JobId == null) return; - - JobBase job = GetJob(u.JobId.Value); - - if (job.GetUsersInJob().Contains(player) && job.NeedVehicleToStart) - { - job.StopJob(player); - return; - } - } - - [ServerEvent(Event.PlayerEnterVehicle)] - public void JobManagerPlayerEnterVehicle(Client player, Vehicle veh, sbyte seat) - { - ServerVehicle sVeh = veh.GetServerVehicle(); - if (sVeh == null) return; - if (sVeh is JobVehicle jV && jV.JobId == 1) // Spieler steigt in Taxi ein - { - var taxiJob = JobManager.GetJob(); - - var taxiContracts = taxiJob.TaxiContracts.Where(t => t.Name == player.Name); - if (taxiContracts.Count() == 0) return; - - var contract = taxiContracts.First(); - taxiJob.TaxiContracts.Remove(contract); - - Client driver = veh.GetDriver(); - - if(driver != null && contract.Driver.Handle != veh.GetDriver().Handle) - { - ChatService.SendMessage(contract.Driver, $"!{{02FCFF}}{player.Name} ist in ein Taxi eingestiegen, der Auftrag wurde beendet."); - ChatService.SendMessage(player, $"!{{02FCFF}}Du bist in ein Taxi eingestiegen, der Auftrag wurde beendet."); - } - } - } - - [RemoteEvent("CLIENT:JobManager_TaxiJob_AcceptCall")] - public void TaxiJobAcceptCall(Client player, string name) - { - var taxiJob = JobManager.GetJob(); - - if (!taxiJob.TaxiContracts.Any(t => t.Name == name)) - { - ChatService.ErrorMessage(player, "Dieser Spieler hat kein Taxi gerufen oder der Auftrag ist nicht mehr aktuell"); - return; - } - - var job = taxiJob.TaxiContracts.Where(t => t.Name == name).First(); - - var target = ClientService.GetClientByNameOrId(name); - if (target == null) - { - taxiJob.TaxiContracts.Remove(job); - ChatService.ErrorMessage(player, "Dieser Spieler ist nicht mehr online"); - return; - } - - job.Driver = player; - - player.TriggerEvent("SERVER:Util_setWaypoint", target.Position.X, target.Position.Y); - - ChatService.SendMessage(target, $"!{{02FCFF}}Dein Auftrag wurde von {player.Name} angenommen. Warte an deiner aktuellen Position."); - ChatService.SendMessage(player, $"!{{02FCFF}}Du hast den Auftrag von {name} angenommen. Hole ihn nun ab."); - } + NAPI.Util.ConsoleOutput($"Loaded {_jobs.Count} jobs"); } + + public static JobBase GetJob(int id) => _jobs.Where(j => j.Id == id).FirstOrDefault(); + + public static T GetJob() where T : JobBase + { + return _jobs.Where(j => j.GetType() == typeof(T)).FirstOrDefault() as T; + } + + public static List GetJobs() => _jobs.OrderBy(j => j.Id).ToList(); + + [RemoteEvent("CLIENT:JobCenter_CancelJob")] + public void CancelJobEvent(Client player) + { + using (var dbContext = new DatabaseContext()) + { + User u = player.GetUser(dbContext); + + if (u == null) return; + + if (u.JobId == null) + { + ChatService.ErrorMessage(player, "Du hast momentan keinen Job, den du kündigen könntest."); + return; + } + + u.JobId = null; + + ChatService.SendMessage(player, "~y~[JOBCENTER]~s~ Du hast deinen Job erfolgreich gekündigt."); + + dbContext.SaveChanges(); + } + } + + [RemoteEvent("CLIENT:JobCenter_AcceptJob")] + public void AcceptJobEvent(Client player, int jobId) + { + using (var dbContext = new DatabaseContext()) + { + User u = player.GetUser(dbContext); + + if (u == null) return; + + if (u.JobId != null) + { + ChatService.ErrorMessage(player, "Du musst deinen alten Job kündigen, bevor du einen neuen ausüben kannst"); + return; + } + + JobBase job = JobManager.GetJob(jobId); + + if (job == null) + { + ChatService.ErrorMessage(player, "Bei der Job-Annahme ist ein Fehler aufgetretet: Dieser Job wurde nicht gefunden"); + return; + } + + ChatService.SendMessage(player, $"~y~[JOBCENTER]~s~ Du hast erfolgreich deinen neuen Job: ~o~{job.Name}~s~ angenommen."); + + u.JobId = jobId; + + dbContext.SaveChanges(); + } + } + + [RemoteEvent("CLIENT:JobManager_ShowJobMenu")] + public void ShowJobMenuEvent(Client player) + { + User u = player.GetUser(); + + if (u.JobId == null) return; + + JobBase job = GetJob(u.JobId.Value); + + dynamic data = null; + + if (job.Id == 1 && job.GetUsersInJob().Contains(player)) + { + var taxiCalls = JobManager.GetJob().TaxiContracts; + if (!taxiCalls.Any(t => t.Driver?.Handle == player.Handle)) // Spieler in keiner aktiven Fahrt + { + data = new + { + job.Id, + Status = 0, + JobData = new + { + TaxiCalls = taxiCalls + .Where(t => t.Driver == null) + .Select(t => new + { + t.Name, + Distance = Math.Round(t.Position.DistanceTo(player.Position), 0) + }) + .OrderBy(t => t.Distance) + } + }; + } + else // Spieler in aktiver Fahrt + { + data = new + { + job.Id, + Status = 1, + JobData = new + { + taxiCalls.Where(t => t.Driver.Handle == player.Handle).First().Name + } + }; + } + + } + + var json = JsonConvert.SerializeObject(data); + + player.TriggerEvent("SERVER:Job_ShowJobMenu", job.Name, json); + } + + [RemoteEvent("CLIENT:Job_StartJob")] + public void StartJobEvent(Client player) + { + User u = player.GetUser(); + + if (u.JobId == null) return; + + JobBase job = GetJob(u.JobId.Value); + + if (job.GetUsersInJob().Contains(player)) + { + ChatService.ErrorMessage(player, "Du bist schon in deinem Job aktiv"); + return; + } + + if (job.NeedVehicleToStart && !job.GetJobVehicles().Any(v => v.Vehicle.Handle.Value == player.Vehicle?.Handle.Value)) + { + ChatService.ErrorMessage(player, "Zum Start dieses Jobs musst du in einem Jobfahrzeug sein"); + return; + } + + job.StartJob(player); + } + + [RemoteEvent("CLIENT:Job_StopJob")] + public void StopJob(Client player) + { + User u = player.GetUser(); + + if (u.JobId == null) return; + + JobBase job = GetJob(u.JobId.Value); + + if (!job.GetUsersInJob().Contains(player)) + { + ChatService.ErrorMessage(player, "Du führst deinen Job momentan nicht aus"); + return; + } + + if (job.NeedVehicleToStart && player.Vehicle != null) + { + VehicleStreaming.SetEngineState(player.Vehicle, false); + } + + job.StopJob(player); + } + + [ServerEvent(Event.PlayerExitVehicle)] + public void JobManagerPlayerExitVehicle(Client player, Vehicle veh) + { + User u = player.GetUser(); + + if (u.JobId == null) return; + + JobBase job = GetJob(u.JobId.Value); + + if (job.GetUsersInJob().Contains(player) && job.NeedVehicleToStart) + { + job.StopJob(player); + return; + } + } + + [ServerEvent(Event.PlayerEnterVehicle)] + public void JobManagerPlayerEnterVehicle(Client player, Vehicle veh, sbyte seat) + { + ServerVehicle sVeh = veh.GetServerVehicle(); + if (sVeh == null) return; + if (sVeh is JobVehicle jV && jV.JobId == 1) // Spieler steigt in Taxi ein + { + var taxiJob = JobManager.GetJob(); + + var taxiContracts = taxiJob.TaxiContracts.Where(t => t.Name == player.Name); + if (taxiContracts.Count() == 0) return; + + var contract = taxiContracts.First(); + taxiJob.TaxiContracts.Remove(contract); + + Client driver = veh.GetDriver(); + + if (driver != null && contract.Driver.Handle != veh.GetDriver().Handle) + { + ChatService.SendMessage(contract.Driver, $"!{{02FCFF}}{player.Name} ist in ein Taxi eingestiegen, der Auftrag wurde beendet."); + ChatService.SendMessage(player, $"!{{02FCFF}}Du bist in ein Taxi eingestiegen, der Auftrag wurde beendet."); + } + } + } + + [RemoteEvent("CLIENT:JobManager_TaxiJob_AcceptCall")] + public void TaxiJobAcceptCall(Client player, string name) + { + var taxiJob = JobManager.GetJob(); + + if (!taxiJob.TaxiContracts.Any(t => t.Name == name)) + { + ChatService.ErrorMessage(player, "Dieser Spieler hat kein Taxi gerufen oder der Auftrag ist nicht mehr aktuell"); + return; + } + + var job = taxiJob.TaxiContracts.Where(t => t.Name == name).First(); + + var target = ClientService.GetClientByNameOrId(name); + if (target == null) + { + taxiJob.TaxiContracts.Remove(job); + ChatService.ErrorMessage(player, "Dieser Spieler ist nicht mehr online"); + return; + } + + job.Driver = player; + + player.TriggerEvent("SERVER:Util_setWaypoint", target.Position.X, target.Position.Y); + + ChatService.SendMessage(target, $"!{{02FCFF}}Dein Auftrag wurde von {player.Name} angenommen. Warte an deiner aktuellen Position."); + ChatService.SendMessage(player, $"!{{02FCFF}}Du hast den Auftrag von {name} angenommen. Hole ihn nun ab."); + } + } } diff --git a/ReallifeGamemode.Server/Managers/LoadManager.cs b/ReallifeGamemode.Server/Managers/LoadManager.cs index 48765853..7dca2887 100644 --- a/ReallifeGamemode.Server/Managers/LoadManager.cs +++ b/ReallifeGamemode.Server/Managers/LoadManager.cs @@ -11,31 +11,31 @@ using ReallifeGamemode.Server.Models; namespace ReallifeGamemode.Server.Managers { - public class LoadManager : Script + public class LoadManager : Script + { + + [ServerEvent(Event.ResourceStart)] + public void OnResourceStart() { - - [ServerEvent(Event.ResourceStart)] - public void OnResourceStart() + using (var loadData = new DatabaseContext()) + { + foreach (SavedBlip b in loadData.Blips) { - using (var loadData = new DatabaseContext()) - { - foreach (SavedBlip b in loadData.Blips) - { - if (b.Active == true) - { - NAPI.Blip.CreateBlip((uint)b.Sprite, new Vector3(b.PositionX, b.PositionY, b.PositionZ), b.Scale, - b.Color, b.Name, b.Alpha, b.DrawDistance, b.ShortRange, (short)b.Rotation, b.Dimension); - } - } - - foreach (ServerVehicle veh in loadData.ServerVehicles) - { - if (!veh.Active) continue; - - Vehicle current = veh.Spawn(); - TuningManager.ApplyTuningToServerVehicle(veh); - } - } + if (b.Active == true) + { + NAPI.Blip.CreateBlip((uint)b.Sprite, new Vector3(b.PositionX, b.PositionY, b.PositionZ), b.Scale, + b.Color, b.Name, b.Alpha, b.DrawDistance, b.ShortRange, (short)b.Rotation, b.Dimension); + } } + + foreach (ServerVehicle veh in loadData.ServerVehicles) + { + if (!veh.Active) continue; + + Vehicle current = veh.Spawn(); + TuningManager.ApplyTuningToServerVehicle(veh); + } + } } + } } diff --git a/ReallifeGamemode.Server/Managers/PositionManager.cs b/ReallifeGamemode.Server/Managers/PositionManager.cs index a0d0ffcd..77b7b0e4 100644 --- a/ReallifeGamemode.Server/Managers/PositionManager.cs +++ b/ReallifeGamemode.Server/Managers/PositionManager.cs @@ -6,36 +6,36 @@ using ReallifeGamemode.Server.Entities; namespace ReallifeGamemode.Server.Managers { - public class PositionManager : Script + public class PositionManager : Script + { + public static List DutyPoints = new List(); + public static List DutyColShapes = new List(); + + [ServerEvent(Event.ResourceStart)] + public void OnResourceStart() { - public static List DutyPoints = new List(); - public static List DutyColShapes = new List(); + DutyPoint dutyPointLSPD = new DutyPoint() + { + Position = new Vector3(458.24, -990.86, 30.68), + FactionId = 1 + }; - [ServerEvent(Event.ResourceStart)] - public void OnResourceStart() - { - DutyPoint dutyPointLSPD = new DutyPoint() - { - Position = new Vector3(458.24, -990.86, 30.68), - FactionId = 1 - }; + DutyPoints.Add(dutyPointLSPD); - DutyPoints.Add(dutyPointLSPD); - - foreach (DutyPoint d in DutyPoints) - { - NAPI.Marker.CreateMarker(1, new Vector3(d.Position.X, d.Position.Y, d.Position.Z - 2), new Vector3(d.Position.X, d.Position.Y, d.Position.Z + 1), - new Vector3(0, 0, 0), 3, new Color(255, 255, 255, 50), false, 0); - NAPI.TextLabel.CreateTextLabel("Stempeluhr - Dr\u00fccke ~y~E\n~s~Dienstkleidung - Dr\u00fccke ~y~K", d.Position, 7, 1, 0, new Color(255, 255, 255), false, 0); - } - } + foreach (DutyPoint d in DutyPoints) + { + NAPI.Marker.CreateMarker(1, new Vector3(d.Position.X, d.Position.Y, d.Position.Z - 2), new Vector3(d.Position.X, d.Position.Y, d.Position.Z + 1), + new Vector3(0, 0, 0), 3, new Color(255, 255, 255, 50), false, 0); + NAPI.TextLabel.CreateTextLabel("Stempeluhr - Dr\u00fccke ~y~E\n~s~Dienstkleidung - Dr\u00fccke ~y~K", d.Position, 7, 1, 0, new Color(255, 255, 255), false, 0); + } } + } - public class DutyPoint - { - public Vector3 Position { get; set; } - public int FactionId { get; set; } - } + public class DutyPoint + { + public Vector3 Position { get; set; } + public int FactionId { get; set; } + } } diff --git a/ReallifeGamemode.Server/Managers/SaveManager.cs b/ReallifeGamemode.Server/Managers/SaveManager.cs index ba13364d..3535474a 100644 --- a/ReallifeGamemode.Server/Managers/SaveManager.cs +++ b/ReallifeGamemode.Server/Managers/SaveManager.cs @@ -8,187 +8,187 @@ using System; namespace ReallifeGamemode.Server.Managers { - public class SaveManager : Script + public class SaveManager : Script + { + + [RemoteEvent("OnSaveBlipData")] + public static void OnSaveBlipData(Client player, string blipSprite, string blipName, string blipScale, string blipColor, + string blipAlpha, string blipDrawDistance, string blipShortRange, string blipRotation, string blipDimension) { + float x = player.Position.X; + float y = player.Position.Y; + float z = player.Position.Z; + short sprite = short.Parse(blipSprite); + string name = blipName; + float scale = float.Parse(blipScale); + byte color = Convert.ToByte(blipColor); + byte alpha = Convert.ToByte(blipAlpha); + float drawDistance = float.Parse(blipDrawDistance); + bool shortRange = bool.Parse(blipShortRange); + float rotation = float.Parse(blipRotation); + byte dimension = Convert.ToByte(blipDimension); - [RemoteEvent("OnSaveBlipData")] - public static void OnSaveBlipData(Client player, string blipSprite, string blipName, string blipScale, string blipColor, - string blipAlpha, string blipDrawDistance, string blipShortRange, string blipRotation, string blipDimension) + NAPI.Blip.CreateBlip(uint.Parse(blipSprite), new Vector3(x, y, z), scale, color, name, alpha, drawDistance, shortRange, short.Parse(blipRotation), dimension); + + using (var saveData = new DatabaseContext()) + { + var dataSet = new SavedBlip { - float x = player.Position.X; - float y = player.Position.Y; - float z = player.Position.Z; - short sprite = short.Parse(blipSprite); - string name = blipName; - float scale = float.Parse(blipScale); - byte color = Convert.ToByte(blipColor); - byte alpha = Convert.ToByte(blipAlpha); - float drawDistance = float.Parse(blipDrawDistance); - bool shortRange = bool.Parse(blipShortRange); - float rotation = float.Parse(blipRotation); - byte dimension = Convert.ToByte(blipDimension); - - NAPI.Blip.CreateBlip(uint.Parse(blipSprite), new Vector3(x, y, z), scale, color, name, alpha, drawDistance, shortRange, short.Parse(blipRotation), dimension); - - using (var saveData = new DatabaseContext()) - { - var dataSet = new SavedBlip - { - Sprite = sprite, - PositionX = x, - PositionY = y, - PositionZ = z, - Name = blipName, - Scale = scale, - Color = color, - Alpha = alpha, - DrawDistance = drawDistance, - ShortRange = shortRange, - Rotation = rotation, - Dimension = dimension, - Active = true - }; - saveData.Blips.Add(dataSet); - saveData.SaveChanges(); - } - } - - public static Vehicle SaveVehicleData(Vehicle veh, VehicleHash vehicleModel, Vector3 vehiclePosition, float vehicleHeading, - string vehicleNumberPlate, int vehiclePrimaryColor, int vehicleSecondaryColor, bool vehicleLocked) - { - using (var saveData = new DatabaseContext()) - { - var dataSet = new SavedVehicle - { - Model = vehicleModel, - PositionX = vehiclePosition.X, - PositionY = vehiclePosition.Y, - PositionZ = vehiclePosition.Z, - Heading = vehicleHeading, - NumberPlate = vehicleNumberPlate, - PrimaryColor = vehiclePrimaryColor, - SecondaryColor = vehicleSecondaryColor, - Locked = vehicleLocked, - Active = true - }; - saveData.Vehicles.Add(dataSet); - saveData.SaveChanges(); - - return dataSet.Spawn(veh); - } - } - - public static Vehicle SaveJobVehicleData(Vehicle veh, VehicleHash vehicleModel, Vector3 vehiclePosition, float vehicleHeading, - string vehicleNumberPlate, int vehiclePrimaryColor, int vehicleSecondaryColor, bool vehicleLocked, bool vehicleEngine, int jobId) - { - using (var saveData = new DatabaseContext()) - { - var dataSet = new JobVehicle - { - Model = vehicleModel, - JobId = jobId, - PositionX = vehiclePosition.X, - PositionY = vehiclePosition.Y, - PositionZ = vehiclePosition.Z, - Heading = vehicleHeading, - NumberPlate = vehicleNumberPlate, - PrimaryColor = vehiclePrimaryColor, - SecondaryColor = vehicleSecondaryColor, - Locked = vehicleLocked, - Active = true - }; - saveData.JobVehicles.Add(dataSet); - saveData.SaveChanges(); - - return dataSet.Spawn(veh); - } - } - - public static Vehicle SaveFactionVehicleData(Vehicle veh, VehicleHash vehicleModel, Vector3 vehiclePosition, float vehicleHeading, - string vehicleNumberPlate, int vehiclePrimaryColor, int vehicleSecondaryColor, bool vehicleLocked, bool vehicleEngine, int factionId) - { - using (var saveData = new DatabaseContext()) - { - var dataSet = new FactionVehicle - { - Model = vehicleModel, - FactionId = factionId, - PositionX = vehiclePosition.X, - PositionY = vehiclePosition.Y, - PositionZ = vehiclePosition.Z, - Heading = vehicleHeading, - NumberPlate = vehicleNumberPlate, - PrimaryColor = vehiclePrimaryColor, - SecondaryColor = vehicleSecondaryColor, - Locked = vehicleLocked, - Active = true - }; - saveData.FactionVehicles.Add(dataSet); - saveData.SaveChanges(); - - return dataSet.Spawn(veh); - } - } - - public static Vehicle SaveShopVehicleData(Vehicle veh, VehicleHash vehicleModel, string vehicleModelName, Vector3 vehiclePosition, float vehicleHeading, - string vehicleNumberPlate, int vehiclePrimaryColor, int vehicleSecondaryColor, BusinessBase business, int price) - { - using (var saveData = new DatabaseContext()) - { - var dataSet = new ShopVehicle - { - Model = vehicleModel, - PositionX = vehiclePosition.X, - PositionY = vehiclePosition.Y, - PositionZ = vehiclePosition.Z, - Heading = vehicleHeading, - NumberPlate = vehicleNumberPlate, - PrimaryColor = vehiclePrimaryColor, - SecondaryColor = vehicleSecondaryColor, - Active = true, - BusinessId = business.Id, - Price = price - }; - saveData.ShopVehicles.Add(dataSet); - saveData.SaveChanges(); - - return dataSet.Spawn(veh); - } - } - - public static void SaveGotoPoint(Client player, string description) - { - using (var saveData = new DatabaseContext()) - { - var dataSet = new GotoPoint - { - Description = description, - X = player.Position.X, - Y = player.Position.Y, - Z = player.Position.Z, - Active = true - }; - saveData.GotoPoints.Add(dataSet); - saveData.SaveChanges(); - } - } - - public static void SaveAllOnSave() - { - using (var saveAll = new DatabaseContext()) - { - //Alle Spieler - foreach (Client player in NAPI.Pools.GetAllPlayers()) - { - Vector3 pos = player.Position; - User user = player.GetUser(saveAll); - user.PositionX = pos.X; - user.PositionY = pos.Y; - user.PositionZ = pos.Z; - } - - saveAll.SaveChanges(); - } - } + Sprite = sprite, + PositionX = x, + PositionY = y, + PositionZ = z, + Name = blipName, + Scale = scale, + Color = color, + Alpha = alpha, + DrawDistance = drawDistance, + ShortRange = shortRange, + Rotation = rotation, + Dimension = dimension, + Active = true + }; + saveData.Blips.Add(dataSet); + saveData.SaveChanges(); + } } + + public static Vehicle SaveVehicleData(Vehicle veh, VehicleHash vehicleModel, Vector3 vehiclePosition, float vehicleHeading, + string vehicleNumberPlate, int vehiclePrimaryColor, int vehicleSecondaryColor, bool vehicleLocked) + { + using (var saveData = new DatabaseContext()) + { + var dataSet = new SavedVehicle + { + Model = vehicleModel, + PositionX = vehiclePosition.X, + PositionY = vehiclePosition.Y, + PositionZ = vehiclePosition.Z, + Heading = vehicleHeading, + NumberPlate = vehicleNumberPlate, + PrimaryColor = vehiclePrimaryColor, + SecondaryColor = vehicleSecondaryColor, + Locked = vehicleLocked, + Active = true + }; + saveData.Vehicles.Add(dataSet); + saveData.SaveChanges(); + + return dataSet.Spawn(veh); + } + } + + public static Vehicle SaveJobVehicleData(Vehicle veh, VehicleHash vehicleModel, Vector3 vehiclePosition, float vehicleHeading, + string vehicleNumberPlate, int vehiclePrimaryColor, int vehicleSecondaryColor, bool vehicleLocked, bool vehicleEngine, int jobId) + { + using (var saveData = new DatabaseContext()) + { + var dataSet = new JobVehicle + { + Model = vehicleModel, + JobId = jobId, + PositionX = vehiclePosition.X, + PositionY = vehiclePosition.Y, + PositionZ = vehiclePosition.Z, + Heading = vehicleHeading, + NumberPlate = vehicleNumberPlate, + PrimaryColor = vehiclePrimaryColor, + SecondaryColor = vehicleSecondaryColor, + Locked = vehicleLocked, + Active = true + }; + saveData.JobVehicles.Add(dataSet); + saveData.SaveChanges(); + + return dataSet.Spawn(veh); + } + } + + public static Vehicle SaveFactionVehicleData(Vehicle veh, VehicleHash vehicleModel, Vector3 vehiclePosition, float vehicleHeading, + string vehicleNumberPlate, int vehiclePrimaryColor, int vehicleSecondaryColor, bool vehicleLocked, bool vehicleEngine, int factionId) + { + using (var saveData = new DatabaseContext()) + { + var dataSet = new FactionVehicle + { + Model = vehicleModel, + FactionId = factionId, + PositionX = vehiclePosition.X, + PositionY = vehiclePosition.Y, + PositionZ = vehiclePosition.Z, + Heading = vehicleHeading, + NumberPlate = vehicleNumberPlate, + PrimaryColor = vehiclePrimaryColor, + SecondaryColor = vehicleSecondaryColor, + Locked = vehicleLocked, + Active = true + }; + saveData.FactionVehicles.Add(dataSet); + saveData.SaveChanges(); + + return dataSet.Spawn(veh); + } + } + + public static Vehicle SaveShopVehicleData(Vehicle veh, VehicleHash vehicleModel, string vehicleModelName, Vector3 vehiclePosition, float vehicleHeading, + string vehicleNumberPlate, int vehiclePrimaryColor, int vehicleSecondaryColor, BusinessBase business, int price) + { + using (var saveData = new DatabaseContext()) + { + var dataSet = new ShopVehicle + { + Model = vehicleModel, + PositionX = vehiclePosition.X, + PositionY = vehiclePosition.Y, + PositionZ = vehiclePosition.Z, + Heading = vehicleHeading, + NumberPlate = vehicleNumberPlate, + PrimaryColor = vehiclePrimaryColor, + SecondaryColor = vehicleSecondaryColor, + Active = true, + BusinessId = business.Id, + Price = price + }; + saveData.ShopVehicles.Add(dataSet); + saveData.SaveChanges(); + + return dataSet.Spawn(veh); + } + } + + public static void SaveGotoPoint(Client player, string description) + { + using (var saveData = new DatabaseContext()) + { + var dataSet = new GotoPoint + { + Description = description, + X = player.Position.X, + Y = player.Position.Y, + Z = player.Position.Z, + Active = true + }; + saveData.GotoPoints.Add(dataSet); + saveData.SaveChanges(); + } + } + + public static void SaveAllOnSave() + { + using (var saveAll = new DatabaseContext()) + { + //Alle Spieler + foreach (Client player in NAPI.Pools.GetAllPlayers()) + { + Vector3 pos = player.Position; + User user = player.GetUser(saveAll); + user.PositionX = pos.X; + user.PositionY = pos.Y; + user.PositionZ = pos.Z; + } + + saveAll.SaveChanges(); + } + } + } } diff --git a/ReallifeGamemode.Server/Managers/TimeManager.cs b/ReallifeGamemode.Server/Managers/TimeManager.cs index 4da83860..1d62ddcb 100644 --- a/ReallifeGamemode.Server/Managers/TimeManager.cs +++ b/ReallifeGamemode.Server/Managers/TimeManager.cs @@ -6,30 +6,30 @@ using System.Timers; namespace ReallifeGamemode.Server.Managers { - public class TimeManager + public class TimeManager + { + private static Timer realTimeTimer; + + public static void StartTimeManager() { - private static Timer realTimeTimer; + if (realTimeTimer == null) + { + realTimeTimer = new Timer(1000); + realTimeTimer.Elapsed += SetTime; + } - public static void StartTimeManager() - { - if (realTimeTimer == null) - { - realTimeTimer = new Timer(1000); - realTimeTimer.Elapsed += SetTime; - } - - realTimeTimer.Start(); - } - - public static void PauseTimeManager() - { - realTimeTimer.Stop(); - } - - private static void SetTime(object sender, ElapsedEventArgs args) - { - DateTime now = DateTime.Now; - NAPI.World.SetTime(now.Hour, now.Minute, now.Second); - } + realTimeTimer.Start(); } + + public static void PauseTimeManager() + { + realTimeTimer.Stop(); + } + + private static void SetTime(object sender, ElapsedEventArgs args) + { + DateTime now = DateTime.Now; + NAPI.World.SetTime(now.Hour, now.Minute, now.Second); + } + } } diff --git a/ReallifeGamemode.Server/Managers/TuningManager.cs b/ReallifeGamemode.Server/Managers/TuningManager.cs index 9f4a8cb0..78053fbd 100644 --- a/ReallifeGamemode.Server/Managers/TuningManager.cs +++ b/ReallifeGamemode.Server/Managers/TuningManager.cs @@ -7,154 +7,154 @@ using System.Linq; namespace ReallifeGamemode.Server.Managers { - class TuningManager : Script + class TuningManager : Script + { + private static List tuningGarages = new List(); + + public static void LoadTuningGarages() { - private static List tuningGarages = new List(); - - public static void LoadTuningGarages() + using (var dbContext = new DatabaseContext()) + { + foreach (TuningGarage garage in dbContext.TuningGarages) { - using (var dbContext = new DatabaseContext()) - { - foreach (TuningGarage garage in dbContext.TuningGarages) - { - AddTuningGarage(garage.Position); - } - } - } - /// - /// Fügt eine Tuning-Garage zum Spiel hinzu - /// - /// Die Position der Garage - public static void AddTuningGarage(Vector3 pos) - { - ColShape colShape = NAPI.ColShape.CreateSphereColShape(pos, 5, 0); - - colShape.OnEntityEnterColShape += (cs, c) => - { - if (c.IsInVehicle) - { - Vehicle v = c.Vehicle; - if (v.GetServerVehicle() is FactionVehicle fV && fV.GetFaction().StateOwned) - { - return; - } - c.TriggerEvent("showTuningInfo"); - } - }; - - colShape.OnEntityExitColShape += (cs, c) => - { - c.TriggerEvent("hideTuningInfo", true); - }; - - tuningGarages.Add(colShape); - } - - public static void ApplyTuningToServerVehicle(ServerVehicle sVeh) - { - Vehicle veh = VehicleManager.GetVehicleFromServerVehicle(sVeh); - if (veh == null) return; - - - veh.SetSharedData("mod18", false); - - using (var dbContext = new DatabaseContext()) - { - foreach (VehicleMod vMod in dbContext.VehicleMods.ToList().FindAll(vM => vM.ServerVehicleId == sVeh.Id)) - { - if (vMod.Slot == 18) - { - veh.SetSharedData("mod" + vMod.Slot, true); - } - else if (vMod.Slot == 22) - { - int color = vMod.ModId - 2; - if (vMod.ModId == 0) color = -1; - if (vMod.ModId == 1) color = 13; - veh.SetSharedData("headlightColor", color); - } - else veh.SetMod(vMod.Slot, vMod.ModId - 1); - } - } - } - - [RemoteEvent("startPlayerTuning")] - public void StartPlayerTuning(Client player) - { - if (!player.IsInVehicle) return; - - player.TriggerEvent("showTuningMenu"); - } - - [RemoteEvent("repairVehicle")] - public void RepairVehicle(Client player) - { - if (!player.IsInVehicle) return; - player.Vehicle.Repair(); - } - - [RemoteEvent("setVehicleMod")] - public void SetVehicleMod(Client player, int slot, int index) - { - Vehicle pV = player.Vehicle; - if (index == 0) index--; - - if (slot != 18) - { - if (slot == 22) - { - int color = index - 2; - if (index == 0) color = -1; - if (index == 1) color = 13; - pV.SetSharedData("headlightColor", color); - } - else - { - pV.SetMod(slot, index - 1); - } - } - else - { - bool newVal = index == -1 ? false : true; - pV.SetSharedData("mod" + slot, newVal); - NAPI.ClientEvent.TriggerClientEventForAll("vehicleToggleMod", pV, slot, newVal); - } - - ServerVehicle sV = player.Vehicle.GetServerVehicle(); - if (sV == null) return; - - using (var dbContext = new DatabaseContext()) - { - VehicleMod vMod = dbContext.VehicleMods.FirstOrDefault(m => m.ServerVehicleId == sV.Id && m.Slot == slot); - if (vMod == null && index != -1) - { - vMod = new VehicleMod - { - ServerVehicleId = sV.Id, - Slot = slot, - ModId = index - }; - dbContext.VehicleMods.Add(vMod); - } - else if (vMod != null && index == -1) - { - dbContext.VehicleMods.Remove(vMod); - } - else - { - if (vMod == null) - { - vMod = new VehicleMod - { - ServerVehicleId = sV.Id, - Slot = slot - }; - dbContext.VehicleMods.Add(vMod); - } - vMod.ModId = index; - } - dbContext.SaveChanges(); - } + AddTuningGarage(garage.Position); } + } } + /// + /// Fügt eine Tuning-Garage zum Spiel hinzu + /// + /// Die Position der Garage + public static void AddTuningGarage(Vector3 pos) + { + ColShape colShape = NAPI.ColShape.CreateSphereColShape(pos, 5, 0); + + colShape.OnEntityEnterColShape += (cs, c) => + { + if (c.IsInVehicle) + { + Vehicle v = c.Vehicle; + if (v.GetServerVehicle() is FactionVehicle fV && fV.GetFaction().StateOwned) + { + return; + } + c.TriggerEvent("showTuningInfo"); + } + }; + + colShape.OnEntityExitColShape += (cs, c) => + { + c.TriggerEvent("hideTuningInfo", true); + }; + + tuningGarages.Add(colShape); + } + + public static void ApplyTuningToServerVehicle(ServerVehicle sVeh) + { + Vehicle veh = VehicleManager.GetVehicleFromServerVehicle(sVeh); + if (veh == null) return; + + + veh.SetSharedData("mod18", false); + + using (var dbContext = new DatabaseContext()) + { + foreach (VehicleMod vMod in dbContext.VehicleMods.ToList().FindAll(vM => vM.ServerVehicleId == sVeh.Id)) + { + if (vMod.Slot == 18) + { + veh.SetSharedData("mod" + vMod.Slot, true); + } + else if (vMod.Slot == 22) + { + int color = vMod.ModId - 2; + if (vMod.ModId == 0) color = -1; + if (vMod.ModId == 1) color = 13; + veh.SetSharedData("headlightColor", color); + } + else veh.SetMod(vMod.Slot, vMod.ModId - 1); + } + } + } + + [RemoteEvent("startPlayerTuning")] + public void StartPlayerTuning(Client player) + { + if (!player.IsInVehicle) return; + + player.TriggerEvent("showTuningMenu"); + } + + [RemoteEvent("repairVehicle")] + public void RepairVehicle(Client player) + { + if (!player.IsInVehicle) return; + player.Vehicle.Repair(); + } + + [RemoteEvent("setVehicleMod")] + public void SetVehicleMod(Client player, int slot, int index) + { + Vehicle pV = player.Vehicle; + if (index == 0) index--; + + if (slot != 18) + { + if (slot == 22) + { + int color = index - 2; + if (index == 0) color = -1; + if (index == 1) color = 13; + pV.SetSharedData("headlightColor", color); + } + else + { + pV.SetMod(slot, index - 1); + } + } + else + { + bool newVal = index == -1 ? false : true; + pV.SetSharedData("mod" + slot, newVal); + NAPI.ClientEvent.TriggerClientEventForAll("vehicleToggleMod", pV, slot, newVal); + } + + ServerVehicle sV = player.Vehicle.GetServerVehicle(); + if (sV == null) return; + + using (var dbContext = new DatabaseContext()) + { + VehicleMod vMod = dbContext.VehicleMods.FirstOrDefault(m => m.ServerVehicleId == sV.Id && m.Slot == slot); + if (vMod == null && index != -1) + { + vMod = new VehicleMod + { + ServerVehicleId = sV.Id, + Slot = slot, + ModId = index + }; + dbContext.VehicleMods.Add(vMod); + } + else if (vMod != null && index == -1) + { + dbContext.VehicleMods.Remove(vMod); + } + else + { + if (vMod == null) + { + vMod = new VehicleMod + { + ServerVehicleId = sV.Id, + Slot = slot + }; + dbContext.VehicleMods.Add(vMod); + } + vMod.ModId = index; + } + dbContext.SaveChanges(); + } + } + } } diff --git a/ReallifeGamemode.Server/Managers/VehicleManager.cs b/ReallifeGamemode.Server/Managers/VehicleManager.cs index aa4925fa..b5fe1493 100644 --- a/ReallifeGamemode.Server/Managers/VehicleManager.cs +++ b/ReallifeGamemode.Server/Managers/VehicleManager.cs @@ -8,9 +8,9 @@ using System.Timers; namespace ReallifeGamemode.Server.Managers { - public class VehicleManager - { - private static readonly List _enabledMods = new List() + public class VehicleManager + { + private static readonly List _enabledMods = new List() { "ninef", "ninef2", @@ -662,140 +662,140 @@ namespace ReallifeGamemode.Server.Managers "s63w222" }; - private static readonly Dictionary _serverVehicles = new Dictionary(); + private static readonly Dictionary _serverVehicles = new Dictionary(); - private static readonly Dictionary lastPositions = new Dictionary(); - private static DateTime lastSave = DateTime.UtcNow; + private static readonly Dictionary lastPositions = new Dictionary(); + private static DateTime lastSave = DateTime.UtcNow; - public static void StartTimer() + public static void StartTimer() + { + Timer timer = new Timer(500); + timer.Elapsed += VehicleTimerTick; + timer.Start(); + + foreach (var name in _enabledMods) + { + if (_enabledMods.Where(x => x == name).Count() != 1) { - Timer timer = new Timer(500); - timer.Elapsed += VehicleTimerTick; - timer.Start(); - - foreach(var name in _enabledMods) - { - if(_enabledMods.Where(x => x == name).Count() != 1) - { - NAPI.Util.ConsoleOutput($"{name} double"); - } - } - } - - private static void VehicleTimerTick(object sender, ElapsedEventArgs e) - { - NAPI.Pools.GetAllVehicles().ForEach(v => - { - Vector3 lastPosition = v.Position; - if (lastPositions.ContainsKey(v.Handle)) lastPosition = lastPositions[v.Handle]; - - double distanceDriven = v.HasSharedData("drivenDistance") ? (double)v.GetSharedData("drivenDistance") : 0D; - - double distance = lastPosition.DistanceTo(v.Position) / 1000.0; - if (distance > 0.2) return; - distanceDriven += distance; - - v.SetSharedData("drivenDistance", (float)distanceDriven); - - lastPositions[v.Handle] = v.Position; - }); - - if (DateTime.UtcNow.Subtract(lastSave).Seconds >= 30) - { - lastSave = DateTime.UtcNow; - // save to db - using (var dbContext = new DatabaseContext()) - { - foreach (var key in lastPositions.Keys.ToList()) - { - Vehicle v = key.Entity(); - if (!v.HasSharedData("drivenDistance")) continue; - - ServerVehicle sVeh = VehicleManager.GetServerVehicleFromVehicle(v, dbContext); - - if (sVeh == null) continue; - - sVeh.DistanceDriven = (float)v.GetSharedData("drivenDistance"); - - } - dbContext.SaveChanges(); - } - } - } - - public static void AddVehicle(ServerVehicle serverVehicle, Vehicle vehicle) - { - if (_serverVehicles.ContainsKey(serverVehicle.Id)) - { - return; - } - - if (_serverVehicles.ContainsValue(vehicle.Handle)) - { - return; - } - - _serverVehicles[serverVehicle.Id] = vehicle.Handle; - } - internal static void DeleteVehicle(Vehicle veh) - { - ServerVehicle sVeh; - if ((sVeh = GetServerVehicleFromVehicle(veh)) != null) - { - _serverVehicles.Remove(sVeh.Id); - } - - veh.Delete(); - } - - public static Vehicle GetVehicleFromHandle(NetHandle handle) - { - return NAPI.Pools.GetAllVehicles().Find(v => v.Handle == handle); - } - - public static Vehicle GetVehicleFromId(int id) - { - return NAPI.Pools.GetAllVehicles().Find(v => v.Handle.Value == id); - } - - public static Vehicle GetVehicleFromServerVehicle(ServerVehicle serverVehicle) - { - if (!_serverVehicles.ContainsKey(serverVehicle.Id)) - { - return null; - } - - return GetVehicleFromHandle(_serverVehicles[serverVehicle.Id]); - } - - public static ServerVehicle GetServerVehicleFromVehicle(Vehicle veh, DatabaseContext dbContext = null) - { - dbContext = dbContext ?? new DatabaseContext(); - - foreach (KeyValuePair pair in _serverVehicles) - { - if (pair.Value == veh.Handle) - { - return dbContext.ServerVehicles.Find(pair.Key); - } - } - - return null; - } - - public static bool IsValidHash(uint hash) - { - foreach (VehicleHash vh in Enum.GetValues(typeof(VehicleHash))) - { - if ((uint)vh == hash) return true; - } - - foreach (string mod in _enabledMods) - { - if (NAPI.Util.GetHashKey(mod) == hash) return true; - } - - return false; + NAPI.Util.ConsoleOutput($"{name} double"); } + } } + + private static void VehicleTimerTick(object sender, ElapsedEventArgs e) + { + NAPI.Pools.GetAllVehicles().ForEach(v => + { + Vector3 lastPosition = v.Position; + if (lastPositions.ContainsKey(v.Handle)) lastPosition = lastPositions[v.Handle]; + + double distanceDriven = v.HasSharedData("drivenDistance") ? (double)v.GetSharedData("drivenDistance") : 0D; + + double distance = lastPosition.DistanceTo(v.Position) / 1000.0; + if (distance > 0.2) return; + distanceDriven += distance; + + v.SetSharedData("drivenDistance", (float)distanceDriven); + + lastPositions[v.Handle] = v.Position; + }); + + if (DateTime.UtcNow.Subtract(lastSave).Seconds >= 30) + { + lastSave = DateTime.UtcNow; + // save to db + using (var dbContext = new DatabaseContext()) + { + foreach (var key in lastPositions.Keys.ToList()) + { + Vehicle v = key.Entity(); + if (!v.HasSharedData("drivenDistance")) continue; + + ServerVehicle sVeh = VehicleManager.GetServerVehicleFromVehicle(v, dbContext); + + if (sVeh == null) continue; + + sVeh.DistanceDriven = (float)v.GetSharedData("drivenDistance"); + + } + dbContext.SaveChanges(); + } + } + } + + public static void AddVehicle(ServerVehicle serverVehicle, Vehicle vehicle) + { + if (_serverVehicles.ContainsKey(serverVehicle.Id)) + { + return; + } + + if (_serverVehicles.ContainsValue(vehicle.Handle)) + { + return; + } + + _serverVehicles[serverVehicle.Id] = vehicle.Handle; + } + internal static void DeleteVehicle(Vehicle veh) + { + ServerVehicle sVeh; + if ((sVeh = GetServerVehicleFromVehicle(veh)) != null) + { + _serverVehicles.Remove(sVeh.Id); + } + + veh.Delete(); + } + + public static Vehicle GetVehicleFromHandle(NetHandle handle) + { + return NAPI.Pools.GetAllVehicles().Find(v => v.Handle == handle); + } + + public static Vehicle GetVehicleFromId(int id) + { + return NAPI.Pools.GetAllVehicles().Find(v => v.Handle.Value == id); + } + + public static Vehicle GetVehicleFromServerVehicle(ServerVehicle serverVehicle) + { + if (!_serverVehicles.ContainsKey(serverVehicle.Id)) + { + return null; + } + + return GetVehicleFromHandle(_serverVehicles[serverVehicle.Id]); + } + + public static ServerVehicle GetServerVehicleFromVehicle(Vehicle veh, DatabaseContext dbContext = null) + { + dbContext = dbContext ?? new DatabaseContext(); + + foreach (KeyValuePair pair in _serverVehicles) + { + if (pair.Value == veh.Handle) + { + return dbContext.ServerVehicles.Find(pair.Key); + } + } + + return null; + } + + public static bool IsValidHash(uint hash) + { + foreach (VehicleHash vh in Enum.GetValues(typeof(VehicleHash))) + { + if ((uint)vh == hash) return true; + } + + foreach (string mod in _enabledMods) + { + if (NAPI.Util.GetHashKey(mod) == hash) return true; + } + + return false; + } + } } diff --git a/ReallifeGamemode.Server/Managers/WeaponManager.cs b/ReallifeGamemode.Server/Managers/WeaponManager.cs index 808a4e3f..4e6cbb48 100644 --- a/ReallifeGamemode.Server/Managers/WeaponManager.cs +++ b/ReallifeGamemode.Server/Managers/WeaponManager.cs @@ -5,9 +5,9 @@ using System.Text; namespace ReallifeGamemode.Server.Managers { - class WeaponManager - { - private static readonly List _modWeapons = new List() + class WeaponManager + { + private static readonly List _modWeapons = new List() { "dagger", "bat", @@ -101,19 +101,19 @@ namespace ReallifeGamemode.Server.Managers "fireextinguisher" }; - public static bool IsValidHash(uint hash) - { - foreach (WeaponHash vh in Enum.GetValues(typeof(WeaponHash))) - { - if ((uint)vh == hash) return true; - } + public static bool IsValidHash(uint hash) + { + foreach (WeaponHash vh in Enum.GetValues(typeof(WeaponHash))) + { + if ((uint)vh == hash) return true; + } - foreach (string mod in _modWeapons) - { - if (NAPI.Util.GetHashKey($"weapon_{mod}") == hash) return true; - } + foreach (string mod in _modWeapons) + { + if (NAPI.Util.GetHashKey($"weapon_{mod}") == hash) return true; + } - return false; - } + return false; } + } } diff --git a/ReallifeGamemode.Server/Migrations/20190226185806_Initial.cs b/ReallifeGamemode.Server/Migrations/20190226185806_Initial.cs index 730f3261..9bfea47a 100644 --- a/ReallifeGamemode.Server/Migrations/20190226185806_Initial.cs +++ b/ReallifeGamemode.Server/Migrations/20190226185806_Initial.cs @@ -4,878 +4,878 @@ using Microsoft.EntityFrameworkCore.Migrations; namespace ReallifeGamemode.Migrations { - public partial class Initial : Migration + public partial class Initial : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "BankAccountTransactionLogs", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - Sender = table.Column(maxLength: 32, nullable: true), - SenderBalance = table.Column(nullable: false), - MoneySent = table.Column(nullable: false), - Receiver = table.Column(maxLength: 32, nullable: true), - ReceiverBalance = table.Column(nullable: false), - NewSenderBalance = table.Column(nullable: false), - NewReceiverBalance = table.Column(nullable: false), - Fee = table.Column(nullable: false), - Origin = table.Column(maxLength: 32, nullable: true), - Timestamp = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn) - }, - constraints: table => - { - table.PrimaryKey("PK_BankAccountTransactionLogs", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "Blips", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - Sprite = table.Column(nullable: false), - PositionX = table.Column(nullable: false), - PositionY = table.Column(nullable: false), - PositionZ = table.Column(nullable: false), - Name = table.Column(nullable: true), - Scale = table.Column(nullable: false), - Color = table.Column(nullable: false), - Alpha = table.Column(nullable: false), - DrawDistance = table.Column(nullable: false), - ShortRange = table.Column(nullable: false), - Rotation = table.Column(nullable: false), - Dimension = table.Column(nullable: false), - Active = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Blips", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "BusinessBankAccounts", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - Balance = table.Column(nullable: false), - BusinessId = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_BusinessBankAccounts", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "ClothCombinations", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - Gender = table.Column(nullable: false), - Top = table.Column(nullable: false), - Torso = table.Column(nullable: false), - Undershirt = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_ClothCombinations", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "Factions", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - Name = table.Column(maxLength: 32, nullable: true), - StateOwned = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Factions", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "GotoPoints", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - Description = table.Column(maxLength: 32, nullable: true), - X = table.Column(nullable: false), - Y = table.Column(nullable: false), - Z = table.Column(nullable: false), - Active = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_GotoPoints", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "Interiors", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - Name = table.Column(nullable: true), - EnterPosition = table.Column(nullable: true), - ExitPosition = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Interiors", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "Markers", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - Type = table.Column(nullable: false), - PositionX = table.Column(nullable: false), - PositionY = table.Column(nullable: false), - PositionZ = table.Column(nullable: false), - Scale = table.Column(nullable: false), - DirectionX = table.Column(nullable: false), - DirectionY = table.Column(nullable: false), - DirectionZ = table.Column(nullable: false), - RotationX = table.Column(nullable: false), - RotationY = table.Column(nullable: false), - RotationZ = table.Column(nullable: false), - ColorR = table.Column(nullable: false), - ColorG = table.Column(nullable: false), - ColorB = table.Column(nullable: false), - ColorA = table.Column(nullable: false), - Visible = table.Column(nullable: false), - Dimension = table.Column(nullable: false), - Active = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Markers", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "Peds", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - HashModel = table.Column(nullable: true), - PositionX = table.Column(nullable: false), - PositionY = table.Column(nullable: false), - PositionZ = table.Column(nullable: false), - Heading = table.Column(nullable: false), - Dimension = table.Column(nullable: false), - Active = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Peds", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "Pickups", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - PositionX = table.Column(maxLength: 128, nullable: false), - PositionY = table.Column(nullable: false), - PositionZ = table.Column(nullable: false), - RotationX = table.Column(nullable: false), - RotationY = table.Column(nullable: false), - RotationZ = table.Column(nullable: false), - Vehicle = table.Column(nullable: false), - RespawnTime = table.Column(nullable: false), - Dimension = table.Column(nullable: false), - Active = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Pickups", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "TextLabels", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - Text = table.Column(nullable: false), - PositionX = table.Column(nullable: false), - PositionY = table.Column(nullable: false), - PositionZ = table.Column(nullable: false), - LOS = table.Column(nullable: false), - Font = table.Column(nullable: false), - DrawDistance = table.Column(nullable: false), - ColorR = table.Column(nullable: false), - ColorG = table.Column(nullable: false), - ColorB = table.Column(nullable: false), - ColorA = table.Column(nullable: false), - Dimension = table.Column(nullable: false), - Active = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_TextLabels", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "WhitelistEntries", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - SocialClubName = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_WhitelistEntries", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "Doors", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - Category = table.Column(nullable: true), - Name = table.Column(nullable: true), - Locked = table.Column(nullable: false), - Model = table.Column(nullable: false), - X = table.Column(nullable: false), - Y = table.Column(nullable: false), - Z = table.Column(nullable: false), - Radius = table.Column(nullable: false), - FactionId = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Doors", x => x.Id); - table.ForeignKey( - name: "FK_Doors_Factions_FactionId", - column: x => x.FactionId, - principalTable: "Factions", - principalColumn: "Id", - onDelete: ReferentialAction.Restrict); - }); - - migrationBuilder.CreateTable( - name: "DutyClothes", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - FactionId = table.Column(nullable: false), - Gender = table.Column(nullable: false), - SlotType = table.Column(nullable: false), - SlotId = table.Column(nullable: false), - ClothId = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_DutyClothes", x => x.Id); - table.ForeignKey( - name: "FK_DutyClothes_Factions_FactionId", - column: x => x.FactionId, - principalTable: "Factions", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "FactionBankAccounts", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - FactionId = table.Column(nullable: false), - Bic = table.Column(maxLength: 12, nullable: true), - Iban = table.Column(maxLength: 32, nullable: true), - Balance = table.Column(nullable: false), - Active = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_FactionBankAccounts", x => x.Id); - table.ForeignKey( - name: "FK_FactionBankAccounts_Factions_FactionId", - column: x => x.FactionId, - principalTable: "Factions", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "FactionRanks", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - RankName = table.Column(nullable: true), - Order = table.Column(nullable: false), - FactionId = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_FactionRanks", x => x.Id); - table.ForeignKey( - name: "FK_FactionRanks_Factions_FactionId", - column: x => x.FactionId, - principalTable: "Factions", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "Users", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - Name = table.Column(maxLength: 32, nullable: true), - SocialClubName = table.Column(maxLength: 32, nullable: true), - Password = table.Column(maxLength: 64, nullable: true), - LogUserId = table.Column(nullable: false), - RegistrationDate = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - Email = table.Column(maxLength: 64, nullable: true), - AdminLevel = table.Column(nullable: false), - Dead = table.Column(nullable: false), - PositionX = table.Column(nullable: false), - PositionY = table.Column(nullable: false), - PositionZ = table.Column(nullable: false), - CharacterId = table.Column(nullable: true), - BanId = table.Column(nullable: true), - FactionId = table.Column(nullable: true), - FactionLeader = table.Column(nullable: false), - FactionRankId = table.Column(nullable: true), - BusinessId = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Users", x => x.Id); - table.ForeignKey( - name: "FK_Users_Factions_FactionId", - column: x => x.FactionId, - principalTable: "Factions", - principalColumn: "Id", - onDelete: ReferentialAction.Restrict); - table.ForeignKey( - name: "FK_Users_FactionRanks_FactionRankId", - column: x => x.FactionRankId, - principalTable: "FactionRanks", - principalColumn: "Id", - onDelete: ReferentialAction.Restrict); - }); - - migrationBuilder.CreateTable( - name: "Bans", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - UserId = table.Column(nullable: false), - Reason = table.Column(nullable: true), - BannedBy = table.Column(nullable: true), - Applied = table.Column(nullable: false), - UntilDateTime = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Bans", x => x.Id); - table.ForeignKey( - name: "FK_Bans_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "CharacterClothes", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - UserId = table.Column(nullable: false), - Duty = table.Column(nullable: false), - SlotType = table.Column(nullable: false), - SlotId = table.Column(nullable: false), - ClothId = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_CharacterClothes", x => x.Id); - table.ForeignKey( - name: "FK_CharacterClothes_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "Characters", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - UserId = table.Column(nullable: false), - Gender = table.Column(nullable: false), - Father = table.Column(nullable: false), - Mother = table.Column(nullable: false), - Similarity = table.Column(nullable: false), - SkinSimilarity = table.Column(nullable: false), - NoseWidth = table.Column(nullable: false), - NoseBottomHeight = table.Column(nullable: false), - NoseTipLength = table.Column(nullable: false), - NoseBridgeDepth = table.Column(nullable: false), - NoseTipHeight = table.Column(nullable: false), - NoseBroken = table.Column(nullable: false), - BrowHeight = table.Column(nullable: false), - BrowDepth = table.Column(nullable: false), - CheekboneHeight = table.Column(nullable: false), - CheekboneWidth = table.Column(nullable: false), - CheekDepth = table.Column(nullable: false), - EyeSize = table.Column(nullable: false), - LipThickness = table.Column(nullable: false), - JawWidth = table.Column(nullable: false), - JawShape = table.Column(nullable: false), - ChinHeight = table.Column(nullable: false), - ChinDepth = table.Column(nullable: false), - ChinWidth = table.Column(nullable: false), - ChinIndent = table.Column(nullable: false), - NeckWidth = table.Column(nullable: false), - Blemishes = table.Column(nullable: false), - BlemishesOpacity = table.Column(nullable: false), - FacialHair = table.Column(nullable: false), - FacialHairOpacity = table.Column(nullable: false), - Eyebrows = table.Column(nullable: false), - EyebrowsOpacity = table.Column(nullable: false), - Ageing = table.Column(nullable: false), - AgeingOpacity = table.Column(nullable: false), - Makeup = table.Column(nullable: false), - MakeupOpacity = table.Column(nullable: false), - Blush = table.Column(nullable: false), - BlushOpacity = table.Column(nullable: false), - Complexion = table.Column(nullable: false), - ComplexionOpacity = table.Column(nullable: false), - SunDamage = table.Column(nullable: false), - SunDamageOpacity = table.Column(nullable: false), - Lipstick = table.Column(nullable: false), - LipstickOpacity = table.Column(nullable: false), - Freckles = table.Column(nullable: false), - FrecklesOpacity = table.Column(nullable: false), - ChestHair = table.Column(nullable: false), - ChestHairOpacity = table.Column(nullable: false), - Hair = table.Column(nullable: false), - HairColor = table.Column(nullable: false), - HairHighlightColor = table.Column(nullable: false), - EyebrowColor = table.Column(nullable: false), - BeardColor = table.Column(nullable: false), - EyeColor = table.Column(nullable: false), - BlushColor = table.Column(nullable: false), - LipstickColor = table.Column(nullable: false), - ChestHairColor = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Characters", x => x.Id); - table.ForeignKey( - name: "FK_Characters_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "DeathLogs", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - VictimId = table.Column(nullable: false), - KillerId = table.Column(nullable: true), - VictimPositionX = table.Column(nullable: false), - VictimPositionY = table.Column(nullable: false), - VictimPositionZ = table.Column(nullable: false), - VictimHeading = table.Column(nullable: false), - KillerPositionX = table.Column(nullable: false), - KillerPositionY = table.Column(nullable: false), - KillerPositionZ = table.Column(nullable: false), - KillerHeading = table.Column(nullable: false), - CauseOfDeath = table.Column(maxLength: 64, nullable: true), - Timestamp = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn) - }, - constraints: table => - { - table.PrimaryKey("PK_DeathLogs", x => x.Id); - table.ForeignKey( - name: "FK_DeathLogs_Users_KillerId", - column: x => x.KillerId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Restrict); - table.ForeignKey( - name: "FK_DeathLogs_Users_VictimId", - column: x => x.VictimId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "News", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - UserId = table.Column(nullable: true), - Caption = table.Column(nullable: true), - Content = table.Column(nullable: true), - Active = table.Column(nullable: false), - Timestamp = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_News", x => x.Id); - table.ForeignKey( - name: "FK_News_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Restrict); - }); - - migrationBuilder.CreateTable( - name: "ServerVehicles", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - Model = table.Column(nullable: false), - PositionX = table.Column(nullable: false), - PositionY = table.Column(nullable: false), - PositionZ = table.Column(nullable: false), - Heading = table.Column(nullable: false), - NumberPlate = table.Column(maxLength: 8, nullable: true), - PrimaryColor = table.Column(nullable: false), - SecondaryColor = table.Column(nullable: false), - Locked = table.Column(nullable: false), - Active = table.Column(nullable: false, defaultValue: true), - Discriminator = table.Column(nullable: false), - FactionId = table.Column(nullable: true), - ShopId = table.Column(nullable: true), - BusinessId = table.Column(nullable: true), - Price = table.Column(nullable: true), - UserId = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_ServerVehicles", x => x.Id); - table.ForeignKey( - name: "FK_ServerVehicles_Factions_FactionId", - column: x => x.FactionId, - principalTable: "Factions", - principalColumn: "Id", - onDelete: ReferentialAction.Restrict); - table.ForeignKey( - name: "FK_ServerVehicles_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "UserBankAccounts", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - UserId = table.Column(nullable: false), - Bic = table.Column(maxLength: 12, nullable: true), - Iban = table.Column(maxLength: 32, nullable: true), - Balance = table.Column(nullable: false), - Active = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_UserBankAccounts", x => x.Id); - table.ForeignKey( - name: "FK_UserBankAccounts_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "UserItems", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - ItemId = table.Column(nullable: false), - UserId = table.Column(nullable: false), - Amount = table.Column(nullable: false), - Slot = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_UserItems", x => x.Id); - table.ForeignKey( - name: "FK_UserItems_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "VehicleMods", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - ServerVehicleId = table.Column(nullable: false), - Slot = table.Column(nullable: false), - ModId = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_VehicleMods", x => x.Id); - table.ForeignKey( - name: "FK_VehicleMods_ServerVehicles_ServerVehicleId", - column: x => x.ServerVehicleId, - principalTable: "ServerVehicles", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateIndex( - name: "IX_Bans_UserId", - table: "Bans", - column: "UserId"); - - migrationBuilder.CreateIndex( - name: "IX_BusinessBankAccounts_BusinessId", - table: "BusinessBankAccounts", - column: "BusinessId", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_CharacterClothes_UserId", - table: "CharacterClothes", - column: "UserId"); - - migrationBuilder.CreateIndex( - name: "IX_Characters_UserId", - table: "Characters", - column: "UserId"); - - migrationBuilder.CreateIndex( - name: "IX_DeathLogs_KillerId", - table: "DeathLogs", - column: "KillerId"); - - migrationBuilder.CreateIndex( - name: "IX_DeathLogs_VictimId", - table: "DeathLogs", - column: "VictimId"); - - migrationBuilder.CreateIndex( - name: "IX_Doors_FactionId", - table: "Doors", - column: "FactionId"); - - migrationBuilder.CreateIndex( - name: "IX_DutyClothes_FactionId", - table: "DutyClothes", - column: "FactionId"); - - migrationBuilder.CreateIndex( - name: "IX_FactionBankAccounts_FactionId", - table: "FactionBankAccounts", - column: "FactionId"); - - migrationBuilder.CreateIndex( - name: "IX_FactionRanks_FactionId", - table: "FactionRanks", - column: "FactionId"); - - migrationBuilder.CreateIndex( - name: "IX_News_UserId", - table: "News", - column: "UserId"); - - migrationBuilder.CreateIndex( - name: "IX_ServerVehicles_FactionId", - table: "ServerVehicles", - column: "FactionId"); - - migrationBuilder.CreateIndex( - name: "IX_ServerVehicles_UserId", - table: "ServerVehicles", - column: "UserId"); - - migrationBuilder.CreateIndex( - name: "IX_UserBankAccounts_UserId", - table: "UserBankAccounts", - column: "UserId"); - - migrationBuilder.CreateIndex( - name: "IX_UserItems_UserId", - table: "UserItems", - column: "UserId"); - - migrationBuilder.CreateIndex( - name: "IX_Users_BanId", - table: "Users", - column: "BanId"); - - migrationBuilder.CreateIndex( - name: "IX_Users_BusinessId", - table: "Users", - column: "BusinessId", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_Users_CharacterId", - table: "Users", - column: "CharacterId"); - - migrationBuilder.CreateIndex( - name: "IX_Users_FactionId", - table: "Users", - column: "FactionId"); - - migrationBuilder.CreateIndex( - name: "IX_Users_FactionRankId", - table: "Users", - column: "FactionRankId"); - - migrationBuilder.CreateIndex( - name: "IX_VehicleMods_ServerVehicleId_Slot", - table: "VehicleMods", - columns: new[] { "ServerVehicleId", "Slot" }, - unique: true); - - migrationBuilder.AddForeignKey( - name: "FK_Users_Bans_BanId", - table: "Users", - column: "BanId", - principalTable: "Bans", - principalColumn: "Id", - onDelete: ReferentialAction.Restrict); - - migrationBuilder.AddForeignKey( - name: "FK_Users_Characters_CharacterId", - table: "Users", - column: "CharacterId", - principalTable: "Characters", - principalColumn: "Id", - onDelete: ReferentialAction.Restrict); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropForeignKey( - name: "FK_Bans_Users_UserId", - table: "Bans"); - - migrationBuilder.DropForeignKey( - name: "FK_Characters_Users_UserId", - table: "Characters"); - - migrationBuilder.DropTable( - name: "BankAccountTransactionLogs"); - - migrationBuilder.DropTable( - name: "Blips"); - - migrationBuilder.DropTable( - name: "BusinessBankAccounts"); - - migrationBuilder.DropTable( - name: "CharacterClothes"); - - migrationBuilder.DropTable( - name: "ClothCombinations"); - - migrationBuilder.DropTable( - name: "DeathLogs"); - - migrationBuilder.DropTable( - name: "Doors"); - - migrationBuilder.DropTable( - name: "DutyClothes"); - - migrationBuilder.DropTable( - name: "FactionBankAccounts"); - - migrationBuilder.DropTable( - name: "GotoPoints"); - - migrationBuilder.DropTable( - name: "Interiors"); - - migrationBuilder.DropTable( - name: "Markers"); - - migrationBuilder.DropTable( - name: "News"); - - migrationBuilder.DropTable( - name: "Peds"); - - migrationBuilder.DropTable( - name: "Pickups"); - - migrationBuilder.DropTable( - name: "TextLabels"); - - migrationBuilder.DropTable( - name: "UserBankAccounts"); - - migrationBuilder.DropTable( - name: "UserItems"); - - migrationBuilder.DropTable( - name: "VehicleMods"); - - migrationBuilder.DropTable( - name: "WhitelistEntries"); - - migrationBuilder.DropTable( - name: "ServerVehicles"); - - migrationBuilder.DropTable( - name: "Users"); - - migrationBuilder.DropTable( - name: "Bans"); - - migrationBuilder.DropTable( - name: "Characters"); - - migrationBuilder.DropTable( - name: "FactionRanks"); - - migrationBuilder.DropTable( - name: "Factions"); - } + migrationBuilder.CreateTable( + name: "BankAccountTransactionLogs", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + Sender = table.Column(maxLength: 32, nullable: true), + SenderBalance = table.Column(nullable: false), + MoneySent = table.Column(nullable: false), + Receiver = table.Column(maxLength: 32, nullable: true), + ReceiverBalance = table.Column(nullable: false), + NewSenderBalance = table.Column(nullable: false), + NewReceiverBalance = table.Column(nullable: false), + Fee = table.Column(nullable: false), + Origin = table.Column(maxLength: 32, nullable: true), + Timestamp = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn) + }, + constraints: table => + { + table.PrimaryKey("PK_BankAccountTransactionLogs", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Blips", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + Sprite = table.Column(nullable: false), + PositionX = table.Column(nullable: false), + PositionY = table.Column(nullable: false), + PositionZ = table.Column(nullable: false), + Name = table.Column(nullable: true), + Scale = table.Column(nullable: false), + Color = table.Column(nullable: false), + Alpha = table.Column(nullable: false), + DrawDistance = table.Column(nullable: false), + ShortRange = table.Column(nullable: false), + Rotation = table.Column(nullable: false), + Dimension = table.Column(nullable: false), + Active = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Blips", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "BusinessBankAccounts", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + Balance = table.Column(nullable: false), + BusinessId = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_BusinessBankAccounts", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "ClothCombinations", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + Gender = table.Column(nullable: false), + Top = table.Column(nullable: false), + Torso = table.Column(nullable: false), + Undershirt = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_ClothCombinations", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Factions", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + Name = table.Column(maxLength: 32, nullable: true), + StateOwned = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Factions", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "GotoPoints", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + Description = table.Column(maxLength: 32, nullable: true), + X = table.Column(nullable: false), + Y = table.Column(nullable: false), + Z = table.Column(nullable: false), + Active = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_GotoPoints", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Interiors", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + Name = table.Column(nullable: true), + EnterPosition = table.Column(nullable: true), + ExitPosition = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Interiors", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Markers", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + Type = table.Column(nullable: false), + PositionX = table.Column(nullable: false), + PositionY = table.Column(nullable: false), + PositionZ = table.Column(nullable: false), + Scale = table.Column(nullable: false), + DirectionX = table.Column(nullable: false), + DirectionY = table.Column(nullable: false), + DirectionZ = table.Column(nullable: false), + RotationX = table.Column(nullable: false), + RotationY = table.Column(nullable: false), + RotationZ = table.Column(nullable: false), + ColorR = table.Column(nullable: false), + ColorG = table.Column(nullable: false), + ColorB = table.Column(nullable: false), + ColorA = table.Column(nullable: false), + Visible = table.Column(nullable: false), + Dimension = table.Column(nullable: false), + Active = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Markers", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Peds", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + HashModel = table.Column(nullable: true), + PositionX = table.Column(nullable: false), + PositionY = table.Column(nullable: false), + PositionZ = table.Column(nullable: false), + Heading = table.Column(nullable: false), + Dimension = table.Column(nullable: false), + Active = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Peds", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Pickups", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + PositionX = table.Column(maxLength: 128, nullable: false), + PositionY = table.Column(nullable: false), + PositionZ = table.Column(nullable: false), + RotationX = table.Column(nullable: false), + RotationY = table.Column(nullable: false), + RotationZ = table.Column(nullable: false), + Vehicle = table.Column(nullable: false), + RespawnTime = table.Column(nullable: false), + Dimension = table.Column(nullable: false), + Active = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Pickups", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "TextLabels", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + Text = table.Column(nullable: false), + PositionX = table.Column(nullable: false), + PositionY = table.Column(nullable: false), + PositionZ = table.Column(nullable: false), + LOS = table.Column(nullable: false), + Font = table.Column(nullable: false), + DrawDistance = table.Column(nullable: false), + ColorR = table.Column(nullable: false), + ColorG = table.Column(nullable: false), + ColorB = table.Column(nullable: false), + ColorA = table.Column(nullable: false), + Dimension = table.Column(nullable: false), + Active = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_TextLabels", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "WhitelistEntries", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + SocialClubName = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_WhitelistEntries", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Doors", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + Category = table.Column(nullable: true), + Name = table.Column(nullable: true), + Locked = table.Column(nullable: false), + Model = table.Column(nullable: false), + X = table.Column(nullable: false), + Y = table.Column(nullable: false), + Z = table.Column(nullable: false), + Radius = table.Column(nullable: false), + FactionId = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Doors", x => x.Id); + table.ForeignKey( + name: "FK_Doors_Factions_FactionId", + column: x => x.FactionId, + principalTable: "Factions", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + }); + + migrationBuilder.CreateTable( + name: "DutyClothes", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + FactionId = table.Column(nullable: false), + Gender = table.Column(nullable: false), + SlotType = table.Column(nullable: false), + SlotId = table.Column(nullable: false), + ClothId = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_DutyClothes", x => x.Id); + table.ForeignKey( + name: "FK_DutyClothes_Factions_FactionId", + column: x => x.FactionId, + principalTable: "Factions", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "FactionBankAccounts", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + FactionId = table.Column(nullable: false), + Bic = table.Column(maxLength: 12, nullable: true), + Iban = table.Column(maxLength: 32, nullable: true), + Balance = table.Column(nullable: false), + Active = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_FactionBankAccounts", x => x.Id); + table.ForeignKey( + name: "FK_FactionBankAccounts_Factions_FactionId", + column: x => x.FactionId, + principalTable: "Factions", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "FactionRanks", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + RankName = table.Column(nullable: true), + Order = table.Column(nullable: false), + FactionId = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_FactionRanks", x => x.Id); + table.ForeignKey( + name: "FK_FactionRanks_Factions_FactionId", + column: x => x.FactionId, + principalTable: "Factions", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Users", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + Name = table.Column(maxLength: 32, nullable: true), + SocialClubName = table.Column(maxLength: 32, nullable: true), + Password = table.Column(maxLength: 64, nullable: true), + LogUserId = table.Column(nullable: false), + RegistrationDate = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + Email = table.Column(maxLength: 64, nullable: true), + AdminLevel = table.Column(nullable: false), + Dead = table.Column(nullable: false), + PositionX = table.Column(nullable: false), + PositionY = table.Column(nullable: false), + PositionZ = table.Column(nullable: false), + CharacterId = table.Column(nullable: true), + BanId = table.Column(nullable: true), + FactionId = table.Column(nullable: true), + FactionLeader = table.Column(nullable: false), + FactionRankId = table.Column(nullable: true), + BusinessId = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Users", x => x.Id); + table.ForeignKey( + name: "FK_Users_Factions_FactionId", + column: x => x.FactionId, + principalTable: "Factions", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + table.ForeignKey( + name: "FK_Users_FactionRanks_FactionRankId", + column: x => x.FactionRankId, + principalTable: "FactionRanks", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + }); + + migrationBuilder.CreateTable( + name: "Bans", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + UserId = table.Column(nullable: false), + Reason = table.Column(nullable: true), + BannedBy = table.Column(nullable: true), + Applied = table.Column(nullable: false), + UntilDateTime = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Bans", x => x.Id); + table.ForeignKey( + name: "FK_Bans_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "CharacterClothes", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + UserId = table.Column(nullable: false), + Duty = table.Column(nullable: false), + SlotType = table.Column(nullable: false), + SlotId = table.Column(nullable: false), + ClothId = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_CharacterClothes", x => x.Id); + table.ForeignKey( + name: "FK_CharacterClothes_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Characters", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + UserId = table.Column(nullable: false), + Gender = table.Column(nullable: false), + Father = table.Column(nullable: false), + Mother = table.Column(nullable: false), + Similarity = table.Column(nullable: false), + SkinSimilarity = table.Column(nullable: false), + NoseWidth = table.Column(nullable: false), + NoseBottomHeight = table.Column(nullable: false), + NoseTipLength = table.Column(nullable: false), + NoseBridgeDepth = table.Column(nullable: false), + NoseTipHeight = table.Column(nullable: false), + NoseBroken = table.Column(nullable: false), + BrowHeight = table.Column(nullable: false), + BrowDepth = table.Column(nullable: false), + CheekboneHeight = table.Column(nullable: false), + CheekboneWidth = table.Column(nullable: false), + CheekDepth = table.Column(nullable: false), + EyeSize = table.Column(nullable: false), + LipThickness = table.Column(nullable: false), + JawWidth = table.Column(nullable: false), + JawShape = table.Column(nullable: false), + ChinHeight = table.Column(nullable: false), + ChinDepth = table.Column(nullable: false), + ChinWidth = table.Column(nullable: false), + ChinIndent = table.Column(nullable: false), + NeckWidth = table.Column(nullable: false), + Blemishes = table.Column(nullable: false), + BlemishesOpacity = table.Column(nullable: false), + FacialHair = table.Column(nullable: false), + FacialHairOpacity = table.Column(nullable: false), + Eyebrows = table.Column(nullable: false), + EyebrowsOpacity = table.Column(nullable: false), + Ageing = table.Column(nullable: false), + AgeingOpacity = table.Column(nullable: false), + Makeup = table.Column(nullable: false), + MakeupOpacity = table.Column(nullable: false), + Blush = table.Column(nullable: false), + BlushOpacity = table.Column(nullable: false), + Complexion = table.Column(nullable: false), + ComplexionOpacity = table.Column(nullable: false), + SunDamage = table.Column(nullable: false), + SunDamageOpacity = table.Column(nullable: false), + Lipstick = table.Column(nullable: false), + LipstickOpacity = table.Column(nullable: false), + Freckles = table.Column(nullable: false), + FrecklesOpacity = table.Column(nullable: false), + ChestHair = table.Column(nullable: false), + ChestHairOpacity = table.Column(nullable: false), + Hair = table.Column(nullable: false), + HairColor = table.Column(nullable: false), + HairHighlightColor = table.Column(nullable: false), + EyebrowColor = table.Column(nullable: false), + BeardColor = table.Column(nullable: false), + EyeColor = table.Column(nullable: false), + BlushColor = table.Column(nullable: false), + LipstickColor = table.Column(nullable: false), + ChestHairColor = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Characters", x => x.Id); + table.ForeignKey( + name: "FK_Characters_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "DeathLogs", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + VictimId = table.Column(nullable: false), + KillerId = table.Column(nullable: true), + VictimPositionX = table.Column(nullable: false), + VictimPositionY = table.Column(nullable: false), + VictimPositionZ = table.Column(nullable: false), + VictimHeading = table.Column(nullable: false), + KillerPositionX = table.Column(nullable: false), + KillerPositionY = table.Column(nullable: false), + KillerPositionZ = table.Column(nullable: false), + KillerHeading = table.Column(nullable: false), + CauseOfDeath = table.Column(maxLength: 64, nullable: true), + Timestamp = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn) + }, + constraints: table => + { + table.PrimaryKey("PK_DeathLogs", x => x.Id); + table.ForeignKey( + name: "FK_DeathLogs_Users_KillerId", + column: x => x.KillerId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + table.ForeignKey( + name: "FK_DeathLogs_Users_VictimId", + column: x => x.VictimId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "News", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + UserId = table.Column(nullable: true), + Caption = table.Column(nullable: true), + Content = table.Column(nullable: true), + Active = table.Column(nullable: false), + Timestamp = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_News", x => x.Id); + table.ForeignKey( + name: "FK_News_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + }); + + migrationBuilder.CreateTable( + name: "ServerVehicles", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + Model = table.Column(nullable: false), + PositionX = table.Column(nullable: false), + PositionY = table.Column(nullable: false), + PositionZ = table.Column(nullable: false), + Heading = table.Column(nullable: false), + NumberPlate = table.Column(maxLength: 8, nullable: true), + PrimaryColor = table.Column(nullable: false), + SecondaryColor = table.Column(nullable: false), + Locked = table.Column(nullable: false), + Active = table.Column(nullable: false, defaultValue: true), + Discriminator = table.Column(nullable: false), + FactionId = table.Column(nullable: true), + ShopId = table.Column(nullable: true), + BusinessId = table.Column(nullable: true), + Price = table.Column(nullable: true), + UserId = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_ServerVehicles", x => x.Id); + table.ForeignKey( + name: "FK_ServerVehicles_Factions_FactionId", + column: x => x.FactionId, + principalTable: "Factions", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + table.ForeignKey( + name: "FK_ServerVehicles_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "UserBankAccounts", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + UserId = table.Column(nullable: false), + Bic = table.Column(maxLength: 12, nullable: true), + Iban = table.Column(maxLength: 32, nullable: true), + Balance = table.Column(nullable: false), + Active = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_UserBankAccounts", x => x.Id); + table.ForeignKey( + name: "FK_UserBankAccounts_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "UserItems", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + ItemId = table.Column(nullable: false), + UserId = table.Column(nullable: false), + Amount = table.Column(nullable: false), + Slot = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_UserItems", x => x.Id); + table.ForeignKey( + name: "FK_UserItems_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "VehicleMods", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + ServerVehicleId = table.Column(nullable: false), + Slot = table.Column(nullable: false), + ModId = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_VehicleMods", x => x.Id); + table.ForeignKey( + name: "FK_VehicleMods_ServerVehicles_ServerVehicleId", + column: x => x.ServerVehicleId, + principalTable: "ServerVehicles", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_Bans_UserId", + table: "Bans", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_BusinessBankAccounts_BusinessId", + table: "BusinessBankAccounts", + column: "BusinessId", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_CharacterClothes_UserId", + table: "CharacterClothes", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_Characters_UserId", + table: "Characters", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_DeathLogs_KillerId", + table: "DeathLogs", + column: "KillerId"); + + migrationBuilder.CreateIndex( + name: "IX_DeathLogs_VictimId", + table: "DeathLogs", + column: "VictimId"); + + migrationBuilder.CreateIndex( + name: "IX_Doors_FactionId", + table: "Doors", + column: "FactionId"); + + migrationBuilder.CreateIndex( + name: "IX_DutyClothes_FactionId", + table: "DutyClothes", + column: "FactionId"); + + migrationBuilder.CreateIndex( + name: "IX_FactionBankAccounts_FactionId", + table: "FactionBankAccounts", + column: "FactionId"); + + migrationBuilder.CreateIndex( + name: "IX_FactionRanks_FactionId", + table: "FactionRanks", + column: "FactionId"); + + migrationBuilder.CreateIndex( + name: "IX_News_UserId", + table: "News", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_ServerVehicles_FactionId", + table: "ServerVehicles", + column: "FactionId"); + + migrationBuilder.CreateIndex( + name: "IX_ServerVehicles_UserId", + table: "ServerVehicles", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_UserBankAccounts_UserId", + table: "UserBankAccounts", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_UserItems_UserId", + table: "UserItems", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_Users_BanId", + table: "Users", + column: "BanId"); + + migrationBuilder.CreateIndex( + name: "IX_Users_BusinessId", + table: "Users", + column: "BusinessId", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Users_CharacterId", + table: "Users", + column: "CharacterId"); + + migrationBuilder.CreateIndex( + name: "IX_Users_FactionId", + table: "Users", + column: "FactionId"); + + migrationBuilder.CreateIndex( + name: "IX_Users_FactionRankId", + table: "Users", + column: "FactionRankId"); + + migrationBuilder.CreateIndex( + name: "IX_VehicleMods_ServerVehicleId_Slot", + table: "VehicleMods", + columns: new[] { "ServerVehicleId", "Slot" }, + unique: true); + + migrationBuilder.AddForeignKey( + name: "FK_Users_Bans_BanId", + table: "Users", + column: "BanId", + principalTable: "Bans", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Users_Characters_CharacterId", + table: "Users", + column: "CharacterId", + principalTable: "Characters", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_Bans_Users_UserId", + table: "Bans"); + + migrationBuilder.DropForeignKey( + name: "FK_Characters_Users_UserId", + table: "Characters"); + + migrationBuilder.DropTable( + name: "BankAccountTransactionLogs"); + + migrationBuilder.DropTable( + name: "Blips"); + + migrationBuilder.DropTable( + name: "BusinessBankAccounts"); + + migrationBuilder.DropTable( + name: "CharacterClothes"); + + migrationBuilder.DropTable( + name: "ClothCombinations"); + + migrationBuilder.DropTable( + name: "DeathLogs"); + + migrationBuilder.DropTable( + name: "Doors"); + + migrationBuilder.DropTable( + name: "DutyClothes"); + + migrationBuilder.DropTable( + name: "FactionBankAccounts"); + + migrationBuilder.DropTable( + name: "GotoPoints"); + + migrationBuilder.DropTable( + name: "Interiors"); + + migrationBuilder.DropTable( + name: "Markers"); + + migrationBuilder.DropTable( + name: "News"); + + migrationBuilder.DropTable( + name: "Peds"); + + migrationBuilder.DropTable( + name: "Pickups"); + + migrationBuilder.DropTable( + name: "TextLabels"); + + migrationBuilder.DropTable( + name: "UserBankAccounts"); + + migrationBuilder.DropTable( + name: "UserItems"); + + migrationBuilder.DropTable( + name: "VehicleMods"); + + migrationBuilder.DropTable( + name: "WhitelistEntries"); + + migrationBuilder.DropTable( + name: "ServerVehicles"); + + migrationBuilder.DropTable( + name: "Users"); + + migrationBuilder.DropTable( + name: "Bans"); + + migrationBuilder.DropTable( + name: "Characters"); + + migrationBuilder.DropTable( + name: "FactionRanks"); + + migrationBuilder.DropTable( + name: "Factions"); + } + } } diff --git a/ReallifeGamemode.Server/Migrations/20190306194826_VehicleDistanceDriven.cs b/ReallifeGamemode.Server/Migrations/20190306194826_VehicleDistanceDriven.cs index 5610b2d0..1d45ce57 100644 --- a/ReallifeGamemode.Server/Migrations/20190306194826_VehicleDistanceDriven.cs +++ b/ReallifeGamemode.Server/Migrations/20190306194826_VehicleDistanceDriven.cs @@ -2,22 +2,22 @@ namespace ReallifeGamemode.Migrations { - public partial class VehicleDistanceDriven : Migration + public partial class VehicleDistanceDriven : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "DistanceDriven", - table: "ServerVehicles", - nullable: false, - defaultValue: 0f); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "DistanceDriven", - table: "ServerVehicles"); - } + migrationBuilder.AddColumn( + name: "DistanceDriven", + table: "ServerVehicles", + nullable: false, + defaultValue: 0f); } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "DistanceDriven", + table: "ServerVehicles"); + } + } } diff --git a/ReallifeGamemode.Server/Migrations/20190307163335_VehicleTank.cs b/ReallifeGamemode.Server/Migrations/20190307163335_VehicleTank.cs index b70dc674..2f1b33b7 100644 --- a/ReallifeGamemode.Server/Migrations/20190307163335_VehicleTank.cs +++ b/ReallifeGamemode.Server/Migrations/20190307163335_VehicleTank.cs @@ -2,22 +2,22 @@ namespace ReallifeGamemode.Migrations { - public partial class VehicleTank : Migration + public partial class VehicleTank : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "TankAmount", - table: "ServerVehicles", - nullable: false, - defaultValue: 0f); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "TankAmount", - table: "ServerVehicles"); - } + migrationBuilder.AddColumn( + name: "TankAmount", + table: "ServerVehicles", + nullable: false, + defaultValue: 0f); } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "TankAmount", + table: "ServerVehicles"); + } + } } diff --git a/ReallifeGamemode.Server/Migrations/20190309184251_ATM.cs b/ReallifeGamemode.Server/Migrations/20190309184251_ATM.cs index 724816d6..d010fd12 100644 --- a/ReallifeGamemode.Server/Migrations/20190309184251_ATM.cs +++ b/ReallifeGamemode.Server/Migrations/20190309184251_ATM.cs @@ -3,33 +3,33 @@ using Microsoft.EntityFrameworkCore.Migrations; namespace ReallifeGamemode.Migrations { - public partial class ATM : Migration + public partial class ATM : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "ATMs", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - Balance = table.Column(nullable: false), - X = table.Column(nullable: false), - Y = table.Column(nullable: false), - Z = table.Column(nullable: false), - Faulty = table.Column(nullable: false), - Active = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_ATMs", x => x.Id); - }); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "ATMs"); - } + migrationBuilder.CreateTable( + name: "ATMs", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + Balance = table.Column(nullable: false), + X = table.Column(nullable: false), + Y = table.Column(nullable: false), + Z = table.Column(nullable: false), + Faulty = table.Column(nullable: false), + Active = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_ATMs", x => x.Id); + }); } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "ATMs"); + } + } } diff --git a/ReallifeGamemode.Server/Migrations/20190408143319_Handmoney.cs b/ReallifeGamemode.Server/Migrations/20190408143319_Handmoney.cs index a41fe1c5..097ccb15 100644 --- a/ReallifeGamemode.Server/Migrations/20190408143319_Handmoney.cs +++ b/ReallifeGamemode.Server/Migrations/20190408143319_Handmoney.cs @@ -2,22 +2,22 @@ namespace ReallifeGamemode.Migrations { - public partial class Handmoney : Migration + public partial class Handmoney : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "Handmoney", - table: "Users", - nullable: false, - defaultValue: 0); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "Handmoney", - table: "Users"); - } + migrationBuilder.AddColumn( + name: "Handmoney", + table: "Users", + nullable: false, + defaultValue: 0); } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "Handmoney", + table: "Users"); + } + } } diff --git a/ReallifeGamemode.Server/Migrations/20190411180607_TuningGarage.cs b/ReallifeGamemode.Server/Migrations/20190411180607_TuningGarage.cs index ff4d270d..a43ba5b8 100644 --- a/ReallifeGamemode.Server/Migrations/20190411180607_TuningGarage.cs +++ b/ReallifeGamemode.Server/Migrations/20190411180607_TuningGarage.cs @@ -3,30 +3,30 @@ using Microsoft.EntityFrameworkCore.Migrations; namespace ReallifeGamemode.Migrations { - public partial class TuningGarage : Migration + public partial class TuningGarage : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "TuningGarages", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - X = table.Column(nullable: false), - Y = table.Column(nullable: false), - Z = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_TuningGarages", x => x.Id); - }); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "TuningGarages"); - } + migrationBuilder.CreateTable( + name: "TuningGarages", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + X = table.Column(nullable: false), + Y = table.Column(nullable: false), + Z = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_TuningGarages", x => x.Id); + }); } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "TuningGarages"); + } + } } diff --git a/ReallifeGamemode.Server/Migrations/20190505154643_Groups.cs b/ReallifeGamemode.Server/Migrations/20190505154643_Groups.cs index 847177f8..a6d1eb2f 100644 --- a/ReallifeGamemode.Server/Migrations/20190505154643_Groups.cs +++ b/ReallifeGamemode.Server/Migrations/20190505154643_Groups.cs @@ -3,126 +3,126 @@ using Microsoft.EntityFrameworkCore.Migrations; namespace ReallifeGamemode.Migrations { - public partial class Groups : Migration + public partial class Groups : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "GroupId", - table: "Users", - nullable: true); + migrationBuilder.AddColumn( + name: "GroupId", + table: "Users", + nullable: true); - migrationBuilder.AddColumn( - name: "GroupRank", - table: "Users", - nullable: false, - defaultValue: 0); + migrationBuilder.AddColumn( + name: "GroupRank", + table: "Users", + nullable: false, + defaultValue: 0); - migrationBuilder.AddColumn( - name: "GroupId", - table: "ServerVehicles", - nullable: true); + migrationBuilder.AddColumn( + name: "GroupId", + table: "ServerVehicles", + nullable: true); - migrationBuilder.CreateTable( - name: "Groups", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - Name = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Groups", x => x.Id); - }); + migrationBuilder.CreateTable( + name: "Groups", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + Name = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Groups", x => x.Id); + }); - migrationBuilder.CreateTable( - name: "GroupBankAccounts", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - GroupId = table.Column(nullable: true), - Balance = table.Column(nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_GroupBankAccounts", x => x.Id); - table.ForeignKey( - name: "FK_GroupBankAccounts_Groups_GroupId", - column: x => x.GroupId, - principalTable: "Groups", - principalColumn: "Id", - onDelete: ReferentialAction.Restrict); - }); + migrationBuilder.CreateTable( + name: "GroupBankAccounts", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + GroupId = table.Column(nullable: true), + Balance = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_GroupBankAccounts", x => x.Id); + table.ForeignKey( + name: "FK_GroupBankAccounts_Groups_GroupId", + column: x => x.GroupId, + principalTable: "Groups", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + }); - migrationBuilder.CreateIndex( - name: "IX_Users_GroupId", - table: "Users", - column: "GroupId"); + migrationBuilder.CreateIndex( + name: "IX_Users_GroupId", + table: "Users", + column: "GroupId"); - migrationBuilder.CreateIndex( - name: "IX_ServerVehicles_GroupId", - table: "ServerVehicles", - column: "GroupId"); + migrationBuilder.CreateIndex( + name: "IX_ServerVehicles_GroupId", + table: "ServerVehicles", + column: "GroupId"); - migrationBuilder.CreateIndex( - name: "IX_GroupBankAccounts_GroupId", - table: "GroupBankAccounts", - column: "GroupId"); + migrationBuilder.CreateIndex( + name: "IX_GroupBankAccounts_GroupId", + table: "GroupBankAccounts", + column: "GroupId"); - migrationBuilder.AddForeignKey( - name: "FK_ServerVehicles_Groups_GroupId", - table: "ServerVehicles", - column: "GroupId", - principalTable: "Groups", - principalColumn: "Id", - onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_ServerVehicles_Groups_GroupId", + table: "ServerVehicles", + column: "GroupId", + principalTable: "Groups", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); - migrationBuilder.AddForeignKey( - name: "FK_Users_Groups_GroupId", - table: "Users", - column: "GroupId", - principalTable: "Groups", - principalColumn: "Id", - onDelete: ReferentialAction.Restrict); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropForeignKey( - name: "FK_ServerVehicles_Groups_GroupId", - table: "ServerVehicles"); - - migrationBuilder.DropForeignKey( - name: "FK_Users_Groups_GroupId", - table: "Users"); - - migrationBuilder.DropTable( - name: "GroupBankAccounts"); - - migrationBuilder.DropTable( - name: "Groups"); - - migrationBuilder.DropIndex( - name: "IX_Users_GroupId", - table: "Users"); - - migrationBuilder.DropIndex( - name: "IX_ServerVehicles_GroupId", - table: "ServerVehicles"); - - migrationBuilder.DropColumn( - name: "GroupId", - table: "Users"); - - migrationBuilder.DropColumn( - name: "GroupRank", - table: "Users"); - - migrationBuilder.DropColumn( - name: "GroupId", - table: "ServerVehicles"); - } + migrationBuilder.AddForeignKey( + name: "FK_Users_Groups_GroupId", + table: "Users", + column: "GroupId", + principalTable: "Groups", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_ServerVehicles_Groups_GroupId", + table: "ServerVehicles"); + + migrationBuilder.DropForeignKey( + name: "FK_Users_Groups_GroupId", + table: "Users"); + + migrationBuilder.DropTable( + name: "GroupBankAccounts"); + + migrationBuilder.DropTable( + name: "Groups"); + + migrationBuilder.DropIndex( + name: "IX_Users_GroupId", + table: "Users"); + + migrationBuilder.DropIndex( + name: "IX_ServerVehicles_GroupId", + table: "ServerVehicles"); + + migrationBuilder.DropColumn( + name: "GroupId", + table: "Users"); + + migrationBuilder.DropColumn( + name: "GroupRank", + table: "Users"); + + migrationBuilder.DropColumn( + name: "GroupId", + table: "ServerVehicles"); + } + } } diff --git a/ReallifeGamemode.Server/Migrations/20190513111017_UnusedColumnRemove.cs b/ReallifeGamemode.Server/Migrations/20190513111017_UnusedColumnRemove.cs index df90e73e..5fbcd616 100644 --- a/ReallifeGamemode.Server/Migrations/20190513111017_UnusedColumnRemove.cs +++ b/ReallifeGamemode.Server/Migrations/20190513111017_UnusedColumnRemove.cs @@ -2,21 +2,21 @@ namespace ReallifeGamemode.Migrations { - public partial class UnusedColumnRemove : Migration + public partial class UnusedColumnRemove : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "ShopId", - table: "ServerVehicles"); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "ShopId", - table: "ServerVehicles", - nullable: true); - } + migrationBuilder.DropColumn( + name: "ShopId", + table: "ServerVehicles"); } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "ShopId", + table: "ServerVehicles", + nullable: true); + } + } } diff --git a/ReallifeGamemode.Server/Migrations/20190513161249_Jobs.cs b/ReallifeGamemode.Server/Migrations/20190513161249_Jobs.cs index 8ad5a9bb..6dc0c06b 100644 --- a/ReallifeGamemode.Server/Migrations/20190513161249_Jobs.cs +++ b/ReallifeGamemode.Server/Migrations/20190513161249_Jobs.cs @@ -3,88 +3,88 @@ using Microsoft.EntityFrameworkCore.Migrations; namespace ReallifeGamemode.Migrations { - public partial class Jobs : Migration + public partial class Jobs : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "JobId", - table: "Users", - nullable: true); + migrationBuilder.AddColumn( + name: "JobId", + table: "Users", + nullable: true); - migrationBuilder.AddColumn( - name: "JobId", - table: "ServerVehicles", - nullable: true); + migrationBuilder.AddColumn( + name: "JobId", + table: "ServerVehicles", + nullable: true); - migrationBuilder.CreateTable( - name: "Jobs", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - Name = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Jobs", x => x.Id); - }); + migrationBuilder.CreateTable( + name: "Jobs", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + Name = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Jobs", x => x.Id); + }); - migrationBuilder.CreateIndex( - name: "IX_Users_JobId", - table: "Users", - column: "JobId"); + migrationBuilder.CreateIndex( + name: "IX_Users_JobId", + table: "Users", + column: "JobId"); - migrationBuilder.CreateIndex( - name: "IX_ServerVehicles_JobId", - table: "ServerVehicles", - column: "JobId"); + migrationBuilder.CreateIndex( + name: "IX_ServerVehicles_JobId", + table: "ServerVehicles", + column: "JobId"); - migrationBuilder.AddForeignKey( - name: "FK_ServerVehicles_Jobs_JobId", - table: "ServerVehicles", - column: "JobId", - principalTable: "Jobs", - principalColumn: "Id", - onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_ServerVehicles_Jobs_JobId", + table: "ServerVehicles", + column: "JobId", + principalTable: "Jobs", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); - migrationBuilder.AddForeignKey( - name: "FK_Users_Jobs_JobId", - table: "Users", - column: "JobId", - principalTable: "Jobs", - principalColumn: "Id", - onDelete: ReferentialAction.Restrict); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropForeignKey( - name: "FK_ServerVehicles_Jobs_JobId", - table: "ServerVehicles"); - - migrationBuilder.DropForeignKey( - name: "FK_Users_Jobs_JobId", - table: "Users"); - - migrationBuilder.DropTable( - name: "Jobs"); - - migrationBuilder.DropIndex( - name: "IX_Users_JobId", - table: "Users"); - - migrationBuilder.DropIndex( - name: "IX_ServerVehicles_JobId", - table: "ServerVehicles"); - - migrationBuilder.DropColumn( - name: "JobId", - table: "Users"); - - migrationBuilder.DropColumn( - name: "JobId", - table: "ServerVehicles"); - } + migrationBuilder.AddForeignKey( + name: "FK_Users_Jobs_JobId", + table: "Users", + column: "JobId", + principalTable: "Jobs", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_ServerVehicles_Jobs_JobId", + table: "ServerVehicles"); + + migrationBuilder.DropForeignKey( + name: "FK_Users_Jobs_JobId", + table: "Users"); + + migrationBuilder.DropTable( + name: "Jobs"); + + migrationBuilder.DropIndex( + name: "IX_Users_JobId", + table: "Users"); + + migrationBuilder.DropIndex( + name: "IX_ServerVehicles_JobId", + table: "ServerVehicles"); + + migrationBuilder.DropColumn( + name: "JobId", + table: "Users"); + + migrationBuilder.DropColumn( + name: "JobId", + table: "ServerVehicles"); + } + } } diff --git a/ReallifeGamemode.Server/Migrations/20190516094446_JobFix.cs b/ReallifeGamemode.Server/Migrations/20190516094446_JobFix.cs index 36f075e2..8a293d52 100644 --- a/ReallifeGamemode.Server/Migrations/20190516094446_JobFix.cs +++ b/ReallifeGamemode.Server/Migrations/20190516094446_JobFix.cs @@ -3,71 +3,71 @@ using Microsoft.EntityFrameworkCore.Migrations; namespace ReallifeGamemode.Migrations { - public partial class JobFix : Migration + public partial class JobFix : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropForeignKey( - name: "FK_ServerVehicles_Jobs_JobId", - table: "ServerVehicles"); + migrationBuilder.DropForeignKey( + name: "FK_ServerVehicles_Jobs_JobId", + table: "ServerVehicles"); - migrationBuilder.DropForeignKey( - name: "FK_Users_Jobs_JobId", - table: "Users"); + migrationBuilder.DropForeignKey( + name: "FK_Users_Jobs_JobId", + table: "Users"); - migrationBuilder.DropTable( - name: "Jobs"); + migrationBuilder.DropTable( + name: "Jobs"); - migrationBuilder.DropIndex( - name: "IX_Users_JobId", - table: "Users"); + migrationBuilder.DropIndex( + name: "IX_Users_JobId", + table: "Users"); - migrationBuilder.DropIndex( - name: "IX_ServerVehicles_JobId", - table: "ServerVehicles"); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - - migrationBuilder.CreateTable( - name: "Jobs", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - Name = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Jobs", x => x.Id); - }); - - migrationBuilder.CreateIndex( - name: "IX_Users_JobId", - table: "Users", - column: "JobId"); - - migrationBuilder.CreateIndex( - name: "IX_ServerVehicles_JobId", - table: "ServerVehicles", - column: "JobId"); - - migrationBuilder.AddForeignKey( - name: "FK_ServerVehicles_Jobs_JobId", - table: "ServerVehicles", - column: "JobId", - principalTable: "Jobs", - principalColumn: "Id", - onDelete: ReferentialAction.Restrict); - - migrationBuilder.AddForeignKey( - name: "FK_Users_Jobs_JobId", - table: "Users", - column: "JobId", - principalTable: "Jobs", - principalColumn: "Id", - onDelete: ReferentialAction.Restrict); - } + migrationBuilder.DropIndex( + name: "IX_ServerVehicles_JobId", + table: "ServerVehicles"); } + + protected override void Down(MigrationBuilder migrationBuilder) + { + + migrationBuilder.CreateTable( + name: "Jobs", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + Name = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Jobs", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_Users_JobId", + table: "Users", + column: "JobId"); + + migrationBuilder.CreateIndex( + name: "IX_ServerVehicles_JobId", + table: "ServerVehicles", + column: "JobId"); + + migrationBuilder.AddForeignKey( + name: "FK_ServerVehicles_Jobs_JobId", + table: "ServerVehicles", + column: "JobId", + principalTable: "Jobs", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Users_Jobs_JobId", + table: "Users", + column: "JobId", + principalTable: "Jobs", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + } + } } diff --git a/ReallifeGamemode.Server/Migrations/20190624153156_ClothesTexture.cs b/ReallifeGamemode.Server/Migrations/20190624153156_ClothesTexture.cs index 39c00ab7..80d7135c 100644 --- a/ReallifeGamemode.Server/Migrations/20190624153156_ClothesTexture.cs +++ b/ReallifeGamemode.Server/Migrations/20190624153156_ClothesTexture.cs @@ -2,22 +2,22 @@ namespace ReallifeGamemode.Migrations { - public partial class ClothesTexture : Migration + public partial class ClothesTexture : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "Texture", - table: "CharacterClothes", - nullable: false, - defaultValue: 0); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "Texture", - table: "CharacterClothes"); - } + migrationBuilder.AddColumn( + name: "Texture", + table: "CharacterClothes", + nullable: false, + defaultValue: 0); } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "Texture", + table: "CharacterClothes"); + } + } } diff --git a/ReallifeGamemode.Server/Migrations/20190625202943_ClientWanteds.cs b/ReallifeGamemode.Server/Migrations/20190625202943_ClientWanteds.cs index 28937612..bfa67769 100644 --- a/ReallifeGamemode.Server/Migrations/20190625202943_ClientWanteds.cs +++ b/ReallifeGamemode.Server/Migrations/20190625202943_ClientWanteds.cs @@ -2,22 +2,22 @@ namespace ReallifeGamemode.Migrations { - public partial class ClientWanteds : Migration + public partial class ClientWanteds : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "Wanteds", - table: "Users", - nullable: false, - defaultValue: 0); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "Wanteds", - table: "Users"); - } + migrationBuilder.AddColumn( + name: "Wanteds", + table: "Users", + nullable: false, + defaultValue: 0); } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "Wanteds", + table: "Users"); + } + } } diff --git a/ReallifeGamemode.Server/Migrations/20190626193631_House.cs b/ReallifeGamemode.Server/Migrations/20190626193631_House.cs index 29f9b252..3f374d13 100644 --- a/ReallifeGamemode.Server/Migrations/20190626193631_House.cs +++ b/ReallifeGamemode.Server/Migrations/20190626193631_House.cs @@ -3,51 +3,51 @@ using Microsoft.EntityFrameworkCore.Migrations; namespace ReallifeGamemode.Migrations { - public partial class House : Migration + public partial class House : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "HouseId", - table: "Users", - nullable: true); + migrationBuilder.AddColumn( + name: "HouseId", + table: "Users", + nullable: true); - migrationBuilder.CreateTable( - name: "Houses", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - Type = table.Column(nullable: true), - Price = table.Column(nullable: false), - UserId = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Houses", x => x.Id); - table.ForeignKey( - name: "FK_Houses_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Restrict); - }); + migrationBuilder.CreateTable( + name: "Houses", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + Type = table.Column(nullable: true), + Price = table.Column(nullable: false), + UserId = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Houses", x => x.Id); + table.ForeignKey( + name: "FK_Houses_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + }); - migrationBuilder.CreateIndex( - name: "IX_Houses_UserId", - table: "Houses", - column: "UserId", - unique: true); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Houses"); - - migrationBuilder.DropColumn( - name: "HouseId", - table: "Users"); - } + migrationBuilder.CreateIndex( + name: "IX_Houses_UserId", + table: "Houses", + column: "UserId", + unique: true); } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Houses"); + + migrationBuilder.DropColumn( + name: "HouseId", + table: "Users"); + } + } } diff --git a/ReallifeGamemode.Server/Migrations/20190626202159_HousePosition.cs b/ReallifeGamemode.Server/Migrations/20190626202159_HousePosition.cs index b6af0f14..c56ae88c 100644 --- a/ReallifeGamemode.Server/Migrations/20190626202159_HousePosition.cs +++ b/ReallifeGamemode.Server/Migrations/20190626202159_HousePosition.cs @@ -2,42 +2,42 @@ namespace ReallifeGamemode.Migrations { - public partial class HousePosition : Migration + public partial class HousePosition : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "X", - table: "Houses", - nullable: false, - defaultValue: 0f); + migrationBuilder.AddColumn( + name: "X", + table: "Houses", + nullable: false, + defaultValue: 0f); - migrationBuilder.AddColumn( - name: "Y", - table: "Houses", - nullable: false, - defaultValue: 0f); + migrationBuilder.AddColumn( + name: "Y", + table: "Houses", + nullable: false, + defaultValue: 0f); - migrationBuilder.AddColumn( - name: "Z", - table: "Houses", - nullable: false, - defaultValue: 0f); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "X", - table: "Houses"); - - migrationBuilder.DropColumn( - name: "Y", - table: "Houses"); - - migrationBuilder.DropColumn( - name: "Z", - table: "Houses"); - } + migrationBuilder.AddColumn( + name: "Z", + table: "Houses", + nullable: false, + defaultValue: 0f); } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "X", + table: "Houses"); + + migrationBuilder.DropColumn( + name: "Y", + table: "Houses"); + + migrationBuilder.DropColumn( + name: "Z", + table: "Houses"); + } + } } diff --git a/ReallifeGamemode.Server/Migrations/20190627162731_UserHouseReference.cs b/ReallifeGamemode.Server/Migrations/20190627162731_UserHouseReference.cs index faa9f016..5163c4b2 100644 --- a/ReallifeGamemode.Server/Migrations/20190627162731_UserHouseReference.cs +++ b/ReallifeGamemode.Server/Migrations/20190627162731_UserHouseReference.cs @@ -2,26 +2,26 @@ namespace ReallifeGamemode.Migrations { - public partial class UserHouseReference : Migration + public partial class UserHouseReference : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddForeignKey( - name: "FK_Users_Houses_HouseId", - table: "Users", - column: "HouseId", - principalTable: "Houses", - principalColumn: "Id", - onDelete: ReferentialAction.Restrict); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateIndex( - name: "IX_Houses_UserId", - table: "Houses", - column: "UserId", - unique: true); - } + migrationBuilder.AddForeignKey( + name: "FK_Users_Houses_HouseId", + table: "Users", + column: "HouseId", + principalTable: "Houses", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateIndex( + name: "IX_Houses_UserId", + table: "Houses", + column: "UserId", + unique: true); + } + } } diff --git a/ReallifeGamemode.Server/Migrations/20190706132925_UserWage.cs b/ReallifeGamemode.Server/Migrations/20190706132925_UserWage.cs index d0bebf74..9cf2a609 100644 --- a/ReallifeGamemode.Server/Migrations/20190706132925_UserWage.cs +++ b/ReallifeGamemode.Server/Migrations/20190706132925_UserWage.cs @@ -2,22 +2,22 @@ namespace ReallifeGamemode.Migrations { - public partial class UserWage : Migration + public partial class UserWage : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "Wage", - table: "Users", - nullable: false, - defaultValue: 0); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "Wage", - table: "Users"); - } + migrationBuilder.AddColumn( + name: "Wage", + table: "Users", + nullable: false, + defaultValue: 0); } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "Wage", + table: "Users"); + } + } } diff --git a/ReallifeGamemode.Server/Migrations/20190707184050_BusRoutes.cs b/ReallifeGamemode.Server/Migrations/20190707184050_BusRoutes.cs index 735ce5dd..14567611 100644 --- a/ReallifeGamemode.Server/Migrations/20190707184050_BusRoutes.cs +++ b/ReallifeGamemode.Server/Migrations/20190707184050_BusRoutes.cs @@ -3,59 +3,59 @@ using Microsoft.EntityFrameworkCore.Migrations; namespace ReallifeGamemode.Migrations { - public partial class BusRoutes : Migration + public partial class BusRoutes : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "BusRoutes", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - Description = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_BusRoutes", x => x.Id); - }); + migrationBuilder.CreateTable( + name: "BusRoutes", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + Description = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_BusRoutes", x => x.Id); + }); - migrationBuilder.CreateTable( - name: "BusRoutesPoints", - columns: table => new - { - Id = table.Column(nullable: false) - .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), - Description = table.Column(nullable: true), - X = table.Column(nullable: false), - Y = table.Column(nullable: false), - Z = table.Column(nullable: false), - BusRouteId = table.Column(nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_BusRoutesPoints", x => x.Id); - table.ForeignKey( - name: "FK_BusRoutesPoints_BusRoutes_BusRouteId", - column: x => x.BusRouteId, - principalTable: "BusRoutes", - principalColumn: "Id", - onDelete: ReferentialAction.Restrict); - }); + migrationBuilder.CreateTable( + name: "BusRoutesPoints", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + Description = table.Column(nullable: true), + X = table.Column(nullable: false), + Y = table.Column(nullable: false), + Z = table.Column(nullable: false), + BusRouteId = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_BusRoutesPoints", x => x.Id); + table.ForeignKey( + name: "FK_BusRoutesPoints_BusRoutes_BusRouteId", + column: x => x.BusRouteId, + principalTable: "BusRoutes", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + }); - migrationBuilder.CreateIndex( - name: "IX_BusRoutesPoints_BusRouteId", - table: "BusRoutesPoints", - column: "BusRouteId"); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "BusRoutesPoints"); - - migrationBuilder.DropTable( - name: "BusRoutes"); - } + migrationBuilder.CreateIndex( + name: "IX_BusRoutesPoints_BusRouteId", + table: "BusRoutesPoints", + column: "BusRouteId"); } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "BusRoutesPoints"); + + migrationBuilder.DropTable( + name: "BusRoutes"); + } + } } diff --git a/ReallifeGamemode.Server/Migrations/20190708161922_UserHouseReferenceFix.cs b/ReallifeGamemode.Server/Migrations/20190708161922_UserHouseReferenceFix.cs index 4c2aefda..79a93fe2 100644 --- a/ReallifeGamemode.Server/Migrations/20190708161922_UserHouseReferenceFix.cs +++ b/ReallifeGamemode.Server/Migrations/20190708161922_UserHouseReferenceFix.cs @@ -2,42 +2,42 @@ namespace ReallifeGamemode.Migrations { - public partial class UserHouseReferenceFix : Migration + public partial class UserHouseReferenceFix : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "OwnerId", - table: "Houses", - nullable: true); + migrationBuilder.AddColumn( + name: "OwnerId", + table: "Houses", + nullable: true); - migrationBuilder.CreateIndex( - name: "IX_Houses_OwnerId", - table: "Houses", - column: "OwnerId"); + migrationBuilder.CreateIndex( + name: "IX_Houses_OwnerId", + table: "Houses", + column: "OwnerId"); - migrationBuilder.AddForeignKey( - name: "FK_Houses_Users_OwnerId", - table: "Houses", - column: "OwnerId", - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropForeignKey( - name: "FK_Houses_Users_OwnerId", - table: "Houses"); - - migrationBuilder.DropIndex( - name: "IX_Houses_OwnerId", - table: "Houses"); - - migrationBuilder.DropColumn( - name: "OwnerId", - table: "Houses"); - } + migrationBuilder.AddForeignKey( + name: "FK_Houses_Users_OwnerId", + table: "Houses", + column: "OwnerId", + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_Houses_Users_OwnerId", + table: "Houses"); + + migrationBuilder.DropIndex( + name: "IX_Houses_OwnerId", + table: "Houses"); + + migrationBuilder.DropColumn( + name: "OwnerId", + table: "Houses"); + } + } } diff --git a/ReallifeGamemode.Server/Migrations/20190715192123_JailTime.cs b/ReallifeGamemode.Server/Migrations/20190715192123_JailTime.cs index 1d71be9a..5481a958 100644 --- a/ReallifeGamemode.Server/Migrations/20190715192123_JailTime.cs +++ b/ReallifeGamemode.Server/Migrations/20190715192123_JailTime.cs @@ -2,22 +2,22 @@ namespace ReallifeGamemode.Migrations { - public partial class JailTime : Migration + public partial class JailTime : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "JailTime", - table: "Users", - nullable: false, - defaultValue: 0); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "JailTime", - table: "Users"); - } + migrationBuilder.AddColumn( + name: "JailTime", + table: "Users", + nullable: false, + defaultValue: 0); } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "JailTime", + table: "Users"); + } + } } diff --git a/ReallifeGamemode.Server/Models/DatabaseContext.cs b/ReallifeGamemode.Server/Models/DatabaseContext.cs index 847e8cfb..a146e9ea 100644 --- a/ReallifeGamemode.Server/Models/DatabaseContext.cs +++ b/ReallifeGamemode.Server/Models/DatabaseContext.cs @@ -8,106 +8,106 @@ namespace ReallifeGamemode.Server.Models { - public partial class DatabaseContext : DbContext + public partial class DatabaseContext : DbContext + { + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { - protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) - { - base.OnConfiguring(optionsBuilder); - optionsBuilder.UseMySql("Host=localhost;Port=3306;Database=gtav-devdb;Username=gtav-dev;Password=Test123"); - } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - base.OnModelCreating(modelBuilder); - - modelBuilder.Entity() - .HasIndex(b => b.BusinessId) - .IsUnique(true); - - modelBuilder.Entity() - .HasIndex(u => u.BusinessId) - .IsUnique(true); - - modelBuilder.Entity() - .Property(sv => sv.Active) - .HasDefaultValue(true); - - modelBuilder.Entity() - .HasIndex(vM => new { vM.ServerVehicleId, vM.Slot }).IsUnique(); - } - - //User - public DbSet Bans { get; set; } - public DbSet Characters { get; set; } - public DbSet CharacterClothes { get; set; } - public DbSet DutyClothes { get; set; } - public DbSet ClothCombinations { get; set; } - public DbSet Users { get; set; } - public DbSet UserVehicles { get; set; } - public DbSet UserBankAccounts { get; set; } - - - //Inventar - public DbSet UserItems { get; set; } - - //Faction - public DbSet Factions { get; set; } - public DbSet FactionBankAccounts { get; set; } - public DbSet FactionRanks { get; set; } - public DbSet FactionVehicles { get; set; } - - //Shops - - //Logs - //public DbSet BanLogs { get; set; } - public DbSet BankAccountTransactionLogs { get; set; } - public DbSet DeathLogs { get; set; } - - //Saves - public DbSet ATMs { get; set; } - public DbSet Blips { get; set; } - public DbSet Doors { get; set; } - public DbSet GotoPoints { get; set; } - public DbSet Markers { get; set; } - public DbSet Peds { get; set; } - public DbSet Pickups { get; set; } - public DbSet TextLabels { get; set; } - public DbSet Vehicles { get; set; } - public DbSet ShopVehicles { get; set; } - - - // Business - public DbSet BusinessBankAccounts { get; set; } - - // Control Panel - public DbSet News { get; set; } - - // Server Vehicles - public DbSet ServerVehicles { get; set; } - public DbSet VehicleMods { get; set; } - - // Whitelist - public DbSet WhitelistEntries { get; set; } - - // Interiors - public DbSet Interiors { get; set; } - - // Tuning Garages - public DbSet TuningGarages { get; set; } - - // Gruppen - public DbSet Groups { get; set; } - public DbSet GroupBankAccounts { get; set; } - public DbSet GroupVehicles { get; set; } - - // Jobs - public DbSet JobVehicles { get; set; } - - // Houses - public DbSet Houses { get; set; } - - // Bus Routes - public DbSet BusRoutes { get; set; } - public DbSet BusRoutesPoints { get; set; } + base.OnConfiguring(optionsBuilder); + optionsBuilder.UseMySql("Host=localhost;Port=3306;Database=gtav-devdb;Username=gtav-dev;Password=Test123"); } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.Entity() + .HasIndex(b => b.BusinessId) + .IsUnique(true); + + modelBuilder.Entity() + .HasIndex(u => u.BusinessId) + .IsUnique(true); + + modelBuilder.Entity() + .Property(sv => sv.Active) + .HasDefaultValue(true); + + modelBuilder.Entity() + .HasIndex(vM => new { vM.ServerVehicleId, vM.Slot }).IsUnique(); + } + + //User + public DbSet Bans { get; set; } + public DbSet Characters { get; set; } + public DbSet CharacterClothes { get; set; } + public DbSet DutyClothes { get; set; } + public DbSet ClothCombinations { get; set; } + public DbSet Users { get; set; } + public DbSet UserVehicles { get; set; } + public DbSet UserBankAccounts { get; set; } + + + //Inventar + public DbSet UserItems { get; set; } + + //Faction + public DbSet Factions { get; set; } + public DbSet FactionBankAccounts { get; set; } + public DbSet FactionRanks { get; set; } + public DbSet FactionVehicles { get; set; } + + //Shops + + //Logs + //public DbSet BanLogs { get; set; } + public DbSet BankAccountTransactionLogs { get; set; } + public DbSet DeathLogs { get; set; } + + //Saves + public DbSet ATMs { get; set; } + public DbSet Blips { get; set; } + public DbSet Doors { get; set; } + public DbSet GotoPoints { get; set; } + public DbSet Markers { get; set; } + public DbSet Peds { get; set; } + public DbSet Pickups { get; set; } + public DbSet TextLabels { get; set; } + public DbSet Vehicles { get; set; } + public DbSet ShopVehicles { get; set; } + + + // Business + public DbSet BusinessBankAccounts { get; set; } + + // Control Panel + public DbSet News { get; set; } + + // Server Vehicles + public DbSet ServerVehicles { get; set; } + public DbSet VehicleMods { get; set; } + + // Whitelist + public DbSet WhitelistEntries { get; set; } + + // Interiors + public DbSet Interiors { get; set; } + + // Tuning Garages + public DbSet TuningGarages { get; set; } + + // Gruppen + public DbSet Groups { get; set; } + public DbSet GroupBankAccounts { get; set; } + public DbSet GroupVehicles { get; set; } + + // Jobs + public DbSet JobVehicles { get; set; } + + // Houses + public DbSet Houses { get; set; } + + // Bus Routes + public DbSet BusRoutes { get; set; } + public DbSet BusRoutesPoints { get; set; } + } } diff --git a/ReallifeGamemode.Server/Services/ChatService.cs b/ReallifeGamemode.Server/Services/ChatService.cs index 80a11502..7712d604 100644 --- a/ReallifeGamemode.Server/Services/ChatService.cs +++ b/ReallifeGamemode.Server/Services/ChatService.cs @@ -14,94 +14,94 @@ using System.Linq; namespace ReallifeGamemode.Server.Services { - class ChatService + class ChatService + { + public static void NotAuthorized(Client player) { - public static void NotAuthorized(Client player) - { - ChatService.ErrorMessage(player, "Du kannst diesen Befehl nicht ausführen"); - } - - public static void PlayerNotFound(Client player) - { - ChatService.ErrorMessage(player, "Der Spieler wurde nicht gefunden"); - } - - public static void ErrorMessage(Client player, string message) - { - ChatService.SendMessage(player, $"~r~[FEHLER]~s~ {message}~s~."); - } - - public static void SendMessage(Client player, string message) - { - if (player == null) return; - player.SendChatMessage(message); - } - - public static void Broadcast(string message) => NAPI.Pools.GetAllPlayers().Where(c => c.IsLoggedIn()).ToList().ForEach(c => SendMessage(c, message)); - - /// - /// Sendet eine Nachricht an eine Liste von Fraktionen - /// - /// Die Nachricht, die gesendet werden soll - /// Die Liste an Fraktionen, die diese Nachricht bekommen sollen - public static void BroadcastFaction(string message, List factions) - { - foreach (Client c in NAPI.Pools.GetAllPlayers()) - { - Faction f = c.GetUser()?.Faction; - if (f != null) - { - if (factions.Find(fT => fT.Id == f.Id) != null) - { - ChatService.SendMessage(c, message); - } - } - } - } - - /// - /// Sendet eine Nachricht an eine Fraktion - /// - /// Die Nachricht, die gesendet werden soll - /// Die Fraktion, die diese Nachricht bekommen soll - public static void BroadcastFaction(string message, Faction f) - { - BroadcastFaction(message, new List() { f }); - } - - /// - /// Sendet eine Nachricht an alle Spieler mit einem bestimmten Admin Level - /// - /// Die Nachricht, die gesendet werden soll - /// Das mindest Admin Level, das für das Erhalten dieser Nachricht benötigt wird - public static void BroadcastAdmin(string message, AdminLevel minLevel) - { - NAPI.Pools.GetAllPlayers().ForEach(p => - { - if (p.GetUser()?.IsAdmin(minLevel) ?? false) - { - ChatService.SendMessage(p, message); - } - }); - } - - public static void BroadcastGroup(string message, Group group) - { - message = $"!{{FF8080}}** Gruppe: {message}"; - - NAPI.Pools.GetAllPlayers().ForEach(p => - { - Group pGroup = p.GetUser()?.Group; - if (pGroup?.Id == group.Id) - { - ChatService.SendMessage(p, message); - } - }); - } - - public static void BroadcastJob(string message, JobBase job) - { - job.GetUsersInJob().ForEach(c => ChatService.SendMessage(c, message)); - } + ChatService.ErrorMessage(player, "Du kannst diesen Befehl nicht ausführen"); } + + public static void PlayerNotFound(Client player) + { + ChatService.ErrorMessage(player, "Der Spieler wurde nicht gefunden"); + } + + public static void ErrorMessage(Client player, string message) + { + ChatService.SendMessage(player, $"~r~[FEHLER]~s~ {message}~s~."); + } + + public static void SendMessage(Client player, string message) + { + if (player == null) return; + player.SendChatMessage(message); + } + + public static void Broadcast(string message) => NAPI.Pools.GetAllPlayers().Where(c => c.IsLoggedIn()).ToList().ForEach(c => SendMessage(c, message)); + + /// + /// Sendet eine Nachricht an eine Liste von Fraktionen + /// + /// Die Nachricht, die gesendet werden soll + /// Die Liste an Fraktionen, die diese Nachricht bekommen sollen + public static void BroadcastFaction(string message, List factions) + { + foreach (Client c in NAPI.Pools.GetAllPlayers()) + { + Faction f = c.GetUser()?.Faction; + if (f != null) + { + if (factions.Find(fT => fT.Id == f.Id) != null) + { + ChatService.SendMessage(c, message); + } + } + } + } + + /// + /// Sendet eine Nachricht an eine Fraktion + /// + /// Die Nachricht, die gesendet werden soll + /// Die Fraktion, die diese Nachricht bekommen soll + public static void BroadcastFaction(string message, Faction f) + { + BroadcastFaction(message, new List() { f }); + } + + /// + /// Sendet eine Nachricht an alle Spieler mit einem bestimmten Admin Level + /// + /// Die Nachricht, die gesendet werden soll + /// Das mindest Admin Level, das für das Erhalten dieser Nachricht benötigt wird + public static void BroadcastAdmin(string message, AdminLevel minLevel) + { + NAPI.Pools.GetAllPlayers().ForEach(p => + { + if (p.GetUser()?.IsAdmin(minLevel) ?? false) + { + ChatService.SendMessage(p, message); + } + }); + } + + public static void BroadcastGroup(string message, Group group) + { + message = $"!{{FF8080}}** Gruppe: {message}"; + + NAPI.Pools.GetAllPlayers().ForEach(p => + { + Group pGroup = p.GetUser()?.Group; + if (pGroup?.Id == group.Id) + { + ChatService.SendMessage(p, message); + } + }); + } + + public static void BroadcastJob(string message, JobBase job) + { + job.GetUsersInJob().ForEach(c => ChatService.SendMessage(c, message)); + } + } } diff --git a/ReallifeGamemode.Server/Services/ClientService.cs b/ReallifeGamemode.Server/Services/ClientService.cs index 2c911efb..54e4233e 100644 --- a/ReallifeGamemode.Server/Services/ClientService.cs +++ b/ReallifeGamemode.Server/Services/ClientService.cs @@ -11,34 +11,34 @@ using System.Text; namespace ReallifeGamemode.Server.Services { - class ClientService + class ClientService + { + /// + /// Gibt einen Client anhand seines Namens oder der ID zurück + /// + /// Die ID oder der Name, nach dem gesucht werden soll + /// + public static Client GetClientByNameOrId(string nameOrId) { - /// - /// Gibt einen Client anhand seines Namens oder der ID zurück - /// - /// Die ID oder der Name, nach dem gesucht werden soll - /// - public static Client GetClientByNameOrId(string nameOrId) - { - Client toReturn = null; - nameOrId = nameOrId.ToLower(); + Client toReturn = null; + nameOrId = nameOrId.ToLower(); - List playerList = NAPI.Pools.GetAllPlayers(); + List playerList = NAPI.Pools.GetAllPlayers(); - if (int.TryParse(nameOrId, out int id)) - { - toReturn = playerList.Find(p => p.Handle.Value == id); - return toReturn; - } + if (int.TryParse(nameOrId, out int id)) + { + toReturn = playerList.Find(p => p.Handle.Value == id); + return toReturn; + } - toReturn = playerList.Find(p => p.Name.ToLower() == nameOrId); + toReturn = playerList.Find(p => p.Name.ToLower() == nameOrId); - if (toReturn == null) - { - toReturn = playerList.Find(p => p.Name.ToLower().StartsWith(nameOrId)); - } + if (toReturn == null) + { + toReturn = playerList.Find(p => p.Name.ToLower().StartsWith(nameOrId)); + } - return toReturn; - } + return toReturn; } + } } diff --git a/ReallifeGamemode.Server/Util/AdminLevel.cs b/ReallifeGamemode.Server/Util/AdminLevel.cs index 63fd38c5..2f071976 100644 --- a/ReallifeGamemode.Server/Util/AdminLevel.cs +++ b/ReallifeGamemode.Server/Util/AdminLevel.cs @@ -10,14 +10,14 @@ using System.Text; namespace ReallifeGamemode.Server.Util { - public enum AdminLevel : int - { - PLAYER = 0, - SUPPORTER = 1, - ADMIN = 2, - ADMIN2 = 3, - ADMIN3 = 4, - HEADADMIN = 1337, - PROJEKTLEITUNG = 1338 - } + public enum AdminLevel : int + { + PLAYER = 0, + SUPPORTER = 1, + ADMIN = 2, + ADMIN2 = 3, + ADMIN3 = 4, + HEADADMIN = 1337, + PROJEKTLEITUNG = 1338 + } } diff --git a/ReallifeGamemode.Server/Util/Converter.cs b/ReallifeGamemode.Server/Util/Converter.cs index 3e7e2017..7b282d58 100644 --- a/ReallifeGamemode.Server/Util/Converter.cs +++ b/ReallifeGamemode.Server/Util/Converter.cs @@ -6,35 +6,35 @@ using System.Text; namespace ReallifeGamemode.Server.Util { - public class Converter + public class Converter + { + public static Color HexToColor(string hexColor) { - public static Color HexToColor(string hexColor) - { - //Remove # if present - if (hexColor.IndexOf('#') != -1) - hexColor = hexColor.Replace("#", ""); + //Remove # if present + if (hexColor.IndexOf('#') != -1) + hexColor = hexColor.Replace("#", ""); - int red = 0; - int green = 0; - int blue = 0; + int red = 0; + int green = 0; + int blue = 0; - if (hexColor.Length == 6) - { - //#RRGGBB - red = int.Parse(hexColor.Substring(0, 2), NumberStyles.AllowHexSpecifier); - green = int.Parse(hexColor.Substring(2, 2), NumberStyles.AllowHexSpecifier); - blue = int.Parse(hexColor.Substring(4, 2), NumberStyles.AllowHexSpecifier); - } - else if (hexColor.Length == 3) - { - //#RGB - red = int.Parse(hexColor[0].ToString() + hexColor[0].ToString(), NumberStyles.AllowHexSpecifier); - green = int.Parse(hexColor[1].ToString() + hexColor[1].ToString(), NumberStyles.AllowHexSpecifier); - blue = int.Parse(hexColor[2].ToString() + hexColor[2].ToString(), NumberStyles.AllowHexSpecifier); - } + if (hexColor.Length == 6) + { + //#RRGGBB + red = int.Parse(hexColor.Substring(0, 2), NumberStyles.AllowHexSpecifier); + green = int.Parse(hexColor.Substring(2, 2), NumberStyles.AllowHexSpecifier); + blue = int.Parse(hexColor.Substring(4, 2), NumberStyles.AllowHexSpecifier); + } + else if (hexColor.Length == 3) + { + //#RGB + red = int.Parse(hexColor[0].ToString() + hexColor[0].ToString(), NumberStyles.AllowHexSpecifier); + green = int.Parse(hexColor[1].ToString() + hexColor[1].ToString(), NumberStyles.AllowHexSpecifier); + blue = int.Parse(hexColor[2].ToString() + hexColor[2].ToString(), NumberStyles.AllowHexSpecifier); + } - Color returnColor = new Color(red, green, blue); - return returnColor; - } + Color returnColor = new Color(red, green, blue); + return returnColor; } + } } diff --git a/ReallifeGamemode.Server/Util/DatabaseHelper.cs b/ReallifeGamemode.Server/Util/DatabaseHelper.cs index 78531e60..89231f81 100644 --- a/ReallifeGamemode.Server/Util/DatabaseHelper.cs +++ b/ReallifeGamemode.Server/Util/DatabaseHelper.cs @@ -4,16 +4,16 @@ using System.Linq; namespace ReallifeGamemode.Server.Util { - class DatabaseHelper + class DatabaseHelper + { + public static void InitDatabaseFirstTime() { - public static void InitDatabaseFirstTime() - { - NAPI.Util.ConsoleOutput("Initializing database..."); - using (var dbContext = new DatabaseContext()) - { - dbContext.Users.FirstOrDefault(); - dbContext.SaveChanges(); - } - } + NAPI.Util.ConsoleOutput("Initializing database..."); + using (var dbContext = new DatabaseContext()) + { + dbContext.Users.FirstOrDefault(); + dbContext.SaveChanges(); + } } + } } diff --git a/ReallifeGamemode.Server/Util/FactionHelper.cs b/ReallifeGamemode.Server/Util/FactionHelper.cs index 5bb56020..b0109df8 100644 --- a/ReallifeGamemode.Server/Util/FactionHelper.cs +++ b/ReallifeGamemode.Server/Util/FactionHelper.cs @@ -4,31 +4,31 @@ using ReallifeGamemode.Server.Models; namespace ReallifeGamemode.Server.Util { - class FactionHelper + class FactionHelper + { + public static void CheckFactionBankAccounts() { - public static void CheckFactionBankAccounts() + NAPI.Util.ConsoleOutput("Checking faction bank accounts..."); + using (var dbContext = new DatabaseContext()) + { + foreach (Faction faction in dbContext.Factions) { - NAPI.Util.ConsoleOutput("Checking faction bank accounts..."); - using (var dbContext = new DatabaseContext()) + if (faction.GetBankAccount(dbContext) == null) + { + NAPI.Util.ConsoleOutput("Adding bank account for faction: " + faction.Name); + FactionBankAccount factionBankAccount = new FactionBankAccount() { - foreach (Faction faction in dbContext.Factions) - { - if (faction.GetBankAccount(dbContext) == null) - { - NAPI.Util.ConsoleOutput("Adding bank account for faction: " + faction.Name); - FactionBankAccount factionBankAccount = new FactionBankAccount() - { - Balance = 0, - Bic = "", - Iban = "", - FactionId = faction.Id, - Active = true - }; - dbContext.FactionBankAccounts.Add(factionBankAccount); - } - } - dbContext.SaveChanges(); - } + Balance = 0, + Bic = "", + Iban = "", + FactionId = faction.Id, + Active = true + }; + dbContext.FactionBankAccounts.Add(factionBankAccount); + } } + dbContext.SaveChanges(); + } } + } } diff --git a/ReallifeGamemode.Server/Util/FactionRankHelper.cs b/ReallifeGamemode.Server/Util/FactionRankHelper.cs index d81c6abd..2e252f3d 100644 --- a/ReallifeGamemode.Server/Util/FactionRankHelper.cs +++ b/ReallifeGamemode.Server/Util/FactionRankHelper.cs @@ -4,15 +4,15 @@ using System.Text; namespace ReallifeGamemode.Server.Util { - class FactionRankHelper - { - public int FactionId { get; set; } - public List Ranks { get; set; } - } + class FactionRankHelper + { + public int FactionId { get; set; } + public List Ranks { get; set; } + } - class Rank - { - public int Id { get; set; } - public string Name { get; set; } - } + class Rank + { + public int Id { get; set; } + public string Name { get; set; } + } } diff --git a/ReallifeGamemode.Server/Util/GroupRanks.cs b/ReallifeGamemode.Server/Util/GroupRanks.cs index 440322ac..e9a9e810 100644 --- a/ReallifeGamemode.Server/Util/GroupRanks.cs +++ b/ReallifeGamemode.Server/Util/GroupRanks.cs @@ -4,11 +4,11 @@ using System.Text; namespace ReallifeGamemode.Server.Util { - public enum GroupRank - { - NONE, - MEMBER, - MANAGER, - OWNER - } + public enum GroupRank + { + NONE, + MEMBER, + MANAGER, + OWNER + } } diff --git a/ReallifeGamemode.Server/Util/IBankAccount.cs b/ReallifeGamemode.Server/Util/IBankAccount.cs index 12446266..b82b46d0 100644 --- a/ReallifeGamemode.Server/Util/IBankAccount.cs +++ b/ReallifeGamemode.Server/Util/IBankAccount.cs @@ -4,8 +4,8 @@ using System.Text; namespace ReallifeGamemode.Server.Util { - public interface IBankAccount - { - int Balance { get; set; } - } + public interface IBankAccount + { + int Balance { get; set; } + } } diff --git a/ReallifeGamemode.Server/Util/IBankAccountOwner.cs b/ReallifeGamemode.Server/Util/IBankAccountOwner.cs index be6f7cc2..191f134e 100644 --- a/ReallifeGamemode.Server/Util/IBankAccountOwner.cs +++ b/ReallifeGamemode.Server/Util/IBankAccountOwner.cs @@ -2,10 +2,10 @@ namespace ReallifeGamemode.Server.Util { - public interface IBankAccountOwner - { - string Name { get; } + public interface IBankAccountOwner + { + string Name { get; } - IBankAccount GetBankAccount(DatabaseContext databaseContext = null); - } + IBankAccount GetBankAccount(DatabaseContext databaseContext = null); + } } diff --git a/ReallifeGamemode.Server/Util/IndicatorData.cs b/ReallifeGamemode.Server/Util/IndicatorData.cs index bbc2d5e3..891232a0 100644 --- a/ReallifeGamemode.Server/Util/IndicatorData.cs +++ b/ReallifeGamemode.Server/Util/IndicatorData.cs @@ -1,8 +1,8 @@ namespace ReallifeGamemode.Server.Util { - public class IndicatorData - { - public bool Left { get; set; } = false; - public bool Right { get; set; } = false; - } + public class IndicatorData + { + public bool Left { get; set; } = false; + public bool Right { get; set; } = false; + } } \ No newline at end of file diff --git a/ReallifeGamemode.Server/Util/SmoothThrottle.cs b/ReallifeGamemode.Server/Util/SmoothThrottle.cs index da62bb6f..0da8c2ab 100644 --- a/ReallifeGamemode.Server/Util/SmoothThrottle.cs +++ b/ReallifeGamemode.Server/Util/SmoothThrottle.cs @@ -2,39 +2,39 @@ using GTANetworkAPI; namespace ReallifeGamemode.Server.Util { - public class SmoothThrottleAntiReverse : Script + public class SmoothThrottleAntiReverse : Script + { + [ServerEvent(Event.PlayerExitVehicle)] + public void SmoothThrottleExitEvent(Client player, Vehicle veh) { - [ServerEvent(Event.PlayerExitVehicle)] - public void SmoothThrottleExitEvent(Client player, Vehicle veh) - { - NAPI.ClientEvent.TriggerClientEvent(player, "SmoothThrottle_PlayerExitVehicle", veh); - } - - [ServerEvent(Event.PlayerEnterVehicle)] - public void SmoothThrottleEnterEvent(Client player, Vehicle veh, sbyte seat) - { - NAPI.ClientEvent.TriggerClientEvent(player, "SmoothThrottle_PlayerEnterVehicle", veh, seat); - } - - //You can call these to change settings on player if you want. - //Note that these are toggles, you only need to call them once. - - //This disables/enables the smooth throttle - public static void SetSmoothThrottle(Client player, bool turnedOn) - { - NAPI.ClientEvent.TriggerClientEvent(player, "SmoothThrottle_SetSmoothThrottle", turnedOn); - } - - //This disables/enables anti reverse - public static void SetAntiReverse(Client player, bool turnedOn) - { - NAPI.ClientEvent.TriggerClientEvent(player, "SmoothThrottle_SetAntiReverse", turnedOn); - } - - //This disables/enables both - public static void SetSmoothThrottleAntiReverse(Client player, bool turnedOn) - { - NAPI.ClientEvent.TriggerClientEvent(player, "SmoothThrottle_SetGlobal", turnedOn); - } + NAPI.ClientEvent.TriggerClientEvent(player, "SmoothThrottle_PlayerExitVehicle", veh); } + + [ServerEvent(Event.PlayerEnterVehicle)] + public void SmoothThrottleEnterEvent(Client player, Vehicle veh, sbyte seat) + { + NAPI.ClientEvent.TriggerClientEvent(player, "SmoothThrottle_PlayerEnterVehicle", veh, seat); + } + + //You can call these to change settings on player if you want. + //Note that these are toggles, you only need to call them once. + + //This disables/enables the smooth throttle + public static void SetSmoothThrottle(Client player, bool turnedOn) + { + NAPI.ClientEvent.TriggerClientEvent(player, "SmoothThrottle_SetSmoothThrottle", turnedOn); + } + + //This disables/enables anti reverse + public static void SetAntiReverse(Client player, bool turnedOn) + { + NAPI.ClientEvent.TriggerClientEvent(player, "SmoothThrottle_SetAntiReverse", turnedOn); + } + + //This disables/enables both + public static void SetSmoothThrottleAntiReverse(Client player, bool turnedOn) + { + NAPI.ClientEvent.TriggerClientEvent(player, "SmoothThrottle_SetGlobal", turnedOn); + } + } } \ No newline at end of file diff --git a/ReallifeGamemode.Server/Util/TaxiContract.cs b/ReallifeGamemode.Server/Util/TaxiContract.cs index ba9e5954..a7528ec4 100644 --- a/ReallifeGamemode.Server/Util/TaxiContract.cs +++ b/ReallifeGamemode.Server/Util/TaxiContract.cs @@ -5,12 +5,12 @@ using System.Text; namespace ReallifeGamemode.Server.Util { - class TaxiContract - { - public string Name { get; set; } + class TaxiContract + { + public string Name { get; set; } - public Vector3 Position { get; set; } + public Vector3 Position { get; set; } - public Client Driver { get; set; } - } + public Client Driver { get; set; } + } } diff --git a/ReallifeGamemode.Server/Util/TransactionResult.cs b/ReallifeGamemode.Server/Util/TransactionResult.cs index 9a8d17cf..dc8c2265 100644 --- a/ReallifeGamemode.Server/Util/TransactionResult.cs +++ b/ReallifeGamemode.Server/Util/TransactionResult.cs @@ -4,12 +4,12 @@ using System.Text; namespace ReallifeGamemode.Server.Util { - public enum TransactionResult - { - SUCCESS, - SENDER_NO_BANKACCOUNT, - RECEIVER_NO_BANKACCOUNT, - SENDER_NOT_ENOUGH_MONEY, - NEGATIVE_MONEY_SENT - } + public enum TransactionResult + { + SUCCESS, + SENDER_NO_BANKACCOUNT, + RECEIVER_NO_BANKACCOUNT, + SENDER_NOT_ENOUGH_MONEY, + NEGATIVE_MONEY_SENT + } } diff --git a/ReallifeGamemode.Server/Util/VehicleSync.cs b/ReallifeGamemode.Server/Util/VehicleSync.cs index 526e61d9..de9a8339 100644 --- a/ReallifeGamemode.Server/Util/VehicleSync.cs +++ b/ReallifeGamemode.Server/Util/VehicleSync.cs @@ -3,497 +3,497 @@ using Newtonsoft.Json.Linq; namespace ReallifeGamemode.Server.Util { - //Enums for ease of use - public enum WindowID + //Enums for ease of use + public enum WindowID + { + WindowFrontRight, + WindowFrontLeft, + WindowRearRight, + WindowRearLeft + } + + public enum WindowState + { + WindowFixed, + WindowDown, + WindowBroken + } + + public enum DoorID + { + DoorFrontLeft, + DoorFrontRight, + DoorRearLeft, + DoorRearRight, + DoorHood, + DoorTrunk + } + + public enum DoorState + { + DoorClosed, + DoorOpen, + DoorBroken, + } + + public enum WheelID + { + Wheel0, + Wheel1, + Wheel2, + Wheel3, + Wheel4, + Wheel5, + Wheel6, + Wheel7, + Wheel8, + Wheel9 + } + + public enum WheelState + { + WheelFixed, + WheelBurst, + WheelOnRim, + } + + public class VehicleStreaming : Script + { + //This is the data object which will be synced to vehicles + public class VehicleSyncData { - WindowFrontRight, - WindowFrontLeft, - WindowRearRight, - WindowRearLeft + //Used to bypass some streaming bugs + public Vector3 Position { get; set; } = new Vector3(); + public Vector3 Rotation { get; set; } = new Vector3(); + + //Basics + public float Dirt { get; set; } = 0.0f; + public bool Locked { get; set; } = true; + public bool Engine { get; set; } = false; + + //(Not synced) + //public float BodyHealth { get; set; } = 1000.0f; + //public float EngineHealth { get; set; } = 1000.0f; + + //Doors 0-7 (0 = closed, 1 = open, 2 = broken) (This uses enums so don't worry about it) + public int[] Door { get; set; } = new int[8] { 0, 0, 0, 0, 0, 0, 0, 0 }; + + //Windows (0 = up, 1 = down, 2 = smashed) (This uses enums so don't worry about it) + public int[] Window { get; set; } = new int[4] { 0, 0, 0, 0 }; + + //Wheels 0-7, 45/47 (0 = fixed, 1 = flat, 2 = missing) (This uses enums so don't worry about it) + public int[] Wheel { get; set; } = new int[10] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; } - public enum WindowState + //API functions for people to use + public static void SetVehicleWindowState(Vehicle veh, WindowID window, WindowState state) { - WindowFixed, - WindowDown, - WindowBroken + VehicleSyncData data = GetVehicleSyncData(veh); + if (data == default(VehicleSyncData)) //If data doesn't exist create a new one. This is the process for all API functions + data = new VehicleSyncData(); + + data.Window[(int)window] = (int)state; + UpdateVehicleSyncData(veh, data); + NAPI.ClientEvent.TriggerClientEventInDimension(veh.Dimension, "VehStream_SetVehicleWindowStatus_Single", veh.Handle, (int)window, (int)state); } - public enum DoorID + public static WindowState GetVehicleWindowState(Vehicle veh, WindowID window) { - DoorFrontLeft, - DoorFrontRight, - DoorRearLeft, - DoorRearRight, - DoorHood, - DoorTrunk + VehicleSyncData data = GetVehicleSyncData(veh); + if (data == default(VehicleSyncData)) + { + data = new VehicleSyncData(); + UpdateVehicleSyncData(veh, data); + } + return (WindowState)data.Window[(int)window]; } - public enum DoorState + public static void SetVehicleWheelState(Vehicle veh, WheelID wheel, WheelState state) { - DoorClosed, - DoorOpen, - DoorBroken, + VehicleSyncData data = GetVehicleSyncData(veh); + if (data == default(VehicleSyncData)) + data = new VehicleSyncData(); + + data.Wheel[(int)wheel] = (int)state; + UpdateVehicleSyncData(veh, data); + NAPI.ClientEvent.TriggerClientEventInDimension(veh.Dimension, "VehStream_SetVehicleWheelStatus_Single", veh.Handle, (int)wheel, (int)state); } - public enum WheelID + public static WheelState GetVehicleWheelState(Vehicle veh, WheelID wheel) { - Wheel0, - Wheel1, - Wheel2, - Wheel3, - Wheel4, - Wheel5, - Wheel6, - Wheel7, - Wheel8, - Wheel9 + VehicleSyncData data = GetVehicleSyncData(veh); + if (data == default(VehicleSyncData)) + { + data = new VehicleSyncData(); + UpdateVehicleSyncData(veh, data); + } + return (WheelState)data.Wheel[(int)wheel]; } - public enum WheelState + public static void SetVehicleDirt(Vehicle veh, float dirt) { - WheelFixed, - WheelBurst, - WheelOnRim, + VehicleSyncData data = GetVehicleSyncData(veh); + if (data == default(VehicleSyncData)) + data = new VehicleSyncData(); + + data.Dirt = dirt; + UpdateVehicleSyncData(veh, data); + NAPI.ClientEvent.TriggerClientEventInDimension(veh.Dimension, "VehStream_SetVehicleDirtLevel", veh.Handle, dirt); } - public class VehicleStreaming : Script + public static float GetVehicleDirt(Vehicle veh) { - //This is the data object which will be synced to vehicles - public class VehicleSyncData + VehicleSyncData data = GetVehicleSyncData(veh); + if (data == default(VehicleSyncData)) + { + data = new VehicleSyncData(); + UpdateVehicleSyncData(veh, data); + } + return data.Dirt; + } + + public static void SetDoorState(Vehicle veh, DoorID door, DoorState state) + { + VehicleSyncData data = GetVehicleSyncData(veh); + if (data == default(VehicleSyncData)) + data = new VehicleSyncData(); + + data.Door[(int)door] = (int)state; + UpdateVehicleSyncData(veh, data); + NAPI.ClientEvent.TriggerClientEventInDimension(veh.Dimension, "VehStream_SetVehicleDoorStatus_Single", veh, (int)door, (int)state); + } + + public static DoorState GetDoorState(Vehicle veh, DoorID door) + { + VehicleSyncData data = GetVehicleSyncData(veh); + if (data == default(VehicleSyncData)) + { + data = new VehicleSyncData(); + UpdateVehicleSyncData(veh, data); + } + return (DoorState)data.Door[(int)door]; + } + + public static void SetEngineState(Vehicle veh, bool status) + { + VehicleSyncData data = GetVehicleSyncData(veh); + if (data == default(VehicleSyncData)) + data = new VehicleSyncData(); + + data.Engine = status; + UpdateVehicleSyncData(veh, data); + NAPI.ClientEvent.TriggerClientEventInDimension(veh.Dimension, "VehStream_SetEngineStatus", veh, status); + } + + public static bool GetEngineState(Vehicle veh) + { + VehicleSyncData data = GetVehicleSyncData(veh); + if (data == default(VehicleSyncData)) + { + data = new VehicleSyncData(); + UpdateVehicleSyncData(veh, data); + } + return data.Engine; + } + + public static void SetLockStatus(Vehicle veh, bool status) + { + VehicleSyncData data = GetVehicleSyncData(veh); + if (data == default(VehicleSyncData)) + data = new VehicleSyncData(); + + data.Locked = status; + UpdateVehicleSyncData(veh, data); + NAPI.ClientEvent.TriggerClientEventInDimension(veh.Dimension, "VehStream_SetLockStatus", veh, status); + NAPI.Pools.GetAllPlayers().ForEach(p => + { + if (p.IsInVehicle && p.Vehicle.Handle == veh.Handle) { - //Used to bypass some streaming bugs - public Vector3 Position { get; set; } = new Vector3(); - public Vector3 Rotation { get; set; } = new Vector3(); - - //Basics - public float Dirt { get; set; } = 0.0f; - public bool Locked { get; set; } = true; - public bool Engine { get; set; } = false; - - //(Not synced) - //public float BodyHealth { get; set; } = 1000.0f; - //public float EngineHealth { get; set; } = 1000.0f; - - //Doors 0-7 (0 = closed, 1 = open, 2 = broken) (This uses enums so don't worry about it) - public int[] Door { get; set; } = new int[8] { 0, 0, 0, 0, 0, 0, 0, 0 }; - - //Windows (0 = up, 1 = down, 2 = smashed) (This uses enums so don't worry about it) - public int[] Window { get; set; } = new int[4] { 0, 0, 0, 0 }; - - //Wheels 0-7, 45/47 (0 = fixed, 1 = flat, 2 = missing) (This uses enums so don't worry about it) - public int[] Wheel { get; set; } = new int[10] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + p.TriggerEvent("Vehicle_setLockStatus", status); } + }); + } - //API functions for people to use - public static void SetVehicleWindowState(Vehicle veh, WindowID window, WindowState state) + public static bool GetLockState(Vehicle veh) + { + VehicleSyncData data = GetVehicleSyncData(veh); + if (data == default(VehicleSyncData)) + { + data = new VehicleSyncData(); + UpdateVehicleSyncData(veh, data); + } + return data.Locked; + } + + //Used internally only but publicly available in case any of you need it + public static VehicleSyncData GetVehicleSyncData(Vehicle veh) + { + if (veh != null) + { + if (NAPI.Entity.DoesEntityExist(veh)) { - VehicleSyncData data = GetVehicleSyncData(veh); - if (data == default(VehicleSyncData)) //If data doesn't exist create a new one. This is the process for all API functions - data = new VehicleSyncData(); - - data.Window[(int)window] = (int)state; - UpdateVehicleSyncData(veh, data); - NAPI.ClientEvent.TriggerClientEventInDimension(veh.Dimension, "VehStream_SetVehicleWindowStatus_Single", veh.Handle, (int)window, (int)state); + if (NAPI.Data.HasEntitySharedData(veh.Handle, "VehicleSyncData")) + { + //API converts class objects to JObject so we have to change it back + JObject obj = NAPI.Data.GetEntitySharedData(veh.Handle, "VehicleSyncData"); + return obj.ToObject(); + } } + } - public static WindowState GetVehicleWindowState(Vehicle veh, WindowID window) + return default(VehicleSyncData); //null + } + + //Used internally only but publicly available in case any of you need it + public static bool UpdateVehicleSyncData(Vehicle veh, VehicleSyncData data) + { + if (veh != null) + { + if (NAPI.Entity.DoesEntityExist(veh)) { - VehicleSyncData data = GetVehicleSyncData(veh); - if (data == default(VehicleSyncData)) - { - data = new VehicleSyncData(); - UpdateVehicleSyncData(veh, data); - } - return (WindowState)data.Window[(int)window]; - } - - public static void SetVehicleWheelState(Vehicle veh, WheelID wheel, WheelState state) - { - VehicleSyncData data = GetVehicleSyncData(veh); - if (data == default(VehicleSyncData)) - data = new VehicleSyncData(); - - data.Wheel[(int)wheel] = (int)state; - UpdateVehicleSyncData(veh, data); - NAPI.ClientEvent.TriggerClientEventInDimension(veh.Dimension, "VehStream_SetVehicleWheelStatus_Single", veh.Handle, (int)wheel, (int)state); - } - - public static WheelState GetVehicleWheelState(Vehicle veh, WheelID wheel) - { - VehicleSyncData data = GetVehicleSyncData(veh); - if (data == default(VehicleSyncData)) - { - data = new VehicleSyncData(); - UpdateVehicleSyncData(veh, data); - } - return (WheelState)data.Wheel[(int)wheel]; - } - - public static void SetVehicleDirt(Vehicle veh, float dirt) - { - VehicleSyncData data = GetVehicleSyncData(veh); - if (data == default(VehicleSyncData)) - data = new VehicleSyncData(); - - data.Dirt = dirt; - UpdateVehicleSyncData(veh, data); - NAPI.ClientEvent.TriggerClientEventInDimension(veh.Dimension, "VehStream_SetVehicleDirtLevel", veh.Handle, dirt); - } - - public static float GetVehicleDirt(Vehicle veh) - { - VehicleSyncData data = GetVehicleSyncData(veh); - if (data == default(VehicleSyncData)) - { - data = new VehicleSyncData(); - UpdateVehicleSyncData(veh, data); - } - return data.Dirt; - } - - public static void SetDoorState(Vehicle veh, DoorID door, DoorState state) - { - VehicleSyncData data = GetVehicleSyncData(veh); - if (data == default(VehicleSyncData)) - data = new VehicleSyncData(); - - data.Door[(int)door] = (int)state; - UpdateVehicleSyncData(veh, data); - NAPI.ClientEvent.TriggerClientEventInDimension(veh.Dimension, "VehStream_SetVehicleDoorStatus_Single", veh, (int)door, (int)state); - } - - public static DoorState GetDoorState(Vehicle veh, DoorID door) - { - VehicleSyncData data = GetVehicleSyncData(veh); - if (data == default(VehicleSyncData)) - { - data = new VehicleSyncData(); - UpdateVehicleSyncData(veh, data); - } - return (DoorState)data.Door[(int)door]; - } - - public static void SetEngineState(Vehicle veh, bool status) - { - VehicleSyncData data = GetVehicleSyncData(veh); - if (data == default(VehicleSyncData)) - data = new VehicleSyncData(); - - data.Engine = status; - UpdateVehicleSyncData(veh, data); - NAPI.ClientEvent.TriggerClientEventInDimension(veh.Dimension, "VehStream_SetEngineStatus", veh, status); - } - - public static bool GetEngineState(Vehicle veh) - { - VehicleSyncData data = GetVehicleSyncData(veh); - if (data == default(VehicleSyncData)) - { - data = new VehicleSyncData(); - UpdateVehicleSyncData(veh, data); - } - return data.Engine; - } - - public static void SetLockStatus(Vehicle veh, bool status) - { - VehicleSyncData data = GetVehicleSyncData(veh); - if (data == default(VehicleSyncData)) - data = new VehicleSyncData(); - - data.Locked = status; - UpdateVehicleSyncData(veh, data); - NAPI.ClientEvent.TriggerClientEventInDimension(veh.Dimension, "VehStream_SetLockStatus", veh, status); - NAPI.Pools.GetAllPlayers().ForEach(p => - { - if (p.IsInVehicle && p.Vehicle.Handle == veh.Handle) - { - p.TriggerEvent("Vehicle_setLockStatus", status); - } - }); - } - - public static bool GetLockState(Vehicle veh) - { - VehicleSyncData data = GetVehicleSyncData(veh); - if (data == default(VehicleSyncData)) - { - data = new VehicleSyncData(); - UpdateVehicleSyncData(veh, data); - } - return data.Locked; - } - - //Used internally only but publicly available in case any of you need it - public static VehicleSyncData GetVehicleSyncData(Vehicle veh) - { - if (veh != null) - { - if (NAPI.Entity.DoesEntityExist(veh)) - { - if (NAPI.Data.HasEntitySharedData(veh.Handle, "VehicleSyncData")) - { - //API converts class objects to JObject so we have to change it back - JObject obj = NAPI.Data.GetEntitySharedData(veh.Handle, "VehicleSyncData"); - return obj.ToObject(); - } - } - } - - return default(VehicleSyncData); //null - } - - //Used internally only but publicly available in case any of you need it - public static bool UpdateVehicleSyncData(Vehicle veh, VehicleSyncData data) - { - if (veh != null) - { - if (NAPI.Entity.DoesEntityExist(veh)) - { - if (data != null) - { - data.Position = veh.Position; - data.Rotation = veh.Rotation; - NAPI.Data.SetEntitySharedData(veh, "VehicleSyncData", data); - return true; - } - } - } - return false; - } - - //Called from the client to sync dirt level - [RemoteEvent("VehStream_SetDirtLevel")] - public void VehStreamSetDirtLevel(Client player, Vehicle veh, float dirt) - { - VehicleSyncData data = GetVehicleSyncData(veh); - if (data == default(VehicleSyncData)) - data = new VehicleSyncData(); - - data.Dirt = dirt; - - UpdateVehicleSyncData(veh, data); - - //Re-distribute the goods - NAPI.ClientEvent.TriggerClientEventInDimension(veh.Dimension, "VehStream_SetVehicleDirtLevel", veh.Handle, dirt); - } - - //Called from the client to sync door data - [RemoteEvent("VehStream_SetDoorData")] - public void VehStreamSetDoorData(Client player, Vehicle veh, int door1state, int door2state, int door3state, int door4state, int door5state, int door6state, int door7state, int door8state) - { - VehicleSyncData data = GetVehicleSyncData(veh); - if (data == default(VehicleSyncData)) - data = new VehicleSyncData(); - - data.Door[0] = door1state; - data.Door[1] = door2state; - data.Door[2] = door3state; - data.Door[3] = door4state; - data.Door[4] = door5state; - data.Door[5] = door6state; - data.Door[6] = door7state; - data.Door[7] = door8state; - - UpdateVehicleSyncData(veh, data); - - //Re-distribute the goods - NAPI.ClientEvent.TriggerClientEventInDimension(veh.Dimension, "VehStream_SetVehicleDoorStatus", veh.Handle, door1state, door2state, door3state, door4state, door5state, door6state, door7state, door8state); - } - - //Called from the client to sync window data - [RemoteEvent("VehStream_SetWindowData")] - public void VehStreamSetWindowData(Client player, Vehicle veh, int window1state, int window2state, int window3state, int window4state) - { - VehicleSyncData data = GetVehicleSyncData(veh); - if (data == default(VehicleSyncData)) - data = new VehicleSyncData(); - - data.Window[0] = window1state; - data.Window[1] = window2state; - data.Window[2] = window3state; - data.Window[3] = window4state; - - UpdateVehicleSyncData(veh, data); - - //Re-distribute the goods - NAPI.ClientEvent.TriggerClientEventInDimension(veh.Dimension, "VehStream_SetVehicleWindowStatus", veh.Handle, window1state, window2state, window3state, window4state); - } - - //Called from the client to sync wheel data - [RemoteEvent("VehStream_SetWheelData")] - public void VehStreamSetWheelData(Client player, Vehicle veh, int wheel1state, int wheel2state, int wheel3state, int wheel4state, int wheel5state, int wheel6state, int wheel7state, int wheel8state, int wheel9state, int wheel10state) - { - VehicleSyncData data = GetVehicleSyncData(veh); - if (data == default(VehicleSyncData)) - data = new VehicleSyncData(); - - data.Wheel[0] = wheel1state; - data.Wheel[1] = wheel2state; - data.Wheel[2] = wheel3state; - data.Wheel[3] = wheel4state; - data.Wheel[4] = wheel5state; - data.Wheel[5] = wheel6state; - data.Wheel[6] = wheel7state; - data.Wheel[7] = wheel8state; - data.Wheel[8] = wheel9state; - data.Wheel[9] = wheel10state; - UpdateVehicleSyncData(veh, data); - - //Re-distribute the goods - NAPI.ClientEvent.TriggerClientEventInDimension(veh.Dimension, "VehStream_SetVehicleWheelStatus", veh.Handle, wheel1state, wheel2state, wheel3state, wheel4state, wheel5state, wheel6state, wheel7state, wheel8state, wheel9state, wheel10state); - } - - //Other events - [ServerEvent(Event.PlayerEnterVehicleAttempt)] - public void VehStreamEnterAttempt(Client player, Vehicle veh, sbyte seat) - { - VehicleSyncData data = GetVehicleSyncData(veh); - if (data == default(VehicleSyncData)) - data = new VehicleSyncData(); - - UpdateVehicleSyncData(veh, data); - NAPI.ClientEvent.TriggerClientEvent(player, "VehStream_PlayerEnterVehicleAttempt", veh.Handle.Value, seat); - } - - [ServerEvent(Event.PlayerExitVehicleAttempt)] - public void VehStreamExitAttempt(Client player, Vehicle veh) - { - VehicleSyncData data = GetVehicleSyncData(veh); - if (data == default(VehicleSyncData)) - data = new VehicleSyncData(); - + if (data != null) + { data.Position = veh.Position; data.Rotation = veh.Rotation; - - UpdateVehicleSyncData(veh, data); - NAPI.ClientEvent.TriggerClientEvent(player, "VehStream_PlayerExitVehicleAttempt", veh); - } - - [ServerEvent(Event.PlayerExitVehicle)] - public void VehStreamExit(Client player, Vehicle veh) - { - VehicleSyncData data = GetVehicleSyncData(veh); - if (data == default(VehicleSyncData)) - data = new VehicleSyncData(); - - data.Position = veh.Position; - data.Rotation = veh.Rotation; - - UpdateVehicleSyncData(veh, data); - NAPI.ClientEvent.TriggerClientEvent(player, "VehStream_PlayerExitVehicle", veh.Handle.Value); - } - - [ServerEvent(Event.PlayerEnterVehicle)] - public void VehStreamEnter(Client player, Vehicle veh, sbyte seat) - { - VehicleSyncData data = GetVehicleSyncData(veh); - if (data == default(VehicleSyncData)) - data = new VehicleSyncData(); - - UpdateVehicleSyncData(veh, data); - NAPI.ClientEvent.TriggerClientEvent(player, "VehStream_PlayerEnterVehicle", veh, seat); - player.TriggerEvent("Vehicle_setLockStatus", data.Locked); - } - - //[ServerEvent(Event.VehicleDamage)] - //public void VehDamage(Vehicle veh, float bodyHealthLoss, float engineHealthLoss) - //{ - // VehicleSyncData data = GetVehicleSyncData(veh); - // if (data == default(VehicleSyncData)) - // data = new VehicleSyncData(); - - // data.BodyHealth -= bodyHealthLoss; - // data.EngineHealth -= engineHealthLoss; - - // UpdateVehicleSyncData(veh, data); - - // if (NAPI.Vehicle.GetVehicleDriver(veh) != default(Client)) //Doesn't work? - // NAPI.ClientEvent.TriggerClientEvent(NAPI.Vehicle.GetVehicleDriver(veh), "VehStream_PlayerExitVehicleAttempt", veh); - //} - - [ServerEvent(Event.VehicleDoorBreak)] - public void VehDoorBreak(Vehicle veh, int index) - { - VehicleSyncData data = GetVehicleSyncData(veh); - if (data == default(VehicleSyncData)) - data = new VehicleSyncData(); - - data.Door[index] = 2; - - UpdateVehicleSyncData(veh, data); - - NAPI.ClientEvent.TriggerClientEventInDimension(veh.Dimension, "VehStream_SetVehicleDoorStatus", veh.Handle, data.Door[0], data.Door[1], data.Door[2], data.Door[3], data.Door[4], data.Door[5], data.Door[6], data.Door[7]); - } - - // INDICATORS - - [RemoteEvent("CLIENT:toggleLeftIndicator")] - public void ToggleLeftIndicator(Client player) - { - if (!player.IsInVehicle || player.VehicleSeat != -1) return; - Vehicle veh = player.Vehicle; - - if (!(veh.GetData("indicatorData") is IndicatorData data)) data = new IndicatorData(); - - if (data.Left && data.Right) - { - data.Right = false; - } - else - { - data.Left = !data.Left; - data.Right = false; - } - - veh.SetData("indicatorData", data); - NAPI.ClientEvent.TriggerClientEventForAll("SERVER:setIndicatorStatus", veh.Handle.Value, data.Left, data.Right); - } - - [RemoteEvent("CLIENT:toggleRightIndicator")] - public void ToggleRightIndicator(Client player) - { - if (!player.IsInVehicle || player.VehicleSeat != -1) return; - Vehicle veh = player.Vehicle; - - if (!(veh.GetData("indicatorData") is IndicatorData data)) data = new IndicatorData(); - - if (data.Left && data.Right) - { - data.Left = false; - } - else - { - data.Right = !data.Right; - data.Left = false; - } - - veh.SetData("indicatorData", data); - NAPI.ClientEvent.TriggerClientEventForAll("SERVER:setIndicatorStatus", veh.Handle.Value, data.Left, data.Right); - } - - [RemoteEvent("CLIENT:toggleWarningIndicator")] - public void ToggleWarningIndicator(Client player) - { - if (!player.IsInVehicle || player.VehicleSeat != -1) return; - Vehicle veh = player.Vehicle; - - if (!(veh.GetData("indicatorData") is IndicatorData data)) data = new IndicatorData(); - - if (data.Right && data.Left) - { - data.Right = false; - data.Left = false; - } - else - { - data.Right = true; - data.Left = true; - } - - veh.SetData("indicatorData", data); - NAPI.ClientEvent.TriggerClientEventForAll("SERVER:setIndicatorStatus", veh.Handle.Value, data.Left, data.Right); + NAPI.Data.SetEntitySharedData(veh, "VehicleSyncData", data); + return true; + } } + } + return false; } + + //Called from the client to sync dirt level + [RemoteEvent("VehStream_SetDirtLevel")] + public void VehStreamSetDirtLevel(Client player, Vehicle veh, float dirt) + { + VehicleSyncData data = GetVehicleSyncData(veh); + if (data == default(VehicleSyncData)) + data = new VehicleSyncData(); + + data.Dirt = dirt; + + UpdateVehicleSyncData(veh, data); + + //Re-distribute the goods + NAPI.ClientEvent.TriggerClientEventInDimension(veh.Dimension, "VehStream_SetVehicleDirtLevel", veh.Handle, dirt); + } + + //Called from the client to sync door data + [RemoteEvent("VehStream_SetDoorData")] + public void VehStreamSetDoorData(Client player, Vehicle veh, int door1state, int door2state, int door3state, int door4state, int door5state, int door6state, int door7state, int door8state) + { + VehicleSyncData data = GetVehicleSyncData(veh); + if (data == default(VehicleSyncData)) + data = new VehicleSyncData(); + + data.Door[0] = door1state; + data.Door[1] = door2state; + data.Door[2] = door3state; + data.Door[3] = door4state; + data.Door[4] = door5state; + data.Door[5] = door6state; + data.Door[6] = door7state; + data.Door[7] = door8state; + + UpdateVehicleSyncData(veh, data); + + //Re-distribute the goods + NAPI.ClientEvent.TriggerClientEventInDimension(veh.Dimension, "VehStream_SetVehicleDoorStatus", veh.Handle, door1state, door2state, door3state, door4state, door5state, door6state, door7state, door8state); + } + + //Called from the client to sync window data + [RemoteEvent("VehStream_SetWindowData")] + public void VehStreamSetWindowData(Client player, Vehicle veh, int window1state, int window2state, int window3state, int window4state) + { + VehicleSyncData data = GetVehicleSyncData(veh); + if (data == default(VehicleSyncData)) + data = new VehicleSyncData(); + + data.Window[0] = window1state; + data.Window[1] = window2state; + data.Window[2] = window3state; + data.Window[3] = window4state; + + UpdateVehicleSyncData(veh, data); + + //Re-distribute the goods + NAPI.ClientEvent.TriggerClientEventInDimension(veh.Dimension, "VehStream_SetVehicleWindowStatus", veh.Handle, window1state, window2state, window3state, window4state); + } + + //Called from the client to sync wheel data + [RemoteEvent("VehStream_SetWheelData")] + public void VehStreamSetWheelData(Client player, Vehicle veh, int wheel1state, int wheel2state, int wheel3state, int wheel4state, int wheel5state, int wheel6state, int wheel7state, int wheel8state, int wheel9state, int wheel10state) + { + VehicleSyncData data = GetVehicleSyncData(veh); + if (data == default(VehicleSyncData)) + data = new VehicleSyncData(); + + data.Wheel[0] = wheel1state; + data.Wheel[1] = wheel2state; + data.Wheel[2] = wheel3state; + data.Wheel[3] = wheel4state; + data.Wheel[4] = wheel5state; + data.Wheel[5] = wheel6state; + data.Wheel[6] = wheel7state; + data.Wheel[7] = wheel8state; + data.Wheel[8] = wheel9state; + data.Wheel[9] = wheel10state; + UpdateVehicleSyncData(veh, data); + + //Re-distribute the goods + NAPI.ClientEvent.TriggerClientEventInDimension(veh.Dimension, "VehStream_SetVehicleWheelStatus", veh.Handle, wheel1state, wheel2state, wheel3state, wheel4state, wheel5state, wheel6state, wheel7state, wheel8state, wheel9state, wheel10state); + } + + //Other events + [ServerEvent(Event.PlayerEnterVehicleAttempt)] + public void VehStreamEnterAttempt(Client player, Vehicle veh, sbyte seat) + { + VehicleSyncData data = GetVehicleSyncData(veh); + if (data == default(VehicleSyncData)) + data = new VehicleSyncData(); + + UpdateVehicleSyncData(veh, data); + NAPI.ClientEvent.TriggerClientEvent(player, "VehStream_PlayerEnterVehicleAttempt", veh.Handle.Value, seat); + } + + [ServerEvent(Event.PlayerExitVehicleAttempt)] + public void VehStreamExitAttempt(Client player, Vehicle veh) + { + VehicleSyncData data = GetVehicleSyncData(veh); + if (data == default(VehicleSyncData)) + data = new VehicleSyncData(); + + data.Position = veh.Position; + data.Rotation = veh.Rotation; + + UpdateVehicleSyncData(veh, data); + NAPI.ClientEvent.TriggerClientEvent(player, "VehStream_PlayerExitVehicleAttempt", veh); + } + + [ServerEvent(Event.PlayerExitVehicle)] + public void VehStreamExit(Client player, Vehicle veh) + { + VehicleSyncData data = GetVehicleSyncData(veh); + if (data == default(VehicleSyncData)) + data = new VehicleSyncData(); + + data.Position = veh.Position; + data.Rotation = veh.Rotation; + + UpdateVehicleSyncData(veh, data); + NAPI.ClientEvent.TriggerClientEvent(player, "VehStream_PlayerExitVehicle", veh.Handle.Value); + } + + [ServerEvent(Event.PlayerEnterVehicle)] + public void VehStreamEnter(Client player, Vehicle veh, sbyte seat) + { + VehicleSyncData data = GetVehicleSyncData(veh); + if (data == default(VehicleSyncData)) + data = new VehicleSyncData(); + + UpdateVehicleSyncData(veh, data); + NAPI.ClientEvent.TriggerClientEvent(player, "VehStream_PlayerEnterVehicle", veh, seat); + player.TriggerEvent("Vehicle_setLockStatus", data.Locked); + } + + //[ServerEvent(Event.VehicleDamage)] + //public void VehDamage(Vehicle veh, float bodyHealthLoss, float engineHealthLoss) + //{ + // VehicleSyncData data = GetVehicleSyncData(veh); + // if (data == default(VehicleSyncData)) + // data = new VehicleSyncData(); + + // data.BodyHealth -= bodyHealthLoss; + // data.EngineHealth -= engineHealthLoss; + + // UpdateVehicleSyncData(veh, data); + + // if (NAPI.Vehicle.GetVehicleDriver(veh) != default(Client)) //Doesn't work? + // NAPI.ClientEvent.TriggerClientEvent(NAPI.Vehicle.GetVehicleDriver(veh), "VehStream_PlayerExitVehicleAttempt", veh); + //} + + [ServerEvent(Event.VehicleDoorBreak)] + public void VehDoorBreak(Vehicle veh, int index) + { + VehicleSyncData data = GetVehicleSyncData(veh); + if (data == default(VehicleSyncData)) + data = new VehicleSyncData(); + + data.Door[index] = 2; + + UpdateVehicleSyncData(veh, data); + + NAPI.ClientEvent.TriggerClientEventInDimension(veh.Dimension, "VehStream_SetVehicleDoorStatus", veh.Handle, data.Door[0], data.Door[1], data.Door[2], data.Door[3], data.Door[4], data.Door[5], data.Door[6], data.Door[7]); + } + + // INDICATORS + + [RemoteEvent("CLIENT:toggleLeftIndicator")] + public void ToggleLeftIndicator(Client player) + { + if (!player.IsInVehicle || player.VehicleSeat != -1) return; + Vehicle veh = player.Vehicle; + + if (!(veh.GetData("indicatorData") is IndicatorData data)) data = new IndicatorData(); + + if (data.Left && data.Right) + { + data.Right = false; + } + else + { + data.Left = !data.Left; + data.Right = false; + } + + veh.SetData("indicatorData", data); + NAPI.ClientEvent.TriggerClientEventForAll("SERVER:setIndicatorStatus", veh.Handle.Value, data.Left, data.Right); + } + + [RemoteEvent("CLIENT:toggleRightIndicator")] + public void ToggleRightIndicator(Client player) + { + if (!player.IsInVehicle || player.VehicleSeat != -1) return; + Vehicle veh = player.Vehicle; + + if (!(veh.GetData("indicatorData") is IndicatorData data)) data = new IndicatorData(); + + if (data.Left && data.Right) + { + data.Left = false; + } + else + { + data.Right = !data.Right; + data.Left = false; + } + + veh.SetData("indicatorData", data); + NAPI.ClientEvent.TriggerClientEventForAll("SERVER:setIndicatorStatus", veh.Handle.Value, data.Left, data.Right); + } + + [RemoteEvent("CLIENT:toggleWarningIndicator")] + public void ToggleWarningIndicator(Client player) + { + if (!player.IsInVehicle || player.VehicleSeat != -1) return; + Vehicle veh = player.Vehicle; + + if (!(veh.GetData("indicatorData") is IndicatorData data)) data = new IndicatorData(); + + if (data.Right && data.Left) + { + data.Right = false; + data.Left = false; + } + else + { + data.Right = true; + data.Left = true; + } + + veh.SetData("indicatorData", data); + NAPI.ClientEvent.TriggerClientEventForAll("SERVER:setIndicatorStatus", veh.Handle.Value, data.Left, data.Right); + } + } } diff --git a/ReallifeGamemode.Server/Wanted/Jail.cs b/ReallifeGamemode.Server/Wanted/Jail.cs index 19bd1bbb..d5d9d5c9 100644 --- a/ReallifeGamemode.Server/Wanted/Jail.cs +++ b/ReallifeGamemode.Server/Wanted/Jail.cs @@ -8,147 +8,147 @@ using ReallifeGamemode.Server.Models; namespace ReallifeGamemode.Server.Wanted { - public class Jail + public class Jail + { + private static Dictionary Jailtime { get; set; } = new Dictionary(); //time in seconds + + + public static void Check_PutBehindBars(Client client) { - public static Dictionary jailtime { get; set; } = new Dictionary(); //time in seconds + User user = client.GetUser(); + if (user.JailTime > 0) + { + Random rnd = new Random(); + int rndInt = rnd.Next(1, 3); + if (rndInt == 1) + client.Position = new Vector3(458.9842, -997.2126, 24.91485); //send client to jail + if (rndInt == 2) + client.Position = new Vector3(459.696, -994.3766, 24.91486); //send client to jail + if (rndInt == 3) + client.Position = new Vector3(458.3372, -1001.258, 24.91485); //send client to jail - - public static void Check_PutBehindBars(Client client) + Jailtime[user.Id] = user.JailTime; // 54 sec for each wanted star -> in total 45min for 50 Wanteds + return; + } + if (user.Wanteds <= 0) + return; + foreach (var copClient in NAPI.Pools.GetAllPlayers()) + { + User cop = copClient.GetUser(); + if (cop?.FactionId == 1 || cop?.FactionId == 3) { - User user = client.GetUser(); - if (user.JailTime > 0) + if (cop.GetData("duty") && copClient.Position.DistanceTo2D(copClient.Position) <= 200) + { + Random rnd = new Random(); + int rndInt = rnd.Next(1, 3); + if (rndInt == 1) + client.Position = new Vector3(458.9842, -997.2126, 24.91485); //send client to jail + if (rndInt == 2) + client.Position = new Vector3(459.696, -994.3766, 24.91486); //send client to jail + if (rndInt == 3) + client.Position = new Vector3(458.3372, -1001.258, 24.91485); //send client to jail + + + using (var dbContext = new DatabaseContext()) { - Random rnd = new Random(); - int rndInt = rnd.Next(1, 3); - if (rndInt == 1) - client.Position = new Vector3(458.9842, -997.2126, 24.91485); //send client to jail - if (rndInt == 2) - client.Position = new Vector3(459.696, -994.3766, 24.91486); //send client to jail - if (rndInt == 3) - client.Position = new Vector3(458.3372, -1001.258, 24.91485); //send client to jail - - jailtime[user.Id] = user.JailTime; // 54 sec for each wanted star -> in total 45min for 50 Wanteds - return; - } - if (user.Wanteds <= 0) - return; - foreach (var copClient in NAPI.Pools.GetAllPlayers()) - { - User cop = copClient.GetUser(); - if (cop?.FactionId == 1 || cop?.FactionId == 3) - { - if (cop.GetData("duty") && copClient.Position.DistanceTo2D(copClient.Position) <= 200) - { - Random rnd = new Random(); - int rndInt = rnd.Next(1, 3); - if (rndInt == 1) - client.Position = new Vector3(458.9842, -997.2126, 24.91485); //send client to jail - if (rndInt == 2) - client.Position = new Vector3(459.696, -994.3766, 24.91486); //send client to jail - if (rndInt == 3) - client.Position = new Vector3(458.3372, -1001.258, 24.91485); //send client to jail - - - using (var dbContext = new DatabaseContext()) - { - client.GetUser(dbContext).JailTime = user.Wanteds * 54; // 54 sec for each wanted star -> in total 45min for 50 Wanteds - client.GetUser(dbContext).Wanteds = 0; - dbContext.SaveChanges(); - } - - jailtime[user.Id] = user.Wanteds * 54; // 54 sec for each wanted star -> in total 45min for 50 Wanteds - } - } + client.GetUser(dbContext).JailTime = user.Wanteds * 54; // 54 sec for each wanted star -> in total 45min for 50 Wanteds + client.GetUser(dbContext).Wanteds = 0; + dbContext.SaveChanges(); } + Jailtime[user.Id] = user.Wanteds * 54; // 54 sec for each wanted star -> in total 45min for 50 Wanteds + } } - - public static void JailTimer() - { - System.Timers.Timer timer = new System.Timers.Timer(60000); - System.Timers.Timer brakeOut = new System.Timers.Timer(10000); - System.Timers.Timer jailIn = new System.Timers.Timer(2500); - timer.Start(); - brakeOut.Start(); - jailIn.Start(); - timer.Elapsed += Timer_Elapsed; - brakeOut.Elapsed += brakeOut_Elapsed; - jailIn.Elapsed += jailIn_Elapsed; - } - - private static void jailIn_Elapsed(object sender, System.Timers.ElapsedEventArgs e) - { - foreach (var player in NAPI.Pools.GetAllPlayers()) - { - User user = player.GetUser(); - if (!jailtime.ContainsKey(user.Id)) - { - foreach (var copPlayer in NAPI.Pools.GetAllPlayers()) - { - User cop = copPlayer.GetUser(); - if (cop.GetData("duty") && copPlayer.Position.DistanceTo2D(player.Position) <= 500) - { - if (player.Position.DistanceTo2D(new Vector3(458.9842, -997.2126, 24.91485)) <= 7) - { - if (player.Position.DistanceTo2D(copPlayer.Position) < 5) - { - Check_PutBehindBars(player); - } - } - - } - - } - } - } - } - - private static void brakeOut_Elapsed(object sender, System.Timers.ElapsedEventArgs e) - { - foreach (var player in NAPI.Pools.GetAllPlayers()) - { - User user = player.GetUser(); - - if (player.Position.DistanceTo2D(new Vector3(458.9842, -997.2126, 24.91485)) > 7 && jailtime.ContainsKey(user.Id)) - { - using (var dbContext = new DatabaseContext()) - { - user = player.GetUser(dbContext); - user.GiveWanteds(null, 50, "Knast-Ausbruch"); - dbContext.SaveChanges(); - jailtime.Remove(user.Id); - } - - } - } - } - - private static void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) - { - foreach (var player in NAPI.Pools.GetAllPlayers()) - { - User user = player.GetUser(); - if (jailtime.ContainsKey(user.Id)) - { - - if (user.JailTime <= 0) - { - player.Position = new Vector3(461.7256, -988.6035, 24.91487); - jailtime.Remove(user.Id); - return; - } - if (user.JailTime > 0) - { - using (var dbContext = new DatabaseContext()) - { - player.GetUser(dbContext).JailTime -= 60; - dbContext.SaveChanges(); - } - } - } - - } - } + } } + + public static void JailTimer() + { + System.Timers.Timer timer = new System.Timers.Timer(60000); + System.Timers.Timer brakeOut = new System.Timers.Timer(10000); + System.Timers.Timer jailIn = new System.Timers.Timer(2500); + timer.Start(); + brakeOut.Start(); + jailIn.Start(); + timer.Elapsed += Timer_Elapsed; + brakeOut.Elapsed += BrakeOut_Elapsed; + jailIn.Elapsed += JailIn_Elapsed; + } + + private static void JailIn_Elapsed(object sender, System.Timers.ElapsedEventArgs e) + { + foreach (var player in NAPI.Pools.GetAllPlayers()) + { + User user = player.GetUser(); + if (!Jailtime.ContainsKey(user.Id)) + { + foreach (var copPlayer in NAPI.Pools.GetAllPlayers()) + { + User cop = copPlayer.GetUser(); + if (cop.GetData("duty") && copPlayer.Position.DistanceTo2D(player.Position) <= 500) + { + if (player.Position.DistanceTo2D(new Vector3(458.9842, -997.2126, 24.91485)) <= 7) + { + if (player.Position.DistanceTo2D(copPlayer.Position) < 5) + { + Check_PutBehindBars(player); + } + } + + } + + } + } + } + } + + private static void BrakeOut_Elapsed(object sender, System.Timers.ElapsedEventArgs e) + { + foreach (var player in NAPI.Pools.GetAllPlayers()) + { + User user = player.GetUser(); + + if (player.Position.DistanceTo2D(new Vector3(458.9842, -997.2126, 24.91485)) > 7 && Jailtime.ContainsKey(user.Id)) + { + using (var dbContext = new DatabaseContext()) + { + user = player.GetUser(dbContext); + user.GiveWanteds(null, 50, "Knast-Ausbruch"); + dbContext.SaveChanges(); + Jailtime.Remove(user.Id); + } + + } + } + } + + private static void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) + { + foreach (var player in NAPI.Pools.GetAllPlayers()) + { + User user = player.GetUser(); + if (Jailtime.ContainsKey(user.Id)) + { + + if (user.JailTime <= 0) + { + player.Position = new Vector3(461.7256, -988.6035, 24.91487); + Jailtime.Remove(user.Id); + return; + } + if (user.JailTime > 0) + { + using (var dbContext = new DatabaseContext()) + { + player.GetUser(dbContext).JailTime -= 60; + dbContext.SaveChanges(); + } + } + } + + } + } + + } } diff --git a/ReallifeGamemode.Server/Wanted/WantedEscapeTimer.cs b/ReallifeGamemode.Server/Wanted/WantedEscapeTimer.cs index 507c116a..a1860c5c 100644 --- a/ReallifeGamemode.Server/Wanted/WantedEscapeTimer.cs +++ b/ReallifeGamemode.Server/Wanted/WantedEscapeTimer.cs @@ -17,69 +17,69 @@ using ReallifeGamemode.Server.Services; namespace ReallifeGamemode.Server.Wanted { - public class WantedEscapeTimer + public class WantedEscapeTimer + { + + public static Dictionary waTimer { get; set; } = new Dictionary(); //zeit in ms + + public static void WantedTimer() { - - public static Dictionary waTimer { get; set; } = new Dictionary(); //zeit in ms - - public static void WantedTimer() - { - System.Timers.Timer timer = new System.Timers.Timer(2500); - timer.Start(); - timer.Elapsed += Timer_Elapsed; - } - - public static void ResetWantedTimeToElapse(Client client) - { - User user = client.GetUser(); - if (user.FactionId == 1 || user.FactionId == 3) - return; - - waTimer[user.Id] = 300000; - } - - private static void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) - { - foreach (var player in NAPI.Pools.GetAllPlayers()) - { - User user = player.GetUser(); - if(user.Wanteds > 0) - { - if (!waTimer.ContainsKey(user.Id)) - ResetWantedTimeToElapse(player); - - bool isNearCop = false; - foreach (var playerCop in NAPI.Pools.GetAllPlayers()) - { - User cop = playerCop.GetUser(); - if (cop.FactionId == 1 || cop.FactionId == 3) - { - if (cop.GetData("duty") && playerCop.Position.DistanceTo2D(player.Position) <= 500) - { - //Schriftzug 'abgetaucht' zerstören :( - isNearCop = true; - break; - - } - //Hier abgetaucht schriftzug einfügen :) - } - } - - if (waTimer[user.Id] <= 0) - { - ResetWantedTimeToElapse(player); - using (var dbContext = new DatabaseContext()) - { - player.GetUser(dbContext).Wanteds -= 1; - dbContext.SaveChanges(); - } - - } - - if (!isNearCop) - waTimer[user.Id] -= 2500; - } - } - } + System.Timers.Timer timer = new System.Timers.Timer(2500); + timer.Start(); + timer.Elapsed += Timer_Elapsed; } + + public static void ResetWantedTimeToElapse(Client client) + { + User user = client.GetUser(); + if (user.FactionId == 1 || user.FactionId == 3) + return; + + waTimer[user.Id] = 300000; + } + + private static void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) + { + foreach (var player in NAPI.Pools.GetAllPlayers()) + { + User user = player.GetUser(); + if (user.Wanteds > 0) + { + if (!waTimer.ContainsKey(user.Id)) + ResetWantedTimeToElapse(player); + + bool isNearCop = false; + foreach (var playerCop in NAPI.Pools.GetAllPlayers()) + { + User cop = playerCop.GetUser(); + if (cop.FactionId == 1 || cop.FactionId == 3) + { + if (cop.GetData("duty") && playerCop.Position.DistanceTo2D(player.Position) <= 500) + { + //Schriftzug 'abgetaucht' zerstören :( + isNearCop = true; + break; + + } + //Hier abgetaucht schriftzug einfügen :) + } + } + + if (waTimer[user.Id] <= 0) + { + ResetWantedTimeToElapse(player); + using (var dbContext = new DatabaseContext()) + { + player.GetUser(dbContext).Wanteds -= 1; + dbContext.SaveChanges(); + } + + } + + if (!isNearCop) + waTimer[user.Id] -= 2500; + } + } + } + } }