Compare commits

..

6 Commits

Author SHA1 Message Date
3e98e551de Update README 2022-05-10 22:54:41 +08:00
5ba7cd74fb Add Text Map Browser
Update Avatar Tab Image
2022-05-10 22:47:09 +08:00
9c7e4864b0 Update README.md 2022-05-08 18:50:34 +08:00
ca6441e780 Update Readme.md
Add Readme_en-US.md
Update Screenshots
Add Screenshots-en
Update Languages
2022-05-08 18:49:31 +08:00
65393c4d7b Update package
Update Language files
2022-05-07 22:10:03 +08:00
c83804ce92 Update Version to v0.10.0 2022-05-07 21:50:47 +08:00
52 changed files with 5338 additions and 3827 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
Doc/Screenshots/0-Home.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

View File

@@ -1,50 +1,46 @@
# Grasscutter Tools
中文 | [EN](README_en-US.md)
## Commands Generator
请从 [Releases](https://github.com/jie65535/GrasscutterCommandGenerator/releases) 中获取最新版本
## v0.9.0 更新
命令@UID随版本重构指令中指定ID改为`@ uid`,因此与旧版本服务端不兼容,不使用`指令含UID`则不影响)
---
权限管理新增下拉框选择权限(方便选择)
## TODO List
- [ ] 多语言支持进度UI已经支持英语但还有许多ID映射文件缺失欢迎补充
- [ ] Animal.txt
- [ ] Artifact.txt
- [ ] ArtifactCat.txt
- [ ] ArtifactMainAttribution.txt
- [ ] ArtifactSubAttribution.txt
- [x] Avatar.txt
- [ ] CustomCommands.txt
- [x] Item.txt
- [x] Monster.txt
- [ ] NPC.txt
- [ ] Ornament.txt
- [x] Scene.txt
- [ ] Weapon.txt
- [ ] 远程执行命令(进度:新建文件夹)
- [ ] 割草机启动器(无进度)
- [ ] 邮件编辑器(无进度)
- [ ] 商店编辑器(无进度)
![PermComboBox](Doc/Screenshots/PermComboBox.png)
## v0.10.0 未发布
- 新增`文本资源浏览器`,可使用**正则**搜索文本映射文件
![Text Map Browser](Doc/Screenshots/11-TextMapBrowser.png)
- `主页` 页面新增 `语言` 下拉框,可选择简体中文和英语。
- `生成` 页面新增 `摆件` ID分类。
场景页面新增天气设置(呼风唤雨~
![SetClimate](Doc/Screenshots/SetClimate.png)
## 软件截图
## v0.8.0 更新
圣遗物套装下拉框可键入提示
`状态` 标签改为 `数据`设置角色数据模块重构支持最新版指令。_部分属性旧版本可能不支持_
![Custom Stats Screenshort](Doc/Screenshots/8-CustomStats.png)
`其它` 页面改为 `管理` ,新增帐号创建和删除。
![Management](Doc/Screenshots/9-Manage.png)
## v0.7.0 更新
物品生成记录本
![Give Item Screenshort](Doc/Screenshots/4-GiveItem.png)
实体生成记录本
![Spawn Entity Screenshort](Doc/Screenshots/6-SpawnEntity.png)
## v0.6.0 更新
新增奖池编辑器
![GachaBannerEditor](Doc/Screenshots/10-GachaBannerEditor.png)
## Screenshots
![Logo](Doc/Screenshots/GrasscutterLogo.png)
![Home](Doc/Screenshots/0-Home.png)
![Custom Commands Screenshot](Doc/Screenshots/1-CustomCommands.png)
![Custom Artifact Screenshot](Doc/Screenshots/2-CustomArtifact.png)
@@ -62,3 +58,7 @@
![Custom Stats Screenshort](Doc/Screenshots/8-CustomStats.png)
![Management](Doc/Screenshots/9-Manage.png)
![GachaBannerEditor](Doc/Screenshots/10-GachaBannerEditor.png)
![Text Map Browser](Doc/Screenshots/11-TextMapBrowser.png)

61
README_en-US.md Normal file
View File

@@ -0,0 +1,61 @@
# Grasscutter Tools
[中文](README.md) | EN
## Commands Generator
Please download the latest version from [Releases](https://github.com/jie65535/GrasscutterCommandGenerator/releases)
---
## TODO List
- [ ] Multi-language support (progress: UI already supports English, but there are still many ID mapping files missing, welcome to add)
- [ ] Animal.txt
- [ ] Artifact.txt
- [ ] ArtifactCat.txt
- [ ] ArtifactMainAttribution.txt
- [ ] ArtifactSubAttribution.txt
- [x] Avatar.txt
- [ ] CustomCommands.txt
- [x] Item.txt
- [x] Monster.txt
- [ ] NPC.txt
- [ ] Ornament.txt
- [x] Scene.txt
- [ ] Weapon.txt
- [ ] Execute command remotely (progress: new folder)
- [ ] Grasscutter Launcher (no progress)
- [ ] Mail Editor (no progress)
- [ ] Shop Editor (no progress)
## v0.10.0 Unpublished
Added `Text Map Browser`, you can use **regular** search text mapping files
![Text Map Browser](Doc/Screenshots-en/11-TextMapBrowser.png)
## Screenshots
![Logo](Doc/Screenshots/GrasscutterLogo.png)
![Home](Doc/Screenshots-en/0-Home.png)
![Custom Commands Screenshot](Doc/Screenshots-en/1-CustomCommands.png)
![Custom Artifact Screenshot](Doc/Screenshots-en/2-CustomArtifact.png)
![Custom Weapon Screenshort](Doc/Screenshots-en/3-CustomWeapon.png)
![Give Item Screenshort](Doc/Screenshots-en/4-GiveItem.png)
![Give Avatar Screenshort](Doc/Screenshots-en/5-GiveAvatar.png)
![Spawn Entity Screenshort](Doc/Screenshots-en/6-SpawnEntity.png)
![Change Scene Screenshort](Doc/Screenshots-en/7-ChangeScene.png)
![Custom Stats Screenshort](Doc/Screenshots-en/8-CustomStats.png)
![Management](Doc/Screenshots-en/9-Manage.png)
![GachaBannerEditor](Doc/Screenshots-en/10-GachaBannerEditor.png)
![Text Map Browser](Doc/Screenshots-en/11-TextMapBrowser.png)

View File

@@ -19,6 +19,12 @@
<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>
</GrasscutterTools.Properties.Settings>
</userSettings>
</configuration>

View File

@@ -229,6 +229,15 @@
<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>

File diff suppressed because it is too large Load Diff

View File

@@ -36,6 +36,7 @@ namespace GrasscutterTools
this.GrpCommand = new System.Windows.Forms.GroupBox();
this.TCMain = new System.Windows.Forms.TabControl();
this.TPHome = new System.Windows.Forms.TabPage();
this.BtnOpenTextMap = new System.Windows.Forms.Button();
this.BtnOpenGachaBannerEditor = new System.Windows.Forms.Button();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.GrpSettings = new System.Windows.Forms.GroupBox();
@@ -258,14 +259,22 @@ namespace GrasscutterTools
//
// TPHome
//
resources.ApplyResources(this.TPHome, "TPHome");
this.TPHome.Controls.Add(this.BtnOpenTextMap);
this.TPHome.Controls.Add(this.BtnOpenGachaBannerEditor);
this.TPHome.Controls.Add(this.pictureBox1);
this.TPHome.Controls.Add(this.GrpSettings);
this.TPHome.Controls.Add(this.LblAbout);
resources.ApplyResources(this.TPHome, "TPHome");
this.TPHome.Name = "TPHome";
this.TPHome.UseVisualStyleBackColor = true;
//
// BtnOpenTextMap
//
resources.ApplyResources(this.BtnOpenTextMap, "BtnOpenTextMap");
this.BtnOpenTextMap.Name = "BtnOpenTextMap";
this.BtnOpenTextMap.UseVisualStyleBackColor = true;
this.BtnOpenTextMap.Click += new System.EventHandler(this.BtnOpenTextMap_Click);
//
// BtnOpenGachaBannerEditor
//
resources.ApplyResources(this.BtnOpenGachaBannerEditor, "BtnOpenGachaBannerEditor");
@@ -293,9 +302,9 @@ namespace GrasscutterTools
//
// CmbLanguage
//
resources.ApplyResources(this.CmbLanguage, "CmbLanguage");
this.CmbLanguage.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.CmbLanguage.FormattingEnabled = true;
resources.ApplyResources(this.CmbLanguage, "CmbLanguage");
this.CmbLanguage.Name = "CmbLanguage";
this.CmbLanguage.SelectedIndexChanged += new System.EventHandler(this.CmbLanguage_SelectedIndexChanged);
//
@@ -337,6 +346,7 @@ namespace GrasscutterTools
//
// TPCustom
//
resources.ApplyResources(this.TPCustom, "TPCustom");
this.TPCustom.Controls.Add(this.BtnExportCustomCommands);
this.TPCustom.Controls.Add(this.BtnLoadCustomCommands);
this.TPCustom.Controls.Add(this.LblCustomName);
@@ -344,7 +354,6 @@ namespace GrasscutterTools
this.TPCustom.Controls.Add(this.BtnRemoveCustomCommand);
this.TPCustom.Controls.Add(this.BtnSaveCustomCommand);
this.TPCustom.Controls.Add(this.TxtCustomName);
resources.ApplyResources(this.TPCustom, "TPCustom");
this.TPCustom.Name = "TPCustom";
this.TPCustom.UseVisualStyleBackColor = true;
//
@@ -400,6 +409,7 @@ namespace GrasscutterTools
//
// TPArtifact
//
resources.ApplyResources(this.TPArtifact, "TPArtifact");
this.TPArtifact.Controls.Add(this.LblArtifactName);
this.TPArtifact.Controls.Add(this.NUDArtifactStars);
this.TPArtifact.Controls.Add(this.LblArtifactStars);
@@ -419,7 +429,6 @@ namespace GrasscutterTools
this.TPArtifact.Controls.Add(this.LblSubAttribution);
this.TPArtifact.Controls.Add(this.CmbMainAttribution);
this.TPArtifact.Controls.Add(this.LblMainAttribution);
resources.ApplyResources(this.TPArtifact, "TPArtifact");
this.TPArtifact.Name = "TPArtifact";
this.TPArtifact.UseVisualStyleBackColor = true;
//
@@ -591,6 +600,7 @@ namespace GrasscutterTools
//
// TPWeapon
//
resources.ApplyResources(this.TPWeapon, "TPWeapon");
this.TPWeapon.Controls.Add(this.TxtWeaponFilter);
this.TPWeapon.Controls.Add(this.LblWeaponDescription);
this.TPWeapon.Controls.Add(this.LblWeaponRefinement);
@@ -600,7 +610,6 @@ namespace GrasscutterTools
this.TPWeapon.Controls.Add(this.NUDWeaponAmout);
this.TPWeapon.Controls.Add(this.NUDWeaponLevel);
this.TPWeapon.Controls.Add(this.ListWeapons);
resources.ApplyResources(this.TPWeapon, "TPWeapon");
this.TPWeapon.Name = "TPWeapon";
this.TPWeapon.UseVisualStyleBackColor = true;
//
@@ -697,6 +706,7 @@ namespace GrasscutterTools
//
// TPItem
//
resources.ApplyResources(this.TPItem, "TPItem");
this.TPItem.Controls.Add(this.BtnSaveGiveItemLog);
this.TPItem.Controls.Add(this.BtnRemoveGiveItemLog);
this.TPItem.Controls.Add(this.GrpGiveItemRecord);
@@ -708,7 +718,6 @@ namespace GrasscutterTools
this.TPItem.Controls.Add(this.NUDGameItemAmout);
this.TPItem.Controls.Add(this.NUDGameItemLevel);
this.TPItem.Controls.Add(this.LblGiveCommandDescription);
resources.ApplyResources(this.TPItem, "TPItem");
this.TPItem.Name = "TPItem";
this.TPItem.UseVisualStyleBackColor = true;
//
@@ -819,13 +828,13 @@ namespace GrasscutterTools
//
// TPAvatar
//
resources.ApplyResources(this.TPAvatar, "TPAvatar");
this.TPAvatar.Controls.Add(this.LblAvatarGenWarning);
this.TPAvatar.Controls.Add(this.ImgAvatar);
this.TPAvatar.Controls.Add(this.LblAvatar);
this.TPAvatar.Controls.Add(this.LblLevel);
this.TPAvatar.Controls.Add(this.NUDAvatarLevel);
this.TPAvatar.Controls.Add(this.CmbAvatar);
resources.ApplyResources(this.TPAvatar, "TPAvatar");
this.TPAvatar.Name = "TPAvatar";
this.TPAvatar.UseVisualStyleBackColor = true;
//
@@ -838,7 +847,7 @@ namespace GrasscutterTools
// ImgAvatar
//
resources.ApplyResources(this.ImgAvatar, "ImgAvatar");
this.ImgAvatar.Image = global::GrasscutterTools.Properties.Resources.ImgIconGrasscutter;
this.ImgAvatar.Image = global::GrasscutterTools.Properties.Resources.ImgHome;
this.ImgAvatar.Name = "ImgAvatar";
this.ImgAvatar.TabStop = false;
//
@@ -883,6 +892,7 @@ namespace GrasscutterTools
//
// TPSpawn
//
resources.ApplyResources(this.TPSpawn, "TPSpawn");
this.TPSpawn.Controls.Add(this.BtnSaveSpawnLog);
this.TPSpawn.Controls.Add(this.BtnRemoveSpawnLog);
this.TPSpawn.Controls.Add(this.GrpSpawnRecord);
@@ -894,7 +904,6 @@ namespace GrasscutterTools
this.TPSpawn.Controls.Add(this.NUDEntityLevel);
this.TPSpawn.Controls.Add(this.TxtEntityFilter);
this.TPSpawn.Controls.Add(this.ListEntity);
resources.ApplyResources(this.TPSpawn, "TPSpawn");
this.TPSpawn.Name = "TPSpawn";
this.TPSpawn.UseVisualStyleBackColor = true;
//
@@ -1037,27 +1046,19 @@ namespace GrasscutterTools
//
// TPScene
//
resources.ApplyResources(this.TPScene, "TPScene");
this.TPScene.Controls.Add(this.CmbClimateType);
this.TPScene.Controls.Add(this.LblClimateType);
this.TPScene.Controls.Add(this.LblSceneDescription);
this.TPScene.Controls.Add(this.ListScenes);
resources.ApplyResources(this.TPScene, "TPScene");
this.TPScene.Name = "TPScene";
this.TPScene.UseVisualStyleBackColor = true;
//
// CmbClimateType
//
resources.ApplyResources(this.CmbClimateType, "CmbClimateType");
this.CmbClimateType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.CmbClimateType.FormattingEnabled = true;
this.CmbClimateType.Items.AddRange(new object[] {
resources.GetString("CmbClimateType.Items"),
resources.GetString("CmbClimateType.Items1"),
resources.GetString("CmbClimateType.Items2"),
resources.GetString("CmbClimateType.Items3"),
resources.GetString("CmbClimateType.Items4"),
resources.GetString("CmbClimateType.Items5"),
resources.GetString("CmbClimateType.Items6")});
resources.ApplyResources(this.CmbClimateType, "CmbClimateType");
this.CmbClimateType.Name = "CmbClimateType";
this.CmbClimateType.SelectedIndexChanged += new System.EventHandler(this.CmbClimateType_SelectedIndexChanged);
//
@@ -1080,10 +1081,10 @@ namespace GrasscutterTools
//
// TPStats
//
resources.ApplyResources(this.TPStats, "TPStats");
this.TPStats.Controls.Add(this.GrpSetStats);
this.TPStats.Controls.Add(this.GrpTalentLevel);
this.TPStats.Controls.Add(this.LblStatsDescription);
resources.ApplyResources(this.TPStats, "TPStats");
this.TPStats.Name = "TPStats";
this.TPStats.UseVisualStyleBackColor = true;
//
@@ -1126,9 +1127,9 @@ namespace GrasscutterTools
//
// CmbStat
//
resources.ApplyResources(this.CmbStat, "CmbStat");
this.CmbStat.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.CmbStat.FormattingEnabled = true;
resources.ApplyResources(this.CmbStat, "CmbStat");
this.CmbStat.Name = "CmbStat";
this.CmbStat.SelectedIndexChanged += new System.EventHandler(this.SetStatsInputChanged);
//
@@ -1188,9 +1189,9 @@ namespace GrasscutterTools
//
// TPManage
//
resources.ApplyResources(this.TPManage, "TPManage");
this.TPManage.Controls.Add(this.GrpAccount);
this.TPManage.Controls.Add(this.GrpPermission);
resources.ApplyResources(this.TPManage, "TPManage");
this.TPManage.Name = "TPManage";
this.TPManage.UseVisualStyleBackColor = true;
//
@@ -1267,10 +1268,10 @@ namespace GrasscutterTools
//
// CmbPerm
//
resources.ApplyResources(this.CmbPerm, "CmbPerm");
this.CmbPerm.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
this.CmbPerm.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
this.CmbPerm.FormattingEnabled = true;
resources.ApplyResources(this.CmbPerm, "CmbPerm");
this.CmbPerm.Name = "CmbPerm";
//
// NUDPermUID
@@ -1316,10 +1317,10 @@ namespace GrasscutterTools
//
// TPAbout
//
resources.ApplyResources(this.TPAbout, "TPAbout");
this.TPAbout.Controls.Add(this.pictureBox2);
this.TPAbout.Controls.Add(this.LnkGithub);
this.TPAbout.Controls.Add(this.LblSupportDescription);
resources.ApplyResources(this.TPAbout, "TPAbout");
this.TPAbout.Name = "TPAbout";
this.TPAbout.UseVisualStyleBackColor = true;
//
@@ -1344,9 +1345,9 @@ namespace GrasscutterTools
//
// TPRemoteCall
//
resources.ApplyResources(this.TPRemoteCall, "TPRemoteCall");
this.TPRemoteCall.Controls.Add(this.LblRemoteTODO);
this.TPRemoteCall.Controls.Add(this.GrpRemoteCommand);
resources.ApplyResources(this.TPRemoteCall, "TPRemoteCall");
this.TPRemoteCall.Name = "TPRemoteCall";
this.TPRemoteCall.UseVisualStyleBackColor = true;
//
@@ -1372,6 +1373,7 @@ namespace GrasscutterTools
resources.ApplyResources(this.LnkRCHelp, "LnkRCHelp");
this.LnkRCHelp.Name = "LnkRCHelp";
this.LnkRCHelp.TabStop = true;
this.LnkRCHelp.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LnkRCHelp_LinkClicked);
//
// LblSessionKey
//
@@ -1398,6 +1400,7 @@ namespace GrasscutterTools
resources.ApplyResources(this.BtnPingHost, "BtnPingHost");
this.BtnPingHost.Name = "BtnPingHost";
this.BtnPingHost.UseVisualStyleBackColor = true;
this.BtnPingHost.Click += new System.EventHandler(this.BtnPingHost_Click);
//
// FormMain
//
@@ -1612,6 +1615,7 @@ namespace GrasscutterTools
private System.Windows.Forms.TextBox TxtHost;
private System.Windows.Forms.Label LblHost;
private System.Windows.Forms.Button BtnPingHost;
private System.Windows.Forms.Button BtnOpenTextMap;
}
}

