Compare commits

..

6 Commits

10 changed files with 135 additions and 63 deletions

View File

@ -4,10 +4,8 @@ using EDJournal;
namespace EliteBGS.BGS {
public class Cartographics : LogEntry {
public Cartographics(MultiSellExplorationDataEntry e, string current_system, string current_station) {
public Cartographics(MultiSellExplorationDataEntry e) {
Entries.Add(e);
System = current_system;
Station = current_station;
}
public int TotalSum {

24
BGS/InfluenceSupport.cs Normal file
View File

@ -0,0 +1,24 @@
using System.Text;
namespace EliteBGS.BGS {
/// <summary>
/// This class is used when a completed mission gives influence to another
/// faction as well. This happens, for example, when you deliver cargo from one
/// faction to another. Both sometimes gain influence.
/// </summary>
public class InfluenceSupport : LogEntry {
public string Influence { get; set; }
public MissionCompleted RelevantMission { get; set; }
public override string ToString() {
StringBuilder builder = new StringBuilder();
builder.AppendFormat("Influence gained from \"{0}\": \"{1}\"",
RelevantMission.MissionName,
string.IsNullOrEmpty(Influence) ? "NONE" : Influence
);
return builder.ToString();
}
}
}

View File

@ -35,6 +35,6 @@ namespace EliteBGS.BGS {
throw new NotImplementedException("not implemented");
}
public string Name => this.ToString();
public string Name => ToString();
}
}

View File

@ -37,7 +37,8 @@ namespace EliteBGS.BGS {
}
builder.AppendFormat("{0}x Mission failed: \"{1}\"",
Entries.Count,
// +1 since the other entries are just copies of the one we have in our properties
Entries.Count + 1,
Failed.HumanReadableName != null ? Failed.HumanReadableName : Failed.Name
);

View File

@ -65,7 +65,7 @@ namespace EliteBGS.BGS {
objectives.ForEach(x => x.Clear());
foreach (var e in relevant) {
LogEntry entry = null;
List<LogEntry> results = new List<LogEntry>();
bool collate = false;
if (e.Is(Events.Docked)) {
@ -94,10 +94,10 @@ namespace EliteBGS.BGS {
}
} else if (e.Is(Events.MissionCompleted)) {
var completed = e as MissionCompletedEntry;
entry = new MissionCompleted(completed) {
results.Add(new MissionCompleted(completed) {
System = current_system,
Station = current_station
};
});
if (completed.HumanReadableNameWasGenerated) {
/* If the human readable name was generated, we send a log message. Because the
* generated names all sort of suck, we should have more human readable names in
@ -107,6 +107,17 @@ namespace EliteBGS.BGS {
completed.Name +
"\" was generated, please report this.");
}
foreach (string other in completed.AffectedFactions.Where(x => !x.Equals(results[0].Faction))) {
string faction = other;
string influence = completed.GetInfluenceForFaction(faction);
results.Add(new InfluenceSupport() {
Faction = faction,
Influence = influence,
RelevantMission = results[0] as MissionCompleted
});
}
} else if (e.Is(Events.MissionAccepted)) {
MissionAcceptedEntry accepted = e as MissionAcceptedEntry;
acceptedMissions[accepted.MissionID] = accepted;
@ -118,7 +129,7 @@ namespace EliteBGS.BGS {
"Please adjust start date to when the mission was accepted to include it in the list.");
continue;
}
entry = new MissionFailed(accepted) { Failed = failed, System = current_system };
results.Add(new MissionFailed(accepted) { Failed = failed, System = current_system });
if (failed.HumanReadableName == null) {
OnLog?.Invoke("Human readable name for mission \"" +
failed.Name +
@ -131,27 +142,28 @@ namespace EliteBGS.BGS {
} else if (e.Is(Events.MultiSellExplorationData)) {
/* For multi-sell-exploraton-data only the controlling faction of the station sold to matters.
*/
entry = new Cartographics(e as MultiSellExplorationDataEntry, current_system, current_station);
entry.Faction = controlling_faction;
results.Add(new Cartographics(e as MultiSellExplorationDataEntry) {
System = current_system,
Station = current_station,
Faction = controlling_faction
});
} else if (e.Is(Events.RedeemVoucher)) {
/* Same for selling combat vouchers. Only the current controlling faction matters here.
*/
entry = new Vouchers();
entry.Entries.Add(e);
entry.System = current_system;
entry.Station = current_station;
entry.Faction = (e as RedeemVoucherEntry).Factions.FirstOrDefault() ?? "";
entry.ControllingFaction = controlling_faction;
results.Add(new Vouchers(e as RedeemVoucherEntry) {
System = current_system,
Station = current_station,
Faction = (e as RedeemVoucherEntry).Factions.FirstOrDefault() ?? "",
ControllingFaction = controlling_faction,
});
collate = true;
} else if (e.Is(Events.SellMicroResources)) {
entry = new SellMicroResources() {
results.Add(new SellMicroResources(e as SellMicroResourcesEntry) {
Faction = controlling_faction,
Station = current_station,
System = current_system
};
entry.Entries.Add(e);
});
} else if (e.Is(Events.MarketBuy)) {
MarketBuyEntry buy = e as MarketBuyEntry;
if (string.IsNullOrEmpty(buy.Type) || buy.BuyPrice == 0) {
@ -169,20 +181,19 @@ namespace EliteBGS.BGS {
profit = sell.TotalSale - (avg * sell.Count);
}
entry = new SellCargo() {
results.Add(new SellCargo(e as MarketSellEntry) {
Faction = controlling_faction,
Station = current_station,
System = current_system,
Profit = profit
};
entry.Entries.Add(e);
});
}
if (entry == null) {
if (results == null || results.Count <= 0) {
continue;
}
foreach (LogEntry entry in results) {
/* Find all objectives that generally match.
*/
var matches = objectives
@ -226,6 +237,7 @@ namespace EliteBGS.BGS {
}
}
}
}
public void Scan(PlayerJournal journal) {
Scan(journal, DateTime.Now, DateTime.Now);

View File

@ -5,6 +5,13 @@ using EDJournal;
namespace EliteBGS.BGS {
public class SellCargo : LogEntry {
public int Profit { get; set; }
public SellCargo() { }
public SellCargo(MarketSellEntry e) {
Entries.Add(e);
}
public override string ToString() {
StringBuilder builder = new StringBuilder();
var sold = Entries.OfType<MarketSellEntry>().ToArray();
@ -14,9 +21,20 @@ namespace EliteBGS.BGS {
}
foreach (MarketSellEntry sell in sold) {
string cargo;
if (!string.IsNullOrEmpty(sell.TypeLocalised)) {
cargo = sell.TypeLocalised;
} else {
cargo = sell.Type;
if (cargo.Length >= 2) {
cargo = cargo[0].ToString().ToUpper() + cargo.Substring(1);
}
}
builder.AppendFormat("Sold {0} {1} to the {2}",
sell.Count,
sell.Type,
cargo,
sell.BlackMarket ? "Black Market" : "Commodity Market"
);

View File

@ -12,6 +12,12 @@ namespace EliteBGS.BGS {
}
}
public SellMicroResources() { }
public SellMicroResources(SellMicroResourcesEntry e) {
Entries.Add(e);
}
public override string ToString() {
return string.Format("Sell Micro Resources: {0}", Credits.FormatCredits(TotalSum));
}

View File

@ -6,6 +6,13 @@ namespace EliteBGS.BGS {
public class Vouchers : LogEntry {
private string type = null;
public Vouchers() {
}
public Vouchers(RedeemVoucherEntry e) {
Entries.Add(e);
}
public int TotalSum {
get {
return Entries

View File

@ -82,6 +82,7 @@
</Compile>
<Compile Include="BGS\DiscordLogGenerator.cs" />
<Compile Include="BGS\GenericDiscordLog.cs" />
<Compile Include="BGS\InfluenceSupport.cs" />
<Compile Include="BGS\MissionFailed.cs" />
<Compile Include="BGS\NonaDiscordLog.cs" />
<Compile Include="BGS\SellCargo.cs" />
@ -190,9 +191,9 @@
</Content>
</ItemGroup>
<ItemGroup>
<Resource Include="LICENCE.txt">
<Content Include="LICENCE.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Resource>
</Content>
</ItemGroup>
<ItemGroup>
<Resource Include="logo_v4.png">

View File

@ -42,6 +42,11 @@ Please note that cartography data, and micro resources only help the controlling
of a station. The tool is clever enough to exclude these if the station you turn them in at, is not
controlled by the faction you specified in the objective.
Some missions may show up having zero influence for the given faction. This happens if you do
missions for a faction which is currently in an election state. You do not gain influence for
the faction so the influence reads as zero. But contribute towards the election, so the missions
are selected anyway.
There is no entry in the journal if you win a combat zone. So you have to add those manually. Select
an objective for which you wish to log a combat zone. The faction in the objective, must be the
faction you fought for in the combat zone. Then click "Add Combat Zone Win". Select type,