Finish Inventory-Backend

This commit is contained in:
VegaZ
2018-12-10 21:27:16 +01:00
parent f783a889c7
commit e10f89ea69
3 changed files with 57 additions and 27 deletions

View File

@@ -54,7 +54,7 @@ mp.events.add("showInventory", (invWeight, itemArr) => {
show = true; show = true;
mp.game.graphics.requestStreamedTextureDict("itemimages", true); mp.game.graphics.requestStreamedTextureDict("itemimages", true);
} else { } else {
mp.events.callRemote('saveInventory', items); mp.events.callRemote('saveInventory', JSON.stringify(items));
mp.gui.chat.activate(true); mp.gui.chat.activate(true);
mp.gui.cursor.show(false, false); mp.gui.cursor.show(false, false);
show = false; show = false;
@@ -62,6 +62,10 @@ mp.events.add("showInventory", (invWeight, itemArr) => {
} }
}); });
mp.events.add("addItem", (item) => {
items.push(item);
});
mp.events.add("render", () => { mp.events.add("render", () => {
if (show === true) { if (show === true) {
var pos = mp.gui.cursor.position; var pos = mp.gui.cursor.position;

View File

@@ -80,7 +80,7 @@ namespace reallife_gamemode.Server.Commands
} }
[Command("giveitem", "~m~Benutzung: ~s~/giveitem [Target] [Item ID] [Anzahl]")] [Command("giveitem", "~m~Benutzung: ~s~/giveitem [Target] [Item ID] [Anzahl]")]
public void CmdAdminGiveItem(Client player, Client target, int itemId, int amount) public void CmdAdminGiveItem(Client player, string targetname, int itemId, int amount)
{ {
if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true) if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true)
{ {
@@ -88,17 +88,15 @@ namespace reallife_gamemode.Server.Commands
return; return;
} }
Client target = ClientService.GetClientByNameOrId(targetname);
if (target == null || !target.IsLoggedIn()) if (target == null || !target.IsLoggedIn())
{ {
ChatService.PlayerNotFound(player); ChatService.PlayerNotFound(player);
return; return;
} }
using (var dbContext = new DatabaseContext())
{ UserItem item = new UserItem() { ItemId = itemId, UserId = target.GetUser().Id, Amount = amount};
UserItem newItem = new UserItem() { ItemId = itemId, UserId = target.GetUser().Id, Amount = amount }; InventoryManager.AddItemToInventory(target, item);
dbContext.UserItems.Add(newItem);
dbContext.SaveChanges();
}
} }
#region Support #region Support

View File

@@ -1,4 +1,6 @@
using GTANetworkAPI; using GTANetworkAPI;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using reallife_gamemode.Model; using reallife_gamemode.Model;
using reallife_gamemode.Server.Commands; using reallife_gamemode.Server.Commands;
using reallife_gamemode.Server.Entities; using reallife_gamemode.Server.Entities;
@@ -100,40 +102,38 @@ namespace reallife_gamemode.Server.Managers
} }
[RemoteEvent("saveInventory")] [RemoteEvent("saveInventory")]
public void SavePlayerInteroy(Client player, string[][] itemArray) public void SavePlayerInventory(Client player, string itemArray)
{ {
var user = player.GetUser();
string[][] items = new string[itemArray.Length][];
List<UserItem> userItems = new List<UserItem>(); var user = player.GetUser();
var items = JsonConvert.DeserializeObject<string[][]>(itemArray);
//player.SendChatMessage(items);
using (var context = new DatabaseContext()) using (var context = new DatabaseContext())
{ {
foreach (var item in items) for (var i = 0; i < items.Length; i++)
{ {
UserItem cItem = new UserItem UserItem cItem = new UserItem
{ {
Amount = int.Parse(item[3]), Amount = int.Parse(items[i][3]),
ItemId = GetItemByName(item[0]).Id, ItemId = GetItemByName(items[i][0]).Id,
UserId = user.Id, UserId = user.Id,
Slot = int.Parse(item[4]), Slot = int.Parse(items[i][4]),
}; };
if (item[5] == "-1") if (int.Parse(items[i][5]) == -1)
{ {
player.SendChatMessage("Item hinzugefügt"); context.UserItems.Add(cItem);
context.Add(cItem);
} }
else if (cItem.Slot == -1) else if (cItem.Slot == -1)
{ {
player.SendChatMessage("Item gelöscht"); UserItem fItem = context.UserItems.FirstOrDefault(j => j.Id == int.Parse(items[i][5]));
UserItem fItem = context.UserItems.FirstOrDefault(i => i.Id == int.Parse(item[5])); context.UserItems.Remove(fItem);
userItems.Remove(fItem);
} }
else else
{ {
player.SendChatMessage("Item geändert"); UserItem fItem = context.UserItems.FirstOrDefault(j => j.Id == int.Parse(items[i][5]));
UserItem fItem = context.UserItems.FirstOrDefault(i => i.Id == int.Parse(item[5]));
fItem.Amount = cItem.Amount; fItem.Amount = cItem.Amount;
fItem.Slot = cItem.Slot; fItem.Slot = cItem.Slot;
} }
@@ -141,5 +141,33 @@ namespace reallife_gamemode.Server.Managers
context.SaveChanges(); context.SaveChanges();
} }
} }
public static void AddItemToInventory(Client player, UserItem item)
{
var user = player.GetUser();
using (var context = new DatabaseContext())
{
List <UserItem> allItemsByUser = context.UserItems.ToList().FindAll(i => i.UserId == user.Id);
var slotArr = Enumerable.Range(1, 20).ToList();
allItemsByUser.ForEach(allItem =>
{
if (slotArr.Contains(allItem.Slot)) slotArr.Remove(allItem.Slot);
});
int newSlot = slotArr.Min();
item.Slot = newSlot;
context.UserItems.Add(item);
context.SaveChanges();
IItem iItem = GetItemById(item.ItemId);
string[] newItem = new string[] { iItem.Name, iItem.Description, iItem.Gewicht.ToString(), item.Amount.ToString(), newSlot.ToString(), item.Id.ToString()};
player.TriggerEvent("addItem", newItem);
}
}
} }
} }