View File

@@ -110,22 +110,27 @@ namespace GrasscutterTools
}
}
FormTextMapBrowser FormTextMapBrowser;
private void BtnOpenTextMap_Click(object sender, EventArgs e)
{
if (FormTextMapBrowser == null || FormTextMapBrowser.IsDisposed)
{
FormTextMapBrowser = new FormTextMapBrowser();
FormTextMapBrowser.Show();
}
else
{
FormTextMapBrowser.TopMost = true;
FormTextMapBrowser.TopMost = false;
}
}
private void CmbLanguage_SelectedIndexChanged(object sender, EventArgs e)
{
MultiLanguage.SetDefaultLanguage(Languages[CmbLanguage.SelectedIndex]);
FormMain_Load(this, EventArgs.Empty);
}
private void LnkRCHelp_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
MessageBox.Show("TODO正在开发中", "TODO");
}
private void BtnPingHost_Click(object sender, EventArgs e)
{
MessageBox.Show("TODO正在开发中", "TODO");
}
#endregion - -
#region - -
@@ -702,6 +707,9 @@ namespace GrasscutterTools
{
ListScenes.Items.Clear();
ListScenes.Items.AddRange(GameData.Scenes.Lines);
CmbClimateType.Items.Clear();
CmbClimateType.Items.AddRange(Resources.ClimateType.Split(','));
}
private void ListScenes_SelectedIndexChanged(object sender, EventArgs e)
@@ -727,6 +735,7 @@ namespace GrasscutterTools
private void InitStatList()
{
LblStatTip.Text = "";
SetStatsCommand.InitStats();
CmbStat.Items.Clear();
CmbStat.Items.AddRange(SetStatsCommand.Stats.Select(s => s.Name).ToArray());
}
@@ -868,5 +877,19 @@ namespace GrasscutterTools
}
#endregion
#region - -
private void LnkRCHelp_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
MessageBox.Show("TODO正在开发中", "TODO");
}
private void BtnPingHost_Click(object sender, EventArgs e)
{
MessageBox.Show("TODO正在开发中", "TODO");
}
#endregion
}
}

