Optimized implementation

This commit is contained in:
2022-07-16 15:32:57 +08:00
parent 7e57154809
commit f9f7004130
18 changed files with 547 additions and 829 deletions

View File

@ -26,13 +26,14 @@ using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Text.Json;
using GrasscutterTools.DispatchServer;
using GrasscutterTools.Game;
using GrasscutterTools.GOOD;
using GrasscutterTools.OpenCommand;
using GrasscutterTools.Properties;
using GrasscutterTools.Utils;
using Newtonsoft.Json;
namespace GrasscutterTools.Forms
{
@ -210,75 +211,51 @@ namespace GrasscutterTools.Forms
OpenFileDialog openFileDialog1 = new OpenFileDialog();
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
if (DialogResult.Yes != MessageBox.Show(Resources.GOODImportText + openFileDialog1.FileName + "?",
Resources.GOODImportTitle, MessageBoxButtons.YesNo))
return;
try
{
DialogResult dr = MessageBox.Show(Resources.GOODImportText + openFileDialog1.FileName + "?",
Resources.GOODImportTitle, MessageBoxButtons.YesNo);
switch (dr)
{
case DialogResult.Yes:
break;
case DialogResult.No:
return;
}
var sr = new StreamReader(openFileDialog1.FileName);
var commands_list = new List<String>();
var doc = JsonDocument.Parse(sr.ReadToEnd());
GOOD.GOOD good = JsonConvert.DeserializeObject<GOOD.GOOD>(File.ReadAllText(openFileDialog1.FileName));
var commands_list = new List<string>();
JsonElement characters = doc.RootElement.GetProperty("characters");
foreach (JsonElement character in characters.EnumerateArray())
foreach (var character in good.Characters)
{
var character_name = character.GetProperty("key").GetString();
var character_level = character.GetProperty("level").GetInt32().ToString();
var character_constellation = character.GetProperty("constellation").GetInt32().ToString();
if (character_name != "Traveler")
if (character.Name != "Traveler")
{
var character_id = GameData.GOODAvatars[character_name]; // TODO: build separate GOOD-compatible database
commands_list.Add("/give " + character_id + " lv" + character_level + "c" + character_constellation);
var character_id = GOODData.Avatars[character.Name];
commands_list.Add("/give " + character_id + " lv" + character.Level + "c" + character.Constellation);
// TODO: Implement command to set talent level when giving character in Grasscutter
}
}
JsonElement weapons = doc.RootElement.GetProperty("weapons");
foreach (JsonElement weapon in weapons.EnumerateArray())
foreach (var weapon in good.Weapons)
{
var weapon_name = weapon.GetProperty("key").GetString();
var weapon_level = weapon.GetProperty("level").GetInt32().ToString();
var weapon_refinement = weapon.GetProperty("refinement").GetInt32().ToString();
var weapon_id = GameData.GOODWeapons[weapon_name];
commands_list.Add("/give " + weapon_id + " lv" + weapon_level + "r" + weapon_refinement);
var weapon_id = GOODData.Weapons[weapon.Name];
commands_list.Add("/give " + weapon_id + " lv" + weapon.Level + "r" + weapon.RefinementLevel);
// TODO: Implement command to give weapon directly to character in Grasscutter
}
JsonElement artifacts = doc.RootElement.GetProperty("artifacts");
foreach (JsonElement artifact in artifacts.EnumerateArray())
foreach (var artifact in good.Artifacts)
{
var artifact_set = artifact.GetProperty("setKey").GetString();
var artifact_slot = artifact.GetProperty("slotKey").GetString();
var artifact_rarity = artifact.GetProperty("rarity").GetInt32();
var artifact_level = artifact.GetProperty("level").GetInt32().ToString();
var artifact_mainStat = artifact.GetProperty("mainStatKey").GetString();
var artifact_slot_map = new Dictionary<string, string> {
{"goblet", "1"}, {"plume", "2"}, {"circlet", "3"}, {"flower", "4"}, {"sands", "5"}
};
// Format: set rarity slot
var artifact_id = GameData.GOODArtifactCats[artifact_set].ToString() + artifact_rarity.ToString() + artifact_slot_map[artifact_slot] + "4";
var artifact_mainStat_id = GameData.GOODArtifactMainAttribution[artifact_mainStat];
var artifact_id = GOODData.ArtifactCats[artifact.SetName].ToString() + artifact.Rarity.ToString() + artifact_slot_map[artifact.GearSlot] + "4";
var artifact_mainStat_id = GOODData.ArtifactMainAttribution[artifact.MainStat];
var artifact_substats = "";
var artifact_substat_prefix = artifact_rarity + "0";
var artifact_substat_prefix = artifact.Rarity + "0";
int substat_count = 0;
foreach (JsonElement substat in artifact.GetProperty("substats").EnumerateArray())
foreach (var substat in artifact.SubStats)
{
var substat_value = substat.GetProperty("value").GetDouble();
if (substat_value == 0)
if (substat.Value <= 0)
continue;
substat_count++;
var substat_key = substat.GetProperty("key").GetString();
var substat_key_id = GameData.GOODArtifactSubAttribution[substat_key];
var substat_indices = ArtifactUtils.SplitSubstats(substat_key, artifact_rarity, substat_value);
var substat_key = substat.Stat;
var substat_key_id = GOODData.ArtifactSubAttribution[substat_key];
var substat_indices = ArtifactUtils.SplitSubstats(substat_key, artifact.Rarity, substat.Value);
foreach(int index in substat_indices)
{
@ -288,35 +265,12 @@ namespace GrasscutterTools.Forms
// HACK: Add def+2 substat to counteract Grasscutter automatically adding another substat
if (substat_count == 4)
{
artifact_substats += "101081 ";
}
commands_list.Add("/give " + artifact_id + " lv" + artifact_level + " " + artifact_mainStat_id + " " + artifact_substats);
commands_list.Add("/give " + artifact_id + " lv" + artifact.Level + " " + artifact_mainStat_id + " " + artifact_substats);
// TODO: Implement command to give artifact directly to character in Grasscutter
}
ExpandCommandRunLog();
foreach (string command in commands_list)
{
TxtCommandRunLog.AppendText(">");
TxtCommandRunLog.AppendText(command);
TxtCommandRunLog.AppendText(Environment.NewLine);
try
{
var msg = await OC.Invoke(command.Substring(1));
TxtCommandRunLog.AppendText(string.IsNullOrEmpty(msg) ? "OK" : msg);
TxtCommandRunLog.AppendText(Environment.NewLine);
}
catch (Exception ex)
{
TxtCommandRunLog.AppendText("Error: ");
TxtCommandRunLog.AppendText(ex.Message);
TxtCommandRunLog.AppendText(Environment.NewLine);
MessageBox.Show(ex.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
break;
}
TxtCommandRunLog.ScrollToCaret();
}
await RunCommands(commands_list.ToArray());
MessageBox.Show(Resources.GOODImportSuccess);
}
catch (SecurityException ex)
@ -1217,31 +1171,37 @@ namespace GrasscutterTools.Forms
private async void BtnInvokeOpenCommand_Click(object sender, EventArgs e)
{
if (OC == null || !OC.CanInvoke)
{
ShowTip(Resources.RequireOpenCommandTip, BtnInvokeOpenCommand);
TCMain.SelectedTab = TPRemoteCall;
return;
}
if (TxtCommand.Text.Length < 2)
{
ShowTip(Resources.CommandContentCannotBeEmpty, TxtCommand);
return;
}
await RunCommands(TxtCommand.Text);
}
private async Task<bool> RunCommands(params string[] commands)
{
if (OC == null || !OC.CanInvoke)
{
ShowTip(Resources.RequireOpenCommandTip, BtnInvokeOpenCommand);
TCMain.SelectedTab = TPRemoteCall;
return false;
}
ExpandCommandRunLog();
BtnInvokeOpenCommand.Enabled = false;
BtnInvokeOpenCommand.Cursor = Cursors.WaitCursor;
foreach (var command in commands)
{
TxtCommandRunLog.AppendText(">");
TxtCommandRunLog.AppendText(TxtCommand.Text);
TxtCommandRunLog.AppendText(command);
TxtCommandRunLog.AppendText(Environment.NewLine);
var cmd = TxtCommand.Text.Substring(1);
var btn = sender as Button;
btn.Enabled = false;
var cmd = command.Substring(1);
try
{
var msg = await OC.Invoke(cmd);
TxtCommandRunLog.AppendText(string.IsNullOrEmpty(msg) ? "OK" : msg);
TxtCommandRunLog.AppendText(Environment.NewLine);
//ShowTip(string.IsNullOrEmpty(msg) ? "OK" : msg, btn);
}
catch (Exception ex)
{
@ -1249,10 +1209,13 @@ namespace GrasscutterTools.Forms
TxtCommandRunLog.AppendText(ex.Message);
TxtCommandRunLog.AppendText(Environment.NewLine);
MessageBox.Show(ex.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
TxtCommandRunLog.ScrollToCaret();
btn.Cursor = Cursors.Default;
btn.Enabled = true;
}
BtnInvokeOpenCommand.Cursor = Cursors.Default;
BtnInvokeOpenCommand.Enabled = true;
return true;
}
private const int TxtCommandRunLogMinHeight = 150;

View File

@ -0,0 +1,94 @@
/**
* Grasscutter Tools
* Copyright (C) 2022 jie65535
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
**/
using Newtonsoft.Json;
namespace GrasscutterTools.GOOD
{
/// <summary>
/// Artifact data representation
/// Doc: https://frzyc.github.io/genshin-optimizer/#/doc
/// Modified from https://github.com/Andrewthe13th/Inventory_Kamera/blob/master/InventoryKamera/game/Artifact.cs
/// </summary>
public class Artifact
{
/// <summary>
/// e.g. "GladiatorsFinale"
/// </summary>
[JsonProperty("setKey")]
public string SetName { get; set; }
/// <summary>
/// //e.g. "plume"
/// type SlotKey = "flower" | "plume" | "sands" | "goblet" | "circlet"
/// </summary>
[JsonProperty("slotKey")]
public string GearSlot { get; set; }
/// <summary>
/// 1-5 inclusive
/// </summary>
[JsonProperty("rarity")]
public int Rarity { get; set; }
/// <summary>
/// mainStatKey
/// </summary>
[JsonProperty("mainStatKey")]
public string MainStat { get; set; }
/// <summary>
/// 0-20 inclusive
/// </summary>
[JsonProperty("level")]
public int Level { get; set; }
/// <summary>
/// substats
/// </summary>
[JsonProperty("substats")]
public SubStat[] SubStats { get; set; }
/// <summary>
/// where "" means not equipped.
/// </summary>
[JsonProperty("location")]
public string EquippedCharacter { get; set; }
/// <summary>
/// Whether the artifact is locked in game.
/// </summary>
[JsonProperty("lock")]
public bool Lock { get; set; }
public struct SubStat
{
/// <summary>
/// e.g. "critDMG_"
/// </summary>
[JsonProperty("key")]
public string Stat { get; set; }
/// <summary>
/// e.g. 19.4
/// </summary>
[JsonProperty("value")]
public double Value { get; set; }
}
}
}

View File

@ -0,0 +1,72 @@
/**
* Grasscutter Tools
* Copyright (C) 2022 jie65535
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
**/
using Newtonsoft.Json;
namespace GrasscutterTools.GOOD
{
/// <summary>
/// Character data representation
/// Doc: https://frzyc.github.io/genshin-optimizer/#/doc
/// Modified from https://github.com/Andrewthe13th/Inventory_Kamera/blob/master/InventoryKamera/game/Character.cs
/// </summary>
public class Character
{
/// <summary>
/// e.g. "Rosaria"
/// </summary>
[JsonProperty("key")]
public string Name { get; set; }
/// <summary>
/// 1-90 inclusive
/// </summary>
[JsonProperty("level")]
public int Level { get; set; }
/// <summary>
/// 0-6 inclusive
/// </summary>
[JsonProperty("constellation")]
public int Constellation { get; set; }
/// <summary>
/// 0-6 inclusive. need to disambiguate 80/90 or 80/80
/// </summary>
[JsonProperty("ascension")]
public int Ascension { get; set; }
/// <summary>
/// does not include boost from constellations. 1-15 inclusive
/// </summary>
[JsonProperty("talent")]
public Talents Talents { get; set; }
}
public struct Talents
{
[JsonProperty("auto")]
public int Auto { get; set; }
[JsonProperty("skill")]
public int Skill { get; set; }
[JsonProperty("burst")]
public int Burst { get; set; }
}
}

View File

@ -0,0 +1,53 @@
/**
* Grasscutter Tools
* Copyright (C) 2022 jie65535
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
**/
using System.Collections.Generic;
using Newtonsoft.Json;
namespace GrasscutterTools.GOOD
{
/// <summary>
/// Genshin Open Object Description (GOOD)
/// Doc: https://frzyc.github.io/genshin-optimizer/#/doc
/// Modified from https://github.com/Andrewthe13th/Inventory_Kamera/blob/master/InventoryKamera/data/GOOD.cs
/// </summary>
public class GOOD
{
[JsonProperty("format")]
public string Format { get; set; }
[JsonProperty("version")]
public int Version { get; set; }
[JsonProperty("source")]
public string Source { get; set; }
[JsonProperty("weapons", DefaultValueHandling = DefaultValueHandling.Ignore)]
public List<Weapon> Weapons { get; set; }
[JsonProperty("artifacts", DefaultValueHandling = DefaultValueHandling.Ignore)]
public List<Artifact> Artifacts { get; set; }
[JsonProperty("characters", DefaultValueHandling = DefaultValueHandling.Ignore)]
public List<Character> Characters { get; set; }
[JsonProperty("materials", DefaultValueHandling = DefaultValueHandling.Ignore)]
public Dictionary<string, int> Materials { get; set; }
}
}

View File

@ -0,0 +1,101 @@
/**
* Grasscutter Tools
* Copyright (C) 2022 jie65535
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
**/
using System.Collections.Generic;
using System.Globalization;
using System.Text.RegularExpressions;
using GrasscutterTools.Game;
using GrasscutterTools.Properties;
namespace GrasscutterTools.GOOD
{
public static class GOODData
{
static GOODData()
{
var cultureInfo = CultureInfo.GetCultureInfo("en-US");
var regex = new Regex(@"[\W]", RegexOptions.Compiled);
Dictionary<string, int> ToGOODMap(ItemMap itemMap)
{
var dic = new Dictionary<string, int>(itemMap.Count);
for (int i = 0; i < itemMap.Count; i++)
{
var name = itemMap.Names[i];
var pascalCase = cultureInfo.TextInfo.ToTitleCase(name);
var nameGOOD = regex.Replace(pascalCase, string.Empty);
dic.Add(nameGOOD, itemMap.Ids[i]);
}
return dic;
}
var artifactCats = new ItemMap(Resources.ResourceManager.GetString("ArtifactCat", cultureInfo));
var avatars = new ItemMap(Resources.ResourceManager.GetString("Avatar", cultureInfo));
var weapons = new ItemMap(Resources.ResourceManager.GetString("Weapon", cultureInfo));
ArtifactCats = ToGOODMap(artifactCats);
Avatars = ToGOODMap(avatars);
Weapons = ToGOODMap(weapons);
}
public static Dictionary<string, int> ArtifactCats { get; private set; }
public static Dictionary<string, int> ArtifactMainAttribution { get; } = new Dictionary<string, int>
{
{ "hp" , 10001 },
{ "hp_" , 10002 },
{ "atk" , 10003 },
{ "atk_" , 10004 },
{ "def" , 10005 },
{ "def_" , 10006 },
{ "enerRech_" , 10007 },
{ "eleMas" , 10008 },
{ "critRate_" , 13007 },
{ "critDMG_" , 13008 },
{ "heal_" , 13009 },
{ "pyro_dmg_" , 15008 },
{ "electro_dmg_" , 15009 },
{ "cryo_dmg_" , 15010 },
{ "hydro_dmg_" , 15011 },
{ "anemo_dmg_" , 15012 },
{ "geo_dmg_" , 15013 },
{ "dendro_dmg_" , 15014 },
{ "physical_dmg_", 15015 },
};
public static Dictionary<string, int> ArtifactSubAttribution { get; } = new Dictionary<string, int>
{
{ "hp" , 102 },
{ "hp_" , 103 },
{ "atk" , 105 },
{ "atk_" , 106 },
{ "def" , 108 },
{ "def_" , 109 },
{ "critRate_", 120 },
{ "critDMG_" , 122 },
{ "enerRech_", 123 },
{ "eleMas" , 124 },
};
public static Dictionary<string, int> Avatars { get; private set; }
public static Dictionary<string, int> Weapons { get; private set; }
}
}

View File

@ -0,0 +1,68 @@
/**
* Grasscutter Tools
* Copyright (C) 2022 jie65535
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
**/
using System.ComponentModel;
using Newtonsoft.Json;
namespace GrasscutterTools.GOOD
{
/// <summary>
/// Weapon data representation
/// Doc: https://frzyc.github.io/genshin-optimizer/#/doc
/// Modified from https://github.com/Andrewthe13th/Inventory_Kamera/blob/master/InventoryKamera/game/Weapon.cs
/// </summary>
public class Weapon
{
/// <summary>
/// e.g. "CrescentPike"
/// </summary>
[JsonProperty("key")]
public string Name { get; set; }
/// <summary>
/// 1-90 inclusive
/// </summary>
[JsonProperty("level")]
public int Level { get; set; }
/// <summary>
/// 0-6 inclusive. need to disambiguate 80/90 or 80/80
/// </summary>
[JsonProperty("ascension")]
public int AscensionLevel { get; set; }
/// <summary>
/// 1-5 inclusive
/// </summary>
[JsonProperty("refinement")]
public int RefinementLevel { get; set; }
/// <summary>
/// where "" means not equipped.
/// </summary>
[JsonProperty("location")]
[DefaultValue("")]
public string EquippedCharacter { get; set; }
/// <summary>
/// Whether the weapon is locked in game.
/// </summary>
[JsonProperty("lock")]
public bool Lock { get; set; }
}
}

View File

@ -39,12 +39,6 @@ namespace GrasscutterTools.Game
WeaponColors = new ItemMap(Resources.WeaponColor);
GachaBannerPrefabs = new ItemMap(Resources.GachaBennerPrefab);
Quests = new ItemMap(Resources.Quest);
GOODArtifactCats = new ItemMap(Resources.GOODArtifactCat);
GOODArtifactMainAttribution = new ItemMap(Resources.GOODArtifactMainAttribution);
GOODArtifactSubAttribution = new ItemMap(Resources.GOODArtifactSubAttribution);
GOODAvatars = new ItemMap(Resources.GOODAvatar);
GOODWeapons = new ItemMap(Resources.GOODWeapon);
}
public static ItemMap Animals { get; private set; }
@ -76,10 +70,5 @@ namespace GrasscutterTools.Game
public static ItemMap GachaBannerPrefabs { get; private set; }
public static ItemMap Quests { get; private set; }
public static ItemMap GOODArtifactCats { get; private set; }
public static ItemMap GOODArtifactMainAttribution { get; private set; }
public static ItemMap GOODArtifactSubAttribution { get; private set; }
public static ItemMap GOODAvatars { get; private set; }
public static ItemMap GOODWeapons { get; private set; }
}
}

View File

@ -26,8 +26,8 @@ namespace GrasscutterTools.Game
{
var lines = idNamePairs.Split('\n');
var capacity = lines.Length;
IdMap = new Dictionary<int, string>(capacity);
NameMap = new Dictionary<string, int>(capacity);
//IdMap = new Dictionary<int, string>(capacity);
//NameMap = new Dictionary<string, int>(capacity);
var IdList = new List<int>(capacity);
var NameList = new List<string>(capacity);
var lineList = new List<string>(capacity);
@ -38,10 +38,10 @@ namespace GrasscutterTools.Game
if (si > 0 && int.TryParse(line.Substring(0, si).Trim(), out int id))
{
var name = line.Substring(si + 1).Trim();
if (!string.IsNullOrEmpty(name))
if (!string.IsNullOrEmpty(name) && name != "null")
{
IdMap[id] = name;
NameMap[name.Replace(" ", "").Replace("'", "").Replace("\"", "")] = id;
//IdMap[id] = name;
//NameMap[name] = id;
IdList.Add(id);
NameList.Add(name);
lineList.Add(line);
@ -54,16 +54,16 @@ namespace GrasscutterTools.Game
Lines = lineList.ToArray();
}
Dictionary<int, string> IdMap;
Dictionary<string, int> NameMap;
//Dictionary<int, string> IdMap;
//Dictionary<string, int> NameMap;
//List<int> IdList;
//List<string> NameList;
public int Count => Ids.Length;
public string this[int id] => IdMap[id];
//public string this[int id] => IdMap[id];
public int this[string name] => NameMap[name];
//public int this[string name] => NameMap[name];
public int[] Ids { get; }

View File

@ -63,7 +63,6 @@
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL" />
<Reference Include="System.ComponentModel.Composition" />
<Reference Include="System.Console, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Console.4.3.0\lib\net46\System.Console.dll</HintPath>
@ -120,7 +119,6 @@
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL" />
<Reference Include="System.Net.Http, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Net.Http.4.3.0\lib\net46\System.Net.Http.dll</HintPath>
<Private>True</Private>
@ -177,7 +175,6 @@
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Text.Json, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL" />
<Reference Include="System.Text.RegularExpressions, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Text.RegularExpressions.4.3.0\lib\net463\System.Text.RegularExpressions.dll</HintPath>
<Private>True</Private>
@ -237,6 +234,11 @@
<Compile Include="Game\SetStatsCommand.cs" />
<Compile Include="Game\TextMapData.cs" />
<Compile Include="Github\ReleaseAPI.cs" />
<Compile Include="GOOD\GOOD.cs" />
<Compile Include="GOOD\Artifact.cs" />
<Compile Include="GOOD\Character.cs" />
<Compile Include="GOOD\GOODData.cs" />
<Compile Include="GOOD\Weapon.cs" />
<Compile Include="OpenCommand\OpenCommandAPI.cs" />
<Compile Include="MultiLanguage.cs" />
<Compile Include="Program.cs" />
@ -353,12 +355,6 @@
</ItemGroup>
<ItemGroup>
<Content Include="FodyWeavers.xml" />
<Content Include="Resources\GOODArtifactCat.txt" />
<Content Include="Resources\GOODArtifactMainAttribution.txt" />
<Content Include="Resources\GOODArtifactSubAttribution - Copy.txt" />
<Content Include="Resources\GOODArtifactSubAttribution.txt" />
<Content Include="Resources\GOODAvatar.txt" />
<Content Include="Resources\GOODWeapon.txt" />
<Content Include="Resources\en-us\Animal.txt" />
<Content Include="Resources\en-us\Artifact.txt" />
<Content Include="Resources\en-us\ArtifactCat.txt" />

View File

@ -1,10 +1,10 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
@ -13,13 +13,13 @@ namespace GrasscutterTools.Properties {
/// <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")]
// 此类是由 StronglyTypedResourceBuilder
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
@ -33,7 +33,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// 返回此类使用的缓存的 ResourceManager 实例。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
@ -47,8 +47,8 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// 重写当前线程的 CurrentUICulture 属性,对
/// 使用此强类型资源类的所有资源查找执行重写。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
@ -61,7 +61,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 28010101: 黄金蟹
/// 查找类似 28010101: 黄金蟹
///28010102: 太阳蟹
///28010103: 海蓝蟹
///28010104: 将军蟹
@ -94,7 +94,7 @@ namespace GrasscutterTools.Properties {
///28020305: 冰冻雪猪
///28020306: 雪猪
///28020307: 野林猪
///28020308: 冰冻雪 [rest of string was truncated]&quot;;.
///28020308: 冰冻雪 [字符串的其余部分被截断]&quot;; 的本地化字符串。
/// </summary>
internal static string Animal {
get {
@ -103,7 +103,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 51110: 异国之盏
/// 查找类似 51110: 异国之盏
///51111: 异国之盏
///51112: 异国之盏
///51113: 异国之盏
@ -142,7 +142,7 @@ namespace GrasscutterTools.Properties {
///51231: 感别之冠
///51232: 感别之冠
///51233: 感别之冠
///51234 [rest of string was truncated]&quot;;.
///51234 [字符串的其余部分被截断]&quot;; 的本地化字符串。
/// </summary>
internal static string Artifact {
get {
@ -151,7 +151,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 51: 行者之心
/// 查找类似 51: 行者之心
///52: 勇士之心
///53: 守护之心
///54: 奇迹
@ -192,7 +192,7 @@ namespace GrasscutterTools.Properties {
///96: 海染砗磲
///97: 辰砂往生录
///98: 来歆余响
///99: 高天的风之主.
///99: 高天的风之主 的本地化字符串。
/// </summary>
internal static string ArtifactCat {
get {
@ -201,7 +201,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 10001: 生命值
/// 查找类似 10001: 生命值
///10002: 生命值百分比
///10003: 攻击力
///10004: 攻击力百分比
@ -238,7 +238,7 @@ namespace GrasscutterTools.Properties {
///15008: 火元素伤害加成
///15009: 雷元素伤害加成
///15010: 冰元素伤害加成
///15011: [rest of string was truncated]&quot;;.
///15011: [字符串的其余部分被截断]&quot;; 的本地化字符串。
/// </summary>
internal static string ArtifactMainAttribution {
get {
@ -247,7 +247,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 空之杯,死之羽,理之冠,生之花,时之沙.
/// 查找类似 空之杯,死之羽,理之冠,生之花,时之沙 的本地化字符串。
/// </summary>
internal static string ArtifactPartLabels {
get {
@ -256,7 +256,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 101021: 生命值+24
/// 查找类似 101021: 生命值+24
///101022: 生命值+30
///201021: 生命值+50
///201022: 生命值+61
@ -283,7 +283,7 @@ namespace GrasscutterTools.Properties {
///301033: 生命值百分比+3.2%
///301034: 生命值百分比+3.5%
///401031: 生命值百分比+3.3%
///401032: 生命值百分比+3.7 [rest of string was truncated]&quot;;.
///401032: 生命值百分比+3.7 [字符串的其余部分被截断]&quot;; 的本地化字符串。
/// </summary>
internal static string ArtifactSubAttribution {
get {
@ -292,7 +292,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 确认删除?.
/// 查找类似 确认删除? 的本地化字符串。
/// </summary>
internal static string AskConfirmDeletion {
get {
@ -301,7 +301,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 1002: 神里绫华
/// 查找类似 1002: 神里绫华
///1003: 琴
///1005: 空
///1006: 丽莎
@ -349,7 +349,7 @@ namespace GrasscutterTools.Properties {
///1060: 夜兰
///1062: 埃洛伊
///1063: 申鹤
///1064: 云堇 /// [rest of string was truncated]&quot;;.
///1064: 云堇 /// [字符串的其余部分被截断]&quot;; 的本地化字符串。
/// </summary>
internal static string Avatar {
get {
@ -358,7 +358,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 1001:purple
/// 查找类似 1001:purple
///1002:yellow
///1003:yellow
///1005:yellow
@ -397,7 +397,7 @@ namespace GrasscutterTools.Properties {
///1049:yellow
///1050:purple
///1051:yellow
///1052: [rest of string was truncated]&quot;;.
///1052: [字符串的其余部分被截断]&quot;; 的本地化字符串。
/// </summary>
internal static string AvatarColor {
get {
@ -406,7 +406,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized resource of type System.Byte[].
/// 查找 System.Byte[] 类型的本地化资源。
/// </summary>
internal static byte[] AvatarStats {
get {
@ -416,7 +416,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 浏览器打开失败,你可以通过以下链接手动访问:.
/// 查找类似 浏览器打开失败,你可以通过以下链接手动访问: 的本地化字符串。
/// </summary>
internal static string BrowserOpenFailedTip {
get {
@ -425,7 +425,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 检查到新版本.
/// 查找类似 检查到新版本 的本地化字符串。
/// </summary>
internal static string CheckToNewVersion {
get {
@ -434,7 +434,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 无,晴天,多云,雨天,雷暴,雪天,雾天.
/// 查找类似 无,晴天,多云,雨天,雷暴,雪天,雾天 的本地化字符串。
/// </summary>
internal static string ClimateType {
get {
@ -443,7 +443,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to {0} 秒后可重发.
/// 查找类似 {0} 秒后可重发 的本地化字符串。
/// </summary>
internal static string CodeResendTip {
get {
@ -452,7 +452,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 发送中....
/// 查找类似 发送中... 的本地化字符串。
/// </summary>
internal static string CodeSending {
get {
@ -461,7 +461,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 命令内容不能为空.
/// 查找类似 命令内容不能为空 的本地化字符串。
/// </summary>
internal static string CommandContentCannotBeEmpty {
get {
@ -470,7 +470,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 未找到该命令.
/// 查找类似 未找到该命令 的本地化字符串。
/// </summary>
internal static string CommandNotFound {
get {
@ -479,7 +479,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 命令标签不能为空.
/// 查找类似 命令标签不能为空 的本地化字符串。
/// </summary>
internal static string CommandTagCannotBeEmpty {
get {
@ -488,7 +488,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 现在你可以远程执行命令了哦!.
/// 查找类似 现在你可以远程执行命令了哦! 的本地化字符串。
/// </summary>
internal static string ConnectedTip {
get {
@ -497,7 +497,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 无敌
/// 查找类似 无敌
////prop god on
///无限体力
////prop ns on
@ -544,7 +544,7 @@ namespace GrasscutterTools.Properties {
///清空武器
////clear wp lv90 r5 5*
///清空圣遗物
/// [rest of string was truncated]&quot;;.
/// [字符串的其余部分被截断]&quot;; 的本地化字符串。
/// </summary>
internal static string CustomCommands {
get {
@ -553,7 +553,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 错误.
/// 查找类似 错误 的本地化字符串。
/// </summary>
internal static string Error {
get {
@ -562,7 +562,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 007: 初行者推荐祈愿
/// 查找类似 007: 初行者推荐祈愿
///008: 奔行世间
///009: 杯装之诗
///010: 黎明巡礼
@ -598,7 +598,7 @@ namespace GrasscutterTools.Properties {
///071: 华紫樱绯
///076: 苍流踏花
///081: 素霓伣天
///.
/// 的本地化字符串。
/// </summary>
internal static string GachaBennerPrefab {
get {
@ -607,132 +607,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 51: ResolutionOfSojourner
///52: BraveHeart
///53: DefendersWill
///54: TinyMiracle
///55: Berserker
///56: MartialArtist
///57: Instructor
///58: Gambler
///59: TheExile
///60: Adventurer
///61: LuckyDog
///62: Scholar
///63: TravelingDoctor
///71: BlizzardStrayer
///72: Thundersoother
///73: Lavawalker
///74: MaidenBeloved
///75: GladiatorsFinale
///76: ViridescentVenerer
///77: WanderersTroupe
///78: GlacierAndSnowfield
///79: ThunderingFury
///80: CrimsonWitchOfFlames
///81: NoblesseOblige
///82: BloodstainedChivalry
///83: PrayersForIllumination
///84: [rest of string was truncated]&quot;;.
/// </summary>
internal static string GOODArtifactCat {
get {
return ResourceManager.GetString("GOODArtifactCat", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 10001: hp
///10002: hp_
///10003: atk
///10004: atk_
///10005: def
///10006: def_
///10007: enerRech_
///10008: eleMas
///13007: critRate_
///13008: critDMG_
///13009: heal_
///15008: pyro_dmg_
///15009: electro_dmg_
///15010: cryo_dmg_
///15011: hydro_dmg_
///15012: anemo_dmg_
///15013: geo_dmg_
///15014: dendro_dmg_
///15015: physical_dmg_
///.
/// </summary>
internal static string GOODArtifactMainAttribution {
get {
return ResourceManager.GetString("GOODArtifactMainAttribution", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 102: hp
///103: hp_
///105: atk
///106: atk_
///108: def
///109: def_
///120: critRate_
///122: critDMG_
///123: enerRech_
///124: eleMas.
/// </summary>
internal static string GOODArtifactSubAttribution {
get {
return ResourceManager.GetString("GOODArtifactSubAttribution", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 1002: KamisatoAyaka
///1003: Jean
///1005: Aether
///1006: Lisa
///1007: Lumine
///1014: Barbara
///1015: Kaeya
///1016: Diluc
///1020: Razor
///1021: Amber
///1022: Venti
///1023: Xiangling
///1024: Beidou
///1025: Xingqiu
///1026: Xiao
///1027: Ningguang
///1029: Klee
///1030: Zhongli
///1031: Fischl
///1032: Bennett
///1033: Tartaglia
///1034: Noelle
///1035: Qiqi
///1036: Chongyun
///1037: Ganyu
///1038: Albedo
///1039: Diona
///1041: Mona
///1042: Keqing
///1043: Sucrose
///1044: Xinyan
///1045: Rosaria
///1046: Hu Tao
///1047: KaedeharaKazuha
///1048: Yanfei
///1049: Yo [rest of string was truncated]&quot;;.
/// </summary>
internal static string GOODAvatar {
get {
return ResourceManager.GetString("GOODAvatar", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 导入成功!.
/// 查找类似 导入成功! 的本地化字符串。
/// </summary>
internal static string GOODImportSuccess {
get {
@ -741,7 +616,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 是否导入 .
/// 查找类似 是否导入 的本地化字符串。
/// </summary>
internal static string GOODImportText {
get {
@ -750,7 +625,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 导入GOOD档案.
/// 查找类似 导入GOOD档案 的本地化字符串。
/// </summary>
internal static string GOODImportTitle {
get {
@ -759,38 +634,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 11101: DullBlade
///11201: SilverSword
///11301: CoolSteel
///11302: HarbingerOf Dawn
///11303: TravelersHandySword
///11304: DarkIronSword
///11305: FilletBlade
///11306: SkyriderSword
///11401: FavoniusSword
///11402: TheFlute
///11403: SacrificialSword
///11404: RoyalLongsword
///11405: LionsRoar
///11406: PrototypeRancour
///11407: IronSting
///11408: BlackcliffLongsword
///11409: TheBlackSword
///11410: TheAlleyFlash
///11412: SwordOfDescension
///11413: FesteringDesire
///11414: AmenomaKageuchi
///11415: CinnabarSpindle
///11501: AquilaFavonia /// [rest of string was truncated]&quot;;.
/// </summary>
internal static string GOODWeapon {
get {
return ResourceManager.GetString("GOODWeapon", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to 帮助.
/// 查找类似 帮助 的本地化字符串。
/// </summary>
internal static string Help {
get {
@ -799,7 +643,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
/// 查找类似于 (图标) 的 System.Drawing.Icon 类型的本地化资源。
/// </summary>
internal static System.Drawing.Icon IconGrasscutter {
get {
@ -809,7 +653,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap ImgHome {
get {
@ -819,7 +663,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap ImgIconGrasscutter {
get {
@ -829,7 +673,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap ImgSupport {
get {
@ -839,7 +683,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 101: 角色经验
/// 查找类似 101: 角色经验
///102: 冒险阅历
///103: 星尘
///104: 星辉
@ -884,7 +728,7 @@ namespace GrasscutterTools.Properties {
///202: 摩拉
///203: 创世结晶
///204: 洞天宝钱
///210: 原粹精珀(废弃 [rest of string was truncated]&quot;;.
///210: 原粹精珀(废弃 [字符串的其余部分被截断]&quot;; 的本地化字符串。
/// </summary>
internal static string Item {
get {
@ -893,7 +737,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 21010101: 丘丘人
/// 查找类似 21010101: 丘丘人
///21020101: 木盾丘丘暴徒
///21020201: 火斧丘丘暴徒
///21020202: 火斧丘丘暴徒
@ -922,7 +766,7 @@ namespace GrasscutterTools.Properties {
///29040102: 若陀龙王
///29040103: 若陀龙王
///29040104: 若陀龙王
///290401 [rest of string was truncated]&quot;;.
///290401 [字符串的其余部分被截断]&quot;; 的本地化字符串。
/// </summary>
internal static string Monster {
get {
@ -931,12 +775,12 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 版本名:{0}
/// 查找类似 版本名:{0}
///更新时间:{1}
///更新内容:
///{2}
///--------------------------------------------
///是否查看更新?选择否将不再提醒该版本。.
///是否查看更新?选择否将不再提醒该版本。 的本地化字符串。
/// </summary>
internal static string NewVersionInfo {
get {
@ -945,7 +789,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 1: (test)蒙德城主$UNRELEASED
/// 查找类似 1: (test)蒙德城主$UNRELEASED
///2: (test)哥哥$UNRELEASED
///3: (test)妹妹$UNRELEASED
///4: (test)塔主$UNRELEASED
@ -965,7 +809,7 @@ namespace GrasscutterTools.Properties {
///23: (test)卫兵$UNRELEASED
///24: (test)卫兵$UNRELEASED
///25: (test)路人$UNRELEASED
///26: (te [rest of string was truncated]&quot;;.
///26: (te [字符串的其余部分被截断]&quot;; 的本地化字符串。
/// </summary>
internal static string NPC {
get {
@ -974,7 +818,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 1. 填写正确的UID\n2. 向玩家发送验证码\n3. 输入正确的验证码\n4. 连接\n5. 享受.
/// 查找类似 1. 填写正确的UID\n2. 向玩家发送验证码\n3. 输入正确的验证码\n4. 连接\n5. 享受 的本地化字符串。
/// </summary>
internal static string OpenCommandHelp {
get {
@ -983,7 +827,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 要设置的权限不能为空!.
/// 查找类似 要设置的权限不能为空! 的本地化字符串。
/// </summary>
internal static string PermissionCannotBeEmpty {
get {
@ -992,7 +836,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to *
/// 查找类似 *
///player.*
///player.**
///server.*
@ -1019,7 +863,7 @@ namespace GrasscutterTools.Properties {
///player.setstats
///player.setstats.others
///player.settalent
///play [rest of string was truncated]&quot;;.
///play [字符串的其余部分被截断]&quot;; 的本地化字符串。
/// </summary>
internal static string Permissions {
get {
@ -1028,7 +872,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 查询服务端状态失败:.
/// 查找类似 查询服务端状态失败: 的本地化字符串。
/// </summary>
internal static string QueryServerStatusFailed {
get {
@ -1037,7 +881,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 30302: 女神像解锁$HIDDEN -
/// 查找类似 30302: 女神像解锁$HIDDEN -
///30303: 女神像解锁$HIDDEN -
///30304: 女神像解锁$HIDDEN -
///30305: 女神像解锁$HIDDEN -
@ -1058,7 +902,7 @@ namespace GrasscutterTools.Properties {
///30602: 昔日的风 - 进入庙宇
///30603: 昔日的风 - 探索庙宇深处
///30604: 昔日的风 - 退出秘境
///30607: 昔日的风 - (test [rest of string was truncated]&quot;;.
///30607: 昔日的风 - (test [字符串的其余部分被截断]&quot;; 的本地化字符串。
/// </summary>
internal static string Quest {
get {
@ -1067,7 +911,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 请先连接到支持[OpenCommand]的服务器.
/// 查找类似 请先连接到支持[OpenCommand]的服务器 的本地化字符串。
/// </summary>
internal static string RequireOpenCommandTip {
get {
@ -1076,7 +920,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 确认将自定义命令恢复到默认值?.
/// 查找类似 确认将自定义命令恢复到默认值? 的本地化字符串。
/// </summary>
internal static string RestoreCustomCommands {
get {
@ -1085,7 +929,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 1: 提瓦特
/// 查找类似 1: 提瓦特
///2: 提瓦特
///3: 提瓦特
///4: 金苹果群岛
@ -1116,7 +960,7 @@ namespace GrasscutterTools.Properties {
///1001: 移动平台性能测试(test)
///50003: 战斗性能测试(test)
///50004: 电桩电源白盒(test)
///50027: 圣遗物新因子测试关卡3(t [rest of string was truncated]&quot;;.
///50027: 圣遗物新因子测试关卡3(t [字符串的其余部分被截断]&quot;; 的本地化字符串。
/// </summary>
internal static string Scene {
get {
@ -1125,7 +969,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 加载设置时异常:.
/// 查找类似 加载设置时异常: 的本地化字符串。
/// </summary>
internal static string SettingLoadError {
get {
@ -1134,7 +978,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 保存设置时异常:.
/// 查找类似 保存设置时异常: 的本地化字符串。
/// </summary>
internal static string SettingSaveError {
get {
@ -1143,7 +987,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 提示.
/// 查找类似 提示 的本地化字符串。
/// </summary>
internal static string Tips {
get {
@ -1152,7 +996,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to Token不能为空.
/// 查找类似 Token不能为空 的本地化字符串。
/// </summary>
internal static string TokenCannotBeEmpty {
get {
@ -1161,7 +1005,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 已从缓存中恢复Token.
/// 查找类似 已从缓存中恢复Token 的本地化字符串。
/// </summary>
internal static string TokenRestoredFromCache {
get {
@ -1170,7 +1014,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 用户名不能为空!.
/// 查找类似 用户名不能为空! 的本地化字符串。
/// </summary>
internal static string UsernameCannotBeEmpty {
get {
@ -1179,7 +1023,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 11101: 无锋剑
/// 查找类似 11101: 无锋剑
///11201: 银剑
///11301: 冷刃
///11302: 黎明神剑
@ -1219,7 +1063,7 @@ namespace GrasscutterTools.Properties {
///12306: 飞天大御剑
///12401: 西风大剑
///12402: 钟剑
///1 [rest of string was truncated]&quot;;.
///1 [字符串的其余部分被截断]&quot;; 的本地化字符串。
/// </summary>
internal static string Weapon {
get {
@ -1228,7 +1072,7 @@ namespace GrasscutterTools.Properties {
}
/// <summary>
/// Looks up a localized string similar to 11301:blue
/// 查找类似 11301:blue
///11302:blue
///11303:blue
///11304:blue
@ -1266,7 +1110,7 @@ namespace GrasscutterTools.Properties {
///12305:blue
///12306:blue
///12401:purple
///1240 [rest of string was truncated]&quot;;.
///1240 [字符串的其余部分被截断]&quot;; 的本地化字符串。
/// </summary>
internal static string WeaponColor {
get {

View File

@ -246,9 +246,6 @@
<data name="SettingLoadError" xml:space="preserve">
<value>加载设置时异常:</value>
</data>
<data name="SettingSaveError" xml:space="preserve">
<value>保存设置时异常:</value>
</data>
<data name="Tips" xml:space="preserve">
<value>提示</value>
</data>
@ -267,22 +264,6 @@
<data name="WeaponColor" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\WeaponColor.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>
<data name="GOODArtifactCat" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\GOODArtifactCat.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>
<data name="GOODArtifactMainAttribution" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\GOODArtifactMainAttribution.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>
<data name="GOODArtifactSubAttribution" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\GOODArtifactSubAttribution.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>
<data name="GOODAvatar" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\GOODAvatar.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>
<data name="GOODWeapon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\GOODWeapon.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>
<data name="GOODImportText" xml:space="preserve">
<value>是否导入 </value>
</data>

View File

@ -1,42 +0,0 @@
51: ResolutionOfSojourner
52: BraveHeart
53: DefendersWill
54: TinyMiracle
55: Berserker
56: MartialArtist
57: Instructor
58: Gambler
59: TheExile
60: Adventurer
61: LuckyDog
62: Scholar
63: TravelingDoctor
71: BlizzardStrayer
72: Thundersoother
73: Lavawalker
74: MaidenBeloved
75: GladiatorsFinale
76: ViridescentVenerer
77: WanderersTroupe
78: GlacierAndSnowfield
79: ThunderingFury
80: CrimsonWitchOfFlames
81: NoblesseOblige
82: BloodstainedChivalry
83: PrayersForIllumination
84: PrayersForDestiny
85: PrayersForWisdom
86: PrayersToTheFirmament
87: PrayersToSpringtime
88: ArchaicPetra
89: RetracingBolide
90: HeartOfDepth
91: TenacityOfTheMillelith
92: PaleFlame
93: ShimenawasReminiscence
94: EmblemOfSeveredFate
95: HuskOfOpulentDreams
96: OceanHuedClam
97: VermillionHereafter
98: EchoesOfAnOffering
99: LordOfTheWinds

View File

@ -1,19 +0,0 @@
10001: hp
10002: hp_
10003: atk
10004: atk_
10005: def
10006: def_
10007: enerRech_
10008: eleMas
13007: critRate_
13008: critDMG_
13009: heal_
15008: pyro_dmg_
15009: electro_dmg_
15010: cryo_dmg_
15011: hydro_dmg_
15012: anemo_dmg_
15013: geo_dmg_
15014: dendro_dmg_
15015: physical_dmg_

View File

@ -1,170 +0,0 @@
101021: HP+24
101022: HP+30
201021: HP+50
201022: HP+61
201023: HP+72
301021: HP+100
301022: HP+115
301023: HP+129
301024: HP+143
401021: HP+167
401022: HP+191
401023: HP+215
401024: HP+239
501021: HP+209
501022: HP+239
501023: HP+269
501024: HP+299
101031: hp_+1.2%
101032: hp_+1.5%
201031: hp_+1.6%
201032: hp_+2.0%
201033: hp_+2.3%
301031: hp_+2.4%
301032: hp_+2.8%
301033: hp_+3.2%
301034: hp_+3.5%
401031: hp_+3.3%
401032: hp_+3.7%
401033: hp_+4.2%
401034: hp_+4.7%
501031: hp_+4.1%
501032: hp_+4.7%
501033: hp_+5.2%
501034: hp_+5.8%
101051: ATK+2
101052: ATK+2
201051: ATK+3
201052: ATK+4
201053: ATK+5
301051: ATK+7
301052: ATK+7
301053: ATK+8
301054: ATK+9
401051: ATK+11
401052: ATK+12
401053: ATK+14
401054: ATK+16
501051: ATK+14
501052: ATK+16
501053: ATK+18
501054: ATK+19
101061: atk_+1.2%
101062: atk_+1.5%
201061: atk_+1.6%
201062: atk_+2.0%
201063: atk_+2.3%
301061: atk_+2.4%
301062: atk_+2.8%
301063: atk_+3.2%
301064: atk_+3.5%
401061: atk_+3.3%
401062: atk_+3.7%
401063: atk_+4.2%
401064: atk_+4.7%
501061: atk_+4.1%
501062: atk_+4.7%
501063: atk_+5.2%
501064: atk_+5.8%
101081: DEF+2
101082: DEF+2
201081: DEF+4
201082: DEF+5
201083: DEF+6
301081: DEF+8
301082: DEF+9
301083: DEF+10
301084: DEF+11
401081: DEF+13
401082: DEF+15
401083: DEF+17
401084: DEF+19
501081: DEF+16
501082: DEF+19
501083: DEF+21
501084: DEF+23
101091: def_+1.5%
101092: def_+1.8%
201091: def_+2.0%
201092: def_+2.5%
201093: def_+2.9%
301091: def_+3.1%
301092: def_+3.5%
301093: def_+3.9%
301094: def_+4.4%
401091: def_+4.1%
401092: def_+4.7%
401093: def_+5.2%
401094: def_+5.8%
501091: def_+5.1%
501092: def_+5.8%
501093: def_+6.6%
501094: def_+7.3%
101231: enerRech_+1.3%
101232: enerRech_+1.6%
201231: enerRech_+1.8%
201232: enerRech_+2.2%
201233: enerRech_+2.6%
301231: enerRech_+2.7%
301232: enerRech_+3.1%
301233: enerRech_+3.5%
301234: enerRech_+3.9%
401231: enerRech_+3.6%
401232: enerRech_+4.1%
401233: enerRech_+4.7%
401234: enerRech_+5.2%
501231: enerRech_+4.5%
501232: enerRech_+5.2%
501233: enerRech_+5.8%
501234: enerRech_+6.5%
101241: Elemental Mastery+5
101242: Elemental Mastery+6
201241: Elemental Mastery+7
201242: Elemental Mastery+8
201243: Elemental Mastery+9
301241: Elemental Mastery+10
301242: Elemental Mastery+11
301243: Elemental Mastery+13
301244: Elemental Mastery+14
401241: Elemental Mastery+13
401242: Elemental Mastery+15
401243: Elemental Mastery+17
401244: Elemental Mastery+19
501241: Elemental Mastery+16
501242: Elemental Mastery+19
501243: Elemental Mastery+21
501244: Elemental Mastery+23
101201: CRIT Rate+0.8%
101202: CRIT Rate+1.0%
201201: CRIT Rate+1.1%
201202: CRIT Rate+1.3%
201203: CRIT Rate+1.5%
301201: CRIT Rate+1.6%
301202: CRIT Rate+1.9%
301203: CRIT Rate+2.1%
301204: CRIT Rate+2.3%
401201: CRIT Rate+2.2%
401202: CRIT Rate+2.5%
401203: CRIT Rate+2.8%
401204: CRIT Rate+3.1%
501201: CRIT Rate+2.7%
501202: CRIT Rate+3.1%
501203: CRIT Rate+3.5%
501204: CRIT Rate+3.9%
101221: CRIT DMG+1.5%
101222: CRIT DMG+1.9%
201221: CRIT DMG+2.2%
201222: CRIT DMG+2.6%
201223: CRIT DMG+3.1%
301221: CRIT DMG+3.3%
301222: CRIT DMG+3.7%
301223: CRIT DMG+4.2%
301224: CRIT DMG+4.7%
401221: CRIT DMG+4.3%
401222: CRIT DMG+5.0%
401223: CRIT DMG+5.6%
401224: CRIT DMG+6.2%
501221: CRIT DMG+5.4%
501222: CRIT DMG+6.2%
501223: CRIT DMG+7.0%
501224: CRIT DMG+7.8%

View File

@ -1,10 +0,0 @@
102: hp
103: hp_
105: atk
106: atk_
108: def
109: def_
120: critRate_
122: critDMG_
123: enerRech_
124: eleMas

View File

@ -1,54 +0,0 @@
1002: KamisatoAyaka
1003: Jean
1005: Aether
1006: Lisa
1007: Lumine
1014: Barbara
1015: Kaeya
1016: Diluc
1020: Razor
1021: Amber
1022: Venti
1023: Xiangling
1024: Beidou
1025: Xingqiu
1026: Xiao
1027: Ningguang
1029: Klee
1030: Zhongli
1031: Fischl
1032: Bennett
1033: Tartaglia
1034: Noelle
1035: Qiqi
1036: Chongyun
1037: Ganyu
1038: Albedo
1039: Diona
1041: Mona
1042: Keqing
1043: Sucrose
1044: Xinyan
1045: Rosaria
1046: Hu Tao
1047: KaedeharaKazuha
1048: Yanfei
1049: Yoimiya
1050: Thoma
1051: Eula
1052: RaidenShogun
1053: Sayu
1054: SangonomiyaKokomi
1055: Gorou
1056: Kujou Sara
1057: Arataki Itto
1058: Yae Miko
1060: Yelan
1062: Aloy
1063: Shenhe
1064: YunJin
1065: KukiShinobu
1066: KamisatoAyato
1067: Collei
1068: Dori
1069: Tighnari

View File

@ -1,146 +0,0 @@
11101: DullBlade
11201: SilverSword
11301: CoolSteel
11302: HarbingerOf Dawn
11303: TravelersHandySword
11304: DarkIronSword
11305: FilletBlade
11306: SkyriderSword
11401: FavoniusSword
11402: TheFlute
11403: SacrificialSword
11404: RoyalLongsword
11405: LionsRoar
11406: PrototypeRancour
11407: IronSting
11408: BlackcliffLongsword
11409: TheBlackSword
11410: TheAlleyFlash
11412: SwordOfDescension
11413: FesteringDesire
11414: AmenomaKageuchi
11415: CinnabarSpindle
11501: AquilaFavonia
11502: SkywardBlade
11503: FreedomSworn
11504: SummitShaper
11505: PrimordialJadeCutter
11507: OneSide
11509: MistsplitterReforged
11510: HaranGeppakuFutsu
12101: WasterGreatsword
12201: OldMercsPal
12301: FerrousShadow
12302: BloodtaintedGreatsword
12303: WhiteIronGreatsword
12304: Quartz
12305: DebateClub
12306: SkyriderGreatsword
12401: FavoniusGreatsword
12402: TheBell
12403: SacrificialGreatsword
12404: RoyalGreatsword
12405: Rainslasher
12406: PrototypeArchaic
12407: Whiteblind
12408: BlackcliffSlasher
12409: SerpentSpine
12410: LithicBlade
12411: SnowTombedStarsilver
12412: LuxuriousSeaLord
12414: KatsuragikiriNagamasa
12416: Akuoumaru
12501: SkywardPride
12502: WolfsGravestone
12503: SongOfBrokenPines
12504: TheUnforged
12505: PrimordialJadeGreatsword
12506: TheOtherSide
12510: RedhornStonethresher
13101: BeginnersProtector
13201: IronPoint
13301: WhiteTassel
13302: Halberd
13303: BlackTassel
13304: TheFlagstaff
13401: DragonsBane
13402: PrototypeStarglitter
13403: CrescentPike
13404: BlackcliffPole
13405: Deathmatch
13406: LithicSpear
13407: FavoniusLance
13408: RoyalSpear
13409: DragonspineSpear
13414: KitainCrossSpear
13415: TheCatch
13416: WavebreakersFin
13501: StaffofHoma
13502: SkywardSpine
13504: VortexVanquisher
13505: PrimordialJadeWingedSpear
13506: Deicide
13507: CalamityQueller
13509: EngulfingLightning
14101: ApprenticesNotes
14201: PocketGrimoire
14301: MagicGuide
14302: ThrillingTalesOfDragonSlayers
14303: OtherworldlyStory
14304: EmeraldOrb
14305: TwinNephrite
14306: AmberBead
14401: FavoniusCodex
14402: TheWidsith
14403: SacrificialFragments
14404: RoyalGrimoire
14405: SolarPearl
14406: PrototypeAmber
14407: MappaMare
14408: BlackcliffAgate
14409: EyeOfPerception
14410: WineAndSong
14412: Frostbearer
14413: DodocoTales
14414: HakushinRing
14415: OathswornEye
14501: SkywardAtlas
14502: LostPrayerToTheSacredWinds
14503: LostBallade
14504: MemoryOfDust
14505: PrimordialJadeRegalia
14506: EverlastingMoonglow
14509: KagurasVerity
15101: HuntersBow
15201: SeasonedHuntersBow
15301: RavenBow
15302: SharpshootersOath
15303: RecurveBow
15304: Slingshot
15305: Messenger
15306: EbonyBow
15401: FavoniusWarbow
15402: TheStringless
15403: SacrificialBow
15404: RoyalBow
15405: Rust
15406: PrototypeCrescent
15407: CompoundBow
15408: BlackcliffWarbow
15409: TheViridescentHunt
15410: AlleyHunter
15411: FadingTwilight
15412: MitternachtsWaltz
15413: WindblumeOde
15414: Hamayumi
15415: Predator
15416: MouunsMoon
15501: SkywardHarp
15502: AmosBow
15503: ElegyForTheEnd
15504: KunwusWyrmbane
15505: PrimordialJadeVista
15506: MirrorBreaker
15507: PolarStar
15508: AquaSimulacra
15509: ThunderingPulse

View File

@ -19,8 +19,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GrasscutterTools.Utils
{