From f8b920100d5e37a0282964540b11f80e42fc2fc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=AD=B1=E5=82=91?= Date: Sat, 14 Oct 2023 11:36:17 +0800 Subject: [PATCH] Add Weather Page --- Source/GrasscutterTools/Forms/FormMain.cs | 12 +- .../Game/Data/Excels/WeatherData.cs | 42 + .../Game/Data/GameResources.cs | 27 + Source/GrasscutterTools/Game/GameData.cs | 3 + Source/GrasscutterTools/Game/ItemMapGroup.cs | 2 +- .../GrasscutterTools/GrasscutterTools.csproj | 11 + .../Pages/PageScene.Designer.cs | 29 - Source/GrasscutterTools/Pages/PageScene.cs | 28 - Source/GrasscutterTools/Pages/PageScene.resx | 933 +++++++-------- .../Pages/PageWeather.Designer.cs | 254 ++++ Source/GrasscutterTools/Pages/PageWeather.cs | 201 ++++ .../GrasscutterTools/Pages/PageWeather.resx | 120 ++ .../Properties/Resources.Designer.cs | 45 + .../Properties/Resources.en-us.resx | 3 + .../Properties/Resources.resx | 6 + .../Properties/Resources.ru-ru.resx | 3 + .../Properties/Resources.zh-TW.resx | 3 + .../Resources/zh-cn/Weather.txt | 1043 +++++++++++++++++ 18 files changed, 2199 insertions(+), 566 deletions(-) create mode 100644 Source/GrasscutterTools/Game/Data/Excels/WeatherData.cs create mode 100644 Source/GrasscutterTools/Pages/PageWeather.Designer.cs create mode 100644 Source/GrasscutterTools/Pages/PageWeather.cs create mode 100644 Source/GrasscutterTools/Pages/PageWeather.resx create mode 100644 Source/GrasscutterTools/Resources/zh-cn/Weather.txt diff --git a/Source/GrasscutterTools/Forms/FormMain.cs b/Source/GrasscutterTools/Forms/FormMain.cs index 89f4fc6..69bce26 100644 --- a/Source/GrasscutterTools/Forms/FormMain.cs +++ b/Source/GrasscutterTools/Forms/FormMain.cs @@ -222,6 +222,7 @@ namespace GrasscutterTools.Forms CreatePage(); CreatePage(); CreatePage(); + CreatePage(); CreatePage(); CreatePage(); CreatePage(); @@ -338,11 +339,14 @@ namespace GrasscutterTools.Forms i++; } // 加上新增在最后的页面 - while (i < Pages.Count) + if (ListPages.Items.Count == i) { - PageTabOrders.Add(new Tuple(pageKeys[i], true)); - ListPages.Items.Add(Pages[pageKeys[i]].Text); - i++; + while (i < Pages.Count) + { + PageTabOrders.Add(new Tuple(pageKeys[i], true)); + ListPages.Items.Add(Pages[pageKeys[i]].Text); + i++; + } } // 保存页面顺序 SavePageTabOrders(); diff --git a/Source/GrasscutterTools/Game/Data/Excels/WeatherData.cs b/Source/GrasscutterTools/Game/Data/Excels/WeatherData.cs new file mode 100644 index 0000000..d7b872c --- /dev/null +++ b/Source/GrasscutterTools/Game/Data/Excels/WeatherData.cs @@ -0,0 +1,42 @@ +/** + * 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("WeatherExcelConfigData.json")] + internal class WeatherData + { + [JsonProperty("areaID")] + public int AreaId { get; set; } + + [JsonProperty("weatherAreaId")] + public int WeatherAreaId { get; set; } + + [JsonProperty("profileName")] + public string ProfileName { get; set; } + + [JsonProperty("defaultClimate")] + public string DefaultClimate { get; set; } + + [JsonProperty("sceneID")] + public int SceneId { get; set; } + } +} \ No newline at end of file diff --git a/Source/GrasscutterTools/Game/Data/GameResources.cs b/Source/GrasscutterTools/Game/Data/GameResources.cs index 4be9c8d..448b96e 100644 --- a/Source/GrasscutterTools/Game/Data/GameResources.cs +++ b/Source/GrasscutterTools/Game/Data/GameResources.cs @@ -69,6 +69,8 @@ namespace GrasscutterTools.Game.Data public TextMapData TextMapData { get; set; } + public List WeatherData { get; set; } + public GameResources(string resourcesDirPath, TextMapData textMapData) { TextMapData = textMapData; @@ -446,6 +448,31 @@ namespace GrasscutterTools.Game.Data #endregion + #region Weather + + // Weather + + sb.Clear(); + + foreach (var scene in WeatherData + .GroupBy(it => it.SceneId) + .OrderBy(it => it.Key)) + { + sb.Append("// ").AppendLine(scene.Key.ToString()); + foreach (var weather in scene) + { + var profileName = weather.ProfileName.Substring(weather.ProfileName.LastIndexOf('/') + 1) + .Replace("ESP_", ""); + sb.AppendLine($"{weather.AreaId}:{profileName}"); + } + } + File.WriteAllText( + Path.Combine(projectResourcesDir, "Weather.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 20dd85a..52c9d66 100644 --- a/Source/GrasscutterTools/Game/GameData.cs +++ b/Source/GrasscutterTools/Game/GameData.cs @@ -46,6 +46,7 @@ namespace GrasscutterTools.Game GachaBannerTitles = new ItemMap(Resources.GachaBannerTitle); Quests = new ItemMap(Resources.Quest); ShopType = new ItemMap(Resources.ShopType); + Weathers = new ItemMapGroup(Resources.Weather); } public static ItemMap Achievements { get; private set; } @@ -89,5 +90,7 @@ namespace GrasscutterTools.Game public static ItemMap Quests { get; private set; } public static ItemMap ShopType { get; private set; } + + public static ItemMapGroup Weathers { get; private set; } } } \ No newline at end of file diff --git a/Source/GrasscutterTools/Game/ItemMapGroup.cs b/Source/GrasscutterTools/Game/ItemMapGroup.cs index f1bfce9..a0e9de9 100644 --- a/Source/GrasscutterTools/Game/ItemMapGroup.cs +++ b/Source/GrasscutterTools/Game/ItemMapGroup.cs @@ -70,7 +70,7 @@ namespace GrasscutterTools.Game public IEnumerable AllIds => Values.SelectMany(it => it.Ids); private string[] lines; - public string[] Lines => lines ?? (lines = AllLines.ToArray()); + public string[] Lines => lines ??= AllLines.ToArray(); public string this[int id] { diff --git a/Source/GrasscutterTools/GrasscutterTools.csproj b/Source/GrasscutterTools/GrasscutterTools.csproj index 6efce63..6ca821a 100644 --- a/Source/GrasscutterTools/GrasscutterTools.csproj +++ b/Source/GrasscutterTools/GrasscutterTools.csproj @@ -165,6 +165,7 @@ + @@ -334,6 +335,12 @@ PageTools.cs + + UserControl + + + PageWeather.cs + @@ -702,6 +709,9 @@ PageTools.cs + + PageWeather.cs + ResXFileCodeGenerator Resources.zh-TW.Designer.cs @@ -806,6 +816,7 @@ + diff --git a/Source/GrasscutterTools/Pages/PageScene.Designer.cs b/Source/GrasscutterTools/Pages/PageScene.Designer.cs index 7385203..a07803a 100644 --- a/Source/GrasscutterTools/Pages/PageScene.Designer.cs +++ b/Source/GrasscutterTools/Pages/PageScene.Designer.cs @@ -40,13 +40,10 @@ this.NUDTpZ = new System.Windows.Forms.NumericUpDown(); this.NUDTpY = new System.Windows.Forms.NumericUpDown(); this.NUDTpX = new System.Windows.Forms.NumericUpDown(); - this.CmbClimateType = new System.Windows.Forms.ComboBox(); - this.LblClimateType = new System.Windows.Forms.Label(); this.LblSceneDescription = new System.Windows.Forms.Label(); this.ListScenes = new System.Windows.Forms.ListBox(); this.LblTp = new System.Windows.Forms.Label(); this.RbListCutScene = new System.Windows.Forms.RadioButton(); - this.ChkLockClimate = new System.Windows.Forms.CheckBox(); this.BtnFreezeTime = new System.Windows.Forms.Button(); ((System.ComponentModel.ISupportInitialize)(this.NUDTpZ)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.NUDTpY)).BeginInit(); @@ -168,19 +165,6 @@ -2147483648}); this.NUDTpX.Name = "NUDTpX"; // - // CmbClimateType - // - resources.ApplyResources(this.CmbClimateType, "CmbClimateType"); - this.CmbClimateType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.CmbClimateType.FormattingEnabled = true; - this.CmbClimateType.Name = "CmbClimateType"; - this.CmbClimateType.SelectedIndexChanged += new System.EventHandler(this.CmbClimateType_SelectedIndexChanged); - // - // LblClimateType - // - resources.ApplyResources(this.LblClimateType, "LblClimateType"); - this.LblClimateType.Name = "LblClimateType"; - // // LblSceneDescription // resources.ApplyResources(this.LblSceneDescription, "LblSceneDescription"); @@ -205,13 +189,6 @@ this.RbListCutScene.UseVisualStyleBackColor = true; this.RbListCutScene.CheckedChanged += new System.EventHandler(this.RbListCutScene_CheckedChanged); // - // ChkLockClimate - // - resources.ApplyResources(this.ChkLockClimate, "ChkLockClimate"); - this.ChkLockClimate.Name = "ChkLockClimate"; - this.ChkLockClimate.UseVisualStyleBackColor = true; - this.ChkLockClimate.CheckedChanged += new System.EventHandler(this.ChkLockClimate_CheckedChanged); - // // BtnFreezeTime // resources.ApplyResources(this.BtnFreezeTime, "BtnFreezeTime"); @@ -224,7 +201,6 @@ resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Controls.Add(this.BtnFreezeTime); - this.Controls.Add(this.ChkLockClimate); this.Controls.Add(this.RbListCutScene); this.Controls.Add(this.RbListDungeons); this.Controls.Add(this.RbListScene); @@ -237,8 +213,6 @@ this.Controls.Add(this.NUDTpZ); this.Controls.Add(this.NUDTpY); this.Controls.Add(this.NUDTpX); - this.Controls.Add(this.CmbClimateType); - this.Controls.Add(this.LblClimateType); this.Controls.Add(this.LblSceneDescription); this.Controls.Add(this.ListScenes); this.Controls.Add(this.LblTp); @@ -264,13 +238,10 @@ private System.Windows.Forms.NumericUpDown NUDTpZ; private System.Windows.Forms.NumericUpDown NUDTpY; private System.Windows.Forms.NumericUpDown NUDTpX; - private System.Windows.Forms.ComboBox CmbClimateType; - private System.Windows.Forms.Label LblClimateType; private System.Windows.Forms.Label LblSceneDescription; private System.Windows.Forms.ListBox ListScenes; private System.Windows.Forms.Label LblTp; private System.Windows.Forms.RadioButton RbListCutScene; - private System.Windows.Forms.CheckBox ChkLockClimate; private System.Windows.Forms.Button BtnFreezeTime; } } diff --git a/Source/GrasscutterTools/Pages/PageScene.cs b/Source/GrasscutterTools/Pages/PageScene.cs index 84b02a1..5183c52 100644 --- a/Source/GrasscutterTools/Pages/PageScene.cs +++ b/Source/GrasscutterTools/Pages/PageScene.cs @@ -55,8 +55,6 @@ namespace GrasscutterTools.Pages public override void OnLoad() { Scenes = GameData.Scenes.Lines; - CmbClimateType.Items.Clear(); - CmbClimateType.Items.AddRange(Resources.ClimateType.Split(',')); } /// @@ -130,24 +128,6 @@ namespace GrasscutterTools.Pages } } - /// - /// 气候类型列表 - /// - private static readonly string[] climateTypes = { "none", "sunny", "cloudy", "rain", "thunderstorm", "snow", "mist" }; - - /// - /// 气候类型下拉框选中项改变时触发 - /// - private void CmbClimateType_SelectedIndexChanged(object sender, EventArgs e) - { - if (CmbClimateType.SelectedIndex < 0) - return; - if (CommandVersion.Check(CommandVersion.V1_2_2)) - SetCommand("/weather", CmbClimateType.SelectedIndex < climateTypes.Length ? climateTypes[CmbClimateType.SelectedIndex] : "none"); - else - SetCommand("/weather", $"0 {CmbClimateType.SelectedIndex}"); - } - /// /// 点击传送按钮时触发 /// @@ -159,14 +139,6 @@ namespace GrasscutterTools.Pages SetCommand("/tp", args); } - /// - /// 锁定天气 - /// - private void ChkLockClimate_CheckedChanged(object sender, EventArgs e) - { - SetCommand("/prop", $"is_weather_locked {(ChkLockClimate.Checked ? "on" : "off")}"); - } - /// /// 冻结游戏时间 /// diff --git a/Source/GrasscutterTools/Pages/PageScene.resx b/Source/GrasscutterTools/Pages/PageScene.resx index c60f33f..f65f348 100644 --- a/Source/GrasscutterTools/Pages/PageScene.resx +++ b/Source/GrasscutterTools/Pages/PageScene.resx @@ -118,523 +118,403 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + True - - $this - - - 传送 + + + NoControl - - 75, 25 + + 287, 30 - - TxtSceneFilter - - - - NoControl - - - 10 - - - 14, 17 - - - 2 - - - $this - - - 80, 23 - - - 287, 3 - - - 235, 156 - - - 343, 28 - - - 14 - - - LblSceneDescription - - - Bottom, Left - - - 192, 31 - - - NoControl - - - Bottom, Left - - - $this - - - 23, 156 - - - 56, 17 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 9 - - - 6 - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - NoControl - - - 14, 17 - - - 14, 17 - - - 4 - - - BtnFreezeTime - - - 7, 17 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - x + + 50, 21 2 - - 65, 29 - - - z - - - False - - - 3, 32 - - - 6 - - - ListScenes - - - NoControl - - - 13 - - - 1 - - - 13 - - - 9 - - - 7 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - PageScene - - - 1 - - - 12 - - - LblTpY - - - True - - - 8 - - - $this - - - Bottom, Left - - - 17 - - - RbListCutScene - - - 11 - - - Bottom, Left - - - $this - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 15 - - - 80, 23 - - - 16 - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - NoControl - - - 287, 57 - - - 过场 - - - NoControl - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 秘境 - - 50, 21 - - - NoControl - - - 215, 184 - - - 109, 158 - - - 296, 51 - - - True - - - 215, 158 - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - NUDTpX - - - $this - - - True - - - 设置天气 - - - 17 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 11 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 121, 25 - - - 0 - - - 3, 158 - - - 3 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 含场景ID - - - Bottom, Left - - - LblTpZ - - - $this - - - NoControl - - - $this - RbListDungeons - + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + $this - - 287, 30 + + 2 - - 100, 25 - - - GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.12.2.0, Culture=neutral, PublicKeyToken=de2b1c089621e923 - - - Bottom, Left - - + True NoControl - - System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 80, 23 - - - Bottom, Left - - - 3 - - - Bottom, Left - - - 300, 208 - - - $this - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 12 - - - 4 - - - 87, 188 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - LblTp - - - y - - - 16 + + 287, 3 50, 21 - - True - - - True - - - 56, 17 - - - 锁定 - - - True - - - NoControl - - - RbListScene - - - 8 - - - 3 - - - 0 - - - $this - - - 343, 2 - - - 76, 21 - - - BtnTeleport - - - True - - - ChkIncludeSceneId - - - $this - - - ChkLockClimate - - - 15 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 冻结时间 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 场景控制 - - - 10 - - - 300, 23 - - - CmbClimateType - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 18 - - - $this - - - NUDTpY - - - 3, 102 - - - NoControl - - - True - - - True - - - 51, 21 - - - Bottom, Left - - - Bottom, Left - - - Top, Bottom, Left, Right + + 1 场景 - - 7 + + RbListScene - - 6, 185 + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + + + Top, Left, Right + + + 343, 2 + + + 300, 23 14 + + TxtSceneFilter + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + 4 + + + Bottom, Left + + + True + + + False + + + NoControl + + + 87, 188 + + + 76, 21 + + + 13 + + + 含场景ID + + + ChkIncludeSceneId + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + 5 - - LblClimateType + + Bottom, Left - + + True + + + NoControl + + + 215, 158 + + + 14, 17 + + + 10 + + + z + + + LblTpZ + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 6 + + + Bottom, Left + + + True + + + NoControl + + + 109, 158 + + + 14, 17 + + + 8 + + + y + + + LblTpY + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 7 + + + Bottom, Left + + + NoControl + + + 6, 185 + + + 75, 25 + + + 12 + + + 传送 + + + BtnTeleport + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 8 + + + Bottom, Left + + + True + + + NoControl + + + 3, 158 + + + 14, 17 + + + 6 + + + x + + + LblTpX + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 9 + + + Bottom, Left + + + 235, 156 + + + 80, 23 + + + 11 + + + NUDTpZ + + + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 10 + + + Bottom, Left + + + 129, 156 + + + 80, 23 + + + 9 + + + NUDTpY + + + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 11 + + + Bottom, Left + + + 23, 156 + + + 80, 23 + + + 7 + + + NUDTpX + + + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 12 + + + True + + + NoControl + + + 3, 3 + + + 56, 17 + + + 0 + + + 场景控制 + + + LblSceneDescription + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 13 + + + Top, Bottom, Left, Right + + 17 - - Top, Left, Right + + 343, 28 + + + 300, 208 + + + 15 + + + ListScenes + + + System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 14 + + + Bottom, Left + + + True + + + NoControl + + + 3, 102 + + + 296, 51 + + + 5 坐标传送 @@ -642,43 +522,88 @@ 命令中可以用~表示当前位置,~100表示相对当前100 - - LblTpX + + LblTp - - $this - - - NUDTpZ - - - $this - - - $this - - + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 3, 3 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 50, 21 - - + $this - - 129, 156 + + 15 - - 5 + + True + + + NoControl + + + 287, 57 + + + 50, 21 + + + 3 + + + 过场 + + + RbListCutScene + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + Bottom, Left + + + NoControl + + + 215, 184 + + + 100, 25 + + + 17 + + + 冻结时间 + + + BtnFreezeTime + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 True + + 7, 17 + + + PageScene + + + GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.13.0.0, Culture=neutral, PublicKeyToken=de2b1c089621e923 + \ No newline at end of file diff --git a/Source/GrasscutterTools/Pages/PageWeather.Designer.cs b/Source/GrasscutterTools/Pages/PageWeather.Designer.cs new file mode 100644 index 0000000..84e852b --- /dev/null +++ b/Source/GrasscutterTools/Pages/PageWeather.Designer.cs @@ -0,0 +1,254 @@ +namespace GrasscutterTools.Pages +{ + partial class PageWeather + { + /// + /// 必需的设计器变量。 + /// + 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() + { + this.TvSceneWeathers = new System.Windows.Forms.TreeView(); + this.LblPageTitle = new System.Windows.Forms.Label(); + this.CmbClimateType = new System.Windows.Forms.ComboBox(); + this.LblClimateType = new System.Windows.Forms.Label(); + this.BtnLockWeather = new System.Windows.Forms.Button(); + this.BtnUnlockWeather = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.BtnExportWeather = new System.Windows.Forms.Button(); + this.BtnImportWeather = new System.Windows.Forms.Button(); + this.BtnCreatePullRequest = new System.Windows.Forms.Button(); + this.LblPullRequestTip = new System.Windows.Forms.Label(); + this.LblClimateTip = new System.Windows.Forms.Label(); + this.TxtWeatherFilter = new System.Windows.Forms.TextBox(); + this.ListFilteredWeathers = new System.Windows.Forms.ListBox(); + this.LblClearFilter = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // TvSceneWeathers + // + this.TvSceneWeathers.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.TvSceneWeathers.FullRowSelect = true; + this.TvSceneWeathers.Location = new System.Drawing.Point(343, 32); + this.TvSceneWeathers.Name = "TvSceneWeathers"; + this.TvSceneWeathers.ShowLines = false; + this.TvSceneWeathers.Size = new System.Drawing.Size(300, 204); + this.TvSceneWeathers.TabIndex = 102; + this.TvSceneWeathers.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.TvSceneWeathers_AfterSelect); + // + // LblPageTitle + // + this.LblPageTitle.AutoSize = true; + this.LblPageTitle.Location = new System.Drawing.Point(3, 3); + this.LblPageTitle.Name = "LblPageTitle"; + this.LblPageTitle.Size = new System.Drawing.Size(56, 17); + this.LblPageTitle.TabIndex = 0; + this.LblPageTitle.Text = "场景天气"; + // + // CmbClimateType + // + this.CmbClimateType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.CmbClimateType.FormattingEnabled = true; + this.CmbClimateType.Location = new System.Drawing.Point(81, 33); + this.CmbClimateType.Name = "CmbClimateType"; + this.CmbClimateType.Size = new System.Drawing.Size(121, 25); + this.CmbClimateType.TabIndex = 2; + this.CmbClimateType.SelectedIndexChanged += new System.EventHandler(this.CmbClimateType_SelectedIndexChanged); + // + // LblClimateType + // + this.LblClimateType.AutoSize = true; + this.LblClimateType.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.LblClimateType.Location = new System.Drawing.Point(19, 36); + this.LblClimateType.Name = "LblClimateType"; + this.LblClimateType.Size = new System.Drawing.Size(56, 17); + this.LblClimateType.TabIndex = 1; + this.LblClimateType.Text = "设置气候"; + // + // BtnLockWeather + // + this.BtnLockWeather.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.BtnLockWeather.Location = new System.Drawing.Point(6, 211); + this.BtnLockWeather.Name = "BtnLockWeather"; + this.BtnLockWeather.Size = new System.Drawing.Size(150, 25); + this.BtnLockWeather.TabIndex = 10; + this.BtnLockWeather.Tag = "on"; + this.BtnLockWeather.Text = "锁定天气"; + this.BtnLockWeather.UseVisualStyleBackColor = true; + this.BtnLockWeather.Click += new System.EventHandler(this.BtnLockWeather_Click); + // + // BtnUnlockWeather + // + this.BtnUnlockWeather.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.BtnUnlockWeather.Location = new System.Drawing.Point(162, 211); + this.BtnUnlockWeather.Name = "BtnUnlockWeather"; + this.BtnUnlockWeather.Size = new System.Drawing.Size(150, 25); + this.BtnUnlockWeather.TabIndex = 11; + this.BtnUnlockWeather.Tag = "off"; + this.BtnUnlockWeather.Text = "解锁天气"; + this.BtnUnlockWeather.UseVisualStyleBackColor = true; + this.BtnUnlockWeather.Click += new System.EventHandler(this.BtnLockWeather_Click); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(3, 78); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(334, 55); + this.label1.TabIndex = 4; + this.label1.Text = "天气数据目前暂未翻译,在此邀请你参与天气数据翻译,导出天气原始数据,在游戏内测试天气效果,修改数据文件通过提交更改按钮在 Github 创建 Pull Reque" + + "st,即可参与贡献!"; + // + // BtnExportWeather + // + this.BtnExportWeather.Location = new System.Drawing.Point(3, 136); + this.BtnExportWeather.Name = "BtnExportWeather"; + this.BtnExportWeather.Size = new System.Drawing.Size(150, 25); + this.BtnExportWeather.TabIndex = 5; + this.BtnExportWeather.Text = "导出原始天气"; + this.BtnExportWeather.UseVisualStyleBackColor = true; + this.BtnExportWeather.Click += new System.EventHandler(this.BtnExportWeather_Click); + // + // BtnImportWeather + // + this.BtnImportWeather.Location = new System.Drawing.Point(159, 136); + this.BtnImportWeather.Name = "BtnImportWeather"; + this.BtnImportWeather.Size = new System.Drawing.Size(150, 25); + this.BtnImportWeather.TabIndex = 6; + this.BtnImportWeather.Text = "导入天气"; + this.BtnImportWeather.UseVisualStyleBackColor = true; + this.BtnImportWeather.Click += new System.EventHandler(this.BtnImportWeather_Click); + // + // BtnCreatePullRequest + // + this.BtnCreatePullRequest.Location = new System.Drawing.Point(3, 167); + this.BtnCreatePullRequest.Name = "BtnCreatePullRequest"; + this.BtnCreatePullRequest.Size = new System.Drawing.Size(150, 25); + this.BtnCreatePullRequest.TabIndex = 7; + this.BtnCreatePullRequest.Text = "提交修改 (Github)"; + this.BtnCreatePullRequest.UseVisualStyleBackColor = true; + this.BtnCreatePullRequest.Click += new System.EventHandler(this.BtnCreatePullRequest_Click); + // + // LblPullRequestTip + // + this.LblPullRequestTip.AutoSize = true; + this.LblPullRequestTip.ForeColor = System.Drawing.SystemColors.GrayText; + this.LblPullRequestTip.Location = new System.Drawing.Point(156, 171); + this.LblPullRequestTip.Name = "LblPullRequestTip"; + this.LblPullRequestTip.Size = new System.Drawing.Size(128, 17); + this.LblPullRequestTip.TabIndex = 8; + this.LblPullRequestTip.Text = "你也可以提交到群文件"; + // + // LblClimateTip + // + this.LblClimateTip.AutoSize = true; + this.LblClimateTip.ForeColor = System.Drawing.SystemColors.GrayText; + this.LblClimateTip.Location = new System.Drawing.Point(208, 36); + this.LblClimateTip.Name = "LblClimateTip"; + this.LblClimateTip.Size = new System.Drawing.Size(104, 17); + this.LblClimateTip.TabIndex = 3; + this.LblClimateTip.Text = "天气包含默认气候"; + // + // TxtWeatherFilter + // + this.TxtWeatherFilter.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.TxtWeatherFilter.Location = new System.Drawing.Point(343, 3); + this.TxtWeatherFilter.Name = "TxtWeatherFilter"; + this.TxtWeatherFilter.Size = new System.Drawing.Size(300, 23); + this.TxtWeatherFilter.TabIndex = 100; + this.TxtWeatherFilter.TextChanged += new System.EventHandler(this.TxtWeatherFilter_TextChanged); + // + // ListFilteredWeathers + // + this.ListFilteredWeathers.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ListFilteredWeathers.FormattingEnabled = true; + this.ListFilteredWeathers.ItemHeight = 17; + this.ListFilteredWeathers.Location = new System.Drawing.Point(343, 26); + this.ListFilteredWeathers.Name = "ListFilteredWeathers"; + this.ListFilteredWeathers.Size = new System.Drawing.Size(300, 191); + this.ListFilteredWeathers.TabIndex = 101; + this.ListFilteredWeathers.Visible = false; + this.ListFilteredWeathers.SelectedIndexChanged += new System.EventHandler(this.ListFilteredWeathers_SelectedIndexChanged); + // + // LblClearFilter + // + this.LblClearFilter.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.LblClearFilter.AutoSize = true; + this.LblClearFilter.BackColor = System.Drawing.Color.White; + this.LblClearFilter.Cursor = System.Windows.Forms.Cursors.Hand; + this.LblClearFilter.Location = new System.Drawing.Point(626, 6); + this.LblClearFilter.Name = "LblClearFilter"; + this.LblClearFilter.Size = new System.Drawing.Size(16, 17); + this.LblClearFilter.TabIndex = 103; + this.LblClearFilter.Text = "X"; + this.LblClearFilter.Visible = false; + this.LblClearFilter.Click += new System.EventHandler(this.LblClearFilter_Click); + // + // PageWeather + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.LblClearFilter); + this.Controls.Add(this.ListFilteredWeathers); + this.Controls.Add(this.TxtWeatherFilter); + this.Controls.Add(this.LblClimateTip); + this.Controls.Add(this.LblPullRequestTip); + this.Controls.Add(this.BtnCreatePullRequest); + this.Controls.Add(this.BtnImportWeather); + this.Controls.Add(this.BtnExportWeather); + this.Controls.Add(this.label1); + this.Controls.Add(this.BtnUnlockWeather); + this.Controls.Add(this.BtnLockWeather); + this.Controls.Add(this.CmbClimateType); + this.Controls.Add(this.LblClimateType); + this.Controls.Add(this.LblPageTitle); + this.Controls.Add(this.TvSceneWeathers); + this.Name = "PageWeather"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TreeView TvSceneWeathers; + private System.Windows.Forms.Label LblPageTitle; + private System.Windows.Forms.ComboBox CmbClimateType; + private System.Windows.Forms.Label LblClimateType; + private System.Windows.Forms.Button BtnLockWeather; + private System.Windows.Forms.Button BtnUnlockWeather; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button BtnExportWeather; + private System.Windows.Forms.Button BtnImportWeather; + private System.Windows.Forms.Button BtnCreatePullRequest; + private System.Windows.Forms.Label LblPullRequestTip; + private System.Windows.Forms.Label LblClimateTip; + private System.Windows.Forms.TextBox TxtWeatherFilter; + private System.Windows.Forms.ListBox ListFilteredWeathers; + private System.Windows.Forms.Label LblClearFilter; + } +} diff --git a/Source/GrasscutterTools/Pages/PageWeather.cs b/Source/GrasscutterTools/Pages/PageWeather.cs new file mode 100644 index 0000000..a127760 --- /dev/null +++ b/Source/GrasscutterTools/Pages/PageWeather.cs @@ -0,0 +1,201 @@ +/** + * 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.IO; +using System.Windows.Forms; + +using GrasscutterTools.Game; +using GrasscutterTools.Properties; +using GrasscutterTools.Utils; + +namespace GrasscutterTools.Pages +{ + internal partial class PageWeather : BasePage + { + public override string Text => Resources.PageWeatherTitle; + + public PageWeather() + { + InitializeComponent(); + } + + public override void OnLoad() + { + CmbClimateType.Items.Clear(); + CmbClimateType.Items.AddRange(Resources.ClimateType.Split(',')); + + LoadWeathers(GameData.Weathers); + } + + /// + /// 气候类型列表 + /// + private static readonly string[] climateTypes = { "none", "sunny", "cloudy", "rain", "thunderstorm", "snow", "mist" }; + + /// + /// 气候类型下拉框选中项改变时触发 + /// + private void CmbClimateType_SelectedIndexChanged(object sender, EventArgs e) + { + if (CmbClimateType.SelectedIndex < 0) + return; + if (CommandVersion.Check(CommandVersion.V1_2_2)) + SetCommand("/weather", CmbClimateType.SelectedIndex < climateTypes.Length ? climateTypes[CmbClimateType.SelectedIndex] : "none"); + else + SetCommand("/weather", $"0 {CmbClimateType.SelectedIndex}"); + } + + /// + /// 锁定天气 + /// + private void BtnLockWeather_Click(object sender, EventArgs e) + { + SetCommand("/prop", $"is_weather_locked {((Button)sender).Tag}"); + } + + private ItemMapGroup weatherSources; + /// + /// 加载天气 + /// + private void LoadWeathers(ItemMapGroup weathers) + { + weatherSources = weathers; + + TvSceneWeathers.BeginUpdate(); + TvSceneWeathers.Nodes.Clear(); + + foreach (var weather in weathers) + { + // 将场景作为标签分类 + var sceneName = int.TryParse(weather.Key, out var sceneId) + ? GameData.Scenes[sceneId] + : weather.Key; + var node = TvSceneWeathers.Nodes.Add(weather.Key, sceneName); + + // 添加所有标签 + var weatherName = weather.Value; + for (var i = 0; i < weatherName.Count; i++) + node.Nodes.Add(weatherName.Ids[i].ToString(), weatherName.Lines[i]); + } + TvSceneWeathers.EndUpdate(); + } + + /// + /// 导出原始天气数据 + /// + private void BtnExportWeather_Click(object sender, EventArgs e) + { + var dialog = new SaveFileDialog + { + FileName = "Weather.txt", + Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*" + }; + if (dialog.ShowDialog() != DialogResult.OK) return; + using var stream = dialog.OpenFile(); + using var writer = new StreamWriter(stream); + writer.Write(Resources.Weather); + } + + /// + /// 导入天气数据 + /// + private void BtnImportWeather_Click(object sender, EventArgs e) + { + var dialog = new OpenFileDialog + { + Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*" + }; + if (dialog.ShowDialog() != DialogResult.OK) return; + using var stream = dialog.OpenFile(); + using var reader = new StreamReader(stream); + try + { + var editedWeather = new ItemMapGroup(reader.ReadToEnd()); + LoadWeathers(editedWeather); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + /// + /// 在 Github 上创建提交天气更改 + /// + private void BtnCreatePullRequest_Click(object sender, EventArgs e) + { + UIUtil.OpenURL("https://github.com/jie65535/GrasscutterCommandGenerator/edit/main/Source/GrasscutterTools/Resources/zh-cn/Weather.txt"); + } + + /// + /// 选中项改变时触发 + /// + private void TvSceneWeathers_AfterSelect(object sender, TreeViewEventArgs e) + { + // 忽略未知操作 + if (e.Action == TreeViewAction.Unknown || !e.Node.IsSelected) + return; + + // 忽略根节点 + if (e.Node.Level == 0) + return; + + // 生成命令 + SetCommand("/weather", e.Node.Name); + } + + /// + /// 天气过滤栏文本更改时触发 + /// + private void TxtWeatherFilter_TextChanged(object sender, EventArgs e) + { + if (string.IsNullOrWhiteSpace(TxtWeatherFilter.Text)) + { + LblClearFilter.Visible = false; + ListFilteredWeathers.Visible = false; + ListFilteredWeathers.Items.Clear(); + } + else + { + UIUtil.ListBoxFilter(ListFilteredWeathers, weatherSources.Lines, TxtWeatherFilter.Text); + ListFilteredWeathers.Visible = true; + LblClearFilter.Visible = true; + } + } + + /// + /// 点击清空过滤框标签时触发 + /// + private void LblClearFilter_Click(object sender, EventArgs e) + { + TxtWeatherFilter.Clear(); + } + + /// + /// 过滤的天气中选中项改变事件 + /// + private void ListFilteredWeathers_SelectedIndexChanged(object sender, EventArgs e) + { + var item = (string)ListFilteredWeathers.SelectedItem; + // 生成命令 + SetCommand("/weather", item.Substring(0, item.IndexOf(':')).Trim()); + } + } +} \ No newline at end of file diff --git a/Source/GrasscutterTools/Pages/PageWeather.resx b/Source/GrasscutterTools/Pages/PageWeather.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/Source/GrasscutterTools/Pages/PageWeather.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/Source/GrasscutterTools/Properties/Resources.Designer.cs b/Source/GrasscutterTools/Properties/Resources.Designer.cs index efd9276..1bfd81f 100644 --- a/Source/GrasscutterTools/Properties/Resources.Designer.cs +++ b/Source/GrasscutterTools/Properties/Resources.Designer.cs @@ -1266,6 +1266,15 @@ namespace GrasscutterTools.Properties { } } + /// + /// 查找类似 天气 的本地化字符串。 + /// + internal static string PageWeatherTitle { + get { + return ResourceManager.GetString("PageWeatherTitle", resourceCulture); + } + } + /// /// 查找类似 要设置的权限不能为空! 的本地化字符串。 /// @@ -1729,5 +1738,41 @@ namespace GrasscutterTools.Properties { return ResourceManager.GetString("WeaponColor", resourceCulture); } } + + /// + /// 查找类似 // 1 + ///2139:LP_Fog_Light + ///2140:LP_Fog_Heavy + ///2141:LP_Fog_Light + ///2142:LP_Fog_Light + ///2143:LP_Fog_Light + ///4206:Dq_HeGuan_Doom + ///4207:Dq_HeGuan_DoomHeavy + ///4208:Dq_HeGuan_DoomHeavyest + ///// 3 + ///1:Md_General + ///2:Md_WindDragon + ///3:Md_City_Storm + ///4:Monster_LupiBoreas + ///1000:Md_General + ///1001:Md_General + ///1002:Md_General + ///1003:Md_General + ///1004:Md_General + ///1005:Md_General + ///1006:Md_City_General + ///1007:Md_WindDragon + ///1008:Md_City_Fenghuajie + ///1009:Md_General + ///1010:ActivityArena_Fire + ///1011:ActivityArena_Sunny + ///1012:Md_General + ///1013: [字符串的其余部分被截断]"; 的本地化字符串。 + /// + internal static string Weather { + get { + return ResourceManager.GetString("Weather", resourceCulture); + } + } } } diff --git a/Source/GrasscutterTools/Properties/Resources.en-us.resx b/Source/GrasscutterTools/Properties/Resources.en-us.resx index 43c81af..ad221d8 100644 --- a/Source/GrasscutterTools/Properties/Resources.en-us.resx +++ b/Source/GrasscutterTools/Properties/Resources.en-us.resx @@ -384,4 +384,7 @@ Improvement suggestions have been submitted, please use caution to send emails t Settings + + Weather + \ No newline at end of file diff --git a/Source/GrasscutterTools/Properties/Resources.resx b/Source/GrasscutterTools/Properties/Resources.resx index 4b2bb38..86d84a5 100644 --- a/Source/GrasscutterTools/Properties/Resources.resx +++ b/Source/GrasscutterTools/Properties/Resources.resx @@ -396,4 +396,10 @@ 设置 + + ..\Resources\zh-cn\Weather.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 aaf3d47..2fc920a 100644 --- a/Source/GrasscutterTools/Properties/Resources.ru-ru.resx +++ b/Source/GrasscutterTools/Properties/Resources.ru-ru.resx @@ -372,4 +372,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 f323f00..aa89879 100644 --- a/Source/GrasscutterTools/Properties/Resources.zh-TW.resx +++ b/Source/GrasscutterTools/Properties/Resources.zh-TW.resx @@ -378,4 +378,7 @@ 設定 + + 天氣 + \ No newline at end of file diff --git a/Source/GrasscutterTools/Resources/zh-cn/Weather.txt b/Source/GrasscutterTools/Resources/zh-cn/Weather.txt new file mode 100644 index 0000000..4ec5b38 --- /dev/null +++ b/Source/GrasscutterTools/Resources/zh-cn/Weather.txt @@ -0,0 +1,1043 @@ +// 1 +2139:LP_Fog_Light +2140:LP_Fog_Heavy +2141:LP_Fog_Light +2142:LP_Fog_Light +2143:LP_Fog_Light +4206:Dq_HeGuan_Doom +4207:Dq_HeGuan_DoomHeavy +4208:Dq_HeGuan_DoomHeavyest +// 3 +1:Md_General +2:Md_WindDragon +3:Md_City_Storm +4:Monster_LupiBoreas +1000:Md_General +1001:Md_General +1002:Md_General +1003:Md_General +1004:Md_General +1005:Md_General +1006:Md_City_General +1007:Md_WindDragon +1008:Md_City_Fenghuajie +1009:Md_General +1010:ActivityArena_Fire +1011:ActivityArena_Sunny +1012:Md_General +1013:Md_General_FHJ +1014:Md_General_FHJ +1015:Md_General +2000:Ly_General +2001:Ly_QingCeVilla +2002:Ly_General +2003:Ly_General +2004:Ly_StoneNeedles +2005:Ly_City_General +2006:Ly_General +2007:Ly_LandLakeMaze +2107:Ly_LandLakeMaze +2207:Ly_LandLakeMaze_Lv2 +2008:Ly_LiShaCountrySide +2009:Ly_General +2010:Ly_QingCeVilla +2011:Ly_BeachMine +2012:Ly_BlackFroest +2013:Ly_SaltOfGround +2113:Ly_General +2014:Ly_Treasure +2114:Ly_QingCeVilla +2015:Ly_NinePillars_Tomb +2115:Ly_NinePillars_General +2016:Ly_NinePillars_Tomb +2116:Ly_NinePillars_General +2017:Monster_Regisvine_Ice_01 +2117:Ly_General +2018:Monster_Regisvine_Fire_01 +2118:Ly_General +2019:Md_General +2020:Ly_TianQiuGu +2021:Ly_Fountain_General +2121:Ly_General +2022:Md_SnowMountain_General +2023:Md_SnowMountain_Peak +2024:Md_SnowMountain_Cave +2124:Md_SnowMountain_Peak +2026:Ly_SaltOfGround +2126:Ly_LiShaCountrySide +90001:Md_General +9999:Md_General +2027:Md_SnowMountain_DunlinsHeart +2127:Md_SnowMountain_General +2028:Md_SnowMountain_South +2029:Md_SnowMountain_EastCoast +2030:Monster_Drake_Primo_Rock_01 +2130:Ly_General +2031:Md_SnowMountain_Cave_Long +2131:Md_SnowMountain_Peak +2032:Md_SnowMountain_Chamber +2025:Md_SnowMountain_Cave_Underboss +2125:Md_SnowMountain_Boss +2225:Md_SnowMountain_General +2132:Md_SnowMountain_General +2034:Md_SnowMountain_Boss +2035:Md_SnowMountain_General +2135:Md_SnowMountain_General +2036:Md_SnowMountain_GeneralTransition +2037:Md_SnowMountain_PeacePeak +2038:Md_SnowMountain_Cave +2138:Md_SnowMountain_PeacePeak +2039:Md_SnowMountain_GeneralTransition +2152:Ly_DakahaEntrance +2252:Ly_StoneNeedles +3002:Dq_General +3003:Dq_LiDao_General +3004:Dq_GL_OutSkirt +3005:Dq_GL_Luxin_Core +3105:Dq_GL_OutSkirt +3006:Dq_GL_Clear +3007:Dq_General +3008:Dq_Tabeisha_GeneralCanyon +3009:Dq_Tabeisha_GeneralDragon +3010:Dq_Tabeisha_GeneralPit +3011:Dq_QinglaiIsland_TransitionA +3012:Dq_QinglaiIsland_General +3013:Dq_CatCloud_Before +3113:Dq_CatCloud +3014:Dq_Tabeisha_Genreal +3015:Dq_Tabeisha_Canyon +3115:Dq_Tabeisha_GeneralCanyon +3016:Dq_Tabeisha_Pit +3116:Dq_Tabeisha_GeneralPit +3017:Dq_Tabeisha_GeneralVestiges +3018:Dq_Tabeisha_GeneralCanyon +3019:Dq_Tabeisha_GeneralDragon +3020:Dq_Tabeisha_GeneralPit +3021:Dq_Tabeisha_Genreal +3022:Dq_Tabeisha_Canyon +3122:Dq_Tabeisha_GeneralCanyon +3023:Dq_Tabeisha_Pit +3123:Dq_Tabeisha_GeneralPit +3024:Dq_Tabeisha_GeneralVestiges +3025:Dq_Leiyingshugen_General +3125:Dq_General +3026:Dq_Leiyingshugen_General +3126:Dq_Huangcun_Dark +3091:Dq_Leiyingshugen_General +3191:Dq_Huangcun_General +3027:Dq_MinShenIsland_RelicBoss +3127:Dq_General +3028:Dq_MinShenIsland_RelicBoss +3128:Dq_MinShenIsland_RelicBoss +3228:Dq_General +3029:Dq_Leiyingshugen_General +3129:Dq_General +3030:Dq_RaioCotter_Before +3130:Dq_RaioCotter_After +3031:Dq_RaioCotter_Before +3131:Dq_Leihuozhiyuan +3231:Dq_LeiyingShenshe +3046:Dq_RaioCotter_After +3146:Dq_General +3246:Dq_LeiyingShenshe +3047:Dq_DarkCave +3147:Dq_General +3048:Dq_City_General +3049:Dq_LiDao_General +3050:Dq_General +3051:Dq_Huangcun_Dark +3090:Dq_Huangcun_General +3032:Dq_General +3132:Dq_General +3033:Dq_General +3133:Dq_General +3034:Dq_General +3134:Dq_General +3035:Dq_General +3135:Dq_General +3136:Dq_Tabeisha_Boss +3139:Dq_Tabeisha_Boss +3140:Dq_Tabeisha_Pit +3240:Dq_Tabeisha_GeneralDragon +3340:Dq_Tabeisha_GeneralDragonTop +3141:Dq_Tabeisha_Pit +3241:Dq_Tabeisha_GeneralDragon +3341:Dq_Tabeisha_GeneralDragonTop +3036:Dq_GuardForest_General +3037:Dq_HeGuan_General +3038:Dq_HeGuan_Foggy +3045:Dq_Leiyingshugen_Deep +3145:Dq_General +3055:Dq_InazumaThunderBarrier +3056:Dq_Tabeisha_Pit +3156:Dq_Tabeisha_GeneralPit +3057:Dq_Tabeisha_Pit +3157:Dq_Tabeisha_GeneralPit +3058:Dq_HeGuan_FoggyHeavy +3059:Dq_QinglaiIsland_General +3060:Dq_QinglaiIsland_General +3061:Dq_QinglaiIsland_General +3062:Dq_QinglaiIsland_General +3063:Dq_QinglaiIsland_Relic +3163:Dq_QinglaiIsland_General +3064:Dq_QinglaiIsland_Relic +3164:Dq_QinglaiIsland_General +3264:Dq_QinglaiIsland_BossArea +3065:Dq_QinglaiIsland_ShipWreck +3165:Dq_QinglaiIsland_General +3119:Dq_QinglaiIsland_ShipWreck +3219:Dq_QinglaiIsland_Thunder_4th +3066:Dq_QinglaiIsland_ShipWreck +3166:Dq_QinglaiIsland_General +3118:Dq_QinglaiIsland_ShipWreck +3218:Dq_QinglaiIsland_Thunder_4th +3093:Dq_QinglaiIsland_ShipWreck +3193:Dq_QinglaiIsland_General +3120:Dq_QinglaiIsland_ShipWreck +3220:Dq_QinglaiIsland_Thunder_4th +3094:Dq_QinglaiIsland_ShipWreck +3194:Dq_QinglaiIsland_General +3121:Dq_QinglaiIsland_ShipWreck +3221:Dq_QinglaiIsland_Thunder_4th +3067:Dq_HaiQiIsland_General +3068:Dq_HaiQiIsland_General +3069:Dq_HaiQiIsland_General +3169:Dq_HaiQiIsland_General +3070:Dq_HaiQiIsland_HaiShenZhiXin +3170:Dq_HaiQiIsland_General +3071:Dq_HaiQiIsland_FiveSpiceWater +3171:Dq_HaiQiIsland_General +3072:Dq_HaiQiIsland_General +3172:Dq_HaiQiIsland_General +3073:Dq_HaiQiIsland_Relic +3173:Dq_General +3074:Dq_HaiQiIsland_Relic +3174:Dq_General +3075:Dq_HaiQiIsland_General +3175:Dq_HaiQiIsland_General +3076:Dq_HaiQiIsland_General +3077:Dq_HaiQiIsland_General +3078:Dq_HaiQiIsland_General +3079:Dq_Cave_DqCity +3179:Dq_City_General +3080:Dq_General_TBSOnly +3081:Dq_MinShenIsland_RelicBoss +3181:Dq_Tabeisha_GeneralDragon +3082:Dq_GL_OutSkirt +3083:Dq_MinShenIsland_RelicBoss +3183:Dq_General +3084:Dq_City_General +3085:Dq_General +3086:Dq_QinglaiIsland_Relic +3186:Dq_QinglaiIsland_General +3286:Dq_QinglaiIsland_BossArea +3087:Dq_Tabeisha_Boss_After +3088:Dq_Tabeisha_Canyon_After +3188:Dq_General_TBSOnly +3089:Dq_Tabeisha_Pit_After +3189:Dq_General_TBSOnly +3137:Dq_Tabeisha_Battleground +3138:Dq_Tabeisha_Battleground +3150:Dq_Tabeisha_Battleground +3151:Dq_Tabeisha_GeneralDragon +3092:Dq_Story_ThunderStorm +3095:Dq_QinglaiIsland_General +3096:Dq_QinglaiIsland_General +3196:Dq_QinglaiIsland_General +3117:Dq_QinglaiIsland_General +3217:Dq_QinglaiIsland_Thunder_4th +3097:Dq_QinglaiIsland_Thunder_1st +3098:Dq_QinglaiIsland_Thunder_2nd +3099:Dq_QinglaiIsland_Thunder_3rd +3100:Dq_QinglaiIsland_Thunder_4th +3101:Dq_QinglaiIsland_Relic +3201:Dq_QinglaiIsland_Thunder_4th +3301:Dq_QinglaiIsland_BossArea +3102:Dq_QinglaiIsland_TransitionB +3103:Dq_HeGuan_FoggyHeavyest +3104:Dq_HeGuan_Doom +3106:Dq_HeGuan_DoomHeavyest +3107:Dq_HeGuan_General_Nest +3207:Dq_HeGuan_General +3108:Dq_HeGuan_DoomHeavy +3109:Dq_HeGuan_FoggyHeavyest +3110:Dq_HeGuan_FoggyHeavyest +3111:Dq_HeGuan_FoggyHeavyest +3112:Dq_HeGuan_FoggyHeavyest +3114:Dq_HeGuan_FoggyHeavyest +3311:Dq_HeGuan_Foggy_Relic +3411:Dq_HeGuan_FoggyHeavy +3312:Dq_HeGuan_Foggy_Relic +3412:Dq_HeGuan_General +3313:Dq_HeGuan_Foggy_Relic +3413:Dq_HeGuan_DoomHeavy +3314:Dq_HeGuan_Foggy_Relic +3414:Dq_HeGuan_FoggyHeavyest +3315:Dq_HeGuan_DoomHeavy +3316:Dq_HeGuan_DoomHeavyest +3317:Dq_HeGuan_DoomHeavyest +3318:Dq_HeGuan_DoomHeavy +3319:Dq_HeGuan_Foggy_Relic +3419:Dq_HeGuan_DoomHeavy +3320:Dq_HeGuan_FoggyHeavy_Jitan +3420:Dq_HeGuan_FoggyHeavy +3321:Dq_HeGuan_General_Boss +3322:Dq_HeGuan_General_Nest +3422:Dq_HeGuan_General +3323:Dq_HeGuan_FoggyHeavy_Qiantan +3423:Dq_HeGuan_FoggyHeavy +3324:Dq_HeGuan_Foggy_Nest +3424:Dq_HeGuan_FoggyHeavy +3325:Dq_HeGuan_Foggy_Nest +3425:Dq_HeGuan_FoggyHeavy +3326:Dq_HeGuan_Foggy_Nest +3426:Dq_HeGuan_DoomHeavy +3327:Dq_HeGuan_Foggy_Nest +3427:Dq_HeGuan_DoomHeavy +3328:Dq_HeGuan_DoomHeavy +3329:Dq_HeGuan_DoomHeavyest +3330:Dq_HeGuan_Foggy_Nest +3430:Dq_HeGuan_DoomHeavy +3331:Dq_HeGuan_Foggy_Nest +3431:Dq_HeGuan_DoomHeavy +3332:Dq_HeGuan_Transition01 +3500:Dq_LiDao_General +3501:Dq_General +3600:Dq_LiDao_General +2165:Ly_TheChasm +2166:Ly_TheChasm_AboveGround_Cave +2167:Ly_TheChasm_AboveGround_Central +2176:Ly_TheChasm_AboveGround_Cave +2276:Ly_TheChasm +2191:Ly_General +2195:Ly_TheChasm_After +2200:Ly_SeaLamp_Storm_02 +2201:Ly_SeaLamp_Fog_01 +4000:Xm_General +4001:Dq_GuardForest_General +4002:Xm_GientCup_Theme +4003:Xm_GientCup_Theme_Dark +4004:Xm_GientCup_Cave +4005:Xm_Robot_General +4006:Xm_Cave_XCSD +4007:Xm_Devil_Cave +4008:Xm_Abyss_Cave01 +4009:Xm_Abyss_Cave02 +4010:Xm_MushroomCave_Relic01 +4011:Xm_SecretPeak +4012:Xm_WitheredForest_Hole_After +4013:Xm_HYZS_Before_ClearSky +4014:Xm_HYZS_Before_Rain +4015:Xm_HYZS_After_ClearSky +4016:Xm_HYZS_After_Rain +4017:Xm_Memory_Forest +4018:Xm_DesertTransition +4019:Xm_DiDiMiJing +4020:Xm_DiDiMiJing +4021:Xm_GientCup_MushroomRuin.asset +4022:Dq_Tabeisha_GeneralVestiges +4023:Dq_GuardForest_General +4024:Dq_GuardForest_General +4025:Xm_Marana_WaterCave_Before_Tunnel +4026:Xm_Marana_WaterCave_After +4027:Xm_City_General +4028:Xm_HCG_General +4029:Xm_YuCun +4030:Xm_AMSG +4031:Xm_WitheredForest_GreatgrassTemple +4032:Xm_WitheredForest +4033:Xm_WitheredForest_After +4034:Xm_WitheredForest_Hole +4035:Xm_WitheredForest_Boss +4036:Xm_WitheredForest_Boss_After +4037:Xm_Senzhili_Dream +4038:Xm_Senzhili +4039:Xm_SenzhiliCave_Dream +4040:Xm_SenzhiliCave +4041:Xm_Senzhili_Home +4042:Xm_GientCup_ThunderstormBoss +4043:Xm_GientCup_MushroomRuin +4044:Xm_Layered_Forest +4045:Xm_Layered_Forest_Dream01 +4046:Xm_Cave_DarkB +4047:Xm_TNL +4048:Xm_GientCup_MushroomRuin +4049:Xm_SecretPeak +4050:Xm_Layered_Forest +4051:Xm_Layered_Forest_Dream +4052:Xm_GientCup_Theme_Dark_Footprint +4053:Xm_GientCup_Theme_Footprint +4054:Xm_General +4055:Xm_Valley_General +4056:Xm_Senzhili_Dream +4057:Xm_MushroomCave_Relic01_Dream +4058:Xm_MushroomCave_Dream +4059:Xm_Zhimeng01_Dream +4060:Xm_Zhimeng02_Dream +4061:Xm_Zhimeng03_Dream +4062:Xm_Huanyu01_Dream +4063:Xm_Huanyu02_Dream +4064:Xm_Huanyu03_Dream +4065:Xm_Shiluo01_Dream +4066:Xm_Shiluo02_Dream +4067:Xm_Shiluo03_Dream +4068:Xm_Marana_WaterCave_Before_Entrance +4069:Xm_Marana_WaterCave_After_Entrance +4070:Xm_Marana_WaterCave_Before +4071:Xm_Marana_WaterCave_After +4072:Xm_General +4073:Xm_Cave_XCSDZM +4074:Xm_Cave_XCSDZM +4075:Xm_GientCup_Cave_Clear +4076:Xm_Cave_Dark +4077:Xm_MushroomBoss +4078:Xm_WitheredForest_GreatgrassTemple +4079:Xm_WitheredForest_Hole_After +4080:Xm_WitheredForest_Hole_After +4081:Xm_MushroomCave_Relic01 +4082:Xm_MushroomCave +4083:Xm_Huayuan +4084:Xm_DiDiMiJing +4085:Xm_Devil_Cave_02 +4086:Xm_Robot_General_Titan_Broken_CS +4087:Xm_WitheredForest_Boss_Noeff +4088:Xm_Robot_General +4089:Xm_General +4090:Xm_Valley_DLZS +4091:Xm_SecretPeak +4092:Xm_Cave_XCSDZM +4093:Xm_Cave_General +4094:Xm_Cave_General +4095:Xm35_GeneralCopyWorld02 +4096:Xm_General +4097:Xm_General +4098:Xm_General +4100:Xm31_CWSM_General +4101:Xm31_JZT_SandStorm +4102:Xm31_MYSD_General +4103:Xm31_JQR_General +4104:Xm31_LSKYJ_General +4105:Xm31_Aru +4106:Xm31_SXT_General +4107:Xm31_MLYY +4108:Xm31_MLYY_Cave +4110:Xm31_FFQ_Sandy +4111:Xm31_CWSM_General +4112:Xm31_JZT_Underground +4113:Xm31_YNGZTBoss +4114:Xm31_LvZ +4115:Xm31_JQR_General +4116:Xm31_JZT_Underground +4117:Xm31_CWSM_General +4118:Xm31_MYSD_Entrance +4119:Xm31_JZTs_Boss +4120:Xm31_MYSD_SunBoat +4121:Xm31_MYSD_SunBoat +4122:Xm31_MYSD_SunBoat +4123:Xm31_MYSD_SunBoat_Broken +4124:Xm31_CWL_UpIndoor +4125:Xm31_YNGZTBoss +4200:Xm33_StormDesert_Out +4201:Xm33_StormDesert_Middle +4202:Xm33_StormDesert_Inner +4203:Xm33_StormDesert_Out_S +4204:Xm33_StormDesert_Middle_S +4205:Xm33_StormDesert_Inner_S +4209:Xm33_StormDesert_General +4210:Xm33_HugeFissure_Bottom +4211:Xm33_HugeFissure_Middle +4212:Xm33_StormDesert_Out +4213:Xm33_DJCamp_General +4214:Xm33_SmallFissure +4215:Xm33_SandRuins_General +4216:Xm33_SandRuins_Inside +4217:Xm33_SandRuins_UnderGround_Cave01 +4218:Xm33_SandRuins_UnderGround_Cave02 +4219:Xm33_ChiWangCave_01_General +4220:Xm33_SandwormCave_General +4221:Xm33_SandwormCave_SpiritGeneral +4222:Xm33_BackFissure_Bottom +4223:Xm33_Robot +4224:Xm33_ChiWangCave_02_General +4225:Xm33_GrassDragonCave +4226:Xm33_Robot +4227:Xm33_ChiWangCave_03_General +4228:Xm33_JamshidCup_General +4229:Xm33_JamshidCup_Boss +4230:Xm33_EternalOasis +4231:Xm33_StormDesert_Out_S +4232:Xm33_Robot +4233:Xm33_Robot +4234:Xm33_SandRuins_General +4235:Xm33_SandRuins_UnderGround_Cave01 +4236:Xm33_SandRuins_UnderGround_Cave02 +4237:Xm33_SandRuins_Inside +4238:Xm33_StormDesert_Middle_S +4239:Xm33_GrassDragonCave +4240:Xm33_SandwormCave_General +4241:Xm33_SandwormCave_General +4242:Xm33_SandwormCave_General +4243:Xm33_SandwormCave_General +4244:Xm33_GrassDragonCave +4245:Xm33_HugeFissure_Middle +4246:Xm33_StormDesert_Middle_S +4247:Xm33_StormDesert_Out +4248:Xm33_StormDesert_Out +4249:Xm33_StormDesert_Out +4250:Xm33_StormDesert_Out +4251:Xm33_StormDesert_Transition +4252:Xm33_EternalOasis +4253:Xm33_EternalOasis +4254:Xm33_HugeFissure_Middle +4255:Xm33_StormDesert_Inner_S_Story +4256:Xm37_Robot_General_Copy +4257:Xm37_Zhimeng01_Dream +4258:Xm37_Robot_General_Copy02 +4300:Xm_Sandtest +4301:Xm36_Boundary_General +4302:Xm36_TNHY_General +4303:Xm36_FireTest +4304:Xm36_BlackAbyss_Remains +4305:Xm36_SandyBeach +4306:Xm36_BlackAbyss +4307:Xm36_GrassGodLake +4308:Xm36_GrassGodLake_FlowerSea +4309:Xm36_ThornySwamp +4310:Xm36_GiantTree +4311:Xm36_Wilderness +4312:Xm36_BlackAbyss_Remains +4313:Xm36_BlackAbyss_Remains +4314:Xm36_Wilderness +4315:Xm36_GrassGodLake_TwoStage +4316:Xm36_ThornySwamp_TwoStage +4317:Xm36_BlackAbyss_02 +4318:Xm36_GrassGodLake_Udumbara +4319:Xm36_GrassGodLake_Udumbara +4320:Xm36_GrassGodLake_FlowerSea +4321:Xm36_GrassGodLake_FlowerSea +4322:Xm36_WaterTrial +4323:Xm36_TNHY_General +4324:Xm36_TNHY_General +5000:Fd_General +5001:Fd_Wharf +5002:Fd_CityOfTears +5003:Fd_CityOfTears_Corridor +5004:Fd_CityOfTears_Marian +5005:Fd_FDC_UP +5006:Fd_General +5007:Fd_Boundry +5008:Fd_FDC +5009:Fd_GardenBoss +5010:Fd_GardenBoss +5011:Fd_Giant +5012:Fd_GiantHeart_Interior_Before +5013:Fd_GiantHeart_Interior_After +5014:Fd_FishingTown +5015:Fd_40BossCrab +5016:Fd_BoilingLake +5017:Fd_PSKJYJ_Interior +5018:Fd_MSZHCD +5019:Fd_MSZHCD +5020:Fd_MSZHCD +5021:Fd_MSZHCD +5022:Fd_Theater +5023:Fd_TransferStation +5024:Fd_ShuiXian +5025:Fd_FishingTown +5026:Fd_BoilingLake +5027:Fd40_OldTown +5028:Fd_UnderWater_FirstView +5029:Fd_Theater +5030:Fd_Theater +5031:Fd_General +5032:Fd_CityOfTears +5033:Fd_General +5034:Fd_MSZHCD_After +5035:Fd_MSZHCD_After +5036:Fd_MSZHCD_After +5037:Fd_MSZHCD_After +5038:Fd_General +5039:Fd_General +5040:Fd_Wharf_Boundry +5041:Fd_CityOfTears +5042:Fd_CityOfTears +5043:Fd_General +5044:Fd_General +5045:Fd_General +5046:Fd_General +5047:Fd_FDC +5048:Fd_FDC +5049:Fd_FDC +5050:Fd_General +5051:Fd_Theater +5052:Fd_Theater +6000:Ly_General +6001:Ly_General +7000:Ly_General +7001:Ly_General +9031:Xm36_Sandworm +9035:Ly_TheChasm +9036:LiyueAreaDefault02 +9037:Md_SnowMountain_General +// 4 +2144:LP_General +2145:LP_Fog_Heavy +2146:LP_Fog_Light +2147:LP_Fog_Light +2148:LP_Fog_LowL_Boundry +2149:LP_Fog_Light +2150:LP_Fog_Light +2151:LP_Fog_Light +2153:LP_Fog_Clear +2154:LP_Fog_Clear +2155:LP_Fog_Clear +2156:LP_Fog_Clear +2157:LP_Fog_Clear +2158:LP_Fog_LowL_Boundry +2159:LP_Fog_Heavy +2160:LP_Fog_Heavy +2161:LP_Fog_Light +2162:LP_HighL_General +2163:LP_General +2164:Monster_Samurai_Ningyo +// 5 +3142:Dq_AbyssalPalace_General +3143:Dq_AbyssalPalace_Tunnel +3144:Dq_AbyssalPalace_Tunnel_Entrance +3333:Dq_AbyssalPalace_Dari_Boss +3433:Dq_AbyssalPalace_Dari +3334:Dq_AbyssalPalace_Dari +3335:Dq_AbyssalPalace_XiaJian +3336:Dq_AbyssalPalace_LM_LingChuan +3436:Dq_AbyssalPalace_LM +3337:Dq_AbyssalPalace_LM +3338:Dq_AbyssalPalace_Dashe_Relic +3438:Dq_AbyssalPalace_DaShe +3339:Dq_AbyssalPalace_DaShe +3355:Dq_AbyssalPalace_XiaJian_Seal +3356:Dq_AbyssalPalace_LM_Seal +3357:Dq_AbyssalPalace_DaShe_Seal +3358:Dq_AbyssalPalace_Dari_Coral +3458:Dq_AbyssalPalace_Dari +3359:Dq_AbyssalPalace_XiaJian_Waterfall +3360:Dq_AbyssalPalace_LM_Waterfall +3361:Dq_AbyssalPalace_Waterfall +3461:Dq_AbyssalPalace_DaShe +3362:Dq_AbyssalPalace_KeyView +// 6 +2168:Ly_TheChasm_QSJD +2169:Ly_TheChasm_KCKQ +2170:Ly_TheChasm_QXKD +2171:Ly_TheChasm_YJJS +2172:Ly_TheChasm_MGK +2173:Ly_TheChasm_JCYH +2174:Ly_TheChasm_XMSG +2275:Ly_TheChasm_TKDXSP +2175:Ly_TheChasm_HAZD +2277:Ly_TheChasm_TKDXSP_After +2177:Ly_TheChasm_HAZD +2178:Ly_TheChasm_HAZD +2179:Ly_TheChasm_SMYJ +2180:Ly_TheChasm_XCYJ +2181:Ly_TheChasm_YGQJ +2182:Ly_TheChasm_TKDDSP +2183:Ly_TheChasm_TKDDSP_After +2284:Ly_TheChasm_QSJDtoKCKQ +2184:Ly_TheChasm_QSJDtoKCKQ +2285:Ly_TheChasm_JCYH +2185:Ly_TheChasm_SMYJ +2286:Ly_TheChasm_YGQJ_Mushroom +2186:Ly_TheChasm_YGQJ_Mushroom +2187:Ly_TheChasm_DMS +2188:Ly_TheChasm_TKDDSP_Tunnel +2289:Ly_TheChasm_HAZD_Tunnel +2189:Ly_TheChasm_YGQJ_Mushroom +2290:Ly_TheChasm_JCYH +2190:Ly_TheChasm_SMYJ +2192:Ly_TheChasm_Gemini +2193:Ly_TheChasm_YGQJ_Mushroom +2194:Ly_TheChasm_QSJDtoYJJS +2196:Ly_TheChasm_QXKD +2197:Ly_TheChasm_QSJDtoKCKQ +2198:Ly_TheChasm_KCKQ +2199:Ly_TheChasm_KCKQ +// 7 +3342:Dq_AbyssalPalace_General +3343:Dq_AbyssalPalace_Tunnel +3344:Dq_AbyssalPalace_Tunnel_Entrance +3345:Dq_AbyssalPalace_Dari_Boss +3445:Dq_AbyssalPalace_Dari_25Night +3347:Dq_AbyssalPalace_Dari_25Night +3348:Dq_AbyssalPalace_XiaJian_25Night_Dark +3351:Dq_AbyssalPalace_LM_25Night_Dark +3354:Dq_AbyssalPalace_DaShe_25Night_Dark +3363:Dq_AbyssalPalace_XiaJian_Seal_25Night_Dark +3364:Dq_AbyssalPalace_LM_Seal_25Night_Dark +3365:Dq_AbyssalPalace_DaShe_Seal_25Night_Dark +3368:Dq_AbyssalPalace_XiaJian_25Night +3369:Dq_AbyssalPalace_LM_25Night +3370:Dq_AbyssalPalace_DaShe_25Night +3371:Dq_AbyssalPalace_XiaJian_Seal_25Night +3372:Dq_AbyssalPalace_LM_Seal_25Night +3373:Dq_AbyssalPalace_DaShe_Seal_25Night +3374:Dq_AbyssalPalace_Dashe_Relic_25Night +3474:Dq_AbyssalPalace_DaShe_25Night_Dark +3375:Dq_AbyssalPalace_Dashe_Relic_25Night +3475:Dq_AbyssalPalace_DaShe_25Night +// 9 +9001:DI_General +9002:DI_BuDing +9003:DI_ShuangShuang_02 +9004:DI_PoPo_Cloudy +9005:DI_WeiWei +9006:DI_WeiWei_Rain +9007:DI_WeiWei_Foggy +9008:DI_DMP01 +9009:DI_General +9010:DI_Fog_Light +9011:DI_ThunderStorm +9012:DI_Fog_Light +9013:DI_Fog_Light +9014:DI_Fog_Light +9015:DI_PoPo_Sunny +9016:DI_General_24H +9017:DI_General_24H +9018:DI_General_24H +9019:DI_Social +9020:DI_ShuangShuang +// 10 +9021:Xm38_Penumbra_General +9022:Xm38_RollerCoaster_General +9023:Xm38_ThemePark_General +9024:Xm38_FerrisWheel_General +9025:Xm38_Penumbra_Desert +9026:Xm38_Circus_General +9027:Xm38_TreeCastle_General +9028:Xm38_Penumbra_General +9029:Xm38_Penumbra_General +9030:Xm38_Circus_Candy +9032:Xm38_Circus_General_Before +9033:Xm38_Up_General +9034:Xm38_Circus_General_Before +9038:Xm38_Circus_toy +9039:Xm38_TreeCastle_General +9040:Xm38_ThemePark_General +9041:Xm38_Circus_Candy_Before +// 1059 +10003:FCdungeon_Hutao_01 +10004:FCdungeon_Hutao_02 +// 2004 +10065:HomeExterior_Ukiyo +10066:HomeExterior_Ukiyo +// 2005 +10138:HomeExterior_Sumeru +10139:HomeExterior_Sumeru_Yellow +// 20005 +3000:XianglingPlotLevel01_Test +3001:XianglingPlotLevel01 +10001:XianglingPlotLevel01_Test +10002:XianglingPlotLevel01 +// 20104 +10005:FCdungeon_GoddessLY01 +10006:FCdungeon_GoddessLY02 +// 20105 +10007:FCdungeon_GoddessLY01 +10008:FCdungeon_GoddessLY02 +// 20106 +10012:DahakaBoss01 +// 20107 +10013:DahakaBoss01 +// 20108 +10014:DahakaBoss01 +// 20109 +10015:DahakaBoss01 +// 20110 +10016:DahakaBoss01 +// 20113 +10059:FCDungeon_Delusion01 +// 20114 +10029:DonjonBattle +10030:DonjonBattle +10031:DonjonBattle +// 20115 +10032:DonjonBattle +10033:DonjonBattle +10034:DonjonBattle +// 20116 +10063:Dq_Void02 +// 20117 +10060:Dq_Void02 +10061:Dq_Void02 +10062:Dq_Void02 +// 20121 +10067:FCdungeon_ShenheCloud01 +10068:FCdungeon_ShenheCloud02 +10069:FCdungeon_ShenheCloud03 +10070:FCdungeon_ShenheCloud04 +10071:FCdungeon_ShenheCloud05 +// 20122 +10080:WeekDungeon_Baal +// 20125 +10081:WeekDungeon_Baal +// 20128 +10095:CYDungeon_Activy02 +10096:CYDungeon_Activy02_Void +10100:CYDungeon_Activy02_Cave +10101:CYDungeon_Activy02_Cave +// 20129 +10082:CYDungeon_Activy03_01 +10083:CYDungeon_Activy03_02 +10084:CYDungeon_Activy03_03 +10085:CYDungeon_Activy03_04 +10097:CYDungeon_Activy03_Corridor +10098:CYDungeon_Activy03_VoidSpace +// 20132 +10134:SmrDungeon_BigTree_Room +10135:SmrDungeon_BigTree_Room +10136:SmrDungeon_BigTree_Flower +10137:SmrDungeon_BigTree_Flower +// 20133 +10072:DreamIsland_XinyanDungeon_Cave1 +10073:DreamIsland_XinyanDungeon_Cave2 +10074:DreamIsland_XinyanDungeon_Cave3 +10075:DreamIsland_XinyanDungeon_Island1_1 +10076:DreamIsland_XinyanDungeon_Bridge1 +10077:DreamIsland_XinyanDungeon_Island3_1 +10078:DreamIsland_XinyanDungeon_Island1_2 +10079:DreamIsland_XinyanDungeon_Island3_2 +10104:DreamIsland_XinyanDungeon_Home +// 20134 +10105:DreamIsland_Mona_Home +10106:DreamIsland_Mona01 +// 20135 +10094:DreamIsland_Kazuha02_Special +// 20136 +10090:DreamIsland_Mona_StarrySky_01 +10091:DreamIsland_Mona_StarrySky_02 +10092:DreamIsland_Mona_StarrySky_02Rain +10093:DreamIsland_Mona_StarrySky_01 +10107:DreamIsland_Mona02 +// 20146 +10132:XMdungeon_WQ01_02 +// 20147 +10133:XMdungeon_WQ01_03 +// 20151 +10140:FC_DeshretTemple_General +10141:FC_DeshretTemple_Ending +// 20154 +10142:Xm_ScaramoucheBoss02 +// 20158 +10156:FCdungeon_BigTree_02_storm +10157:FCdungeon_BigTree_03 +// 20165 +10151:NahidaDungeon_01 +10152:NahidaDungeon_02 +10153:NahidaDungeon_02 +10154:NahidaDungeon_03 +10155:NahidaDungeon_04 +10158:NahidaDungeon_01 +// 20167 +10175:Xm33_Consciousness_Indoor +// 20168 +10143:Xm_ScaramoucheBoss02 +// 20169 +10150:FCDungeon_Delusion01 +// 20173 +10176:Xm_Alhaitham_boss +10178:Xm_Alhaitham_boss +// 20177 +10179:Xm35_Level_SmrDungeon_Dehya_General +10180:Xm35_Level_SmrDungeon_Dehya +10195:Xm35_Level_SmrDungeon_Dehya +// 20179 +10177:GrassDragonBoss02 +// 20180 +10192:Xm35_GeneralCopyWorld01 +10193:Xm35_GeneralCopyWorld01 +10194:Xm35_GeneralCopyWorld01 +// 20185 +10200:GrassDragonBoss02 +// 20186 +10210:Fontaine_Gear +// 35800 +10009:CycleDungeon_WindFlower +10010:CycleDungeon_WindFlower_Outdoor +10011:CycleDungeon_WindFlower_Outdoor +// 35801 +10035:ContestBattle01 +10036:ContestBattle01 +10037:ContestBattle01 +10038:ContestBattle01 +// 35802 +10039:ContestBattle01 +10040:ContestBattle01 +10041:ContestBattle01 +10042:ContestBattle01 +// 35803 +10043:ContestBattle01 +10044:ContestBattle01 +10045:ContestBattle01 +10046:ContestBattle01 +// 35804 +10047:ContestBattle01 +10048:ContestBattle01 +10049:ContestBattle01 +10050:ContestBattle01 +// 35805 +10051:ContestBattle01 +10052:ContestBattle01 +10053:ContestBattle01 +10054:ContestBattle01 +// 35806 +10055:ContestBattle01 +10056:ContestBattle01 +10057:ContestBattle01 +10058:ContestBattle01 +// 35807 +11035:ContestBattle01 +11036:ContestBattle01 +11037:ContestBattle01 +11038:ContestBattle01 +10159:ContestBattle01 +10160:ContestBattle01 +10161:ContestBattle01 +10162:ContestBattle01 +10163:ContestBattle01 +10164:ContestBattle01 +10165:ContestBattle01 +// 35808 +11039:ContestBattle01 +11040:ContestBattle01 +11041:ContestBattle01 +11042:ContestBattle01 +// 35809 +11043:ContestBattle01 +11044:ContestBattle01 +11045:ContestBattle01 +11046:ContestBattle01 +// 35810 +11047:ContestBattle01 +11048:ContestBattle01 +11049:ContestBattle01 +11050:ContestBattle01 +// 35811 +11051:ContestBattle01 +11052:ContestBattle01 +11053:ContestBattle01 +11054:ContestBattle01 +// 35812 +11055:ContestBattle01 +11056:ContestBattle01 +11057:ContestBattle01 +11058:ContestBattle01 +// 35813 +10108:ContestBattle01 +10109:ContestBattle01 +10110:ContestBattle01 +10111:ContestBattle01 +// 35814 +10112:ContestBattle01 +10113:ContestBattle01 +10114:ContestBattle01 +10115:ContestBattle01 +// 35815 +10116:ContestBattle01 +10117:ContestBattle01 +10118:ContestBattle01 +10119:ContestBattle01 +// 35816 +10120:ContestBattle01 +10121:ContestBattle01 +10122:ContestBattle01 +10123:ContestBattle01 +// 35817 +10124:ContestBattle01 +10125:ContestBattle01 +10126:ContestBattle01 +10127:ContestBattle01 +// 35818 +10128:ContestBattle01 +10129:ContestBattle01 +10130:ContestBattle01 +10131:ContestBattle01 +// 35846 +10102:DreamIsland_XinyanDungeon_Island3_1 +// 35847 +10103:DreamIsland_XinyanDungeon_Island3_1 +// 35870 +10166:BrickBreaker01 +10167:BrickBreaker01 +10168:BrickBreaker01 +// 35871 +10169:BrickBreaker01 +10170:BrickBreaker01 +10171:BrickBreaker01 +// 35872 +10172:BrickBreaker01 +10173:BrickBreaker01 +10174:BrickBreaker01 +// 35906 +10196:CycleDungeon_WindFlower +// 35907 +10197:CycleDungeon_WindFlower +// 35908 +10198:CycleDungeon_WindFlower +// 35909 +10199:CycleDungeon_WindFlower +// 35914 +10201:Xm38_Level_Activity_Circus +10202:Xm38_Level_Activity_Circus_Dark +// 43001 +10017:FCdungeon_MistTrial_Bottom +10018:FCdungeon_MistTrial +// 43002 +10019:FCdungeon_MistTrial_Bottom +10020:FCdungeon_MistTrial +// 43003 +10021:FCdungeon_MistTrial_Bottom +10022:FCdungeon_MistTrial +// 43004 +10023:FCdungeon_MistTrial_Bottom +10024:FCdungeon_MistTrial +// 43005 +10025:FCdungeon_MistTrial_Bottom +10026:FCdungeon_MistTrial +// 43006 +10027:FCdungeon_MistTrial_Bottom +10028:FCdungeon_MistTrial +// 46203 +10086:CYDungeon_Activy03_01 +10087:CYDungeon_Activy03_02 +10088:CYDungeon_Activy03_03 +10089:CYDungeon_Activy03_04 +10099:CYDungeon_Activy03_Corridor +// 47003 +10064:OnmyoMaze01_CutsceneRoom +// 47405 +10181:Du35__ActivityPacMan_01_Night_Light +10182:Du35__ActivityPacMan_01_Night_Fog +10183:Du35__ActivityPacMan_01_Night_Light +10184:Du35__ActivityPacMan_01_Night_Fog +10185:Du35__ActivityPacMan_01_Night_Light +// 47406 +10186:Du35__ActivityPacMan_01_Night_Fog +10187:Du35__ActivityPacMan_01_Night_Light +10188:Du35__ActivityPacMan_01_Night_Fog +10189:Du35__ActivityPacMan_01_Night_Light +10190:Du35__ActivityPacMan_01_Night_Fog +10191:Du35__ActivityPacMan_01_Night_Light +// 47608 +10203:UGCDungeon_CustomLevel_A_01 +10204:UGCDungeon_CustomLevel_A_02 +10205:UGCDungeon_CustomLevel_A_03 +10206:UGCDungeon_CustomLevel_A_04 +10207:UGCDungeon_CustomLevel_A_05 +10208:UGCDungeon_CustomLevel_A_06 +10209:Du38_UGCDungeon_CustomLevel_G +// 51008 +10144:UGCDungeon_CustomLevel_A_01 +10145:UGCDungeon_CustomLevel_A_02 +10146:UGCDungeon_CustomLevel_A_03 +10147:UGCDungeon_CustomLevel_A_04 +10148:UGCDungeon_CustomLevel_A_05 +10149:UGCDungeon_CustomLevel_A_06