View File

@@ -133,6 +133,12 @@
<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>
@@ -517,26 +523,8 @@ The data may not be cleared even if the account is recreated.</value>
<data name="TPScene.Text" xml:space="preserve">
<value>Scene</value>
</data>
<data name="CmbClimateType.Items" xml:space="preserve">
<value>None</value>
</data>
<data name="CmbClimateType.Items1" xml:space="preserve">
<value>Sunny</value>
</data>
<data name="CmbClimateType.Items2" xml:space="preserve">
<value>Partly cloudy</value>
</data>
<data name="CmbClimateType.Items3" xml:space="preserve">
<value>Rain</value>
</data>
<data name="CmbClimateType.Items4" xml:space="preserve">
<value>Thunderstorm</value>
</data>
<data name="CmbClimateType.Items5" xml:space="preserve">
<value>Snow</value>
</data>
<data name="CmbClimateType.Items6" xml:space="preserve">
<value>Fog</value>
<data name="CmbClimateType.Location" type="System.Drawing.Point, System.Drawing">
<value>66, 94</value>
</data>
<data name="LblClimateType.Size" type="System.Drawing.Size, System.Drawing">
<value>54, 17</value>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,158 @@
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;
}
}

View File

@@ -0,0 +1,184 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
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, "错误", 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, "错误", 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, "错误", 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);
}
}
}

