handle missions were the alternate influence gain goes towards the same faction but in a different system

This commit is contained in:
Florian Stinglmayr 2022-01-27 23:21:34 +01:00
parent aea12022a7
commit afad459210
6 changed files with 1533 additions and 19 deletions

View File

@ -17,6 +17,7 @@ namespace EliteBGS.BGS {
public List<Entry> Entries => entries; public List<Entry> Entries => entries;
public string Station { get; set; } public string Station { get; set; }
public string System { get; set; } public string System { get; set; }
public ulong SystemAddress { get; set; }
public string Faction { get; set; } public string Faction { get; set; }
/// <summary> /// <summary>
/// Whether this entry was manually added. Manually added entries are not deleted /// Whether this entry was manually added. Manually added entries are not deleted

View File

@ -29,7 +29,7 @@ namespace EliteBGS.BGS {
} }
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
var entry = Entries[0] as MissionCompletedEntry; var entry = Entries[0] as MissionCompletedEntry;
var influence = entry.GetInfluenceForFaction(Faction); var influence = entry.GetInfluenceForFaction(Faction, SystemAddress);
builder.AppendFormat("{0}", MissionName); builder.AppendFormat("{0}", MissionName);
if (influence != "") { if (influence != "") {

View File

@ -62,8 +62,10 @@ namespace EliteBGS.BGS {
List<Entry> relevant = entries.Where(x => IsRelevant(x)).ToList(); List<Entry> relevant = entries.Where(x => IsRelevant(x)).ToList();
Dictionary<int, MissionAcceptedEntry> acceptedMissions = new Dictionary<int, MissionAcceptedEntry>(); Dictionary<int, MissionAcceptedEntry> acceptedMissions = new Dictionary<int, MissionAcceptedEntry>();
Dictionary<string, long> buyCost = new Dictionary<string, long>(); Dictionary<string, long> buyCost = new Dictionary<string, long>();
Dictionary<ulong, string> systems = new Dictionary<ulong, string>();
string current_system = null; string current_system = null;
ulong current_system_address = 0;
string current_station = null; string current_station = null;
string controlling_faction = null; string controlling_faction = null;
@ -80,17 +82,34 @@ namespace EliteBGS.BGS {
current_station = docked.StationName; current_station = docked.StationName;
current_system = docked.StarSystem; current_system = docked.StarSystem;
controlling_faction = docked.StationFaction; controlling_faction = docked.StationFaction;
current_system_address = docked.SystemAddress;
if (!systems.ContainsKey(docked.SystemAddress)) {
systems.Add(docked.SystemAddress, docked.StarSystem);
}
} else if (e.Is(Events.FSDJump)) { } else if (e.Is(Events.FSDJump)) {
/* Gleem current system and controlling faction from this message. /* Gleem current system and controlling faction from this message.
*/ */
current_system = (e as FSDJumpEntry).StarSystem; FSDJumpEntry fsd = e as FSDJumpEntry;
controlling_faction = (e as FSDJumpEntry).SystemFaction; current_system_address = fsd.SystemAddress;
current_system = fsd.StarSystem;
controlling_faction = fsd.SystemFaction;
if (!systems.ContainsKey(fsd.SystemAddress)) {
systems.Add(fsd.SystemAddress, fsd.StarSystem);
}
} else if (e.Is(Events.Location)) { } else if (e.Is(Events.Location)) {
/* Get current system, faction name and station from Location message /* Get current system, faction name and station from Location message
*/ */
LocationEntry location = e as LocationEntry; LocationEntry location = e as LocationEntry;
current_system = location.StarSystem; current_system = location.StarSystem;
current_system_address = location.SystemAddress;
if (!systems.ContainsKey(location.SystemAddress)) {
systems.Add(location.SystemAddress, location.StarSystem);
}
if (!string.IsNullOrEmpty(location.SystemFaction)) { if (!string.IsNullOrEmpty(location.SystemFaction)) {
controlling_faction = location.SystemFaction; controlling_faction = location.SystemFaction;
} }
@ -114,7 +133,8 @@ namespace EliteBGS.BGS {
var completed = e as MissionCompletedEntry; var completed = e as MissionCompletedEntry;
results.Add(new MissionCompleted(completed) { results.Add(new MissionCompleted(completed) {
System = current_system, System = current_system,
Station = current_station Station = current_station,
SystemAddress = current_system_address,
}); });
if (completed.HumanReadableNameWasGenerated) { if (completed.HumanReadableNameWasGenerated) {
/* If the human readable name was generated, we send a log message. Because the /* If the human readable name was generated, we send a log message. Because the
@ -126,23 +146,28 @@ namespace EliteBGS.BGS {
"\" was generated, please report this."); "\" was generated, please report this.");
} }
foreach (string other in completed.AffectedFactions.Where(x => !x.Equals(results[0].Faction))) { if (completed.Influences.Count > 1) {
string faction = other; foreach (var other in completed.Influences) {
string influence = completed.GetInfluenceForFaction(faction); string faction = other.Key;
/* ignore empty factions which can happen
* I assume that this denotes that you are losing REP with a superpower
*/
if (string.IsNullOrEmpty(faction)) { if (string.IsNullOrEmpty(faction)) {
continue; continue;
} }
foreach (var influences in other.Value) {
ulong system_address = influences.Key;
if (!faction.Equals(results[0].Faction) ||
(faction.Equals(results[0].Faction) && system_address != current_system_address)) {
string system = systems.TryGetValue(system_address, out string sys) ? sys : "";
results.Add(new InfluenceSupport() { results.Add(new InfluenceSupport() {
Faction = faction, Faction = faction,
Influence = influence, Influence = influences.Value,
System = system,
SystemAddress = system_address,
RelevantMission = results[0] as MissionCompleted RelevantMission = results[0] as MissionCompleted
}); });
} }
}
}
}
} else if (e.Is(Events.MissionAccepted)) { } else if (e.Is(Events.MissionAccepted)) {
MissionAcceptedEntry accepted = e as MissionAcceptedEntry; MissionAcceptedEntry accepted = e as MissionAcceptedEntry;
acceptedMissions[accepted.MissionID] = accepted; acceptedMissions[accepted.MissionID] = accepted;

View File

@ -186,6 +186,8 @@
<Content Include="main-objectives.png"> <Content Include="main-objectives.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory> <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content> </Content>
<Resource Include="TestData\SameInfTwice-Log.txt" />
<None Include="TestData\SameInfTwice.txt" />
<None Include="CHANGELOG.md"> <None Include="CHANGELOG.md">
<CopyToOutputDirectory>Always</CopyToOutputDirectory> <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None> </None>

File diff suppressed because one or more lines are too long

47
TestData/SameInfTwice.txt Normal file
View File

@ -0,0 +1,47 @@
This happens when target and source faction are the same faction
{ "timestamp":"2022-01-26T23:14:26Z", "event":"MissionAccepted", "Faction":"Peraesii Empire Consulate", "Name":"Mission_Courier_Famine", "LocalisedName":"Famine Data Transportation", "TargetFaction":"Peraesii Empire Consulate", "DestinationSystem":"Madngela", "DestinationStation":"Napier Dock", "Expiry":"2022-01-27T23:10:47Z", "Wing":false, "Influence":"++", "Reputation":"+", "Reward":94062, "MissionID":840783745 }
{ "timestamp":"2022-01-26T23:42:37Z", "event":"MissionCompleted", "Faction":"Peraesii Empire Consulate", "Name":"Mission_Courier_Famine_name", "MissionID":840783745, "TargetFaction":"Peraesii Empire Consulate", "DestinationSystem":"Madngela", "DestinationStation":"Napier Dock", "Reward":11002, "FactionEffects":[ { "Faction":"Peraesii Empire Consulate", "Effects":[ { "Effect":"$MISSIONUTIL_Interaction_Summary_EP_up;", "Effect_Localised":"The economic status of $#MinorFaction; has improved in the $#System; system.", "Trend":"UpGood" }, { "Effect":"$MISSIONUTIL_Interaction_Summary_EP_up;", "Effect_Localised":"The economic status of $#MinorFaction; has improved in the $#System; system.", "Trend":"UpGood" } ], "Influence":[ { "SystemAddress":7269097350585, "Trend":"UpGood", "Influence":"+++" }, { "SystemAddress":2557887746778, "Trend":"UpGood", "Influence":"+++" } ], "ReputationTrend":"UpGood", "Reputation":"++" } ] }
{
"timestamp": "2022-01-26T23:42:37Z",
"event": "MissionCompleted",
"Faction": "Peraesii Empire Consulate",
"Name": "Mission_Courier_Famine_name",
"MissionID": 840783745,
"TargetFaction": "Peraesii Empire Consulate",
"DestinationSystem": "Madngela",
"DestinationStation": "Napier Dock",
"Reward": 11002,
"FactionEffects": [
{
"Faction": "Peraesii Empire Consulate",
"Effects": [
{
"Effect": "$MISSIONUTIL_Interaction_Summary_EP_up;",
"Effect_Localised": "The economic status of $#MinorFaction; has improved in the $#System; system.",
"Trend": "UpGood"
},
{
"Effect": "$MISSIONUTIL_Interaction_Summary_EP_up;",
"Effect_Localised": "The economic status of $#MinorFaction; has improved in the $#System; system.",
"Trend": "UpGood"
}
],
"Influence": [
{
"SystemAddress": 7269097350585,
"Trend": "UpGood",
"Influence": "+++"
},
{
"SystemAddress": 2557887746778,
"Trend": "UpGood",
"Influence": "+++"
}
],
"ReputationTrend": "UpGood",
"Reputation": "++"
}
]
}