diff --git a/Model/DatabaseContext.cs b/Model/DatabaseContext.cs index edaa517c..9385feec 100644 --- a/Model/DatabaseContext.cs +++ b/Model/DatabaseContext.cs @@ -43,6 +43,9 @@ namespace reallife_gamemode.Model public DbSet Bans { get; set; } public DbSet Characters { get; set; } + //Inventar + public DbSet UserItems { get; set; } + //Faction public DbSet Factions { get; set; } public DbSet FactionBankAccounts { get; set; } diff --git a/Server/Commands/Admin.cs b/Server/Commands/Admin.cs index cce5e2eb..331a7d4e 100644 --- a/Server/Commands/Admin.cs +++ b/Server/Commands/Admin.cs @@ -14,6 +14,8 @@ using reallife_gamemode.Server.Extensions; using reallife_gamemode.Server.Services; using reallife_gamemode.Server.Util; using reallife_gamemode.Server.Managers; +using reallife_gamemode.Server.Inventory.Items; +using reallife_gamemode.Server.Inventory.Interfaces; /** * @overview Life of German Reallife - Admin Commands (Admin.cs) @@ -25,6 +27,22 @@ namespace reallife_gamemode.Server.Commands { public class Admin : Script { + [Command("eat")] + public void CmdAdminEat(Client player) + { + if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true) + { + ChatService.NotAuthorized(player); + return; + } + + Hamburger hamburger = new Hamburger(); + if(hamburger is IUsableItem) + { + var usableItemObj = hamburger as IUsableItem; + usableItemObj.Use(player); + } + } [Command("vmod", "~m~Benutzung: ~s~/vmod [Slot] [Mod ID]")] public void CmdAdminVmod(Client player, int slot, int mod) { diff --git a/Server/Entities/UserItem.cs b/Server/Entities/UserItem.cs new file mode 100644 index 00000000..85ab6ab3 --- /dev/null +++ b/Server/Entities/UserItem.cs @@ -0,0 +1,34 @@ +using GTANetworkAPI; +using reallife_gamemode.Model; +using reallife_gamemode.Server.Util; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; +using System.Text; + +/** +* @overview Life of German Reallife - Entities UserItem (UserItem.cs) +* @author VegaZ +* @copyright (c) 2008 - 2018 Life of German +*/ + +namespace reallife_gamemode.Server.Entities +{ + public class UserItem + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int Id { get; set; } + + public int ItemId { get; set; } + + [ForeignKey("User")] + public int UserId { get; set; } + public User User { get; set; } + + public float Amount { get; set; } + + } +} \ No newline at end of file diff --git a/Server/Inventory/Interfaces/IDroppableItem.cs b/Server/Inventory/Interfaces/IDroppableItem.cs new file mode 100644 index 00000000..b854ec5a --- /dev/null +++ b/Server/Inventory/Interfaces/IDroppableItem.cs @@ -0,0 +1,18 @@ +using GTANetworkAPI; +using System; +using System.Collections.Generic; +using System.Text; + +/** +* @overview Life of German Reallife - Inventory Interfaces DroppableItem (IDroppableItem.cs) +* @author VegaZ +* @copyright (c) 2008 - 2018 Life of German +*/ + +namespace reallife_gamemode.Server.Inventory.Interfaces +{ + public interface IDroppableItem + { + void Drop(Client player); + } +} diff --git a/Server/Inventory/Interfaces/IItem.cs b/Server/Inventory/Interfaces/IItem.cs new file mode 100644 index 00000000..10222cc2 --- /dev/null +++ b/Server/Inventory/Interfaces/IItem.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Text; + +/** +* @overview Life of German Reallife - Inventory Interfaces Item (IItem.cs) +* @author VegaZ +* @copyright (c) 2008 - 2018 Life of German +*/ + +namespace reallife_gamemode.Server.Inventory.Interfaces +{ + public interface IItem + { + int Id { get; } + string Name { get; } + string Description { get; } + int Gewicht { get; } + string Einheit { get; } + } +} diff --git a/Server/Inventory/Interfaces/IUsableItem.cs b/Server/Inventory/Interfaces/IUsableItem.cs new file mode 100644 index 00000000..52d792f1 --- /dev/null +++ b/Server/Inventory/Interfaces/IUsableItem.cs @@ -0,0 +1,18 @@ +using GTANetworkAPI; +using System; +using System.Collections.Generic; +using System.Text; + +/** +* @overview Life of German Reallife - Inventory Interfaces UsableItem (IUsableItem.cs) +* @author VegaZ +* @copyright (c) 2008 - 2018 Life of German +*/ + +namespace reallife_gamemode.Server.Inventory.Interfaces +{ + public interface IUsableItem + { + void Use(Client player); + } +} diff --git a/Server/Inventory/Items/FoodItem.cs b/Server/Inventory/Items/FoodItem.cs new file mode 100644 index 00000000..f1f39f59 --- /dev/null +++ b/Server/Inventory/Items/FoodItem.cs @@ -0,0 +1,18 @@ +using GTANetworkAPI; +using reallife_gamemode.Server.Inventory.Interfaces; +using System; +using System.Collections.Generic; +using System.Text; + +namespace reallife_gamemode.Server.Inventory.Items +{ + public abstract class FoodItem : IUsableItem + { + public abstract int HpAmount { get; } + + public void Use(Client player) + { + player.Health += HpAmount; + } + } +} diff --git a/Server/Inventory/Items/Hamburger.cs b/Server/Inventory/Items/Hamburger.cs new file mode 100644 index 00000000..f61d0f50 --- /dev/null +++ b/Server/Inventory/Items/Hamburger.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 Hamburger (Hamburger.cs) +* @author VegaZ +* @copyright (c) 2008 - 2018 Life of German +*/ + +namespace reallife_gamemode.Server.Inventory.Items +{ + public class Hamburger : FoodItem, IItem + { + public int Id => 1; + public string Name => "Hamburger"; + public string Description => "Ein leckerer Hamburger."; + public int Gewicht => 300; + public string Einheit => "g"; + public override int HpAmount => 50; + } +}