View File

@@ -0,0 +1,151 @@
<?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="BtnSelectRecoursePath.Text" xml:space="preserve">
<value>Select</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>
<data name="LblLanguage.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 17</value>
</data>
<data name="LblLanguage.Text" xml:space="preserve">
<value>Language</value>
</data>
<data name="ChkTopMost.Size" type="System.Drawing.Size, System.Drawing">
<value>80, 21</value>
</data>
<data name="ChkTopMost.Text" xml:space="preserve">
<value>TopMost</value>
</data>
<data name="LblResourcesPath.Size" type="System.Drawing.Size, System.Drawing">
<value>294, 17</value>
</data>
<data name="LblResourcesPath.Text" xml:space="preserve">
<value>Please select a resource directory</value>
</data>
<data name="BtnSearch.Text" xml:space="preserve">
<value>Search</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Text Map Browser</value>
</data>
</root>

View File

@@ -0,0 +1,405 @@
<?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="&gt;&gt;TxtTextMapFilter.Name" xml:space="preserve">
<value>TxtTextMapFilter</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;TxtTextMapFilter.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;BtnSelectRecoursePath.Name" xml:space="preserve">
<value>BtnSelectRecoursePath</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;BtnSelectRecoursePath.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;CmbLanguage.Name" xml:space="preserve">
<value>CmbLanguage</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;CmbLanguage.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;LblLanguage.Name" xml:space="preserve">
<value>LblLanguage</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;LblLanguage.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;ChkTopMost.Name" xml:space="preserve">
<value>ChkTopMost</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;ChkTopMost.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;LblResourcesPath.Name" xml:space="preserve">
<value>LblResourcesPath</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;LblResourcesPath.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;BtnSearch.Name" xml:space="preserve">
<value>BtnSearch</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;BtnSearch.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;DGVTextMap.Name" xml:space="preserve">
<value>DGVTextMap</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;DGVTextMap.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;ColumnHash.Name" xml:space="preserve">
<value>ColumnHash</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;ColumnID.Name" xml:space="preserve">
<value>ColumnID</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;ColumnText.Name" xml:space="preserve">
<value>ColumnText</value>
</data>
<data name="&gt;&gt;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="&gt;&gt;$this.Name" xml:space="preserve">
<value>FormTextMapBrowser</value>
</data>
<data name="&gt;&gt;$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>

