Add Hanf items, some inventory mess removed

This commit is contained in:
hydrant
2021-05-22 14:52:29 +02:00
parent 467e0a4248
commit 34033eb875
20 changed files with 126 additions and 135 deletions

View File

@@ -2231,26 +2231,19 @@ namespace ReallifeGamemode.Server.Commands
return;
}
var invWeight = 0;
var invWeight = InventoryManager.GetUserInventoryWeight(target);
using (var context = new DatabaseContext())
{
List<UserItem> userItems = context.UserItems.ToList().FindAll(i => i.UserId == target.GetUser().Id);
foreach (var uItem in userItems)
{
invWeight += uItem.Amount * InventoryManager.GetItemById(uItem.ItemId).Gewicht;
}
}
IItem item = InventoryManager.GetItemById(itemId);
if (invWeight + (amount * InventoryManager.GetItemById(itemId).Gewicht) > 40000)
if (invWeight + (amount * item.Gewicht) > InventoryManager.MAX_USER_INVENTORY)
{
ChatService.SendMessage(player, "~y~" + target.Name + " ~s~hat nicht mehr genug Platz in seinem Inventar.");
}
else
{
UserItem item = new UserItem() { ItemId = itemId, UserId = target.GetUser().Id, Amount = amount };
InventoryManager.AddItemToInventory(target, item.ItemId, item.Amount);
ChatService.SendMessage(player, "~b~[ADMIN]~s~ Du hast " + target.Name + " ~g~" + amount + "~s~ mal das Item gegeben.");
UserItem userItem = new UserItem() { ItemId = itemId, UserId = target.GetUser().Id, Amount = amount };
InventoryManager.AddItemToInventory(target, userItem.ItemId, userItem.Amount);
ChatService.SendMessage(player, $"~b~[ADMIN]~s~ Du hast ~y~{target.Name}~y~ ~y~{amount}~s~ mal das Item ~y~{item.Name}~s~ gegeben.");
}
}
@@ -2340,7 +2333,7 @@ namespace ReallifeGamemode.Server.Commands
}
[Command("inventory", "~m~Benutzung: ~s~/inventory [Spieler]")]
public void CmdAdminGiveItem(Player player, string targetname)
public void CmdAdminInventory(Player player, string targetname)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true)
{

View File

@@ -1,4 +1,6 @@
using ReallifeGamemode.Database.Entities;
using GTANetworkAPI;
using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Database.Models;
/**
* @overview Life of German Reallife - Inventory Interfaces UsableItem (IUsableItem.cs)
@@ -10,6 +12,7 @@ namespace ReallifeGamemode.Server.Inventory.Interfaces
{
public interface IUsableItem : IItem, IDroppableItem //marker Interface
{
bool Use(UserItem uItem);
bool RemoveWhenUsed { get; }
bool Use(Player player, User user, DatabaseContext databaseContext);
}
}

View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Text;
using GTANetworkAPI;
using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Database.Models;
using ReallifeGamemode.Server.Extensions;
using ReallifeGamemode.Server.Managers;
@@ -20,10 +21,8 @@ namespace ReallifeGamemode.Server.Inventory.Items
public override int Price => 50;
public override float Cooldown => 60000;
public override void Consume(UserItem uItem)
public override void Consume(Player player, User user, DatabaseContext databaseContext)
{
Player player = uItem.GetUser().Player;
int amountToAdd = HpAmount;
if (player.Health + amountToAdd > 100)
{
@@ -32,7 +31,6 @@ namespace ReallifeGamemode.Server.Inventory.Items
player.SafeSetHealth(player.Health + amountToAdd);
player.SendNotification("Du hast einen ~y~" + Name + " ~s~gegessen.", false);
InventoryManager.RemoveUserItem(player.GetUser(), uItem, 1);
}
}
}

View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Text;
using GTANetworkAPI;
using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Database.Models;
using ReallifeGamemode.Server.Extensions;
using ReallifeGamemode.Server.Managers;
@@ -21,10 +22,8 @@ namespace ReallifeGamemode.Server.Inventory.Items
public override float Cooldown => 60000;
public override void Consume(UserItem uItem)
public override void Consume(Player player, User user, DatabaseContext databaseContext)
{
Player player = uItem.GetUser().Player;
int amountToAdd = HpAmount;
if (player.Health + amountToAdd > 100)
{
@@ -33,7 +32,6 @@ namespace ReallifeGamemode.Server.Inventory.Items
player.SafeSetHealth(player.Health + amountToAdd);
player.SendNotification("Du hast ~y~" + Name + " ~s~gegessen.", false);
InventoryManager.RemoveUserItem(player.GetUser(), uItem, 1);
}
}
}

View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Text;
using GTANetworkAPI;
using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Database.Models;
using ReallifeGamemode.Server.Extensions;
using ReallifeGamemode.Server.Managers;
@@ -21,10 +22,8 @@ namespace ReallifeGamemode.Server.Inventory.Items
public override float Cooldown => 180000;
public override void Consume(UserItem uItem)
public override void Consume(Player player, User user, DatabaseContext databaseContext)
{
Player player = uItem.GetUser().Player;
int amountToAdd = HpAmount;
if (player.Health + amountToAdd > 100)
{
@@ -33,7 +32,6 @@ namespace ReallifeGamemode.Server.Inventory.Items
player.SafeSetHealth(player.Health + amountToAdd);
player.SendNotification("Du hast ein ~y~" + Name + " ~s~gegessen.", false);
InventoryManager.RemoveUserItem(player.GetUser(), uItem, 1);
}
}
}

View File

@@ -1,7 +1,9 @@
using System;
using System.Collections.Generic;
using System.Text;
using GTANetworkAPI;
using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Database.Models;
namespace ReallifeGamemode.Server.Inventory.Items
{
@@ -18,7 +20,7 @@ namespace ReallifeGamemode.Server.Inventory.Items
public override float Cooldown => 1000;
public override void Consume(UserItem uItem)
public override void Consume(Player player, User user, DatabaseContext databaseContext)
{
//nothing
}

View File

@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace ReallifeGamemode.Server.Inventory.Items
{
public class CannabisSeeds : BaseItem
{
public override int Id { get; } = 109;
public override string Name { get; } = "Cannabis Samen";
public override string Description { get; } = "vierhundertzwanzig lodere es";
public override int Gewicht { get; } = 10;
public override string Einheit { get; } = "g";
public override int Price { get; } = 0;
public override bool Legal => false;
}
}

View File

@@ -1,5 +1,6 @@
using GTANetworkAPI;
using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Database.Models;
using ReallifeGamemode.Server.Extensions;
using ReallifeGamemode.Server.Managers;
@@ -23,10 +24,8 @@ namespace ReallifeGamemode.Server.Inventory.Items
public override int Price => 100;
public override float Cooldown => 120000;
public override void Consume(UserItem uItem)
public override void Consume(Player player, User user, DatabaseContext databaseContext)
{
Player player = uItem.GetUser().Player;
int amountToAdd = HpAmount;
if (player.Health + amountToAdd > 100)
{
@@ -35,7 +34,6 @@ namespace ReallifeGamemode.Server.Inventory.Items
player.SafeSetHealth(player.Health + amountToAdd);
player.SendNotification("Du hast einen ~y~" + Name + " ~s~gegessen.", false);
InventoryManager.RemoveUserItem(player.GetUser(), uItem, 1);
}
}
}

View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Text;
using GTANetworkAPI;
using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Database.Models;
using ReallifeGamemode.Server.Extensions;
using ReallifeGamemode.Server.Managers;
@@ -21,10 +22,8 @@ namespace ReallifeGamemode.Server.Inventory.Items
public override float Cooldown => 30000;
public override void Consume(UserItem uItem)
public override void Consume(Player player, User user, DatabaseContext databaseContext)
{
Player player = uItem.GetUser().Player;
int amountToAdd = HpAmount;
if (player.Health + amountToAdd > 100)
{
@@ -33,7 +32,6 @@ namespace ReallifeGamemode.Server.Inventory.Items
player.SafeSetHealth(player.Health + amountToAdd);
player.SendNotification("Du hast ~y~" + Name + " ~s~gegessen.", false);
InventoryManager.RemoveUserItem(player.GetUser(), uItem, 1);
}
}
}

View File

@@ -1,4 +1,6 @@
using ReallifeGamemode.Database.Entities;
using GTANetworkAPI;
using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Database.Models;
/**
* @overview Life of German Reallife - Inventory Items Chickenburger (Chickenburger.cs)
@@ -21,7 +23,7 @@ namespace ReallifeGamemode.Server.Inventory.Items
public override float Cooldown => 20000;
public override void Consume(UserItem uItem)
public override void Consume(Player player, User user, DatabaseContext databaseContext)
{
//nothing
}

View File

@@ -1,6 +1,7 @@
using System;
using GTANetworkAPI;
using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Database.Models;
using ReallifeGamemode.Server.Extensions;
using ReallifeGamemode.Server.Inventory.Interfaces;
using ReallifeGamemode.Server.Managers;
@@ -8,7 +9,7 @@ using ReallifeGamemode.Server.Util;
namespace ReallifeGamemode.Server.Inventory.Items
{
public abstract class ConsumableItem : BaseItem, IUsableItem
public abstract class ConsumableItem : UseItem
{
public abstract int HpAmount { get; }
public override int Id { get; }
@@ -18,28 +19,28 @@ namespace ReallifeGamemode.Server.Inventory.Items
public override string Einheit { get; }
public override int Price { get; }
public abstract float Cooldown { get; }
public abstract uint Object { get; }
public abstract override uint Object { get; }
public override bool RemoveWhenUsed => true;
public abstract void Consume(UserItem uItem);
public abstract void Consume(Player player, User user, DatabaseContext databaseContext);
public bool Use(UserItem uItem)
public override bool Use(Player player, User user, DatabaseContext databaseContext)
{
User user = uItem.GetUser();
if (user.Player == null || !user.Player.IsLoggedIn())
return false;
if (!HasCooldownElapsed(user))
if (!HasCooldownElapsed(user) && Cooldown > 0)
{
DateTime time = InventoryManager.itemCooldown[user.Id];
int timeUntillNextUse = (int)(time - DateTime.Now).TotalSeconds;
uItem.GetUser().Player.TriggerEvent("Error", $"Versuche es nach {timeUntillNextUse} Sekunden erneut.");
user.Player.TriggerEvent("Error", $"Versuche es nach {timeUntillNextUse} Sekunden erneut.");
return false;
}
DateTime cooldown = DateTime.Now.AddMilliseconds(Cooldown);
InventoryManager.itemCooldown.Add(user.Id, cooldown);
Consume(uItem);
Consume(player, user, databaseContext);
return true;
}

View File

@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Text;
using GTANetworkAPI;
using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Database.Models;
using ReallifeGamemode.Server.Services;
namespace ReallifeGamemode.Server.Inventory.Items
{
public class Joint : UseItem
{
public override int Id { get; } = 110;
public override string Name { get; } = "Joint";
public override string Description { get; } = "stay high bis zum tod";
public override int Gewicht { get; } = 20;
public override string Einheit { get; } = "g";
public override int Price { get; } = 0;
public override uint Object { get; }
public override bool Legal => false;
public override bool RemoveWhenUsed => true;
public override bool Use(Player player, User user, DatabaseContext databaseContext)
{
return true;
}
}
}

View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Text;
using GTANetworkAPI;
using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Database.Models;
using ReallifeGamemode.Server.Extensions;
using ReallifeGamemode.Server.Managers;
@@ -21,10 +22,8 @@ namespace ReallifeGamemode.Server.Inventory.Items
public override float Cooldown => 300000;
public override void Consume(UserItem uItem)
public override void Consume(Player player, User user, DatabaseContext databaseContext)
{
Player player = uItem.GetUser().Player;
int amountToAdd = HpAmount;
if (player.Health + amountToAdd > 100)
{
@@ -33,7 +32,6 @@ namespace ReallifeGamemode.Server.Inventory.Items
player.SafeSetHealth(player.Health + amountToAdd);
player.SendNotification("Du hast ein ~y~" + Name + " ~s~gegessen.", false);
InventoryManager.RemoveUserItem(player.GetUser(), uItem, 1);
}
}
}

View File

@@ -19,17 +19,12 @@ namespace ReallifeGamemode.Server.Inventory.Items
public override uint Object => 875075437;
public override int Price => 2500;
public override bool Use(UserItem uItem)
public override bool RemoveWhenUsed { get; } = true;
public override bool Use(Player player, User user, DatabaseContext databaseContext)
{
Player player = uItem.GetUser().Player;
if (uItem.ItemId != 201)
{
return false;
}
Vehicle veh = null;
var nearestVeh = NAPI.Pools.GetAllVehicles().Where(v => v.Position.DistanceTo(player.Position) <= 5).FirstOrDefault();
veh = nearestVeh;
@@ -39,13 +34,13 @@ namespace ReallifeGamemode.Server.Inventory.Items
return false;
}
if(player.IsInVehicle)
if (player.IsInVehicle)
{
player.SendNotification("Du musst aus deinem Fahrzeug aussteigen!");
return false;
}
if(veh.Controller == null)
if (veh.Controller == null)
{
player.SendNotification("Du kannst dieses Fahrzeug nicht reparieren, weil Jemand bereits im Fahrzeug sitzt");
return false;
@@ -62,6 +57,7 @@ namespace ReallifeGamemode.Server.Inventory.Items
Vector3 position = veh.Position;
player.SendNotification("Du hast ~g~" + InventoryManager.GetItemById(uItem.ItemId).Name + " ~s~verwendet", false);
InventoryManager.RemoveUserItem(player.GetUser(), uItem, 1);
InventoryManager.RemoveUserItem(player.GetUser(), uItem, 1);
ServerVehicle serverVehicle = veh.GetServerVehicle(dbContext);
serverVehicle.Spawn(veh).Position = position;
Vehicle newVeh = serverVehicle.Spawn(veh);

View File

@@ -19,40 +19,24 @@ namespace ReallifeGamemode.Server.Inventory.Items
public override string Einheit => "g";
public override uint Object => 875075437;
public override int Price => 500;
public override bool RemoveWhenUsed => true;
public override bool Use(UserItem uItem)
{
Player player = uItem.GetUser().Player;
if (uItem.ItemId != 200)
public override bool Use(Player player, User user, DatabaseContext databaseContext)
{
return false;
}
Random random = new Random();
int randomNumber = random.Next(1, 4);
if (randomNumber == 1)
{
using (var dbContext = new DatabaseContext())
Random random = new Random();
int randomNumber = random.Next(1, 2);
if (randomNumber == 1)
{
User winner = player.GetUser(dbContext);
winner.Handmoney += 1000;
user.Handmoney += 1000;
//player.TriggerEvent("SERVER:SET_HANDMONEY", winner.Handmoney);
dbContext.SaveChanges();
}
player.SendNotification("Glückwunsch du hast ~g~$~w~1000 gewonnen!");
}
else
{
}
else
{
player.SendNotification("Leider kein Gewinn, viel Glück beim nächsten mal.");
}
player.SendNotification("Du hast ein ~g~" + Name + " ~s~verwendet.", false);
return true;
}
player.SendNotification("Du hast ~g~" + InventoryManager.GetItemById(uItem.ItemId).Name + " ~s~verwendet.", false);
InventoryManager.RemoveUserItem(player.GetUser(), uItem, 1);
return true;
}
}
}

View File

@@ -19,8 +19,8 @@ namespace ReallifeGamemode.Server.Inventory.Items
public override string Einheit { get; }
public override int Price { get; }
public abstract uint Object { get; }
public abstract bool RemoveWhenUsed { get; }
public abstract bool Use(UserItem uItem);
public abstract bool Use(Player player, User user, DatabaseContext databaseContext);
}
}

View File

@@ -27,7 +27,7 @@ namespace ReallifeGamemode.Server.Managers
{
public class InventoryManager : Script
{
private const int MAX_USER_INVENTORY = 40000;
public const int MAX_USER_INVENTORY = 40000;
private static readonly ILogger logger = LogManager.GetLogger<InventoryManager>();
public static List<IItem> itemList;
@@ -82,7 +82,11 @@ namespace ReallifeGamemode.Server.Managers
{
player.TriggerEvent("Error", "Du kannst deinen Kofferraum gerade nicht öffnen.");
}
Vehicle veh = NAPI.Pools.GetAllVehicles().ToList().Where(v => v.Position.DistanceTo(player.Position) <= 4).FirstOrDefault();
Vehicle veh = NAPI.Pools.GetAllVehicles()
.ToList()
.Where(v => v.Position.DistanceTo(player.Position) <= 4)
.OrderBy(v => v.Position.DistanceTo(player.Position))
.FirstOrDefault();
if (veh == null)
{
player.TriggerEvent("Error", "Kein Fahrzeug in der Nähe!");
@@ -270,7 +274,7 @@ namespace ReallifeGamemode.Server.Managers
}
}
public static void GetUserItemsAsAdmin(Player player, User user)
public static void GetUserItemsAsAdmin(Player admin, User user)
{
var inventoryWeight = 0;
@@ -292,7 +296,7 @@ namespace ReallifeGamemode.Server.Managers
items[userItems.IndexOf(item)][4] = item.Slot.ToString();
items[userItems.IndexOf(item)][5] = item.Id.ToString();
}
player.TriggerEvent("showInventoryToAdmin", user.Name, inventoryWeight, items);
admin.TriggerEvent("showInventoryToAdmin", user.Name, inventoryWeight, items);
}
}
@@ -510,10 +514,10 @@ namespace ReallifeGamemode.Server.Managers
int itemId = JsonConvert.DeserializeObject<int>(jsonItemId);
string type = JsonConvert.DeserializeObject<string>(jsonType);
User user = player.GetUser();
using (var context = new DatabaseContext())
{
User user = player.GetUser(context);
UserItem fItem = context.UserItems.Where(u => u.UserId == user.Id && u.ItemId == itemId).FirstOrDefault();
IItem iItem = GetItemById(fItem.ItemId);
@@ -534,8 +538,14 @@ namespace ReallifeGamemode.Server.Managers
if (iItem is IUsableItem usableItemObj)
{
if (usableItemObj.Use(fItem))
logger.LogInformation("Player {0} used the item {1} ({2})", player.Name, iItem.Name, iItem.Id);
if (usableItemObj.Use(player, user, context))
{
if (usableItemObj.RemoveWhenUsed)
{
RemoveUserItem(user, fItem, 1);
}
SetBackpackItems(player);
player.TriggerEvent("aproveUse", 1, iItem.Name);
}
@@ -559,6 +569,7 @@ namespace ReallifeGamemode.Server.Managers
if (iItem is IDroppableItem usableItemObj2)
{
logger.LogInformation("Player {0} dropped the item {1} ({2})", player.Name, iItem.Name, iItem.Id);
Vector3 dropPosition = PlayerExtension.GetPositionFromPlayer(player, 0.6f, 0);
//new Vector3(player.Position.X, player.Position.Y, player.Position.Z - 0.8f);
Random r = new Random();
@@ -617,7 +628,6 @@ namespace ReallifeGamemode.Server.Managers
if (GetUserInventoryWeight(client) + shopItem.Gewicht > MAX_USER_INVENTORY)
{
return;
}