hanf wachstum

This commit is contained in:
hydrant
2021-05-26 01:33:31 +02:00
parent 3abf2a2d0e
commit 4be3137cc5
8 changed files with 271 additions and 41 deletions

View File

@@ -53,11 +53,23 @@ namespace ReallifeGamemode.Server.Managers
/// </summary>
private const string PLAYER_CURRENTLY_PLANTING_DATA_KEY = "isPlantingCannabis";
/// <summary>
/// Ab welcher Zeit Pflanzen verwelken
/// </summary>
private static readonly TimeSpan MAX_PLANT_TIME = TimeSpan.FromHours(6);
private static readonly TimeSpan MIN_PLANT_TIME_TO_HARVEST = TimeSpan.FromHours(4);
/// <summary>
/// Timer der den Status des Verarbeiters zurücksetzt
/// </summary>
private static Timer _manufacturerDoneTimer = new Timer(TimeSpan.FromSeconds(10).TotalMilliseconds);
/// <summary>
/// Zufallsgenerator für weibliche Pflanze und erhaltenes Cannabis
/// </summary>
private static Random _random = new Random();
private static List<CannabisData> _currentCannabisData = new List<CannabisData>();
static HanfManager()
@@ -99,8 +111,13 @@ namespace ReallifeGamemode.Server.Managers
private static void OnSeedBuyRangeColShapeEnter(ColShape colShape, Player player)
{
if (!player.IsLoggedIn())
{
return;
}
var user = player.GetUser();
if (user.Faction.StateOwned)
if (user?.Faction?.StateOwned == true)
{
return;
}
@@ -245,6 +262,93 @@ namespace ReallifeGamemode.Server.Managers
player.SendNotification($"Du hast {amount} Hanfsamen gekauft");
}
[RemoteEvent("CLIENT:Hanf_HarvestHanf")]
public void HanfManagerHarvestHanf(Player player, long hanfId)
{
if (!player.IsLoggedIn())
{
return;
}
using var dbContext = new DatabaseContext();
User user = player.GetUser(dbContext);
CannabisPlant plant = dbContext.CannabisPlants.Find(hanfId);
if (plant == null)
{
logger.LogError("Player {0} tried to harvest cannabis plant {1} but it was not found in database", player.Name, hanfId);
}
if (user.Faction?.StateOwned == true && !(user.FactionId == 3 && player.IsDuty()))
{
player.SendNotification("~r~Du kannst kein Hanf ernten");
return;
}
if (plant.Harvested)
{
return;
}
plant.Harvested = true;
if (user.FactionId != 3) // Zivi / Gangmember erntet ab
{
bool isPlantRotten = DateTime.Now - plant.PlantDate > MAX_PLANT_TIME;
if (isPlantRotten)
{
player.SendNotification("~r~Die Pflanze ist leider verrottet");
}
else
{
bool isPlantReadyToHarvest = DateTime.Now - plant.PlantDate > MIN_PLANT_TIME_TO_HARVEST;
if (!isPlantReadyToHarvest) // Wenn die Pflanze noch nicht ausgewachsen ist
{
bool getSeedBack = _random.Next(0, 2) == 1; // 50% Chance
if(getSeedBack)
{
IItem cannabisSeedItem = InventoryManager.GetItem<CannabisSeeds>();
InventoryManager.AddItemToInventory(player, cannabisSeedItem.Id, 1);
player.SendNotification("~g~Du konntest den Samen wieder ausgraben");
}
else
{
player.SendNotification("~r~Du konntest den Samen leider nicht wieder ausgraben");
}
}
else
{
bool isFemalePlant = _random.Next(0, 10) + 1 <= 8; // 80% Chance dass es eine weibliche Pflanze ist
if (isFemalePlant)
{
int cannabisAmount = _random.Next(4, 10) + 1; // zwischen 5 und 10g Cannabis
IItem cannabisItem = InventoryManager.GetItem<Cannabis>();
var newWeight = cannabisAmount * cannabisItem.Gewicht;
if (!InventoryManager.CanPlayerHoldMoreWeight(player, newWeight))
{
int restWeightPlayerCanHold = InventoryManager.MAX_USER_INVENTORY - InventoryManager.GetUserInventoryWeight(player);
cannabisAmount = restWeightPlayerCanHold / cannabisItem.Gewicht;
player.SendNotification("~o~Warnung:~s~ Du hast nicht das komplette Cannabis der Pflanze erhalten, da dein Inventar voll ist");
}
player.SendNotification("~g~" + cannabisAmount + "g Cannabis geerntet");
InventoryManager.AddItemToInventory(player, cannabisItem.Id, cannabisAmount);
}
else
{
player.SendNotification("~r~Du hast die falschen Samen eingesät und keinen Ertrag aus dieser Pflanze erhalten");
}
}
}
}
else // FIB erntet ab
{
}
dbContext.SaveChanges();
UpdateHanfWorldData(dbContext);
}
internal static void BuildJointsFromCannabis(Player player)
{
if (player.HasAnimation(_manufacturerAnim) || _manufacturerCurrentlyUsed)