From a04cd81ede6855573d72248efa694b983c5e316d Mon Sep 17 00:00:00 2001 From: VegaZ Date: Wed, 19 Dec 2018 20:22:00 +0100 Subject: [PATCH] Add drop to Inventory --- Client/Gui/Inventory/inventory.js | 38 +++++++++++++------ Server/Inventory/Interfaces/IDroppableItem.cs | 3 +- Server/Inventory/Interfaces/IItem.cs | 1 + Server/Inventory/Items/Cheeseburger.cs | 3 +- Server/Inventory/Items/Chickenburger.cs | 3 +- Server/Inventory/Items/DropItem.cs | 28 ++++++++++++++ Server/Inventory/Items/FoodItem.cs | 5 ++- Server/Inventory/Items/Hamburger.cs | 3 +- Server/Inventory/Items/Holz.cs | 3 +- Server/Inventory/Items/Kraftstoff.cs | 3 +- Server/Managers/InventoryManager.cs | 12 +++--- 11 files changed, 76 insertions(+), 26 deletions(-) create mode 100644 Server/Inventory/Items/DropItem.cs diff --git a/Client/Gui/Inventory/inventory.js b/Client/Gui/Inventory/inventory.js index fb4d86dd..570a0da8 100644 --- a/Client/Gui/Inventory/inventory.js +++ b/Client/Gui/Inventory/inventory.js @@ -25,6 +25,7 @@ var upRColor = 222; var downRColor = 222; var leftRColor = 222; var rightRColor = 222; +var radialDescription; var inventoryWeight; var items = [[]]; @@ -210,24 +211,34 @@ mp.events.add("render", () => { mp.game.graphics.drawSprite("itemimages", "radialdrop", grid[hoverGrid][0], grid[hoverGrid][1], rWidth / aspectRatioFactor, rWidth, 0, 255, 255, 255, 255); mp.game.graphics.drawSprite("itemimages", "radialuse", grid[hoverGrid][0], grid[hoverGrid][1], rWidth / aspectRatioFactor, rWidth, 0, 255, 255, 255, 255); } - //--------------------------------------------------------------DEBUG mp.game.graphics.set2dLayer(7); - mp.game.graphics.drawText(itemRadial.toString() + " ~y~" + radialSelect, [0.5, 0.05], { - font: 7, - color: [255, 0, 0, 255], - scale: [0.7, 0.7], - outline: true, - }); - //KOORDINATEN + if (ifMouseSelectRadial(pos[0], pos[1])) { - mp.game.graphics.drawText((pos[0] / screenX).toFixed(3) + " / " + (pos[1] / screenY).toFixed(3), [pos[0] / screenX, pos[1] / screenY - 0.02], { + //mp.game.graphics.drawRect(pos[0] / screenX, pos[1] / screenY - 0.02, 0.08, 0.03, 0, 0, 0, 255); + mp.game.graphics.drawText("~g~" + radialDescription, [pos[0] / screenX, pos[1] / screenY - 0.033], { font: 4, color: [255, 255, 255, 255], scale: [0.4, 0.4], outline: true, }); } - //----------------------------------------------------------DEBUG END + ////--------------------------------------------------------------DEBUG + //mp.game.graphics.drawText(itemRadial.toString() + " ~y~" + radialSelect, [0.5, 0.05], { + // font: 7, + // color: [255, 0, 0, 255], + // scale: [0.7, 0.7], + // outline: true, + //}); + ////KOORDINATEN + //if (ifMouseSelectRadial(pos[0], pos[1])) { + // mp.game.graphics.drawText((pos[0] / screenX).toFixed(3) + " / " + (pos[1] / screenY).toFixed(3), [pos[0] / screenX, pos[1] / screenY - 0.02], { + // font: 4, + // color: [255, 255, 255, 255], + // scale: [0.4, 0.4], + // outline: true, + // }); + //} + ////----------------------------------------------------------DEBUG END } if (showAdmin === true) { var pos = mp.gui.cursor.position; @@ -453,12 +464,14 @@ function ifMouseSelectRadial(cX2, cY2) { //OBEN if (x > grid[hoverGrid][0] - 0.0255 / aspectRatioFactor && x < grid[hoverGrid][0] + 0.0255 / aspectRatioFactor && y < grid[hoverGrid][1] - 0.065 && y > grid[hoverGrid][1] - 0.2) { radialSelect = "up"; + radialDescription = "Wegwerfen"; upRColor = 255; return true; } //UNTEN else if (x > grid[hoverGrid][0] - 0.0255 / aspectRatioFactor && x < grid[hoverGrid][0] + 0.0255 / aspectRatioFactor && y > grid[hoverGrid][1] + 0.065 && y < grid[hoverGrid][1] + 0.2) { radialSelect = "down"; + radialDescription = "Benutzen / Essen"; downRColor = 255; return true; } @@ -508,8 +521,11 @@ mp.events.add('click', (x, y, upOrDown, leftOrRight, relativeX, relativeY, world if (isNaN(amount) || amount < 1) { mp.game.graphics.notify('~r~Du musst eine Zahl größer als 0 eingeben!'); return; + } else if (parseInt(amount) > parseInt(items[clickedItem][3])) { + mp.game.graphics.notify('~r~So viele Items hast du nicht!'); + return; } - mp.events.callRemote('itemInteract', "drop", items[clickedItem][5], amount); + mp.events.callRemote('itemInteract', "drop", items[clickedItem][5], parseInt(amount)); }); itemRadial = false; diff --git a/Server/Inventory/Interfaces/IDroppableItem.cs b/Server/Inventory/Interfaces/IDroppableItem.cs index 667e6b29..9f6e8c53 100644 --- a/Server/Inventory/Interfaces/IDroppableItem.cs +++ b/Server/Inventory/Interfaces/IDroppableItem.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 IDroppableItem : IItem { - void Drop(Client player); + void Drop(UserItem uItem, Client player, int amount); } } diff --git a/Server/Inventory/Interfaces/IItem.cs b/Server/Inventory/Interfaces/IItem.cs index 10222cc2..bede53cb 100644 --- a/Server/Inventory/Interfaces/IItem.cs +++ b/Server/Inventory/Interfaces/IItem.cs @@ -17,5 +17,6 @@ namespace reallife_gamemode.Server.Inventory.Interfaces string Description { get; } int Gewicht { get; } string Einheit { get; } + uint Object { get; } } } diff --git a/Server/Inventory/Items/Cheeseburger.cs b/Server/Inventory/Items/Cheeseburger.cs index 39162356..858a9c2c 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 : FoodItem + public class Cheeseburger : DropItem { public override int Id => 2; public override string Name => "Cheeseburger"; @@ -19,5 +19,6 @@ namespace reallife_gamemode.Server.Inventory.Items public override int Gewicht => 320; public override string Einheit => "g"; public override int HpAmount => 20; + public override uint Object => 2240524752; } } diff --git a/Server/Inventory/Items/Chickenburger.cs b/Server/Inventory/Items/Chickenburger.cs index 64ec0b2c..40b25d98 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 : FoodItem + public class Chickenburger : DropItem, FoodItem { public override int Id => 3; public override string Name => "Chickenburger"; @@ -19,5 +19,6 @@ namespace reallife_gamemode.Server.Inventory.Items public override int Gewicht => 330; public override string Einheit => "g"; public override int HpAmount => 25; + public override uint Object => 2240524752; } } diff --git a/Server/Inventory/Items/DropItem.cs b/Server/Inventory/Items/DropItem.cs new file mode 100644 index 00000000..f8db7caf --- /dev/null +++ b/Server/Inventory/Items/DropItem.cs @@ -0,0 +1,28 @@ +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; + +namespace reallife_gamemode.Server.Inventory.Items +{ + public abstract class DropItem : IDroppableItem + { + public abstract int HpAmount { get; } + public abstract int Id { get; } + public abstract string Name { get; } + public abstract string Description { get; } + public abstract int Gewicht { get; } + public abstract string Einheit { get; } + public abstract uint Object { get; } + + public void Drop(UserItem uItem, Client player, int amount) + { + player.SendNotification("Du hast ~g~" + amount + " ~y~" + InventoryManager.GetItemById(uItem.ItemId).Name + " ~s~weggeworfen.", false); + InventoryManager.RemoveUserItem(player.GetUser(), uItem); + } + } +} diff --git a/Server/Inventory/Items/FoodItem.cs b/Server/Inventory/Items/FoodItem.cs index dc3d5651..e31e74b5 100644 --- a/Server/Inventory/Items/FoodItem.cs +++ b/Server/Inventory/Items/FoodItem.cs @@ -17,12 +17,13 @@ namespace reallife_gamemode.Server.Inventory.Items public abstract string Description { get; } public abstract int Gewicht { get; } public abstract string Einheit { get; } + public abstract uint Object { get; } 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); + 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 b7fa2590..d7e55b99 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 : FoodItem + public class Hamburger : DropItem { public override int Id => 1; public override string Name => "Hamburger"; @@ -19,5 +19,6 @@ namespace reallife_gamemode.Server.Inventory.Items public override int Gewicht => 300; public override string Einheit => "g"; public override int HpAmount => 20; + public override uint Object => 2240524752; } } diff --git a/Server/Inventory/Items/Holz.cs b/Server/Inventory/Items/Holz.cs index 209f3722..ec63385b 100644 --- a/Server/Inventory/Items/Holz.cs +++ b/Server/Inventory/Items/Holz.cs @@ -11,7 +11,7 @@ using System.Text; namespace reallife_gamemode.Server.Inventory.Items { - public class Holz : FoodItem + public class Holz : DropItem { public override int Id => 4; public override string Name => "Holz"; @@ -19,5 +19,6 @@ namespace reallife_gamemode.Server.Inventory.Items public override int Gewicht => 1000; public override string Einheit => "g"; public override int HpAmount => 20; + public override uint Object => 1805779401; } } diff --git a/Server/Inventory/Items/Kraftstoff.cs b/Server/Inventory/Items/Kraftstoff.cs index 95b83a46..499a4aaa 100644 --- a/Server/Inventory/Items/Kraftstoff.cs +++ b/Server/Inventory/Items/Kraftstoff.cs @@ -11,7 +11,7 @@ using System.Text; namespace reallife_gamemode.Server.Inventory.Items { - public class Kraftstoff : FoodItem + public class Kraftstoff : DropItem { public override int Id => 5; public override string Name => "Kraftstoff"; @@ -19,5 +19,6 @@ namespace reallife_gamemode.Server.Inventory.Items public override int Gewicht => 1000; public override string Einheit => "g"; public override int HpAmount => 20; + public override uint Object => 786272259; } } diff --git a/Server/Managers/InventoryManager.cs b/Server/Managers/InventoryManager.cs index 9a5ec34e..c4b9630a 100644 --- a/Server/Managers/InventoryManager.cs +++ b/Server/Managers/InventoryManager.cs @@ -57,13 +57,13 @@ namespace reallife_gamemode.Server.Managers return itemList.Find(i => i.Name.ToLower() == name.ToLower()); } - public static void RemoveUserItem(Entities.User user, UserItem item) + public static void RemoveUserItem(Entities.User user, UserItem item, int amount) { using (var dbContext = new DatabaseContext()) { var userItem = dbContext.UserItems.FirstOrDefault(i => i.Id == item.Id); - userItem.Amount--; + userItem.Amount -= amount; dbContext.SaveChanges(); @@ -250,7 +250,6 @@ namespace reallife_gamemode.Server.Managers { usableItemObj.Use(userItem, player); player.TriggerEvent("removeItem", itemId, amount); - fItem.Amount -= amount; } break; case "drop": @@ -269,10 +268,9 @@ namespace reallife_gamemode.Server.Managers if (iItem is IUsableItem usableItemObj2) { - fItem.Amount -= amount; - usableItemObj2.Use(userItem, player); - NAPI.Object.CreateObject(1017479830, new Vector3(player.Position.X, player.Position.Y, player.Position.Z), new Vector3(0, 0, 0), 0); - NAPI.TextLabel.CreateTextLabel(iItem.Name + " ~s~(~y~" + amount + "~s~)", new Vector3(player.Position.X, player.Position.Y, player.Position.Z), 5, 0.5f, 4, new Color(255, 255, 255), false, 0); + Random r = new Random(); + //fItem.Amount -= amount; + usableItemObj2.Drop(userItem, player); player.TriggerEvent("removeItem", itemId, amount); } break;