From f9f7004130dc8e4e1c2b4ceeb1a635edb613d0eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=AD=B1=E5=82=91?= Date: Sat, 16 Jul 2022 15:32:57 +0800 Subject: [PATCH] Optimized implementation --- Source/GrasscutterTools/Forms/FormMain.cs | 159 ++++----- Source/GrasscutterTools/GOOD/Artifact.cs | 94 ++++++ Source/GrasscutterTools/GOOD/Character.cs | 72 ++++ Source/GrasscutterTools/GOOD/GOOD.cs | 53 +++ Source/GrasscutterTools/GOOD/GOODData.cs | 101 ++++++ Source/GrasscutterTools/GOOD/Weapon.cs | 68 ++++ Source/GrasscutterTools/Game/GameData.cs | 11 - Source/GrasscutterTools/Game/ItemMap.cs | 18 +- .../GrasscutterTools/GrasscutterTools.csproj | 14 +- .../Properties/Resources.Designer.cs | 318 +++++------------- .../Properties/Resources.resx | 25 +- .../Resources/GOODArtifactCat.txt | 42 --- .../Resources/GOODArtifactMainAttribution.txt | 19 -- .../GOODArtifactSubAttribution - Copy.txt | 170 ---------- .../Resources/GOODArtifactSubAttribution.txt | 10 - .../GrasscutterTools/Resources/GOODAvatar.txt | 54 --- .../GrasscutterTools/Resources/GOODWeapon.txt | 146 -------- .../GrasscutterTools/Utils/ArtifactUtils.cs | 2 - 18 files changed, 547 insertions(+), 829 deletions(-) create mode 100644 Source/GrasscutterTools/GOOD/Artifact.cs create mode 100644 Source/GrasscutterTools/GOOD/Character.cs create mode 100644 Source/GrasscutterTools/GOOD/GOOD.cs create mode 100644 Source/GrasscutterTools/GOOD/GOODData.cs create mode 100644 Source/GrasscutterTools/GOOD/Weapon.cs delete mode 100644 Source/GrasscutterTools/Resources/GOODArtifactCat.txt delete mode 100644 Source/GrasscutterTools/Resources/GOODArtifactMainAttribution.txt delete mode 100644 Source/GrasscutterTools/Resources/GOODArtifactSubAttribution - Copy.txt delete mode 100644 Source/GrasscutterTools/Resources/GOODArtifactSubAttribution.txt delete mode 100644 Source/GrasscutterTools/Resources/GOODAvatar.txt delete mode 100644 Source/GrasscutterTools/Resources/GOODWeapon.txt diff --git a/Source/GrasscutterTools/Forms/FormMain.cs b/Source/GrasscutterTools/Forms/FormMain.cs index b2b33a3..6ab7912 100644 --- a/Source/GrasscutterTools/Forms/FormMain.cs +++ b/Source/GrasscutterTools/Forms/FormMain.cs @@ -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(); - var doc = JsonDocument.Parse(sr.ReadToEnd()); + GOOD.GOOD good = JsonConvert.DeserializeObject(File.ReadAllText(openFileDialog1.FileName)); + var commands_list = new List(); - 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 { {"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,42 +1171,51 @@ 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 RunCommands(params string[] commands) + { + if (OC == null || !OC.CanInvoke) + { + ShowTip(Resources.RequireOpenCommandTip, BtnInvokeOpenCommand); + TCMain.SelectedTab = TPRemoteCall; + return false; + } ExpandCommandRunLog(); - TxtCommandRunLog.AppendText(">"); - TxtCommandRunLog.AppendText(TxtCommand.Text); - TxtCommandRunLog.AppendText(Environment.NewLine); - var cmd = TxtCommand.Text.Substring(1); - var btn = sender as Button; - btn.Enabled = false; - try + BtnInvokeOpenCommand.Enabled = false; + BtnInvokeOpenCommand.Cursor = Cursors.WaitCursor; + foreach (var command in commands) { - var msg = await OC.Invoke(cmd); - TxtCommandRunLog.AppendText(string.IsNullOrEmpty(msg) ? "OK" : msg); + TxtCommandRunLog.AppendText(">"); + TxtCommandRunLog.AppendText(command); TxtCommandRunLog.AppendText(Environment.NewLine); - //ShowTip(string.IsNullOrEmpty(msg) ? "OK" : msg, btn); + var cmd = command.Substring(1); + try + { + var msg = await OC.Invoke(cmd); + 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); + return false; + } + TxtCommandRunLog.ScrollToCaret(); } - catch (Exception ex) - { - TxtCommandRunLog.AppendText("Error: "); - TxtCommandRunLog.AppendText(ex.Message); - TxtCommandRunLog.AppendText(Environment.NewLine); - MessageBox.Show(ex.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error); - } - TxtCommandRunLog.ScrollToCaret(); - btn.Cursor = Cursors.Default; - btn.Enabled = true; + BtnInvokeOpenCommand.Cursor = Cursors.Default; + BtnInvokeOpenCommand.Enabled = true; + return true; } private const int TxtCommandRunLogMinHeight = 150; diff --git a/Source/GrasscutterTools/GOOD/Artifact.cs b/Source/GrasscutterTools/GOOD/Artifact.cs new file mode 100644 index 0000000..5702ad6 --- /dev/null +++ b/Source/GrasscutterTools/GOOD/Artifact.cs @@ -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 . + * + **/ +using Newtonsoft.Json; + +namespace GrasscutterTools.GOOD +{ + /// + /// 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 + /// + public class Artifact + { + /// + /// e.g. "GladiatorsFinale" + /// + [JsonProperty("setKey")] + public string SetName { get; set; } + + /// + /// //e.g. "plume" + /// type SlotKey = "flower" | "plume" | "sands" | "goblet" | "circlet" + /// + [JsonProperty("slotKey")] + public string GearSlot { get; set; } + + /// + /// 1-5 inclusive + /// + [JsonProperty("rarity")] + public int Rarity { get; set; } + + /// + /// mainStatKey + /// + [JsonProperty("mainStatKey")] + public string MainStat { get; set; } + + /// + /// 0-20 inclusive + /// + [JsonProperty("level")] + public int Level { get; set; } + + /// + /// substats + /// + [JsonProperty("substats")] + public SubStat[] SubStats { get; set; } + + /// + /// where "" means not equipped. + /// + [JsonProperty("location")] + public string EquippedCharacter { get; set; } + + /// + /// Whether the artifact is locked in game. + /// + [JsonProperty("lock")] + public bool Lock { get; set; } + + public struct SubStat + { + /// + /// e.g. "critDMG_" + /// + [JsonProperty("key")] + public string Stat { get; set; } + + /// + /// e.g. 19.4 + /// + [JsonProperty("value")] + public double Value { get; set; } + } + } +} diff --git a/Source/GrasscutterTools/GOOD/Character.cs b/Source/GrasscutterTools/GOOD/Character.cs new file mode 100644 index 0000000..91112b0 --- /dev/null +++ b/Source/GrasscutterTools/GOOD/Character.cs @@ -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 . + * + **/ +using Newtonsoft.Json; + +namespace GrasscutterTools.GOOD +{ + /// + /// 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 + /// + public class Character + { + /// + /// e.g. "Rosaria" + /// + [JsonProperty("key")] + public string Name { get; set; } + + /// + /// 1-90 inclusive + /// + [JsonProperty("level")] + public int Level { get; set; } + + /// + /// 0-6 inclusive + /// + [JsonProperty("constellation")] + public int Constellation { get; set; } + + /// + /// 0-6 inclusive. need to disambiguate 80/90 or 80/80 + /// + [JsonProperty("ascension")] + public int Ascension { get; set; } + + /// + /// does not include boost from constellations. 1-15 inclusive + /// + [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; } + } +} \ No newline at end of file diff --git a/Source/GrasscutterTools/GOOD/GOOD.cs b/Source/GrasscutterTools/GOOD/GOOD.cs new file mode 100644 index 0000000..06cea73 --- /dev/null +++ b/Source/GrasscutterTools/GOOD/GOOD.cs @@ -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 . + * + **/ +using System.Collections.Generic; + +using Newtonsoft.Json; + +namespace GrasscutterTools.GOOD +{ + /// + /// 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 + /// + 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 Weapons { get; set; } + + [JsonProperty("artifacts", DefaultValueHandling = DefaultValueHandling.Ignore)] + public List Artifacts { get; set; } + + [JsonProperty("characters", DefaultValueHandling = DefaultValueHandling.Ignore)] + public List Characters { get; set; } + + [JsonProperty("materials", DefaultValueHandling = DefaultValueHandling.Ignore)] + public Dictionary Materials { get; set; } + } +} diff --git a/Source/GrasscutterTools/GOOD/GOODData.cs b/Source/GrasscutterTools/GOOD/GOODData.cs new file mode 100644 index 0000000..fe0507f --- /dev/null +++ b/Source/GrasscutterTools/GOOD/GOODData.cs @@ -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 . + * + **/ +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 ToGOODMap(ItemMap itemMap) + { + var dic = new Dictionary(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 ArtifactCats { get; private set; } + + public static Dictionary ArtifactMainAttribution { get; } = new Dictionary + { + { "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 ArtifactSubAttribution { get; } = new Dictionary + { + { "hp" , 102 }, + { "hp_" , 103 }, + { "atk" , 105 }, + { "atk_" , 106 }, + { "def" , 108 }, + { "def_" , 109 }, + { "critRate_", 120 }, + { "critDMG_" , 122 }, + { "enerRech_", 123 }, + { "eleMas" , 124 }, + }; + + public static Dictionary Avatars { get; private set; } + + public static Dictionary Weapons { get; private set; } + } +} diff --git a/Source/GrasscutterTools/GOOD/Weapon.cs b/Source/GrasscutterTools/GOOD/Weapon.cs new file mode 100644 index 0000000..027377a --- /dev/null +++ b/Source/GrasscutterTools/GOOD/Weapon.cs @@ -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 . + * + **/ +using System.ComponentModel; +using Newtonsoft.Json; + +namespace GrasscutterTools.GOOD +{ + /// + /// 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 + /// + public class Weapon + { + /// + /// e.g. "CrescentPike" + /// + [JsonProperty("key")] + public string Name { get; set; } + + /// + /// 1-90 inclusive + /// + [JsonProperty("level")] + public int Level { get; set; } + + /// + /// 0-6 inclusive. need to disambiguate 80/90 or 80/80 + /// + [JsonProperty("ascension")] + public int AscensionLevel { get; set; } + + /// + /// 1-5 inclusive + /// + [JsonProperty("refinement")] + public int RefinementLevel { get; set; } + + /// + /// where "" means not equipped. + /// + [JsonProperty("location")] + [DefaultValue("")] + public string EquippedCharacter { get; set; } + + /// + /// Whether the weapon is locked in game. + /// + [JsonProperty("lock")] + public bool Lock { get; set; } + } +} \ No newline at end of file diff --git a/Source/GrasscutterTools/Game/GameData.cs b/Source/GrasscutterTools/Game/GameData.cs index a5fb2ad..474b968 100644 --- a/Source/GrasscutterTools/Game/GameData.cs +++ b/Source/GrasscutterTools/Game/GameData.cs @@ -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; } } } diff --git a/Source/GrasscutterTools/Game/ItemMap.cs b/Source/GrasscutterTools/Game/ItemMap.cs index 13f0e89..75a96a9 100644 --- a/Source/GrasscutterTools/Game/ItemMap.cs +++ b/Source/GrasscutterTools/Game/ItemMap.cs @@ -26,8 +26,8 @@ namespace GrasscutterTools.Game { var lines = idNamePairs.Split('\n'); var capacity = lines.Length; - IdMap = new Dictionary(capacity); - NameMap = new Dictionary(capacity); + //IdMap = new Dictionary(capacity); + //NameMap = new Dictionary(capacity); var IdList = new List(capacity); var NameList = new List(capacity); var lineList = new List(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 IdMap; - Dictionary NameMap; + //Dictionary IdMap; + //Dictionary NameMap; //List IdList; //List 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; } diff --git a/Source/GrasscutterTools/GrasscutterTools.csproj b/Source/GrasscutterTools/GrasscutterTools.csproj index 10364cb..93a58e4 100644 --- a/Source/GrasscutterTools/GrasscutterTools.csproj +++ b/Source/GrasscutterTools/GrasscutterTools.csproj @@ -63,7 +63,6 @@ True True - ..\packages\System.Console.4.3.0\lib\net46\System.Console.dll @@ -120,7 +119,6 @@ True True - ..\packages\System.Net.Http.4.3.0\lib\net46\System.Net.Http.dll True @@ -177,7 +175,6 @@ True True - ..\packages\System.Text.RegularExpressions.4.3.0\lib\net463\System.Text.RegularExpressions.dll True @@ -237,6 +234,11 @@ + + + + + @@ -353,12 +355,6 @@ - - - - - - diff --git a/Source/GrasscutterTools/Properties/Resources.Designer.cs b/Source/GrasscutterTools/Properties/Resources.Designer.cs index 17c0976..7e9749c 100644 --- a/Source/GrasscutterTools/Properties/Resources.Designer.cs +++ b/Source/GrasscutterTools/Properties/Resources.Designer.cs @@ -1,10 +1,10 @@ //------------------------------------------------------------------------------ // -// 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. +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 // //------------------------------------------------------------------------------ @@ -13,13 +13,13 @@ namespace GrasscutterTools.Properties { /// - /// A strongly-typed resource class, for looking up localized strings, etc. + /// 一个强类型的资源类,用于查找本地化的字符串等。 /// - // 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 { } /// - /// Returns the cached ResourceManager instance used by this class. + /// 返回此类使用的缓存的 ResourceManager 实例。 /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { @@ -47,8 +47,8 @@ namespace GrasscutterTools.Properties { } /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. + /// 重写当前线程的 CurrentUICulture 属性,对 + /// 使用此强类型资源类的所有资源查找执行重写。 /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { @@ -61,7 +61,7 @@ namespace GrasscutterTools.Properties { } /// - /// 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]";. + ///28020308: 冰冻雪 [字符串的其余部分被截断]"; 的本地化字符串。 /// internal static string Animal { get { @@ -103,7 +103,7 @@ namespace GrasscutterTools.Properties { } /// - /// 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]";. + ///51234 [字符串的其余部分被截断]"; 的本地化字符串。 /// internal static string Artifact { get { @@ -151,7 +151,7 @@ namespace GrasscutterTools.Properties { } /// - /// Looks up a localized string similar to 51: 行者之心 + /// 查找类似 51: 行者之心 ///52: 勇士之心 ///53: 守护之心 ///54: 奇迹 @@ -192,7 +192,7 @@ namespace GrasscutterTools.Properties { ///96: 海染砗磲 ///97: 辰砂往生录 ///98: 来歆余响 - ///99: 高天的风之主. + ///99: 高天的风之主 的本地化字符串。 /// internal static string ArtifactCat { get { @@ -201,7 +201,7 @@ namespace GrasscutterTools.Properties { } /// - /// 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]";. + ///15011: [字符串的其余部分被截断]"; 的本地化字符串。 /// internal static string ArtifactMainAttribution { get { @@ -247,7 +247,7 @@ namespace GrasscutterTools.Properties { } /// - /// Looks up a localized string similar to 空之杯,死之羽,理之冠,生之花,时之沙. + /// 查找类似 空之杯,死之羽,理之冠,生之花,时之沙 的本地化字符串。 /// internal static string ArtifactPartLabels { get { @@ -256,7 +256,7 @@ namespace GrasscutterTools.Properties { } /// - /// 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]";. + ///401032: 生命值百分比+3.7 [字符串的其余部分被截断]"; 的本地化字符串。 /// internal static string ArtifactSubAttribution { get { @@ -292,7 +292,7 @@ namespace GrasscutterTools.Properties { } /// - /// Looks up a localized string similar to 确认删除?. + /// 查找类似 确认删除? 的本地化字符串。 /// internal static string AskConfirmDeletion { get { @@ -301,7 +301,7 @@ namespace GrasscutterTools.Properties { } /// - /// 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]";. + ///1064: 云堇 /// [字符串的其余部分被截断]"; 的本地化字符串。 /// internal static string Avatar { get { @@ -358,7 +358,7 @@ namespace GrasscutterTools.Properties { } /// - /// 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]";. + ///1052: [字符串的其余部分被截断]"; 的本地化字符串。 /// internal static string AvatarColor { get { @@ -406,7 +406,7 @@ namespace GrasscutterTools.Properties { } /// - /// Looks up a localized resource of type System.Byte[]. + /// 查找 System.Byte[] 类型的本地化资源。 /// internal static byte[] AvatarStats { get { @@ -416,7 +416,7 @@ namespace GrasscutterTools.Properties { } /// - /// Looks up a localized string similar to 浏览器打开失败,你可以通过以下链接手动访问:. + /// 查找类似 浏览器打开失败,你可以通过以下链接手动访问: 的本地化字符串。 /// internal static string BrowserOpenFailedTip { get { @@ -425,7 +425,7 @@ namespace GrasscutterTools.Properties { } /// - /// Looks up a localized string similar to 检查到新版本. + /// 查找类似 检查到新版本 的本地化字符串。 /// internal static string CheckToNewVersion { get { @@ -434,7 +434,7 @@ namespace GrasscutterTools.Properties { } /// - /// Looks up a localized string similar to 无,晴天,多云,雨天,雷暴,雪天,雾天. + /// 查找类似 无,晴天,多云,雨天,雷暴,雪天,雾天 的本地化字符串。 /// internal static string ClimateType { get { @@ -443,7 +443,7 @@ namespace GrasscutterTools.Properties { } /// - /// Looks up a localized string similar to {0} 秒后可重发. + /// 查找类似 {0} 秒后可重发 的本地化字符串。 /// internal static string CodeResendTip { get { @@ -452,7 +452,7 @@ namespace GrasscutterTools.Properties { } /// - /// Looks up a localized string similar to 发送中.... + /// 查找类似 发送中... 的本地化字符串。 /// internal static string CodeSending { get { @@ -461,7 +461,7 @@ namespace GrasscutterTools.Properties { } /// - /// Looks up a localized string similar to 命令内容不能为空. + /// 查找类似 命令内容不能为空 的本地化字符串。 /// internal static string CommandContentCannotBeEmpty { get { @@ -470,7 +470,7 @@ namespace GrasscutterTools.Properties { } /// - /// Looks up a localized string similar to 未找到该命令. + /// 查找类似 未找到该命令 的本地化字符串。 /// internal static string CommandNotFound { get { @@ -479,7 +479,7 @@ namespace GrasscutterTools.Properties { } /// - /// Looks up a localized string similar to 命令标签不能为空. + /// 查找类似 命令标签不能为空 的本地化字符串。 /// internal static string CommandTagCannotBeEmpty { get { @@ -488,7 +488,7 @@ namespace GrasscutterTools.Properties { } /// - /// Looks up a localized string similar to 现在你可以远程执行命令了哦!. + /// 查找类似 现在你可以远程执行命令了哦! 的本地化字符串。 /// internal static string ConnectedTip { get { @@ -497,7 +497,7 @@ namespace GrasscutterTools.Properties { } /// - /// 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]";. + /// [字符串的其余部分被截断]"; 的本地化字符串。 /// internal static string CustomCommands { get { @@ -553,7 +553,7 @@ namespace GrasscutterTools.Properties { } /// - /// Looks up a localized string similar to 错误. + /// 查找类似 错误 的本地化字符串。 /// internal static string Error { get { @@ -562,7 +562,7 @@ namespace GrasscutterTools.Properties { } /// - /// Looks up a localized string similar to 007: 初行者推荐祈愿 + /// 查找类似 007: 初行者推荐祈愿 ///008: 奔行世间 ///009: 杯装之诗 ///010: 黎明巡礼 @@ -598,7 +598,7 @@ namespace GrasscutterTools.Properties { ///071: 华紫樱绯 ///076: 苍流踏花 ///081: 素霓伣天 - ///. + /// 的本地化字符串。 /// internal static string GachaBennerPrefab { get { @@ -607,132 +607,7 @@ namespace GrasscutterTools.Properties { } /// - /// 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]";. - /// - internal static string GOODArtifactCat { - get { - return ResourceManager.GetString("GOODArtifactCat", resourceCulture); - } - } - - /// - /// 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_ - ///. - /// - internal static string GOODArtifactMainAttribution { - get { - return ResourceManager.GetString("GOODArtifactMainAttribution", resourceCulture); - } - } - - /// - /// 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. - /// - internal static string GOODArtifactSubAttribution { - get { - return ResourceManager.GetString("GOODArtifactSubAttribution", resourceCulture); - } - } - - /// - /// 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]";. - /// - internal static string GOODAvatar { - get { - return ResourceManager.GetString("GOODAvatar", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to 导入成功!. + /// 查找类似 导入成功! 的本地化字符串。 /// internal static string GOODImportSuccess { get { @@ -741,7 +616,7 @@ namespace GrasscutterTools.Properties { } /// - /// Looks up a localized string similar to 是否导入 . + /// 查找类似 是否导入 的本地化字符串。 /// internal static string GOODImportText { get { @@ -750,7 +625,7 @@ namespace GrasscutterTools.Properties { } /// - /// Looks up a localized string similar to 导入GOOD档案. + /// 查找类似 导入GOOD档案 的本地化字符串。 /// internal static string GOODImportTitle { get { @@ -759,38 +634,7 @@ namespace GrasscutterTools.Properties { } /// - /// 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]";. - /// - internal static string GOODWeapon { - get { - return ResourceManager.GetString("GOODWeapon", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to 帮助. + /// 查找类似 帮助 的本地化字符串。 /// internal static string Help { get { @@ -799,7 +643,7 @@ namespace GrasscutterTools.Properties { } /// - /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// 查找类似于 (图标) 的 System.Drawing.Icon 类型的本地化资源。 /// internal static System.Drawing.Icon IconGrasscutter { get { @@ -809,7 +653,7 @@ namespace GrasscutterTools.Properties { } /// - /// Looks up a localized resource of type System.Drawing.Bitmap. + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// internal static System.Drawing.Bitmap ImgHome { get { @@ -819,7 +663,7 @@ namespace GrasscutterTools.Properties { } /// - /// Looks up a localized resource of type System.Drawing.Bitmap. + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// internal static System.Drawing.Bitmap ImgIconGrasscutter { get { @@ -829,7 +673,7 @@ namespace GrasscutterTools.Properties { } /// - /// Looks up a localized resource of type System.Drawing.Bitmap. + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// internal static System.Drawing.Bitmap ImgSupport { get { @@ -839,7 +683,7 @@ namespace GrasscutterTools.Properties { } /// - /// 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]";. + ///210: 原粹精珀(废弃 [字符串的其余部分被截断]"; 的本地化字符串。 /// internal static string Item { get { @@ -893,7 +737,7 @@ namespace GrasscutterTools.Properties { } /// - /// 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]";. + ///290401 [字符串的其余部分被截断]"; 的本地化字符串。 /// internal static string Monster { get { @@ -931,12 +775,12 @@ namespace GrasscutterTools.Properties { } /// - /// Looks up a localized string similar to 版本名:{0} + /// 查找类似 版本名:{0} ///更新时间:{1} ///更新内容: ///{2} ///-------------------------------------------- - ///是否查看更新?选择否将不再提醒该版本。. + ///是否查看更新?选择否将不再提醒该版本。 的本地化字符串。 /// internal static string NewVersionInfo { get { @@ -945,7 +789,7 @@ namespace GrasscutterTools.Properties { } /// - /// 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]";. + ///26: (te [字符串的其余部分被截断]"; 的本地化字符串。 /// internal static string NPC { get { @@ -974,7 +818,7 @@ namespace GrasscutterTools.Properties { } /// - /// Looks up a localized string similar to 1. 填写正确的UID\n2. 向玩家发送验证码\n3. 输入正确的验证码\n4. 连接\n5. 享受. + /// 查找类似 1. 填写正确的UID\n2. 向玩家发送验证码\n3. 输入正确的验证码\n4. 连接\n5. 享受 的本地化字符串。 /// internal static string OpenCommandHelp { get { @@ -983,7 +827,7 @@ namespace GrasscutterTools.Properties { } /// - /// Looks up a localized string similar to 要设置的权限不能为空!. + /// 查找类似 要设置的权限不能为空! 的本地化字符串。 /// internal static string PermissionCannotBeEmpty { get { @@ -992,7 +836,7 @@ namespace GrasscutterTools.Properties { } /// - /// 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]";. + ///play [字符串的其余部分被截断]"; 的本地化字符串。 /// internal static string Permissions { get { @@ -1028,7 +872,7 @@ namespace GrasscutterTools.Properties { } /// - /// Looks up a localized string similar to 查询服务端状态失败:. + /// 查找类似 查询服务端状态失败: 的本地化字符串。 /// internal static string QueryServerStatusFailed { get { @@ -1037,7 +881,7 @@ namespace GrasscutterTools.Properties { } /// - /// 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]";. + ///30607: 昔日的风 - (test [字符串的其余部分被截断]"; 的本地化字符串。 /// internal static string Quest { get { @@ -1067,7 +911,7 @@ namespace GrasscutterTools.Properties { } /// - /// Looks up a localized string similar to 请先连接到支持[OpenCommand]的服务器. + /// 查找类似 请先连接到支持[OpenCommand]的服务器 的本地化字符串。 /// internal static string RequireOpenCommandTip { get { @@ -1076,7 +920,7 @@ namespace GrasscutterTools.Properties { } /// - /// Looks up a localized string similar to 确认将自定义命令恢复到默认值?. + /// 查找类似 确认将自定义命令恢复到默认值? 的本地化字符串。 /// internal static string RestoreCustomCommands { get { @@ -1085,7 +929,7 @@ namespace GrasscutterTools.Properties { } /// - /// 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]";. + ///50027: 圣遗物新因子测试关卡3(t [字符串的其余部分被截断]"; 的本地化字符串。 /// internal static string Scene { get { @@ -1125,7 +969,7 @@ namespace GrasscutterTools.Properties { } /// - /// Looks up a localized string similar to 加载设置时异常:. + /// 查找类似 加载设置时异常: 的本地化字符串。 /// internal static string SettingLoadError { get { @@ -1134,7 +978,7 @@ namespace GrasscutterTools.Properties { } /// - /// Looks up a localized string similar to 保存设置时异常:. + /// 查找类似 保存设置时异常: 的本地化字符串。 /// internal static string SettingSaveError { get { @@ -1143,7 +987,7 @@ namespace GrasscutterTools.Properties { } /// - /// Looks up a localized string similar to 提示. + /// 查找类似 提示 的本地化字符串。 /// internal static string Tips { get { @@ -1152,7 +996,7 @@ namespace GrasscutterTools.Properties { } /// - /// Looks up a localized string similar to Token不能为空. + /// 查找类似 Token不能为空 的本地化字符串。 /// internal static string TokenCannotBeEmpty { get { @@ -1161,7 +1005,7 @@ namespace GrasscutterTools.Properties { } /// - /// Looks up a localized string similar to 已从缓存中恢复Token. + /// 查找类似 已从缓存中恢复Token 的本地化字符串。 /// internal static string TokenRestoredFromCache { get { @@ -1170,7 +1014,7 @@ namespace GrasscutterTools.Properties { } /// - /// Looks up a localized string similar to 用户名不能为空!. + /// 查找类似 用户名不能为空! 的本地化字符串。 /// internal static string UsernameCannotBeEmpty { get { @@ -1179,7 +1023,7 @@ namespace GrasscutterTools.Properties { } /// - /// 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]";. + ///1 [字符串的其余部分被截断]"; 的本地化字符串。 /// internal static string Weapon { get { @@ -1228,7 +1072,7 @@ namespace GrasscutterTools.Properties { } /// - /// 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]";. + ///1240 [字符串的其余部分被截断]"; 的本地化字符串。 /// internal static string WeaponColor { get { diff --git a/Source/GrasscutterTools/Properties/Resources.resx b/Source/GrasscutterTools/Properties/Resources.resx index f035902..a251240 100644 --- a/Source/GrasscutterTools/Properties/Resources.resx +++ b/Source/GrasscutterTools/Properties/Resources.resx @@ -246,9 +246,6 @@ 加载设置时异常: - - 保存设置时异常: - 提示 @@ -267,29 +264,13 @@ ..\Resources\WeaponColor.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 - - - ..\Resources\GOODArtifactCat.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 - - - ..\Resources\GOODArtifactMainAttribution.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 - - - ..\Resources\GOODArtifactSubAttribution.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 - - - ..\Resources\GOODAvatar.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 - - - ..\Resources\GOODWeapon.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 - - 是否导入 + 是否导入 - 导入GOOD档案 + 导入GOOD档案 - 导入成功! + 导入成功! \ No newline at end of file diff --git a/Source/GrasscutterTools/Resources/GOODArtifactCat.txt b/Source/GrasscutterTools/Resources/GOODArtifactCat.txt deleted file mode 100644 index 9d16c90..0000000 --- a/Source/GrasscutterTools/Resources/GOODArtifactCat.txt +++ /dev/null @@ -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 diff --git a/Source/GrasscutterTools/Resources/GOODArtifactMainAttribution.txt b/Source/GrasscutterTools/Resources/GOODArtifactMainAttribution.txt deleted file mode 100644 index 002d799..0000000 --- a/Source/GrasscutterTools/Resources/GOODArtifactMainAttribution.txt +++ /dev/null @@ -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_ diff --git a/Source/GrasscutterTools/Resources/GOODArtifactSubAttribution - Copy.txt b/Source/GrasscutterTools/Resources/GOODArtifactSubAttribution - Copy.txt deleted file mode 100644 index f95d730..0000000 --- a/Source/GrasscutterTools/Resources/GOODArtifactSubAttribution - Copy.txt +++ /dev/null @@ -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% \ No newline at end of file diff --git a/Source/GrasscutterTools/Resources/GOODArtifactSubAttribution.txt b/Source/GrasscutterTools/Resources/GOODArtifactSubAttribution.txt deleted file mode 100644 index 18aaf87..0000000 --- a/Source/GrasscutterTools/Resources/GOODArtifactSubAttribution.txt +++ /dev/null @@ -1,10 +0,0 @@ -102: hp -103: hp_ -105: atk -106: atk_ -108: def -109: def_ -120: critRate_ -122: critDMG_ -123: enerRech_ -124: eleMas \ No newline at end of file diff --git a/Source/GrasscutterTools/Resources/GOODAvatar.txt b/Source/GrasscutterTools/Resources/GOODAvatar.txt deleted file mode 100644 index 6deafa6..0000000 --- a/Source/GrasscutterTools/Resources/GOODAvatar.txt +++ /dev/null @@ -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 diff --git a/Source/GrasscutterTools/Resources/GOODWeapon.txt b/Source/GrasscutterTools/Resources/GOODWeapon.txt deleted file mode 100644 index c110a1f..0000000 --- a/Source/GrasscutterTools/Resources/GOODWeapon.txt +++ /dev/null @@ -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 diff --git a/Source/GrasscutterTools/Utils/ArtifactUtils.cs b/Source/GrasscutterTools/Utils/ArtifactUtils.cs index c77f73c..6af4a71 100644 --- a/Source/GrasscutterTools/Utils/ArtifactUtils.cs +++ b/Source/GrasscutterTools/Utils/ArtifactUtils.cs @@ -19,8 +19,6 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace GrasscutterTools.Utils {