Compare commits
156 Commits
Author | SHA1 | Date | |
---|---|---|---|
13a65e2007 | |||
62d9a19e0e | |||
f9a611fc94 | |||
a055dc5299 | |||
346a68ddb4 | |||
e8736c997a | |||
![]() |
5d383ad72f | ||
![]() |
0ec942275e | ||
![]() |
24a38cbdf4 | ||
c0a798ba93 | |||
d930e3ee11 | |||
![]() |
3dbfa76de9 | ||
8634d37977 | |||
f2a923a654 | |||
5737a967b3 | |||
5f80a270c1 | |||
e3664f577e | |||
46eb1ee6b1 | |||
a43744c89d | |||
12d7dde2e7 | |||
![]() |
69068fad63 | ||
![]() |
2975ef0b49 | ||
0871238e59 | |||
5f2755f5bb | |||
746254c348 | |||
c43b73db3f | |||
af40aed3f3 | |||
![]() |
ea013737f6 | ||
79d4b266b8 | |||
6430000aad | |||
2b6af9aacd | |||
43ff071250 | |||
a70a3979e5 | |||
013b3c76b4 | |||
6575931ab2 | |||
26f5f31be5 | |||
7204297465 | |||
![]() |
4dfcb2538d | ||
![]() |
e9cd500628 | ||
7ce0c132fe | |||
5b1d86b155 | |||
53cb968e67 | |||
314f9b67e3 | |||
50f7e72ff5 | |||
ce7ac5bc8a | |||
aff13c2a97 | |||
eba9db1e35 | |||
71ac75a4ca | |||
f393b372ec | |||
cfb94e70b7 | |||
ab9b955c31 | |||
4e4b47a9e6 | |||
3da3bc4f23 | |||
7cc46eb677 | |||
b9d1a2c2cd | |||
a0cc908983 | |||
7dc7c7c8ac | |||
ad4ca74e71 | |||
a079685be8 | |||
6703037527 | |||
417f0b7334 | |||
45aec44f39 | |||
7dd1e78512 | |||
418dfec289 | |||
bc69a1c4ba | |||
63f7eda5c3 | |||
879bc34358 | |||
c5a6d7f041 | |||
20b1aca700 | |||
fb1a332f2c | |||
867bdd1d00 | |||
5e28d1e625 | |||
e6ecde9951 | |||
![]() |
2cb9f08caa | ||
![]() |
9eba1d6368 | ||
![]() |
ef4f06d6c3 | ||
2857024b4c | |||
61f53d11e4 | |||
4bb4f4a715 | |||
e68e7e2c12 | |||
![]() |
49b56d7354 | ||
![]() |
9e69037972 | ||
![]() |
973cbead42 | ||
0c0f9fc03e | |||
b15eea8d1b | |||
6b8b392d65 | |||
![]() |
dfd93fcdb0 | ||
![]() |
f80be7608c | ||
12b8608a16 | |||
![]() |
f34e97c8c8 | ||
13d6109c8c | |||
14c455071b | |||
6e978543a6 | |||
23c0aff49f | |||
2bbe0e1a65 | |||
f678b10171 | |||
cae6f73eeb | |||
![]() |
66aa1bc8cb | ||
19b637eee9 | |||
![]() |
0377b0141a | ||
3e89c93589 | |||
a3bb2c9cf4 | |||
![]() |
da86e2672d | ||
110c1017e7 | |||
166f0b5fda | |||
2de8a46bd5 | |||
e90aaf6f97 | |||
b37ead7acf | |||
ed9b393478 | |||
037d2c4a5a | |||
563cee5c4c | |||
7f10eb8ac4 | |||
![]() |
3c7a21cdbd | ||
f59a76e236 | |||
9bc4c07112 | |||
792ff48bb9 | |||
21ac4151a7 | |||
06192a06fe | |||
c69369857d | |||
17b055d898 | |||
8da2e6a4c7 | |||
1006124f8a | |||
7155ecd05d | |||
fcfef2317b | |||
407ee069c1 | |||
b798593cbb | |||
![]() |
378f978000 | ||
3b5c5460f0 | |||
509db272a8 | |||
99db22a18e | |||
![]() |
e09f08018f | ||
![]() |
fc4124e35b | ||
ac3b04eb52 | |||
93104f7b8b | |||
![]() |
91b5e572a3 | ||
5c5108fe13 | |||
03b5d89410 | |||
239ade1402 | |||
c6ade7e9ae | |||
adb50c8b31 | |||
01dc1b6f1c | |||
265b23f475 | |||
![]() |
1840c94861 | ||
19803fcf9c | |||
![]() |
853565cb25 | ||
c3b70f35f0 | |||
![]() |
03eed22830 | ||
85cdad1b98 | |||
ee660d0f00 | |||
28de142144 | |||
61eb707ac0 | |||
92c92e0ccb | |||
f4ad46ae53 | |||
193cef5b2c | |||
daeb0d516e | |||
9709cdc50f |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 79 KiB |
BIN
Doc/Screenshots-en/12-Remote.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
Doc/Screenshots-en/13-Quest.png
Normal file
After Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 37 KiB |
BIN
Doc/Screenshots-ru/0-Home.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
Doc/Screenshots-ru/1-CustomCommands.png
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
Doc/Screenshots-ru/10-Waypoints.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
Doc/Screenshots-ru/11-Manage.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
Doc/Screenshots-ru/12-Credits.png
Normal file
After Width: | Height: | Size: 42 KiB |
BIN
Doc/Screenshots-ru/13-Remote.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
Doc/Screenshots-ru/14-GachaBannerEditor.png
Normal file
After Width: | Height: | Size: 57 KiB |
BIN
Doc/Screenshots-ru/15-TextMapBrowser.png
Normal file
After Width: | Height: | Size: 43 KiB |
BIN
Doc/Screenshots-ru/2-CustomArtifact.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
Doc/Screenshots-ru/3-Quest.png
Normal file
After Width: | Height: | Size: 36 KiB |
BIN
Doc/Screenshots-ru/4-SpawnEntity.png
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
Doc/Screenshots-ru/5-GiveAvatar.png
Normal file
After Width: | Height: | Size: 195 KiB |
BIN
Doc/Screenshots-ru/6-CustomStats.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
Doc/Screenshots-ru/7-CustomWeapon.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
Doc/Screenshots-ru/8-GiveItem.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
Doc/Screenshots-ru/9-ChangeScene.png
Normal file
After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 114 KiB After Width: | Height: | Size: 84 KiB |
BIN
Doc/Screenshots/12-Remote.png
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
Doc/Screenshots/13-Quest.png
Normal file
After Width: | Height: | Size: 49 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 128 KiB |
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 31 KiB |
BIN
Doc/Screenshots/ConfigHttp.png
Normal file
After Width: | Height: | Size: 32 KiB |
74
README.md
@@ -1,63 +1,65 @@
|
||||
# Grasscutter Tools
|
||||
|
||||
中文 | [EN](README_en-US.md)
|
||||
[](https://github.com/jie65535/GrasscutterCommandGenerator/blob/main/LICENSE)
|
||||
[](https://github.com/jie65535/GrasscutterCommandGenerator/stargazers)
|
||||
[](https://github.com/jie65535/GrasscutterCommandGenerator/releases)
|
||||
|
||||
English | [简体中文](README_zh-cn.md) | [Русский](README_ru-RU.md)
|
||||
|
||||
## Commands Generator
|
||||
|
||||
请从 [Releases](https://github.com/jie65535/GrasscutterCommandGenerator/releases) 中获取最新版本
|
||||
Please download the latest version from [Releases](https://github.com/jie65535/GrasscutterCommandGenerator/releases)
|
||||
|
||||
## 远程执行
|
||||
Support 简体中文, 繁体中文, English and Русский languages.
|
||||
|
||||
服务端需要 [gc-opencommand-plugin](https://github.com/jie65535/gc-opencommand-plugin) 插件支持
|
||||
Welcome everyone to improve the [ID Resource](/Source/GrasscutterTools/Resources/en-us).
|
||||
|
||||
## Remote command
|
||||
|
||||
The server require [gc-opencommand-plugin](https://github.com/jie65535/gc-opencommand-plugin) support
|
||||
|
||||

|
||||
|
||||
> If you cannot connect to the server, please make sure the server address is correct.
|
||||
>
|
||||
> It is recommended to configure the server to HTTP mode, as shown in the figure(config.json):
|
||||
> 
|
||||
>
|
||||
> You can visit http://127.0.0.1/status/server with a browser to test whether the service is working properly.
|
||||
>
|
||||
> If you are not using port `80`, specify the port number to access in the url: http://127.0.0.1:443
|
||||
|
||||
---
|
||||
|
||||
## TODO List
|
||||
- [ ] 多语言支持(进度:UI已经支持英语,但还有许多ID映射文件缺失,欢迎补充)
|
||||
- [x] Animal.txt
|
||||
- [x] Artifact.txt
|
||||
- [ ] ArtifactCat.txt
|
||||
- [ ] ArtifactMainAttribution.txt
|
||||
- [ ] ArtifactSubAttribution.txt
|
||||
- [x] Avatar.txt
|
||||
- [x] CustomCommands.txt
|
||||
- [x] Item.txt
|
||||
- [x] Monster.txt
|
||||
- [x] NPC.txt
|
||||
- [ ] Ornament.txt
|
||||
- [x] Scene.txt
|
||||
- [x] Weapon.txt
|
||||
- [ ] Quest.txt
|
||||
- [x] 远程执行命令
|
||||
- [ ] 邮件编辑器(无进度)
|
||||
- [ ] 商店编辑器(无进度)
|
||||
|
||||
## 软件截图
|
||||
## Screenshots
|
||||
|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
@@ -1,63 +0,0 @@
|
||||
# Grasscutter Tools
|
||||
|
||||
[中文](README.md) | EN
|
||||
|
||||
## Commands Generator
|
||||
|
||||
Please download the latest version from [Releases](https://github.com/jie65535/GrasscutterCommandGenerator/releases)
|
||||
|
||||
## Remote command
|
||||
|
||||
The server require [gc-opencommand-plugin](https://github.com/jie65535/gc-opencommand-plugin) support
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## TODO List
|
||||
- [ ] Multi-language support (progress: UI already supports English, but there are still many ID mapping files missing, welcome to add)
|
||||
- [x] Animal.txt
|
||||
- [x] Artifact.txt
|
||||
- [ ] ArtifactCat.txt
|
||||
- [ ] ArtifactMainAttribution.txt
|
||||
- [ ] ArtifactSubAttribution.txt
|
||||
- [x] Avatar.txt
|
||||
- [x] CustomCommands.txt
|
||||
- [x] Item.txt
|
||||
- [x] Monster.txt
|
||||
- [x] NPC.txt
|
||||
- [ ] Ornament.txt
|
||||
- [x] Scene.txt
|
||||
- [x] Weapon.txt
|
||||
- [ ] Quest.txt
|
||||
- [x] Execute command remotely
|
||||
- [ ] Mail Editor (no progress)
|
||||
- [ ] Shop Editor (no progress)
|
||||
|
||||
## Screenshots
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
69
README_ru-RU.md
Normal file
@@ -0,0 +1,69 @@
|
||||
# Grasscutter Tools
|
||||
|
||||
[](https://github.com/jie65535/GrasscutterCommandGenerator/blob/main/LICENSE)
|
||||
[](https://github.com/jie65535/GrasscutterCommandGenerator/stargazers)
|
||||
[](https://github.com/jie65535/GrasscutterCommandGenerator/releases)
|
||||
|
||||
[English](README.md) | [简体中文](README_zh-cn.md) | Русский - Перевод [Юрий Дворецкий](https://github.com/yurikenjx) (с исправлениями от [EgorBron](https://github.com/EgorBron))
|
||||
|
||||
## Генератор команд (GCG)
|
||||
|
||||
Загрузите последнюю версию из вкладки [Releases](https://github.com/jie65535/GrasscutterCommandGenerator/releases).
|
||||
|
||||
GCG поддерживает 简体中文 (китайский упр.), 繁体中文 (китайский трад.), English (английский) и Русский языки.
|
||||
|
||||
Приглашаем всех улучшить [ID ресурсов и перевод](/Source/GrasscutterTools/Resources/ru-ru)
|
||||
|
||||
## Удаленная команда (OpenCommand)
|
||||
|
||||
Чтобы использовать команды прямо из GCG, серверу требуется плагин [gc-opencommand-plugin](https://github.com/jie65535/gc-opencommand-plugin).
|
||||
|
||||

|
||||
|
||||
> Если вы не можете подключиться к серверу, проверьте правильность написания его URL-адреса.
|
||||
>
|
||||
> Рекомендуется изменить секцию HTTP в конфиге как на скриншоте ниже (конфиг - файл config.json):
|
||||
>
|
||||
> 
|
||||
>
|
||||
> Для проверки можете посетить http://127.0.0.1/status/server в браузере, чтобы проверить работоспособность OpenCommand.
|
||||
>
|
||||
> Если вы не указали порт `80` в конфиге, вам нужно указать свой порт в URL-адресе (например, http://127.0.0.1:443)
|
||||
|
||||
---
|
||||
|
||||
## Скриншоты
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
<!--  -->
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
64
README_zh-cn.md
Normal file
@@ -0,0 +1,64 @@
|
||||
# Grasscutter Tools
|
||||
|
||||
[](https://github.com/jie65535/GrasscutterCommandGenerator/blob/main/LICENSE)
|
||||
[](https://github.com/jie65535/GrasscutterCommandGenerator/stargazers)
|
||||
[](https://github.com/jie65535/GrasscutterCommandGenerator/releases)
|
||||
|
||||
[English](README.md) | 简体中文 | [Русский](README_ru-RU.md)
|
||||
|
||||
## Commands Generator
|
||||
|
||||
请从 [Releases](https://github.com/jie65535/GrasscutterCommandGenerator/releases) 中获取最新版本
|
||||
|
||||
本工具支持 简体中文, 繁体中文, English 与 Русский 语言。
|
||||
|
||||
欢迎大家一起来完善工具的[内置资源](/Source/GrasscutterTools/Resources/zh-cn)。
|
||||
|
||||
## 远程执行
|
||||
|
||||
服务端需要 [gc-opencommand-plugin](https://github.com/jie65535/gc-opencommand-plugin) 插件支持
|
||||
|
||||

|
||||
|
||||
> 如果你无法连接到服务器,请确认填写的服务器地址是否正确。
|
||||
>
|
||||
> 建议配置服务器为HTTP模式,如图所示(config.json):
|
||||
> 
|
||||
>
|
||||
> 你可以用浏览器访问 http://127.0.0.1/status/server 来测试服务是否正常工作。
|
||||
>
|
||||
> 如果使用的不是`80`端口,则要在url中指定访问的端口号:http://127.0.0.1:443
|
||||
|
||||
---
|
||||
|
||||
## 软件截图
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
@@ -1,36 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<configuration>
|
||||
<configSections>
|
||||
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<section name="GrasscutterTools.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
|
||||
</sectionGroup>
|
||||
</configSections>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
|
||||
</startup>
|
||||
<userSettings>
|
||||
<GrasscutterTools.Properties.Settings>
|
||||
<setting name="AutoCopy" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="Uid" serializeAs="String">
|
||||
<value>10001</value>
|
||||
</setting>
|
||||
<setting name="DefaultLanguage" serializeAs="String">
|
||||
<value>zh-CN</value>
|
||||
</setting>
|
||||
<setting name="ResourcesDirPath" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="TextMapFileName" serializeAs="String">
|
||||
<value>TextMapCHS</value>
|
||||
</setting>
|
||||
<setting name="RemoteUid" serializeAs="String">
|
||||
<value>10001</value>
|
||||
</setting>
|
||||
<setting name="Host" serializeAs="String">
|
||||
<value>https://127.0.0.1</value>
|
||||
</setting>
|
||||
</GrasscutterTools.Properties.Settings>
|
||||
</userSettings>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
|
||||
</startup>
|
||||
</configuration>
|
15
Source/GrasscutterTools/App.xaml
Normal file
@@ -0,0 +1,15 @@
|
||||
<Application
|
||||
x:Class="GrasscutterTools.App"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:local="clr-namespace:GrasscutterTools"
|
||||
StartupUri="/Windows/MainWindow.xaml">
|
||||
<Application.Resources>
|
||||
<ResourceDictionary>
|
||||
<ResourceDictionary.MergedDictionaries>
|
||||
<ResourceDictionary Source="Styles/ScrollViewerStyle.xaml" />
|
||||
<ResourceDictionary Source="Themes/ExpressionDark/Theme.xaml" />
|
||||
</ResourceDictionary.MergedDictionaries>
|
||||
</ResourceDictionary>
|
||||
</Application.Resources>
|
||||
</Application>
|
17
Source/GrasscutterTools/App.xaml.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Configuration;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
|
||||
namespace GrasscutterTools
|
||||
{
|
||||
/// <summary>
|
||||
/// App.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class App : Application
|
||||
{
|
||||
}
|
||||
}
|
@@ -25,6 +25,9 @@ namespace GrasscutterTools.DispatchServer.Model
|
||||
[JsonProperty("playerCount")]
|
||||
public int PlayerCount { get; set; }
|
||||
|
||||
[JsonProperty("MaxPlayer")]
|
||||
public int MaxPlayer { get; set; } = -1;
|
||||
|
||||
[JsonProperty("version")]
|
||||
public string Version { get; set; }
|
||||
}
|
||||
|
14
Source/GrasscutterTools/Events/CommandGeneratedEventArgs.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
using System;
|
||||
|
||||
namespace GrasscutterTools.Events
|
||||
{
|
||||
public class CommandGeneratedEventArgs : EventArgs
|
||||
{
|
||||
public CommandGeneratedEventArgs(string command = "")
|
||||
{
|
||||
Command = command;
|
||||
}
|
||||
|
||||
public string Command { get; set; }
|
||||
}
|
||||
}
|
10
Source/GrasscutterTools/Events/ListChangedEventArgs.cs
Normal file
@@ -0,0 +1,10 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace GrasscutterTools.Events
|
||||
{
|
||||
public class ListChangedEventArgs : EventArgs
|
||||
{
|
||||
public IEnumerable<string> List { get; set; }
|
||||
}
|
||||
}
|
@@ -1,4 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
|
||||
<Costura />
|
||||
</Weavers>
|
@@ -1,579 +0,0 @@
|
||||
|
||||
namespace GrasscutterTools
|
||||
{
|
||||
partial class FormGachaBannerEditor
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormGachaBannerEditor));
|
||||
this.GrpBannerValues = new System.Windows.Forms.GroupBox();
|
||||
this.CmbPrefab = new System.Windows.Forms.ComboBox();
|
||||
this.LblEventChanceTip = new System.Windows.Forms.Label();
|
||||
this.NUDEventChance = new System.Windows.Forms.NumericUpDown();
|
||||
this.LblGachaType = new System.Windows.Forms.Label();
|
||||
this.LblEventChance = new System.Windows.Forms.Label();
|
||||
this.NUDBaseYellowWeight = new System.Windows.Forms.NumericUpDown();
|
||||
this.LblSortId = new System.Windows.Forms.Label();
|
||||
this.TxtRateUpItems2 = new System.Windows.Forms.TextBox();
|
||||
this.LblBaseYellowWeight = new System.Windows.Forms.Label();
|
||||
this.NUDGachaType = new System.Windows.Forms.NumericUpDown();
|
||||
this.NUDSortId = new System.Windows.Forms.NumericUpDown();
|
||||
this.LblRateUpItems2 = new System.Windows.Forms.Label();
|
||||
this.LblSoftPity = new System.Windows.Forms.Label();
|
||||
this.LblGachaTypeTip = new System.Windows.Forms.Label();
|
||||
this.LblEndTime = new System.Windows.Forms.Label();
|
||||
this.LblRateUpItems1 = new System.Windows.Forms.Label();
|
||||
this.NUDSoftPity = new System.Windows.Forms.NumericUpDown();
|
||||
this.LblScheduleId = new System.Windows.Forms.Label();
|
||||
this.LblBeginTime = new System.Windows.Forms.Label();
|
||||
this.TxtRateUpItems1 = new System.Windows.Forms.TextBox();
|
||||
this.LblHardPity = new System.Windows.Forms.Label();
|
||||
this.NUDScheduleId = new System.Windows.Forms.NumericUpDown();
|
||||
this.NUDEndTime = new System.Windows.Forms.NumericUpDown();
|
||||
this.LblHardPityTip = new System.Windows.Forms.Label();
|
||||
this.NUDHardPity = new System.Windows.Forms.NumericUpDown();
|
||||
this.LblScheduleIdTip = new System.Windows.Forms.Label();
|
||||
this.NUDBeginTime = new System.Windows.Forms.NumericUpDown();
|
||||
this.LblSoftPityTip = new System.Windows.Forms.Label();
|
||||
this.LblBasePurpleWeight = new System.Windows.Forms.Label();
|
||||
this.CmbBannerType = new System.Windows.Forms.ComboBox();
|
||||
this.LblSortIdTip = new System.Windows.Forms.Label();
|
||||
this.NUDBasePurpleWeight = new System.Windows.Forms.NumericUpDown();
|
||||
this.LblBannerType = new System.Windows.Forms.Label();
|
||||
this.LblBasePurpleWeightTip = new System.Windows.Forms.Label();
|
||||
this.RbCostItem224 = new System.Windows.Forms.RadioButton();
|
||||
this.LblBaseYellowWeightTip = new System.Windows.Forms.Label();
|
||||
this.LblCostItem = new System.Windows.Forms.Label();
|
||||
this.LblPrefabPath = new System.Windows.Forms.Label();
|
||||
this.RbCostItem223 = new System.Windows.Forms.RadioButton();
|
||||
this.GrpPurplePool = new System.Windows.Forms.GroupBox();
|
||||
this.ListPurplePool = new System.Windows.Forms.CheckedListBox();
|
||||
this.GrpYellowPool = new System.Windows.Forms.GroupBox();
|
||||
this.ListYellowPool = new System.Windows.Forms.CheckedListBox();
|
||||
this.GrpJson = new System.Windows.Forms.GroupBox();
|
||||
this.BtnGen = new System.Windows.Forms.Button();
|
||||
this.TxtJson = new System.Windows.Forms.TextBox();
|
||||
this.BtnParse = new System.Windows.Forms.Button();
|
||||
this.GrpBannerValues.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUDEventChance)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUDBaseYellowWeight)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUDGachaType)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUDSortId)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUDSoftPity)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUDScheduleId)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUDEndTime)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUDHardPity)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUDBeginTime)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUDBasePurpleWeight)).BeginInit();
|
||||
this.GrpPurplePool.SuspendLayout();
|
||||
this.GrpYellowPool.SuspendLayout();
|
||||
this.GrpJson.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// GrpBannerValues
|
||||
//
|
||||
resources.ApplyResources(this.GrpBannerValues, "GrpBannerValues");
|
||||
this.GrpBannerValues.Controls.Add(this.CmbPrefab);
|
||||
this.GrpBannerValues.Controls.Add(this.LblEventChanceTip);
|
||||
this.GrpBannerValues.Controls.Add(this.NUDEventChance);
|
||||
this.GrpBannerValues.Controls.Add(this.LblGachaType);
|
||||
this.GrpBannerValues.Controls.Add(this.LblEventChance);
|
||||
this.GrpBannerValues.Controls.Add(this.NUDBaseYellowWeight);
|
||||
this.GrpBannerValues.Controls.Add(this.LblSortId);
|
||||
this.GrpBannerValues.Controls.Add(this.TxtRateUpItems2);
|
||||
this.GrpBannerValues.Controls.Add(this.LblBaseYellowWeight);
|
||||
this.GrpBannerValues.Controls.Add(this.NUDGachaType);
|
||||
this.GrpBannerValues.Controls.Add(this.NUDSortId);
|
||||
this.GrpBannerValues.Controls.Add(this.LblRateUpItems2);
|
||||
this.GrpBannerValues.Controls.Add(this.LblSoftPity);
|
||||
this.GrpBannerValues.Controls.Add(this.LblGachaTypeTip);
|
||||
this.GrpBannerValues.Controls.Add(this.LblEndTime);
|
||||
this.GrpBannerValues.Controls.Add(this.LblRateUpItems1);
|
||||
this.GrpBannerValues.Controls.Add(this.NUDSoftPity);
|
||||
this.GrpBannerValues.Controls.Add(this.LblScheduleId);
|
||||
this.GrpBannerValues.Controls.Add(this.LblBeginTime);
|
||||
this.GrpBannerValues.Controls.Add(this.TxtRateUpItems1);
|
||||
this.GrpBannerValues.Controls.Add(this.LblHardPity);
|
||||
this.GrpBannerValues.Controls.Add(this.NUDScheduleId);
|
||||
this.GrpBannerValues.Controls.Add(this.NUDEndTime);
|
||||
this.GrpBannerValues.Controls.Add(this.LblHardPityTip);
|
||||
this.GrpBannerValues.Controls.Add(this.NUDHardPity);
|
||||
this.GrpBannerValues.Controls.Add(this.LblScheduleIdTip);
|
||||
this.GrpBannerValues.Controls.Add(this.NUDBeginTime);
|
||||
this.GrpBannerValues.Controls.Add(this.LblSoftPityTip);
|
||||
this.GrpBannerValues.Controls.Add(this.LblBasePurpleWeight);
|
||||
this.GrpBannerValues.Controls.Add(this.CmbBannerType);
|
||||
this.GrpBannerValues.Controls.Add(this.LblSortIdTip);
|
||||
this.GrpBannerValues.Controls.Add(this.NUDBasePurpleWeight);
|
||||
this.GrpBannerValues.Controls.Add(this.LblBannerType);
|
||||
this.GrpBannerValues.Controls.Add(this.LblBasePurpleWeightTip);
|
||||
this.GrpBannerValues.Controls.Add(this.RbCostItem224);
|
||||
this.GrpBannerValues.Controls.Add(this.LblBaseYellowWeightTip);
|
||||
this.GrpBannerValues.Controls.Add(this.LblCostItem);
|
||||
this.GrpBannerValues.Controls.Add(this.LblPrefabPath);
|
||||
this.GrpBannerValues.Controls.Add(this.RbCostItem223);
|
||||
this.GrpBannerValues.Name = "GrpBannerValues";
|
||||
this.GrpBannerValues.TabStop = false;
|
||||
//
|
||||
// CmbPrefab
|
||||
//
|
||||
resources.ApplyResources(this.CmbPrefab, "CmbPrefab");
|
||||
this.CmbPrefab.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.CmbPrefab.FormattingEnabled = true;
|
||||
this.CmbPrefab.Name = "CmbPrefab";
|
||||
//
|
||||
// LblEventChanceTip
|
||||
//
|
||||
resources.ApplyResources(this.LblEventChanceTip, "LblEventChanceTip");
|
||||
this.LblEventChanceTip.Name = "LblEventChanceTip";
|
||||
//
|
||||
// NUDEventChance
|
||||
//
|
||||
resources.ApplyResources(this.NUDEventChance, "NUDEventChance");
|
||||
this.NUDEventChance.Name = "NUDEventChance";
|
||||
this.NUDEventChance.Value = new decimal(new int[] {
|
||||
50,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
//
|
||||
// LblGachaType
|
||||
//
|
||||
resources.ApplyResources(this.LblGachaType, "LblGachaType");
|
||||
this.LblGachaType.Name = "LblGachaType";
|
||||
//
|
||||
// LblEventChance
|
||||
//
|
||||
resources.ApplyResources(this.LblEventChance, "LblEventChance");
|
||||
this.LblEventChance.Name = "LblEventChance";
|
||||
//
|
||||
// NUDBaseYellowWeight
|
||||
//
|
||||
resources.ApplyResources(this.NUDBaseYellowWeight, "NUDBaseYellowWeight");
|
||||
this.NUDBaseYellowWeight.DecimalPlaces = 2;
|
||||
this.NUDBaseYellowWeight.Name = "NUDBaseYellowWeight";
|
||||
this.NUDBaseYellowWeight.Value = new decimal(new int[] {
|
||||
6,
|
||||
0,
|
||||
0,
|
||||
65536});
|
||||
//
|
||||
// LblSortId
|
||||
//
|
||||
resources.ApplyResources(this.LblSortId, "LblSortId");
|
||||
this.LblSortId.Name = "LblSortId";
|
||||
//
|
||||
// TxtRateUpItems2
|
||||
//
|
||||
resources.ApplyResources(this.TxtRateUpItems2, "TxtRateUpItems2");
|
||||
this.TxtRateUpItems2.BackColor = System.Drawing.Color.White;
|
||||
this.TxtRateUpItems2.Name = "TxtRateUpItems2";
|
||||
this.TxtRateUpItems2.ReadOnly = true;
|
||||
//
|
||||
// LblBaseYellowWeight
|
||||
//
|
||||
resources.ApplyResources(this.LblBaseYellowWeight, "LblBaseYellowWeight");
|
||||
this.LblBaseYellowWeight.Name = "LblBaseYellowWeight";
|
||||
//
|
||||
// NUDGachaType
|
||||
//
|
||||
resources.ApplyResources(this.NUDGachaType, "NUDGachaType");
|
||||
this.NUDGachaType.Maximum = new decimal(new int[] {
|
||||
10000,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.NUDGachaType.Name = "NUDGachaType";
|
||||
this.NUDGachaType.Value = new decimal(new int[] {
|
||||
400,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
//
|
||||
// NUDSortId
|
||||
//
|
||||
resources.ApplyResources(this.NUDSortId, "NUDSortId");
|
||||
this.NUDSortId.Maximum = new decimal(new int[] {
|
||||
9999,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.NUDSortId.Minimum = new decimal(new int[] {
|
||||
1000,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.NUDSortId.Name = "NUDSortId";
|
||||
this.NUDSortId.Value = new decimal(new int[] {
|
||||
1000,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
//
|
||||
// LblRateUpItems2
|
||||
//
|
||||
resources.ApplyResources(this.LblRateUpItems2, "LblRateUpItems2");
|
||||
this.LblRateUpItems2.Name = "LblRateUpItems2";
|
||||
//
|
||||
// LblSoftPity
|
||||
//
|
||||
resources.ApplyResources(this.LblSoftPity, "LblSoftPity");
|
||||
this.LblSoftPity.Name = "LblSoftPity";
|
||||
//
|
||||
// LblGachaTypeTip
|
||||
//
|
||||
resources.ApplyResources(this.LblGachaTypeTip, "LblGachaTypeTip");
|
||||
this.LblGachaTypeTip.Name = "LblGachaTypeTip";
|
||||
//
|
||||
// LblEndTime
|
||||
//
|
||||
resources.ApplyResources(this.LblEndTime, "LblEndTime");
|
||||
this.LblEndTime.Name = "LblEndTime";
|
||||
//
|
||||
// LblRateUpItems1
|
||||
//
|
||||
resources.ApplyResources(this.LblRateUpItems1, "LblRateUpItems1");
|
||||
this.LblRateUpItems1.Name = "LblRateUpItems1";
|
||||
//
|
||||
// NUDSoftPity
|
||||
//
|
||||
resources.ApplyResources(this.NUDSoftPity, "NUDSoftPity");
|
||||
this.NUDSoftPity.Maximum = new decimal(new int[] {
|
||||
100000,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.NUDSoftPity.Name = "NUDSoftPity";
|
||||
this.NUDSoftPity.Value = new decimal(new int[] {
|
||||
75,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
//
|
||||
// LblScheduleId
|
||||
//
|
||||
resources.ApplyResources(this.LblScheduleId, "LblScheduleId");
|
||||
this.LblScheduleId.Name = "LblScheduleId";
|
||||
//
|
||||
// LblBeginTime
|
||||
//
|
||||
resources.ApplyResources(this.LblBeginTime, "LblBeginTime");
|
||||
this.LblBeginTime.Name = "LblBeginTime";
|
||||
//
|
||||
// TxtRateUpItems1
|
||||
//
|
||||
resources.ApplyResources(this.TxtRateUpItems1, "TxtRateUpItems1");
|
||||
this.TxtRateUpItems1.BackColor = System.Drawing.Color.White;
|
||||
this.TxtRateUpItems1.Name = "TxtRateUpItems1";
|
||||
this.TxtRateUpItems1.ReadOnly = true;
|
||||
//
|
||||
// LblHardPity
|
||||
//
|
||||
resources.ApplyResources(this.LblHardPity, "LblHardPity");
|
||||
this.LblHardPity.Name = "LblHardPity";
|
||||
//
|
||||
// NUDScheduleId
|
||||
//
|
||||
resources.ApplyResources(this.NUDScheduleId, "NUDScheduleId");
|
||||
this.NUDScheduleId.Maximum = new decimal(new int[] {
|
||||
10000,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.NUDScheduleId.Name = "NUDScheduleId";
|
||||
this.NUDScheduleId.Value = new decimal(new int[] {
|
||||
800,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
//
|
||||
// NUDEndTime
|
||||
//
|
||||
resources.ApplyResources(this.NUDEndTime, "NUDEndTime");
|
||||
this.NUDEndTime.Maximum = new decimal(new int[] {
|
||||
1924992000,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.NUDEndTime.Name = "NUDEndTime";
|
||||
this.NUDEndTime.Value = new decimal(new int[] {
|
||||
1924992000,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
//
|
||||
// LblHardPityTip
|
||||
//
|
||||
resources.ApplyResources(this.LblHardPityTip, "LblHardPityTip");
|
||||
this.LblHardPityTip.Name = "LblHardPityTip";
|
||||
//
|
||||
// NUDHardPity
|
||||
//
|
||||
resources.ApplyResources(this.NUDHardPity, "NUDHardPity");
|
||||
this.NUDHardPity.Maximum = new decimal(new int[] {
|
||||
100000,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.NUDHardPity.Name = "NUDHardPity";
|
||||
this.NUDHardPity.Value = new decimal(new int[] {
|
||||
90,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
//
|
||||
// LblScheduleIdTip
|
||||
//
|
||||
resources.ApplyResources(this.LblScheduleIdTip, "LblScheduleIdTip");
|
||||
this.LblScheduleIdTip.Name = "LblScheduleIdTip";
|
||||
//
|
||||
// NUDBeginTime
|
||||
//
|
||||
resources.ApplyResources(this.NUDBeginTime, "NUDBeginTime");
|
||||
this.NUDBeginTime.Maximum = new decimal(new int[] {
|
||||
1924992000,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.NUDBeginTime.Name = "NUDBeginTime";
|
||||
//
|
||||
// LblSoftPityTip
|
||||
//
|
||||
resources.ApplyResources(this.LblSoftPityTip, "LblSoftPityTip");
|
||||
this.LblSoftPityTip.Name = "LblSoftPityTip";
|
||||
//
|
||||
// LblBasePurpleWeight
|
||||
//
|
||||
resources.ApplyResources(this.LblBasePurpleWeight, "LblBasePurpleWeight");
|
||||
this.LblBasePurpleWeight.Name = "LblBasePurpleWeight";
|
||||
//
|
||||
// CmbBannerType
|
||||
//
|
||||
resources.ApplyResources(this.CmbBannerType, "CmbBannerType");
|
||||
this.CmbBannerType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.CmbBannerType.FormattingEnabled = true;
|
||||
this.CmbBannerType.Items.AddRange(new object[] {
|
||||
resources.GetString("CmbBannerType.Items"),
|
||||
resources.GetString("CmbBannerType.Items1"),
|
||||
resources.GetString("CmbBannerType.Items2")});
|
||||
this.CmbBannerType.Name = "CmbBannerType";
|
||||
//
|
||||
// LblSortIdTip
|
||||
//
|
||||
resources.ApplyResources(this.LblSortIdTip, "LblSortIdTip");
|
||||
this.LblSortIdTip.Name = "LblSortIdTip";
|
||||
//
|
||||
// NUDBasePurpleWeight
|
||||
//
|
||||
resources.ApplyResources(this.NUDBasePurpleWeight, "NUDBasePurpleWeight");
|
||||
this.NUDBasePurpleWeight.DecimalPlaces = 2;
|
||||
this.NUDBasePurpleWeight.Name = "NUDBasePurpleWeight";
|
||||
this.NUDBasePurpleWeight.Value = new decimal(new int[] {
|
||||
51,
|
||||
0,
|
||||
0,
|
||||
65536});
|
||||
//
|
||||
// LblBannerType
|
||||
//
|
||||
resources.ApplyResources(this.LblBannerType, "LblBannerType");
|
||||
this.LblBannerType.Name = "LblBannerType";
|
||||
//
|
||||
// LblBasePurpleWeightTip
|
||||
//
|
||||
resources.ApplyResources(this.LblBasePurpleWeightTip, "LblBasePurpleWeightTip");
|
||||
this.LblBasePurpleWeightTip.Name = "LblBasePurpleWeightTip";
|
||||
//
|
||||
// RbCostItem224
|
||||
//
|
||||
resources.ApplyResources(this.RbCostItem224, "RbCostItem224");
|
||||
this.RbCostItem224.Checked = true;
|
||||
this.RbCostItem224.Name = "RbCostItem224";
|
||||
this.RbCostItem224.TabStop = true;
|
||||
this.RbCostItem224.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// LblBaseYellowWeightTip
|
||||
//
|
||||
resources.ApplyResources(this.LblBaseYellowWeightTip, "LblBaseYellowWeightTip");
|
||||
this.LblBaseYellowWeightTip.Name = "LblBaseYellowWeightTip";
|
||||
//
|
||||
// LblCostItem
|
||||
//
|
||||
resources.ApplyResources(this.LblCostItem, "LblCostItem");
|
||||
this.LblCostItem.Name = "LblCostItem";
|
||||
//
|
||||
// LblPrefabPath
|
||||
//
|
||||
resources.ApplyResources(this.LblPrefabPath, "LblPrefabPath");
|
||||
this.LblPrefabPath.Name = "LblPrefabPath";
|
||||
//
|
||||
// RbCostItem223
|
||||
//
|
||||
resources.ApplyResources(this.RbCostItem223, "RbCostItem223");
|
||||
this.RbCostItem223.Name = "RbCostItem223";
|
||||
this.RbCostItem223.TabStop = true;
|
||||
this.RbCostItem223.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// GrpPurplePool
|
||||
//
|
||||
resources.ApplyResources(this.GrpPurplePool, "GrpPurplePool");
|
||||
this.GrpPurplePool.Controls.Add(this.ListPurplePool);
|
||||
this.GrpPurplePool.Name = "GrpPurplePool";
|
||||
this.GrpPurplePool.TabStop = false;
|
||||
//
|
||||
// ListPurplePool
|
||||
//
|
||||
resources.ApplyResources(this.ListPurplePool, "ListPurplePool");
|
||||
this.ListPurplePool.CheckOnClick = true;
|
||||
this.ListPurplePool.FormattingEnabled = true;
|
||||
this.ListPurplePool.Name = "ListPurplePool";
|
||||
this.ListPurplePool.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.ListPurplePool_ItemCheck);
|
||||
//
|
||||
// GrpYellowPool
|
||||
//
|
||||
resources.ApplyResources(this.GrpYellowPool, "GrpYellowPool");
|
||||
this.GrpYellowPool.Controls.Add(this.ListYellowPool);
|
||||
this.GrpYellowPool.Name = "GrpYellowPool";
|
||||
this.GrpYellowPool.TabStop = false;
|
||||
//
|
||||
// ListYellowPool
|
||||
//
|
||||
resources.ApplyResources(this.ListYellowPool, "ListYellowPool");
|
||||
this.ListYellowPool.CheckOnClick = true;
|
||||
this.ListYellowPool.FormattingEnabled = true;
|
||||
this.ListYellowPool.Name = "ListYellowPool";
|
||||
this.ListYellowPool.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.ListYellowPool_ItemCheck);
|
||||
//
|
||||
// GrpJson
|
||||
//
|
||||
resources.ApplyResources(this.GrpJson, "GrpJson");
|
||||
this.GrpJson.Controls.Add(this.BtnGen);
|
||||
this.GrpJson.Controls.Add(this.TxtJson);
|
||||
this.GrpJson.Controls.Add(this.BtnParse);
|
||||
this.GrpJson.Name = "GrpJson";
|
||||
this.GrpJson.TabStop = false;
|
||||
//
|
||||
// BtnGen
|
||||
//
|
||||
resources.ApplyResources(this.BtnGen, "BtnGen");
|
||||
this.BtnGen.Name = "BtnGen";
|
||||
this.BtnGen.UseVisualStyleBackColor = true;
|
||||
this.BtnGen.Click += new System.EventHandler(this.BtnGen_Click);
|
||||
//
|
||||
// TxtJson
|
||||
//
|
||||
resources.ApplyResources(this.TxtJson, "TxtJson");
|
||||
this.TxtJson.Name = "TxtJson";
|
||||
//
|
||||
// BtnParse
|
||||
//
|
||||
resources.ApplyResources(this.BtnParse, "BtnParse");
|
||||
this.BtnParse.Name = "BtnParse";
|
||||
this.BtnParse.UseVisualStyleBackColor = true;
|
||||
this.BtnParse.Click += new System.EventHandler(this.BtnParse_Click);
|
||||
//
|
||||
// FormGachaBannerEditor
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.GrpJson);
|
||||
this.Controls.Add(this.GrpPurplePool);
|
||||
this.Controls.Add(this.GrpYellowPool);
|
||||
this.Controls.Add(this.GrpBannerValues);
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
|
||||
this.Name = "FormGachaBannerEditor";
|
||||
this.GrpBannerValues.ResumeLayout(false);
|
||||
this.GrpBannerValues.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUDEventChance)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUDBaseYellowWeight)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUDGachaType)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUDSortId)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUDSoftPity)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUDScheduleId)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUDEndTime)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUDHardPity)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUDBeginTime)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUDBasePurpleWeight)).EndInit();
|
||||
this.GrpPurplePool.ResumeLayout(false);
|
||||
this.GrpYellowPool.ResumeLayout(false);
|
||||
this.GrpJson.ResumeLayout(false);
|
||||
this.GrpJson.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
private System.Windows.Forms.GroupBox GrpBannerValues;
|
||||
private System.Windows.Forms.Label LblEventChanceTip;
|
||||
private System.Windows.Forms.NumericUpDown NUDEventChance;
|
||||
private System.Windows.Forms.Label LblGachaType;
|
||||
private System.Windows.Forms.Label LblEventChance;
|
||||
private System.Windows.Forms.NumericUpDown NUDBaseYellowWeight;
|
||||
private System.Windows.Forms.Label LblSortId;
|
||||
private System.Windows.Forms.TextBox TxtRateUpItems2;
|
||||
private System.Windows.Forms.Label LblBaseYellowWeight;
|
||||
private System.Windows.Forms.NumericUpDown NUDGachaType;
|
||||
private System.Windows.Forms.NumericUpDown NUDSortId;
|
||||
private System.Windows.Forms.Label LblRateUpItems2;
|
||||
private System.Windows.Forms.Label LblSoftPity;
|
||||
private System.Windows.Forms.Label LblGachaTypeTip;
|
||||
private System.Windows.Forms.Label LblEndTime;
|
||||
private System.Windows.Forms.Label LblRateUpItems1;
|
||||
private System.Windows.Forms.NumericUpDown NUDSoftPity;
|
||||
private System.Windows.Forms.Label LblScheduleId;
|
||||
private System.Windows.Forms.Label LblBeginTime;
|
||||
private System.Windows.Forms.TextBox TxtRateUpItems1;
|
||||
private System.Windows.Forms.Label LblHardPity;
|
||||
private System.Windows.Forms.NumericUpDown NUDScheduleId;
|
||||
private System.Windows.Forms.NumericUpDown NUDEndTime;
|
||||
private System.Windows.Forms.Label LblHardPityTip;
|
||||
private System.Windows.Forms.NumericUpDown NUDHardPity;
|
||||
private System.Windows.Forms.Label LblScheduleIdTip;
|
||||
private System.Windows.Forms.NumericUpDown NUDBeginTime;
|
||||
private System.Windows.Forms.Label LblSoftPityTip;
|
||||
private System.Windows.Forms.Label LblBasePurpleWeight;
|
||||
private System.Windows.Forms.ComboBox CmbBannerType;
|
||||
private System.Windows.Forms.Label LblSortIdTip;
|
||||
private System.Windows.Forms.NumericUpDown NUDBasePurpleWeight;
|
||||
private System.Windows.Forms.Label LblBannerType;
|
||||
private System.Windows.Forms.Label LblBasePurpleWeightTip;
|
||||
private System.Windows.Forms.RadioButton RbCostItem224;
|
||||
private System.Windows.Forms.Label LblBaseYellowWeightTip;
|
||||
private System.Windows.Forms.Label LblCostItem;
|
||||
private System.Windows.Forms.Label LblPrefabPath;
|
||||
private System.Windows.Forms.RadioButton RbCostItem223;
|
||||
private System.Windows.Forms.GroupBox GrpPurplePool;
|
||||
private System.Windows.Forms.CheckedListBox ListPurplePool;
|
||||
private System.Windows.Forms.GroupBox GrpYellowPool;
|
||||
private System.Windows.Forms.CheckedListBox ListYellowPool;
|
||||
private System.Windows.Forms.GroupBox GrpJson;
|
||||
private System.Windows.Forms.TextBox TxtJson;
|
||||
private System.Windows.Forms.Button BtnGen;
|
||||
private System.Windows.Forms.Button BtnParse;
|
||||
private System.Windows.Forms.ComboBox CmbPrefab;
|
||||
}
|
||||
}
|
@@ -1,250 +0,0 @@
|
||||
/**
|
||||
* Grasscutter Tools
|
||||
* Copyright (C) 2022 jie65535
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published
|
||||
* by the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
**/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
|
||||
using GrasscutterTools.Game;
|
||||
using GrasscutterTools.Game.Gacha;
|
||||
using GrasscutterTools.Properties;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace GrasscutterTools
|
||||
{
|
||||
/// <summary>
|
||||
/// 卡池编辑器
|
||||
/// </summary>
|
||||
public partial class FormGachaBannerEditor : Form
|
||||
{
|
||||
#region - 初始化 -
|
||||
|
||||
public FormGachaBannerEditor()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
Icon = Resources.IconGrasscutter;
|
||||
CmbBannerType.SelectedIndex = 0;
|
||||
InitBannerPrefab();
|
||||
InitCheckedListBoxs();
|
||||
}
|
||||
|
||||
private void InitBannerPrefab()
|
||||
{
|
||||
CmbPrefab.Items.Clear();
|
||||
CmbPrefab.Items.AddRange(GameData.GachaBannerPrefabs.Names);
|
||||
}
|
||||
|
||||
private void InitCheckedListBoxs()
|
||||
{
|
||||
InitCheckedListBox(ListYellowPool, "yellow");
|
||||
InitCheckedListBox(ListPurplePool, "purple");
|
||||
}
|
||||
|
||||
private void InitCheckedListBox(CheckedListBox list, string color)
|
||||
{
|
||||
var kvs = new List<string>();
|
||||
for (int i = 0; i < GameData.AvatarColors.Count; i++)
|
||||
{
|
||||
if (GameData.AvatarColors.Names[i] == color)
|
||||
{
|
||||
var id = GameData.AvatarColors.Ids[i];
|
||||
var index = Array.IndexOf(GameData.Avatars.Ids, id % 1000 + 10000000);
|
||||
if (index >= 0)
|
||||
kvs.Add($"{id}:{GameData.Avatars.Names[index]}");
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < GameData.WeaponColors.Count; i++)
|
||||
{
|
||||
if (GameData.WeaponColors.Names[i] == color)
|
||||
{
|
||||
var id = GameData.WeaponColors.Ids[i];
|
||||
var index = Array.IndexOf(GameData.Weapons.Ids, id);
|
||||
if (index >= 0)
|
||||
kvs.Add($"{id}:{GameData.Weapons.Names[index]}");
|
||||
}
|
||||
}
|
||||
list.Items.AddRange(kvs.ToArray());
|
||||
}
|
||||
|
||||
private void InitRateUpItems(GachaBanner banner)
|
||||
{
|
||||
UpdateCheckedListBox(ListYellowPool, banner.RateUpItems1);
|
||||
UpdateCheckedListBox(ListPurplePool, banner.RateUpItems2);
|
||||
}
|
||||
|
||||
#endregion - 初始化 -
|
||||
|
||||
#region - UI -
|
||||
|
||||
private void ShowBanner(GachaBanner banner)
|
||||
{
|
||||
try
|
||||
{
|
||||
NUDGachaType.Value = banner.GachaType;
|
||||
NUDScheduleId.Value = banner.ScheduleId;
|
||||
CmbBannerType.SelectedIndex = (int)banner.BannerType;
|
||||
if (string.IsNullOrEmpty(banner.TitlePath) || !int.TryParse(banner.TitlePath.Substring("UI_GACHA_SHOW_PANEL_A".Length, 3), out int prefabId))
|
||||
CmbPrefab.SelectedIndex = -1;
|
||||
else
|
||||
CmbPrefab.SelectedIndex = Array.IndexOf(GameData.GachaBannerPrefabs.Ids, prefabId);
|
||||
RbCostItem224.Checked = banner.CostItem == 224;
|
||||
RbCostItem223.Checked = banner.CostItem == 223;
|
||||
NUDBeginTime.Value = banner.BeginTime;
|
||||
NUDEndTime.Value = banner.EndTime;
|
||||
NUDSortId.Value = banner.SortId;
|
||||
TxtRateUpItems1.Text = string.Join(", ", banner.RateUpItems1);
|
||||
TxtRateUpItems2.Text = string.Join(", ", banner.RateUpItems2);
|
||||
NUDBaseYellowWeight.Value = banner.BaseYellowWeight * 0.01M;
|
||||
NUDBasePurpleWeight.Value = banner.BasePurpleWeight * 0.01M;
|
||||
NUDEventChance.Value = banner.EventChance;
|
||||
NUDSoftPity.Value = banner.SoftPity;
|
||||
NUDHardPity.Value = banner.HardPity;
|
||||
InitRateUpItems(banner);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("UI更新失败:" + ex.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
}
|
||||
|
||||
private GachaBanner ParseBanner()
|
||||
{
|
||||
if (CmbBannerType.SelectedIndex < 0)
|
||||
{
|
||||
MessageBox.Show("请选择奖池类型", Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
return null;
|
||||
}
|
||||
|
||||
if (CmbPrefab.SelectedIndex < 0)
|
||||
{
|
||||
MessageBox.Show("请选择奖池预制", Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
return null;
|
||||
}
|
||||
|
||||
int[] yellowIds;
|
||||
if (string.IsNullOrEmpty(TxtRateUpItems1.Text))
|
||||
yellowIds = new int[0];
|
||||
else
|
||||
yellowIds = TxtRateUpItems1.Text.Split(',').Select(s => int.Parse(s.Trim())).ToArray();
|
||||
|
||||
int[] purpleIds;
|
||||
if (string.IsNullOrEmpty(TxtRateUpItems2.Text))
|
||||
purpleIds = new int[0];
|
||||
else
|
||||
purpleIds = TxtRateUpItems2.Text.Split(',').Select(s => int.Parse(s.Trim())).ToArray();
|
||||
|
||||
var prefabId = GameData.GachaBannerPrefabs.Ids[CmbPrefab.SelectedIndex];
|
||||
GachaBanner banner = new GachaBanner
|
||||
{
|
||||
GachaType = (int)NUDGachaType.Value,
|
||||
ScheduleId = (int)NUDScheduleId.Value,
|
||||
BannerType = (BannerType)CmbBannerType.SelectedIndex,
|
||||
PrefabPath = $"GachaShowPanel_A{prefabId:000}",
|
||||
PreviewPrefabPath = $"UI_Tab_GachaShowPanel_A{prefabId:000}",
|
||||
TitlePath = $"UI_GACHA_SHOW_PANEL_A{prefabId:000}_TITLE",
|
||||
CostItem = RbCostItem224.Checked ? 224 : 223,
|
||||
BeginTime = (int)NUDBeginTime.Value,
|
||||
EndTime = (int)NUDEndTime.Value,
|
||||
SortId = (int)NUDSortId.Value,
|
||||
RateUpItems1 = yellowIds,
|
||||
RateUpItems2 = purpleIds,
|
||||
BaseYellowWeight = (int)(NUDBaseYellowWeight.Value * 100),
|
||||
BasePurpleWeight = (int)(NUDBasePurpleWeight.Value * 100),
|
||||
EventChance = (int)NUDEventChance.Value,
|
||||
SoftPity = (int)NUDSoftPity.Value,
|
||||
HardPity = (int)NUDHardPity.Value
|
||||
};
|
||||
return banner;
|
||||
}
|
||||
|
||||
#endregion - UI -
|
||||
|
||||
#region - 事件 -
|
||||
|
||||
private void UpdateCheckedListBox(CheckedListBox list, int[] checkedIds)
|
||||
{
|
||||
for (int i = 0; i < list.Items.Count; i++)
|
||||
{
|
||||
if (checkedIds.Length == 0)
|
||||
list.SetItemChecked(i, false);
|
||||
else
|
||||
{
|
||||
var item = list.Items[i] as string;
|
||||
var id = int.Parse(item.Substring(0, item.IndexOf(':')));
|
||||
list.SetItemChecked(i, Array.IndexOf(checkedIds, id) != -1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void ListYellowPool_ItemCheck(object sender, ItemCheckEventArgs e)
|
||||
{
|
||||
BeginInvoke(new Action(() =>
|
||||
UpdateCheckedItems(ListYellowPool, TxtRateUpItems1)
|
||||
));
|
||||
}
|
||||
|
||||
private void ListPurplePool_ItemCheck(object sender, ItemCheckEventArgs e)
|
||||
{
|
||||
BeginInvoke(new Action(() =>
|
||||
UpdateCheckedItems(ListPurplePool, TxtRateUpItems2)
|
||||
));
|
||||
}
|
||||
|
||||
private void UpdateCheckedItems(CheckedListBox list, TextBox txt)
|
||||
{
|
||||
if (list.CheckedItems.Count == 0)
|
||||
txt.Text = "";
|
||||
else
|
||||
{
|
||||
StringBuilder builder = new StringBuilder();
|
||||
foreach (string item in list.CheckedItems)
|
||||
builder.Append(item.Substring(0, item.IndexOf(':')))
|
||||
.Append(", ");
|
||||
txt.Text = builder.ToString(0, builder.Length - 2);
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnGen_Click(object sender, EventArgs e)
|
||||
{
|
||||
var banner = ParseBanner();
|
||||
if (banner != null)
|
||||
{
|
||||
TxtJson.Text = JsonConvert.SerializeObject(banner, Formatting.Indented);
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnParse_Click(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
ShowBanner(JsonConvert.DeserializeObject<GachaBanner>(TxtJson.Text));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Json解析失败,错误消息:" + ex.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion - 事件 -
|
||||
}
|
||||
}
|
@@ -1,319 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="LblEventChanceTip.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>401, 262</value>
|
||||
</data>
|
||||
<data name="NUDEventChance.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>332, 260</value>
|
||||
</data>
|
||||
<data name="LblEventChance.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>83, 17</value>
|
||||
</data>
|
||||
<data name="LblEventChance.Text" xml:space="preserve">
|
||||
<value>Event chance</value>
|
||||
</data>
|
||||
<data name="LblSortId.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>72, 204</value>
|
||||
</data>
|
||||
<data name="LblSortId.Text" xml:space="preserve">
|
||||
<value>Sort</value>
|
||||
</data>
|
||||
<data name="LblBaseYellowWeight.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>22, 262</value>
|
||||
</data>
|
||||
<data name="LblBaseYellowWeight.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>83, 17</value>
|
||||
</data>
|
||||
<data name="LblBaseYellowWeight.Text" xml:space="preserve">
|
||||
<value>5 star weight</value>
|
||||
</data>
|
||||
<data name="LblRateUpItems2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>44, 350</value>
|
||||
</data>
|
||||
<data name="LblRateUpItems2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>61, 17</value>
|
||||
</data>
|
||||
<data name="LblRateUpItems2.Text" xml:space="preserve">
|
||||
<value>4 star UP</value>
|
||||
</data>
|
||||
<data name="LblSoftPity.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>49, 291</value>
|
||||
</data>
|
||||
<data name="LblSoftPity.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>56, 17</value>
|
||||
</data>
|
||||
<data name="LblSoftPity.Text" xml:space="preserve">
|
||||
<value>Soft pity</value>
|
||||
</data>
|
||||
<data name="LblGachaTypeTip.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>123, 17</value>
|
||||
</data>
|
||||
<data name="LblGachaTypeTip.Text" xml:space="preserve">
|
||||
<value>Increment from 400</value>
|
||||
</data>
|
||||
<data name="LblEndTime.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>62, 17</value>
|
||||
</data>
|
||||
<data name="LblEndTime.Text" xml:space="preserve">
|
||||
<value>End Time</value>
|
||||
</data>
|
||||
<data name="LblRateUpItems1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>44, 234</value>
|
||||
</data>
|
||||
<data name="LblRateUpItems1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>61, 17</value>
|
||||
</data>
|
||||
<data name="LblRateUpItems1.Text" xml:space="preserve">
|
||||
<value>5 star UP</value>
|
||||
</data>
|
||||
<data name="LblBeginTime.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>32, 175</value>
|
||||
</data>
|
||||
<data name="LblBeginTime.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>73, 17</value>
|
||||
</data>
|
||||
<data name="LblBeginTime.Text" xml:space="preserve">
|
||||
<value>Begin Time</value>
|
||||
</data>
|
||||
<data name="LblHardPity.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>42, 320</value>
|
||||
</data>
|
||||
<data name="LblHardPity.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>62, 17</value>
|
||||
</data>
|
||||
<data name="LblHardPity.Text" xml:space="preserve">
|
||||
<value>Hard pity</value>
|
||||
</data>
|
||||
<data name="NUDEndTime.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>287, 174</value>
|
||||
</data>
|
||||
<data name="LblHardPityTip.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>17, 17</value>
|
||||
</data>
|
||||
<data name="LblHardPityTip.Text" xml:space="preserve">
|
||||
<value>...</value>
|
||||
</data>
|
||||
<data name="LblScheduleIdTip.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>49, 17</value>
|
||||
</data>
|
||||
<data name="LblScheduleIdTip.Text" xml:space="preserve">
|
||||
<value>Unique</value>
|
||||
</data>
|
||||
<data name="LblSoftPityTip.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>17, 17</value>
|
||||
</data>
|
||||
<data name="LblSoftPityTip.Text" xml:space="preserve">
|
||||
<value>...</value>
|
||||
</data>
|
||||
<data name="LblBasePurpleWeight.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>22, 378</value>
|
||||
</data>
|
||||
<data name="LblBasePurpleWeight.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>83, 17</value>
|
||||
</data>
|
||||
<data name="LblBasePurpleWeight.Text" xml:space="preserve">
|
||||
<value>4 star weight</value>
|
||||
</data>
|
||||
<data name="CmbBannerType.Items" xml:space="preserve">
|
||||
<value>Standard Wish</value>
|
||||
</data>
|
||||
<data name="CmbBannerType.Items1" xml:space="preserve">
|
||||
<value>Character Event Wish</value>
|
||||
</data>
|
||||
<data name="CmbBannerType.Items2" xml:space="preserve">
|
||||
<value>Weapon Event Wish</value>
|
||||
</data>
|
||||
<data name="LblSortIdTip.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>76, 17</value>
|
||||
</data>
|
||||
<data name="LblSortIdTip.Text" xml:space="preserve">
|
||||
<value>Show order</value>
|
||||
</data>
|
||||
<data name="LblBannerType.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>25, 87</value>
|
||||
</data>
|
||||
<data name="LblBannerType.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>81, 17</value>
|
||||
</data>
|
||||
<data name="LblBannerType.Text" xml:space="preserve">
|
||||
<value>Banner Type</value>
|
||||
</data>
|
||||
<data name="RbCostItem224.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>104, 21</value>
|
||||
</data>
|
||||
<data name="RbCostItem224.Text" xml:space="preserve">
|
||||
<value>Acquaint Fate</value>
|
||||
</data>
|
||||
<data name="LblCostItem.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>41, 148</value>
|
||||
</data>
|
||||
<data name="LblCostItem.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>64, 17</value>
|
||||
</data>
|
||||
<data name="LblCostItem.Text" xml:space="preserve">
|
||||
<value>Cost Item</value>
|
||||
</data>
|
||||
<data name="LblPrefabPath.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>59, 118</value>
|
||||
</data>
|
||||
<data name="LblPrefabPath.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>46, 17</value>
|
||||
</data>
|
||||
<data name="LblPrefabPath.Text" xml:space="preserve">
|
||||
<value>Prefab</value>
|
||||
</data>
|
||||
<data name="RbCostItem223.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>222, 146</value>
|
||||
</data>
|
||||
<data name="RbCostItem223.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>119, 21</value>
|
||||
</data>
|
||||
<data name="RbCostItem223.Text" xml:space="preserve">
|
||||
<value>Intertwined Fate</value>
|
||||
</data>
|
||||
<data name="GrpBannerValues.Text" xml:space="preserve">
|
||||
<value>Banner</value>
|
||||
</data>
|
||||
<data name="GrpPurplePool.Text" xml:space="preserve">
|
||||
<value>4 star pool</value>
|
||||
</data>
|
||||
<data name="GrpYellowPool.Text" xml:space="preserve">
|
||||
<value>5 star pool</value>
|
||||
</data>
|
||||
<data name="BtnGen.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>85, 23</value>
|
||||
</data>
|
||||
<data name="BtnGen.Text" xml:space="preserve">
|
||||
<value>Gen Json</value>
|
||||
</data>
|
||||
<data name="BtnParse.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>209, 437</value>
|
||||
</data>
|
||||
<data name="BtnParse.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>85, 23</value>
|
||||
</data>
|
||||
<data name="BtnParse.Text" xml:space="preserve">
|
||||
<value>Parse Json</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>Gacha Banner Editor</value>
|
||||
</data>
|
||||
</root>
|
2159
Source/GrasscutterTools/FormMain.Designer.cs
generated
@@ -1,844 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="BtnCopy.Text" xml:space="preserve">
|
||||
<value>Copy</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="ChkAutoCopy.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>54, 21</value>
|
||||
</data>
|
||||
<data name="ChkAutoCopy.Text" xml:space="preserve">
|
||||
<value>Auto</value>
|
||||
</data>
|
||||
<data name="GrpCommand.Text" xml:space="preserve">
|
||||
<value>Command (Press and hold Ctrl to run automatically)</value>
|
||||
</data>
|
||||
<data name="BtnInvokeOpenCommand.Text" xml:space="preserve">
|
||||
<value>Run(F5)</value>
|
||||
</data>
|
||||
<data name="TPHome.Text" xml:space="preserve">
|
||||
<value>Home</value>
|
||||
</data>
|
||||
<data name="BtnOpenTextMap.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>120, 23</value>
|
||||
</data>
|
||||
<data name="BtnOpenTextMap.Text" xml:space="preserve">
|
||||
<value>TextMapBrowser</value>
|
||||
</data>
|
||||
<data name="BtnOpenGachaBannerEditor.Text" xml:space="preserve">
|
||||
<value>Banner editor</value>
|
||||
</data>
|
||||
<data name="GrpSettings.Text" xml:space="preserve">
|
||||
<value>Settings</value>
|
||||
</data>
|
||||
<data name="ChkIncludeUID.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>95, 21</value>
|
||||
</data>
|
||||
<data name="ChkIncludeUID.Text" xml:space="preserve">
|
||||
<value>Include UID</value>
|
||||
</data>
|
||||
<data name="LblAbout.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>74, 38</value>
|
||||
</data>
|
||||
<data name="LblAbout.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>158, 24</value>
|
||||
</data>
|
||||
<data name="LblAbout.Text" xml:space="preserve">
|
||||
<value>Have a nice time!</value>
|
||||
</data>
|
||||
<data name="TPCustom.Text" xml:space="preserve">
|
||||
<value>Custom</value>
|
||||
</data>
|
||||
<data name="BtnExportCustomCommands.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>533, 216</value>
|
||||
</data>
|
||||
<data name="BtnExportCustomCommands.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>60, 23</value>
|
||||
</data>
|
||||
<data name="BtnExportCustomCommands.Text" xml:space="preserve">
|
||||
<value>Export</value>
|
||||
</data>
|
||||
<data name="BtnLoadCustomCommands.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>467, 216</value>
|
||||
</data>
|
||||
<data name="BtnLoadCustomCommands.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>60, 23</value>
|
||||
</data>
|
||||
<data name="BtnLoadCustomCommands.Text" xml:space="preserve">
|
||||
<value>Load</value>
|
||||
</data>
|
||||
<data name="LblCustomName.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>30, 17</value>
|
||||
</data>
|
||||
<data name="LblCustomName.Text" xml:space="preserve">
|
||||
<value>Tag</value>
|
||||
</data>
|
||||
<data name="groupBox1.Text" xml:space="preserve">
|
||||
<value>List</value>
|
||||
</data>
|
||||
<data name="BtnRemoveCustomCommand.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>393, 216</value>
|
||||
</data>
|
||||
<data name="BtnRemoveCustomCommand.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>70, 23</value>
|
||||
</data>
|
||||
<data name="BtnRemoveCustomCommand.Text" xml:space="preserve">
|
||||
<value>x Delete</value>
|
||||
</data>
|
||||
<data name="BtnSaveCustomCommand.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>317, 216</value>
|
||||
</data>
|
||||
<data name="BtnSaveCustomCommand.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>70, 23</value>
|
||||
</data>
|
||||
<data name="BtnSaveCustomCommand.Text" xml:space="preserve">
|
||||
<value>√ Save</value>
|
||||
</data>
|
||||
<data name="TxtCustomName.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>267, 23</value>
|
||||
</data>
|
||||
<data name="TPArtifact.Text" xml:space="preserve">
|
||||
<value>Artifact</value>
|
||||
</data>
|
||||
<data name="LblArtifactStars.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>298, 41</value>
|
||||
</data>
|
||||
<data name="LblArtifactStars.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>37, 17</value>
|
||||
</data>
|
||||
<data name="LblArtifactStars.Text" xml:space="preserve">
|
||||
<value>Stars</value>
|
||||
</data>
|
||||
<data name="LblArtifactPart.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>31, 17</value>
|
||||
</data>
|
||||
<data name="LblArtifactPart.Text" xml:space="preserve">
|
||||
<value>Part</value>
|
||||
</data>
|
||||
<data name="LblArtifactSet.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>87, 11</value>
|
||||
</data>
|
||||
<data name="LblArtifactSet.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>49, 17</value>
|
||||
</data>
|
||||
<data name="LblArtifactSet.Text" xml:space="preserve">
|
||||
<value>Artifact</value>
|
||||
</data>
|
||||
<data name="LblArtifactLevelTip.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>62, 17</value>
|
||||
</data>
|
||||
<data name="LblArtifactLevelTip.Text" xml:space="preserve">
|
||||
<value>21 is +20</value>
|
||||
</data>
|
||||
<data name="LblClearSubAttrCheckedList.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>50, 17</value>
|
||||
</data>
|
||||
<data name="LblClearSubAttrCheckedList.Text" xml:space="preserve">
|
||||
<value>X Clear</value>
|
||||
</data>
|
||||
<data name="LblArtifactLevel.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>99, 41</value>
|
||||
</data>
|
||||
<data name="LblArtifactLevel.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>37, 17</value>
|
||||
</data>
|
||||
<data name="LblArtifactLevel.Text" xml:space="preserve">
|
||||
<value>Level</value>
|
||||
</data>
|
||||
<data name="LblSubAttribution.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>80, 102</value>
|
||||
</data>
|
||||
<data name="LblSubAttribution.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>56, 17</value>
|
||||
</data>
|
||||
<data name="LblSubAttribution.Text" xml:space="preserve">
|
||||
<value>Sub Stat</value>
|
||||
</data>
|
||||
<data name="LblMainAttribution.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>73, 71</value>
|
||||
</data>
|
||||
<data name="LblMainAttribution.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>63, 17</value>
|
||||
</data>
|
||||
<data name="LblMainAttribution.Text" xml:space="preserve">
|
||||
<value>Main Stat</value>
|
||||
</data>
|
||||
<data name="TPQuest.Text" xml:space="preserve">
|
||||
<value>Quest</value>
|
||||
</data>
|
||||
<data name="GrpQuestFilters.Text" xml:space="preserve">
|
||||
<value>List Filter</value>
|
||||
</data>
|
||||
<data name="ChkQuestFilterTEST.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>51, 21</value>
|
||||
</data>
|
||||
<data name="ChkQuestFilterTEST.Text" xml:space="preserve">
|
||||
<value>Test</value>
|
||||
</data>
|
||||
<data name="ChkQuestFilterUNRELEASED.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>93, 21</value>
|
||||
</data>
|
||||
<data name="ChkQuestFilterUNRELEASED.Text" xml:space="preserve">
|
||||
<value>Unreleased</value>
|
||||
</data>
|
||||
<data name="ChkQuestFilterHIDDEN.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>69, 21</value>
|
||||
</data>
|
||||
<data name="ChkQuestFilterHIDDEN.Text" xml:space="preserve">
|
||||
<value>Hidden</value>
|
||||
</data>
|
||||
<data name="BtnFinishQuest.Text" xml:space="preserve">
|
||||
<value>Finish</value>
|
||||
</data>
|
||||
<data name="BtnAddQuest.Text" xml:space="preserve">
|
||||
<value>Add</value>
|
||||
</data>
|
||||
<data name="LblQuestDescription.Text" xml:space="preserve">
|
||||
<value>Add or Finish Quest
|
||||
Tip: Many quest require server-side scripting support
|
||||
Therefore, the quest can be add and finish, but not necessarily can be work</value>
|
||||
</data>
|
||||
<data name="TPSpawn.Text" xml:space="preserve">
|
||||
<value>Spawn</value>
|
||||
</data>
|
||||
<data name="BtnSaveSpawnLog.Text" xml:space="preserve">
|
||||
<value>√ Record</value>
|
||||
</data>
|
||||
<data name="BtnRemoveSpawnLog.Text" xml:space="preserve">
|
||||
<value>× Delete</value>
|
||||
</data>
|
||||
<data name="GrpSpawnRecord.Text" xml:space="preserve">
|
||||
<value>Records</value>
|
||||
</data>
|
||||
<data name="GrpEntityType.Text" xml:space="preserve">
|
||||
<value>Class</value>
|
||||
</data>
|
||||
<data name="RbEntityOrnament.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>84, 21</value>
|
||||
</data>
|
||||
<data name="RbEntityOrnament.Text" xml:space="preserve">
|
||||
<value>Ornament</value>
|
||||
</data>
|
||||
<data name="RbEntityAnimal.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>65, 21</value>
|
||||
</data>
|
||||
<data name="RbEntityAnimal.Text" xml:space="preserve">
|
||||
<value>Animal</value>
|
||||
</data>
|
||||
<data name="RbEntityMonster.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 21</value>
|
||||
</data>
|
||||
<data name="RbEntityMonster.Text" xml:space="preserve">
|
||||
<value>Monster</value>
|
||||
</data>
|
||||
<data name="LblSpawnDescription.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>81, 17</value>
|
||||
</data>
|
||||
<data name="LblSpawnDescription.Text" xml:space="preserve">
|
||||
<value>Spawn entity</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="LblEntityAmount.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
</data>
|
||||
<data name="LblEntityAmount.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>53, 17</value>
|
||||
</data>
|
||||
<data name="LblEntityAmount.Text" xml:space="preserve">
|
||||
<value>Amount</value>
|
||||
</data>
|
||||
<data name="LblEntityLevel.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>120, 218</value>
|
||||
</data>
|
||||
<data name="LblEntityLevel.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>20, 17</value>
|
||||
</data>
|
||||
<data name="LblEntityLevel.Text" xml:space="preserve">
|
||||
<value>Lv</value>
|
||||
</data>
|
||||
<data name="NUDEntityAmout.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>64, 216</value>
|
||||
</data>
|
||||
<data name="NUDEntityLevel.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>146, 216</value>
|
||||
</data>
|
||||
<data name="TPAvatar.Text" xml:space="preserve">
|
||||
<value>Avatar</value>
|
||||
</data>
|
||||
<data name="LblAvatarGenWarning.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>88, 161</value>
|
||||
</data>
|
||||
<data name="LblAvatarGenWarning.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>427, 51</value>
|
||||
</data>
|
||||
<data name="LblAvatarGenWarning.Text" xml:space="preserve">
|
||||
<value>WARN! Adding a character that is not officially used may result
|
||||
in a corrupted account save, making it impossible to play the game.
|
||||
The data may not be cleared even if the account is recreated.</value>
|
||||
</data>
|
||||
<data name="LblAvatar.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>135, 217</value>
|
||||
</data>
|
||||
<data name="LblAvatar.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>45, 17</value>
|
||||
</data>
|
||||
<data name="LblAvatar.Text" xml:space="preserve">
|
||||
<value>Avatar</value>
|
||||
</data>
|
||||
<data name="LblLevel.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>392, 216</value>
|
||||
</data>
|
||||
<data name="LblLevel.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>20, 17</value>
|
||||
</data>
|
||||
<data name="LblLevel.Text" xml:space="preserve">
|
||||
<value>Lv</value>
|
||||
</data>
|
||||
<data name="NUDAvatarLevel.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>418, 214</value>
|
||||
</data>
|
||||
<data name="CmbAvatar.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>186, 214</value>
|
||||
</data>
|
||||
<data name="CmbAvatar.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>200, 25</value>
|
||||
</data>
|
||||
<data name="TPStats.Text" xml:space="preserve">
|
||||
<value>Stats</value>
|
||||
</data>
|
||||
<data name="GrpSetStats.Text" xml:space="preserve">
|
||||
<value>Stats</value>
|
||||
</data>
|
||||
<data name="LblStatTip.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>26, 17</value>
|
||||
</data>
|
||||
<data name="LblStatTip.Text" xml:space="preserve">
|
||||
<value>Tip</value>
|
||||
</data>
|
||||
<data name="GrpTalentLevel.Text" xml:space="preserve">
|
||||
<value>Talent Level</value>
|
||||
</data>
|
||||
<data name="LnkTalentE.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>283, 24</value>
|
||||
</data>
|
||||
<data name="LnkTalentE.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>15, 17</value>
|
||||
</data>
|
||||
<data name="LnkTalentE.Text" xml:space="preserve">
|
||||
<value>E</value>
|
||||
</data>
|
||||
<data name="LnkTalentQ.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>259, 24</value>
|
||||
</data>
|
||||
<data name="LnkTalentQ.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>18, 17</value>
|
||||
</data>
|
||||
<data name="LnkTalentQ.Text" xml:space="preserve">
|
||||
<value>Q</value>
|
||||
</data>
|
||||
<data name="LnkTalentNormalATK.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>178, 24</value>
|
||||
</data>
|
||||
<data name="LnkTalentNormalATK.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 17</value>
|
||||
</data>
|
||||
<data name="LnkTalentNormalATK.Text" xml:space="preserve">
|
||||
<value>NormalATK</value>
|
||||
</data>
|
||||
<data name="NUDTalentLevel.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>128, 23</value>
|
||||
</data>
|
||||
<data name="LblStatsDescription.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>179, 17</value>
|
||||
</data>
|
||||
<data name="LblStatsDescription.Text" xml:space="preserve">
|
||||
<value>Set current active Avatar data</value>
|
||||
</data>
|
||||
<data name="TPWeapon.Text" xml:space="preserve">
|
||||
<value>Weapon</value>
|
||||
</data>
|
||||
<data name="LblWeaponDescription.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>93, 17</value>
|
||||
</data>
|
||||
<data name="LblWeaponDescription.Text" xml:space="preserve">
|
||||
<value>Geive Weapon</value>
|
||||
</data>
|
||||
<data name="LblWeaponRefinement.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>203, 218</value>
|
||||
</data>
|
||||
<data name="LblWeaponRefinement.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>73, 17</value>
|
||||
</data>
|
||||
<data name="LblWeaponRefinement.Text" xml:space="preserve">
|
||||
<value>Refinement</value>
|
||||
</data>
|
||||
<data name="LblWeaponAmount.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>53, 17</value>
|
||||
</data>
|
||||
<data name="LblWeaponAmount.Text" xml:space="preserve">
|
||||
<value>Amount</value>
|
||||
</data>
|
||||
<data name="LblWeaponLevel.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>121, 218</value>
|
||||
</data>
|
||||
<data name="LblWeaponLevel.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>20, 17</value>
|
||||
</data>
|
||||
<data name="LblWeaponLevel.Text" xml:space="preserve">
|
||||
<value>Lv</value>
|
||||
</data>
|
||||
<data name="NUDWeaponRefinement.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>282, 216</value>
|
||||
</data>
|
||||
<data name="NUDWeaponAmout.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>65, 216</value>
|
||||
</data>
|
||||
<data name="NUDWeaponLevel.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>147, 216</value>
|
||||
</data>
|
||||
<data name="TPItem.Text" xml:space="preserve">
|
||||
<value>Items</value>
|
||||
</data>
|
||||
<data name="BtnSaveGiveItemLog.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left</value>
|
||||
</data>
|
||||
<data name="BtnSaveGiveItemLog.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>265, 48</value>
|
||||
</data>
|
||||
<data name="BtnSaveGiveItemLog.Text" xml:space="preserve">
|
||||
<value>√ Record</value>
|
||||
</data>
|
||||
<data name="BtnRemoveGiveItemLog.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left</value>
|
||||
</data>
|
||||
<data name="BtnRemoveGiveItemLog.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>265, 77</value>
|
||||
</data>
|
||||
<data name="BtnRemoveGiveItemLog.Text" xml:space="preserve">
|
||||
<value>× Delete</value>
|
||||
</data>
|
||||
<data name="GrpGiveItemRecord.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left</value>
|
||||
</data>
|
||||
<data name="GrpGiveItemRecord.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>249, 162</value>
|
||||
</data>
|
||||
<data name="GrpGiveItemRecord.Text" xml:space="preserve">
|
||||
<value>Records</value>
|
||||
</data>
|
||||
<data name="ListGiveItemLogs.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>243, 140</value>
|
||||
</data>
|
||||
<data name="ChkDrop.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>278, 217</value>
|
||||
</data>
|
||||
<data name="ChkDrop.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>57, 21</value>
|
||||
</data>
|
||||
<data name="ChkDrop.Text" xml:space="preserve">
|
||||
<value>Drop</value>
|
||||
</data>
|
||||
<data name="TxtGameItemFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<data name="TxtGameItemFilter.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>346, 5</value>
|
||||
</data>
|
||||
<data name="TxtGameItemFilter.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>250, 23</value>
|
||||
</data>
|
||||
<data name="ListGameItems.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left, Right</value>
|
||||
</data>
|
||||
<data name="ListGameItems.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>346, 31</value>
|
||||
</data>
|
||||
<data name="ListGameItems.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>250, 208</value>
|
||||
</data>
|
||||
<data name="LblGameItemAmount.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
</data>
|
||||
<data name="LblGameItemAmount.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>53, 17</value>
|
||||
</data>
|
||||
<data name="LblGameItemAmount.Text" xml:space="preserve">
|
||||
<value>Amount</value>
|
||||
</data>
|
||||
<data name="LblGameItemLevel.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>171, 218</value>
|
||||
</data>
|
||||
<data name="LblGameItemLevel.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>37, 17</value>
|
||||
</data>
|
||||
<data name="LblGameItemLevel.Text" xml:space="preserve">
|
||||
<value>Level</value>
|
||||
</data>
|
||||
<data name="NUDGameItemAmout.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>65, 216</value>
|
||||
</data>
|
||||
<data name="NUDGameItemLevel.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>209, 216</value>
|
||||
</data>
|
||||
<data name="LblGiveCommandDescription.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>118, 17</value>
|
||||
</data>
|
||||
<data name="LblGiveCommandDescription.Text" xml:space="preserve">
|
||||
<value>Give item to player</value>
|
||||
</data>
|
||||
<data name="TPScene.Text" xml:space="preserve">
|
||||
<value>Scene</value>
|
||||
</data>
|
||||
<data name="ChkIncludeSceneId.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>91, 213</value>
|
||||
</data>
|
||||
<data name="ChkIncludeSceneId.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>122, 21</value>
|
||||
</data>
|
||||
<data name="ChkIncludeSceneId.Text" xml:space="preserve">
|
||||
<value>Include scene Id</value>
|
||||
</data>
|
||||
<data name="LblTp.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="LblTp.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name="LblTp.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>6, 89</value>
|
||||
</data>
|
||||
<data name="LblTp.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>337, 90</value>
|
||||
</data>
|
||||
<data name="LblTp.Text" xml:space="preserve">
|
||||
<value>Teleporting
|
||||
Tip: You can quickly teleport through the 'fishing hook' mark on the minimap in the game
|
||||
In the command, you can use ~ to indicate the current position, and ~100 to indicate the relative current 100</value>
|
||||
</data>
|
||||
<data name="LblTpZ.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>219, 184</value>
|
||||
</data>
|
||||
<data name="LblTpY.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>113, 184</value>
|
||||
</data>
|
||||
<data name="BtnTeleport.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>10, 211</value>
|
||||
</data>
|
||||
<data name="BtnTeleport.Text" xml:space="preserve">
|
||||
<value>Teleport</value>
|
||||
</data>
|
||||
<data name="LblTpX.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>7, 184</value>
|
||||
</data>
|
||||
<data name="NUDTpZ.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>239, 182</value>
|
||||
</data>
|
||||
<data name="NUDTpY.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>133, 182</value>
|
||||
</data>
|
||||
<data name="NUDTpX.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>27, 182</value>
|
||||
</data>
|
||||
<data name="CmbClimateType.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>66, 61</value>
|
||||
</data>
|
||||
<data name="LblClimateType.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>6, 64</value>
|
||||
</data>
|
||||
<data name="LblClimateType.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>54, 17</value>
|
||||
</data>
|
||||
<data name="LblClimateType.Text" xml:space="preserve">
|
||||
<value>weather</value>
|
||||
</data>
|
||||
<data name="LblSceneDescription.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<data name="LblSceneDescription.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name="LblSceneDescription.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>287, 55</value>
|
||||
</data>
|
||||
<data name="LblSceneDescription.Text" xml:space="preserve">
|
||||
<value>Scene control
|
||||
Tip: Most of the scenes have no effect and cannot be entered.</value>
|
||||
</data>
|
||||
<data name="TPManage.Text" xml:space="preserve">
|
||||
<value>Manage</value>
|
||||
</data>
|
||||
<data name="GrpAccount.Text" xml:space="preserve">
|
||||
<value>Account Management</value>
|
||||
</data>
|
||||
<data name="ChkAccountSetUid.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>49, 21</value>
|
||||
</data>
|
||||
<data name="ChkAccountSetUid.Text" xml:space="preserve">
|
||||
<value>UID</value>
|
||||
</data>
|
||||
<data name="NUDAccountUid.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>270, 23</value>
|
||||
</data>
|
||||
<data name="NUDAccountUid.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>130, 23</value>
|
||||
</data>
|
||||
<data name="BtnDeleteAccount.Text" xml:space="preserve">
|
||||
<value>Delete</value>
|
||||
</data>
|
||||
<data name="BtnCreateAccount.Text" xml:space="preserve">
|
||||
<value>Create</value>
|
||||
</data>
|
||||
<data name="LblAccountUserName.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>6, 25</value>
|
||||
</data>
|
||||
<data name="LblAccountUserName.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>67, 17</value>
|
||||
</data>
|
||||
<data name="LblAccountUserName.Text" xml:space="preserve">
|
||||
<value>Username</value>
|
||||
</data>
|
||||
<data name="TxtAccountUserName.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>79, 22</value>
|
||||
</data>
|
||||
<data name="TxtAccountUserName.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>127, 23</value>
|
||||
</data>
|
||||
<data name="GrpPermission.Text" xml:space="preserve">
|
||||
<value>Permission Management</value>
|
||||
</data>
|
||||
<data name="BtmPermRemove.Text" xml:space="preserve">
|
||||
<value>Delete</value>
|
||||
</data>
|
||||
<data name="BtnPermAdd.Text" xml:space="preserve">
|
||||
<value>Add</value>
|
||||
</data>
|
||||
<data name="LblPerm.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>38, 17</value>
|
||||
</data>
|
||||
<data name="LblPerm.Text" xml:space="preserve">
|
||||
<value>Perm</value>
|
||||
</data>
|
||||
<data name="LblPermUID.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>30, 25</value>
|
||||
</data>
|
||||
<data name="LblPermUID.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>30, 17</value>
|
||||
</data>
|
||||
<data name="LblPermUID.Text" xml:space="preserve">
|
||||
<value>UID</value>
|
||||
</data>
|
||||
<data name="TPAbout.Text" xml:space="preserve">
|
||||
<value>About</value>
|
||||
</data>
|
||||
<data name="LnkGithub.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left</value>
|
||||
</data>
|
||||
<data name="LblSupportDescription.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>110, 17</value>
|
||||
</data>
|
||||
<data name="LblSupportDescription.Text" xml:space="preserve">
|
||||
<value>Grasscutter Tools</value>
|
||||
</data>
|
||||
<data name="TPRemoteCall.Text" xml:space="preserve">
|
||||
<value>Remote</value>
|
||||
</data>
|
||||
<data name="GrpServerStatus.Text" xml:space="preserve">
|
||||
<value>Server status</value>
|
||||
</data>
|
||||
<data name="LnkOpenCommandLabel.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>13, 63</value>
|
||||
</data>
|
||||
<data name="LnkOpenCommandLabel.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>100, 17</value>
|
||||
</data>
|
||||
<data name="LnkOpenCommandLabel.Text" xml:space="preserve">
|
||||
<value>OpenCommand</value>
|
||||
</data>
|
||||
<data name="LblOpenCommandSupport.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>119, 63</value>
|
||||
</data>
|
||||
<data name="LblServerVersion.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>119, 29</value>
|
||||
</data>
|
||||
<data name="LblPlayerCount.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>119, 46</value>
|
||||
</data>
|
||||
<data name="LblServerVersionLabel.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>25, 29</value>
|
||||
</data>
|
||||
<data name="LblServerVersionLabel.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>88, 17</value>
|
||||
</data>
|
||||
<data name="LblServerVersionLabel.Text" xml:space="preserve">
|
||||
<value>Game version</value>
|
||||
</data>
|
||||
<data name="LblPlayerCountLabel.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>34, 46</value>
|
||||
</data>
|
||||
<data name="LblPlayerCountLabel.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>79, 17</value>
|
||||
</data>
|
||||
<data name="LblPlayerCountLabel.Text" xml:space="preserve">
|
||||
<value>Player count</value>
|
||||
</data>
|
||||
<data name="GrpRemoteCommand.Text" xml:space="preserve">
|
||||
<value>Remote Cell</value>
|
||||
</data>
|
||||
<data name="LnkRCHelp.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>35, 17</value>
|
||||
</data>
|
||||
<data name="LnkRCHelp.Text" xml:space="preserve">
|
||||
<value>Help</value>
|
||||
</data>
|
||||
<data name="BtnConnectOpenCommand.Text" xml:space="preserve">
|
||||
<value>Connect</value>
|
||||
</data>
|
||||
<data name="BtnSendVerificationCode.Text" xml:space="preserve">
|
||||
<value>Send Code</value>
|
||||
</data>
|
||||
<data name="LblVerificationCode.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>39, 17</value>
|
||||
</data>
|
||||
<data name="LblVerificationCode.Text" xml:space="preserve">
|
||||
<value>Code</value>
|
||||
</data>
|
||||
<data name="TxtHost.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>167, 23</value>
|
||||
</data>
|
||||
<data name="BtnQueryServerStatus.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>292, 36</value>
|
||||
</data>
|
||||
<data name="BtnQueryServerStatus.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>65, 23</value>
|
||||
</data>
|
||||
<data name="BtnQueryServerStatus.Text" xml:space="preserve">
|
||||
<value>Query</value>
|
||||
</data>
|
||||
<data name="LblHost.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>35, 17</value>
|
||||
</data>
|
||||
<data name="LblHost.Text" xml:space="preserve">
|
||||
<value>Host</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>GrasscutterTools</value>
|
||||
</data>
|
||||
</root>
|
158
Source/GrasscutterTools/FormTextMapBrowser.Designer.cs
generated
@@ -1,158 +0,0 @@
|
||||
namespace GrasscutterTools
|
||||
{
|
||||
partial class FormTextMapBrowser
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormTextMapBrowser));
|
||||
this.TxtTextMapFilter = new System.Windows.Forms.TextBox();
|
||||
this.BtnSelectRecoursePath = new System.Windows.Forms.Button();
|
||||
this.CmbLanguage = new System.Windows.Forms.ComboBox();
|
||||
this.LblLanguage = new System.Windows.Forms.Label();
|
||||
this.ChkTopMost = new System.Windows.Forms.CheckBox();
|
||||
this.LblResourcesPath = new System.Windows.Forms.Label();
|
||||
this.BtnSearch = new System.Windows.Forms.Button();
|
||||
this.DGVTextMap = new System.Windows.Forms.DataGridView();
|
||||
this.ColumnHash = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
this.ColumnID = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
this.ColumnText = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||
((System.ComponentModel.ISupportInitialize)(this.DGVTextMap)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// TxtTextMapFilter
|
||||
//
|
||||
resources.ApplyResources(this.TxtTextMapFilter, "TxtTextMapFilter");
|
||||
this.TxtTextMapFilter.Name = "TxtTextMapFilter";
|
||||
this.TxtTextMapFilter.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TxtTextMapFilter_KeyDown);
|
||||
//
|
||||
// BtnSelectRecoursePath
|
||||
//
|
||||
resources.ApplyResources(this.BtnSelectRecoursePath, "BtnSelectRecoursePath");
|
||||
this.BtnSelectRecoursePath.Name = "BtnSelectRecoursePath";
|
||||
this.BtnSelectRecoursePath.UseVisualStyleBackColor = true;
|
||||
this.BtnSelectRecoursePath.Click += new System.EventHandler(this.BtnSelectRecoursePath_Click);
|
||||
//
|
||||
// CmbLanguage
|
||||
//
|
||||
resources.ApplyResources(this.CmbLanguage, "CmbLanguage");
|
||||
this.CmbLanguage.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.CmbLanguage.FormattingEnabled = true;
|
||||
this.CmbLanguage.Name = "CmbLanguage";
|
||||
this.CmbLanguage.SelectedIndexChanged += new System.EventHandler(this.CmbLanguage_SelectedIndexChanged);
|
||||
//
|
||||
// LblLanguage
|
||||
//
|
||||
resources.ApplyResources(this.LblLanguage, "LblLanguage");
|
||||
this.LblLanguage.Name = "LblLanguage";
|
||||
//
|
||||
// ChkTopMost
|
||||
//
|
||||
resources.ApplyResources(this.ChkTopMost, "ChkTopMost");
|
||||
this.ChkTopMost.Name = "ChkTopMost";
|
||||
this.ChkTopMost.UseVisualStyleBackColor = true;
|
||||
this.ChkTopMost.CheckedChanged += new System.EventHandler(this.ChkTopMost_CheckedChanged);
|
||||
//
|
||||
// LblResourcesPath
|
||||
//
|
||||
resources.ApplyResources(this.LblResourcesPath, "LblResourcesPath");
|
||||
this.LblResourcesPath.Name = "LblResourcesPath";
|
||||
//
|
||||
// BtnSearch
|
||||
//
|
||||
resources.ApplyResources(this.BtnSearch, "BtnSearch");
|
||||
this.BtnSearch.Name = "BtnSearch";
|
||||
this.BtnSearch.UseVisualStyleBackColor = true;
|
||||
this.BtnSearch.Click += new System.EventHandler(this.BtnSearch_Click);
|
||||
//
|
||||
// DGVTextMap
|
||||
//
|
||||
this.DGVTextMap.AllowUserToAddRows = false;
|
||||
this.DGVTextMap.AllowUserToDeleteRows = false;
|
||||
this.DGVTextMap.AllowUserToResizeRows = false;
|
||||
resources.ApplyResources(this.DGVTextMap, "DGVTextMap");
|
||||
this.DGVTextMap.BackgroundColor = System.Drawing.Color.White;
|
||||
this.DGVTextMap.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
|
||||
this.DGVTextMap.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
|
||||
this.ColumnHash,
|
||||
this.ColumnID,
|
||||
this.ColumnText});
|
||||
this.DGVTextMap.Name = "DGVTextMap";
|
||||
this.DGVTextMap.ReadOnly = true;
|
||||
this.DGVTextMap.RowTemplate.Height = 23;
|
||||
//
|
||||
// ColumnHash
|
||||
//
|
||||
resources.ApplyResources(this.ColumnHash, "ColumnHash");
|
||||
this.ColumnHash.Name = "ColumnHash";
|
||||
this.ColumnHash.ReadOnly = true;
|
||||
//
|
||||
// ColumnID
|
||||
//
|
||||
resources.ApplyResources(this.ColumnID, "ColumnID");
|
||||
this.ColumnID.Name = "ColumnID";
|
||||
this.ColumnID.ReadOnly = true;
|
||||
//
|
||||
// ColumnText
|
||||
//
|
||||
resources.ApplyResources(this.ColumnText, "ColumnText");
|
||||
this.ColumnText.Name = "ColumnText";
|
||||
this.ColumnText.ReadOnly = true;
|
||||
//
|
||||
// FormTextMapBrowser
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.DGVTextMap);
|
||||
this.Controls.Add(this.BtnSearch);
|
||||
this.Controls.Add(this.ChkTopMost);
|
||||
this.Controls.Add(this.LblLanguage);
|
||||
this.Controls.Add(this.CmbLanguage);
|
||||
this.Controls.Add(this.LblResourcesPath);
|
||||
this.Controls.Add(this.BtnSelectRecoursePath);
|
||||
this.Controls.Add(this.TxtTextMapFilter);
|
||||
this.Name = "FormTextMapBrowser";
|
||||
this.Load += new System.EventHandler(this.FormTextMapBrowser_Load);
|
||||
((System.ComponentModel.ISupportInitialize)(this.DGVTextMap)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
private System.Windows.Forms.TextBox TxtTextMapFilter;
|
||||
private System.Windows.Forms.Button BtnSelectRecoursePath;
|
||||
private System.Windows.Forms.ComboBox CmbLanguage;
|
||||
private System.Windows.Forms.Label LblLanguage;
|
||||
private System.Windows.Forms.CheckBox ChkTopMost;
|
||||
private System.Windows.Forms.Label LblResourcesPath;
|
||||
private System.Windows.Forms.Button BtnSearch;
|
||||
private System.Windows.Forms.DataGridView DGVTextMap;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn ColumnHash;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn ColumnID;
|
||||
private System.Windows.Forms.DataGridViewTextBoxColumn ColumnText;
|
||||
}
|
||||
}
|
@@ -1,201 +0,0 @@
|
||||
/**
|
||||
* Grasscutter Tools
|
||||
* Copyright (C) 2022 jie65535
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published
|
||||
* by the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
**/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Windows.Forms;
|
||||
|
||||
using GrasscutterTools.Game;
|
||||
using GrasscutterTools.Properties;
|
||||
|
||||
namespace GrasscutterTools
|
||||
{
|
||||
public partial class FormTextMapBrowser : Form
|
||||
{
|
||||
public FormTextMapBrowser()
|
||||
{
|
||||
InitializeComponent();
|
||||
Icon = Resources.IconGrasscutter;
|
||||
}
|
||||
|
||||
private void FormTextMapBrowser_Load(object sender, EventArgs e)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(Settings.Default.ResourcesDirPath))
|
||||
{
|
||||
LoadResources(Settings.Default.ResourcesDirPath);
|
||||
}
|
||||
}
|
||||
|
||||
private TextMapData data;
|
||||
|
||||
private void LoadResources(string resourcesDirPath)
|
||||
{
|
||||
try
|
||||
{
|
||||
Cursor = Cursors.WaitCursor;
|
||||
Application.DoEvents();
|
||||
|
||||
data = new TextMapData(resourcesDirPath);
|
||||
LblResourcesPath.Text = resourcesDirPath;
|
||||
if (Settings.Default.ResourcesDirPath != resourcesDirPath)
|
||||
{
|
||||
Settings.Default.ResourcesDirPath = resourcesDirPath;
|
||||
Settings.Default.Save();
|
||||
}
|
||||
|
||||
CmbLanguage.Items.Clear();
|
||||
CmbLanguage.Items.AddRange(data.TextMapFiles);
|
||||
if (!string.IsNullOrEmpty(Settings.Default.TextMapFileName))
|
||||
{
|
||||
var i = CmbLanguage.Items.IndexOf(Settings.Default.TextMapFileName);
|
||||
if (i != -1)
|
||||
CmbLanguage.SelectedIndex = i;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show(ex.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
finally
|
||||
{
|
||||
Cursor = Cursors.Default;
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnSelectRecoursePath_Click(object sender, EventArgs e)
|
||||
{
|
||||
var dir = new FolderBrowserDialog()
|
||||
{
|
||||
ShowNewFolderButton = false,
|
||||
Description = "./Gasscutter/resources",
|
||||
};
|
||||
if (dir.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
LoadResources(dir.SelectedPath);
|
||||
}
|
||||
}
|
||||
|
||||
private void CmbLanguage_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (CmbLanguage.SelectedIndex == -1 || data == null)
|
||||
return;
|
||||
try
|
||||
{
|
||||
Cursor = Cursors.WaitCursor;
|
||||
Application.DoEvents();
|
||||
data.LoadTextMap(data.TextMapFilePaths[CmbLanguage.SelectedIndex]);
|
||||
|
||||
GenLines();
|
||||
Settings.Default.TextMapFileName = CmbLanguage.Text;
|
||||
Settings.Default.Save();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show(ex.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
finally
|
||||
{
|
||||
Cursor = Cursors.Default;
|
||||
}
|
||||
}
|
||||
|
||||
private List<ListViewItem> Items;
|
||||
|
||||
private void GenLines()
|
||||
{
|
||||
List<ListViewItem> items = new List<ListViewItem>(data.TextMap.Count);
|
||||
foreach (var kv in data.TextMap)
|
||||
{
|
||||
if (data.ManualTextMap.TryGetValue(kv.Key, out string id))
|
||||
items.Add(new ListViewItem(new string[] { kv.Key, id, kv.Value }));
|
||||
else
|
||||
items.Add(new ListViewItem(new string[] { kv.Key, "", kv.Value }));
|
||||
}
|
||||
Items = items;
|
||||
}
|
||||
|
||||
private void ChkTopMost_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
TopMost = ChkTopMost.Checked;
|
||||
}
|
||||
|
||||
private void BtnSearch_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (Items == null)
|
||||
{
|
||||
MessageBox.Show("请先选择资源目录,并选择对应语言文件。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
return;
|
||||
}
|
||||
var filter = TxtTextMapFilter.Text.Trim();
|
||||
if (string.IsNullOrEmpty(filter))
|
||||
return;
|
||||
Regex r;
|
||||
try
|
||||
{
|
||||
r = new Regex(filter, RegexOptions.IgnoreCase);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show(ex.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
Cursor = Cursors.WaitCursor;
|
||||
Application.DoEvents();
|
||||
|
||||
var result = data.ManualTextMap.Where(kv => r.Match(kv.Value).Success)
|
||||
.Select(kv => new { Hash = kv.Key, Id = kv.Value, Text = data.TextMap[kv.Key] })
|
||||
.Concat(
|
||||
data.TextMap.Where(kv => r.Match(kv.Key).Success || r.Match(kv.Value).Success)
|
||||
.Select(kv => new
|
||||
{
|
||||
Hash = kv.Key,
|
||||
Id = data.ManualTextMap.TryGetValue(kv.Key, out string id) ? id : "",
|
||||
Text = kv.Value
|
||||
})
|
||||
).ToList();
|
||||
|
||||
DGVTextMap.SuspendLayout();
|
||||
DGVTextMap.Rows.Clear();
|
||||
for (int i = 0; i < result.Count; i++)
|
||||
{
|
||||
DGVTextMap.Rows.Add();
|
||||
DGVTextMap.Rows[i].Cells[0].Value = result[i].Hash;
|
||||
DGVTextMap.Rows[i].Cells[1].Value = result[i].Id;
|
||||
DGVTextMap.Rows[i].Cells[2].Value = result[i].Text;
|
||||
}
|
||||
DGVTextMap.ResumeLayout();
|
||||
}
|
||||
finally
|
||||
{
|
||||
Cursor = Cursors.Default;
|
||||
}
|
||||
}
|
||||
|
||||
private void TxtTextMapFilter_KeyDown(object sender, KeyEventArgs e)
|
||||
{
|
||||
if (e.KeyCode == Keys.Enter)
|
||||
BtnSearch_Click(sender, e);
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,405 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="TxtTextMapFilter.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="TxtTextMapFilter.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 41</value>
|
||||
</data>
|
||||
<data name="TxtTextMapFilter.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>555, 23</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="TxtTextMapFilter.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>TxtTextMapFilter.Name" xml:space="preserve">
|
||||
<value>TxtTextMapFilter</value>
|
||||
</data>
|
||||
<data name=">>TxtTextMapFilter.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=">>TxtTextMapFilter.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>TxtTextMapFilter.ZOrder" xml:space="preserve">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="BtnSelectRecoursePath.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>96, 12</value>
|
||||
</data>
|
||||
<data name="BtnSelectRecoursePath.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name="BtnSelectRecoursePath.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="BtnSelectRecoursePath.Text" xml:space="preserve">
|
||||
<value>浏览</value>
|
||||
</data>
|
||||
<data name=">>BtnSelectRecoursePath.Name" xml:space="preserve">
|
||||
<value>BtnSelectRecoursePath</value>
|
||||
</data>
|
||||
<data name=">>BtnSelectRecoursePath.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=">>BtnSelectRecoursePath.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>BtnSelectRecoursePath.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="CmbLanguage.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="CmbLanguage.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>548, 12</value>
|
||||
</data>
|
||||
<data name="CmbLanguage.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>100, 25</value>
|
||||
</data>
|
||||
<data name="CmbLanguage.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name=">>CmbLanguage.Name" xml:space="preserve">
|
||||
<value>CmbLanguage</value>
|
||||
</data>
|
||||
<data name=">>CmbLanguage.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=">>CmbLanguage.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>CmbLanguage.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="LblLanguage.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="LblLanguage.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="LblLanguage.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>510, 15</value>
|
||||
</data>
|
||||
<data name="LblLanguage.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>32, 17</value>
|
||||
</data>
|
||||
<data name="LblLanguage.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="LblLanguage.Text" xml:space="preserve">
|
||||
<value>语言</value>
|
||||
</data>
|
||||
<data name=">>LblLanguage.Name" xml:space="preserve">
|
||||
<value>LblLanguage</value>
|
||||
</data>
|
||||
<data name=">>LblLanguage.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=">>LblLanguage.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblLanguage.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="ChkTopMost.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="ChkTopMost.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 14</value>
|
||||
</data>
|
||||
<data name="ChkTopMost.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>51, 21</value>
|
||||
</data>
|
||||
<data name="ChkTopMost.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="ChkTopMost.Text" xml:space="preserve">
|
||||
<value>置顶</value>
|
||||
</data>
|
||||
<data name=">>ChkTopMost.Name" xml:space="preserve">
|
||||
<value>ChkTopMost</value>
|
||||
</data>
|
||||
<data name=">>ChkTopMost.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=">>ChkTopMost.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>ChkTopMost.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="LblResourcesPath.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<data name="LblResourcesPath.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>177, 15</value>
|
||||
</data>
|
||||
<data name="LblResourcesPath.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>327, 17</value>
|
||||
</data>
|
||||
<data name="LblResourcesPath.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="LblResourcesPath.Text" xml:space="preserve">
|
||||
<value>请选择Resources路径</value>
|
||||
</data>
|
||||
<data name=">>LblResourcesPath.Name" xml:space="preserve">
|
||||
<value>LblResourcesPath</value>
|
||||
</data>
|
||||
<data name=">>LblResourcesPath.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=">>LblResourcesPath.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>LblResourcesPath.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="BtnSearch.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="BtnSearch.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>573, 41</value>
|
||||
</data>
|
||||
<data name="BtnSearch.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>75, 23</value>
|
||||
</data>
|
||||
<data name="BtnSearch.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="BtnSearch.Text" xml:space="preserve">
|
||||
<value>搜索</value>
|
||||
</data>
|
||||
<data name=">>BtnSearch.Name" xml:space="preserve">
|
||||
<value>BtnSearch</value>
|
||||
</data>
|
||||
<data name=">>BtnSearch.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=">>BtnSearch.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>BtnSearch.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="DGVTextMap.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Bottom, Left, Right</value>
|
||||
</data>
|
||||
<metadata name="ColumnHash.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="ColumnHash.HeaderText" xml:space="preserve">
|
||||
<value>Hash</value>
|
||||
</data>
|
||||
<data name="ColumnHash.Width" type="System.Int32, mscorlib">
|
||||
<value>80</value>
|
||||
</data>
|
||||
<metadata name="ColumnID.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="ColumnID.HeaderText" xml:space="preserve">
|
||||
<value>ID</value>
|
||||
</data>
|
||||
<data name="ColumnID.Width" type="System.Int32, mscorlib">
|
||||
<value>240</value>
|
||||
</data>
|
||||
<metadata name="ColumnText.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="ColumnText.HeaderText" xml:space="preserve">
|
||||
<value>Text</value>
|
||||
</data>
|
||||
<data name="ColumnText.Width" type="System.Int32, mscorlib">
|
||||
<value>250</value>
|
||||
</data>
|
||||
<data name="DGVTextMap.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 70</value>
|
||||
</data>
|
||||
<data name="DGVTextMap.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>636, 379</value>
|
||||
</data>
|
||||
<data name="DGVTextMap.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>9</value>
|
||||
</data>
|
||||
<data name=">>DGVTextMap.Name" xml:space="preserve">
|
||||
<value>DGVTextMap</value>
|
||||
</data>
|
||||
<data name=">>DGVTextMap.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.DataGridView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>DGVTextMap.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>DGVTextMap.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="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>660, 461</value>
|
||||
</data>
|
||||
<data name="$this.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>微软雅黑, 9pt</value>
|
||||
</data>
|
||||
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>4, 4, 4, 4</value>
|
||||
</data>
|
||||
<data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>600, 400</value>
|
||||
</data>
|
||||
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
|
||||
<value>CenterScreen</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>文本映射表浏览器</value>
|
||||
</data>
|
||||
<data name=">>ColumnHash.Name" xml:space="preserve">
|
||||
<value>ColumnHash</value>
|
||||
</data>
|
||||
<data name=">>ColumnHash.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>ColumnID.Name" xml:space="preserve">
|
||||
<value>ColumnID</value>
|
||||
</data>
|
||||
<data name=">>ColumnID.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>ColumnText.Name" xml:space="preserve">
|
||||
<value>ColumnText</value>
|
||||
</data>
|
||||
<data name=">>ColumnText.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>FormTextMapBrowser</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
</root>
|
94
Source/GrasscutterTools/GOOD/Artifact.cs
Normal file
@@ -0,0 +1,94 @@
|
||||
/**
|
||||
* Grasscutter Tools
|
||||
* Copyright (C) 2022 jie65535
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published
|
||||
* by the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
**/
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace GrasscutterTools.GOOD
|
||||
{
|
||||
/// <summary>
|
||||
/// Artifact data representation
|
||||
/// Doc: https://frzyc.github.io/genshin-optimizer/#/doc
|
||||
/// Modified from https://github.com/Andrewthe13th/Inventory_Kamera/blob/master/InventoryKamera/game/Artifact.cs
|
||||
/// </summary>
|
||||
public class Artifact
|
||||
{
|
||||
/// <summary>
|
||||
/// e.g. "GladiatorsFinale"
|
||||
/// </summary>
|
||||
[JsonProperty("setKey")]
|
||||
public string SetName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// //e.g. "plume"
|
||||
/// type SlotKey = "flower" | "plume" | "sands" | "goblet" | "circlet"
|
||||
/// </summary>
|
||||
[JsonProperty("slotKey")]
|
||||
public string GearSlot { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 1-5 inclusive
|
||||
/// </summary>
|
||||
[JsonProperty("rarity")]
|
||||
public int Rarity { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// mainStatKey
|
||||
/// </summary>
|
||||
[JsonProperty("mainStatKey")]
|
||||
public string MainStat { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 0-20 inclusive
|
||||
/// </summary>
|
||||
[JsonProperty("level")]
|
||||
public int Level { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// substats
|
||||
/// </summary>
|
||||
[JsonProperty("substats")]
|
||||
public SubStat[] SubStats { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// where "" means not equipped.
|
||||
/// </summary>
|
||||
[JsonProperty("location")]
|
||||
public string EquippedCharacter { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Whether the artifact is locked in game.
|
||||
/// </summary>
|
||||
[JsonProperty("lock")]
|
||||
public bool Lock { get; set; }
|
||||
|
||||
public struct SubStat
|
||||
{
|
||||
/// <summary>
|
||||
/// e.g. "critDMG_"
|
||||
/// </summary>
|
||||
[JsonProperty("key")]
|
||||
public string Stat { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// e.g. 19.4
|
||||
/// </summary>
|
||||
[JsonProperty("value")]
|
||||
public double Value { get; set; }
|
||||
}
|
||||
}
|
||||
}
|
72
Source/GrasscutterTools/GOOD/Character.cs
Normal file
@@ -0,0 +1,72 @@
|
||||
/**
|
||||
* Grasscutter Tools
|
||||
* Copyright (C) 2022 jie65535
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published
|
||||
* by the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
**/
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace GrasscutterTools.GOOD
|
||||
{
|
||||
/// <summary>
|
||||
/// Character data representation
|
||||
/// Doc: https://frzyc.github.io/genshin-optimizer/#/doc
|
||||
/// Modified from https://github.com/Andrewthe13th/Inventory_Kamera/blob/master/InventoryKamera/game/Character.cs
|
||||
/// </summary>
|
||||
public class Character
|
||||
{
|
||||
/// <summary>
|
||||
/// e.g. "Rosaria"
|
||||
/// </summary>
|
||||
[JsonProperty("key")]
|
||||
public string Name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 1-90 inclusive
|
||||
/// </summary>
|
||||
[JsonProperty("level")]
|
||||
public int Level { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 0-6 inclusive
|
||||
/// </summary>
|
||||
[JsonProperty("constellation")]
|
||||
public int Constellation { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 0-6 inclusive. need to disambiguate 80/90 or 80/80
|
||||
/// </summary>
|
||||
[JsonProperty("ascension")]
|
||||
public int Ascension { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// does not include boost from constellations. 1-15 inclusive
|
||||
/// </summary>
|
||||
[JsonProperty("talent")]
|
||||
public Talents Talents { get; set; }
|
||||
}
|
||||
|
||||
public struct Talents
|
||||
{
|
||||
[JsonProperty("auto")]
|
||||
public int Auto { get; set; }
|
||||
|
||||
[JsonProperty("skill")]
|
||||
public int Skill { get; set; }
|
||||
|
||||
[JsonProperty("burst")]
|
||||
public int Burst { get; set; }
|
||||
}
|
||||
}
|
63
Source/GrasscutterTools/GOOD/GOOD.cs
Normal file
@@ -0,0 +1,63 @@
|
||||
/**
|
||||
* Grasscutter Tools
|
||||
* Copyright (C) 2022 jie65535
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published
|
||||
* by the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
**/
|
||||
using System.Collections.Generic;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace GrasscutterTools.GOOD
|
||||
{
|
||||
/// <summary>
|
||||
/// Genshin Open Object Description (GOOD)
|
||||
/// Doc: https://frzyc.github.io/genshin-optimizer/#/doc
|
||||
/// Modified from https://github.com/Andrewthe13th/Inventory_Kamera/blob/master/InventoryKamera/data/GOOD.cs
|
||||
///
|
||||
/// Available for
|
||||
/// https://frzyc.github.io/genshin-optimizer/
|
||||
/// https://github.com/Andrewthe13th/Inventory_Kamera
|
||||
/// https://genshin.aspirine.su/
|
||||
/// https://seelie.me/
|
||||
/// https://github.com/daydreaming666/Amenoma
|
||||
/// https://www.mona-uranai.com/
|
||||
/// https://genshin.mingyulab.com/
|
||||
/// https://genshin-center.com/
|
||||
/// </summary>
|
||||
public class GOOD
|
||||
{
|
||||
[JsonProperty("format")]
|
||||
public string Format { get; set; }
|
||||
|
||||
[JsonProperty("version")]
|
||||
public int Version { get; set; }
|
||||
|
||||
[JsonProperty("source")]
|
||||
public string Source { get; set; }
|
||||
|
||||
[JsonProperty("weapons", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
||||
public List<Weapon> Weapons { get; set; }
|
||||
|
||||
[JsonProperty("artifacts", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
||||
public List<Artifact> Artifacts { get; set; }
|
||||
|
||||
[JsonProperty("characters", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
||||
public List<Character> Characters { get; set; }
|
||||
|
||||
[JsonProperty("materials", DefaultValueHandling = DefaultValueHandling.Ignore)]
|
||||
public Dictionary<string, int> Materials { get; set; }
|
||||
}
|
||||
}
|
108
Source/GrasscutterTools/GOOD/GOODData.cs
Normal file
@@ -0,0 +1,108 @@
|
||||
/**
|
||||
* Grasscutter Tools
|
||||
* Copyright (C) 2022 jie65535
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published
|
||||
* by the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
**/
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
using GrasscutterTools.Game;
|
||||
using GrasscutterTools.Properties;
|
||||
|
||||
namespace GrasscutterTools.GOOD
|
||||
{
|
||||
public static class GOODData
|
||||
{
|
||||
static GOODData()
|
||||
{
|
||||
var cultureInfo = CultureInfo.GetCultureInfo("en-US");
|
||||
var regex = new Regex(@"[\W]", RegexOptions.Compiled);
|
||||
|
||||
Dictionary<string, int> ToGOODMap(ItemMap itemMap)
|
||||
{
|
||||
var dic = new Dictionary<string, int>(itemMap.Count);
|
||||
for (int i = 0; i < itemMap.Count; i++)
|
||||
{
|
||||
var name = itemMap.Names[i];
|
||||
var pascalCase = cultureInfo.TextInfo.ToTitleCase(name);
|
||||
var nameGOOD = regex.Replace(pascalCase, string.Empty);
|
||||
dic[nameGOOD] = itemMap.Ids[i];
|
||||
//dic.Add(nameGOOD, itemMap.Ids[i]);
|
||||
}
|
||||
return dic;
|
||||
}
|
||||
|
||||
var artifactCats = new ItemMap(Resources.ResourceManager.GetString("ArtifactCat", cultureInfo));
|
||||
var avatars = new ItemMap(Resources.ResourceManager.GetString("Avatar", cultureInfo));
|
||||
var weapons = new ItemMap(Resources.ResourceManager.GetString("Weapon", cultureInfo));
|
||||
|
||||
ArtifactCats = ToGOODMap(artifactCats);
|
||||
Avatars = ToGOODMap(avatars);
|
||||
Weapons = ToGOODMap(weapons);
|
||||
}
|
||||
|
||||
|
||||
public static Dictionary<string, int> ArtifactCats { get; private set; }
|
||||
|
||||
|
||||
public static Dictionary<string, string> ArtifactSlotMap = new Dictionary<string, string> {
|
||||
{"goblet", "1"}, {"plume", "2"}, {"circlet", "3"}, {"flower", "4"}, {"sands", "5"}
|
||||
};
|
||||
|
||||
public static Dictionary<string, int> ArtifactMainAttribution { get; } = new Dictionary<string, int>
|
||||
{
|
||||
{ "hp" , 10001 },
|
||||
{ "hp_" , 10002 },
|
||||
{ "atk" , 10003 },
|
||||
{ "atk_" , 10004 },
|
||||
{ "def" , 10005 },
|
||||
{ "def_" , 10006 },
|
||||
{ "enerRech_" , 10007 },
|
||||
{ "eleMas" , 10008 },
|
||||
{ "critRate_" , 13007 },
|
||||
{ "critDMG_" , 13008 },
|
||||
{ "heal_" , 13009 },
|
||||
{ "pyro_dmg_" , 15008 },
|
||||
{ "electro_dmg_" , 15009 },
|
||||
{ "cryo_dmg_" , 15010 },
|
||||
{ "hydro_dmg_" , 15011 },
|
||||
{ "anemo_dmg_" , 15012 },
|
||||
{ "geo_dmg_" , 15013 },
|
||||
{ "dendro_dmg_" , 15014 },
|
||||
{ "physical_dmg_", 15015 },
|
||||
};
|
||||
|
||||
public static Dictionary<string, int> ArtifactSubAttribution { get; } = new Dictionary<string, int>
|
||||
{
|
||||
{ "hp" , 102 },
|
||||
{ "hp_" , 103 },
|
||||
{ "atk" , 105 },
|
||||
{ "atk_" , 106 },
|
||||
{ "def" , 108 },
|
||||
{ "def_" , 109 },
|
||||
{ "critRate_", 120 },
|
||||
{ "critDMG_" , 122 },
|
||||
{ "enerRech_", 123 },
|
||||
{ "eleMas" , 124 },
|
||||
};
|
||||
|
||||
public static Dictionary<string, int> Avatars { get; private set; }
|
||||
|
||||
public static Dictionary<string, int> Weapons { get; private set; }
|
||||
|
||||
}
|
||||
}
|
68
Source/GrasscutterTools/GOOD/Weapon.cs
Normal file
@@ -0,0 +1,68 @@
|
||||
/**
|
||||
* Grasscutter Tools
|
||||
* Copyright (C) 2022 jie65535
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published
|
||||
* by the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
**/
|
||||
using System.ComponentModel;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace GrasscutterTools.GOOD
|
||||
{
|
||||
/// <summary>
|
||||
/// Weapon data representation
|
||||
/// Doc: https://frzyc.github.io/genshin-optimizer/#/doc
|
||||
/// Modified from https://github.com/Andrewthe13th/Inventory_Kamera/blob/master/InventoryKamera/game/Weapon.cs
|
||||
/// </summary>
|
||||
public class Weapon
|
||||
{
|
||||
/// <summary>
|
||||
/// e.g. "CrescentPike"
|
||||
/// </summary>
|
||||
[JsonProperty("key")]
|
||||
public string Name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 1-90 inclusive
|
||||
/// </summary>
|
||||
[JsonProperty("level")]
|
||||
public int Level { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 0-6 inclusive. need to disambiguate 80/90 or 80/80
|
||||
/// </summary>
|
||||
[JsonProperty("ascension")]
|
||||
public int AscensionLevel { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 1-5 inclusive
|
||||
/// </summary>
|
||||
[JsonProperty("refinement")]
|
||||
public int RefinementLevel { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// where "" means not equipped.
|
||||
/// </summary>
|
||||
[JsonProperty("location")]
|
||||
[DefaultValue("")]
|
||||
public string EquippedCharacter { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Whether the weapon is locked in game.
|
||||
/// </summary>
|
||||
[JsonProperty("lock")]
|
||||
public bool Lock { get; set; }
|
||||
}
|
||||
}
|
13
Source/GrasscutterTools/Game/CommandGenerator.cs
Normal file
@@ -0,0 +1,13 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace GrasscutterTools.Game
|
||||
{
|
||||
public class CommandGenerator
|
||||
{
|
||||
|
||||
}
|
||||
}
|
126
Source/GrasscutterTools/Game/CommandVersion.cs
Normal file
@@ -0,0 +1,126 @@
|
||||
/**
|
||||
* Grasscutter Tools
|
||||
* Copyright (C) 2022 jie65535
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published
|
||||
* by the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
**/
|
||||
using System;
|
||||
|
||||
namespace GrasscutterTools.Game
|
||||
{
|
||||
/// <summary>
|
||||
/// 命令版本
|
||||
///
|
||||
/// 用法:
|
||||
/// ver = Version.TryParse(input, out Version current) ? new CommandVersion(current) : CommandVersion.Latest();
|
||||
///
|
||||
/// </summary>
|
||||
internal class CommandVersion
|
||||
{
|
||||
/// <summary>
|
||||
/// 初始化当前版本
|
||||
/// </summary>
|
||||
/// <param name="current"></param>
|
||||
public CommandVersion(Version current)
|
||||
{
|
||||
this.current = current ?? throw new ArgumentNullException(nameof(current));
|
||||
}
|
||||
|
||||
private Version current;
|
||||
|
||||
/// <summary>
|
||||
/// 当前命令版本
|
||||
/// </summary>
|
||||
public Version Current
|
||||
{
|
||||
get => current;
|
||||
set
|
||||
{
|
||||
if (current != value)
|
||||
{
|
||||
current = value;
|
||||
OnVersionChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 选中版本改变事件
|
||||
/// </summary>
|
||||
public event EventHandler VersionChanged;
|
||||
|
||||
/// <summary>
|
||||
/// 触发版本更改事件
|
||||
/// </summary>
|
||||
private void OnVersionChanged() => VersionChanged?.Invoke(this, EventArgs.Empty);
|
||||
|
||||
/// <summary>
|
||||
/// 当前支持的最新版本 - 当未选择版本时,默认为最新版本
|
||||
/// </summary>
|
||||
public static CommandVersion Latest() => new CommandVersion(List[List.Length - 1]);
|
||||
|
||||
|
||||
#region - 版本列表 Version List -
|
||||
|
||||
// 忽略更早以前的版本
|
||||
/// <summary>
|
||||
/// v1.2.1 2022/6/18
|
||||
/// git 30c7bb94439a123417a6a1e0116acd3c40f2d115
|
||||
/// </summary>
|
||||
public static readonly Version V1_2_1 = new Version(1, 2, 1);
|
||||
|
||||
/// <summary>
|
||||
/// v1.2.1 -> v1.2.2 2022/6/22
|
||||
/// git aa43943025fefcda9739c9fcf242e67f1a7b83b4
|
||||
/// </summary>
|
||||
public static readonly Version V1_2_2 = new Version(1, 2, 2);
|
||||
|
||||
/// <summary>
|
||||
/// v1.2.2 -> v1.2.3 2022/7/21
|
||||
/// git a07b3f21e6fbeb9abfad8862d6fa0dc4a1c3c1a3
|
||||
/// </summary>
|
||||
public static readonly Version V1_2_3 = new Version(1, 2, 3);
|
||||
|
||||
/// <summary>
|
||||
/// v1.2.3 -> v1.3.0 2022/9/3 - stable
|
||||
/// git 155501058fcce109489a19db37d0513d2235e08e
|
||||
/// </summary>
|
||||
public static readonly Version V1_3_0 = new Version(1, 3, 0);
|
||||
|
||||
/// <summary>
|
||||
/// v1.3.0 -> v1.3.1 2022/9/3
|
||||
/// git 6cf83b30eeaa98a68de2d786d7ca85ae21a95e32
|
||||
/// </summary>
|
||||
public static readonly Version V1_3_1 = new Version(1, 3, 1);
|
||||
|
||||
// More...
|
||||
/// <summary>
|
||||
/// v1.2.3 -> v1.2.4 2022/7/21
|
||||
/// git hash
|
||||
/// </summary>
|
||||
//public static readonly Version V1_2_4 = new Version(1, 2, 4);
|
||||
|
||||
public static Version[] List { get; } = new Version[] {
|
||||
V1_2_1,
|
||||
V1_2_2,
|
||||
V1_2_3,
|
||||
V1_3_0,
|
||||
V1_3_1,
|
||||
//V1_3_2,
|
||||
};
|
||||
|
||||
#endregion - 版本列表 Version List -
|
||||
}
|
||||
}
|
190
Source/GrasscutterTools/Game/Gacha/GachaBanner2.cs
Normal file
@@ -0,0 +1,190 @@
|
||||
/**
|
||||
* Grasscutter Tools
|
||||
* Copyright (C) 2022 jie65535
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published
|
||||
* by the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
**/
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Converters;
|
||||
|
||||
namespace GrasscutterTools.Game.Gacha
|
||||
{
|
||||
/// <summary>
|
||||
/// https://github.com/Grasscutters/Grasscutter/pull/639
|
||||
/// </summary>
|
||||
public class GachaBanner2
|
||||
{
|
||||
/// <summary>
|
||||
/// 添加卡池请从400开始增加id数值进行添加,这个id需要每个池子不一样,
|
||||
/// 如果你想添加大量卡池,请按照每次增加固定数值的id进行添加,比如:411,412,413....
|
||||
/// </summary>
|
||||
[JsonProperty("gachaType")]
|
||||
public int GachaType { get; set; } = 400;
|
||||
|
||||
/// <summary>
|
||||
/// 这个id需要每个池子不一样,如果你想添加大量卡池,
|
||||
/// 请按照每次增加固定数值的id进行添加,比如:2100,2200,2300....
|
||||
/// </summary>
|
||||
[JsonProperty("scheduleId")]
|
||||
public int ScheduleId { get; set; } = 800;
|
||||
|
||||
/// <summary>
|
||||
/// 这个是卡池的预制路径id
|
||||
/// </summary>
|
||||
[JsonProperty("prefabPath")]
|
||||
public string PrefabPath { get; set; } = "GachaShowPanel_A007";
|
||||
|
||||
/// <summary>
|
||||
/// 这个是抽卡的预览背景路径id
|
||||
/// </summary>
|
||||
[JsonProperty("previewPrefabPath")]
|
||||
public string PreviewPrefabPath { get; set; } = "UI_Tab_GachaShowPanel_A007";
|
||||
|
||||
/// <summary>
|
||||
/// 这个是抽卡的标题路径id,有可能与之前两项的id不同
|
||||
/// (一般这3项的id只需保持一致即可,就是A0xx,xx为同一id)
|
||||
/// </summary>
|
||||
[JsonProperty("titlePath")]
|
||||
public string TitlePath { get; set; } = "UI_GACHA_SHOW_PANEL_A007_TITLE";
|
||||
|
||||
/// <summary>
|
||||
/// 这个表示祈愿用的道具,224是相遇之缘,223是纠缠之缘 - 选择一个作为该卡池的抽卡道具
|
||||
/// (提示:请不要随便修改祈愿道具除了蓝球和粉球,有可能会引发bug,比如修改成摩拉抽卡可能导致卡住)
|
||||
/// </summary>
|
||||
[JsonProperty("costItem")]
|
||||
public int CostItem { get; set; } = 224;
|
||||
|
||||
/// <summary>
|
||||
/// 开始时间(Unix时间戳)
|
||||
/// </summary>
|
||||
[JsonProperty("beginTime")]
|
||||
public int BeginTime { get; set; } = 0;
|
||||
|
||||
/// <summary>
|
||||
/// 结束时间(Unix时间戳)
|
||||
/// </summary>
|
||||
[JsonProperty("endTime")]
|
||||
public int EndTime { get; set; } = 1924992000;
|
||||
|
||||
/// <summary>
|
||||
/// 卡池顺序
|
||||
/// </summary>
|
||||
[JsonProperty("sortId")]
|
||||
public int SortId { get; set; } = 1000;
|
||||
|
||||
/// <summary>
|
||||
/// 抽卡次数限制
|
||||
/// </summary>
|
||||
[JsonProperty("gachaTimesLimit")]
|
||||
public int GachaTimesLimit { get; set; } = int.MaxValue;
|
||||
|
||||
/// <summary>
|
||||
/// 4星的up角色或物品
|
||||
/// </summary>
|
||||
[JsonProperty("rateUpItems4")]
|
||||
public int[] RateUpItems4 { get; set; } = { };
|
||||
|
||||
/// <summary>
|
||||
/// 5星的up物品或者角色
|
||||
/// </summary>
|
||||
[JsonProperty("rateUpItems5")]
|
||||
public int[] RateUpItems5 { get; set; } = { };
|
||||
|
||||
/// <summary>
|
||||
/// 3星普通池
|
||||
/// </summary>
|
||||
[JsonProperty("fallbackItems3")]
|
||||
public int[] FallbackItems3 { get; set; } = { 11301, 11302, 11306, 12301, 12302, 12305, 13303, 14301, 14302, 14304, 15301, 15302, 15304 };
|
||||
|
||||
/// <summary>
|
||||
/// 4星普通角色池
|
||||
/// </summary>
|
||||
[JsonProperty("fallbackItems4Pool1")]
|
||||
public int[] FallbackItems4Pool1 { get; set; } = { 1014, 1020, 1023, 1024, 1025, 1027, 1031, 1032, 1034, 1036, 1039, 1043, 1044, 1045, 1048, 1053, 1055, 1056, 1064 };
|
||||
|
||||
/// <summary>
|
||||
/// 4星普通武器池
|
||||
/// </summary>
|
||||
[JsonProperty("fallbackItems4Pool2")]
|
||||
public int[] FallbackItems4Pool2 { get; set; } = { 11401, 11402, 11403, 11405, 12401, 12402, 12403, 12405, 13401, 13407, 14401, 14402, 14403, 14409, 15401, 15402, 15403, 15405 };
|
||||
|
||||
/// <summary>
|
||||
/// 5星普通角色池
|
||||
/// </summary>
|
||||
[JsonProperty("fallbackItems5Pool1")]
|
||||
public int[] FallbackItems5Pool1 { get; set; } = { 1003, 1016, 1042, 1035, 1041 };
|
||||
|
||||
/// <summary>
|
||||
/// 5星普通角色池
|
||||
/// </summary>
|
||||
[JsonProperty("fallbackItems5Pool2")]
|
||||
public int[] FallbackItems5Pool2 { get; set; } = { 11501, 11502, 12501, 12502, 13502, 13505, 14501, 14502, 15501, 15502 };
|
||||
|
||||
/// <summary>
|
||||
/// 是否从奖池中移除玩家星座等级6级以上的角色
|
||||
/// </summary>
|
||||
[JsonProperty("removeC6FromPool")]
|
||||
public bool RemoveC6FromPool { get; set; } = false;
|
||||
|
||||
/// <summary>
|
||||
/// 自动从普通池中移除UP池物品或角色
|
||||
/// </summary>
|
||||
[JsonProperty("autoStripRateUpFromFallback")]
|
||||
public bool AutoStripRateUpFromFallback { get; set; } = true;
|
||||
|
||||
/// <summary>
|
||||
/// 4星权重
|
||||
/// </summary>
|
||||
[JsonProperty("weights4")]
|
||||
public int[,] Weights4 { get; set; } = { { 1, 510 }, { 8, 510 }, { 10, 10000 } };
|
||||
|
||||
/// <summary>
|
||||
/// 5星权重
|
||||
/// </summary>
|
||||
[JsonProperty("weights5")]
|
||||
public int[,] Weights5 { get; set; } = { { 1, 75 }, { 73, 150 }, { 90, 10000 } };
|
||||
|
||||
/// <summary>
|
||||
/// 4星平衡奖池权重(即中的是武器还是角色)
|
||||
/// </summary>
|
||||
[JsonProperty("poolBalanceWeights4")]
|
||||
public int[,] PoolBalanceWeights4 { get; set; } = { { 1, 255 }, { 17, 255 }, { 21, 10455 } };
|
||||
|
||||
/// <summary>
|
||||
/// 5星平衡奖池权重(即中的是武器还是角色)
|
||||
/// </summary>
|
||||
[JsonProperty("poolBalanceWeights5")]
|
||||
public int[,] PoolBalanceWeights5 { get; set; } = { { 1, 30 }, { 147, 150 }, { 181, 10230 } };
|
||||
|
||||
/// <summary>
|
||||
/// 4星事件概率(抽中后,摇1~100随机数,如果大于该值则抽中up池)
|
||||
/// </summary>
|
||||
[JsonProperty("eventChance4")]
|
||||
public int EventChance4 { get; set; } = 50;
|
||||
|
||||
/// <summary>
|
||||
/// 5星事件概率(抽中后,摇1~100随机数,如果大于该值则抽中up池)
|
||||
/// </summary>
|
||||
[JsonProperty("eventChance5")]
|
||||
public int EventChance5 { get; set; } = 50;
|
||||
|
||||
/// <summary>
|
||||
/// 这个有3种类型,standard表示常驻池,event表示限时角色祈愿池,
|
||||
/// weapon表示限时武器祈愿池,选择一种类型的卡池
|
||||
/// </summary>
|
||||
[JsonProperty("bannerType"), JsonConverter(typeof(StringEnumConverter))]
|
||||
public BannerType BannerType { get; set; } = BannerType.STANDARD;
|
||||
}
|
||||
}
|
@@ -1,4 +1,4 @@
|
||||
/**
|
||||
/**
|
||||
* Grasscutter Tools
|
||||
* Copyright (C) 2022 jie65535
|
||||
*
|
||||
@@ -17,6 +17,7 @@
|
||||
*
|
||||
**/
|
||||
using GrasscutterTools.Properties;
|
||||
using GrasscutterTools.Utils;
|
||||
|
||||
namespace GrasscutterTools.Game
|
||||
{
|
||||
@@ -24,54 +25,45 @@ namespace GrasscutterTools.Game
|
||||
{
|
||||
public static void LoadResources()
|
||||
{
|
||||
Animals = new ItemMap(Resources.Animal);
|
||||
Artifacts = new ItemMap(Resources.Artifact);
|
||||
ArtifactCats = new ItemMap(Resources.ArtifactCat);
|
||||
//SparseSet illegalWeaponIds = new SparseSet(
|
||||
// "10000-10008, 11411, 11506-11508, 12505, 12506, 12508, 12509," +
|
||||
// "13503, 13506, 14411, 14503, 14505, 14508, 15504-15506");
|
||||
|
||||
|
||||
//SparseSet illegalRelicIds = new SparseSet(
|
||||
// "20001, 23300-23340, 23383-23385, 78310-78554, 99310-99554"
|
||||
// );
|
||||
|
||||
//SparseSet illegalItemIds = new SparseSet(
|
||||
// "100086, 100087, 100100-101000, 101106-101110, 101306, 101500-104000," +
|
||||
// "105001, 105004, 106000-107000, 107011, 108000, 109000-110000," +
|
||||
// "115000-130000, 200200-200899, 220050, 220054"
|
||||
// );
|
||||
|
||||
ArtifactSets = new ItemMap(Resources.ArtifactSets);
|
||||
ArtifactMainAttribution = new ItemMap(Resources.ArtifactMainAttribution);
|
||||
ArtifactSubAttribution = new ItemMap(Resources.ArtifactSubAttribution);
|
||||
Avatars = new ItemMap(Resources.Avatar);
|
||||
AvatarColors = new ItemMap(Resources.AvatarColor);
|
||||
Items = new ItemMap(Resources.Item);
|
||||
Monsters = new ItemMap(Resources.Monster);
|
||||
NPCs = new ItemMap(Resources.NPC);
|
||||
Scenes = new ItemMap(Resources.Scene);
|
||||
Weapons = new ItemMap(Resources.Weapon);
|
||||
WeaponColors = new ItemMap(Resources.WeaponColor);
|
||||
Ornaments = new ItemMap(Resources.Ornament);
|
||||
Items = new ItemMap(Resources.Items);
|
||||
Monsters = new ItemMap(Resources.Monsters);
|
||||
Scenes = new ItemMap(Resources.Scenes);
|
||||
GachaBannerPrefabs = new ItemMap(Resources.GachaBennerPrefab);
|
||||
Quests = new ItemMap(Resources.Quest);
|
||||
Quests = new ItemMap(Resources.Quests);
|
||||
}
|
||||
|
||||
public static ItemMap Animals { get; private set; }
|
||||
|
||||
public static ItemMap Artifacts { get; private set; }
|
||||
|
||||
public static ItemMap ArtifactCats { get; private set; }
|
||||
public static ItemMap ArtifactSets { get; private set; }
|
||||
|
||||
public static ItemMap ArtifactMainAttribution { get; private set; }
|
||||
|
||||
public static ItemMap ArtifactSubAttribution { get; private set; }
|
||||
|
||||
public static ItemMap Avatars { get; private set; }
|
||||
|
||||
public static ItemMap AvatarColors { get; private set; }
|
||||
|
||||
public static ItemMap Items { get; private set; }
|
||||
|
||||
public static ItemMap Monsters { get; private set; }
|
||||
|
||||
public static ItemMap NPCs { get; private set; }
|
||||
|
||||
public static ItemMap Scenes { get; private set; }
|
||||
|
||||
public static ItemMap Weapons { get; private set; }
|
||||
|
||||
public static ItemMap WeaponColors { get; private set; }
|
||||
|
||||
public static ItemMap Ornaments { get; private set; }
|
||||
|
||||
public static ItemMap GachaBannerPrefabs { get; private set; }
|
||||
|
||||
public static ItemMap Quests { get; private set; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -16,15 +16,18 @@
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
**/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using GrasscutterTools.Utils;
|
||||
|
||||
namespace GrasscutterTools.Game
|
||||
{
|
||||
public class ItemMap
|
||||
{
|
||||
public ItemMap(string idNamePairs)
|
||||
public ItemMap(string idNamePairs, SparseSet exclusions = null)
|
||||
{
|
||||
var lines = idNamePairs.Split('\n');
|
||||
var lines = idNamePairs.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
var capacity = lines.Length;
|
||||
//IdMap = new Dictionary<int, string>(capacity);
|
||||
//NameMap = new Dictionary<string, int>(capacity);
|
||||
@@ -38,8 +41,10 @@ namespace GrasscutterTools.Game
|
||||
if (si > 0 && int.TryParse(line.Substring(0, si).Trim(), out int id))
|
||||
{
|
||||
var name = line.Substring(si + 1).Trim();
|
||||
if (!string.IsNullOrEmpty(name))
|
||||
if (!string.IsNullOrEmpty(name) && name != "null")
|
||||
{
|
||||
if (exclusions?.Contains(id) == true)
|
||||
continue;
|
||||
//IdMap[id] = name;
|
||||
//NameMap[name] = id;
|
||||
IdList.Add(id);
|
||||
|
@@ -46,7 +46,7 @@ namespace GrasscutterTools.Game
|
||||
ManualTextMap = new Dictionary<string, string>();
|
||||
while (reader.Read())
|
||||
{
|
||||
if (reader.TokenType == JsonToken.PropertyName && (string)reader.Value == "TextMapId")
|
||||
if (reader.TokenType == JsonToken.PropertyName && ((string)reader.Value == "TextMapId" || (string)reader.Value == "textMapId"))
|
||||
{
|
||||
var textMapId = reader.ReadAsString();
|
||||
reader.Read();
|
||||
|
@@ -1,22 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="..\packages\Resource.Embedder.2.2.0\build\Resource.Embedder.props" Condition="Exists('..\packages\Resource.Embedder.2.2.0\build\Resource.Embedder.props')" />
|
||||
<Import Project="..\packages\Costura.Fody.5.7.0\build\Costura.Fody.props" Condition="Exists('..\packages\Costura.Fody.5.7.0\build\Costura.Fody.props')" />
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{B26333FF-5560-4CBA-AF3C-4B80DB6F8025}</ProjectGuid>
|
||||
<ProjectGuid>{5E0D32CF-AF0D-4D51-B477-5131E2C87002}</ProjectGuid>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<RootNamespace>GrasscutterTools</RootNamespace>
|
||||
<AssemblyName>GrasscutterTools</AssemblyName>
|
||||
<UICulture>en-US</UICulture>
|
||||
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
<Deterministic>true</Deterministic>
|
||||
<TargetFrameworkProfile />
|
||||
<NuGetPackageImportStamp>
|
||||
</NuGetPackageImportStamp>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
@@ -40,314 +38,232 @@
|
||||
<PropertyGroup>
|
||||
<ApplicationIcon>Resources\IconGrasscutter.ico</ApplicationIcon>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ApplicationManifest>Properties\app.manifest</ApplicationManifest>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Costura, Version=5.7.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Costura.Fody.5.7.0\lib\netstandard1.0\Costura.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Build.Framework" />
|
||||
<Reference Include="Microsoft.Build.Utilities.v4.0" />
|
||||
<Reference Include="Microsoft.Win32.Primitives, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.Win32.Primitives.4.3.0\lib\net46\Microsoft.Win32.Primitives.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.AppContext, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.AppContext.4.3.0\lib\net463\System.AppContext.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.ComponentModel.Composition" />
|
||||
<Reference Include="System.Console, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Console.4.3.0\lib\net46\System.Console.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Diagnostics.DiagnosticSource, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Diagnostics.DiagnosticSource.4.3.0\lib\net46\System.Diagnostics.DiagnosticSource.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Diagnostics.Tracing, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Diagnostics.Tracing.4.3.0\lib\net462\System.Diagnostics.Tracing.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Globalization.Calendars, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Globalization.Calendars.4.3.0\lib\net46\System.Globalization.Calendars.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.IO, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.IO.4.3.0\lib\net462\System.IO.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.IO.Compression, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.IO.Compression.FileSystem" />
|
||||
<Reference Include="System.IO.Compression.ZipFile, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.IO.Compression.ZipFile.4.3.0\lib\net46\System.IO.Compression.ZipFile.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.IO.FileSystem, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.IO.FileSystem.Primitives, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.IO.FileSystem.Primitives.4.3.0\lib\net46\System.IO.FileSystem.Primitives.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Linq, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Linq.4.3.0\lib\net463\System.Linq.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Linq.Expressions, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Linq.Expressions.4.3.0\lib\net463\System.Linq.Expressions.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Net.Http, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Net.Http.4.3.0\lib\net46\System.Net.Http.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Net.Sockets, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Net.Sockets.4.3.0\lib\net46\System.Net.Sockets.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Numerics" />
|
||||
<Reference Include="System.Reflection, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Reflection.4.3.0\lib\net462\System.Reflection.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Runtime, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Runtime.4.3.0\lib\net462\System.Runtime.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Runtime.Extensions, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Runtime.Extensions.4.3.0\lib\net462\System.Runtime.Extensions.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Runtime.InteropServices, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Runtime.InteropServices.4.3.0\lib\net463\System.Runtime.InteropServices.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Security.Cryptography.Algorithms, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.Cryptography.Algorithms.4.3.0\lib\net463\System.Security.Cryptography.Algorithms.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Security.Cryptography.Encoding, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Security.Cryptography.Primitives, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Security.Cryptography.X509Certificates, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.Cryptography.X509Certificates.4.3.0\lib\net461\System.Security.Cryptography.X509Certificates.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Text.RegularExpressions, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Text.RegularExpressions.4.3.0\lib\net463\System.Text.RegularExpressions.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Deployment" />
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="System.Xml.ReaderWriter, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Xml.ReaderWriter.4.3.0\lib\net46\System.Xml.ReaderWriter.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
<Reference Include="System.Net.Http" />
|
||||
<Reference Include="System.Xaml">
|
||||
<RequiredTargetFramework>4.0</RequiredTargetFramework>
|
||||
</Reference>
|
||||
<Reference Include="WindowsBase" />
|
||||
<Reference Include="PresentationCore" />
|
||||
<Reference Include="PresentationFramework" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="DispatchServer\DispatchServerAPI.cs" />
|
||||
<ApplicationDefinition Include="App.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</ApplicationDefinition>
|
||||
<Compile Include="DispatchServer\Model\ServerStatus.cs" />
|
||||
<Compile Include="FormGachaBannerEditor.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="FormGachaBannerEditor.Designer.cs">
|
||||
<DependentUpon>FormGachaBannerEditor.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="FormMain.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="FormMain.Designer.cs">
|
||||
<DependentUpon>FormMain.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="FormTextMapBrowser.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="FormTextMapBrowser.Designer.cs">
|
||||
<DependentUpon>FormTextMapBrowser.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Game\GameCommand.cs" />
|
||||
<Compile Include="Events\CommandGeneratedEventArgs.cs" />
|
||||
<Compile Include="Events\ListChangedEventArgs.cs" />
|
||||
<Compile Include="Game\CommandGenerator.cs" />
|
||||
<Compile Include="Game\CommandVersion.cs" />
|
||||
<Compile Include="Game\Gacha\BannerType.cs" />
|
||||
<Compile Include="Game\Gacha\GachaBanner.cs" />
|
||||
<Compile Include="Game\Gacha\GachaBanner2.cs" />
|
||||
<Compile Include="Game\GameCommand.cs" />
|
||||
<Compile Include="Game\GameData.cs" />
|
||||
<Compile Include="Game\ItemMap.cs" />
|
||||
<Compile Include="Game\SetStatsCommand.cs" />
|
||||
<Compile Include="Game\TextMapData.cs" />
|
||||
<Compile Include="GOOD\Artifact.cs" />
|
||||
<Compile Include="GOOD\Character.cs" />
|
||||
<Compile Include="GOOD\GOOD.cs" />
|
||||
<Compile Include="GOOD\GOODData.cs" />
|
||||
<Compile Include="GOOD\Weapon.cs" />
|
||||
<Compile Include="Interfaces\IPageCommand.cs" />
|
||||
<Compile Include="Interfaces\IPageListProvider.cs" />
|
||||
<Compile Include="Models\GameItem.cs" />
|
||||
<Compile Include="Models\GameItems.cs" />
|
||||
<Compile Include="OpenCommand\OpenCommandAPI.cs" />
|
||||
<Compile Include="MultiLanguage.cs" />
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Utils\HttpHelper.cs" />
|
||||
<EmbeddedResource Include="FormGachaBannerEditor.en-us.resx">
|
||||
<DependentUpon>FormGachaBannerEditor.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="FormGachaBannerEditor.resx">
|
||||
<DependentUpon>FormGachaBannerEditor.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="FormMain.en-us.resx">
|
||||
<DependentUpon>FormMain.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="FormMain.resx">
|
||||
<DependentUpon>FormMain.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="FormTextMapBrowser.en-US.resx">
|
||||
<DependentUpon>FormTextMapBrowser.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="FormTextMapBrowser.resx">
|
||||
<DependentUpon>FormTextMapBrowser.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Properties\Resources.en-us.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.en-us.Designer.cs</LastGenOutput>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<Compile Include="Properties\Resources.en-us.Designer.cs">
|
||||
<DependentUpon>Resources.en-us.resx</DependentUpon>
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
<Compile Include="Pages\PageGive.xaml.cs">
|
||||
<DependentUpon>PageGive.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Pages\PageTools.xaml.cs">
|
||||
<DependentUpon>PageTools.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Pages\PageHome.xaml.cs">
|
||||
<DependentUpon>PageHome.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Properties\Resources.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Utils\ArtifactUtils.cs" />
|
||||
<Compile Include="Utils\HttpHelper.cs" />
|
||||
<Compile Include="Utils\ReleaseAPI.cs" />
|
||||
<Page Include="Pages\PageGive.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</Page>
|
||||
<Page Include="Pages\PageTools.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="Pages\PageHome.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</Page>
|
||||
<Page Include="Styles\ScrollViewerStyle.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</Page>
|
||||
<Page Include="Themes\ExpressionDark\Theme.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</Page>
|
||||
<Page Include="Themes\ExpressionLight\Theme.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="Windows\MainWindow.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Compile Include="App.xaml.cs">
|
||||
<DependentUpon>App.xaml</DependentUpon>
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="DispatchServer\DispatchServerAPI.cs" />
|
||||
<Compile Include="Utils\SparseSet.cs" />
|
||||
<Compile Include="Windows\MainWindow.xaml.cs">
|
||||
<DependentUpon>MainWindow.xaml</DependentUpon>
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Properties\AssemblyInfo.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<None Include="packages.config" />
|
||||
<None Include="Properties\app.manifest" />
|
||||
<None Include="Properties\Settings.settings">
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||
</None>
|
||||
<Compile Include="Properties\Settings.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Settings.settings</DependentUpon>
|
||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||
</Compile>
|
||||
<EmbeddedResource Include="Properties\Resources.resx">
|
||||
<Generator>PublicResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Properties\Resources.ru-RU.resx" />
|
||||
<EmbeddedResource Include="Properties\Resources.zh-CN.resx" />
|
||||
<EmbeddedResource Include="Properties\Resources.zh-TW.resx" />
|
||||
<None Include="Properties\Settings.settings">
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||
</None>
|
||||
<None Include="Resources\en-us\AvatarStats.json" />
|
||||
<None Include="Resources\ru-ru\AvatarStats.json" />
|
||||
<None Include="Resources\zh-cn\AvatarStats.json" />
|
||||
<None Include="Resources\zh-tw\AvatarStats.json" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="App.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="FodyWeavers.xml" />
|
||||
<Content Include="Resources\en-us\Animal.txt" />
|
||||
<Content Include="Resources\en-us\Artifact.txt" />
|
||||
<Content Include="Resources\en-us\ArtifactCat.txt" />
|
||||
<Content Include="Resources\en-us\ArtifactMainAttribution.txt" />
|
||||
<Content Include="Resources\en-us\ArtifactSubAttribution.txt" />
|
||||
<Content Include="Resources\en-us\Avatar.txt" />
|
||||
<Content Include="Resources\en-us\CustomCommands.txt" />
|
||||
<Content Include="Resources\en-us\GachaBennerPrefab.txt" />
|
||||
<Content Include="Resources\en-us\Item.txt" />
|
||||
<Content Include="Resources\en-us\Monster.txt" />
|
||||
<Content Include="Resources\en-us\NPC.txt" />
|
||||
<Content Include="Resources\en-us\Ornament.txt" />
|
||||
<Content Include="Resources\en-us\Quest.txt" />
|
||||
<Content Include="Resources\en-us\Scene.txt" />
|
||||
<Content Include="Resources\en-us\Weapon.txt" />
|
||||
<Content Include="Resources\IconGrasscutter.ico" />
|
||||
<Content Include="Resources\IconGrasscutter.png" />
|
||||
<None Include="Resources\ImgSupport.png" />
|
||||
<Content Include="Resources\ImgHome.jpg" />
|
||||
<Content Include="Resources\Permissions.txt" />
|
||||
<Content Include="Resources\WeaponColor.txt" />
|
||||
<Content Include="Resources\zh-cn\Animal.txt" />
|
||||
<Content Include="Resources\zh-cn\ArtifactCat.txt" />
|
||||
<Content Include="Resources\zh-cn\ArtifactMainAttribution.txt" />
|
||||
<Content Include="Resources\zh-cn\Artifact.txt" />
|
||||
<Content Include="Resources\zh-cn\ArtifactSubAttribution.txt" />
|
||||
<Content Include="Resources\zh-cn\Avatar.txt" />
|
||||
<Content Include="Resources\zh-cn\CustomCommands.txt" />
|
||||
<Content Include="Resources\AvatarColor.txt" />
|
||||
<Content Include="Resources\zh-cn\GachaBennerPrefab.txt" />
|
||||
<Content Include="Resources\zh-cn\Item.txt" />
|
||||
<Content Include="Resources\zh-cn\Monster.txt" />
|
||||
<Content Include="Resources\zh-cn\NPC.txt" />
|
||||
<Content Include="Resources\zh-cn\Ornament.txt" />
|
||||
<Content Include="Resources\zh-cn\Quest.txt" />
|
||||
<Content Include="Resources\zh-cn\Scene.txt" />
|
||||
<Content Include="Resources\zh-cn\Weapon.txt" />
|
||||
<PackageReference Include="Newtonsoft.Json">
|
||||
<Version>13.0.1</Version>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<BootstrapperPackage Include=".NETFramework,Version=v4.8">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>Microsoft .NET Framework 4.8 %28x86 和 x64%29</ProductName>
|
||||
<Install>true</Install>
|
||||
</BootstrapperPackage>
|
||||
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>.NET Framework 3.5 SP1</ProductName>
|
||||
<Install>false</Install>
|
||||
</BootstrapperPackage>
|
||||
<Resource Include="Resources\zh-cn\Dungeons.txt" />
|
||||
<Resource Include="Resources\en-us\ArtifactSets.txt" />
|
||||
<Resource Include="Resources\en-us\ArtifactMainAttribution.txt" />
|
||||
<Resource Include="Resources\en-us\ArtifactSubAttribution.txt" />
|
||||
<Resource Include="Resources\en-us\CustomCommands.txt" />
|
||||
<Resource Include="Resources\en-us\GachaBennerPrefab.txt" />
|
||||
<Resource Include="Resources\IconGrasscutter.ico" />
|
||||
<Resource Include="Resources\IconGrasscutter.png" />
|
||||
<Resource Include="Resources\ImgHome.jpg" />
|
||||
<Resource Include="Resources\ImgSupport.png" />
|
||||
<Resource Include="Resources\Permissions.txt" />
|
||||
<Resource Include="Resources\ru-ru\ArtifactSets.txt" />
|
||||
<Resource Include="Resources\ru-ru\ArtifactMainAttribution.txt" />
|
||||
<Resource Include="Resources\ru-ru\ArtifactSubAttribution.txt" />
|
||||
<Resource Include="Resources\ru-ru\CustomCommands.txt" />
|
||||
<Resource Include="Resources\ru-ru\GachaBennerPrefab.txt" />
|
||||
<Resource Include="Resources\zh-cn\ArtifactSets.txt" />
|
||||
<Resource Include="Resources\zh-cn\ArtifactMainAttribution.txt" />
|
||||
<Resource Include="Resources\zh-cn\ArtifactSubAttribution.txt" />
|
||||
<Resource Include="Resources\zh-cn\CustomCommands.txt" />
|
||||
<Resource Include="Resources\zh-cn\GachaBennerPrefab.txt" />
|
||||
<Resource Include="Resources\zh-cn\Items.txt" />
|
||||
<Resource Include="Resources\zh-cn\Monsters.txt" />
|
||||
<Resource Include="Resources\zh-cn\Quests.txt" />
|
||||
<Resource Include="Resources\zh-cn\Scenes.txt" />
|
||||
<Resource Include="Resources\zh-tw\ArtifactSets.txt" />
|
||||
<Resource Include="Resources\zh-tw\ArtifactMainAttribution.txt" />
|
||||
<Resource Include="Resources\zh-tw\ArtifactSubAttribution.txt" />
|
||||
<Resource Include="Resources\zh-tw\CustomCommands.txt" />
|
||||
<Resource Include="Resources\zh-tw\GachaBennerPrefab.txt" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Resource Include="Resources\zh-tw\Items.txt" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Resource Include="Resources\zh-tw\Monsters.txt" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Resource Include="Resources\zh-tw\Scenes.txt" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Resource Include="Resources\zh-tw\Dungeons.txt" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Resource Include="Resources\zh-tw\Quests.txt" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Resource Include="Resources\ru-ru\Items.txt" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Resource Include="Resources\ru-ru\Monsters.txt" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Resource Include="Resources\ru-ru\Scenes.txt" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Resource Include="Resources\ru-ru\Dungeons.txt" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Resource Include="Resources\ru-ru\Quests.txt" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Resource Include="Resources\en-us\Items.txt" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Resource Include="Resources\en-us\Monsters.txt" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Resource Include="Resources\en-us\Scenes.txt" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Resource Include="Resources\en-us\Dungeons.txt" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Resource Include="Resources\en-us\Quests.txt" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Resources\Colors.json" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Resource Include="Resources\ru-ru\Avatars.txt" />
|
||||
<Resource Include="Resources\ru-ru\Weapons.txt" />
|
||||
<Resource Include="Resources\en-us\Avatars.txt" />
|
||||
<Resource Include="Resources\en-us\Weapons.txt" />
|
||||
<Content Include="Resources\MyLanguage.java" />
|
||||
<Content Include="Resources\MyTools.java" />
|
||||
<Resource Include="Resources\zh-tw\Avatars.txt" />
|
||||
<Resource Include="Resources\zh-tw\Weapons.txt" />
|
||||
<Resource Include="Resources\zh-cn\Avatars.txt" />
|
||||
<Resource Include="Resources\zh-cn\Relics.txt" />
|
||||
<Resource Include="Resources\zh-cn\Weapons.txt" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||
<PropertyGroup>
|
||||
<ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('..\packages\Costura.Fody.5.7.0\build\Costura.Fody.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Costura.Fody.5.7.0\build\Costura.Fody.props'))" />
|
||||
<Error Condition="!Exists('..\packages\Costura.Fody.5.7.0\build\Costura.Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Costura.Fody.5.7.0\build\Costura.Fody.targets'))" />
|
||||
<Error Condition="!Exists('..\packages\Fody.6.6.1\build\Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Fody.6.6.1\build\Fody.targets'))" />
|
||||
<Error Condition="!Exists('..\packages\Resource.Embedder.2.2.0\build\Resource.Embedder.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Resource.Embedder.2.2.0\build\Resource.Embedder.props'))" />
|
||||
<Error Condition="!Exists('..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets'))" />
|
||||
</Target>
|
||||
<Import Project="..\packages\Costura.Fody.5.7.0\build\Costura.Fody.targets" Condition="Exists('..\packages\Costura.Fody.5.7.0\build\Costura.Fody.targets')" />
|
||||
<Import Project="..\packages\Fody.6.6.1\build\Fody.targets" Condition="Exists('..\packages\Fody.6.6.1\build\Fody.targets')" />
|
||||
<Import Project="..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets" Condition="Exists('..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets')" />
|
||||
</Project>
|
26
Source/GrasscutterTools/GrasscutterTools.sln
Normal file
@@ -0,0 +1,26 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.3.32819.101
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GrasscutterTools", "GrasscutterTools.csproj", "{5E0D32CF-AF0D-4D51-B477-5131E2C87002}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{5E0D32CF-AF0D-4D51-B477-5131E2C87002}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{5E0D32CF-AF0D-4D51-B477-5131E2C87002}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{5E0D32CF-AF0D-4D51-B477-5131E2C87002}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{5E0D32CF-AF0D-4D51-B477-5131E2C87002}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
RESX_MoveToResources = {"Items":[{"Extensions":".cs,.vb","Patterns":"$Namespace.$File.$Key|$File.$Key|StringResourceKey.$Key|$Namespace.StringResourceKey.$Key|nameof($File.$Key), ResourceType = typeof($File)|ErrorMessageResourceType = typeof($File), ErrorMessageResourceName = nameof($File.$Key)"},{"Extensions":".cshtml,.vbhtml","Patterns":"@$Namespace.$File.$Key|@$File.$Key|@StringResourceKey.$Key|@$Namespace.StringResourceKey.$Key"},{"Extensions":".cpp,.c,.hxx,.h","Patterns":"$File::$Key"},{"Extensions":".aspx,.ascx","Patterns":"<%$ Resources:$File,$Key %>|<%= $File.$Key %>|<%= $Namespace.$File.$Key %>"},{"Extensions":".xaml","Patterns":"\"{x:Static p:$File.$Key}\""},{"Extensions":".ts","Patterns":"resources.$Key"},{"Extensions":".html","Patterns":"{{ resources.$Key }}"}]}
|
||||
SolutionGuid = {77A77EB7-D47B-4EEE-934C-A820C8744334}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
11
Source/GrasscutterTools/Interfaces/IPageCommand.cs
Normal file
@@ -0,0 +1,11 @@
|
||||
using System;
|
||||
|
||||
using GrasscutterTools.Events;
|
||||
|
||||
namespace GrasscutterTools.Interfaces
|
||||
{
|
||||
public interface IPageCommand
|
||||
{
|
||||
event EventHandler<CommandGeneratedEventArgs> CommandGenerated;
|
||||
}
|
||||
}
|
31
Source/GrasscutterTools/Interfaces/IPageListProvider.cs
Normal file
@@ -0,0 +1,31 @@
|
||||
using GrasscutterTools.Models;
|
||||
|
||||
namespace GrasscutterTools.Interfaces
|
||||
{
|
||||
/// <summary>
|
||||
/// 带列表的页面接口
|
||||
/// </summary>
|
||||
public interface IPageListProvider
|
||||
{
|
||||
/// <summary>
|
||||
/// 列表项选中时触发
|
||||
/// </summary>
|
||||
/// <param name="item">列表项</param>
|
||||
void OnListItemSelected(GameItem item);
|
||||
|
||||
/// <summary>
|
||||
/// 列表源
|
||||
/// </summary>
|
||||
GameItems ListSource { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否可以分组
|
||||
/// </summary>
|
||||
bool CanGroup { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 类别
|
||||
/// </summary>
|
||||
string[] Categories { get; }
|
||||
}
|
||||
}
|
16
Source/GrasscutterTools/Models/GameItem.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
namespace GrasscutterTools.Models
|
||||
{
|
||||
public class GameItem
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
public string Name { get; set; }
|
||||
|
||||
public string Category { get; set; }
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return $"{Id} : {Name}";
|
||||
}
|
||||
}
|
||||
}
|
35
Source/GrasscutterTools/Models/GameItems.cs
Normal file
@@ -0,0 +1,35 @@
|
||||
using System;
|
||||
using System.Collections.ObjectModel;
|
||||
|
||||
namespace GrasscutterTools.Models
|
||||
{
|
||||
public class GameItems : Collection<GameItem>
|
||||
{
|
||||
public GameItems(string sources)
|
||||
{
|
||||
var lines = sources.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
var category = string.Empty;
|
||||
foreach (var line in lines)
|
||||
{
|
||||
if (line.StartsWith("//"))
|
||||
{
|
||||
category = line.Substring(2).Trim().Replace('_', ' ').ToLowerInvariant();
|
||||
category = char.ToUpperInvariant(category[0]) + category.Substring(1);
|
||||
}
|
||||
else
|
||||
{
|
||||
var sp = line.IndexOf(':');
|
||||
if (sp >= 0)
|
||||
{
|
||||
Items.Add(new GameItem
|
||||
{
|
||||
Id = int.Parse(line.Substring(0, sp).Trim()),
|
||||
Name = line.Substring(sp + 1).Trim(),
|
||||
Category = category
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,99 +0,0 @@
|
||||
/**
|
||||
* Grasscutter Tools
|
||||
* Copyright (C) 2022 jie65535
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published
|
||||
* by the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
**/
|
||||
using System;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace GrasscutterTools
|
||||
{
|
||||
internal static class MultiLanguage
|
||||
{
|
||||
public static string DefaultLanguage = "zh-CN";
|
||||
|
||||
public static void SetDefaultLanguage(string lang)
|
||||
{
|
||||
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(lang);
|
||||
DefaultLanguage = lang;
|
||||
Properties.Settings.Default.DefaultLanguage = lang;
|
||||
Properties.Settings.Default.Save();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 加载语言
|
||||
/// </summary>
|
||||
/// <param name="form">加载语言的窗口</param>
|
||||
/// <param name="formType">窗口的类型</param>
|
||||
public static void LoadLanguage(Form form, Type formType)
|
||||
{
|
||||
if (form != null)
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(formType);
|
||||
resources.ApplyResources(form, "$this");
|
||||
Loading(form, resources);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 加载语言
|
||||
/// </summary>
|
||||
/// <param name="control">控件</param>
|
||||
/// <param name="resources">语言资源</param>
|
||||
private static void Loading(Control control, System.ComponentModel.ComponentResourceManager resources)
|
||||
{
|
||||
if (control is MenuStrip strip)
|
||||
{
|
||||
//将资源与控件对应
|
||||
resources.ApplyResources(control, control.Name);
|
||||
if (strip.Items.Count > 0)
|
||||
{
|
||||
foreach (ToolStripMenuItem c in strip.Items)
|
||||
{
|
||||
//遍历菜单
|
||||
Loading(c, resources);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach (Control c in control.Controls)
|
||||
{
|
||||
resources.ApplyResources(c, c.Name);
|
||||
Loading(c, resources);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 遍历菜单
|
||||
/// </summary>
|
||||
/// <param name="item">菜单项</param>
|
||||
/// <param name="resources">语言资源</param>
|
||||
private static void Loading(ToolStripMenuItem item, System.ComponentModel.ComponentResourceManager resources)
|
||||
{
|
||||
if (item is ToolStripMenuItem tsmi)
|
||||
{
|
||||
resources.ApplyResources(item, item.Name);
|
||||
if (tsmi.DropDownItems.Count > 0)
|
||||
{
|
||||
foreach (ToolStripMenuItem c in tsmi.DropDownItems)
|
||||
{
|
||||
Loading(c, resources);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -27,10 +27,12 @@ namespace GrasscutterTools.OpenCommand
|
||||
{
|
||||
public class OpenCommandAPI
|
||||
{
|
||||
public OpenCommandAPI(string host)
|
||||
public OpenCommandAPI(string host, string token = "")
|
||||
{
|
||||
Host = host;
|
||||
API = host + "/opencommand/api";
|
||||
Token = token;
|
||||
CanInvoke = !string.IsNullOrEmpty(token);
|
||||
}
|
||||
|
||||
public string Host { get; }
|
||||
|
185
Source/GrasscutterTools/Pages/PageGive.xaml
Normal file
@@ -0,0 +1,185 @@
|
||||
<Page
|
||||
x:Class="GrasscutterTools.Pages.PageGive"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:local="clr-namespace:GrasscutterTools.Pages"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
Title="PageGive"
|
||||
d:Background="{StaticResource NormalBorderBrush}"
|
||||
d:DesignHeight="420"
|
||||
d:DesignWidth="490"
|
||||
mc:Ignorable="d">
|
||||
|
||||
<Grid Margin="8">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="auto" />
|
||||
<RowDefinition Height="auto" />
|
||||
<RowDefinition />
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<!-- 获取角色 -->
|
||||
<GroupBox
|
||||
Grid.Row="0"
|
||||
Padding="4"
|
||||
Header="Avatar">
|
||||
<DockPanel>
|
||||
<!-- 获取所有角色 -->
|
||||
<Button
|
||||
Padding="8,4"
|
||||
HorizontalAlignment="Right"
|
||||
VerticalAlignment="Center">
|
||||
All Avatars
|
||||
</Button>
|
||||
|
||||
<!-- 角色等级 -->
|
||||
<Label Margin="8,0,0,0" VerticalAlignment="Center">Level:</Label>
|
||||
<TextBox
|
||||
Width="30"
|
||||
Margin="4,0,0,0"
|
||||
VerticalAlignment="Center">
|
||||
90
|
||||
</TextBox>
|
||||
|
||||
<!-- 角色命座 -->
|
||||
<Label Margin="8,0,0,0" VerticalAlignment="Center">Constellation:</Label>
|
||||
<TextBox
|
||||
Width="30"
|
||||
Margin="4,0,0,0"
|
||||
VerticalAlignment="Center">
|
||||
5
|
||||
</TextBox>
|
||||
|
||||
<!-- 角色下拉框 -->
|
||||
<ComboBox
|
||||
x:Name="CmbAvatar"
|
||||
Margin="8,0,0,0"
|
||||
VerticalAlignment="Center"
|
||||
IsEditable="True" />
|
||||
</DockPanel>
|
||||
</GroupBox>
|
||||
|
||||
<!-- 获取武器 -->
|
||||
<GroupBox
|
||||
Grid.Row="1"
|
||||
Margin="0,4,0,0"
|
||||
Padding="4"
|
||||
Header="Weapon">
|
||||
<DockPanel>
|
||||
<!-- 获取所有武器 -->
|
||||
<Button
|
||||
Padding="8,4"
|
||||
HorizontalAlignment="Right"
|
||||
VerticalAlignment="Center">
|
||||
All Weapons
|
||||
</Button>
|
||||
|
||||
<!-- 武器等级 -->
|
||||
<Label Margin="8,0,0,0" VerticalAlignment="Center">Level:</Label>
|
||||
<TextBox
|
||||
Width="30"
|
||||
Margin="4,0,0,0"
|
||||
VerticalAlignment="Center">
|
||||
90
|
||||
</TextBox>
|
||||
|
||||
<!-- 精练等级 -->
|
||||
<Label Margin="8,0,0,0" VerticalAlignment="Center">Refinement:</Label>
|
||||
<TextBox
|
||||
Width="30"
|
||||
Margin="4,0,0,0"
|
||||
VerticalAlignment="Center">
|
||||
5
|
||||
</TextBox>
|
||||
|
||||
<!-- 武器下拉框 -->
|
||||
<ComboBox
|
||||
x:Name="CmbWeapon"
|
||||
Margin="8,0,0,0"
|
||||
VerticalAlignment="Center" />
|
||||
</DockPanel>
|
||||
</GroupBox>
|
||||
|
||||
<!-- 获取材料物品 -->
|
||||
<GroupBox
|
||||
Grid.Row="2"
|
||||
Margin="0,4,0,0"
|
||||
Padding="4"
|
||||
Header="Item">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="auto" />
|
||||
<RowDefinition />
|
||||
</Grid.RowDefinitions>
|
||||
<StackPanel
|
||||
Grid.Row="0"
|
||||
HorizontalAlignment="Left"
|
||||
Orientation="Horizontal">
|
||||
<!-- 获取所有材料 -->
|
||||
<Button
|
||||
Padding="8,4"
|
||||
HorizontalAlignment="Right"
|
||||
VerticalAlignment="Center">
|
||||
All Mats
|
||||
</Button>
|
||||
|
||||
<!-- 物品数量 -->
|
||||
<Label Margin="8,0,0,0" VerticalAlignment="Center">Amount:</Label>
|
||||
<TextBox
|
||||
Width="50"
|
||||
Margin="4,0,0,0"
|
||||
VerticalAlignment="Center">
|
||||
99
|
||||
</TextBox>
|
||||
|
||||
<!-- 物品ID -->
|
||||
<Label Margin="8,0,0,0" VerticalAlignment="Center">Id:</Label>
|
||||
<TextBox
|
||||
Width="50"
|
||||
Margin="4,0,0,0"
|
||||
VerticalAlignment="Center" />
|
||||
</StackPanel>
|
||||
|
||||
<!-- 操作按钮 -->
|
||||
<StackPanel
|
||||
Grid.Row="0"
|
||||
HorizontalAlignment="Right"
|
||||
Orientation="Horizontal">
|
||||
<!-- 添加记录 -->
|
||||
<Button
|
||||
Padding="8,4"
|
||||
VerticalAlignment="Center"
|
||||
IsEnabled="False">
|
||||
√ Record
|
||||
</Button>
|
||||
<!-- 删除记录 -->
|
||||
<Button
|
||||
Margin="4,0,0,0"
|
||||
Padding="8,4"
|
||||
VerticalAlignment="Center"
|
||||
IsEnabled="False">
|
||||
× Delete
|
||||
</Button>
|
||||
</StackPanel>
|
||||
|
||||
|
||||
<Label
|
||||
Grid.Row="1"
|
||||
Margin="4"
|
||||
HorizontalAlignment="Left"
|
||||
VerticalAlignment="Top">
|
||||
Records:
|
||||
</Label>
|
||||
<Label
|
||||
Grid.Row="1"
|
||||
Margin="4"
|
||||
HorizontalAlignment="Right"
|
||||
VerticalAlignment="Bottom"
|
||||
Cursor="Hand"
|
||||
Foreground="OrangeRed">
|
||||
× Clear
|
||||
</Label>
|
||||
</Grid>
|
||||
</GroupBox>
|
||||
</Grid>
|
||||
</Page>
|
53
Source/GrasscutterTools/Pages/PageGive.xaml.cs
Normal file
@@ -0,0 +1,53 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Data;
|
||||
using System.Windows.Documents;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Imaging;
|
||||
using System.Windows.Navigation;
|
||||
using System.Windows.Shapes;
|
||||
|
||||
using GrasscutterTools.Events;
|
||||
using GrasscutterTools.Game;
|
||||
using GrasscutterTools.Interfaces;
|
||||
using GrasscutterTools.Models;
|
||||
|
||||
namespace GrasscutterTools.Pages
|
||||
{
|
||||
/// <summary>
|
||||
/// PageGive.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class PageGive : Page, IPageListProvider, IPageCommand
|
||||
{
|
||||
public PageGive()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
ListSource = new GameItems(Properties.Resources.Items);
|
||||
Categories = ListSource.Select(it => it.Category).Distinct().ToArray();
|
||||
OnCommandGenerated("");
|
||||
}
|
||||
|
||||
public GameItems ListSource { get; private set; }
|
||||
|
||||
public bool CanGroup => true;
|
||||
|
||||
public string[] Categories { get; private set; }
|
||||
|
||||
public event EventHandler<CommandGeneratedEventArgs> CommandGenerated;
|
||||
private void OnCommandGenerated(string command)
|
||||
=> CommandGenerated?.Invoke(this, new CommandGeneratedEventArgs(command));
|
||||
|
||||
public void OnListItemSelected(GameItem item)
|
||||
{
|
||||
//LblTest.Content = item;
|
||||
}
|
||||
}
|
||||
}
|
25
Source/GrasscutterTools/Pages/PageHome.xaml
Normal file
@@ -0,0 +1,25 @@
|
||||
<Page
|
||||
x:Class="GrasscutterTools.Pages.PageHome"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:local="clr-namespace:GrasscutterTools.Pages"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
Title="PageHome"
|
||||
d:Background="{StaticResource NormalBorderBrush}"
|
||||
d:DesignHeight="420"
|
||||
d:DesignWidth="490"
|
||||
mc:Ignorable="d">
|
||||
|
||||
<Grid>
|
||||
<Image Source="/Resources/ImgHome.jpg" />
|
||||
<Label
|
||||
x:Name="LblWelcome"
|
||||
Margin="0,16,0,0"
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Top"
|
||||
FontSize="20">
|
||||
Welcome to GrasscutterTools
|
||||
</Label>
|
||||
</Grid>
|
||||
</Page>
|
28
Source/GrasscutterTools/Pages/PageHome.xaml.cs
Normal file
@@ -0,0 +1,28 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Data;
|
||||
using System.Windows.Documents;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Imaging;
|
||||
using System.Windows.Navigation;
|
||||
using System.Windows.Shapes;
|
||||
|
||||
namespace GrasscutterTools.Pages
|
||||
{
|
||||
/// <summary>
|
||||
/// PageHome.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class PageHome : Page
|
||||
{
|
||||
public PageHome()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
24
Source/GrasscutterTools/Pages/PageTools.xaml
Normal file
@@ -0,0 +1,24 @@
|
||||
<Page
|
||||
x:Class="GrasscutterTools.Pages.PageTools"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:local="clr-namespace:GrasscutterTools.Pages"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
Title="PageTools"
|
||||
d:Background="{StaticResource NormalBorderBrush}"
|
||||
d:DesignHeight="420"
|
||||
d:DesignWidth="490"
|
||||
mc:Ignorable="d">
|
||||
|
||||
<Grid>
|
||||
|
||||
<Button
|
||||
x:Name="BtnIdMergeTool"
|
||||
Padding="16,8"
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Center"
|
||||
Click="BtnIdMergeTool_Click"
|
||||
Content="Id Merge Tool" />
|
||||
</Grid>
|
||||
</Page>
|
71
Source/GrasscutterTools/Pages/PageTools.xaml.cs
Normal file
@@ -0,0 +1,71 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
|
||||
using Microsoft.Win32;
|
||||
|
||||
namespace GrasscutterTools.Pages
|
||||
{
|
||||
/// <summary>
|
||||
/// PageHome.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class PageTools : Page
|
||||
{
|
||||
public PageTools()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void BtnIdMergeTool_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var src = new OpenFileDialog
|
||||
{
|
||||
Title = "请选择原文件",
|
||||
Multiselect = false,
|
||||
};
|
||||
var dest = new OpenFileDialog
|
||||
{
|
||||
Title = "请选择目标文件",
|
||||
Multiselect = false,
|
||||
};
|
||||
|
||||
if (src.ShowDialog() == true && dest.ShowDialog() == true)
|
||||
{
|
||||
var srcLines = File.ReadAllLines(src.FileName);
|
||||
var srcDic = new Dictionary<string, string>(srcLines.Length);
|
||||
foreach (var line in srcLines)
|
||||
{
|
||||
var sp = line.IndexOf(':');
|
||||
if (sp > 0)
|
||||
{
|
||||
var value = line.Substring(sp + 1).Trim();
|
||||
if (!value.StartsWith("[N/A]"))
|
||||
srcDic[line.Substring(0, sp).Trim()] = line.Substring(sp+1).Trim();
|
||||
}
|
||||
}
|
||||
|
||||
var destLines = File.ReadAllLines(dest.FileName);
|
||||
using (var outStream = File.Create(dest.FileName))
|
||||
using (var outTxtStream = new StreamWriter(outStream))
|
||||
{
|
||||
foreach (var line in destLines)
|
||||
{
|
||||
var sp = line.IndexOf(':');
|
||||
if (sp == -1)
|
||||
{
|
||||
outTxtStream.WriteLine(line);
|
||||
}
|
||||
else
|
||||
{
|
||||
var key = line.Substring(0, sp).Trim();
|
||||
if (!srcDic.TryGetValue(key, out var value))
|
||||
value = line.Substring(sp + 1).Trim();
|
||||
outTxtStream.WriteLine($"{key}:{value}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,92 +0,0 @@
|
||||
/**
|
||||
* Grasscutter Tools
|
||||
* Copyright (C) 2022 jie65535
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published
|
||||
* by the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
**/
|
||||
using System;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Windows.Forms;
|
||||
|
||||
using GrasscutterTools.Properties;
|
||||
|
||||
namespace GrasscutterTools
|
||||
{
|
||||
internal static class Program
|
||||
{
|
||||
/// <summary>
|
||||
/// 应用程序的主入口点。
|
||||
/// </summary>
|
||||
[STAThread]
|
||||
private static void Main()
|
||||
{
|
||||
Application.EnableVisualStyles();
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
|
||||
//设置应用程序处理异常方式:ThreadException处理
|
||||
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
|
||||
//处理线程异常
|
||||
Application.ThreadException += Application_ThreadException;
|
||||
//处理非UI线程异常
|
||||
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
|
||||
|
||||
Application.Run(new FormMain());
|
||||
}
|
||||
|
||||
#region - 全局异常处理 -
|
||||
|
||||
private static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
|
||||
{
|
||||
string str = GetExceptionMsg(e.Exception, e.ToString());
|
||||
MessageBox.Show(str, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
|
||||
private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
|
||||
{
|
||||
string str = GetExceptionMsg(e.ExceptionObject as Exception, e.ToString());
|
||||
MessageBox.Show(str, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 生成自定义异常消息
|
||||
/// </summary>
|
||||
/// <param name="ex">异常对象</param>
|
||||
/// <param name="backStr">备用异常消息:当ex为null时有效</param>
|
||||
/// <returns>异常字符串文本</returns>
|
||||
private static string GetExceptionMsg(Exception ex, string backStr)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.AppendLine("****************************异常文本****************************");
|
||||
sb.AppendLine("【出现时间】:" + DateTime.Now.ToString());
|
||||
if (ex != null)
|
||||
{
|
||||
sb.AppendLine("【异常类型】:" + ex.GetType().Name);
|
||||
sb.AppendLine("【异常信息】:" + ex.Message);
|
||||
#if DEBUG
|
||||
sb.AppendLine("【堆栈调用】:" + ex.StackTrace);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.AppendLine("【未处理异常】:" + backStr);
|
||||
}
|
||||
sb.AppendLine("***************************************************************");
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
#endregion - 全局异常处理 -
|
||||
}
|
||||
}
|
@@ -1,11 +1,13 @@
|
||||
using System.Reflection;
|
||||
using System.Resources;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Windows;
|
||||
|
||||
// 有关程序集的一般信息由以下
|
||||
// 控制。更改这些特性值可修改
|
||||
// 与程序集关联的信息。
|
||||
[assembly: AssemblyTitle("GrasscutterTools")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyDescription("Grasscutter Command Generator")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("GrasscutterTools")]
|
||||
@@ -18,10 +20,27 @@ using System.Runtime.InteropServices;
|
||||
//请将此类型的 ComVisible 特性设置为 true。
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
|
||||
[assembly: Guid("b26333ff-5560-4cba-af3c-4b80db6f8025")]
|
||||
//若要开始生成可本地化的应用程序,请设置
|
||||
//.csproj 文件中的 <UICulture>CultureYouAreCodingWith</UICulture>
|
||||
//例如,如果您在源文件中使用的是美国英语,
|
||||
//使用的是美国英语,请将 <UICulture> 设置为 en-US。 然后取消
|
||||
//对以下 NeutralResourceLanguage 特性的注释。 更新
|
||||
//以下行中的“en-US”以匹配项目文件中的 UICulture 设置。
|
||||
|
||||
// 程序集的版本信息由下列四个值组成:
|
||||
[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
|
||||
|
||||
|
||||
[assembly: ThemeInfo(
|
||||
ResourceDictionaryLocation.None, //主题特定资源词典所处位置
|
||||
//(未在页面中找到资源时使用,
|
||||
//或应用程序资源字典中找到时使用)
|
||||
ResourceDictionaryLocation.SourceAssembly //常规资源词典所处位置
|
||||
//(未在页面中找到资源时使用,
|
||||
//、应用程序或任何主题专用资源字典中找到时使用)
|
||||
)]
|
||||
|
||||
|
||||
// 程序集的版本信息由下列四个值组成:
|
||||
//
|
||||
// 主版本
|
||||
// 次版本
|
||||
@@ -31,5 +50,5 @@ using System.Runtime.InteropServices;
|
||||
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
|
||||
//通过使用 "*",如下所示:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.2.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0")]
|
||||
[assembly: AssemblyVersion("2.0.0")]
|
||||
[assembly: AssemblyFileVersion("2.0.0")]
|
||||
|
1560
Source/GrasscutterTools/Properties/Resources.Designer.cs
generated
@@ -118,127 +118,58 @@
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="Animal" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-cn\Animal.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="Artifact" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-cn\Artifact.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="ArtifactCat" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-cn\ArtifactCat.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="ArtifactMainAttribution" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-cn\ArtifactMainAttribution.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
<value>..\Resources\en-us\ArtifactMainAttribution.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;gb2312</value>
|
||||
</data>
|
||||
<data name="ArtifactSets" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\en-us\ArtifactSets.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="ArtifactSubAttribution" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-cn\ArtifactSubAttribution.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="AskConfirmDeletion" xml:space="preserve">
|
||||
<value>确认删除?</value>
|
||||
</data>
|
||||
<data name="Avatar" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-cn\Avatar.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="AvatarColor" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\AvatarColor.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
<value>..\Resources\en-us\ArtifactSubAttribution.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;gb2312</value>
|
||||
</data>
|
||||
<data name="AvatarStats" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-cn\AvatarStats.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>..\Resources\en-us\AvatarStats.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="BrowserOpenFailedTip" xml:space="preserve">
|
||||
<value>浏览器打开失败,你可以通过以下链接手动访问:</value>
|
||||
</data>
|
||||
<data name="ClimateType" xml:space="preserve">
|
||||
<value>无,晴天,多云,雨天,雷暴,雪天,雾天</value>
|
||||
</data>
|
||||
<data name="CodeResendTip" xml:space="preserve">
|
||||
<value>{0} 秒后可重发</value>
|
||||
</data>
|
||||
<data name="CodeSending" xml:space="preserve">
|
||||
<value>发送中...</value>
|
||||
</data>
|
||||
<data name="CommandContentCannotBeEmpty" xml:space="preserve">
|
||||
<value>命令内容不能为空</value>
|
||||
</data>
|
||||
<data name="CommandNotFound" xml:space="preserve">
|
||||
<value>未找到该命令</value>
|
||||
</data>
|
||||
<data name="CommandTagCannotBeEmpty" xml:space="preserve">
|
||||
<value>命令标签不能为空</value>
|
||||
</data>
|
||||
<data name="ConnectedTip" xml:space="preserve">
|
||||
<value>现在你可以远程执行命令了哦!</value>
|
||||
<data name="Colors" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Colors.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="CustomCommands" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-cn\CustomCommands.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
<value>..\Resources\en-us\CustomCommands.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;gb2312</value>
|
||||
</data>
|
||||
<data name="Error" xml:space="preserve">
|
||||
<value>错误</value>
|
||||
<data name="Dungeons" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\en-us\Dungeons.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="GachaBennerPrefab" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-cn\GachaBennerPrefab.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
<value>..\Resources\en-us\GachaBennerPrefab.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="Help" xml:space="preserve">
|
||||
<value>帮助</value>
|
||||
<data name="GrasscutterTools" xml:space="preserve">
|
||||
<value>GrasscutterTools</value>
|
||||
</data>
|
||||
<data name="IconGrasscutter" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\IconGrasscutter.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="ImgGrasscutter" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\IconGrasscutter.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="ImgHome" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\ImgHome.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="ImgIconGrasscutter" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\IconGrasscutter.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="ImgSupport" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\ImgSupport.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="Item" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-cn\Item.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
<data name="Items" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\en-us\Items.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="Monster" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-cn\Monster.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="NPC" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-cn\NPC.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="OpenCommandHelp" xml:space="preserve">
|
||||
<value>1. 填写正确的UID\n2. 向玩家发送验证码\n3. 输入正确的验证码\n4. 连接\n5. 享受</value>
|
||||
</data>
|
||||
<data name="Ornament" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-cn\Ornament.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="PermissionCannotBeEmpty" xml:space="preserve">
|
||||
<value>要设置的权限不能为空!</value>
|
||||
<data name="Monsters" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\en-us\Monsters.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;gb2312</value>
|
||||
</data>
|
||||
<data name="Permissions" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Permissions.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="Quest" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-cn\Quest.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
<data name="Quests" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\en-us\Quests.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="RequireOpenCommandTip" xml:space="preserve">
|
||||
<value>请先连接到支持[OpenCommand]的服务器</value>
|
||||
</data>
|
||||
<data name="Scene" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-cn\Scene.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="SettingLoadError" xml:space="preserve">
|
||||
<value>加载设置时异常:</value>
|
||||
</data>
|
||||
<data name="SettingSaveError" xml:space="preserve">
|
||||
<value>保存设置时异常:</value>
|
||||
</data>
|
||||
<data name="Tips" xml:space="preserve">
|
||||
<value>提示</value>
|
||||
</data>
|
||||
<data name="UsernameCannotBeEmpty" xml:space="preserve">
|
||||
<value>用户名不能为空!</value>
|
||||
</data>
|
||||
<data name="Weapon" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-cn\Weapon.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="WeaponColor" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\WeaponColor.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
<data name="Scenes" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\en-us\Scenes.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
</root>
|
@@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
@@ -118,124 +118,58 @@
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="Animal" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\en-us\Animal.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="Artifact" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\en-us\Artifact.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="ArtifactCat" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\en-us\ArtifactCat.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="ArtifactMainAttribution" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\en-us\ArtifactMainAttribution.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
<value>..\Resources\ru-ru\ArtifactMainAttribution.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;gb2312</value>
|
||||
</data>
|
||||
<data name="ArtifactSets" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\ru-ru\ArtifactSets.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="ArtifactSubAttribution" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\en-us\ArtifactSubAttribution.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="AskConfirmDeletion" xml:space="preserve">
|
||||
<value>Are you sure you want to delete this command?</value>
|
||||
</data>
|
||||
<data name="Avatar" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\en-us\Avatar.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="AvatarColor" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\AvatarColor.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
<value>..\Resources\ru-ru\ArtifactSubAttribution.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;gb2312</value>
|
||||
</data>
|
||||
<data name="AvatarStats" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\en-us\AvatarStats.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>..\Resources\ru-ru\AvatarStats.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="BrowserOpenFailedTip" xml:space="preserve">
|
||||
<value>The browser failed to open. You can manually access the following address:</value>
|
||||
</data>
|
||||
<data name="ClimateType" xml:space="preserve">
|
||||
<value>None,Sunny,Partly cloudy,Rain,Thunderstorm,Snow,Fog</value>
|
||||
</data>
|
||||
<data name="CodeResendTip" xml:space="preserve">
|
||||
<value>Resend in {0} seconds</value>
|
||||
</data>
|
||||
<data name="CodeSending" xml:space="preserve">
|
||||
<value>sending...</value>
|
||||
</data>
|
||||
<data name="CommandContentCannotBeEmpty" xml:space="preserve">
|
||||
<value>Command cannot be empty</value>
|
||||
</data>
|
||||
<data name="CommandNotFound" xml:space="preserve">
|
||||
<value>Command not found</value>
|
||||
</data>
|
||||
<data name="CommandTagCannotBeEmpty" xml:space="preserve">
|
||||
<value>Command tag cannot be empty</value>
|
||||
</data>
|
||||
<data name="ConnectedTip" xml:space="preserve">
|
||||
<value>Now you can execute commands remotely!</value>
|
||||
<data name="Colors" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Colors.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="CustomCommands" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\en-us\CustomCommands.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
<value>..\Resources\ru-ru\CustomCommands.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;gb2312</value>
|
||||
</data>
|
||||
<data name="Error" xml:space="preserve">
|
||||
<value>Error</value>
|
||||
<data name="Dungeons" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\ru-ru\Dungeons.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="GachaBennerPrefab" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\en-us\GachaBennerPrefab.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
<value>..\Resources\ru-ru\GachaBennerPrefab.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="Help" xml:space="preserve">
|
||||
<value>Help</value>
|
||||
<data name="GrasscutterTools" xml:space="preserve">
|
||||
<value>GrasscutterTools</value>
|
||||
</data>
|
||||
<data name="IconGrasscutter" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\IconGrasscutter.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="ImgIconGrasscutter" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<data name="ImgGrasscutter" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\IconGrasscutter.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="ImgHome" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\ImgHome.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="ImgSupport" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\ImgSupport.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="Item" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\en-us\Item.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
<data name="Items" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\ru-ru\Items.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="Monster" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\en-us\Monster.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="NPC" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\en-us\NPC.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="OpenCommandHelp" xml:space="preserve">
|
||||
<value>1. Fill in the correct uid\n2. Send verification code to player\n3. Enter the correct verification code\n4. Connection\n5. Enjoy</value>
|
||||
</data>
|
||||
<data name="Ornament" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\en-us\Ornament.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="PermissionCannotBeEmpty" xml:space="preserve">
|
||||
<value>Permission cannot be empty!</value>
|
||||
<data name="Monsters" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\ru-ru\Monsters.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;gb2312</value>
|
||||
</data>
|
||||
<data name="Permissions" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Permissions.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="Quest" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\en-us\Quest.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
<data name="Quests" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\ru-ru\Quests.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="RequireOpenCommandTip" xml:space="preserve">
|
||||
<value>Please connect to a server that supports [opencommand] first</value>
|
||||
</data>
|
||||
<data name="Scene" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\en-us\Scene.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="SettingLoadError" xml:space="preserve">
|
||||
<value>Settings load failed:</value>
|
||||
</data>
|
||||
<data name="SettingSaveError" xml:space="preserve">
|
||||
<value>Settings save failed:</value>
|
||||
</data>
|
||||
<data name="Tips" xml:space="preserve">
|
||||
<value>Tips</value>
|
||||
</data>
|
||||
<data name="UsernameCannotBeEmpty" xml:space="preserve">
|
||||
<value>Username cannot be empty!</value>
|
||||
</data>
|
||||
<data name="Weapon" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\en-us\Weapon.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="WeaponColor" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\WeaponColor.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
<data name="Scenes" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\ru-ru\Scenes.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
</root>
|
@@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
@@ -117,35 +117,59 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="BtnSelectRecoursePath.Text" xml:space="preserve">
|
||||
<value>Select</value>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="ArtifactMainAttribution" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-cn\ArtifactMainAttribution.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;gb2312</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="LblLanguage.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>477, 15</value>
|
||||
<data name="ArtifactSets" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-cn\ArtifactSets.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="LblLanguage.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>65, 17</value>
|
||||
<data name="ArtifactSubAttribution" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-cn\ArtifactSubAttribution.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;gb2312</value>
|
||||
</data>
|
||||
<data name="LblLanguage.Text" xml:space="preserve">
|
||||
<value>Language</value>
|
||||
<data name="AvatarStats" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-cn\AvatarStats.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="ChkTopMost.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>80, 21</value>
|
||||
<data name="Colors" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Colors.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="ChkTopMost.Text" xml:space="preserve">
|
||||
<value>TopMost</value>
|
||||
<data name="CustomCommands" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-cn\CustomCommands.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;gb2312</value>
|
||||
</data>
|
||||
<data name="LblResourcesPath.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>294, 17</value>
|
||||
<data name="Dungeons" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-cn\Dungeons.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="LblResourcesPath.Text" xml:space="preserve">
|
||||
<value>Please select a resource directory</value>
|
||||
<data name="GachaBennerPrefab" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-cn\GachaBennerPrefab.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="BtnSearch.Text" xml:space="preserve">
|
||||
<value>Search</value>
|
||||
<data name="GrasscutterTools" xml:space="preserve">
|
||||
<value>GrasscutterTools</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>Text Map Browser</value>
|
||||
<data name="IconGrasscutter" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\IconGrasscutter.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="ImgGrasscutter" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\IconGrasscutter.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="ImgHome" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\ImgHome.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="ImgSupport" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\ImgSupport.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="Items" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-cn\Items.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="Monsters" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-cn\Monsters.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;gb2312</value>
|
||||
</data>
|
||||
<data name="Permissions" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Permissions.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="Quests" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-cn\Quests.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="Scenes" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-cn\Scenes.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
</root>
|
175
Source/GrasscutterTools/Properties/Resources.zh-TW.resx
Normal file
@@ -0,0 +1,175 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="ArtifactMainAttribution" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-tw\ArtifactMainAttribution.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;gb2312</value>
|
||||
</data>
|
||||
<data name="ArtifactSets" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-tw\ArtifactSets.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="ArtifactSubAttribution" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-tw\ArtifactSubAttribution.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;gb2312</value>
|
||||
</data>
|
||||
<data name="AvatarStats" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-tw\AvatarStats.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="Colors" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Colors.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="CustomCommands" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-tw\CustomCommands.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;gb2312</value>
|
||||
</data>
|
||||
<data name="Dungeons" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-tw\Dungeons.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="GachaBennerPrefab" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-tw\GachaBennerPrefab.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="GrasscutterTools" xml:space="preserve">
|
||||
<value>GrasscutterTools</value>
|
||||
</data>
|
||||
<data name="IconGrasscutter" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\IconGrasscutter.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="ImgGrasscutter" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\IconGrasscutter.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="ImgHome" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\ImgHome.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="ImgSupport" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\ImgSupport.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="Items" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-tw\Items.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="Monsters" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-tw\Monsters.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;gb2312</value>
|
||||
</data>
|
||||
<data name="Permissions" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Permissions.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="Quests" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-tw\Quests.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
<data name="Scenes" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\zh-tw\Scenes.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||
</data>
|
||||
</root>
|
114
Source/GrasscutterTools/Properties/Settings.Designer.cs
generated
@@ -1,110 +1,30 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// 此代码由工具生成。
|
||||
// 运行时版本:4.0.30319.42000
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// 对此文件的更改可能会导致不正确的行为,并且如果
|
||||
// 重新生成代码,这些更改将会丢失。
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace GrasscutterTools.Properties {
|
||||
|
||||
|
||||
namespace GrasscutterTools.Properties
|
||||
{
|
||||
|
||||
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.1.0.0")]
|
||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
||||
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
|
||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
|
||||
{
|
||||
|
||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||
|
||||
public static Settings Default {
|
||||
get {
|
||||
|
||||
public static Settings Default
|
||||
{
|
||||
get
|
||||
{
|
||||
return defaultInstance;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool AutoCopy {
|
||||
get {
|
||||
return ((bool)(this["AutoCopy"]));
|
||||
}
|
||||
set {
|
||||
this["AutoCopy"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("10001")]
|
||||
public decimal Uid {
|
||||
get {
|
||||
return ((decimal)(this["Uid"]));
|
||||
}
|
||||
set {
|
||||
this["Uid"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("zh-CN")]
|
||||
public string DefaultLanguage {
|
||||
get {
|
||||
return ((string)(this["DefaultLanguage"]));
|
||||
}
|
||||
set {
|
||||
this["DefaultLanguage"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||
public string ResourcesDirPath {
|
||||
get {
|
||||
return ((string)(this["ResourcesDirPath"]));
|
||||
}
|
||||
set {
|
||||
this["ResourcesDirPath"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("TextMapCHS")]
|
||||
public string TextMapFileName {
|
||||
get {
|
||||
return ((string)(this["TextMapFileName"]));
|
||||
}
|
||||
set {
|
||||
this["TextMapFileName"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("10001")]
|
||||
public decimal RemoteUid {
|
||||
get {
|
||||
return ((decimal)(this["RemoteUid"]));
|
||||
}
|
||||
set {
|
||||
this["RemoteUid"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("https://127.0.0.1")]
|
||||
public string Host {
|
||||
get {
|
||||
return ((string)(this["Host"]));
|
||||
}
|
||||
set {
|
||||
this["Host"] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,27 +1,7 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="GrasscutterTools.Properties" GeneratedClassName="Settings">
|
||||
<Profiles />
|
||||
<Settings>
|
||||
<Setting Name="AutoCopy" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="Uid" Type="System.Decimal" Scope="User">
|
||||
<Value Profile="(Default)">10001</Value>
|
||||
</Setting>
|
||||
<Setting Name="DefaultLanguage" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)">zh-CN</Value>
|
||||
</Setting>
|
||||
<Setting Name="ResourcesDirPath" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="TextMapFileName" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)">TextMapCHS</Value>
|
||||
</Setting>
|
||||
<Setting Name="RemoteUid" Type="System.Decimal" Scope="User">
|
||||
<Value Profile="(Default)">10001</Value>
|
||||
</Setting>
|
||||
<Setting Name="Host" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)">https://127.0.0.1</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
|
||||
<Profiles>
|
||||
<Profile Name="(Default)" />
|
||||
</Profiles>
|
||||
<Settings />
|
||||
</SettingsFile>
|
@@ -1,73 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<assemblyIdentity version="1.0.0.0" name="MyApplication.app" />
|
||||
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
|
||||
<security>
|
||||
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
|
||||
<!-- UAC 清单选项
|
||||
如果想要更改 Windows 用户帐户控制级别,请使用
|
||||
以下节点之一替换 requestedExecutionLevel 节点。
|
||||
|
||||
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
|
||||
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
|
||||
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
|
||||
|
||||
指定 requestedExecutionLevel 元素将禁用文件和注册表虚拟化。
|
||||
如果你的应用程序需要此虚拟化来实现向后兼容性,则移除此
|
||||
元素。
|
||||
-->
|
||||
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
|
||||
</requestedPrivileges>
|
||||
<applicationRequestMinimum>
|
||||
<defaultAssemblyRequest permissionSetReference="Custom" />
|
||||
<PermissionSet class="System.Security.PermissionSet" version="1" Unrestricted="true" ID="Custom" SameSite="site" />
|
||||
</applicationRequestMinimum>
|
||||
</security>
|
||||
</trustInfo>
|
||||
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
||||
<application>
|
||||
<!-- 设计此应用程序与其一起工作且已针对此应用程序进行测试的
|
||||
Windows 版本的列表。取消评论适当的元素,
|
||||
Windows 将自动选择最兼容的环境。 -->
|
||||
<!-- Windows Vista -->
|
||||
<!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />-->
|
||||
<!-- Windows 7 -->
|
||||
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />-->
|
||||
<!-- Windows 8 -->
|
||||
<!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />-->
|
||||
<!-- Windows 8.1 -->
|
||||
<!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />-->
|
||||
<!-- Windows 10 -->
|
||||
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
|
||||
</application>
|
||||
</compatibility>
|
||||
<!-- 指示该应用程序可感知 DPI 且 Windows 在 DPI 较高时将不会对其进行
|
||||
自动缩放。Windows Presentation Foundation (WPF)应用程序自动感知 DPI,无需
|
||||
选择加入。选择加入此设置的 Windows 窗体应用程序(面向 .NET Framework 4.6)还应
|
||||
在其 app.config 中将 "EnableWindowsFormsHighDpiAutoResizing" 设置设置为 "true"。
|
||||
|
||||
将应用程序设为感知长路径。请参阅 https://docs.microsoft.com/windows/win32/fileio/maximum-file-path-limitation -->
|
||||
<!--
|
||||
<application xmlns="urn:schemas-microsoft-com:asm.v3">
|
||||
<windowsSettings>
|
||||
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
|
||||
<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
|
||||
</windowsSettings>
|
||||
</application>
|
||||
-->
|
||||
<!-- 启用 Windows 公共控件和对话框的主题(Windows XP 和更高版本) -->
|
||||
<!--
|
||||
<dependency>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity
|
||||
type="win32"
|
||||
name="Microsoft.Windows.Common-Controls"
|
||||
version="6.0.0.0"
|
||||
processorArchitecture="*"
|
||||
publicKeyToken="6595b64144ccf1df"
|
||||
language="*"
|
||||
/>
|
||||
</dependentAssembly>
|
||||
</dependency>
|
||||
-->
|
||||
</assembly>
|
@@ -1,50 +0,0 @@
|
||||
1001:purple
|
||||
1002:yellow
|
||||
1003:yellow
|
||||
1005:yellow
|
||||
1006:purple
|
||||
1007:yellow
|
||||
1014:purple
|
||||
1015:purple
|
||||
1016:yellow
|
||||
1020:purple
|
||||
1021:purple
|
||||
1022:yellow
|
||||
1023:purple
|
||||
1024:purple
|
||||
1025:purple
|
||||
1026:yellow
|
||||
1027:purple
|
||||
1029:yellow
|
||||
1030:yellow
|
||||
1031:purple
|
||||
1032:purple
|
||||
1033:yellow
|
||||
1034:purple
|
||||
1035:yellow
|
||||
1036:purple
|
||||
1037:yellow
|
||||
1038:yellow
|
||||
1039:purple
|
||||
1041:yellow
|
||||
1042:yellow
|
||||
1043:purple
|
||||
1044:purple
|
||||
1045:purple
|
||||
1046:yellow
|
||||
1047:yellow
|
||||
1048:purple
|
||||
1049:yellow
|
||||
1050:purple
|
||||
1051:yellow
|
||||
1052:yellow
|
||||
1053:purple
|
||||
1054:yellow
|
||||
1055:purple
|
||||
1056:purple
|
||||
1057:yellow
|
||||
1058:yellow
|
||||
1062:blue
|
||||
1063:yellow
|
||||
1064:purple
|
||||
1066:yellow
|
13
Source/GrasscutterTools/Resources/Colors.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"Avatars": {
|
||||
"Blue": [ 1062 ],
|
||||
"Green": [ 1067, 1069 ],
|
||||
"Purple": [ 1001, 1006, 1014, 1015, 1020, 1021, 1023, 1024, 1025, 1027, 1031, 1032, 1034, 1036, 1039, 1043, 1044, 1045, 1048, 1050, 1053, 1055, 1056, 1064, 1068 ],
|
||||
"Yellow": [ 1002, 1003, 1005, 1007, 1016, 1022, 1026, 1029, 1030, 1033, 1035, 1037, 1038, 1041, 1042, 1046, 1047, 1049, 1051, 1052, 1054, 1057, 1058, 1063, 1066 ]
|
||||
},
|
||||
"Weapons": {
|
||||
"Blue": [ 11301, 11302, 11303, 11304, 11305, 11306, 12301, 12302, 12303, 12304, 12305, 12306, 13301, 13302, 13303, 13304, 14301, 14302, 14303, 14304, 14305, 14306, 15301, 15302, 15303, 15304, 15305, 15306 ],
|
||||
"Purple": [ 11401, 11402, 11403, 11404, 11405, 11406, 11407, 11408, 11409, 11410, 11411, 11412, 11413, 11414, 11415, 12401, 12402, 12403, 12404, 12405, 12406, 12407, 12408, 12409, 12410, 12411, 12412, 12414, 12416, 13401, 13402, 13403, 13404, 13405, 13406, 13407, 13408, 13409, 13414, 13415, 13416, 14401, 14402, 14403, 14404, 14405, 14406, 14407, 14408, 14409, 14410, 14411, 14412, 14413, 14414, 14415, 15401, 15402, 15403, 15404, 15405, 15406, 15407, 15408, 15409, 15410, 15411, 15412, 15413, 15414, 15415, 15416 ],
|
||||
"Yellow": [ 11501, 11502, 11503, 11504, 11505, 11506, 11507, 11508, 11509, 11510, 12501, 12502, 12503, 12504, 12505, 12506, 12508, 12509, 12510, 13501, 13502, 13503, 13504, 13505, 13506, 13507, 13509, 14501, 14502, 14503, 14504, 14505, 14506, 14508, 14509, 15501, 15502, 15503, 15504, 15505, 15506, 15507, 15508, 15509, 15511 ]
|
||||
}
|
||||
}
|
463
Source/GrasscutterTools/Resources/MyLanguage.java
Normal file
@@ -0,0 +1,463 @@
|
||||
package emu.grasscutter.utils;
|
||||
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import emu.grasscutter.Grasscutter;
|
||||
import emu.grasscutter.data.GameData;
|
||||
import emu.grasscutter.data.ResourceLoader;
|
||||
import emu.grasscutter.game.player.Player;
|
||||
import it.unimi.dsi.fastutil.longs.Long2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
|
||||
import it.unimi.dsi.fastutil.longs.LongOpenHashSet;
|
||||
import it.unimi.dsi.fastutil.longs.LongSet;
|
||||
import it.unimi.dsi.fastutil.objects.Object2IntMap;
|
||||
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import static emu.grasscutter.config.Configuration.*;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.BufferedOutputStream;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.ObjectInputStream;
|
||||
import java.io.ObjectOutputStream;
|
||||
import java.io.Serializable;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.FileAlreadyExistsException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.StandardOpenOption;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.IntStream;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public final class Language {
|
||||
private static final Map<String, Language> cachedLanguages = new ConcurrentHashMap<>();
|
||||
|
||||
private final JsonObject languageData;
|
||||
private final String languageCode;
|
||||
private final Map<String, String> cachedTranslations = new ConcurrentHashMap<>();
|
||||
|
||||
/**
|
||||
* Creates a language instance from a code.
|
||||
* @param langCode The language code.
|
||||
* @return A language instance.
|
||||
*/
|
||||
public static Language getLanguage(String langCode) {
|
||||
if (cachedLanguages.containsKey(langCode)) {
|
||||
return cachedLanguages.get(langCode);
|
||||
}
|
||||
|
||||
var fallbackLanguageCode = Utils.getLanguageCode(FALLBACK_LANGUAGE);
|
||||
var description = getLanguageFileDescription(langCode, fallbackLanguageCode);
|
||||
var actualLanguageCode = description.getLanguageCode();
|
||||
|
||||
Language languageInst;
|
||||
if (description.getLanguageFile() != null) {
|
||||
languageInst = new Language(description);
|
||||
cachedLanguages.put(actualLanguageCode, languageInst);
|
||||
} else {
|
||||
languageInst = cachedLanguages.get(actualLanguageCode);
|
||||
cachedLanguages.put(langCode, languageInst);
|
||||
}
|
||||
|
||||
return languageInst;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the translated value from the key while substituting arguments.
|
||||
* @param key The key of the translated value to return.
|
||||
* @param args The arguments to substitute.
|
||||
* @return A translated value with arguments substituted.
|
||||
*/
|
||||
public static String translate(String key, Object... args) {
|
||||
String translated = Grasscutter.getLanguage().get(key);
|
||||
|
||||
for (int i = 0; i < args.length; i++) {
|
||||
args[i] = switch (args[i].getClass().getSimpleName()) {
|
||||
case "String" -> args[i];
|
||||
case "TextStrings" -> ((TextStrings) args[i]).get(0).replace("\\\\n", "\\n"); // TODO: Change this to server language
|
||||
default -> args[i].toString();
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
return translated.formatted(args);
|
||||
} catch (Exception exception) {
|
||||
Grasscutter.getLogger().error("Failed to format string: " + key, exception);
|
||||
return translated;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the translated value from the key while substituting arguments.
|
||||
* @param player Target player
|
||||
* @param key The key of the translated value to return.
|
||||
* @param args The arguments to substitute.
|
||||
* @return A translated value with arguments substituted.
|
||||
*/
|
||||
public static String translate(Player player, String key, Object... args) {
|
||||
if (player == null) {
|
||||
return translate(key, args);
|
||||
}
|
||||
|
||||
var langCode = Utils.getLanguageCode(player.getAccount().getLocale());
|
||||
String translated = getLanguage(langCode).get(key);
|
||||
|
||||
for (int i = 0; i < args.length; i++) {
|
||||
args[i] = switch (args[i].getClass().getSimpleName()) {
|
||||
case "String" -> args[i];
|
||||
case "TextStrings" -> ((TextStrings) args[i]).getGC(langCode).replace("\\\\n", "\n"); // Note that we don't unescape \n for server console
|
||||
default -> args[i].toString();
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
return translated.formatted(args);
|
||||
} catch (Exception exception) {
|
||||
Grasscutter.getLogger().error("Failed to format string: " + key, exception);
|
||||
return translated;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* get language code
|
||||
*/
|
||||
public String getLanguageCode() {
|
||||
return languageCode;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads a file and creates a language instance.
|
||||
*/
|
||||
private Language(LanguageStreamDescription description) {
|
||||
@Nullable JsonObject languageData = null;
|
||||
languageCode = description.getLanguageCode();
|
||||
|
||||
try {
|
||||
languageData = JsonUtils.decode(Utils.readFromInputStream(description.getLanguageFile()), JsonObject.class);
|
||||
} catch (Exception exception) {
|
||||
Grasscutter.getLogger().warn("Failed to load language file: " + description.getLanguageCode(), exception);
|
||||
}
|
||||
|
||||
this.languageData = languageData;
|
||||
}
|
||||
|
||||
/**
|
||||
* create a LanguageStreamDescription
|
||||
* @param languageCode The name of the language code.
|
||||
* @param fallbackLanguageCode The name of the fallback language code.
|
||||
*/
|
||||
private static LanguageStreamDescription getLanguageFileDescription(String languageCode, String fallbackLanguageCode) {
|
||||
var fileName = languageCode + ".json";
|
||||
var fallback = fallbackLanguageCode + ".json";
|
||||
|
||||
String actualLanguageCode = languageCode;
|
||||
InputStream file = Grasscutter.class.getResourceAsStream("/languages/" + fileName);
|
||||
|
||||
if (file == null) { // Provided fallback language.
|
||||
Grasscutter.getLogger().warn("Failed to load language file: " + fileName + ", falling back to: " + fallback);
|
||||
actualLanguageCode = fallbackLanguageCode;
|
||||
if (cachedLanguages.containsKey(actualLanguageCode)) {
|
||||
return new LanguageStreamDescription(actualLanguageCode, null);
|
||||
}
|
||||
|
||||
file = Grasscutter.class.getResourceAsStream("/languages/" + fallback);
|
||||
}
|
||||
|
||||
if (file == null) { // Fallback the fallback language.
|
||||
Grasscutter.getLogger().warn("Failed to load language file: " + fallback + ", falling back to: en-US.json");
|
||||
actualLanguageCode = "en-US";
|
||||
if (cachedLanguages.containsKey(actualLanguageCode)) {
|
||||
return new LanguageStreamDescription(actualLanguageCode, null);
|
||||
}
|
||||
|
||||
file = Grasscutter.class.getResourceAsStream("/languages/en-US.json");
|
||||
}
|
||||
|
||||
if (file == null)
|
||||
throw new RuntimeException("Unable to load the primary, fallback, and 'en-US' language files.");
|
||||
|
||||
return new LanguageStreamDescription(actualLanguageCode, file);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value (as a string) from a nested key.
|
||||
* @param key The key to look for.
|
||||
* @return The value (as a string) from a nested key.
|
||||
*/
|
||||
public String get(String key) {
|
||||
if (this.cachedTranslations.containsKey(key)) {
|
||||
return this.cachedTranslations.get(key);
|
||||
}
|
||||
|
||||
String[] keys = key.split("\\.");
|
||||
JsonObject object = this.languageData;
|
||||
|
||||
int index = 0;
|
||||
String valueNotFoundPattern = "This value does not exist. Please report this to the Discord: ";
|
||||
String result = valueNotFoundPattern + key;
|
||||
boolean isValueFound = false;
|
||||
|
||||
while (true) {
|
||||
if (index == keys.length) break;
|
||||
|
||||
String currentKey = keys[index++];
|
||||
if (object.has(currentKey)) {
|
||||
JsonElement element = object.get(currentKey);
|
||||
if (element.isJsonObject())
|
||||
object = element.getAsJsonObject();
|
||||
else {
|
||||
isValueFound = true;
|
||||
result = element.getAsString(); break;
|
||||
}
|
||||
} else break;
|
||||
}
|
||||
|
||||
if (!isValueFound && !languageCode.equals("en-US")) {
|
||||
var englishValue = getLanguage("en-US").get(key);
|
||||
if (!englishValue.contains(valueNotFoundPattern)) {
|
||||
result += "\nhere is english version:\n" + englishValue;
|
||||
}
|
||||
}
|
||||
|
||||
this.cachedTranslations.put(key, result); return result;
|
||||
}
|
||||
|
||||
private static class LanguageStreamDescription {
|
||||
private final String languageCode;
|
||||
private final InputStream languageFile;
|
||||
|
||||
public LanguageStreamDescription(String languageCode, InputStream languageFile) {
|
||||
this.languageCode = languageCode;
|
||||
this.languageFile = languageFile;
|
||||
}
|
||||
|
||||
public String getLanguageCode() {
|
||||
return languageCode;
|
||||
}
|
||||
|
||||
public InputStream getLanguageFile() {
|
||||
return languageFile;
|
||||
}
|
||||
}
|
||||
|
||||
private static final int TEXTMAP_CACHE_VERSION = 0x9CCACE03;
|
||||
@EqualsAndHashCode public static class TextStrings implements Serializable {
|
||||
public static final String[] ARR_LANGUAGES = {"EN", "CHS", "CHT", "JP", "KR", "DE", "ES", "FR", "ID", "PT", "RU", "TH", "VI"};
|
||||
public static final String[] ARR_GC_LANGUAGES = {"en-US", "zh-CN", "zh-TW", "ja-JP", "ko-KR", "en-US", "es-ES", "fr-FR", "en-US", "en-US", "ru-RU", "en-US", "en-US"}; // TODO: Update the placeholder en-US entries if we ever add GC translations for the missing client languages
|
||||
public static final int NUM_LANGUAGES = ARR_LANGUAGES.length;
|
||||
public static final List<String> LIST_LANGUAGES = Arrays.asList(ARR_LANGUAGES);
|
||||
public static final Object2IntMap<String> MAP_LANGUAGES = // Map "EN": 0, "CHS": 1, ..., "VI": 12
|
||||
new Object2IntOpenHashMap<>(
|
||||
IntStream.range(0, ARR_LANGUAGES.length)
|
||||
.boxed()
|
||||
.collect(Collectors.toMap(i -> ARR_LANGUAGES[i], i -> i)));
|
||||
public static final Object2IntMap<String> MAP_GC_LANGUAGES = // Map "en-US": 0, "zh-CN": 1, ...
|
||||
new Object2IntOpenHashMap<>(
|
||||
IntStream.range(0, ARR_GC_LANGUAGES.length)
|
||||
.boxed()
|
||||
.collect(Collectors.toMap(i -> ARR_GC_LANGUAGES[i], i -> i, (i1, i2) -> i1))); // Have to handle duplicates referring back to the first
|
||||
public String[] strings = new String[ARR_LANGUAGES.length];
|
||||
|
||||
public TextStrings() {};
|
||||
|
||||
public TextStrings(String init) {
|
||||
for (int i = 0; i < NUM_LANGUAGES; i++)
|
||||
this.strings[i] = init;
|
||||
};
|
||||
|
||||
public TextStrings(List<String> strings, long key) {
|
||||
// Some hashes don't have strings for some languages :(
|
||||
String nullReplacement = "[N/A] %d".formatted(key);
|
||||
for (int i = 0; i < NUM_LANGUAGES; i++) { // Find first non-null if there is any
|
||||
String s = strings.get(i);
|
||||
if (s != null) {
|
||||
nullReplacement = "[%s] - %s".formatted(ARR_LANGUAGES[i], s);
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < NUM_LANGUAGES; i++) {
|
||||
String s = strings.get(i);
|
||||
if (s != null)
|
||||
this.strings[i] = s;
|
||||
else
|
||||
this.strings[i] = nullReplacement;
|
||||
}
|
||||
}
|
||||
|
||||
public static List<Language> getLanguages() {
|
||||
return Arrays.stream(ARR_GC_LANGUAGES).map(Language::getLanguage).toList();
|
||||
}
|
||||
|
||||
public String get(int languageIndex) {
|
||||
return strings[languageIndex];
|
||||
}
|
||||
|
||||
public String get(String languageCode) {
|
||||
return strings[MAP_LANGUAGES.getOrDefault(languageCode, 0)];
|
||||
}
|
||||
|
||||
public String getGC(String languageCode) {
|
||||
return strings[MAP_GC_LANGUAGES.getOrDefault(languageCode, 0)];
|
||||
}
|
||||
|
||||
public boolean set(String languageCode, String string) {
|
||||
int index = MAP_LANGUAGES.getOrDefault(languageCode, -1);
|
||||
if (index < 0) return false;
|
||||
strings[index] = string;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
private static final Pattern textMapKeyValueRegex = Pattern.compile("\"(\\d+)\": \"(.+)\"");
|
||||
|
||||
private static Long2ObjectMap<String> loadTextMapFile(String language, LongSet nameHashes) {
|
||||
Long2ObjectMap<String> output = new Long2ObjectOpenHashMap<>();
|
||||
try (BufferedReader file = Files.newBufferedReader(getResourcePath("TextMap/TextMap"+language+".json"), StandardCharsets.UTF_8)) {
|
||||
Matcher matcher = textMapKeyValueRegex.matcher("");
|
||||
return new Long2ObjectOpenHashMap<>(
|
||||
file.lines()
|
||||
.sequential()
|
||||
.map(matcher::reset) // Side effects, but it's faster than making a new one
|
||||
.filter(Matcher::find)
|
||||
.filter(m -> nameHashes.contains( Long.parseLong(m.group(1)))) // TODO: Cache this parse somehow
|
||||
.collect(Collectors.toMap(
|
||||
m -> Long.parseLong(m.group(1)),
|
||||
m -> m.group(2).replace("\\\"", "\""))));
|
||||
} catch (Exception e) {
|
||||
Grasscutter.getLogger().error("Error loading textmap: " + language);
|
||||
Grasscutter.getLogger().error(e.toString());
|
||||
}
|
||||
return output;
|
||||
}
|
||||
|
||||
private static Long2ObjectMap<TextStrings> loadTextMapFiles(LongSet nameHashes) {
|
||||
Map<Integer, Long2ObjectMap<String>> mapLanguageMaps = // Separate step to process the textmaps in parallel
|
||||
TextStrings.LIST_LANGUAGES.parallelStream().collect(
|
||||
Collectors.toConcurrentMap(s -> TextStrings.MAP_LANGUAGES.getInt(s), s -> loadTextMapFile(s, nameHashes)));
|
||||
List<Long2ObjectMap<String>> languageMaps =
|
||||
IntStream.range(0, TextStrings.NUM_LANGUAGES)
|
||||
.mapToObj(i -> mapLanguageMaps.get(i))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
Map<TextStrings, TextStrings> canonicalTextStrings = new HashMap<>();
|
||||
return new Long2ObjectOpenHashMap<TextStrings>(
|
||||
nameHashes
|
||||
.longStream()
|
||||
.boxed()
|
||||
.collect(Collectors.toMap(key -> key, key -> {
|
||||
TextStrings t = new TextStrings(
|
||||
IntStream.range(0, TextStrings.NUM_LANGUAGES)
|
||||
.mapToObj(i -> languageMaps.get(i).get( key))
|
||||
.collect(Collectors.toList()), key);
|
||||
return canonicalTextStrings.computeIfAbsent(t, x -> t);
|
||||
}))
|
||||
);
|
||||
}
|
||||
|
||||
private static Long2ObjectMap<TextStrings> loadTextMapsCache() throws Exception {
|
||||
try (ObjectInputStream file = new ObjectInputStream(new BufferedInputStream(Files.newInputStream(TEXTMAP_CACHE_PATH), 0x100000))) {
|
||||
final int fileVersion = file.readInt();
|
||||
if (fileVersion != TEXTMAP_CACHE_VERSION)
|
||||
throw new Exception("Invalid cache version");
|
||||
return (Long2ObjectMap<TextStrings>) file.readObject();
|
||||
}
|
||||
}
|
||||
|
||||
private static void saveTextMapsCache(Long2ObjectMap<TextStrings> input) throws IOException {
|
||||
try {
|
||||
Files.createDirectory(Path.of("cache"));
|
||||
} catch (FileAlreadyExistsException ignored) {};
|
||||
try (ObjectOutputStream file = new ObjectOutputStream(new BufferedOutputStream(Files.newOutputStream(TEXTMAP_CACHE_PATH, StandardOpenOption.CREATE), 0x100000))) {
|
||||
file.writeInt(TEXTMAP_CACHE_VERSION);
|
||||
file.writeObject(input);
|
||||
}
|
||||
}
|
||||
|
||||
private static Long2ObjectMap<TextStrings> textMapStrings;
|
||||
private static final Path TEXTMAP_CACHE_PATH = Path.of(Utils.toFilePath("cache/TextMapCache.bin"));
|
||||
|
||||
public static Long2ObjectMap<TextStrings> getTextMapStrings() {
|
||||
if (textMapStrings == null)
|
||||
loadTextMaps();
|
||||
return textMapStrings;
|
||||
}
|
||||
|
||||
public static TextStrings getTextMapKey(long hash) {
|
||||
if (textMapStrings == null)
|
||||
loadTextMaps();
|
||||
return textMapStrings.get( hash);
|
||||
}
|
||||
|
||||
public static void loadTextMaps() {
|
||||
// Check system timestamps on cache and resources
|
||||
try {
|
||||
long cacheModified = Files.getLastModifiedTime(TEXTMAP_CACHE_PATH).toMillis();
|
||||
|
||||
long textmapsModified = Files.list(getResourcePath("TextMap"))
|
||||
.filter(path -> path.toString().endsWith(".json"))
|
||||
.map(path -> {
|
||||
try {
|
||||
return Files.getLastModifiedTime(path).toMillis();
|
||||
} catch (Exception ignored) {
|
||||
Grasscutter.getLogger().debug("Exception while checking modified time: ", path);
|
||||
return Long.MAX_VALUE; // Don't use cache, something has gone wrong
|
||||
}
|
||||
})
|
||||
.max(Long::compare)
|
||||
.get();
|
||||
|
||||
Grasscutter.getLogger().debug("Cache modified %d, textmap modified %d".formatted(cacheModified, textmapsModified));
|
||||
if (textmapsModified < cacheModified) {
|
||||
// Try loading from cache
|
||||
Grasscutter.getLogger().info("Loading cached TextMaps");
|
||||
textMapStrings = loadTextMapsCache();
|
||||
return;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Grasscutter.getLogger().debug("Exception while checking cache: ", e);
|
||||
};
|
||||
|
||||
// Regenerate cache
|
||||
Grasscutter.getLogger().info("Generating TextMaps cache");
|
||||
ResourceLoader.loadAll();
|
||||
LongSet usedHashes = new LongOpenHashSet();
|
||||
GameData.getAvatarDataMap().forEach((k, v) -> usedHashes.add( v.getNameTextMapHash()));
|
||||
GameData.getAvatarSkillDataMap().forEach((k, v) -> {
|
||||
usedHashes.add( v.getNameTextMapHash());
|
||||
usedHashes.add( v.getDescTextMapHash());
|
||||
});
|
||||
GameData.getItemDataMap().forEach((k, v) -> usedHashes.add( v.getNameTextMapHash()));
|
||||
GameData.getMonsterDataMap().forEach((k, v) -> usedHashes.add( v.getNameTextMapHash()));
|
||||
GameData.getMainQuestDataMap().forEach((k, v) -> usedHashes.add( v.getTitleTextMapHash()));
|
||||
GameData.getQuestDataMap().forEach((k, v) -> usedHashes.add( v.getDescTextMapHash()));
|
||||
GameData.getNpcDataMap().forEach((k, v) -> usedHashes.add( v.getNameTextMapHash()));
|
||||
GameData.getGadgetDataMap().forEach((k, v) -> usedHashes.add( v.getNameTextMapHash()));
|
||||
// Incidental strings
|
||||
usedHashes.add( 4233146695L); // Character
|
||||
usedHashes.add( 4231343903L); // Weapon
|
||||
usedHashes.add( 332935371L); // Standard Wish
|
||||
usedHashes.add( 2272170627L); // Character Event Wish
|
||||
usedHashes.add( 3352513147L); // Character Event Wish-2
|
||||
usedHashes.add( 2864268523L); // Weapon Event Wish
|
||||
|
||||
textMapStrings = loadTextMapFiles(usedHashes);
|
||||
try {
|
||||
saveTextMapsCache(textMapStrings);
|
||||
} catch (IOException e) {
|
||||
Grasscutter.getLogger().error("Failed to save TextMap cache: ", e);
|
||||
};
|
||||
}
|
||||
}
|
380
Source/GrasscutterTools/Resources/MyTools.java
Normal file
@@ -0,0 +1,380 @@
|
||||
package emu.grasscutter.tools;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.io.PrintWriter;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import emu.grasscutter.GameConstants;
|
||||
import emu.grasscutter.Grasscutter;
|
||||
import emu.grasscutter.command.CommandHandler;
|
||||
import emu.grasscutter.command.CommandMap;
|
||||
import emu.grasscutter.data.GameData;
|
||||
import emu.grasscutter.data.ResourceLoader;
|
||||
import emu.grasscutter.data.excels.AvatarData;
|
||||
import emu.grasscutter.data.excels.ItemData;
|
||||
import emu.grasscutter.data.excels.QuestData;
|
||||
import emu.grasscutter.game.inventory.ItemType;
|
||||
import emu.grasscutter.game.inventory.MaterialType;
|
||||
import emu.grasscutter.game.props.MonsterType;
|
||||
import emu.grasscutter.game.props.SceneType;
|
||||
import emu.grasscutter.utils.Language;
|
||||
import emu.grasscutter.utils.Language.TextStrings;
|
||||
import emu.grasscutter.utils.SparseSet;
|
||||
import it.unimi.dsi.fastutil.ints.*;
|
||||
import it.unimi.dsi.fastutil.longs.Long2ObjectMap;
|
||||
|
||||
import static emu.grasscutter.config.Configuration.*;
|
||||
|
||||
public final class Tools {
|
||||
public static void createGmHandbooks() throws Exception {
|
||||
final List<Language> languages = Language.TextStrings.getLanguages();
|
||||
|
||||
final Long2ObjectMap<TextStrings> textMaps = Language.getTextMapStrings();
|
||||
|
||||
ResourceLoader.loadAll();
|
||||
|
||||
|
||||
SparseSet illegalWeaponIds = new SparseSet("""
|
||||
10000-10008, 11411, 11506-11508, 12505, 12506, 12508, 12509,
|
||||
13503, 13506, 14411, 14503, 14505, 14508, 15504-15506
|
||||
""");
|
||||
|
||||
SparseSet illegalRelicIds = new SparseSet("""
|
||||
20001, 23300-23340, 23383-23385, 78310-78554, 99310-99554
|
||||
""");
|
||||
|
||||
SparseSet illegalItemIds = new SparseSet("""
|
||||
100086, 100087, 100100-101000, 101106-101110, 101306, 101500-104000,
|
||||
105001, 105004, 106000-107000, 107011, 108000, 109000-110000,
|
||||
115000-130000, 200200-200899, 220050, 220054
|
||||
""");
|
||||
|
||||
|
||||
final Int2LongSortedMap avatarNames = new Int2LongRBTreeMap(GameData.getAvatarDataMap().int2ObjectEntrySet().stream().filter(e -> e.getIntKey() >= 10000002 && e.getIntKey() < 11000000).collect(Collectors.toMap(Int2ObjectMap.Entry::getIntKey, e -> e.getValue().getNameTextMapHash())));
|
||||
|
||||
final Int2LongSortedMap virtualItems = new Int2LongRBTreeMap(GameData.getItemDataMap().int2ObjectEntrySet().stream().filter(e -> e.getValue().getItemType() == ItemType.ITEM_VIRTUAL && !illegalItemIds.contains(e.getIntKey())).collect(Collectors.toMap(Int2ObjectMap.Entry::getIntKey, e -> e.getValue().getNameTextMapHash())));
|
||||
final Int2LongSortedMap weaponItems = new Int2LongRBTreeMap(GameData.getItemDataMap().int2ObjectEntrySet().stream().filter(e -> e.getValue().getItemType() == ItemType.ITEM_WEAPON && !illegalWeaponIds.contains(e.getIntKey())).collect(Collectors.toMap(Int2ObjectMap.Entry::getIntKey, e -> e.getValue().getNameTextMapHash())));
|
||||
final Int2LongSortedMap furnitureItems = new Int2LongRBTreeMap(GameData.getItemDataMap().int2ObjectEntrySet().stream().filter(e -> e.getValue().getItemType() == ItemType.ITEM_FURNITURE && !illegalItemIds.contains(e.getIntKey())).collect(Collectors.toMap(Int2ObjectMap.Entry::getIntKey, e -> e.getValue().getNameTextMapHash())));
|
||||
// final Int2LongSortedMap materials = new Int2LongRBTreeMap(GameData.getItemDataMap().int2ObjectEntrySet().stream().filter(e -> e.getValue().getItemType() == ItemType.ITEM_MATERIAL).collect(Collectors.toMap(Int2ObjectMap.Entry::getIntKey, e -> e.getValue().getNameTextMapHash())));
|
||||
|
||||
final var materialTypes = MaterialType.values();
|
||||
final List<Int2LongRBTreeMap> materialsNames = Arrays.stream(materialTypes).map(type ->
|
||||
new Int2LongRBTreeMap(
|
||||
GameData.getItemDataMap()
|
||||
.int2ObjectEntrySet()
|
||||
.stream()
|
||||
.filter(
|
||||
e -> e.getValue().getItemType() == ItemType.ITEM_MATERIAL
|
||||
&& e.getValue().getMaterialType() == type
|
||||
&& !illegalItemIds.contains(e.getIntKey())
|
||||
).collect(
|
||||
Collectors.toMap(
|
||||
Int2ObjectMap.Entry::getIntKey,
|
||||
e -> e.getValue().getNameTextMapHash())
|
||||
))
|
||||
).toList();
|
||||
|
||||
final Int2LongSortedMap relicNames = new Int2LongRBTreeMap(GameData.getItemDataMap().int2ObjectEntrySet().stream().filter(e -> e.getValue().getItemType() == ItemType.ITEM_RELIQUARY && !illegalRelicIds.contains(e.getIntKey())).collect(Collectors.toMap(Int2ObjectMap.Entry::getIntKey, e -> e.getValue().getNameTextMapHash())));
|
||||
|
||||
final var monsterTypes = MonsterType.values();
|
||||
final List<Int2LongRBTreeMap> monsterNames = Arrays.stream(monsterTypes).map(type ->
|
||||
new Int2LongRBTreeMap(
|
||||
GameData.getMonsterDataMap()
|
||||
.int2ObjectEntrySet()
|
||||
.stream()
|
||||
.filter(
|
||||
e -> e.getValue().getType() == type
|
||||
).collect(
|
||||
Collectors.toMap(
|
||||
Int2ObjectMap.Entry::getIntKey,
|
||||
e -> e.getValue().getNameTextMapHash())
|
||||
))
|
||||
).toList();
|
||||
|
||||
|
||||
// final Int2LongSortedMap monsterNames = new Int2LongRBTreeMap(GameData.getMonsterDataMap().int2ObjectEntrySet().stream().filter(e -> e.getValue().getType()).collect(Collectors.toMap(Int2ObjectMap.Entry::getIntKey, e -> e.getValue().getNameTextMapHash())));
|
||||
final Int2LongSortedMap mainQuestTitles = new Int2LongRBTreeMap(GameData.getMainQuestDataMap().int2ObjectEntrySet().stream().collect(Collectors.toMap(Int2ObjectMap.Entry::getIntKey, e -> e.getValue().getTitleTextMapHash())));
|
||||
// Int2LongSortedMap questDescs = new Int2LongRBTreeMap(GameData.getQuestDataMap().int2ObjectEntrySet().stream().collect(Collectors.toMap(e -> e.getIntKey(), e -> e.getValue().getDescTextMapHash())));
|
||||
|
||||
// final Int2LongSortedMap npcNames = new Int2LongRBTreeMap(GameData.getNpcDataMap().int2ObjectEntrySet().stream().collect(Collectors.toMap(Int2ObjectMap.Entry::getIntKey, e -> e.getValue().getNameTextMapHash())));
|
||||
final Int2LongSortedMap gadgetNames = new Int2LongRBTreeMap(GameData.getGadgetDataMap().int2ObjectEntrySet().stream().collect(Collectors.toMap(Int2ObjectMap.Entry::getIntKey, e -> e.getValue().getNameTextMapHash())));
|
||||
|
||||
// Preamble
|
||||
final List<StringBuilder> handbookBuilders = new ArrayList<>(TextStrings.NUM_LANGUAGES);
|
||||
final String now = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss").format(LocalDateTime.now());
|
||||
for (int i = 0; i < TextStrings.NUM_LANGUAGES; i++)
|
||||
handbookBuilders.add(new StringBuilder()
|
||||
.append("// Grasscutter " + GameConstants.VERSION + " GM Handbook\n")
|
||||
.append("// Created " + now + "\n\n")
|
||||
.append("// Commands\n"));
|
||||
// Commands
|
||||
final List<CommandHandler> cmdList = CommandMap.getInstance().getHandlersAsList();
|
||||
final String padCmdLabel = "%s:";
|
||||
for (CommandHandler cmd : cmdList) {
|
||||
final String label = padCmdLabel.formatted(cmd.getLabel());
|
||||
final String descKey = cmd.getDescriptionKey();
|
||||
for (int i = 0; i < TextStrings.NUM_LANGUAGES; i++) {
|
||||
String desc = languages.get(i).get(descKey).replace("\n", "\n\t");
|
||||
handbookBuilders.get(i).append(label + desc + "\n");
|
||||
}
|
||||
}
|
||||
// Avatars, Items, Monsters
|
||||
final ArrayList<String> handbookSections = new ArrayList<>(List.of("Avatars", "VirtualItems", "Weapons", "furniture", "Relics" /*, "Gadgets", "NPCs" */));
|
||||
final ArrayList<Int2LongSortedMap> handbookNames = new ArrayList<>(List.of(avatarNames, virtualItems, weaponItems, furnitureItems, relicNames /*, gadgetNames , npcNames */));
|
||||
handbookSections.addAll(Arrays.stream(materialTypes).map(Enum::name).toList());
|
||||
handbookNames.addAll(materialsNames);
|
||||
handbookSections.addAll(Arrays.stream(monsterTypes).map(Enum::name).toList());
|
||||
handbookNames.addAll(monsterNames);
|
||||
|
||||
for (int section = 0; section < handbookSections.size(); section++) {
|
||||
final var h = handbookNames.get(section);
|
||||
final String s = "\n\n// " + handbookSections.get(section) + "\n";
|
||||
handbookBuilders.forEach(b -> b.append(s));
|
||||
final String padId = "%s:";
|
||||
h.forEach((id, hash) -> {
|
||||
final String sId = padId.formatted(id);
|
||||
final TextStrings t = textMaps.get( hash);
|
||||
for (int i = 0; i < TextStrings.NUM_LANGUAGES; i++)
|
||||
handbookBuilders.get(i).append(sId + t.strings[i] + "\n");
|
||||
});
|
||||
}
|
||||
|
||||
// Scenes - no translations
|
||||
var sceneTypes = SceneType.values();
|
||||
var sceneDataMap = GameData.getSceneDataMap();
|
||||
var scenes = Arrays.stream(sceneTypes).map(type ->
|
||||
new Int2ObjectRBTreeMap<>(
|
||||
sceneDataMap
|
||||
.int2ObjectEntrySet()
|
||||
.stream()
|
||||
.filter(
|
||||
e -> e.getValue().getSceneType() == type
|
||||
).collect(
|
||||
Collectors.toMap(
|
||||
Int2ObjectMap.Entry::getIntKey,
|
||||
e -> e.getValue().getScriptData()
|
||||
)
|
||||
))
|
||||
).toList();
|
||||
|
||||
handbookBuilders.forEach(b -> b.append("\n\n// Scenes\n"));
|
||||
int scenesTypeIndex = 0;
|
||||
for (var sceneType : sceneTypes) {
|
||||
for (var b : handbookBuilders) {
|
||||
b.append("\n\n// ").append(sceneType.name()).append('\n');
|
||||
for (var kv : scenes.get(scenesTypeIndex).int2ObjectEntrySet()) {
|
||||
b.append(kv.getIntKey()).append(':').append(kv.getValue()).append('\n');
|
||||
}
|
||||
}
|
||||
scenesTypeIndex++;
|
||||
}
|
||||
|
||||
// Dungeon - no translations
|
||||
handbookBuilders.forEach(b -> b.append("\n\n// Dungeons\n"));
|
||||
final var dungeonDataMap = GameData.getDungeonDataMap();
|
||||
// final String padDungeonId = "%d:";
|
||||
dungeonDataMap.keySet().intStream().sorted().forEach(id -> {
|
||||
// final String dId = padDungeonId.formatted(id);
|
||||
final int sceneId = dungeonDataMap.get(id).getSceneId();
|
||||
// final String sId = padDungeonId.formatted(sceneId);
|
||||
final String data = sceneDataMap.get(sceneId).getScriptData();
|
||||
// handbookBuilders.forEach(b -> b.append(dId).append(sId).append(data).append("\n"));
|
||||
handbookBuilders.forEach(b -> b.append(id).append(':').append(data).append("\n"));
|
||||
});
|
||||
|
||||
|
||||
|
||||
// Quests
|
||||
handbookBuilders.forEach(b -> b.append("\n\n// Quests\n"));
|
||||
final var questDataMap = GameData.getQuestDataMap();
|
||||
final String padQuestId = "%d:";
|
||||
questDataMap.keySet().intStream().sorted().forEach(id -> {
|
||||
final String sId = padQuestId.formatted(id);
|
||||
final QuestData data = questDataMap.get(id);
|
||||
final var mainTitleId = mainQuestTitles.get(data.getMainId());
|
||||
if (mainTitleId != 0) {
|
||||
final TextStrings title = textMaps.get(mainTitleId);
|
||||
final TextStrings desc = textMaps.get( data.getDescTextMapHash());
|
||||
for (int i = 0; i < TextStrings.NUM_LANGUAGES; i++)
|
||||
handbookBuilders.get(i).append(sId + title.strings[i] + " - " + desc.strings[i] + "\n");
|
||||
}
|
||||
});
|
||||
|
||||
// Write txt files
|
||||
for (int i = 0; i < TextStrings.NUM_LANGUAGES; i++) {
|
||||
File GMHandbookOutputpath=new File("./GM Handbook");
|
||||
GMHandbookOutputpath.mkdir();
|
||||
final String fileName = "./GM Handbook/GM Handbook - %s.txt".formatted(TextStrings.ARR_LANGUAGES[i]);
|
||||
try (PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(fileName), StandardCharsets.UTF_8), false)) {
|
||||
writer.write(handbookBuilders.get(i).toString());
|
||||
}
|
||||
}
|
||||
Grasscutter.getLogger().info("GM Handbooks generated!");
|
||||
}
|
||||
|
||||
public static void createGachaMapping(String location) throws Exception {
|
||||
createGachaMappings(location);
|
||||
}
|
||||
|
||||
public static List<String> createGachaMappingJsons() {
|
||||
final int NUM_LANGUAGES = Language.TextStrings.NUM_LANGUAGES;
|
||||
final Language.TextStrings CHARACTER = Language.getTextMapKey(4233146695L); // "Character" in EN
|
||||
final Language.TextStrings WEAPON = Language.getTextMapKey(4231343903L); // "Weapon" in EN
|
||||
final Language.TextStrings STANDARD_WISH = Language.getTextMapKey(332935371L); // "Standard Wish" in EN
|
||||
final Language.TextStrings CHARACTER_EVENT_WISH = Language.getTextMapKey(2272170627L); // "Character Event Wish" in EN
|
||||
final Language.TextStrings CHARACTER_EVENT_WISH_2 = Language.getTextMapKey(3352513147L); // "Character Event Wish-2" in EN
|
||||
final Language.TextStrings WEAPON_EVENT_WISH = Language.getTextMapKey(2864268523L); // "Weapon Event Wish" in EN
|
||||
final List<StringBuilder> sbs = new ArrayList<>(NUM_LANGUAGES);
|
||||
for (int langIdx = 0; langIdx < NUM_LANGUAGES; langIdx++)
|
||||
sbs.add(new StringBuilder("{\n")); // Web requests should never need Windows line endings
|
||||
|
||||
// Avatars
|
||||
GameData.getAvatarDataMap().keySet().intStream().sorted().forEach(id -> {
|
||||
AvatarData data = GameData.getAvatarDataMap().get(id);
|
||||
int avatarID = data.getId();
|
||||
if (avatarID >= 11000000) { // skip test avatar
|
||||
return;
|
||||
}
|
||||
String color = switch (data.getQualityType()) {
|
||||
case "QUALITY_PURPLE" -> "purple";
|
||||
case "QUALITY_ORANGE" -> "yellow";
|
||||
case "QUALITY_BLUE" -> "blue";
|
||||
default -> "";
|
||||
};
|
||||
Language.TextStrings avatarName = Language.getTextMapKey(data.getNameTextMapHash());
|
||||
for (int langIdx = 0; langIdx < NUM_LANGUAGES; langIdx++) {
|
||||
sbs.get(langIdx)
|
||||
.append("\t\"")
|
||||
.append(avatarID % 1000 + 1000)
|
||||
.append("\": [\"")
|
||||
.append(avatarName.get(langIdx))
|
||||
.append(" (")
|
||||
.append(CHARACTER.get(langIdx))
|
||||
.append(")\", \"")
|
||||
.append(color)
|
||||
.append("\"],\n");
|
||||
}
|
||||
});
|
||||
|
||||
// Weapons
|
||||
GameData.getItemDataMap().keySet().intStream().sorted().forEach(id -> {
|
||||
ItemData data = GameData.getItemDataMap().get(id);
|
||||
if (data.getId() <= 11101 || data.getId() >= 20000) {
|
||||
return; //skip non weapon items
|
||||
}
|
||||
String color = switch (data.getRankLevel()) {
|
||||
case 3 -> "blue";
|
||||
case 4 -> "purple";
|
||||
case 5 -> "yellow";
|
||||
default -> null;
|
||||
};
|
||||
if (color == null) return; // skip unnecessary entries
|
||||
Language.TextStrings weaponName = Language.getTextMapKey(data.getNameTextMapHash());
|
||||
for (int langIdx = 0; langIdx < NUM_LANGUAGES; langIdx++) {
|
||||
sbs.get(langIdx)
|
||||
.append("\t\"")
|
||||
.append(data.getId())
|
||||
.append("\": [\"")
|
||||
.append(weaponName.get(langIdx).replaceAll("\"", "\\\\\""))
|
||||
.append(" (")
|
||||
.append(WEAPON.get(langIdx))
|
||||
.append(")\", \"")
|
||||
.append(color)
|
||||
.append("\"],\n");
|
||||
}
|
||||
});
|
||||
|
||||
for (int langIdx = 0; langIdx < NUM_LANGUAGES; langIdx++) {
|
||||
sbs.get(langIdx)
|
||||
.append("\t\"200\": \"")
|
||||
.append(STANDARD_WISH.get(langIdx))
|
||||
.append("\",\n\t\"301\": \"")
|
||||
.append(CHARACTER_EVENT_WISH.get(langIdx))
|
||||
.append("\",\n\t\"400\": \"")
|
||||
.append(CHARACTER_EVENT_WISH_2.get(langIdx))
|
||||
.append("\",\n\t\"302\": \"")
|
||||
.append(WEAPON_EVENT_WISH.get(langIdx))
|
||||
.append("\"\n}");
|
||||
}
|
||||
return sbs.stream().map(StringBuilder::toString).toList();
|
||||
}
|
||||
|
||||
public static void createGachaMappings(String location) throws Exception {
|
||||
ResourceLoader.loadResources();
|
||||
List<String> jsons = createGachaMappingJsons();
|
||||
StringBuilder sb = new StringBuilder("mappings = {\n");
|
||||
for (int i = 0; i < Language.TextStrings.NUM_LANGUAGES; i++) {
|
||||
sb.append("\t\"%s\": ".formatted(Language.TextStrings.ARR_GC_LANGUAGES[i].toLowerCase())); // TODO: change the templates to not use lowercased locale codes
|
||||
sb.append(jsons.get(i).replace("\n", "\n\t") + ",\n");
|
||||
}
|
||||
sb.setLength(sb.length() - 2); // Delete trailing ",\n"
|
||||
sb.append("\n}");
|
||||
|
||||
try (PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(location), StandardCharsets.UTF_8), false)) {
|
||||
// if the user made choices for language, I assume it's okay to assign his/her selected language to "en-us"
|
||||
// since it's the fallback language and there will be no difference in the gacha record page.
|
||||
// The end-user can still modify the `gacha/mappings.js` directly to enable multilingual for the gacha record system.
|
||||
writer.println(sb);
|
||||
Grasscutter.getLogger().info("Mappings generated to " + location + " !");
|
||||
}
|
||||
}
|
||||
|
||||
public static List<String> getAvailableLanguage() {
|
||||
List<String> availableLangList = new ArrayList<>();
|
||||
try {
|
||||
Files.newDirectoryStream(getResourcePath("TextMap"), "TextMap*.json").forEach(path -> {
|
||||
availableLangList.add(path.getFileName().toString().replace("TextMap", "").replace(".json", "").toLowerCase());
|
||||
});
|
||||
} catch (IOException e) {
|
||||
Grasscutter.getLogger().error("Failed to get available languages:", e);
|
||||
}
|
||||
return availableLangList;
|
||||
}
|
||||
|
||||
@Deprecated(forRemoval = true, since = "1.2.3")
|
||||
public static String getLanguageOption() {
|
||||
List<String> availableLangList = getAvailableLanguage();
|
||||
|
||||
// Use system out for better format
|
||||
if (availableLangList.size() == 1) {
|
||||
return availableLangList.get(0).toUpperCase();
|
||||
}
|
||||
StringBuilder stagedMessage = new StringBuilder();
|
||||
stagedMessage.append("The following languages mappings are available, please select one: [default: EN] \n");
|
||||
|
||||
StringBuilder groupedLangList = new StringBuilder(">\t"); String input;
|
||||
int groupedLangCount = 0;
|
||||
|
||||
for (String availableLanguage: availableLangList) {
|
||||
groupedLangCount++;
|
||||
groupedLangList.append(availableLanguage).append("\t");
|
||||
|
||||
if (groupedLangCount == 6) {
|
||||
stagedMessage.append(groupedLangList).append("\n");
|
||||
groupedLangCount = 0;
|
||||
groupedLangList = new StringBuilder(">\t");
|
||||
}
|
||||
}
|
||||
|
||||
if (groupedLangCount > 0) {
|
||||
stagedMessage.append(groupedLangList).append("\n");
|
||||
}
|
||||
|
||||
stagedMessage.append("\nYour choice: [EN] ");
|
||||
|
||||
input = Grasscutter.getConsole().readLine(stagedMessage.toString());
|
||||
if (availableLangList.contains(input.toLowerCase())) {
|
||||
return input.toUpperCase();
|
||||
}
|
||||
|
||||
Grasscutter.getLogger().info("Invalid option. Will use EN (English) as fallback."); return "EN";
|
||||
}
|
||||
}
|
@@ -3,34 +3,53 @@ player.*
|
||||
player.**
|
||||
server.*
|
||||
server.**
|
||||
player.changescene
|
||||
permission
|
||||
player.clearinv
|
||||
player.clearinv.others
|
||||
player.enterdungeon
|
||||
player.enterdungeon.others
|
||||
player.give
|
||||
player.giveall
|
||||
player.giveart
|
||||
player.givechar
|
||||
player.godmode
|
||||
player.give.others
|
||||
player.heal
|
||||
player.heal.others
|
||||
player.killcharacter
|
||||
player.killcharacter.others
|
||||
player.quest
|
||||
player.quest.others
|
||||
player.resetconstellation
|
||||
player.resetconstellation.others
|
||||
player.setfetterlevel
|
||||
player.setfetterlevel.others
|
||||
player.setprop
|
||||
player.setprop.others
|
||||
player.setstats
|
||||
player.setstats.others
|
||||
player.settalent
|
||||
player.setworldlevel
|
||||
player.settalent.others
|
||||
player.team
|
||||
player.team.others
|
||||
player.teleport
|
||||
player.teleport.others
|
||||
player.tpall
|
||||
player.tpall.others
|
||||
player.weather
|
||||
player.weather.others
|
||||
server.announce
|
||||
server.ban
|
||||
server.broadcast
|
||||
server.coop
|
||||
server.drop
|
||||
server.coop.others
|
||||
server.kick
|
||||
server.killall
|
||||
server.killall.others
|
||||
server.reload
|
||||
server.resetshop
|
||||
server.resetshop.others
|
||||
server.sendmail
|
||||
server.sendmessage
|
||||
server.sendmessage.others
|
||||
server.spawn
|
||||
server.spawn.others
|
||||
server.stop
|
||||
mea.notice
|
||||
mea.mail
|