add support for thargoid vouchers
This commit is contained in:
parent
e8de768d01
commit
8514331701
@ -28,7 +28,7 @@ public class ThargoidKill : Transaction {
|
||||
public ThargoidKill() { }
|
||||
|
||||
public ThargoidKill(FactionKillBondEntry entry) {
|
||||
if (string.Compare(entry.VictimFaction, Thargoid.ThargoidFaction) != 0) {
|
||||
if (!Factions.IsThargoid(entry.VictimFaction)) {
|
||||
throw new Exception("Not a valid thargoid kill");
|
||||
}
|
||||
|
||||
|
@ -488,9 +488,12 @@ internal class RedeemVoucherParser : TransactionParserPart {
|
||||
|
||||
foreach (string faction in entry.Factions) {
|
||||
bool relevantBond = false;
|
||||
string relevantFaction = faction;
|
||||
|
||||
if (string.Compare(faction, Factions.PilotsFederationVouchers) == 0) {
|
||||
// Target faction is pilots' federation, so we assume thargoid bonks
|
||||
// Also assign this combat bond to the Pilots Federation
|
||||
relevantFaction = Factions.PilotsFederation;
|
||||
relevantBond = true;
|
||||
}
|
||||
|
||||
@ -511,7 +514,7 @@ internal class RedeemVoucherParser : TransactionParserPart {
|
||||
transactions.Add(new Vouchers(entry) {
|
||||
System = context.CurrentSystem,
|
||||
Station = context.CurrentStation,
|
||||
Faction = faction,
|
||||
Faction = relevantFaction,
|
||||
ControllingFaction = context.ControllingFaction,
|
||||
});
|
||||
}
|
||||
@ -600,9 +603,13 @@ internal class FactionKillBondParser : TransactionParserPart {
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
if (string.Compare(entry.VictimFaction, Thargoid.ThargoidFaction) == 0) {
|
||||
if (Factions.IsThargoid(entry.VictimFaction)) {
|
||||
// Thargoid bonk
|
||||
transactions.Add(new ThargoidKill(entry));
|
||||
transactions.Add(new ThargoidKill(entry) {
|
||||
System = context.CurrentSystem,
|
||||
Faction = Factions.PilotsFederation,
|
||||
Station = context.CurrentStation,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -20,8 +20,8 @@ public class Vouchers : Transaction {
|
||||
}
|
||||
return Entries
|
||||
.OfType<RedeemVoucherEntry>()
|
||||
.Where(x => x.FactionBounties.ContainsKey(Faction))
|
||||
.Sum(x => x.FactionBounties[Faction])
|
||||
.ToList()
|
||||
.Sum(x => (long)x.GetBountyForFaction(Faction))
|
||||
;
|
||||
}
|
||||
}
|
||||
|
@ -4,7 +4,7 @@ using System.Collections.Generic;
|
||||
namespace EDPlayerJournal.Entries;
|
||||
public class RedeemVoucherEntry : Entry {
|
||||
protected override void Initialise() {
|
||||
Amount = (JSON.Value<int?>("Amount") ?? 0);
|
||||
Amount = (JSON.Value<ulong?>("Amount") ?? 0);
|
||||
Type = JSON.Value<string>("Type");
|
||||
|
||||
/* according to API, there should be a Factions structure */
|
||||
@ -12,7 +12,7 @@ public class RedeemVoucherEntry : Entry {
|
||||
if (factions != null) {
|
||||
foreach (JObject faction in factions.Children<JObject>()) {
|
||||
string? faction_name = faction.Value<string>("Faction");
|
||||
long? faction_bounty = faction.Value<long?>("Amount");
|
||||
ulong? faction_bounty = faction.Value<ulong?>("Amount");
|
||||
if (faction_name == null || faction_name.Length <= 0 || faction_bounty == null) {
|
||||
continue;
|
||||
}
|
||||
@ -35,8 +35,29 @@ public class RedeemVoucherEntry : Entry {
|
||||
}
|
||||
}
|
||||
|
||||
public int Amount { get; set; } = 0;
|
||||
public ulong GetBountyForFaction(string? a) {
|
||||
if (a == null) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
var relevant = FactionBounties.Where(x => EDPlayerJournal.Factions.CompareFactions(x.Key, a) == 0).ToList();
|
||||
if (relevant == null || relevant.Count() == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return (ulong)relevant.Sum(x => (decimal)x.Value);
|
||||
}
|
||||
|
||||
public ulong Amount { get; set; } = 0;
|
||||
public string? Type { get; set; } = "Bounty";
|
||||
public List<string> Factions { get; set; } = new List<string>();
|
||||
public Dictionary<string, long> FactionBounties { get; set; } = new Dictionary<string, long>();
|
||||
|
||||
/// <summary>
|
||||
/// List of factions
|
||||
/// </summary>
|
||||
public List<string> Factions { get; set; } = new();
|
||||
|
||||
/// <summary>
|
||||
/// Bounties awarded by faction
|
||||
/// </summary>
|
||||
public Dictionary<string, ulong> FactionBounties { get; set; } = new();
|
||||
}
|
||||
|
@ -40,10 +40,71 @@ public class Factions {
|
||||
/// </summary>
|
||||
public static string PilotsFederationVouchers = "PilotsFederation";
|
||||
|
||||
/// <summary>
|
||||
/// Friendly name of the Pilots Federation
|
||||
/// </summary>
|
||||
public static string PilotsFederation = "Pilots' Federation";
|
||||
|
||||
/// <summary>
|
||||
/// Internal name for the Thargoid faction
|
||||
/// </summary>
|
||||
public static string Thargoid = "$faction_Thargoid;";
|
||||
public static string ThargoidInternal = "$faction_Thargoid;";
|
||||
|
||||
/// <summary>
|
||||
/// Localised name of the Thargoids
|
||||
/// </summary>
|
||||
public static string Thargoid = "Thargoids";
|
||||
|
||||
public static bool IsPilotsFederation(string? name) {
|
||||
if (name == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (string.Compare(name, PilotsFederationInternal) == 0 ||
|
||||
string.Compare(name, PilotsFederationVouchers) == 0 ||
|
||||
string.Compare(name, PilotsFederation) == 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static bool IsThargoid(string? name) {
|
||||
if (name == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (string.Compare(name, ThargoidInternal) == 0 ||
|
||||
string.Compare(name, Thargoid) == 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Compares two factions names and sees if they are the same faction. Since
|
||||
/// factions can have an internal name, and a public name, this function takes
|
||||
/// these into account.
|
||||
/// </summary>
|
||||
/// <param name="a"></param>
|
||||
/// <param name="b"></param>
|
||||
/// <returns></returns>
|
||||
public static int CompareFactions(string? a, string? b) {
|
||||
if (a == null || b == null) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (IsPilotsFederation(a) && IsPilotsFederation(b)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (IsThargoid(a) && IsThargoid(b)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return string.Compare(a, b);
|
||||
}
|
||||
}
|
||||
|
||||
public class Faction {
|
||||
|
Loading…
Reference in New Issue
Block a user