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);
     }
 }
Esempio n. 3
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);
            }
        }
Esempio n. 4
0
        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);
            }
        }
Esempio n. 5
0
 public void UpdateCommodities(MaterialCommoditiesMicroResourceList mc, bool unusedinsrv)
 {
     if (Type.Equals("Commodity"))
     {
         mc.Change(EventTimeUTC, MaterialCommodityMicroResourceType.CatType.Commodity, Commodity, -Quantity, 0);
     }
 }
Esempio n. 6
0
 public void UpdateMaterials(MaterialCommoditiesMicroResourceList mc)
 {
     if (Type.Equals("Materials"))
     {
         mc.Change(EventTimeUTC, MaterialCommodityMicroResourceType.CatType.Raw, Material, -Quantity, 0);
     }
 }
Esempio n. 7
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);
     }
 }
Esempio n. 8
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);
     }
 }
Esempio n. 9
0
 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
         }
     }
 }
Esempio n. 10
0
 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);
         }
     }
 }
Esempio n. 11
0
 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);
         }
     }
 }
Esempio n. 12
0
        }                                                               // 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);
                }
            }
        }
Esempio n. 13
0
        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);
         }
     }
 }
Esempio n. 16
0
 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);
         }
     }
 }
Esempio n. 17
0
        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
                }
            }
        }
Esempio n. 18
0
 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);
            }
        }
Esempio n. 20
0
        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);
             }
         }
     }
 }
Esempio n. 22
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);
         }
     }
 }
Esempio n. 23
0
 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);
     }
 }
Esempio n. 24
0
        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);
 }
Esempio n. 27
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();
            }
        }
Esempio n. 28
0
        }                                   // found from MCL

        public void UpdateMaterials(MaterialCommoditiesMicroResourceList mc)
        {
            mc.Change(EventTimeUTC, Category, Name, -Count, 0);
            Total = mc.GetLast(Name)?.Count ?? 0;
        }
Esempio n. 29
0
 public void UpdateMicroResource(MaterialCommoditiesMicroResourceList mc, JournalEntry unused)    // no action, BPC does the work, but mark as MR
 {
 }
Esempio n. 30
0
        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);
        }