diff --git a/Source/GrasscutterTools/Forms/FormMain.cs b/Source/GrasscutterTools/Forms/FormMain.cs index 3775c86..de3e586 100644 --- a/Source/GrasscutterTools/Forms/FormMain.cs +++ b/Source/GrasscutterTools/Forms/FormMain.cs @@ -767,12 +767,18 @@ namespace GrasscutterTools.Forms #region - 物品 Items - + /// + /// 初始化游戏物品列表 + /// private void InitGameItemList() { ListGameItems.Items.Clear(); ListGameItems.Items.AddRange(GameData.Items.Lines); } + /// + /// 物品列表过滤器文本改变时触发 + /// private void TxtGameItemFilter_TextChanged(object sender, EventArgs e) { var filter = TxtGameItemFilter.Text.Trim(); @@ -782,6 +788,10 @@ namespace GrasscutterTools.Forms ListGameItems.EndUpdate(); } + /// + /// 生成获取物品命令 + /// + /// 是否生成成功 private bool GenGiveItemCommand() { var name = ListGameItems.SelectedItem as string; @@ -807,6 +817,9 @@ namespace GrasscutterTools.Forms return false; } + /// + /// 获取物品输入改变时触发 + /// private void GiveItemsInputChanged(object sender, EventArgs e) { GenGiveItemCommand(); @@ -814,9 +827,19 @@ namespace GrasscutterTools.Forms #region -- 物品记录 -- + /// + /// 获取物品记录文件路径 + /// private readonly string GiveItemCommandsRecordPath = Path.Combine(Application.LocalUserAppDataPath, "GiveItemCommands.txt"); + + /// + /// 获取物品记录 + /// private List GiveItemCommands; + /// + /// 初始化获取物品记录 + /// private void InitGiveItemRecord() { if (File.Exists(GiveItemCommandsRecordPath)) @@ -830,11 +853,17 @@ namespace GrasscutterTools.Forms } } + /// + /// 保存获取物品记录 + /// private void SaveGiveItemRecord() { File.WriteAllText(GiveItemCommandsRecordPath, GetCommandsText(GiveItemCommands)); } + /// + /// 获取物品记录列表选中项改变时触发 + /// private void ListGiveItemLogs_SelectedIndexChanged(object sender, EventArgs e) { if (ListGiveItemLogs.SelectedIndex >= 0) @@ -848,6 +877,9 @@ namespace GrasscutterTools.Forms } } + /// + /// 点击保存记录按钮时触发 + /// private void BtnSaveGiveItemLog_Click(object sender, EventArgs e) { if (GenGiveItemCommand()) @@ -858,6 +890,9 @@ namespace GrasscutterTools.Forms } } + /// + /// 点击移除获取物品记录时触发 + /// private void BtnRemoveGiveItemLog_Click(object sender, EventArgs e) { if (ListGiveItemLogs.SelectedIndex >= 0) @@ -867,6 +902,9 @@ namespace GrasscutterTools.Forms } } + /// + /// 点击清空获取物品记录时触发 + /// private void LblClearGiveItemLogs_Click(object sender, EventArgs e) { if (MessageBox.Show(Resources.AskConfirmDeletion, Resources.Tips, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) @@ -882,29 +920,47 @@ namespace GrasscutterTools.Forms #region - 角色 Avatars - + /// + /// 初始化角色列表 + /// private void InitAvatars() { CmbAvatar.Items.Clear(); CmbAvatar.Items.AddRange(GameData.Avatars.Names); } + /// + /// 角色下拉框选中项改变时触发 + /// + /// + /// private void CmbAvatar_SelectedIndexChanged(object sender, EventArgs e) { // TODO: Load Avatar Image AvatarInputChanged(); } + /// + /// 角色等级输入框数值改变时触发 + /// private void NUDAvatarLevel_ValueChanged(object sender, EventArgs e) { AvatarInputChanged(); } + /// + /// 角色页面输入改变时触发 + /// private void AvatarInputChanged() { if (CmbAvatar.SelectedIndex >= 0) GenAvatar((int)NUDAvatarLevel.Value); } + /// + /// 获取角色命令 + /// + /// 等级 private void GenAvatar(int level) { if (Check(CommandVersion.V1_2_2)) @@ -919,6 +975,11 @@ namespace GrasscutterTools.Forms } } + /// + /// 点击获取所有角色按钮时触发 + /// + /// + /// private void BtnGiveAllChar_Click(object sender, EventArgs e) { var level = NUDAvatarLevel.Value; @@ -926,6 +987,9 @@ namespace GrasscutterTools.Forms SetCommand("/give avatars", $"lv{level} c{constellation}"); } + /// + /// 更新检查获取全部角色按钮是否启用 + /// private void ChangeBtnGiveAllChar() { BtnGiveAllChar.Enabled = Check(CommandVersion.V1_2_2); @@ -935,6 +999,9 @@ namespace GrasscutterTools.Forms #region - 生成 Spawns - + /// + /// 初始化实体列表 + /// private void InitEntityList() { RbEntityAnimal.Tag = GameData.Animals.Lines; @@ -943,6 +1010,10 @@ namespace GrasscutterTools.Forms RbEntityAnimal.Checked = true; LoadEntityList(); } + + /// + /// 加载实体列表 + /// private void LoadEntityList() { var rb = RbEntityAnimal.Checked ? RbEntityAnimal : @@ -957,6 +1028,9 @@ namespace GrasscutterTools.Forms } } + /// + /// 实体列表过滤器文本改变时触发 + /// private void TxtEntityFilter_TextChanged(object sender, EventArgs e) { var filter = TxtEntityFilter.Text.Trim(); @@ -970,6 +1044,10 @@ namespace GrasscutterTools.Forms ListEntity.EndUpdate(); } + /// + /// 生成召唤实体命令 + /// + /// 是否生成成功 private bool GenSpawnEntityCommand() { var selectedItem = ListEntity.SelectedItem as string; @@ -982,11 +1060,17 @@ namespace GrasscutterTools.Forms return false; } + /// + /// 生成页面输入改变时触发 + /// private void SpawnEntityInputChanged(object sender, EventArgs e) { GenSpawnEntityCommand(); } + /// + /// 列表过滤选项切换时触发 + /// private void RbEntity_CheckedChanged(object sender, EventArgs e) { LoadEntityList(); @@ -994,9 +1078,19 @@ namespace GrasscutterTools.Forms #region -- 生成记录 -- + /// + /// 生成命令记录文件路径 + /// private readonly string SpawnCommandsRecordPath = Path.Combine(Application.LocalUserAppDataPath, "SpawnCommands.txt"); + + /// + /// 生成命令记录 + /// private List SpawnCommands; + /// + /// 初始化生成记录 + /// private void InitSpawnRecord() { if (File.Exists(SpawnCommandsRecordPath)) @@ -1010,11 +1104,17 @@ namespace GrasscutterTools.Forms } } + /// + /// 保存生成记录 + /// private void SaveSpawnRecord() { File.WriteAllText(SpawnCommandsRecordPath, GetCommandsText(SpawnCommands)); } + /// + /// 生成记录列表选中项改变时触发 + /// private void ListSpawnLogs_SelectedIndexChanged(object sender, EventArgs e) { if (ListSpawnLogs.SelectedIndex >= 0) @@ -1028,6 +1128,9 @@ namespace GrasscutterTools.Forms } } + /// + /// 点击保存生成记录按钮时触发 + /// private void BtnSaveSpawnLog_Click(object sender, EventArgs e) { if (GenSpawnEntityCommand()) @@ -1038,6 +1141,9 @@ namespace GrasscutterTools.Forms } } + /// + /// 点击移除生成记录按钮时触发 + /// private void BtnRemoveSpawnLog_Click(object sender, EventArgs e) { if (ListSpawnLogs.SelectedIndex >= 0) @@ -1047,6 +1153,9 @@ namespace GrasscutterTools.Forms } } + /// + /// 点击清空生成记录按钮时触发 + /// private void LblClearSpawnLogs_Click(object sender, EventArgs e) { if (MessageBox.Show(Resources.AskConfirmDeletion, Resources.Tips, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) @@ -1062,6 +1171,9 @@ namespace GrasscutterTools.Forms #region - 场景 Scenes - + /// + /// 初始化场景列表 + /// private void InitScenes() { ListScenes.Items.Clear(); @@ -1071,6 +1183,9 @@ namespace GrasscutterTools.Forms CmbClimateType.Items.AddRange(Resources.ClimateType.Split(',')); } + /// + /// 场景列表过滤器输入项改变时触发 + /// private void TxtSceneFilter_TextChanged(object sender, EventArgs e) { var filter = TxtSceneFilter.Text.Trim(); @@ -1080,6 +1195,9 @@ namespace GrasscutterTools.Forms ListScenes.EndUpdate(); } + /// + /// 场景列表选中项改变时触发 + /// private void ListScenes_SelectedIndexChanged(object sender, EventArgs e) { if (ListScenes.SelectedIndex < 0) @@ -1102,7 +1220,14 @@ namespace GrasscutterTools.Forms } } + /// + /// 气候类型列表 + /// static readonly string[] climateTypes = { "none", "sunny", "cloudy", "rain", "thunderstorm", "snow", "mist" }; + + /// + /// 气候类型下拉框选中项改变时触发 + /// private void CmbClimateType_SelectedIndexChanged(object sender, EventArgs e) { if (CmbClimateType.SelectedIndex < 0) @@ -1113,6 +1238,9 @@ namespace GrasscutterTools.Forms SetCommand("/weather", $"0 {CmbClimateType.SelectedIndex}"); } + /// + /// 点击传送按钮时触发 + /// private void BtnTeleport_Click(object sender, EventArgs e) { string args = $"{NUDTpX.Value} {NUDTpY.Value} {NUDTpZ.Value}"; @@ -1125,6 +1253,9 @@ namespace GrasscutterTools.Forms #region - 数据 Stats - + /// + /// 初始化数据列表 + /// private void InitStatList() { LblStatTip.Text = ""; @@ -1133,6 +1264,9 @@ namespace GrasscutterTools.Forms CmbStat.Items.AddRange(SetStatsCommand.Stats.Select(s => s.Name).ToArray()); } + /// + /// 数据页面输入改变时触发 + /// private void SetStatsInputChanged(object sender, EventArgs e) { if (CmbStat.SelectedIndex < 0) @@ -1147,18 +1281,27 @@ namespace GrasscutterTools.Forms SetCommand("/setstats", $"{stat.ArgName} {NUDStat.Value}{(stat.Percent ? "%" : "")}"); } + /// + /// 点击锁定按钮时触发 + /// private void BtnLockStat_Click(object sender, EventArgs e) { var stat = SetStatsCommand.Stats[CmbStat.SelectedIndex]; SetCommand("/setstats", $"lock {stat.ArgName} {NUDStat.Value}{(stat.Percent ? "%" : "")}"); } + /// + /// 点击解锁按钮时触发 + /// private void BtnUnlockStat_Click(object sender, EventArgs e) { var stat = SetStatsCommand.Stats[CmbStat.SelectedIndex]; SetCommand("/setstats", $"unlock {stat.ArgName}"); } + /// + /// 点击设置技能按钮时触发 + /// private void LnkSetTalentClicked(object sender, LinkLabelLinkClickedEventArgs e) { SetCommand("/talent", $"{(sender as LinkLabel).Tag} {NUDTalentLevel.Value}"); @@ -1168,12 +1311,18 @@ namespace GrasscutterTools.Forms #region - 管理 Management - + /// + /// 初始化权限列表 + /// private void InitPermList() { CmbPerm.Items.Clear(); CmbPerm.Items.AddRange(Resources.Permissions.Split('\n').Select(l => l.Trim()).ToArray()); } + /// + /// 点击授权按钮时触发 + /// private void BtnPermClick(object sender, EventArgs e) { var uid = NUDPermUID.Value; @@ -1186,6 +1335,9 @@ namespace GrasscutterTools.Forms SetCommand($"/permission {(sender as Button).Tag} @{uid} {perm}"); } + /// + /// 账号相关按钮点击时触发,Tag包含子命令 + /// private void AccountButtonClicked(object sender, EventArgs e) { var username = TxtAccountUserName.Text.Trim(); @@ -1197,6 +1349,9 @@ namespace GrasscutterTools.Forms SetCommand($"/account {(sender as Button).Tag} {username} {(ChkAccountSetUid.Checked ? NUDAccountUid.Value.ToString() : "")}"); } + /// + /// 点击封禁按钮时触发 + /// private void BtnBan_Click(object sender, EventArgs e) { var uid = NUDBanUID.Value; @@ -1208,6 +1363,9 @@ namespace GrasscutterTools.Forms SetCommand(command); } + /// + /// 点击解封按钮时触发 + /// private void BtnUnban_Click(object sender, EventArgs e) { SetCommand($"/unban @{NUDBanUID.Value}"); @@ -1217,6 +1375,9 @@ namespace GrasscutterTools.Forms #region - 关于 About - + /// + /// 点击Github链接时触发 + /// private void LnkGithub_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { OpenURL("https://github.com/jie65535/GrasscutterCommandGenerator"); @@ -1226,6 +1387,10 @@ namespace GrasscutterTools.Forms #region - 命令 Command - + /// + /// 设置命令 + /// + /// 命令 private void SetCommand(string command) { TxtCommand.Text = command; @@ -1235,6 +1400,11 @@ namespace GrasscutterTools.Forms OnOpenCommandInvoke(); } + /// + /// 设置带参数的命令 + /// + /// 命令 + /// 参数 private void SetCommand(string command, string args) { if (ChkIncludeUID.Checked) @@ -1243,23 +1413,35 @@ namespace GrasscutterTools.Forms SetCommand($"{command} {args.Trim()}"); } + /// + /// 点击复制按钮时触发 + /// private async void BtnCopy_Click(object sender, EventArgs e) { CopyCommand(); await ButtonComplete(BtnCopy); } + /// + /// 复制命令 + /// private void CopyCommand() { if (!string.IsNullOrEmpty(TxtCommand.Text)) Clipboard.SetText(TxtCommand.Text); } + /// + /// 开放命令执行时触发 + /// private void OnOpenCommandInvoke() { BtnInvokeOpenCommand_Click(BtnInvokeOpenCommand, EventArgs.Empty); } + /// + /// 点击执行开放命令按钮时触发 + /// private async void BtnInvokeOpenCommand_Click(object sender, EventArgs e) { if (!BtnInvokeOpenCommand.Enabled) return; @@ -1271,6 +1453,11 @@ namespace GrasscutterTools.Forms await RunCommands(TxtCommand.Text); } + /// + /// 运行命令 + /// + /// 命令列表 + /// 是否执行成功 private async Task RunCommands(params string[] commands) { if (OC == null || !OC.CanInvoke) @@ -1319,8 +1506,19 @@ namespace GrasscutterTools.Forms return true; } + /// + /// 命令日志最小高度 + /// private const int TxtCommandRunLogMinHeight = 150; + + /// + /// 命令日志文本框 + /// private TextBox TxtCommandRunLog; + + /// + /// 展开命令记录(可重入) + /// private void ExpandCommandRunLog() { if (GrpCommand.Height < TxtCommandRunLogMinHeight) @@ -1356,6 +1554,11 @@ namespace GrasscutterTools.Forms #region - 通用 General - + /// + /// 播放按钮完成动画 + /// + /// + /// private async Task ButtonComplete(Button btn) { var t = btn.Text; @@ -1366,26 +1569,50 @@ namespace GrasscutterTools.Forms btn.Enabled = true; } + /// + /// 窗口按键按下时触发 + /// private void FormMain_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.F5) { + // F5 为执行命令 OnOpenCommandInvoke(); } } + /// + /// 提示气泡对象 + /// private readonly ToolTip TTip = new ToolTip(); + + /// + /// 在指定控件上显示提示气泡 + /// + /// 消息 + /// 控件 private void ShowTip(string message, Control control) { TTip.Show(message, control, 0, control.Size.Height, 3000); } + /// + /// 检查命令版本 + /// + /// 最低要求版本 + /// 当前版本是否满足 private bool Check(Version version) => CommandVersion.Current >= version; #endregion - 通用 General - #region - 命令记录 Command Logs - + /// + /// 获取命令记录 + /// (反序列化) + /// + /// 命令记录文本(示例:"标签1\n命令1\n标签2\n命令2...") + /// 命令列表 private List GetCommands(string commandsText) { var lines = commandsText.Split('\n'); @@ -1395,6 +1622,12 @@ namespace GrasscutterTools.Forms return commands; } + /// + /// 获取命令记录文本 + /// (序列化) + /// + /// 命令列表 + /// 命令记录文本(示例:"标签1\n命令1\n标签2\n命令2...") private string GetCommandsText(List commands) { StringBuilder builder = new StringBuilder(); @@ -1410,8 +1643,14 @@ namespace GrasscutterTools.Forms #region - 远程 Remote - + /// + /// 开放命令接口 + /// private OpenCommandAPI OC; + /// + /// 初始化开放命令 + /// private void InitOpenCommand() { NUDRemotePlayerId.Value = Settings.Default.RemoteUid; @@ -1460,6 +1699,9 @@ namespace GrasscutterTools.Forms } } + /// + /// 保存开放命令参数 + /// private void SaveOpenCommand() { Settings.Default.RemoteUid = NUDRemotePlayerId.Value; @@ -1467,6 +1709,10 @@ namespace GrasscutterTools.Forms Settings.Default.TokenCache = OC?.Token; } + /// + /// 更新服务器状态 + /// + /// 主机地址 private async Task UpdateServerStatus(string host) { var status = await DispatchServerAPI.QueryServerStatus(host); @@ -1476,7 +1722,10 @@ namespace GrasscutterTools.Forms else LblPlayerCount.Text = status.PlayerCount.ToString(); } - + + /// + /// 点击查询服务器状态按钮时触发 + /// private async void BtnQueryServerStatus_Click(object sender, EventArgs e) { var btn = sender as Button; @@ -1519,6 +1768,9 @@ namespace GrasscutterTools.Forms } } + /// + /// 点击发送校验码按钮时触发 + /// private async void BtnSendVerificationCode_Click(object sender, EventArgs e) { var btn = sender as Button; @@ -1550,6 +1802,11 @@ namespace GrasscutterTools.Forms } } + /// + /// 点击连接到开放命令按钮时触发 + /// + /// + /// private async void BtnConnectOpenCommand_Click(object sender, EventArgs e) { var btn = sender as Button; @@ -1573,6 +1830,9 @@ namespace GrasscutterTools.Forms } } + /// + /// 点击控制台连接按钮时触发 + /// private void BtnConsoleConnect_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(TxtToken.Text)) @@ -1584,26 +1844,41 @@ namespace GrasscutterTools.Forms BtnConnectOpenCommand_Click(sender, e); } + /// + /// 点击开放命令标签时触发 + /// private void LnkOpenCommandLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { OpenURL("https://github.com/jie65535/gc-opencommand-plugin"); } + /// + /// 点击帮助连接标签时触发 + /// private void LnkRCHelp_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { MessageBox.Show(Resources.OpenCommandHelp, Resources.Help, MessageBoxButtons.OK, MessageBoxIcon.Information); } + /// + /// 点击库存扫描链接标签时触发 + /// private void LnkInventoryKamera_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { OpenURL("https://github.com/Andrewthe13th/Inventory_Kamera"); } + /// + /// 点击GOOD帮助链接标签时触发 + /// private void LnkGOODHelp_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { OpenURL("https://frzyc.github.io/genshin-optimizer/#/doc"); } + /// + /// 点击链接帮助标签时触发 + /// private void LnkLinks_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { var links = new List @@ -1620,6 +1895,10 @@ namespace GrasscutterTools.Forms MessageBox.Show(string.Join("\n", links), "Links", MessageBoxButtons.OK, MessageBoxIcon.Information); } + /// + /// 使用浏览器打开网址 + /// + /// 网址 private void OpenURL(string url) { try @@ -1637,6 +1916,9 @@ namespace GrasscutterTools.Forms #region - GOOD - + /// + /// 点击GOOD导入存档按钮时触发 + /// async private void ButtonOpenGOODImport_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog1 = new OpenFileDialog @@ -1761,11 +2043,17 @@ namespace GrasscutterTools.Forms #region - 任务 Quests - + /// + /// 初始化任务列表 + /// private void InitQuestList() { QuestFilterChanged(null, EventArgs.Empty); } + /// + /// 任务列表过滤器文本改变时触发 + /// private void QuestFilterChanged(object sender, EventArgs e) { ListQuest.BeginUpdate(); @@ -1785,6 +2073,9 @@ namespace GrasscutterTools.Forms ListQuest.EndUpdate(); } + /// + /// 任务相关按钮点击时触发(Tag带子命令) + /// private void QuestButsClicked(object sender, EventArgs e) { if (ListQuest.SelectedIndex == -1)