using System.Collections.Generic; using System.Text; using Newtonsoft.Json.Linq; namespace EDJournal { public class MissionCompletedEntry : Entry { private Dictionary influences = new Dictionary(); private string readable_name = null; private bool readable_name_generated = false; private string name = null; private string commodity = null; private int count = 0; private int donated = 0; private int id = 0; protected override void Initialise() { MakeHumanReadableName(); id = JSON.Value("MissionID") ?? 0; name = JSON.Value("Name"); if (JSON.ContainsKey("Commodity_Localised")) { commodity = JSON.Value("Commodity_Localised"); } if (JSON.ContainsKey("Count")) { count = JSON.Value("Count"); } if (JSON.ContainsKey("Donated")) { donated = JSON.Value("Donated"); } } public string Name => name; public string Commodity => commodity; public int Count => count; public int MissionID => id; private void MakeHumanReadableName() { if (readable_name != null) { return; } string readable = HumanReadableMissionName.MakeHumanReadableName(Name); StringBuilder builder = new StringBuilder(); if (readable == null) { builder = new StringBuilder(Name); builder.Replace("Mission_", ""); builder.Replace("_name", ""); builder.Replace("_MB", ""); builder.Replace('_', ' '); builder.Replace("Illegal", " (Illegal)"); builder.Replace("OnFoot", "On Foot"); builder.Replace(" BS", ""); builder.Replace("HackMegaship", "Hack Megaship"); builder.Replace("Boom", ""); builder.Replace("RebootRestore", "Reboot/Restore"); builder.Replace("CivilLiberty", ""); readable_name_generated = true; } else { builder.Append(readable); } if (count > 0 && commodity != null) { builder.AppendFormat(" ({0} {1})", count, commodity); } if (donated > 0) { builder.AppendFormat(" ({0})", Credits.FormatCredits(donated)); } readable_name = builder.ToString().Trim(); } public string HumanReadableName { get { MakeHumanReadableName(); return readable_name; } } public bool HumanReadableNameWasGenerated { get { MakeHumanReadableName(); return readable_name_generated; } } public string GetInfluenceForFaction(string faction) { if (influences.ContainsKey(faction)) { return influences[faction]; } var effects = JSON.Value("FactionEffects"); foreach (var effect in effects.Children()) { if (effect.GetValue("Faction").ToString() != faction) { continue; } var influence = effect.Value("Influence"); if (influence == null || influence.Count == 0) { // No influence reward, happens on courier missions sometimes. // There is always one point of rep, even if the mission won't state it influences.Add(faction, "+"); } foreach (var infl in influence.Children()) { infl.TryGetValue("Influence", out JToken result); if (result != null && result.Type == JTokenType.String) { influences.Add(faction, result.ToString()); return result.ToString(); } } } return ""; } } }