View File

@@ -1,46 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GrasscutterTools.Game
{
internal enum ClimateType
{
/// <summary>
/// 无
/// </summary>
None,
/// <summary>
/// 晴天
/// </summary>
Sunny,
/// <summary>
/// 多云
/// </summary>
Cloudy,
/// <summary>
/// 雨
/// </summary>
Rain,
/// <summary>
/// 雷暴
/// </summary>
Thunderstorm,
/// <summary>
/// 雪
/// </summary>
Snow,
/// <summary>
/// 雾
/// </summary>
Mist
}
}

View File

@@ -1,4 +1,9 @@
using System.Collections.Generic;
using System.Text;
using GrasscutterTools.Properties;
using Newtonsoft.Json;
namespace GrasscutterTools.Game
{
@@ -35,45 +40,51 @@ namespace GrasscutterTools.Game
public string Tip { get; set; }
}
public static List<Stat> Stats { get; set; }
public static Stat[] Stats { get; private set; }
static SetStatsCommand()
public static void InitStats()
{
Stats = new List<Stat>
{
new Stat("最大生命值", "maxhp", false),
new Stat("当前生命值", "hp", false),
new Stat("当前攻击力", "atk", false),
new Stat("基础攻击力", "atkb", false, "这似乎不会重新计算攻击力可能只对buff类有效。"),
new Stat("防御力", "def", false),
new Stat("元素精通", "em", false),
new Stat("元素充能效率", "er", true),
new Stat("暴击率", "crate", true),
new Stat("暴击伤害", "cdmg", true),
new Stat("伤害加成", "dmg", true, "这似乎在攻击后被重置"),
new Stat("风元素伤害加成", "eanemo", true),
new Stat("冰元素伤害加成", "ecryo", true),
new Stat("草元素伤害加成", "edendro", true),
new Stat("雷元素伤害加成", "eelectro", true),
new Stat("土元素伤害加成", "egeo", true),
new Stat("水元素伤害加成", "ehydro", true),
new Stat("火元素伤害加成", "epyro", true),
new Stat("物理伤害加成", "ephys", true),
new Stat("伤害减免", "resall", true, "这似乎在攻击后被重置"),
new Stat("风元素伤害减免", "resanemo", true),
new Stat("冰元素伤害减免", "rescryo", true),
new Stat("草元素伤害减免", "resdendro", true),
new Stat("雷元素伤害减免", "reselectro", true),
new Stat("土元素伤害减免", "resgeo", true),
new Stat("水元素伤害减免", "reshydro", true),
new Stat("火元素伤害减免", "respyro", true),
new Stat("物理伤害减免", "resphys", true),
new Stat("冷却缩减", "cdr", true),
new Stat("治疗加成", "heal", true),
new Stat("受治疗加成", "heali", true),
new Stat("护盾强效","shield", true),
new Stat("忽略防御", "defi", true),
};
var json = Encoding.UTF8.GetString(Resources.AvatarStats);
Stats = JsonConvert.DeserializeObject<Stat[]>(json);
}
//static SetStatsCommand()
//{
// Stats = new List<Stat>
// {
// new Stat("最大生命值", "maxhp", false),
// new Stat("当前生命值", "hp", false),
// new Stat("当前攻击力", "atk", false),
// new Stat("基础攻击力", "atkb", false, "这似乎不会重新计算攻击力可能只对buff类有效。"),
// new Stat("防御力", "def", false),
// new Stat("元素精通", "em", false),
// new Stat("元素充能效率", "er", true),
// new Stat("暴击率", "crate", true),
// new Stat("暴击伤害", "cdmg", true),
// new Stat("伤害加成", "dmg", true, "这似乎在攻击后被重置"),
// new Stat("风元素伤害加成", "eanemo", true),
// new Stat("冰元素伤害加成", "ecryo", true),
// new Stat("草元素伤害加成", "edendro", true),
// new Stat("雷元素伤害加成", "eelectro", true),
// new Stat("土元素伤害加成", "egeo", true),
// new Stat("水元素伤害加成", "ehydro", true),
// new Stat("火元素伤害加成", "epyro", true),
// new Stat("物理伤害加成", "ephys", true),
// new Stat("伤害减免", "resall", true, "这似乎在攻击后被重置"),
// new Stat("风元素伤害减免", "resanemo", true),
// new Stat("冰元素伤害减免", "rescryo", true),
// new Stat("草元素伤害减免", "resdendro", true),
// new Stat("雷元素伤害减免", "reselectro", true),
// new Stat("土元素伤害减免", "resgeo", true),
// new Stat("水元素伤害减免", "reshydro", true),
// new Stat("火元素伤害减免", "respyro", true),
// new Stat("物理伤害减免", "resphys", true),
// new Stat("冷却缩减", "cdr", true),
// new Stat("治疗加成", "heal", true),
// new Stat("受治疗加成", "heali", true),
// new Stat("护盾强效","shield", true),
// new Stat("忽略防御", "defi", true),
// };
//}
}
}

