private bool _handleBondRedeemedEvent(BondRedeemedEvent @event) { bool update = false; FactionRecord record = new FactionRecord(); // Calculate amount, broker fees decimal percentage = (100 - (@event.brokerpercentage ?? 0)) / 100; long amount = Convert.ToInt64(Math.Ceiling(@event.rewards[0].amount / percentage)); // Handle journal event from Interstellar Factors transaction (FDEV bug) if (string.IsNullOrEmpty(@event.rewards[0].faction)) { List <string> systemFactions = EDDI.Instance.CurrentStarSystem?.factions.Select(f => f.name).ToList(); // Get record which matches a system faction and the bond claims amount record = criminalrecord .Where(r => systemFactions.Contains(r.faction)) .FirstOrDefault(r => r.bondsAmount == amount); } else { record = GetRecordWithFaction(@event.rewards[0].faction); } if (record != null) { // Get all bond 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 bond 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 bonds 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 handleBondRedeemedEvent(BondRedeemedEvent @event) { if (@event.timestamp > updateDat) { updateDat = @event.timestamp; if (_handleBondRedeemedEvent(@event)) { writeRecord(); } } }