Compare commits

...

24 Commits

Author SHA1 Message Date
c94a7683e4 Update tab order 2023-08-25 19:53:40 +08:00
b407012bef Add FreezeTime and LockWeather to scene page 2023-08-25 19:47:23 +08:00
bb7d28153f Enlarge custom commands font size 2023-08-25 19:39:30 +08:00
627d9c7cd2 Add fly command 2023-08-25 19:37:14 +08:00
53a83fd7a7 Update version to v1.12.2 2023-08-24 19:51:49 +08:00
c2ca091662 Update Items filter 2023-08-24 19:51:30 +08:00
738a755353 Update All Gadgets
Update Spawn filter
2023-08-24 19:41:30 +08:00
dcbd946407 Fix console include @uid issue 2023-08-24 17:16:30 +08:00
2a8cebcbb5 Clean up all code 2023-08-24 15:18:12 +08:00
434ec7b2df Fix Jadefall's Splendor 2023-08-24 14:57:15 +08:00
c2ff37facf Update scene dungeon names 2023-08-24 13:49:15 +08:00
f48c9b4d0b Update 4.0 Quests 2023-08-24 00:02:19 +08:00
1d734479d1 Update filter button UI 2023-08-23 23:34:13 +08:00
a989581d59 Swap the run and copy button positions 2023-08-23 23:05:24 +08:00
6ab9d3842c Update version to v1.12.1 2023-08-23 22:40:42 +08:00
b69b2941b6 Fix auto check local server error 2023-08-23 22:39:40 +08:00
90deaa84b4 Update Scenes and avatar/weapon colors 2023-08-22 22:40:33 +08:00
403cc3fe52 Add GC 1.7 2023-08-22 22:24:01 +08:00
dd4eb36c17 Update Banners from https://github.com/Zhaokugua/Grasscutter_Banners 2023-08-22 22:23:08 +08:00
2645e16bee Add Resources update tool 2023-08-22 22:17:47 +08:00
82668c4c6a Update All 4.0 Ids 2023-08-22 22:17:18 +08:00
8fce4a8995 Update 4.0 Ids(Activity/Dungeon/Weapon) 2023-08-22 00:16:35 +08:00
Deuteriunt
4cfbebcc5a Update Activity/Avatar/Weapon ids(CHS) (#202) 2023-08-20 14:57:40 +08:00
40db4236ba Add Commandline Usages 2023-08-02 18:06:43 +08:00
143 changed files with 78402 additions and 45960 deletions

View File

@@ -37,6 +37,15 @@ The server require [gc-opencommand-plugin](https://github.com/jie65535/gc-openco
### GrasscutterTools-v1.11
![HotKey](Doc/Screenshots-en/21-HotKey.png)
Commandline Usages:
```bash
GcTools.exe -help
GcTools.exe -version
GcTools.exe -c "cmd arg"
GcTools.exe -c "cmd1 arg" && GcTools -c "cmd2 arg1 arg2"
GcTools.exe -host http://127.0.0.1:443 -token 123456 -c "cmd1 arg1 arg2 | cmd2 | cmd3 arg"
```
### GrasscutterTools-v1.10
![Cutscene](Doc/Screenshots-en/7-ChangeScene.png)

View File

@@ -38,6 +38,15 @@ GCG поддерживает 简体中文 (китайский упр.), 繁體
### GrasscutterTools-v1.11
![HotKey](Doc/Screenshots-en/21-HotKey.png)
Commandline Usages:
```bash
GcTools.exe -help
GcTools.exe -version
GcTools.exe -c "cmd arg"
GcTools.exe -c "cmd1 arg" && GcTools -c "cmd2 arg1 arg2"
GcTools.exe -host http://127.0.0.1:443 -token 123456 -c "cmd1 arg1 arg2 | cmd2 | cmd3 arg"
```
### GrasscutterTools-v1.10
![Cutscene](Doc/Screenshots-ru/12-Scenes.png)

View File

@@ -38,6 +38,15 @@
### GrasscutterTools-v1.11
![HotKey](Doc/Screenshots/21-HotKey.png)
命令行用法:
```bash
GcTools.exe -help
GcTools.exe -version
GcTools.exe -c "cmd arg"
GcTools.exe -c "cmd1 arg" && GcTools -c "cmd2 arg1 arg2"
GcTools.exe -host http://127.0.0.1:443 -token 123456 -c "cmd1 arg1 arg2 | cmd2 | cmd3 arg"
```
### GrasscutterTools-v1.10
![Cutscene](Doc/Screenshots/7-ChangeScene.png)

View File

@@ -37,6 +37,15 @@
### GrasscutterTools-v1.11
![HotKey](Doc/Screenshots/21-HotKey.png)
Commandline Usages:
```bash
GcTools.exe -help
GcTools.exe -version
GcTools.exe -c "cmd arg"
GcTools.exe -c "cmd1 arg" && GcTools -c "cmd2 arg1 arg2"
GcTools.exe -host http://127.0.0.1:443 -token 123456 -c "cmd1 arg1 arg2 | cmd2 | cmd3 arg"
```
### GrasscutterTools-v1.10
![Cutscene](Doc/Screenshots-tw/7-ChangeScene.png)

View File

@@ -29,7 +29,7 @@
<value>10001</value>
</setting>
<setting name="Host" serializeAs="String">
<value>https://127.0.0.1</value>
<value>http://127.0.0.1:443</value>
</setting>
<setting name="CheckedLastVersion" serializeAs="String">
<value />

View File

@@ -24,7 +24,7 @@ using GrasscutterTools.Utils;
namespace GrasscutterTools.DispatchServer
{
public static class DispatchServerAPI
internal static class DispatchServerAPI
{
public static async Task<ServerStatus> QueryServerStatus(string host)
{

View File

@@ -21,7 +21,7 @@ using Newtonsoft.Json;
namespace GrasscutterTools.DispatchServer.Model
{
public class ServerStatus
internal class ServerStatus
{
[JsonProperty("playerCount")]
public int PlayerCount { get; set; }
@@ -33,7 +33,7 @@ namespace GrasscutterTools.DispatchServer.Model
public string Version { get; set; }
}
public class ServerStatusResponse
internal class ServerStatusResponse
{
[JsonProperty("retcode")]
public int RetCode { get; set; }

View File

@@ -126,17 +126,17 @@ namespace GrasscutterTools.Forms
}
};
CreatePage<PageGiveArtifact>();
CreatePage<PageSetProp>();
CreatePage<PageSpawn>();
CreatePage<PageGiveItem>();
CreatePage<PageAvatar>();
CreatePage<PageGiveWeapon>();
CreatePage<PageScene>();
CreatePage<PageTasks>();
CreatePage<PageManagement>();
CreatePage<PageMail>();
CreatePage<PageTasks>();
CreatePage<PageQuest>();
CreatePage<PageScene>();
CreatePage<PageAchievement>();
CreatePage<PageSetProp>();
CreatePage<PageAbout>();
#if DEBUG
CreatePage<PageTools>();
@@ -158,17 +158,17 @@ namespace GrasscutterTools.Forms
Resources.PageCustomCommandsTitle,
Resources.PageHotKey,
Resources.PageGetArtifactTitle,
Resources.PageSetPropTitle,
Resources.PageSpawnTitle,
Resources.PageGiveItemTitle,
Resources.PageAvatarTitle,
Resources.PageGiveWeaponTitle,
Resources.PageSceneTitle,
Resources.PageTasksTitle,
Resources.PageManagementTitle,
Resources.PageMailTitle,
Resources.PageTasksTitle,
Resources.PageQuestTitle,
Resources.PageSceneTitle,
Resources.PageAchievementTitle,
Resources.PageSetPropTitle,
Resources.PageAboutTitle,
#if DEBUG
"Tools",
@@ -380,10 +380,9 @@ namespace GrasscutterTools.Forms
/// <param name="args">参数</param>
private void SetCommand(string command, string args)
{
if (Settings.Default.IsIncludeUID)
SetCommand($"{command} @{Settings.Default.Uid} {args.Trim()}");
else
SetCommand($"{command} {args.Trim()}");
SetCommand(Settings.Default.IsIncludeUID
? $"{command} {args.Trim()} @{Settings.Default.Uid}"
: $"{command} {args.Trim()}");
}
/// <summary>
@@ -557,8 +556,8 @@ namespace GrasscutterTools.Forms
Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom,
Multiline = true,
Font = new Font("Consolas", 9F),
Location = new Point(BtnInvokeOpenCommand.Left, BtnInvokeOpenCommand.Bottom + 6),
Size = new Size(GrpCommand.Width - BtnInvokeOpenCommand.Left * 2, TxtCommandRunLogMinHeight),
Location = new Point(ChkAutoCopy.Left, ChkAutoCopy.Bottom + 6),
Size = new Size(GrpCommand.Width - ChkAutoCopy.Left * 2, TxtCommandRunLogMinHeight),
ReadOnly = true,
BackColor = Color.White,
ScrollBars = ScrollBars.Vertical,

View File

@@ -135,6 +135,6 @@
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="$this.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>Inherit</value>
<value>NoControl</value>
</data>
</root>

View File

@@ -244,7 +244,7 @@
<value>Top, Left, Right</value>
</data>
<data name="CmbCommand.Location" type="System.Drawing.Point, System.Drawing">
<value>87, 21</value>
<value>115, 22</value>
</data>
<data name="CmbCommand.Size" type="System.Drawing.Size, System.Drawing">
<value>600, 25</value>
@@ -264,17 +264,14 @@
<data name="&gt;&gt;CmbCommand.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="BtnCopy.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="BtnCopy.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="BtnCopy.Location" type="System.Drawing.Point, System.Drawing">
<value>693, 22</value>
<value>59, 22</value>
</data>
<data name="BtnCopy.Size" type="System.Drawing.Size, System.Drawing">
<value>50, 23</value>
<value>50, 25</value>
</data>
<data name="BtnCopy.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
@@ -294,9 +291,6 @@
<data name="&gt;&gt;BtnCopy.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="ChkAutoCopy.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="ChkAutoCopy.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
@@ -304,7 +298,7 @@
<value>NoControl</value>
</data>
<data name="ChkAutoCopy.Location" type="System.Drawing.Point, System.Drawing">
<value>749, 24</value>
<value>10, 24</value>
</data>
<data name="ChkAutoCopy.Size" type="System.Drawing.Size, System.Drawing">
<value>51, 21</value>
@@ -330,14 +324,17 @@
<data name="GrpCommand.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left, Right</value>
</data>
<data name="BtnInvokeOpenCommand.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="BtnInvokeOpenCommand.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="BtnInvokeOpenCommand.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 22</value>
<value>721, 22</value>
</data>
<data name="BtnInvokeOpenCommand.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
<value>75, 25</value>
</data>
<data name="BtnInvokeOpenCommand.TabIndex" type="System.Int32, mscorlib">
<value>0</value>

View File

@@ -119,22 +119,22 @@
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="CmbCommand.Location" type="System.Drawing.Point, System.Drawing">
<value>132, 21</value>
<value>155, 21</value>
</data>
<data name="CmbCommand.Size" type="System.Drawing.Size, System.Drawing">
<value>513, 25</value>
<value>523, 25</value>
</data>
<data name="BtnCopy.Location" type="System.Drawing.Point, System.Drawing">
<value>651, 21</value>
<value>57, 21</value>
</data>
<data name="BtnCopy.Size" type="System.Drawing.Size, System.Drawing">
<value>92, 23</value>
<value>92, 25</value>
</data>
<data name="BtnCopy.Text" xml:space="preserve">
<value>Копировать</value>
</data>
<data name="ChkAutoCopy.Location" type="System.Drawing.Point, System.Drawing">
<value>749, 23</value>
<value>6, 24</value>
</data>
<data name="ChkAutoCopy.Size" type="System.Drawing.Size, System.Drawing">
<value>55, 21</value>
@@ -145,14 +145,17 @@
<data name="GrpCommand.Text" xml:space="preserve">
<value>Команды - [Ctrl] Запуск и замена - [Shift] Добавить - [Alt] Только запустить - [|] Разделитель</value>
</data>
<data name="BtnInvokeOpenCommand.Location" type="System.Drawing.Point, System.Drawing">
<value>684, 21</value>
</data>
<data name="BtnInvokeOpenCommand.Size" type="System.Drawing.Size, System.Drawing">
<value>120, 23</value>
<value>120, 25</value>
</data>
<data name="BtnInvokeOpenCommand.Text" xml:space="preserve">
<value>Выполнить (F5)</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="$this.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>Inherit</value>
<value>NoControl</value>
</data>
</root>

View File

@@ -131,6 +131,6 @@
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="$this.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>Inherit</value>
<value>NoControl</value>
</data>
</root>

View File

@@ -26,7 +26,7 @@ namespace GrasscutterTools.GOOD
/// Doc: https://frzyc.github.io/genshin-optimizer/#/doc
/// Modified from https://github.com/Andrewthe13th/Inventory_Kamera/blob/master/InventoryKamera/game/Artifact.cs
/// </summary>
public class Artifact
internal class Artifact
{
/// <summary>
/// e.g. "GladiatorsFinale"

View File

@@ -26,7 +26,7 @@ namespace GrasscutterTools.GOOD
/// Doc: https://frzyc.github.io/genshin-optimizer/#/doc
/// Modified from https://github.com/Andrewthe13th/Inventory_Kamera/blob/master/InventoryKamera/game/Character.cs
/// </summary>
public class Character
internal class Character
{
/// <summary>
/// e.g. "Rosaria"

View File

@@ -38,7 +38,7 @@ namespace GrasscutterTools.GOOD
/// https://genshin.mingyulab.com/
/// https://genshin-center.com/
/// </summary>
public class GOOD
internal class GOOD
{
[JsonProperty("format")]
public string Format { get; set; }

View File

@@ -26,7 +26,7 @@ using GrasscutterTools.Properties;
namespace GrasscutterTools.GOOD
{
public static class GOODData
internal static class GOODData
{
static GOODData()
{

View File

@@ -28,7 +28,7 @@ namespace GrasscutterTools.GOOD
/// Doc: https://frzyc.github.io/genshin-optimizer/#/doc
/// Modified from https://github.com/Andrewthe13th/Inventory_Kamera/blob/master/InventoryKamera/game/Weapon.cs
/// </summary>
public class Weapon
internal class Weapon
{
/// <summary>
/// e.g. "CrescentPike"

View File

@@ -24,7 +24,7 @@ using Newtonsoft.Json;
namespace GrasscutterTools.Game.Activity
{
public class ActivityConfigItem
internal class ActivityConfigItem
{
/// <summary>
/// 活动ID

View File

@@ -162,6 +162,11 @@ namespace GrasscutterTools.Game
/// </summary>
public static readonly Version V1_6_3 = new Version(1, 6, 3);
/// <summary>
/// 2023/??
/// </summary>
public static readonly Version V1_7_0 = new Version(1, 7, 0);
// More...
/// <summary>
/// Date
@@ -184,6 +189,7 @@ namespace GrasscutterTools.Game
V1_6_1,
V1_6_2,
V1_6_3,
V1_7_0,
};
#endregion - Version List -

View File

@@ -0,0 +1,32 @@
/**
* 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 <https://www.gnu.org/licenses/>.
*
**/
using Newtonsoft.Json;
namespace GrasscutterTools.Game.Data.Excels
{
[ResourceType("AchievementExcelConfigData.json")]
internal class AchievementData : GameResource
{
[JsonProperty("isDisuse")]
public bool IsDisuse { get; set; }
public bool IsUsed => !IsDisuse;
}
}

View File

@@ -0,0 +1,33 @@
/**
* 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 <https://www.gnu.org/licenses/>.
*
**/
using GrasscutterTools.Game.Props;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
namespace GrasscutterTools.Game.Data.Excels
{
[ResourceType("AvatarExcelConfigData.json")]
internal class AvatarData : GameResource
{
[JsonProperty("qualityType"), JsonConverter(typeof(StringEnumConverter))]
public QualityType QualityType { get; set; }
}
}

View File

@@ -0,0 +1,30 @@
/**
* 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 <https://www.gnu.org/licenses/>.
*
**/
using Newtonsoft.Json;
namespace GrasscutterTools.Game.Data.Excels
{
[ResourceType("DungeonExcelConfigData.json")]
internal class DungeonData : GameResource
{
[JsonProperty("sceneId")]
public int SceneId { get; set; }
}
}

View File

@@ -0,0 +1,36 @@
/**
* 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 <https://www.gnu.org/licenses/>.
*
**/
using Newtonsoft.Json;
namespace GrasscutterTools.Game.Data.Excels
{
[ResourceType("GadgetExcelConfigData.json")]
internal class GadgetData : GameResource
{
[JsonProperty("type")]
public string Type { get; set; }
[JsonProperty("jsonName")]
public string JsonName { get; set; }
[JsonProperty("interactNameTextMapHash")]
public long InteractNameTextMapHash { get; set; }
}
}

View File

@@ -0,0 +1,33 @@
/**
* 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 <https://www.gnu.org/licenses/>.
*
**/
using Newtonsoft.Json;
namespace GrasscutterTools.Game.Data.Excels
{
[ResourceType("GatherExcelConfigData.json")]
internal class GatherData
{
[JsonProperty("gadgetId")]
public int GadgetId { get; set; }
[JsonProperty("itemId")]
public int ItemId { get; set; }
}
}

View File

@@ -0,0 +1,33 @@
/**
* 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 <https://www.gnu.org/licenses/>.
*
**/
using Newtonsoft.Json;
namespace GrasscutterTools.Game.Data.Excels
{
[ResourceType("HomeWorldBgmExcelConfigData.json")]
internal class HomeWorldBgmData : GameResource
{
[JsonProperty("homeBgmId")]
public override int Id { get; set; }
[JsonProperty("bgmNameTextMapHash")]
public long BgmNameTextMapHash { get; set; }
}
}

View File

@@ -0,0 +1,30 @@
/**
* 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 <https://www.gnu.org/licenses/>.
*
**/
using Newtonsoft.Json;
namespace GrasscutterTools.Game.Data.Excels
{
[ResourceType("HomeWorldFurnitureExcelConfigData.json")]
internal class HomeWorldFurnitureData : GameResource
{
[JsonProperty("furnitureGadgetID")]
public int[] FurnitureGadgetId { get; set; }
}
}

View File

@@ -0,0 +1,26 @@
/**
* 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 <https://www.gnu.org/licenses/>.
*
**/
namespace GrasscutterTools.Game.Data.Excels
{
[ResourceType("MainQuestExcelConfigData.json")]
internal class MainQuestData : GameResource
{
}
}

View File

@@ -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 <https://www.gnu.org/licenses/>.
*
**/
using System.Collections.Generic;
using GrasscutterTools.Game.Inventory;
using GrasscutterTools.Game.Props;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
namespace GrasscutterTools.Game.Data.Excels
{
[ResourceType("MaterialExcelConfigData.json")]
internal class MaterialData : GameResource
{
[JsonProperty("itemType"), JsonConverter(typeof(StringEnumConverter))]
public ItemType ItemType { get; set; }
[JsonProperty("materialType"), JsonConverter(typeof(StringEnumConverter))]
public MaterialType MaterialType { get; set; }
[JsonProperty("itemUse")]
public List<ItemUseData> ItemUse { get; set; }
}
}

View File

@@ -0,0 +1,35 @@
/**
* 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 <https://www.gnu.org/licenses/>.
*
**/
using GrasscutterTools.Game.Props;
using Newtonsoft.Json;
namespace GrasscutterTools.Game.Data.Excels
{
[ResourceType("MonsterExcelConfigData.json")]
internal class MonsterData : GameResource
{
[JsonProperty("monsterName")]
public string MonsterName { get; set; }
[JsonProperty("type")]
public MonsterType Type { get; set; }
}
}

View File

@@ -0,0 +1,36 @@
/**
* 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 <https://www.gnu.org/licenses/>.
*
**/
using Newtonsoft.Json;
namespace GrasscutterTools.Game.Data.Excels
{
[ResourceType("QuestExcelConfigData.json")]
internal class QuestData : GameResource
{
[JsonProperty("subId")]
public override int Id { get; set; }
[JsonProperty("mainId")]
public int MainId { get; set; }
[JsonProperty("order")]
public int Order { get; set; }
}
}

View File

@@ -0,0 +1,26 @@
/**
* 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 <https://www.gnu.org/licenses/>.
*
**/
namespace GrasscutterTools.Game.Data.Excels
{
[ResourceType("ReliquaryExcelConfigData.json")]
internal class ReliquaryData : GameResource
{
}
}

View File

@@ -0,0 +1,35 @@
/**
* 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 <https://www.gnu.org/licenses/>.
*
**/
using GrasscutterTools.Game.Props;
using Newtonsoft.Json;
namespace GrasscutterTools.Game.Data.Excels
{
[ResourceType("SceneExcelConfigData.json")]
internal class SceneData : GameResource
{
[JsonProperty("type")]
public SceneType SceneType { get; set; }
[JsonProperty("scriptData")]
public string ScriptData { get; set; }
}
}

View File

@@ -0,0 +1,30 @@
/**
* 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 <https://www.gnu.org/licenses/>.
*
**/
using Newtonsoft.Json;
namespace GrasscutterTools.Game.Data.Excels
{
[ResourceType("WeaponExcelConfigData.json")]
internal class WeaponData : GameResource
{
[JsonProperty("rankLevel")]
public int RankLevel { get; set; }
}
}

View File

@@ -0,0 +1,38 @@
/**
* 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 <https://www.gnu.org/licenses/>.
*
**/
using Newtonsoft.Json;
namespace GrasscutterTools.Game.Data
{
internal abstract class GameResource
{
[JsonProperty("id")]
public virtual int Id { get; set; }
[JsonProperty("nameTextMapHash")]
public long NameTextMapHash { get; set; }
[JsonProperty("titleTextMapHash")]
public long TitleTextMapHash { get; set; }
[JsonProperty("descTextMapHash")]
public long DescTextMapHash { get; set; }
}
}

View File

@@ -0,0 +1,433 @@
/**
* 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 <https://www.gnu.org/licenses/>.
*
**/
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using GrasscutterTools.Game.Data.Excels;
using GrasscutterTools.Game.Inventory;
using GrasscutterTools.Game.Props;
using GrasscutterTools.Utils;
using Newtonsoft.Json;
namespace GrasscutterTools.Game.Data
{
internal class GameResources
{
public Dictionary<int, AchievementData> AchievementData { get; set; }
public Dictionary<int, AvatarData> AvatarData { get; set; }
public Dictionary<int, HomeWorldBgmData> HomeWorldBgmData { get; set; }
public Dictionary<int, DungeonData> DungeonData { get; set; }
public Dictionary<int, GadgetData> GadgetData { get; set; }
public List<GatherData> GatherData { get; set; }
public Dictionary<int, HomeWorldFurnitureData> HomeWorldFurnitureData { get; set; }
public Dictionary<int, MainQuestData> MainQuestData { get; set; }
public Dictionary<int, QuestData> QuestData { get; set; }
public Dictionary<int, MaterialData> MaterialData { get; set; }
public Dictionary<int, MonsterData> MonsterData { get; set; }
public Dictionary<int, ReliquaryData> ReliquaryData { get; set; }
public Dictionary<int, SceneData> SceneData { get; set; }
public Dictionary<int, WeaponData> WeaponData { get; set; }
public TextMapData TextMapData { get; set; }
public GameResources(string resourcesDirPath, TextMapData textMapData)
{
TextMapData = textMapData;
var properties = typeof(GameResources).GetProperties();
foreach (var property in properties)
{
var type = property.PropertyType;
if (!type.IsGenericType) continue;
var genericArguments = type.GetGenericArguments();
ResourceTypeAttribute attribute = null;
foreach (var it in genericArguments)
{
var attributes = it.GetCustomAttributes(typeof(ResourceTypeAttribute), true);
if (attributes.Length == 0) continue;
attribute = (ResourceTypeAttribute)attributes[0];
type = it;
}
if (attribute == null) continue;
var dataFile = Path.Combine(resourcesDirPath, "ExcelBinOutput", attribute.Name);
var data = LoadDataFile(type, dataFile);
property.SetValue(this, data, null);
}
var illegalWeaponIds = new SparseSet(
"10000-10008, 11411, 11506-11508, 12505, 12506, 12508, 12509," +
"13503, 13506, 14411, 14503, 14508, 15504-15506, 20001");
foreach (var id in WeaponData.Keys.Where(id => illegalWeaponIds.Contains(id)).ToList())
WeaponData.Remove(id);
var illegalRelicIds = new SparseSet(
"20002, 20004, 23300-24825"
);
//var illegalRelicIds = new SparseSet(
// "20001, 23300-23340, 23383-23385, 78310-78554, 99310-99554"
//);
foreach (var id in ReliquaryData.Keys.Where(id => illegalRelicIds.Contains(id)).ToList())
ReliquaryData.Remove(id);
var illegalItemIds = new SparseSet(
"3004-3008, 3018-3022"
);
//var illegalItemIds = new SparseSet(
// "3004-3008, 3018-3022, 100086, 100087, 100100-101000, 101106-101110, 101306, 101500-104000," +
// "105001, 105004, 106000-107000, 107011, 108000, 109000-110000," +
// "115000-130000, 200200-200899, 220050, 220054"
//);
foreach (var id in MaterialData.Keys.Where(id => illegalItemIds.Contains(id)).ToList())
MaterialData.Remove(id);
foreach (var id in AvatarData.Keys.Where(id => id < 10000002 || id >= 11000000).ToList())
AvatarData.Remove(id);
}
private static object LoadDataFile(Type type, string path)
{
var list = (IList)JsonConvert.DeserializeObject(File.ReadAllText(path), typeof(List<>).MakeGenericType(type));
if (list == null) return null;
if (!type.IsSubclassOf(typeof(GameResource))) return list;
var dicType = typeof(Dictionary<,>).MakeGenericType(typeof(int), type);
var dic = (IDictionary)Activator.CreateInstance(dicType);
foreach (GameResource gameResource in list)
dic.Add(gameResource.Id, gameResource);
return dic;
}
private Dictionary<string, string> Languages = new Dictionary<string, string>
{
["zh-cn"] = "TextMapCHS",
["zh-tw"] = "TextMapCHT",
["en-us"] = "TextMapEN",
["ru-ru"] = "TextMapRU",
};
public void ConvertResources(string projectResourcesDir)
{
var currentCultureInfo = Thread.CurrentThread.CurrentUICulture;
try
{
var sb = new StringBuilder(MaterialData.Count * 24);
foreach (var language in Languages)
{
var dir = Path.Combine(projectResourcesDir, language.Key);
TextMapData.LoadTextMap(TextMapData.TextMapFilePaths[Array.IndexOf(TextMapData.TextMapFiles, language.Value)]);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(language.Key);
GameData.LoadResources();
#region Achievement
// Achievement
File.WriteAllLines(
Path.Combine(dir, "Achievement.txt"),
AchievementData.Values.Where(it => it.IsUsed)
.Select(it => $"{it.Id}:{TextMapData.GetText(it.TitleTextMapHash.ToString())} - {TextMapData.GetText(it.DescTextMapHash.ToString())}"),
Encoding.UTF8);
#endregion Achievement
#region Artifact
// Artifact
File.WriteAllLines(
Path.Combine(dir, "Artifact.txt"),
ReliquaryData.Values.OrderBy(it => it.Id).Select(it => $"{it.Id}:{TextMapData.GetText(it.NameTextMapHash.ToString())}"),
Encoding.UTF8);
#endregion Artifact
#region Avatar
// Avatar
File.WriteAllLines(
Path.Combine(dir, "Avatar.txt"),
MaterialData.Values
.Where(it => it.MaterialType == MaterialType.MATERIAL_AVATAR)
.Select(it => $"{it.Id}:{TextMapData.GetText(it.NameTextMapHash.ToString())}"),
Encoding.UTF8);
#endregion Avatar
#region Dungeon
// Dungeon
File.WriteAllLines(
Path.Combine(dir, "Dungeon.txt"),
DungeonData.Values.Select(it => $"{it.Id}:{TextMapData.GetText(it.NameTextMapHash.ToString())}"),
Encoding.UTF8);
#endregion Dungeon
#region Gadget
// Gadget
sb.Clear();
var gatherMap = new Dictionary<int, int>(GatherData.Count);
foreach (var it in GatherData.Where(it => !gatherMap.ContainsKey(it.GadgetId)))
gatherMap.Add(it.GadgetId, it.ItemId);
var furnitureMap = new Dictionary<int, long>(HomeWorldFurnitureData.Count);
foreach (var it in HomeWorldFurnitureData.Values.Where(it => it.FurnitureGadgetId != null))
foreach (var gadgetId in it.FurnitureGadgetId.Where(id => id > 0 && !furnitureMap.ContainsKey(id)))
furnitureMap.Add(gadgetId, it.NameTextMapHash);
var oldFirst = language.Key.StartsWith("zh");
foreach (var gadgetTypes in GadgetData.Values.OrderBy(it => it.Id).GroupBy(it => it.Type))
{
sb.Append("// ").AppendLine(GadgetType.ToTranslatedString(gadgetTypes.Key, language.Key));
foreach (var it in gadgetTypes)
{
var name = oldFirst ? GameData.Gadgets[it.Id] : ItemMap.EmptyName;
if (name == ItemMap.EmptyName)
{
if (!TextMapData.TryGetText(it.NameTextMapHash.ToString(), out name)
&& !TextMapData.TryGetText(it.InteractNameTextMapHash.ToString(), out name))
{
if (gatherMap.TryGetValue(it.Id, out var itemId)
&& MaterialData.TryGetValue(itemId, out var item))
{
name = TextMapData.GetText(item.NameTextMapHash.ToString());
}
else if (furnitureMap.TryGetValue(it.Id, out var hash))
{
name = TextMapData.GetText(hash.ToString());
}
else if (!string.IsNullOrEmpty(it.JsonName))
{
name = it.JsonName;
}
else if (!oldFirst)
{
var temp = GameData.Gadgets[it.Id];
if (temp != ItemMap.EmptyName)
name = temp;
}
}
}
sb.AppendFormat("{0}:{1}", it.Id, name).AppendLine();
}
sb.AppendLine();
}
// 旧的数据
//var old = GameData.Gadgets.AllIds.Where(it => !GadgetData.ContainsKey(it));
//if (old.Any())
//{
// sb.AppendLine("// Old lines");
// foreach (var it in old)
// sb.AppendFormat("{0}:{1}", it, GameData.Gadgets[it]).AppendLine();
//}
File.WriteAllText(
Path.Combine(dir, "Gadget.txt"),
sb.ToString(),
Encoding.UTF8);
#endregion Gadget
#region Item
// Item
sb.Clear();
foreach (var itemTypes in MaterialData.Values.GroupBy(it => it.ItemType))
{
sb.Append("// ").AppendLine(itemTypes.Key.ToTranslatedString(language.Key));
if (itemTypes.Key == ItemType.ITEM_MATERIAL)
{
foreach (var m in itemTypes
.GroupBy(it => it.MaterialType)
.Where(it => it.Key != MaterialType.MATERIAL_NONE)
.OrderBy(it => it.Average(m => m.Id)))
{
sb.Append("// ").AppendLine(m.Key.ToTranslatedString(language.Key));
if (m.Key == MaterialType.MATERIAL_BGM)
{
foreach (var materialData in m)
sb.AppendFormat("{0}:{1} - {2}",
materialData.Id,
TextMapData.GetText(materialData.NameTextMapHash.ToString()),
TextMapData.GetText(HomeWorldBgmData[int.Parse(materialData.ItemUse[0].UseParam[0])].BgmNameTextMapHash.ToString())
).AppendLine();
}
else
{
foreach (var materialData in m)
sb.AppendFormat("{0}:{1}", materialData.Id, TextMapData.GetText(materialData.NameTextMapHash.ToString())).AppendLine();
}
sb.AppendLine();
}
}
else
{
foreach (var materialData in itemTypes)
sb.AppendFormat("{0}:{1}", materialData.Id, TextMapData.GetText(materialData.NameTextMapHash.ToString())).AppendLine();
sb.AppendLine();
}
}
sb.Append("// ").AppendLine(ItemType.ITEM_FURNITURE.ToTranslatedString(language.Key));
foreach (var value in HomeWorldFurnitureData.Values)
sb.AppendFormat("{0}:{1}", value.Id, TextMapData.GetText(value.NameTextMapHash.ToString())).AppendLine();
File.WriteAllText(Path.Combine(dir, "Item.txt"), sb.ToString(), Encoding.UTF8);
#endregion Item
#region Monsters
// Monsters
sb.Clear();
foreach (var monsterType in MonsterData.Values.OrderBy(it => it.Id)
.GroupBy(it => it.Type)
.OrderBy(it => it.Key))
{
sb.Append("// ").AppendLine(monsterType.Key.ToTranslatedString(language.Key));
foreach (var monsterData in monsterType)
{
if (TextMapData.TryGetText(monsterData.NameTextMapHash.ToString(), out var text))
{
sb.AppendFormat("{0}:{1}", monsterData.Id, text);
}
else
{
var name = GameData.Monsters[monsterData.Id];
if (name == ItemMap.EmptyName)
sb.AppendFormat("{0}:{1} - {2}", monsterData.Id, monsterData.MonsterName, text);
else
sb.AppendFormat("{0}:{1}", monsterData.Id, name);
}
sb.AppendLine();
}
sb.AppendLine();
}
File.WriteAllText(
Path.Combine(dir, "Monsters.txt"),
sb.ToString(),
Encoding.UTF8);
#endregion Monsters
#region Quest
// Quest
sb.Clear();
foreach (var it in QuestData.Values.OrderBy(it => it.Id))
{
var name = GameData.Quests[it.Id];
if (name == ItemMap.EmptyName)
{
sb.AppendFormat("{0}:{1} - {2}",
it.Id,
TextMapData.GetText(MainQuestData[it.MainId].TitleTextMapHash.ToString()),
TextMapData.GetText(it.DescTextMapHash.ToString()));
}
else
{
sb.AppendFormat("{0}:{1}", it.Id, name);
}
sb.AppendLine();
}
File.WriteAllText(
Path.Combine(dir, "Quest.txt"),
sb.ToString(),
Encoding.UTF8);
#endregion Quest
#region Scene
// Scene
sb.Clear();
foreach (var it in DungeonData.Values)
{
var scene = SceneData[it.SceneId];
scene.NameTextMapHash = it.NameTextMapHash;
}
foreach (var it in SceneData.Values.OrderBy(it => it.Id))
{
if (it.NameTextMapHash == 0 || !TextMapData.TryGetText(it.NameTextMapHash.ToString(), out var name))
{
name = GameData.Scenes[it.Id];
if (name == ItemMap.EmptyName)
name = it.ScriptData;
}
sb.AppendLine($"{it.Id}:{name}");
}
File.WriteAllText(
Path.Combine(dir, "Scene.txt"),
sb.ToString(),
Encoding.UTF8);
#endregion Scene
#region Weapon
// Weapon
File.WriteAllLines(
Path.Combine(dir, "Weapon.txt"),
WeaponData.Values.Select(it => $"{it.Id}:{TextMapData.GetText(it.NameTextMapHash.ToString())}"),
Encoding.UTF8);
#endregion Weapon
}
File.WriteAllLines(
Path.Combine(projectResourcesDir, "AvatarColor.txt"),
AvatarData.Values.Select(it => $"{it.Id % 1000 + 1000}:{(int)it.QualityType}"),
Encoding.UTF8);
File.WriteAllLines(
Path.Combine(projectResourcesDir, "WeaponColor.txt"),
WeaponData.Values.Select(it => $"{it.Id}:{(it.RankLevel >= 5 ? "yellow" : it.RankLevel >= 4 ? "purple" : "blue")}"),
Encoding.UTF8);
}
finally
{
Thread.CurrentThread.CurrentUICulture = currentCultureInfo;
}
}
}
}

View File

@@ -0,0 +1,34 @@
/**
* 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 <https://www.gnu.org/licenses/>.
*
**/
using System;
namespace GrasscutterTools.Game.Data
{
[AttributeUsage(AttributeTargets.Class, Inherited = false)]
internal class ResourceTypeAttribute : Attribute
{
public string Name { get; set; }
public ResourceTypeAttribute(string name)
{
Name = name;
}
}
}

View File

@@ -28,7 +28,7 @@ namespace GrasscutterTools.Game.Gacha
/// 使用这个只需替换掉你原来的的data/banner.json文件
/// 然后重启服务器和客户端,即可享受全卡池抽卡,卡池的选择方式是点击左右箭头进行切换
/// </summary>
public class GachaBanner
internal class GachaBanner
{
/// <summary>
/// 添加卡池请从400开始增加id数值进行添加这个id需要每个池子不一样

View File

@@ -25,7 +25,7 @@ namespace GrasscutterTools.Game.Gacha
/// <summary>
/// https://github.com/Grasscutters/Grasscutter/pull/639
/// </summary>
public class GachaBanner2
internal class GachaBanner2
{
/// <summary>
/// 添加卡池请从400开始增加id数值进行添加这个id需要每个池子不一样

View File

@@ -28,7 +28,7 @@ namespace GrasscutterTools.Game.Gacha
/// <summary>
/// https://github.com/Grasscutters/Grasscutter/pull/639
/// </summary>
public class GachaBanner3
internal class GachaBanner3
{
/// <summary>
/// 备注

View File

@@ -22,7 +22,7 @@ using System.Text;
namespace GrasscutterTools.Game
{
public class GameCommand
internal class GameCommand
{
public GameCommand(string name, string command)
{

View File

@@ -0,0 +1,48 @@

// ReSharper disable InconsistentNaming
using System.Collections.Generic;
namespace GrasscutterTools.Game.Inventory
{
internal enum ItemType
{
ITEM_NONE = 0,
ITEM_VIRTUAL = 1,
ITEM_MATERIAL = 2,
ITEM_RELIQUARY = 3,
ITEM_WEAPON = 4,
ITEM_DISPLAY = 5,
ITEM_FURNITURE = 6,
}
internal static class ItemTypeExtension
{
private static readonly Dictionary<ItemType, string> TextMapCHS = new Dictionary<ItemType, string>
{
[ItemType.ITEM_NONE] = "未分类",
[ItemType.ITEM_VIRTUAL] = "虚拟道具",
[ItemType.ITEM_MATERIAL] = "材料",
[ItemType.ITEM_RELIQUARY] = "圣遗物",
[ItemType.ITEM_WEAPON] = "物品",
[ItemType.ITEM_DISPLAY] = "任务",
[ItemType.ITEM_FURNITURE] = "尘歌壶摆设",
};
private static readonly Dictionary<ItemType, string> TextMapEN = new Dictionary<ItemType, string>
{
[ItemType.ITEM_NONE] = "None",
[ItemType.ITEM_VIRTUAL] = "Virtual",
[ItemType.ITEM_MATERIAL] = "Material",
[ItemType.ITEM_RELIQUARY] = "Reliquary",
[ItemType.ITEM_WEAPON] = "Weapon",
[ItemType.ITEM_DISPLAY] = "Display",
[ItemType.ITEM_FURNITURE] = "Furniture",
};
public static string ToTranslatedString(this ItemType materialType, string language)
{
return language.StartsWith("zh") ? TextMapCHS[materialType] : TextMapEN[materialType];
}
}
}

View File

@@ -0,0 +1,175 @@

// ReSharper disable InconsistentNaming
// ReSharper disable IdentifierTypo
using System;
using System.Collections.Generic;
namespace GrasscutterTools.Game.Inventory
{
/// <summary>
/// 材料类型
/// </summary>
internal enum MaterialType
{
MATERIAL_NONE = 0,
MATERIAL_FOOD = 1,
MATERIAL_QUEST = 2,
MATERIAL_EXCHANGE = 4,
MATERIAL_CONSUME = 5,
MATERIAL_EXP_FRUIT = 6,
MATERIAL_AVATAR = 7,
MATERIAL_ADSORBATE = 8,
MATERIAL_CRICKET = 9,
MATERIAL_ELEM_CRYSTAL = 10,
MATERIAL_WEAPON_EXP_STONE = 11,
MATERIAL_CHEST = 12,
MATERIAL_RELIQUARY_MATERIAL = 13,
MATERIAL_AVATAR_MATERIAL = 14,
MATERIAL_NOTICE_ADD_HP = 15,
MATERIAL_SEA_LAMP = 16,
MATERIAL_SELECTABLE_CHEST = 17,
MATERIAL_FLYCLOAK = 18,
MATERIAL_NAMECARD = 19,
MATERIAL_TALENT = 20,
MATERIAL_WIDGET = 21,
MATERIAL_CHEST_BATCH_USE = 22,
MATERIAL_FAKE_ABSORBATE = 23,
MATERIAL_CONSUME_BATCH_USE = 24,
MATERIAL_WOOD = 25,
MATERIAL_FURNITURE_FORMULA = 27,
MATERIAL_CHANNELLER_SLAB_BUFF = 28,
MATERIAL_FURNITURE_SUITE_FORMULA = 29,
MATERIAL_COSTUME = 30,
MATERIAL_HOME_SEED = 31,
MATERIAL_FISH_BAIT = 32,
MATERIAL_FISH_ROD = 33,
MATERIAL_SUMO_BUFF = 34, // sumo 活动道具never appear
MATERIAL_FIREWORKS = 35,
MATERIAL_BGM = 36,
MATERIAL_SPICE_FOOD = 37,
MATERIAL_ACTIVITY_ROBOT = 38,
MATERIAL_ACTIVITY_GEAR = 39,
MATERIAL_ACTIVITY_JIGSAW = 40,
MATERIAL_ARANARA = 41,
MATERIAL_GCG_CARD = 42,
MATERIAL_GCG_CARD_FACE = 43, // 影幻卡面
MATERIAL_GCG_CARD_BACK = 44,
MATERIAL_GCG_FIELD = 45,
MATERIAL_DESHRET_MANUAL = 46,
MATERIAL_RENAME_ITEM = 47,
MATERIAL_GCG_EXCHANGE_ITEM = 48,
MATERIAL_QUEST_EVENT_BOOK = 49,
}
internal static class MaterialTypeExtension
{
private static readonly Dictionary<MaterialType, string> TextMapCHS = new Dictionary<MaterialType, string>
{
[MaterialType.MATERIAL_NONE] = "空",
[MaterialType.MATERIAL_FOOD] = "食物",
[MaterialType.MATERIAL_QUEST] = "任务",
[MaterialType.MATERIAL_EXCHANGE] = "收集物",
[MaterialType.MATERIAL_CONSUME] = "消耗品",
[MaterialType.MATERIAL_EXP_FRUIT] = "经验书",
[MaterialType.MATERIAL_AVATAR] = "角色",
[MaterialType.MATERIAL_ADSORBATE] = "能量球",
[MaterialType.MATERIAL_CRICKET] = "蛐蛐",
[MaterialType.MATERIAL_ELEM_CRYSTAL] = "神瞳",
[MaterialType.MATERIAL_WEAPON_EXP_STONE] = "武器锻造矿",
[MaterialType.MATERIAL_CHEST] = "宝箱",
[MaterialType.MATERIAL_RELIQUARY_MATERIAL] = "圣遗物经验瓶",
[MaterialType.MATERIAL_AVATAR_MATERIAL] = "角色天赋材料",
[MaterialType.MATERIAL_NOTICE_ADD_HP] = "回血食物",
[MaterialType.MATERIAL_SEA_LAMP] = "海灯节",
[MaterialType.MATERIAL_SELECTABLE_CHEST] = "自选礼包",
[MaterialType.MATERIAL_FLYCLOAK] = "风之翼",
[MaterialType.MATERIAL_NAMECARD] = "名片卡",
[MaterialType.MATERIAL_TALENT] = "天赋材料",
[MaterialType.MATERIAL_WIDGET] = "装饰物",
[MaterialType.MATERIAL_CHEST_BATCH_USE] = "礼包",
[MaterialType.MATERIAL_FAKE_ABSORBATE] = "MATERIAL_FAKE_ABSORBATE",
[MaterialType.MATERIAL_CONSUME_BATCH_USE] = "树脂",
[MaterialType.MATERIAL_WOOD] = "树木",
[MaterialType.MATERIAL_FURNITURE_FORMULA] = "尘歌壶室内摆设",
[MaterialType.MATERIAL_CHANNELLER_SLAB_BUFF] = "增益Buff",
[MaterialType.MATERIAL_FURNITURE_SUITE_FORMULA] = "尘歌壶摆设套装",
[MaterialType.MATERIAL_COSTUME] = "皮肤",
[MaterialType.MATERIAL_HOME_SEED] = "种子",
[MaterialType.MATERIAL_FISH_BAIT] = "鱼饵",
[MaterialType.MATERIAL_FISH_ROD] = "鱼竿",
[MaterialType.MATERIAL_SUMO_BUFF] = "MATERIAL_SUMO_BUFF",
[MaterialType.MATERIAL_FIREWORKS] = "烟花",
[MaterialType.MATERIAL_BGM] = "旋曜玉帛",
[MaterialType.MATERIAL_SPICE_FOOD] = "香气四溢的食物",
[MaterialType.MATERIAL_ACTIVITY_ROBOT] = "活动-兑换券",
[MaterialType.MATERIAL_ACTIVITY_GEAR] = "活动-齿轮",
[MaterialType.MATERIAL_ACTIVITY_JIGSAW] = "活动-部件",
[MaterialType.MATERIAL_ARANARA] = "兰纳罗",
[MaterialType.MATERIAL_GCG_CARD] = "七圣召唤-卡片",
[MaterialType.MATERIAL_GCG_CARD_FACE] = "七圣召唤-卡片-正面",
[MaterialType.MATERIAL_GCG_CARD_BACK] = "七圣召唤-卡片-背面",
[MaterialType.MATERIAL_GCG_FIELD] = "七圣召唤-卡片-场地",
[MaterialType.MATERIAL_DESHRET_MANUAL] = "沙漠书",
[MaterialType.MATERIAL_RENAME_ITEM] = "改名卡",
[MaterialType.MATERIAL_GCG_EXCHANGE_ITEM] = "七圣召唤-特殊卡",
[MaterialType.MATERIAL_QUEST_EVENT_BOOK] = "案件记录册",
};
private static readonly Dictionary<MaterialType, string> TextMapEN = new Dictionary<MaterialType, string>
{
[MaterialType.MATERIAL_NONE] = "None",
[MaterialType.MATERIAL_FOOD] = "Food",
[MaterialType.MATERIAL_QUEST] = "Quest",
[MaterialType.MATERIAL_EXCHANGE] = "Exchange",
[MaterialType.MATERIAL_CONSUME] = "Consume",
[MaterialType.MATERIAL_EXP_FRUIT] = "Exp_fruit",
[MaterialType.MATERIAL_AVATAR] = "Avatar",
[MaterialType.MATERIAL_ADSORBATE] = "Adsorbate",
[MaterialType.MATERIAL_CRICKET] = "Cricket",
[MaterialType.MATERIAL_ELEM_CRYSTAL] = "Elem_crystal",
[MaterialType.MATERIAL_WEAPON_EXP_STONE] = "Weapon_exp_stone",
[MaterialType.MATERIAL_CHEST] = "Chest",
[MaterialType.MATERIAL_RELIQUARY_MATERIAL] = "Reliquary_material",
[MaterialType.MATERIAL_AVATAR_MATERIAL] = "Avatar_material",
[MaterialType.MATERIAL_NOTICE_ADD_HP] = "Notice_add_hp",
[MaterialType.MATERIAL_SEA_LAMP] = "Sea_lamp",
[MaterialType.MATERIAL_SELECTABLE_CHEST] = "Selectable_chest",
[MaterialType.MATERIAL_FLYCLOAK] = "Flycloak",
[MaterialType.MATERIAL_NAMECARD] = "Namecard",
[MaterialType.MATERIAL_TALENT] = "Talent",
[MaterialType.MATERIAL_WIDGET] = "Widget",
[MaterialType.MATERIAL_CHEST_BATCH_USE] = "Chest_batch_use",
[MaterialType.MATERIAL_FAKE_ABSORBATE] = "Fake_absorbate",
[MaterialType.MATERIAL_CONSUME_BATCH_USE] = "Consume_batch_use",
[MaterialType.MATERIAL_WOOD] = "Wood",
[MaterialType.MATERIAL_FURNITURE_FORMULA] = "Furniture_formula",
[MaterialType.MATERIAL_CHANNELLER_SLAB_BUFF] = "Channeller_slab_buff",
[MaterialType.MATERIAL_FURNITURE_SUITE_FORMULA] = "Furniture_suite_formula",
[MaterialType.MATERIAL_COSTUME] = "Costume",
[MaterialType.MATERIAL_HOME_SEED] = "Home_seed",
[MaterialType.MATERIAL_FISH_BAIT] = "Fish_bait",
[MaterialType.MATERIAL_FISH_ROD] = "Fish_rod",
[MaterialType.MATERIAL_SUMO_BUFF] = "Sumo_buff",
[MaterialType.MATERIAL_FIREWORKS] = "Fireworks",
[MaterialType.MATERIAL_BGM] = "Bgm",
[MaterialType.MATERIAL_SPICE_FOOD] = "Spice_food",
[MaterialType.MATERIAL_ACTIVITY_ROBOT] = "Activity_robot",
[MaterialType.MATERIAL_ACTIVITY_GEAR] = "Activity_gear",
[MaterialType.MATERIAL_ACTIVITY_JIGSAW] = "Activity_jigsaw",
[MaterialType.MATERIAL_ARANARA] = "Aranara",
[MaterialType.MATERIAL_GCG_CARD] = "Gcg_card",
[MaterialType.MATERIAL_GCG_CARD_FACE] = "Gcg_card_face",
[MaterialType.MATERIAL_GCG_CARD_BACK] = "Gcg_card_back",
[MaterialType.MATERIAL_GCG_FIELD] = "Gcg_field",
[MaterialType.MATERIAL_DESHRET_MANUAL] = "Deshret_manual",
[MaterialType.MATERIAL_RENAME_ITEM] = "Rename_item",
[MaterialType.MATERIAL_GCG_EXCHANGE_ITEM] = "Gcg_exchange_item",
[MaterialType.MATERIAL_QUEST_EVENT_BOOK] = "Quest_event_book",
};
public static string ToTranslatedString(this MaterialType materialType, string language)
{
return language.StartsWith("zh") ? TextMapCHS[materialType] : TextMapEN[materialType];
}
}
}

View File

@@ -22,7 +22,7 @@ using System.Collections.Generic;
namespace GrasscutterTools.Game
{
public class ItemMap
internal class ItemMap
{
public ItemMap(string idNamePairs)
{

View File

@@ -25,7 +25,7 @@ namespace GrasscutterTools.Game
/// <summary>
/// ID映射组Key为分类双斜杠构造
/// </summary>
public class ItemMapGroup : Dictionary<string, ItemMap>
internal class ItemMapGroup : Dictionary<string, ItemMap>
{
public ItemMapGroup(string idNamePairs)
{
@@ -64,6 +64,11 @@ namespace GrasscutterTools.Game
/// </summary>
public IEnumerable<string> AllLines => Values.SelectMany(it => it.Lines);
/// <summary>
/// 获取所有ID
/// </summary>
public IEnumerable<int> AllIds => Values.SelectMany(it => it.Ids);
private string[] lines;
public string[] Lines => lines ?? (lines = AllLines.ToArray());

View File

@@ -27,7 +27,7 @@ namespace GrasscutterTools.Game.Mail
/// <summary>
/// 邮件
/// </summary>
public class Mail
internal class Mail
{
/// <summary>
/// 发件人

View File

@@ -0,0 +1,92 @@
/**
* 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 <https://www.gnu.org/licenses/>.
*
**/
using System.Collections.Generic;
namespace GrasscutterTools.Game.Props
{
internal static class GadgetType
{
private static readonly Dictionary<string, string> TextMapCHS = new Dictionary<string, string>
{
["Gear"] = "机关装置",
["Field"] = "领域",
["Bullet"] = "技能/飞弹",
["Gadget"] = "Gadget",
["AirflowField"] = "气流领域",
["SpeedupField"] = "加速领域",
["GatherObject"] = "采集物品",
["Platform"] = "平台",
["AmberWind"] = "风琥珀",
["Vehicle"] = "载具",
["MonsterEquip"] = "怪物装备",
["Equip"] = "装备",
["SubEquip"] = "副装备",
["FishRod"] = "钓鱼竿",
["Grass"] = "草",
["Water"] = "水",
["Tree"] = "树",
["Bush"] = "灌木",
["Lightning"] = "闪电",
["CustomTile"] = "自定义贴图",
["TransPointFirst"] = "传送点1",
["TransPointSecond"] = "传送点2",
["Chest"] = "宝箱",
["GeneralRewardPoint"] = "通用奖励点",
["OfferingGadget"] = "祭品Gadget",
["Worktop"] = "工作台",
["CustomGadget"] = "自定义Gadget",
["BlackMud"] = "黑色泥浆",
["DeshretObeliskGadget"] = "赤王方尖碑",
["JourneyGearOperatorGadget"] = "旅途装备操作Gadget",
["QuestGadget"] = "任务Gadget",
["RoguelikeOperatorGadget"] = "肉鸽 操作台",
["NightCrowGadget"] = "幽邃鸦眼",
["MpPlayRewardPoint"] = "多人游戏奖励点",
["CurveMoveGadget"] = "曲线移动Gadget",
["RewardStatue"] = "地城奖励树",
["RewardPoint"] = "循环地城奖励点",
["Foundation"] = "底座",
["Projector"] = "投影仪",
["Screen"] = "屏幕",
["CoinCollectLevelGadget"] = "金币收集等级Gadget",
["EchoShell"] = "回声海螺",
["UgcSpecialGadget"] = "UGC特殊Gadget",
["UgcTowerLevelUpGadget"] = "UGC塔升级Gadget",
["GatherPoint"] = "采集物挂接点",
["MiracleRing"] = "奇迹之环",
["EnvAnimal"] = "环境动物",
["EnergyBall"] = "能量球",
["SealGadget"] = "封印Gadget",
["ViewPoint"] = "观景点",
["FishPool"] = "钓鱼点",
["ElemCrystal"] = "元素水晶",
["Deprecated"] = "弃用",
["WindSeed"] = "风种子",
["UIInteractGadget"] = "界面交互Gadget",
["Camera"] = "摄像机",
};
public static string ToTranslatedString(string gadgetType, string language)
{
if (string.IsNullOrEmpty(gadgetType)) gadgetType = "Deprecated";
return language.StartsWith("zh") ? TextMapCHS[gadgetType] : gadgetType;
}
}
}

View File

@@ -0,0 +1,29 @@
/**
* 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 <https://www.gnu.org/licenses/>.
*
**/
using Newtonsoft.Json;
namespace GrasscutterTools.Game.Props
{
internal class ItemUseData
{
[JsonProperty("useParam")]
public string[] UseParam { get; set; }
}
}

View File

@@ -0,0 +1,69 @@
/**
* 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 <https://www.gnu.org/licenses/>.
*
**/
// ReSharper disable InconsistentNaming
using System.Collections.Generic;
namespace GrasscutterTools.Game.Props
{
/// <summary>
/// 怪物种类
/// </summary>
internal enum MonsterType
{
MONSTER_NONE = 0,
MONSTER_ORDINARY = 1,
MONSTER_BOSS = 2,
MONSTER_ENV_ANIMAL = 3,
MONSTER_LITTLE_MONSTER = 4,
MONSTER_FISH = 5,
MONSTER_PARTNER = 6,
}
internal static class ItemTypeExtension
{
private static readonly Dictionary<MonsterType, string> TextMapCHS = new Dictionary<MonsterType, string>
{
[MonsterType.MONSTER_NONE] = "未分类",
[MonsterType.MONSTER_ORDINARY] = "普通怪物",
[MonsterType.MONSTER_BOSS] = "BOSS",
[MonsterType.MONSTER_ENV_ANIMAL] = "动物",
[MonsterType.MONSTER_LITTLE_MONSTER] = "小怪",
[MonsterType.MONSTER_FISH] = "鱼",
[MonsterType.MONSTER_PARTNER] = "友军",
};
private static readonly Dictionary<MonsterType, string> TextMapEN = new Dictionary<MonsterType, string>
{
[MonsterType.MONSTER_NONE] = "None",
[MonsterType.MONSTER_ORDINARY] = "Ordinary",
[MonsterType.MONSTER_BOSS] = "Boss",
[MonsterType.MONSTER_ENV_ANIMAL] = "Env_animal",
[MonsterType.MONSTER_LITTLE_MONSTER] = "Little_monster",
[MonsterType.MONSTER_FISH] = "Fish",
[MonsterType.MONSTER_PARTNER] = "Partner",
};
public static string ToTranslatedString(this MonsterType materialType, string language)
{
return language.StartsWith("zh") ? TextMapCHS[materialType] : TextMapEN[materialType];
}
}
}

View File

@@ -0,0 +1,62 @@
/**
* 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 <https://www.gnu.org/licenses/>.
*
**/
// ReSharper disable InconsistentNaming
namespace GrasscutterTools.Game.Props
{
internal enum QualityType
{
/// <summary>
/// 无
/// </summary>
QUALITY_NONE = 0,
/// <summary>
/// 一星
/// </summary>
QUALITY_WHITE = 1,
/// <summary>
/// 二星
/// </summary>
QUALITY_GREEN = 2,
/// <summary>
/// 三星
/// </summary>
QUALITY_BLUE = 3,
/// <summary>
/// 四星
/// </summary>
QUALITY_PURPLE = 4,
/// <summary>
/// 五星
/// </summary>
QUALITY_ORANGE = 5,
/// <summary>
/// 限定五星
/// </summary>
//QUALITY_ORANGE_SP = 105,
QUALITY_ORANGE_SP = 5,
}
}

View File

@@ -0,0 +1,34 @@
/**
* 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 <https://www.gnu.org/licenses/>.
*
**/
// ReSharper disable InconsistentNaming
namespace GrasscutterTools.Game.Props
{
public enum SceneType
{
SCENE_NONE = 0,
SCENE_WORLD = 1,
SCENE_DUNGEON = 2,
SCENE_ROOM = 3,
SCENE_HOME_WORLD = 4,
SCENE_HOME_ROOM = 5,
SCENE_ACTIVITY = 6,
}
}

View File

@@ -25,7 +25,7 @@ using Newtonsoft.Json.Converters;
namespace GrasscutterTools.Game.Shop
{
public class ShopGoodsData
internal class ShopGoodsData
{
[JsonProperty("goodsId")]
public int GoodsId { get; set; }

View File

@@ -26,7 +26,7 @@ using Newtonsoft.Json.Converters;
namespace GrasscutterTools.Game.Shop
{
public class ShopInfo
internal class ShopInfo
{
public ShopInfo()
{

View File

@@ -23,7 +23,7 @@ using Newtonsoft.Json;
namespace GrasscutterTools.Game.Shop
{
public class ShopTable
internal class ShopTable
{
[JsonProperty("shopId")]
public int ShopType { get; set; }

View File

@@ -26,7 +26,7 @@ using Newtonsoft.Json;
namespace GrasscutterTools.Game
{
public class TextMapData
internal class TextMapData
{
public TextMapData(string resourcesDirPath)
{
@@ -44,6 +44,8 @@ namespace GrasscutterTools.Game
private void LoadManualTextMap(string manualTextMapPath)
{
if (!File.Exists(manualTextMapPath)) return;
using (var fs = File.OpenRead(manualTextMapPath))
using (var sr = new StreamReader(fs))
using (var reader = new JsonTextReader(sr))
@@ -86,11 +88,30 @@ namespace GrasscutterTools.Game
}
}
public bool Contains(string textMapPath) => TextMap.ContainsKey(textMapPath) || DefaultTextMap.ContainsKey(textMapPath);
public string GetText(string textMapHash)
{
return TextMap.TryGetValue(textMapHash, out var text) ? text
: DefaultTextMap.TryGetValue(textMapHash, out text) ? text
: "???";
: DefaultTextMap.TryGetValue(textMapHash, out text) ? "[CHS] - " + text
: "[N/A] " + textMapHash;
}
public bool TryGetText(string textMapHash, out string text)
{
if (TextMap.TryGetValue(textMapHash, out text))
{
return true;
}
if (DefaultTextMap.TryGetValue(textMapHash, out text))
{
text = "[CHS] - " + text;
return true;
}
text = "[N/A] " + textMapHash;
return false;
}
}
}

View File

@@ -139,6 +139,22 @@
<Compile Include="Game\Activity\NewActivityItem.cs" />
<Compile Include="Game\CommandVersion.cs" />
<Compile Include="Game\CutScene\CutSceneItem.cs" />
<Compile Include="Game\Data\Excels\AvatarData.cs" />
<Compile Include="Game\Data\Excels\AchievementData.cs" />
<Compile Include="Game\Data\Excels\DungeonData.cs" />
<Compile Include="Game\Data\Excels\GadgetData.cs" />
<Compile Include="Game\Data\Excels\GatherData.cs" />
<Compile Include="Game\Data\Excels\HomeWorldBgmData.cs" />
<Compile Include="Game\Data\Excels\HomeWorldFurnitureData.cs" />
<Compile Include="Game\Data\Excels\MaterialData.cs" />
<Compile Include="Game\Data\Excels\MainQuestData.cs" />
<Compile Include="Game\Data\Excels\QuestData.cs" />
<Compile Include="Game\Data\Excels\ReliquaryData.cs" />
<Compile Include="Game\Data\Excels\MonsterData.cs" />
<Compile Include="Game\Data\Excels\SceneData.cs" />
<Compile Include="Game\Data\GameResource.cs" />
<Compile Include="Game\Data\GameResources.cs" />
<Compile Include="Game\Data\ResourceTypeAttribute.cs" />
<Compile Include="Game\Drop\DropData.cs" />
<Compile Include="Game\Drop\DropInfo.cs" />
<Compile Include="Game\Dungeon\DungeonItem.cs" />
@@ -148,12 +164,20 @@
<Compile Include="Game\Gacha\BannerType.cs" />
<Compile Include="Game\Gacha\GachaBanner.cs" />
<Compile Include="Game\GameData.cs" />
<Compile Include="Game\Inventory\ItemType.cs" />
<Compile Include="Game\Inventory\MaterialType.cs" />
<Compile Include="Game\Data\Excels\WeaponData.cs" />
<Compile Include="Game\ItemMap.cs" />
<Compile Include="Game\ItemMapGroup.cs" />
<Compile Include="Game\Mail\Mail.cs" />
<Compile Include="Game\Mail\MailItem.cs" />
<Compile Include="Game\Player\PlayerData.cs" />
<Compile Include="Game\Props\GadgetType.cs" />
<Compile Include="Game\Props\ItemUseData.cs" />
<Compile Include="Game\Props\MonsterType.cs" />
<Compile Include="Game\Props\PlayerProperty.cs" />
<Compile Include="Game\Props\QualityType.cs" />
<Compile Include="Game\Props\SceneType.cs" />
<Compile Include="Game\SetStatsCommand.cs" />
<Compile Include="Game\Shop\ItemParamData.cs" />
<Compile Include="Game\Shop\ShopGoodsData.cs" />
@@ -295,6 +319,7 @@
<Compile Include="Utils\HttpHelper.cs" />
<Compile Include="Utils\Logger.cs" />
<Compile Include="Utils\GithubHelper.cs" />
<Compile Include="Utils\SparseSet.cs" />
<Compile Include="Utils\ToggleParser.cs" />
<Compile Include="Utils\UIUtil.cs" />
<EmbeddedResource Include="Forms\FormActivityEditor.en-US.resx">
@@ -464,6 +489,7 @@
</EmbeddedResource>
<EmbeddedResource Include="Pages\PageGiveItem.resx">
<DependentUpon>PageGiveItem.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Pages\PageGiveItem.ru-RU.resx">
<DependentUpon>PageGiveItem.cs</DependentUpon>
@@ -585,6 +611,7 @@
</EmbeddedResource>
<EmbeddedResource Include="Pages\PageSpawn.resx">
<DependentUpon>PageSpawn.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Pages\PageSpawn.ru-RU.resx">
<DependentUpon>PageSpawn.cs</DependentUpon>
@@ -642,6 +669,7 @@
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="GrasscutterTools.licenseheader" />
<None Include="GrasscutterTools.snk" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
@@ -741,6 +769,7 @@
<Content Include="Resources\zh-tw\Cutscene.txt" />
<Content Include="Resources\zh-tw\GachaBennerTitle.txt" />
<Content Include="Resources\zh-tw\GachaBennerPrefab.txt" />
<None Include="Resources\zh-tw\Gadget.txt" />
<Content Include="Resources\zh-tw\Item.txt" />
<Content Include="Resources\zh-tw\Monsters.txt" />
<Content Include="Resources\zh-tw\PlayerProperty.txt" />

View File

@@ -0,0 +1,19 @@
extensions: .cs
/**
* 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 <https://www.gnu.org/licenses/>.
*
**/

View File

@@ -26,7 +26,7 @@ using Newtonsoft.Json;
namespace GrasscutterTools.OpenCommand
{
public class OpenCommandAPI
internal class OpenCommandAPI
{
public OpenCommandAPI(string host, string token = "")
{

View File

@@ -117,310 +117,313 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="&gt;&gt;BtnExportCustomCommands.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="BtnAddHotKey.Text" xml:space="preserve">
<value>快捷键</value>
</data>
<data name="LnkResetCustomCommands.Text" xml:space="preserve">
<value>重置</value>
</data>
<data name="&gt;&gt;BtnRemoveCustomCommand.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.11.0.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
</data>
<data name="&gt;&gt;TxtCustomName.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="BtnSaveCustomCommand.Location" type="System.Drawing.Point, System.Drawing">
<value>405, 206</value>
</data>
<data name="BtnRemoveCustomCommand.Location" type="System.Drawing.Point, System.Drawing">
<value>471, 206</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="BtnLoadCustomCommands.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<data name="BtnExportCustomCommands.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="LnkResetCustomCommands.Size" type="System.Drawing.Size, System.Drawing">
<value>32, 17</value>
</data>
<data name="&gt;&gt;BtnExportCustomCommands.Name" xml:space="preserve">
<value>BtnExportCustomCommands</value>
</data>
<data name="BtnLoadCustomCommands.Location" type="System.Drawing.Point, System.Drawing">
<value>537, 206</value>
</data>
<data name="LnkResetCustomCommands.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="GrpCustomCommands.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 3</value>
</data>
<data name="BtnRemoveCustomCommand.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 30</value>
</data>
<data name="TxtCustomName.Location" type="System.Drawing.Point, System.Drawing">
<value>41, 210</value>
</data>
<data name="&gt;&gt;FLPCustomCommands.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="LnkResetCustomCommands.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="&gt;&gt;BtnExportCustomCommands.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="BtnExportCustomCommands.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="&gt;&gt;BtnLoadCustomCommands.Name" xml:space="preserve">
<value>BtnLoadCustomCommands</value>
</data>
<data name="BtnRemoveCustomCommand.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="FLPCustomCommands.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="LblCustomName.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="&gt;&gt;LnkResetCustomCommands.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="BtnAddHotKey.TabIndex" type="System.Int32, mscorlib">
<value>15</value>
</data>
<data name="&gt;&gt;BtnLoadCustomCommands.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LblCustomName.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="TxtCustomName.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left, Right</value>
</data>
<data name="BtnExportCustomCommands.Text" xml:space="preserve">
<value>导出</value>
</data>
<data name="&gt;&gt;LnkResetCustomCommands.Name" xml:space="preserve">
<value>LnkResetCustomCommands</value>
</data>
<data name="LblCustomName.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LnkResetCustomCommands.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="&gt;&gt;BtnRemoveCustomCommand.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="LblCustomName.Size" type="System.Drawing.Size, System.Drawing">
<value>32, 17</value>
</data>
<data name="BtnLoadCustomCommands.Size" type="System.Drawing.Size, System.Drawing">
<value>50, 30</value>
</data>
<data name="&gt;&gt;BtnLoadCustomCommands.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="BtnLoadCustomCommands.TabIndex" type="System.Int32, mscorlib">
<value>13</value>
</data>
<data name="LblCustomName.Text" xml:space="preserve">
<value>标签</value>
</data>
<data name="&gt;&gt;TxtCustomName.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="BtnSaveCustomCommand.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 30</value>
</data>
<data name="&gt;&gt;GrpCustomCommands.Name" xml:space="preserve">
<value>GrpCustomCommands</value>
</data>
<data name="&gt;&gt;BtnAddHotKey.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;BtnRemoveCustomCommand.Name" xml:space="preserve">
<value>BtnRemoveCustomCommand</value>
</data>
<data name="BtnAddHotKey.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="&gt;&gt;GrpCustomCommands.ZOrder" xml:space="preserve">
<value>4</value>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="BtnExportCustomCommands.Location" type="System.Drawing.Point, System.Drawing">
<value>593, 206</value>
</data>
<data name="BtnExportCustomCommands.Size" type="System.Drawing.Size, System.Drawing">
<value>50, 30</value>
</data>
<data name="&gt;&gt;FLPCustomCommands.Name" xml:space="preserve">
<value>FLPCustomCommands</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="BtnExportCustomCommands.TabIndex" type="System.Int32, mscorlib">
<value>14</value>
</data>
<data name="BtnExportCustomCommands.Location" type="System.Drawing.Point, System.Drawing">
<value>593, 206</value>
<data name="BtnExportCustomCommands.Text" xml:space="preserve">
<value>导出</value>
</data>
<data name="&gt;&gt;BtnLoadCustomCommands.ZOrder" xml:space="preserve">
<value>2</value>
<data name="&gt;&gt;BtnExportCustomCommands.Name" xml:space="preserve">
<value>BtnExportCustomCommands</value>
</data>
<data name="&gt;&gt;GrpCustomCommands.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="FLPCustomCommands.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;BtnSaveCustomCommand.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="LblCustomName.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="&gt;&gt;BtnSaveCustomCommand.Type" xml:space="preserve">
<data name="&gt;&gt;BtnExportCustomCommands.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="FLPCustomCommands.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 19</value>
</data>
<data name="TxtCustomName.Size" type="System.Drawing.Size, System.Drawing">
<value>277, 23</value>
</data>
<data name="LnkResetCustomCommands.Location" type="System.Drawing.Point, System.Drawing">
<value>602, -1</value>
</data>
<data name="GrpCustomCommands.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<data name="BtnSaveCustomCommand.Text" xml:space="preserve">
<value>√ 保存</value>
</data>
<data name="&gt;&gt;LnkResetCustomCommands.Parent" xml:space="preserve">
<value>GrpCustomCommands</value>
</data>
<data name="&gt;&gt;FLPCustomCommands.Type" xml:space="preserve">
<value>System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>7, 17</value>
</data>
<data name="BtnAddHotKey.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 30</value>
</data>
<data name="&gt;&gt;LblCustomName.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="&gt;&gt;TxtCustomName.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="&gt;&gt;BtnRemoveCustomCommand.Parent" xml:space="preserve">
<data name="&gt;&gt;BtnExportCustomCommands.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;BtnSaveCustomCommand.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="BtnAddHotKey.Location" type="System.Drawing.Point, System.Drawing">
<value>324, 206</value>
</data>
<data name="&gt;&gt;FLPCustomCommands.Parent" xml:space="preserve">
<value>GrpCustomCommands</value>
</data>
<data name="&gt;&gt;LnkResetCustomCommands.Type" xml:space="preserve">
<value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="LnkResetCustomCommands.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="BtnExportCustomCommands.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="FLPCustomCommands.Size" type="System.Drawing.Size, System.Drawing">
<value>634, 178</value>
</data>
<data name="GrpCustomCommands.Size" type="System.Drawing.Size, System.Drawing">
<value>640, 200</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>PageCustomCommands</value>
</data>
<data name="GrpCustomCommands.Text" xml:space="preserve">
<value>列表</value>
</data>
<data name="BtnRemoveCustomCommand.Text" xml:space="preserve">
<value>× 删除</value>
</data>
<data name="&gt;&gt;LblCustomName.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;BtnExportCustomCommands.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;TxtCustomName.Name" xml:space="preserve">
<value>TxtCustomName</value>
</data>
<data name="TxtCustomName.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
</data>
<data name="FLPCustomCommands.AutoScroll" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;GrpCustomCommands.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="BtnSaveCustomCommand.TabIndex" type="System.Int32, mscorlib">
<value>11</value>
</data>
<data name="BtnSaveCustomCommand.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<data name="BtnLoadCustomCommands.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="BtnRemoveCustomCommand.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="&gt;&gt;BtnAddHotKey.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="LblCustomName.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 213</value>
</data>
<data name="&gt;&gt;BtnAddHotKey.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;BtnSaveCustomCommand.Name" xml:space="preserve">
<value>BtnSaveCustomCommand</value>
</data>
<data name="BtnRemoveCustomCommand.TabIndex" type="System.Int32, mscorlib">
<value>12</value>
</data>
<data name="BtnLoadCustomCommands.Text" xml:space="preserve">
<value>载入</value>
</data>
<data name="GrpCustomCommands.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="BtnSaveCustomCommand.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="LblCustomName.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
</data>
<data name="BtnLoadCustomCommands.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="BtnLoadCustomCommands.Location" type="System.Drawing.Point, System.Drawing">
<value>537, 206</value>
</data>
<data name="BtnLoadCustomCommands.Size" type="System.Drawing.Size, System.Drawing">
<value>50, 30</value>
</data>
<data name="BtnLoadCustomCommands.TabIndex" type="System.Int32, mscorlib">
<value>13</value>
</data>
<data name="BtnLoadCustomCommands.Text" xml:space="preserve">
<value>载入</value>
</data>
<data name="&gt;&gt;BtnLoadCustomCommands.Name" xml:space="preserve">
<value>BtnLoadCustomCommands</value>
</data>
<data name="&gt;&gt;BtnLoadCustomCommands.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;BtnLoadCustomCommands.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;BtnLoadCustomCommands.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="LblCustomName.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="LblCustomName.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LblCustomName.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="LblCustomName.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 213</value>
</data>
<data name="LblCustomName.Size" type="System.Drawing.Size, System.Drawing">
<value>32, 17</value>
</data>
<data name="LblCustomName.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
</data>
<data name="LblCustomName.Text" xml:space="preserve">
<value>标签</value>
</data>
<data name="&gt;&gt;LblCustomName.Name" xml:space="preserve">
<value>LblCustomName</value>
</data>
<data name="&gt;&gt;LblCustomName.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LblCustomName.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;LblCustomName.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="GrpCustomCommands.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<data name="LnkResetCustomCommands.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="LnkResetCustomCommands.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LnkResetCustomCommands.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="LnkResetCustomCommands.Location" type="System.Drawing.Point, System.Drawing">
<value>602, -1</value>
</data>
<data name="LnkResetCustomCommands.Size" type="System.Drawing.Size, System.Drawing">
<value>32, 17</value>
</data>
<data name="LnkResetCustomCommands.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="LnkResetCustomCommands.Text" xml:space="preserve">
<value>重置</value>
</data>
<data name="&gt;&gt;LnkResetCustomCommands.Name" xml:space="preserve">
<value>LnkResetCustomCommands</value>
</data>
<data name="&gt;&gt;LnkResetCustomCommands.Type" xml:space="preserve">
<value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LnkResetCustomCommands.Parent" xml:space="preserve">
<value>GrpCustomCommands</value>
</data>
<data name="&gt;&gt;LnkResetCustomCommands.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="FLPCustomCommands.AutoScroll" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="FLPCustomCommands.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="FLPCustomCommands.Font" type="System.Drawing.Font, System.Drawing">
<value>Microsoft YaHei UI, 11pt</value>
</data>
<data name="FLPCustomCommands.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 19</value>
</data>
<data name="FLPCustomCommands.Size" type="System.Drawing.Size, System.Drawing">
<value>634, 178</value>
</data>
<data name="FLPCustomCommands.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;FLPCustomCommands.Name" xml:space="preserve">
<value>FLPCustomCommands</value>
</data>
<data name="&gt;&gt;FLPCustomCommands.Type" xml:space="preserve">
<value>System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;FLPCustomCommands.Parent" xml:space="preserve">
<value>GrpCustomCommands</value>
</data>
<data name="&gt;&gt;FLPCustomCommands.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="GrpCustomCommands.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 3</value>
</data>
<data name="GrpCustomCommands.Size" type="System.Drawing.Size, System.Drawing">
<value>640, 200</value>
</data>
<data name="GrpCustomCommands.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="GrpCustomCommands.Text" xml:space="preserve">
<value>列表</value>
</data>
<data name="&gt;&gt;GrpCustomCommands.Name" xml:space="preserve">
<value>GrpCustomCommands</value>
</data>
<data name="&gt;&gt;GrpCustomCommands.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;GrpCustomCommands.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;GrpCustomCommands.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="BtnRemoveCustomCommand.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="BtnRemoveCustomCommand.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="BtnRemoveCustomCommand.Location" type="System.Drawing.Point, System.Drawing">
<value>471, 206</value>
</data>
<data name="BtnRemoveCustomCommand.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 30</value>
</data>
<data name="BtnRemoveCustomCommand.TabIndex" type="System.Int32, mscorlib">
<value>12</value>
</data>
<data name="BtnRemoveCustomCommand.Text" xml:space="preserve">
<value>× 删除</value>
</data>
<data name="&gt;&gt;BtnRemoveCustomCommand.Name" xml:space="preserve">
<value>BtnRemoveCustomCommand</value>
</data>
<data name="&gt;&gt;BtnRemoveCustomCommand.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;BtnRemoveCustomCommand.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;BtnRemoveCustomCommand.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="BtnSaveCustomCommand.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="BtnSaveCustomCommand.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="BtnSaveCustomCommand.Location" type="System.Drawing.Point, System.Drawing">
<value>405, 206</value>
</data>
<data name="BtnSaveCustomCommand.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 30</value>
</data>
<data name="BtnSaveCustomCommand.TabIndex" type="System.Int32, mscorlib">
<value>11</value>
</data>
<data name="BtnSaveCustomCommand.Text" xml:space="preserve">
<value>√ 保存</value>
</data>
<data name="&gt;&gt;BtnSaveCustomCommand.Name" xml:space="preserve">
<value>BtnSaveCustomCommand</value>
</data>
<data name="&gt;&gt;BtnSaveCustomCommand.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;BtnSaveCustomCommand.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;BtnSaveCustomCommand.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="TxtCustomName.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left, Right</value>
</data>
<data name="TxtCustomName.Location" type="System.Drawing.Point, System.Drawing">
<value>41, 210</value>
</data>
<data name="TxtCustomName.Size" type="System.Drawing.Size, System.Drawing">
<value>277, 23</value>
</data>
<data name="TxtCustomName.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
</data>
<data name="&gt;&gt;TxtCustomName.Name" xml:space="preserve">
<value>TxtCustomName</value>
</data>
<data name="&gt;&gt;TxtCustomName.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;TxtCustomName.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;TxtCustomName.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="BtnAddHotKey.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="BtnAddHotKey.Location" type="System.Drawing.Point, System.Drawing">
<value>324, 206</value>
</data>
<data name="BtnAddHotKey.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 30</value>
</data>
<data name="BtnAddHotKey.TabIndex" type="System.Int32, mscorlib">
<value>15</value>
</data>
<data name="BtnAddHotKey.Text" xml:space="preserve">
<value>快捷键</value>
</data>
<data name="&gt;&gt;BtnAddHotKey.Name" xml:space="preserve">
<value>BtnAddHotKey</value>
</data>
<data name="&gt;&gt;BtnAddHotKey.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;BtnAddHotKey.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;BtnAddHotKey.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>7, 17</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>PageCustomCommands</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.12.2.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
</data>
</root>

View File

@@ -43,7 +43,7 @@
this.NUDGameItemAmout = new System.Windows.Forms.NumericUpDown();
this.NUDGameItemLevel = new System.Windows.Forms.NumericUpDown();
this.LblGiveCommandDescription = new System.Windows.Forms.Label();
this.BtnFilterItem = new System.Windows.Forms.Button();
this.CmbFilterItem = new System.Windows.Forms.ComboBox();
this.MenuItemFilter = new System.Windows.Forms.ContextMenuStrip(this.components);
this.GrpGiveItemRecord.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.NUDGameItemAmout)).BeginInit();
@@ -162,12 +162,12 @@
resources.ApplyResources(this.LblGiveCommandDescription, "LblGiveCommandDescription");
this.LblGiveCommandDescription.Name = "LblGiveCommandDescription";
//
// BtnFilterItem
// CmbFilterItem
//
resources.ApplyResources(this.BtnFilterItem, "BtnFilterItem");
this.BtnFilterItem.Name = "BtnFilterItem";
this.BtnFilterItem.UseVisualStyleBackColor = true;
this.BtnFilterItem.Click += new System.EventHandler(this.BtnFilterItem_Click);
this.CmbFilterItem.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
resources.ApplyResources(this.CmbFilterItem, "CmbFilterItem");
this.CmbFilterItem.Name = "CmbFilterItem";
this.CmbFilterItem.SelectedIndexChanged += new System.EventHandler(this.CmbFilterItem_SelectedIndexChanged);
//
// MenuItemFilter
//
@@ -178,7 +178,7 @@
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.BtnFilterItem);
this.Controls.Add(this.CmbFilterItem);
this.Controls.Add(this.LblClearGiveItemLogs);
this.Controls.Add(this.BtnSaveGiveItemLog);
this.Controls.Add(this.BtnRemoveGiveItemLog);
@@ -215,7 +215,7 @@
private System.Windows.Forms.NumericUpDown NUDGameItemAmout;
private System.Windows.Forms.NumericUpDown NUDGameItemLevel;
private System.Windows.Forms.Label LblGiveCommandDescription;
private System.Windows.Forms.Button BtnFilterItem;
private System.Windows.Forms.ComboBox CmbFilterItem;
private System.Windows.Forms.ContextMenuStrip MenuItemFilter;
}
}

View File

@@ -41,33 +41,28 @@ namespace GrasscutterTools.Pages
InitGiveItemRecord();
}
private List<string[]> ItemList;
/// <summary>
/// 初始化游戏物品列表
/// </summary>
public override void OnLoad()
{
MenuItemFilter.SuspendLayout();
MenuItemFilter.Items.Clear();
var types = new List<string>();
var itemList = new List<string[]>();
types.Add(Resources.All);
SelectedItemTypeLines = GameData.Items.Lines;
var all = new ToolStripMenuItem
{
Text = Resources.All,
Tag = SelectedItemTypeLines,
};
all.Click += OnItemFilterClick;
MenuItemFilter.Items.Add(all);
itemList.Add(SelectedItemTypeLines);
foreach (var kv in GameData.Items)
{
var item = new ToolStripMenuItem
{
Text = kv.Key,
Tag = kv.Value.Lines,
};
item.Click += OnItemFilterClick;
MenuItemFilter.Items.Add(item);
types.Add(kv.Key);
itemList.Add(kv.Value.Lines);
}
MenuItemFilter.ResumeLayout();
CmbFilterItem.DataSource = types;
ItemList = itemList;
LoadItemList();
}
@@ -77,12 +72,14 @@ namespace GrasscutterTools.Pages
private string[] SelectedItemTypeLines;
/// <summary>
/// 物品类型过滤器类型选中时触发
/// 点击过滤物品按钮时触发
/// </summary>
private void OnItemFilterClick(object sender, EventArgs e)
private void CmbFilterItem_SelectedIndexChanged(object sender, EventArgs e)
{
var btn = sender as ToolStripMenuItem;
SelectedItemTypeLines = btn.Tag as string[];
if (CmbFilterItem.SelectedIndex < 0 || ItemList == null) return;
var lines = ItemList[CmbFilterItem.SelectedIndex];
if (SelectedItemTypeLines == lines) return;
SelectedItemTypeLines = lines;
LoadItemList();
}
@@ -150,13 +147,6 @@ namespace GrasscutterTools.Pages
GenGiveItemCommand();
}
/// <summary>
/// 点击过滤物品按钮时触发
/// </summary>
private void BtnFilterItem_Click(object sender, EventArgs e)
{
MenuItemFilter.Show(BtnFilterItem, 0, BtnFilterItem.Height);
}
#region -- --

View File

@@ -301,10 +301,10 @@
<value>Top, Left, Right</value>
</data>
<data name="TxtGameItemFilter.Location" type="System.Drawing.Point, System.Drawing">
<value>343, 3</value>
<value>498, 3</value>
</data>
<data name="TxtGameItemFilter.Size" type="System.Drawing.Size, System.Drawing">
<value>268, 23</value>
<value>145, 23</value>
</data>
<data name="TxtGameItemFilter.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
@@ -493,35 +493,29 @@
<data name="&gt;&gt;LblGiveCommandDescription.ZOrder" xml:space="preserve">
<value>13</value>
</data>
<data name="BtnFilterItem.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="BtnFilterItem.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<data name="CmbFilterItem.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="BtnFilterItem.Location" type="System.Drawing.Point, System.Drawing">
<value>617, 3</value>
<data name="CmbFilterItem.Location" type="System.Drawing.Point, System.Drawing">
<value>342, 2</value>
</data>
<data name="BtnFilterItem.Size" type="System.Drawing.Size, System.Drawing">
<value>26, 24</value>
<data name="CmbFilterItem.Size" type="System.Drawing.Size, System.Drawing">
<value>150, 25</value>
</data>
<data name="BtnFilterItem.TabIndex" type="System.Int32, mscorlib">
<data name="CmbFilterItem.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
</data>
<data name="BtnFilterItem.Text" xml:space="preserve">
<value></value>
<data name="&gt;&gt;CmbFilterItem.Name" xml:space="preserve">
<value>CmbFilterItem</value>
</data>
<data name="&gt;&gt;BtnFilterItem.Name" xml:space="preserve">
<value>BtnFilterItem</value>
<data name="&gt;&gt;CmbFilterItem.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;BtnFilterItem.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;BtnFilterItem.Parent" xml:space="preserve">
<data name="&gt;&gt;CmbFilterItem.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;BtnFilterItem.ZOrder" xml:space="preserve">
<value>1</value>
<data name="&gt;&gt;CmbFilterItem.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<metadata name="MenuItemFilter.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
@@ -545,6 +539,6 @@
<value>PageGiveItem</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.7.6.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.12.1.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
</data>
</root>

View File

@@ -26,6 +26,7 @@ using System.Threading.Tasks;
using System.Windows.Forms;
using GrasscutterTools.DispatchServer;
using GrasscutterTools.DispatchServer.Model;
using GrasscutterTools.Game;
using GrasscutterTools.GOOD;
using GrasscutterTools.OpenCommand;
@@ -125,7 +126,7 @@ namespace GrasscutterTools.Pages
// 自动尝试查询本地服务端地址,降低使用门槛
Task.Run(async () =>
{
var localhosts = new string[] {
var localhostList = new[] {
"http://127.0.0.1:443",
"https://127.0.0.1",
"http://127.0.0.1",
@@ -133,13 +134,13 @@ namespace GrasscutterTools.Pages
"http://127.0.0.1:8080",
"https://127.0.0.1:8080",
};
foreach (var host in localhosts)
foreach (var host in localhostList)
{
try
{
await UpdateServerStatus(host);
// 自动填写本地服务端地址
TxtHost.Text = host;
BeginInvoke(new Action(() => TxtHost.Text = host));
break;
}
catch (Exception)
@@ -169,6 +170,14 @@ namespace GrasscutterTools.Pages
private async Task UpdateServerStatus(string host)
{
var status = await DispatchServerAPI.QueryServerStatus(host);
if (InvokeRequired)
BeginInvoke(new Action<ServerStatus>(ShowServerStatus), status);
else
ShowServerStatus(status);
}
private void ShowServerStatus(ServerStatus status)
{
LblServerVersion.Text = status.Version;
LblPlayerCount.Text = status.MaxPlayer > 0 ? $"{status.PlayerCount}/{status.MaxPlayer}" : status.PlayerCount.ToString();
}

View File

@@ -46,6 +46,8 @@
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();
((System.ComponentModel.ISupportInitialize)(this.NUDTpX)).BeginInit();
@@ -203,10 +205,26 @@
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");
this.BtnFreezeTime.Name = "BtnFreezeTime";
this.BtnFreezeTime.UseVisualStyleBackColor = true;
this.BtnFreezeTime.Click += new System.EventHandler(this.BtnFreezeTime_Click);
//
// PageScene
//
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);
@@ -252,5 +270,7 @@
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;
}
}

View File

@@ -156,5 +156,21 @@ namespace GrasscutterTools.Pages
args += $" {GameData.Scenes.Ids[ListScenes.SelectedIndex]}";
SetCommand("/tp", args);
}
/// <summary>
/// 锁定天气
/// </summary>
private void ChkLockClimate_CheckedChanged(object sender, EventArgs e)
{
SetCommand("/prop", $"is_weather_locked {(ChkLockClimate.Checked ? "on" : "off")}");
}
/// <summary>
/// 冻结游戏时间
/// </summary>
private void BtnFreezeTime_Click(object sender, EventArgs e)
{
SetCommand("/prop", "is_game_time_locked on");
}
}
}

View File

@@ -182,4 +182,13 @@ In the command, you can use ~ to indicate the current position, and ~N to indica
<data name="RbListCutScene.Text" xml:space="preserve">
<value>Cutscene</value>
</data>
<data name="ChkLockClimate.Size" type="System.Drawing.Size, System.Drawing">
<value>54, 21</value>
</data>
<data name="ChkLockClimate.Text" xml:space="preserve">
<value>Lock</value>
</data>
<data name="BtnFreezeTime.Text" xml:space="preserve">
<value>Freeze Time</value>
</data>
</root>

View File

@@ -129,7 +129,7 @@
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="BtnTeleport.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
<value>75, 25</value>
</data>
<data name="&gt;&gt;TxtSceneFilter.Name" xml:space="preserve">
<value>TxtSceneFilter</value>
@@ -145,7 +145,7 @@
<value>14, 17</value>
</data>
<data name="&gt;&gt;RbListCutScene.ZOrder" xml:space="preserve">
<value>0</value>
<value>2</value>
</data>
<data name="&gt;&gt;LblTpY.Parent" xml:space="preserve">
<value>$this</value>
@@ -163,19 +163,22 @@
<value>343, 28</value>
</data>
<data name="&gt;&gt;CmbClimateType.ZOrder" xml:space="preserve">
<value>12</value>
<value>14</value>
</data>
<data name="&gt;&gt;LblSceneDescription.Name" xml:space="preserve">
<value>LblSceneDescription</value>
</data>
<data name="&gt;&gt;BtnTeleport.Parent" xml:space="preserve">
<value>$this</value>
<data name="NUDTpZ.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="ChkLockClimate.Location" type="System.Drawing.Point, System.Drawing">
<value>192, 31</value>
</data>
<data name="LblTp.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="&gt;&gt;NUDTpZ.Parent" xml:space="preserve">
<value>$this</value>
<data name="LblTpZ.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="&gt;&gt;LblSceneDescription.Parent" xml:space="preserve">
<value>$this</value>
@@ -189,11 +192,11 @@
<data name="&gt;&gt;ChkIncludeSceneId.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;CmbClimateType.Name" xml:space="preserve">
<value>CmbClimateType</value>
<data name="&gt;&gt;BtnTeleport.ZOrder" xml:space="preserve">
<value>9</value>
</data>
<data name="&gt;&gt;ChkIncludeSceneId.ZOrder" xml:space="preserve">
<value>4</value>
<value>6</value>
</data>
<data name="&gt;&gt;NUDTpY.Type" xml:space="preserve">
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
@@ -208,10 +211,10 @@
<value>14, 17</value>
</data>
<data name="&gt;&gt;RbListScene.ZOrder" xml:space="preserve">
<value>2</value>
<value>4</value>
</data>
<data name="NUDTpY.Location" type="System.Drawing.Point, System.Drawing">
<value>129, 156</value>
<data name="&gt;&gt;BtnFreezeTime.Name" xml:space="preserve">
<value>BtnFreezeTime</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>7, 17</value>
@@ -243,14 +246,11 @@
<data name="&gt;&gt;ListScenes.Name" xml:space="preserve">
<value>ListScenes</value>
</data>
<data name="&gt;&gt;LblTpZ.Name" xml:space="preserve">
<value>LblTpZ</value>
</data>
<data name="ChkIncludeSceneId.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="&gt;&gt;NUDTpX.ZOrder" xml:space="preserve">
<value>11</value>
<value>13</value>
</data>
<data name="RbListScene.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
@@ -258,8 +258,11 @@
<data name="ChkIncludeSceneId.TabIndex" type="System.Int32, mscorlib">
<value>13</value>
</data>
<data name="NUDTpY.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
</data>
<data name="&gt;&gt;LblTpZ.ZOrder" xml:space="preserve">
<value>5</value>
<value>7</value>
</data>
<data name="&gt;&gt;LblTpZ.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
@@ -267,17 +270,20 @@
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>PageScene</value>
</data>
<data name="&gt;&gt;NUDTpY.ZOrder" xml:space="preserve">
<value>10</value>
<data name="&gt;&gt;ChkLockClimate.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;LblTp.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="&gt;&gt;NUDTpY.ZOrder" xml:space="preserve">
<value>12</value>
</data>
<data name="&gt;&gt;LblTpY.Name" xml:space="preserve">
<value>LblTpY</value>
</data>
<data name="NUDTpZ.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
<data name="LblTpY.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;LblTpY.ZOrder" xml:space="preserve">
<value>8</value>
</data>
<data name="&gt;&gt;NUDTpX.Parent" xml:space="preserve">
<value>$this</value>
@@ -292,7 +298,7 @@
<value>RbListCutScene</value>
</data>
<data name="&gt;&gt;NUDTpZ.ZOrder" xml:space="preserve">
<value>9</value>
<value>11</value>
</data>
<data name="LblTpY.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
@@ -309,6 +315,9 @@
<data name="NUDTpZ.Size" type="System.Drawing.Size, System.Drawing">
<value>80, 23</value>
</data>
<data name="ChkLockClimate.TabIndex" type="System.Int32, mscorlib">
<value>16</value>
</data>
<data name="&gt;&gt;NUDTpX.Type" xml:space="preserve">
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
@@ -324,9 +333,6 @@
<data name="LblTpY.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="&gt;&gt;BtnTeleport.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="&gt;&gt;NUDTpZ.Type" xml:space="preserve">
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
@@ -339,6 +345,9 @@
<data name="RbListDungeons.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="BtnFreezeTime.Location" type="System.Drawing.Point, System.Drawing">
<value>215, 184</value>
</data>
<data name="LblTpY.Location" type="System.Drawing.Point, System.Drawing">
<value>109, 158</value>
</data>
@@ -366,11 +375,14 @@
<data name="LblClimateType.Text" xml:space="preserve">
<value>设置天气</value>
</data>
<data name="&gt;&gt;LblClimateType.Type" xml:space="preserve">
<data name="BtnFreezeTime.TabIndex" type="System.Int32, mscorlib">
<value>17</value>
</data>
<data name="&gt;&gt;LblTp.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="LblTpY.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
<data name="&gt;&gt;ChkLockClimate.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="NUDTpZ.TabIndex" type="System.Int32, mscorlib">
<value>11</value>
@@ -381,21 +393,36 @@
<data name="CmbClimateType.Size" type="System.Drawing.Size, System.Drawing">
<value>121, 25</value>
</data>
<data name="&gt;&gt;BtnFreezeTime.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="LblTpX.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 158</value>
</data>
<data name="LblClimateType.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="&gt;&gt;LblClimateType.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="ChkIncludeSceneId.Text" xml:space="preserve">
<value>含场景ID</value>
</data>
<data name="BtnFreezeTime.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
<data name="&gt;&gt;LblTpZ.Name" xml:space="preserve">
<value>LblTpZ</value>
</data>
<data name="&gt;&gt;CmbClimateType.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="LblTpZ.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="&gt;&gt;BtnFreezeTime.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;RbListDungeons.Name" xml:space="preserve">
<value>RbListDungeons</value>
</data>
@@ -405,11 +432,11 @@
<data name="RbListDungeons.Location" type="System.Drawing.Point, System.Drawing">
<value>287, 30</value>
</data>
<data name="&gt;&gt;LblTpY.ZOrder" xml:space="preserve">
<value>6</value>
<data name="BtnFreezeTime.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 25</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.10.0.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.12.2.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
</data>
<data name="LblTp.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
@@ -423,8 +450,8 @@
<data name="&gt;&gt;ListScenes.Type" xml:space="preserve">
<value>System.Windows.Forms.ListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;BtnTeleport.Name" xml:space="preserve">
<value>BtnTeleport</value>
<data name="NUDTpX.Size" type="System.Drawing.Size, System.Drawing">
<value>80, 23</value>
</data>
<data name="NUDTpY.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
@@ -438,9 +465,12 @@
<data name="ListScenes.Size" type="System.Drawing.Size, System.Drawing">
<value>300, 208</value>
</data>
<data name="&gt;&gt;LblTp.Parent" xml:space="preserve">
<data name="&gt;&gt;NUDTpZ.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;ChkLockClimate.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="BtnTeleport.TabIndex" type="System.Int32, mscorlib">
<value>12</value>
</data>
@@ -448,16 +478,19 @@
<value>4</value>
</data>
<data name="ChkIncludeSceneId.Location" type="System.Drawing.Point, System.Drawing">
<value>87, 187</value>
<value>87, 188</value>
</data>
<data name="&gt;&gt;BtnFreezeTime.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LblTp.Name" xml:space="preserve">
<value>LblTp</value>
</data>
<data name="LblTpY.Text" xml:space="preserve">
<value>y</value>
</data>
<data name="LblSceneDescription.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;LblSceneDescription.ZOrder" xml:space="preserve">
<value>14</value>
<value>16</value>
</data>
<data name="RbListScene.Size" type="System.Drawing.Size, System.Drawing">
<value>50, 21</value>
@@ -465,12 +498,18 @@
<data name="LblTp.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LblTpZ.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
<data name="LblSceneDescription.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="LblClimateType.Size" type="System.Drawing.Size, System.Drawing">
<value>56, 17</value>
</data>
<data name="ChkLockClimate.Text" xml:space="preserve">
<value>锁定</value>
</data>
<data name="ChkLockClimate.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="RbListCutScene.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
@@ -481,7 +520,7 @@
<value>8</value>
</data>
<data name="&gt;&gt;RbListDungeons.ZOrder" xml:space="preserve">
<value>1</value>
<value>3</value>
</data>
<data name="LblSceneDescription.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@@ -495,8 +534,8 @@
<data name="ChkIncludeSceneId.Size" type="System.Drawing.Size, System.Drawing">
<value>76, 21</value>
</data>
<data name="TxtSceneFilter.Size" type="System.Drawing.Size, System.Drawing">
<value>300, 23</value>
<data name="&gt;&gt;BtnTeleport.Name" xml:space="preserve">
<value>BtnTeleport</value>
</data>
<data name="LblTpZ.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@@ -507,11 +546,11 @@
<data name="&gt;&gt;NUDTpY.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="TxtSceneFilter.TabIndex" type="System.Int32, mscorlib">
<value>14</value>
<data name="&gt;&gt;ChkLockClimate.Name" xml:space="preserve">
<value>ChkLockClimate</value>
</data>
<data name="&gt;&gt;LblClimateType.ZOrder" xml:space="preserve">
<value>13</value>
<value>15</value>
</data>
<data name="&gt;&gt;CmbClimateType.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
@@ -519,6 +558,9 @@
<data name="&gt;&gt;RbListCutScene.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="BtnFreezeTime.Text" xml:space="preserve">
<value>冻结时间</value>
</data>
<data name="&gt;&gt;TxtSceneFilter.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
@@ -526,16 +568,22 @@
<value>场景控制</value>
</data>
<data name="&gt;&gt;LblTpX.ZOrder" xml:space="preserve">
<value>8</value>
<value>10</value>
</data>
<data name="NUDTpX.Size" type="System.Drawing.Size, System.Drawing">
<value>80, 23</value>
<data name="TxtSceneFilter.Size" type="System.Drawing.Size, System.Drawing">
<value>300, 23</value>
</data>
<data name="&gt;&gt;CmbClimateType.Name" xml:space="preserve">
<value>CmbClimateType</value>
</data>
<data name="&gt;&gt;RbListDungeons.Type" xml:space="preserve">
<value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;LblTp.ZOrder" xml:space="preserve">
<value>16</value>
<value>18</value>
</data>
<data name="&gt;&gt;LblTp.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;NUDTpY.Name" xml:space="preserve">
<value>NUDTpY</value>
@@ -552,6 +600,9 @@
<data name="RbListScene.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="ChkLockClimate.Size" type="System.Drawing.Size, System.Drawing">
<value>51, 21</value>
</data>
<data name="LblTpX.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
</data>
@@ -570,17 +621,17 @@
<data name="BtnTeleport.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 185</value>
</data>
<data name="&gt;&gt;LblTp.Name" xml:space="preserve">
<value>LblTp</value>
<data name="TxtSceneFilter.TabIndex" type="System.Int32, mscorlib">
<value>14</value>
</data>
<data name="&gt;&gt;TxtSceneFilter.ZOrder" xml:space="preserve">
<value>3</value>
<value>5</value>
</data>
<data name="&gt;&gt;LblClimateType.Name" xml:space="preserve">
<value>LblClimateType</value>
</data>
<data name="&gt;&gt;ListScenes.ZOrder" xml:space="preserve">
<value>15</value>
<value>17</value>
</data>
<data name="TxtSceneFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
@@ -603,6 +654,9 @@
<data name="&gt;&gt;ListScenes.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;BtnTeleport.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;LblSceneDescription.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
@@ -618,8 +672,8 @@
<data name="&gt;&gt;LblClimateType.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="NUDTpY.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
<data name="NUDTpY.Location" type="System.Drawing.Point, System.Drawing">
<value>129, 156</value>
</data>
<data name="LblTp.TabIndex" type="System.Int32, mscorlib">
<value>5</value>

View File

@@ -140,10 +140,10 @@
<value>84, 215</value>
</data>
<data name="ChkIncludeSceneId.Size" type="System.Drawing.Size, System.Drawing">
<value>228, 21</value>
<value>126, 21</value>
</data>
<data name="ChkIncludeSceneId.Text" xml:space="preserve">
<value>Включить идентификатор сцены</value>
<value>Включить сцену</value>
</data>
<data name="LblTpZ.Location" type="System.Drawing.Point, System.Drawing">
<value>212, 186</value>
@@ -169,6 +169,9 @@
<data name="NUDTpX.Location" type="System.Drawing.Point, System.Drawing">
<value>20, 184</value>
</data>
<data name="CmbClimateType.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 25</value>
</data>
<data name="LblClimateType.Size" type="System.Drawing.Size, System.Drawing">
<value>52, 17</value>
</data>
@@ -206,4 +209,22 @@
<data name="RbListCutScene.Text" xml:space="preserve">
<value>Катсцена</value>
</data>
<data name="ChkLockClimate.Location" type="System.Drawing.Point, System.Drawing">
<value>171, 30</value>
</data>
<data name="ChkLockClimate.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 21</value>
</data>
<data name="ChkLockClimate.Text" xml:space="preserve">
<value>Замок</value>
</data>
<data name="BtnFreezeTime.Location" type="System.Drawing.Point, System.Drawing">
<value>212, 211</value>
</data>
<data name="BtnFreezeTime.Size" type="System.Drawing.Size, System.Drawing">
<value>125, 25</value>
</data>
<data name="BtnFreezeTime.Text" xml:space="preserve">
<value>Время заморозки</value>
</data>
</root>

View File

@@ -148,4 +148,10 @@
<data name="RbListCutScene.Text" xml:space="preserve">
<value>過場</value>
</data>
<data name="ChkLockClimate.Text" xml:space="preserve">
<value>鎖定</value>
</data>
<data name="BtnFreezeTime.Text" xml:space="preserve">
<value>凍結時間</value>
</data>
</root>

View File

@@ -90,7 +90,7 @@
this.ListEntity = new System.Windows.Forms.ListBox();
this.PanelEntityFilterBar = new System.Windows.Forms.Panel();
this.TxtEntityFilter = new System.Windows.Forms.TextBox();
this.BtnFilterEntity = new System.Windows.Forms.Button();
this.CmbFilterEntity = new System.Windows.Forms.ComboBox();
this.TPSpawnRecords = new System.Windows.Forms.TabPage();
this.ListSpawnLogs = new System.Windows.Forms.ListBox();
this.FLPSpawnRecordControls = new System.Windows.Forms.FlowLayoutPanel();
@@ -707,7 +707,7 @@
// PanelEntityFilterBar
//
this.PanelEntityFilterBar.Controls.Add(this.TxtEntityFilter);
this.PanelEntityFilterBar.Controls.Add(this.BtnFilterEntity);
this.PanelEntityFilterBar.Controls.Add(this.CmbFilterEntity);
resources.ApplyResources(this.PanelEntityFilterBar, "PanelEntityFilterBar");
this.PanelEntityFilterBar.Name = "PanelEntityFilterBar";
//
@@ -717,12 +717,12 @@
this.TxtEntityFilter.Name = "TxtEntityFilter";
this.TxtEntityFilter.TextChanged += new System.EventHandler(this.TxtEntityFilter_TextChanged);
//
// BtnFilterEntity
// CmbFilterEntity
//
resources.ApplyResources(this.BtnFilterEntity, "BtnFilterEntity");
this.BtnFilterEntity.Name = "BtnFilterEntity";
this.BtnFilterEntity.UseVisualStyleBackColor = true;
this.BtnFilterEntity.Click += new System.EventHandler(this.BtnFilterEntity_Click);
this.CmbFilterEntity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
resources.ApplyResources(this.CmbFilterEntity, "CmbFilterEntity");
this.CmbFilterEntity.Name = "CmbFilterEntity";
this.CmbFilterEntity.SelectedIndexChanged += new System.EventHandler(this.CmbFilterEntity_SelectedIndexChanged);
//
// TPSpawnRecords
//
@@ -879,7 +879,7 @@
private System.Windows.Forms.ListBox ListEntity;
private System.Windows.Forms.Panel PanelEntityFilterBar;
private System.Windows.Forms.TextBox TxtEntityFilter;
private System.Windows.Forms.Button BtnFilterEntity;
private System.Windows.Forms.ComboBox CmbFilterEntity;
private System.Windows.Forms.TabPage TPSpawnRecords;
private System.Windows.Forms.ListBox ListSpawnLogs;
private System.Windows.Forms.FlowLayoutPanel FLPSpawnRecordControls;

View File

@@ -52,43 +52,31 @@ namespace GrasscutterTools.Pages
#region -- --
private List<string[]> EntityList;
/// <summary>
/// 初始化实体列表
/// </summary>
private void InitEntityList()
{
// 初始化列表类型过滤器
MenuSpawnEntityFilter.SuspendLayout();
MenuSpawnEntityFilter.Items.Clear();
var types = new List<string>();
var entityList = new List<string[]>();
types.Add(Resources.All);
// 默认显示所有
SelectedEntityTypeLines = GameData.Monsters.AllLines.Concat(GameData.Gadgets.AllLines).ToArray();
var all = new ToolStripMenuItem
{
Text = Resources.All,
Tag = SelectedEntityTypeLines,
};
all.Click += OnEntityTypeFilterClick;
MenuSpawnEntityFilter.Items.Add(all);
void AddTypes(ItemMapGroup group)
{
foreach (var kv in group)
{
var item = new ToolStripMenuItem
{
Text = kv.Key,
Tag = kv.Value.Lines,
};
item.Click += OnEntityTypeFilterClick;
MenuSpawnEntityFilter.Items.Add(item);
}
}
//MenuSpawnEntityFilter.Items.Add(new ToolStripLabel("Monsters"));
AddTypes(GameData.Monsters);
MenuSpawnEntityFilter.Items.Add(new ToolStripSeparator());
//MenuSpawnEntityFilter.Items.Add(new ToolStripLabel("Gadgets"));
AddTypes(GameData.Gadgets);
MenuSpawnEntityFilter.ResumeLayout();
entityList.Add(SelectedEntityTypeLines);
types.AddRange(GameData.Monsters.Select(it => it.Key));
entityList.AddRange(GameData.Monsters.Select(it => it.Value.Lines));
types.AddRange(GameData.Gadgets.Select(it => it.Key));
entityList.AddRange(GameData.Gadgets.Select(it => it.Value.Lines));
CmbFilterEntity.DataSource = types;
EntityList = entityList;
//Console.WriteLine(string.Join("\n", GameData.Gadgets.Keys));
LoadEntityList();
}
@@ -97,13 +85,16 @@ namespace GrasscutterTools.Pages
/// </summary>
private string[] SelectedEntityTypeLines;
/// <summary>
/// 实体类型过滤器类型选中时触发
/// 类别选中时触发
/// </summary>
private void OnEntityTypeFilterClick(object sender, EventArgs e)
private void CmbFilterEntity_SelectedIndexChanged(object sender, EventArgs e)
{
var btn = sender as ToolStripMenuItem;
SelectedEntityTypeLines = btn.Tag as string[];
if (CmbFilterEntity.SelectedIndex < 0 || EntityList == null) return;
var lines = EntityList[CmbFilterEntity.SelectedIndex];
if (SelectedEntityTypeLines == lines) return;
SelectedEntityTypeLines = lines;
LoadEntityList();
}
@@ -122,14 +113,7 @@ namespace GrasscutterTools.Pages
{
LoadEntityList();
}
/// <summary>
/// 实体列表类型过滤按钮点击时触发
/// </summary>
private void BtnFilterEntity_Click(object sender, EventArgs e)
{
MenuSpawnEntityFilter.Show(BtnFilterEntity, 0, BtnFilterEntity.Height);
}
/// <summary>
/// 实体列表选中项改变时触发
@@ -387,5 +371,6 @@ namespace GrasscutterTools.Pages
}
#endregion -- --
}
}

View File

@@ -1594,10 +1594,10 @@
<value>Top, Left, Right</value>
</data>
<data name="TxtEntityFilter.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 3</value>
<value>153, 3</value>
</data>
<data name="TxtEntityFilter.Size" type="System.Drawing.Size, System.Drawing">
<value>242, 23</value>
<value>118, 23</value>
</data>
<data name="TxtEntityFilter.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@@ -1614,34 +1614,28 @@
<data name="&gt;&gt;TxtEntityFilter.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="BtnFilterEntity.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="BtnFilterEntity.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<data name="CmbFilterEntity.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="BtnFilterEntity.Location" type="System.Drawing.Point, System.Drawing">
<value>245, 3</value>
<data name="CmbFilterEntity.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 2</value>
</data>
<data name="BtnFilterEntity.Size" type="System.Drawing.Size, System.Drawing">
<value>26, 24</value>
<data name="CmbFilterEntity.Size" type="System.Drawing.Size, System.Drawing">
<value>150, 25</value>
</data>
<data name="BtnFilterEntity.TabIndex" type="System.Int32, mscorlib">
<data name="CmbFilterEntity.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="BtnFilterEntity.Text" xml:space="preserve">
<value></value>
<data name="&gt;&gt;CmbFilterEntity.Name" xml:space="preserve">
<value>CmbFilterEntity</value>
</data>
<data name="&gt;&gt;BtnFilterEntity.Name" xml:space="preserve">
<value>BtnFilterEntity</value>
<data name="&gt;&gt;CmbFilterEntity.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;BtnFilterEntity.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;BtnFilterEntity.Parent" xml:space="preserve">
<data name="&gt;&gt;CmbFilterEntity.Parent" xml:space="preserve">
<value>PanelEntityFilterBar</value>
</data>
<data name="&gt;&gt;BtnFilterEntity.ZOrder" xml:space="preserve">
<data name="&gt;&gt;CmbFilterEntity.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="PanelEntityFilterBar.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
@@ -1909,6 +1903,6 @@
<value>PageSpawn</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.10.1.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
<value>GrasscutterTools.Pages.BasePage, GrasscutterTools, Version=1.12.1.0, Culture=neutral, PublicKeyToken=de2b1c089621e923</value>
</data>
</root>

View File

@@ -34,7 +34,7 @@
this.TxtProjectResRoot = new System.Windows.Forms.TextBox();
this.LblGcResRoot = new System.Windows.Forms.Label();
this.TxtGcResRoot = new System.Windows.Forms.TextBox();
this.BtnUpdateDungeon = new System.Windows.Forms.Button();
this.BtnUpdateAllResources = new System.Windows.Forms.Button();
this.BtnUpdateActivity = new System.Windows.Forms.Button();
this.SuspendLayout();
//
@@ -90,15 +90,15 @@
this.TxtGcResRoot.Size = new System.Drawing.Size(413, 23);
this.TxtGcResRoot.TabIndex = 4;
//
// BtnUpdateDungeon
// BtnUpdateAllResources
//
this.BtnUpdateDungeon.Location = new System.Drawing.Point(41, 100);
this.BtnUpdateDungeon.Name = "BtnUpdateDungeon";
this.BtnUpdateDungeon.Size = new System.Drawing.Size(150, 30);
this.BtnUpdateDungeon.TabIndex = 0;
this.BtnUpdateDungeon.Text = "Update Dungeon";
this.BtnUpdateDungeon.UseVisualStyleBackColor = true;
this.BtnUpdateDungeon.Click += new System.EventHandler(this.BtnUpdateDungeon_Click);
this.BtnUpdateAllResources.Location = new System.Drawing.Point(41, 100);
this.BtnUpdateAllResources.Name = "BtnUpdateAllResources";
this.BtnUpdateAllResources.Size = new System.Drawing.Size(150, 30);
this.BtnUpdateAllResources.TabIndex = 0;
this.BtnUpdateAllResources.Text = "Update All Resources";
this.BtnUpdateAllResources.UseVisualStyleBackColor = true;
this.BtnUpdateAllResources.Click += new System.EventHandler(this.BtnUpdateAllResources_Click);
//
// BtnUpdateActivity
//
@@ -119,7 +119,7 @@
this.Controls.Add(this.TxtProjectResRoot);
this.Controls.Add(this.LblProjectResRoot);
this.Controls.Add(this.BtnUpdateActivity);
this.Controls.Add(this.BtnUpdateDungeon);
this.Controls.Add(this.BtnUpdateAllResources);
this.Controls.Add(this.BtnConvertCutScene);
this.Controls.Add(this.BtnUpdateResources);
this.Name = "PageTools";
@@ -136,7 +136,7 @@
private System.Windows.Forms.TextBox TxtProjectResRoot;
private System.Windows.Forms.Label LblGcResRoot;
private System.Windows.Forms.TextBox TxtGcResRoot;
private System.Windows.Forms.Button BtnUpdateDungeon;
private System.Windows.Forms.Button BtnUpdateAllResources;
private System.Windows.Forms.Button BtnUpdateActivity;
}
}

View File

@@ -1,4 +1,23 @@
using System;
/**
* 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 <https://www.gnu.org/licenses/>.
*
**/
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
@@ -8,7 +27,7 @@ using System.Windows.Forms;
using GrasscutterTools.Game;
using GrasscutterTools.Game.Activity;
using GrasscutterTools.Game.CutScene;
using GrasscutterTools.Game.Dungeon;
using GrasscutterTools.Game.Data;
using GrasscutterTools.Properties;
using Newtonsoft.Json;
@@ -122,25 +141,20 @@ namespace GrasscutterTools.Pages
}
private TextMapData TextMapData;
private GameResources GameResources;
private void BtnUpdateDungeon_Click(object sender, EventArgs e)
private void BtnUpdateAllResources_Click(object sender, EventArgs e)
{
try
{
if (!CheckInputPaths()) return;
var json = File.ReadAllText(
Path.Combine(TxtGcResRoot.Text, "ExcelBinOutput", "DungeonExcelConfigData.json"),
Encoding.UTF8);
var dungeons = JsonConvert.DeserializeObject<List<DungeonItem>>(json);
if (TextMapData == null)
TextMapData = new TextMapData(TxtGcResRoot.Text);
if (GameResources == null)
GameResources = new GameResources(TxtGcResRoot.Text, TextMapData);
UpdateDungeonsForLanguage(dungeons, "TextMapCHS", "zh-cn");
UpdateDungeonsForLanguage(dungeons, "TextMapCHT", "zh-tw");
UpdateDungeonsForLanguage(dungeons, "TextMapEN", "en-us");
UpdateDungeonsForLanguage(dungeons, "TextMapRU", "ru-ru");
GameResources.ConvertResources(TxtProjectResRoot.Text);
MessageBox.Show("OK", Resources.Tips, MessageBoxButtons.OK);
}
catch (Exception ex)
@@ -149,18 +163,6 @@ namespace GrasscutterTools.Pages
}
}
private void UpdateDungeonsForLanguage(IEnumerable<DungeonItem> dungeons, string textMap, string language)
{
var i = Array.IndexOf(TextMapData.TextMapFiles, textMap);
TextMapData.LoadTextMap(TextMapData.TextMapFilePaths[i]);
var dungeonFilePath = Path.Combine(TxtProjectResRoot.Text, language, "Dungeon.txt");
File.WriteAllLines(
dungeonFilePath,
dungeons.Select(it => $"{it.Id}:{TextMapData.GetText(it.NameTextMapHash)}"),
Encoding.UTF8);
}
private void BtnUpdateActivity_Click(object sender, EventArgs e)
{
try

View File

@@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.11.0")]
[assembly: AssemblyFileVersion("1.11.0")]
[assembly: AssemblyVersion("1.12.2")]
[assembly: AssemblyFileVersion("1.12.2")]

View File

@@ -363,4 +363,7 @@ Improvement suggestions have been submitted, please use caution to send emails t
<data name="PageHotKey" xml:space="preserve">
<value>HotKey</value>
</data>
<data name="Gadget" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\en-us\Gadget.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>
</root>

View File

@@ -351,4 +351,7 @@
<data name="PageHotKey" xml:space="preserve">
<value>Горячая клавиша</value>
</data>
<data name="Gadget" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ru-ru\Gadget.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>
</root>

View File

@@ -357,4 +357,7 @@
<data name="PageHotKey" xml:space="preserve">
<value>快捷鍵</value>
</data>
<data name="Gadget" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\zh-tw\Gadget.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>
</root>

View File

@@ -12,7 +12,7 @@ namespace GrasscutterTools.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.4.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.7.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
@@ -97,7 +97,7 @@ namespace GrasscutterTools.Properties {
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("https://127.0.0.1")]
[global::System.Configuration.DefaultSettingValueAttribute("http://127.0.0.1:443")]
public string Host {
get {
return ((string)(this["Host"]));

View File

@@ -21,7 +21,7 @@
<Value Profile="(Default)">10001</Value>
</Setting>
<Setting Name="Host" Type="System.String" Scope="User">
<Value Profile="(Default)">https://127.0.0.1</Value>
<Value Profile="(Default)">http://127.0.0.1:443</Value>
</Setting>
<Setting Name="CheckedLastVersion" Type="System.String" Scope="User">
<Value Profile="(Default)" />

View File

@@ -1,5 +1,4 @@
1001:4
1002:5
1002:5
1003:5
1005:5
1006:4
@@ -46,6 +45,7 @@
1058:5
1059:4
1060:5
1061:4
1062:5
1063:5
1064:4
@@ -67,4 +67,6 @@
1080:4
1081:4
1082:5
1061:4
1083:4
1084:5
1085:4

View File

@@ -1,4 +1,358 @@
[
{
"comment": "4.0.1 Lyney",
"gachaType": 301,
"scheduleId": 4,
"prefabPath": "GachaShowPanel_A145",
"titlePath": "UI_GACHA_SHOW_PANEL_A0145_TITLE",
"costItemId": 223,
"endTime": 1924992000,
"sortId": 982,
"rateUpItems4": [ 1083, 1032, 1014 ],
"rateUpItems5": [ 1084 ],
"fallbackItems3": [ 11301, 11302, 11306, 12301, 12302, 12305, 13303, 14301, 14302, 14304, 15301, 15302, 15304 ],
"fallbackItems4Pool1": [ 1014, 1020, 1023, 1024, 1025, 1027, 1031, 1032, 1034, 1036, 1039, 1043, 1044, 1045, 1048, 1053, 1055, 1056, 1064 ],
"fallbackItems4Pool2": [ 11401, 11402, 11403, 11405, 12401, 12402, 12403, 12405, 13401, 13407, 14401, 14402, 14403, 14409, 15401, 15402, 15403, 15405 ],
"fallbackItems5Pool1": [ 1003, 1016, 1042, 1035, 1041 ],
"fallbackItems5Pool2": [],
"weights4": [
[ 1, 510 ],
[ 8, 510 ],
[ 10, 10000 ]
],
"weights5": [
[ 1, 80 ],
[ 73, 80 ],
[ 90, 10000 ]
],
"poolBalanceWeights4": [
[ 1, 255 ],
[ 17, 255 ],
[ 21, 10455 ]
],
"poolBalanceWeights5": [
[ 1, 30 ],
[ 147, 150 ],
[ 181, 10230 ]
],
"bannerType": "EVENT"
},
{
"comment": "4.0.1 Yelan",
"gachaType": 400,
"scheduleId": 3,
"prefabPath": "GachaShowPanel_A146",
"titlePath": "UI_GACHA_SHOW_PANEL_A081_TITLE",
"costItemId": 223,
"endTime": 1924992000,
"sortId": 982,
"rateUpItems4": [ 1083, 1032, 1014 ],
"rateUpItems5": [ 1060 ],
"fallbackItems3": [ 11301, 11302, 11306, 12301, 12302, 12305, 13303, 14301, 14302, 14304, 15301, 15302, 15304 ],
"fallbackItems4Pool1": [ 1014, 1020, 1023, 1024, 1025, 1027, 1031, 1032, 1034, 1036, 1039, 1043, 1044, 1045, 1048, 1053, 1055, 1056, 1064 ],
"fallbackItems4Pool2": [ 11401, 11402, 11403, 11405, 12401, 12402, 12403, 12405, 13401, 13407, 14401, 14402, 14403, 14409, 15401, 15402, 15403, 15405 ],
"fallbackItems5Pool1": [ 1003, 1016, 1042, 1035, 1041 ],
"fallbackItems5Pool2": [],
"weights4": [
[ 1, 510 ],
[ 8, 510 ],
[ 10, 10000 ]
],
"weights5": [
[ 1, 80 ],
[ 73, 80 ],
[ 90, 10000 ]
],
"poolBalanceWeights4": [
[ 1, 255 ],
[ 17, 255 ],
[ 21, 10455 ]
],
"poolBalanceWeights5": [
[ 1, 30 ],
[ 147, 150 ],
[ 181, 10230 ]
],
"bannerType": "EVENT"
},
{
"comment": "4.0.1",
"gachaType": 302,
"scheduleId": 2,
"prefabPath": "GachaShowPanel_A147",
"titlePath": "UI_GACHA_SHOW_PANEL_A020_TITLE",
"costItemId": 223,
"endTime": 1924992000,
"sortId": 2,
"rateUpItems4": [ 11403, 12410, 15403, 13407, 14403 ],
"rateUpItems5": [ 15512, 15508 ],
"fallbackItems3": [ 11301, 11302, 11306, 12301, 12302, 12305, 13303, 14301, 14302, 14304, 15301, 15302, 15304 ],
"fallbackItems4Pool1": [ 13401, 14401, 12401, 11402, 15402 ],
"fallbackItems4Pool2": [],
"fallbackItems5Pool1": [ 11509, 13507 ],
"fallbackItems5Pool2": [],
"weights4": [
[ 1, 600 ],
[ 7, 600 ],
[ 8, 6600 ],
[ 10, 12600 ]
],
"weights5": [
[ 1, 100 ],
[ 62, 100 ],
[ 73, 7800 ],
[ 80, 10000 ]
],
"poolBalanceWeights4": [
[ 1, 255 ],
[ 17, 255 ],
[ 21, 10455 ]
],
"poolBalanceWeights5": [
[ 1, 30 ],
[ 147, 150 ],
[ 181, 10230 ]
],
"eventChance4": 75,
"eventChance5": 75,
"bannerType": "WEAPON"
},
{
"comment": "3.8.2 Sangonomiya Kokomi",
"gachaType": 301,
"scheduleId": 4,
"prefabPath": "GachaShowPanel_A142",
"titlePath": "UI_GACHA_SHOW_PANEL_A053_TITLE",
"costItemId": 223,
"endTime": 1924992000,
"sortId": 982,
"rateUpItems4": [ 1076, 1045, 1048 ],
"rateUpItems5": [ 1054 ],
"fallbackItems3": [ 11301, 11302, 11306, 12301, 12302, 12305, 13303, 14301, 14302, 14304, 15301, 15302, 15304 ],
"fallbackItems4Pool1": [ 1014, 1020, 1023, 1024, 1025, 1027, 1031, 1032, 1034, 1036, 1039, 1043, 1044, 1045, 1048, 1053, 1055, 1056, 1064 ],
"fallbackItems4Pool2": [ 11401, 11402, 11403, 11405, 12401, 12402, 12403, 12405, 13401, 13407, 14401, 14402, 14403, 14409, 15401, 15402, 15403, 15405 ],
"fallbackItems5Pool1": [ 1003, 1016, 1042, 1035, 1041 ],
"fallbackItems5Pool2": [],
"weights4": [
[ 1, 510 ],
[ 8, 510 ],
[ 10, 10000 ]
],
"weights5": [
[ 1, 80 ],
[ 73, 80 ],
[ 90, 10000 ]
],
"poolBalanceWeights4": [
[ 1, 255 ],
[ 17, 255 ],
[ 21, 10455 ]
],
"poolBalanceWeights5": [
[ 1, 30 ],
[ 147, 150 ],
[ 181, 10230 ]
],
"bannerType": "EVENT"
},
{
"comment": "3.8.2 Wanderer",
"gachaType": 400,
"scheduleId": 3,
"prefabPath": "GachaShowPanel_A143",
"titlePath": "UI_GACHA_SHOW_PANEL_A0109_TITLE",
"costItemId": 223,
"endTime": 1924992000,
"sortId": 982,
"rateUpItems4": [ 1076, 1045, 1048 ],
"rateUpItems5": [ 1075 ],
"fallbackItems3": [ 11301, 11302, 11306, 12301, 12302, 12305, 13303, 14301, 14302, 14304, 15301, 15302, 15304 ],
"fallbackItems4Pool1": [ 1014, 1020, 1023, 1024, 1025, 1027, 1031, 1032, 1034, 1036, 1039, 1043, 1044, 1045, 1048, 1053, 1055, 1056, 1064 ],
"fallbackItems4Pool2": [ 11401, 11402, 11403, 11405, 12401, 12402, 12403, 12405, 13401, 13407, 14401, 14402, 14403, 14409, 15401, 15402, 15403, 15405 ],
"fallbackItems5Pool1": [ 1003, 1016, 1042, 1035, 1041 ],
"fallbackItems5Pool2": [],
"weights4": [
[ 1, 510 ],
[ 8, 510 ],
[ 10, 10000 ]
],
"weights5": [
[ 1, 80 ],
[ 73, 80 ],
[ 90, 10000 ]
],
"poolBalanceWeights4": [
[ 1, 255 ],
[ 17, 255 ],
[ 21, 10455 ]
],
"poolBalanceWeights5": [
[ 1, 30 ],
[ 147, 150 ],
[ 181, 10230 ]
],
"bannerType": "EVENT"
},
{
"comment": "3.8.2",
"gachaType": 302,
"scheduleId": 2,
"prefabPath": "GachaShowPanel_A144",
"titlePath": "UI_GACHA_SHOW_PANEL_A020_TITLE",
"costItemId": 223,
"endTime": 1924992000,
"sortId": 2,
"rateUpItems4": [ 11405, 12402, 14410, 13401, 15401 ],
"rateUpItems5": [ 14512, 14506 ],
"fallbackItems3": [ 11301, 11302, 11306, 12301, 12302, 12305, 13303, 14301, 14302, 14304, 15301, 15302, 15304 ],
"fallbackItems4Pool1": [ 13401, 14401, 12401, 11402, 15402 ],
"fallbackItems4Pool2": [],
"fallbackItems5Pool1": [ 11509, 13507 ],
"fallbackItems5Pool2": [],
"weights4": [
[ 1, 600 ],
[ 7, 600 ],
[ 8, 6600 ],
[ 10, 12600 ]
],
"weights5": [
[ 1, 100 ],
[ 62, 100 ],
[ 73, 7800 ],
[ 80, 10000 ]
],
"poolBalanceWeights4": [
[ 1, 255 ],
[ 17, 255 ],
[ 21, 10455 ]
],
"poolBalanceWeights5": [
[ 1, 30 ],
[ 147, 150 ],
[ 181, 10230 ]
],
"eventChance4": 75,
"eventChance5": 75,
"bannerType": "WEAPON"
},
{
"comment": "3.8.1 Eula",
"gachaType": 301,
"scheduleId": 4,
"prefabPath": "GachaShowPanel_A139",
"titlePath": "UI_GACHA_SHOW_PANEL_A041_TITLE",
"costItemId": 223,
"endTime": 1924992000,
"sortId": 982,
"rateUpItems4": [ 1080, 1020, 1050 ],
"rateUpItems5": [ 1051 ],
"fallbackItems3": [ 11301, 11302, 11306, 12301, 12302, 12305, 13303, 14301, 14302, 14304, 15301, 15302, 15304 ],
"fallbackItems4Pool1": [ 1014, 1020, 1023, 1024, 1025, 1027, 1031, 1032, 1034, 1036, 1039, 1043, 1044, 1045, 1048, 1053, 1055, 1056, 1064 ],
"fallbackItems4Pool2": [ 11401, 11402, 11403, 11405, 12401, 12402, 12403, 12405, 13401, 13407, 14401, 14402, 14403, 14409, 15401, 15402, 15403, 15405 ],
"fallbackItems5Pool1": [ 1003, 1016, 1042, 1035, 1041 ],
"fallbackItems5Pool2": [],
"weights4": [
[ 1, 510 ],
[ 8, 510 ],
[ 10, 10000 ]
],
"weights5": [
[ 1, 80 ],
[ 73, 80 ],
[ 90, 10000 ]
],
"poolBalanceWeights4": [
[ 1, 255 ],
[ 17, 255 ],
[ 21, 10455 ]
],
"poolBalanceWeights5": [
[ 1, 30 ],
[ 147, 150 ],
[ 181, 10230 ]
],
"bannerType": "EVENT"
},
{
"comment": "3.8.1 Klee",
"gachaType": 400,
"scheduleId": 3,
"prefabPath": "GachaShowPanel_A140",
"titlePath": "UI_GACHA_SHOW_PANEL_A018_TITLE",
"costItemId": 223,
"endTime": 1924992000,
"sortId": 982,
"rateUpItems4": [ 1080, 1020, 1050 ],
"rateUpItems5": [ 1029 ],
"fallbackItems3": [ 11301, 11302, 11306, 12301, 12302, 12305, 13303, 14301, 14302, 14304, 15301, 15302, 15304 ],
"fallbackItems4Pool1": [ 1014, 1020, 1023, 1024, 1025, 1027, 1031, 1032, 1034, 1036, 1039, 1043, 1044, 1045, 1048, 1053, 1055, 1056, 1064 ],
"fallbackItems4Pool2": [ 11401, 11402, 11403, 11405, 12401, 12402, 12403, 12405, 13401, 13407, 14401, 14402, 14403, 14409, 15401, 15402, 15403, 15405 ],
"fallbackItems5Pool1": [ 1003, 1016, 1042, 1035, 1041 ],
"fallbackItems5Pool2": [],
"weights4": [
[ 1, 510 ],
[ 8, 510 ],
[ 10, 10000 ]
],
"weights5": [
[ 1, 80 ],
[ 73, 80 ],
[ 90, 10000 ]
],
"poolBalanceWeights4": [
[ 1, 255 ],
[ 17, 255 ],
[ 21, 10455 ]
],
"poolBalanceWeights5": [
[ 1, 30 ],
[ 147, 150 ],
[ 181, 10230 ]
],
"bannerType": "EVENT"
},
{
"comment": "3.8.1",
"gachaType": 302,
"scheduleId": 2,
"prefabPath": "GachaShowPanel_A141",
"titlePath": "UI_GACHA_SHOW_PANEL_A020_TITLE",
"costItemId": 223,
"endTime": 1924992000,
"sortId": 2,
"rateUpItems4": [ 11410, 15410, 12405, 13407, 14409 ],
"rateUpItems5": [ 12503, 14502 ],
"fallbackItems3": [ 11301, 11302, 11306, 12301, 12302, 12305, 13303, 14301, 14302, 14304, 15301, 15302, 15304 ],
"fallbackItems4Pool1": [ 13401, 14401, 12401, 11402, 15402 ],
"fallbackItems4Pool2": [],
"fallbackItems5Pool1": [ 11509, 13507 ],
"fallbackItems5Pool2": [],
"weights4": [
[ 1, 600 ],
[ 7, 600 ],
[ 8, 6600 ],
[ 10, 12600 ]
],
"weights5": [
[ 1, 100 ],
[ 62, 100 ],
[ 73, 7800 ],
[ 80, 10000 ]
],
"poolBalanceWeights4": [
[ 1, 255 ],
[ 17, 255 ],
[ 21, 10455 ]
],
"poolBalanceWeights5": [
[ 1, 30 ],
[ 147, 150 ],
[ 181, 10230 ]
],
"eventChance4": 75,
"eventChance5": 75,
"bannerType": "WEAPON"
},
{
"comment": "3.7.2 Alhaitham",
"gachaType": 301,

View File

@@ -1,4 +1,6 @@
11301:blue
11101:blue
11201:blue
11301:blue
11302:blue
11303:blue
11304:blue
@@ -25,6 +27,9 @@
11420:purple
11421:purple
11422:purple
11424:purple
11425:purple
11426:purple
11501:yellow
11502:yellow
11503:yellow
@@ -34,6 +39,8 @@
11510:yellow
11511:yellow
11512:yellow
12101:blue
12201:blue
12301:blue
12302:blue
12303:blue
@@ -57,12 +64,16 @@
12416:purple
12417:purple
12418:purple
12424:purple
12425:purple
12501:yellow
12502:yellow
12503:yellow
12504:yellow
12510:yellow
12511:yellow
13101:blue
13201:blue
13301:blue
13302:blue
13303:blue
@@ -81,6 +92,8 @@
13416:purple
13417:purple
13419:purple
13424:purple
13425:purple
13501:yellow
13502:yellow
13504:yellow
@@ -88,6 +101,8 @@
13507:yellow
13509:yellow
13511:yellow
14101:blue
14201:blue
14301:blue
14302:blue
14303:blue
@@ -110,6 +125,8 @@
14415:purple
14416:purple
14417:purple
14424:purple
14425:purple
14501:yellow
14502:yellow
14504:yellow
@@ -118,6 +135,8 @@
14509:yellow
14511:yellow
14512:yellow
15101:blue
15201:blue
15301:blue
15302:blue
15303:blue
@@ -143,6 +162,8 @@
15417:purple
15418:purple
15419:purple
15424:purple
15425:purple
15501:yellow
15502:yellow
15503:yellow
@@ -150,4 +171,4 @@
15508:yellow
15509:yellow
15511:yellow
20001:yellow
15512:yellow

View File

@@ -89,7 +89,6 @@
80089:Tatara Tales - Resolve the crisis at the Mikage Furnace.
80090:Echo of Fury - Complete "Orobashi's Legacy."
80091:Tales of Monstrous Madness - Collect the entire "Toki Alley Tales" series.
80092:Illustrious in Inazuma - Reach Reputation Lv. 10 in Inazuma.
80093:Lightning-Riding Adventurer (I) - Complete 6 Open World mechanism-activated Time Trial Challenges on Narukami Island, Kannazuka, and Yashiori Island in Inazuma.
80094:Lightning-Riding Adventurer (I) - Complete 12 Open World mechanism-activated Time Trial Challenges on Narukami Island, Kannazuka, and Yashiori Island in Inazuma.
80095:Lightning-Riding Adventurer (I) - Complete 24 Open World mechanism-activated Time Trial Challenges on Narukami Island, Kannazuka, and Yashiori Island in Inazuma.
@@ -103,13 +102,13 @@
80105:Lightning-Riding Treasure Hunter (II) - Open 40 chests on Watatsumi Island and Seirai Island in Inazuma.
80106:Lightning-Riding Treasure Hunter (II) - Open 80 chests on Watatsumi Island and Seirai Island in Inazuma.
80107:Lightning-Riding Treasure Hunter (II) - Open 160 chests on Watatsumi Island and Seirai Island in Inazuma.
80108:Seirai Stormchasers - Complete "Seirai Stormchasers"
80109:The Same Moonlight - Complete "The Moon-Bathed Deep"
80110:Lightning-Riding Adventurer (II) - Complete 6 Open World mechanism-activated Time Trial Challenges on Watatsumi Island and Seirai Island in Inazuma.
80111:Lightning-Riding Adventurer (II) - Complete 12 Open World mechanism-activated Time Trial Challenges on Watatsumi Island and Seirai Island in Inazuma.
80112:Lightning-Riding Adventurer (II) - Complete 24 Open World mechanism-activated Time Trial Challenges on Watatsumi Island and Seirai Island in Inazuma.
80108:Seirai Stormchasers - Complete "Seirai Stormchasers"
80109:The Same Moonlight - Complete "The Moon-Bathed Deep"
80113:Continental Explorer: Tsurumi Island - Light up the Tsurumi Island map.
80114:Fog's Edge - Unlock all Teleport Waypoints in Tsurumi Island.
80114:Fog's Edge - Unlock all Teleport Waypoints on Tsurumi Island.
80115:Sanctuary Pilgrim: Tsurumi Island - Unlock all the Shrines of Depths on Tsurumi Island.
80116:Flashes in the Night - Follow 6 Electro Seelie on Tsurumi Island.
80119:Foggy Guidance - Follow 6 Seelie on Tsurumi Island to their Seelie Courts.
@@ -157,7 +156,7 @@
80161:Forest Roamer - Unlock all Teleport Waypoints in the following areas in Sumeru: Avidya Forest, Lokapala Jungle, Ardravi Valley, Ashavan Realm, Vissudha Field, Lost Nursery, and Vanarana.
80162:Sanctuary Pilgrim: Sumeru Boscage - Unlock all the Shrines of Depths in the following areas in Sumeru: Avidya Forest, Lokapala Jungle, Ardravi Valley, Ashavan Realm, Vissudha Field, Lost Nursery, and Vanarana.
80163:Fluorescent Bloom - Upgrade the Statues of The Seven in Sumeru to their maximum level.
80164:Culmination of the Great Dream - Reach the Max Level of the Tree of Dreams in Vanarana
80164:Culmination of the Great Dream - Reach the Max Level of the Tree of Dreams in Vanarana.
80165:Woodland Guide - Follow a total of 10 Seelie to their Seelie Courts in Avidya Forest, Lokapala Jungle, Ardravi Valley, Ashavan Realm, Vissudha Field, Lost Nursery, and Vanarana.
80166:Woodland Guide - Follow a total of 20 Seelie to their Seelie Courts in Avidya Forest, Lokapala Jungle, Ardravi Valley, Ashavan Realm, Vissudha Field, Lost Nursery, and Vanarana.
80167:Woodland Guide - Follow a total of 40 Seelie to their Seelie Courts in Avidya Forest, Lokapala Jungle, Ardravi Valley, Ashavan Realm, Vissudha Field, Lost Nursery, and Vanarana.
@@ -205,16 +204,15 @@
80215:Chaos Divided - Defeat 2 or more Character Cards from the opponent's deck in one single action a total of {param0} time(s) in victorious games.
80216:Chaos Divided - Defeat 2 or more Character Cards from the opponent's deck in one single action a total of {param0} time(s) in victorious games.
80217:Chaos Divided - Defeat 2 or more Character Cards from the opponent's deck in one single action a total of {param0} time(s) in victorious games.
80218:Legendary High Roller - Obtain {param0} Lucky Coins in total
80219:Legendary High Roller - Obtain {param0} Lucky Coins in total
80220:Legendary High Roller - Obtain {param0} Lucky Coins in total
80218:Legendary High Roller - Obtain {param0} Lucky Coins in total.
80219:Legendary High Roller - Obtain {param0} Lucky Coins in total.
80220:Legendary High Roller - Obtain {param0} Lucky Coins in total.
80221:Miniaturized Dice-Shaker - Deal 8 or more points of damage in one single action a total of {param0} time(s) in victorious games.
80222:Miniaturized Dice-Shaker - Deal 8 or more points of damage in one single action a total of {param0} time(s) in victorious games.
80223:Miniaturized Dice-Shaker - Deal 8 or more points of damage in one single action a total of {param0} time(s) in victorious games.
80224:Continental Explorer: Dune Dreams (II) - Light up the maps of the following area in Sumeru: Desert of Hadramaveth.
80225:Over Sandstorms and Mirages (II) - Unlock all Teleport Waypoints in the following area in Sumeru: Desert of Hadramaveth.
80226:Sanctuary Pilgrim: Dune Dreams (II) - Unlock all the Shrines of Depths in the following area in Sumeru: Desert of Hadramaveth.
80227:The Dirge of Bilqis - Complete "The Dirge of Bilqis."
80228:The Desert Will Guide You Home (II) - Follow {param0} Seelie in the Desert of Hadramaveth to their Seelie Courts.
80229:The Desert Will Guide You Home (II) - Follow {param0} Seelie in the Desert of Hadramaveth to their Seelie Courts.
80230:The Desert Will Guide You Home (II) - Follow {param0} Seelie in the Desert of Hadramaveth to their Seelie Courts.
@@ -224,6 +222,7 @@
80234:Quicksand Adventurer (II) - Complete {param0} Open World Time Trial Challenges in the Desert of Hadramaveth.
80235:Quicksand Adventurer (II) - Complete {param0} Open World Time Trial Challenges in the Desert of Hadramaveth.
80236:Quicksand Adventurer (II) - Complete {param0} Open World Time Trial Challenges in the Desert of Hadramaveth.
80227:The Dirge of Bilqis - Complete "The Dirge of Bilqis."
80237:Continental Explorer: Blessed Hamada - Light up the maps of the following areas in Sumeru: Gavireh Lajavard and Realm of Farakhkert.
80238:Descending Into the Depths of Desolation - Unlock all Teleport Waypoints in the following areas in Sumeru: Gavireh Lajavard and Realm of Farakhkert.
80239:Sanctuary Pilgrim: Blessed Hamada - Unlock all the Shrines of Depths in the following areas in Sumeru: Gavireh Lajavard and Realm of Farakhkert.
@@ -236,8 +235,28 @@
80246:Badlands Adventurer - Complete a total of {param0} Open World Time Trial Challenges in Gavireh Lajavard and Realm of Farakhkert.
80247:Badlands Adventurer - Complete a total of {param0} Open World Time Trial Challenges in Gavireh Lajavard and Realm of Farakhkert.
80248:Badlands Adventurer - Complete a total of {param0} Open World Time Trial Challenges in Gavireh Lajavard and Realm of Farakhkert.
80249:Khvarena of Good and Evil - Complete "Khvarena of Good and Evil."
80250:Alkanet Amrita - Upgrade the Amrita Pool to its maximum level.
80249:Khvarena of Good and Evil - Complete "Khvarena of Good and Evil."
80252:Continental Explorer: Land of Harmonious Springs (I) - Light up the maps of the following areas in Fontaine: Court of Fontaine Region, Belleau Region, and Beryl Region.
80253:Font of All Waters (I) - Unlock all Teleport Waypoints in the following areas in Fontaine: Court of Fontaine Region, Belleau Region, and Beryl Region.
80254:Sanctuary Pilgrim: Land of Harmonious Springs (I) - Unlock all the Shrines of Depths in the following areas in Fontaine: Court of Fontaine Region, Belleau Region, and Beryl Region.
80255:Like Waters Clear - Upgrade the Statues of The Seven in Fontaine to their maximum level.
80256:Dew Song - Reach the Max Level of the Fountain of Lucine in the Court of Fontaine.
80257:Tides Will Guide You Home (I) - Follow {param0} Seelie in the Court of Fontaine Region, Belleau Region, and Beryl Region to their Seelie Courts.
80258:Tides Will Guide You Home (I) - Follow {param0} Seelie in the Court of Fontaine Region, Belleau Region, and Beryl Region to their Seelie Courts.
80259:Tides Will Guide You Home (I) - Follow {param0} Seelie in the Court of Fontaine Region, Belleau Region, and Beryl Region to their Seelie Courts.
80260:Waveriding Treasure Hunter (I) - Open {param0} chests in the Court of Fontaine Region, Belleau Region, and Beryl Region.
80261:Waveriding Treasure Hunter (I) - Open {param0} chests in the Court of Fontaine Region, Belleau Region, and Beryl Region.
80262:Waveriding Treasure Hunter (I) - Open {param0} chests in the Court of Fontaine Region, Belleau Region, and Beryl Region.
80263:Waveriding Adventurer (I) - Complete {param0} Open World Time Trial Challenges in the Court of Fontaine Region, Belleau Region, and Beryl Region.
80264:Waveriding Adventurer (I) - Complete {param0} Open World Time Trial Challenges in the Court of Fontaine Region, Belleau Region, and Beryl Region.
80265:Waveriding Adventurer (I) - Complete {param0} Open World Time Trial Challenges in the Court of Fontaine Region, Belleau Region, and Beryl Region.
80266:Ann in Wonderland - Complete the tale of the Narzissenkreuz Adventure Team.
80267:Limner, Dreamer, and Robotic Dog - Discover the secret to be found within Elynas.
80268:Land of Fair Springs - Obtain the power of Hydro.
80269:Renart the Deceiver - Collect the entire "Fables de Fontaine" series.
80270:Robben versus Chesterton - Collect the entire "Robben versus Chesterton: Iridescent Brooch" series.
80271:Compendium of Misery - Collect the entire "The History of the Decline and Fall of Remuria" series.
81000:Overlooking View - Reach the very top of Qingyun Peak.
81001:The Remains of the Gale - Reach the top of the tower in Stormterror's Lair.
81002:"Seeds of Stories, Brought by the Wind..." - Reach the nameless island northeast of Mondstadt.
@@ -257,6 +276,7 @@
81023:Friends the World Over - Meet all sorts of people during your adventure.
81024:Megastar in Mondstadt - Reach Reputation Lv. 8 in Mondstadt.
81025:Legend in Liyue - Reach Reputation Lv. 8 in Liyue.
80092:Illustrious in Inazuma - Reach Reputation Lv. 10 in Inazuma.
81026:QUEST CLEAR - Complete 10 Bounties.
81027:QUEST CLEAR - Complete 20 Bounties.
81028:QUEST CLEAR - Complete 30 Bounties.
@@ -453,7 +473,7 @@
81238:Vamadha-Go-Round - Turn every Vamadha that holds a hidden treasure chest.
81239:In the Name of Anfortas - Visit the place where the heroes met their end.
81240:Call of the Nameless City - Quiet the mysterious parchment.
81241:Walking with Water and Wind - Complete "Until Vana is Healed."
81241:Walking with Water and Wind - Complete "Until Vana Is Healed."
81242:...Let Me Fade With Memory - Complete "Vimana Agama."
81243:Now Let Time Resume - Complete Aradasha's unfinished business.
81244:Please Play Safely - Play with the Aranara in the forest.
@@ -538,6 +558,7 @@
81327:A Fascinating Journey - Complete "An Artist Adrift."
81328:"This Mystery Is Solved!" - Complete "Monumental Study."
81329:Homeward-Bound Spirits - Complete "Pale Fire."
81339:The Sea of Fertility - All the ponds in the Vourukasha Oasis are now revitalized.
81331:The Brave Shall Not Falter - Pass all the trials set by Jarjar.
81332:Bifröst - Complete all the "Soul Bell" challenges.
81333:Seven Dish Dance - Complete all "Percussive Prancing Mushroom" challenges.
@@ -546,7 +567,39 @@
81336:Soaring in the Skies of Sary-Ozek - Keep Sorush in flight for a while.
81337:Whose Descendant Are You, and What's Your Name? - Call upon the power of Khvarena with Sorush for the first time.
81338:Use the Force, Sorush - Launch Nirodha Fruits with Sorush's help to melt {param0} crystals condensed from Amrita.
81339:The Sea of Fertility - All the ponds in the Vourukasha Oasis are now revitalized.
81340:Angle Eraser - Suppress the Beastly Rift using the power of the crystals.
81341:Core Cooling - Cause the roiling lake to become placid once more.
81342:The White Ship - "She's sailing on the sea of dreams..."
81344:Encyclopedia of Natural Philosophy - Use the glass wall and an indecipherable book to discover the gathering place of an old society.
81345:A Fontainian Message - Have a friendly chat with Virgil.
81346:Nothing but a Hound Dog... - Help Mamere fix Seymour.
81347:It's Fish, I Added Fish - Taste the wonderful "birthday cake" with the Melusine.
81348:Welcome to Fontaine - Complete a cruise on the aquabus.
81349:Sogno di Volare - Complete a flight with the Antoine Roger Aircraft.
81350:Birth of the Modern Clock - Help Puca find a way to "use" the ore.
81351:Waterworld Future - Gaze upon the "water" beneath the "surface."
81352:Aesthetics of Ugliness - And thus does Fontaine take two steps further toward beauty.
81353:Like Tears in the Rain - Find the impostor amidst the Hunter's Rays.
81355:These Are a Few of My... - ...Favorite Things.
81356:An Eye for an Eye - Take care of those annoying Bullet Barnacles!
81357:Do You Believe In Rapture? - Help build a Blubberbeast paradise.
81358:Hardships Experienced... - "To obtain the holy blade that might defeat the demon king, the knight broke into the ancient city, sealed using magic..."
81359:And After That... - "The knight defeated the demon king, saving the imprisoned princess. Light has returned to the kingdom..."
81360:A Study in Sable - Find a more... special subject of the Institute of Natural Philosophy's study.
81361:Twenty Thousand Leagues Under the Sea - Go with the flow...
81362:Truly Mouthwatering! - Help Henri change his fate.
81363:Song of the Ancients - Hear now the melody of ancient eons.
81364:Ninianne of the Lake - Defeat the local legend, Ninianne of the Lake.
81365:Vivianne of the Lake - Defeat the local legend, Vivianne of the Lake.
81366:Fontaine Expects That Everyone Will Do Their Duty - An item, returned to its rightful owner...
81367:In Search of Frittered Time - Reach Reputation Lv. 10 in Fontaine.
81368:Blubby, Chubby, Creative Evolution - Accompany the small Blubberbeast as it grows big and strong.
81369:Ocean Circuit Judge - Defeat the local legend, Ocean Circuit Judge.
81370:Iron Viscount - Defeat the local legend, Iron Viscount.
81371:Dobharcu, Lord of the Hidden - Defeat the local legend, Dobharcu, Lord of the Hidden.
81372:Fading Veteran - Defeat the local legend, Fading Veteran.
81373:Swords of the Gorge - Defeat the local legends, the Swords of the Gorge.
81374:The Fairy Knight Twins - Defeat the local legends, the Fairy Knight Twins
82001:Nothing Special, Just Practice - Hit a falcon mid-flight with your bow.
82002:Master Sniper - Strike an opponent's weak point from afar with an Aimed Shot.
82003:Der Freischütz - Strike an opponent's weak point from extremely far away with an Aimed Shot.
@@ -642,6 +695,7 @@
82096:I'll Skip the Spa, Thanks - Defeat a Mirror Maiden without being trapped by its Water Prison.
82097:It's Quiet... Too Quiet... - Defeat the Pyro Hypostasis after it enters its extinguished state only once
82098:The Battle of Narukami Island - Defeat the Perpetual Mechanical Array in its weakened state.
82109:The Finishing Touch - Defeat Azhdaha without ever having gained a shield.
82099:If I Run Fast Enough... - Defeat a Maguu Kenki without being hit by its phantom's attacks.
82100:In This Solemn Matter Let No One Interfere! - Defeat a Maguu Kenki without triggering its "Oushi no Omote" parry.
82101:Fine, I'll Do It Myself - Defeat a Primo Geovishap without reflecting its Primordial Shower.
@@ -652,7 +706,6 @@
82106:Fight Fire With Fire - Defeat a Kairagi: Fiery Might while their weapon is infused with Pyro.
82107:Ride the Lightning - Defeat a Kairagi: Dancing Thunder while their weapon is infused with Electro.
82108:I Hear Thunder... - Be struck by the lightning called down by a Crackling Axe Mitachurl...
82109:The Finishing Touch - Defeat Azhdaha without ever having gained a shield.
82110:Dry Clean - Defeat the Hydro Hypostasis without destroying a single one of its Water Droplets (except when it is restoring HP.)
82111:Bio-Oceanic Weapon - Be hit by a certain animal created by the Hydro Hypostasis...
82112:Love and Non-Communication - Defeat a Thunder Manifestation without ever being locked onto.
@@ -687,7 +740,7 @@
82141:Daisy, Daisy - Break the Algorithm of Semi-Intransient Matrix of Overseer Network by hitting its cores with the Quicken, Aggravate, or Spread reactions.
82142:Stop It, Mr. Robot! - Interrupt the charged attack of the Aeonblight Drake by attacking the core on its head.
82143:Nanomachines, Son! - Defeat an activated Jadeplume Terrorshroom while it is unleashing a powerful skill...
82144:Establishing a Beachhead - Witness the overclocking impact of the Algorithm of Semi-Intransient Matrix of Overseer Network
82144:Establishing a Beachhead - Witness the overclocking impact of the Algorithm of Semi-Intransient Matrix of Overseer Network.
82145:The Invisible Hand - Defeat the Primal Construct without disabling its invisible state.
82146:Grassy Blasty, Sparks 'n' Splash - Defeat 4 opponents with Burgeon within 2s (x1).
82147:Grassy Blasty, Sparks 'n' Splash - Defeat 4 opponents with Burgeon within 2s (x5).
@@ -710,6 +763,12 @@
82167:Proof by Exhaustion - Defeat Iniquitous Baptists of all possible elemental combinations.
82168:When You Say Nothing at All - Destroy all Elemental Rings to paralyze the Iniquitous Baptist when it begins to channel its attack.
82169:Like the Sun's Passage - Defeat the Guardian of Apep's Oasis without any character being attacked by aftershocks of the apocalypse.
82175:The White Path Between Two Rivers - Lose in the duel against the legendary Hunter's Ray...
82176:Cell, Splinter - Use Pneuma or Ousia attacks to interrupt the Breacher Primus's stress state.
82177:Too Hot to Handle! - Constantly attempt to freeze Tainted Hydro Phantasms...
82178:Funerary Storm - Use a Pneuma attack to weaken the whirlwind Coppelia creates during the performance's climax.
82179:The King Is Dead, Long Live the King! - Interrupt the Emperor of Fire and Iron's Searing Coronation.
82180:Icebound Oath - Use an Ousia attack to remove the shield that Coppelius deploys during the performance's climax.
84000:The End of the Beginning - Complete the Mondstadt Archon Quests.
84001:The Outlander Who Caught the Wind - Complete "The Outlander Who Caught the Wind."
84002:For a Tomorrow Without Tears - Complete "For a Tomorrow Without Tears."
@@ -734,10 +793,8 @@
84021:I'll Let You Off... This Time - Defeat Childe.
84022:Derailed - Defeat the Overlord of the Vortex.
84023:Final Farewell - Take part in the Rite of Parting.
84024:A New Star Approaches - Complete "A New Star Approaches".
84024:A New Star Approaches - Complete "A New Star Approaches."
84025:Gears of Destiny - Complete the quest "Bough Keeper: Dainsleif".
84026:Fantastic Voyage: Prologue - Complete "Fantastic Voyage" and unlock all endings.
84028:Behold, Mine Evil-Espying Eye! - Correctly interpret all clues.
84029:The Bandit, the Lunatic, and the Pitch-Black Enigma - Uncover the Grand Thief's fate.
84030:Where Fate Comes to a Crossroads - Escape the eerie ruins.
84031:Sneering at the Power of the Gods - Learn of the "Loom of Fate"...
@@ -763,8 +820,6 @@
84051:Their Wishes - Bring all the wishes upon the Statue of the Omnipresent God to fruition.
84052:Omnipresence Over Mortals - Complete "Omnipresence Over Mortals."
84053:"All Is Well" - Help Wang Ping'an renovate Pervases' temple.
84054:Anna's Adventures - Help Anna become an adventurer.
84055:Prelude to the Journey - A young man is about to embark on a long journey...
84056:Rise of the Jade Chamber - Complete the reconstruction of the Jade Chamber.
84057:Majesty of the Deep - Defeat Beisht, Avenger of the Vortex.
84058:A Former Dream - Witness the truth of the village's history.
@@ -805,55 +860,14 @@
84093:The Sickness Unto Near-Death - Create the medicine that will bring hope.
84094:The Far Side of Fate - Witness the miracle granted by the "Sinner."
84095:Caribert - Complete "Caribert."
84100:Archaic Lord of Lightning and Blitz - Witness the awesome meteorological power of Bennett's phenomenally bad luck.
84101:The Power of Luck - Activate the mechanisms and obtain the treasure without making any mistakes.
84102:A Line That May Be Crossed - Complete "Wellspring of Healing" and unlock all endings.
84103:A Maid of Strength and Virtue - Complete "Chivalric Training" and unlock all endings.
84104:Evil Is Banished - Complete "Signs of Evil" and unlock all endings.
84105:Mondstadt's Spiciest Surprise - Sample Barbara's Chilibrew.
84106:"...For I Am Duty Bound" - Help Noelle discover the source of her strength.
84107:Red Hot Chili Popsicles - Make a popsicle using the wrong recipe and provoke Chongyun's Pure-Yang Spirit.
84108:An Idol's Last Line of Defense - Successfully persuade Albert and Barbara's other fans to leave.
84109:A World Known Only Unto Roses - Read Noelle's study notes.
84110:Stress Relief - Complete "Knightly Exam Prep" and unlock all endings.
84111:Invulnerable Maid-Knight - Listen to "A Knight's Journey Through Liyue" with Noelle.
84112:Mondstadt's Note-Taker General - Read Noelle's study notes.
84113:Diona Special, Stirred, Not Shaken - Complete "The Cat and the Cocktail" and unlock all endings.
84114:But There's a Catch... - Help Diona find a special base drink.
84115:Kitten Queen - Bring all the cats back to The Cat's Tail.
84116:Everyone's Happy - Complete "A Housekeeper's Daily Chores" and unlock all endings.
84117:Housekeeper Extraordinaire - Complete the big cleanup within the time limit
84118:From the Sea Never Returning - Learn of Inu Shoushou's story together with Thoma
84119:Taller by Half - Complete "Yoohoo Art: Seichou no Jutsu" and unlock all endings.
84120:Mujina-Class Ninja - Obtain Sayu's highest rating during agility training.
84121:Dish Effect: Mobility Decreased - You were unable to prevent Sayu's reckless consumption...
84122:Honorary Crux Member - Complete "When the Crux Shines Bright" and unlock all endings.
84123:Wine Unburdens - Take part in the Qingce banquet with Beidou
84124:Guyun Buyers' Club - Find out the truth behind the deal Beidou's making
84125:General of Watatsumi - Complete "The Canine General's Special Operations" and unlock all endings
84126:Changing Times - Draw all fortune slips at the Grand Narukami Shrine.
84127:To Tell or Not to Tell, That Is the Question - Discover Ms. Hina's true identity at the Yae Publishing House.
84128:Megrez's Companion Star - Complete "The Jade Chamber's Returning Guest" and unlock all endings.
84129:You've Got to Have Reserves - Fish? The more the merrier, of course!
84130:Overprotectiveness - A single stone births a thousand ripples. It seems like Ningguang's day off is not to be.
84131:The Lingering Song - Complete "A Song That Knows Grace" and unlock all endings.
84132:May This Moment Be Made to Last - Take a commemorative photo with Yun Jin.
84133:A Strict Master Trains a Talented Pupil - Complete the practice session without hitting a single blue scarecrow.
84134:Arataki Gang Chief Advisor - Complete "The Gang's Daily Deeds" and unlock all endings.
84135:One More Look! - Gaze upon the glory that is Kuki Shinobu in a shrine maiden outfit.
84136:"Upstairs..." - Be dissuaded before alerting Kujou Sara and Kuki Shinobu.
84137:You Thought We Were For Real, Eh? - Complete "Trap 'Em by Storm" and unlock all endings.
84138:An Ideal Detective Am I - Correctly analyze the motives and the truth behind the crime the first time.
84139:Sangonomiya Supplications - Ask Gorou whether Kokomi knows about the happenings on Watatsumi Island.
84140:Optimal Solution - Complete "A Confounding Conundrum" and unlock all endings.
84141:To You in a Hundred Years - Read all the letters sent to Faruzan.
84142:Mechanics: From Beginner to...? - Guess correctly the smallest number of moves it will take to solve a seven-layer Pagoda Stack.
84143:The Name Is Layla - Complete "Ever Silent Stars" and unlock all endings.
84144:She's Already Tense - Help Layla finish her thesis without causing her further anxiety.
84145:Secret of Seelie and the Star-Lit Sky - Obtain the authentic letter of the Wisdom Seelie.
84146:Art and Life - Complete "The Pendulum of Weal and Woe" and unlock all endings.
84147:School Days - Find the annotated books in the House of Daena.
84148:An Architect's Romanticism - Chat about the future with Kaveh in the desert.
84096:Like Water Disappearing Into Water - Hear about the "prophecy" that has been circulating around Fontaine.
84097:A Detective in Action - Investigate the truth of the incident as Lyney's "attorney."
84098:A Twist of Great Magic - The Oratrice Mecanique d'Analyse Cardinale has delivered a verdict of not guilty.
84099:Prelude of Blancheur and Noirceur - Complete "Prelude of Blancheur and Noirceur."
84300:Lennék én folyóvíz - Hear the Oceanid's call and connect with her consciousness.
84301:Once Upon a Time in Fleuve Cendre - Learn about Navia's father at the Spina di Rosula's stronghold.
84302:Tragedy Repeats Itself - Reveal the truth behind the "serial disappearances case."
84303:As Light Rain Falls Without Reason - Complete "As Light Rain Falls Without Reason."
84501:...Odomu? - Successfully conduct cultural exchange with the hilichurls in "Language Exchange."
84502:Yo dala? - Successfully conduct cultural exchange with the hilichurls in "Poetry Exchange."
84503:Perfectionist - Complete all of Tsarevich's commissions flawlessly in "Reliable Helper."
@@ -894,6 +908,8 @@
84540:Guess Who? - Find out who Zhenyu really is.
84541:Well, At Least It Ended - Hear Junkichi out as he puts his story together.
84542:Her and Her Cat - Follow Neko up Mt. Yougou to find "Hibiki"'s trail.
84054:Anna's Adventures - Help Anna become an adventurer.
84055:Prelude to the Journey - A young man is about to embark on a long journey...
84543:Aha! What's on the Hook? - Fish some strange things up with Kayvan...
84544:Kalimi's Fungus - Watch Hatim make a killing on the exchange!
84545:When Wealth Comes A-Knockin' - Give Hatim some Apple Cider.
@@ -917,6 +933,11 @@
84563:A Lingering Fragrance - Witness Nermin's tale.
84564:Swordseeker - Witness the tale of Lan and the "Unseen Razor."
84565:To Walk The Horizon...? - Witness Sun Yu's tale.
84566:Office on the Avenue - Witness various miscellaneous matters in the Court of Fontaine.
84567:Not Your Average Joe - Brew a special blend of coffee.
84568:Aesthetic Critique - Listen to Depierris' theories regarding "aesthetics."
84569:Second Childhood - Play with the kids, and witness their story.
84570:A Sudden Squall - Witness Iaune's work travails.
85000:Nothing to Lose But Time - Unlock the secrets of two sundials.
85001:Interview With a Bygone God - Hear the story of a bygone deity.
85002:Crouching Dragon, Hidden Chi - Learn about the tale of the Chi.
@@ -924,6 +945,60 @@
85004:Shadow Over Luhua Pool - Help Vermeer get the scenery of his dreams.
85005:Ready Player Zero - Play a simple game with Childish Jiang.
85006:Trees Should Blend Their Roots and Shade, for That Is Where the Home Is Made - Witness the story of Yuan Hong's household.
84026:Fantastic Voyage: Prologue - Complete "Fantastic Voyage" and unlock all endings.
84100:Archaic Lord of Lightning and Blitz - Witness the awesome meteorological power of Bennett's phenomenally bad luck.
84101:The Power of Luck - Activate the mechanisms and obtain the treasure without making any mistakes.
84104:Evil Is Banished - Complete "Signs of Evil" and unlock all endings.
84028:Behold, Mine Evil-Espying Eye! - Correctly interpret all clues.
84107:Red Hot Chili Popsicles - Make a popsicle using the wrong recipe and provoke Chongyun's Pure-Yang Spirit.
84102:A Line That May Be Crossed - Complete "Wellspring of Healing" and unlock all endings.
84108:An Idol's Last Line of Defense - Successfully persuade Albert and Barbara's other fans to leave.
84105:Mondstadt's Spiciest Surprise - Sample Barbara's Chilibrew.
84103:A Maid of Strength and Virtue - Complete "Chivalric Training" and unlock all endings.
84106:"...For I Am Duty Bound" - Help Noelle discover the source of her strength.
84109:A World Known Only Unto Roses - Read Noelle's study notes.
84110:Stress Relief - Complete "Knightly Exam Prep" and unlock all endings.
84111:Invulnerable Maid-Knight - Listen to "A Knight's Journey Through Liyue" with Noelle.
84112:Mondstadt's Note-Taker General - Read Noelle's study notes.
84113:Diona Special, Stirred, Not Shaken - Complete "The Cat and the Cocktail" and unlock all endings.
84114:But There's a Catch... - Help Diona find a special base drink.
84115:Kitten Queen - Bring all the cats back to The Cat's Tail.
84116:Everyone's Happy - Complete "A Housekeeper's Daily Chores" and unlock all endings.
84117:Housekeeper Extraordinaire - Complete the big cleanup within the time limit
84118:From the Sea Never Returning - Learn of Inu Shoushou's story together with Thoma
84119:Taller by Half - Complete "Yoohoo Art: Seichou no Jutsu" and unlock all endings.
84120:Mujina-Class Ninja - Obtain Sayu's highest rating during agility training.
84121:Dish Effect: Mobility Decreased - You were unable to prevent Sayu's reckless consumption...
84122:Honorary Crux Member - Complete "When the Crux Shines Bright" and unlock all endings.
84123:Wine Unburdens - Take part in the Qingce banquet with Beidou
84124:Guyun Buyers' Club - Find out the truth behind the deal Beidou's making
84125:General of Watatsumi - Complete "The Canine General's Special Operations" and unlock all endings
84126:Changing Times - Draw all fortune slips at the Grand Narukami Shrine.
84127:To Tell or Not to Tell, That Is the Question - Discover Ms. Hina's true identity at the Yae Publishing House.
84128:Megrez's Companion Star - Complete "The Jade Chamber's Returning Guest" and unlock all endings.
84129:You've Got to Have Reserves - Fish? The more the merrier, of course!
84130:Overprotectiveness - A single stone births a thousand ripples. It seems like Ningguang's day off is not to be.
84131:The Lingering Song - Complete "A Song That Knows Grace" and unlock all endings.
84132:May This Moment Be Made to Last - Take a commemorative photo with Yun Jin.
84133:A Strict Master Trains a Talented Pupil - Complete the practice session without hitting a single blue scarecrow.
84134:Arataki Gang Chief Advisor - Complete "The Gang's Daily Deeds" and unlock all endings.
84135:One More Look! - Gaze upon the glory that is Kuki Shinobu in a shrine maiden outfit.
84136:"Upstairs..." - Be dissuaded before alerting Kujou Sara and Kuki Shinobu.
84137:You Thought We Were For Real, Eh? - Complete "Trap 'Em by Storm" and unlock all endings.
84138:An Ideal Detective Am I - Correctly analyze the motives and the truth behind the crime the first time.
84139:Sangonomiya Supplications - Ask Gorou whether Kokomi knows about the happenings on Watatsumi Island.
84140:Optimal Solution - Complete "A Confounding Conundrum" and unlock all endings.
84141:To You in a Hundred Years - Read all the letters sent to Faruzan.
84142:Mechanics: From Beginner to...? - Guess correctly the smallest number of moves it will take to solve a seven-layer Pagoda Stack.
84143:The Name Is Layla - Complete "Ever Silent Stars" and unlock all endings.
84144:She's Already Tense - Help Layla finish her thesis without causing her further anxiety.
84145:Secret of Seelie and the Star-Lit Sky - Obtain the authentic letter of the Wisdom Seelie.
84146:Art and Life - Complete "The Pendulum of Weal and Woe" and unlock all endings.
84147:School Days - Find the annotated books in the House of Daena.
84148:An Architect's Romanticism - Chat about the future with Kaveh in the desert.
84149:Make Merry - Complete "Shenanigans and Sweet Wine" and unlock all endings.
84150:Lucky Coin - Participate in the wager set up by Kaeya.
84151:Shh... Listen! - Listen to the voice coming from the confinement room.
86001:You Came, You Saw, We Co-Oped - Complete Domains together with other players 5 times.
86002:You Came, You Saw, We Co-Oped - Complete Domains together with other players 20 times.
86003:You Came, You Saw, We Co-Oped - Complete Domains together with other players 100 times.
@@ -937,13 +1012,13 @@
86011:This Is Fine - Defeat a Pyro Regisvine in Co-Op Mode.
86012:A Fish Called Rhodeia - Defeat an Oceanid in Co-Op Mode.
86013:Wolf Pact - Defeat the king of Wolvendom in Co-Op Mode.
86021:A Delusion's Abilities Don't Decide a Battle's Outcome - Defeat Childe in Co-Op Mode.
86015:Moving Mountains - Defeat a Primo Geovishap in Co-Op Mode.
86016:Blast From the Past - Defeat Azhdaha in Co-Op Mode.
86017:Put on Ice - Defeat a Cryo Hypostasis in Co-Op Mode.
86018:No Strings Attached, Anymore - Defeat a Maguu Kenki in Co-Op Mode.
86019:Operation Bonfire - Defeat a Pyro Hypostasis in Co-Op Mode.
86020:The Not-So-Perpetual Mechanical Array - Defeat a Perpetual Mechanic Array in Co-Op Mode.
86021:A Delusion's Abilities Don't Decide a Battle's Outcome - Defeat Childe in Co-Op Mode.
86022:Our Hearts as One - Defeat a Thunder Manifestation in Co-Op Mode.
86023:Water, Basically - Defeat a Hydro Hypostasis in Co-Op Mode.
86024:Dashing Through the Snow... and the Flames - Defeat Signora in Co-Op Mode.
@@ -951,4 +1026,13 @@
86026:Brave the Lightning's Glow... - Defeat the Raiden Shogun in Co-Op Mode.
86027:Surpassing the Ancients' Wisdom - Defeat the Ruin Serpent in Co-Op Mode.
86028:I'm a Flexitarian - Defeat a Jadeplume Terrorshroom in Co-Op Mode.
86029:Electric Shock Hazard - Defeat an Electro Regisvine in Co-Op Mode.
86029:Electric Shock Hazard - Defeat an Electro Regisvine in Co-Op Mode.
86030:End of the Eternal Return - Defeat the Aeonblight Drake in Co-Op Mode.
86031:Ever So Slightly Inferior - Defeat the Algorithm of Semi-Intransient Matrix of Overseer Network in Co-Op Mode.
86032:The Greenery Out of Space - Defeat a Dendro Hypostasis in Co-Op Mode.
86033:Dance Like You Want to Win! - Defeat Shouki no Kami, the Prodigal in Co-Op Mode.
86034:Desert-Dwellers' Rite of Passage - Defeat the Setekh Wenut in Co-Op Mode.
86035:Presumption of Guilt - Defeat the Iniquitous Baptist in Co-Op Mode.
86036:Proof of the Reed Sea Conqueror - Defeat the Guardian of Apep's Oasis in Co-Op Mode.
86037:The Power of Science is Staggering! - Complete one form of the "Icewind Suite" challenge in Co-Op Mode.
86038:A Successful Hunt - Defeat the Emperor of Fire and Iron in Co-Op Mode.

View File

@@ -21,6 +21,8 @@
2020:Windblume's Breath
2021:A Parade of Providence
2022:Duel! The Summoners' Summit!
2023:Secret Summer Paradise
2024:Mega Meka Melee
// 1.0
1001:Lantern Rite
5001:Elemental Crucible
@@ -166,7 +168,7 @@
5116:Second Blooming
5117:Warrior's Spirit
5118:Almighty Arataki Extraordinary and Exhilarating Extreme Beetle Brawl
5119:Heated Battle Mode: Tactical Formation
5119:Heated Battle Mode: The Profound Purpose of Practice
5121:Vultur Volans Chapter
5122:Lord of the Desert
5126:Desert of Hadramaveth
@@ -194,12 +196,22 @@
5143:The Forge Realm's Temper
5146:Genius Invokation TCG: Radiant Secrets
// 3.8
5140: Exploration on dangerous roads
5141: Adventurer Trial - Advanced (v2)
5142: telepathy
5145: Invitation Event - Kaya
5148:Mirror Casting Training - Immeasurable War
5119: Call of the Seven Saints - Hot Fight Mode: Universal Guide
5140:Perilous Expedition
5141:Adventurer's Trials: Advanced
5142:Shared Sight
5145:Hangout Event
5148:The Forge Realm's Temper: Endless Swarm
5119:Heated Battle Mode: The Profound Purpose of Practice
// 4.0
5148:The Forge Realm's Temper: Endless Swarm
5119:Heated Battle Mode: The Profound Purpose of Practice
5147:Studies in Light and Shadow: A Fontaine of Enchantment
5149:Felis Fuscus Chapter
5150:Relic Records: Creations of the Hydro Nation
5151:Verdict of Blades
5153:Lone Suzerain of Land and Sea
5154:Gear and Clockwork Roundelay
5158:The Terrestrial Sea, Origin of All Waters
// newcomers and special events
101: The way ahead is set
1014:Send Barbara activity

View File

@@ -118,6 +118,46 @@
30544:Stamen of Khvarena's Origin
30553:Ancient Abscission
30554:Ancient Abscission
31412:Forgotten Vessel
31413:Forgotten Vessel
31422:Masterpiece's Overture
31423:Masterpiece's Overture
31432:Veteran's Visage
31433:Veteran's Visage
31442:Hunter's Brooch
31443:Hunter's Brooch
31452:Moment of Judgment
31453:Moment of Judgment
31513:Forgotten Vessel
31514:Forgotten Vessel
31523:Masterpiece's Overture
31524:Masterpiece's Overture
31533:Veteran's Visage
31534:Veteran's Visage
31543:Hunter's Brooch
31544:Hunter's Brooch
31553:Moment of Judgment
31554:Moment of Judgment
32412:Golden Night's Bustle
32413:Golden Night's Bustle
32422:Golden Bird's Shedding
32423:Golden Bird's Shedding
32432:Golden Troupe's Reward
32433:Golden Troupe's Reward
32442:Golden Song's Variation
32443:Golden Song's Variation
32452:Golden Era's Prelude
32453:Golden Era's Prelude
32513:Golden Night's Bustle
32514:Golden Night's Bustle
32523:Golden Bird's Shedding
32524:Golden Bird's Shedding
32533:Golden Troupe's Reward
32534:Golden Troupe's Reward
32543:Golden Song's Variation
32544:Golden Song's Variation
32553:Golden Era's Prelude
32554:Golden Era's Prelude
51110:Goblet of the Sojourner
51111:Goblet of the Sojourner
51112:Goblet of the Sojourner
@@ -3187,4 +3227,4 @@
99551:Lord of Wind over Firmament's Hourglass
99552:Lord of Wind over Firmament's Hourglass
99553:Lord of Wind over Firmament's Hourglass
99554:Lord of Wind over Firmament's Hourglass
99554:Lord of Wind over Firmament's Hourglass

View File

@@ -2,8 +2,10 @@
21:Gilded Dreams
27:Desert Pavilion Chronicle
28:Flower of Paradise Lost
29:水仙之梦
30:花海甘露之光
29:Nymphs Dream
30:Vourukashas Glow
31:Marechaussee Hunter
32:Golden Troupe
51:Resolution of Sojourner
52:Brave Heart
53:Defender's Will

View File

@@ -1,8 +1,8 @@
1002:Kamisato Ayaka
1002:Kamisato Ayaka
1003:Jean
1005:Aether
1005:Male Character
1006:Lisa
1007:Lumine
1007:Female Lead
1014:Barbara
1015:Kaeya
1016:Diluc
@@ -45,7 +45,6 @@
1058:Yae Miko
1059:Shikanoin Heizou
1060:Yelan
1061:Kirara
1062:Aloy
1063:Shenhe
1064:Yun Jin
@@ -60,10 +59,14 @@
1073:Nahida
1074:Layla
1075:Wanderer
1076:Faruzan
1077:Yaoyao
1078:Alhaitham
1079:Dehya
1080:Mika
1081:Kaveh
1082:Baizhu
1082:Baizhu
1076:Faruzan
1061:Kirara
1083:Lynette
1084:Lyney
1085:Freminet

View File

@@ -75,4 +75,8 @@ All skins
Monthly cards
/give 1202 x999
Troubleshoot
/troubleshoot
/troubleshoot
Unlock flight
/prop fly on
Take off!
/tp ~ ~100 ~

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
11101:Dull Blade
11101:Dull Blade
11201:Silver Sword
11301:Cool Steel
11302:Harbinger of Dawn
@@ -27,6 +27,9 @@
11420:Prized Isshin Blade
11421:Prized Isshin Blade
11422:Toukabou Shigure
11424:Wolf-Fang
11425:Finale of the Deep
11426:Fleuve Cendre Ferryman
11501:Aquila Favonia
11502:Skyward Blade
11503:Freedom-Sworn
@@ -61,6 +64,8 @@
12416:Akuoumaru
12417:Forest Regalia
12418:Mailed Flower
12424:Talking Stick
12425:Tidal Shadow
12501:Skyward Pride
12502:Wolf's Gravestone
12503:Song of Broken Pines
@@ -87,6 +92,8 @@
13416:Wavebreaker's Fin
13417:Moonpiercer
13419:Missive Windspear
13424:Ballad of the Fjords
13425:Rightful Reward
13501:Staff of Homa
13502:Skyward Spine
13504:Vortex Vanquisher
@@ -118,6 +125,8 @@
14415:Oathsworn Eye
14416:Wandering Evenstar
14417:Fruit of Fulfillment
14424:Sacrificial Jade
14425:Flowing Purity
14501:Skyward Atlas
14502:Lost Prayer to the Sacred Winds
14504:Memory of Dust
@@ -153,6 +162,8 @@
15417:King's Squire
15418:End of the Line
15419:Ibis Piercer
15424:Scion of the Blazing Sun
15425:Song of Stillness
15501:Skyward Harp
15502:Amos' Bow
15503:Elegy for the End
@@ -160,3 +171,4 @@
15508:Aqua Simulacra
15509:Thundering Pulse
15511:Hunter's Path
15512:The First Great Magic

View File

@@ -17,9 +17,9 @@
80017:Как закалялась сталь - Возвысьте оружие до фазы 2.
80018:Как закалялась сталь - Возвысьте оружие до фазы 4.
80019:Как закалялась сталь - Возвысьте оружие до фазы 6.
80020:Это личное... - Достигните уровня дружбы 10 с 4-мя персонажами.
80021:Это личное... - Достигните уровня дружбы 10 с 8-мью персонажами.
80022:Это личное... - Достигните уровня дружбы 10 с 16-тью персонажами.
80020:Это личное... - Достигните уровня дружбы 10 с четырьмя персонажами.
80021:Это личное... - Достигните уровня дружбы 10 с восьмью персонажами.
80022:Это личное... - Достигните уровня дружбы 10 с шестнадцатью персонажами.
80023:Щедрость земли - Получите награды Цветов богатства или Цветов озарения 200 раз.
80024:Щедрость земли - Получите награды Цветов богатства или Цветов озарения 400 раз.
80025:Щедрость земли - Получите награды Цветов богатства или Цветов озарения 800 раз.
@@ -89,7 +89,6 @@
80089:Сказания из Татары - Разрешите ситуацию с горном Микагэ.
80090:Эхо ярости - Завершите задание «Наследие Оробаси».
80091:Байки из склепа - Соберите полную коллекцию «Рассказов улицы Токи».
80092:По островам царства грома - Достигните уровня репутации 10 в Инадзуме.
80093:В поисках приключений грома I - Завершите 6 активируемых механизмами ограниченных по времени испытаний открытого мира на острове Наруками, в Каннадзуке и на острове Ясиори в Инадзуме.
80094:В поисках приключений грома I - Завершите 12 активируемых механизмами ограниченных по времени испытаний открытого мира на острове Наруками, в Каннадзуке и на острове Ясиори в Инадзуме.
80095:В поисках приключений грома I - Завершите 24 активируемых механизмами ограниченных по времени испытания открытого мира на острове Наруками, в Каннадзуке и на острове Ясиори в Инадзуме.
@@ -103,11 +102,11 @@
80105:В поисках сокровищ грома II - Откройте 40 сундуков на островах Ватацуми и Сэйрай в Инадзуме.
80106:В поисках сокровищ грома II - Откройте 80 сундуков на островах Ватацуми и Сэйрай в Инадзуме.
80107:В поисках сокровищ грома II - Откройте 160 сундуков на островах Ватацуми и Сэйрай в Инадзуме.
80108:Охотники за грозами Сэйрая - Завершите «Охотники за грозами Сэйрая».
80109:Тот же свет луны - Завершите «Лунную бездну».
80110:В поисках приключений грома II - Завершите 6 активируемых механизмами ограниченных по времени испытаний открытого мира на островах Ватацуми и Сэйрай в Инадзуме.
80111:В поисках приключений грома II - Завершите 12 активируемых механизмами ограниченных по времени испытаний открытого мира на островах Ватацуми и Сэйрай в Инадзуме.
80112:В поисках приключений грома II - Завершите 24 активируемых механизмами ограниченных по времени испытания открытого мира на островах Ватацуми и Сэйрай в Инадзуме.
80108:Охотники за грозами Сэйрая - Завершите «Охотники за грозами Сэйрая».
80109:Тот же свет луны - Завершите «Лунную бездну».
80113:Континентальный исследователь: Цуруми - Откройте полностью карту Цуруми.
80114:Край тумана - Активируйте все точки телепортации на острове Цуруми.
80115:Паломник святилища: Цуруми - Откройте все усыпальницы глубин на острове Цуруми.
@@ -122,7 +121,7 @@
80126:Гроза навсегда - Выполните поручение некоего писателя по сбору материалов.
80127:#{M#Хозяин}{F#Хозяйка} зоопарка - Поймайте 1 дикое животное с помощью Сети всевездесущности.
80128:#{M#Хозяин}{F#Хозяйка} зоопарка - Поймайте 30 диких животных с помощью Сети всевездесущности.
80129:Хозяин зоопарка - Поймайте 100 диких животных с помощью Сети всевездесущности.
80129:#{M#Хозяин}{F#Хозяйка} зоопарка - Поймайте 100 диких животных с помощью Сети всевездесущности.
80130:«...тебе неведома ночь...» - Откройте полностью карту Энканомии.
80131:Высшая власть в Токоё - Активируйте все точки телепортации в Энканомии.
80132:Наставления Фосфороса - Доведите 6 фей до их садов в Энканомии.
@@ -208,13 +207,12 @@
80218:Легендарный игрок - Суммарно получите {param0} счастливых монет.
80219:Легендарный игрок - Суммарно получите {param0} счастливых монет.
80220:Легендарный игрок - Суммарно получите {param0} счастливых монет.
80221:Дайс-шейкер - В победной игре нанесите не менее 8 ед. урона за один ход ×{param0}.
80222:Дайс-шейкер - В победной игре нанесите не менее 8 ед. урона за один ход ×{param0}.
80223:Дайс-шейкер - В победной игре нанесите не менее 8 ед. урона за один ход ×{param0}.
80221:Дайс-шейкер - В победной игре нанесите 8 ед. урона за один ход ×{param0}.
80222:Дайс-шейкер - В победной игре нанесите 8 ед. урона за один ход ×{param0}.
80223:Дайс-шейкер - В победной игре нанесите 8 ед. урона за один ход ×{param0}.
80224:Континентальный исследователь: Жгучие сны пустыни II - Откройте карту следующего региона Сумеру: пустыня Хадрамавет.
80225:Через миражи и песчаные бури II - Активируйте все точки телепортации в следующем регионе Сумеру: пустыня Хадрамавет.
80226:Паломник святилища: Жгучие сны пустыни II - Откройте все Усыпальницы глубин в следующем регионе Сумеру: пустыня Хадрамавет.
80227:Панихида Билцис - Завершите «Панихиду Билцис»
80228:Пустыня укажет тебе путь II - Доведите фей ({param0}) до их садов в пустыне Хадрамавет.
80229:Пустыня укажет тебе путь II - Доведите фей ({param0}) до их садов в пустыне Хадрамавет.
80230:Пустыня укажет тебе путь II - Доведите фей ({param0}) до их садов в пустыне Хадрамавет.
@@ -224,6 +222,7 @@
80234:Искатель приключений в зыбучих песках II - Завершите активируемых механизмом ограниченных по времени испытаний открытого мира в пустыне Хадрамавет: {param0}.
80235:Искатель приключений в зыбучих песках II - Завершите активируемых механизмом ограниченных по времени испытаний открытого мира в пустыне Хадрамавет: {param0}.
80236:Искатель приключений в зыбучих песках II - Завершите активируемых механизмом ограниченных по времени испытаний открытого мира в пустыне Хадрамавет: {param0}.
80227:Панихида Билцис - Завершите «Панихиду Билцис»
80237:Континентальный исследователь: Благословенная хамада - Откройте карты следующих регионов Сумеру: Гавирех Ладжавард, царство Фарахкерт.
80238:Небеса опустились в бездну - Активируйте все точки телепортации в следующих регионах Сумеру: Гавирех Ладжавард, царство Фарахкерт.
80239:Паломник святилища: Благословенная хамада - Откройте все Усыпальницы глубин в следующих регионах Сумеру: Пустыня Одинокой скалы, царство Фарахкерт.
@@ -231,13 +230,33 @@
80241:Проводник пустыни - Доведите фей ({param0}) до их садов в Гавирехе Ладжаварде, царстве Фарахкерт.
80242:Проводник пустыни - Доведите фей ({param0}) до их садов в Гавирехе Ладжаварде, царстве Фарахкерт.
80243:Охотник за сокровищами пустыря - Откройте сундуки ({param0}) в Гавирехе Ладжаварде, царстве Фарахкерт.
80244:Охотник за сокровищами пустыря - Откройте сундуки ({param0}) в Гавирехе Ладжаварде, царстве Фарахкерт.
80244:Охотник за сокровищами пустыря - Откройте сундуки ({param0}) в пустыне Одинокой скалы, царстве Фарахкерт.
80245:Охотник за сокровищами пустыря - Откройте сундуки ({param0}) в Гавирехе Ладжаварде, царстве Фарахкерт.
80246:Искатель приключений пустыря - Завершите ограниченные по времени испытания открытого мира ({param0}) в Гавирехе Ладжаварде, царстве Фарахкерт.
80247:Искатель приключений пустыря - Завершите ограниченные по времени испытания открытого мира ({param0}) в Гавирехе Ладжаварде, царстве Фарахкерт.
80247:Искатель приключений пустыря - Завершите ограниченные по времени испытания открытого мира ({param0}) в пустыне Одинокой скалы, царстве Фарахкерт.
80248:Искатель приключений пустыря - Завершите ограниченные по времени испытания открытого мира ({param0}) в Гавирехе Ладжаварде, царстве Фарахкерт.
80249:Хварна добра и зла - Завершите «Хварну добра и зла».
80250:Красная амрита - Повысьте Озеро амриты до макс. уровня.
80249:Хварна добра и зла - Завершите «Хварну добра и зла».
80252:Континентальный исследователь: Земля мелодичных родников I - Откройте карту Белло, Берилла и Кур-де-Фонтейна.
80253:Всех вод источник I - Откройте все точки телепортации Белло, Берилла и Кур-де-Фонтейна.
80254:Паломник святилища: Земля мелодичных родников I - Сломайте печати всех Усыпальниц глубин в Белло, Берилле и Кур-де-Фонтейне.
80255:Капля чистой воды - Повысьте статую семи Архонтов в Фонтейне до макс. уровня.
80256:Песнь росы - Повысьте фонтан Люсин в Кур-де-Фонтейне до макс. уровня.
80257:Проводник по волнам I - Проследуйте за {param0} феями в их сады в Белло, Берилле и Кур-де-Фонтейне.
80258:Проводник по волнам I - Проследуйте за {param0} феями в их сады в Белло, Берилле и Кур-де-Фонтейне.
80259:Проводник по волнам I - Проследуйте за {param0} феями в их сады в Белло, Берилле и Кур-де-Фонтейне.
80260:Охотник за морскими сокровищами I - Откройте {param0} сундуков в Белло, Берилле и Кур-де-Фонтейне.
80261:Охотник за морскими сокровищами I - Откройте {param0} сундуков в Белло, Берилле и Кур-де-Фонтейне.
80262:Охотник за морскими сокровищами I - Откройте {param0} сундуков в Белло, Берилле и Кур-де-Фонтейне.
80263:Искатель морских приключений I - Завершите ограниченные по времени испытания открытого мира ({param0}) в Белло, Берилле и Кур-де-Фонтейне.
80264:Искатель морских приключений I - Завершите ограниченные по времени испытания открытого мира ({param0}) в Белло, Берилле и Кур-де-Фонтейне.
80265:Искатель морских приключений I - Завершите ограниченные по времени испытания открытого мира ({param0}) в Белло, Берилле и Кур-де-Фонтейне.
80266:Анн в стране чудес - Завершите историю Отряда героев Нарциссенкрейца.
80267:Картины. Мечты. Механический пёс - Узнайте секрет внутри Элинаса.
80268:Земля чистых родников - Получите силу элемента Гидро.
80269:Обманщица Ренар - Соберите полную коллекцию «Притч о животных Фонтейна».
80270:Бандиты и сыщики - Соберите полную коллекцию серии «Бандиты и сыщики: Радужная брошь».
80271:Коллекция несчастий - Соберите полную коллекцию «Закат и падение Ремурии».
81000:Всеохватывающий вид - Достигните вершины пика Цинъюнь.
81001:Останки режущих бурь - Достигните вершины башни в логове Ужаса Бури.
81002:Семена истории, принесённые ветром... - Достигните безымянного острова на северо-востоке Мондштадта.
@@ -257,6 +276,7 @@
81023:Друзья по всему миру - Познакомьтесь с разными людьми во время своего путешествия.
81024:Мегазвезда Мондштадта - Достигните уровня репутации 8 в Мондштадте.
81025:Легенда Ли Юэ - Достигните уровня репутации 8 в Ли Юэ.
80092:По островам царства грома - Достигните уровня репутации 10 в Инадзуме.
81026:Цель уничтожена - Выполните 10 заказов на монстров.
81027:Цель уничтожена - Выполните 20 заказов на монстров.
81028:Цель уничтожена - Выполните 30 заказов на монстров.
@@ -538,6 +558,7 @@
81327:Чудесное путешествие - Завершите «Художника в свободном плавании».
81328:Все загадки разгаданы! - Завершите «Монументальное исследование».
81329:Возвращение духов - Завершите «Бледное пламя».
81339:Изобильное море - Жизненные силы восстановились во всех цветочных полянах оазиса Вурукаша.
81331:Храбрецы не бегут - Пройдите все испытания от Джарджар.
81332:Путь света - Завершите все испытания Колокола духов.
81333:Танец на барабанах - Завершите все испытания барабанных прыгунков.
@@ -546,7 +567,39 @@
81336:Кружение в небе над Паре-Ожеком - Заставьте Соруш пролететь некоторое время.
81337:Чей ты потомок? Как тебя зовут? - Первый раз используйте Соруш для управления силой Хварны.
81338:Соруш, используй силу - Бросьте фрукт ниродха с помощью Соруш, чтобы растопить кристаллы из застывшей амриты ({param0}).
81339:Изобильное море - Жизненные силы восстановились во всех цветочных полянах оазиса Вурукаша.
81340:Стиратель углов - Подавите Звериный разрыв с помощью силы кристаллов.
81341:Охлаждение очага - Верните бурлящему озеру былое спокойствие.
81342:Белый корабль - «Он идёт по волнам мечты...»
81344:Энциклопедия натурфилософии - Найдите место встречи древнего общества при помощи стеклянной стены и книги, не поддающейся расшифровке.
81345:Фонтейнское послание - Побеседуйте с Виржилем по-дружески.
81346:Всего лишь собака... - Помогите Мамер починить Сеймура.
81347:Это рыба, вкусная рыба - Попробуйте «праздничный торт» с мелюзиной.
81348:Добро пожаловать в Фонтейн - Завершите маршрут на аквабусе.
81349:Мечта о полёте - Завершите полёт на Летательном аппарате Антуана Роже.
81350:Появление современных часов - Помогите Пуке найти руде полезное применение.
81351:Грядущий водный мир - Вглядитесь в «пространство воды» под «поверхностью».
81352:Эстетика непривлекательности - Ещё два шага Фонтейна к прекрасному.
81353:Словно слёзы под дождём - Найдите самозванца среди остроскатов.
81355:В жизни есть столько... - ...прекрасных вещей.
81356:Око за око - Разберитесь с назойливыми пулелюсками!
81357:Веришь ли ты в восторг? - Помогите построить рай для пухленей.
81358:Сквозь трудности... - «...Чтобы заполучить Чудесный меч, способный одолеть злого короля, рыцарь врывается в древнюю крепость, закрытую магией...»
81359:А потом... - «...После победы над злым королём рыцарь спасает принцессу. И в королевство возвращается свет...»
81360:Этюд в чёрных тонах - Найдите более... специфический предмет для изучения в Институте натурфилософии.
81361:Двадцать тысяч лье под водой - Следуйте за потоком...
81362:Сводящий с ума аромат - Помогите Анри изменить судьбу.
81363:Песнь древних - Услышьте мелодию старины.
81364:Дева озера Нинианна - Победите местную легенду, Деву озера Нинианну
81365:Дева озера Вивианна - Победите местную легенду, Деву озера Вивианну
81366:Фонтейн ждёт, что каждый выполнит свой долг - Предмет возвращается к законному владельцу...
81367:В поисках растраченного времени - Достигните уровня репутации 10 в Фонтейне.
81368:Теория пухленькой эволюции - Сопровождайте маленького пухленя, пока он растёт.
81369:Окружной судья океана - Победите местную легенду, Окружного судью океана
81370:Железный виконт - Победите местную легенду, Железного виконта
81371:Владыка отшельников: Доварху - Победите местную легенду, Владыку отшельников Доварху
81372:Угасающий старый солдат - Победите местную легенду, Угасающего старого солдата
81373:Меч ущелья - Победите местную легенду, Меч ущелья
81374:Волшебные рыцари-близнецы - Победите местную легенду, Волшебных рыцарей-близнецов
82001:Это просто практика... - Сбейте сокола в полёте с помощью лука.
82002:Выстрел со ста шагов - Попадите прицельным выстрелом в уязвимое место противника с большого расстояния.
82003:Вольный стрелок - Попадите прицельным выстрелом в уязвимое место противника с очень большого расстояния.
@@ -642,6 +695,7 @@
82096:Водная терапия - Победите зеркальную деву, не попав в её водяную тюрьму.
82097:Здесь тихо... Слишком тихо... - Победите Пиро гипостазис после того, как он войдёт в потушенное состояние лишь один раз.
82098:Битва за остров Наруками - Победите бесконечный механический массив, пока он находится в ослабленном состоянии.
82109:Последний штрих - Победите Аждаху без использования щита.
82099:Если бежать быстрее... - Победите магу кэнки, не попав под атаки его фантома.
82100:Дуэль чести - Победите магу кэнки, не активируя его парирование «Оси но омотэ».
82101:Ладно, я сделаю это сам - Победите древнего геовишапа, не отражая Первобытный поток.
@@ -652,7 +706,6 @@
82106:Клин клином вышибают - Победите кайраги: Огненная мощь, пока его оружие имеет статус Пиро.
82107:Оседлать молнию - Победите кайраги: Громовое вознесение, пока его оружие имеет статус Электро.
82108:Гром донёсся с востока - Получите удар молнии, вызванной митачурлом с электрическим топором...
82109:Последний штрих - Победите Аждаху без использования щита.
82110:Убийство всухую - Одолейте Гидро гипостазиса, не победив ни одну из капель (кроме периодов, когда гипостазис восстанавливает HP).
82111:Гидробиологическое оружие - Вас побеждает существо, в которое превратился Гидро гипостазис.
82112:Непередаваемая волна любви - Победите манифестацию грома так, чтобы вас не обнаружил Ударный зонд.
@@ -680,12 +733,12 @@
82134:Бешеный цветок в конце пути - Когда Электро папоротник выпустит пучок молний, парализуйте его атакой по венчику.
82135:Дух противника сломлен! - Дождитесь, когда состояние Оживления завершится, и Пернатый плесенник перейдёт в состояние истощения, и победите его.
82136:Запах жареных плесенников поутру - За одну битву уничтожьте 6 плесенников, выброшенных Пернатым плесенником в состоянии Горения.
82137:Последний день дракона - За одну битву низвергните дракона вечных бедствий атакой на ядра, расположенные на его крыльях.
82138:Победа - у тебя в голове - За одну битву прервите поток энергии дракона вечных бедствий атакой на ядро, расположенное в его голове.
82139:Сопротивление бесполезно! - Победите дракона вечных бедствий с повышенным сопротивлением как минимум к двум разным элементам.
82137:Последний день дракона - За одну битву низвергните Дракона вечных бедствий атакой на ядра, расположенные на его крыльях.
82138:Победа - у тебя в голове - За одну битву прервите поток энергии Дракона вечных бедствий атакой на ядро, расположенное в его голове.
82139:Сопротивление бесполезно! - Победите Дракона вечных бедствий с повышенным сопротивлением как минимум к двум разным элементам.
82140:Сбой системы - Разрушьте Алгоритм полуизвечной матрицы оператора наблюдения, пока он находится в перегрузке.
82141:Дэйзи, Дэйзи - Прервите состояние невидимости Алгоритма полуизвечной матрицы оператора наблюдения, атаковав его ядра Стимуляцией, Обострением или Разрастанием.
82142:Постойте, господин робот! - Прервите яростную атаку дракона вечных бедствий атакой на ядро, расположенное в его голове.
82142:Постойте, господин робот! - Прервите яростную атаку Дракона вечных бедствий атакой на ядро, расположенное в его голове.
82143:Наномашины, мой мальчик! - Победите Пернатого плесенника, пока он находится в состоянии Оживления и использует свои боевые навыки.
82144:Организация плацдарма - Узрите Алгоритм полуизвечной матрицы оператора наблюдения...
82145:Невидимая рука - Победите первозданную конструкцию, не нарушая её невидимого состояния.
@@ -697,7 +750,7 @@
82151:Вегетация на арене - Выполните 10 раз: Одолейте 4 врагов с помощью реакции Вегетация за 2 сек.
82155:Удивительная азотфиксация - В ходе одного испытания против Дендро гипостазиса одновременно переведите три восстанавливающих ядра в состояние оживления.
82156:Разговор падающей травы - Сожгите оболочку из лозы Дендро гипостазиса, когда он совершает атаку в падении.
82157:Грохот падения - Используйте элементальные матрицы, чтобы вызвать перезагрузку и парализовать Сёки но Ками.
82157:Грохот падения - Используйте элементальные матрицы, чтобы вызвать перегрузку и парализовать Сёки но Ками.
82158:Цикл рождения и смерти - Возрождение возможно даже на грани уничтожения...
82159:Активный камуфляж - С помощью Стимуляции, Обострения, Разрастания или импульса истины прервите невидимость минимум 2 первозданных конструкций за 3 сек.
82160:Повелитель благовоний... - Вызовите реакцию Рассеивание при помощи шаров эрозии, чтобы атаковать Унута Сетеха, пока он левитирует.
@@ -707,9 +760,15 @@
82164:Защита от взаимной атаки... - Разрушьте щит Сёки но Ками, когда он проводит мощный шквал атак.
82165:Вот это настоящий Хранитель четырёх ветров! - Во время одного испытания Унута Сетеха активируйте реакцию рассеивания шара эрозии с помощью Крио, Пиро, Электро и Гидро атак соответственно.
82166:Отчуждённость... - Победите Чудовищного крестителя, не нарушая его защитного купола.
82167:Метод исключения - Победите Чудовищного крестителя, вобравшего все силы элементов.
82167:Метод исключения - Победите Чудовищных крестителей всех возможных элементальных комбинаций.
82168:В такие моменты слова будут лишними - Когда Чудовищный креститель совершает древние песнопения, уничтожьте все элементальные кольца, чтобы его парализовать.
82169:Подобно движению солнца - Победите Стража оазиса Апепа, не попав под воздействие волн апокалипсиса.
82175:Законный путь меж двух рек - Проиграйте дуэль легендарному остроскату...
82176:Расколовшаяся клетка - Используйте атаки пневмой или усией, чтобы нарушить состояние напряжения у протогена расщелин.
82177:Слишком горячо! - Без остановки пытайтесь заморозить фантазмов мутных вод...
82178:Погребальная гроза - Используйте атаку пневмой, чтобы ослабить вихрь, созданный Коппелией во время кульминации представления.
82179:Король умер, да здравствует король! - Прервите Пылающую коронацию Императора огня и железа.
82180:Ледяная клятва - Атакой усии уничтожьте щит, который Коппелиус установил во время кульминации представления.
84000:Затянутое начало - Завершите задания Архонтов в Мондштадте.
84001:Чужеземец, поймавший ветер - Завершите главу «Чужеземец, поймавший ветер».
84002:Горькие слёзы - Завершите главу «Горькие слёзы».
@@ -736,8 +795,6 @@
84023:Последнее прощание - Примите участие в Церемонии Вознесения.
84024:Приближение новой звезды - Завершите «Приближение новой звезды».
84025:Механизмы судьбы - Завершите задание «Хранитель ветви: Дайнслейф».
84026:Волнительное приключение: Пролог - Завершите встречу «Волнительное приключение» и откройте все концовки.
84028:Знаток нечисти - Безошибочно истолкуйте все подсказки.
84029:Безумцы, разбойники и тёмные тайны - Узнайте судьбу Великого вора.
84030:Перекрёсток судеб - Сбегите из загадочных руин.
84031:Насмешка над силой богов - Узнайте о «Плетении судьбы»...
@@ -763,8 +820,6 @@
84051:Чужие желания - Исполните все желания, содержащиеся в статуе всевидящего божества.
84052:Всевидящий бог, бренный мир - Завершите «Всевидящий бог, бренный мир».
84053:«Всё благополучно» - Помогите Ван Пинъаню восстановить храм Бронзового Воробья.
84054:Приключения Анны - Помогите Анне стать искательницей приключений.
84055:В дальний путь - Юноша готовится к долгому путешествию...
84056:Дворец до самых небес - Закончите реконструкцию Нефритового дворца.
84057:Величие глубин - Одолейте Бешт, Отголосок Вихря
84058:Видение из прошлого - Станьте свидетелем правды о прошлом деревни.
@@ -805,15 +860,102 @@
84093:Ещё не смертельная болезнь - Создайте лекарство, несущее надежду.
84094:На том берегу судьбы - Станьте свидетелем чуда, дарованного «Грешником».
84095:Кариберт - Выполните «Кариберт».
84096:Как вода исчезает в воде - Послушайте о пророчестве, которое широко известно в Фонтейне.
84097:Сыщик в действии - Разузнайте, что на самом деле произошло с Лини, в качестве его «представителя».
84098:Большой магический разворот - Оратрис Меканик д'Анализ Кардиналь вынесла приговор: вина не доказана.
84099:Прелюдия белых рос и чёрных волн - Завершите «Прелюдию белых рос и чёрных волн».
84300:Ручей лепечет, полный благозвучья... - Услышьте зов океаниды и соединитесь с её сознанием
84301:Однажды во Флёв Сандр - Узнайте об отце Навии на базе Спина-ди-Росула.
84302:Трагедия повторяется - Раскройте дело об исчезновениях девушек
84303:Словно лёгкий дождь без причины - Завершите «Словно лёгкий дождь без причины»
84501:...Odomu? - Проведите успешный «языковой обмен» с хиличурлом.
84502:Yo dala? - Проведите успешный «поэтический обмен» с хиличурлом.
84503:Перфекционист - Безупречно выполните все поручения Царевича в задании «Сказано - сделано!»
84504:Говорю как есть - Соберите информацию о Снежной в задании «Зимняя история».
84505:Анекдоты Гео Архонта - Соберите полный сборник историй о Властелине Камня.
84506:Останьтесь ненадолго, путешественники... - Послушайте историю о «Дожде клинков» в задании «Сейчас объясню».
84507:Давным-давно, в далёком-далёком царстве... - Послушайте историю о «Гневе Хай Шаня» в задании «Сейчас объясню».
84508:Карамба, пираты! - Сыграйте в пиратов с малышами Лулу, Фэем и Мэном.
84509:Повар и рыбак - Завершите задания «Рыбак Цзян Сюэ» и «Дилемма Янь Сяо».
84510:Любовь повсюду - Помогите Чжи Хуа отыскать пять счастливых знамений в задании «Хороший знак».
84512:Излишняя тоска - Завершите 5 раз задание «Ветер воспоминаний уносит тоску».
84513:На этаж повыше... - Помогите Хуай Аню починить лестницу на постоялом дворе «Ваншу».
84514:Новичкам везёт - Выберите самый дорогой нефрит с первого раза.
84515:Пора ответить за свои ошибки - Извинитесь перед Тимми.
84516:Стукни и заработает - Принесите Герману только материалы для тренировочного манекена.
84517:Мгновенная карма - Разоблачите Марджори и получите благодарность от Джека.
84518:«Привет, любимый папочка...» - Послушайте историю Тимми.
84519:Чудеса медицины - Вылечите болезнь Анны.
84520:Во имя Фавония - Станьте свидетелем истории Джиллианы.
84522:Академические притязания - Завершите задания «Потерянная реликвия» и «Дело о краже сокровищ».
84523:Мечта и работа, стихи и хлеб - Завершите задание «Так называемая "работа"» и получите сборник поэзии Линь Лин.
84524:Все хорошо, что хорошо кончается - Завершите задание «В ожидании старого друга».
84525:Потрясающий роман - Подсмотрите в рукопись Чана Девятого.
84526:Открыто для интерпретации - Испортите 4 знамения неизбежной любви.
84527:Это не живая консерва - Съешьте еду в задании «Доставка еды»...
84528:Замаскирован на виду - Помогите Санго и Рюдзи раскрыть дело.
84529:Есть всегда одна истина? - Станьте свидетелем истории Рюдзи.
84530:Ли Юэ итибан - Вылечите Тан Вэнь вкусной едой.
84531:Опять бум шака-лака - Узнайте у Сян Лин об особых методах готовки.
84532:Обед для двоих - Помогите Сюй Дуну и Камэи Мунэхисе приготовить по одному блюду.
84533:Вопрос диеты - Помогите Парване проверить рецепты.
84534:Рисовый самурай - Помогите Камэи Мунэхисе собрать ингредиенты из лагерей с обеих сторон.
84535:«Простите за неудобства!» - Получите жалобу от Конды Дэнсукэ в задании «Обслуживание после продажи».
84536:Самурай-гурман - Станьте свидетелем принятия Камэи Мунэхисы в ряды всеядных гурманов.
84537:Ау... Есть кто? - Найдите скрытый проход на острове Рито.
84538:Мнение редакции - Помогите Сигэру и Дзюнкити вернуться на творческий путь.
84539:Пора открывать Досин додзё - Помогите Асакуре с тренировками 5 раз.
84540:Угадай кто? - Узнайте, кем является Чжэнь Юй на самом деле.
84541:Хотя бы заканчивается - Дослушайте историю Дзюнкити до конца.
84542:Она и её кошка - Вместе с Нэко идите на гору Ёго и найдите следы Хибики.
84054:Приключения Анны - Помогите Анне стать искательницей приключений.
84055:В дальний путь - Юноша готовится к долгому путешествию...
84543:Что на крючке? - Вместе с Кайваном выловите странные предметы.
84544:Плесенник Калими - Посмотрите, как Хатим срывает куш на бирже!
84545:Богатство стучится в дверь - Угостите Хатима яблочным напитком.
84546:Котолов - Помогите Саре отыскать её кошек.
84547:Законы арифметики - Помогите Гарсии завершить его устройство.
84548:Труд всему голова - Соберите побольше грибов для Хамбэя.
84549:Релаксационная терапия - Исполните желания 3 пациентов.
84550:На корню - Найдите и победите убегающую попрыгунью.
84551:Дата отплытия - Получите письмо Александры...
84552:Мора не виновата - Станьте свидетелем приключений Всеядных гурманов в Сумеру.
84553:Небо высоко, а земля... - Помогите Фаргани с измерениями.
84554:Время ответа - Станьте свидетелем истории Алрани в Сумеру.
84555:Случайные обстоятельства цветения розы - Помогите Коллеи ухаживать за сумерскими розами.
84556:Где же вы, мечты? - Станьте свидетелем истории Джави и его «мечты».
84557:Необязательное требование - Найдите все предметы, которые Гулабгир дал змеям.
84558:Корабельная мощь - Помогите Рафику испытать корпус корабля на прочность.
84559:В чём дело? - Попробуйте три блюда Джафара.
84560:Эрудит из Сумеру - Ответьте правильно на 6 различных вопросов.
84561:Всего один шаг - Уступите Хилми в состязаниях по бегу...
84562:Врачебный почерк - Помогите Маруфу верно прочесть рецепт.
84563:Остатки аромата - Станьте свидетелем истории Нермин.
84564:В поисках меча - Станьте свидетелем истории о мисс Лань и «Скрытом клинке».
84565:Пройти по горизонту?.. - Станьте свидетелем истории Сунь Юя.
84566:Офис на улице - Станьте свидетелем мелких происшествий в Кур-де-Фонтейне.
84567:Превосходный вкус - Приготовьте особенный кофе.
84568:Эстетическая критика - Выслушайте теорию Депьери о красоте.
84569:Второе детство - Поиграйте с детьми и станьте свидетелем их истории.
84570:Ветер и волны - Станьте свидетелем истории о работе Айюна.
85000:Кроме времени нечего терять - Разгадайте секрет двух солнечных часов.
85001:Разговор с древним божеством - Послушайте историю древнего божества.
85002:Крадущийся дракон, притаившееся Чи - Ознакомьтесь с историей «Чи».
85003:Биться до последнего - Продайте за хорошую цену сокровище, найденное в древних руинах...
85004:Тень над озером Лухуа - Помогите Вермееру найти желаемый пейзаж.
85005:Нулевой игрок - Поиграйте в простую игру с малышом Цзяном.
85006:Под густой тенью древа соберётся вся семья - Станьте свидетелем истории дома Юань Хун.
84026:Волнительное приключение: Пролог - Завершите встречу «Волнительное приключение» и откройте все концовки.
84100:Владыка грома - Станьте свидетелем влияния невезения Беннета на погоду.
84101:Сила удачи! - Активируйте механизмы и заберите сокровище, не совершив ни одной ошибки.
84102:Черта, которую можно переступить - Завершите встречу «Лечебный родник» и откройте все концовки.
84103:Сильная и добродетельная горничная - Завершите встречу «Путь рыцаря Ордо Фавониус» и откройте все концовки.
84104:И зло изгнано - Завершите встречу «Заметки о поиске злых духов» и откройте все концовки.
84105:Пряная легенда Мондштадта - Попробуйте пряный напиток Барбары.
84106:«...Таков мой долг» - Помогите Ноэлль найти источник её силы.
84028:Знаток нечисти - Безошибочно истолкуйте все подсказки.
84107:Жгучий герой - Приготовьте мороженое по неправильному рецепту и вызовите бурную реакцию чистой энергии Ян Чун Юня.
84102:Черта, которую можно переступить - Завершите встречу «Лечебный родник» и откройте все концовки.
84108:Последняя линия обороны идола - Уговорите Альберта и других фанатов Барбары уйти.
84105:Пряная легенда Мондштадта - Попробуйте пряный напиток Барбары.
84103:Сильная и добродетельная горничная - Завершите встречу «Путь рыцаря Ордо Фавониус» и откройте все концовки.
84106:«...Таков мой долг» - Помогите Ноэлль найти источник её силы.
84109:Известный лишь розам мир - Прочтите конспект Ноэлль.
84110:Избавление от беспокойства - Завершите встречу «Подготовка к рыцарскому экзамену» и откройте все концовки.
84111:Неуязвимая горничная-рыцарь - Прослушайте «Путешествие рыцаря по Ли Юэ» с Ноэлль.
@@ -854,82 +996,15 @@
84146:Искусство и жизнь - Завершите встречу «Маятник печали и радости» и откройте все концовки.
84147:Студенческие дни - Найдите книги с заметками в Доме даэны.
84148:Романтизм в архитектуре - Обсудите будущее с Кавехом в пустыне.
84501:...Odomu? - Проведите успешный «языковой обмен» с хиличурлом.
84502:Yo dala? - Проведите успешный «поэтический обмен» с хиличурлом.
84503:Перфекционист - Безупречно выполните все поручения Царевича в задании «Сказано - сделано!»
84504:Говорю как есть - Соберите информацию о Снежной в задании «Зимняя история».
84505:Анекдоты Гео Архонта - Соберите полный сборник историй о Властелине Камня.
84506:Останьтесь ненадолго, путешественники... - Послушайте историю о «Дожде клинков» в задании «Сейчас объясню».
84507:Давным-давно, в далёком-далёком царстве... - Послушайте историю о «Гневе Хай Шаня» в задании «Сейчас объясню».
84508:Карамба, пираты! - Сыграйте в пиратов с малышами Лулу, Фэем и Мэном.
84509:Повар и рыбак - Завершите задания «Рыбак Цзян Сюэ» и «Дилемма Янь Сяо».
84510:Любовь повсюду - Помогите Чжи Хуа отыскать пять счастливых знамений в задании «Хороший знак».
84512:Излишняя тоска - Завершите 5 раз задание «Ветер воспоминаний уносит тоску».
84513:На этаж повыше... - Помогите Хуай Аню починить лестницу на постоялом дворе «Ваншу».
84514:Новичкам везёт - Выберите самый дорогой нефрит с первого раза.
84515:Пора ответить за свои ошибки - Извинитесь перед Тимми.
84516:Стукни и заработает - Принесите Герману только материалы для тренировочного манекена.
84517:Мгновенная карма - Разоблачите Марджори и получите благодарность от Джека.
84518:«Привет, любимый папочка...» - Послушайте историю Тимми.
84519:Чудеса медицины - Вылечите болезнь Анны.
84520:Во имя Фавония - Станьте свидетелем истории Джиллианы.
84522:Академические притязания - Завершите задания «Потерянная реликвия» и «Дело о краже сокровищ».
84523:Мечта и работа, стихи и хлеб - Завершите задание «Так называемая "работа"» и получите сборник поэзии Линь Лин.
84524:Все хорошо, что хорошо кончается - Завершите задание «В ожидании старого друга».
84525:Потрясающий роман - Подсмотрите в рукопись Чана Девятого.
84526:Открыто для интерпретации - Испортите 4 знамения неизбежной любви.
84527:Это не живая консерва - Съешьте еду в задании «Доставка еды»...
84528:Замаскирован на виду - Помогите Санго и Рюдзи раскрыть дело.
84529:Есть всегда одна истина? - Станьте свидетелем истории Рюдзи.
84530:Ли Юэ итибан - Вылечите Тан Вэнь вкусной едой.
84531:Опять бум шака-лака - Узнайте у Сян Лин об особых методах готовки.
84532:Обед для двоих - Помогите Сюй Дуну и Камэи Мунэхисе приготовить по одному блюду.
84533:Вопрос диеты - Помогите Парване проверить рецепты.
84534:Рисовый самурай - Помогите Камэи Мунэхисе собрать ингредиенты из лагерей с обоих сторон.
84535:«Простите за неудобства!» - Получите жалобу от Конды Дэнсукэ в задании «Обслуживание после продажи».
84536:Самурай-гурман - Станьте свидетелем принятия Камэи Мунэхисы в ряды всеядных гурманов.
84537:Ау... Есть кто? - Найдите скрытый проход на острове Рито.
84538:Мнение редакции - Помогите Сигэру и Дзюнкити вернуться на творческий путь.
84539:Пора открывать Досин додзё - Помогите Асакуре с тренировками 5 раз.
84540:Угадай кто? - Узнайте, кем является Чжэнь Юй на самом деле.
84541:Хотя бы заканчивается - Дослушайте историю Дзюнкити до конца.
84542:Она и её кошка - Вместе с Нэко идите на гору Ёго и найдите следы Хибики.
84543:Что на крючке? - Вместе с Кайваном выловите странные предметы.
84544:Плесенник Калими - Посмотрите, как Хатим срывает куш на бирже!
84545:Богатство стучится в дверь - Угостите Хатима яблочным напитком.
84546:Котолов - Помогите Саре отыскать её кошек.
84547:Законы арифметики - Помогите Гарсии завершить его устройство.
84548:Труд всему голова - Соберите побольше грибов для Хамбэя.
84549:Релаксационная терапия - Исполните желания 3 пациентов.
84550:На корню - Найдите и победите убегающую попрыгунью.
84551:Дата отплытия - Получите письмо Александры...
84552:Мора не виновата - Станьте свидетелем приключений Всеядных гурманов в Сумеру.
84553:Небо высоко, а земля... - Помогите Фаргани с измерениями.
84554:Время ответа - Станьте свидетелем истории Алрани в Сумеру.
84555:Случайные обстоятельства цветения розы - Помогите Коллеи ухаживать за сумерскими розами.
84556:Где же вы, мечты? - Станьте свидетелем истории Джави и его «мечты».
84557:Необязательное требование - Найдите все предметы, которые Гулабгир дал змеям.
84558:Корабельная мощь - Помогите Рафику испытать корпус корабля на прочность.
84559:В чём дело? - Попробуйте три блюда Джафара.
84560:Эрудит из Сумеру - Ответьте правильно на 6 различных вопросов.
84561:Всего один шаг - Уступите Хилми в состязаниях по бегу...
84562:Врачебный почерк - Помогите Маруфу верно прочесть рецепт.
84563:Остатки аромата - Станьте свидетелем истории Нермин.
84564:В поисках меча - Станьте свидетелем истории о мисс Лань и «Скрытом клинке».
84565:Пройти по горизонту?.. - Станьте свидетелем истории Сунь Юя.
85000:Кроме времени нечего терять - Разгадайте секрет двух солнечных часов.
85001:Разговор с древним божеством - Послушайте историю древнего божества.
85002:Крадущийся дракон, притаившееся Чи - Ознакомьтесь с историей «Чи».
85003:Биться до последнего - Продайте за хорошую цену сокровище, найденное в древних руинах...
85004:Тень над озером Лухуа - Помогите Вермееру найти желаемый пейзаж.
85005:Нулевой игрок - Поиграйте в простую игру с малышом Цзяном.
85006:Под густой тенью древа соберётся вся семья - Станьте свидетелем истории дома Юань Хун.
84149:В поиске веселья - Завершите встречу «Выдумки и выпивка» и откройте все концовки.
84150:Счастливая монета - Примите участие в пари, предложенном Кэйей.
84151:Тсс... Слушай! - Прислушайтесь к голосу, доносящемуся из одиночной камеры.
86001:Пришли, увидели и победили вместе - Выполните 5 испытаний подземелья с другими игроками.
86002:Пришли, увидели и победили вместе - Выполните 20 испытаний подземелья с другими игроками.
86003:Пришли, увидели и победили вместе - Выполните 100 испытаний подземелья с другими игроками.
86004:Пришёл, увидел и победил в одиночку - Соберите 5 местных диковин в мире другого игрока.
86005:Пришёл, увидел и победил в одиночку - Соберите 20 местных диковин в мире другого игрока.
86006:Пришёл, увидел и победил в одиночку - Соберите 50 местных диковин в мире другого игрока.
86004:Пришёл, увидел и победил в одиночку - Соберите 5 местных диковинок в мире другого игрока.
86005:Пришёл, увидел и победил в одиночку - Соберите 20 местных диковинок в мире другого игрока.
86006:Пришёл, увидел и победил в одиночку - Соберите 50 местных диковинок в мире другого игрока.
86007:У вас такие огромные кристальные бабочки - Одолейте Анемо гипостазис в совместном режиме.
86008:...хватит и улыбки. - Одолейте Электро гипостазис в совместном режиме.
86009:Оказывается, можно бить эти колонны. - Одолейте Гео гипостазис в совместном режиме.
@@ -937,13 +1012,13 @@
86011:This is fine. - Одолейте Пиро орхидею в совместном режиме.
86012:Рыба по имени Родия - Одолейте океанида в совместном режиме.
86013:Волчий союз - Одолейте короля Вольфендома в совместном режиме.
86021:Способности Глаза Порчи не решают исход битвы - Одолейте Чайльда в совместном режиме.
86015:Сворачивая горы - Одолейте древнего геовишапа в совместном режиме.
86016:Привет из прошлого - Одолейте Аждаху в совместном режиме.
86017:План по заморозке - Одолейте Крио гипостазис в совместном режиме.
86018:Больше никаких нитей - Одолейте магу кэнки в совместном режиме.
86019:Операция «Костёр» - Одолейте Пиро гипостазис в совместном режиме.
86020:Конечный механический массив - Одолейте бесконечный механический массив в совместном режиме.
86021:Способности Глаза Порчи не решают исход битвы - Одолейте Чайльда в совместном режиме.
86022:Все за одного - Одолейте манифестацию грома в совместном режиме.
86023:Одна вода - Одолейте Гидро гипостазис в совместном режиме.
86024:Сквозь снег и пламя - Одолейте Синьору в совместном режиме.
@@ -951,4 +1026,13 @@
86026:Храбрость пред лицом молнии - Одолейте сёгуна Райдэн в совместном режиме.
86027:Превосходя древнюю мудрость - Одолейте Змея руин в совместном режиме.
86028:Полувегетарианство - Одолейте Пернатого плесенника в совместном режиме.
86029:Не влезай, убьёт! - Одолейте Электро папоротник в совместном режиме.
86029:Не влезай, убьёт! - Одолейте Электро папоротник в совместном режиме.
86030:Конец вечного возвращения - Одолейте Дракона вечных бедствий в совместном режиме.
86031:Незначительное отставание - Одолейте Алгоритм полуизвечной матрицы оператора наблюдения в совместном режиме.
86032:Зелень из других миров - Одолейте Дендро гипостазиса в совместном режиме.
86033:Танцуйте, если хотите победить! - Одолейте Сёки но Ками в совместном режиме.
86034:Инициация народа пустыни - Одолейте Унута Сетеха в совместном режиме.
86035:Презумпция виновности - Одолейте Чудовищного крестителя в совместном режиме.
86036:Завоеватель тростникового моря - Одолейте Стража оазиса Апепа в совместном режиме.
86037:Великая сила науки - Завершите одно из испытаний Сюиты ледяного ветра в совместном режиме.
86038:Удачная охота - Одолейте Императора огня и железа в совместном режиме.

View File

@@ -21,6 +21,8 @@
2020:Дыхание анемонии
2021:Торжество разума
2022:Дуэль! К вершинам карточного мастерства!
2023:Лето! Парк развлечений? Мираж!
2024:Мегасхватка меков
// 1.0
1001:Праздник морских фонарей
5001:Элементальная жаровня
@@ -166,7 +168,7 @@
5116:Второе цветение
5117:Воинский дух
5118:Эпичный бой жуков великолепного Аратаки
5119:Горячая битва: Тактическое построение
5119:Горячая битва: Секрет совершенствования
5121:Сокол
5122:Царь пустыни
5126:Пустыня Хадрамавет
@@ -194,12 +196,22 @@
5143:В пламени горна
5146:Священный призыв семерых: Сияющие секреты
// 3.8
5140: Исследование опасных дорог.
5141: Испытание авантюриста — продвинутый уровень (v2)
5142: телепатия
5145: Приглашение - Кая
5148:Обучение зеркальному литью - неизмеримая война
5119: Зов семи святых - Режим горячего боя: универсальное руководство
5140:Опасное исследование
5141:Испытание для искателей приключений: Расширенное
5142:Единение сердец
5145:Встреча
5148:В пламени горна: Бесконечный рой
5119:Горячая битва: Секрет совершенствования
// 4.0
5148:В пламени горна: Бесконечный рой
5119:Горячая битва: Секрет совершенствования
5147:Наука о свете и тени: Фонтан очарования
5149:Пятнистый Кот
5150:Историческая память: Наследие водной нации
5151:Приговор лезвий
5153:Одинокий король земли и моря
5154:Танец пружин и шестерён
5158:Море земли, исток всех вод
// новички и особые события
101: путь вперед определен
1014:Отправить активность Барбары
@@ -217,4 +229,4 @@
10012: Байки из чужой земли
10013: Облачный метеоритный бег
50001: Люди всех слоев общества.
50002: неглубокая пение молитвы
50002: неглубокая пение молитвы

View File

@@ -1,4 +1,4 @@
20412:Лампа заблудших
20412:Лампа заблудших
20413:Лампа заблудших
20422:Мудрец лозы
20423:Мудрец лозы
@@ -118,6 +118,46 @@
30544:Тычинка истока Хварны
30553:Древнее увядание
30554:Древнее увядание
31412:Забытый сосуд
31413:Забытый сосуд
31422:Увертюра шедевра
31423:Увертюра шедевра
31432:Лик старого солдата
31433:Лик старого солдата
31442:Брошь охотника
31443:Брошь охотника
31452:Мгновение правосудия
31453:Мгновение правосудия
31513:Забытый сосуд
31514:Забытый сосуд
31523:Увертюра шедевра
31524:Увертюра шедевра
31533:Лик старого солдата
31534:Лик старого солдата
31543:Брошь охотника
31544:Брошь охотника
31553:Мгновение правосудия
31554:Мгновение правосудия
32412:Суета золотой ночи
32413:Суета золотой ночи
32422:Перо золотой птицы
32423:Перо золотой птицы
32432:Награда Золотой труппы
32433:Награда Золотой труппы
32442:Вариация золотой песни
32443:Вариация золотой песни
32452:Предзнаменование золотой эпохи
32453:Предзнаменование золотой эпохи
32513:Суета золотой ночи
32514:Суета золотой ночи
32523:Перо золотой птицы
32524:Перо золотой птицы
32533:Награда Золотой труппы
32534:Награда Золотой труппы
32543:Вариация золотой песни
32544:Вариация золотой песни
32553:Предзнаменование золотой эпохи
32554:Предзнаменование золотой эпохи
51110:Кубок временщика
51111:Кубок временщика
51112:Кубок временщика
@@ -2168,6 +2208,81 @@
77552:Окончание концерта
77553:Окончание концерта
77554:Окончание концерта
78310:Кубок северных ветров
78311:Кубок северных ветров
78312:Кубок северных ветров
78313:Кубок северных ветров
78314:Кубок северных ветров
78320:Перо снежных равнин
78321:Перо снежных равнин
78322:Перо снежных равнин
78323:Перо снежных равнин
78324:Перо снежных равнин
78330:Корона мёрзлых рек
78331:Корона мёрзлых рек
78332:Корона мёрзлых рек
78333:Корона мёрзлых рек
78334:Корона мёрзлых рек
78340:Сердце зимнего леса
78341:Сердце зимнего леса
78342:Сердце зимнего леса
78343:Сердце зимнего леса
78344:Сердце зимнего леса
78350:Часы песчаных льдов
78351:Часы песчаных льдов
78352:Часы песчаных льдов
78353:Часы песчаных льдов
78354:Часы песчаных льдов
78410:Кубок северных ветров
78411:Кубок северных ветров
78412:Кубок северных ветров
78413:Кубок северных ветров
78414:Кубок северных ветров
78420:Перо снежных равнин
78421:Перо снежных равнин
78422:Перо снежных равнин
78423:Перо снежных равнин
78424:Перо снежных равнин
78430:Корона мёрзлых рек
78431:Корона мёрзлых рек
78432:Корона мёрзлых рек
78433:Корона мёрзлых рек
78434:Корона мёрзлых рек
78440:Сердце зимнего леса
78441:Сердце зимнего леса
78442:Сердце зимнего леса
78443:Сердце зимнего леса
78444:Сердце зимнего леса
78450:Часы песчаных льдов
78451:Часы песчаных льдов
78452:Часы песчаных льдов
78453:Часы песчаных льдов
78454:Часы песчаных льдов
78510:Кубок северных ветров
78511:Кубок северных ветров
78512:Кубок северных ветров
78513:Кубок северных ветров
78514:Кубок северных ветров
78520:Перо снежных равнин
78521:Перо снежных равнин
78522:Перо снежных равнин
78523:Перо снежных равнин
78524:Перо снежных равнин
78530:Корона мёрзлых рек
78531:Корона мёрзлых рек
78532:Корона мёрзлых рек
78533:Корона мёрзлых рек
78534:Корона мёрзлых рек
78540:Сердце зимнего леса
78541:Сердце зимнего леса
78542:Сердце зимнего леса
78543:Сердце зимнего леса
78544:Сердце зимнего леса
78550:Часы песчаных льдов
78551:Часы песчаных льдов
78552:Часы песчаных льдов
78553:Часы песчаных льдов
78554:Часы песчаных льдов
79310:Предвестник бури
79311:Предвестник бури
79312:Предвестник бури
@@ -3037,4 +3152,79 @@
98543:Цветок призрачного аромата
98544:Цветок призрачного аромата
98553:Символ подношения
98554:Символ подношения
98554:Символ подношения
99310:Чаша хозяина ветров
99311:Чаша хозяина ветров
99312:Чаша хозяина ветров
99313:Чаша хозяина ветров
99314:Чаша хозяина ветров
99320:Перо хозяина ветров
99321:Перо хозяина ветров
99322:Перо хозяина ветров
99323:Перо хозяина ветров
99324:Перо хозяина ветров
99330:Корона хозяина ветров
99331:Корона хозяина ветров
99332:Корона хозяина ветров
99333:Корона хозяина ветров
99334:Корона хозяина ветров
99340:Цветок хозяина ветров
99341:Цветок хозяина ветров
99342:Цветок хозяина ветров
99343:Цветок хозяина ветров
99344:Цветок хозяина ветров
99350:Часы хозяина ветров
99351:Часы хозяина ветров
99352:Часы хозяина ветров
99353:Часы хозяина ветров
99354:Часы хозяина ветров
99410:Чаша хозяина ветров
99411:Чаша хозяина ветров
99412:Чаша хозяина ветров
99413:Чаша хозяина ветров
99414:Чаша хозяина ветров
99420:Перо хозяина ветров
99421:Перо хозяина ветров
99422:Перо хозяина ветров
99423:Перо хозяина ветров
99424:Перо хозяина ветров
99430:Корона хозяина ветров
99431:Корона хозяина ветров
99432:Корона хозяина ветров
99433:Корона хозяина ветров
99434:Корона хозяина ветров
99440:Цветок хозяина ветров
99441:Цветок хозяина ветров
99442:Цветок хозяина ветров
99443:Цветок хозяина ветров
99444:Цветок хозяина ветров
99450:Часы хозяина ветров
99451:Часы хозяина ветров
99452:Часы хозяина ветров
99453:Часы хозяина ветров
99454:Часы хозяина ветров
99510:Чаша хозяина ветров
99511:Чаша хозяина ветров
99512:Чаша хозяина ветров
99513:Чаша хозяина ветров
99514:Чаша хозяина ветров
99520:Перо хозяина ветров
99521:Перо хозяина ветров
99522:Перо хозяина ветров
99523:Перо хозяина ветров
99524:Перо хозяина ветров
99530:Корона хозяина ветров
99531:Корона хозяина ветров
99532:Корона хозяина ветров
99533:Корона хозяина ветров
99534:Корона хозяина ветров
99540:Цветок хозяина ветров
99541:Цветок хозяина ветров
99542:Цветок хозяина ветров
99543:Цветок хозяина ветров
99544:Цветок хозяина ветров
99550:Часы хозяина ветров
99551:Часы хозяина ветров
99552:Часы хозяина ветров
99553:Часы хозяина ветров
99554:Часы хозяина ветров

View File

@@ -2,8 +2,10 @@
21:Позолоченные сны
27:Хроники Чертогов в пустыне
28:Цветок потерянного рая
29:水仙之梦
30:花海甘露之光
29:Сон нимфы
30:Сияние Вурукаши
31:Охотник Сумеречного двора
32:Золотая труппа
51:Решимость временщика
52:Душа храбреца
53:Воля защитника

View File

@@ -1,8 +1,8 @@
1002:Камисато Аяка
1002:Камисато Аяка
1003:Джинн
1005:Итэр
1005:Мужской персонаж
1006:Лиза
1007:Люмин
1007:Женский персонаж
1014:Барбара
1015:Кэйа
1016:Дилюк
@@ -45,7 +45,6 @@
1058:Яэ Мико
1059:Сиканоин Хэйдзо
1060:Е Лань
1061:Кирара
1062:Элой
1063:Шэнь Хэ
1064:Юнь Цзинь
@@ -60,10 +59,14 @@
1073:Нахида
1074:Лайла
1075:Странник
1076:Фарузан
1077:Яо Яо
1078:Аль-Хайтам
1079:Дэхья
1080:Мика
1081:Кавех
1082:Бай Чжу
1082:Бай Чжу
1076:Фарузан
1061:Кирара
1083:Линетт
1084:Лини
1085:Фремине

Some files were not shown because too many files have changed in this diff Show More