View File

@@ -0,0 +1,70 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace GrasscutterTools.Game
{
public class TextMapData
{
public TextMapData(string resourcesDirPath)
{
LoadManualTextMap(Path.Combine(resourcesDirPath, "ExcelBinOutput", "ManualTextMapConfigData.json"));
LoadTextMaps(Path.Combine(resourcesDirPath, "TextMap"));
}
public Dictionary<string, string> ManualTextMap;
public Dictionary<string, string> TextMap;
public string[] TextMapFilePaths;
public string[] TextMapFiles;
void LoadManualTextMap(string manualTextMapPath)
{
using (var fs = File.OpenRead(manualTextMapPath))
using (var sr = new StreamReader(fs))
using (var reader = new JsonTextReader(sr))
{
ManualTextMap = new Dictionary<string, string>();
while (reader.Read())
{
if (reader.TokenType == JsonToken.PropertyName && (string)reader.Value == "TextMapId")
{
var textMapId = reader.ReadAsString();
reader.Read();
ManualTextMap.Add(reader.ReadAsString(), textMapId);
}
}
}
}
void LoadTextMaps(string textMapDirPath)
{
TextMapFilePaths = Directory.GetFiles(textMapDirPath, "TextMap*.json");
if (TextMapFilePaths.Length == 0)
throw new FileNotFoundException("TextMap*.json Not Found");
TextMapFiles = TextMapFilePaths.Select(n => Path.GetFileNameWithoutExtension(n)).ToArray();
}
public void LoadTextMap(string textMapPath)
{
using (var fs = File.OpenRead(textMapPath))
using (var sr = new StreamReader(fs))
using (var reader = new JsonTextReader(sr))
{
TextMap = new Dictionary<string, string>();
while (reader.Read())
{
if (reader.TokenType == JsonToken.PropertyName)
{
TextMap.Add((string)reader.Value, reader.ReadAsString());
}
}
}
}
}
}

View File

@@ -1,5 +1,6 @@
<?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>
@@ -203,29 +204,41 @@
<Compile Include="FormMain.Designer.cs">
<DependentUpon>FormMain.cs</DependentUpon>
</Compile>
<Compile Include="Game\ClimateType.cs" />
<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="Game\Gacha\BannerType.cs" />
<Compile Include="Game\Gacha\GachaBanner.cs" />
<Compile Include="Game\GameData.cs" />
<Compile Include="Game\ItemMap.cs" />
<Compile Include="Game\SetStatsCommand.cs" />
<Compile Include="Game\TextMapData.cs" />
<Compile Include="MojoConsole\MojoConsole.cs" />
<Compile Include="MultiLanguage.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="FormGachaBannerEditor.en.resx">
<EmbeddedResource Include="FormGachaBannerEditor.en-us.resx">
<DependentUpon>FormGachaBannerEditor.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="FormGachaBannerEditor.resx">
<DependentUpon>FormGachaBannerEditor.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="FormMain.en.resx">
<EmbeddedResource Include="FormMain.en-us.resx">
<DependentUpon>FormMain.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="FormMain.resx">
<DependentUpon>FormMain.cs</DependentUpon>
</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>
@@ -256,6 +269,8 @@
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<None Include="Resources\en-us\AvatarStats.json" />
<None Include="Resources\zh-cn\AvatarStats.json" />
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
@@ -278,6 +293,7 @@
<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" />
@@ -297,14 +313,15 @@
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="..\packages\Fody.6.5.5\build\Fody.targets" Condition="Exists('..\packages\Fody.6.5.5\build\Fody.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Fody.6.5.5\build\Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Fody.6.5.5\build\Fody.targets'))" />
<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'))" />
</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')" />
</Project>

View File

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

View File

