From b16ed270c25808f27f65a15c833060d2f80a9d15 Mon Sep 17 00:00:00 2001 From: hydrant Date: Wed, 19 Dec 2018 21:14:36 +0100 Subject: [PATCH] Refactored inventory system --- Server/Commands/Admin.cs | 2 +- Server/Entities/UserItem.cs | 8 +++++++ Server/Inventory/Interfaces/IDroppableItem.cs | 4 ++-- Server/Inventory/Interfaces/IItem.cs | 1 - Server/Inventory/Interfaces/IUsableItem.cs | 2 +- Server/Inventory/Items/Cheeseburger.cs | 2 +- Server/Inventory/Items/Chickenburger.cs | 2 +- Server/Inventory/Items/FoodItem.cs | 12 ++++++++-- Server/Inventory/Items/Hamburger.cs | 2 +- Server/Inventory/Items/Holz.cs | 15 ++++++------- Server/Managers/InventoryManager.cs | 22 +++++++++---------- 11 files changed, 43 insertions(+), 29 deletions(-) diff --git a/Server/Commands/Admin.cs b/Server/Commands/Admin.cs index dfcbde62..aafffa00 100644 --- a/Server/Commands/Admin.cs +++ b/Server/Commands/Admin.cs @@ -58,7 +58,7 @@ namespace reallife_gamemode.Server.Commands if(iItem is IUsableItem usableItemObj) { - usableItemObj.Use(eatItem, player); + usableItemObj.Use(eatItem); } } diff --git a/Server/Entities/UserItem.cs b/Server/Entities/UserItem.cs index 4a80faed..9935c612 100644 --- a/Server/Entities/UserItem.cs +++ b/Server/Entities/UserItem.cs @@ -30,5 +30,13 @@ namespace reallife_gamemode.Server.Entities public int Amount { get; set; } public int Slot { get; set; } + + public User GetUser() + { + using (var dbContext = new DatabaseContext()) + { + return dbContext.Users.FirstOrDefault(u => u.Id == UserId); + } + } } } \ No newline at end of file diff --git a/Server/Inventory/Interfaces/IDroppableItem.cs b/Server/Inventory/Interfaces/IDroppableItem.cs index 6f49aa59..1dc07406 100644 --- a/Server/Inventory/Interfaces/IDroppableItem.cs +++ b/Server/Inventory/Interfaces/IDroppableItem.cs @@ -12,8 +12,8 @@ using System.Text; namespace reallife_gamemode.Server.Inventory.Interfaces { - public interface IDroppableItem : IUsableItem + public interface IDroppableItem : IItem { - void Drop(UserItem uItem, Client player, int amount); + uint Object { get; } } } diff --git a/Server/Inventory/Interfaces/IItem.cs b/Server/Inventory/Interfaces/IItem.cs index bede53cb..10222cc2 100644 --- a/Server/Inventory/Interfaces/IItem.cs +++ b/Server/Inventory/Interfaces/IItem.cs @@ -17,6 +17,5 @@ namespace reallife_gamemode.Server.Inventory.Interfaces string Description { get; } int Gewicht { get; } string Einheit { get; } - uint Object { get; } } } diff --git a/Server/Inventory/Interfaces/IUsableItem.cs b/Server/Inventory/Interfaces/IUsableItem.cs index 7256c46c..161701ff 100644 --- a/Server/Inventory/Interfaces/IUsableItem.cs +++ b/Server/Inventory/Interfaces/IUsableItem.cs @@ -14,6 +14,6 @@ namespace reallife_gamemode.Server.Inventory.Interfaces { public interface IUsableItem : IItem { - void Use(UserItem uItem, Client player); + void Use(UserItem uItem); } } diff --git a/Server/Inventory/Items/Cheeseburger.cs b/Server/Inventory/Items/Cheeseburger.cs index 858a9c2c..520c7c6c 100644 --- a/Server/Inventory/Items/Cheeseburger.cs +++ b/Server/Inventory/Items/Cheeseburger.cs @@ -11,7 +11,7 @@ using System.Text; namespace reallife_gamemode.Server.Inventory.Items { - public class Cheeseburger : DropItem + public class Cheeseburger : FoodItem { public override int Id => 2; public override string Name => "Cheeseburger"; diff --git a/Server/Inventory/Items/Chickenburger.cs b/Server/Inventory/Items/Chickenburger.cs index 40b25d98..17eb2cc0 100644 --- a/Server/Inventory/Items/Chickenburger.cs +++ b/Server/Inventory/Items/Chickenburger.cs @@ -11,7 +11,7 @@ using System.Text; namespace reallife_gamemode.Server.Inventory.Items { - public class Chickenburger : DropItem, FoodItem + public class Chickenburger : FoodItem { public override int Id => 3; public override string Name => "Chickenburger"; diff --git a/Server/Inventory/Items/FoodItem.cs b/Server/Inventory/Items/FoodItem.cs index e31e74b5..4b17ba9c 100644 --- a/Server/Inventory/Items/FoodItem.cs +++ b/Server/Inventory/Items/FoodItem.cs @@ -19,9 +19,17 @@ namespace reallife_gamemode.Server.Inventory.Items public abstract string Einheit { get; } public abstract uint Object { get; } - public void Use(UserItem uItem, Client player) + public void Use(UserItem uItem) { - player.Health += HpAmount; + Client player = uItem.GetUser().GetClient(); + + int amountToAdd = HpAmount; + if(player.Health + amountToAdd > 100) + { + amountToAdd = 100 - player.Health; + } + + player.Health += amountToAdd; player.SendNotification("Du hast ein/einen ~y~" + InventoryManager.GetItemById(uItem.ItemId).Name + " ~s~gegessen.", false); InventoryManager.RemoveUserItem(player.GetUser(), uItem, 1); } diff --git a/Server/Inventory/Items/Hamburger.cs b/Server/Inventory/Items/Hamburger.cs index d7e55b99..84dacefe 100644 --- a/Server/Inventory/Items/Hamburger.cs +++ b/Server/Inventory/Items/Hamburger.cs @@ -11,7 +11,7 @@ using System.Text; namespace reallife_gamemode.Server.Inventory.Items { - public class Hamburger : DropItem + public class Hamburger : FoodItem { public override int Id => 1; public override string Name => "Hamburger"; diff --git a/Server/Inventory/Items/Holz.cs b/Server/Inventory/Items/Holz.cs index ec63385b..fd25dd63 100644 --- a/Server/Inventory/Items/Holz.cs +++ b/Server/Inventory/Items/Holz.cs @@ -11,14 +11,13 @@ using System.Text; namespace reallife_gamemode.Server.Inventory.Items { - public class Holz : DropItem + public class Holz : IDroppableItem { - public override int Id => 4; - public override string Name => "Holz"; - public override string Description => "Ich und mein Holz."; - public override int Gewicht => 1000; - public override string Einheit => "g"; - public override int HpAmount => 20; - public override uint Object => 1805779401; + public int Id => 4; + public string Name => "Holz"; + public string Description => "Ich und mein Holz."; + public int Gewicht => 1000; + public string Einheit => "g"; + public uint Object => 1805779401; } } diff --git a/Server/Managers/InventoryManager.cs b/Server/Managers/InventoryManager.cs index c4b9630a..bc12fd70 100644 --- a/Server/Managers/InventoryManager.cs +++ b/Server/Managers/InventoryManager.cs @@ -226,21 +226,19 @@ namespace reallife_gamemode.Server.Managers using (var context = new DatabaseContext()) { UserItem fItem = context.UserItems.FirstOrDefault(j => j.Id == int.Parse(itemId)); - IItem iItem = InventoryManager.GetItemById(fItem.ItemId); - - List itemList = player.GetUser().GetItems(); - UserItem userItem = itemList.FirstOrDefault(i => i.ItemId == iItem.Id); + IItem iItem = GetItemById(fItem.ItemId); switch (type) { - case "use": + case "use": + player.SendChatMessage("use item: " + iItem.Name); if (iItem == null) { player.SendChatMessage("Dieses Essen existiert nicht."); return; } - if (userItem == null) + if (fItem == null) { player.SendChatMessage("Du hast dieses Item nicht"); return; @@ -248,9 +246,10 @@ namespace reallife_gamemode.Server.Managers if (iItem is IUsableItem usableItemObj) { - usableItemObj.Use(userItem, player); + usableItemObj.Use(fItem); player.TriggerEvent("removeItem", itemId, amount); } + else player.SendChatMessage("not useable"); break; case "drop": @@ -260,17 +259,18 @@ namespace reallife_gamemode.Server.Managers return; } - if (userItem == null) + if (fItem == null) { player.SendChatMessage("Du hast dieses Item nicht"); return; } - if (iItem is IUsableItem usableItemObj2) + if (iItem is IDroppableItem usableItemObj2) { Random r = new Random(); - //fItem.Amount -= amount; - usableItemObj2.Drop(userItem, player); + NAPI.Object.CreateObject(3777723516, new Vector3(player.Position.X, player.Position.Y, player.Position.Z - 0.8), new Vector3(0, 0, r.Next(0, 360)), 0); + NAPI.TextLabel.CreateTextLabel(iItem.Name + " ~s~(~y~" + amount + "~s~)", new Vector3(player.Position.X, player.Position.Y, player.Position.Z - 0.6), 5, 0.5f, 4, new Color(255, 255, 255), false, 0); + fItem.Amount -= amount; player.TriggerEvent("removeItem", itemId, amount); } break;