Finish WeaponDeal System - Improved Inventory

This commit is contained in:
Lukas Moungos
2019-10-29 17:05:14 +01:00
parent 9ec30fd419
commit 55e0c4005e
9 changed files with 357 additions and 89 deletions

View File

@@ -7,6 +7,7 @@ using ReallifeGamemode.Server.Managers;
using ReallifeGamemode.Server.Util;
using ReallifeGamemode.Server.Wanted;
using ReallifeGamemode.Server.DrivingSchool;
using ReallifeGamemode.Server.WeaponDeal;
/**
* @overview Life of German Reallife - Main Class (Main.cs)
@@ -77,6 +78,7 @@ namespace ReallifeGamemode.Server
WantedEscapeTimer.WantedTimer();
Jail.JailTimer();
Economy.PaydayTimer();
WeaponDealManager.WeaponDealTimer();
}
}

View File

@@ -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();
@@ -192,7 +212,7 @@ namespace ReallifeGamemode.Server.Managers
{
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,11 +290,29 @@ 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(iItem is IWeaponDealItem weaponDealItem)
if (cItem.Amount == 0)
{
return false;
}
if (iItem is IWeaponDealItem weaponDealItem)
{
return false;
}
@@ -313,7 +370,6 @@ namespace ReallifeGamemode.Server.Managers
using (var context = new DatabaseContext())
{
VehicleItem vItem = new VehicleItem
{
Amount = itemAmount,
@@ -336,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");
}
}
@@ -348,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;
@@ -362,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);
@@ -377,6 +437,8 @@ namespace ReallifeGamemode.Server.Managers
}
context.SaveChanges();
IItem iItem = GetItemById(item.ItemId);
player.TriggerEvent("aproveTransfer", JsonConvert.DeserializeObject<int>(vehAmount), iItem.Name, "Kofferraum");
}
}
@@ -503,37 +565,37 @@ 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;
}
@@ -563,7 +625,8 @@ namespace ReallifeGamemode.Server.Managers
{
context.UserItems.Remove(fItem);
}
player.TriggerEvent("removeItem", itemId, amount);
player.TriggerEvent("aproveThrow", amount, iItem.Name);
}
break;
}

View File

@@ -42,7 +42,8 @@ namespace ReallifeGamemode.Server.WeaponDeal
ChatService.SendMessage(client, "Steige in den Burrito ein und fahre zum Waffendeal.");
fVeh.SetData("weaponDeal", true);
WeaponDealPoints.factionWeaponDeal[user.FactionId.Value] = -1;
user.Faction.WeaponDealTime = 60;
Faction fac = context.Factions.Where(f => f.Id == user.FactionId).FirstOrDefault();
fac.WeaponDealTime = 60;
context.SaveChanges();
}
else
@@ -52,6 +53,29 @@ namespace ReallifeGamemode.Server.WeaponDeal
}
}
public static void WeaponDealTimer()
{
System.Timers.Timer timer = new System.Timers.Timer(60000);
timer.Start();
timer.Elapsed += Timer_Elapsed;
}
private static void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
using(var context = new DatabaseContext())
{
List<Faction> fac = context.Factions.ToList<Faction>();
foreach(var faction in fac)
{
if (faction.WeaponDealTime > 0)
faction.WeaponDealTime -= 1;
}
context.SaveChanges();
}
}
[RemoteEvent("loadWeaponTransport")]
public void SrvEVENT_loadWeaponTransport(Client client)
{
@@ -69,9 +93,9 @@ namespace ReallifeGamemode.Server.WeaponDeal
Random rnd = new Random();
if(factionVehicle.FactionId == 8 || factionVehicle.FactionId == 7)
{
VehicleItem item = new VehicleItem() { ItemId = 11, VehicleId = factionVehicle.Id, Amount = rnd.Next(45, 100) }; //pistole
VehicleItem item = new VehicleItem() { ItemId = 11, VehicleId = factionVehicle.Id, Amount = rnd.Next(45, 75) }; //pistole
InventoryManager.AddItemToVehicleInventory(client, item, fVeh);
VehicleItem item3 = new VehicleItem() { ItemId = 14, VehicleId = factionVehicle.Id, Amount = rnd.Next(30, 50) }; //Pumpe
VehicleItem item3 = new VehicleItem() { ItemId = 14, VehicleId = factionVehicle.Id, Amount = rnd.Next(30, 40) }; //Pumpe
InventoryManager.AddItemToVehicleInventory(client, item3, fVeh);
VehicleItem item2 = new VehicleItem() { ItemId = 16, VehicleId = factionVehicle.Id, Amount = rnd.Next(5, 15) }; //Schutzweste
InventoryManager.AddItemToVehicleInventory(client, item2, fVeh);

View File

@@ -14,10 +14,13 @@ namespace ReallifeGamemode.Server.WeaponDeal
private static readonly IReadOnlyCollection<Vector3> WT_Route = new List<Vector3>
{
new Vector3(2465.163, 1589.396, 32.72029),
new Vector3(1532.045, 1702.775, 109.7561),
new Vector3(58.67861, 3717.103, 39.75301),
new Vector3(-2174.734, 4269.301, 48.95574)
//new Vector3(2465.163, 1589.396, 32.72029), ungeeignet
new Vector3(1532.045, 1702.775, 109.7561), //Hütte iwo Östlich
new Vector3(58.67861, 3717.103, 39.75301), //Lost MC
new Vector3(-2174.734, 4269.301, 48.95574), //Army Base
new Vector3(2530.14, 2617.15, 37.76),
new Vector3(-3179.78, 820.08, 3.59),
new Vector3(-1889.91, 2045.6, 140.68)
}.AsReadOnly();
public static Vector3 getRndWD_Route(int factionID)