Skip to content
Merged

p35.1 #517

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 23 additions & 7 deletions src/Perpetuum/Modules/DrillerModule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using Perpetuum.EntityFramework;
using Perpetuum.ExportedTypes;
using Perpetuum.Items;
using Perpetuum.Log;
using Perpetuum.Modules.ModuleProperties;
using Perpetuum.Players;
using Perpetuum.Services.MissionEngine.MissionTargets;
Expand Down Expand Up @@ -160,6 +161,9 @@ public virtual void DoExtractMinerals(IZone zone)
extractedMaterials
.AddRange(RareMaterialHandler.GenerateRareMaterials(materialInfo.EntityDefault.Definition));
CreateBeam(terrainLock.Location, BeamState.AlignToTerrain);

List<(string resourceName, int quantity)> resourceStats = new List<(string resourceName, int quantity)>();

using (TransactionScope scope = Db.CreateTransaction())
{
Debug.Assert(ParentRobot != null, "ParentRobot != null");
Expand All @@ -173,13 +177,6 @@ remoteControlledCreature.CommandRobot is Player ownerPlayer
Debug.Assert(player != null, "player != null");
foreach (ItemInfo material in extractedMaterials)
{
Db.Query()
.CommandText("exec sp_RecordResourceGathered @gathered_on, @resource_name, @quantity")
.SetParameter("@gathered_on", DateTime.UtcNow)
.SetParameter("@resource_name", material.EntityDefault.Name)
.SetParameter("@quantity", material.Quantity)
.ExecuteNonQuery();

Item item = (Item)Factory.CreateWithRandomEID(material.Definition);

item.Owner = Owner;
Expand All @@ -195,6 +192,8 @@ remoteControlledCreature.CommandRobot is Player ownerPlayer
drilledQuantity,
terrainLock.Location));
player.Zone?.MiningLogHandler.EnqueueMiningLog(drilledMineralDefinition, drilledQuantity);

resourceStats.Add((material.EntityDefault.Name, material.Quantity));
}

//save container
Expand All @@ -204,6 +203,23 @@ remoteControlledCreature.CommandRobot is Player ownerPlayer
scope.Complete();
}

foreach (var (resourceName, quantity) in resourceStats)
{
try
{
Db.Query()
.CommandText("exec sp_RecordResourceGathered @gathered_on, @resource_name, @quantity")
.SetParameter("@gathered_on", DateTime.UtcNow)
.SetParameter("@resource_name", resourceName)
.SetParameter("@quantity", quantity)
.ExecuteNonQuery();
}
catch (Exception ex)
{
Logger.Error(ex.Message);
}
}

GenerateHeat(EffectType.effect_excavator);
}

Expand Down
30 changes: 23 additions & 7 deletions src/Perpetuum/Modules/HarvesterModule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using Perpetuum.EntityFramework;
using Perpetuum.ExportedTypes;
using Perpetuum.Items;
using Perpetuum.Log;
using Perpetuum.Modules.ModuleProperties;
using Perpetuum.Players;
using Perpetuum.Services.MissionEngine.MissionTargets;
Expand Down Expand Up @@ -104,6 +105,9 @@ public virtual void DoHarvesting(IZone zone)
{
TerrainLock terrainLock = GetLock().ThrowIfNotType<TerrainLock>(ErrorCodes.InvalidLockType);
CreateBeam(terrainLock.Location, BeamState.AlignToTerrain);

List<(string resourceName, int quantity)> resourceStats = new List<(string resourceName, int quantity)>();

using (TransactionScope scope = Db.CreateTransaction())
{
using (new TerrainUpdateMonitor(zone))
Expand All @@ -130,13 +134,6 @@ remoteControlledCreature.CommandRobot is Player ownerPlayer

foreach (ItemInfo extractedMaterial in harvestedPlants)
{
Db.Query()
.CommandText("exec sp_RecordResourceGathered @gathered_on, @resource_name, @quantity")
.SetParameter("@gathered_on", DateTime.UtcNow)
.SetParameter("@resource_name", extractedMaterial.EntityDefault.Name)
.SetParameter("@quantity", extractedMaterial.Quantity)
.ExecuteNonQuery();

Item item = (Item)Factory.CreateWithRandomEID(extractedMaterial.Definition);
item.Owner = Owner;
item.Quantity = extractedMaterial.Quantity;
Expand All @@ -145,6 +142,8 @@ remoteControlledCreature.CommandRobot is Player ownerPlayer
int extractedQuantity = extractedMaterial.Quantity;
player.MissionHandler.EnqueueMissionEventInfo(new HarvestPlantEventInfo(player, extractedHarvestDefinition, extractedQuantity, terrainLock.Location));
player.Zone?.HarvestLogHandler.EnqueueHarvestLog(extractedHarvestDefinition, extractedQuantity);

resourceStats.Add((extractedMaterial.EntityDefault.Name, extractedMaterial.Quantity));
}

container.Save();
Expand All @@ -154,6 +153,23 @@ remoteControlledCreature.CommandRobot is Player ownerPlayer
}
}

