private bool _handleBountyRedeemedEvent(BountyRedeemedEvent @event) { bool update = false; foreach (Reward reward in @event.rewards.ToList()) { FactionRecord record = new FactionRecord(); // Calculate amount, before broker fees decimal percentage = (100 - (@event.brokerpercentage ?? 0)) / 100; long amount = Convert.ToInt64(Math.Ceiling(reward.amount / percentage)); // Handle journal event from Interstellar Factors transaction (FDEV bug) if (string.IsNullOrEmpty(reward.faction)) { record = criminalrecord.FirstOrDefault(r => r.bountiesAmount == amount); } else { record = GetRecordWithFaction(reward.faction); } if (record != null) { // Get all bounty claims, excluding the discrepancy report List <FactionReport> reports = record.factionReports .Where(r => r.bounty && r.crimeDef == Crime.None).ToList(); if (reports?.Any() ?? false) { long total = reports.Sum(r => r.amount); // Check for discrepancy in logged bounty claims if (total < amount) { // Adjust the discrepancy report & remove when zeroed out FactionReport report = record.factionReports .FirstOrDefault(r => r.crimeDef == Crime.Claim); if (report != null) { report.amount -= Math.Min(amount - total, report.amount); if (report.amount == 0) { reports.Add(report); } } } // Remove associated bounty claims record.factionReports = record.factionReports.Except(reports).ToList(); } // Adjust the total claims record.claims -= Math.Min(amount, record.claims); RemoveRecord(record); update = true; } } return(update); }
private void handleBountyRedeemedEvent(BountyRedeemedEvent @event) { if (@event.timestamp > updateDat) { updateDat = @event.timestamp; if (_handleBountyRedeemedEvent(@event)) { writeRecord(); } } }