From e0a34d8f0093532a093f5d9bf32d525ac36e62d0 Mon Sep 17 00:00:00 2001 From: VegaZ Date: Sun, 11 Apr 2021 19:28:12 +0200 Subject: [PATCH 01/59] Log UserWeapon --- .../Entities/UserWeapon.cs | 25 +++++++++++++++ ReallifeGamemode.Database/Entities/Weapon.cs | 20 ++++++++++++ .../Models/DatabaseContext.cs | 12 +++---- .../Managers/PositionManager.cs | 9 ++++++ .../Managers/ShopManager.cs | 1 + .../Shop/Ammunation/Ammunation.cs | 31 +++++++++++++++++++ 6 files changed, 92 insertions(+), 6 deletions(-) create mode 100644 ReallifeGamemode.Database/Entities/UserWeapon.cs create mode 100644 ReallifeGamemode.Database/Entities/Weapon.cs create mode 100644 ReallifeGamemode.Server/Shop/Ammunation/Ammunation.cs diff --git a/ReallifeGamemode.Database/Entities/UserWeapon.cs b/ReallifeGamemode.Database/Entities/UserWeapon.cs new file mode 100644 index 00000000..d981f8b6 --- /dev/null +++ b/ReallifeGamemode.Database/Entities/UserWeapon.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Text; + +namespace ReallifeGamemode.Database.Entities +{ + public partial class UserWeapon + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } + + [ForeignKey("User")] + public int UserId { get; set; } + public User User { get; set; } + + [ForeignKey("Weapon")] + public int WeaponId { get; set; } + public Weapon Weapon { get; set; } + + public int Ammo { get; set; } + } +} diff --git a/ReallifeGamemode.Database/Entities/Weapon.cs b/ReallifeGamemode.Database/Entities/Weapon.cs new file mode 100644 index 00000000..d01e2686 --- /dev/null +++ b/ReallifeGamemode.Database/Entities/Weapon.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Text; + +namespace ReallifeGamemode.Database.Entities +{ + public partial class Weapon + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } + public string WeaponModel { get; set; } + public string Category { get; set; } + public int SlotID { get; set; } + public int Ammo { get; set; } + public float Price { get; set; } + } +} diff --git a/ReallifeGamemode.Database/Models/DatabaseContext.cs b/ReallifeGamemode.Database/Models/DatabaseContext.cs index 63a65d63..0846054b 100644 --- a/ReallifeGamemode.Database/Models/DatabaseContext.cs +++ b/ReallifeGamemode.Database/Models/DatabaseContext.cs @@ -74,6 +74,8 @@ namespace ReallifeGamemode.Database.Models public DbSet UserVehicles { get; set; } public DbSet UserBankAccounts { get; set; } + public DbSet UserWeapons { get; set; } + //Inventar public DbSet UserItems { get; set; } @@ -85,8 +87,12 @@ namespace ReallifeGamemode.Database.Models public DbSet FactionVehicles { get; set; } //Shops + public DbSet ShopClothes { get; set; } + public DbSet ShopItems { get; set; } + public DbSet Weapons { get; set; } //Logs + //public DbSet BanLogs { get; set; } public DbSet BankAccountTransactionLogs { get; set; } public DbSet DeathLogs { get; set; } @@ -155,12 +161,6 @@ namespace ReallifeGamemode.Database.Models //Gangwar public DbSet Turfs { get; set; } - //ClothesShop - public DbSet ShopClothes { get; set; } - - //ItemShop - public DbSet ShopItems { get; set; } - //Server Variablen public DbSet ServerVariables { get; set; } } diff --git a/ReallifeGamemode.Server/Managers/PositionManager.cs b/ReallifeGamemode.Server/Managers/PositionManager.cs index ec0ea301..5b1eab84 100644 --- a/ReallifeGamemode.Server/Managers/PositionManager.cs +++ b/ReallifeGamemode.Server/Managers/PositionManager.cs @@ -6,6 +6,7 @@ using ReallifeGamemode.Server.Shop.SevenEleven; using ReallifeGamemode.Server.Shop.Friseur; using ReallifeGamemode.Server.Util; using ReallifeGamemode.Server.Extensions; +using ReallifeGamemode.Server.Shop.Ammunation; namespace ReallifeGamemode.Server.Managers { @@ -29,6 +30,8 @@ namespace ReallifeGamemode.Server.Managers public static List cuffPoints = new List(); + public static List AmmunationPoints = new List(); + public static void LoadPositionManager() { #region DutyPoints @@ -407,3 +410,9 @@ public class ElevatorPoint public int FactionId { get; set; } public string Stage { get; set; } } + +public class AmmunationPoint +{ + public Vector3 Position { get; set; } + public Ammunation Ammunation { get; set; } +} diff --git a/ReallifeGamemode.Server/Managers/ShopManager.cs b/ReallifeGamemode.Server/Managers/ShopManager.cs index 6a94a4af..f21470fb 100644 --- a/ReallifeGamemode.Server/Managers/ShopManager.cs +++ b/ReallifeGamemode.Server/Managers/ShopManager.cs @@ -14,6 +14,7 @@ namespace ReallifeGamemode.Server.Managers public static List clotheStores = new List(); public static List itemShops = new List(); public static List FriseurStores = new List(); + public static List Ammunations = new List(); public static void LoadClotheShops() { diff --git a/ReallifeGamemode.Server/Shop/Ammunation/Ammunation.cs b/ReallifeGamemode.Server/Shop/Ammunation/Ammunation.cs new file mode 100644 index 00000000..db46ed4e --- /dev/null +++ b/ReallifeGamemode.Server/Shop/Ammunation/Ammunation.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using GTANetworkAPI; +using ReallifeGamemode.Database.Entities; +using ReallifeGamemode.Database.Models; + +namespace ReallifeGamemode.Server.Shop.Ammunation +{ + public class Ammunation + { + public Vector3 vector { get; set; } + public List weaponList = new List(); + + public Ammunation(Vector3 position) + { + this.vector = vector; + LoadWeapons(); + } + + public void LoadWeapons() + { + using (var dbContext = new DatabaseContext()) + { + weaponList = dbContext.Weapons.ToList(); + } + } + + } +} From 016eacf7091b8e7001e4b2d37d3b54438bbea814 Mon Sep 17 00:00:00 2001 From: VegaZ Date: Sun, 11 Apr 2021 23:59:14 +0200 Subject: [PATCH 02/59] Ammu2 --- .../Interaction/ammunation/ammunation.ts | 1 + ReallifeGamemode.Server/Events/Key.cs | 5 ++++ .../Shop/Ammunation/Ammunation.cs | 26 +++++++++++++++++++ 3 files changed, 32 insertions(+) create mode 100644 ReallifeGamemode.Client/Interaction/ammunation/ammunation.ts diff --git a/ReallifeGamemode.Client/Interaction/ammunation/ammunation.ts b/ReallifeGamemode.Client/Interaction/ammunation/ammunation.ts new file mode 100644 index 00000000..5f282702 --- /dev/null +++ b/ReallifeGamemode.Client/Interaction/ammunation/ammunation.ts @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ReallifeGamemode.Server/Events/Key.cs b/ReallifeGamemode.Server/Events/Key.cs index 92737c1e..8f489190 100644 --- a/ReallifeGamemode.Server/Events/Key.cs +++ b/ReallifeGamemode.Server/Events/Key.cs @@ -235,6 +235,7 @@ namespace ReallifeGamemode.Server.Events ItemshopPoint nearestItemShopPoint = PositionManager.itemshopPoints.Find(s => s.Position.DistanceTo(player.Position) <= 1.5); JobPoint nearestJobPoint = PositionManager.JobPoints.Find(s => s.Position.DistanceTo(player.Position) <= 1.6); Player nearestCuffPlayer = PositionManager.cuffPoints.Find(s => s.Position.DistanceTo(player.Position) <= 1.6 && user.GetData("duty")); + AmmunationPoint nearestAmmunationPoint = PositionManager.AmmunationPoints.Find(s => s.Position.DistanceTo(player.Position) <= 1.5); if (user?.FactionId != null) { @@ -516,6 +517,10 @@ namespace ReallifeGamemode.Server.Events { nearestFriseurPoint.friseurShop.LoadShopNUI(player); } + if (nearestAmmunationPoint != null) + { + nearestAmmunationPoint.Ammunation.LoadShopNUI(player); + } if (user.FactionLeader) { player.TriggerEvent("CLIENT:StartGangwar"); diff --git a/ReallifeGamemode.Server/Shop/Ammunation/Ammunation.cs b/ReallifeGamemode.Server/Shop/Ammunation/Ammunation.cs index db46ed4e..5e3dde48 100644 --- a/ReallifeGamemode.Server/Shop/Ammunation/Ammunation.cs +++ b/ReallifeGamemode.Server/Shop/Ammunation/Ammunation.cs @@ -3,8 +3,10 @@ using System.Collections.Generic; using System.Linq; using System.Text; using GTANetworkAPI; +using Newtonsoft.Json; using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Database.Models; +using ReallifeGamemode.Server.Extensions; namespace ReallifeGamemode.Server.Shop.Ammunation { @@ -26,6 +28,30 @@ namespace ReallifeGamemode.Server.Shop.Ammunation weaponList = dbContext.Weapons.ToList(); } } + public void LoadShopNUI(Player client) + { + User u = client.GetUser(); + if (u == null) + { + return; + } + + //List melee = weaponList.ToList().FindAll(w => w.Category == "Pistol"); + List handguns = weaponList.ToList().FindAll(w => w.Category == "Handgun"); + //List smgs = weaponList.ToList().FindAll(w => w.Category == "SMG"); + //List shotguns = weaponList.ToList().FindAll(w => w.Category == "Shotgun"); + //List assaultrifles = weaponList.ToList().FindAll(w => w.Category == "AssaultRifle"); + //List lmgs = weaponList.ToList().FindAll(w => w.Category == "LMG"); + //List sniperrifles = weaponList.ToList().FindAll(w => w.Category == "SniperRifle"); + //List heavyweapons = weaponList.ToList().FindAll(w => w.Category == "HeavyWeapon"); + //List throwables = weaponList.ToList().FindAll(w => w.Category == "Throwables"); + + List shopWeapons = new List + { + handguns.ToArray(), + }; + client.TriggerEvent("AmmunationShop:LoadNativeUI", JsonConvert.SerializeObject(shopWeapons)); + } } } From 8e5e1ca093c303171e1c0a4b68cb7298540e20cd Mon Sep 17 00:00:00 2001 From: VegaZ Date: Mon, 12 Apr 2021 18:33:25 +0200 Subject: [PATCH 03/59] Clientside file --- .../Interaction/ammunation/ammunation.ts | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/ReallifeGamemode.Client/Interaction/ammunation/ammunation.ts b/ReallifeGamemode.Client/Interaction/ammunation/ammunation.ts index 5f282702..b3ae2927 100644 --- a/ReallifeGamemode.Client/Interaction/ammunation/ammunation.ts +++ b/ReallifeGamemode.Client/Interaction/ammunation/ammunation.ts @@ -1 +1,21 @@ - \ No newline at end of file +import * as NativeUI from '../../libs/NativeUI'; + +const UIMenu = NativeUI.Menu; +const UIMenuItem = NativeUI.UIMenuItem; +const UIMenuListItem = NativeUI.UIMenuListItem; +const UIMenuCheckboxItem = NativeUI.UIMenuCheckboxItem; +const BadgeStyle = NativeUI.BadgeStyle; +const Point = NativeUI.Point; +const ItemsCollection = NativeUI.ItemsCollection; +const Color = NativeUI.Color; + +export default function ammunation(globalData: IGlobalData) { + + mp.events.add("AmmunationShop:LoadNativeUI") + + mp.gui.chat.activate(false); + globalData.InMenu = true; + + factionInteractionMenu = new Menu("Fraktionsinteraktion", userFactionName, new Point(0, screenRes.y / 3), null, null); + +}; \ No newline at end of file From 18e385717b4b2995a39f3d9e6516266e50b7a683 Mon Sep 17 00:00:00 2001 From: Fabian Date: Tue, 13 Apr 2021 21:34:14 +0200 Subject: [PATCH 04/59] look basis --- .../Gui/vehiclemenu/main.ts | 32 +++++++++ .../assets/html/vehiclemenu/lastPlayers.html | 33 +++++++++ .../assets/html/vehiclemenu/script.js | 16 +++++ .../assets/html/vehiclemenu/style.css | 67 +++++++++++++++++++ .../assets/vehicle/application.js | 7 ++ .../assets/vehicle/lastPlayers.html | 32 +++++++++ .../assets/vehicle/style.css | 67 +++++++++++++++++++ .../Commands/UserCommands.cs | 16 +++++ .../Events/EnterVehicle.cs | 8 +++ .../Managers/VehicleManager.cs | 3 + 10 files changed, 281 insertions(+) create mode 100644 ReallifeGamemode.Client/assets/html/vehiclemenu/lastPlayers.html create mode 100644 ReallifeGamemode.Client/assets/html/vehiclemenu/script.js create mode 100644 ReallifeGamemode.Client/assets/html/vehiclemenu/style.css create mode 100644 ReallifeGamemode.Client/assets/vehicle/application.js create mode 100644 ReallifeGamemode.Client/assets/vehicle/lastPlayers.html create mode 100644 ReallifeGamemode.Client/assets/vehicle/style.css diff --git a/ReallifeGamemode.Client/Gui/vehiclemenu/main.ts b/ReallifeGamemode.Client/Gui/vehiclemenu/main.ts index d5988b50..94cbf2eb 100644 --- a/ReallifeGamemode.Client/Gui/vehiclemenu/main.ts +++ b/ReallifeGamemode.Client/Gui/vehiclemenu/main.ts @@ -9,6 +9,38 @@ var screenRes = mp.game.graphics.getScreenResolution(0, 0); export default function vehicleMenu(globalData: IGlobalData) { let menuBrowser: BrowserMp = null; + var lastDriversBrowser: BrowserMp = null; + + mp.events.add('lookLastDrivers', (lastDriversParam) => { + var lastDrivers = JSON.parse(lastDriversParam); + + if (lastDriversBrowser !== null) { + lastDriversBrowser.destroy(); + lastDriversBrowser = null; + globalData.InMenu = false; + mp.gui.cursor.show(false, false); + mp.gui.chat.activate(true); + } + else if (!globalData.InMenu) { + globalData.InMenu = true; + lastDriversBrowser = mp.browsers.new('package://assets/vehicle/lastPlayers.html'); + mp.gui.chat.activate(false); + mp.gui.cursor.show(true, true); + } + }); + + mp.events.add("removeLookMenu", () => { + if (lastDriversBrowser == null) { + return; + } + else if (globalData.InMenu) { + lastDriversBrowser.destroy(); + lastDriversBrowser = null; + globalData.InMenu = false; + mp.gui.cursor.show(false, false); + mp.gui.chat.activate(true); + } + }); mp.events.add('ToggleVehicleMenu', () => { if (menuBrowser !== null) { diff --git a/ReallifeGamemode.Client/assets/html/vehiclemenu/lastPlayers.html b/ReallifeGamemode.Client/assets/html/vehiclemenu/lastPlayers.html new file mode 100644 index 00000000..f407ae18 --- /dev/null +++ b/ReallifeGamemode.Client/assets/html/vehiclemenu/lastPlayers.html @@ -0,0 +1,33 @@ + + + + + + Eingabe | Life of German + + + + + + + + +
+
+

Letze Fahrer

+
+
+ • Hier
+ • könnten
+ • Ihre
+ • letzen Fahrer
+ • stehen
+