foreach (var (resourceName, quantity) in resourceStats)
{
try
{
Db.Query()
.CommandText("exec sp_RecordResourceGathered @gathered_on, @resource_name, @quantity")
.SetParameter("@gathered_on", DateTime.UtcNow)
.SetParameter("@resource_name", resourceName)
.SetParameter("@quantity", quantity)
.ExecuteNonQuery();
}
catch (Exception ex)
{
Logger.Error(ex.Message);
}
}

GenerateHeat(EffectType.effect_excavator);
}
}
Expand Down
29 changes: 21 additions & 8 deletions src/Perpetuum/Modules/LargeDrillerModule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using Perpetuum.EntityFramework;
using Perpetuum.ExportedTypes;
using Perpetuum.Items;
using Perpetuum.Log;
using Perpetuum.Players;
using Perpetuum.Services.MissionEngine.MissionTargets;
using Perpetuum.Zones;
Expand Down Expand Up @@ -45,6 +46,8 @@ public override void DoExtractMinerals(IZone zone)

int emptyTilesCounter = 0;

List<(string resourceName, int quantity)> resourceStats = new List<(string resourceName, int quantity)>();

// make it parallel
foreach (Position position in mineralPositions)
{
Expand Down Expand Up @@ -72,13 +75,6 @@ public override void DoExtractMinerals(IZone zone)
Debug.Assert(player != null, "player != null");
foreach (ItemInfo material in extractedMaterials)
{
Db.Query()
.CommandText("exec sp_RecordResourceGathered @gathered_on, @resource_name, @quantity")
.SetParameter("@gathered_on", DateTime.UtcNow)
.SetParameter("@resource_name", material.EntityDefault.Name)
.SetParameter("@quantity", material.Quantity)
.ExecuteNonQuery();

Item item = (Item)Factory.CreateWithRandomEID(material.Definition);
item.Owner = Owner;
item.Quantity = material.Quantity;
Expand All @@ -93,6 +89,8 @@ public override void DoExtractMinerals(IZone zone)
drilledQuantity,
position));
player.Zone?.MiningLogHandler.EnqueueMiningLog(drilledMineralDefinition, drilledQuantity);

resourceStats.Add((material.EntityDefault.Name, material.Quantity));
}

//save container
Expand All @@ -102,7 +100,22 @@ public override void DoExtractMinerals(IZone zone)
scope.Complete();
}


foreach (var (resourceName, quantity) in resourceStats)
{
try
{
Db.Query()
.CommandText("exec sp_RecordResourceGathered @gathered_on, @resource_name, @quantity")
.SetParameter("@gathered_on", DateTime.UtcNow)
.SetParameter("@resource_name", resourceName)
.SetParameter("@quantity", quantity)
.ExecuteNonQuery();
}
catch (Exception ex)
{
Logger.Error(ex.Message);
}
}
}

GenerateHeat(EffectType.effect_excavator, 6);
Expand Down
29 changes: 22 additions & 7 deletions src/Perpetuum/Modules/LargeHarvesterModule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using Perpetuum.EntityFramework;
using Perpetuum.ExportedTypes;
using Perpetuum.Items;
using Perpetuum.Log;
using Perpetuum.Players;
using Perpetuum.Services.MissionEngine.MissionTargets;
using Perpetuum.Zones;
Expand Down Expand Up @@ -33,6 +34,8 @@ public override void DoHarvesting(IZone zone)

