public void UpdateMicroResource(MaterialCommoditiesMicroResourceList mc) // unused for now { if (Items != null) { bool[] set = new bool[MaterialCommodityMicroResource.NoCounts]; // all change, not set int[] counts = new int[MaterialCommodityMicroResource.NoCounts]; foreach (var i in Items) { // as of 21/5/21, this does not make sense, sometimes its indicating this is //if (i.Direction == MicroResource.DirectionType.ToShipLocker) //{ // mc.Change(EventTimeUTC, i.Category, i.Name, i.Count, 0, MicroResource.ShipLocker, true); //} // int countdir = i.Direction == MicroResource.DirectionType.ToShipLocker ? i.Count : -i.Count; // counts[MicroResource.ShipLocker] = countdir; // counts[MicroResource.BackPack] = -countdir; // var cat = MaterialCommodityMicroResourceType.CategoryFrom(i.Category); // if (cat.HasValue) // { // MaterialCommodityMicroResourceType.EnsurePresent(cat.Value, i.Name, i.Name_Localised); // mc.Change(EventTimeUTC, cat.Value, i.Name, counts, set, 0); // } // else // System.Diagnostics.Debug.WriteLine("Microresource transfer unknown cat " + i.Category); // } } } }
public void UpdateCommodities(MaterialCommoditiesMicroResourceList mc) { if (CargoType.Length > 0 && Count > 0) { mc.Change(EventTimeUTC, MaterialCommodityMicroResourceType.CatType.Commodity, CargoType, (UpdateEnum == UpdateTypeEnum.Collect) ? Count : -Count, 0); } }
public void UpdateMicroResource(MaterialCommoditiesMicroResourceList mc, JournalEntry unused) // update all ship locker materials to these values { if (Items != null) { List <Tuple <string, int> > counts = Items.Select(x => new Tuple <string, int>(x.Name, x.Count)).ToList(); mc.Update(EventTimeUTC, MaterialCommodityMicroResourceType.CatType.Item, counts, MicroResource.ShipLocker); } if (Components != null) { List <Tuple <string, int> > counts = Components.Select(x => new Tuple <string, int>(x.Name, x.Count)).ToList(); mc.Update(EventTimeUTC, MaterialCommodityMicroResourceType.CatType.Component, counts, MicroResource.ShipLocker); } if (Consumables != null) { List <Tuple <string, int> > counts = Consumables.Select(x => new Tuple <string, int>(x.Name, x.Count)).ToList(); mc.Update(EventTimeUTC, MaterialCommodityMicroResourceType.CatType.Consumable, counts, MicroResource.ShipLocker); } if (Data != null) { List <Tuple <string, int> > counts = Data.Select(x => new Tuple <string, int>(x.Name, x.Count)).ToList(); mc.Update(EventTimeUTC, MaterialCommodityMicroResourceType.CatType.Data, counts, MicroResource.ShipLocker); } }
public void UpdateMicroResource(MaterialCommoditiesMicroResourceList mc, JournalEntry unused) { if (Items != null) { List <Tuple <string, int> > counts = Items.Select(x => new Tuple <string, int>(x.Name, x.Count)).ToList(); // Name is already lower cased mc.Update(EventTimeUTC, MaterialCommodityMicroResourceType.CatType.Item, counts, MicroResource.BackPack); } if (Components != null) { List <Tuple <string, int> > counts = Components.Select(x => new Tuple <string, int>(x.Name, x.Count)).ToList(); mc.Update(EventTimeUTC, MaterialCommodityMicroResourceType.CatType.Component, counts, MicroResource.BackPack); } if (Consumables != null) { List <Tuple <string, int> > counts = Consumables.Select(x => new Tuple <string, int>(x.Name, x.Count)).ToList(); mc.Update(EventTimeUTC, MaterialCommodityMicroResourceType.CatType.Consumable, counts, MicroResource.BackPack); } if (Data != null) { List <Tuple <string, int> > counts = Data.Select(x => new Tuple <string, int>(x.Name, x.Count)).ToList(); mc.Update(EventTimeUTC, MaterialCommodityMicroResourceType.CatType.Data, counts, MicroResource.BackPack); } }
public void UpdateCommodities(MaterialCommoditiesMicroResourceList mc, bool unusedinsrv) { if (Type.Equals("Commodity")) { mc.Change(EventTimeUTC, MaterialCommodityMicroResourceType.CatType.Commodity, Commodity, -Quantity, 0); } }
public void UpdateMaterials(MaterialCommoditiesMicroResourceList mc) { if (Type.Equals("Materials")) { mc.Change(EventTimeUTC, MaterialCommodityMicroResourceType.CatType.Raw, Material, -Quantity, 0); } }
public void UpdateMaterials(MaterialCommoditiesMicroResourceList mc) { if (Paid != null && Received != null) { mc.Change(EventTimeUTC, Paid.Category.Alt(TraderType), Paid.Material, -Paid.Quantity, 0); // use faction - person your using to swap mc.Change(EventTimeUTC, Received.Category.Alt(TraderType), Received.Material, Received.Quantity, 0); } }
public void UpdateMicroResource(MaterialCommoditiesMicroResourceList mc, JournalEntry previous) { if (previous?.EventTypeID != JournalTypeEnum.ShipLocker) // if we have a shiplocker before, its been taken off, so don't change. { MaterialCommodityMicroResourceType.EnsurePresent(Resource.Category, Resource.Name, Resource.Name_Localised); mc.Change(EventTimeUTC, Resource.Category, Resource.Name, Resource.Count, Price, MicroResource.ShipLocker); } }
public void UpdateMaterials(MaterialCommoditiesMicroResourceList mc) { if (MaterialsReward != null) { foreach (MaterialRewards m in MaterialsReward) // 7/3/2018 not yet fully proven.. changed in 3.02 { mc.Change(EventTimeUTC, m.Category.Alt("Raw"), m.Name, m.Count, 0); // mats from faction of mission } } }
public void UpdateCommodities(MaterialCommoditiesMicroResourceList mc, bool unusedinsrv) { if (Commodities != null) { foreach (CommodityItem m in Commodities.Commodities) { mc.Change(EventTimeUTC, MaterialCommodityMicroResourceType.CatType.Commodity, m.Name, m.Count, (long)m.BuyPrice, 0, true); } } }
public void UpdateMaterials(MaterialCommoditiesMicroResourceList mc) { if (Materials != null) { foreach (MaterialItem m in Materials.Materials) { mc.Change(EventTimeUTC, m.Category, m.Name, m.Count, 0, 0, true); } } }
} // not for legacy convert public void UpdateMaterials(MaterialCommoditiesMicroResourceList mc) { if (Ingredients != null) { foreach (KeyValuePair <string, int> k in Ingredients) // may be commodities or materials but mostly materials so we put it under this { mc.Craft(EventTimeUTC, k.Key, k.Value); } } }
public void UpdateMicroResource(MaterialCommoditiesMicroResourceList mc, JournalEntry unused) { List <Tuple <string, int> > counts = new List <Tuple <string, int> >(); // System.Diagnostics.Debug.WriteLine("EMBARK, clear out back pack items"); mc.Update(EventTimeUTC, MaterialCommodityMicroResourceType.CatType.Item, counts, MicroResource.BackPack); mc.Update(EventTimeUTC, MaterialCommodityMicroResourceType.CatType.Component, counts, MicroResource.BackPack); mc.Update(EventTimeUTC, MaterialCommodityMicroResourceType.CatType.Consumable, counts, MicroResource.BackPack); mc.Update(EventTimeUTC, MaterialCommodityMicroResourceType.CatType.Data, counts, MicroResource.BackPack); }
public void UpdateCommodities(MaterialCommoditiesMicroResourceList mc) { if (Vessel.Equals("Ship")) // only want ship cargo to change lists.. { if (Inventory != null) { List <Tuple <string, int> > counts = Inventory.Select(x => new Tuple <string, int>(x.Name.ToLower(), x.Count)).ToList(); mc.Update(EventTimeUTC, MaterialCommodityMicroResourceType.CatType.Commodity, counts); } } }
public void UpdateMicroResource(MaterialCommoditiesMicroResourceList mc) { if (Items != null ) { foreach (var m in Items) { MaterialCommodityMicroResourceType.EnsurePresent(m.Category, m.Name, m.Name_Localised); mc.Change(EventTimeUTC, m.Category, m.Name, -m.Count, 0, MicroResource.ShipLocker); } } }
public void UpdateMicroResource(MaterialCommoditiesMicroResourceList mc, JournalEntry previous) // Odyssey from 11/6/21 this comes after shiplocker, so don't change { if (previous?.EventTypeID != JournalTypeEnum.ShipLocker) { foreach (var m in Items.EmptyIfNull()) { MaterialCommodityMicroResourceType.EnsurePresent(m.Category, m.Name, m.Name_Localised); mc.Change(EventTimeUTC, m.Category, m.Name, -m.Count, 0, MicroResource.ShipLocker); } } }
public void UpdateCommodities(MaterialCommoditiesMicroResourceList mc) { // removed update on Commodity/Count (which is unreliable about if you should remove them from cargo) // rely on Cargo to update stats, its emitted directly after MissionCompleted. if (CommodityReward != null) { foreach (CommodityRewards c in CommodityReward) { mc.Change(EventTimeUTC, MaterialCommodityMicroResourceType.CatType.Commodity, c.Name, c.Count, 0); // commodities are traded by faction } } }
public void UpdateCommodities(MaterialCommoditiesMicroResourceList mc) { if (Commodity != null && Count != null && EventTimeUTC < ED32Date) // after this we will rely on Cargo to update us, only safe way to know if something has been stowed { if (DeliveryMissions.StartsWith(FDName, StringComparison.InvariantCultureIgnoreCase) >= 0) // before, we accept only these as mission deliveries { mc.Change(EventTimeUTC, MaterialCommodityMicroResourceType.CatType.Commodity, Commodity, (int)Count, 0); } else { // System.Diagnostics.Debug.WriteLine("{0} Rejected {1} {2} {3}", EventTimeUTC, FDName, Commodity, Count); } } }
public void UpdateMicroResource(MaterialCommoditiesMicroResourceList mc) { foreach (var m in Offered.EmptyIfNull()) { MaterialCommodityMicroResourceType.EnsurePresent(m.Category, m.Name, m.Name_Localised); mc.Change(EventTimeUTC, m.Category, m.Name, -m.Count, 0, MicroResource.ShipLocker); } if ( Received.HasChars()) { MaterialCommodityMicroResourceType.EnsurePresent(Category, Received, Received_Localised); mc.Change(EventTimeUTC, Category, Received, Count, 0, MicroResource.ShipLocker); } }
public void UpdateMaterials(MaterialCommoditiesMicroResourceList mc) { if (Materials != null) { foreach (KeyValuePair <string, int> k in Materials) // may be commodities or materials { mc.Craft(EventTimeUTC, k.Key, k.Value); // same as this, uses up materials } } if (Name.Contains("Limpet", StringComparison.InvariantCultureIgnoreCase)) // hard code limpets mean 1 more cargo of them { mc.Change(EventTimeUTC, MaterialCommodityMicroResourceType.CatType.Commodity, "drones", 1, 0); // ignore faction - synthesis } }
public void UpdateCommodities(MaterialCommoditiesMicroResourceList mc) { if (Transfers != null) { foreach (var t in Transfers) { if (t.Direction.Contains("ship", StringComparison.InvariantCultureIgnoreCase)) // toship, with some leaway to allow fd to change their formatting in future { mc.Change(EventTimeUTC, MaterialCommodityMicroResourceType.CatType.Commodity, t.Type, t.Count, 0); } else { mc.Change(EventTimeUTC, MaterialCommodityMicroResourceType.CatType.Commodity, t.Type, -t.Count, 0); } } } }
public void UpdateMicroResource(MaterialCommoditiesMicroResourceList mc, JournalEntry unused) { if (Added != null) { foreach (var i in Added) { mc.Change(EventTimeUTC, i.Category, i.Name, i.Count, 0, MicroResource.BackPack, false); } } if (Removed != null) { foreach (var i in Removed) { mc.Change(EventTimeUTC, i.Category, i.Name, -i.Count, 0, MicroResource.BackPack, false); } } }
public void UpdateMaterials(MaterialCommoditiesMicroResourceList mc) { if (Raw != null) { List <Tuple <string, int> > counts = Raw.Select(x => new Tuple <string, int>(x.Name.ToLower(), x.Count)).ToList(); mc.Update(EventTimeUTC, MaterialCommodityMicroResourceType.CatType.Raw, counts); } if (Manufactured != null) { List <Tuple <string, int> > counts = Manufactured.Select(x => new Tuple <string, int>(x.Name.ToLower(), x.Count)).ToList(); mc.Update(EventTimeUTC, MaterialCommodityMicroResourceType.CatType.Manufactured, counts); } if (Encoded != null) { List <Tuple <string, int> > counts = Encoded.Select(x => new Tuple <string, int>(x.Name.ToLower(), x.Count)).ToList(); mc.Update(EventTimeUTC, MaterialCommodityMicroResourceType.CatType.Encoded, counts); } }
public void UpdateMicroResource(MaterialCommoditiesMicroResourceList mc, JournalEntry previous) { if (previous?.EventTypeID != JournalTypeEnum.ShipLocker) // if shiplocker is before, its already updated { System.Diagnostics.Debug.WriteLine("Trade - remove offered"); foreach (var m in Offered.EmptyIfNull()) { MaterialCommodityMicroResourceType.EnsurePresent(m.Category, m.Name, m.Name_Localised); mc.Change(EventTimeUTC, m.Category, m.Name, -m.Count, 0, MicroResource.ShipLocker); } System.Diagnostics.Debug.WriteLine("Trade - add received"); if (Received.HasChars()) { MaterialCommodityMicroResourceType.EnsurePresent(Category, Received, Received_Localised); mc.Change(EventTimeUTC, Category, Received, Count, 0, MicroResource.ShipLocker); } } }
int cargoleftdisplay = 0; // used to track what we wrote for cargo private void Display(HistoryEntry he) // at he, see if changed { if (he != null) { JournalTypeEnum[] boundevents = new JournalTypeEnum[] { JournalTypeEnum.Docked, JournalTypeEnum.Undocked, JournalTypeEnum.FSDJump, JournalTypeEnum.CarrierJump, JournalTypeEnum.Touchdown, JournalTypeEnum.Liftoff }; JournalTypeEnum[] miningevents = new JournalTypeEnum[] { JournalTypeEnum.AsteroidCracked, JournalTypeEnum.ProspectedAsteroid, JournalTypeEnum.LaunchDrone, JournalTypeEnum.MiningRefined, JournalTypeEnum.MaterialCollected, JournalTypeEnum.MaterialDiscovered, JournalTypeEnum.MaterialDiscarded }; var newlist = HistoryList.FilterBetween(discoveryform.history.EntryOrder(), he, x => boundevents.Contains(x.EntryType), y => miningevents.Contains(y.EntryType), out HistoryEntry newhebelow, out HistoryEntry newheabove); if (newlist != null) // only if no history would we get null, unlikely since he has been tested, but still.. { int limpetsleft = discoveryform.history.MaterialCommoditiesMicroResources.Get(newheabove.MaterialCommodity, "drones")?.Count ?? 0; int cargo = MaterialCommoditiesMicroResourceList.CargoCount(discoveryform.history.MaterialCommoditiesMicroResources.Get(newheabove.MaterialCommodity)); int cargoleft = newheabove.ShipInformation.CargoCapacity() - cargo; // if no list, or diff no of items (due to new entry) or different start point, we reset and display, else we just quit as current is good if (curlist == null || newlist.Count != curlist.Count || hebelow != newhebelow || limpetsleft != limpetsleftdisplay || cargoleft != cargoleftdisplay) { curlist = newlist; heabove = newheabove; hebelow = newhebelow; limpetsleftdisplay = limpetsleft; cargoleftdisplay = cargoleft; incurrentplay = heabove == discoveryform.history.GetLast && !boundevents.Contains(heabove.EntryType); System.Diagnostics.Debug.WriteLine("Redisplay {0} current {1}", heabove.EntryNumber, incurrentplay); Display(); } return; } } if (curlist != null) // moved outside to no data.. { curlist = null; // fall thru means no data, clear and display heabove = hebelow = null; Display(); } }
public void UpdateCommodities(MaterialCommoditiesMicroResourceList mc, bool unusedinsrv) { mc.Change(EventTimeUTC, MaterialCommodityMicroResourceType.CatType.Commodity, Type, Count, 0); }
private void Display(uint?mcl) // update display. mcl can be null { last_mcl = mcl; DataGridViewColumn sortcolprev = dataGridViewMC.SortedColumn != null ? dataGridViewMC.SortedColumn : dataGridViewMC.Columns[0]; SortOrder sortorderprev = dataGridViewMC.SortedColumn != null ? dataGridViewMC.SortOrder : SortOrder.Ascending; int firstline = dataGridViewMC.SafeFirstDisplayedScrollingRowIndex(); dataGridViewMC.Rows.Clear(); textBoxItems1.Text = textBoxItems2.Text = ""; if (mcl == null) { return; } //System.Diagnostics.Debug.WriteLine("Display mcl " + mcl.GetHashCode()); string filters = GetSetting(dbFilter, "All"); //System.Diagnostics.Debug.WriteLine("Filter is " + filters); string[] filter = filters.SplitNoEmptyStartFinish(';'); bool all = filter.Length > 0 && filter[0] == "All"; bool showzeros = checkBoxShowZeros.Checked; dataViewScrollerPanel.SuspendLayout(); MaterialCommodityMicroResourceType[] allitems = PanelMode == PanelType.Materials ? MaterialCommodityMicroResourceType.GetMaterials(true) : PanelMode == PanelType.MicroResources ? MaterialCommodityMicroResourceType.GetMicroResources(true) : MaterialCommodityMicroResourceType.GetCommodities(true); foreach (MaterialCommodityMicroResourceType mcd in allitems) // we go thru all items.. { if (all || filter.Contains(mcd.FDName)) // and see if they are in the filter { object[] rowobj; MaterialCommodityMicroResource m = discoveryform.history.MaterialCommoditiesMicroResources.Get(mcl.Value, mcd.FDName); // at generation mcl, find fdname. if (showzeros || (m != null && m.NonZero)) // if display zero, or we have some.. { string s = ""; if (PanelMode == PanelType.Materials) { s = Recipes.UsedInRecipesByFDName(mcd.FDName, Environment.NewLine); int limit = mcd.MaterialLimit() ?? 0; rowobj = new[] { mcd.Name, mcd.Shortname, mcd.TranslatedCategory, mcd.TranslatedType + (limit > 0 ? " (" + limit.ToString() + ")" : ""), m != null?m.Count.ToString() : "0", s }; } else if (PanelMode == PanelType.MicroResources) { rowobj = new[] { mcd.Name, mcd.Shortname, mcd.TranslatedCategory, m != null ? m.Counts[0].ToString() : "0", m != null ? m.Counts[1].ToString() : "0" }; } else { s = Recipes.UsedInRecipesByFDName(mcd.FDName, Environment.NewLine); rowobj = new[] { mcd.Name, mcd.TranslatedType, m != null?m.Count.ToString() : "0", m != null?m.Price.ToString("0.#") : "-", s }; } dataGridViewMC.Rows.Add(rowobj); dataGridViewMC.Rows[dataGridViewMC.RowCount - 1].Cells[dataGridViewMC.ColumnCount - 1].ToolTipText = s; dataGridViewMC.Rows[dataGridViewMC.RowCount - 1].Tag = s; } } } dataViewScrollerPanel.ResumeLayout(); dataGridViewMC.Sort(sortcolprev, (sortorderprev == SortOrder.Descending) ? ListSortDirection.Descending : ListSortDirection.Ascending); dataGridViewMC.Columns[sortcolprev.Index].HeaderCell.SortGlyphDirection = sortorderprev; if (firstline >= 0 && firstline < dataGridViewMC.RowCount) { dataGridViewMC.SafeFirstDisplayedScrollingRowIndex(firstline); } var mcllist = discoveryform.history.MaterialCommoditiesMicroResources.Get(mcl.Value); var counts = MaterialCommoditiesMicroResourceList.Count(mcllist); if (PanelMode == PanelType.Materials) { textBoxItems1.Text = counts[(int)MaterialCommodityMicroResourceType.CatType.Encoded].ToString(); textBoxItems2.Text = (counts[(int)MaterialCommodityMicroResourceType.CatType.Raw] + counts[(int)MaterialCommodityMicroResourceType.CatType.Manufactured]).ToString(); } else if (PanelMode == PanelType.MicroResources) { textBoxItems1.Text = (counts[(int)MaterialCommodityMicroResourceType.CatType.Data] + counts[(int)MaterialCommodityMicroResourceType.CatType.Component] + counts[(int)MaterialCommodityMicroResourceType.CatType.Item] + counts[(int)MaterialCommodityMicroResourceType.CatType.Consumable]).ToString(); } else { textBoxItems1.Text = counts[(int)MaterialCommodityMicroResourceType.CatType.Commodity].ToString(); } }
} // found from MCL public void UpdateMaterials(MaterialCommoditiesMicroResourceList mc) { mc.Change(EventTimeUTC, Category, Name, -Count, 0); Total = mc.GetLast(Name)?.Count ?? 0; }
public void UpdateMicroResource(MaterialCommoditiesMicroResourceList mc, JournalEntry unused) // no action, BPC does the work, but mark as MR { }
public JToken NewSRec(EliteDangerousCore.HistoryList hl, string type, int entry) // entry = -1 means latest { HistoryEntry he = hl.EntryOrder()[entry]; JObject response = new JObject(); response["responsetype"] = type; response["entry"] = entry; JObject systemdata = new JObject(); systemdata["System"] = he.System.Name; systemdata["SystemAddress"] = he.System.SystemAddress; systemdata["PosX"] = he.System.X.ToStringInvariant("0.00"); systemdata["PosY"] = he.System.Y.ToStringInvariant("0.00"); systemdata["PosZ"] = he.System.Z.ToStringInvariant("0.00"); systemdata["EDSMID"] = he.System.EDSMID.ToStringInvariant(); systemdata["VisitCount"] = hl.GetVisitsCount(he.System.Name); response["SystemData"] = systemdata; // TBD.. if EDSMID = 0 , we may not have looked at it in the historywindow, do we want to do a lookup? JObject sysstate = new JObject(); hl.ReturnSystemInfo(he, out string allegiance, out string economy, out string gov, out string faction, out string factionstate, out string security); sysstate["State"] = factionstate; sysstate["Allegiance"] = allegiance; sysstate["Gov"] = gov; sysstate["Economy"] = economy; sysstate["Faction"] = faction; sysstate["Security"] = security; sysstate["MarketID"] = he.MarketID; response["EDDB"] = sysstate; var mcl = hl.MaterialCommoditiesMicroResources.Get(he.MaterialCommodity); int cargocount = MaterialCommoditiesMicroResourceList.CargoCount(mcl); string shipname = "N/A", fuel = "N/A", range = "N/A", tanksize = "N/A"; string cargo = cargocount.ToStringInvariant(); ShipInformation si = he.ShipInformation; if (si != null) { shipname = si.ShipFullInfo(cargo: false, fuel: false); if (si.FuelLevel > 0) { fuel = si.FuelLevel.ToStringInvariant("0.#"); } if (si.FuelCapacity > 0) { tanksize = si.FuelCapacity.ToStringInvariant("0.#"); } EliteDangerousCalculations.FSDSpec fsd = si.GetFSDSpec(); if (fsd != null) { EliteDangerousCalculations.FSDSpec.JumpInfo ji = fsd.GetJumpInfo(cargocount, si.ModuleMass() + si.HullMass(), si.FuelLevel, si.FuelCapacity / 2); range = ji.cursinglejump.ToString("N2") + "ly"; } int cargocap = si.CargoCapacity(); if (cargocap > 0) { cargo += "/" + cargocap.ToStringInvariant(); } } JObject ship = new JObject(); ship["Ship"] = shipname; ship["Fuel"] = fuel; ship["Range"] = range; ship["TankSize"] = tanksize; ship["Cargo"] = cargo; ship["Data"] = MaterialCommoditiesMicroResourceList.DataCount(mcl).ToStringInvariant(); ship["Materials"] = MaterialCommoditiesMicroResourceList.MaterialsCount(mcl).ToStringInvariant(); ship["MicroResources"] = MaterialCommoditiesMicroResourceList.MicroResourcesCount(mcl).ToStringInvariant(); response["Ship"] = ship; JObject travel = new JObject(); if (he.isTravelling) { travel["Dist"] = he.TravelledDistance.ToStringInvariant("0.0"); travel["Jumps"] = he.Travelledjumps.ToStringInvariant(); travel["UnknownJumps"] = he.TravelledMissingjump.ToStringInvariant(); travel["Time"] = he.TravelledSeconds.ToString(); } else { travel["Time"] = travel["Jumps"] = travel["Dist"] = ""; } response["Travel"] = travel; response["Bodyname"] = he.WhereAmI; if (he.System.HasCoordinate) // cursystem has them? { response["HomeDist"] = he.System.Distance(EDCommander.Current.HomeSystemIOrSol).ToString("0.##"); response["SolDist"] = he.System.Distance(0, 0, 0).ToString("0.##"); } else { response["SolDist"] = response["HomeDist"] = "-"; } response["GameMode"] = he.GameModeGroup; response["Credits"] = he.Credits.ToStringInvariant(); response["Commander"] = EDCommander.Current.Name; response["Mode"] = he.TravelState.ToString(); return(response); }