1
0
mirror of https://github.com/EDCD/EDMarketConnector.git synced 2025-04-17 17:42:20 +03:00

Merge pull request #1040 from EDCD/fix/1038-credits-events-paranoia

Credits: Be paranoid about all related Journal events
This commit is contained in:
Athanasius 2021-05-08 19:39:26 +01:00 committed by GitHub
commit 1f3d800c68
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -552,7 +552,7 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
self.state['Rebuy'] = None
self.state['Modules'] = None
self.state['Credits'] -= entry['ShipPrice']
self.state['Credits'] -= entry.get('ShipPrice', 0)
elif event_type == 'ShipyardSwap':
self.state['ShipID'] = entry['ShipID']
@ -604,17 +604,17 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
'Value': entry['BuyPrice'],
}
self.state['Credits'] -= entry['BuyPrice']
self.state['Credits'] -= entry.get('BuyPrice', 0)
elif event_type == 'ModuleRetrieve':
self.state['Credits'] -= entry.get('Cost', 0)
elif event_type == 'ModuleSell':
self.state['Modules'].pop(entry['Slot'], None)
self.state['Credits'] += entry['SellPrice']
self.state['Credits'] += entry.get('SellPrice', 0)
elif event_type == 'ModuleSellRemote':
self.state['Credits'] += entry['SellPrice']
self.state['Credits'] += entry.get('SellPrice', 0)
elif event_type == 'ModuleStore':
self.state['Modules'].pop(entry['Slot'], None)
@ -870,11 +870,11 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
name = self.canonicalise(entry['Name'])
self.state[category][name] += entry['Count']
self.state['Credits'] -= entry['Price']
self.state['Credits'] -= entry.get('Price', 0)
elif event_type == 'SellMicroResources':
# Selling to a Bar Tender on-foot.
self.state['Credits'] += entry['Price']
self.state['Credits'] += entry.get('Price', 0)
# One event per whole sale, so it's an array.
for mr in entry['MicroResources']:
category = self.category(mr['Category'])
@ -1197,10 +1197,10 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
elif event_type == 'SellOrganicData':
for bd in entry['BioData']:
self.state['Credits'] += bd['Value'] + bd['Bonus']
self.state['Credits'] += bd.get('Value', 0) + bd.get('Bonus', 0)
elif event_type == 'BookDropship':
self.state['Credits'] -= entry['Cost']
self.state['Credits'] -= entry.get('Cost', 0)
# Technically we *might* now not be OnFoot.
# The problem is that this event is recorded both for signing up for
# an on-foot CZ, and when you use the Dropship to return after the
@ -1213,13 +1213,13 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
# event is going to be Disembark to on-foot anyway.
elif event_type == 'BookTaxi':
self.state['Credits'] -= entry['Cost']
self.state['Credits'] -= entry.get('Cost', 0)
elif event_type == 'CancelDropship':
self.state['Credits'] += entry['Refund']
self.state['Credits'] += entry.get('Refund', 0)
elif event_type == 'CancelTaxi':
self.state['Credits'] += entry['Refund']
self.state['Credits'] += entry.get('Refund', 0)
elif event_type == 'NavRoute':
# Added in ED 3.7 - multi-hop route details in NavRoute.json
@ -1249,10 +1249,10 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
self.state['Cargo'][commodity] += entry.get('Count', 1)
if event_type == 'BuyDrones':
self.state['Credits'] -= entry['TotalCost']
self.state['Credits'] -= entry.get('TotalCost', 0)
elif event_type == 'MarketBuy':
self.state['Credits'] -= entry['TotalCost']
self.state['Credits'] -= entry.get('TotalCost', 0)
elif event_type in ('EjectCargo', 'MarketSell', 'SellDrones'):
commodity = self.canonicalise(entry['Type'])
@ -1262,10 +1262,10 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
cargo.pop(commodity)
if event_type == 'MarketSell':
self.state['Credits'] += entry['TotalSale']
self.state['Credits'] += entry.get('TotalSale', 0)
elif event_type == 'SellDrones':
self.state['Credits'] += entry['TotalSale']
self.state['Credits'] += entry.get('TotalSale', 0)
elif event_type == 'SearchAndRescue':
for item in entry.get('Items', []):
@ -1348,7 +1348,7 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
module['Engineering'].pop('ExperimentalEffect_Localised', None)
elif event_type == 'MissionCompleted':
self.state['Credits'] += entry['Reward']
self.state['Credits'] += entry.get('Reward', 0)
for reward in entry.get('CommodityReward', []):
commodity = self.canonicalise(reward['Name'])
@ -1435,74 +1435,75 @@ class EDLogs(FileSystemEventHandler): # type: ignore # See below
# Try to keep Credits total updated
elif event_type in ('MultiSellExplorationData', 'SellExplorationData'):
self.state['Credits'] += entry['TotalEarnings']
self.state['Credits'] += entry.get('TotalEarnings', 0)
elif event_type == 'BuyExplorationData':
self.state['Credits'] -= entry['Cost']
self.state['Credits'] -= entry.get('Cost', 0)
elif event_type == 'BuyTradeData':
self.state['Credits'] -= entry['Cost']
self.state['Credits'] -= entry.get('Cost', 0)
elif event_type == 'BuyAmmo':
self.state['Credits'] -= entry['Cost']
self.state['Credits'] -= entry.get('Cost', 0)
elif event_type == 'CommunityGoalReward':
self.state['Credits'] += entry['Reward']
self.state['Credits'] += entry.get('Reward', 0)
elif event_type == 'CrewHire':
self.state['Credits'] -= entry['Cost']
self.state['Credits'] -= entry.get('Cost', 0)
elif event_type == 'FetchRemoteModule':
self.state['Credits'] -= entry['TransferCost']
self.state['Credits'] -= entry.get('TransferCost', 0)
elif event_type == 'MissionAbandoned':
# Is this paid at this point, or just a fine to pay later ?
# self.state['Credits'] -= entry['Fine']
# self.state['Credits'] -= entry.get('Fine', 0)
pass
elif event_type in ('PayBounties', 'PayFines', 'PayLegacyFines'):
self.state['Credits'] -= entry['Amount']
self.state['Credits'] -= entry.get('Amount', 0)
elif event_type == 'RedeemVoucher':
self.state['Credits'] += entry['Amount']
self.state['Credits'] += entry.get('Amount', 0)
elif event_type in ('RefuelAll', 'RefuelPartial', 'Repair', 'RepairAll', 'RestockVehicle'):
self.state['Credits'] -= entry['Cost']
self.state['Credits'] -= entry.get('Cost', 0)
elif event_type == 'SellShipOnRebuy':
self.state['Credits'] += entry['ShipPrice']
self.state['Credits'] += entry.get('ShipPrice', 0)
elif event_type == 'ShipyardSell':
self.state['Credits'] += entry['ShipPrice']
self.state['Credits'] += entry.get('ShipPrice', 0)
elif event_type == 'ShipyardTransfer':
self.state['Credits'] -= entry['TransferPrice']
self.state['Credits'] -= entry.get('TransferPrice', 0)
elif event_type == 'PowerplayFastTrack':
self.state['Credits'] -= entry['Cost']
self.state['Credits'] -= entry.get('Cost', 0)
elif event_type == 'PowerplaySalary':
self.state['Credits'] += entry['Amount']
self.state['Credits'] += entry.get('Amount', 0)
elif event_type == 'SquadronCreated':
# v30 docs don't actually say anything about credits cost
pass
elif event_type == 'CarrierBuy':
self.state['Credits'] -= entry['Price']
self.state['Credits'] -= entry.get('Price', 0)
elif event_type == 'CarrierBankTransfer':
self.state['Credits'] = entry['PlayerBalance']
if (newbal := entry.get('PlayerBalance')):
self.state['Credits'] = newbal
elif event_type == 'CarrierDecommission':
# v30 doc says nothing about citing the refund amount
pass
elif event_type == 'NpcCrewPaidWage':
self.state['Credits'] -= entry['Amount']
self.state['Credits'] -= entry.get('Amount', 0)
elif event_type == 'Resurrect':
self.state['Credits'] -= entry['Cost']
self.state['Credits'] -= entry.get('Cost', 0)
return entry