2024-10-30 20:31:15 +08:00

537 lines
20 KiB
C#

using Milimoe.FunGame.Core.Api.Utility;
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
namespace Milimoe.FunGame.Testing.Desktop.Solutions
{
public partial class EntityEditor : Form
{
private static GameModuleLoader? GameModuleLoader { get; set; } = null;
private CharacterManager CharacterManager { get; } = new();
private SkillManager SkillManager { get; } = new();
private ItemManager ItemManager { get; } = new();
private SetConfigName ConfigSettings { get; }
private bool CheckSelectedIndex => .SelectedIndex != -1 && .SelectedIndex < .Items.Count;
private int nowClick = 0;
public EntityEditor()
{
InitializeComponent();
ConfigSettings = new(CharacterManager, SkillManager, ItemManager);
GameModuleLoader = LoadModules();
CharacterManager.Load();
SkillManager.Load();
ItemManager.Load();
foreach (Character character in CharacterManager.LoadedCharacters.Values)
{
Skill[] skills = [.. character.Skills];
for (int i = 0; i < skills.Length; i++)
{
Skill skill = skills[i];
character.Skills.Remove(skill);
Skill? s = (skill.Id, skill.Name, skill.SkillType);
if (s != null)
{
skill = s.Copy();
skill.Character = character;
}
character.Skills.Add(skill);
}
if (character.EquipSlot.MagicCardPack != null)
{
Item item = character.EquipSlot.MagicCardPack;
Item? i = (item.Id, item.Name, item.ItemType);
if (i != null)
{
item.SetPropertyToItemModuleNew(i);
item = i.Copy();
character.Equip(item);
}
}
if (character.EquipSlot.Weapon != null)
{
Item item = character.EquipSlot.Weapon;
Item? i = (item.Id, item.Name, item.ItemType);
if (i != null)
{
item.SetPropertyToItemModuleNew(i);
item = i.Copy();
character.Equip(item);
}
}
if (character.EquipSlot.Armor != null)
{
Item item = character.EquipSlot.Armor;
Item? i = (item.Id, item.Name, item.ItemType);
if (i != null)
{
item.SetPropertyToItemModuleNew(i);
item = i.Copy();
character.Equip(item);
}
}
if (character.EquipSlot.Shoes != null)
{
Item item = character.EquipSlot.Shoes;
Item? i = (item.Id, item.Name, item.ItemType);
if (i != null)
{
item.SetPropertyToItemModuleNew(i);
item = i.Copy();
character.Equip(item);
}
}
if (character.EquipSlot.Accessory1 != null)
{
Item item = character.EquipSlot.Accessory1;
Item? i = (item.Id, item.Name, item.ItemType);
if (i != null)
{
item.SetPropertyToItemModuleNew(i);
item = i.Copy();
character.Equip(item);
}
}
if (character.EquipSlot.Accessory2 != null)
{
Item item = character.EquipSlot.Accessory2;
Item? i = (item.Id, item.Name, item.ItemType);
if (i != null)
{
item.SetPropertyToItemModuleNew(i);
item = i.Copy();
character.Equip(item);
}
}
Item[] items = [.. character.Items];
for (int j = 0; j < items.Length; j++)
{
Item item = items[j];
character.Items.Remove(item);
Item? i = (item.Id, item.Name, item.ItemType);
if (i != null)
{
item.SetPropertyToItemModuleNew(i);
item = i.Copy();
item.Character = character;
}
}
}
();
();
();
}
private void ()
{
.Items.Clear();
foreach (string name in CharacterManager.LoadedCharacters.Keys)
{
.Items.Add(CharacterManager.LoadedCharacters[name]);
}
nowClick = 0;
}
private void ()
{
.Items.Clear();
foreach (string name in SkillManager.LoadedSkills.OrderBy(kv => kv.Value.Id).Select(kv => kv.Key))
{
.Items.Add(GetSkillDisplayName(SkillManager, name));
}
nowClick = 1;
}
private void ()
{
.Items.Clear();
foreach (string name in ItemManager.LoadedItems.OrderBy(kv => kv.Value.Id).Select(kv => kv.Key))
{
.Items.Add(GetItemDisplayName(ItemManager, name));
}
nowClick = 2;
}
private void _Click(object sender, EventArgs e)
{
if (nowClick != 0)
{
();
}
}
private void _Click(object sender, EventArgs e)
{
if (nowClick != 1)
{
();
}
}
private void _Click(object sender, EventArgs e)
{
if (nowClick != 2)
{
();
}
}
private void _Click(object sender, EventArgs e)
{
CharacterManager.Save();
SkillManager.Save();
ItemManager.Save();
MessageBox.Show("保存成功!");
}
private void _Click(object sender, EventArgs e)
{
CharacterManager.Save();
MessageBox.Show("保存成功!");
}
private void _Click(object sender, EventArgs e)
{
SkillManager.Save();
MessageBox.Show("保存成功!");
}
private void _Click(object sender, EventArgs e)
{
ItemManager.Save();
MessageBox.Show("保存成功!");
}
public static Skill? (long id, string name, SkillType type)
{
//if (GameModuleLoader != null)
//{
// foreach (SkillModule module in GameModuleLoader.Skills.Values)
// {
// Skill? s = module.GetSkill(id, name, type);
// if (s != null)
// {
// return s;
// }
// }
//}
return null;
}
public static Item? (long id, string name, ItemType type)
{
//if (GameModuleLoader != null)
//{
// foreach (ItemModule module in GameModuleLoader.Items.Values)
// {
// Item? i = module.GetItem(id, name, type);
// if (i != null)
// {
// return i;
// }
// }
//}
return null;
}
private void _MouseDoubleClick(object sender, EventArgs e)
{
if (CheckSelectedIndex)
{
ShowDetail d = new(CharacterManager, SkillManager, ItemManager);
switch (nowClick)
{
case 0:
Character? character = CharacterManager.LoadedCharacters.Values.Where(c => c.ToString() == .Items[.SelectedIndex].ToString()).FirstOrDefault();
d.SetText(nowClick, character, character?.GetInfo() ?? "");
d.ShowDialog();
break;
case 1:
Skill? s = SkillManager.LoadedSkills.Where(kv => GetSkillDisplayName(SkillManager, kv.Key) == .Items[.SelectedIndex].ToString()).Select(kv => kv.Value).FirstOrDefault();
if (s != null)
{
Skill? s2 = (s.Id, s.Name, s.SkillType);
if (s2 != null)
{
s = s2;
}
d.SetText(nowClick, s, s.ToString() ?? "");
d.ShowDialog();
}
break;
case 2:
Item? i = ItemManager.LoadedItems.Where(kv => GetItemDisplayName(ItemManager, kv.Key) == .Items[.SelectedIndex].ToString()).Select(kv => kv.Value).FirstOrDefault();
if (i != null)
{
Item? i2 = (i.Id, i.Name, i.ItemType);
if (i2 != null)
{
i.SetPropertyToItemModuleNew(i2);
i = i2;
}
d.SetText(nowClick, i, i.ToString() ?? "");
d.ShowDialog();
}
break;
default:
break;
}
d.Dispose();
}
}
private void ()
{
if (SkillManager.LoadedSkills.Count != 0)
{
ShowList l = new();
l.AddListItem(SkillManager.LoadedSkills.OrderBy(kv => kv.Value.Id).Where(kv => kv.Value.SkillType != SkillType.Item).Select(kv => GetSkillDisplayName(SkillManager, kv.Key)).ToArray());
l.ShowDialog();
string selected = l.SelectItem;
Character? c = CharacterManager.LoadedCharacters.Values.Where(c => c.ToString() == .Items[.SelectedIndex].ToString()).FirstOrDefault();
Skill? s = SkillManager.LoadedSkills.Where(kv => GetSkillDisplayName(SkillManager, kv.Key) == selected).Select(kv => kv.Value).FirstOrDefault();
if (c != null && s != null)
{
Skill? s2 = (s.Id, s.Name, s.SkillType);
if (s2 != null)
{
s = s2;
}
s.Character = c;
c.Skills.Add(s);
}
}
else
{
MessageBox.Show("技能列表为空!");
}
}
private void ()
{
if (ItemManager.LoadedItems.Count != 0)
{
ShowList l = new();
l.AddListItem(ItemManager.LoadedItems.OrderBy(kv => kv.Value.Id).Select(kv => GetItemDisplayName(ItemManager, kv.Key)).ToArray());
l.ShowDialog();
string selected = l.SelectItem;
Character? c = CharacterManager.LoadedCharacters.Values.Where(c => c.ToString() == .Items[.SelectedIndex].ToString()).FirstOrDefault();
Item? i = ItemManager.LoadedItems.Where(kv => GetItemDisplayName(ItemManager, kv.Key) == selected).Select(kv => kv.Value).FirstOrDefault();
if (c != null && i != null)
{
if (i.Equipable)
{
Item? i2 = (i.Id, i.Name, i.ItemType);
if (i2 != null)
{
i.SetPropertyToItemModuleNew(i2);
i = i2;
}
if (i.Equipable) c.Equip(i);
else c.Items.Add(i);
}
else c.Items.Add(i);
}
}
else
{
MessageBox.Show("物品列表为空!");
}
}
private void ()
{
Character? c = CharacterManager.LoadedCharacters.Values.Where(c => c.ToString() == .Items[.SelectedIndex].ToString()).FirstOrDefault();
if (c != null)
{
if (c.Skills.Count != 0)
{
ShowList l = new();
l.AddListItem(c.Skills.Select(s => s.GetIdName()).ToArray());
l.ShowDialog();
string selected = l.SelectItem;
Skill? s = c.Skills.Where(s => s.GetIdName() == selected).FirstOrDefault();
if (s != null) c.Skills.Remove(s);
}
else
{
MessageBox.Show("技能列表为空!");
}
}
}
private void ()
{
//Character? c = CharacterManager.LoadedCharacters.Values.Where(c => c.ToString() == 实际列表.Items[实际列表.SelectedIndex].ToString()).FirstOrDefault();
//if (c != null)
//{
// if (c.Items.Count != 0 || c.EquipSlot.Any())
// {
// ShowList l = new();
// l.AddListItem(c.Items.Select(s => s.GetIdName()).ToArray());
// l.ShowDialog();
// string selected = l.SelectItem;
// Item? i = c.Items.Where(i => i.GetIdName() == selected).FirstOrDefault();
// if (i != null)
// {
// if (i.Equipable) c.UnEquip(c.EquipSlot.GetEquipItemToSlot(i));
// else c.Items.Remove(i);
// }
// }
// else
// {
// MessageBox.Show("物品列表为空!");
// }
//}
}
private void _Click(object sender, EventArgs e)
{
if (CheckSelectedIndex && nowClick == 0)
{
();
}
}
private void _Click(object sender, EventArgs e)
{
if (CheckSelectedIndex && nowClick == 0)
{
();
}
}
private void _Click(object sender, EventArgs e)
{
if (CheckSelectedIndex && nowClick == 0)
{
();
}
}
private void _Click(object sender, EventArgs e)
{
if (CheckSelectedIndex && nowClick == 0)
{
();
}
}
private void _Click(object sender, EventArgs e)
{
CharacterManager.OpenCreator();
();
}
private void _Click(object sender, EventArgs e)
{
SkillManager.OpenCreator();
();
}
private void _Click(object sender, EventArgs e)
{
ItemManager.OpenCreator();
();
}
private void _Click(object sender, EventArgs e)
{
if (CheckSelectedIndex && nowClick == 0 && MessageBox.Show("是否删除", "删除", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
string name = CharacterManager.LoadedCharacters.Where(ky => ky.Value.ToString() == .Items[.SelectedIndex].ToString()).FirstOrDefault().Key ?? "";
if (CharacterManager.Remove(name))
{
MessageBox.Show("删除成功!");
();
}
else
{
MessageBox.Show("删除失败!");
}
}
}
private void _Click(object sender, EventArgs e)
{
if (CheckSelectedIndex && nowClick == 1 && MessageBox.Show("是否删除", "删除", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
string name = SkillManager.LoadedSkills.Where(kv => GetSkillDisplayName(SkillManager, kv.Key) == .Items[.SelectedIndex].ToString()).FirstOrDefault().Key ?? "";
if (SkillManager.Remove(name))
{
MessageBox.Show("删除成功!");
();
}
else
{
MessageBox.Show("删除失败!");
}
}
}
private void _Click(object sender, EventArgs e)
{
if (CheckSelectedIndex && nowClick == 2 && MessageBox.Show("是否删除", "删除", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
string name = ItemManager.LoadedItems.Where(kv => GetItemDisplayName(ItemManager, kv.Key) == .Items[.SelectedIndex].ToString()).FirstOrDefault().Key ?? "";
if (ItemManager.Remove(name))
{
MessageBox.Show("删除成功!");
();
}
else
{
MessageBox.Show("删除失败!");
}
}
}
private void _Click(object sender, EventArgs e)
{
if (MessageBox.Show("重新读取会丢失未保存的数据,是否确认重新读取全部?", "重新读取全部", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
CharacterManager.Load();
SkillManager.Load();
ItemManager.Load();
();
();
();
}
}
public static string GetSkillDisplayName(SkillManager skillCreator, string name)
{
if (skillCreator.LoadedSkills.TryGetValue(name, out Skill? skill) && skill != null)
{
return $"[ {name} ] {skill.GetIdName()}";
}
return "";
}
public static string GetItemDisplayName(ItemManager itemCreator, string name)
{
if (itemCreator.LoadedItems.TryGetValue(name, out Item? item) && item != null)
{
return $"[ {name} ] {item.GetIdName()}";
}
return "";
}
private static GameModuleLoader LoadModules()
{
PluginLoader plugins = PluginLoader.LoadPlugins([]);
foreach (string plugin in plugins.Plugins.Keys)
{
Console.WriteLine(plugin + " is loaded.");
}
return GameModuleLoader.LoadGameModules(FunGameInfo.FunGame.FunGame_Desktop, []);
}
private void _Click(object sender, EventArgs e)
{
ConfigSettings.Show();
}
}
}