mirror of
https://github.com/jie65535/GrasscutterCommandGenerator.git
synced 2025-10-23 20:29:45 +08:00
Separate pages
This commit is contained in:
248
Source/GrasscutterTools/Pages/PageGiveArtifact.cs
Normal file
248
Source/GrasscutterTools/Pages/PageGiveArtifact.cs
Normal file
@@ -0,0 +1,248 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Windows.Forms;
|
||||
|
||||
using GrasscutterTools.Game;
|
||||
using GrasscutterTools.Properties;
|
||||
using GrasscutterTools.Utils;
|
||||
|
||||
namespace GrasscutterTools.Pages
|
||||
{
|
||||
internal partial class PageGiveArtifact : BasePage
|
||||
{
|
||||
public PageGiveArtifact()
|
||||
{
|
||||
InitializeComponent();
|
||||
if (DesignMode) return;
|
||||
|
||||
CommandVersion.VersionChanged += (_, _1) => ChangeTPArtifact();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 副词条集
|
||||
/// </summary>
|
||||
private Dictionary<string, List<KeyValuePair<int, string>>> subAttrs;
|
||||
|
||||
/// <summary>
|
||||
/// 部位标签集
|
||||
/// </summary>
|
||||
private string[] ArtifactPartLabels;
|
||||
|
||||
/// <summary>
|
||||
/// 初始化圣遗物列表
|
||||
/// </summary>
|
||||
public override void OnLoad()
|
||||
{
|
||||
CmbArtifactSet.Items.Clear();
|
||||
CmbArtifactSet.Items.AddRange(GameData.ArtifactCats.Names);
|
||||
CmbMainAttribution.Items.Clear();
|
||||
CmbMainAttribution.Items.AddRange(GameData.ArtifactMainAttribution.Lines);
|
||||
|
||||
subAttrs = new Dictionary<string, List<KeyValuePair<int, string>>>();
|
||||
for (int i = 0; i < GameData.ArtifactSubAttribution.Count; i++)
|
||||
{
|
||||
var name = GameData.ArtifactSubAttribution.Names[i];
|
||||
var pi = name.IndexOf('+');
|
||||
var prefix = name.Substring(0, pi);
|
||||
var value = name.Substring(pi);
|
||||
if (!subAttrs.TryGetValue(prefix, out List<KeyValuePair<int, string>> list))
|
||||
{
|
||||
list = new List<KeyValuePair<int, string>>();
|
||||
subAttrs[prefix] = list;
|
||||
}
|
||||
list.Add(new KeyValuePair<int, string>(GameData.ArtifactSubAttribution.Ids[i], value));
|
||||
}
|
||||
CmbSubAttribution.Items.Clear();
|
||||
CmbSubAttribution.Items.AddRange(subAttrs.Keys.ToArray());
|
||||
|
||||
ArtifactPartLabels = Resources.ArtifactPartLabels.Split(',');
|
||||
|
||||
ChangeTPArtifact();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 圣遗物套装下拉框选中项改变时触发
|
||||
/// </summary>
|
||||
private void CmbArtifactSet_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (CmbArtifactSet.SelectedIndex < 0)
|
||||
return;
|
||||
var setId = GameData.ArtifactCats.Ids[CmbArtifactSet.SelectedIndex];
|
||||
var beginIndex = Array.FindIndex(GameData.Artifacts.Ids, id => id / 1000 == setId);
|
||||
var endIndex = Array.FindLastIndex(GameData.Artifacts.Ids, id => id / 1000 == setId);
|
||||
|
||||
// 限制星级输入范围
|
||||
NUDArtifactStars.Minimum = GameData.Artifacts.Ids[beginIndex] / 100 % 10;
|
||||
NUDArtifactStars.Maximum = GameData.Artifacts.Ids[endIndex] / 100 % 10;
|
||||
|
||||
var parts = GameData.Artifacts.Names.Skip(beginIndex).Take(endIndex - beginIndex + 1).Distinct().ToArray();
|
||||
var i = CmbArtifactPart.SelectedIndex;
|
||||
CmbArtifactPart.Items.Clear();
|
||||
CmbArtifactPart.Items.AddRange(parts);
|
||||
if (i < parts.Length) // 重新选中
|
||||
CmbArtifactPart.SelectedIndex = i;
|
||||
|
||||
ArtifactInputChanged(sender, e);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 圣遗物部件选中项改变时触发
|
||||
/// </summary>
|
||||
private void CmbArtifactPart_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (CmbArtifactPart.SelectedIndex < 0)
|
||||
{
|
||||
LblArtifactName.Text = "";
|
||||
return;
|
||||
}
|
||||
var name = CmbArtifactPart.SelectedItem as string;
|
||||
var id = GameData.Artifacts.Ids[Array.IndexOf(GameData.Artifacts.Names, name)];
|
||||
var pardIndex = id / 10 % 10 - 1;
|
||||
if (pardIndex < ArtifactPartLabels?.Length)
|
||||
LblArtifactName.Text = ArtifactPartLabels[pardIndex];
|
||||
else
|
||||
LblArtifactName.Text = "";
|
||||
ArtifactInputChanged(sender, e);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 圣遗物页面输入改变时调用
|
||||
/// </summary>
|
||||
private void ArtifactInputChanged(object sender, EventArgs e)
|
||||
{
|
||||
// 圣遗物ID五位数,ABCDE,其中AB是圣遗物类型(魔女/水/风套......)
|
||||
// C是星级(5就是五星),D是圣遗物部位,E是初始词条数量
|
||||
if (CmbArtifactSet.SelectedIndex < 0 || CmbArtifactPart.SelectedIndex < 0)
|
||||
return;
|
||||
//var setId = GameData.ArtifactCats.Ids[CmbArtifactSet.SelectedIndex];
|
||||
//var part = CmbArtifactPart.SelectedIndex+1;
|
||||
//var index = Array.FindLastIndex(
|
||||
// GameData.Artifacts.Ids,
|
||||
// it => it / 1000 == setId // 套装ID
|
||||
// //&& it / 100 % 10 == NUDArtifactStars.Value // 星级
|
||||
// && it / 10 % 10 == part // 部位
|
||||
// );
|
||||
var name = CmbArtifactPart.SelectedItem as string;
|
||||
var id = GameData.Artifacts.Ids[Array.LastIndexOf(GameData.Artifacts.Names, name)];
|
||||
id = id / 1000 * 1000 + (int)NUDArtifactStars.Value * 100 + id % 100;
|
||||
if (CmbMainAttribution.SelectedIndex < 0)
|
||||
{
|
||||
if (CommandVersion.Check(CommandVersion.V1_2_2))
|
||||
SetCommand("/give", $"{id} lv{NUDArtifactLevel.Value}");
|
||||
else
|
||||
SetCommand("/giveart", $"{id} {NUDArtifactLevel.Value}");
|
||||
}
|
||||
else
|
||||
{
|
||||
var t = CmbMainAttribution.SelectedItem as string;
|
||||
var mainAttr = ItemMap.ToId(t);
|
||||
|
||||
var subAttrs = "";
|
||||
if (ListSubAttributionChecked.Items.Count > 0)
|
||||
{
|
||||
var subAttrDir = new Dictionary<int, int>(ListSubAttributionChecked.Items.Count);
|
||||
foreach (string item in ListSubAttributionChecked.Items)
|
||||
{
|
||||
var subId = ItemMap.ToId(item);
|
||||
var times = int.Parse(item.Substring(item.LastIndexOf('x') + 1));
|
||||
if (subAttrDir.ContainsKey(subId))
|
||||
subAttrDir[subId] += times;
|
||||
else
|
||||
subAttrDir[subId] = times;
|
||||
}
|
||||
|
||||
foreach (var kv in subAttrDir)
|
||||
{
|
||||
if (kv.Value > 1)
|
||||
subAttrs += $"{kv.Key},{kv.Value} ";
|
||||
else
|
||||
subAttrs += $"{kv.Key} ";
|
||||
}
|
||||
}
|
||||
if (CommandVersion.Check(CommandVersion.V1_2_2))
|
||||
SetCommand("/give", $"{id} lv{NUDArtifactLevel.Value} {mainAttr} {subAttrs}");
|
||||
else
|
||||
SetCommand("/giveart", $"{id} {mainAttr} {subAttrs}{NUDArtifactLevel.Value}");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 副词条下拉框选中项改变时触发
|
||||
/// </summary>
|
||||
private void CmbSubAttribution_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
CmbSubAttributionValue.Items.Clear();
|
||||
if (CmbSubAttribution.SelectedIndex >= 0)
|
||||
{
|
||||
CmbSubAttributionValue.Items.AddRange(subAttrs[CmbSubAttribution.SelectedItem as string].Select(kv => kv.Value).ToArray());
|
||||
CmbSubAttributionValue.SelectedIndex = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 点击添加副词条按钮时触发
|
||||
/// </summary>
|
||||
private void BtnAddSubAttr_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (CmbSubAttribution.SelectedIndex >= 0 && CmbSubAttributionValue.SelectedIndex >= 0)
|
||||
{
|
||||
var name = CmbSubAttribution.SelectedItem as string;
|
||||
var kv = subAttrs[name][CmbSubAttributionValue.SelectedIndex];
|
||||
ListSubAttributionChecked.Items.Add($"{kv.Key}:{name}{kv.Value} x{NUDSubAttributionTimes.Value}");
|
||||
ArtifactInputChanged(null, EventArgs.Empty);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 已添加的副词条列表选中项改变时触发
|
||||
/// </summary>
|
||||
private void ListSubAttributionChecked_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (ListSubAttributionChecked.SelectedIndex >= 0)
|
||||
{
|
||||
ListSubAttributionChecked.Items.RemoveAt(ListSubAttributionChecked.SelectedIndex);
|
||||
ListSubAttributionChecked.ClearSelected();
|
||||
ArtifactInputChanged(null, EventArgs.Empty);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 清除词条链接标签点击时触发
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void LblClearSubAttrCheckedList_Click(object sender, EventArgs e)
|
||||
{
|
||||
CmbMainAttribution.SelectedIndex = -1;
|
||||
ListSubAttributionChecked.Items.Clear();
|
||||
ArtifactInputChanged(null, EventArgs.Empty);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 改变圣遗物等级输入范围(旧版本范围是1-21)
|
||||
/// </summary>
|
||||
private void ChangeTPArtifact()
|
||||
{
|
||||
if (CommandVersion.Check(CommandVersion.V1_2_2))
|
||||
{
|
||||
NUDArtifactLevel.Minimum = 0;
|
||||
NUDArtifactLevel.Maximum = 20;
|
||||
}
|
||||
else
|
||||
{
|
||||
NUDArtifactLevel.Minimum = 1;
|
||||
NUDArtifactLevel.Maximum = 21;
|
||||
}
|
||||
LblArtifactLevelTip.Text = $"[{NUDArtifactLevel.Minimum}-{NUDArtifactLevel.Maximum}]";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 点击CharacterBuilder链接标签时触发
|
||||
/// </summary>
|
||||
private void LnkCharacterBuilder_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
||||
{
|
||||
UIUtil.OpenURL("https://github.com/Penelopeep/CharacterBuilder");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user