[ADD] INVENTORY SYSTEM (CEF)
This commit is contained in:
@@ -287,7 +287,7 @@ namespace ReallifeGamemode.Server.Events
|
||||
public void KeyPressI(Client player)
|
||||
{
|
||||
if (!player.IsLoggedIn()) return;
|
||||
InventoryManager.GetUserItems(player);
|
||||
ManagerOfInventory.GetUserItems(player);
|
||||
}
|
||||
|
||||
[RemoteEvent("keyPress:O")]
|
||||
@@ -368,12 +368,19 @@ namespace ReallifeGamemode.Server.Events
|
||||
public void KeyPressN(Client player)
|
||||
{
|
||||
if (!player.IsLoggedIn()) return;
|
||||
|
||||
}
|
||||
|
||||
[RemoteEvent("keyPress:X")]
|
||||
public void KeyPressX(Client player)
|
||||
{
|
||||
if (!player.IsLoggedIn()) return;
|
||||
|
||||
if (player.HasData("inTrade") && player.GetData("inTrade") == true)
|
||||
{
|
||||
ManagerOfInventory.OpenTradeAccept(player);
|
||||
}
|
||||
|
||||
if (player.IsInVehicle && player.VehicleSeat == -1)
|
||||
{
|
||||
ServerVehicle veh = player.Vehicle.GetServerVehicle();
|
||||
|
||||
@@ -14,9 +14,9 @@ namespace ReallifeGamemode.Server.Inventory.Items
|
||||
public class Cheeseburger : FoodItem
|
||||
{
|
||||
public override int Id => 2;
|
||||
public override string Name => "Cheeseburger";
|
||||
public override string Description => "Wie der Hamburger, nur mit Käse.";
|
||||
public override int Gewicht => 320;
|
||||
public override string Name => "Hamburger";
|
||||
public override string Description => "Ein Burger";
|
||||
public override int Gewicht => 300;
|
||||
public override string Einheit => "g";
|
||||
public override int HpAmount => 20;
|
||||
public override uint Object => 2240524752;
|
||||
|
||||
198
ReallifeGamemode.Server/Managers/ManagerOfInventory.cs
Normal file
198
ReallifeGamemode.Server/Managers/ManagerOfInventory.cs
Normal file
@@ -0,0 +1,198 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Timers;
|
||||
using GTANetworkAPI;
|
||||
using Newtonsoft.Json;
|
||||
using ReallifeGamemode.Server.Entities;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
using ReallifeGamemode.Server.Models;
|
||||
using ReallifeGamemode.Server.Services;
|
||||
|
||||
namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
class ManagerOfInventory : Script
|
||||
{
|
||||
private static Dictionary<int, (int[],int[])> TradeItems { get; set; } = new Dictionary<int, (int[], int[])>();
|
||||
private static Dictionary<int, Timer> TradeTimer { get; set; } = new Dictionary<int,Timer>();
|
||||
private static Dictionary<int, int> TradeValue { get; set; } = new Dictionary<int, int>();
|
||||
|
||||
public static void GetUserItems(Client client)
|
||||
{
|
||||
User user = client.GetUser();
|
||||
|
||||
List<int> ItemId = new List<int>();
|
||||
List<int> amount = new List<int>();
|
||||
|
||||
using (var context = new DatabaseContext())
|
||||
{
|
||||
List<UserItem> userItems = context.UserItems.ToList().FindAll(i => i.UserId == user.Id);
|
||||
|
||||
foreach (var item in userItems)
|
||||
{
|
||||
ItemId.Add(item.ItemId);
|
||||
amount.Add(item.Amount);
|
||||
}
|
||||
client.TriggerEvent("inventoryShow", ItemId.ToArray(), amount.ToArray());
|
||||
}
|
||||
}
|
||||
|
||||
[RemoteEvent("invUseItem")]
|
||||
public void ServerEvent_invUseItem(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();
|
||||
if (item.Amount > 1)
|
||||
{
|
||||
item.Amount -= 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
context.UserItems.Remove(item);
|
||||
}
|
||||
context.SaveChanges();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
[RemoteEvent("tradeItem")]
|
||||
public void ServerEvent_tradeItem(Client client, int value, string nameOrId, string itemIdArrStr, string itemAmountArrStr)
|
||||
{
|
||||
int[] itemIdArr = JsonConvert.DeserializeObject<int[]>(itemIdArrStr);
|
||||
int[] itemAmountArr = JsonConvert.DeserializeObject<int[]>(itemAmountArrStr);
|
||||
User user = client.GetUser();
|
||||
Client target = ClientService.GetClientByNameOrId(nameOrId);
|
||||
if (target == null || !target.IsLoggedIn())
|
||||
{
|
||||
ChatService.PlayerNotFound(client);
|
||||
return;
|
||||
}
|
||||
if (target.HasData("inTrade") && target.GetData("inTrade") == true)
|
||||
{
|
||||
ChatService.SendMessage(client, $"~r~[FEHLER] ~w~{target.Name} befindet sich bereits in einem Handel.");
|
||||
return;
|
||||
}
|
||||
using (var context = new DatabaseContext())
|
||||
{
|
||||
for (int x = 0; x < itemIdArr.Length; x++)
|
||||
{
|
||||
int itemId = itemIdArr[x];
|
||||
int itemAmount = itemAmountArr[x];
|
||||
UserItem item = context.UserItems.Where(u => u.UserId == user.Id && u.ItemId == itemId).FirstOrDefault();
|
||||
if (item.Amount - itemAmount > 0)
|
||||
{
|
||||
item.Amount -= itemAmount;
|
||||
}
|
||||
else
|
||||
{
|
||||
context.UserItems.Remove(item);
|
||||
}
|
||||
context.SaveChanges();
|
||||
}
|
||||
}
|
||||
TradeItems[user.Id] = (itemIdArr, itemAmountArr);
|
||||
TradeValue[user.Id] = value;
|
||||
target.SetData("tradePartner", user.Id);
|
||||
SendTradeOffer(target,client);
|
||||
}
|
||||
|
||||
public void SendTradeOffer(Client client, Client sender)
|
||||
{
|
||||
client.SetData("inTrade", true);
|
||||
ChatService.SendMessage(client, $"~b~ Du hast eine Handelsanfrage von {sender.Name} bekommen.");
|
||||
ChatService.SendMessage(client, $"~b~ Drücke '~w~N~b~' um die Handelsanfrage zu akzeptieren.");
|
||||
User user = client.GetUser();
|
||||
Timer tradeTimer = new Timer(30000);
|
||||
TradeTimer[user.Id] = tradeTimer;
|
||||
tradeTimer.Start();
|
||||
tradeTimer.Elapsed += (s, e) => { SendBackToSender(sender); client.SetData("inTrade", false); };
|
||||
}
|
||||
|
||||
|
||||
[RemoteEvent("declineTrade")]
|
||||
public void SendBackToSender(Client client)
|
||||
{
|
||||
User user = client.GetUser();
|
||||
ChatService.SendMessage(client, "Dein Handelpartner hat die Anfrage nicht angenommen.");
|
||||
(int[] itemIdArr, int[] itemAmountArr) = TradeItems[user.Id];
|
||||
Timer timer = TradeTimer[user.Id];
|
||||
timer.Stop();
|
||||
using (var context = new DatabaseContext())
|
||||
{
|
||||
for (int x = 0; x < itemIdArr.Length; x++)
|
||||
{
|
||||
int itemId = itemIdArr[x];
|
||||
int itemAmount = itemAmountArr[x];
|
||||
UserItem item = context.UserItems.Where(u => u.UserId == user.Id && u.ItemId == itemId).FirstOrDefault();
|
||||
if (item != null)
|
||||
{
|
||||
item.Amount += itemAmount;
|
||||
}
|
||||
else
|
||||
{
|
||||
var newItem = new UserItem
|
||||
{
|
||||
ItemId = itemId,
|
||||
UserId = user.Id,
|
||||
Amount = itemAmount,
|
||||
Slot = -1
|
||||
};
|
||||
|
||||
context.UserItems.Add(newItem);
|
||||
}
|
||||
context.SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void OpenTradeAccept(Client client)
|
||||
{
|
||||
User user = client.GetUser();
|
||||
int id = client.GetData("tradePartner");
|
||||
(int[] itemIdArr, int[] itemAmountArr) = TradeItems[id];
|
||||
Timer tradeTimer = TradeTimer[id];
|
||||
tradeTimer.Stop();
|
||||
client.SetData("inTrade", false);
|
||||
client.TriggerEvent("openTradeWindow", TradeValue[id], itemIdArr, itemAmountArr);
|
||||
}
|
||||
|
||||
[RemoteEvent("acceptTrade")]
|
||||
public void ServerEvent_AcceptTrade(Client client)
|
||||
{
|
||||
User user = client.GetUser();
|
||||
int id = client.GetData("tradePartner");
|
||||
(int[] itemIdArr, int[] itemAmountArr) = TradeItems[id];
|
||||
|
||||
using (var context = new DatabaseContext())
|
||||
{
|
||||
for (int x = 0; x < itemIdArr.Length; x++)
|
||||
{
|
||||
int itemId = itemIdArr[x];
|
||||
int itemAmount = itemAmountArr[x];
|
||||
UserItem item = context.UserItems.Where(u => u.UserId == user.Id && u.ItemId == itemId).FirstOrDefault();
|
||||
if (item != null)
|
||||
{
|
||||
item.Amount += itemAmount;
|
||||
}
|
||||
else
|
||||
{
|
||||
var newItem = new UserItem
|
||||
{
|
||||
ItemId = itemId,
|
||||
UserId = user.Id,
|
||||
Amount = itemAmount,
|
||||
Slot = -1
|
||||
};
|
||||
|
||||
context.UserItems.Add(newItem);
|
||||
}
|
||||
context.SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user