int emptyTilesCounter = 0;

List<(string resourceName, int quantity)> resourceStats = new List<(string resourceName, int quantity)>();

// make it parallel
foreach (Position position in mineralPositions)
{
Expand Down Expand Up @@ -72,13 +75,6 @@ remoteControlledCreature.CommandRobot is Player ownerPlayer

foreach (ItemInfo extractedMaterial in harvestedPlants)
{
Db.Query()
.CommandText("exec sp_RecordResourceGathered @gathered_on, @resource_name, @quantity")
.SetParameter("@gathered_on", DateTime.UtcNow)
.SetParameter("@resource_name", extractedMaterial.EntityDefault.Name)
.SetParameter("@quantity", extractedMaterial.Quantity)
.ExecuteNonQuery();

Item item = (Item)Factory.CreateWithRandomEID(extractedMaterial.Definition);
item.Owner = Owner;
item.Quantity = extractedMaterial.Quantity;
Expand All @@ -87,6 +83,8 @@ remoteControlledCreature.CommandRobot is Player ownerPlayer
int extractedQuantity = extractedMaterial.Quantity;
player.MissionHandler.EnqueueMissionEventInfo(new HarvestPlantEventInfo(player, extractedHarvestDefinition, extractedQuantity, position));
player.Zone?.HarvestLogHandler.EnqueueHarvestLog(extractedHarvestDefinition, extractedQuantity);

resourceStats.Add((extractedMaterial.EntityDefault.Name, extractedMaterial.Quantity));
}

container.Save();
Expand All @@ -97,6 +95,23 @@ remoteControlledCreature.CommandRobot is Player ownerPlayer
}
}

foreach (var (resourceName, quantity) in resourceStats)
{
try
{
Db.Query()
.CommandText("exec sp_RecordResourceGathered @gathered_on, @resource_name, @quantity")
.SetParameter("@gathered_on", DateTime.UtcNow)
.SetParameter("@resource_name", resourceName)
.SetParameter("@quantity", quantity)
.ExecuteNonQuery();
}
catch (Exception ex)
{
Logger.Error(ex.Message);
}
}

GenerateHeat(EffectType.effect_excavator, 6);
}
}
Expand Down
7 changes: 3 additions & 4 deletions src/Perpetuum/Players/Player.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1092,10 +1092,9 @@ private void HandlePlayerDead(IZone zone, Unit killer)

PlayerDeathLogger.Log.Write(zone, this, killer);

bool wasInsured = InsuranceHelper.CheckInsuranceOnDeath(Eid, Definition);

if (!Session.AccessLevel.IsAdminOrGm() && !IsBlessed)
if (!Session.AccessLevel.IsAdminOrGm() && !IsBlessed || (!IsBlessed && LootHelper.Roll(0.05)))
{
bool wasInsured = InsuranceHelper.CheckInsuranceOnDeath(Eid, Definition);
DieAndDropLoot(zone, killer, character, dockingBase, wasInsured);
}
else
Expand Down Expand Up @@ -1147,7 +1146,7 @@ private void ResurrectAndLoseCargo(IZone zone, Character character, DockingBase
Repository.Delete(item);
}

