diff --git a/src/Perpetuum/Services/ProductionEngine/Facilities/InsuraceFacility.cs b/src/Perpetuum/Services/ProductionEngine/Facilities/InsuraceFacility.cs index 0efe2f0ad..98e7be358 100644 --- a/src/Perpetuum/Services/ProductionEngine/Facilities/InsuraceFacility.cs +++ b/src/Perpetuum/Services/ProductionEngine/Facilities/InsuraceFacility.cs @@ -3,6 +3,7 @@ using System.Linq; using Perpetuum.Accounting.Characters; using Perpetuum.Common.Loggers.Transaction; +using Perpetuum.Data; using Perpetuum.ExportedTypes; using Perpetuum.Groups.Corporations; using Perpetuum.Items; @@ -116,6 +117,7 @@ public void InsuranceBuy(Character character, Robot robot, ref int currentInsura double insuranceFee, payOut; GetInsurancePrice(robot, out insuranceFee, out payOut).ThrowIfError(); + payOut = GetBoostedInsurancePayout(character, payOut); wallet.Balance -= insuranceFee; @@ -147,6 +149,26 @@ public void InsuranceBuy(Character character, Robot robot, ref int currentInsura currentInsurances++; } + private const double SERVER_DESIRED_EP_LEVEL = 750000; + public double GetBoostedInsurancePayout(Character character, double payOut) { + Accounting.Account account = character.GetAccount(); + var collectedEp = Db.Query().CommandText("SELECT dbo.extensionPointsCollected(@accountID)") + .SetParameter("@accountID", account.Id) + .ExecuteScalar(); + double modifier = GetInsurancePayoutModifier(collectedEp); + + return Math.Round(payOut * (1 + modifier)); + } + + private static double GetInsurancePayoutModifier(int collectedEpSum) { + + var linearRatio = collectedEpSum / SERVER_DESIRED_EP_LEVEL; + var result = 1.0 - linearRatio; + result = result.Clamp(); + + return result; + } + public ErrorCodes InsuranceQuery(Character character, IEnumerable targetEids, out Dictionary result) { var ec = ErrorCodes.NoError;