correct black market trade by properly setting StationOwner

This commit is contained in:
Florian Stinglmayr 2023-04-19 09:01:32 +02:00
parent da3a355695
commit 5c9d9c9153
3 changed files with 85 additions and 18 deletions

View File

@ -1,10 +1,11 @@
using System.Linq; using System.Text;
using System.Text;
using EDPlayerJournal.Entries; using EDPlayerJournal.Entries;
namespace EDPlayerJournal.BGS; namespace EDPlayerJournal.BGS;
public class Cartographics : Transaction { public class Cartographics : Transaction {
public Cartographics() { }
public Cartographics(MultiSellExplorationDataEntry e) { public Cartographics(MultiSellExplorationDataEntry e) {
Entries.Add(e); Entries.Add(e);
} }

View File

@ -4,6 +4,8 @@ using EDPlayerJournal.Entries;
namespace EDPlayerJournal.BGS; namespace EDPlayerJournal.BGS;
public class OrganicData : Transaction { public class OrganicData : Transaction {
public OrganicData() { }
public OrganicData(SellOrganicDataEntry e) { public OrganicData(SellOrganicDataEntry e) {
Entries.Add(e); Entries.Add(e);
} }
@ -36,6 +38,8 @@ public class OrganicData : Transaction {
/* Selling organic data only helps the controlling faction, just like /* Selling organic data only helps the controlling faction, just like
* selling cartographic data. * selling cartographic data.
*
* Right now: Organic data helps no one.
*/ */
public override bool OnlyControllingFaction => true; public override bool OnlyControllingFaction => true;
} }

View File

@ -51,6 +51,12 @@ internal class LocationParser : TransactionParserPart {
context.CurrentStation = entry.StationName; context.CurrentStation = entry.StationName;
} }
if (!string.IsNullOrEmpty(entry.StationFaction)) {
context.StationOwner = entry.StationFaction;
} else {
context.StationOwner = null;
}
if (!context.SystemFactions.ContainsKey(entry.StarSystem) && if (!context.SystemFactions.ContainsKey(entry.StarSystem) &&
entry.SystemFactions != null && entry.SystemFactions.Count > 0) { entry.SystemFactions != null && entry.SystemFactions.Count > 0) {
context.SystemFactions[entry.StarSystem] = entry.SystemFactions; context.SystemFactions[entry.StarSystem] = entry.SystemFactions;
@ -108,7 +114,7 @@ internal class DockedParser : TransactionParserPart {
context.SystemsByID.TryAdd(entry.SystemAddress.Value, entry.StarSystem); context.SystemsByID.TryAdd(entry.SystemAddress.Value, entry.StarSystem);
if (!string.IsNullOrEmpty(entry.StationFaction)) { if (!string.IsNullOrEmpty(entry.StationFaction)) {
context.ControllingFaction = entry.StationFaction; context.StationOwner = entry.StationFaction;
} }
if (!string.IsNullOrEmpty(entry.StationName)) { if (!string.IsNullOrEmpty(entry.StationName)) {
@ -274,8 +280,8 @@ internal class MissionCompletedParser : TransactionParserPart {
throw new NotImplementedException(); throw new NotImplementedException();
} }
Mission? mission = null; Mission? mission;
Location? accepted_location = null; Location? accepted_location;
string? target_faction_name = entry.Mission.TargetFaction; string? target_faction_name = entry.Mission.TargetFaction;
string? source_faction_name = entry.Mission.Faction; string? source_faction_name = entry.Mission.Faction;
@ -384,9 +390,9 @@ internal class MissionCompletedParser : TransactionParserPart {
internal class MissionFailedParser : TransactionParserPart { internal class MissionFailedParser : TransactionParserPart {
public void Parse(Entry e, TransactionParserContext context, TransactionParserOptions options, TransactionList transactions) { public void Parse(Entry e, TransactionParserContext context, TransactionParserOptions options, TransactionList transactions) {
Mission? mission = null; Mission? mission;
Location? accepted_location = null; Location? accepted_location;
string? accepted_system = null; string? accepted_system;
MissionFailedEntry? entry = e as MissionFailedEntry; MissionFailedEntry? entry = e as MissionFailedEntry;
if (entry == null) { if (entry == null) {
@ -444,10 +450,18 @@ internal class SellExplorationDataParser : TransactionParserPart {
throw new NotImplementedException(); throw new NotImplementedException();
} }
if (context.StationOwner == null) {
transactions.AddIncomplete(
new Cartographics(),
"Could not discern the station owner for cartographics sell.",
e);
return;
}
transactions.Add(new Cartographics(entry) { transactions.Add(new Cartographics(entry) {
System = context.CurrentSystem, System = context.CurrentSystem,
Station = context.CurrentStation, Station = context.CurrentStation,
Faction = context.ControllingFaction, Faction = context.StationOwner,
IsLegacy = context.IsLegacy, IsLegacy = context.IsLegacy,
}); });
} }
@ -465,10 +479,18 @@ internal class SellOrganicDataParser : TransactionParserPart {
throw new NotImplementedException(); throw new NotImplementedException();
} }
if (context.StationOwner == null) {
transactions.AddIncomplete(
new OrganicData(),
"Could not discern the station owner for organic data sell.",
e);
return;
}
transactions.Add(new OrganicData(entry) { transactions.Add(new OrganicData(entry) {
System = context.CurrentSystem, System = context.CurrentSystem,
Station = context.CurrentStation, Station = context.CurrentStation,
Faction = context.ControllingFaction, Faction = context.StationOwner,
IsLegacy = context.IsLegacy, IsLegacy = context.IsLegacy,
}); });
} }
@ -481,10 +503,18 @@ internal class MultiSellExplorationDataParser : TransactionParserPart {
throw new NotImplementedException(); throw new NotImplementedException();
} }
if (context.StationOwner == null) {
transactions.AddIncomplete(
new Cartographics(),
"Could not discern the station owner for cartographics sell.",
e);
return;
}
transactions.Add(new Cartographics(entry) { transactions.Add(new Cartographics(entry) {
System = context.CurrentSystem, System = context.CurrentSystem,
Station = context.CurrentStation, Station = context.CurrentStation,
Faction = context.ControllingFaction, Faction = context.StationOwner,
IsLegacy = context.IsLegacy, IsLegacy = context.IsLegacy,
}); });
} }
@ -554,10 +584,18 @@ internal class SellMicroResourcesParser : TransactionParserPart {
throw new NotImplementedException(); throw new NotImplementedException();
} }
if (context.StationOwner == null) {
transactions.AddIncomplete(
new SellMicroResources(),
"Could not discern the station owner for micro resources sell.",
e);
return;
}
transactions.Add(new SellMicroResources(entry) { transactions.Add(new SellMicroResources(entry) {
System = context.CurrentSystem, System = context.CurrentSystem,
Station = context.CurrentStation, Station = context.CurrentStation,
Faction = context.ControllingFaction, Faction = context.StationOwner,
IsLegacy = context.IsLegacy, IsLegacy = context.IsLegacy,
}); });
} }
@ -570,10 +608,18 @@ internal class SearchAndRescueParser : TransactionParserPart {
throw new NotImplementedException(); throw new NotImplementedException();
} }
if (context.StationOwner == null) {
transactions.AddIncomplete(
new OrganicData(),
"Could not discern the station owner for S&R operations.",
e);
return;
}
transactions.Add(new SearchAndRescue(entry) { transactions.Add(new SearchAndRescue(entry) {
Faction = context.ControllingFaction,
Station = context.CurrentStation,
System = context.CurrentSystem, System = context.CurrentSystem,
Station = context.CurrentStation,
Faction = context.StationOwner,
IsLegacy = context.IsLegacy, IsLegacy = context.IsLegacy,
}); });
} }
@ -586,12 +632,20 @@ internal class MarketBuyParser : TransactionParserPart {
throw new NotImplementedException(); throw new NotImplementedException();
} }
if (context.StationOwner == null) {
transactions.AddIncomplete(
new OrganicData(),
"Could not discern the station owner for market buy.",
e);
return;
}
context.BoughtCargo(entry.Type, entry.BuyPrice); context.BoughtCargo(entry.Type, entry.BuyPrice);
transactions.Add(new BuyCargo(entry) { transactions.Add(new BuyCargo(entry) {
Faction = context.ControllingFaction,
Station = context.CurrentStation,
System = context.CurrentSystem, System = context.CurrentSystem,
Station = context.CurrentStation,
Faction = context.StationOwner,
IsLegacy = context.IsLegacy, IsLegacy = context.IsLegacy,
}); });
} }
@ -601,6 +655,14 @@ internal class MarketSellParser : TransactionParserPart {
public void Parse(Entry e, TransactionParserContext context, TransactionParserOptions options, TransactionList transactions) { public void Parse(Entry e, TransactionParserContext context, TransactionParserOptions options, TransactionList transactions) {
long profit = 0; long profit = 0;
if (context.StationOwner == null) {
transactions.AddIncomplete(
new OrganicData(),
"Could not discern the station owner market sell.",
e);
return;
}
MarketSellEntry? entry = e as MarketSellEntry; MarketSellEntry? entry = e as MarketSellEntry;
if (entry == null) { if (entry == null) {
throw new NotImplementedException(); throw new NotImplementedException();
@ -616,9 +678,9 @@ internal class MarketSellParser : TransactionParserPart {
} }
transactions.Add(new SellCargo(entry) { transactions.Add(new SellCargo(entry) {
Faction = context.ControllingFaction,
Station = context.CurrentStation,
System = context.CurrentSystem, System = context.CurrentSystem,
Station = context.CurrentStation,
Faction = context.StationOwner,
Profit = profit, Profit = profit,
IsLegacy = context.IsLegacy, IsLegacy = context.IsLegacy,
}); });