+ Viel Erfolg bei der Prüfung! +
+ +
+ + + + \ No newline at end of file diff --git a/ReallifeGamemode.Client/assets/html/vehiclemenu/script.js b/ReallifeGamemode.Client/assets/html/vehiclemenu/script.js new file mode 100644 index 00000000..82dbf11f --- /dev/null +++ b/ReallifeGamemode.Client/assets/html/vehiclemenu/script.js @@ -0,0 +1,16 @@ + + + +function ad_row(id, name, faction, ping) { + var table_id = "t1"; + var table = document.getElementById(table_id); + var rows = table.getElementsByTagName('tr').length; + var tr = table.insertRow(rows); + var td1 = document.createElement('td'); + var td2 = document.createElement('td'); + var td3 = document.createElement('td'); + var td4 = document.createElement('td'); + var test = faction; + td1.innerHTML = ''+driver; + tr.appendChild(td1); +} \ No newline at end of file diff --git a/ReallifeGamemode.Client/assets/html/vehiclemenu/style.css b/ReallifeGamemode.Client/assets/html/vehiclemenu/style.css new file mode 100644 index 00000000..aa5f9d4f --- /dev/null +++ b/ReallifeGamemode.Client/assets/html/vehiclemenu/style.css @@ -0,0 +1,67 @@ +/* style.css für Tabliste */ +.greyFont { + color: gray; + font-size: 14px; + width: 250px; +} +div { + user-select: none; +} + +body { + overflow: hidden; + font-family: 'Roboto', sans-serif; + font-weight: 500; + color: #222; + margin: 0; + padding: 0; +} + +h2 { + font-family: 'Roboto', sans-serif; + font-weight: 700; + font-size: 18px; + color: white; + margin:5px; + padding: 5px; + border: 1px solid #808080; + width: 20.75em; +} +.TabWrapper { + background: rgba(0,0,0,0.6); + height: 600px; + width: 600px; + display: block; + padding: 5px; + position: absolute; + left: 32%; + top: 10%; +} +th, td { + color: white; + font-size: 18px; + width:10%; + text-align: left; +} +.scroll { + height: 600px; + width: 600px; + font-size: 12px; + overflow: auto; +} +.force-overflow { + min-height: 600px; +} + +#style1::-webkit-scrollbar { + width: 10px; + background-color: #F5F5F5; +} + +#style1::-webkit-scrollbar-thumb { + background-color: #FF0040; +} + + + + diff --git a/ReallifeGamemode.Client/assets/vehicle/application.js b/ReallifeGamemode.Client/assets/vehicle/application.js new file mode 100644 index 00000000..591f41a6 --- /dev/null +++ b/ReallifeGamemode.Client/assets/vehicle/application.js @@ -0,0 +1,7 @@ + +let close = document.getElementById('close'); + +close.onclick = function closeWindow() { + mp.trigger('removeDrivingSchool'); + console.log('Fenster geschlossen!'); +} \ No newline at end of file diff --git a/ReallifeGamemode.Client/assets/vehicle/lastPlayers.html b/ReallifeGamemode.Client/assets/vehicle/lastPlayers.html new file mode 100644 index 00000000..2a0cff96 --- /dev/null +++ b/ReallifeGamemode.Client/assets/vehicle/lastPlayers.html @@ -0,0 +1,32 @@ + + + + + + Eingabe | Life of German + + + + + + + + +
+
+

Letze Fahrer

+
+
+ • Hier
+ • könnten
+ • Ihre
+ • letzen Fahrer
+ • stehen
+

+
+ +
+ + + + \ No newline at end of file diff --git a/ReallifeGamemode.Client/assets/vehicle/style.css b/ReallifeGamemode.Client/assets/vehicle/style.css new file mode 100644 index 00000000..aa5f9d4f --- /dev/null +++ b/ReallifeGamemode.Client/assets/vehicle/style.css @@ -0,0 +1,67 @@ +/* style.css für Tabliste */ +.greyFont { + color: gray; + font-size: 14px; + width: 250px; +} +div { + user-select: none; +} + +body { + overflow: hidden; + font-family: 'Roboto', sans-serif; + font-weight: 500; + color: #222; + margin: 0; + padding: 0; +} + +h2 { + font-family: 'Roboto', sans-serif; + font-weight: 700; + font-size: 18px; + color: white; + margin:5px; + padding: 5px; + border: 1px solid #808080; + width: 20.75em; +} +.TabWrapper { + background: rgba(0,0,0,0.6); + height: 600px; + width: 600px; + display: block; + padding: 5px; + position: absolute; + left: 32%; + top: 10%; +} +th, td { + color: white; + font-size: 18px; + width:10%; + text-align: left; +} +.scroll { + height: 600px; + width: 600px; + font-size: 12px; + overflow: auto; +} +.force-overflow { + min-height: 600px; +} + +#style1::-webkit-scrollbar { + width: 10px; + background-color: #F5F5F5; +} + +#style1::-webkit-scrollbar-thumb { + background-color: #FF0040; +} + + + + diff --git a/ReallifeGamemode.Server/Commands/UserCommands.cs b/ReallifeGamemode.Server/Commands/UserCommands.cs index 3c2bf091..671cac74 100644 --- a/ReallifeGamemode.Server/Commands/UserCommands.cs +++ b/ReallifeGamemode.Server/Commands/UserCommands.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using GTANetworkAPI; +using Newtonsoft.Json; using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Database.Models; using ReallifeGamemode.Server.Extensions; @@ -16,6 +17,21 @@ namespace ReallifeGamemode.Server.Commands { internal class UserCommands : Script { + [Command("look", "~m~look")] + public void CmdUserLook(Player player) + { + if (!player.IsLoggedIn()) return; + + Vehicle veh = NAPI.Pools.GetAllVehicles().Where(v => v.Position.DistanceTo(player.Position) <= 5).FirstOrDefault(); + + if (veh == null) + { + return; + } + + player.TriggerEvent("lookLastDrivers", JsonConvert.SerializeObject(VehicleManager.lastDriversInVehicle[veh])); + } + [Command("id", "~m~Benutzung: ~s~/id [Name]")] public void CmdUserId(Player player, String targetname) { diff --git a/ReallifeGamemode.Server/Events/EnterVehicle.cs b/ReallifeGamemode.Server/Events/EnterVehicle.cs index e6bce887..611948bd 100644 --- a/ReallifeGamemode.Server/Events/EnterVehicle.cs +++ b/ReallifeGamemode.Server/Events/EnterVehicle.cs @@ -2,6 +2,7 @@ using GTANetworkAPI; using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Server.Extensions; +using ReallifeGamemode.Server.Managers; using ReallifeGamemode.Server.Util; using ReallifeGamemode.Server.WeaponDeal; @@ -20,6 +21,13 @@ namespace ReallifeGamemode.Server.Events if (vehicle.HasMarkerBehind()) vehicle.RemoveMarkerBehind(); + if (!VehicleManager.lastDriversInVehicle.ContainsKey(vehicle)) + { + VehicleManager.lastDriversInVehicle.Add(vehicle, new List()); + } + + VehicleManager.lastDriversInVehicle[vehicle].Add(client.Name); + if (vehicle.GetServerVehicle() is FactionVehicle veh) { User u = client.GetUser(); diff --git a/ReallifeGamemode.Server/Managers/VehicleManager.cs b/ReallifeGamemode.Server/Managers/VehicleManager.cs index ffa29c54..034eb9cf 100644 --- a/ReallifeGamemode.Server/Managers/VehicleManager.cs +++ b/ReallifeGamemode.Server/Managers/VehicleManager.cs @@ -18,6 +18,9 @@ namespace ReallifeGamemode.Server.Managers { public class VehicleManager : Script { + + public static Dictionary> lastDriversInVehicle = new Dictionary>(); + private static readonly List _enabledMods = new List() { "ninef", From 1f00619366fd71904a33ad777c87467d510805dd Mon Sep 17 00:00:00 2001 From: VegaZ Date: Tue, 13 Apr 2021 21:46:11 +0200 Subject: [PATCH 05/59] Continue Ammunation --- .../Interaction/ammunation/ammunation.ts | 22 ++++++++++++------- ReallifeGamemode.Client/global.d.ts | 8 +++++++ .../Managers/ShopManager.cs | 18 ++++++++++++++- .../Shop/Ammunation/Ammunation.cs | 18 +++++++-------- 4 files changed, 48 insertions(+), 18 deletions(-) diff --git a/ReallifeGamemode.Client/Interaction/ammunation/ammunation.ts b/ReallifeGamemode.Client/Interaction/ammunation/ammunation.ts index b3ae2927..295716c0 100644 --- a/ReallifeGamemode.Client/Interaction/ammunation/ammunation.ts +++ b/ReallifeGamemode.Client/Interaction/ammunation/ammunation.ts @@ -1,9 +1,9 @@ import * as NativeUI from '../../libs/NativeUI'; -const UIMenu = NativeUI.Menu; -const UIMenuItem = NativeUI.UIMenuItem; -const UIMenuListItem = NativeUI.UIMenuListItem; -const UIMenuCheckboxItem = NativeUI.UIMenuCheckboxItem; +const Menu = NativeUI.Menu; +const MenuItem = NativeUI.UIMenuItem; +const MenuListItem = NativeUI.UIMenuListItem; +const MenuCheckboxItem = NativeUI.UIMenuCheckboxItem; const BadgeStyle = NativeUI.BadgeStyle; const Point = NativeUI.Point; const ItemsCollection = NativeUI.ItemsCollection; @@ -11,11 +11,17 @@ const Color = NativeUI.Color; export default function ammunation(globalData: IGlobalData) { - mp.events.add("AmmunationShop:LoadNativeUI") + var screenRes = mp.game.graphics.getScreenResolution(0, 0); - mp.gui.chat.activate(false); - globalData.InMenu = true; + class Weapon { - factionInteractionMenu = new Menu("Fraktionsinteraktion", userFactionName, new Point(0, screenRes.y / 3), null, null); + } + mp.events.add("AmmunationShop:LoadNativeUI", (weapons: Weapon[]) => { + mp.gui.chat.activate(false); + globalData.InMenu = true; + + var ammunationMenu = new Menu("Ammunation", "", new Point(0, screenRes.y / 3), null, null); + + }); }; \ No newline at end of file diff --git a/ReallifeGamemode.Client/global.d.ts b/ReallifeGamemode.Client/global.d.ts index 2242dd17..9ab1540c 100644 --- a/ReallifeGamemode.Client/global.d.ts +++ b/ReallifeGamemode.Client/global.d.ts @@ -74,4 +74,12 @@ declare type FactionMember = { declare type FactionRank = { +} + +declare type Weapon = { + WeaponModel: string; + Category: string; + SlotID: number; + Ammo: number; + Price: number; } \ No newline at end of file diff --git a/ReallifeGamemode.Server/Managers/ShopManager.cs b/ReallifeGamemode.Server/Managers/ShopManager.cs index f21470fb..dd7e35d2 100644 --- a/ReallifeGamemode.Server/Managers/ShopManager.cs +++ b/ReallifeGamemode.Server/Managers/ShopManager.cs @@ -6,6 +6,7 @@ using ReallifeGamemode.Database.Models; using ReallifeGamemode.Server.Shop.Clothing; using ReallifeGamemode.Server.Shop.SevenEleven; using ReallifeGamemode.Server.Shop.Friseur; +using ReallifeGamemode.Server.Shop.Ammunation; namespace ReallifeGamemode.Server.Managers { @@ -14,7 +15,7 @@ namespace ReallifeGamemode.Server.Managers public static List clotheStores = new List(); public static List itemShops = new List(); public static List FriseurStores = new List(); - public static List Ammunations = new List(); + public static List Ammunations = new List(); public static void LoadClotheShops() { @@ -82,5 +83,20 @@ namespace ReallifeGamemode.Server.Managers } } + public static void LoadAmmunations() + { + using (var dbContext = new DatabaseContext()) + { + List ammunations = dbContext.Blips.ToList().FindAll(s => s.Name == "Ammunation"); + + foreach (var store in ammunations) + { + Vector3 pos = new Vector3(store.PositionX, store.PositionY, store.PositionZ); + Ammunation newShop = new Ammunation(pos); + Ammunations.Add(newShop); + } + NAPI.Util.ConsoleOutput($"Loading {ammunations.Count} Ammunations"); + } + } } } diff --git a/ReallifeGamemode.Server/Shop/Ammunation/Ammunation.cs b/ReallifeGamemode.Server/Shop/Ammunation/Ammunation.cs index 5e3dde48..e7252734 100644 --- a/ReallifeGamemode.Server/Shop/Ammunation/Ammunation.cs +++ b/ReallifeGamemode.Server/Shop/Ammunation/Ammunation.cs @@ -37,15 +37,15 @@ namespace ReallifeGamemode.Server.Shop.Ammunation return; } - //List melee = weaponList.ToList().FindAll(w => w.Category == "Pistol"); - List handguns = weaponList.ToList().FindAll(w => w.Category == "Handgun"); - //List smgs = weaponList.ToList().FindAll(w => w.Category == "SMG"); - //List shotguns = weaponList.ToList().FindAll(w => w.Category == "Shotgun"); - //List assaultrifles = weaponList.ToList().FindAll(w => w.Category == "AssaultRifle"); - //List lmgs = weaponList.ToList().FindAll(w => w.Category == "LMG"); - //List sniperrifles = weaponList.ToList().FindAll(w => w.Category == "SniperRifle"); - //List heavyweapons = weaponList.ToList().FindAll(w => w.Category == "HeavyWeapon"); - //List throwables = weaponList.ToList().FindAll(w => w.Category == "Throwables"); + //List melee = weaponList.ToList().FindAll(w => w.Category == "Nahkampfwaffen"); + List handguns = weaponList.ToList().FindAll(w => w.Category == "Pistolen"); + //List smgs = weaponList.ToList().FindAll(w => w.Category == "Maschinenpistolen"); + //List shotguns = weaponList.ToList().FindAll(w => w.Category == "Schrotflinten"); + //List assaultrifles = weaponList.ToList().FindAll(w => w.Category == "Sturmgewehre"); + //List lmgs = weaponList.ToList().FindAll(w => w.Category == "Leichte Maschinengewehre"); + //List sniperrifles = weaponList.ToList().FindAll(w => w.Category == "Scharfschützengewehre"); + //List heavyweapons = weaponList.ToList().FindAll(w => w.Category == "Schwere Waffen"); + //List throwables = weaponList.ToList().FindAll(w => w.Category == "Werfbare Waffen"); List shopWeapons = new List { From 98b5dc03f7b547fffe2a5dac6ea1d1b27039c217 Mon Sep 17 00:00:00 2001 From: VegaZ Date: Tue, 13 Apr 2021 23:56:24 +0200 Subject: [PATCH 06/59] Continue Ammunation --- .../Interaction/ammunation/ammunation.ts | 1 + ReallifeGamemode.Client/global.d.ts | 2 +- ReallifeGamemode.Database/Entities/Weapon.cs | 5 +- .../Entities/WeaponCategory.cs | 17 + .../20210413201146_Ammunations.Designer.cs | 1975 +++++++++++++++++ .../Migrations/20210413201146_Ammunations.cs | 101 + .../DatabaseContextModelSnapshot.cs | 90 + .../Models/DatabaseContext.cs | 1 + .../Windows PowerShell.lnk | Bin 2500 -> 2366 bytes ReallifeGamemode.Server/Main.cs | 1 + .../Managers/PositionManager.cs | 7 + .../Shop/Ammunation/Ammunation.cs | 18 +- 12 files changed, 2207 insertions(+), 11 deletions(-) create mode 100644 ReallifeGamemode.Database/Entities/WeaponCategory.cs create mode 100644 ReallifeGamemode.Database/Migrations/20210413201146_Ammunations.Designer.cs create mode 100644 ReallifeGamemode.Database/Migrations/20210413201146_Ammunations.cs diff --git a/ReallifeGamemode.Client/Interaction/ammunation/ammunation.ts b/ReallifeGamemode.Client/Interaction/ammunation/ammunation.ts index 295716c0..71a8876a 100644 --- a/ReallifeGamemode.Client/Interaction/ammunation/ammunation.ts +++ b/ReallifeGamemode.Client/Interaction/ammunation/ammunation.ts @@ -20,6 +20,7 @@ export default function ammunation(globalData: IGlobalData) { mp.events.add("AmmunationShop:LoadNativeUI", (weapons: Weapon[]) => { mp.gui.chat.activate(false); globalData.InMenu = true; + mp.gui.chat.push(weapons.toString()); var ammunationMenu = new Menu("Ammunation", "", new Point(0, screenRes.y / 3), null, null); diff --git a/ReallifeGamemode.Client/global.d.ts b/ReallifeGamemode.Client/global.d.ts index 9ab1540c..297908cd 100644 --- a/ReallifeGamemode.Client/global.d.ts +++ b/ReallifeGamemode.Client/global.d.ts @@ -78,7 +78,7 @@ declare type FactionRank = { declare type Weapon = { WeaponModel: string; - Category: string; + Category: number; SlotID: number; Ammo: number; Price: number; diff --git a/ReallifeGamemode.Database/Entities/Weapon.cs b/ReallifeGamemode.Database/Entities/Weapon.cs index d01e2686..9cfcda69 100644 --- a/ReallifeGamemode.Database/Entities/Weapon.cs +++ b/ReallifeGamemode.Database/Entities/Weapon.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Text; +using GTANetworkAPI; namespace ReallifeGamemode.Database.Entities { @@ -12,7 +13,9 @@ namespace ReallifeGamemode.Database.Entities [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; } public string WeaponModel { get; set; } - public string Category { get; set; } + [ForeignKey("WeaponCategory")] + public int CategoryId { get; set; } + public WeaponCategory WeaponCategory { get; set; } public int SlotID { get; set; } public int Ammo { get; set; } public float Price { get; set; } diff --git a/ReallifeGamemode.Database/Entities/WeaponCategory.cs b/ReallifeGamemode.Database/Entities/WeaponCategory.cs new file mode 100644 index 00000000..342aee7a --- /dev/null +++ b/ReallifeGamemode.Database/Entities/WeaponCategory.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Text; + +namespace ReallifeGamemode.Database.Entities +{ + public partial class WeaponCategory + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } + public string Category { get; set; } + + } +} diff --git a/ReallifeGamemode.Database/Migrations/20210413201146_Ammunations.Designer.cs b/ReallifeGamemode.Database/Migrations/20210413201146_Ammunations.Designer.cs new file mode 100644 index 00000000..88c55e55 --- /dev/null +++ b/ReallifeGamemode.Database/Migrations/20210413201146_Ammunations.Designer.cs @@ -0,0 +1,1975 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using ReallifeGamemode.Database.Models; + +namespace ReallifeGamemode.Database.Migrations +{ + [DbContext(typeof(DatabaseContext))] + [Migration("20210413201146_Ammunations")] + partial class Ammunations + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "3.1.3") + .HasAnnotation("PropertyAccessMode", PropertyAccessMode.PreferFieldDuringConstruction) + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.ATM", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Active") + .HasColumnType("tinyint(1)"); + + b.Property("Balance") + .HasColumnType("int"); + + b.Property("Faulty") + .HasColumnType("tinyint(1)"); + + b.Property("X") + .HasColumnType("float"); + + b.Property("Y") + .HasColumnType("float"); + + b.Property("Z") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.ToTable("ATMs"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Ban", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Applied") + .HasColumnType("int"); + + b.Property("BannedBy") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.Property("Reason") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.Property("UntilDateTime") + .HasColumnType("int"); + + b.Property("UserId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("Bans"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.BusRoute", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Description") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.HasKey("Id"); + + b.ToTable("BusRoutes"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.BusRoutePoint", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("BusRouteId") + .HasColumnType("int"); + + b.Property("Description") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.Property("X") + .HasColumnType("float"); + + b.Property("Y") + .HasColumnType("float"); + + b.Property("Z") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("BusRouteId"); + + b.ToTable("BusRoutesPoints"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.BusinessBankAccount", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Balance") + .HasColumnType("int"); + + b.Property("BusinessId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("BusinessId") + .IsUnique(); + + b.ToTable("BusinessBankAccounts"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.BusinessData", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("BusinessId") + .HasColumnType("int"); + + b.Property("Price") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("BusinessData"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Character", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Ageing") + .HasColumnType("tinyint unsigned"); + + b.Property("AgeingOpacity") + .HasColumnType("float"); + + b.Property("BeardColor") + .HasColumnType("tinyint unsigned"); + + b.Property("Blemishes") + .HasColumnType("tinyint unsigned"); + + b.Property("BlemishesOpacity") + .HasColumnType("float"); + + b.Property("Blush") + .HasColumnType("tinyint unsigned"); + + b.Property("BlushColor") + .HasColumnType("tinyint unsigned"); + + b.Property("BlushOpacity") + .HasColumnType("float"); + + b.Property("BrowDepth") + .HasColumnType("float"); + + b.Property("BrowHeight") + .HasColumnType("float"); + + b.Property("CheekDepth") + .HasColumnType("float"); + + b.Property("CheekboneHeight") + .HasColumnType("float"); + + b.Property("CheekboneWidth") + .HasColumnType("float"); + + b.Property("ChestHair") + .HasColumnType("tinyint unsigned"); + + b.Property("ChestHairColor") + .HasColumnType("tinyint unsigned"); + + b.Property("ChestHairOpacity") + .HasColumnType("float"); + + b.Property("ChinDepth") + .HasColumnType("float"); + + b.Property("ChinHeight") + .HasColumnType("float"); + + b.Property("ChinIndent") + .HasColumnType("float"); + + b.Property("ChinWidth") + .HasColumnType("float"); + + b.Property("Complexion") + .HasColumnType("tinyint unsigned"); + + b.Property("ComplexionOpacity") + .HasColumnType("float"); + + b.Property("EyeColor") + .HasColumnType("tinyint unsigned"); + + b.Property("EyeSize") + .HasColumnType("float"); + + b.Property("EyebrowColor") + .HasColumnType("tinyint unsigned"); + + b.Property("Eyebrows") + .HasColumnType("tinyint unsigned"); + + b.Property("EyebrowsOpacity") + .HasColumnType("float"); + + b.Property("FacialHair") + .HasColumnType("tinyint unsigned"); + + b.Property("FacialHairOpacity") + .HasColumnType("float"); + + b.Property("Father") + .HasColumnType("tinyint unsigned"); + + b.Property("Freckles") + .HasColumnType("tinyint unsigned"); + + b.Property("FrecklesOpacity") + .HasColumnType("float"); + + b.Property("Gender") + .HasColumnType("tinyint(1)"); + + b.Property("Hair") + .HasColumnType("tinyint unsigned"); + + b.Property("HairColor") + .HasColumnType("tinyint unsigned"); + + b.Property("HairHighlightColor") + .HasColumnType("tinyint unsigned"); + + b.Property("JawShape") + .HasColumnType("float"); + + b.Property("JawWidth") + .HasColumnType("float"); + + b.Property("LipThickness") + .HasColumnType("float"); + + b.Property("Lipstick") + .HasColumnType("tinyint unsigned"); + + b.Property("LipstickColor") + .HasColumnType("tinyint unsigned"); + + b.Property("LipstickOpacity") + .HasColumnType("float"); + + b.Property("Makeup") + .HasColumnType("tinyint unsigned"); + + b.Property("MakeupOpacity") + .HasColumnType("float"); + + b.Property("Mother") + .HasColumnType("tinyint unsigned"); + + b.Property("NeckWidth") + .HasColumnType("float"); + + b.Property("NoseBottomHeight") + .HasColumnType("float"); + + b.Property("NoseBridgeDepth") + .HasColumnType("float"); + + b.Property("NoseBroken") + .HasColumnType("float"); + + b.Property("NoseTipHeight") + .HasColumnType("float"); + + b.Property("NoseTipLength") + .HasColumnType("float"); + + b.Property("NoseWidth") + .HasColumnType("float"); + + b.Property("Similarity") + .HasColumnType("float"); + + b.Property("SkinSimilarity") + .HasColumnType("float"); + + b.Property("SunDamage") + .HasColumnType("tinyint unsigned"); + + b.Property("SunDamageOpacity") + .HasColumnType("float"); + + b.Property("UserId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("Characters"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.CharacterCloth", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("ClothId") + .HasColumnType("int"); + + b.Property("Duty") + .HasColumnType("tinyint(1)"); + + b.Property("SlotId") + .HasColumnType("int"); + + b.Property("SlotType") + .HasColumnType("tinyint unsigned"); + + b.Property("Texture") + .HasColumnType("int"); + + b.Property("UserId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("CharacterClothes"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.ClothCombination", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Gender") + .HasColumnType("tinyint(1)"); + + b.Property("Top") + .HasColumnType("int"); + + b.Property("Torso") + .HasColumnType("int"); + + b.Property("Undershirt") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("ClothCombinations"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Door", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Category") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.Property("FactionId") + .HasColumnType("int"); + + b.Property("Locked") + .HasColumnType("tinyint(1)"); + + b.Property("Model") + .HasColumnType("int"); + + b.Property("Name") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.Property("Radius") + .HasColumnType("float"); + + b.Property("X") + .HasColumnType("float"); + + b.Property("Y") + .HasColumnType("float"); + + b.Property("Z") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("FactionId"); + + b.ToTable("Doors"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.DutyCloth", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("ClothId") + .HasColumnType("int"); + + b.Property("FactionId") + .HasColumnType("int"); + + b.Property("Gender") + .HasColumnType("tinyint(1)"); + + b.Property("SlotId") + .HasColumnType("int"); + + b.Property("SlotType") + .HasColumnType("tinyint unsigned"); + + b.HasKey("Id"); + + b.HasIndex("FactionId"); + + b.ToTable("DutyClothes"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Faction", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("BankAccountId") + .HasColumnType("int"); + + b.Property("GangOwned") + .HasColumnType("tinyint(1)"); + + b.Property("Name") + .HasColumnType("varchar(32) CHARACTER SET utf8mb4") + .HasMaxLength(32); + + b.Property("StateOwned") + .HasColumnType("tinyint(1)"); + + b.Property("WeaponDealTime") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("BankAccountId"); + + b.ToTable("Factions"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.FactionBankAccount", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Active") + .HasColumnType("tinyint(1)"); + + b.Property("Balance") + .HasColumnType("int"); + + b.Property("Bic") + .HasColumnType("varchar(12) CHARACTER SET utf8mb4") + .HasMaxLength(12); + + b.Property("Iban") + .HasColumnType("varchar(32) CHARACTER SET utf8mb4") + .HasMaxLength(32); + + b.HasKey("Id"); + + b.ToTable("FactionBankAccounts"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.FactionRank", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("FactionId") + .HasColumnType("int"); + + b.Property("Order") + .HasColumnType("int"); + + b.Property("RankName") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.HasKey("Id"); + + b.HasIndex("FactionId"); + + b.ToTable("FactionRanks"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.FactionWeapon", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Ammount") + .HasColumnType("int"); + + b.Property("FactionId") + .HasColumnType("int"); + + b.Property("Rank") + .HasColumnType("int"); + + b.Property("SlotID") + .HasColumnType("int"); + + b.Property("WeaponModel") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.HasKey("Id"); + + b.HasIndex("FactionId"); + + b.ToTable("FactionWeapons"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.GotoPoint", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Active") + .HasColumnType("tinyint(1)"); + + b.Property("Description") + .HasColumnType("varchar(32) CHARACTER SET utf8mb4") + .HasMaxLength(32); + + b.Property("X") + .HasColumnType("float"); + + b.Property("Y") + .HasColumnType("float"); + + b.Property("Z") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.ToTable("GotoPoints"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Group", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("BankAccountId") + .HasColumnType("int"); + + b.Property("Name") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.HasKey("Id"); + + b.HasIndex("BankAccountId"); + + b.ToTable("Groups"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.GroupBankAccount", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Balance") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("GroupBankAccounts"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.House", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("BankAccountId") + .HasColumnType("int"); + + b.Property("CanRentIn") + .HasColumnType("tinyint(1)"); + + b.Property("LastRentSetTime") + .HasColumnType("datetime(6)"); + + b.Property("OwnerId") + .HasColumnType("int"); + + b.Property("Price") + .HasColumnType("int"); + + b.Property("RentalFee") + .HasColumnType("int"); + + b.Property("Type") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.Property("X") + .HasColumnType("float"); + + b.Property("Y") + .HasColumnType("float"); + + b.Property("Z") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("BankAccountId"); + + b.HasIndex("OwnerId"); + + b.ToTable("Houses"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.HouseBankAccount", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Balance") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("HouseBankAccounts"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.HouseRental", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("HouseId") + .HasColumnType("int"); + + b.Property("UserId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("HouseId"); + + b.HasIndex("UserId"); + + b.ToTable("HouseRentals"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Interior", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("EnterPositionStr") + .HasColumnName("EnterPosition") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.Property("ExitPositionStr") + .HasColumnName("ExitPosition") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.Property("Name") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.HasKey("Id"); + + b.ToTable("Interiors"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Location", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Description") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.Property("Heading") + .HasColumnType("double"); + + b.Property("X") + .HasColumnType("double"); + + b.Property("Y") + .HasColumnType("double"); + + b.Property("Z") + .HasColumnType("double"); + + b.HasKey("Id"); + + b.ToTable("Locations"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Logs.BankAccountTransactionHistory", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Fee") + .HasColumnType("int"); + + b.Property("MoneySent") + .HasColumnType("int"); + + b.Property("NewReceiverBalance") + .HasColumnType("int"); + + b.Property("NewSenderBalance") + .HasColumnType("int"); + + b.Property("Origin") + .HasColumnType("varchar(32) CHARACTER SET utf8mb4") + .HasMaxLength(32); + + b.Property("Receiver") + .HasColumnType("varchar(32) CHARACTER SET utf8mb4") + .HasMaxLength(32); + + b.Property("ReceiverBalance") + .HasColumnType("int"); + + b.Property("Sender") + .HasColumnType("varchar(32) CHARACTER SET utf8mb4") + .HasMaxLength(32); + + b.Property("SenderBalance") + .HasColumnType("int"); + + b.Property("Timestamp") + .ValueGeneratedOnAdd() + .HasColumnType("datetime(6)"); + + b.HasKey("Id"); + + b.ToTable("BankAccountTransactionLogs"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Logs.Death", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("CauseOfDeath") + .HasColumnType("varchar(64) CHARACTER SET utf8mb4") + .HasMaxLength(64); + + b.Property("KillerHeading") + .HasColumnType("float"); + + b.Property("KillerId") + .HasColumnType("int"); + + b.Property("KillerPositionX") + .HasColumnType("float"); + + b.Property("KillerPositionY") + .HasColumnType("float"); + + b.Property("KillerPositionZ") + .HasColumnType("float"); + + b.Property("Timestamp") + .ValueGeneratedOnAdd() + .HasColumnType("datetime(6)"); + + b.Property("VictimHeading") + .HasColumnType("float"); + + b.Property("VictimId") + .HasColumnType("int"); + + b.Property("VictimPositionX") + .HasColumnType("float"); + + b.Property("VictimPositionY") + .HasColumnType("float"); + + b.Property("VictimPositionZ") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("KillerId"); + + b.HasIndex("VictimId"); + + b.ToTable("DeathLogs"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.News", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Active") + .HasColumnType("tinyint(1)"); + + b.Property("Caption") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.Property("Content") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.Property("Timestamp") + .HasColumnType("int"); + + b.Property("UserId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("News"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Saves.SavedBlip", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Active") + .HasColumnType("tinyint(1)"); + + b.Property("Alpha") + .HasColumnType("tinyint unsigned"); + + b.Property("Color") + .HasColumnType("tinyint unsigned"); + + b.Property("Dimension") + .HasColumnType("tinyint unsigned"); + + b.Property("DrawDistance") + .HasColumnType("float"); + + b.Property("Name") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.Property("PositionX") + .HasColumnType("float"); + + b.Property("PositionY") + .HasColumnType("float"); + + b.Property("PositionZ") + .HasColumnType("float"); + + b.Property("Rotation") + .HasColumnType("float"); + + b.Property("Scale") + .HasColumnType("float"); + + b.Property("ShortRange") + .HasColumnType("tinyint(1)"); + + b.Property("Sprite") + .HasColumnType("smallint"); + + b.HasKey("Id"); + + b.ToTable("Blips"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Saves.SavedMarker", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Active") + .HasColumnType("tinyint(1)"); + + b.Property("ColorA") + .HasColumnType("tinyint unsigned"); + + b.Property("ColorB") + .HasColumnType("tinyint unsigned"); + + b.Property("ColorG") + .HasColumnType("tinyint unsigned"); + + b.Property("ColorR") + .HasColumnType("tinyint unsigned"); + + b.Property("Dimension") + .HasColumnType("tinyint unsigned"); + + b.Property("DirectionX") + .HasColumnType("float"); + + b.Property("DirectionY") + .HasColumnType("float"); + + b.Property("DirectionZ") + .HasColumnType("float"); + + b.Property("PositionX") + .HasColumnType("float"); + + b.Property("PositionY") + .HasColumnType("float"); + + b.Property("PositionZ") + .HasColumnType("float"); + + b.Property("RotationX") + .HasColumnType("float"); + + b.Property("RotationY") + .HasColumnType("float"); + + b.Property("RotationZ") + .HasColumnType("float"); + + b.Property("Scale") + .HasColumnType("float"); + + b.Property("Type") + .HasColumnType("tinyint unsigned"); + + b.Property("Visible") + .HasColumnType("tinyint(1)"); + + b.HasKey("Id"); + + b.ToTable("Markers"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Saves.SavedPed", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Active") + .HasColumnType("tinyint(1)"); + + b.Property("Dimension") + .HasColumnType("tinyint unsigned"); + + b.Property("HashModel") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.Property("Heading") + .HasColumnType("float"); + + b.Property("PositionX") + .HasColumnType("float"); + + b.Property("PositionY") + .HasColumnType("float"); + + b.Property("PositionZ") + .HasColumnType("float"); + + b.Property("Type") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Peds"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Saves.SavedPickup", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Active") + .HasColumnType("tinyint(1)"); + + b.Property("Dimension") + .HasColumnType("tinyint unsigned"); + + b.Property("PositionX") + .HasColumnType("float") + .HasMaxLength(128); + + b.Property("PositionY") + .HasColumnType("float"); + + b.Property("PositionZ") + .HasColumnType("float"); + + b.Property("RespawnTime") + .HasColumnType("int"); + + b.Property("RotationX") + .HasColumnType("float"); + + b.Property("RotationY") + .HasColumnType("float"); + + b.Property("RotationZ") + .HasColumnType("float"); + + b.Property("Vehicle") + .HasColumnType("tinyint(1)"); + + b.HasKey("Id"); + + b.ToTable("Pickups"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Saves.SavedTextLabel", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Active") + .HasColumnType("tinyint(1)"); + + b.Property("ColorA") + .HasColumnType("tinyint unsigned"); + + b.Property("ColorB") + .HasColumnType("tinyint unsigned"); + + b.Property("ColorG") + .HasColumnType("tinyint unsigned"); + + b.Property("ColorR") + .HasColumnType("tinyint unsigned"); + + b.Property("Dimension") + .HasColumnType("tinyint unsigned"); + + b.Property("DrawDistance") + .HasColumnType("float"); + + b.Property("Font") + .HasColumnType("tinyint unsigned"); + + b.Property("LOS") + .HasColumnType("tinyint(1)"); + + b.Property("PositionX") + .HasColumnType("float"); + + b.Property("PositionY") + .HasColumnType("float"); + + b.Property("PositionZ") + .HasColumnType("float"); + + b.Property("Text") + .IsRequired() + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.HasKey("Id"); + + b.ToTable("TextLabels"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.ServerVariable", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Value") + .HasColumnType("int"); + + b.Property("Variable") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.HasKey("Id"); + + b.ToTable("ServerVariables"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.ServerVehicle", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Active") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(true); + + b.Property("Discriminator") + .IsRequired() + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.Property("DistanceDriven") + .HasColumnType("float"); + + b.Property("Heading") + .HasColumnType("float"); + + b.Property("Livery") + .HasColumnType("int"); + + b.Property("Locked") + .HasColumnType("tinyint(1)"); + + b.Property("Model") + .HasColumnType("int unsigned"); + + b.Property("NumberPlate") + .HasColumnType("varchar(8) CHARACTER SET utf8mb4") + .HasMaxLength(8); + + b.Property("PositionX") + .HasColumnType("float"); + + b.Property("PositionY") + .HasColumnType("float"); + + b.Property("PositionZ") + .HasColumnType("float"); + + b.Property("PrimaryColor") + .HasColumnType("int"); + + b.Property("SecondaryColor") + .HasColumnType("int"); + + b.Property("TankAmount") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.ToTable("ServerVehicles"); + + b.HasDiscriminator("Discriminator").HasValue("ServerVehicle"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.ShopClothe", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Category") + .HasColumnType("int"); + + b.Property("ClotheId") + .HasColumnType("int"); + + b.Property("ComponentId") + .HasColumnType("int"); + + b.Property("Gender") + .HasColumnType("tinyint(1)"); + + b.Property("Price") + .HasColumnType("int"); + + b.Property("TypeId") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.HasKey("Id"); + + b.ToTable("ShopClothes"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.ShopItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Amount") + .HasColumnType("int"); + + b.Property("ItemId") + .HasColumnType("int"); + + b.Property("Price") + .HasColumnType("int"); + + b.Property("ShopId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("ShopItems"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.TuningGarage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("X") + .HasColumnType("float"); + + b.Property("Y") + .HasColumnType("float"); + + b.Property("Z") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.ToTable("TuningGarages"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Turfs", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Color") + .HasColumnType("int"); + + b.Property("FactionId") + .HasColumnType("int"); + + b.Property("MaxValue") + .HasColumnType("int"); + + b.Property("Name") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.Property("Owner") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.Property("Range") + .HasColumnType("float"); + + b.Property("Rotation") + .HasColumnType("float"); + + b.Property("Surplus") + .HasColumnType("tinyint(1)"); + + b.Property("Value") + .HasColumnType("int"); + + b.Property("Vector") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.Property("X") + .HasColumnType("float"); + + b.Property("Y") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.ToTable("Turfs"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("AdminLevel") + .HasColumnType("int"); + + b.Property("BanId") + .HasColumnType("int"); + + b.Property("BankAccountId") + .HasColumnType("int"); + + b.Property("BusSkill") + .HasColumnType("int"); + + b.Property("BusinessId") + .HasColumnType("int"); + + b.Property("CharacterId") + .HasColumnType("int"); + + b.Property("Dead") + .HasColumnType("tinyint(1)"); + + b.Property("DriverLicenseBike") + .HasColumnType("tinyint(1)"); + + b.Property("DriverLicenseVehicle") + .HasColumnType("tinyint(1)"); + + b.Property("Email") + .HasColumnType("varchar(64) CHARACTER SET utf8mb4") + .HasMaxLength(64); + + b.Property("FactionId") + .HasColumnType("int"); + + b.Property("FactionLeader") + .HasColumnType("tinyint(1)"); + + b.Property("FactionRankId") + .HasColumnType("int"); + + b.Property("FlyingLicensePlane") + .HasColumnType("tinyint(1)"); + + b.Property("GroupId") + .HasColumnType("int"); + + b.Property("GroupRank") + .HasColumnType("int"); + + b.Property("Handmoney") + .HasColumnType("int"); + + b.Property("HouseId") + .HasColumnType("int"); + + b.Property("JailTime") + .HasColumnType("int"); + + b.Property("JobId") + .HasColumnType("int"); + + b.Property("LogUserId") + .HasColumnType("int"); + + b.Property("Name") + .HasColumnType("varchar(32) CHARACTER SET utf8mb4") + .HasMaxLength(32); + + b.Property("Password") + .HasColumnType("varchar(64) CHARACTER SET utf8mb4") + .HasMaxLength(64); + + b.Property("PaydayTimer") + .HasColumnType("int"); + + b.Property("PilotSkill") + .HasColumnType("int"); + + b.Property("PlayedMinutes") + .HasColumnType("int"); + + b.Property("Points") + .HasColumnType("int"); + + b.Property("PositionX") + .HasColumnType("float"); + + b.Property("PositionY") + .HasColumnType("float"); + + b.Property("PositionZ") + .HasColumnType("float"); + + b.Property("RegistrationDate") + .ValueGeneratedOnAdd() + .HasColumnType("datetime(6)"); + + b.Property("SocialClubName") + .HasColumnType("varchar(32) CHARACTER SET utf8mb4") + .HasMaxLength(32); + + b.Property("Wage") + .HasColumnType("int"); + + b.Property("Wanteds") + .HasColumnType("int"); + + b.Property("WeaponLicense") + .HasColumnType("tinyint(1)"); + + b.Property("failpoints") + .HasColumnType("int"); + + b.Property("otheramount") + .HasColumnType("int"); + + b.Property("trashcount") + .HasColumnType("int"); + + b.Property("warn") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("BanId"); + + b.HasIndex("BankAccountId"); + + b.HasIndex("BusinessId") + .IsUnique(); + + b.HasIndex("CharacterId"); + + b.HasIndex("FactionId"); + + b.HasIndex("FactionRankId"); + + b.HasIndex("GroupId"); + + b.HasIndex("HouseId"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("Users"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.UserBankAccount", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Active") + .HasColumnType("tinyint(1)"); + + b.Property("Balance") + .HasColumnType("int"); + + b.Property("Bic") + .HasColumnType("varchar(12) CHARACTER SET utf8mb4") + .HasMaxLength(12); + + b.Property("Iban") + .HasColumnType("varchar(32) CHARACTER SET utf8mb4") + .HasMaxLength(32); + + b.HasKey("Id"); + + b.ToTable("UserBankAccounts"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.UserItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Amount") + .HasColumnType("int"); + + b.Property("ItemId") + .HasColumnType("int"); + + b.Property("Slot") + .HasColumnType("int"); + + b.Property("UserId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("UserItems"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.UserWeapon", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Ammo") + .HasColumnType("int"); + + b.Property("UserId") + .HasColumnType("int"); + + b.Property("WeaponId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.HasIndex("WeaponId"); + + b.ToTable("UserWeapons"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.VehicleItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Amount") + .HasColumnType("int"); + + b.Property("ItemId") + .HasColumnType("int"); + + b.Property("Slot") + .HasColumnType("int"); + + b.Property("VehicleId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("VehicleId"); + + b.ToTable("VehicleItems"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.VehicleMod", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("ModId") + .HasColumnType("int"); + + b.Property("ServerVehicleId") + .HasColumnType("int"); + + b.Property("Slot") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ServerVehicleId", "Slot") + .IsUnique(); + + b.ToTable("VehicleMods"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Weapon", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Ammo") + .HasColumnType("int"); + + b.Property("CategoryId") + .HasColumnType("int"); + + b.Property("Price") + .HasColumnType("float"); + + b.Property("SlotID") + .HasColumnType("int"); + + b.Property("WeaponModel") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.HasKey("Id"); + + b.HasIndex("CategoryId"); + + b.ToTable("Weapons"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.WeaponCategory", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Category") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.HasKey("Id"); + + b.ToTable("WeaponCategories"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Whitelist", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("SocialClubName") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.HasKey("Id"); + + b.ToTable("WhitelistEntries"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.FactionVehicle", b => + { + b.HasBaseType("ReallifeGamemode.Database.Entities.ServerVehicle"); + + b.Property("BuyPrice") + .HasColumnType("int"); + + b.Property("Owners") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.ToTable("FactionVehicles"); + + b.HasDiscriminator().HasValue("FactionVehicle"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.GroupVehicle", b => + { + b.HasBaseType("ReallifeGamemode.Database.Entities.ServerVehicle"); + + b.Property("GroupId") + .HasColumnType("int"); + + b.HasIndex("GroupId"); + + b.HasDiscriminator().HasValue("GroupVehicle"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.JobVehicle", b => + { + b.HasBaseType("ReallifeGamemode.Database.Entities.ServerVehicle"); + + b.Property("JobId") + .HasColumnType("int"); + + b.HasDiscriminator().HasValue("JobVehicle"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.NoobSpawnVehicle", b => + { + b.HasBaseType("ReallifeGamemode.Database.Entities.ServerVehicle"); + + b.HasDiscriminator().HasValue("NoobSpawnVehicle"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.NoobVehicle", b => + { + b.HasBaseType("ReallifeGamemode.Database.Entities.ServerVehicle"); + + b.HasDiscriminator().HasValue("NoobVehicle"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Saves.SavedVehicle", b => + { + b.HasBaseType("ReallifeGamemode.Database.Entities.ServerVehicle"); + + b.HasDiscriminator().HasValue("SavedVehicle"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.SchoolVehicle", b => + { + b.HasBaseType("ReallifeGamemode.Database.Entities.ServerVehicle"); + + b.Property("SchoolId") + .HasColumnType("int"); + + b.HasDiscriminator().HasValue("SchoolVehicle"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.ShopVehicle", b => + { + b.HasBaseType("ReallifeGamemode.Database.Entities.ServerVehicle"); + + b.Property("BusinessId") + .HasColumnType("int"); + + b.Property("Price") + .HasColumnType("int"); + + b.ToTable("ShopVehicles"); + + b.HasDiscriminator().HasValue("ShopVehicle"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.UserVehicle", b => + { + b.HasBaseType("ReallifeGamemode.Database.Entities.ServerVehicle"); + + b.Property("Price") + .HasColumnName("UserVehicle_Price") + .HasColumnType("int"); + + b.Property("UserId") + .HasColumnType("int"); + + b.HasIndex("UserId"); + + b.ToTable("UserVehicles"); + + b.HasDiscriminator().HasValue("UserVehicle"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Ban", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.BusRoutePoint", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.BusRoute", "BusRoute") + .WithMany("RoutePoints") + .HasForeignKey("BusRouteId"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Character", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.CharacterCloth", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Door", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.Faction", "Faction") + .WithMany() + .HasForeignKey("FactionId"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.DutyCloth", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.Faction", "Faction") + .WithMany() + .HasForeignKey("FactionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Faction", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.FactionBankAccount", "BankAccount") + .WithMany() + .HasForeignKey("BankAccountId"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.FactionRank", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.Faction", "Faction") + .WithMany() + .HasForeignKey("FactionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.FactionWeapon", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.Faction", "Faction") + .WithMany() + .HasForeignKey("FactionId"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Group", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.GroupBankAccount", "BankAccount") + .WithMany() + .HasForeignKey("BankAccountId"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.House", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.HouseBankAccount", "BankAccount") + .WithMany() + .HasForeignKey("BankAccountId"); + + b.HasOne("ReallifeGamemode.Database.Entities.User", "Owner") + .WithMany() + .HasForeignKey("OwnerId"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.HouseRental", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.House", "House") + .WithMany("Rentals") + .HasForeignKey("HouseId"); + + b.HasOne("ReallifeGamemode.Database.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Logs.Death", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.User", "Killer") + .WithMany() + .HasForeignKey("KillerId"); + + b.HasOne("ReallifeGamemode.Database.Entities.User", "Victim") + .WithMany() + .HasForeignKey("VictimId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.News", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.User", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.Ban", "Ban") + .WithMany() + .HasForeignKey("BanId"); + + b.HasOne("ReallifeGamemode.Database.Entities.UserBankAccount", "BankAccount") + .WithMany() + .HasForeignKey("BankAccountId"); + + b.HasOne("ReallifeGamemode.Database.Entities.Character", "Character") + .WithMany() + .HasForeignKey("CharacterId"); + + b.HasOne("ReallifeGamemode.Database.Entities.Faction", "Faction") + .WithMany() + .HasForeignKey("FactionId"); + + b.HasOne("ReallifeGamemode.Database.Entities.FactionRank", "FactionRank") + .WithMany() + .HasForeignKey("FactionRankId"); + + b.HasOne("ReallifeGamemode.Database.Entities.Group", "Group") + .WithMany() + .HasForeignKey("GroupId"); + + b.HasOne("ReallifeGamemode.Database.Entities.House", "House") + .WithMany() + .HasForeignKey("HouseId"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.UserItem", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.UserWeapon", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("ReallifeGamemode.Database.Entities.Weapon", "Weapon") + .WithMany() + .HasForeignKey("WeaponId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.VehicleItem", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.ServerVehicle", "Vehicle") + .WithMany() + .HasForeignKey("VehicleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.VehicleMod", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.ServerVehicle", "Vehicle") + .WithMany() + .HasForeignKey("ServerVehicleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Weapon", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.WeaponCategory", "WeaponCategory") + .WithMany() + .HasForeignKey("CategoryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.GroupVehicle", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.Group", "Group") + .WithMany() + .HasForeignKey("GroupId"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.UserVehicle", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/ReallifeGamemode.Database/Migrations/20210413201146_Ammunations.cs b/ReallifeGamemode.Database/Migrations/20210413201146_Ammunations.cs new file mode 100644 index 00000000..7891208c --- /dev/null +++ b/ReallifeGamemode.Database/Migrations/20210413201146_Ammunations.cs @@ -0,0 +1,101 @@ +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace ReallifeGamemode.Database.Migrations +{ + public partial class Ammunations : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "WeaponCategories", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + Category = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_WeaponCategories", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Weapons", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + WeaponModel = table.Column(nullable: true), + CategoryId = table.Column(nullable: false), + SlotID = table.Column(nullable: false), + Ammo = table.Column(nullable: false), + Price = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Weapons", x => x.Id); + table.ForeignKey( + name: "FK_Weapons_WeaponCategories_CategoryId", + column: x => x.CategoryId, + principalTable: "WeaponCategories", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "UserWeapons", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + UserId = table.Column(nullable: false), + WeaponId = table.Column(nullable: false), + Ammo = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_UserWeapons", x => x.Id); + table.ForeignKey( + name: "FK_UserWeapons_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_UserWeapons_Weapons_WeaponId", + column: x => x.WeaponId, + principalTable: "Weapons", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_UserWeapons_UserId", + table: "UserWeapons", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_UserWeapons_WeaponId", + table: "UserWeapons", + column: "WeaponId"); + + migrationBuilder.CreateIndex( + name: "IX_Weapons_CategoryId", + table: "Weapons", + column: "CategoryId"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "UserWeapons"); + + migrationBuilder.DropTable( + name: "Weapons"); + + migrationBuilder.DropTable( + name: "WeaponCategories"); + } + } +} diff --git a/ReallifeGamemode.Database/Migrations/DatabaseContextModelSnapshot.cs b/ReallifeGamemode.Database/Migrations/DatabaseContextModelSnapshot.cs index 1a9d86a2..a49d3a9f 100644 --- a/ReallifeGamemode.Database/Migrations/DatabaseContextModelSnapshot.cs +++ b/ReallifeGamemode.Database/Migrations/DatabaseContextModelSnapshot.cs @@ -1519,6 +1519,30 @@ namespace ReallifeGamemode.Database.Migrations b.ToTable("UserItems"); }); + modelBuilder.Entity("ReallifeGamemode.Database.Entities.UserWeapon", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Ammo") + .HasColumnType("int"); + + b.Property("UserId") + .HasColumnType("int"); + + b.Property("WeaponId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.HasIndex("WeaponId"); + + b.ToTable("UserWeapons"); + }); + modelBuilder.Entity("ReallifeGamemode.Database.Entities.VehicleItem", b => { b.Property("Id") @@ -1567,6 +1591,48 @@ namespace ReallifeGamemode.Database.Migrations b.ToTable("VehicleMods"); }); + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Weapon", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Ammo") + .HasColumnType("int"); + + b.Property("CategoryId") + .HasColumnType("int"); + + b.Property("Price") + .HasColumnType("float"); + + b.Property("SlotID") + .HasColumnType("int"); + + b.Property("WeaponModel") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.HasKey("Id"); + + b.HasIndex("CategoryId"); + + b.ToTable("Weapons"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.WeaponCategory", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Category") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.HasKey("Id"); + + b.ToTable("WeaponCategories"); + }); + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Whitelist", b => { b.Property("Id") @@ -1844,6 +1910,21 @@ namespace ReallifeGamemode.Database.Migrations .IsRequired(); }); + modelBuilder.Entity("ReallifeGamemode.Database.Entities.UserWeapon", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("ReallifeGamemode.Database.Entities.Weapon", "Weapon") + .WithMany() + .HasForeignKey("WeaponId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + modelBuilder.Entity("ReallifeGamemode.Database.Entities.VehicleItem", b => { b.HasOne("ReallifeGamemode.Database.Entities.ServerVehicle", "Vehicle") @@ -1862,6 +1943,15 @@ namespace ReallifeGamemode.Database.Migrations .IsRequired(); }); + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Weapon", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.WeaponCategory", "WeaponCategory") + .WithMany() + .HasForeignKey("CategoryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + modelBuilder.Entity("ReallifeGamemode.Database.Entities.GroupVehicle", b => { b.HasOne("ReallifeGamemode.Database.Entities.Group", "Group") diff --git a/ReallifeGamemode.Database/Models/DatabaseContext.cs b/ReallifeGamemode.Database/Models/DatabaseContext.cs index 0846054b..890b0768 100644 --- a/ReallifeGamemode.Database/Models/DatabaseContext.cs +++ b/ReallifeGamemode.Database/Models/DatabaseContext.cs @@ -90,6 +90,7 @@ namespace ReallifeGamemode.Database.Models public DbSet ShopClothes { get; set; } public DbSet ShopItems { get; set; } public DbSet Weapons { get; set; } + public DbSet WeaponCategories { get; set; } //Logs diff --git a/ReallifeGamemode.Database/Windows PowerShell.lnk b/ReallifeGamemode.Database/Windows PowerShell.lnk index 14902e1bbac54efa3657dc471d0740bb0716bbbb..07b77a2d95f68780ff1c55303ddb7b890dbb2673 100644 GIT binary patch delta 17 ZcmX>iyiaI?2;=pQqTiS{Ph>V`0{}kr24VmJ delta 65 zcmdldbVPW92;=>YqTiUbof!0hFa`@5&XCEF$B@F1&rr@#3{(+3`5H^~W^QI melee = weaponList.ToList().FindAll(w => w.Category == "Nahkampfwaffen"); - List handguns = weaponList.ToList().FindAll(w => w.Category == "Pistolen"); - //List smgs = weaponList.ToList().FindAll(w => w.Category == "Maschinenpistolen"); - //List shotguns = weaponList.ToList().FindAll(w => w.Category == "Schrotflinten"); - //List assaultrifles = weaponList.ToList().FindAll(w => w.Category == "Sturmgewehre"); - //List lmgs = weaponList.ToList().FindAll(w => w.Category == "Leichte Maschinengewehre"); - //List sniperrifles = weaponList.ToList().FindAll(w => w.Category == "Scharfschützengewehre"); - //List heavyweapons = weaponList.ToList().FindAll(w => w.Category == "Schwere Waffen"); - //List throwables = weaponList.ToList().FindAll(w => w.Category == "Werfbare Waffen"); + //List melee = weaponList.ToList().FindAll(w => w.Category == "Nahkampfwaffen"); //1 + List handguns = weaponList.ToList().FindAll(w => w.CategoryId == 2); //2 + //List smgs = weaponList.ToList().FindAll(w => w.Category == "Maschinenpistolen"); //3 + //List shotguns = weaponList.ToList().FindAll(w => w.Category == "Schrotflinten"); //4 + //List assaultrifles = weaponList.ToList().FindAll(w => w.Category == "Sturmgewehre"); //5 + //List lmgs = weaponList.ToList().FindAll(w => w.Category == "Leichte Maschinengewehre"); //6 + //List sniperrifles = weaponList.ToList().FindAll(w => w.Category == "Scharfschützengewehre"); //7 + //List heavyweapons = weaponList.ToList().FindAll(w => w.Category == "Schwere Waffen"); //8 + //List throwables = weaponList.ToList().FindAll(w => w.Category == "Werfbare Waffen"); //9 List shopWeapons = new List { From 59ceebfdedd3039a69ce60cddac54100aa5b2f65 Mon Sep 17 00:00:00 2001 From: hydrant Date: Wed, 14 Apr 2021 19:26:36 +0200 Subject: [PATCH 07/59] change fibpack --- .../dlcpacks/fibpack/dlc.rpf | 4 ++-- .../Managers/VehicleManager.cs | 23 ++++++++----------- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/ReallifeGamemode.Client/dlcpacks/fibpack/dlc.rpf b/ReallifeGamemode.Client/dlcpacks/fibpack/dlc.rpf index 19d56440..c92187dd 100644 --- a/ReallifeGamemode.Client/dlcpacks/fibpack/dlc.rpf +++ b/ReallifeGamemode.Client/dlcpacks/fibpack/dlc.rpf @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5e4f54ec27530515452c0ef05241bd26ba70d13451ac24eb799ff3c6b18f42ec -size 98724352 +oid sha256:ebb3075c8f48de13e1d6c55bb9940f2fbc9e95c813fba5b17c7036e578074984 +size 214797824 diff --git a/ReallifeGamemode.Server/Managers/VehicleManager.cs b/ReallifeGamemode.Server/Managers/VehicleManager.cs index fc0283a2..7e1991ab 100644 --- a/ReallifeGamemode.Server/Managers/VehicleManager.cs +++ b/ReallifeGamemode.Server/Managers/VehicleManager.cs @@ -754,19 +754,16 @@ namespace ReallifeGamemode.Server.Managers "winky", "polamggtr", //mod "newsfrog", //mod - "fibn",//mod - "fibg",//mod - "fibd",//mod - "fibs",//mod - "fibc",//mod - "fibn2",//mod - "fibx",//mod - "fibg2",//mod - "fibd2",//mod - "fibj",//mod - "fibn3",//mod - "fibr"//mod - + "fibk", //mod + "fibh", //mod + "fibg", //mod + "fibd", //mod + "fibr2", //mod + "fibk2", //mod + "fibj", //mod + "fibn", //mod + "fibc4", //mod + "fibd2", //mod }; private static readonly Dictionary _serverVehicles = new Dictionary(); From aa3c41ae6028c002bff48963e79a90972e1f3ac3 Mon Sep 17 00:00:00 2001 From: hydrant Date: Wed, 14 Apr 2021 19:53:26 +0200 Subject: [PATCH 08/59] Revert "change fibpack" This reverts commit 59ceebfdedd3039a69ce60cddac54100aa5b2f65. --- .../dlcpacks/fibpack/dlc.rpf | 4 ++-- .../Managers/VehicleManager.cs | 23 +++++++++++-------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/ReallifeGamemode.Client/dlcpacks/fibpack/dlc.rpf b/ReallifeGamemode.Client/dlcpacks/fibpack/dlc.rpf index c92187dd..19d56440 100644 --- a/ReallifeGamemode.Client/dlcpacks/fibpack/dlc.rpf +++ b/ReallifeGamemode.Client/dlcpacks/fibpack/dlc.rpf @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ebb3075c8f48de13e1d6c55bb9940f2fbc9e95c813fba5b17c7036e578074984 -size 214797824 +oid sha256:5e4f54ec27530515452c0ef05241bd26ba70d13451ac24eb799ff3c6b18f42ec +size 98724352 diff --git a/ReallifeGamemode.Server/Managers/VehicleManager.cs b/ReallifeGamemode.Server/Managers/VehicleManager.cs index 7e1991ab..fc0283a2 100644 --- a/ReallifeGamemode.Server/Managers/VehicleManager.cs +++ b/ReallifeGamemode.Server/Managers/VehicleManager.cs @@ -754,16 +754,19 @@ namespace ReallifeGamemode.Server.Managers "winky", "polamggtr", //mod "newsfrog", //mod - "fibk", //mod - "fibh", //mod - "fibg", //mod - "fibd", //mod - "fibr2", //mod - "fibk2", //mod - "fibj", //mod - "fibn", //mod - "fibc4", //mod - "fibd2", //mod + "fibn",//mod + "fibg",//mod + "fibd",//mod + "fibs",//mod + "fibc",//mod + "fibn2",//mod + "fibx",//mod + "fibg2",//mod + "fibd2",//mod + "fibj",//mod + "fibn3",//mod + "fibr"//mod + }; private static readonly Dictionary _serverVehicles = new Dictionary(); From ad909c5ca550d80c3bc113605e1cadb87e8d7456 Mon Sep 17 00:00:00 2001 From: kookroach <62265045+kookroach@users.noreply.github.com> Date: Wed, 14 Apr 2021 21:00:43 +0200 Subject: [PATCH 09/59] =?UTF-8?q?Rename=20D=C3=B6ner.cs=20to=20Kebab.cs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ReallifeGamemode.Server/Inventory/Items/{Döner.cs => Kebab.cs} | 2 +- ReallifeGamemode.Server/Job/MuellmannData.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename ReallifeGamemode.Server/Inventory/Items/{Döner.cs => Kebab.cs} (96%) diff --git a/ReallifeGamemode.Server/Inventory/Items/Döner.cs b/ReallifeGamemode.Server/Inventory/Items/Kebab.cs similarity index 96% rename from ReallifeGamemode.Server/Inventory/Items/Döner.cs rename to ReallifeGamemode.Server/Inventory/Items/Kebab.cs index 06408896..c8df6e16 100644 --- a/ReallifeGamemode.Server/Inventory/Items/Döner.cs +++ b/ReallifeGamemode.Server/Inventory/Items/Kebab.cs @@ -8,7 +8,7 @@ using ReallifeGamemode.Server.Managers; namespace ReallifeGamemode.Server.Inventory.Items { - internal class Döner : ConsumableItem + internal class Kebab : ConsumableItem { public override int Id => 106; public override string Name => "Döner"; diff --git a/ReallifeGamemode.Server/Job/MuellmannData.cs b/ReallifeGamemode.Server/Job/MuellmannData.cs index a91d5574..295205e8 100644 --- a/ReallifeGamemode.Server/Job/MuellmannData.cs +++ b/ReallifeGamemode.Server/Job/MuellmannData.cs @@ -32,7 +32,7 @@ namespace ReallifeGamemode.Server.Job public void removeClientFromData(Player player) { if (client1 == player) { client1 = null; } - if (client2 == player) { client2 = null;} + if (client2 == player) { client2 = null; } } public int getTrashCount() From cb61e860a9dddcc7ef7672b6a427906b8bad6062 Mon Sep 17 00:00:00 2001 From: Fabian Date: Wed, 14 Apr 2021 21:03:14 +0200 Subject: [PATCH 10/59] =?UTF-8?q?megaphone=20befehl=20f=C3=BCr=20staatsmar?= =?UTF-8?q?ionetten?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Commands/FactionCommands.cs | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/ReallifeGamemode.Server/Commands/FactionCommands.cs b/ReallifeGamemode.Server/Commands/FactionCommands.cs index 9dc24c1e..00a15775 100644 --- a/ReallifeGamemode.Server/Commands/FactionCommands.cs +++ b/ReallifeGamemode.Server/Commands/FactionCommands.cs @@ -408,6 +408,31 @@ namespace ReallifeGamemode.Server.Commands #region Staatsfraktionen (LSPD / FBI) Commands + [Command("m", "~m~Benutzung: ~s~/m [Message]")] + public void CmdFactionMegaphone(Player player, String message) + { + User user = player.GetUser(); + if (user == null || (user.FactionId != 1 && user.FactionId != 3)) + { + ChatService.NotAuthorized(player); + return; + } + + if (!player.IsDuty()) + { + ChatService.ErrorMessage(player, "Du bist nicht im Dienst"); + return; + } + + if (!player.IsInVehicle) + { + ChatService.ErrorMessage(player, "Du bist nicht in einem Fahrzeug"); + return; + } + + ChatService.SendInRange(player.Position, 15, "!{#FFFF00}[" + player.GetUser().Faction.Name + " " + player.Name + ": !{#FFFF00}" + message + "]"); + } + [Command("cuff", "~m~Benutzung: ~s~/cuff")] public void CmdFactionCuff(Player player) { From 402e6ee04833ff5fad32e11e4fade0eed90c1fa0 Mon Sep 17 00:00:00 2001 From: Fabian Date: Wed, 14 Apr 2021 21:16:14 +0200 Subject: [PATCH 11/59] sani benachrichtigungen bei tod und arevive --- ReallifeGamemode.Server/Commands/AdminCommands.cs | 1 + ReallifeGamemode.Server/Events/Disconnect.cs | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/ReallifeGamemode.Server/Commands/AdminCommands.cs b/ReallifeGamemode.Server/Commands/AdminCommands.cs index 8fcad633..78e0d098 100644 --- a/ReallifeGamemode.Server/Commands/AdminCommands.cs +++ b/ReallifeGamemode.Server/Commands/AdminCommands.cs @@ -1402,6 +1402,7 @@ namespace ReallifeGamemode.Server.Commands } target.TriggerEvent("onPlayerRevived"); target.SendNotification("Du wurdest von Admin ~y~" + player.Name + "~s~ wiederbelebt."); + ChatService.BroadcastFaction("Info: " + "Der Auftrag von " + target.Name + " wurde entfernt (Administrativ wiederbelebt)", new List() { 2 }); target.SetData("isDead", false); using (var dbContext = new DatabaseContext()) { diff --git a/ReallifeGamemode.Server/Events/Disconnect.cs b/ReallifeGamemode.Server/Events/Disconnect.cs index ef442350..e62e8ece 100644 --- a/ReallifeGamemode.Server/Events/Disconnect.cs +++ b/ReallifeGamemode.Server/Events/Disconnect.cs @@ -62,6 +62,13 @@ namespace ReallifeGamemode.Server.Events { ChatService.BroadcastAdmin("!{#FFFF00}*** " + player.Name + " hat den Server verlassen", AdminLevel.MAPPING); } + + if (!player.HasData("isDead") || !player.GetData("isDead")) + { + ChatService.BroadcastFaction("Info: " + "Der Auftrag von " + player.Name + " wurde entfernt (Ausgeloggt)", new List() { 2 }); + return; + } + /* TaxiDriverJob taxiJob = JobManager.GetJob(); TaxiContract taxiContract = taxiJob.TaxiContracts.Where(t => t.Name == player.Name).FirstOrDefault(); From 30ba5cefc61e6b545c0139f9ae7c5fa977477c90 Mon Sep 17 00:00:00 2001 From: kookroach <62265045+kookroach@users.noreply.github.com> Date: Wed, 14 Apr 2021 21:24:34 +0200 Subject: [PATCH 12/59] fix rsethp and blip color --- ReallifeGamemode.Client/Gui/blips.ts | 7 ++++--- ReallifeGamemode.Server/Commands/AdminCommands.cs | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/ReallifeGamemode.Client/Gui/blips.ts b/ReallifeGamemode.Client/Gui/blips.ts index 547b6a10..1c44de47 100644 --- a/ReallifeGamemode.Client/Gui/blips.ts +++ b/ReallifeGamemode.Client/Gui/blips.ts @@ -25,14 +25,15 @@ playerBlipMap.set(player, pBlip); } let pBlip = playerBlipMap.get(player); - let color = player.getVariable("blipColor"); - pBlip.setColour(isNaN(color) ? 0 : color); - pBlip.setPosition(player.position.x, player.position.y, player.position.z); if (player.isDead()) { pBlip.setSprite(303); } else { pBlip.setSprite(1); } + let color = player.getVariable("blipColor"); + pBlip.setColour(isNaN(color) ? 0 : color); + pBlip.setPosition(player.position.x, player.position.y, player.position.z); + }); }, 50); diff --git a/ReallifeGamemode.Server/Commands/AdminCommands.cs b/ReallifeGamemode.Server/Commands/AdminCommands.cs index 8fcad633..86fa544c 100644 --- a/ReallifeGamemode.Server/Commands/AdminCommands.cs +++ b/ReallifeGamemode.Server/Commands/AdminCommands.cs @@ -1976,7 +1976,7 @@ namespace ReallifeGamemode.Server.Commands foreach (var managedPlayer in peopleInRange) { - if (!managedPlayer.IsLoggedIn() || managedPlayer.GetData("isDead")) return; + if (!managedPlayer.IsLoggedIn() || managedPlayer.GetData("isDead")) continue; managedPlayer.SafeSetHealth(hp); ChatService.SendMessage(managedPlayer, "~b~Admin " + player.Name + " hat im Radius von " + radius + " die HP auf " + hp + " gesetzt."); } From d4bfd37ef37985d17b0ef1c08df8b4f8db4bc47d Mon Sep 17 00:00:00 2001 From: Fabian Date: Wed, 14 Apr 2021 21:31:15 +0200 Subject: [PATCH 13/59] fx --- ReallifeGamemode.Server/Events/Disconnect.cs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/ReallifeGamemode.Server/Events/Disconnect.cs b/ReallifeGamemode.Server/Events/Disconnect.cs index e62e8ece..8fa51e67 100644 --- a/ReallifeGamemode.Server/Events/Disconnect.cs +++ b/ReallifeGamemode.Server/Events/Disconnect.cs @@ -63,11 +63,7 @@ namespace ReallifeGamemode.Server.Events ChatService.BroadcastAdmin("!{#FFFF00}*** " + player.Name + " hat den Server verlassen", AdminLevel.MAPPING); } - if (!player.HasData("isDead") || !player.GetData("isDead")) - { - ChatService.BroadcastFaction("Info: " + "Der Auftrag von " + player.Name + " wurde entfernt (Ausgeloggt)", new List() { 2 }); - return; - } + ChatService.BroadcastFaction("Info: " + "Der Auftrag von " + player.Name + " wurde entfernt (Ausgeloggt)", new List() { 2 }); /* TaxiDriverJob taxiJob = JobManager.GetJob(); From b587c51365a22f476293de1d7e7a4ba8d2a00372 Mon Sep 17 00:00:00 2001 From: Fabian Date: Wed, 14 Apr 2021 21:36:32 +0200 Subject: [PATCH 14/59] fx2 --- ReallifeGamemode.Server/Commands/AdminCommands.cs | 2 +- ReallifeGamemode.Server/Events/Disconnect.cs | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/ReallifeGamemode.Server/Commands/AdminCommands.cs b/ReallifeGamemode.Server/Commands/AdminCommands.cs index 1753a540..2bbd91ed 100644 --- a/ReallifeGamemode.Server/Commands/AdminCommands.cs +++ b/ReallifeGamemode.Server/Commands/AdminCommands.cs @@ -1402,7 +1402,7 @@ namespace ReallifeGamemode.Server.Commands } target.TriggerEvent("onPlayerRevived"); target.SendNotification("Du wurdest von Admin ~y~" + player.Name + "~s~ wiederbelebt."); - ChatService.BroadcastFaction("Info: " + "Der Auftrag von " + target.Name + " wurde entfernt (Administrativ wiederbelebt)", new List() { 2 }); + ChatService.BroadcastFaction("Info: Der Auftrag von " + target.Name + " wurde entfernt (Administrativ wiederbelebt)", new List() { 2 }); target.SetData("isDead", false); using (var dbContext = new DatabaseContext()) { diff --git a/ReallifeGamemode.Server/Events/Disconnect.cs b/ReallifeGamemode.Server/Events/Disconnect.cs index 8fa51e67..09ced74b 100644 --- a/ReallifeGamemode.Server/Events/Disconnect.cs +++ b/ReallifeGamemode.Server/Events/Disconnect.cs @@ -63,7 +63,13 @@ namespace ReallifeGamemode.Server.Events ChatService.BroadcastAdmin("!{#FFFF00}*** " + player.Name + " hat den Server verlassen", AdminLevel.MAPPING); } - ChatService.BroadcastFaction("Info: " + "Der Auftrag von " + player.Name + " wurde entfernt (Ausgeloggt)", new List() { 2 }); + MedicTask task = Medic.ReviveTasks.FirstOrDefault(t => t.Victim == player.Name); + + if (task != null) + { + ChatService.BroadcastFaction("Info: Der Auftrag von " + player.Name + " wurde entfernt (Ausgeloggt)", new List() { 2 }); + return; + } /* TaxiDriverJob taxiJob = JobManager.GetJob(); From 9f376a7d4fc8d8be3883d0469e3a8e1579830cbd Mon Sep 17 00:00:00 2001 From: Fabian Date: Wed, 14 Apr 2021 21:43:25 +0200 Subject: [PATCH 15/59] fx3 --- ReallifeGamemode.Server/Commands/AdminCommands.cs | 8 +++++++- ReallifeGamemode.Server/Events/Disconnect.cs | 5 +++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/ReallifeGamemode.Server/Commands/AdminCommands.cs b/ReallifeGamemode.Server/Commands/AdminCommands.cs index 2bbd91ed..39a9251c 100644 --- a/ReallifeGamemode.Server/Commands/AdminCommands.cs +++ b/ReallifeGamemode.Server/Commands/AdminCommands.cs @@ -1402,7 +1402,13 @@ namespace ReallifeGamemode.Server.Commands } target.TriggerEvent("onPlayerRevived"); target.SendNotification("Du wurdest von Admin ~y~" + player.Name + "~s~ wiederbelebt."); - ChatService.BroadcastFaction("Info: Der Auftrag von " + target.Name + " wurde entfernt (Administrativ wiederbelebt)", new List() { 2 }); + + MedicTask task = Medic.ReviveTasks.FirstOrDefault(t => t.Victim == player.Name); + if (task != null) + { + ChatService.BroadcastFaction("Info: Der Auftrag von " + target.Name + " wurde entfernt (Administrativ wiederbelebt)", new List() { 2 }); + } + target.SetData("isDead", false); using (var dbContext = new DatabaseContext()) { diff --git a/ReallifeGamemode.Server/Events/Disconnect.cs b/ReallifeGamemode.Server/Events/Disconnect.cs index 09ced74b..a8644275 100644 --- a/ReallifeGamemode.Server/Events/Disconnect.cs +++ b/ReallifeGamemode.Server/Events/Disconnect.cs @@ -67,10 +67,11 @@ namespace ReallifeGamemode.Server.Events if (task != null) { - ChatService.BroadcastFaction("Info: Der Auftrag von " + player.Name + " wurde entfernt (Ausgeloggt)", new List() { 2 }); - return; + ChatService.BroadcastFaction("Info: Der Auftrag von " + player.Name + " wurde entfernt (Ausgeloggt)", new List() { 2 }); } + + /* TaxiDriverJob taxiJob = JobManager.GetJob(); TaxiContract taxiContract = taxiJob.TaxiContracts.Where(t => t.Name == player.Name).FirstOrDefault(); From 9a506f7b7572cf92c5155adc139ec1f40f8050d5 Mon Sep 17 00:00:00 2001 From: Fabian Date: Wed, 14 Apr 2021 21:45:01 +0200 Subject: [PATCH 16/59] admin logout support meldung --- ReallifeGamemode.Server/Events/Disconnect.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ReallifeGamemode.Server/Events/Disconnect.cs b/ReallifeGamemode.Server/Events/Disconnect.cs index a8644275..d44559c9 100644 --- a/ReallifeGamemode.Server/Events/Disconnect.cs +++ b/ReallifeGamemode.Server/Events/Disconnect.cs @@ -70,7 +70,10 @@ namespace ReallifeGamemode.Server.Events ChatService.BroadcastFaction("Info: Der Auftrag von " + player.Name + " wurde entfernt (Ausgeloggt)", new List() { 2 }); } - + if (player.IsAdminDuty()) + { + ChatService.Broadcast("!{#ee4d2e}[SUPPORT] " + player.Name + " hat sich vom Support abgemeldet (Ausgeloggt)"); + } /* TaxiDriverJob taxiJob = JobManager.GetJob(); From 1ddb5164ff145f4197826ad874ddee873d9194e3 Mon Sep 17 00:00:00 2001 From: hydrant Date: Tue, 13 Apr 2021 22:39:28 +0200 Subject: [PATCH 17/59] fix gangwar geld --- ReallifeGamemode.Server/Gangwar/Turf.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ReallifeGamemode.Server/Gangwar/Turf.cs b/ReallifeGamemode.Server/Gangwar/Turf.cs index 825fe065..dfd08df8 100644 --- a/ReallifeGamemode.Server/Gangwar/Turf.cs +++ b/ReallifeGamemode.Server/Gangwar/Turf.cs @@ -247,7 +247,7 @@ namespace ReallifeGamemode.Server.Gangwar Player[] attackers = NAPI.Pools.GetAllPlayers().Where(c => c.IsLoggedIn() && c.GetUser().Faction?.Name == this.Attacker).ToArray(); Faction ownerFaction = dbContext.Factions.Include(f => f.BankAccount).Where(f => f.Name == getOwner()).FirstOrDefault(); - Faction attackerFaction = dbContext.Factions.Include(f => f.BankAccount).Where(f => f.Name == getOwner()).FirstOrDefault(); + Faction attackerFaction = dbContext.Factions.Include(f => f.BankAccount).Where(f => f.Name == getAttacker()).FirstOrDefault(); if (ownerFaction == null || attackerFaction == null) { From 07cb7e2f7bb7173cc1af195b7aa470aeb8aab95d Mon Sep 17 00:00:00 2001 From: kookroach <62265045+kookroach@users.noreply.github.com> Date: Wed, 14 Apr 2021 23:36:02 +0200 Subject: [PATCH 18/59] BusJob change -> Get rest of the money on last checkpoint. --- ReallifeGamemode.Server/Job/BusDriverJob.cs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/ReallifeGamemode.Server/Job/BusDriverJob.cs b/ReallifeGamemode.Server/Job/BusDriverJob.cs index 9060cd07..f7355388 100644 --- a/ReallifeGamemode.Server/Job/BusDriverJob.cs +++ b/ReallifeGamemode.Server/Job/BusDriverJob.cs @@ -33,9 +33,9 @@ namespace ReallifeGamemode.Server.Job public const uint VEHICLE_INTERMEDIATE = (uint)VehicleHash.Coach; public const uint VEHICLE_PROFESSIONAL = (uint)VehicleHash.Tourbus; - public const int WAGE_BEGINNER = 800; - public const int WAGE_INTERMEDIATE = 1200; - public const int WAGE_PROFESSIOAL = 1800; + public const int WAGE_BEGINNER = 400; + public const int WAGE_INTERMEDIATE = 600; + public const int WAGE_PROFESSIOAL = 800; public const string BEGINNER = "Anfänger"; public const string INTERMEDIATE = "Fortgeschrittener"; @@ -443,6 +443,14 @@ namespace ReallifeGamemode.Server.Job player.SendChatMessage("~y~[JOB]: ~w~Die neue Route lädt. Bitte warten..."); string type = getPlayerRouteType(player); + if (type == BEGINNER) + BusJobEvents.payWage(player, WAGE_BEGINNER); + else if (type == INTERMEDIATE) + BusJobEvents.payWage(player, WAGE_INTERMEDIATE); + else if (type == PROFESSIONAL) + BusJobEvents.payWage(player, WAGE_PROFESSIOAL); + + NAPI.Task.Run(() => { if (type == BEGINNER) @@ -466,6 +474,7 @@ namespace ReallifeGamemode.Server.Job NAPI.ClientEvent.TriggerClientEventForAll("SERVER:setIndicatorStatus", veh.Handle.Value, data.Left, data.Right); } + public void BusCheckpoint(Player player) { if (!player.IsInVehicle || player.VehicleSeat != 0) return; @@ -624,7 +633,7 @@ namespace ReallifeGamemode.Server.Job payWage(player, BusDriverJob.WAGE_PROFESSIOAL / BusDriverJob.playerRouteCurrent[player.Name].Count); } - private void payWage(Player player, int wage) + public static void payWage(Player player, int wage) { using var dbContext = new DatabaseContext(); User user = player.GetUser(dbContext); From 01d1752d44bdb65a4942e30671b6d7e8cdf7e286 Mon Sep 17 00:00:00 2001 From: kookroach <62265045+kookroach@users.noreply.github.com> Date: Wed, 14 Apr 2021 23:43:05 +0200 Subject: [PATCH 19/59] wage change --- ReallifeGamemode.Server/Job/BusDriverJob.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ReallifeGamemode.Server/Job/BusDriverJob.cs b/ReallifeGamemode.Server/Job/BusDriverJob.cs index f7355388..4aa735e2 100644 --- a/ReallifeGamemode.Server/Job/BusDriverJob.cs +++ b/ReallifeGamemode.Server/Job/BusDriverJob.cs @@ -35,7 +35,7 @@ namespace ReallifeGamemode.Server.Job public const int WAGE_BEGINNER = 400; public const int WAGE_INTERMEDIATE = 600; - public const int WAGE_PROFESSIOAL = 800; + public const int WAGE_PROFESSIOAL = 900; public const string BEGINNER = "Anfänger"; public const string INTERMEDIATE = "Fortgeschrittener"; From ecca103970f58525fe9375406add8122578d4922 Mon Sep 17 00:00:00 2001 From: hydrant Date: Thu, 15 Apr 2021 00:15:51 +0200 Subject: [PATCH 20/59] [HOTFIX] fix medic heal task server crash --- ReallifeGamemode.Server/Events/Death.cs | 3 ++- ReallifeGamemode.Server/Factions/Medic/Medic.cs | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/ReallifeGamemode.Server/Events/Death.cs b/ReallifeGamemode.Server/Events/Death.cs index c810c4ff..afcd7ad6 100644 --- a/ReallifeGamemode.Server/Events/Death.cs +++ b/ReallifeGamemode.Server/Events/Death.cs @@ -94,6 +94,8 @@ namespace ReallifeGamemode.Server.Events } } + Medic.delHealTask(player); + if (user.JailTime <= 0) { user.Dead = true; @@ -113,7 +115,6 @@ namespace ReallifeGamemode.Server.Events MedicName = "none" }; Medic.AddTaskToList(reviveTask); - Medic.delHealTask(player); ChatService.BroadcastFaction("~y~[MEDIC] ~w~" + player.Name + " ist soeben verstorben.", new List() { 2 }); } diff --git a/ReallifeGamemode.Server/Factions/Medic/Medic.cs b/ReallifeGamemode.Server/Factions/Medic/Medic.cs index 7bb2fd2d..f5c27650 100644 --- a/ReallifeGamemode.Server/Factions/Medic/Medic.cs +++ b/ReallifeGamemode.Server/Factions/Medic/Medic.cs @@ -263,7 +263,7 @@ namespace ReallifeGamemode.Server.Factions.Medic { player.SetData("healauftrag", false); var medicPlayer = PlayerService.GetPlayerByNameOrId(task.MedicName); - if (task.MedicName != "none") + if (medicPlayer != null) { medicPlayer.TriggerEvent("destroyMedicTaskCheckpoint"); } From 55e324f3223e51fad787866bacd06f07d30bf817 Mon Sep 17 00:00:00 2001 From: hydrant Date: Thu, 15 Apr 2021 01:29:49 +0200 Subject: [PATCH 21/59] =?UTF-8?q?[HOTFIX]=20punkte=20vergeben=20aufger?= =?UTF-8?q?=C3=A4umt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Managers/InteractionManager.cs | 125 ++++++++---------- 1 file changed, 58 insertions(+), 67 deletions(-) diff --git a/ReallifeGamemode.Server/Managers/InteractionManager.cs b/ReallifeGamemode.Server/Managers/InteractionManager.cs index b8012632..fc2af555 100644 --- a/ReallifeGamemode.Server/Managers/InteractionManager.cs +++ b/ReallifeGamemode.Server/Managers/InteractionManager.cs @@ -486,7 +486,7 @@ namespace ReallifeGamemode.Server.Managers using var dbContext = new DatabaseContext(); var user = player.GetUser(dbContext); - if(user.FactionId == null) + if (user.FactionId == null) { return; } @@ -517,7 +517,7 @@ namespace ReallifeGamemode.Server.Managers } var factionVehicleCount = dbContext.FactionVehicles.ToList().Where(v => v.Id == id && v.GetOwners().Contains(user.FactionId.Value)).Count(); - if(factionVehicleCount <= 6) + if (factionVehicleCount <= 6) { ChatService.ErrorMessage(player, "Die Fraktion braucht mindestens 6 Fahrzeuge"); return; @@ -589,85 +589,76 @@ namespace ReallifeGamemode.Server.Managers public void InteractionMenu_LSPD_Points3(Player player, string jsonNameOrId, string jsoAmount, string jsonReason) { string nameOrId = (string)JsonConvert.DeserializeObject(jsonNameOrId); - int amount = Int32.Parse((string)JsonConvert.DeserializeObject(jsoAmount)); string reason = (string)JsonConvert.DeserializeObject(jsonReason); Player target = PlayerService.GetPlayerByNameOrId(nameOrId); string playername = NAPI.Player.GetPlayerName(player); string targetname = NAPI.Player.GetPlayerName(target); + + if (!int.TryParse((string)JsonConvert.DeserializeObject(jsoAmount), out int amount)) + { + player.SendNotification("~r~Es muss eine gültige Zahl für die Punkte angegeben werden!"); + return; + } + if (target == null || !target.IsLoggedIn()) { ChatService.PlayerNotFound(player); return; } - else if (target.GetUser().DriverLicenseVehicle == false && target.GetUser().DriverLicenseBike == false) - { - player.SendNotification("~r~Spieler hat weder Auto- noch Motorradführerschein!"); - } - else if (target == player) + + if (target == player) { player.SendNotification("~r~Du kannst dir selbst keine Punkte setzen!"); + return; + } + + using var dbContext = new DatabaseContext(); + User targetUser = target.GetUser(dbContext); + + if(targetUser == null) + { + ChatService.PlayerNotFound(player); + return; + } + + if (targetUser.DriverLicenseVehicle == false && targetUser.DriverLicenseBike == false) + { + player.SendNotification("~r~Spieler hat weder Auto- noch Motorradführerschein!"); + return; + } + + if (amount < -13 || amount > 13) + { + player.SendNotification("~r~Du kannst nur zwischen 1 und 12 Punkte verteilen!"); + return; + } + + targetUser.Points += amount; + + player.SendNotification($"~w~Du hast ~y~{targetname} ~b~{amount} ~w~Strafpunkte gegeben. Grund: ~g~{reason}~w~."); + target.SendNotification($"~b~{player.GetUser().FactionRank.RankName} | {playername} ~w~hat dir ~y~{amount} ~w~Strafpunkte gegeben.", true); + ChatService.HQMessage(targetname + " hat von " + playername + " " + amount + " Strafpunkt(e) erhalten. Gesamt: " + targetUser.Points); + + if (targetUser.Points < 0) + { + targetUser.Points = 0; + dbContext.SaveChanges(); + } + else if (targetUser.Points >= 12) + { + target.SendNotification($"~w~Grund: ~g~{reason}~w~. ~x~Du hast nun ~r~12/12 ~x~Strafpunkten.", true); + target.SendNotification($"~w~Dir wird ~r~Auto- ~w~und ~r~Motorradführerschein ~w~entzogen.", true); //FlashNotif + + ChatService.HQMessage(targetname + " besitzt nun keinen Führerschein mehr."); + + targetUser.Points = 0; + targetUser.DriverLicenseVehicle = false; + targetUser.DriverLicenseBike = false; + dbContext.SaveChanges(); } else { - if (amount > -13 && amount < 13) - { - using (var dbContext = new DatabaseContext()) - { - User target2 = target.GetUser(dbContext); - target2.Points += amount; - dbContext.SaveChanges(); - } - player.SendNotification($"~w~Du hast ~y~{targetname} ~b~{amount} ~w~Strafpunkte gegeben. Grund: ~g~{reason}~w~."); - target.SendNotification($"~b~{player.GetUser().FactionRank.RankName} | {playername} ~w~hat dir ~y~{amount} ~w~Strafpunkte gegeben.", true); - ChatService.BroadcastFaction("!{#8181E9}HQ: " + targetname + " hat von " + playername + " " + amount + " Strafpunkt(e) erhalten. Gesamt: " + target.GetUser().Points, new List() { 1, 3 }); - if (target.GetUser().Points < 0) - { - using (var dbContext = new DatabaseContext()) - { - User target2 = target.GetUser(dbContext); - target2.Points = 0; - dbContext.SaveChanges(); - } - } - else if (target.GetUser().Points >= 12) - { - target.SendNotification($"~w~Grund: ~g~{reason}~w~. ~x~Du hast nun ~r~12/12 ~x~Strafpunkten.", true); - target.SendNotification($"~w~Dir wird ~r~Auto- ~w~und ~r~Motorradführerschein ~w~entzogen.", true); //FlashNotif - ChatService.HQMessage(targetname + "hat von" + playername + " " + amount + " Strafpunkt erhalten(e). Gesamt: " + target.GetUser().Points); - foreach (var copPlayer in NAPI.Pools.GetAllPlayers()) - { - User copUser = copPlayer.GetUser(); - if (copUser == null) - { - continue; - } - - if (copUser.FactionId == 1 || copUser.FactionId == 3) - { - if (copUser.GetData("duty") == true) - { - ChatService.HQMessage(targetname + " besitzt nun keinen Führerschein mehr."); - } - } - } - using (var dbContext = new DatabaseContext()) - { - User target2 = target.GetUser(dbContext); - target2.Points = 0; - target2.DriverLicenseVehicle = false; - target2.DriverLicenseBike = false; - dbContext.SaveChanges(); - } - } - else - { - target.SendNotification($"~w~Grund: ~g~{reason}~w~. ~x~Du hast nun ~y~{target.GetUser().Points}/12 ~x~Strafpunkten.", true); - } - } - else - { - player.SendNotification("~r~Du kannst nur zwischen 1 und 12 Punkte verteilen!"); - } + target.SendNotification($"~w~Grund: ~g~{reason}~w~. ~x~Du hast nun ~y~{targetUser.Points}/12 ~x~Strafpunkten.", true); } } From 86afa2bb9397e73ca94a014b7e645717715c30b2 Mon Sep 17 00:00:00 2001 From: hydrant Date: Thu, 15 Apr 2021 01:49:35 +0200 Subject: [PATCH 22/59] [HOTFIX] fix weapon in hup --- ReallifeGamemode.Client/util/animationSync.ts | 9 ++++++--- ReallifeGamemode.Server/Extensions/ClientExtension.cs | 1 + 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/ReallifeGamemode.Client/util/animationSync.ts b/ReallifeGamemode.Client/util/animationSync.ts index 169a070b..4601cb67 100644 --- a/ReallifeGamemode.Client/util/animationSync.ts +++ b/ReallifeGamemode.Client/util/animationSync.ts @@ -133,11 +133,14 @@ export default function animationSync() { mp.events.callRemote("CLIENT:ClearAnimationData", false); } + const blockInputControls = [12, 13, 14, 15, 22, 24, 25, 37, 261, 262]; + mp.events.add("render", () => { + mp.gui.chat.push("blockInput = " + blockInput); if (blockInput) { - mp.game.controls.disableControlAction(32, 25, true); - mp.game.controls.disableControlAction(32, 24, true); - mp.game.controls.disableControlAction(32, 22, true); + blockInputControls.forEach((ctrl) => { + mp.game.controls.disableControlAction(32, ctrl, true); + }); } }); diff --git a/ReallifeGamemode.Server/Extensions/ClientExtension.cs b/ReallifeGamemode.Server/Extensions/ClientExtension.cs index 9c354a51..b400682a 100644 --- a/ReallifeGamemode.Server/Extensions/ClientExtension.cs +++ b/ReallifeGamemode.Server/Extensions/ClientExtension.cs @@ -433,6 +433,7 @@ namespace ReallifeGamemode.Server.Extensions return; player.SyncAnimation("hup"); + NAPI.Player.SetPlayerCurrentWeapon(player, WeaponHash.Unarmed); if (player.GetUser().Wanteds > 0) PositionManager.cuffPoints.Add(player); From 408c7a7a76b4f18fa82d331d7019e57df232dca3 Mon Sep 17 00:00:00 2001 From: hydrant Date: Thu, 15 Apr 2021 01:57:04 +0200 Subject: [PATCH 23/59] remove debug message --- ReallifeGamemode.Client/util/animationSync.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/ReallifeGamemode.Client/util/animationSync.ts b/ReallifeGamemode.Client/util/animationSync.ts index 4601cb67..b56765a3 100644 --- a/ReallifeGamemode.Client/util/animationSync.ts +++ b/ReallifeGamemode.Client/util/animationSync.ts @@ -136,7 +136,6 @@ export default function animationSync() { const blockInputControls = [12, 13, 14, 15, 22, 24, 25, 37, 261, 262]; mp.events.add("render", () => { - mp.gui.chat.push("blockInput = " + blockInput); if (blockInput) { blockInputControls.forEach((ctrl) => { mp.game.controls.disableControlAction(32, ctrl, true); From 0b26b89aff64fc96cd2a07cbe594a13731e358f8 Mon Sep 17 00:00:00 2001 From: hydrant Date: Thu, 15 Apr 2021 12:38:10 +0200 Subject: [PATCH 24/59] finish /look --- .../Gui/vehiclemenu/main.ts | 8 ++++- .../assets/html/vehiclemenu/lastPlayers.html | 33 ------------------- .../assets/vehicle/application.js | 23 +++++++++++-- .../assets/vehicle/lastPlayers.html | 15 ++++----- .../Commands/UserCommands.cs | 27 +++++++++++++-- .../Events/EnterVehicle.cs | 7 ++-- .../Managers/VehicleManager.cs | 2 +- 7 files changed, 63 insertions(+), 52 deletions(-) delete mode 100644 ReallifeGamemode.Client/assets/html/vehiclemenu/lastPlayers.html diff --git a/ReallifeGamemode.Client/Gui/vehiclemenu/main.ts b/ReallifeGamemode.Client/Gui/vehiclemenu/main.ts index 94cbf2eb..385eaacb 100644 --- a/ReallifeGamemode.Client/Gui/vehiclemenu/main.ts +++ b/ReallifeGamemode.Client/Gui/vehiclemenu/main.ts @@ -11,8 +11,10 @@ export default function vehicleMenu(globalData: IGlobalData) { let menuBrowser: BrowserMp = null; var lastDriversBrowser: BrowserMp = null; + var lastDrivers = null; + mp.events.add('lookLastDrivers', (lastDriversParam) => { - var lastDrivers = JSON.parse(lastDriversParam); + lastDrivers = JSON.parse(lastDriversParam); if (lastDriversBrowser !== null) { lastDriversBrowser.destroy(); @@ -29,6 +31,10 @@ export default function vehicleMenu(globalData: IGlobalData) { } }); + mp.events.add("CEF:VehicleLook_Loaded", () => { + lastDriversBrowser.execute(`setDrivers('${JSON.stringify(lastDrivers)}');`); + }); + mp.events.add("removeLookMenu", () => { if (lastDriversBrowser == null) { return; diff --git a/ReallifeGamemode.Client/assets/html/vehiclemenu/lastPlayers.html b/ReallifeGamemode.Client/assets/html/vehiclemenu/lastPlayers.html deleted file mode 100644 index f407ae18..00000000 --- a/ReallifeGamemode.Client/assets/html/vehiclemenu/lastPlayers.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - Eingabe | Life of German - - - - - - - - -
-
-

Letze Fahrer

-
-
- • Hier
- • könnten
- • Ihre
- • letzen Fahrer
- • stehen
-

- Viel Erfolg bei der Prüfung! -
- -
- - - - \ No newline at end of file diff --git a/ReallifeGamemode.Client/assets/vehicle/application.js b/ReallifeGamemode.Client/assets/vehicle/application.js index 591f41a6..024717a1 100644 --- a/ReallifeGamemode.Client/assets/vehicle/application.js +++ b/ReallifeGamemode.Client/assets/vehicle/application.js @@ -1,7 +1,26 @@  let close = document.getElementById('close'); +$(document).ready(function () { + mp.trigger("CEF:VehicleLook_Loaded"); +}); + +function setDrivers(driversJson) { + var drivers = JSON.parse(driversJson); + var listTag = $("#drivers-list"); + drivers.forEach(driver => { + var name = driver.Name; + var dateTime = new Date(driver.Time); + + var date = `${dateTime.getDay()}.${dateTime.getMonth()}.${dateTime.getFullYear()}`; + var time = `${dateTime.getHours()}:${dateTime.getMinutes()}:${dateTime.getSeconds()}`; + + var infoLine = `${name} am ${date} um ${time} Uhr`; + var listItemTag = `
  • ${infoLine}
  • `; + listTag.append(listItemTag); + }); +} + close.onclick = function closeWindow() { - mp.trigger('removeDrivingSchool'); - console.log('Fenster geschlossen!'); + mp.trigger('removeLookMenu'); } \ No newline at end of file diff --git a/ReallifeGamemode.Client/assets/vehicle/lastPlayers.html b/ReallifeGamemode.Client/assets/vehicle/lastPlayers.html index 2a0cff96..293f1c03 100644 --- a/ReallifeGamemode.Client/assets/vehicle/lastPlayers.html +++ b/ReallifeGamemode.Client/assets/vehicle/lastPlayers.html @@ -17,16 +17,13 @@

    Letze Fahrer

    - • Hier
    - • könnten
    - • Ihre
    - • letzen Fahrer
    - • stehen
    -

    +
      + +
    - + - - + + \ No newline at end of file diff --git a/ReallifeGamemode.Server/Commands/UserCommands.cs b/ReallifeGamemode.Server/Commands/UserCommands.cs index 671cac74..15d159a7 100644 --- a/ReallifeGamemode.Server/Commands/UserCommands.cs +++ b/ReallifeGamemode.Server/Commands/UserCommands.cs @@ -22,14 +22,35 @@ namespace ReallifeGamemode.Server.Commands { if (!player.IsLoggedIn()) return; - Vehicle veh = NAPI.Pools.GetAllVehicles().Where(v => v.Position.DistanceTo(player.Position) <= 5).FirstOrDefault(); + Vehicle veh = NAPI.Pools.GetAllVehicles() + .Where(v => v.Position.DistanceTo(player.Position) <= 5) + .OrderBy(v => v.Position.DistanceTo(player.Position)) + .FirstOrDefault(); if (veh == null) { return; } - player.TriggerEvent("lookLastDrivers", JsonConvert.SerializeObject(VehicleManager.lastDriversInVehicle[veh])); + var lastDriverDic = new Dictionary(); + + if(VehicleManager.lastDriversInVehicle.ContainsKey(veh)) + { + lastDriverDic = VehicleManager.lastDriversInVehicle[veh]; + } + else + { + player.SendNotification("~r~Mit diesem Fahrzeug ist noch niemand gefahren"); + return; + } + + var list = lastDriverDic.Select(v => new + { + Name = v.Key, + Time = v.Value + }).OrderByDescending(v => v.Time).ToList(); + + player.TriggerEvent("lookLastDrivers", JsonConvert.SerializeObject(list)); } [Command("id", "~m~Benutzung: ~s~/id [Name]")] @@ -77,7 +98,7 @@ namespace ReallifeGamemode.Server.Commands } else { - pVeh = NAPI.Pools.GetAllVehicles().Where(v => v.Position.DistanceTo(player.Position) <= 5).FirstOrDefault(); + pVeh = NAPI.Pools.GetAllVehicles().Where(v => v.Position.DistanceTo(player.Position) <= 5).OrderBy(v => v.Position.DistanceTo(player.Position)).FirstOrDefault(); } if (pVeh == null) diff --git a/ReallifeGamemode.Server/Events/EnterVehicle.cs b/ReallifeGamemode.Server/Events/EnterVehicle.cs index 611948bd..0ac95d38 100644 --- a/ReallifeGamemode.Server/Events/EnterVehicle.cs +++ b/ReallifeGamemode.Server/Events/EnterVehicle.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using GTANetworkAPI; using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Server.Extensions; @@ -23,10 +24,10 @@ namespace ReallifeGamemode.Server.Events if (!VehicleManager.lastDriversInVehicle.ContainsKey(vehicle)) { - VehicleManager.lastDriversInVehicle.Add(vehicle, new List()); + VehicleManager.lastDriversInVehicle.Add(vehicle, new Dictionary()); } - VehicleManager.lastDriversInVehicle[vehicle].Add(client.Name); + VehicleManager.lastDriversInVehicle[vehicle][client.Name] = DateTime.Now; if (vehicle.GetServerVehicle() is FactionVehicle veh) { diff --git a/ReallifeGamemode.Server/Managers/VehicleManager.cs b/ReallifeGamemode.Server/Managers/VehicleManager.cs index 034eb9cf..95604c72 100644 --- a/ReallifeGamemode.Server/Managers/VehicleManager.cs +++ b/ReallifeGamemode.Server/Managers/VehicleManager.cs @@ -19,7 +19,7 @@ namespace ReallifeGamemode.Server.Managers public class VehicleManager : Script { - public static Dictionary> lastDriversInVehicle = new Dictionary>(); + public static Dictionary> lastDriversInVehicle = new Dictionary>(); private static readonly List _enabledMods = new List() { From a76ac747fd28e1d5c4f3328729598ad04cbe9af4 Mon Sep 17 00:00:00 2001 From: hydrant Date: Thu, 15 Apr 2021 13:17:27 +0200 Subject: [PATCH 25/59] =?UTF-8?q?fix=20afk=20wt=20mitz=C3=A4hlen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ReallifeGamemode.Server/WeaponDeal/WeaponDealManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ReallifeGamemode.Server/WeaponDeal/WeaponDealManager.cs b/ReallifeGamemode.Server/WeaponDeal/WeaponDealManager.cs index 54830d89..560c4e4b 100644 --- a/ReallifeGamemode.Server/WeaponDeal/WeaponDealManager.cs +++ b/ReallifeGamemode.Server/WeaponDeal/WeaponDealManager.cs @@ -196,7 +196,7 @@ namespace ReallifeGamemode.Server.WeaponDeal fVeh.AddAttachment("weapondeal1", false); fVeh.AddAttachment("weapondeal2", false); InventoryManager.RemoveAllItemsfromVehicleInventory(fVeh); - int oMembers = NAPI.Pools.GetAllPlayers().Where(p => p.IsLoggedIn() && p.GetUser(context).FactionId == user.FactionId).Count(); + int oMembers = NAPI.Pools.GetAllPlayers().Where(p => !p.IsAfk() && p.IsLoggedIn() && p.GetUser(context).FactionId == user.FactionId).Count(); if (factionVehicle.GetOwners().Contains(8) || factionVehicle.GetOwners().Contains(7)) { From 24112ef5b5d38235ed35b98d9349d1e41b273aa5 Mon Sep 17 00:00:00 2001 From: hydrant Date: Thu, 15 Apr 2021 13:17:44 +0200 Subject: [PATCH 26/59] maybe chat fix --- ReallifeGamemode.Client/assets/chat/index.html | 2 +- ReallifeGamemode.Client/assets/chat/js/main.js | 13 ++----------- ReallifeGamemode.Client/assets/chat/js/newMain.js | 4 ++++ 3 files changed, 7 insertions(+), 12 deletions(-) diff --git a/ReallifeGamemode.Client/assets/chat/index.html b/ReallifeGamemode.Client/assets/chat/index.html index 235d45c3..d4354663 100644 --- a/ReallifeGamemode.Client/assets/chat/index.html +++ b/ReallifeGamemode.Client/assets/chat/index.html @@ -9,6 +9,6 @@
      - + \ No newline at end of file diff --git a/ReallifeGamemode.Client/assets/chat/js/main.js b/ReallifeGamemode.Client/assets/chat/js/main.js index 55576e9b..fe051878 100644 --- a/ReallifeGamemode.Client/assets/chat/js/main.js +++ b/ReallifeGamemode.Client/assets/chat/js/main.js @@ -1,6 +1,4 @@ -var neatoEmojiConverter = require('neato-emoji-converter') - -let chat = +let chat = { size: 0, history_limit: 50, @@ -40,14 +38,7 @@ var chatAPI = push: (text) => { let colorPositions = []; let colors = []; - let chatElement = "
    • " - - var converter = new neatoEmojiConverter([replacements]); - text = converter.replaceShortcodesWith(text, function (unicodeChar, shortcode, name, object) { - if (unicodeChar) { return unicodeChar } - else if (object.url) { return `${name}` } - else { return shortcode } - }); + let chatElement = "
    • "; for (let i = 0; i < text.length; i++) { let colorCheck = `${text[i]}${text[i + 1]}${text[i + 2]}`; diff --git a/ReallifeGamemode.Client/assets/chat/js/newMain.js b/ReallifeGamemode.Client/assets/chat/js/newMain.js index 290c53ac..c749059b 100644 --- a/ReallifeGamemode.Client/assets/chat/js/newMain.js +++ b/ReallifeGamemode.Client/assets/chat/js/newMain.js @@ -206,6 +206,10 @@ enableChatInput(false); } + + chatAPI.push("lol"); + + $("#chat").hide(); }); }); }, { "neato-emoji-converter": 2 }], 2: [function (require, module, exports) { From 3a37e4683c383d843f1c0fe8b1177fee92cc62cd Mon Sep 17 00:00:00 2001 From: hydrant Date: Thu, 15 Apr 2021 13:17:55 +0200 Subject: [PATCH 27/59] afk status shared data --- ReallifeGamemode.Server/Events/PlayerEvent.cs | 2 +- ReallifeGamemode.Server/Extensions/ClientExtension.cs | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/ReallifeGamemode.Server/Events/PlayerEvent.cs b/ReallifeGamemode.Server/Events/PlayerEvent.cs index ad8b51fc..886d25fe 100644 --- a/ReallifeGamemode.Server/Events/PlayerEvent.cs +++ b/ReallifeGamemode.Server/Events/PlayerEvent.cs @@ -17,7 +17,7 @@ namespace ReallifeGamemode.Server.Events [RemoteEvent("CLIENT:SetAfkStatus")] public void SetPlayerAfkStatus(Player player, bool status) { - player.SetServerData("isAfk", status); + player.SetSharedData("isAfk", status); if(status) { player.SendNotification("Du wurdest ~b~AFK~s~ gesetzt", true); diff --git a/ReallifeGamemode.Server/Extensions/ClientExtension.cs b/ReallifeGamemode.Server/Extensions/ClientExtension.cs index 8872b5a5..7058cbae 100644 --- a/ReallifeGamemode.Server/Extensions/ClientExtension.cs +++ b/ReallifeGamemode.Server/Extensions/ClientExtension.cs @@ -138,7 +138,12 @@ namespace ReallifeGamemode.Server.Extensions public static bool IsAfk(this Player player) { - return player.GetServerData("isAfk", false); + if(!player.HasSharedData("isAfk")) + { + return false; + } + + return player.GetSharedData("isAfk"); } public static bool IsAlive(this Player player) From ab7f5465db5e92ccc9cb850167e13b181afb6124 Mon Sep 17 00:00:00 2001 From: hydrant Date: Thu, 15 Apr 2021 13:26:21 +0200 Subject: [PATCH 28/59] =?UTF-8?q?afk=20text=20=C3=BCber=20kopf=20wenn=20af?= =?UTF-8?q?k?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ReallifeGamemode.Client/Gui/nametags.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/ReallifeGamemode.Client/Gui/nametags.ts b/ReallifeGamemode.Client/Gui/nametags.ts index 7fee2fc4..97fd1cc5 100644 --- a/ReallifeGamemode.Client/Gui/nametags.ts +++ b/ReallifeGamemode.Client/Gui/nametags.ts @@ -29,7 +29,7 @@ const colors = [ export default function customNametags() { mp.nametags.enabled = false; - mp.events.add('render', (nametags) => { + mp.events.add(RageEnums.EventKey.RENDER, (nametags) => { const graphics = mp.game.graphics; const screenRes = graphics.getScreenResolution(0, 0); @@ -51,7 +51,13 @@ export default function customNametags() { let color = colors.find(c => c.id === colorId).color; - mp.game.graphics.drawText(player.name + " (" + player.remoteId + ")", [x, y], + let nametagText = player.name + " (" + player.remoteId + ")"; + + if (player.getVariable("isAfk")) { + nametagText += " ~r~AFK"; + } + + mp.game.graphics.drawText(nametagText, [x, y], { font: 4, color: [color[0], color[1], color[2], color[3]], From 230e37851ce95b228176e32c81b0c7a026e1d43d Mon Sep 17 00:00:00 2001 From: hydrant Date: Thu, 15 Apr 2021 14:13:05 +0200 Subject: [PATCH 29/59] [HOTFIX] points nicht gespeichert --- ReallifeGamemode.Server/Managers/InteractionManager.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ReallifeGamemode.Server/Managers/InteractionManager.cs b/ReallifeGamemode.Server/Managers/InteractionManager.cs index fc2af555..5b3e349d 100644 --- a/ReallifeGamemode.Server/Managers/InteractionManager.cs +++ b/ReallifeGamemode.Server/Managers/InteractionManager.cs @@ -642,7 +642,6 @@ namespace ReallifeGamemode.Server.Managers if (targetUser.Points < 0) { targetUser.Points = 0; - dbContext.SaveChanges(); } else if (targetUser.Points >= 12) { @@ -654,12 +653,13 @@ namespace ReallifeGamemode.Server.Managers targetUser.Points = 0; targetUser.DriverLicenseVehicle = false; targetUser.DriverLicenseBike = false; - dbContext.SaveChanges(); } else { target.SendNotification($"~w~Grund: ~g~{reason}~w~. ~x~Du hast nun ~y~{targetUser.Points}/12 ~x~Strafpunkten.", true); } + + dbContext.SaveChanges(); } [RemoteEvent("CLIENT:InteractionMenu_Ticket")] From d2c493655f81cc66785c063aa23a4c968e2c0dfc Mon Sep 17 00:00:00 2001 From: hydrant Date: Thu, 15 Apr 2021 14:13:52 +0200 Subject: [PATCH 30/59] [HOTFIX] /heal bei offline target error fix --- .../Commands/FactionCommands.cs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/ReallifeGamemode.Server/Commands/FactionCommands.cs b/ReallifeGamemode.Server/Commands/FactionCommands.cs index e423885c..92134b64 100644 --- a/ReallifeGamemode.Server/Commands/FactionCommands.cs +++ b/ReallifeGamemode.Server/Commands/FactionCommands.cs @@ -355,15 +355,15 @@ namespace ReallifeGamemode.Server.Commands public void CmdFactionMedicHealive(Player player, string receiver, int price = 10) { Player target = PlayerService.GetPlayerByNameOrId(receiver); - if (player.GetUser()?.FactionId != 2) + if(target == null || !target.IsLoggedIn()) { - ChatService.NotAuthorized(player); + ChatService.PlayerNotFound(player); return; } - if (player.Position.DistanceTo(target.Position) > 5) + if (player.GetUser()?.FactionId != 2) { - ChatService.ErrorMessage(player, "Der Patient ist zu weit entfernt"); + ChatService.NotAuthorized(player); return; } @@ -390,6 +390,12 @@ namespace ReallifeGamemode.Server.Commands return; } + if (player.Position.DistanceTo(target.Position) > 5) + { + ChatService.ErrorMessage(player, "Der Patient ist zu weit entfernt"); + return; + } + if (target.Health == 100) { ChatService.ErrorMessage(player, "Der Spieler ist bereits voll geheilt"); From 97f827cd0a1873ea70348d72c7d01d7d145266a5 Mon Sep 17 00:00:00 2001 From: Fabian Date: Thu, 15 Apr 2021 19:19:56 +0200 Subject: [PATCH 31/59] =?UTF-8?q?medic=20ausgaben=20versch=C3=B6nert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ReallifeGamemode.Server/Commands/AdminCommands.cs | 2 +- ReallifeGamemode.Server/Events/Disconnect.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ReallifeGamemode.Server/Commands/AdminCommands.cs b/ReallifeGamemode.Server/Commands/AdminCommands.cs index 39a9251c..90862772 100644 --- a/ReallifeGamemode.Server/Commands/AdminCommands.cs +++ b/ReallifeGamemode.Server/Commands/AdminCommands.cs @@ -1406,7 +1406,7 @@ namespace ReallifeGamemode.Server.Commands MedicTask task = Medic.ReviveTasks.FirstOrDefault(t => t.Victim == player.Name); if (task != null) { - ChatService.BroadcastFaction("Info: Der Auftrag von " + target.Name + " wurde entfernt (Administrativ wiederbelebt)", new List() { 2 }); + ChatService.BroadcastFaction("~y~[MEDIC] ~w~Der Auftrag von " + target.Name + " wurde entfernt (Administrativ wiederbelebt)", new List() { 2 }); } target.SetData("isDead", false); diff --git a/ReallifeGamemode.Server/Events/Disconnect.cs b/ReallifeGamemode.Server/Events/Disconnect.cs index d44559c9..14d74fb3 100644 --- a/ReallifeGamemode.Server/Events/Disconnect.cs +++ b/ReallifeGamemode.Server/Events/Disconnect.cs @@ -67,7 +67,7 @@ namespace ReallifeGamemode.Server.Events if (task != null) { - ChatService.BroadcastFaction("Info: Der Auftrag von " + player.Name + " wurde entfernt (Ausgeloggt)", new List() { 2 }); + ChatService.BroadcastFaction("~y~[MEDIC] ~w~Info: Der Auftrag von " + player.Name + " wurde entfernt (Ausgeloggt)", new List() { 2 }); } if (player.IsAdminDuty()) From 95ae4cd227880acc5a233b58c04da53497f454ae Mon Sep 17 00:00:00 2001 From: hydrant Date: Thu, 15 Apr 2021 19:10:57 +0200 Subject: [PATCH 32/59] adjust chat radius (normal chat 25 megaphone 50) --- ReallifeGamemode.Server/Commands/FactionCommands.cs | 2 +- ReallifeGamemode.Server/Events/Chat.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ReallifeGamemode.Server/Commands/FactionCommands.cs b/ReallifeGamemode.Server/Commands/FactionCommands.cs index b0826192..9e061fcc 100644 --- a/ReallifeGamemode.Server/Commands/FactionCommands.cs +++ b/ReallifeGamemode.Server/Commands/FactionCommands.cs @@ -436,7 +436,7 @@ namespace ReallifeGamemode.Server.Commands return; } - ChatService.SendInRange(player.Position, 15, "!{#FFFF00}[" + player.GetUser().Faction.Name + " " + player.Name + ": !{#FFFF00}" + message + "]"); + ChatService.SendInRange(player.Position, 50, "!{#FFFF00}[" + player.GetUser().Faction.Name + " " + player.Name + ": !{#FFFF00}" + message + "]"); } [Command("cuff", "~m~Benutzung: ~s~/cuff")] diff --git a/ReallifeGamemode.Server/Events/Chat.cs b/ReallifeGamemode.Server/Events/Chat.cs index e20a7499..47f1e8fa 100644 --- a/ReallifeGamemode.Server/Events/Chat.cs +++ b/ReallifeGamemode.Server/Events/Chat.cs @@ -11,7 +11,7 @@ namespace ReallifeGamemode.Server.Events { string serverMsg = Regex.Replace(message, "(~[a-zA-Z]~)|(!{(.*)})", ""); if (serverMsg.Trim().Length == 0) return; - NAPI.Player.GetPlayersInRadiusOfPlayer(10, player).ForEach(p => + NAPI.Player.GetPlayersInRadiusOfPlayer(25, player).ForEach(p => { ChatService.SendMessage(p, $"{player.Name} sagt: {serverMsg}"); }); From a95ec44baa2af823c8b4ce011e77ea8d07a37a8b Mon Sep 17 00:00:00 2001 From: VegaZ Date: Thu, 15 Apr 2021 22:43:43 +0200 Subject: [PATCH 33/59] Progress --- .../Interaction/ammunation/ammunation.ts | 53 ++++++++++++++++--- ReallifeGamemode.Client/global.d.ts | 7 ++- ReallifeGamemode.Client/index.ts | 3 ++ ReallifeGamemode.Server/Events/Key.cs | 9 +++- .../Managers/PositionManager.cs | 13 +++-- .../Shop/Ammunation/Ammunation.cs | 23 +------- 6 files changed, 75 insertions(+), 33 deletions(-) diff --git a/ReallifeGamemode.Client/Interaction/ammunation/ammunation.ts b/ReallifeGamemode.Client/Interaction/ammunation/ammunation.ts index 71a8876a..2604f1ef 100644 --- a/ReallifeGamemode.Client/Interaction/ammunation/ammunation.ts +++ b/ReallifeGamemode.Client/Interaction/ammunation/ammunation.ts @@ -12,17 +12,56 @@ const Color = NativeUI.Color; export default function ammunation(globalData: IGlobalData) { var screenRes = mp.game.graphics.getScreenResolution(0, 0); + var weapons: Weapon[]; - class Weapon { + mp.events.add("AmmunationShop:LoadNativeUI", (weaponList: string) => { + mp.gui.chat.push("a "+ weaponList); + //mp.gui.chat.activate(false); + //globalData.InMenu = true; + weapons = JSON.parse(weaponList); + mp.gui.chat.push("b " +weapons.toString()); - } + var menu = getAmmunationMenu(); - mp.events.add("AmmunationShop:LoadNativeUI", (weapons: Weapon[]) => { - mp.gui.chat.activate(false); - globalData.InMenu = true; - mp.gui.chat.push(weapons.toString()); + //Schaut nach ob mindestens eine Waffe in weapons existiert welche die CategoryId beinhaltet + for (var c = 1; c < 9; c++) { + switch (c) { + case 1: {//Meelee + + break; + } - var ammunationMenu = new Menu("Ammunation", "", new Point(0, screenRes.y / 3), null, null); + case 2: {//Pistolen + if (weapons.find(w => w.CategoryId == c)) { + var pistolItem = new MenuItem("Pistolen", "",); + menu.AddItem(pistolItem); + menu.BindMenuToItem(getWeaponsFromCategory(menu, c, "Pistolen"),pistolItem); + } + break; + } + } + } + + }); + + function getAmmunationMenu(): NativeUI.Menu { + return new Menu("Ammunation", "", new Point(0, screenRes.y / 3), null, null); + } + + function getWeaponsFromCategory(parentMenu: NativeUI.Menu, category: number, categoryName: string): NativeUI.Menu { + var categoryMenu = new Menu(categoryName, "", new Point(0, screenRes.y / 3), null, null); + + var cWeapons: Weapon[] = weapons.filter(w => w.CategoryId == category); + + cWeapons.forEach(weapon => { + var menuItem = new MenuItem(weapon.WeaponModel, "Munition: " + weapon.Ammo); + categoryMenu.AddItem(menuItem); + menuItem.SetRightLabel("~g~$~w~" + weapon.Price.toString()); + }) + + return categoryMenu; + + }; }; \ No newline at end of file diff --git a/ReallifeGamemode.Client/global.d.ts b/ReallifeGamemode.Client/global.d.ts index 297908cd..4f4eba3e 100644 --- a/ReallifeGamemode.Client/global.d.ts +++ b/ReallifeGamemode.Client/global.d.ts @@ -78,8 +78,13 @@ declare type FactionRank = { declare type Weapon = { WeaponModel: string; - Category: number; + CategoryId: number; SlotID: number; Ammo: number; Price: number; +} + +declare type WeaponCategory = { + Category: number; + Weapons: Weapon[]; } \ No newline at end of file diff --git a/ReallifeGamemode.Client/index.ts b/ReallifeGamemode.Client/index.ts index 303729b5..7768f9ac 100644 --- a/ReallifeGamemode.Client/index.ts +++ b/ReallifeGamemode.Client/index.ts @@ -258,6 +258,9 @@ animationSync(); import antiCheat from './admin/anticheat'; antiCheat(globalData); +import ammunation from './Interaction/ammunation/ammunation'; +ammunation(globalData); + require('./Gui/policedepartment'); require('./Gui/helptext'); diff --git a/ReallifeGamemode.Server/Events/Key.cs b/ReallifeGamemode.Server/Events/Key.cs index 8f489190..9ab5bffb 100644 --- a/ReallifeGamemode.Server/Events/Key.cs +++ b/ReallifeGamemode.Server/Events/Key.cs @@ -519,7 +519,14 @@ namespace ReallifeGamemode.Server.Events } if (nearestAmmunationPoint != null) { - nearestAmmunationPoint.Ammunation.LoadShopNUI(player); + if (!user.WeaponLicense) + { + player.SendNotification("~r~Du besitzt keinen Waffenschein"); + } + else + { + nearestAmmunationPoint.Ammunation.LoadShopNUI(player); + } } if (user.FactionLeader) { diff --git a/ReallifeGamemode.Server/Managers/PositionManager.cs b/ReallifeGamemode.Server/Managers/PositionManager.cs index ab871efd..e53e9aef 100644 --- a/ReallifeGamemode.Server/Managers/PositionManager.cs +++ b/ReallifeGamemode.Server/Managers/PositionManager.cs @@ -283,11 +283,18 @@ namespace ReallifeGamemode.Server.Managers NAPI.TextLabel.CreateTextLabel("24/7 - Dr\u00fccke ~y~E", s.Position, 7, 1, 0, new Color(255, 255, 255), false, 0); } - foreach (AmmunationPoint s in AmmunationPoints) + foreach (Ammunation s in ShopManager.Ammunations) { - NAPI.Marker.CreateMarker(1, new Vector3(s.Position.X, s.Position.Y, s.Position.Z - 2), new Vector3(s.Position.X, s.Position.Y, s.Position.Z + 1), + NAPI.Marker.CreateMarker(1, new Vector3(s.vector.X, s.vector.Y, s.vector.Z - 2), new Vector3(s.vector.X, s.vector.Y, s.vector.Z + 1), new Vector3(0, 0, 0), 2, new Color(255, 255, 255, 50), false, 0); - NAPI.TextLabel.CreateTextLabel("Ammunation - Dr\u00fccke ~y~E", s.Position, 7, 1, 0, new Color(255, 255, 255), false, 0); + NAPI.TextLabel.CreateTextLabel("Ammunation - Dr\u00fccke ~y~E", s.vector, 7, 1, 0, new Color(255, 255, 255), false, 0); + + AmmunationPoint ammuShop = new AmmunationPoint + { + Position = s.vector, + Ammunation = s + }; + AmmunationPoints.Add(ammuShop); } #endregion Shops diff --git a/ReallifeGamemode.Server/Shop/Ammunation/Ammunation.cs b/ReallifeGamemode.Server/Shop/Ammunation/Ammunation.cs index 9848ef29..0cb768a2 100644 --- a/ReallifeGamemode.Server/Shop/Ammunation/Ammunation.cs +++ b/ReallifeGamemode.Server/Shop/Ammunation/Ammunation.cs @@ -17,7 +17,7 @@ namespace ReallifeGamemode.Server.Shop.Ammunation public Ammunation(Vector3 position) { - this.vector = vector; + this.vector = position; LoadWeapons(); } @@ -30,27 +30,8 @@ namespace ReallifeGamemode.Server.Shop.Ammunation } public void LoadShopNUI(Player client) { - User u = client.GetUser(); - if (u == null) - { - return; - } - - //List melee = weaponList.ToList().FindAll(w => w.Category == "Nahkampfwaffen"); //1 - List handguns = weaponList.ToList().FindAll(w => w.CategoryId == 2); //2 - //List smgs = weaponList.ToList().FindAll(w => w.Category == "Maschinenpistolen"); //3 - //List shotguns = weaponList.ToList().FindAll(w => w.Category == "Schrotflinten"); //4 - //List assaultrifles = weaponList.ToList().FindAll(w => w.Category == "Sturmgewehre"); //5 - //List lmgs = weaponList.ToList().FindAll(w => w.Category == "Leichte Maschinengewehre"); //6 - //List sniperrifles = weaponList.ToList().FindAll(w => w.Category == "Scharfschützengewehre"); //7 - //List heavyweapons = weaponList.ToList().FindAll(w => w.Category == "Schwere Waffen"); //8 - //List throwables = weaponList.ToList().FindAll(w => w.Category == "Werfbare Waffen"); //9 - - List shopWeapons = new List - { - handguns.ToArray(), - }; + List shopWeapons = weaponList.ToList(); client.TriggerEvent("AmmunationShop:LoadNativeUI", JsonConvert.SerializeObject(shopWeapons)); } } From 9a5df05b652c0e1650da32e976963cf63ffbbf4b Mon Sep 17 00:00:00 2001 From: VegaZ Date: Fri, 16 Apr 2021 23:10:21 +0200 Subject: [PATCH 34/59] Clientside Ammunation --- .../Interaction/ammunation/ammunation.ts | 77 +- ReallifeGamemode.Database/Entities/Weapon.cs | 3 + .../20210416175726_Ammunations2.Designer.cs | 1981 +++++++++++++++++ .../Migrations/20210416175726_Ammunations2.cs | 33 + .../DatabaseContextModelSnapshot.cs | 6 + .../Shop/Ammunation/Ammunation.cs | 24 +- 6 files changed, 2096 insertions(+), 28 deletions(-) create mode 100644 ReallifeGamemode.Database/Migrations/20210416175726_Ammunations2.Designer.cs create mode 100644 ReallifeGamemode.Database/Migrations/20210416175726_Ammunations2.cs diff --git a/ReallifeGamemode.Client/Interaction/ammunation/ammunation.ts b/ReallifeGamemode.Client/Interaction/ammunation/ammunation.ts index 2604f1ef..52ab0fe2 100644 --- a/ReallifeGamemode.Client/Interaction/ammunation/ammunation.ts +++ b/ReallifeGamemode.Client/Interaction/ammunation/ammunation.ts @@ -15,53 +15,76 @@ export default function ammunation(globalData: IGlobalData) { var weapons: Weapon[]; mp.events.add("AmmunationShop:LoadNativeUI", (weaponList: string) => { - mp.gui.chat.push("a "+ weaponList); - //mp.gui.chat.activate(false); - //globalData.InMenu = true; + weapons = JSON.parse(weaponList); - mp.gui.chat.push("b " +weapons.toString()); - var menu = getAmmunationMenu(); //Schaut nach ob mindestens eine Waffe in weapons existiert welche die CategoryId beinhaltet - for (var c = 1; c < 9; c++) { + for (var c = 1; c < 10; c++) { switch (c) { - case 1: {//Meelee + case 1: { //Meelee break; } - case 2: {//Pistolen + case 2: { //Pistolen if (weapons.find(w => w.CategoryId == c)) { - var pistolItem = new MenuItem("Pistolen", "",); + var pistolItem = new MenuItem("Pistolen", "Das kleine Kaliber",); menu.AddItem(pistolItem); menu.BindMenuToItem(getWeaponsFromCategory(menu, c, "Pistolen"),pistolItem); } break; } + case 9: { //Sonstiges (Armor / Fallschirm) + var otherItem = new MenuItem("Sonstiges", "Schutzwesten, Fallschirme...",); + menu.AddItem(otherItem); + menu.BindMenuToItem(getWeaponsFromCategory(menu, c, "Sonstiges"), otherItem); + break; + } } + } + menu.Open(); + mp.gui.chat.activate(false); + globalData.InMenu = true; + + menu.MenuClose.on(() => { + globalData.InMenu = false; + mp.gui.chat.show(true); + }) + }); + + function getAmmunationMenu(): NativeUI.Menu { + return new Menu("", "AMMU NATION - Waffenladen", new Point(0, screenRes.y / 3), "shopui_title_gunclub", "shopui_title_gunclub"); + } + + function getWeaponsFromCategory(parentMenu: NativeUI.Menu, category: number, categoryName: string): NativeUI.Menu { + var categoryMenu = new Menu("", categoryName, new Point(0, screenRes.y / 3), "shopui_title_gunclub", "shopui_title_gunclub"); + + categoryMenu.Visible = false; + + var cWeapons: Weapon[] = weapons.filter(w => w.CategoryId == category); + + if (category < 9) { //Weapons aus Datenbank + cWeapons.forEach(weapon => { + var weaponItem: NativeUI.UIMenuItem = new MenuItem(weapon.WeaponModel, "Munition: " + weapon.Ammo, [weapon.WeaponModel, weapon.Ammo, weapon.Price]); + categoryMenu.AddItem(weaponItem); + weaponItem.SetRightLabel("~g~$" + weapon.Price.toString()); + }) + categoryMenu.ItemSelect.on((item: NativeUI.UIMenuItem, index: number) => { + mp.events.callRemote("CLIENT:Ammunation_BuyWeapon", item.Data[0], item.Data[1], item.Data[2]); //weaponmodel / ammo / price + }); + } else { //Sonstiges = Schutzwesten / Fallschirme + var armorItem = new MenuItem("Schutzweste", "Sch\u00fctzt dich"); + categoryMenu.AddItem(armorItem); + armorItem.SetRightLabel("~g~$3000"); + + var parachuteItem = new MenuItem("Fallschirm", "Flieg damit wohin du willst"); + categoryMenu.AddItem(parachuteItem); + parachuteItem.SetRightLabel("~g~$500"); } - }); - - function getAmmunationMenu(): NativeUI.Menu { - return new Menu("Ammunation", "", new Point(0, screenRes.y / 3), null, null); - } - - function getWeaponsFromCategory(parentMenu: NativeUI.Menu, category: number, categoryName: string): NativeUI.Menu { - var categoryMenu = new Menu(categoryName, "", new Point(0, screenRes.y / 3), null, null); - - var cWeapons: Weapon[] = weapons.filter(w => w.CategoryId == category); - - cWeapons.forEach(weapon => { - var menuItem = new MenuItem(weapon.WeaponModel, "Munition: " + weapon.Ammo); - categoryMenu.AddItem(menuItem); - menuItem.SetRightLabel("~g~$~w~" + weapon.Price.toString()); - }) - return categoryMenu; - }; }; \ No newline at end of file diff --git a/ReallifeGamemode.Database/Entities/Weapon.cs b/ReallifeGamemode.Database/Entities/Weapon.cs index 9cfcda69..586a74ce 100644 --- a/ReallifeGamemode.Database/Entities/Weapon.cs +++ b/ReallifeGamemode.Database/Entities/Weapon.cs @@ -19,5 +19,8 @@ namespace ReallifeGamemode.Database.Entities public int SlotID { get; set; } public int Ammo { get; set; } public float Price { get; set; } + + public bool Legal { get; set; } + public bool AmmunationActive { get; set; } } } diff --git a/ReallifeGamemode.Database/Migrations/20210416175726_Ammunations2.Designer.cs b/ReallifeGamemode.Database/Migrations/20210416175726_Ammunations2.Designer.cs new file mode 100644 index 00000000..44f31f9a --- /dev/null +++ b/ReallifeGamemode.Database/Migrations/20210416175726_Ammunations2.Designer.cs @@ -0,0 +1,1981 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using ReallifeGamemode.Database.Models; + +namespace ReallifeGamemode.Database.Migrations +{ + [DbContext(typeof(DatabaseContext))] + [Migration("20210416175726_Ammunations2")] + partial class Ammunations2 + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "3.1.3") + .HasAnnotation("PropertyAccessMode", PropertyAccessMode.PreferFieldDuringConstruction) + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.ATM", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Active") + .HasColumnType("tinyint(1)"); + + b.Property("Balance") + .HasColumnType("int"); + + b.Property("Faulty") + .HasColumnType("tinyint(1)"); + + b.Property("X") + .HasColumnType("float"); + + b.Property("Y") + .HasColumnType("float"); + + b.Property("Z") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.ToTable("ATMs"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Ban", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Applied") + .HasColumnType("int"); + + b.Property("BannedBy") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.Property("Reason") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.Property("UntilDateTime") + .HasColumnType("int"); + + b.Property("UserId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("Bans"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.BusRoute", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Description") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.HasKey("Id"); + + b.ToTable("BusRoutes"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.BusRoutePoint", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("BusRouteId") + .HasColumnType("int"); + + b.Property("Description") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.Property("X") + .HasColumnType("float"); + + b.Property("Y") + .HasColumnType("float"); + + b.Property("Z") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("BusRouteId"); + + b.ToTable("BusRoutesPoints"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.BusinessBankAccount", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Balance") + .HasColumnType("int"); + + b.Property("BusinessId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("BusinessId") + .IsUnique(); + + b.ToTable("BusinessBankAccounts"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.BusinessData", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("BusinessId") + .HasColumnType("int"); + + b.Property("Price") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("BusinessData"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Character", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Ageing") + .HasColumnType("tinyint unsigned"); + + b.Property("AgeingOpacity") + .HasColumnType("float"); + + b.Property("BeardColor") + .HasColumnType("tinyint unsigned"); + + b.Property("Blemishes") + .HasColumnType("tinyint unsigned"); + + b.Property("BlemishesOpacity") + .HasColumnType("float"); + + b.Property("Blush") + .HasColumnType("tinyint unsigned"); + + b.Property("BlushColor") + .HasColumnType("tinyint unsigned"); + + b.Property("BlushOpacity") + .HasColumnType("float"); + + b.Property("BrowDepth") + .HasColumnType("float"); + + b.Property("BrowHeight") + .HasColumnType("float"); + + b.Property("CheekDepth") + .HasColumnType("float"); + + b.Property("CheekboneHeight") + .HasColumnType("float"); + + b.Property("CheekboneWidth") + .HasColumnType("float"); + + b.Property("ChestHair") + .HasColumnType("tinyint unsigned"); + + b.Property("ChestHairColor") + .HasColumnType("tinyint unsigned"); + + b.Property("ChestHairOpacity") + .HasColumnType("float"); + + b.Property("ChinDepth") + .HasColumnType("float"); + + b.Property("ChinHeight") + .HasColumnType("float"); + + b.Property("ChinIndent") + .HasColumnType("float"); + + b.Property("ChinWidth") + .HasColumnType("float"); + + b.Property("Complexion") + .HasColumnType("tinyint unsigned"); + + b.Property("ComplexionOpacity") + .HasColumnType("float"); + + b.Property("EyeColor") + .HasColumnType("tinyint unsigned"); + + b.Property("EyeSize") + .HasColumnType("float"); + + b.Property("EyebrowColor") + .HasColumnType("tinyint unsigned"); + + b.Property("Eyebrows") + .HasColumnType("tinyint unsigned"); + + b.Property("EyebrowsOpacity") + .HasColumnType("float"); + + b.Property("FacialHair") + .HasColumnType("tinyint unsigned"); + + b.Property("FacialHairOpacity") + .HasColumnType("float"); + + b.Property("Father") + .HasColumnType("tinyint unsigned"); + + b.Property("Freckles") + .HasColumnType("tinyint unsigned"); + + b.Property("FrecklesOpacity") + .HasColumnType("float"); + + b.Property("Gender") + .HasColumnType("tinyint(1)"); + + b.Property("Hair") + .HasColumnType("tinyint unsigned"); + + b.Property("HairColor") + .HasColumnType("tinyint unsigned"); + + b.Property("HairHighlightColor") + .HasColumnType("tinyint unsigned"); + + b.Property("JawShape") + .HasColumnType("float"); + + b.Property("JawWidth") + .HasColumnType("float"); + + b.Property("LipThickness") + .HasColumnType("float"); + + b.Property("Lipstick") + .HasColumnType("tinyint unsigned"); + + b.Property("LipstickColor") + .HasColumnType("tinyint unsigned"); + + b.Property("LipstickOpacity") + .HasColumnType("float"); + + b.Property("Makeup") + .HasColumnType("tinyint unsigned"); + + b.Property("MakeupOpacity") + .HasColumnType("float"); + + b.Property("Mother") + .HasColumnType("tinyint unsigned"); + + b.Property("NeckWidth") + .HasColumnType("float"); + + b.Property("NoseBottomHeight") + .HasColumnType("float"); + + b.Property("NoseBridgeDepth") + .HasColumnType("float"); + + b.Property("NoseBroken") + .HasColumnType("float"); + + b.Property("NoseTipHeight") + .HasColumnType("float"); + + b.Property("NoseTipLength") + .HasColumnType("float"); + + b.Property("NoseWidth") + .HasColumnType("float"); + + b.Property("Similarity") + .HasColumnType("float"); + + b.Property("SkinSimilarity") + .HasColumnType("float"); + + b.Property("SunDamage") + .HasColumnType("tinyint unsigned"); + + b.Property("SunDamageOpacity") + .HasColumnType("float"); + + b.Property("UserId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("Characters"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.CharacterCloth", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("ClothId") + .HasColumnType("int"); + + b.Property("Duty") + .HasColumnType("tinyint(1)"); + + b.Property("SlotId") + .HasColumnType("int"); + + b.Property("SlotType") + .HasColumnType("tinyint unsigned"); + + b.Property("Texture") + .HasColumnType("int"); + + b.Property("UserId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("CharacterClothes"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.ClothCombination", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Gender") + .HasColumnType("tinyint(1)"); + + b.Property("Top") + .HasColumnType("int"); + + b.Property("Torso") + .HasColumnType("int"); + + b.Property("Undershirt") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("ClothCombinations"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Door", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Category") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.Property("FactionId") + .HasColumnType("int"); + + b.Property("Locked") + .HasColumnType("tinyint(1)"); + + b.Property("Model") + .HasColumnType("int"); + + b.Property("Name") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.Property("Radius") + .HasColumnType("float"); + + b.Property("X") + .HasColumnType("float"); + + b.Property("Y") + .HasColumnType("float"); + + b.Property("Z") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("FactionId"); + + b.ToTable("Doors"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.DutyCloth", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("ClothId") + .HasColumnType("int"); + + b.Property("FactionId") + .HasColumnType("int"); + + b.Property("Gender") + .HasColumnType("tinyint(1)"); + + b.Property("SlotId") + .HasColumnType("int"); + + b.Property("SlotType") + .HasColumnType("tinyint unsigned"); + + b.HasKey("Id"); + + b.HasIndex("FactionId"); + + b.ToTable("DutyClothes"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Faction", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("BankAccountId") + .HasColumnType("int"); + + b.Property("GangOwned") + .HasColumnType("tinyint(1)"); + + b.Property("Name") + .HasColumnType("varchar(32) CHARACTER SET utf8mb4") + .HasMaxLength(32); + + b.Property("StateOwned") + .HasColumnType("tinyint(1)"); + + b.Property("WeaponDealTime") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("BankAccountId"); + + b.ToTable("Factions"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.FactionBankAccount", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Active") + .HasColumnType("tinyint(1)"); + + b.Property("Balance") + .HasColumnType("int"); + + b.Property("Bic") + .HasColumnType("varchar(12) CHARACTER SET utf8mb4") + .HasMaxLength(12); + + b.Property("Iban") + .HasColumnType("varchar(32) CHARACTER SET utf8mb4") + .HasMaxLength(32); + + b.HasKey("Id"); + + b.ToTable("FactionBankAccounts"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.FactionRank", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("FactionId") + .HasColumnType("int"); + + b.Property("Order") + .HasColumnType("int"); + + b.Property("RankName") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.HasKey("Id"); + + b.HasIndex("FactionId"); + + b.ToTable("FactionRanks"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.FactionWeapon", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Ammount") + .HasColumnType("int"); + + b.Property("FactionId") + .HasColumnType("int"); + + b.Property("Rank") + .HasColumnType("int"); + + b.Property("SlotID") + .HasColumnType("int"); + + b.Property("WeaponModel") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.HasKey("Id"); + + b.HasIndex("FactionId"); + + b.ToTable("FactionWeapons"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.GotoPoint", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Active") + .HasColumnType("tinyint(1)"); + + b.Property("Description") + .HasColumnType("varchar(32) CHARACTER SET utf8mb4") + .HasMaxLength(32); + + b.Property("X") + .HasColumnType("float"); + + b.Property("Y") + .HasColumnType("float"); + + b.Property("Z") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.ToTable("GotoPoints"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Group", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("BankAccountId") + .HasColumnType("int"); + + b.Property("Name") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.HasKey("Id"); + + b.HasIndex("BankAccountId"); + + b.ToTable("Groups"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.GroupBankAccount", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Balance") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("GroupBankAccounts"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.House", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("BankAccountId") + .HasColumnType("int"); + + b.Property("CanRentIn") + .HasColumnType("tinyint(1)"); + + b.Property("LastRentSetTime") + .HasColumnType("datetime(6)"); + + b.Property("OwnerId") + .HasColumnType("int"); + + b.Property("Price") + .HasColumnType("int"); + + b.Property("RentalFee") + .HasColumnType("int"); + + b.Property("Type") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.Property("X") + .HasColumnType("float"); + + b.Property("Y") + .HasColumnType("float"); + + b.Property("Z") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("BankAccountId"); + + b.HasIndex("OwnerId"); + + b.ToTable("Houses"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.HouseBankAccount", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Balance") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("HouseBankAccounts"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.HouseRental", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("HouseId") + .HasColumnType("int"); + + b.Property("UserId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("HouseId"); + + b.HasIndex("UserId"); + + b.ToTable("HouseRentals"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Interior", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("EnterPositionStr") + .HasColumnName("EnterPosition") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.Property("ExitPositionStr") + .HasColumnName("ExitPosition") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.Property("Name") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.HasKey("Id"); + + b.ToTable("Interiors"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Location", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Description") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.Property("Heading") + .HasColumnType("double"); + + b.Property("X") + .HasColumnType("double"); + + b.Property("Y") + .HasColumnType("double"); + + b.Property("Z") + .HasColumnType("double"); + + b.HasKey("Id"); + + b.ToTable("Locations"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Logs.BankAccountTransactionHistory", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Fee") + .HasColumnType("int"); + + b.Property("MoneySent") + .HasColumnType("int"); + + b.Property("NewReceiverBalance") + .HasColumnType("int"); + + b.Property("NewSenderBalance") + .HasColumnType("int"); + + b.Property("Origin") + .HasColumnType("varchar(32) CHARACTER SET utf8mb4") + .HasMaxLength(32); + + b.Property("Receiver") + .HasColumnType("varchar(32) CHARACTER SET utf8mb4") + .HasMaxLength(32); + + b.Property("ReceiverBalance") + .HasColumnType("int"); + + b.Property("Sender") + .HasColumnType("varchar(32) CHARACTER SET utf8mb4") + .HasMaxLength(32); + + b.Property("SenderBalance") + .HasColumnType("int"); + + b.Property("Timestamp") + .ValueGeneratedOnAdd() + .HasColumnType("datetime(6)"); + + b.HasKey("Id"); + + b.ToTable("BankAccountTransactionLogs"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Logs.Death", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("CauseOfDeath") + .HasColumnType("varchar(64) CHARACTER SET utf8mb4") + .HasMaxLength(64); + + b.Property("KillerHeading") + .HasColumnType("float"); + + b.Property("KillerId") + .HasColumnType("int"); + + b.Property("KillerPositionX") + .HasColumnType("float"); + + b.Property("KillerPositionY") + .HasColumnType("float"); + + b.Property("KillerPositionZ") + .HasColumnType("float"); + + b.Property("Timestamp") + .ValueGeneratedOnAdd() + .HasColumnType("datetime(6)"); + + b.Property("VictimHeading") + .HasColumnType("float"); + + b.Property("VictimId") + .HasColumnType("int"); + + b.Property("VictimPositionX") + .HasColumnType("float"); + + b.Property("VictimPositionY") + .HasColumnType("float"); + + b.Property("VictimPositionZ") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("KillerId"); + + b.HasIndex("VictimId"); + + b.ToTable("DeathLogs"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.News", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Active") + .HasColumnType("tinyint(1)"); + + b.Property("Caption") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.Property("Content") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.Property("Timestamp") + .HasColumnType("int"); + + b.Property("UserId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("News"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Saves.SavedBlip", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Active") + .HasColumnType("tinyint(1)"); + + b.Property("Alpha") + .HasColumnType("tinyint unsigned"); + + b.Property("Color") + .HasColumnType("tinyint unsigned"); + + b.Property("Dimension") + .HasColumnType("tinyint unsigned"); + + b.Property("DrawDistance") + .HasColumnType("float"); + + b.Property("Name") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.Property("PositionX") + .HasColumnType("float"); + + b.Property("PositionY") + .HasColumnType("float"); + + b.Property("PositionZ") + .HasColumnType("float"); + + b.Property("Rotation") + .HasColumnType("float"); + + b.Property("Scale") + .HasColumnType("float"); + + b.Property("ShortRange") + .HasColumnType("tinyint(1)"); + + b.Property("Sprite") + .HasColumnType("smallint"); + + b.HasKey("Id"); + + b.ToTable("Blips"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Saves.SavedMarker", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Active") + .HasColumnType("tinyint(1)"); + + b.Property("ColorA") + .HasColumnType("tinyint unsigned"); + + b.Property("ColorB") + .HasColumnType("tinyint unsigned"); + + b.Property("ColorG") + .HasColumnType("tinyint unsigned"); + + b.Property("ColorR") + .HasColumnType("tinyint unsigned"); + + b.Property("Dimension") + .HasColumnType("tinyint unsigned"); + + b.Property("DirectionX") + .HasColumnType("float"); + + b.Property("DirectionY") + .HasColumnType("float"); + + b.Property("DirectionZ") + .HasColumnType("float"); + + b.Property("PositionX") + .HasColumnType("float"); + + b.Property("PositionY") + .HasColumnType("float"); + + b.Property("PositionZ") + .HasColumnType("float"); + + b.Property("RotationX") + .HasColumnType("float"); + + b.Property("RotationY") + .HasColumnType("float"); + + b.Property("RotationZ") + .HasColumnType("float"); + + b.Property("Scale") + .HasColumnType("float"); + + b.Property("Type") + .HasColumnType("tinyint unsigned"); + + b.Property("Visible") + .HasColumnType("tinyint(1)"); + + b.HasKey("Id"); + + b.ToTable("Markers"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Saves.SavedPed", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Active") + .HasColumnType("tinyint(1)"); + + b.Property("Dimension") + .HasColumnType("tinyint unsigned"); + + b.Property("HashModel") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.Property("Heading") + .HasColumnType("float"); + + b.Property("PositionX") + .HasColumnType("float"); + + b.Property("PositionY") + .HasColumnType("float"); + + b.Property("PositionZ") + .HasColumnType("float"); + + b.Property("Type") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Peds"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Saves.SavedPickup", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Active") + .HasColumnType("tinyint(1)"); + + b.Property("Dimension") + .HasColumnType("tinyint unsigned"); + + b.Property("PositionX") + .HasColumnType("float") + .HasMaxLength(128); + + b.Property("PositionY") + .HasColumnType("float"); + + b.Property("PositionZ") + .HasColumnType("float"); + + b.Property("RespawnTime") + .HasColumnType("int"); + + b.Property("RotationX") + .HasColumnType("float"); + + b.Property("RotationY") + .HasColumnType("float"); + + b.Property("RotationZ") + .HasColumnType("float"); + + b.Property("Vehicle") + .HasColumnType("tinyint(1)"); + + b.HasKey("Id"); + + b.ToTable("Pickups"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Saves.SavedTextLabel", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Active") + .HasColumnType("tinyint(1)"); + + b.Property("ColorA") + .HasColumnType("tinyint unsigned"); + + b.Property("ColorB") + .HasColumnType("tinyint unsigned"); + + b.Property("ColorG") + .HasColumnType("tinyint unsigned"); + + b.Property("ColorR") + .HasColumnType("tinyint unsigned"); + + b.Property("Dimension") + .HasColumnType("tinyint unsigned"); + + b.Property("DrawDistance") + .HasColumnType("float"); + + b.Property("Font") + .HasColumnType("tinyint unsigned"); + + b.Property("LOS") + .HasColumnType("tinyint(1)"); + + b.Property("PositionX") + .HasColumnType("float"); + + b.Property("PositionY") + .HasColumnType("float"); + + b.Property("PositionZ") + .HasColumnType("float"); + + b.Property("Text") + .IsRequired() + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.HasKey("Id"); + + b.ToTable("TextLabels"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.ServerVariable", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Value") + .HasColumnType("int"); + + b.Property("Variable") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.HasKey("Id"); + + b.ToTable("ServerVariables"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.ServerVehicle", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Active") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(true); + + b.Property("Discriminator") + .IsRequired() + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.Property("DistanceDriven") + .HasColumnType("float"); + + b.Property("Heading") + .HasColumnType("float"); + + b.Property("Livery") + .HasColumnType("int"); + + b.Property("Locked") + .HasColumnType("tinyint(1)"); + + b.Property("Model") + .HasColumnType("int unsigned"); + + b.Property("NumberPlate") + .HasColumnType("varchar(8) CHARACTER SET utf8mb4") + .HasMaxLength(8); + + b.Property("PositionX") + .HasColumnType("float"); + + b.Property("PositionY") + .HasColumnType("float"); + + b.Property("PositionZ") + .HasColumnType("float"); + + b.Property("PrimaryColor") + .HasColumnType("int"); + + b.Property("SecondaryColor") + .HasColumnType("int"); + + b.Property("TankAmount") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.ToTable("ServerVehicles"); + + b.HasDiscriminator("Discriminator").HasValue("ServerVehicle"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.ShopClothe", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Category") + .HasColumnType("int"); + + b.Property("ClotheId") + .HasColumnType("int"); + + b.Property("ComponentId") + .HasColumnType("int"); + + b.Property("Gender") + .HasColumnType("tinyint(1)"); + + b.Property("Price") + .HasColumnType("int"); + + b.Property("TypeId") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.HasKey("Id"); + + b.ToTable("ShopClothes"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.ShopItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Amount") + .HasColumnType("int"); + + b.Property("ItemId") + .HasColumnType("int"); + + b.Property("Price") + .HasColumnType("int"); + + b.Property("ShopId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("ShopItems"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.TuningGarage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("X") + .HasColumnType("float"); + + b.Property("Y") + .HasColumnType("float"); + + b.Property("Z") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.ToTable("TuningGarages"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Turfs", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Color") + .HasColumnType("int"); + + b.Property("FactionId") + .HasColumnType("int"); + + b.Property("MaxValue") + .HasColumnType("int"); + + b.Property("Name") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.Property("Owner") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.Property("Range") + .HasColumnType("float"); + + b.Property("Rotation") + .HasColumnType("float"); + + b.Property("Surplus") + .HasColumnType("tinyint(1)"); + + b.Property("Value") + .HasColumnType("int"); + + b.Property("Vector") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.Property("X") + .HasColumnType("float"); + + b.Property("Y") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.ToTable("Turfs"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("AdminLevel") + .HasColumnType("int"); + + b.Property("BanId") + .HasColumnType("int"); + + b.Property("BankAccountId") + .HasColumnType("int"); + + b.Property("BusSkill") + .HasColumnType("int"); + + b.Property("BusinessId") + .HasColumnType("int"); + + b.Property("CharacterId") + .HasColumnType("int"); + + b.Property("Dead") + .HasColumnType("tinyint(1)"); + + b.Property("DriverLicenseBike") + .HasColumnType("tinyint(1)"); + + b.Property("DriverLicenseVehicle") + .HasColumnType("tinyint(1)"); + + b.Property("Email") + .HasColumnType("varchar(64) CHARACTER SET utf8mb4") + .HasMaxLength(64); + + b.Property("FactionId") + .HasColumnType("int"); + + b.Property("FactionLeader") + .HasColumnType("tinyint(1)"); + + b.Property("FactionRankId") + .HasColumnType("int"); + + b.Property("FlyingLicensePlane") + .HasColumnType("tinyint(1)"); + + b.Property("GroupId") + .HasColumnType("int"); + + b.Property("GroupRank") + .HasColumnType("int"); + + b.Property("Handmoney") + .HasColumnType("int"); + + b.Property("HouseId") + .HasColumnType("int"); + + b.Property("JailTime") + .HasColumnType("int"); + + b.Property("JobId") + .HasColumnType("int"); + + b.Property("LogUserId") + .HasColumnType("int"); + + b.Property("Name") + .HasColumnType("varchar(32) CHARACTER SET utf8mb4") + .HasMaxLength(32); + + b.Property("Password") + .HasColumnType("varchar(64) CHARACTER SET utf8mb4") + .HasMaxLength(64); + + b.Property("PaydayTimer") + .HasColumnType("int"); + + b.Property("PilotSkill") + .HasColumnType("int"); + + b.Property("PlayedMinutes") + .HasColumnType("int"); + + b.Property("Points") + .HasColumnType("int"); + + b.Property("PositionX") + .HasColumnType("float"); + + b.Property("PositionY") + .HasColumnType("float"); + + b.Property("PositionZ") + .HasColumnType("float"); + + b.Property("RegistrationDate") + .ValueGeneratedOnAdd() + .HasColumnType("datetime(6)"); + + b.Property("SocialClubName") + .HasColumnType("varchar(32) CHARACTER SET utf8mb4") + .HasMaxLength(32); + + b.Property("Wage") + .HasColumnType("int"); + + b.Property("Wanteds") + .HasColumnType("int"); + + b.Property("WeaponLicense") + .HasColumnType("tinyint(1)"); + + b.Property("failpoints") + .HasColumnType("int"); + + b.Property("otheramount") + .HasColumnType("int"); + + b.Property("trashcount") + .HasColumnType("int"); + + b.Property("warn") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("BanId"); + + b.HasIndex("BankAccountId"); + + b.HasIndex("BusinessId") + .IsUnique(); + + b.HasIndex("CharacterId"); + + b.HasIndex("FactionId"); + + b.HasIndex("FactionRankId"); + + b.HasIndex("GroupId"); + + b.HasIndex("HouseId"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("Users"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.UserBankAccount", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Active") + .HasColumnType("tinyint(1)"); + + b.Property("Balance") + .HasColumnType("int"); + + b.Property("Bic") + .HasColumnType("varchar(12) CHARACTER SET utf8mb4") + .HasMaxLength(12); + + b.Property("Iban") + .HasColumnType("varchar(32) CHARACTER SET utf8mb4") + .HasMaxLength(32); + + b.HasKey("Id"); + + b.ToTable("UserBankAccounts"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.UserItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Amount") + .HasColumnType("int"); + + b.Property("ItemId") + .HasColumnType("int"); + + b.Property("Slot") + .HasColumnType("int"); + + b.Property("UserId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("UserItems"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.UserWeapon", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Ammo") + .HasColumnType("int"); + + b.Property("UserId") + .HasColumnType("int"); + + b.Property("WeaponId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.HasIndex("WeaponId"); + + b.ToTable("UserWeapons"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.VehicleItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Amount") + .HasColumnType("int"); + + b.Property("ItemId") + .HasColumnType("int"); + + b.Property("Slot") + .HasColumnType("int"); + + b.Property("VehicleId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("VehicleId"); + + b.ToTable("VehicleItems"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.VehicleMod", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("ModId") + .HasColumnType("int"); + + b.Property("ServerVehicleId") + .HasColumnType("int"); + + b.Property("Slot") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ServerVehicleId", "Slot") + .IsUnique(); + + b.ToTable("VehicleMods"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Weapon", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Ammo") + .HasColumnType("int"); + + b.Property("AmmunationActive") + .HasColumnType("tinyint(1)"); + + b.Property("CategoryId") + .HasColumnType("int"); + + b.Property("Legal") + .HasColumnType("tinyint(1)"); + + b.Property("Price") + .HasColumnType("float"); + + b.Property("SlotID") + .HasColumnType("int"); + + b.Property("WeaponModel") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.HasKey("Id"); + + b.HasIndex("CategoryId"); + + b.ToTable("Weapons"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.WeaponCategory", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("Category") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.HasKey("Id"); + + b.ToTable("WeaponCategories"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Whitelist", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("SocialClubName") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.HasKey("Id"); + + b.ToTable("WhitelistEntries"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.FactionVehicle", b => + { + b.HasBaseType("ReallifeGamemode.Database.Entities.ServerVehicle"); + + b.Property("BuyPrice") + .HasColumnType("int"); + + b.Property("Owners") + .HasColumnType("longtext CHARACTER SET utf8mb4"); + + b.ToTable("FactionVehicles"); + + b.HasDiscriminator().HasValue("FactionVehicle"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.GroupVehicle", b => + { + b.HasBaseType("ReallifeGamemode.Database.Entities.ServerVehicle"); + + b.Property("GroupId") + .HasColumnType("int"); + + b.HasIndex("GroupId"); + + b.HasDiscriminator().HasValue("GroupVehicle"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.JobVehicle", b => + { + b.HasBaseType("ReallifeGamemode.Database.Entities.ServerVehicle"); + + b.Property("JobId") + .HasColumnType("int"); + + b.HasDiscriminator().HasValue("JobVehicle"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.NoobSpawnVehicle", b => + { + b.HasBaseType("ReallifeGamemode.Database.Entities.ServerVehicle"); + + b.HasDiscriminator().HasValue("NoobSpawnVehicle"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.NoobVehicle", b => + { + b.HasBaseType("ReallifeGamemode.Database.Entities.ServerVehicle"); + + b.HasDiscriminator().HasValue("NoobVehicle"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Saves.SavedVehicle", b => + { + b.HasBaseType("ReallifeGamemode.Database.Entities.ServerVehicle"); + + b.HasDiscriminator().HasValue("SavedVehicle"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.SchoolVehicle", b => + { + b.HasBaseType("ReallifeGamemode.Database.Entities.ServerVehicle"); + + b.Property("SchoolId") + .HasColumnType("int"); + + b.HasDiscriminator().HasValue("SchoolVehicle"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.ShopVehicle", b => + { + b.HasBaseType("ReallifeGamemode.Database.Entities.ServerVehicle"); + + b.Property("BusinessId") + .HasColumnType("int"); + + b.Property("Price") + .HasColumnType("int"); + + b.ToTable("ShopVehicles"); + + b.HasDiscriminator().HasValue("ShopVehicle"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.UserVehicle", b => + { + b.HasBaseType("ReallifeGamemode.Database.Entities.ServerVehicle"); + + b.Property("Price") + .HasColumnName("UserVehicle_Price") + .HasColumnType("int"); + + b.Property("UserId") + .HasColumnType("int"); + + b.HasIndex("UserId"); + + b.ToTable("UserVehicles"); + + b.HasDiscriminator().HasValue("UserVehicle"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Ban", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.BusRoutePoint", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.BusRoute", "BusRoute") + .WithMany("RoutePoints") + .HasForeignKey("BusRouteId"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Character", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.CharacterCloth", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Door", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.Faction", "Faction") + .WithMany() + .HasForeignKey("FactionId"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.DutyCloth", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.Faction", "Faction") + .WithMany() + .HasForeignKey("FactionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Faction", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.FactionBankAccount", "BankAccount") + .WithMany() + .HasForeignKey("BankAccountId"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.FactionRank", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.Faction", "Faction") + .WithMany() + .HasForeignKey("FactionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.FactionWeapon", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.Faction", "Faction") + .WithMany() + .HasForeignKey("FactionId"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Group", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.GroupBankAccount", "BankAccount") + .WithMany() + .HasForeignKey("BankAccountId"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.House", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.HouseBankAccount", "BankAccount") + .WithMany() + .HasForeignKey("BankAccountId"); + + b.HasOne("ReallifeGamemode.Database.Entities.User", "Owner") + .WithMany() + .HasForeignKey("OwnerId"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.HouseRental", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.House", "House") + .WithMany("Rentals") + .HasForeignKey("HouseId"); + + b.HasOne("ReallifeGamemode.Database.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Logs.Death", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.User", "Killer") + .WithMany() + .HasForeignKey("KillerId"); + + b.HasOne("ReallifeGamemode.Database.Entities.User", "Victim") + .WithMany() + .HasForeignKey("VictimId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.News", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.User", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.Ban", "Ban") + .WithMany() + .HasForeignKey("BanId"); + + b.HasOne("ReallifeGamemode.Database.Entities.UserBankAccount", "BankAccount") + .WithMany() + .HasForeignKey("BankAccountId"); + + b.HasOne("ReallifeGamemode.Database.Entities.Character", "Character") + .WithMany() + .HasForeignKey("CharacterId"); + + b.HasOne("ReallifeGamemode.Database.Entities.Faction", "Faction") + .WithMany() + .HasForeignKey("FactionId"); + + b.HasOne("ReallifeGamemode.Database.Entities.FactionRank", "FactionRank") + .WithMany() + .HasForeignKey("FactionRankId"); + + b.HasOne("ReallifeGamemode.Database.Entities.Group", "Group") + .WithMany() + .HasForeignKey("GroupId"); + + b.HasOne("ReallifeGamemode.Database.Entities.House", "House") + .WithMany() + .HasForeignKey("HouseId"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.UserItem", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.UserWeapon", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("ReallifeGamemode.Database.Entities.Weapon", "Weapon") + .WithMany() + .HasForeignKey("WeaponId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.VehicleItem", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.ServerVehicle", "Vehicle") + .WithMany() + .HasForeignKey("VehicleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.VehicleMod", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.ServerVehicle", "Vehicle") + .WithMany() + .HasForeignKey("ServerVehicleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.Weapon", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.WeaponCategory", "WeaponCategory") + .WithMany() + .HasForeignKey("CategoryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.GroupVehicle", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.Group", "Group") + .WithMany() + .HasForeignKey("GroupId"); + }); + + modelBuilder.Entity("ReallifeGamemode.Database.Entities.UserVehicle", b => + { + b.HasOne("ReallifeGamemode.Database.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/ReallifeGamemode.Database/Migrations/20210416175726_Ammunations2.cs b/ReallifeGamemode.Database/Migrations/20210416175726_Ammunations2.cs new file mode 100644 index 00000000..2a99825d --- /dev/null +++ b/ReallifeGamemode.Database/Migrations/20210416175726_Ammunations2.cs @@ -0,0 +1,33 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace ReallifeGamemode.Database.Migrations +{ + public partial class Ammunations2 : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "AmmunationActive", + table: "Weapons", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "Legal", + table: "Weapons", + nullable: false, + defaultValue: false); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "AmmunationActive", + table: "Weapons"); + + migrationBuilder.DropColumn( + name: "Legal", + table: "Weapons"); + } + } +} diff --git a/ReallifeGamemode.Database/Migrations/DatabaseContextModelSnapshot.cs b/ReallifeGamemode.Database/Migrations/DatabaseContextModelSnapshot.cs index a49d3a9f..d392d034 100644 --- a/ReallifeGamemode.Database/Migrations/DatabaseContextModelSnapshot.cs +++ b/ReallifeGamemode.Database/Migrations/DatabaseContextModelSnapshot.cs @@ -1600,9 +1600,15 @@ namespace ReallifeGamemode.Database.Migrations b.Property("Ammo") .HasColumnType("int"); + b.Property("AmmunationActive") + .HasColumnType("tinyint(1)"); + b.Property("CategoryId") .HasColumnType("int"); + b.Property("Legal") + .HasColumnType("tinyint(1)"); + b.Property("Price") .HasColumnType("float"); diff --git a/ReallifeGamemode.Server/Shop/Ammunation/Ammunation.cs b/ReallifeGamemode.Server/Shop/Ammunation/Ammunation.cs index 0cb768a2..318ea6c5 100644 --- a/ReallifeGamemode.Server/Shop/Ammunation/Ammunation.cs +++ b/ReallifeGamemode.Server/Shop/Ammunation/Ammunation.cs @@ -7,6 +7,8 @@ using Newtonsoft.Json; using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Database.Models; using ReallifeGamemode.Server.Extensions; +using ReallifeGamemode.Server.Managers; +using ReallifeGamemode.Server.Services; namespace ReallifeGamemode.Server.Shop.Ammunation { @@ -25,7 +27,7 @@ namespace ReallifeGamemode.Server.Shop.Ammunation { using (var dbContext = new DatabaseContext()) { - weaponList = dbContext.Weapons.ToList(); + weaponList = dbContext.Weapons.ToList().FindAll(w => w.AmmunationActive == true); } } public void LoadShopNUI(Player client) @@ -34,5 +36,25 @@ namespace ReallifeGamemode.Server.Shop.Ammunation List shopWeapons = weaponList.ToList(); client.TriggerEvent("AmmunationShop:LoadNativeUI", JsonConvert.SerializeObject(shopWeapons)); } + + [RemoteEvent("CLIENT:Ammunation_BuyWeapon")] + public void AmmunationBuyWeapoon(Player player, WeaponHash weaponmodel, int ammo , int price) + { + player.SendChatMessage("JO IS ANGEKOMMEN" + weaponmodel + " " + ammo + " " + price); + using (var dbContext = new DatabaseContext()) + { + User user = player.GetUser(dbContext); + + if (user.Handmoney < price) + { + player.SendNotification("Du hast nicht genügend Geld bei dir"); + return; + } + user.Handmoney -= price; + dbContext.SaveChanges(); + player.GiveWeapon((WeaponHash)weaponmodel, ammo); + //client.TriggerEvent("SERVER:SET_HANDMONEY", user.Handmoney); + } + } } } From c823dab9e032c016c5f3db5e2461a9d99101905d Mon Sep 17 00:00:00 2001 From: VegaZ Date: Sat, 17 Apr 2021 01:26:33 +0200 Subject: [PATCH 35/59] Fix Weapon Buy --- .../Interaction/ammunation/ammunation.ts | 13 ++++++------ .../Events/UpdateCharacterWeapon.cs | 19 ++++++++++++++++++ .../Shop/Ammunation/Ammunation.cs | 20 ------------------- 3 files changed, 25 insertions(+), 27 deletions(-) diff --git a/ReallifeGamemode.Client/Interaction/ammunation/ammunation.ts b/ReallifeGamemode.Client/Interaction/ammunation/ammunation.ts index 52ab0fe2..2c1a6611 100644 --- a/ReallifeGamemode.Client/Interaction/ammunation/ammunation.ts +++ b/ReallifeGamemode.Client/Interaction/ammunation/ammunation.ts @@ -66,15 +66,12 @@ export default function ammunation(globalData: IGlobalData) { if (category < 9) { //Weapons aus Datenbank cWeapons.forEach(weapon => { - var weaponItem: NativeUI.UIMenuItem = new MenuItem(weapon.WeaponModel, "Munition: " + weapon.Ammo, [weapon.WeaponModel, weapon.Ammo, weapon.Price]); + var weaponItem: NativeUI.UIMenuItem = new MenuItem(weapon.WeaponModel, "Du erhältst " + weapon.Ammo + " Munition", [weapon.WeaponModel, weapon.Ammo, weapon.Price]); categoryMenu.AddItem(weaponItem); weaponItem.SetRightLabel("~g~$" + weapon.Price.toString()); - }) - categoryMenu.ItemSelect.on((item: NativeUI.UIMenuItem, index: number) => { - mp.events.callRemote("CLIENT:Ammunation_BuyWeapon", item.Data[0], item.Data[1], item.Data[2]); //weaponmodel / ammo / price - }); + }) } else { //Sonstiges = Schutzwesten / Fallschirme - var armorItem = new MenuItem("Schutzweste", "Sch\u00fctzt dich"); + var armorItem = new MenuItem("Schutzweste", "Sch\u00fctzt dich","armor",); categoryMenu.AddItem(armorItem); armorItem.SetRightLabel("~g~$3000"); @@ -83,7 +80,9 @@ export default function ammunation(globalData: IGlobalData) { parachuteItem.SetRightLabel("~g~$500"); } - + categoryMenu.ItemSelect.on((item: NativeUI.UIMenuItem, index: number) => { + mp.events.callRemote("CLIENT:Ammunation_BuyWeapon", item.Data[0], item.Data[1], item.Data[2]); //weaponmodel / ammo / price + }); return categoryMenu; }; diff --git a/ReallifeGamemode.Server/Events/UpdateCharacterWeapon.cs b/ReallifeGamemode.Server/Events/UpdateCharacterWeapon.cs index 00de3e94..ea213d7b 100644 --- a/ReallifeGamemode.Server/Events/UpdateCharacterWeapon.cs +++ b/ReallifeGamemode.Server/Events/UpdateCharacterWeapon.cs @@ -118,5 +118,24 @@ namespace ReallifeGamemode.Server.Events context.SaveChanges(); } } + + [RemoteEvent("CLIENT:Ammunation_BuyWeapon")] + public void AmmunationBuyWeapoon(Player player, string weaponmodel, int ammo, int price) + { + using (var dbContext = new DatabaseContext()) + { + User user = player.GetUser(dbContext); + + if (user.Handmoney < price) + { + player.SendNotification("Du hast nicht genügend Geld bei dir"); + return; + } + user.Handmoney -= price; + dbContext.SaveChanges(); + player.GiveWeapon(NAPI.Util.WeaponNameToModel(weaponmodel), ammo); + //client.TriggerEvent("SERVER:SET_HANDMONEY", user.Handmoney); + } + } } } diff --git a/ReallifeGamemode.Server/Shop/Ammunation/Ammunation.cs b/ReallifeGamemode.Server/Shop/Ammunation/Ammunation.cs index 318ea6c5..fb30a048 100644 --- a/ReallifeGamemode.Server/Shop/Ammunation/Ammunation.cs +++ b/ReallifeGamemode.Server/Shop/Ammunation/Ammunation.cs @@ -36,25 +36,5 @@ namespace ReallifeGamemode.Server.Shop.Ammunation List shopWeapons = weaponList.ToList(); client.TriggerEvent("AmmunationShop:LoadNativeUI", JsonConvert.SerializeObject(shopWeapons)); } - - [RemoteEvent("CLIENT:Ammunation_BuyWeapon")] - public void AmmunationBuyWeapoon(Player player, WeaponHash weaponmodel, int ammo , int price) - { - player.SendChatMessage("JO IS ANGEKOMMEN" + weaponmodel + " " + ammo + " " + price); - using (var dbContext = new DatabaseContext()) - { - User user = player.GetUser(dbContext); - - if (user.Handmoney < price) - { - player.SendNotification("Du hast nicht genügend Geld bei dir"); - return; - } - user.Handmoney -= price; - dbContext.SaveChanges(); - player.GiveWeapon((WeaponHash)weaponmodel, ammo); - //client.TriggerEvent("SERVER:SET_HANDMONEY", user.Handmoney); - } - } } } From 870448666ca1828b2e9384414d9c7d7799fd7a33 Mon Sep 17 00:00:00 2001 From: hydrant Date: Sat, 17 Apr 2021 01:29:03 +0200 Subject: [PATCH 36/59] Vehicle extensions fix model check --- .../Extensions/VehicleExtension.cs | 55 +++++++++---------- 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/ReallifeGamemode.Server/Extensions/VehicleExtension.cs b/ReallifeGamemode.Server/Extensions/VehicleExtension.cs index f7493d9e..06af94bf 100644 --- a/ReallifeGamemode.Server/Extensions/VehicleExtension.cs +++ b/ReallifeGamemode.Server/Extensions/VehicleExtension.cs @@ -36,24 +36,23 @@ namespace ReallifeGamemode.Server.Extensions return 210 * 1000; case 4: - if ((VehicleHash)vehicle.HashCode == VehicleHash.Moonbeam - || (VehicleHash)vehicle.HashCode == VehicleHash.Moonbeam2 - || (VehicleHash)vehicle.HashCode == VehicleHash.Ratloader - || (VehicleHash)vehicle.HashCode == VehicleHash.Ratloader2 - || (VehicleHash)vehicle.HashCode == VehicleHash.Slamvan - || (VehicleHash)vehicle.HashCode == VehicleHash.Slamvan2 - || (VehicleHash)vehicle.HashCode == VehicleHash.Slamvan3 - || (VehicleHash)vehicle.HashCode == VehicleHash.Yosemite - || (VehicleHash)vehicle.HashCode == VehicleHash.Yosemite2 - || (VehicleHash)vehicle.HashCode == VehicleHash.Picador - || (VehicleHash)vehicle.HashCode == VehicleHash.Moonbeam) + if ((VehicleHash)vehicle.Model == VehicleHash.Moonbeam + || (VehicleHash)vehicle.Model == VehicleHash.Moonbeam2 + || (VehicleHash)vehicle.Model == VehicleHash.Ratloader + || (VehicleHash)vehicle.Model == VehicleHash.Ratloader2 + || (VehicleHash)vehicle.Model == VehicleHash.Slamvan + || (VehicleHash)vehicle.Model == VehicleHash.Slamvan2 + || (VehicleHash)vehicle.Model == VehicleHash.Slamvan3 + || (VehicleHash)vehicle.Model == VehicleHash.Yosemite + || (VehicleHash)vehicle.Model == VehicleHash.Yosemite2 + || (VehicleHash)vehicle.Model == VehicleHash.Picador) return 250 * 1000; else return 180 * 1000; case 5: - if ((VehicleHash)vehicle.HashCode == VehicleHash.Fagaloa - || (VehicleHash)vehicle.HashCode == VehicleHash.Cheburek) + if ((VehicleHash)vehicle.Model == VehicleHash.Fagaloa + || (VehicleHash)vehicle.Model == VehicleHash.Cheburek) return 200 * 1000; else return 110 * 1000; @@ -68,12 +67,12 @@ namespace ReallifeGamemode.Server.Extensions return 5 * 1000; case 9: - if ((VehicleHash)vehicle.HashCode == VehicleHash.Bifta - || (VehicleHash)vehicle.HashCode == VehicleHash.Blazer - || (VehicleHash)vehicle.HashCode == VehicleHash.Blazer2 - || (VehicleHash)vehicle.HashCode == VehicleHash.Blazer3 - || (VehicleHash)vehicle.HashCode == VehicleHash.Blazer4 - || (VehicleHash)vehicle.HashCode == VehicleHash.Blazer5) + if ((VehicleHash)vehicle.Model == VehicleHash.Bifta + || (VehicleHash)vehicle.Model == VehicleHash.Blazer + || (VehicleHash)vehicle.Model == VehicleHash.Blazer2 + || (VehicleHash)vehicle.Model == VehicleHash.Blazer3 + || (VehicleHash)vehicle.Model == VehicleHash.Blazer4 + || (VehicleHash)vehicle.Model == VehicleHash.Blazer5) return 30 * 1000; else return 300 * 1000; @@ -85,9 +84,9 @@ namespace ReallifeGamemode.Server.Extensions return 0; case 12: - if ((VehicleHash)vehicle.HashCode == VehicleHash.Minivan - || (VehicleHash)vehicle.HashCode == VehicleHash.Minivan2 - || (VehicleHash)vehicle.HashCode == VehicleHash.Bobcatxl) + if ((VehicleHash)vehicle.Model == VehicleHash.Minivan + || (VehicleHash)vehicle.Model == VehicleHash.Minivan2 + || (VehicleHash)vehicle.Model == VehicleHash.Bobcatxl) return 600 * 1000; else return 1000 * 1000; @@ -108,13 +107,13 @@ namespace ReallifeGamemode.Server.Extensions return 0; case 18: - if ((VehicleHash)vehicle.HashCode == VehicleHash.Policet) + if ((VehicleHash)vehicle.Model == VehicleHash.Policet) return 1000 * 1000; - else if ((VehicleHash)vehicle.HashCode == VehicleHash.Firetruk - || (VehicleHash)vehicle.HashCode == VehicleHash.Pbus - || (VehicleHash)vehicle.HashCode == VehicleHash.Policeb - || (VehicleHash)vehicle.HashCode == VehicleHash.Polmav - || (VehicleHash)vehicle.HashCode == VehicleHash.Predator) + else if ((VehicleHash)vehicle.Model == VehicleHash.Firetruk + || (VehicleHash)vehicle.Model == VehicleHash.Pbus + || (VehicleHash)vehicle.Model == VehicleHash.Policeb + || (VehicleHash)vehicle.Model == VehicleHash.Polmav + || (VehicleHash)vehicle.Model == VehicleHash.Predator) return 0; else return 150 * 1000; From 43c677811f8467265595b8ecabc1138af7320779 Mon Sep 17 00:00:00 2001 From: hydrant Date: Sat, 17 Apr 2021 01:29:11 +0200 Subject: [PATCH 37/59] afk kein wanted abtauchen --- ReallifeGamemode.Server/Wanted/WantedEscapeTimer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ReallifeGamemode.Server/Wanted/WantedEscapeTimer.cs b/ReallifeGamemode.Server/Wanted/WantedEscapeTimer.cs index 530e4741..7f6fe6ea 100644 --- a/ReallifeGamemode.Server/Wanted/WantedEscapeTimer.cs +++ b/ReallifeGamemode.Server/Wanted/WantedEscapeTimer.cs @@ -77,7 +77,7 @@ namespace ReallifeGamemode.Server.Wanted dbContext.SaveChanges(); waTimer[user.Id] = WantedEscapeTime; } - else if (!isNearCop) + else if (!isNearCop && !player.IsAfk()) { player.TriggerEvent("SERVER:SetWantedFlash", true); waTimer[user.Id] -= 2500; From 16087f0bc247fe51012d1aa7b326f66aec04e5c4 Mon Sep 17 00:00:00 2001 From: VegaZ Date: Sat, 17 Apr 2021 02:04:55 +0200 Subject: [PATCH 38/59] Remove Sonstiges --- ReallifeGamemode.Client/Interaction/ammunation/ammunation.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ReallifeGamemode.Client/Interaction/ammunation/ammunation.ts b/ReallifeGamemode.Client/Interaction/ammunation/ammunation.ts index 2c1a6611..947c7797 100644 --- a/ReallifeGamemode.Client/Interaction/ammunation/ammunation.ts +++ b/ReallifeGamemode.Client/Interaction/ammunation/ammunation.ts @@ -35,12 +35,12 @@ export default function ammunation(globalData: IGlobalData) { } break; } - case 9: { //Sonstiges (Armor / Fallschirm) + /*case 9: { //Sonstiges (Armor / Fallschirm) var otherItem = new MenuItem("Sonstiges", "Schutzwesten, Fallschirme...",); menu.AddItem(otherItem); menu.BindMenuToItem(getWeaponsFromCategory(menu, c, "Sonstiges"), otherItem); break; - } + }*/ } } menu.Open(); From 0ba342456757b38898ad9366ca1986a7b0aab406 Mon Sep 17 00:00:00 2001 From: hydrant Date: Sat, 17 Apr 2021 02:07:34 +0200 Subject: [PATCH 39/59] neue route --- ReallifeGamemode.Server/Job/BusDriverJob.cs | 33 ++++++++------------- 1 file changed, 12 insertions(+), 21 deletions(-) diff --git a/ReallifeGamemode.Server/Job/BusDriverJob.cs b/ReallifeGamemode.Server/Job/BusDriverJob.cs index 4aa735e2..425520b1 100644 --- a/ReallifeGamemode.Server/Job/BusDriverJob.cs +++ b/ReallifeGamemode.Server/Job/BusDriverJob.cs @@ -195,25 +195,16 @@ namespace ReallifeGamemode.Server.Job { 0, new List() { - //new Vector3(-601.733, -2049.285, 6.090), - //new Vector3(-598.849365234375, -2053.087646484375, 5.8428778648376465), - new Vector3(-229.679931640625, -2049.821533203125, 27.384798049926758), - new Vector3(-72.33480834960938, -615.8173217773438, 35.91234588623047), - new Vector3(-176.9166717529297, -153.85665893554688, 43.38493728637695), - new Vector3(-508.5746765136719, -261.1121826171875, 35.247962951660156), - new Vector3(-1396.5457763671875, 51.69581604003906, 53.21350860595703), - new Vector3(-1911.845458984375, 205.62884521484375, 84.06185150146484), - new Vector3(-1675.4029541015625, 488.7856140136719, 128.6395721435547), - new Vector3(-995.8155517578125, 589.4381713867188, 102.18698120117188), - new Vector3(-314.6571350097656, 451.9184875488281, 107.99801635742188), - new Vector3(211.09194946289062, 350.1848449707031, 105.41163635253906), - new Vector3(599.4515380859375, 626.0756225585938, 128.6754608154297), - new Vector3(969.324462890625, 164.03329467773438, 80.59388732910156), - new Vector3(1069.521240234375, -763.7572631835938, 57.43597412109375), - new Vector3(1421.075927734375, -1854.2821044921875, 70.56175994873047), - new Vector3(268.5604248046875, -2070.274169921875, 16.816179275512695), - new Vector3(-147.51795959472656, -1974.3182373046875, 22.48438262939453), - new Vector3(-569.0294189453125, -2210.80908203125, 5.571292877197266), + new Vector3(-146.62071, -2178.8228, 10.194298), + new Vector3(14.580393, -1578.6385, 29.212185), + new Vector3(222.91612, -1098.8556, 29.227453), + new Vector3(246.44946, -648.45496, 39.420746), + new Vector3(102.181, -298.95276, 46.04399), + new Vector3(-104.91002, -606.26013, 36.06103), + new Vector3(-288.1007, -1204.5107, 24.403156), + new Vector3(-166.23526, -1574.4166, 35.152023), + new Vector3(-60.337997, -1976.121, 16.486664), + new Vector3(-599.1891, -2049.2695, 6.14637), } }, { 1, @@ -573,7 +564,7 @@ namespace ReallifeGamemode.Server.Job return; } - if(!playerVehiclePair.ContainsKey(player)) + if (!playerVehiclePair.ContainsKey(player)) { return; } @@ -633,7 +624,7 @@ namespace ReallifeGamemode.Server.Job payWage(player, BusDriverJob.WAGE_PROFESSIOAL / BusDriverJob.playerRouteCurrent[player.Name].Count); } - public static void payWage(Player player, int wage) + public static void payWage(Player player, int wage) { using var dbContext = new DatabaseContext(); User user = player.GetUser(dbContext); From e6940c222a4d8d720378d71cb3fd547fb1b28089 Mon Sep 17 00:00:00 2001 From: hydrant Date: Sat, 17 Apr 2021 02:18:18 +0200 Subject: [PATCH 40/59] bus route 3 skill 3 --- ReallifeGamemode.Server/Job/BusDriverJob.cs | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/ReallifeGamemode.Server/Job/BusDriverJob.cs b/ReallifeGamemode.Server/Job/BusDriverJob.cs index 425520b1..181b2436 100644 --- a/ReallifeGamemode.Server/Job/BusDriverJob.cs +++ b/ReallifeGamemode.Server/Job/BusDriverJob.cs @@ -229,16 +229,15 @@ namespace ReallifeGamemode.Server.Job new List() { //new Vector3(-601.733, -2049.285, 6.090), - new Vector3(-146.62071, -2178.8228, 9.194298), - new Vector3(14.580393, -1578.6385, 28.212185), - new Vector3(222.91612, -1098.8556, 28.227453), - new Vector3(246.44946, -648.45496, 38.420746), - new Vector3(102.181, -298.95276, 45.04399), - new Vector3(-104.91002, -606.26013, 35.06103), - new Vector3(-288.1007, -1204.5107, 23.403156), - new Vector3(-166.23526, -1574.4166, 34.152023), - new Vector3(-60.337997, -1976.121, 15.486664), - new Vector3(-599.1891, -2049.2695, 5.14637), + new Vector3(-566.381, -2209.74, 5.88064), + new Vector3(769.912, -1983.54, 29.2573), + new Vector3(1021.58, -725.525, 57.6664), + new Vector3(244.279, -860.634, 29.5133), + new Vector3(-506.147, -282.95, 35.4909), + new Vector3(-1205.3, -130.106, 40.9405), + new Vector3(-1396.98, -773.447, 20.68), + new Vector3(-666.861, -1241.26, 10.5494), + new Vector3(-599.541, -2054.42, 6.0372), } }, }; From 6900f6e1725d42ba878c5fefe8b9f11a38394ea4 Mon Sep 17 00:00:00 2001 From: hydrant Date: Sat, 17 Apr 2021 02:41:25 +0200 Subject: [PATCH 41/59] =?UTF-8?q?halo=20bittesch=C3=B6n=202=20neue=20autoh?= =?UTF-8?q?aus=20bitte=20mit=20scharf?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Business/BikeDealerBusiness.cs | 2 +- .../Business/ClassicAndLuxuryCarshop.cs | 25 +++++++++++++++++++ .../Business/OldschoolCarshop.cs | 25 +++++++++++++++++++ .../Business/VapidCarDealerBusiness.cs | 2 +- 4 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 ReallifeGamemode.Server/Business/ClassicAndLuxuryCarshop.cs create mode 100644 ReallifeGamemode.Server/Business/OldschoolCarshop.cs diff --git a/ReallifeGamemode.Server/Business/BikeDealerBusiness.cs b/ReallifeGamemode.Server/Business/BikeDealerBusiness.cs index 48fff290..e1757a1d 100644 --- a/ReallifeGamemode.Server/Business/BikeDealerBusiness.cs +++ b/ReallifeGamemode.Server/Business/BikeDealerBusiness.cs @@ -6,7 +6,7 @@ namespace ReallifeGamemode.Server.Business { public override int Id => 8; - public override string Name => "Motorrad Shop"; + public override string Name => "Bike Shop"; public override Vector3 Position => new Vector3(1180.997, -394.9542, 68.01635); diff --git a/ReallifeGamemode.Server/Business/ClassicAndLuxuryCarshop.cs b/ReallifeGamemode.Server/Business/ClassicAndLuxuryCarshop.cs new file mode 100644 index 00000000..417c6007 --- /dev/null +++ b/ReallifeGamemode.Server/Business/ClassicAndLuxuryCarshop.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Text; +using GTANetworkAPI; + +namespace ReallifeGamemode.Server.Business +{ + class ClassicAndLuxuryCarshop : CarDealerBusinessBase + { + public override int Id => 12; + + public override string Name => "Classic & Luxury Carshop"; + + public override Vector3 Position => new Vector3(-1274.3439, 315.1384, 65.51176); + + public override Vector3 CarSpawnPositon => new Vector3(-1351.2072, 244.88942, 60.357693); + + public override float CarSpawnHeading => 3.62; + + public override void Load() + { + + } + } +} diff --git a/ReallifeGamemode.Server/Business/OldschoolCarshop.cs b/ReallifeGamemode.Server/Business/OldschoolCarshop.cs new file mode 100644 index 00000000..77dd7eec --- /dev/null +++ b/ReallifeGamemode.Server/Business/OldschoolCarshop.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Text; +using GTANetworkAPI; + +namespace ReallifeGamemode.Server.Business +{ + class OldschoolCarshop : CarDealerBusinessBase + { + public override int Id => 13; + + public override string Name => "Oldschool Carshop"; + + public override Vector3 Position => new Vector3(-1888.1119, 2049.722, 140.9831); + + public override Vector3 CarSpawnPositon => new Vector3(-1883.5817, 2029.6252, 140.55038); + + public override float CarSpawnHeading => 163.73; + + public override void Load() + { + + } + } +} diff --git a/ReallifeGamemode.Server/Business/VapidCarDealerBusiness.cs b/ReallifeGamemode.Server/Business/VapidCarDealerBusiness.cs index 923aa527..4e0edfb0 100644 --- a/ReallifeGamemode.Server/Business/VapidCarDealerBusiness.cs +++ b/ReallifeGamemode.Server/Business/VapidCarDealerBusiness.cs @@ -6,7 +6,7 @@ namespace ReallifeGamemode.Server.Business { public override int Id => 3; - public override string Name => "Vapid Autohaus"; + public override string Name => "Vapid Carshop"; public override Vector3 Position => new Vector3(-177, -1156, 23); From 6f2225c95abfdd5ef6e9f4b7c3dd71fd64519478 Mon Sep 17 00:00:00 2001 From: hydrant Date: Sat, 17 Apr 2021 02:41:52 +0200 Subject: [PATCH 42/59] fix --- ReallifeGamemode.Server/Business/ClassicAndLuxuryCarshop.cs | 2 +- ReallifeGamemode.Server/Business/OldschoolCarshop.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ReallifeGamemode.Server/Business/ClassicAndLuxuryCarshop.cs b/ReallifeGamemode.Server/Business/ClassicAndLuxuryCarshop.cs index 417c6007..8242c6e7 100644 --- a/ReallifeGamemode.Server/Business/ClassicAndLuxuryCarshop.cs +++ b/ReallifeGamemode.Server/Business/ClassicAndLuxuryCarshop.cs @@ -15,7 +15,7 @@ namespace ReallifeGamemode.Server.Business public override Vector3 CarSpawnPositon => new Vector3(-1351.2072, 244.88942, 60.357693); - public override float CarSpawnHeading => 3.62; + public override float CarSpawnHeading => 3.62f; public override void Load() { diff --git a/ReallifeGamemode.Server/Business/OldschoolCarshop.cs b/ReallifeGamemode.Server/Business/OldschoolCarshop.cs index 77dd7eec..3afbd804 100644 --- a/ReallifeGamemode.Server/Business/OldschoolCarshop.cs +++ b/ReallifeGamemode.Server/Business/OldschoolCarshop.cs @@ -15,7 +15,7 @@ namespace ReallifeGamemode.Server.Business public override Vector3 CarSpawnPositon => new Vector3(-1883.5817, 2029.6252, 140.55038); - public override float CarSpawnHeading => 163.73; + public override float CarSpawnHeading => 163.73f; public override void Load() { From f944aaa3e0fa7621f88fbf7205b9103a5200b134 Mon Sep 17 00:00:00 2001 From: hydrant Date: Sat, 17 Apr 2021 02:44:39 +0200 Subject: [PATCH 43/59] fix carshop --- ReallifeGamemode.Server/Business/ClassicAndLuxuryCarshop.cs | 2 +- ReallifeGamemode.Server/Business/OldschoolCarshop.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ReallifeGamemode.Server/Business/ClassicAndLuxuryCarshop.cs b/ReallifeGamemode.Server/Business/ClassicAndLuxuryCarshop.cs index 8242c6e7..7ddd03ca 100644 --- a/ReallifeGamemode.Server/Business/ClassicAndLuxuryCarshop.cs +++ b/ReallifeGamemode.Server/Business/ClassicAndLuxuryCarshop.cs @@ -7,7 +7,7 @@ namespace ReallifeGamemode.Server.Business { class ClassicAndLuxuryCarshop : CarDealerBusinessBase { - public override int Id => 12; + public override int Id => 13; public override string Name => "Classic & Luxury Carshop"; diff --git a/ReallifeGamemode.Server/Business/OldschoolCarshop.cs b/ReallifeGamemode.Server/Business/OldschoolCarshop.cs index 3afbd804..d469c9c8 100644 --- a/ReallifeGamemode.Server/Business/OldschoolCarshop.cs +++ b/ReallifeGamemode.Server/Business/OldschoolCarshop.cs @@ -7,7 +7,7 @@ namespace ReallifeGamemode.Server.Business { class OldschoolCarshop : CarDealerBusinessBase { - public override int Id => 13; + public override int Id => 14; public override string Name => "Oldschool Carshop"; From 1a15cd4359d43879499ae7908cd9106d6671a861 Mon Sep 17 00:00:00 2001 From: hydrant Date: Sat, 17 Apr 2021 02:52:59 +0200 Subject: [PATCH 44/59] clear animation when drop wt item --- ReallifeGamemode.Server/Events/Death.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ReallifeGamemode.Server/Events/Death.cs b/ReallifeGamemode.Server/Events/Death.cs index afcd7ad6..d341aacb 100644 --- a/ReallifeGamemode.Server/Events/Death.cs +++ b/ReallifeGamemode.Server/Events/Death.cs @@ -153,6 +153,8 @@ namespace ReallifeGamemode.Server.Events TextLabel grndTxtLbl = NAPI.TextLabel.CreateTextLabel(iItem.Name + " ~s~(~y~" + amount + "~s~)", textPos, 5, 0.5f, 4, new Color(255, 255, 255), false, 0); GroundItem.AddGroundItem(grndItem, grndObject, grndTxtLbl); + player.ClearAnimation(); + dbContext.Remove(item); } From b8107970242b554c104adb21ef51a08590070df0 Mon Sep 17 00:00:00 2001 From: hydrant Date: Sat, 17 Apr 2021 02:57:51 +0200 Subject: [PATCH 45/59] fix drop wt package --- ReallifeGamemode.Server/Managers/InventoryManager.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/ReallifeGamemode.Server/Managers/InventoryManager.cs b/ReallifeGamemode.Server/Managers/InventoryManager.cs index 3c105fae..d25d977a 100644 --- a/ReallifeGamemode.Server/Managers/InventoryManager.cs +++ b/ReallifeGamemode.Server/Managers/InventoryManager.cs @@ -563,6 +563,7 @@ namespace ReallifeGamemode.Server.Managers if (iItem is IWeaponDealItem obj) { player.ClearAttachments(); + player.ClearAnimation(); dropPosition.Z -= 1.05f; grndObject = NAPI.Object.CreateObject(3666746839, dropPosition, new Vector3(0, 0, r.Next(0, 360)), 255, 0); } From a5059d2278df5a4ebda45d4b246c595366bdaf26 Mon Sep 17 00:00:00 2001 From: VegaZ Date: Sat, 17 Apr 2021 03:07:34 +0200 Subject: [PATCH 46/59] Move Waffenschein --- .../Gui/policedepartment.ts | 2 +- ReallifeGamemode.Database/sql | 43 +++++++++++++++++++ .../Menus/PoliceDepartment.cs | 4 +- 3 files changed, 46 insertions(+), 3 deletions(-) create mode 100644 ReallifeGamemode.Database/sql diff --git a/ReallifeGamemode.Client/Gui/policedepartment.ts b/ReallifeGamemode.Client/Gui/policedepartment.ts index df378604..298af37a 100644 --- a/ReallifeGamemode.Client/Gui/policedepartment.ts +++ b/ReallifeGamemode.Client/Gui/policedepartment.ts @@ -24,7 +24,7 @@ menu.MenuClose.on(() => { game.events.add("SERVER:PoliceDepartment_EnterColShape", () => { //game.ui.setHelpText("Drücke ~INPUT_CONTEXT~, um das Menü des Polizeireviers zu öffnen"); - mp.events.call("renderHelpTextOnScreen", "~s~Drücke ~g~E~s~ um das Menü des ~b~Polizeireviers ~s~zu öffnen") + //mp.events.call("renderHelpTextOnScreen", "~s~Drücke ~g~E~s~ um das Menü des ~b~Polizeireviers ~s~zu öffnen") game.events.bindKey(Key.E, false, keyPressHandler); }); diff --git a/ReallifeGamemode.Database/sql b/ReallifeGamemode.Database/sql new file mode 100644 index 00000000..72d9528e --- /dev/null +++ b/ReallifeGamemode.Database/sql @@ -0,0 +1,43 @@ +CREATE TABLE `WeaponCategories` ( + `Id` int NOT NULL AUTO_INCREMENT, + `Category` longtext CHARACTER SET utf8mb4 NULL, + CONSTRAINT `PK_WeaponCategories` PRIMARY KEY (`Id`) +); + +CREATE TABLE `Weapons` ( + `Id` int NOT NULL AUTO_INCREMENT, + `WeaponModel` longtext CHARACTER SET utf8mb4 NULL, + `CategoryId` int NOT NULL, + `SlotID` int NOT NULL, + `Ammo` int NOT NULL, + `Price` float NOT NULL, + CONSTRAINT `PK_Weapons` PRIMARY KEY (`Id`), + CONSTRAINT `FK_Weapons_WeaponCategories_CategoryId` FOREIGN KEY (`CategoryId`) REFERENCES `WeaponCategories` (`Id`) ON DELETE CASCADE +); + +CREATE TABLE `UserWeapons` ( + `Id` int NOT NULL AUTO_INCREMENT, + `UserId` int NOT NULL, + `WeaponId` int NOT NULL, + `Ammo` int NOT NULL, + CONSTRAINT `PK_UserWeapons` PRIMARY KEY (`Id`), + CONSTRAINT `FK_UserWeapons_Users_UserId` FOREIGN KEY (`UserId`) REFERENCES `Users` (`Id`) ON DELETE CASCADE, + CONSTRAINT `FK_UserWeapons_Weapons_WeaponId` FOREIGN KEY (`WeaponId`) REFERENCES `Weapons` (`Id`) ON DELETE CASCADE +); + +CREATE INDEX `IX_UserWeapons_UserId` ON `UserWeapons` (`UserId`); + +CREATE INDEX `IX_UserWeapons_WeaponId` ON `UserWeapons` (`WeaponId`); + +CREATE INDEX `IX_Weapons_CategoryId` ON `Weapons` (`CategoryId`); + +INSERT INTO `__EFMigrationsHistory` (`MigrationId`, `ProductVersion`) +VALUES ('20210413201146_Ammunations', '3.1.3'); + +ALTER TABLE `Weapons` ADD `AmmunationActive` tinyint(1) NOT NULL DEFAULT FALSE; + +ALTER TABLE `Weapons` ADD `Legal` tinyint(1) NOT NULL DEFAULT FALSE; + +INSERT INTO `__EFMigrationsHistory` (`MigrationId`, `ProductVersion`) +VALUES ('20210416175726_Ammunations2', '3.1.3'); + diff --git a/ReallifeGamemode.Server.Core/Menus/PoliceDepartment.cs b/ReallifeGamemode.Server.Core/Menus/PoliceDepartment.cs index 65aa993f..f4e9c3ef 100644 --- a/ReallifeGamemode.Server.Core/Menus/PoliceDepartment.cs +++ b/ReallifeGamemode.Server.Core/Menus/PoliceDepartment.cs @@ -61,9 +61,9 @@ namespace ReallifeGamemode.Server.Core.Menus private void CreateVisuals() { - Position pos = new Position(440.869, -981.045, 30.689); + Position pos = new Position(12.7499, -1105.1168, 29.797); - Api.TextLabel.CreateTextLabel("Polizeirevier\n\nDrücke ~y~E~s~, um das Menü zu öffnen", pos, 20f, 1.3f, Font.ChaletLondon, Color.White); + Api.TextLabel.CreateTextLabel("Waffenschein kaufen\n\nDrücke ~y~E~s~, um das Menü zu öffnen", pos, 20f, 1.3f, Font.ChaletLondon, Color.White); Api.Marker.CreateMarker(MarkerType.VerticalCylinder, pos.Subtract(new Position(0, 0, 1.7)), new Position(), new Position(), 1f, Color.White); IColShape colShape = Api.ColShape.CreateSphere(pos, 2f); From 3465e4efe532a5f6155eee89062b39a508bbbc9c Mon Sep 17 00:00:00 2001 From: VegaZ Date: Sat, 17 Apr 2021 03:13:15 +0200 Subject: [PATCH 47/59] Fix Waffenschein NativeUI --- ReallifeGamemode.Client/Gui/policedepartment.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ReallifeGamemode.Client/Gui/policedepartment.ts b/ReallifeGamemode.Client/Gui/policedepartment.ts index 298af37a..4fd90f72 100644 --- a/ReallifeGamemode.Client/Gui/policedepartment.ts +++ b/ReallifeGamemode.Client/Gui/policedepartment.ts @@ -4,7 +4,7 @@ import { Menu, Point, UIMenuItem } from "../libs/NativeUI"; import { createMenuItem } from "../util"; import moneyformat from "../moneyformat"; var screenRes = mp.game.graphics.getScreenResolution(0, 0); -var menu: Menu = new Menu("Polizeirevier", "Die Hilfestelle der Polizei", new Point(0, screenRes.y / 3)); +var menu: Menu = new Menu("", "Hier kannst du den Waffenschein erwerben", new Point(0, screenRes.y / 3), "shopui_title_gunclub", "shopui_title_gunclub"); menu.AddItem(createMenuItem("Waffenschein kaufen", "Erwerbe einen Waffenschein", (item) => { item.SetRightLabel("$" + moneyformat(5000)); From 5e25a4d8a55495e7704daa43ae9c3e8b69a22ffc Mon Sep 17 00:00:00 2001 From: hydrant Date: Sat, 17 Apr 2021 04:49:30 +0200 Subject: [PATCH 48/59] [HOTFIX] Megafon mehr als 1 wort @balbo???? --- ReallifeGamemode.Server/Commands/FactionCommands.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ReallifeGamemode.Server/Commands/FactionCommands.cs b/ReallifeGamemode.Server/Commands/FactionCommands.cs index 9e061fcc..2383b2fe 100644 --- a/ReallifeGamemode.Server/Commands/FactionCommands.cs +++ b/ReallifeGamemode.Server/Commands/FactionCommands.cs @@ -414,8 +414,8 @@ namespace ReallifeGamemode.Server.Commands #region Staatsfraktionen (LSPD / FBI) Commands - [Command("m", "~m~Benutzung: ~s~/m [Message]")] - public void CmdFactionMegaphone(Player player, String message) + [Command("m", "~m~Benutzung: ~s~/m [Message]", GreedyArg = true)] + public void CmdFactionMegaphone(Player player, string message) { User user = player.GetUser(); if (user == null || (user.FactionId != 1 && user.FactionId != 3)) From 9ee382d31790d0a4c1e3f3b8d2debdd3f1514e51 Mon Sep 17 00:00:00 2001 From: VegaZ Date: Sat, 17 Apr 2021 17:16:10 +0200 Subject: [PATCH 49/59] Duty-Restriktionen /Klamotten /FS /Job --- ReallifeGamemode.Server/DrivingSchool/DrivingSchool.cs | 8 +++++++- ReallifeGamemode.Server/Events/Key.cs | 10 ++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/ReallifeGamemode.Server/DrivingSchool/DrivingSchool.cs b/ReallifeGamemode.Server/DrivingSchool/DrivingSchool.cs index 9163cc08..7c59d03d 100644 --- a/ReallifeGamemode.Server/DrivingSchool/DrivingSchool.cs +++ b/ReallifeGamemode.Server/DrivingSchool/DrivingSchool.cs @@ -99,7 +99,11 @@ namespace ReallifeGamemode.Server.DrivingSchool private static void EntityEnterBusinessColShape(ColShape colShape, Player client) { if (client.IsInVehicle || !client.IsLoggedIn()) return; - + if (client.GetData("duty") == true) + { + client.SendNotification("~r~Im Dienst kannst du keinen Führerschein machen", false); + return; + } client.TriggerEvent("drivingSchoolMenu"); } @@ -112,11 +116,13 @@ namespace ReallifeGamemode.Server.DrivingSchool public void StartDrivingSchool(Player client) { User user = client.GetUser(); + if (user.DriverLicenseVehicle || client.HasData("ActiveSchool")) { client.SendChatMessage("~b~[INFO]~s~ Du besitzt schon einen Führerschein."); return; } + if (user.Handmoney < 2500) { client.SendNotification("~r~[FEHLER]~s~ Du hast nicht genug Geld auf der Hand($2.500)!", true); diff --git a/ReallifeGamemode.Server/Events/Key.cs b/ReallifeGamemode.Server/Events/Key.cs index 2652ad41..0fbef061 100644 --- a/ReallifeGamemode.Server/Events/Key.cs +++ b/ReallifeGamemode.Server/Events/Key.cs @@ -507,6 +507,11 @@ namespace ReallifeGamemode.Server.Events } if (nearestClotheShopPoint != null) { + if (player.GetData("duty") == true) + { + player.SendNotification("~r~Im Dienst kannst du keine Kleidung kaufen", false); + return; + } nearestClotheShopPoint.clotheShop.LoadShopNUI(player); } if (nearestItemShopPoint != null) @@ -547,6 +552,11 @@ namespace ReallifeGamemode.Server.Events } if (!job.GetUsersInJob().Contains(player)) { + if (player.GetData("duty") == true) + { + player.SendNotification("~r~Im Dienst kannst du keinen Job ausführen", false); + return; + } if (player.GetUser().JobId == 3) { if (nearestJobPoint.Skill > user.PilotSkill) From 3d249c3006a8a87fa34ea204e62262e39513d8c8 Mon Sep 17 00:00:00 2001 From: VegaZ Date: Sat, 17 Apr 2021 18:22:31 +0200 Subject: [PATCH 50/59] Finish https://life-of-german.org/bugtracker/bug/19-restriktionen-von-spielern/ --- .../DrivingSchool/DrivingSchool.cs | 3 ++- ReallifeGamemode.Server/Events/Key.cs | 13 +++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/ReallifeGamemode.Server/DrivingSchool/DrivingSchool.cs b/ReallifeGamemode.Server/DrivingSchool/DrivingSchool.cs index 7c59d03d..73b06218 100644 --- a/ReallifeGamemode.Server/DrivingSchool/DrivingSchool.cs +++ b/ReallifeGamemode.Server/DrivingSchool/DrivingSchool.cs @@ -98,8 +98,9 @@ namespace ReallifeGamemode.Server.DrivingSchool private static void EntityEnterBusinessColShape(ColShape colShape, Player client) { + var user = client.GetUser(); if (client.IsInVehicle || !client.IsLoggedIn()) return; - if (client.GetData("duty") == true) + if (user.GetData("duty")) { client.SendNotification("~r~Im Dienst kannst du keinen Führerschein machen", false); return; diff --git a/ReallifeGamemode.Server/Events/Key.cs b/ReallifeGamemode.Server/Events/Key.cs index 0fbef061..3155ed33 100644 --- a/ReallifeGamemode.Server/Events/Key.cs +++ b/ReallifeGamemode.Server/Events/Key.cs @@ -230,8 +230,8 @@ namespace ReallifeGamemode.Server.Events WeaponPoint nearestWeapon = PositionManager.WeaponPoints.Find(w => w.Position.DistanceTo(player.Position) <= 1.5 && w.FactionId == user.FactionId); JailReleasePoint nearestJailReleasePoint = PositionManager.JailReleasePoints.Find(j => j.Position.DistanceTo(player.Position) <= 1.5 && (user.FactionId == 1 || user.FactionId == 3) && user.GetData("duty")); ElevatorPoint nearestElevatorPoint = PositionManager.ElevatorPoints.Find(e => e.Position.DistanceTo(player.Position) <= 1.5 && (user.FactionId == 1 || user.FactionId == 2 || user.FactionId == 3)); - ClotheshopPoint nearestClotheShopPoint = PositionManager.clotheshopPoints.Find(s => s.Position.DistanceTo(player.Position) <= 1.5 && (!user.GetData("duty"))); - FriseurPoint nearestFriseurPoint = PositionManager.friseurPoints.Find(s => s.Position.DistanceTo(player.Position) <= 1.5 && (!user.GetData("duty"))); + ClotheshopPoint nearestClotheShopPoint = PositionManager.clotheshopPoints.Find(s => s.Position.DistanceTo(player.Position) <= 1.5); + FriseurPoint nearestFriseurPoint = PositionManager.friseurPoints.Find(s => s.Position.DistanceTo(player.Position) <= 1.5); ItemshopPoint nearestItemShopPoint = PositionManager.itemshopPoints.Find(s => s.Position.DistanceTo(player.Position) <= 1.5); JobPoint nearestJobPoint = PositionManager.JobPoints.Find(s => s.Position.DistanceTo(player.Position) <= 1.6); Player nearestCuffPlayer = PositionManager.cuffPoints.Find(s => s.Position.DistanceTo(player.Position) <= 1.6 && user.GetData("duty")); @@ -507,7 +507,7 @@ namespace ReallifeGamemode.Server.Events } if (nearestClotheShopPoint != null) { - if (player.GetData("duty") == true) + if (user.GetData("duty")) { player.SendNotification("~r~Im Dienst kannst du keine Kleidung kaufen", false); return; @@ -520,6 +520,11 @@ namespace ReallifeGamemode.Server.Events } if (nearestFriseurPoint != null) { + if (user.GetData("duty")) + { + player.SendNotification("~r~Im Dienst wirst du nicht vom Friseur bedient", false); + return; + } nearestFriseurPoint.friseurShop.LoadShopNUI(player); } if (nearestAmmunationPoint != null) @@ -552,7 +557,7 @@ namespace ReallifeGamemode.Server.Events } if (!job.GetUsersInJob().Contains(player)) { - if (player.GetData("duty") == true) + if (user.GetData("duty")) { player.SendNotification("~r~Im Dienst kannst du keinen Job ausführen", false); return; From 735ff66fb4fba892c33bd2574cfafbced3590d7e Mon Sep 17 00:00:00 2001 From: VegaZ Date: Sat, 17 Apr 2021 18:54:53 +0200 Subject: [PATCH 51/59] Wanted Restriktionen https://life-of-german.org/bugtracker/bug/19-restriktionen-von-spielern/ --- ReallifeGamemode.Server/DrivingSchool/DrivingSchool.cs | 5 +++++ ReallifeGamemode.Server/Events/Key.cs | 7 ++++++- ReallifeGamemode.Server/Managers/InteractionManager.cs | 5 +++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/ReallifeGamemode.Server/DrivingSchool/DrivingSchool.cs b/ReallifeGamemode.Server/DrivingSchool/DrivingSchool.cs index 73b06218..fe51c527 100644 --- a/ReallifeGamemode.Server/DrivingSchool/DrivingSchool.cs +++ b/ReallifeGamemode.Server/DrivingSchool/DrivingSchool.cs @@ -105,6 +105,11 @@ namespace ReallifeGamemode.Server.DrivingSchool client.SendNotification("~r~Im Dienst kannst du keinen Führerschein machen", false); return; } + if (user.Wanteds > 0) + { + client.SendNotification("~r~Mit Wanteds kannst du keinen Führerschein machen", false); + return; + } client.TriggerEvent("drivingSchoolMenu"); } diff --git a/ReallifeGamemode.Server/Events/Key.cs b/ReallifeGamemode.Server/Events/Key.cs index 3155ed33..cc56f637 100644 --- a/ReallifeGamemode.Server/Events/Key.cs +++ b/ReallifeGamemode.Server/Events/Key.cs @@ -511,7 +511,7 @@ namespace ReallifeGamemode.Server.Events { player.SendNotification("~r~Im Dienst kannst du keine Kleidung kaufen", false); return; - } + } nearestClotheShopPoint.clotheShop.LoadShopNUI(player); } if (nearestItemShopPoint != null) @@ -562,6 +562,11 @@ namespace ReallifeGamemode.Server.Events player.SendNotification("~r~Im Dienst kannst du keinen Job ausführen", false); return; } + if (user.Wanteds > 0) + { + player.SendNotification("~r~Mit Wanteds kannst du keinen Job starten", false); + return; + } if (player.GetUser().JobId == 3) { if (nearestJobPoint.Skill > user.PilotSkill) diff --git a/ReallifeGamemode.Server/Managers/InteractionManager.cs b/ReallifeGamemode.Server/Managers/InteractionManager.cs index a80c1688..ffb80dd6 100644 --- a/ReallifeGamemode.Server/Managers/InteractionManager.cs +++ b/ReallifeGamemode.Server/Managers/InteractionManager.cs @@ -181,6 +181,11 @@ namespace ReallifeGamemode.Server.Managers ChatService.ErrorMessage(player, "Dieser Spieler ist schon in einer Fraktion"); return; } + if (targetUser?.Wanteds > 0) + { + player.SendNotification("~r~Dieser Spieler wird aktuell gesucht (Wanted)", false); + return; + } target.SetData("accept_faction_invite", player.Name); From f65284c38eeccaef1196d2465e3eb1207518d13d Mon Sep 17 00:00:00 2001 From: VegaZ Date: Sat, 17 Apr 2021 19:33:08 +0200 Subject: [PATCH 52/59] Restric JobPlayer --- .../Events/EnterVehicleAttempt.cs | 3 ++- ReallifeGamemode.Server/Events/Key.cs | 12 +++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/ReallifeGamemode.Server/Events/EnterVehicleAttempt.cs b/ReallifeGamemode.Server/Events/EnterVehicleAttempt.cs index b63b7661..7573fb6a 100644 --- a/ReallifeGamemode.Server/Events/EnterVehicleAttempt.cs +++ b/ReallifeGamemode.Server/Events/EnterVehicleAttempt.cs @@ -9,6 +9,7 @@ using ReallifeGamemode.Server.Types; using ReallifeGamemode.Server.Util; using ReallifeGamemode.Server.WeaponDeal; using ReallifeGamemode.Server.Managers; +using ReallifeGamemode.Server.Job; namespace ReallifeGamemode.Server.Events { @@ -28,7 +29,7 @@ namespace ReallifeGamemode.Server.Events if (vehicle.GetServerVehicle() is FactionVehicle veh) { - if (!veh.GetOwners().Contains(player.GetUser().FactionId ?? 0) && !(u.IsAdmin(AdminLevel.HEADADMIN) && player.IsAdminDuty())) + if (!veh.GetOwners().Contains(player.GetUser().FactionId ?? 0) && !(u.IsAdmin(AdminLevel.HEADADMIN) && player.IsAdminDuty()) && !JobBase.GetPlayerInJob().Contains(player)) { if ((VehicleHash)vehicle.Model == VehicleHash.Burrito3) { diff --git a/ReallifeGamemode.Server/Events/Key.cs b/ReallifeGamemode.Server/Events/Key.cs index cc56f637..253deb17 100644 --- a/ReallifeGamemode.Server/Events/Key.cs +++ b/ReallifeGamemode.Server/Events/Key.cs @@ -511,7 +511,12 @@ namespace ReallifeGamemode.Server.Events { player.SendNotification("~r~Im Dienst kannst du keine Kleidung kaufen", false); return; - } + } + if(JobBase.GetPlayerInJob().Contains(player)) + { + player.SendNotification("~r~Im aktiven Job kannst du keine Kleidung kaufen", false); + return; + } nearestClotheShopPoint.clotheShop.LoadShopNUI(player); } if (nearestItemShopPoint != null) @@ -525,6 +530,11 @@ namespace ReallifeGamemode.Server.Events player.SendNotification("~r~Im Dienst wirst du nicht vom Friseur bedient", false); return; } + if (JobBase.GetPlayerInJob().Contains(player)) + { + player.SendNotification("~r~Im aktiven Job wirst du nicht vom Friseur bedient", false); + return; + } nearestFriseurPoint.friseurShop.LoadShopNUI(player); } if (nearestAmmunationPoint != null) From 8d231c8359c6d4998a965f4f34bb1735da23d964 Mon Sep 17 00:00:00 2001 From: VegaZ Date: Sat, 17 Apr 2021 19:52:06 +0200 Subject: [PATCH 53/59] Fix explanation Wanted Invite --- ReallifeGamemode.Server/Managers/InteractionManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ReallifeGamemode.Server/Managers/InteractionManager.cs b/ReallifeGamemode.Server/Managers/InteractionManager.cs index ffb80dd6..d94029a1 100644 --- a/ReallifeGamemode.Server/Managers/InteractionManager.cs +++ b/ReallifeGamemode.Server/Managers/InteractionManager.cs @@ -183,7 +183,7 @@ namespace ReallifeGamemode.Server.Managers } if (targetUser?.Wanteds > 0) { - player.SendNotification("~r~Dieser Spieler wird aktuell gesucht (Wanted)", false); + player.SendNotification("~r~Du kannst diesen Spieler nicht inviten da er aktuell gesucht wird. (Wanted)", false); return; } From 6a28cbe60d469e1a2657de5f09a9961a48ba2760 Mon Sep 17 00:00:00 2001 From: VegaZ Date: Sat, 17 Apr 2021 22:51:35 +0200 Subject: [PATCH 54/59] Initial Specate --- ReallifeGamemode.Client/admin/spectate.ts | 12 +++++++++ ReallifeGamemode.Client/index.ts | 1 + .../Commands/AdminCommands.cs | 27 +++++++++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 ReallifeGamemode.Client/admin/spectate.ts diff --git a/ReallifeGamemode.Client/admin/spectate.ts b/ReallifeGamemode.Client/admin/spectate.ts new file mode 100644 index 00000000..cf66bb43 --- /dev/null +++ b/ReallifeGamemode.Client/admin/spectate.ts @@ -0,0 +1,12 @@ +let cam: CameraMp = mp.cameras.new('spectateCam');; +mp.events.add("SERVER:ADMIN_SPECTATE", (targetPlayer) => { + cam.attachTo(targetPlayer.handle, 10.0, 0.0, 10.0, true); + cam.setActive(true); +}); + +mp.events.add("SERVER:ADMIN_STOP_SPECTATE", () => { + if (cam.isActive() == true) { + cam.setActive(false); + } +}); + \ No newline at end of file diff --git a/ReallifeGamemode.Client/index.ts b/ReallifeGamemode.Client/index.ts index 5a2a287f..89257c40 100644 --- a/ReallifeGamemode.Client/index.ts +++ b/ReallifeGamemode.Client/index.ts @@ -267,6 +267,7 @@ ammunation(globalData); require('./Gui/policedepartment'); require('./Gui/helptext'); +require('./admin/spectate'); interface VehicleData { EngineState: boolean; diff --git a/ReallifeGamemode.Server/Commands/AdminCommands.cs b/ReallifeGamemode.Server/Commands/AdminCommands.cs index 90862772..60ba7593 100644 --- a/ReallifeGamemode.Server/Commands/AdminCommands.cs +++ b/ReallifeGamemode.Server/Commands/AdminCommands.cs @@ -1693,6 +1693,32 @@ namespace ReallifeGamemode.Server.Commands NAPI.Vehicle.SetVehicleTyreSmokeColor(veh, new Color(r, g, b)); } + [Command("spectate", "~m~Benutzung: ~s~/spectate [NAME/ID]", Alias = "spec")] + public void CmdAdminSpectate(Player player, string targetname = null) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + Player target; + if (targetname != null) + { + target = PlayerService.GetPlayerByNameOrId(targetname); + if (target == null || !target.IsLoggedIn()) + { + ChatService.PlayerNotFound(player); + return; + } + player.TriggerEvent("SERVER:ADMIN_SPECTATE", target); + } + else + { + player.TriggerEvent("SERVER:ADMIN_STOP_SPECTATE"); + } + } + + #endregion Admin #region ALevel1337 @@ -2066,6 +2092,7 @@ namespace ReallifeGamemode.Server.Commands return; } + [Command("showtuningmenu", "~m~Benutzung: ~s~/showtuningmenu", Alias = "stm")] public void CmdAdminShowtuningmenu(Player player) { From 0b8be38254ba9625be80823ec0664216b77d5654 Mon Sep 17 00:00:00 2001 From: VegaZ Date: Sun, 18 Apr 2021 00:54:55 +0200 Subject: [PATCH 55/59] Added Job Quit to Interaction -> JOB --- .../Interaction/interactionmenu.ts | 17 +++++++++++++++++ ReallifeGamemode.Client/global.d.ts | 1 + ReallifeGamemode.Server/Events/Key.cs | 1 + ReallifeGamemode.Server/Managers/JobManager.cs | 2 +- 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/ReallifeGamemode.Client/Interaction/interactionmenu.ts b/ReallifeGamemode.Client/Interaction/interactionmenu.ts index 3864a46d..0eb1b053 100644 --- a/ReallifeGamemode.Client/Interaction/interactionmenu.ts +++ b/ReallifeGamemode.Client/Interaction/interactionmenu.ts @@ -464,6 +464,23 @@ export default function (globalData: IGlobalData) { wageItem.SetRightLabel("$" + jobdata.wage.toString()) } jobMenu.AddItem(wageItem); + + if (jobdata.isActive) { + var quitJobItem = new UIMenuItem("Job Beenden", "Beendet den Job und bringt dich zurück zur Base") + jobMenu.AddItem(quitJobItem); + quitJobItem.HighlightedBackColor = new Color(213, 0, 0); + quitJobItem.BackColor = new Color(229, 57, 53); + + jobMenu.ItemSelect.on((item, index) => { + if (item == quitJobItem) { + mp.events.callRemote("CLIENT:Job_StopJob"); + jobMenu.Close(true); + mp.gui.chat.activate(true); + globalData.InMenu = false; + } + }); + } + jobMenu.Visible = false; mp.gui.chat.show(false); return jobMenu; diff --git a/ReallifeGamemode.Client/global.d.ts b/ReallifeGamemode.Client/global.d.ts index 576f9826..dfd560c5 100644 --- a/ReallifeGamemode.Client/global.d.ts +++ b/ReallifeGamemode.Client/global.d.ts @@ -30,6 +30,7 @@ declare type JobData = { busskill: number; pilotskill: number; wage: number; + isActive: boolean; } declare type VehicleData = { diff --git a/ReallifeGamemode.Server/Events/Key.cs b/ReallifeGamemode.Server/Events/Key.cs index 253deb17..d0372911 100644 --- a/ReallifeGamemode.Server/Events/Key.cs +++ b/ReallifeGamemode.Server/Events/Key.cs @@ -168,6 +168,7 @@ namespace ReallifeGamemode.Server.Events busskill = u.BusSkill, pilotskill = u.PilotSkill, wage = u.Wage, + isActive = JobBase.GetPlayerInJob().Contains(player), }; var memberList = dbContext.Users.Where(f => f.FactionId == u.FactionId && u.FactionId != 0).OrderByDescending(f => f.FactionRank.Order).ThenBy(f => f.Name).Select(m => new diff --git a/ReallifeGamemode.Server/Managers/JobManager.cs b/ReallifeGamemode.Server/Managers/JobManager.cs index bd66afbe..63abaff8 100644 --- a/ReallifeGamemode.Server/Managers/JobManager.cs +++ b/ReallifeGamemode.Server/Managers/JobManager.cs @@ -186,7 +186,7 @@ namespace ReallifeGamemode.Server.Managers { VehicleStreaming.SetEngineState(player.Vehicle, false); } - + player.Position = playerJobStartPosition[player]; job.StopJob(player); if (playerTimersJobVehicleRespawn.ContainsKey(player)) From 0b7b0a3a999ab3ffb78cd9b86fc880ce477acdad Mon Sep 17 00:00:00 2001 From: hydrant Date: Sun, 18 Apr 2021 03:39:35 +0200 Subject: [PATCH 56/59] =?UTF-8?q?[HOTFIX]=20Mehr=20Logs=20beim=20Tod,=20De?= =?UTF-8?q?athLogs=20korrekt=20f=C3=BCllen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ReallifeGamemode.Server/Events/Death.cs | 60 ++++++++++++++-------- ReallifeGamemode.Server/Gangwar/Gangwar.cs | 13 ++++- ReallifeGamemode.Server/Gangwar/Turf.cs | 9 +++- 3 files changed, 59 insertions(+), 23 deletions(-) diff --git a/ReallifeGamemode.Server/Events/Death.cs b/ReallifeGamemode.Server/Events/Death.cs index d341aacb..e935582b 100644 --- a/ReallifeGamemode.Server/Events/Death.cs +++ b/ReallifeGamemode.Server/Events/Death.cs @@ -25,9 +25,19 @@ namespace ReallifeGamemode.Server.Events { public class Death : Script { + private readonly Dictionary lastPlayerDeathTime = new Dictionary(); + + [ServerEvent(Event.PlayerDeath)] public void OnPlayerDeath(Player player, Player killer, uint reason) { + if (lastPlayerDeathTime.TryGetValue(player, out DateTime lastDeathTime) && DateTime.Now - lastDeathTime < TimeSpan.FromSeconds(5)) + { + return; + } + + lastPlayerDeathTime[player] = DateTime.Now; + if (!player.IsLoggedIn()) { player.Kick(); @@ -51,18 +61,28 @@ namespace ReallifeGamemode.Server.Events float killerPosZ = -1; float killerHeading = -1; + NAPI.Util.ConsoleOutput($"OnPlayerDeath - Player {player.Name} died - Killer = {(killer != null ? killer.Name : "no killer found")}"); + if (killer.IsLoggedIn()) { + NAPI.Util.ConsoleOutput($"OnPlayerDeath - Player {player.Name} died - Killer is logged in"); + var killerUser = killer.GetUser(dbContext); if (killerUser != null) { + NAPI.Util.ConsoleOutput($"OnPlayerDeath - Player {player.Name} died - Killer GetUser is not null"); killerId = killerUser.Id; killerPosX = killer.Position.X; killerPosY = killer.Position.Y; killerPosZ = killer.Position.Z; killerHeading = killer.Heading; - if (player.HasData("inGangWar") && killer.HasData("inGangWar")) + + var playerInGangwar = player.HasData("inGangWar"); + var killerInGangwar = killer.HasData("inGangWar"); + NAPI.Util.ConsoleOutput($"OnPlayerDeath - Player {player.Name} died - PlayerInGangwar = {playerInGangwar}, KillerInGangwar = {killerInGangwar}"); + if (playerInGangwar && killerInGangwar) { + NAPI.Util.ConsoleOutput($"OnPlayerDeath - Player {player.Name} died - Both players in gangwar, setting kill"); Gangwar.Gangwar.GangwarKill(killer, player); } @@ -78,6 +98,22 @@ namespace ReallifeGamemode.Server.Events } } + var dead = new Database.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() + }; + dbContext.DeathLogs.Add(dead); + bool copNearby = NAPI.Pools.GetAllPlayers().Any(u => u.IsDuty() && u.IsAlive() && u.Position.DistanceToSquared(player.Position) <= 200 * 200); if (user.Wanteds > 0) @@ -100,7 +136,7 @@ namespace ReallifeGamemode.Server.Events { user.Dead = true; - if (!player.HasData("reviveSperre") && player.GetData("isDead") == false && !player.HasData("inGangWar") && player.GetData("SAdminduty") == false) + if (!player.HasData("reviveSperre") && player.GetData("isDead") == false && !player.HasData("inGangWar") && player.GetData("SAdminduty") == false) { //MEDIC AUFTRAG MedicTask reviveTask = new MedicTask() @@ -118,7 +154,7 @@ namespace ReallifeGamemode.Server.Events ChatService.BroadcastFaction("~y~[MEDIC] ~w~" + player.Name + " ist soeben verstorben.", new List() { 2 }); } - player.SetData("isDead", true); + player.SetData("isDead", true); if (player.GetUser().IsAdmin(AdminLevel.ADMIN) == true) { @@ -157,22 +193,6 @@ namespace ReallifeGamemode.Server.Events dbContext.Remove(item); } - - var dead = new Database.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() - }; - dbContext.DeathLogs.Add(dead); } } Job.JobBase job = Managers.JobManager.GetJob(player.GetUser().JobId ?? -1); @@ -242,7 +262,7 @@ namespace ReallifeGamemode.Server.Events player.RemoveAllWeapons(); MedicTask task = Medic.ReviveTasks.FirstOrDefault(t => t.Victim == player.Name); - if(task != null) + if (task != null) { Player medicPlayer = PlayerService.GetPlayerByNameOrId(task.MedicName); Medic.RemoveTaskFromList(task); diff --git a/ReallifeGamemode.Server/Gangwar/Gangwar.cs b/ReallifeGamemode.Server/Gangwar/Gangwar.cs index b2a3b9b3..376d5e77 100644 --- a/ReallifeGamemode.Server/Gangwar/Gangwar.cs +++ b/ReallifeGamemode.Server/Gangwar/Gangwar.cs @@ -49,13 +49,22 @@ namespace ReallifeGamemode.Server.Gangwar public static void GangwarKill(Player killer, Player victim) { - if (killer.HasData("GotInsideOfTurf") && victim.HasData("GotInsideOfTurf")) + var killerInsideTurf = killer.HasData("GotInsideOfTurf"); + var victimInsideTurf = victim.HasData("GotInsideOfTurf"); + + NAPI.Util.ConsoleOutput($"GangwarKill - Victim {victim.Name} - KillerInsideTurf = {killerInsideTurf}, VictimInsideTurf = {victimInsideTurf}"); + + if (killerInsideTurf && victimInsideTurf) { + NAPI.Util.ConsoleOutput($"GangwarKill - Victim {victim.Name} - Killer and Victim are in Turf area"); foreach (var turf in getTurfs()) { if (turf.getId() == victim.GetData("inGangWar")) { - turf.setKill(victim.GetUser().Faction.Name); + NAPI.Util.ConsoleOutput($"GangwarKill - Victim {victim.Name} - Killed in turf id {turf.getId()}"); + var victimFactionName = victim.GetUser().Faction.Name; + NAPI.Util.ConsoleOutput($"GangwarKill - Victim {victim.Name} - Faction Name = {victimFactionName}"); + turf.setKill(victimFactionName); return; } } diff --git a/ReallifeGamemode.Server/Gangwar/Turf.cs b/ReallifeGamemode.Server/Gangwar/Turf.cs index dfd08df8..809af885 100644 --- a/ReallifeGamemode.Server/Gangwar/Turf.cs +++ b/ReallifeGamemode.Server/Gangwar/Turf.cs @@ -203,11 +203,16 @@ namespace ReallifeGamemode.Server.Gangwar public void enter(Player client) { User user = client.GetUser(); + if(user == null || user.FactionId == null) + { + return; + } + if (this.status == "attack") { if (user.Faction.Name != getOwner() && user.Faction.Name != getAttacker()) return; - Player gPlayer = playerInGangwar.Where(c => c != null && !c.Handle.IsNull && c.IsLoggedIn() && c.GetUser()?.Id == user.Id).FirstOrDefault(); + Player gPlayer = playerInGangwar.Where(c => c != null && !c.Handle.IsNull && c.IsLoggedIn() && c.Handle.Value == client.Handle.Value).FirstOrDefault(); if (gPlayer == null) { using (var dbContext = new DatabaseContext()) @@ -366,10 +371,12 @@ namespace ReallifeGamemode.Server.Gangwar { if (getOwner() == FactionName) { + NAPI.Util.ConsoleOutput($"GangwarKill - Adding Point for Faction {getAttacker()}"); Att_Score += 1; } else if (getAttacker() == FactionName) { + NAPI.Util.ConsoleOutput($"GangwarKill - Adding Point for Faction {getOwner()}"); Def_Score += 1; } } From cc3fcb9f60c9fb5a33bc956bd8eb949c8df30107 Mon Sep 17 00:00:00 2001 From: hydrant Date: Sun, 18 Apr 2021 14:14:49 +0200 Subject: [PATCH 57/59] add fbi garage --- ReallifeGamemode.Client/dlcpacks/fbigarage/dlc.rpf | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 ReallifeGamemode.Client/dlcpacks/fbigarage/dlc.rpf diff --git a/ReallifeGamemode.Client/dlcpacks/fbigarage/dlc.rpf b/ReallifeGamemode.Client/dlcpacks/fbigarage/dlc.rpf new file mode 100644 index 00000000..ab42f534 --- /dev/null +++ b/ReallifeGamemode.Client/dlcpacks/fbigarage/dlc.rpf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f50bbe18f89e8ba9794580aac98cc1eb28230fb3dd8c15b723f0c16444aad938 +size 35328 From 207a69b1a0261c070818c8d4e351a3832903145a Mon Sep 17 00:00:00 2001 From: hydrant Date: Sun, 18 Apr 2021 15:33:33 +0200 Subject: [PATCH 58/59] test fbi garage --- ReallifeGamemode.Client/dlcpacks/fbigarage/dlc.rpf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ReallifeGamemode.Client/dlcpacks/fbigarage/dlc.rpf b/ReallifeGamemode.Client/dlcpacks/fbigarage/dlc.rpf index ab42f534..0ae83a28 100644 --- a/ReallifeGamemode.Client/dlcpacks/fbigarage/dlc.rpf +++ b/ReallifeGamemode.Client/dlcpacks/fbigarage/dlc.rpf @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f50bbe18f89e8ba9794580aac98cc1eb28230fb3dd8c15b723f0c16444aad938 +oid sha256:c68cdcee5da9b1b7800f4bdc487bf2feb1b82f6747c03c7f86dd364d1289c256 size 35328 From da4b6bca4df0a0b4246288874669e2a665b518d0 Mon Sep 17 00:00:00 2001 From: hydrant Date: Sun, 18 Apr 2021 17:38:17 +0200 Subject: [PATCH 59/59] fbi garage test --- ReallifeGamemode.Client/dlcpacks/fbigarage/dlc.rpf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ReallifeGamemode.Client/dlcpacks/fbigarage/dlc.rpf b/ReallifeGamemode.Client/dlcpacks/fbigarage/dlc.rpf index 0ae83a28..ca513b42 100644 --- a/ReallifeGamemode.Client/dlcpacks/fbigarage/dlc.rpf +++ b/ReallifeGamemode.Client/dlcpacks/fbigarage/dlc.rpf @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c68cdcee5da9b1b7800f4bdc487bf2feb1b82f6747c03c7f86dd364d1289c256 -size 35328 +oid sha256:1e40413c355d3721e2a483add948aaad408b17c3ed9a0db409b141aa6110dbb6 +size 35840