From cf10c52ab088a33211d9fc76ee8d997ca62ffe5b Mon Sep 17 00:00:00 2001 From: Lennart Kampshoff Date: Sat, 27 Oct 2018 13:18:22 +0200 Subject: [PATCH] Added items load --- Main.cs | 2 ++ Server/Commands/Admin.cs | 6 ++--- Server/Entities/User.cs | 7 ++++++ Server/Managers/InventoryManager.cs | 35 +++++++++++++++++++++++++---- 4 files changed, 43 insertions(+), 7 deletions(-) diff --git a/Main.cs b/Main.cs index e2cc3b08..c43059fe 100644 --- a/Main.cs +++ b/Main.cs @@ -28,6 +28,8 @@ namespace reallife_gamemode NAPI.Server.SetAutoRespawnAfterDeath(false); NAPI.Data.SetWorldData("playerCreatorDimension", 0); + InventoryManager.LoadItems(); + TuningManager.AddTuningGarage(new Vector3(-341, -134, 38.5), new Vector3(-334, -143, 41)); using (var context = new DatabaseContext()) diff --git a/Server/Commands/Admin.cs b/Server/Commands/Admin.cs index 62d89473..5089e7b0 100644 --- a/Server/Commands/Admin.cs +++ b/Server/Commands/Admin.cs @@ -36,12 +36,12 @@ namespace reallife_gamemode.Server.Commands return; } - List itemList = player.GetData("items"); + List itemList = player.GetUser().GetItems(); foreach (var item in itemList) { - IItem iitem = item; - player.SendChatMessage(item. + ); + IItem iitem = InventoryManager.GetItemById(item.ItemId); + player.SendChatMessage("Item: ~g~" + iitem.Name); } } diff --git a/Server/Entities/User.cs b/Server/Entities/User.cs index dd7c4d1f..336cddc6 100644 --- a/Server/Entities/User.cs +++ b/Server/Entities/User.cs @@ -130,6 +130,13 @@ namespace reallife_gamemode.Server.Entities //TODO ***Admin Info: {ADMIN-NAME} hat {USER-NAME} entbannt. } + public List GetItems() + { + using(var dbContext = new DatabaseContext()) + { + return dbContext.UserItems.ToList().FindAll(u => u.UserId == this.Id); + } + } public bool IsAdmin(AdminLevel level) => AdminLevel >= level; } } diff --git a/Server/Managers/InventoryManager.cs b/Server/Managers/InventoryManager.cs index fa3cb619..a4c88b7f 100644 --- a/Server/Managers/InventoryManager.cs +++ b/Server/Managers/InventoryManager.cs @@ -1,7 +1,10 @@ -using reallife_gamemode.Model; +using GTANetworkAPI; +using reallife_gamemode.Model; using reallife_gamemode.Server.Inventory.Interfaces; using System; using System.Collections.Generic; +using System.Linq; +using System.Reflection; using System.Text; /** @@ -12,11 +15,35 @@ using System.Text; namespace reallife_gamemode.Server.Managers { - public class InventoryManager + public class InventoryManager : Script { - public static IItem GetItemById(this int id, DatabaseContext context = null) + public static List itemList; + + public static void LoadItems() { - return + itemList = new List(); + + Type[] allTypes = Assembly.GetExecutingAssembly().GetTypes(); + foreach (Type item in allTypes) + { + if (item.GetInterfaces().Contains((typeof(IItem)))) + { + NAPI.Util.ConsoleOutput($"Loading Item {item.Name}"); + if (Activator.CreateInstance(item) is IItem o) + { + if(GetItemById(o.Id) != null) + { + throw new InvalidOperationException($"Double ItemID found: {o.Id} | {o.Name}"); + } + itemList.Add(o); + } + } + } + } + + public static IItem GetItemById(int id) + { + return itemList.Find(i => i.Id == id); } } }