[+] Added WeaponDeal System (Gangs Only) (WIP)
[+] New Timer in WeaponRack (will be removed for LSPD and FIB)
[+] New Items for WeaponDeal System
[**] Huge Improvements on Inventory System w/ bug fixes (WIP)
This commit is contained in:
@@ -137,6 +137,26 @@ namespace ReallifeGamemode.Server.Managers
|
||||
return inventoryWeight;
|
||||
}
|
||||
|
||||
|
||||
public static int GetVehicleInventoryWeight(Vehicle veh)
|
||||
{
|
||||
var inventoryWeight = 0;
|
||||
|
||||
using (var context = new DatabaseContext())
|
||||
{
|
||||
ServerVehicle serverVehicle = VehicleManager.GetServerVehicleFromVehicle(veh, context);
|
||||
List<VehicleItem> vehItems = context.VehicleItems.ToList().FindAll(i => i.VehicleId == serverVehicle.Id);
|
||||
foreach (var item in vehItems)
|
||||
{
|
||||
IItem iItem = GetItemById(item.ItemId);
|
||||
var currentItemWeight = iItem.Gewicht * item.Amount;
|
||||
inventoryWeight += currentItemWeight;
|
||||
}
|
||||
}
|
||||
|
||||
return inventoryWeight;
|
||||
}
|
||||
|
||||
public static UserItem UserHasThisItem(Client player, int itemId)
|
||||
{
|
||||
var user = player.GetUser();
|
||||
@@ -190,9 +210,9 @@ namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
foreach (Vehicle veh in NAPI.Pools.GetAllVehicles())
|
||||
{
|
||||
if (veh.Position.DistanceTo(client.Position) < 2.5f)
|
||||
if (veh.Position.DistanceTo(client.Position) < 5f)
|
||||
{
|
||||
if (VehicleStreaming.GetDoorState(veh, DoorID.DoorTrunk) == DoorState.DoorOpen)
|
||||
if (VehicleStreaming.GetDoorState(veh, DoorID.DoorTrunk) == DoorState.DoorOpen || VehicleStreaming.GetDoorState(veh, DoorID.DoorRearLeft) == DoorState.DoorOpen || VehicleStreaming.GetDoorState(veh, DoorID.DoorRearRight) == DoorState.DoorOpen)
|
||||
{
|
||||
|
||||
UserItem vItem = new UserItem
|
||||
@@ -207,6 +227,25 @@ namespace ReallifeGamemode.Server.Managers
|
||||
VehicleItem vehItem = context.VehicleItems.Where(v => v.VehicleId == origin[1] && v.ItemId == vItem.ItemId).FirstOrDefault();
|
||||
if (vehItem != null)
|
||||
{
|
||||
IItem iItem = GetItemById(vItem.ItemId);
|
||||
|
||||
if (GetUserInventoryWeight(client) + (iItem.Gewicht * vItem.Amount) > 40000)
|
||||
{
|
||||
for(int i = 0; i <= vItem.Amount; i++)
|
||||
{
|
||||
if(GetUserInventoryWeight(client) + (iItem.Gewicht * i) > 40000) {
|
||||
vItem.Amount = i - 1;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if(vItem.Amount == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (itemAmount < vehItem.Amount)
|
||||
{
|
||||
UserItem uItem = context.UserItems.Where(u => u.UserId == user.Id && u.ItemId == vItem.ItemId).FirstOrDefault();
|
||||
@@ -251,8 +290,33 @@ namespace ReallifeGamemode.Server.Managers
|
||||
VehicleId = origin[1],
|
||||
Slot = -1,
|
||||
};
|
||||
|
||||
|
||||
UserItem uItem = context.UserItems.Where(u => u.UserId == user.Id && u.ItemId == cItem.ItemId).FirstOrDefault();
|
||||
IItem iItem = GetItemById(cItem.ItemId);
|
||||
Vehicle veh = VehicleManager.GetVehicleFromId(cItem.VehicleId);
|
||||
if (GetVehicleInventoryWeight(veh) + (iItem.Gewicht * cItem.Amount) > 250000)
|
||||
{
|
||||
for (int i = 0; i <= cItem.Amount; i++)
|
||||
{
|
||||
if (GetVehicleInventoryWeight(veh) + (iItem.Gewicht * i) > 250000)
|
||||
{
|
||||
cItem.Amount = i - 1;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (cItem.Amount == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (iItem is IWeaponDealItem weaponDealItem)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (uItem != null)
|
||||
{
|
||||
if (vehAmount < uItem.Amount)
|
||||
@@ -306,7 +370,6 @@ namespace ReallifeGamemode.Server.Managers
|
||||
using (var context = new DatabaseContext())
|
||||
{
|
||||
|
||||
|
||||
VehicleItem vItem = new VehicleItem
|
||||
{
|
||||
Amount = itemAmount,
|
||||
@@ -329,7 +392,8 @@ namespace ReallifeGamemode.Server.Managers
|
||||
vehItem.Amount = vItem.Amount;
|
||||
}
|
||||
context.SaveChanges();
|
||||
|
||||
IItem iItem = GetItemById(vItem.ItemId);
|
||||
player.TriggerEvent("aproveTransfer", JsonConvert.DeserializeObject<int>(vehAmount), iItem.Name, "Rucksack");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -341,6 +405,7 @@ namespace ReallifeGamemode.Server.Managers
|
||||
var user = player.GetUser();
|
||||
var itemID = JsonConvert.DeserializeObject<int>(jsonItemID);
|
||||
var itemAmount = JsonConvert.DeserializeObject<int>(jsonItemAmount);
|
||||
var origin = JsonConvert.DeserializeObject<int[]>(jsonGotFrom);
|
||||
|
||||
if (!CheckOriginOfItem(player,jsonItemID, jsonItemAmount,jsonGotFrom, vehAmount))
|
||||
return;
|
||||
@@ -355,7 +420,9 @@ namespace ReallifeGamemode.Server.Managers
|
||||
UserId = user.Id,
|
||||
Slot = -1,
|
||||
};
|
||||
UserItem item = context.UserItems.Where(u => u.UserId == user.Id && u.ItemId == cItem.ItemId).FirstOrDefault();
|
||||
|
||||
|
||||
UserItem item = context.UserItems.Where(u => u.UserId == user.Id && u.ItemId == cItem.ItemId).FirstOrDefault();
|
||||
if (item == null)
|
||||
{
|
||||
context.UserItems.Add(cItem);
|
||||
@@ -370,6 +437,8 @@ namespace ReallifeGamemode.Server.Managers
|
||||
}
|
||||
|
||||
context.SaveChanges();
|
||||
IItem iItem = GetItemById(item.ItemId);
|
||||
player.TriggerEvent("aproveTransfer", JsonConvert.DeserializeObject<int>(vehAmount), iItem.Name, "Kofferraum");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -407,6 +476,53 @@ namespace ReallifeGamemode.Server.Managers
|
||||
}
|
||||
}
|
||||
|
||||
public static void AddItemToVehicleInventory(Client player, VehicleItem item, Vehicle veh)
|
||||
{
|
||||
var user = player.GetUser();
|
||||
using (var context = new DatabaseContext())
|
||||
{
|
||||
ServerVehicle sVeh = VehicleManager.GetServerVehicleFromVehicle(veh);
|
||||
VehicleItem existingItem = context.VehicleItems.FirstOrDefault(i => i.ItemId == item.ItemId && i.VehicleId == sVeh.Id);
|
||||
if (existingItem != null)
|
||||
{
|
||||
existingItem.Amount += item.Amount;
|
||||
}
|
||||
else
|
||||
{
|
||||
List<VehicleItem> allItemsByVehicle = context.VehicleItems.ToList().FindAll(i => i.VehicleId == sVeh.Id);
|
||||
var slotArr = Enumerable.Range(1, 20).ToList();
|
||||
allItemsByVehicle.ForEach(allItem =>
|
||||
{
|
||||
if (slotArr.Contains(allItem.Slot)) slotArr.Remove(allItem.Slot);
|
||||
});
|
||||
|
||||
int newSlot = slotArr.Min();
|
||||
|
||||
item.Slot = newSlot;
|
||||
context.VehicleItems.Add(item);
|
||||
|
||||
IItem iItem = GetItemById(item.ItemId);
|
||||
|
||||
string[] newItem = new string[] { iItem.Name, iItem.Description, iItem.Gewicht.ToString(), item.Amount.ToString(), newSlot.ToString(), item.Id.ToString() };
|
||||
}
|
||||
context.SaveChanges();
|
||||
}
|
||||
}
|
||||
|
||||
public static void RemoveAllItemsfromVehicleInventory(Vehicle veh)
|
||||
{
|
||||
using(var context = new DatabaseContext())
|
||||
{
|
||||
ServerVehicle sVeh = VehicleManager.GetServerVehicleFromVehicle(veh);
|
||||
List<VehicleItem> allItemsByVehicle = context.VehicleItems.ToList().FindAll(i => i.VehicleId == sVeh.Id);
|
||||
allItemsByVehicle.ForEach(allItem =>
|
||||
{
|
||||
context.Remove(allItem);
|
||||
});
|
||||
context.SaveChanges();
|
||||
}
|
||||
}
|
||||
|
||||
[RemoteEvent("removeItemAsAdmin")]
|
||||
public void RemoveAsAdminInventory(Client player, string amount, string userItemId, string targetPlayerName)
|
||||
{
|
||||
@@ -449,47 +565,56 @@ namespace ReallifeGamemode.Server.Managers
|
||||
switch (type)
|
||||
{
|
||||
case "use":
|
||||
ChatService.SendMessage(player, "use item: " + iItem.Name);
|
||||
if (iItem == null)
|
||||
{
|
||||
ChatService.SendMessage(player, "Dieses Essen existiert nicht.");
|
||||
player.TriggerEvent("Error", "Dieses Essen existiert nicht.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (fItem == null)
|
||||
{
|
||||
ChatService.SendMessage(player, "Du hast dieses Item nicht");
|
||||
player.TriggerEvent("Error", "Du hast dieses Item nicht");
|
||||
return;
|
||||
}
|
||||
|
||||
if (iItem is IUsableItem usableItemObj)
|
||||
{
|
||||
usableItemObj.Use(fItem);
|
||||
player.TriggerEvent("removeItem", itemId, amount);
|
||||
player.TriggerEvent("removeItem", itemId, 1);
|
||||
player.TriggerEvent("aproveUse", 1, iItem.Name);
|
||||
}
|
||||
else ChatService.SendMessage(player, "Du kannst dieses Item nicht benutzen.");
|
||||
else player.TriggerEvent("Error", "Du kannst dieses Item nicht benutzen.");
|
||||
break;
|
||||
case "drop":
|
||||
|
||||
if (iItem == null)
|
||||
{
|
||||
ChatService.SendMessage(player, "Dieses Item existiert nicht.");
|
||||
player.TriggerEvent("Error", "Dieses Item existiert nicht.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (fItem == null)
|
||||
{
|
||||
ChatService.SendMessage(player, "Du hast dieses Item nicht");
|
||||
player.TriggerEvent("Error", "Du hast dieses Item nicht");
|
||||
return;
|
||||
}
|
||||
|
||||
if (iItem is IDroppableItem usableItemObj2)
|
||||
{
|
||||
Vector3 dropPosition = ClientExtension.GetPositionFromPlayer(player, 0.6f, 0);
|
||||
dropPosition.Z -= 0.8f;
|
||||
//new Vector3(player.Position.X, player.Position.Y, player.Position.Z - 0.8f);
|
||||
Random r = new Random();
|
||||
GTANetworkAPI.Object grndObject = NAPI.Object.CreateObject(3777723516, dropPosition, new Vector3(0, 0, r.Next(0, 360)), 0);
|
||||
GTANetworkAPI.Object grndObject;
|
||||
if (iItem is IWeaponDealItem obj)
|
||||
{
|
||||
dropPosition.Z -= 1.05f;
|
||||
grndObject = NAPI.Object.CreateObject(3666746839, dropPosition, new Vector3(0, 0, r.Next(0, 360)), 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
dropPosition.Z -= 0.8f;
|
||||
grndObject = NAPI.Object.CreateObject(3777723516, dropPosition, new Vector3(0, 0, r.Next(0, 360)), 0);
|
||||
}
|
||||
GroundItem grndItem = new GroundItem { ItemId = iItem.Id, Amount = amount, Position = dropPosition };
|
||||
TextLabel grndTxtLbl = NAPI.TextLabel.CreateTextLabel(iItem.Name + " ~s~(~y~" + amount + "~s~)", dropPosition, 5, 0.5f, 4, new Color(255, 255, 255), false, 0);
|
||||
GroundItem.AddGroundItem(grndItem, grndObject, grndTxtLbl);
|
||||
@@ -500,7 +625,8 @@ namespace ReallifeGamemode.Server.Managers
|
||||
{
|
||||
context.UserItems.Remove(fItem);
|
||||
}
|
||||
|
||||
player.TriggerEvent("removeItem", itemId, amount);
|
||||
player.TriggerEvent("aproveThrow", amount, iItem.Name);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user