diff --git a/ReallifeGamemode.Client/assets/js/inventory/script.js b/ReallifeGamemode.Client/assets/js/inventory/script.js index 77316876..d599c72a 100644 --- a/ReallifeGamemode.Client/assets/js/inventory/script.js +++ b/ReallifeGamemode.Client/assets/js/inventory/script.js @@ -422,7 +422,7 @@ function wegwerfen() { drawToPage(); drawToHandel(); moveItemsInv(); - mp.events.callRemote('invThrowItem', playerInventory[currentSelected].itemId); + mp.trigger('CEF:invThrowItem', playerInventory[currentSelected].itemId); } } diff --git a/ReallifeGamemode.Client/inventory/inventory.ts b/ReallifeGamemode.Client/inventory/inventory.ts index a629ed9b..8f967c72 100644 --- a/ReallifeGamemode.Client/inventory/inventory.ts +++ b/ReallifeGamemode.Client/inventory/inventory.ts @@ -48,6 +48,10 @@ export default function inventory(globalData: GlobalData): void { itemAmountArr = itemAmountArr1; } }); + mp.events.add("CEF:invThrowItem", (itemId) => { + mp.events.callRemote('invThrowItem', itemId); + }); + mp.events.add("CEF:BrowserLoaded", () => { invBrowser.execute(`setItems("${JSON.stringify(itemIdArr)}","${JSON.stringify(itemAmountArr)}");`); diff --git a/ReallifeGamemode.Server/Managers/ManagerOfInventory.cs b/ReallifeGamemode.Server/Managers/ManagerOfInventory.cs index 7da46b2f..f2b5ea80 100644 --- a/ReallifeGamemode.Server/Managers/ManagerOfInventory.cs +++ b/ReallifeGamemode.Server/Managers/ManagerOfInventory.cs @@ -59,17 +59,32 @@ namespace ReallifeGamemode.Server.Managers } } + + [RemoteEvent("invThrowItem")] + public void ServerEvent_invThrowItem(Client client, int itemId) + { + User user = client.GetUser(); + + using (var context = new DatabaseContext()) + { + UserItem item = context.UserItems.Where(u => u.UserId == user.Id && u.ItemId == itemId).FirstOrDefault(); + context.UserItems.Remove(item); + context.SaveChanges(); + return; + } + } + [RemoteEvent("tradeItem")] public void ServerEvent_tradeItem(Client client, int value, string nameOrId, string itemIdArrStr, string itemAmountArrStr) { User user = client.GetUser(); Client target = ClientService.GetClientByNameOrId(nameOrId); - if (target == null || !target.IsLoggedIn()) + if (target == null || !target.IsLoggedIn() || target == client) { ChatService.PlayerNotFound(client); return; } - if(client.Position.DistanceTo(target.Position) <= 20) + if(client.Position.DistanceTo(target.Position) >= 5) { ChatService.ErrorMessage(client, "Spieler ist zu weit entfernt."); return; @@ -118,7 +133,7 @@ namespace ReallifeGamemode.Server.Managers Timer tradeTimer = new Timer(30000); TradeTimer[user.Id] = tradeTimer; tradeTimer.Start(); - tradeTimer.Elapsed += (s, e) => { SendBackToSender(sender); client.SetData("inTrade", false); }; + tradeTimer.Elapsed += (s, e) => { SendBackToSender(sender); client.SetData("inTrade", false); sender.SetData("inTrade", false); }; } @@ -160,6 +175,11 @@ namespace ReallifeGamemode.Server.Managers [RemoteEvent("declineTrade")] public void ServerEvent_declineTrade(Client client) { + if (!client.GetData("inTrade")) + { + ChatService.ErrorMessage(client, "Das Handelsangebot ist abgelaufen."); + return; + } string name = client.GetData("trade"); Client target = ClientService.GetClientByNameOrId(name); if (target == null || !target.IsLoggedIn()) @@ -186,6 +206,12 @@ namespace ReallifeGamemode.Server.Managers [RemoteEvent("acceptTrade")] public void ServerEvent_AcceptTrade(Client client) { + if (!client.GetData("inTrade")) + { + ChatService.ErrorMessage(client, "Das Handelsangebot ist abgelaufen."); + return; + } + client.SetData("inTrade", false); User user = client.GetUser();