foreach (Module module in Modules.Where(m => LootHelper.Roll(0.1)))
foreach (Module module in Modules.Where(m => LootHelper.Roll(0.25)))
{
module.Parent = robotInventory.Eid;
Repository.Delete(module);
Expand Down
54 changes: 36 additions & 18 deletions src/Perpetuum/Services/Looting/LootContainer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
using Perpetuum.ExportedTypes;
using Perpetuum.Groups.Gangs;
using Perpetuum.Items;
using Perpetuum.Log;
using Perpetuum.Players;
using Perpetuum.Players.ExtensionMethods;
using Perpetuum.Robots;
Expand Down Expand Up @@ -602,40 +603,57 @@ public LootContainer Build(IZone zone, Position position)
.Where(x => x.ItemInfo.EntityDefault.CategoryFlags.IsCategory(CategoryFlags.cf_reactor_plasma))
.GroupBy(x => x.ItemInfo.EntityDefault.Name);

foreach (IGrouping<string, LootItem> plasma in plasmaByType)
using (TransactionScope scope = Db.CreateTransaction())
{
using (TransactionScope scope = Db.CreateTransaction())
foreach (IGrouping<string, LootItem> plasma in plasmaByType)
{
Db.Query()
.CommandText("exec sp_RecordPlasmaGathered @gathered_on, @plasma_type, @quantity")
.SetParameter("@gathered_on", DateTime.UtcNow)
.SetParameter("@plasma_type", plasma.Key)
.SetParameter("@quantity", plasma.Sum(x => x.ItemInfo.Quantity))
.ExecuteNonQuery();
scope.Complete();
try
{
Db.Query()
.CommandText("exec sp_RecordPlasmaGathered @gathered_on, @plasma_type, @quantity")
.SetParameter("@gathered_on", DateTime.UtcNow)
.SetParameter("@plasma_type", plasma.Key)
.SetParameter("@quantity", plasma.Sum(x => x.ItemInfo.Quantity))
.ExecuteNonQuery();
}
catch (Exception ex)
{
Logger.Error(ex.Message);
}
}

scope.Complete();
}

IEnumerable<IGrouping<string, LootItem>> fragmentsByType = container
.GetLootItems()
.Where(x => x.ItemInfo.EntityDefault.CategoryFlags.IsAny(new CategoryFlags[] { CategoryFlags.cf_robotshards, CategoryFlags.cf_research_kits, CategoryFlags.cf_reactor_cores }))
.GroupBy(x => x.ItemInfo.EntityDefault.Name);

foreach (IGrouping<string, LootItem> fragment in fragmentsByType)
using (TransactionScope scope = Db.CreateTransaction())
{
using (TransactionScope scope = Db.CreateTransaction())
foreach (IGrouping<string, LootItem> fragment in fragmentsByType)
{
Db.Query()
.CommandText("exec sp_RecordResourceGathered @gathered_on, @resource_name, @quantity")
.SetParameter("@gathered_on", DateTime.UtcNow)
.SetParameter("@resource_name", fragment.Key)
.SetParameter("@quantity", fragment.Sum(x => x.ItemInfo.Quantity))
.ExecuteNonQuery();
scope.Complete();
try
{
Db.Query()
.CommandText("exec sp_RecordResourceGathered @gathered_on, @resource_name, @quantity")
.SetParameter("@gathered_on", DateTime.UtcNow)
.SetParameter("@resource_name", fragment.Key)
.SetParameter("@quantity", fragment.Sum(x => x.ItemInfo.Quantity))
.ExecuteNonQuery();
}
catch (Exception ex)
{
Logger.Error(ex.Message);
}
}

scope.Complete();
}

zone.UnitService.AddUserUnit(container, position);

return container;
}
}
Expand Down
14 changes: 14 additions & 0 deletions src/Perpetuum/Services/MarketEngine/MarketAutoOrdersManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,26 @@ public void Update(TimeSpan time)

private void Init()
{
_timers.Add(new TimerAction(ConsolidateStatistics, TimeSpan.FromMinutes(15)));
_timers.Add(new TimerAction(RecalculatePricesAndRenewOrders, TimeSpan.FromDays(1)));

// Debug purposes, do not uncomment
//_timers.Add(new TimerAction(ConsolidateStatistics, TimeSpan.FromMinutes(1)));
//_timers.Add(new TimerAction(RecalculatePricesAndRenewOrders, TimeSpan.FromMinutes(1)));
}

private void ConsolidateStatistics()
{
using (TransactionScope scope = Db.CreateTransaction())
{
_ = Db.Query()
.CommandText("exec consolidate_statistics")
.ExecuteNonQuery();

scope.Complete();
}
}

private void RecalculatePricesAndRenewOrders()
{
using (TransactionScope scope = Db.CreateTransaction())
Expand Down
Loading
Loading