diff --git a/Server/Commands/Admin.cs b/Server/Commands/Admin.cs index 5089e7b0..1d22b1eb 100644 --- a/Server/Commands/Admin.cs +++ b/Server/Commands/Admin.cs @@ -27,6 +27,26 @@ namespace reallife_gamemode.Server.Commands { public class Admin : Script { + [Command("eat", "~m~Benutzung: ~s~/eat [Item]")] + public void CmdAdminEat(Client player, string item) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + IItem iItem = InventoryManager.GetItemByName(item); + + List itemList = player.GetUser().GetItems(); + UserItem eatItem = itemList.FirstOrDefault(i => i.ItemId == iItem.Id); + + if(eatItem is IUsableItem) + { + var usableItemObj = eatItem as IUsableItem; + usableItemObj.Use(eatItem, player); + } + } [Command("myitems")] public void CmdAdminMyItems(Client player) { @@ -41,7 +61,7 @@ namespace reallife_gamemode.Server.Commands foreach (var item in itemList) { IItem iitem = InventoryManager.GetItemById(item.ItemId); - player.SendChatMessage("Item: ~g~" + iitem.Name); + player.SendChatMessage("Item: ~g~" + item.Amount + " " + iitem.Name); } } @@ -58,7 +78,13 @@ namespace reallife_gamemode.Server.Commands { 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(); + } } [Command("vmod", "~m~Benutzung: ~s~/vmod [Slot] [Mod ID]")] public void CmdAdminVmod(Client player, int slot, int mod) diff --git a/Server/Inventory/Interfaces/IUsableItem.cs b/Server/Inventory/Interfaces/IUsableItem.cs index 52d792f1..d89d5293 100644 --- a/Server/Inventory/Interfaces/IUsableItem.cs +++ b/Server/Inventory/Interfaces/IUsableItem.cs @@ -1,4 +1,5 @@ using GTANetworkAPI; +using reallife_gamemode.Server.Entities; using System; using System.Collections.Generic; using System.Text; @@ -13,6 +14,6 @@ namespace reallife_gamemode.Server.Inventory.Interfaces { public interface IUsableItem { - void Use(Client player); + void Use(UserItem uItem, Client player); } } diff --git a/Server/Inventory/Items/Cheeseburger.cs b/Server/Inventory/Items/Cheeseburger.cs index 6f92a0a7..d311b348 100644 --- a/Server/Inventory/Items/Cheeseburger.cs +++ b/Server/Inventory/Items/Cheeseburger.cs @@ -4,7 +4,7 @@ using System.Collections.Generic; using System.Text; /** -* @overview Life of German Reallife - Inventory Items Hamburger (Hamburger.cs) +* @overview Life of German Reallife - Inventory Items Cheeseburger (Cheeseburger.cs) * @author VegaZ * @copyright (c) 2008 - 2018 Life of German */ diff --git a/Server/Inventory/Items/Chickenburger.cs b/Server/Inventory/Items/Chickenburger.cs new file mode 100644 index 00000000..7e51af38 --- /dev/null +++ b/Server/Inventory/Items/Chickenburger.cs @@ -0,0 +1,23 @@ +using reallife_gamemode.Server.Inventory.Interfaces; +using System; +using System.Collections.Generic; +using System.Text; + +/** +* @overview Life of German Reallife - Inventory Items Chickenburger (Chickenburger.cs) +* @author VegaZ +* @copyright (c) 2008 - 2018 Life of German +*/ + +namespace reallife_gamemode.Server.Inventory.Items +{ + public class Chickenburger : FoodItem, IItem + { + public int Id => 3; + public string Name => "Chickenburger"; + public string Description => "Hühnchenburger"; + public int Gewicht => 330; + public string Einheit => "g"; + public override int HpAmount => 25; + } +} diff --git a/Server/Inventory/Items/FoodItem.cs b/Server/Inventory/Items/FoodItem.cs index f1f39f59..699ef857 100644 --- a/Server/Inventory/Items/FoodItem.cs +++ b/Server/Inventory/Items/FoodItem.cs @@ -1,5 +1,8 @@ using GTANetworkAPI; +using reallife_gamemode.Server.Entities; +using reallife_gamemode.Server.Extensions; using reallife_gamemode.Server.Inventory.Interfaces; +using reallife_gamemode.Server.Managers; using System; using System.Collections.Generic; using System.Text; @@ -10,9 +13,11 @@ namespace reallife_gamemode.Server.Inventory.Items { public abstract int HpAmount { get; } - public void Use(Client player) + public void Use(UserItem uItem, Client player) { player.Health += HpAmount; + player.SendChatMessage("Du hast einen ~y~" + InventoryManager.GetItemById(uItem.ItemId).Name + " ~s~gegessen."); + InventoryManager.RemoveUserItem(player.GetUser(), uItem); } } } diff --git a/Server/Managers/InventoryManager.cs b/Server/Managers/InventoryManager.cs index a4c88b7f..2e07c628 100644 --- a/Server/Managers/InventoryManager.cs +++ b/Server/Managers/InventoryManager.cs @@ -1,5 +1,7 @@ using GTANetworkAPI; using reallife_gamemode.Model; +using reallife_gamemode.Server.Commands; +using reallife_gamemode.Server.Entities; using reallife_gamemode.Server.Inventory.Interfaces; using System; using System.Collections.Generic; @@ -45,5 +47,28 @@ namespace reallife_gamemode.Server.Managers { return itemList.Find(i => i.Id == id); } + + public static IItem GetItemByName(string name) + { + return itemList.Find(i => i.Name == name); + } + + public static void RemoveUserItem(Entities.User user, UserItem item) + { + using (var dbContext = new DatabaseContext()) + { + var userItem = dbContext.UserItems.FirstOrDefault(i => i.Id == item.Id); + + userItem.Amount--; + + dbContext.SaveChanges(); + + if(userItem.Amount == 0) + { + dbContext.Remove(userItem); + dbContext.SaveChanges(); + } + } + } } }