From e10f89ea6919c108baac65549a6ff02ad7755f10 Mon Sep 17 00:00:00 2001 From: VegaZ Date: Mon, 10 Dec 2018 21:27:16 +0100 Subject: [PATCH] Finish Inventory-Backend --- Client/Gui/Inventory/inventory.js | 6 ++- Server/Commands/Admin.cs | 12 +++--- Server/Managers/InventoryManager.cs | 66 ++++++++++++++++++++--------- 3 files changed, 57 insertions(+), 27 deletions(-) diff --git a/Client/Gui/Inventory/inventory.js b/Client/Gui/Inventory/inventory.js index 517620c4..4bb54c9b 100644 --- a/Client/Gui/Inventory/inventory.js +++ b/Client/Gui/Inventory/inventory.js @@ -54,7 +54,7 @@ mp.events.add("showInventory", (invWeight, itemArr) => { show = true; mp.game.graphics.requestStreamedTextureDict("itemimages", true); } else { - mp.events.callRemote('saveInventory', items); + mp.events.callRemote('saveInventory', JSON.stringify(items)); mp.gui.chat.activate(true); mp.gui.cursor.show(false, false); show = false; @@ -62,6 +62,10 @@ mp.events.add("showInventory", (invWeight, itemArr) => { } }); +mp.events.add("addItem", (item) => { + items.push(item); +}); + mp.events.add("render", () => { if (show === true) { var pos = mp.gui.cursor.position; diff --git a/Server/Commands/Admin.cs b/Server/Commands/Admin.cs index 607a4c7a..993f2870 100644 --- a/Server/Commands/Admin.cs +++ b/Server/Commands/Admin.cs @@ -80,7 +80,7 @@ namespace reallife_gamemode.Server.Commands } [Command("giveitem", "~m~Benutzung: ~s~/giveitem [Target] [Item ID] [Anzahl]")] - public void CmdAdminGiveItem(Client player, Client target, int itemId, int amount) + public void CmdAdminGiveItem(Client player, string targetname, int itemId, int amount) { if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true) { @@ -88,17 +88,15 @@ namespace reallife_gamemode.Server.Commands return; } + Client target = ClientService.GetClientByNameOrId(targetname); if (target == null || !target.IsLoggedIn()) { ChatService.PlayerNotFound(player); return; } - using (var dbContext = new DatabaseContext()) - { - UserItem newItem = new UserItem() { ItemId = itemId, UserId = target.GetUser().Id, Amount = amount }; - dbContext.UserItems.Add(newItem); - dbContext.SaveChanges(); - } + + UserItem item = new UserItem() { ItemId = itemId, UserId = target.GetUser().Id, Amount = amount}; + InventoryManager.AddItemToInventory(target, item); } #region Support diff --git a/Server/Managers/InventoryManager.cs b/Server/Managers/InventoryManager.cs index 7f0c15ef..1d60fa4f 100644 --- a/Server/Managers/InventoryManager.cs +++ b/Server/Managers/InventoryManager.cs @@ -1,4 +1,6 @@ using GTANetworkAPI; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; using reallife_gamemode.Model; using reallife_gamemode.Server.Commands; using reallife_gamemode.Server.Entities; @@ -100,46 +102,72 @@ namespace reallife_gamemode.Server.Managers } [RemoteEvent("saveInventory")] - public void SavePlayerInteroy(Client player, string[][] itemArray) + public void SavePlayerInventory(Client player, string itemArray) { - var user = player.GetUser(); - string[][] items = new string[itemArray.Length][]; - List userItems = new List(); + var user = player.GetUser(); + var items = JsonConvert.DeserializeObject(itemArray); + + //player.SendChatMessage(items); using (var context = new DatabaseContext()) { - foreach (var item in items) + for (var i = 0; i < items.Length; i++) { UserItem cItem = new UserItem { - Amount = int.Parse(item[3]), - ItemId = GetItemByName(item[0]).Id, + Amount = int.Parse(items[i][3]), + ItemId = GetItemByName(items[i][0]).Id, UserId = user.Id, - Slot = int.Parse(item[4]), + Slot = int.Parse(items[i][4]), }; - if (item[5] == "-1") + if (int.Parse(items[i][5]) == -1) { - player.SendChatMessage("Item hinzugefügt"); - context.Add(cItem); + context.UserItems.Add(cItem); } - else if(cItem.Slot == -1) + else if (cItem.Slot == -1) { - player.SendChatMessage("Item gelöscht"); - UserItem fItem = context.UserItems.FirstOrDefault(i => i.Id == int.Parse(item[5])); - userItems.Remove(fItem); + UserItem fItem = context.UserItems.FirstOrDefault(j => j.Id == int.Parse(items[i][5])); + context.UserItems.Remove(fItem); } else { - player.SendChatMessage("Item geändert"); - UserItem fItem = context.UserItems.FirstOrDefault(i => i.Id == int.Parse(item[5])); + UserItem fItem = context.UserItems.FirstOrDefault(j => j.Id == int.Parse(items[i][5])); fItem.Amount = cItem.Amount; fItem.Slot = cItem.Slot; - } + } } context.SaveChanges(); - } + } + } + + public static void AddItemToInventory(Client player, UserItem item) + { + var user = player.GetUser(); + using (var context = new DatabaseContext()) + { + + + List allItemsByUser = context.UserItems.ToList().FindAll(i => i.UserId == user.Id); + var slotArr = Enumerable.Range(1, 20).ToList(); + allItemsByUser.ForEach(allItem => + { + if (slotArr.Contains(allItem.Slot)) slotArr.Remove(allItem.Slot); + }); + + int newSlot = slotArr.Min(); + + item.Slot = newSlot; + context.UserItems.Add(item); + context.SaveChanges(); + + IItem iItem = GetItemById(item.ItemId); + + string[] newItem = new string[] { iItem.Name, iItem.Description, iItem.Gewicht.ToString(), item.Amount.ToString(), newSlot.ToString(), item.Id.ToString()}; + + player.TriggerEvent("addItem", newItem); + } } } }