From 2c2f05c5b26307a06499eba86cdaf0cfd1275754 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=AD=B1=E5=82=91?= Date: Sat, 7 Oct 2023 22:22:35 +0800 Subject: [PATCH] Add SceneTag Page --- Source/GrasscutterTools/Forms/FormMain.cs | 2 + .../GrasscutterTools/Game/CommandVersion.cs | 14 +- .../Game/Data/Excels/SceneTagData.cs | 39 ++ .../Game/Data/GameResources.cs | 27 ++ Source/GrasscutterTools/Game/GameData.cs | 3 + .../GrasscutterTools/GrasscutterTools.csproj | 20 + .../Pages/PageSceneTag.Designer.cs | 169 +++++++ Source/GrasscutterTools/Pages/PageSceneTag.cs | 129 +++++ .../Pages/PageSceneTag.en-US.resx | 178 +++++++ .../GrasscutterTools/Pages/PageSceneTag.resx | 450 ++++++++++++++++++ .../Pages/PageSceneTag.ru-RU.resx | 178 +++++++ .../Pages/PageSceneTag.zh-TW.resx | 151 ++++++ .../Properties/Resources.Designer.cs | 55 ++- .../Properties/Resources.en-us.resx | 3 + .../Properties/Resources.resx | 6 + .../Properties/Resources.ru-ru.resx | 3 + .../Properties/Resources.zh-TW.resx | 3 + .../GrasscutterTools/Resources/SceneTag.txt | 446 +++++++++++++++++ 18 files changed, 1871 insertions(+), 5 deletions(-) create mode 100644 Source/GrasscutterTools/Game/Data/Excels/SceneTagData.cs create mode 100644 Source/GrasscutterTools/Pages/PageSceneTag.Designer.cs create mode 100644 Source/GrasscutterTools/Pages/PageSceneTag.cs create mode 100644 Source/GrasscutterTools/Pages/PageSceneTag.en-US.resx create mode 100644 Source/GrasscutterTools/Pages/PageSceneTag.resx create mode 100644 Source/GrasscutterTools/Pages/PageSceneTag.ru-RU.resx create mode 100644 Source/GrasscutterTools/Pages/PageSceneTag.zh-TW.resx create mode 100644 Source/GrasscutterTools/Resources/SceneTag.txt diff --git a/Source/GrasscutterTools/Forms/FormMain.cs b/Source/GrasscutterTools/Forms/FormMain.cs index 95a9265..4ed9467 100644 --- a/Source/GrasscutterTools/Forms/FormMain.cs +++ b/Source/GrasscutterTools/Forms/FormMain.cs @@ -132,6 +132,7 @@ namespace GrasscutterTools.Forms CreatePage(); CreatePage(); CreatePage(); + CreatePage(); CreatePage(); CreatePage(); CreatePage(); @@ -164,6 +165,7 @@ namespace GrasscutterTools.Forms Resources.PageAvatarTitle, Resources.PageGiveWeaponTitle, Resources.PageSceneTitle, + Resources.PageSceneTagTitle, Resources.PageTasksTitle, Resources.PageManagementTitle, Resources.PageMailTitle, diff --git a/Source/GrasscutterTools/Game/CommandVersion.cs b/Source/GrasscutterTools/Game/CommandVersion.cs index 97cabb7..d3954bc 100644 --- a/Source/GrasscutterTools/Game/CommandVersion.cs +++ b/Source/GrasscutterTools/Game/CommandVersion.cs @@ -163,10 +163,20 @@ namespace GrasscutterTools.Game public static readonly Version V1_6_3 = new Version(1, 6, 3); /// - /// 2023/?? + /// 2023/9/1 /// public static readonly Version V1_7_0 = new Version(1, 7, 0); + /// + /// 2023/9/3 + /// + public static readonly Version V1_7_1 = new Version(1, 7, 1); + + /// + /// 2023/10/1 + /// + public static readonly Version V1_7_2 = new Version(1, 7, 2); + // More... /// /// Date @@ -190,6 +200,8 @@ namespace GrasscutterTools.Game V1_6_2, V1_6_3, V1_7_0, + V1_7_1, + V1_7_2, }; #endregion - 版本列表 Version List - diff --git a/Source/GrasscutterTools/Game/Data/Excels/SceneTagData.cs b/Source/GrasscutterTools/Game/Data/Excels/SceneTagData.cs new file mode 100644 index 0000000..a2fade7 --- /dev/null +++ b/Source/GrasscutterTools/Game/Data/Excels/SceneTagData.cs @@ -0,0 +1,39 @@ +/** + * Grasscutter Tools + * Copyright (C) 2023 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.Game.Data.Excels +{ + [ResourceType("SceneTagConfigData.json")] + internal class SceneTagData + { + [JsonProperty("id")] + public int Id { get; set; } + + [JsonProperty("sceneTagName")] + public string SceneTagName { get; set; } + + [JsonProperty("sceneId")] + public int SceneId { get; set; } + + [JsonProperty("isDefaultValid")] + public bool IsDefaultValid { get; set; } + } +} diff --git a/Source/GrasscutterTools/Game/Data/GameResources.cs b/Source/GrasscutterTools/Game/Data/GameResources.cs index 8bf71f3..4be9c8d 100644 --- a/Source/GrasscutterTools/Game/Data/GameResources.cs +++ b/Source/GrasscutterTools/Game/Data/GameResources.cs @@ -63,6 +63,8 @@ namespace GrasscutterTools.Game.Data public Dictionary SceneData { get; set; } + public List SceneTagData { get; set; } + public Dictionary WeaponData { get; set; } public TextMapData TextMapData { get; set; } @@ -419,6 +421,31 @@ namespace GrasscutterTools.Game.Data #endregion Weapon } + #region SceneTag + + // SceneTag + + sb.Clear(); + + foreach (var scene in SceneTagData + .GroupBy(it => it.SceneId)) + { + sb.Append("// ").AppendLine(scene.Key.ToString()); + foreach (var sceneTag in scene) + { + sb.Append($"{sceneTag.Id}:{sceneTag.SceneTagName}"); + if (sceneTag.IsDefaultValid) + sb.Append(" (Default)"); + sb.AppendLine(); + } + } + File.WriteAllText( + Path.Combine(projectResourcesDir, "SceneTag.txt"), + sb.ToString(), + Encoding.UTF8); + + #endregion + File.WriteAllLines( Path.Combine(projectResourcesDir, "AvatarColor.txt"), AvatarData.Values.Select(it => $"{it.Id % 1000 + 1000}:{(int)it.QualityType}"), diff --git a/Source/GrasscutterTools/Game/GameData.cs b/Source/GrasscutterTools/Game/GameData.cs index db09e5b..20dd85a 100644 --- a/Source/GrasscutterTools/Game/GameData.cs +++ b/Source/GrasscutterTools/Game/GameData.cs @@ -38,6 +38,7 @@ namespace GrasscutterTools.Game Monsters = new ItemMapGroup(Resources.Monsters); Gadgets = new ItemMapGroup(Resources.Gadget); Scenes = new ItemMap(Resources.Scene); + SceneTags = new ItemMapGroup(Resources.SceneTag); Dungeons = new ItemMap(Resources.Dungeon); Weapons = new ItemMap(Resources.Weapon); WeaponColors = new ItemMap(Resources.WeaponColor); @@ -73,6 +74,8 @@ namespace GrasscutterTools.Game public static ItemMap Scenes { get; private set; } + public static ItemMapGroup SceneTags { get; private set; } + public static ItemMap Dungeons { get; private set; } public static ItemMap Weapons { get; private set; } diff --git a/Source/GrasscutterTools/GrasscutterTools.csproj b/Source/GrasscutterTools/GrasscutterTools.csproj index b2adafc..88c5e00 100644 --- a/Source/GrasscutterTools/GrasscutterTools.csproj +++ b/Source/GrasscutterTools/GrasscutterTools.csproj @@ -164,6 +164,7 @@ + @@ -291,6 +292,12 @@ PageScene.cs + + UserControl + + + PageSceneTag.cs + UserControl @@ -607,6 +614,18 @@ PageScene.cs + + PageSceneTag.cs + + + PageSceneTag.cs + + + PageSceneTag.cs + + + PageSceneTag.cs + PageSetProp.cs @@ -749,6 +768,7 @@ + diff --git a/Source/GrasscutterTools/Pages/PageSceneTag.Designer.cs b/Source/GrasscutterTools/Pages/PageSceneTag.Designer.cs new file mode 100644 index 0000000..a921208 --- /dev/null +++ b/Source/GrasscutterTools/Pages/PageSceneTag.Designer.cs @@ -0,0 +1,169 @@ +namespace GrasscutterTools.Pages +{ + partial class PageSceneTag + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 组件设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PageSceneTag)); + this.TvSceneTags = new System.Windows.Forms.TreeView(); + this.GrpOnSelectedCheck = new System.Windows.Forms.GroupBox(); + this.RbOnSelectedUncheck = new System.Windows.Forms.RadioButton(); + this.RbOnSelectedCheck = new System.Windows.Forms.RadioButton(); + this.GrpOnDefaultSelectedCheck = new System.Windows.Forms.GroupBox(); + this.RbOnDefaultSelectedCheck = new System.Windows.Forms.RadioButton(); + this.RbOnDefaultSelectedUncheck = new System.Windows.Forms.RadioButton(); + this.LblTitle = new System.Windows.Forms.Label(); + this.LblDefaultTagTip = new System.Windows.Forms.Label(); + this.BtnUnlockAll = new System.Windows.Forms.Button(); + this.ChkOnSceneSelectedEnter = new System.Windows.Forms.CheckBox(); + this.LblRightButtonClickTip = new System.Windows.Forms.Label(); + this.GrpOnSelectedCheck.SuspendLayout(); + this.GrpOnDefaultSelectedCheck.SuspendLayout(); + this.SuspendLayout(); + // + // TvSceneTags + // + resources.ApplyResources(this.TvSceneTags, "TvSceneTags"); + this.TvSceneTags.FullRowSelect = true; + this.TvSceneTags.Name = "TvSceneTags"; + this.TvSceneTags.ShowLines = false; + this.TvSceneTags.NodeMouseClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.TvSceneTags_NodeMouseClick); + // + // GrpOnSelectedCheck + // + resources.ApplyResources(this.GrpOnSelectedCheck, "GrpOnSelectedCheck"); + this.GrpOnSelectedCheck.Controls.Add(this.RbOnSelectedUncheck); + this.GrpOnSelectedCheck.Controls.Add(this.RbOnSelectedCheck); + this.GrpOnSelectedCheck.Name = "GrpOnSelectedCheck"; + this.GrpOnSelectedCheck.TabStop = false; + // + // RbOnSelectedUncheck + // + resources.ApplyResources(this.RbOnSelectedUncheck, "RbOnSelectedUncheck"); + this.RbOnSelectedUncheck.Name = "RbOnSelectedUncheck"; + this.RbOnSelectedUncheck.TabStop = true; + this.RbOnSelectedUncheck.UseVisualStyleBackColor = true; + // + // RbOnSelectedCheck + // + resources.ApplyResources(this.RbOnSelectedCheck, "RbOnSelectedCheck"); + this.RbOnSelectedCheck.Checked = true; + this.RbOnSelectedCheck.Name = "RbOnSelectedCheck"; + this.RbOnSelectedCheck.TabStop = true; + this.RbOnSelectedCheck.UseVisualStyleBackColor = true; + // + // GrpOnDefaultSelectedCheck + // + resources.ApplyResources(this.GrpOnDefaultSelectedCheck, "GrpOnDefaultSelectedCheck"); + this.GrpOnDefaultSelectedCheck.Controls.Add(this.RbOnDefaultSelectedCheck); + this.GrpOnDefaultSelectedCheck.Controls.Add(this.RbOnDefaultSelectedUncheck); + this.GrpOnDefaultSelectedCheck.Name = "GrpOnDefaultSelectedCheck"; + this.GrpOnDefaultSelectedCheck.TabStop = false; + // + // RbOnDefaultSelectedCheck + // + resources.ApplyResources(this.RbOnDefaultSelectedCheck, "RbOnDefaultSelectedCheck"); + this.RbOnDefaultSelectedCheck.Name = "RbOnDefaultSelectedCheck"; + this.RbOnDefaultSelectedCheck.TabStop = true; + this.RbOnDefaultSelectedCheck.UseVisualStyleBackColor = true; + // + // RbOnDefaultSelectedUncheck + // + resources.ApplyResources(this.RbOnDefaultSelectedUncheck, "RbOnDefaultSelectedUncheck"); + this.RbOnDefaultSelectedUncheck.Checked = true; + this.RbOnDefaultSelectedUncheck.Name = "RbOnDefaultSelectedUncheck"; + this.RbOnDefaultSelectedUncheck.TabStop = true; + this.RbOnDefaultSelectedUncheck.UseVisualStyleBackColor = true; + // + // LblTitle + // + resources.ApplyResources(this.LblTitle, "LblTitle"); + this.LblTitle.Name = "LblTitle"; + // + // LblDefaultTagTip + // + resources.ApplyResources(this.LblDefaultTagTip, "LblDefaultTagTip"); + this.LblDefaultTagTip.ForeColor = System.Drawing.SystemColors.GrayText; + this.LblDefaultTagTip.Name = "LblDefaultTagTip"; + // + // BtnUnlockAll + // + resources.ApplyResources(this.BtnUnlockAll, "BtnUnlockAll"); + this.BtnUnlockAll.Name = "BtnUnlockAll"; + this.BtnUnlockAll.UseVisualStyleBackColor = true; + this.BtnUnlockAll.Click += new System.EventHandler(this.BtnUnlockAll_Click); + // + // ChkOnSceneSelectedEnter + // + resources.ApplyResources(this.ChkOnSceneSelectedEnter, "ChkOnSceneSelectedEnter"); + this.ChkOnSceneSelectedEnter.Name = "ChkOnSceneSelectedEnter"; + this.ChkOnSceneSelectedEnter.UseVisualStyleBackColor = true; + // + // LblRightButtonClickTip + // + resources.ApplyResources(this.LblRightButtonClickTip, "LblRightButtonClickTip"); + this.LblRightButtonClickTip.ForeColor = System.Drawing.SystemColors.GrayText; + this.LblRightButtonClickTip.Name = "LblRightButtonClickTip"; + // + // PageSceneTag + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.LblRightButtonClickTip); + this.Controls.Add(this.ChkOnSceneSelectedEnter); + this.Controls.Add(this.BtnUnlockAll); + this.Controls.Add(this.LblDefaultTagTip); + this.Controls.Add(this.LblTitle); + this.Controls.Add(this.GrpOnDefaultSelectedCheck); + this.Controls.Add(this.GrpOnSelectedCheck); + this.Controls.Add(this.TvSceneTags); + this.Name = "PageSceneTag"; + this.GrpOnSelectedCheck.ResumeLayout(false); + this.GrpOnSelectedCheck.PerformLayout(); + this.GrpOnDefaultSelectedCheck.ResumeLayout(false); + this.GrpOnDefaultSelectedCheck.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TreeView TvSceneTags; + private System.Windows.Forms.GroupBox GrpOnSelectedCheck; + private System.Windows.Forms.RadioButton RbOnSelectedUncheck; + private System.Windows.Forms.RadioButton RbOnSelectedCheck; + private System.Windows.Forms.GroupBox GrpOnDefaultSelectedCheck; + private System.Windows.Forms.RadioButton RbOnDefaultSelectedCheck; + private System.Windows.Forms.RadioButton RbOnDefaultSelectedUncheck; + private System.Windows.Forms.Label LblTitle; + private System.Windows.Forms.Label LblDefaultTagTip; + private System.Windows.Forms.Button BtnUnlockAll; + private System.Windows.Forms.CheckBox ChkOnSceneSelectedEnter; + private System.Windows.Forms.Label LblRightButtonClickTip; + } +} diff --git a/Source/GrasscutterTools/Pages/PageSceneTag.cs b/Source/GrasscutterTools/Pages/PageSceneTag.cs new file mode 100644 index 0000000..32d94fa --- /dev/null +++ b/Source/GrasscutterTools/Pages/PageSceneTag.cs @@ -0,0 +1,129 @@ +/** + * Grasscutter Tools + * Copyright (C) 2023 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; +using System.Windows.Forms; +using GrasscutterTools.Game; + +namespace GrasscutterTools.Pages +{ + internal partial class PageSceneTag : BasePage + { + public PageSceneTag() + { + InitializeComponent(); + } + + /// + /// 初始化场景标签 + /// + public override void OnLoad() + { + TvSceneTags.BeginUpdate(); + TvSceneTags.Nodes.Clear(); + + foreach (var sceneTagGroup in GameData.SceneTags) + { + // 将场景作为标签分类 + var sceneName = int.TryParse(sceneTagGroup.Key, out var sceneId) + ? GameData.Scenes[sceneId] + : sceneTagGroup.Key; + var node = TvSceneTags.Nodes.Add(sceneTagGroup.Key, sceneName); + + // 添加所有标签 + var tags = sceneTagGroup.Value; + for (var i = 0; i < tags.Count; i++) + node.Nodes.Add(tags.Ids[i].ToString(), tags.Names[i]); + } + TvSceneTags.EndUpdate(); + } + + ///// + ///// 场景标签树视图选中后触发 + ///// + //private void TvSceneTags_AfterSelect(object sender, TreeViewEventArgs e) + //{ + // // 忽略未知操作 + // if (e.Action == TreeViewAction.Unknown || !e.Node.IsSelected) + // return; + + // // 处理根节点选中 + // var selectedNode = e.Node; + // if (selectedNode.Level == 0) + // { + // if (ChkOnSceneSelectedEnter.Checked) + // { + // SetCommand("/tp", $"0 400 0 {selectedNode.Name}"); + // } + // } + // else + // { + // // 确认是否为默认状态 + // var isDefault = selectedNode.Text.Contains("(Default)"); + // var tagId = selectedNode.Name; + // // 根据选项决定动作 + // var sub = isDefault + // ? RbOnDefaultSelectedCheck.Checked + // ? "add" : "remove" + // : RbOnSelectedCheck.Checked + // ? "add" : "remove"; + // SetCommand("/tag", $"{sub} {tagId}"); + // } + //} + + /// + /// 点击解锁全部时触发 + /// + private void BtnUnlockAll_Click(object sender, EventArgs e) + { + SetCommand("/tag", "unlockall"); + } + + /// + /// 场景标签节点点击时触发 + /// + private void TvSceneTags_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) + { + // 处理根节点选中 + var selectedNode = e.Node; + if (selectedNode.Level == 0) + { + if (ChkOnSceneSelectedEnter.Checked) + { + SetCommand("/tp", $"0 400 0 {selectedNode.Name}"); + } + } + else + { + // 确认是否为默认状态 + var isDefault = selectedNode.Text.Contains("(Default)"); + var tagId = selectedNode.Name; + // 根据选项决定动作 + var isAdd = isDefault ? RbOnDefaultSelectedCheck.Checked : RbOnSelectedCheck.Checked; + // 如果是右键则相反 + if (e.Button == MouseButtons.Right) + isAdd = !isAdd; + var sub = isAdd ? "add" : "remove"; + SetCommand("/tag", $"{sub} {tagId}"); + // 设置为选中节点 + TvSceneTags.SelectedNode = selectedNode; + } + } + } +} diff --git a/Source/GrasscutterTools/Pages/PageSceneTag.en-US.resx b/Source/GrasscutterTools/Pages/PageSceneTag.en-US.resx new file mode 100644 index 0000000..17e3303 --- /dev/null +++ b/Source/GrasscutterTools/Pages/PageSceneTag.en-US.resx @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Clicking on Tag: + + + + 99, 21 + + + Remove Tag + + + 76, 21 + + + Add Tag + + + Clicking on (Default) Tag: + + + 76, 21 + + + Add Tag + + + 99, 21 + + + Remove Tag + + + 167, 17 + + + Scene Tag (since GC v1.7.2) + + + 329, 17 + + + The default tag is usually the "before" or "locked" state + + + Unlock All + + + 125, 21 + + + Click scene enter + + + 114, 17 + + + Right click reverse + + \ No newline at end of file diff --git a/Source/GrasscutterTools/Pages/PageSceneTag.resx b/Source/GrasscutterTools/Pages/PageSceneTag.resx new file mode 100644 index 0000000..6cc427d --- /dev/null +++ b/Source/GrasscutterTools/Pages/PageSceneTag.resx @@ -0,0 +1,450 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 4 + + + 0 + + + + True + + + GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.13.0.0, Culture=neutral, PublicKeyToken=de2b1c089621e923 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + RbOnSelectedUncheck + + + 7 + + + $this + + + 1 + + + 移除标签 + + + + 111, 21 + + + True + + + 5 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + GrpOnDefaultSelectedCheck + + + 6 + + + GrpOnSelectedCheck + + + 80, 17 + + + 2 + + + True + + + TvSceneTags + + + 200, 80 + + + BtnUnlockAll + + + $this + + + RbOnDefaultSelectedCheck + + + 1 + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + LblTitle + + + GrpOnDefaultSelectedCheck + + + $this + + + $this + + + 74, 21 + + + 13, 22 + + + 预设(Default)标签通常是锁定或者之前的状态 + + + 209, 23 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 187, 211 + + + GrpOnSelectedCheck + + + 0 + + + 解锁全部 + + + 13, 49 + + + True + + + LblDefaultTagTip + + + RbOnSelectedCheck + + + 点击标签时 + + + 3 + + + $this + + + PageSceneTag + + + 74, 21 + + + 右键点击相反 + + + RbOnDefaultSelectedUncheck + + + 场景标签管理 (GC v1.7.2 起) + + + 74, 21 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0 + + + 162, 17 + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 4 + + + 7, 17 + + + 3, 109 + + + + Bottom, Left + + + 7 + + + 3, 23 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 5 + + + $this + + + True + + + ChkOnSceneSelectedEnter + + + 8 + + + 1 + + + 1 + + + LblRightButtonClickTip + + + 0 + + + $this + + + GrpOnSelectedCheck + + + 2 + + + 3 + + + 300, 233 + + + 0 + + + Top, Bottom, Left, Right + + + 200, 80 + + + 点击场景时进入 + + + True + + + True + + + 150, 25 + + + 3, 192 + + + 13, 49 + + + 249, 17 + + + 13, 22 + + + 74, 21 + + + 移除标签 + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + GrpOnDefaultSelectedCheck + + + 添加标签 + + + 343, 3 + + + 1 + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 6, 214 + + + 点击(预设)标签时 + + + 3, 3 + + + 添加标签 + + + True + + + 6 + + + 1 + + + True + + \ No newline at end of file diff --git a/Source/GrasscutterTools/Pages/PageSceneTag.ru-RU.resx b/Source/GrasscutterTools/Pages/PageSceneTag.ru-RU.resx new file mode 100644 index 0000000..7dbfda4 --- /dev/null +++ b/Source/GrasscutterTools/Pages/PageSceneTag.ru-RU.resx @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Нажимаем на тег: + + + + 95, 21 + + + Удалить тег + + + 106, 21 + + + Добавить тег + + + Нажимаем на тег(Default): + + + 106, 21 + + + Добавить тег + + + 95, 21 + + + Удалить тег + + + 201, 17 + + + Тег сцены (начиная с GC v1.7.2) + + + 329, 17 + + + The default tag is usually the "before" or "locked" state + + + Разблокировать все + + + 125, 21 + + + Click scene enter + + + 114, 17 + + + Right click reverse + + \ No newline at end of file diff --git a/Source/GrasscutterTools/Pages/PageSceneTag.zh-TW.resx b/Source/GrasscutterTools/Pages/PageSceneTag.zh-TW.resx new file mode 100644 index 0000000..7c0dbb8 --- /dev/null +++ b/Source/GrasscutterTools/Pages/PageSceneTag.zh-TW.resx @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 點擊標籤時 + + + 移除標籤 + + + 添加標籤 + + + 點擊(預設)標籤時 + + + + 170, 17 + + + 場景標籤管理(GC v1.7.2起) + + + 預設(Default)標籤通常是鎖定或者之前的狀態 + + + 解鎖全部 + + + 點擊場景時進入 + + + 右鍵點擊相反 + + \ No newline at end of file diff --git a/Source/GrasscutterTools/Properties/Resources.Designer.cs b/Source/GrasscutterTools/Properties/Resources.Designer.cs index 22021d2..d73bd89 100644 --- a/Source/GrasscutterTools/Properties/Resources.Designer.cs +++ b/Source/GrasscutterTools/Properties/Resources.Designer.cs @@ -1203,6 +1203,15 @@ namespace GrasscutterTools.Properties { } } + /// + /// 查找类似 场景项 的本地化字符串。 + /// + internal static string PageSceneTagTitle { + get { + return ResourceManager.GetString("PageSceneTagTitle", resourceCulture); + } + } + /// /// 查找类似 场景 的本地化字符串。 /// @@ -1396,6 +1405,44 @@ namespace GrasscutterTools.Properties { } } + /// + /// 查找类似 // 3 + ///101:Hdj + ///102:JadeChamber (Default) + ///103:JadeChamber + ///104:Hdj + ///105:Fhj + ///107:KlinSeal (Default) + ///111:Ruinup + ///112:QLFightPlatform + ///113:Lmboss_01 (Default) + ///114:FlowerZone_01 + ///115:FlowerZone_02 + ///116:Lmboss_02 + ///117:LYDS_01 (Default) + ///118:LYDS_02 + ///119:Zyj + ///124:WinterCamp + ///125:Hguan01 (Default) + ///126:Hguan02 + ///127:Hguan03 + ///128:RBQyg_01 + ///129:RBQyg_02 + ///130:RBQyg_03 + ///131:RBQyg_04 + ///133:RBQyg_Stage + ///134:TongqueTemple_Old (Default) + ///135:TongqueTemple_New + ///139:HZD01 (Default) + ///140:HZD02 + ///141:CYJY_Phase1_ON (Default) /// [字符串的其余部分被截断]"; 的本地化字符串。 + /// + internal static string SceneTag { + get { + return ResourceManager.GetString("SceneTag", resourceCulture); + } + } + /// /// 查找类似 请先选中任意项! 的本地化字符串。 /// @@ -1592,6 +1639,7 @@ namespace GrasscutterTools.Properties { ///11424:狼牙 ///11425:海渊终曲 ///11426:灰河渡手 + ///11427:船坞长剑 ///11501:风鹰剑 ///11502:天空之刃 ///11503:苍古自由之誓 @@ -1601,8 +1649,7 @@ namespace GrasscutterTools.Properties { ///11510:波乱月白经津 ///11511:圣显之钥 ///11512:裁叶萃光 - ///12101:训练大剑 - ///12201: [字符串的其余部分被截断]"; 的本地化字符串。 + ///12101: [字符串的其余部分被截断]"; 的本地化字符串。 /// internal static string Weapon { get { @@ -1643,12 +1690,12 @@ namespace GrasscutterTools.Properties { ///11424:purple ///11425:purple ///11426:purple + ///11427:purple ///11501:yellow ///11502:yellow ///11503:yellow ///11504:yellow - ///11505:yellow - ///11509:yell [字符串的其余部分被截断]"; 的本地化字符串。 + ///11505:yell [字符串的其余部分被截断]"; 的本地化字符串。 /// internal static string WeaponColor { get { diff --git a/Source/GrasscutterTools/Properties/Resources.en-us.resx b/Source/GrasscutterTools/Properties/Resources.en-us.resx index 5fe663d..439d7d8 100644 --- a/Source/GrasscutterTools/Properties/Resources.en-us.resx +++ b/Source/GrasscutterTools/Properties/Resources.en-us.resx @@ -372,4 +372,7 @@ Improvement suggestions have been submitted, please use caution to send emails t Stop Proxy + + SceneTag + \ No newline at end of file diff --git a/Source/GrasscutterTools/Properties/Resources.resx b/Source/GrasscutterTools/Properties/Resources.resx index 1ea1cb6..a6be29c 100644 --- a/Source/GrasscutterTools/Properties/Resources.resx +++ b/Source/GrasscutterTools/Properties/Resources.resx @@ -381,4 +381,10 @@ 关闭代理 + + ..\Resources\SceneTag.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 + + + 场景项 + \ No newline at end of file diff --git a/Source/GrasscutterTools/Properties/Resources.ru-ru.resx b/Source/GrasscutterTools/Properties/Resources.ru-ru.resx index 5d3d82e..6b965bb 100644 --- a/Source/GrasscutterTools/Properties/Resources.ru-ru.resx +++ b/Source/GrasscutterTools/Properties/Resources.ru-ru.resx @@ -360,4 +360,7 @@ Остановить прокси + + Тег сцены + \ No newline at end of file diff --git a/Source/GrasscutterTools/Properties/Resources.zh-TW.resx b/Source/GrasscutterTools/Properties/Resources.zh-TW.resx index c4f41f1..6c528fd 100644 --- a/Source/GrasscutterTools/Properties/Resources.zh-TW.resx +++ b/Source/GrasscutterTools/Properties/Resources.zh-TW.resx @@ -366,4 +366,7 @@ 關閉代理 + + 場景項 + \ No newline at end of file diff --git a/Source/GrasscutterTools/Resources/SceneTag.txt b/Source/GrasscutterTools/Resources/SceneTag.txt new file mode 100644 index 0000000..bcde6cf --- /dev/null +++ b/Source/GrasscutterTools/Resources/SceneTag.txt @@ -0,0 +1,446 @@ +// 3 +101:Hdj +102:JadeChamber (Default) +103:JadeChamber +104:Hdj +105:Fhj +107:KlinSeal (Default) +111:Ruinup +112:QLFightPlatform +113:Lmboss_01 (Default) +114:FlowerZone_01 +115:FlowerZone_02 +116:Lmboss_02 +117:LYDS_01 (Default) +118:LYDS_02 +119:Zyj +124:WinterCamp +125:Hguan01 (Default) +126:Hguan02 +127:Hguan03 +128:RBQyg_01 +129:RBQyg_02 +130:RBQyg_03 +131:RBQyg_04 +133:RBQyg_Stage +134:TongqueTemple_Old (Default) +135:TongqueTemple_New +139:HZD01 (Default) +140:HZD02 +141:CYJY_Phase1_ON (Default) +142:CYJY_Phase1_OFF +147:Irodori +149:SHOPYamashiroKenta +152:Vintage +153:Vintage_Md +154:FungusFighter +155:BrickBreaker01 +156:BrickBreaker02 +157:BrickBreaker03 +158:Hdj01 +159:Hdj02 +160:Hdj_Alcor +164:FleurFairV2 +165:FFV2_MNCH +170:AkaFes +171:Journey01 +172:Journey02 +173:Journey03 +174:Journey04 +1001:Combine_Lyg +1002:Combine_Mdc +1011:Combine_RBQyg +1027:Combine_Irodori +1030:Combine_QldFight +1068:Combine_SHOPYamashiroKenta +1091:XMSM_LSK_01 (Default) +1092:XMSM_LSK_02 +1093:Vana_real +1094:Vana_dream (Default) +1095:Vana_first (Default) +1096:Vana_festival +1097:Onion_real +1098:Onion_dream +1099:Temple_before (Default) +1100:Temple_after +1101:Forest_before (Default) +1102:Forest_after +1103:Oasis_before (Default) +1104:Oasis_after +1105:Final_before (Default) +1106:Final_after +1107:Vintage_BaseGrass +1108:Final_BaseGrass +1109:Combine_Forest_after +1110:Mdg_real (Default) +1111:Mdg_dream +1112:HuaShen01 +1114:HuaShen02 +1116:HuaShen03 +1117:Combine_HuaShen03 +1118:VarunaCo_Af +1119:VarunaDe_Af +1120:CaveForest_No (Default) +1121:CaveForest_Dr +1122:WaterDR_Be (Default) +1123:WaterDR_Af +1124:Oasis_BaseGrass +1125:VarunaCo_Be (Default) +1126:Vintage_BaseTerrain +1127:WaterPour_be (Default) +1128:WaterPour_af +1129:DoorOpen_be (Default) +1130:DoorOpen_af +1131:CupGrow_before (Default) +1132:CupGrow_after +1133:Clear_before (Default) +1134:Clear_after +1135:STemple_be (Default) +1136:STemple_af +1137:XMSM_XST_01 (Default) +1138:XMSM_YHYD1_01 (Default) +1139:XMSM_YHYD1_02 +1140:XMSM_YHYD2_01 (Default) +1141:XMSM_YHYD2_02 +1142:Combine_Vintage +1143:Titan_before (Default) +1144:Titan_after +1145:Combine_TitanO_after +1146:VarunaDe_Be (Default) +1149:CupGrow_0_2_BaseGrass +1162:TitanO_after +1164:XMSM_CWLTop +1165:CWL_Trans_01 (Default) +1166:CWL_Trans_02 +1168:Xmsm_AfCs (Default) +1169:XMSM_CWLBlock +1170:XMSM_XST_02 +1183:XMSM_YHYD1_03 +1184:XMSM_YHYD2_03 +1187:Sprite_Before (Default) +1188:Sprite_After +1189:Sprite_BaseGrass +1190:XM_RobotA1 (Default) +1191:XM_RobotA2 +1192:XM_RobotAC +1193:XM_RobotB1 +1194:XM_RobotB2 (Default) +1195:XM_RobotC1 +1196:XM_RobotD1 (Default) +1197:XM_RobotD2 +1198:XM_RobotD2C +1199:XM_LSYJ_01 (Default) +1200:XM_DJLT_01 (Default) +1203:CycleDungeon01 +1204:DreamClub01 +1205:Combine_FungusFighter +1208:Combine_BrickBreaker01 +1219:XM_RobotB3 +1220:XM_RobotBake +1221:Combine_DreamClub01 +1222:XM_LSYJ_-2_5_BaseGrass +1223:SCSK_01 (Default) +1224:SCSK_02 +1225:SCSK_SK1_01 (Default) +1226:SCSK_SK1_02 +1227:SCSK_SK2_01 (Default) +1228:SCSK_SK2_02 +1229:SCSK_SK3_01 (Default) +1230:SCSK_SK3_02 +1231:SCSK_SK4_01 (Default) +1232:SCSK_SK4_02 +1233:SCSK_SK5_01 (Default) +1234:SCSK_SK5_02 +1235:JJZZ_01 (Default) +1236:JJZZ_02 +1237:JJZZ_03 (Default) +1238:JJZZ_04 +1239:SCCX_01 (Default) +1240:SCCX_02 +1241:GLHH_01 (Default) +1242:GLHH_02 +1243:SSL_01 +1244:JSJS_01 (Default) +1245:JSJS_02 +1246:SCSK_BaseTerrain +1247:SCSK_BaseGrass +1248:Combine_Hdj_Alcor +1249:SKYJ_01 +1250:NLZS_01 +1251:CJC_01 (Default) +1252:LIFT_HIGH_Bake +1253:LIFT_MID_Bake +1254:LIFT_DOWN_Bake +1255:CJC_02 +1257:Onion_real_ex +1258:Onion_real_mx +1259:Onion_dream_ex (Default) +1260:Onion_dream_mx +1275:Combine_AkaFes +1276:FD_KZST_P1 (Default) +1281:FD_BoilLake_Be (Default) +1282:FD_BoilLake_Af +1291:FD_LS_Be (Default) +1292:FD_LS_Af +1293:FD_SMF_Be (Default) +1294:FD_SMF_Af +1295:FD_HEART_Be (Default) +1296:FD_HEART_Af +1301:Combine_Journey01 +1302:Combine_Journey02 +1303:Combine_Journey04 +1306:FD_LS_MLAHua +1307:FD_LS_CKShi (Default) +1320:FD_Tower_Bf (Default) +1322:FD_DPQS_Before (Default) +1328:FD_HEARTIN_Be (Default) +1329:FD_HEARTIN_Af +1330:FD_SpaceR_Be (Default) +1331:FD_SpaceR_Af +1332:FD_HEART_BaseGrass +1336:WishPond_mx +1341:FD_Fish_Be (Default) +1342:FD_Fish_Af +1346:FD_PoissonFlod +// 4 +106:SummerTime +108:SummerTime_High +109:SummerTime_Low +// 5 +120:AbyssalNight +121:AbyssalIsle +122:AbyssalEvent +123:AbyssalEventNight +1003:Aby_LightOFF +1004:Aby_LightON +1005:AbyIsle_Const +1006:AbyIsle_LightON +1007:AbyIsle_LightOFF +1009:AbyIsle_NotEvent +1010:AbyIsle_NotEventLightOFF +1028:Aby_NotEvent +1029:Aby_NotEventLightOFF +1031:MichiaeMatsuri_WQ_Default5 (Default) +// 7 +136:Aby_LightOFF (Default) +137:AbyIsle_Const (Default) +138:AbyIsle_LightOFF (Default) +148:Aby_Event (Default) +1032:MichiaeMatsuri_WQ_Default7 +1033:MichiaeMatsuri_WQ_SideA +1034:MichiaeMatsuri_WQ_SideB +// 6 +143:CYJY_Phase2_ON (Default) +144:CYJY_Phase2_OFF +145:CYJY_Phase3_ON (Default) +146:CYJY_Phase3_OFF +150:CYJY_Phase4ON +151:CYJY_Phase4OFF +1061:CYJY_Twins2_Block_ON (Default) +1062:CYJY_Twins2_Block_OFF +1063:CYJY_Twins1_OFF (Default) +1064:CYJY_Twins1_ON +// 20176 +161:Wisdom03_Norm (Default) +162:Wisdom03_Inver +163:Wisdom03_Inver_Routine +// 47401 +166:PacMan_Day (Default) +// 47403 +167:PacMan_Day (Default) +// 47405 +168:PacMan_Night (Default) +// 47406 +169:PacMan_Night (Default) +// 9 +1012:DI_WW01 (Default) +1013:DI_WW02 +1014:DI_PP01 (Default) +1015:DI_PP02 +1016:DI_PP03 +1017:DI_SS01 (Default) +1018:DI_SS02 +1019:DI_SS03 +1020:DI_BD01 (Default) +1021:DI_BDLM +1022:DI_BDRM +1023:DI_BDLI +1024:DI_BDRI +1025:DI_BDLL +1026:DI_BDRL +1035:DreamIsland_All_WithoutAnyChange +1036:DreamIsland_-1_-1_BaseTerrain +1037:DreamIsland_0_-1_BaseTerrain +1038:DreamIsland_0_0_BaseTerrain +1039:DreamIsland_-1_0_BaseTerrain +1040:DreamIsland_-1_-1_BaseGrass +1041:DreamIsland_0_-1_BaseGrass +1042:DreamIsland_0_0_BaseGrass +1043:DreamIsland_-1_0_BaseGrass +1060:DI_SS04 +1076:DI_SkiffWQ +1077:DI_BDMM +1078:DI_BDII +1079:DI_BDIM +1080:DI_BDMI +1081:DI_BDYY +1082:DI_BDMY +1083:DI_BDYM +1084:DI_BDIY +1085:DI_BDYI +// 20139 +1046:DI_Fischl01 (Default) +1047:DI_Fischl02 +// 20133 +1048:DI_Xinyan01 (Default) +1049:DI_Xinyan02 +// 20142 +1050:DI_Kazuha01 (Default) +1051:DI_Kazuha02 (Default) +1052:DI_Kazuha03 +1053:DI_Kazuha04 +1054:DI_Kazuha05 +1055:DI_Kazuha06 +1056:DI_Kazuha07 +1057:DI_Kazuha08 +1058:DI_Kazuha09 +1059:DI_Kazuha10 +// 20136 +1065:DI_Mona01 (Default) +1066:DI_Mona02 +1067:DI_Mona03 +1074:DI_Mona04 +1075:DI_Mona05 +// 20140 +1069:DI_Kazuha31 (Default) +1070:DI_Kazuha32 +1071:DI_Kazuha33 +1086:DI_Kazuha35 +// 20135 +1072:DI_Kazuha21 (Default) +1073:DI_Kazuha22 (Default) +// 20132 +1087:BigTree01 +1088:BigTree02 +1089:BigTree03 (Default) +1090:BigTree04 (Default) +// 20160 +1147:BigTree04 (Default) +// 20161 +1148:BigTree04 (Default) +// 46300 +1150:BigTree01 +1151:BigTree02 +1152:BigTree03 (Default) +1153:BigTree04 (Default) +// 46302 +1154:BigTree01 +1155:BigTree02 +1156:BigTree03 (Default) +1157:BigTree04 (Default) +// 46303 +1158:BigTree01 +1159:BigTree02 +1160:BigTree03 (Default) +1161:BigTree04 (Default) +// 20150 +1167:WorldTree01 +// 35860 +1171:BigTree03 (Default) +1172:BigTree04 (Default) +// 35861 +1173:BigTree03 (Default) +1174:BigTree04 (Default) +// 35862 +1175:BigTree03 (Default) +1176:BigTree04 (Default) +// 35863 +1177:BigTree03 (Default) +1178:BigTree04 (Default) +// 20154 +1179:ScarBoss01 (Default) +1180:ScarBoss02 +// 20153 +1181:ScarBoss01 (Default) +1182:ScarBoss02 +// 20164 +1185:WorldTree01 (Default) +// 20148 +1186:Onion_after +// 20168 +1201:ScarBoss01 (Default) +1202:ScarBoss02 +// 20171 +1206:ScarBoss01 (Default) +1207:ScarBoss02 +// 1075 +1209:JSG_State1 (Default) +1210:JSG_State2 +1211:JSG_State3 +// 1073 +1213:L_AkashaOpen (Default) +1214:L_AkashaClose +// 20158 +1215:BoatTurn +1216:Boat_BaseTerrain (Default) +1217:Boat_BaseGrass (Default) +1218:Combine_BoatTurn (Default) +// 20178 +1256:Hang_01 (Default) +// 10 +1261:PN_Cinema_Bf (Default) +1262:PN_Cinema_Af +1263:PN_Vine_Bf (Default) +1264:PN_Vine_Af +1265:PN_Circus_Bf (Default) +1266:PN_Circus_Af +1267:PN_Ferris_Bf (Default) +1268:PN_Ferris_Af +// 35903 +1269:BigTree03 (Default) +1270:BigTree04 (Default) +// 35904 +1271:BigTree03 (Default) +1272:BigTree04 (Default) +// 35905 +1273:BigTree03 (Default) +1274:BigTree04 (Default) +// 35910 +1283:BigTree03 (Default) +1284:BigTree04 (Default) +// 35911 +1285:BigTree03 (Default) +1286:BigTree04 (Default) +// 35912 +1287:BigTree03 (Default) +1288:BigTree04 (Default) +// 35913 +1289:BigTree03 (Default) +1290:BigTree04 (Default) +// 40066 +1297:BigTree01 +1298:BigTree02 +1299:BigTree03 (Default) +1300:BigTree04 (Default) +// 51031 +1308:BigTree03 (Default) +1309:BigTree04 (Default) +// 35918 +1310:BigTree03 (Default) +1311:BigTree04 (Default) +// 35919 +1312:BigTree03 (Default) +1313:BigTree04 (Default) +// 35920 +1314:BigTree03 (Default) +1315:BigTree04 (Default) +// 35921 +1316:BigTree03 (Default) +1317:BigTree04 (Default) +// 35922 +1318:BigTree03 (Default) +1319:BigTree04 (Default) +// 20186 +1333:FD_Gear_01 (Default) +1334:FD_Gear_02 +1335:FD_Gear_03