Refactored inventory system

This commit is contained in:
hydrant
2018-12-19 21:14:36 +01:00
parent 98d6ecb01a
commit b16ed270c2
11 changed files with 43 additions and 29 deletions

View File

@@ -58,7 +58,7 @@ namespace reallife_gamemode.Server.Commands
if(iItem is IUsableItem usableItemObj) if(iItem is IUsableItem usableItemObj)
{ {
usableItemObj.Use(eatItem, player); usableItemObj.Use(eatItem);
} }
} }

View File

@@ -30,5 +30,13 @@ namespace reallife_gamemode.Server.Entities
public int Amount { get; set; } public int Amount { get; set; }
public int Slot { get; set; } public int Slot { get; set; }
public User GetUser()
{
using (var dbContext = new DatabaseContext())
{
return dbContext.Users.FirstOrDefault(u => u.Id == UserId);
}
}
} }
} }

View File

@@ -12,8 +12,8 @@ using System.Text;
namespace reallife_gamemode.Server.Inventory.Interfaces 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; }
} }
} }

View File

@@ -17,6 +17,5 @@ namespace reallife_gamemode.Server.Inventory.Interfaces
string Description { get; } string Description { get; }
int Gewicht { get; } int Gewicht { get; }
string Einheit { get; } string Einheit { get; }
uint Object { get; }
} }
} }

View File

@@ -14,6 +14,6 @@ namespace reallife_gamemode.Server.Inventory.Interfaces
{ {
public interface IUsableItem : IItem public interface IUsableItem : IItem
{ {
void Use(UserItem uItem, Client player); void Use(UserItem uItem);
} }
} }

View File

@@ -11,7 +11,7 @@ using System.Text;
namespace reallife_gamemode.Server.Inventory.Items namespace reallife_gamemode.Server.Inventory.Items
{ {
public class Cheeseburger : DropItem public class Cheeseburger : FoodItem
{ {
public override int Id => 2; public override int Id => 2;
public override string Name => "Cheeseburger"; public override string Name => "Cheeseburger";

View File

@@ -11,7 +11,7 @@ using System.Text;
namespace reallife_gamemode.Server.Inventory.Items namespace reallife_gamemode.Server.Inventory.Items
{ {
public class Chickenburger : DropItem, FoodItem public class Chickenburger : FoodItem
{ {
public override int Id => 3; public override int Id => 3;
public override string Name => "Chickenburger"; public override string Name => "Chickenburger";

View File

@@ -19,9 +19,17 @@ namespace reallife_gamemode.Server.Inventory.Items
public abstract string Einheit { get; } public abstract string Einheit { get; }
public abstract uint Object { 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); player.SendNotification("Du hast ein/einen ~y~" + InventoryManager.GetItemById(uItem.ItemId).Name + " ~s~gegessen.", false);
InventoryManager.RemoveUserItem(player.GetUser(), uItem, 1); InventoryManager.RemoveUserItem(player.GetUser(), uItem, 1);
} }

View File

@@ -11,7 +11,7 @@ using System.Text;
namespace reallife_gamemode.Server.Inventory.Items namespace reallife_gamemode.Server.Inventory.Items
{ {
public class Hamburger : DropItem public class Hamburger : FoodItem
{ {
public override int Id => 1; public override int Id => 1;
public override string Name => "Hamburger"; public override string Name => "Hamburger";

View File

@@ -11,14 +11,13 @@ using System.Text;
namespace reallife_gamemode.Server.Inventory.Items namespace reallife_gamemode.Server.Inventory.Items
{ {
public class Holz : DropItem public class Holz : IDroppableItem
{ {
public override int Id => 4; public int Id => 4;
public override string Name => "Holz"; public string Name => "Holz";
public override string Description => "Ich und mein Holz."; public string Description => "Ich und mein Holz.";
public override int Gewicht => 1000; public int Gewicht => 1000;
public override string Einheit => "g"; public string Einheit => "g";
public override int HpAmount => 20; public uint Object => 1805779401;
public override uint Object => 1805779401;
} }
} }

View File

@@ -226,21 +226,19 @@ namespace reallife_gamemode.Server.Managers
using (var context = new DatabaseContext()) using (var context = new DatabaseContext())
{ {
UserItem fItem = context.UserItems.FirstOrDefault(j => j.Id == int.Parse(itemId)); UserItem fItem = context.UserItems.FirstOrDefault(j => j.Id == int.Parse(itemId));
IItem iItem = InventoryManager.GetItemById(fItem.ItemId); IItem iItem = GetItemById(fItem.ItemId);
List<UserItem> itemList = player.GetUser().GetItems();
UserItem userItem = itemList.FirstOrDefault(i => i.ItemId == iItem.Id);
switch (type) switch (type)
{ {
case "use": case "use":
player.SendChatMessage("use item: " + iItem.Name);
if (iItem == null) if (iItem == null)
{ {
player.SendChatMessage("Dieses Essen existiert nicht."); player.SendChatMessage("Dieses Essen existiert nicht.");
return; return;
} }
if (userItem == null) if (fItem == null)
{ {
player.SendChatMessage("Du hast dieses Item nicht"); player.SendChatMessage("Du hast dieses Item nicht");
return; return;
@@ -248,9 +246,10 @@ namespace reallife_gamemode.Server.Managers
if (iItem is IUsableItem usableItemObj) if (iItem is IUsableItem usableItemObj)
{ {
usableItemObj.Use(userItem, player); usableItemObj.Use(fItem);
player.TriggerEvent("removeItem", itemId, amount); player.TriggerEvent("removeItem", itemId, amount);
} }
else player.SendChatMessage("not useable");
break; break;
case "drop": case "drop":
@@ -260,17 +259,18 @@ namespace reallife_gamemode.Server.Managers
return; return;
} }
if (userItem == null) if (fItem == null)
{ {
player.SendChatMessage("Du hast dieses Item nicht"); player.SendChatMessage("Du hast dieses Item nicht");
return; return;
} }
if (iItem is IUsableItem usableItemObj2) if (iItem is IDroppableItem usableItemObj2)
{ {
Random r = new Random(); Random r = new Random();
//fItem.Amount -= amount; 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);
usableItemObj2.Drop(userItem, player); 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); player.TriggerEvent("removeItem", itemId, amount);
} }
break; break;