add thargoid kills to transaction parser
This commit is contained in:
		
							parent
							
								
									85848a7381
								
							
						
					
					
						commit
						a49859b079
					
				| @ -2,11 +2,11 @@ | ||||
| 
 | ||||
| namespace EDPlayerJournal.BGS;  | ||||
| public class FactionKillBonds : Transaction { | ||||
|     public int TotalSum { | ||||
|     public ulong TotalSum { | ||||
|         get { | ||||
|             return Entries | ||||
|             return (ulong)Entries | ||||
|                 .OfType<FactionKillBondEntry>() | ||||
|                 .Sum(x => x.Reward) | ||||
|                 .Sum(x => (decimal)x.Reward) | ||||
|                 ; | ||||
|         } | ||||
|     } | ||||
|  | ||||
							
								
								
									
										44
									
								
								EDPlayerJournal/BGS/ThargoidKill.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								EDPlayerJournal/BGS/ThargoidKill.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,44 @@ | ||||
| using EDPlayerJournal.Entries; | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.Linq; | ||||
| using System.Text; | ||||
| using System.Threading.Tasks; | ||||
| 
 | ||||
| namespace EDPlayerJournal.BGS; | ||||
| 
 | ||||
| public class ThargoidKill : Transaction { | ||||
|     /// <summary> | ||||
|     /// Thargoid vessel that was killed | ||||
|     /// </summary> | ||||
|     public ThargoidVessel ThargoidType { get; set; } = ThargoidVessel.Unknown; | ||||
| 
 | ||||
|     /// <summary> | ||||
|     /// Name of the thargoid type killed | ||||
|     /// </summary> | ||||
|     public string? ThargoidName { get; set; } | ||||
| 
 | ||||
|     /// <summary> | ||||
|     /// Total reward received | ||||
|     /// </summary> | ||||
|     public ulong TotalReward { | ||||
|         get { return (ulong)Entries.OfType<FactionKillBondEntry>().Sum(x => (decimal)x.Reward); } | ||||
|     } | ||||
| 
 | ||||
|     public ThargoidKill() { } | ||||
| 
 | ||||
|     public ThargoidKill(FactionKillBondEntry entry) { | ||||
|         if (string.Compare(entry.VictimFaction, Thargoid.ThargoidFaction) != 0) { | ||||
|             throw new Exception("Not a valid thargoid kill"); | ||||
|         } | ||||
| 
 | ||||
|         Entries.Add(entry); | ||||
| 
 | ||||
|         ThargoidType = Thargoid.GetVesselByPayout(entry.Reward); | ||||
|         ThargoidName = Thargoid.GetVesselName(ThargoidType); | ||||
|     } | ||||
| 
 | ||||
|     public override string ToString() { | ||||
|         return string.Format("{0}x {1} killed", Entries.Count, ThargoidName); | ||||
|     } | ||||
| } | ||||
| @ -580,11 +580,26 @@ internal class MarketSellParser : TransactionParserPart { | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| internal class FactionKillBondParser : TransactionParserPart { | ||||
|     public void Parse(Entry e, TransactionParserContext context, TransactionList transactions) { | ||||
|         FactionKillBondEntry? entry = e as FactionKillBondEntry; | ||||
|         if (entry == null) { | ||||
|             throw new NotImplementedException(); | ||||
|         } | ||||
| 
 | ||||
|         if (string.Compare(entry.VictimFaction, Thargoid.ThargoidFaction) == 0) { | ||||
|             // Thargoid bonk | ||||
|             transactions.Add(new ThargoidKill(entry)); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| public class TransactionParser { | ||||
|     private static Dictionary<string, TransactionParserPart> ParserParts { get; } = new() | ||||
|     { | ||||
|         { Events.CommitCrime, new CommitCrimeParser() }, | ||||
|         { Events.Docked, new DockedParser() }, | ||||
|         { Events.FactionKillBond, new FactionKillBondParser() }, | ||||
|         { Events.FSDJump, new FSDJumpParser() }, | ||||
|         { Events.Location, new LocationParser() }, | ||||
|         { Events.MarketBuy, new MarketBuyParser() }, | ||||
|  | ||||
| @ -3,7 +3,11 @@ | ||||
| namespace EDPlayerJournal; | ||||
| 
 | ||||
| public class Credits { | ||||
|     public static string FormatCredits(int amount) { | ||||
|     public static string FormatCredits(uint amount) { | ||||
|         return FormatCredits((long)amount); | ||||
|     } | ||||
| 
 | ||||
|     public static string FormatCredits(ulong amount) { | ||||
|         return FormatCredits((long)amount); | ||||
|     } | ||||
| 
 | ||||
|  | ||||
| @ -4,7 +4,7 @@ public class FactionKillBondEntry : Entry { | ||||
|     /// <summary> | ||||
|     /// Reward given | ||||
|     /// </summary> | ||||
|     public int Reward { get; set; } | ||||
|     public ulong Reward { get; set; } = 0; | ||||
|     /// <summary> | ||||
|     /// Faction that awarded the kill bond | ||||
|     /// </summary> | ||||
| @ -23,7 +23,7 @@ public class FactionKillBondEntry : Entry { | ||||
|     public string? VictimFactionLocalised { get; set; } | ||||
| 
 | ||||
|     protected override void Initialise() { | ||||
|         Reward = JSON.Value<int?>("Reward") ?? 0; | ||||
|         Reward = JSON.Value<ulong?>("Reward") ?? 0; | ||||
|         AwardingFaction = JSON.Value<string>("AwardingFaction"); | ||||
|         AwardingFactionLocalised = JSON.Value<string>("AwardingFaction_Localised"); | ||||
|         VictimFaction = JSON.Value<string>("VictimFaction"); | ||||
|  | ||||
| @ -44,6 +44,9 @@ | ||||
|     <None Update="SellOrganicData.txt"> | ||||
|       <CopyToOutputDirectory>Always</CopyToOutputDirectory> | ||||
|     </None> | ||||
|     <None Update="ThargoidKills.txt"> | ||||
|       <CopyToOutputDirectory>Always</CopyToOutputDirectory> | ||||
|     </None> | ||||
|   </ItemGroup> | ||||
| 
 | ||||
| </Project> | ||||
|  | ||||
							
								
								
									
										25
									
								
								EDPlayerJournalTests/Helper.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								EDPlayerJournalTests/Helper.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,25 @@ | ||||
| using EDPlayerJournal.Entries; | ||||
| 
 | ||||
| namespace EDPlayerJournalTests; | ||||
| 
 | ||||
| public class Helper { | ||||
|     public static List<Entry>? LoadTestData(string filename) { | ||||
|         string path = Path.GetFullPath("./" + filename); | ||||
|         string[] lines = File.ReadAllLines(path); | ||||
|         List<Entry> entries = new(); | ||||
| 
 | ||||
|         foreach (string line in lines) { | ||||
|             line.Trim(); | ||||
|             if (string.IsNullOrEmpty(line)) { | ||||
|                 continue; | ||||
|             } | ||||
| 
 | ||||
|             Entry? entry = Entry.Parse(line); | ||||
|             if (entry != null) { | ||||
|                 entries.Add(entry); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         return entries; | ||||
|     } | ||||
| } | ||||
| @ -6,31 +6,11 @@ namespace EDPlayerJournalTests; | ||||
| 
 | ||||
| [TestClass] | ||||
| public class TestTransactionParser { | ||||
|     private List<Entry>? LoadTestData(string filename) { | ||||
|         string path = Path.GetFullPath("./" + filename); | ||||
|         string[] lines = File.ReadAllLines(path); | ||||
|         List<Entry> entries = new(); | ||||
| 
 | ||||
|         foreach (string line in lines) { | ||||
|             line.Trim(); | ||||
|             if (string.IsNullOrEmpty(line)) { | ||||
|                 continue; | ||||
|             } | ||||
| 
 | ||||
|             Entry? entry = Entry.Parse(line); | ||||
|             if (entry != null) { | ||||
|                 entries.Add(entry); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         return entries; | ||||
|     } | ||||
| 
 | ||||
|     [TestMethod] | ||||
|     public void DoubleFiveINF() { | ||||
|         TransactionParser parser = new(); | ||||
| 
 | ||||
|         List<Entry>? entries = LoadTestData("double-five-inf.txt"); | ||||
|         List<Entry>? entries = Helper.LoadTestData("double-five-inf.txt"); | ||||
|         Assert.IsNotNull(entries, "could not load test data"); | ||||
| 
 | ||||
|         if (entries == null) { | ||||
| @ -46,7 +26,7 @@ public class TestTransactionParser { | ||||
|     public void DoubleSupport() { | ||||
|         TransactionParser parser = new(); | ||||
| 
 | ||||
|         List<Entry>? entries = LoadTestData("double-support.txt"); | ||||
|         List<Entry>? entries = Helper.LoadTestData("double-support.txt"); | ||||
|         Assert.IsNotNull(entries, "could not load test data"); | ||||
| 
 | ||||
|         if (entries == null) { | ||||
| @ -62,7 +42,7 @@ public class TestTransactionParser { | ||||
|     public void MissionFailed() { | ||||
|         TransactionParser parser = new(); | ||||
| 
 | ||||
|         List<Entry>? entries = LoadTestData("mission-failed.txt"); | ||||
|         List<Entry>? entries = Helper.LoadTestData("mission-failed.txt"); | ||||
|         Assert.IsNotNull(entries, "could not load test data"); | ||||
| 
 | ||||
|         if (entries == null) { | ||||
| @ -78,7 +58,7 @@ public class TestTransactionParser { | ||||
|     public void MissionNoINF() { | ||||
|         TransactionParser parser = new(); | ||||
| 
 | ||||
|         List<Entry>? entries = LoadTestData("mission-noinfforsourceortarget.txt"); | ||||
|         List<Entry>? entries = Helper.LoadTestData("mission-noinfforsourceortarget.txt"); | ||||
|         Assert.IsNotNull(entries, "could not load test data"); | ||||
| 
 | ||||
|         if (entries == null) { | ||||
| @ -94,7 +74,7 @@ public class TestTransactionParser { | ||||
|     public void Murder() { | ||||
|         TransactionParser parser = new(); | ||||
| 
 | ||||
|         List<Entry>? entries = LoadTestData("murder.txt"); | ||||
|         List<Entry>? entries = Helper.LoadTestData("murder.txt"); | ||||
|         Assert.IsNotNull(entries, "could not load test data"); | ||||
| 
 | ||||
|         if (entries == null) { | ||||
| @ -118,7 +98,7 @@ public class TestTransactionParser { | ||||
|     public void NoFactionNameNoInfluence() { | ||||
|         TransactionParser parser = new(); | ||||
| 
 | ||||
|         List<Entry>? entries = LoadTestData("nofactionname-andnoinfluence.txt"); | ||||
|         List<Entry>? entries = Helper.LoadTestData("nofactionname-andnoinfluence.txt"); | ||||
|         Assert.IsNotNull(entries, "could not load test data"); | ||||
| 
 | ||||
|         if (entries == null) { | ||||
| @ -134,7 +114,7 @@ public class TestTransactionParser { | ||||
|     public void SellOrganicData() { | ||||
|         TransactionParser parser = new(); | ||||
| 
 | ||||
|         List<Entry>? entries = LoadTestData("SellOrganicData.txt"); | ||||
|         List<Entry>? entries = Helper.LoadTestData("SellOrganicData.txt"); | ||||
|         Assert.IsNotNull(entries, "could not load test data"); | ||||
| 
 | ||||
|         if (entries == null) { | ||||
|  | ||||
							
								
								
									
										33
									
								
								EDPlayerJournalTests/ThargoidKills.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								EDPlayerJournalTests/ThargoidKills.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,33 @@ | ||||
| using EDPlayerJournal.BGS; | ||||
| using EDPlayerJournal.Entries; | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.Linq; | ||||
| using System.Text; | ||||
| using System.Threading.Tasks; | ||||
| 
 | ||||
| namespace EDPlayerJournalTests; | ||||
| 
 | ||||
| [TestClass] | ||||
| public class ThargoidKills { | ||||
|     [TestMethod] | ||||
|     public void ThargoidBonks() { | ||||
|         TransactionParser parser = new(); | ||||
| 
 | ||||
|         List<Entry>? entries = Helper.LoadTestData("ThargoidKills.txt"); | ||||
|         Assert.IsNotNull(entries, "could not load test data"); | ||||
| 
 | ||||
|         if (entries == null) { | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         List<Transaction>? transactions = parser.Parse(entries); | ||||
| 
 | ||||
|         Assert.IsNotNull(transactions, "could not parse entries"); | ||||
|         Assert.AreEqual(transactions.Count, 4); | ||||
| 
 | ||||
|         Assert.IsInstanceOfType(transactions[0], typeof(ThargoidKill), "result is not of type ThargoidKill"); | ||||
|         Assert.IsInstanceOfType(transactions[1], typeof(ThargoidKill), "result is not of type ThargoidKill"); | ||||
|         Assert.IsInstanceOfType(transactions[2], typeof(ThargoidKill), "result is not of type ThargoidKill"); | ||||
|     } | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user