@@ -375,6 +375,25 @@ namespace GrasscutterTools.Properties {
}
}
/// <summary>
/// 查找 System.Byte[] 类型的本地化资源。
/// </summary>
internal static byte[] AvatarStats {
get {
object obj = ResourceManager.GetObject("AvatarStats", resourceCulture);
return ((byte[])(obj));
}
}
/// <summary>
/// 查找类似 无,晴天,多云,雨天,雷暴,雪天,雾天 的本地化字符串。
/// </summary>
internal static string ClimateType {
get {
return ResourceManager.GetString("ClimateType", resourceCulture);
}
}
/// <summary>
/// 查找类似 无敌
////godmode
@@ -441,6 +460,16 @@ namespace GrasscutterTools.Properties {
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap ImgHome {
get {
object obj = ResourceManager.GetObject("ImgHome", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
@@ -673,7 +702,14 @@ namespace GrasscutterTools.Properties {
}
}
/// <summary>
/// <summary>
/// 查找类似 1 : BigWorld_LevelStreaming
///2 : BigWorld_LevelStreaming
///3 : BigWorld_LevelStreaming
///4 : LostParadise_LevelStreaming
///5 : AbyssalPalace_LevelStreaming
///6 : TheChasm_LevelStreaming
///7 : MichiaeMatsuri_LevelStreaming
///20008: 深入狼之殿
///20008: 丘丘人大本营(test)
///20008: 丘丘人巢穴(test)
@@ -688,16 +724,7 @@ namespace GrasscutterTools.Properties {
///1019: 洞天云海地城玩法测试(test)
///1011: 角色战斗测试(test)
///50002: 低温关卡白盒(test)
///1001: 移动平台性能测试(test)
///50003: 战斗性能测试(test)
///50004: 电桩电源白盒(test)
///50027: 圣遗物新因子测试关卡3(test)
///50025: 圣遗物新因子测试关卡1(test)
///50026: 圣遗物新因子测试关卡2(test)
///1024: 黑夜循环地城(test)
///50009: 关卡玩法白盒CX(test)
///50010: 机关玩法白盒(test)
///50014: 怪物元素对抗地城(test)
///1001: 移动平台性能测试(test)
///50 [字符串的其余部分被截断]&quot;; 的本地化字符串。
/// </summary>
internal static string Scene {

View File

@@ -139,6 +139,12 @@
<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>
</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>
</data>
<data name="ClimateType" xml:space="preserve">
<value>None,Sunny,Partly cloudy,Rain,Thunderstorm,Snow,Fog</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>
</data>

View File

@@ -139,12 +139,21 @@
<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>
</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>
</data>
<data name="ClimateType" xml:space="preserve">
<value>无,晴天,多云,雨天,雷暴,雪天,雾天</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>
</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="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>

View File

@@ -58,5 +58,29 @@ namespace GrasscutterTools.Properties {
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;
}
}
}
}

View File

@@ -11,5 +11,11 @@
<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>
</Settings>
</SettingsFile>

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 KiB

View File

@@ -0,0 +1,194 @@
[
{
"Name": "MAX HP",
"ArgName": "maxhp",
"Percent": false,
"Tip": ""
},
{
"Name": "CUR HP",
"ArgName": "hp",
"Percent": false,
"Tip": ""
},
{
"Name": "CUR Attack",
"ArgName": "atk",
"Percent": false,
"Tip": ""
},
{
"Name": "Base Attack",
"ArgName": "atkb",
"Percent": false,
"Tip": "This doesn't seem to get used to recalculate ATK, so it's only useful for stuff like Bennett's buff."
},
{
"Name": "DEFENSE",
"ArgName": "def",
"Percent": false,
"Tip": ""
},
{
"Name": "ELEMENT MASTERY",
"ArgName": "em",
"Percent": false,
"Tip": ""
},
{
"Name": "CHARGE EFFICIENCY",
"ArgName": "er",
"Percent": true,
"Tip": ""
},
{
"Name": "CRITICAL",
"ArgName": "crate",
"Percent": true,
"Tip": ""
},
{
"Name": "CRITICAL HURT",
"ArgName": "cdmg",
"Percent": true,
"Tip": ""
},
{
"Name": "ADD HURT",
"ArgName": "dmg",
"Percent": true,
"Tip": "This seems to get reset after attacks"
},
{
"Name": "WIND ADD HURT",
"ArgName": "eanemo",
"Percent": true,
"Tip": ""
},
{
"Name": "ICE ADD HURT",
"ArgName": "ecryo",
"Percent": true,
"Tip": ""
},
{
"Name": "GRASS ADD HURT",
"ArgName": "edendro",
"Percent": true,
"Tip": ""
},
{
"Name": "ELEC ADD HURT",
"ArgName": "eelectro",
"Percent": true,
"Tip": ""
},
{
"Name": "ROCK ADD HURT",
"ArgName": "egeo",
"Percent": true,
"Tip": ""
},
{
"Name": "WATER ADD HURT",
"ArgName": "ehydro",
"Percent": true,
"Tip": ""
},
{
"Name": "FIRE ADD HURT",
"ArgName": "epyro",
"Percent": true,
"Tip": ""
},
{
"Name": "PHYSICAL ADD HURT",
"ArgName": "ephys",
"Percent": true,
"Tip": ""
},
{
"Name": "SUB HURT",
"ArgName": "resall",
"Percent": true,
"Tip": "This seems to get reset after attacks"
},
{
"Name": "WIND SUB HURT",
"ArgName": "resanemo",
"Percent": true,
"Tip": ""
},
{
"Name": "ICE SUB HURT",
"ArgName": "rescryo",
"Percent": true,
"Tip": ""
},
{
"Name": "GRASS SUB HURT",
"ArgName": "resdendro",
"Percent": true,
"Tip": ""
},
{
"Name": "ELEC SUB HURT",
"ArgName": "reselectro",
"Percent": true,
"Tip": ""
},
{
"Name": "ROCK SUB HURT",
"ArgName": "resgeo",
"Percent": true,
"Tip": ""
},
{
"Name": "WATER SUB HURT",
"ArgName": "reshydro",
"Percent": true,
"Tip": ""
},
{
"Name": "FIRE SUB HURT",
"ArgName": "respyro",
"Percent": true,
"Tip": ""
},
{
"Name": "PHYSICAL SUB HURT",
"ArgName": "resphys",
"Percent": true,
"Tip": ""
},
{
"Name": "SKILL CD MINUS RATIO",
"ArgName": "cdr",
"Percent": true,
"Tip": ""
},
{
"Name": "HEAL ADD",
"ArgName": "heal",
"Percent": true,
"Tip": ""
},
{
"Name": "HEALED ADD",
"ArgName": "heali",
"Percent": true,
"Tip": ""
},
{
"Name": "SHIELD COST MINUS RATIO",
"ArgName": "shield",
"Percent": true,
"Tip": ""
},
{
"Name": "DEFENCE IGNORE RATIO",
"ArgName": "defi",
"Percent": true,
"Tip": ""
}
]

View File

@@ -0,0 +1,194 @@
[
{
"Name": "最大生命值",
"ArgName": "maxhp",
"Percent": false,
"Tip": ""
},
{
"Name": "当前生命值",
"ArgName": "hp",
"Percent": false,
"Tip": ""
},
{
"Name": "当前攻击力",
"ArgName": "atk",
"Percent": false,
"Tip": ""
},
{
"Name": "基础攻击力",
"ArgName": "atkb",
"Percent": false,
"Tip": "这似乎不会重新计算攻击力可能只对buff类有效。"
},
{
"Name": "防御力",
"ArgName": "def",
"Percent": false,
"Tip": ""
},
{
"Name": "元素精通",
"ArgName": "em",
"Percent": false,
"Tip": ""
},
{
"Name": "元素充能效率",
"ArgName": "er",
"Percent": true,
"Tip": ""
},
{
"Name": "暴击率",
"ArgName": "crate",
"Percent": true,
"Tip": ""
},
{
"Name": "暴击伤害",
"ArgName": "cdmg",
"Percent": true,
"Tip": ""
},
{
"Name": "伤害加成",
"ArgName": "dmg",
"Percent": true,
"Tip": "这似乎在攻击后被重置"
},
{
"Name": "风元素伤害加成",
"ArgName": "eanemo",
"Percent": true,
"Tip": ""
},
{
"Name": "冰元素伤害加成",
"ArgName": "ecryo",
"Percent": true,
"Tip": ""
},
{
"Name": "草元素伤害加成",
"ArgName": "edendro",
"Percent": true,
"Tip": ""
},
{
"Name": "雷元素伤害加成",
"ArgName": "eelectro",
"Percent": true,
"Tip": ""
},
{
"Name": "土元素伤害加成",
"ArgName": "egeo",
"Percent": true,
"Tip": ""
},
{
"Name": "水元素伤害加成",
"ArgName": "ehydro",
"Percent": true,
"Tip": ""
},
{
"Name": "火元素伤害加成",
"ArgName": "epyro",
"Percent": true,
"Tip": ""
},
{
"Name": "物理伤害加成",
"ArgName": "ephys",
"Percent": true,
"Tip": ""
},
{
"Name": "伤害减免",
"ArgName": "resall",
"Percent": true,
"Tip": "这似乎在攻击后被重置"
},
{
"Name": "风元素伤害减免",
"ArgName": "resanemo",
"Percent": true,
"Tip": ""
},
{
"Name": "冰元素伤害减免",
"ArgName": "rescryo",
"Percent": true,
"Tip": ""
},
{
"Name": "草元素伤害减免",
"ArgName": "resdendro",
"Percent": true,
"Tip": ""
},
{
"Name": "雷元素伤害减免",
"ArgName": "reselectro",
"Percent": true,
"Tip": ""
},
{
"Name": "土元素伤害减免",
"ArgName": "resgeo",
"Percent": true,
"Tip": ""
},
{
"Name": "水元素伤害减免",
"ArgName": "reshydro",
"Percent": true,
"Tip": ""
},
{
"Name": "火元素伤害减免",
"ArgName": "respyro",
"Percent": true,
"Tip": ""
},
{
"Name": "物理伤害减免",
"ArgName": "resphys",
"Percent": true,
"Tip": ""
},
{
"Name": "冷却缩减",
"ArgName": "cdr",
"Percent": true,
"Tip": ""
},
{
"Name": "治疗加成",
"ArgName": "heal",
"Percent": true,
"Tip": ""
},
{
"Name": "受治疗加成",
"ArgName": "heali",
"Percent": true,
"Tip": ""
},
{
"Name": "护盾强效",
"ArgName": "shield",
"Percent": true,
"Tip": ""
},
{
"Name": "忽略防御",
"ArgName": "defi",
"Percent": true,
"Tip": ""
}
]

View File

@@ -1,11 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Costura.Fody" version="5.7.0" targetFramework="net48" developmentDependency="true" />
<package id="Fody" version="6.5.5" targetFramework="net48" developmentDependency="true" />
<package id="Fody" version="6.6.1" targetFramework="net48" developmentDependency="true" />
<package id="Microsoft.NETCore.Platforms" version="1.1.0" targetFramework="net48" />
<package id="Microsoft.Win32.Primitives" version="4.3.0" targetFramework="net48" />
<package id="NETStandard.Library" version="1.6.1" targetFramework="net48" />
<package id="Newtonsoft.Json" version="13.0.1" targetFramework="net452" />
<package id="Resource.Embedder" version="2.2.0" targetFramework="net48" />
<package id="System.AppContext" version="4.3.0" targetFramework="net48" />
<package id="System.Collections" version="4.3.0" targetFramework="net48" />
<package id="System.Collections.Concurrent" version="4.3.0" targetFramework="net48" />