Archived
1
0

Compare commits

..

16 Commits

24 changed files with 415 additions and 55 deletions

View File

@@ -1,4 +1,5 @@
using System; using System;
using System.Linq;
namespace NonaBGS.BGS { namespace NonaBGS.BGS {
public class CombatZone : LogEntry, IComparable { public class CombatZone : LogEntry, IComparable {
@@ -24,7 +25,8 @@ namespace NonaBGS.BGS {
} }
public override string ToString() { public override string ToString() {
return string.Format("Won {0} x {1} {2} Combat Zone(s)", Amount, Type, Grade); return string.Format("Won {0} x {1} {2} Combat Zone(s) for {3}",
Amount, Grade, Type, Faction);
} }
} }
} }

View File

@@ -37,7 +37,9 @@ namespace NonaBGS.BGS {
} }
public override string ToString() { public override string ToString() {
return string.Format("Faction Kill Bonds: {0}", Credits.FormatCredits(TotalSum)); return string.Format("Faction Kill Bonds: {0} against {1}",
Credits.FormatCredits(TotalSum),
VictimFaction);
} }
} }
} }

View File

@@ -7,10 +7,20 @@ namespace NonaBGS.BGS {
public class LogEntry : IComparable<LogEntry> { public class LogEntry : IComparable<LogEntry> {
private List<Entry> entries = new List<Entry>(); private List<Entry> entries = new List<Entry>();
/// <summary>
/// Controlling faction of the station this entry was made/turned into.
/// </summary>
public string ControllingFaction { get; set; } = "";
public List<Entry> Entries => entries; public List<Entry> Entries => entries;
public string Station { get; set; } public string Station { get; set; }
public string System { get; set; } public string System { get; set; }
public string Faction { get; set; } public string Faction { get; set; }
/// <summary>
/// Whether this entry was manually added. Manually added entries are not deleted
/// when a new scan is made. Instead they are preserved.
/// </summary>
public bool ManuallyAdded { get; set; }
/// <summary> /// <summary>
/// Whether this entry only benefits the controlling faction or not, default: no /// Whether this entry only benefits the controlling faction or not, default: no

View File

@@ -40,7 +40,27 @@ namespace NonaBGS.BGS {
} }
return string.Format("Sold {0} page(s) worth of universal cartographics\n" + return string.Format("Sold {0} page(s) worth of universal cartographics\n" +
"(Total value: {1} CR)\n", pages, sum); "(Total value: {1})\n", pages, Credits.FormatCredits(sum));
}
private string BuildCargoSold(Objective objective) {
StringBuilder builder = new StringBuilder();
SellCargo[] sold = objective.LogEntries
.OfType<SellCargo>()
.ToArray()
;
if (sold == null && sold.Length > 0) {
return builder.ToString();
}
foreach (SellCargo sell in sold) {
builder.AppendFormat("{0}\n", sell.ToString());
}
builder.AppendFormat("\n");
return builder.ToString();
} }
private string BuildMicroResourcesSold(Objective objective) { private string BuildMicroResourcesSold(Objective objective) {
@@ -54,7 +74,8 @@ namespace NonaBGS.BGS {
return ""; return "";
} }
return string.Format("Sold {0} CR worth of Micro Resources\n", sum); return string.Format("Sold {0} worth of Micro Resources\n",
Credits.FormatCredits(sum));
} }
private string BuildKillBonds(Objective objective) { private string BuildKillBonds(Objective objective) {
@@ -91,7 +112,7 @@ namespace NonaBGS.BGS {
foreach (var mission in missions) { foreach (var mission in missions) {
var m = mission as Vouchers; var m = mission as Vouchers;
builder.AppendFormat("Handed in {0} vouchers for {1}\n", m.Type, m.Faction); builder.AppendFormat("Handed in {0} vouchers for {1}\n", m.Type, m.Faction);
builder.AppendFormat("(Total value: {0} CR)\n", m.TotalSum); builder.AppendFormat("(Total value: {0})\n", Credits.FormatCredits(m.TotalSum));
builder.AppendFormat("\n"); builder.AppendFormat("\n");
} }
@@ -199,6 +220,9 @@ namespace NonaBGS.BGS {
var micro = BuildMicroResourcesSold(objective); var micro = BuildMicroResourcesSold(objective);
entries.Append(micro); entries.Append(micro);
var sold = BuildCargoSold(objective);
entries.Append(sold);
log.Append(entries.ToString().Trim()); log.Append(entries.ToString().Trim());
log.Append("\n```\n"); log.Append("\n```\n");
} }

View File

@@ -16,6 +16,12 @@ namespace NonaBGS.BGS {
get => entries; get => entries;
set => entries = value; set => entries = value;
} }
public void Clear() {
if (entries == null) {
return;
}
entries.RemoveAll(x => !x.ManuallyAdded);
}
public int Matches(LogEntry e) { public int Matches(LogEntry e) {
int match_count = 0; int match_count = 0;

View File

@@ -35,7 +35,8 @@ namespace NonaBGS.BGS {
e.Is(Events.MultiSellExplorationData) || e.Is(Events.MultiSellExplorationData) ||
e.Is(Events.SellMicroResources) || e.Is(Events.SellMicroResources) ||
e.Is(Events.RedeemVoucher) || e.Is(Events.RedeemVoucher) ||
e.Is(Events.FactionKillBond) e.Is(Events.FactionKillBond) ||
e.Is(Events.MarketSell)
; ;
} }
@@ -53,7 +54,7 @@ namespace NonaBGS.BGS {
string current_station = null; string current_station = null;
string controlling_faction = null; string controlling_faction = null;
this.objectives.ForEach(x => x.LogEntries.Clear()); objectives.ForEach(x => x.Clear());
foreach (var e in relevant) { foreach (var e in relevant) {
LogEntry entry = null; LogEntry entry = null;
@@ -92,19 +93,25 @@ namespace NonaBGS.BGS {
entry.Entries.Add(e); entry.Entries.Add(e);
entry.System = current_system; entry.System = current_system;
entry.Station = current_station; entry.Station = current_station;
entry.Faction = controlling_faction; entry.Faction = (e as RedeemVoucherEntry).Factions.FirstOrDefault() ?? "";
entry.ControllingFaction = controlling_faction;
collate = true;
} else if (e.Is(Events.FactionKillBond)) {
entry = new FactionKillBonds();
entry.Entries.Add(e);
entry.System = current_system;
entry.Station = current_station;
entry.Faction = (e as FactionKillBondEntry).AwardingFaction;
collate = true; collate = true;
} else if (e.Is(Events.SellMicroResources)) { } else if (e.Is(Events.SellMicroResources)) {
entry = new SellMicroResources(current_system, current_station); entry = new SellMicroResources() {
Faction = controlling_faction,
Station = current_station,
System = current_system
};
entry.Entries.Add(e);
} else if (e.Is(Events.MarketSell)) {
entry = new SellCargo() {
Faction = controlling_faction,
Station = current_station,
System = current_system
};
entry.Entries.Add(e); entry.Entries.Add(e);
} }
@@ -136,12 +143,14 @@ namespace NonaBGS.BGS {
LogEntry existing = null; LogEntry existing = null;
try { existing = objective.LogEntries.Find(x => {
existing = objective.LogEntries.Find(x => x.CompareTo(entry) == 0); try {
} catch (NotImplementedException) { return x.CompareTo(entry) == 0;
// Equivalent to not having found anything } catch (NotImplementedException) {
existing = null; return false;
} }
});
if (collate && existing != null) { if (collate && existing != null) {
existing.Entries.Add(e); existing.Entries.Add(e);
} else if (!collate || existing == null) { } else if (!collate || existing == null) {

31
BGS/SellCargo.cs Normal file
View File

@@ -0,0 +1,31 @@
using System.Text;
using System.Linq;
using EDJournal;
namespace NonaBGS.BGS {
public class SellCargo : LogEntry {
public override string ToString() {
StringBuilder builder = new StringBuilder();
var sold = Entries.OfType<MarketSellEntry>().ToArray();
if (sold == null || sold.Length == 0) {
return builder.ToString();
}
foreach (MarketSellEntry sell in sold) {
builder.AppendFormat("Sold {0} {1} to the {2}\n",
sell.Count,
sell.Type,
sell.BlackMarket ? "Black Market" : "Commodity Market"
);
}
return builder.ToString().Trim();
}
/// <summary>
/// Selling resources to a market only helps the controlling faction
/// </summary>
public override bool OnlyControllingFaction => true;
}
}

View File

@@ -3,11 +3,6 @@ using EDJournal;
namespace NonaBGS.BGS { namespace NonaBGS.BGS {
public class SellMicroResources : LogEntry { public class SellMicroResources : LogEntry {
public SellMicroResources(string system, string station) {
System = system;
Station = station;
}
public int TotalSum { public int TotalSum {
get { get {
return Entries return Entries

View File

@@ -23,7 +23,13 @@ namespace NonaBGS.BGS {
.GroupBy(x => (x as RedeemVoucherEntry).Type) .GroupBy(x => (x as RedeemVoucherEntry).Type)
.Select(x => x.Key) .Select(x => x.Key)
.First(); .First();
type = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(v); if (v == "CombatBond") {
type = "Combat Bond";
} else if (v == "bounty") {
type = "Bounty";
} else {
type = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(v);
}
} }
return type; return type;
@@ -46,10 +52,5 @@ namespace NonaBGS.BGS {
public override string ToString() { public override string ToString() {
return string.Format("{0} Vouchers: {1}", Type, Credits.FormatCredits(TotalSum)); return string.Format("{0} Vouchers: {1}", Type, Credits.FormatCredits(TotalSum));
} }
/// <summary>
/// Vouchers only help the controlling faction
/// </summary>
public override bool OnlyControllingFaction => true;
} }
} }

View File

@@ -5,7 +5,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:NonaBGS" xmlns:local="clr-namespace:NonaBGS"
mc:Ignorable="d" mc:Ignorable="d"
Title="Add Combat Zone Wins" Height="150" Width="370" WindowStartupLocation="CenterOwner"> Title="Add Combat Zone Wins" Height="150" Width="370" Icon="NONA.ico" WindowStartupLocation="CenterOwner">
<Grid> <Grid>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
@@ -25,7 +25,7 @@
<RowDefinition Height="*"/> <RowDefinition Height="*"/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<ComboBox x:Name="type" Grid.Column="0" VerticalAlignment="Top" Width="Auto" IsReadOnly="True" Height="23" Margin="5" SelectedIndex="0"> <ComboBox x:Name="type" Grid.Column="0" VerticalAlignment="Top" Width="Auto" IsReadOnly="True" Height="23" Margin="5" SelectedIndex="0">
<ComboBoxItem Content="Space"/> <ComboBoxItem Content="Ship"/>
<ComboBoxItem Content="On Foot"/> <ComboBoxItem Content="On Foot"/>
</ComboBox> </ComboBox>
<ComboBox x:Name="grade" Grid.Column="1" VerticalAlignment="Top" IsReadOnly="True" Margin="5" Height="23" Width="Auto" SelectedIndex="0"> <ComboBox x:Name="grade" Grid.Column="1" VerticalAlignment="Top" IsReadOnly="True" Margin="5" Height="23" Width="Auto" SelectedIndex="0">

View File

@@ -7,7 +7,7 @@
xmlns:local="clr-namespace:NonaBGS" xmlns:local="clr-namespace:NonaBGS"
xmlns:BGS="clr-namespace:NonaBGS.BGS" xmlns:Util="clr-namespace:NonaBGS.Util" d:DataContext="{d:DesignInstance Type=Util:AppConfig}" x:Name="window" x:Class="NonaBGS.MainWindow" xmlns:BGS="clr-namespace:NonaBGS.BGS" xmlns:Util="clr-namespace:NonaBGS.Util" d:DataContext="{d:DesignInstance Type=Util:AppConfig}" x:Name="window" x:Class="NonaBGS.MainWindow"
mc:Ignorable="d" mc:Ignorable="d"
Title="Nova Navy BGS Helper" Height="513.8" Width="885.658"> Title="Nova Navy BGS Helper" Height="520" Width="890" Icon="NONA.ico">
<Grid> <Grid>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
@@ -64,7 +64,7 @@
<ToolBar HorizontalAlignment="Left" Height="36" VerticalAlignment="Top" Width="Auto"> <ToolBar HorizontalAlignment="Left" Height="36" VerticalAlignment="Top" Width="Auto">
<Button x:Name="GenerateDiscord" Content="Genereate Discord Report" VerticalAlignment="Center" Margin="0,0,0,4.857" Click="GenerateDiscord_Click" Height="26"/> <Button x:Name="GenerateDiscord" Content="Genereate Discord Report" VerticalAlignment="Center" Margin="0,0,0,4.857" Click="GenerateDiscord_Click" Height="26"/>
</ToolBar> </ToolBar>
<TextBox x:Name="DiscordLog" Height="Auto" Margin="0,0,-0.285,-0.429" TextWrapping="Wrap" FontFamily="Consolas" FontSize="14" Grid.Row="1" Grid.ColumnSpan="2"/> <TextBox x:Name="DiscordLog" Height="Auto" TextWrapping="Wrap" FontFamily="Consolas" FontSize="14" Grid.Row="1" Grid.ColumnSpan="2" AcceptsReturn="True" AcceptsTab="True"/>
</Grid> </Grid>
</TabItem> </TabItem>
<TabItem Header="Settings" HorizontalAlignment="Left" Height="20" VerticalAlignment="Top" Width="53.7142857142857"> <TabItem Header="Settings" HorizontalAlignment="Left" Height="20" VerticalAlignment="Top" Width="53.7142857142857">

View File

@@ -264,6 +264,7 @@ namespace NonaBGS {
CombatZone zone = new CombatZone(); CombatZone zone = new CombatZone();
zone.ManuallyAdded = true;
zone.Faction = objective.Faction; zone.Faction = objective.Faction;
zone.System = objective.System; zone.System = objective.System;
zone.Station = objective.Station; zone.Station = objective.Station;

BIN
NONA.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 KiB

View File

@@ -5,7 +5,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:NonaBGS" xmlns:local="clr-namespace:NonaBGS"
mc:Ignorable="d" mc:Ignorable="d"
Title="Progress" Height="100" Width="450"> Title="Progress" Height="100" Width="450" Icon="NONA.ico">
<Grid> <Grid>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="*" /> <ColumnDefinition Width="*" />

View File

@@ -1,6 +1,6 @@
# NonaBGS # NonaBGS
This tool is meant to help people contributing to the Novay Navy BGS effor to create This tool is meant to help people contributing to the Nova Navy BGS effor to create
BGS reports. The tool allows you to configure BGS objectives, and will then parse your BGS reports. The tool allows you to configure BGS objectives, and will then parse your
player journal for tasks you completed relating to that BGS objective. Once the JSON player journal for tasks you completed relating to that BGS objective. Once the JSON
player journal has been parsed, you may then generate a BGS report for the Nova Navy player journal has been parsed, you may then generate a BGS report for the Nova Navy
@@ -8,7 +8,7 @@ discord.
Source code is available [here](https://git.aror.org/florian/nonabgs). Source code is available [here](https://git.aror.org/florian/nonabgs).
Binary downloads can be found here: [https://bgs.aror.org/](https://bgs.aror.org/). Binary downloads can be found here: [https://bgs.n0la.org/](https://bgs.n0la.org/).
## How To ## How To
@@ -27,11 +27,19 @@ recognises the following completed tasks:
* Vouchers, including bounty vouchers, combat bonds, and settlement vouchers (aka intel packages) * Vouchers, including bounty vouchers, combat bonds, and settlement vouchers (aka intel packages)
* Selling of micro resources (Odyssey only) * Selling of micro resources (Odyssey only)
* Selling cartography data * Selling cartography data
* Selling of cargo to stations
Please note that cartography data, micro resources, and vouchers only help the controlling faction Please note that cartography data, and micro resources only help the controlling faction
of a station. The tool is clever enough to exclude these if the station you turn them in at, is not of a station. The tool is clever enough to exclude these if the station you turn them in at, is not
controlled by the faction you specified in the objective. controlled by the faction you specified in the objective.
There is no entry in the journal if you win a combat zone. So you have to add those manually. Select
an objective for which you wish to log a combat zone. The faction in the objective, must be the
faction you fought for in the combat zone. Then click "Add Combat Zone Win". Select type,
either "On Foot" for Odyssey, or "Ship" for regular ones. Then select the grade (low, medium or
high), and how many you won. Then press "Accept". Select "Cancel" to abort. You can of course remove
the combat zone entries by selecting them, and pressing "DEL".
![Main Window with entries](main-entries.png) ![Main Window with entries](main-entries.png)
The window will then list all the journal entries it has found, and group them by objectives. You The window will then list all the journal entries it has found, and group them by objectives. You
@@ -46,6 +54,41 @@ The resulting discord report is kept in the Nova Navy format. Before you copy/pa
Nova Navy discord, you should check the log. You can of course edit it, if something is wrong Nova Navy discord, you should check the log. You can of course edit it, if something is wrong
or the tool itself missed something. or the tool itself missed something.
## Known Issues and Bugs
Settlement vouchers (aka Intel Packages) help every faction aligned with the given superpower.
So if you turn in an Imperial intel package on an imperial station, all factions aligned with
the Empire will gain a bit of INF boost. The tool currently cannot handle that. All intel packages
are displayed instead.
Sometimes bounty vouchers are not properly recognised. This is a bug in the player journal, where
the faction information is not properly written out in the journal:
```
{
"timestamp":"2021-10-07T14:57:50Z", "event":"RedeemVoucher",
"Type":"bounty", "Amount":20750,
"Factions":[ { "Faction":"", "Amount":500 }, { "Faction":"", "Amount":20250 }]
}
```
Since the tool does not know for which faction these bounties were redeemed for, it cannot assign
it to an objective.
The player journal currently does not make an entry when you win or lose a combat zone. This is a
an ommission from FDev:
* [https://issues.frontierstore.net/issue-detail/43509](https://issues.frontierstore.net/issue-detail/43509)
Please upvote the issue to get it fixed. Until then, you have to add combat zone wins manually.
Also missions accepted from NPCs in Odyssey concourses do not get a player journal entry. This is
also an ommission from FDev:
* [https://issues.frontierstore.net/issue-detail/43586](https://issues.frontierstore.net/issue-detail/43586)
Until this is fixed, please edit the resulting BGS log text, and manually add such entries.
## Use EDDB information ## Use EDDB information
NonaBGS can download information from EDDB to auto complete system- and station names. You can NonaBGS can download information from EDDB to auto complete system- and station names. You can
@@ -65,6 +108,16 @@ helpful if you included the JSON player journal. This player journal can be foun
%userprofile%\saved Games\Frontier Developments\Elite Dangerous\ %userprofile%\saved Games\Frontier Developments\Elite Dangerous\
``` ```
## Build Dependencies
Handling of Elite Dangerous player journals have been moved to a separate project called `EDJournal`.
Its source can be found [here](https://git.aror.org/florian/edjournal). This project simply depends
on the binary DLL that `EDJournal` builds.
The project also requires `Ookii.Dialogs.WPF` controls, which contains the auto complete text box.
And of course, `Newtonsoft.Json` as the JSON parser.
## About ## About
This tool was made by CMDR Hekateh (Discord: `nola#2457`) of the Nova Navy. This tool was made by CMDR Hekateh (Discord: `nola#2457`) of the Nova Navy.

73
Resources.Designer.cs generated Normal file
View File

@@ -0,0 +1,73 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace NonaBGS {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("NonaBGS.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
/// </summary>
internal static System.Drawing.Icon NONA {
get {
object obj = ResourceManager.GetObject("NONA", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
}
}

124
Resources.resx Normal file
View File

@@ -0,0 +1,124 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="NONA" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\NONA.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

BIN
Resources/NONA.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 KiB

View File

@@ -1,9 +1,4 @@
using System; using System.ComponentModel;
using System.ComponentModel;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace NonaBGS.Util { namespace NonaBGS.Util {
public class AppConfig : INotifyPropertyChanged { public class AppConfig : INotifyPropertyChanged {

BIN
logo_v4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
logo_v4_bg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 92 KiB

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 64 KiB

View File

@@ -7,7 +7,7 @@
<ProjectGuid>{73BFB315-C808-40E7-8D69-B651F875880C}</ProjectGuid> <ProjectGuid>{73BFB315-C808-40E7-8D69-B651F875880C}</ProjectGuid>
<OutputType>WinExe</OutputType> <OutputType>WinExe</OutputType>
<RootNamespace>NonaBGS</RootNamespace> <RootNamespace>NonaBGS</RootNamespace>
<AssemblyName>nonabgs</AssemblyName> <AssemblyName>NonaBGS</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion> <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
@@ -37,11 +37,15 @@
<PropertyGroup> <PropertyGroup>
<StartupObject>NonaBGSApplication</StartupObject> <StartupObject>NonaBGSApplication</StartupObject>
</PropertyGroup> </PropertyGroup>
<PropertyGroup>
<ApplicationIcon>NONA.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="AutoCompleteTextBox, Version=1.1.1.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="AutoCompleteTextBox, Version=1.1.1.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>packages\AutoCompleteTextBox.1.1.1\lib\net472\AutoCompleteTextBox.dll</HintPath> <HintPath>packages\AutoCompleteTextBox.1.1.1\lib\net472\AutoCompleteTextBox.dll</HintPath>
</Reference> </Reference>
<Reference Include="EDJournal"> <Reference Include="EDJournal, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\edjournal\bin\Debug\EDJournal.dll</HintPath> <HintPath>..\edjournal\bin\Debug\EDJournal.dll</HintPath>
</Reference> </Reference>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
@@ -75,10 +79,16 @@
</ApplicationDefinition> </ApplicationDefinition>
<Compile Include="BGS\DiscordLogGenerator.cs" /> <Compile Include="BGS\DiscordLogGenerator.cs" />
<Compile Include="BGS\NonaDiscordLog.cs" /> <Compile Include="BGS\NonaDiscordLog.cs" />
<Compile Include="BGS\SellCargo.cs" />
<Compile Include="BGS\SellMicroResources.cs" /> <Compile Include="BGS\SellMicroResources.cs" />
<Compile Include="BGS\FactionKillBonds.cs" /> <Compile Include="BGS\FactionKillBonds.cs" />
<Compile Include="EDDB\PopulatedSystems.cs" /> <Compile Include="EDDB\PopulatedSystems.cs" />
<Compile Include="EDDB\Stations.cs" /> <Compile Include="EDDB\Stations.cs" />
<Compile Include="Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="UI\StationSuggestionProvider.cs" /> <Compile Include="UI\StationSuggestionProvider.cs" />
<Compile Include="UI\SystemSuggestionProvider.cs" /> <Compile Include="UI\SystemSuggestionProvider.cs" />
<Compile Include="Util\AppConfig.cs" /> <Compile Include="Util\AppConfig.cs" />
@@ -132,6 +142,10 @@
<DependentUpon>Settings.settings</DependentUpon> <DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput> <DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile> </Compile>
<EmbeddedResource Include="Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx"> <EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator> <Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput> <LastGenOutput>Resources.Designer.cs</LastGenOutput>
@@ -141,22 +155,42 @@
<Generator>SettingsSingleFileGenerator</Generator> <Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput> <LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None> </None>
<None Include="README.md" /> <None Include="README.md">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="App.config" /> <None Include="App.config" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Resource Include="main-objectives.png" /> <Resource Include="main-objectives.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Resource>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Resource Include="main-entries.png" /> <Resource Include="main-entries.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Resource>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Resource Include="main-report.png" /> <Resource Include="main-report.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Resource>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Resource Include="LICENCE.txt" /> <Resource Include="LICENCE.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Resource>
</ItemGroup>
<ItemGroup>
<Resource Include="logo_v4.png" />
<Resource Include="logo_v4_bg.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\NONA.ico" />
</ItemGroup>
<ItemGroup>
<Resource Include="NONA.ico" />
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project> </Project>