修改名称,确定为实体编辑器

This commit is contained in:
milimoe 2024-09-21 01:50:22 +08:00
parent 28a7763ac4
commit f829b4ae11
Signed by: milimoe
GPG Key ID: 05D280912DA6C69E
21 changed files with 671 additions and 670 deletions

View File

@ -25,10 +25,10 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Update="Solutions\EntityCreator\CreateItem.cs"> <Compile Update="Solutions\EntityEditor\ItemCreator.cs">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Update="Solutions\EntityCreator\CreateSkill.cs"> <Compile Update="Solutions\EntityEditor\SkillCreator.cs">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
</ItemGroup> </ItemGroup>

View File

@ -14,7 +14,7 @@ namespace Desktop
// see https://aka.ms/applicationconfiguration. // see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize(); ApplicationConfiguration.Initialize();
//Application.Run(new ChessBoardExample.ChessBoardExample()); //Application.Run(new ChessBoardExample.ChessBoardExample());
Application.Run(new EntityCreator()); Application.Run(new EntityEditor());
} }
} }
} }

View File

@ -1,6 +1,6 @@
namespace Milimoe.FunGame.Testing.Desktop.Solutions namespace Milimoe.FunGame.Testing.Desktop.Solutions
{ {
partial class CreateCharacter partial class CharacterCreator
{ {
/// <summary> /// <summary>
/// Required designer variable. /// Required designer variable.

View File

@ -1,47 +1,205 @@
using Milimoe.FunGame.Core.Api.Utility; using Milimoe.FunGame.Core.Api.Utility;
using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
namespace Milimoe.FunGame.Testing.Desktop.Solutions namespace Milimoe.FunGame.Testing.Desktop.Solutions
{ {
public class CharacterCreator public partial class CharacterCreator : Form
{ {
public Dictionary<string, Character> LoadedCharacters { get; set; } = []; private CharacterManager CharacterManager { get; }
private Character? EditCharacter { get; }
public void Load() public CharacterCreator(CharacterManager manager, Character? character = null)
{ {
EntityModuleConfig<Character> config = new("EntityCreator", "character.creator"); InitializeComponent();
config.LoadConfig(); CharacterManager = manager;
LoadedCharacters = new(config); if (character != null)
foreach (Character c in LoadedCharacters.Values)
{ {
c.Recovery(); Text = "角色编辑器";
BtnCreate.Text = "编辑";
EditCharacter = character;
TextName.Text = character.Name;
TextCode.Text = manager.LoadedCharacters.Where(kv => kv.Value == character).Select(kv => kv.Key).FirstOrDefault() ?? "";
TextFirstName.Text = character.FirstName;
TextNickName.Text = character.NickName;
TextATK.Text = character.InitialATK.ToString();
TextHP.Text = character.InitialHP.ToString();
TextMP.Text = character.InitialMP.ToString();
TextHR.Text = character.InitialHR.ToString();
TextMR.Text = character.InitialMR.ToString();
ComboPA.Text = CharacterSet.GetPrimaryAttributeName(character.PrimaryAttribute);
TextSTR.Text = character.InitialSTR.ToString();
TextGrowthSTR.Text = character.STRGrowth.ToString();
TextAGI.Text = character.InitialAGI.ToString();
TextGrowthAGI.Text = character.AGIGrowth.ToString();
TextINT.Text = character.InitialINT.ToString();
TextGrowthINT.Text = character.INTGrowth.ToString();
} }
} }
public bool Add(string name, Character character) private void BtnCreate_Click(object sender, EventArgs e)
{ {
return LoadedCharacters.TryAdd(name, character); Character c;
} if (EditCharacter != null)
public bool Remove(string name)
{
return LoadedCharacters.Remove(name);
}
public void Save()
{
EntityModuleConfig<Character> config = new("EntityCreator", "character.creator");
foreach (string key in LoadedCharacters.Keys)
{ {
config.Add(key, LoadedCharacters[key]); c = EditCharacter;
} }
config.SaveConfig(); else
} {
c = Factory.GetCharacter();
}
string name;
public void OpenCreator(Character? character = null) if (TextName.Text.Trim() != "")
{ {
CreateCharacter creator = new(this, character); c.Name = TextName.Text.Trim();
creator.ShowDialog(); }
else
{
MessageBox.Show("姓不能为空。");
return;
}
if (TextCode.Text.Trim() != "")
{
name = TextCode.Text.Trim();
}
else
{
MessageBox.Show("角色存档标识不能为空。");
return;
}
if (TextFirstName.Text.Trim() != "")
{
c.FirstName = TextFirstName.Text.Trim();
}
if (TextNickName.Text.Trim() != "")
{
c.NickName = TextNickName.Text.Trim();
}
if (TextATK.Text.Trim() != "" && double.TryParse(TextATK.Text.Trim(), out double atk))
{
c.InitialATK = atk;
}
if (TextHP.Text.Trim() != "" && double.TryParse(TextHP.Text.Trim(), out double hp))
{
c.InitialHP = hp;
}
if (TextMP.Text.Trim() != "" && double.TryParse(TextMP.Text.Trim(), out double mp))
{
c.InitialMP = mp;
}
if (TextHR.Text.Trim() != "" && double.TryParse(TextHR.Text.Trim(), out double hr))
{
c.InitialHR = hr;
}
if (TextMR.Text.Trim() != "" && double.TryParse(TextMR.Text.Trim(), out double mr))
{
c.InitialMR = mr;
}
if (ComboPA.Text.Trim() != "")
{
string pa = ComboPA.Text.Trim();
if (pa == "敏捷")
{
c.PrimaryAttribute = PrimaryAttribute.AGI;
}
else if (pa == "智力")
{
c.PrimaryAttribute = PrimaryAttribute.INT;
}
else
{
c.PrimaryAttribute = PrimaryAttribute.STR;
}
}
if (TextSTR.Text.Trim() != "" && double.TryParse(TextSTR.Text.Trim(), out double str))
{
c.InitialSTR = str;
}
if (TextGrowthSTR.Text.Trim() != "" && double.TryParse(TextGrowthSTR.Text.Trim(), out double strg))
{
c.STRGrowth = strg;
}
if (TextAGI.Text.Trim() != "" && double.TryParse(TextAGI.Text.Trim(), out double agi))
{
c.InitialAGI = agi;
}
if (TextGrowthAGI.Text.Trim() != "" && double.TryParse(TextGrowthAGI.Text.Trim(), out double agig))
{
c.AGIGrowth = agig;
}
if (TextINT.Text.Trim() != "" && double.TryParse(TextINT.Text.Trim(), out double @int))
{
c.InitialINT = @int;
}
if (TextGrowthINT.Text.Trim() != "" && double.TryParse(TextGrowthINT.Text.Trim(), out double intg))
{
c.INTGrowth = intg;
}
if (TextSPD.Text.Trim() != "" && double.TryParse(TextSPD.Text.Trim(), out double spd))
{
c.InitialSPD = spd;
}
if (EditCharacter != null)
{
MessageBox.Show("保存成功!");
Dispose();
return;
}
else
{
if (CharacterManager.Add(name, c))
{
ShowDetail d = new(CharacterManager, null, null);
d.SetText(-1, c, c.GetInfo());
d.Text = "预览模式";
d.ShowDialog();
d.Dispose();
if (MessageBox.Show("添加成功!是否继续添加?", "提示", MessageBoxButtons.YesNo) == DialogResult.No)
{
Dispose();
return;
}
}
else
{
MessageBox.Show("添加失败!");
}
}
TextName.Text = "";
TextCode.Text = "";
TextFirstName.Text = "";
TextNickName.Text = "";
TextATK.Text = "";
TextHP.Text = "";
TextMP.Text = "";
TextHR.Text = "";
TextMR.Text = "";
ComboPA.Text = "";
TextSTR.Text = "";
TextGrowthSTR.Text = "";
TextAGI.Text = "";
TextGrowthAGI.Text = "";
TextINT.Text = "";
TextGrowthINT.Text = "";
} }
} }
} }

View File

@ -0,0 +1,47 @@
using Milimoe.FunGame.Core.Api.Utility;
using Milimoe.FunGame.Core.Entity;
namespace Milimoe.FunGame.Testing.Desktop.Solutions
{
public class CharacterManager
{
public Dictionary<string, Character> LoadedCharacters { get; set; } = [];
public void Load()
{
EntityModuleConfig<Character> config = new("EntityEditor", "characters");
config.LoadConfig();
LoadedCharacters = new(config);
foreach (Character c in LoadedCharacters.Values)
{
c.Recovery();
}
}
public bool Add(string name, Character character)
{
return LoadedCharacters.TryAdd(name, character);
}
public bool Remove(string name)
{
return LoadedCharacters.Remove(name);
}
public void Save()
{
EntityModuleConfig<Character> config = new("EntityEditor", "characters");
foreach (string key in LoadedCharacters.Keys)
{
config.Add(key, LoadedCharacters[key]);
}
config.SaveConfig();
}
public void OpenCreator(Character? character = null)
{
CharacterCreator manager = new(this, character);
manager.ShowDialog();
}
}
}

View File

@ -1,205 +0,0 @@
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 CreateCharacter : Form
{
private CharacterCreator CharacterCreator { get; }
private Character? EditCharacter { get; }
public CreateCharacter(CharacterCreator creator, Character? character = null)
{
InitializeComponent();
CharacterCreator = creator;
if (character != null)
{
Text = "角色编辑器";
BtnCreate.Text = "编辑";
EditCharacter = character;
TextName.Text = character.Name;
TextCode.Text = creator.LoadedCharacters.Where(kv => kv.Value == character).Select(kv => kv.Key).FirstOrDefault() ?? "";
TextFirstName.Text = character.FirstName;
TextNickName.Text = character.NickName;
TextATK.Text = character.InitialATK.ToString();
TextHP.Text = character.InitialHP.ToString();
TextMP.Text = character.InitialMP.ToString();
TextHR.Text = character.InitialHR.ToString();
TextMR.Text = character.InitialMR.ToString();
ComboPA.Text = CharacterSet.GetPrimaryAttributeName(character.PrimaryAttribute);
TextSTR.Text = character.InitialSTR.ToString();
TextGrowthSTR.Text = character.STRGrowth.ToString();
TextAGI.Text = character.InitialAGI.ToString();
TextGrowthAGI.Text = character.AGIGrowth.ToString();
TextINT.Text = character.InitialINT.ToString();
TextGrowthINT.Text = character.INTGrowth.ToString();
}
}
private void BtnCreate_Click(object sender, EventArgs e)
{
Character c;
if (EditCharacter != null)
{
c = EditCharacter;
}
else
{
c = Factory.GetCharacter();
}
string name;
if (TextName.Text.Trim() != "")
{
c.Name = TextName.Text.Trim();
}
else
{
MessageBox.Show("姓不能为空。");
return;
}
if (TextCode.Text.Trim() != "")
{
name = TextCode.Text.Trim();
}
else
{
MessageBox.Show("角色存档标识不能为空。");
return;
}
if (TextFirstName.Text.Trim() != "")
{
c.FirstName = TextFirstName.Text.Trim();
}
if (TextNickName.Text.Trim() != "")
{
c.NickName = TextNickName.Text.Trim();
}
if (TextATK.Text.Trim() != "" && double.TryParse(TextATK.Text.Trim(), out double atk))
{
c.InitialATK = atk;
}
if (TextHP.Text.Trim() != "" && double.TryParse(TextHP.Text.Trim(), out double hp))
{
c.InitialHP = hp;
}
if (TextMP.Text.Trim() != "" && double.TryParse(TextMP.Text.Trim(), out double mp))
{
c.InitialMP = mp;
}
if (TextHR.Text.Trim() != "" && double.TryParse(TextHR.Text.Trim(), out double hr))
{
c.InitialHR = hr;
}
if (TextMR.Text.Trim() != "" && double.TryParse(TextMR.Text.Trim(), out double mr))
{
c.InitialMR = mr;
}
if (ComboPA.Text.Trim() != "")
{
string pa = ComboPA.Text.Trim();
if (pa == "敏捷")
{
c.PrimaryAttribute = PrimaryAttribute.AGI;
}
else if (pa == "智力")
{
c.PrimaryAttribute = PrimaryAttribute.INT;
}
else
{
c.PrimaryAttribute = PrimaryAttribute.STR;
}
}
if (TextSTR.Text.Trim() != "" && double.TryParse(TextSTR.Text.Trim(), out double str))
{
c.InitialSTR = str;
}
if (TextGrowthSTR.Text.Trim() != "" && double.TryParse(TextGrowthSTR.Text.Trim(), out double strg))
{
c.STRGrowth = strg;
}
if (TextAGI.Text.Trim() != "" && double.TryParse(TextAGI.Text.Trim(), out double agi))
{
c.InitialAGI = agi;
}
if (TextGrowthAGI.Text.Trim() != "" && double.TryParse(TextGrowthAGI.Text.Trim(), out double agig))
{
c.AGIGrowth = agig;
}
if (TextINT.Text.Trim() != "" && double.TryParse(TextINT.Text.Trim(), out double @int))
{
c.InitialINT = @int;
}
if (TextGrowthINT.Text.Trim() != "" && double.TryParse(TextGrowthINT.Text.Trim(), out double intg))
{
c.INTGrowth = intg;
}
if (TextSPD.Text.Trim() != "" && double.TryParse(TextSPD.Text.Trim(), out double spd))
{
c.InitialSPD = spd;
}
if (EditCharacter != null)
{
MessageBox.Show("保存成功!");
Dispose();
return;
}
else
{
if (CharacterCreator.Add(name, c))
{
ShowDetail d = new(CharacterCreator, null, null);
d.SetText(-1, c, c.GetInfo());
d.Text = "预览模式";
d.ShowDialog();
d.Dispose();
if (MessageBox.Show("添加成功!是否继续添加?", "提示", MessageBoxButtons.YesNo) == DialogResult.No)
{
Dispose();
return;
}
}
else
{
MessageBox.Show("添加失败!");
}
}
TextName.Text = "";
TextCode.Text = "";
TextFirstName.Text = "";
TextNickName.Text = "";
TextATK.Text = "";
TextHP.Text = "";
TextMP.Text = "";
TextHR.Text = "";
TextMR.Text = "";
ComboPA.Text = "";
TextSTR.Text = "";
TextGrowthSTR.Text = "";
TextAGI.Text = "";
TextGrowthAGI.Text = "";
TextINT.Text = "";
TextGrowthINT.Text = "";
}
}
}

View File

@ -1,199 +0,0 @@
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 CreateItem : Form
{
private ItemCreator ItemCreator { get; }
private Item? EditItem { get; }
public CreateItem(ItemCreator creator, Item? item = null)
{
InitializeComponent();
ItemCreator = creator;
if (item != null)
{
Text = "物品编辑器";
BtnCreate.Text = "编辑";
EditItem = item;
TextID.Text = item.Id.ToString();
TextName.Text = item.Name;
TextCode.Text = creator.LoadedItems.Where(kv => kv.Value.Equals(item)).Select(kv => kv.Key).FirstOrDefault() ?? "";
ComboItemType.Text = ItemSet.GetItemTypeName(item.ItemType);
CheckboxIsWeapon.Checked = item.ItemType == ItemType.Weapon;
ComboWeapon.Text = ItemSet.GetWeaponTypeName(item.WeaponType);
ComboWeapon.Enabled = item.ItemType == ItemType.Weapon;
CheckboxIsEquip.Checked = item.Equipable;
ComboEquip.Text = ItemSet.GetEquipSlotTypeName(item.EquipSlotType);
ComboEquip.Enabled = item.Equipable;
CheckboxIsPurchasable.Checked = item.IsPurchasable;
TextPrice.Text = item.Price.ToString();
TextPrice.Enabled = item.IsPurchasable;
CheckboxIsSellable.Checked = item.IsSellable;
CheckboxIsTradable.Checked = item.IsTradable;
if (item.NextSellableTime > DateTime.Now && item.NextSellableTime < DateTime.MaxValue) DateTimePickerSell.Value = item.NextSellableTime;
DateTimePickerSell.Enabled = !item.IsSellable;
if (item.NextTradableTime > DateTime.Now && item.NextTradableTime < DateTime.MaxValue) DateTimePickerTrade.Value = item.NextTradableTime;
DateTimePickerTrade.Enabled = !item.IsTradable;
}
else
{
CheckboxIsWeapon.Checked = false;
ComboWeapon.Enabled = false;
CheckboxIsEquip.Checked = false;
ComboEquip.Enabled = false;
CheckboxIsPurchasable.Checked = false;
TextPrice.Enabled = false;
CheckboxIsSellable.Checked = true;
CheckboxIsTradable.Checked = true;
DateTimePickerSell.Value = DateTime.Now;
DateTimePickerSell.Enabled = false;
DateTimePickerTrade.Value = DateTime.Now;
DateTimePickerTrade.Enabled = false;
}
}
private void BtnCreate_Click(object sender, EventArgs e)
{
Item i;
if (EditItem != null)
{
i = EditItem;
}
else
{
i = Factory.GetItem();
}
string name;
if (TextID.Text.Trim() != "" && long.TryParse(TextID.Text.Trim(), out long id))
{
i.Id = id;
}
else
{
MessageBox.Show("ID不能为空。");
return;
}
if (TextName.Text.Trim() != "")
{
i.Name = TextName.Text.Trim();
}
else
{
MessageBox.Show("名称不能为空。");
return;
}
if (TextCode.Text.Trim() != "")
{
name = TextCode.Text.Trim();
}
else
{
MessageBox.Show("物品存档标识不能为空。");
return;
}
if (CheckboxIsWeapon.Checked && ComboWeapon.Text.Trim() != "")
{
i.WeaponType = ItemSet.GetWeaponTypeFromName(ComboWeapon.Text.Trim());
}
if (CheckboxIsEquip.Checked && ComboEquip.Text.Trim() != "")
{
i.EquipSlotType = ItemSet.GetEquipSlotTypeFromName(ComboEquip.Text.Trim());
}
if (CheckboxIsPurchasable.Checked && TextPrice.Text.Trim() != "" && double.TryParse(TextPrice.Text.Trim(), out double price))
{
i.Price = price;
}
if (!CheckboxIsSellable.Checked && DateTime.Now < DateTimePickerSell.Value)
{
i.NextSellableTime = DateTimePickerSell.Value;
}
if (!CheckboxIsTradable.Checked && DateTime.Now < DateTimePickerTrade.Value)
{
i.NextTradableTime = DateTimePickerTrade.Value;
}
if (EditItem != null)
{
MessageBox.Show("保存成功!");
Dispose();
return;
}
else
{
if (ItemCreator.Add(name, i))
{
ShowDetail d = new(null, null, ItemCreator);
d.SetText(-1, i, i.ToString());
d.Text = "预览模式";
d.ShowDialog();
d.Dispose();
if (MessageBox.Show("添加成功!是否继续添加?", "提示", MessageBoxButtons.YesNo) == DialogResult.No)
{
Dispose();
return;
}
}
else
{
MessageBox.Show("添加失败!");
}
}
TextID.Text = "";
TextName.Text = "";
TextCode.Text = "";
ComboItemType.Text = "";
CheckboxIsWeapon.Checked = false;
ComboWeapon.Text = "";
ComboWeapon.Enabled = false;
CheckboxIsEquip.Checked = false;
ComboEquip.Text = "";
ComboEquip.Enabled = false;
CheckboxIsPurchasable.Checked = false;
TextPrice.Text = "";
TextPrice.Enabled = false;
CheckboxIsSellable.Checked = true;
CheckboxIsTradable.Checked = true;
DateTimePickerSell.Value = DateTime.Now;
DateTimePickerSell.Enabled = false;
DateTimePickerTrade.Value = DateTime.Now;
DateTimePickerTrade.Enabled = false;
}
private void CheckboxIsWeapon_CheckedChanged(object sender, EventArgs e)
{
ComboWeapon.Enabled = CheckboxIsWeapon.Checked;
}
private void CheckboxIsEquip_CheckedChanged(object sender, EventArgs e)
{
ComboEquip.Enabled = CheckboxIsEquip.Checked;
}
private void CheckboxIsPurchasable_CheckedChanged(object sender, EventArgs e)
{
TextPrice.Enabled = CheckboxIsPurchasable.Checked;
}
private void CheckboxIsSellable_CheckedChanged(object sender, EventArgs e)
{
DateTimePickerSell.Enabled = !CheckboxIsSellable.Checked;
}
private void CheckboxIsTradable_CheckedChanged(object sender, EventArgs e)
{
DateTimePickerTrade.Enabled = !CheckboxIsTradable.Checked;
}
}
}

View File

@ -1,104 +0,0 @@
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 CreateSkill : Form
{
private SkillCreator SkillCreator { get; }
private Skill? EditSkill { get; }
public CreateSkill(SkillCreator creator, Skill? skill = null)
{
InitializeComponent();
SkillCreator = creator;
if (skill != null)
{
Text = "技能编辑器";
BtnCreate.Text = "编辑";
EditSkill = skill;
TextID.Text = skill.Id.ToString();
TextCode.Text = creator.LoadedSkills.Where(kv => kv.Value.Equals(skill)).Select(kv => kv.Key).FirstOrDefault() ?? "";
TextName.Text = skill.Name;
ComboSkillType.Text = SkillSet.GetSkillTypeName(skill.SkillType);
}
}
private void BtnCreate_Click(object sender, EventArgs e)
{
Skill s;
if (EditSkill != null)
{
s = EditSkill;
}
else
{
s = Factory.GetSkill();
}
string name;
if (TextID.Text.Trim() != "" && long.TryParse(TextID.Text.Trim(), out long id))
{
s.Id = id;
}
else
{
MessageBox.Show("ID不能为空。");
return;
}
if (TextName.Text.Trim() != "")
{
s.Name = TextName.Text.Trim();
}
else
{
MessageBox.Show("名称不能为空。");
return;
}
if (TextCode.Text.Trim() != "")
{
name = TextCode.Text.Trim();
}
else
{
MessageBox.Show("技能存档标识不能为空。");
return;
}
if (EditSkill != null)
{
MessageBox.Show("保存成功!");
Dispose();
return;
}
else
{
if (SkillCreator.Add(name, s))
{
ShowDetail d = new(null, SkillCreator, null);
d.SetText(-1, s, s.ToString());
d.Text = "预览模式";
d.ShowDialog();
d.Dispose();
if (MessageBox.Show("添加成功!是否继续添加?", "提示", MessageBoxButtons.YesNo) == DialogResult.No)
{
Dispose();
return;
}
}
else
{
MessageBox.Show("添加失败!");
}
}
TextID.Text = "";
TextCode.Text = "";
TextName.Text = "";
ComboSkillType.Text = "";
}
}
}

View File

@ -1,6 +1,6 @@
namespace Milimoe.FunGame.Testing.Desktop.Solutions namespace Milimoe.FunGame.Testing.Desktop.Solutions
{ {
partial class EntityCreator partial class EntityEditor
{ {
/// <summary> /// <summary>
/// Required designer variable. /// Required designer variable.
@ -275,7 +275,7 @@
.UseVisualStyleBackColor = true; .UseVisualStyleBackColor = true;
.Click += _Click; .Click += _Click;
// //
// EntityCreator // EntityEditor
// //
AutoScaleDimensions = new SizeF(7F, 17F); AutoScaleDimensions = new SizeF(7F, 17F);
AutoScaleMode = AutoScaleMode.Font; AutoScaleMode = AutoScaleMode.Font;
@ -299,9 +299,11 @@
Controls.Add(); Controls.Add();
Controls.Add(); Controls.Add();
Controls.Add(); Controls.Add();
Name = "EntityCreator"; FormBorderStyle = FormBorderStyle.FixedSingle;
MaximizeBox = false;
Name = "EntityEditor";
StartPosition = FormStartPosition.CenterScreen; StartPosition = FormStartPosition.CenterScreen;
Text = "实体创建器"; Text = "实体编辑器";
.ResumeLayout(false); .ResumeLayout(false);
ResumeLayout(false); ResumeLayout(false);
} }

View File

@ -1,27 +1,26 @@
using Microsoft.VisualBasic; using Milimoe.FunGame.Core.Api.Utility;
using Milimoe.FunGame.Core.Api.Utility;
using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Common.Addon; using Milimoe.FunGame.Core.Library.Common.Addon;
using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Core.Library.Constant;
namespace Milimoe.FunGame.Testing.Desktop.Solutions namespace Milimoe.FunGame.Testing.Desktop.Solutions
{ {
public partial class EntityCreator : Form public partial class EntityEditor : Form
{ {
private static GameModuleLoader? GameModuleLoader { get; set; } = null; private static GameModuleLoader? GameModuleLoader { get; set; } = null;
private CharacterCreator CharacterCreator { get; } = new(); private CharacterManager CharacterManager { get; } = new();
private SkillCreator SkillCreator { get; } = new(); private SkillManager SkillManager { get; } = new();
private ItemCreator ItemCreator { get; } = new(); private ItemManager ItemManager { get; } = new();
private bool CheckSelectedIndex => .SelectedIndex != -1 && .SelectedIndex < .Items.Count; private bool CheckSelectedIndex => .SelectedIndex != -1 && .SelectedIndex < .Items.Count;
private int nowClick = 0; private int nowClick = 0;
public EntityCreator() public EntityEditor()
{ {
InitializeComponent(); InitializeComponent();
GameModuleLoader = LoadModules(); GameModuleLoader = LoadModules();
CharacterCreator.Load(); CharacterManager.Load();
SkillCreator.Load(); SkillManager.Load();
ItemCreator.Load(); ItemManager.Load();
(); ();
(); ();
(); ();
@ -30,9 +29,9 @@ namespace Milimoe.FunGame.Testing.Desktop.Solutions
private void () private void ()
{ {
.Items.Clear(); .Items.Clear();
foreach (string name in CharacterCreator.LoadedCharacters.Keys) foreach (string name in CharacterManager.LoadedCharacters.Keys)
{ {
.Items.Add(CharacterCreator.LoadedCharacters[name]); .Items.Add(CharacterManager.LoadedCharacters[name]);
} }
nowClick = 0; nowClick = 0;
} }
@ -40,9 +39,9 @@ namespace Milimoe.FunGame.Testing.Desktop.Solutions
private void () private void ()
{ {
.Items.Clear(); .Items.Clear();
foreach (string name in SkillCreator.LoadedSkills.OrderBy(kv => kv.Value.Id).Select(kv => kv.Key)) foreach (string name in SkillManager.LoadedSkills.OrderBy(kv => kv.Value.Id).Select(kv => kv.Key))
{ {
.Items.Add(GetSkillDisplayName(SkillCreator, name)); .Items.Add(GetSkillDisplayName(SkillManager, name));
} }
nowClick = 1; nowClick = 1;
} }
@ -50,9 +49,9 @@ namespace Milimoe.FunGame.Testing.Desktop.Solutions
private void () private void ()
{ {
.Items.Clear(); .Items.Clear();
foreach (string name in ItemCreator.LoadedItems.OrderBy(kv => kv.Value.Id).Select(kv => kv.Key)) foreach (string name in ItemManager.LoadedItems.OrderBy(kv => kv.Value.Id).Select(kv => kv.Key))
{ {
.Items.Add(GetItemDisplayName(ItemCreator, name)); .Items.Add(GetItemDisplayName(ItemManager, name));
} }
nowClick = 2; nowClick = 2;
} }
@ -83,27 +82,27 @@ namespace Milimoe.FunGame.Testing.Desktop.Solutions
private void _Click(object sender, EventArgs e) private void _Click(object sender, EventArgs e)
{ {
CharacterCreator.Save(); CharacterManager.Save();
SkillCreator.Save(); SkillManager.Save();
ItemCreator.Save(); ItemManager.Save();
MessageBox.Show("保存成功!"); MessageBox.Show("保存成功!");
} }
private void _Click(object sender, EventArgs e) private void _Click(object sender, EventArgs e)
{ {
CharacterCreator.Save(); CharacterManager.Save();
MessageBox.Show("保存成功!"); MessageBox.Show("保存成功!");
} }
private void _Click(object sender, EventArgs e) private void _Click(object sender, EventArgs e)
{ {
SkillCreator.Save(); SkillManager.Save();
MessageBox.Show("保存成功!"); MessageBox.Show("保存成功!");
} }
private void _Click(object sender, EventArgs e) private void _Click(object sender, EventArgs e)
{ {
ItemCreator.Save(); ItemManager.Save();
MessageBox.Show("保存成功!"); MessageBox.Show("保存成功!");
} }
@ -143,16 +142,16 @@ namespace Milimoe.FunGame.Testing.Desktop.Solutions
{ {
if (CheckSelectedIndex) if (CheckSelectedIndex)
{ {
ShowDetail d = new(CharacterCreator, SkillCreator, ItemCreator); ShowDetail d = new(CharacterManager, SkillManager, ItemManager);
switch (nowClick) switch (nowClick)
{ {
case 0: case 0:
Character? character = CharacterCreator.LoadedCharacters.Values.Where(c => c.ToString() == .Items[.SelectedIndex].ToString()).FirstOrDefault(); Character? character = CharacterManager.LoadedCharacters.Values.Where(c => c.ToString() == .Items[.SelectedIndex].ToString()).FirstOrDefault();
d.SetText(nowClick, character, character?.GetInfo() ?? ""); d.SetText(nowClick, character, character?.GetInfo() ?? "");
d.ShowDialog(); d.ShowDialog();
break; break;
case 1: case 1:
Skill? s = SkillCreator.LoadedSkills.Where(kv => GetSkillDisplayName(SkillCreator, kv.Key) == .Items[.SelectedIndex].ToString()).Select(kv => kv.Value).FirstOrDefault(); Skill? s = SkillManager.LoadedSkills.Where(kv => GetSkillDisplayName(SkillManager, kv.Key) == .Items[.SelectedIndex].ToString()).Select(kv => kv.Value).FirstOrDefault();
if (s != null) if (s != null)
{ {
Skill? s2 = (s.Id, s.Name, s.SkillType); Skill? s2 = (s.Id, s.Name, s.SkillType);
@ -165,7 +164,7 @@ namespace Milimoe.FunGame.Testing.Desktop.Solutions
} }
break; break;
case 2: case 2:
Item? i = ItemCreator.LoadedItems.Where(kv => GetItemDisplayName(ItemCreator, kv.Key) == .Items[.SelectedIndex].ToString()).Select(kv => kv.Value).FirstOrDefault(); Item? i = ItemManager.LoadedItems.Where(kv => GetItemDisplayName(ItemManager, kv.Key) == .Items[.SelectedIndex].ToString()).Select(kv => kv.Value).FirstOrDefault();
if (i != null) if (i != null)
{ {
Item? i2 = (i.Id, i.Name, i.ItemType); Item? i2 = (i.Id, i.Name, i.ItemType);
@ -187,14 +186,14 @@ namespace Milimoe.FunGame.Testing.Desktop.Solutions
private void () private void ()
{ {
if (SkillCreator.LoadedSkills.Count != 0) if (SkillManager.LoadedSkills.Count != 0)
{ {
ShowList l = new(); ShowList l = new();
l.AddListItem(SkillCreator.LoadedSkills.OrderBy(kv => kv.Value.Id).Where(kv => kv.Value.SkillType != SkillType.Item).Select(kv => GetSkillDisplayName(SkillCreator, kv.Key)).ToArray()); 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(); l.ShowDialog();
string selected = l.SelectItem; string selected = l.SelectItem;
Character? c = CharacterCreator.LoadedCharacters.Values.Where(c => c.ToString() == .Items[.SelectedIndex].ToString()).FirstOrDefault(); Character? c = CharacterManager.LoadedCharacters.Values.Where(c => c.ToString() == .Items[.SelectedIndex].ToString()).FirstOrDefault();
Skill? s = SkillCreator.LoadedSkills.Where(kv => GetSkillDisplayName(SkillCreator, kv.Key) == selected).Select(kv => kv.Value).FirstOrDefault(); Skill? s = SkillManager.LoadedSkills.Where(kv => GetSkillDisplayName(SkillManager, kv.Key) == selected).Select(kv => kv.Value).FirstOrDefault();
if (c != null && s != null) if (c != null && s != null)
{ {
Skill? s2 = (s.Id, s.Name, s.SkillType); Skill? s2 = (s.Id, s.Name, s.SkillType);
@ -214,14 +213,14 @@ namespace Milimoe.FunGame.Testing.Desktop.Solutions
private void () private void ()
{ {
if (ItemCreator.LoadedItems.Count != 0) if (ItemManager.LoadedItems.Count != 0)
{ {
ShowList l = new(); ShowList l = new();
l.AddListItem(ItemCreator.LoadedItems.OrderBy(kv => kv.Value.Id).Select(kv => GetItemDisplayName(ItemCreator, kv.Key)).ToArray()); l.AddListItem(ItemManager.LoadedItems.OrderBy(kv => kv.Value.Id).Select(kv => GetItemDisplayName(ItemManager, kv.Key)).ToArray());
l.ShowDialog(); l.ShowDialog();
string selected = l.SelectItem; string selected = l.SelectItem;
Character? c = CharacterCreator.LoadedCharacters.Values.Where(c => c.ToString() == .Items[.SelectedIndex].ToString()).FirstOrDefault(); Character? c = CharacterManager.LoadedCharacters.Values.Where(c => c.ToString() == .Items[.SelectedIndex].ToString()).FirstOrDefault();
Item? i = ItemCreator.LoadedItems.Where(kv => GetItemDisplayName(ItemCreator, kv.Key) == selected).Select(kv => kv.Value).FirstOrDefault(); Item? i = ItemManager.LoadedItems.Where(kv => GetItemDisplayName(ItemManager, kv.Key) == selected).Select(kv => kv.Value).FirstOrDefault();
if (c != null && i != null) if (c != null && i != null)
{ {
Item? i2 = (i.Id, i.Name, i.ItemType); Item? i2 = (i.Id, i.Name, i.ItemType);
@ -241,7 +240,7 @@ namespace Milimoe.FunGame.Testing.Desktop.Solutions
private void () private void ()
{ {
Character? c = CharacterCreator.LoadedCharacters.Values.Where(c => c.ToString() == .Items[.SelectedIndex].ToString()).FirstOrDefault(); Character? c = CharacterManager.LoadedCharacters.Values.Where(c => c.ToString() == .Items[.SelectedIndex].ToString()).FirstOrDefault();
if (c != null) if (c != null)
{ {
if (c.Skills.Count != 0) if (c.Skills.Count != 0)
@ -262,7 +261,7 @@ namespace Milimoe.FunGame.Testing.Desktop.Solutions
private void () private void ()
{ {
Character? c = CharacterCreator.LoadedCharacters.Values.Where(c => c.ToString() == .Items[.SelectedIndex].ToString()).FirstOrDefault(); Character? c = CharacterManager.LoadedCharacters.Values.Where(c => c.ToString() == .Items[.SelectedIndex].ToString()).FirstOrDefault();
if (c != null) if (c != null)
{ {
if (c.Items.Count != 0) if (c.Items.Count != 0)
@ -318,19 +317,19 @@ namespace Milimoe.FunGame.Testing.Desktop.Solutions
private void _Click(object sender, EventArgs e) private void _Click(object sender, EventArgs e)
{ {
CharacterCreator.OpenCreator(); CharacterManager.OpenCreator();
(); ();
} }
private void _Click(object sender, EventArgs e) private void _Click(object sender, EventArgs e)
{ {
SkillCreator.OpenCreator(); SkillManager.OpenCreator();
(); ();
} }
private void _Click(object sender, EventArgs e) private void _Click(object sender, EventArgs e)
{ {
ItemCreator.OpenCreator(); ItemManager.OpenCreator();
(); ();
} }
@ -338,8 +337,8 @@ namespace Milimoe.FunGame.Testing.Desktop.Solutions
{ {
if (CheckSelectedIndex && nowClick == 0 && MessageBox.Show("是否删除", "删除", MessageBoxButtons.YesNo) == DialogResult.Yes) if (CheckSelectedIndex && nowClick == 0 && MessageBox.Show("是否删除", "删除", MessageBoxButtons.YesNo) == DialogResult.Yes)
{ {
string name = CharacterCreator.LoadedCharacters.Where(ky => ky.Value.ToString() == .Items[.SelectedIndex].ToString()).FirstOrDefault().Key ?? ""; string name = CharacterManager.LoadedCharacters.Where(ky => ky.Value.ToString() == .Items[.SelectedIndex].ToString()).FirstOrDefault().Key ?? "";
if (CharacterCreator.Remove(name)) if (CharacterManager.Remove(name))
{ {
MessageBox.Show("删除成功!"); MessageBox.Show("删除成功!");
(); ();
@ -355,8 +354,8 @@ namespace Milimoe.FunGame.Testing.Desktop.Solutions
{ {
if (CheckSelectedIndex && nowClick == 1 && MessageBox.Show("是否删除", "删除", MessageBoxButtons.YesNo) == DialogResult.Yes) if (CheckSelectedIndex && nowClick == 1 && MessageBox.Show("是否删除", "删除", MessageBoxButtons.YesNo) == DialogResult.Yes)
{ {
string name = SkillCreator.LoadedSkills.Where(kv => GetSkillDisplayName(SkillCreator, kv.Key) == .Items[.SelectedIndex].ToString()).FirstOrDefault().Key ?? ""; string name = SkillManager.LoadedSkills.Where(kv => GetSkillDisplayName(SkillManager, kv.Key) == .Items[.SelectedIndex].ToString()).FirstOrDefault().Key ?? "";
if (SkillCreator.Remove(name)) if (SkillManager.Remove(name))
{ {
MessageBox.Show("删除成功!"); MessageBox.Show("删除成功!");
(); ();
@ -372,8 +371,8 @@ namespace Milimoe.FunGame.Testing.Desktop.Solutions
{ {
if (CheckSelectedIndex && nowClick == 2 && MessageBox.Show("是否删除", "删除", MessageBoxButtons.YesNo) == DialogResult.Yes) if (CheckSelectedIndex && nowClick == 2 && MessageBox.Show("是否删除", "删除", MessageBoxButtons.YesNo) == DialogResult.Yes)
{ {
string name = ItemCreator.LoadedItems.Where(kv => GetItemDisplayName(ItemCreator, kv.Key) == .Items[.SelectedIndex].ToString()).FirstOrDefault().Key ?? ""; string name = ItemManager.LoadedItems.Where(kv => GetItemDisplayName(ItemManager, kv.Key) == .Items[.SelectedIndex].ToString()).FirstOrDefault().Key ?? "";
if (ItemCreator.Remove(name)) if (ItemManager.Remove(name))
{ {
MessageBox.Show("删除成功!"); MessageBox.Show("删除成功!");
(); ();
@ -389,16 +388,16 @@ namespace Milimoe.FunGame.Testing.Desktop.Solutions
{ {
if (MessageBox.Show("重新读取会丢失未保存的数据,是否确认重新读取全部?", "重新读取全部", MessageBoxButtons.YesNo) == DialogResult.Yes) if (MessageBox.Show("重新读取会丢失未保存的数据,是否确认重新读取全部?", "重新读取全部", MessageBoxButtons.YesNo) == DialogResult.Yes)
{ {
CharacterCreator.Load(); CharacterManager.Load();
SkillCreator.Load(); SkillManager.Load();
ItemCreator.Load(); ItemManager.Load();
(); ();
(); ();
(); ();
} }
} }
public static string GetSkillDisplayName(SkillCreator skillCreator, string name) public static string GetSkillDisplayName(SkillManager skillCreator, string name)
{ {
if (skillCreator.LoadedSkills.TryGetValue(name, out Skill? skill) && skill != null) if (skillCreator.LoadedSkills.TryGetValue(name, out Skill? skill) && skill != null)
{ {
@ -407,7 +406,7 @@ namespace Milimoe.FunGame.Testing.Desktop.Solutions
return ""; return "";
} }
public static string GetItemDisplayName(ItemCreator itemCreator, string name) public static string GetItemDisplayName(ItemManager itemCreator, string name)
{ {
if (itemCreator.LoadedItems.TryGetValue(name, out Item? item) && item != null) if (itemCreator.LoadedItems.TryGetValue(name, out Item? item) && item != null)
{ {

View File

@ -1,6 +1,6 @@
namespace Milimoe.FunGame.Testing.Desktop.Solutions namespace Milimoe.FunGame.Testing.Desktop.Solutions
{ {
partial class CreateItem partial class ItemCreator
{ {
/// <summary> /// <summary>
/// Required designer variable. /// Required designer variable.

View File

@ -1,43 +1,199 @@
using Milimoe.FunGame.Core.Api.Utility; using Milimoe.FunGame.Core.Api.Utility;
using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
namespace Milimoe.FunGame.Testing.Desktop.Solutions namespace Milimoe.FunGame.Testing.Desktop.Solutions
{ {
public class ItemCreator public partial class ItemCreator : Form
{ {
public Dictionary<string, Item> LoadedItems { get; set; } = []; private ItemManager ItemManager { get; }
private Item? EditItem { get; }
public void Load() public ItemCreator(ItemManager manager, Item? item = null)
{ {
EntityModuleConfig<Item> config = new("EntityCreator", "item.creator"); InitializeComponent();
config.LoadConfig(); ItemManager = manager;
LoadedItems = new(config); if (item != null)
}
public bool Add(string name, Item item)
{
return LoadedItems.TryAdd(name, item);
}
public bool Remove(string name)
{
return LoadedItems.Remove(name);
}
public void Save()
{
EntityModuleConfig<Item> config = new("EntityCreator", "item.creator");
foreach (string key in LoadedItems.Keys)
{ {
config.Add(key, LoadedItems[key]); Text = "物品编辑器";
BtnCreate.Text = "编辑";
EditItem = item;
TextID.Text = item.Id.ToString();
TextName.Text = item.Name;
TextCode.Text = manager.LoadedItems.Where(kv => kv.Value.Equals(item)).Select(kv => kv.Key).FirstOrDefault() ?? "";
ComboItemType.Text = ItemSet.GetItemTypeName(item.ItemType);
CheckboxIsWeapon.Checked = item.ItemType == ItemType.Weapon;
ComboWeapon.Text = ItemSet.GetWeaponTypeName(item.WeaponType);
ComboWeapon.Enabled = item.ItemType == ItemType.Weapon;
CheckboxIsEquip.Checked = item.Equipable;
ComboEquip.Text = ItemSet.GetEquipSlotTypeName(item.EquipSlotType);
ComboEquip.Enabled = item.Equipable;
CheckboxIsPurchasable.Checked = item.IsPurchasable;
TextPrice.Text = item.Price.ToString();
TextPrice.Enabled = item.IsPurchasable;
CheckboxIsSellable.Checked = item.IsSellable;
CheckboxIsTradable.Checked = item.IsTradable;
if (item.NextSellableTime > DateTime.Now && item.NextSellableTime < DateTime.MaxValue) DateTimePickerSell.Value = item.NextSellableTime;
DateTimePickerSell.Enabled = !item.IsSellable;
if (item.NextTradableTime > DateTime.Now && item.NextTradableTime < DateTime.MaxValue) DateTimePickerTrade.Value = item.NextTradableTime;
DateTimePickerTrade.Enabled = !item.IsTradable;
}
else
{
CheckboxIsWeapon.Checked = false;
ComboWeapon.Enabled = false;
CheckboxIsEquip.Checked = false;
ComboEquip.Enabled = false;
CheckboxIsPurchasable.Checked = false;
TextPrice.Enabled = false;
CheckboxIsSellable.Checked = true;
CheckboxIsTradable.Checked = true;
DateTimePickerSell.Value = DateTime.Now;
DateTimePickerSell.Enabled = false;
DateTimePickerTrade.Value = DateTime.Now;
DateTimePickerTrade.Enabled = false;
} }
config.SaveConfig();
} }
public void OpenCreator(Item? item = null) private void BtnCreate_Click(object sender, EventArgs e)
{ {
CreateItem creator = new(this, item); Item i;
creator.ShowDialog(); if (EditItem != null)
{
i = EditItem;
}
else
{
i = Factory.GetItem();
}
string name;
if (TextID.Text.Trim() != "" && long.TryParse(TextID.Text.Trim(), out long id))
{
i.Id = id;
}
else
{
MessageBox.Show("ID不能为空。");
return;
}
if (TextName.Text.Trim() != "")
{
i.Name = TextName.Text.Trim();
}
else
{
MessageBox.Show("名称不能为空。");
return;
}
if (TextCode.Text.Trim() != "")
{
name = TextCode.Text.Trim();
}
else
{
MessageBox.Show("物品存档标识不能为空。");
return;
}
if (CheckboxIsWeapon.Checked && ComboWeapon.Text.Trim() != "")
{
i.WeaponType = ItemSet.GetWeaponTypeFromName(ComboWeapon.Text.Trim());
}
if (CheckboxIsEquip.Checked && ComboEquip.Text.Trim() != "")
{
i.EquipSlotType = ItemSet.GetEquipSlotTypeFromName(ComboEquip.Text.Trim());
}
if (CheckboxIsPurchasable.Checked && TextPrice.Text.Trim() != "" && double.TryParse(TextPrice.Text.Trim(), out double price))
{
i.Price = price;
}
if (!CheckboxIsSellable.Checked && DateTime.Now < DateTimePickerSell.Value)
{
i.NextSellableTime = DateTimePickerSell.Value;
}
if (!CheckboxIsTradable.Checked && DateTime.Now < DateTimePickerTrade.Value)
{
i.NextTradableTime = DateTimePickerTrade.Value;
}
if (EditItem != null)
{
MessageBox.Show("保存成功!");
Dispose();
return;
}
else
{
if (ItemManager.Add(name, i))
{
ShowDetail d = new(null, null, ItemManager);
d.SetText(-1, i, i.ToString());
d.Text = "预览模式";
d.ShowDialog();
d.Dispose();
if (MessageBox.Show("添加成功!是否继续添加?", "提示", MessageBoxButtons.YesNo) == DialogResult.No)
{
Dispose();
return;
}
}
else
{
MessageBox.Show("添加失败!");
}
}
TextID.Text = "";
TextName.Text = "";
TextCode.Text = "";
ComboItemType.Text = "";
CheckboxIsWeapon.Checked = false;
ComboWeapon.Text = "";
ComboWeapon.Enabled = false;
CheckboxIsEquip.Checked = false;
ComboEquip.Text = "";
ComboEquip.Enabled = false;
CheckboxIsPurchasable.Checked = false;
TextPrice.Text = "";
TextPrice.Enabled = false;
CheckboxIsSellable.Checked = true;
CheckboxIsTradable.Checked = true;
DateTimePickerSell.Value = DateTime.Now;
DateTimePickerSell.Enabled = false;
DateTimePickerTrade.Value = DateTime.Now;
DateTimePickerTrade.Enabled = false;
}
private void CheckboxIsWeapon_CheckedChanged(object sender, EventArgs e)
{
ComboWeapon.Enabled = CheckboxIsWeapon.Checked;
}
private void CheckboxIsEquip_CheckedChanged(object sender, EventArgs e)
{
ComboEquip.Enabled = CheckboxIsEquip.Checked;
}
private void CheckboxIsPurchasable_CheckedChanged(object sender, EventArgs e)
{
TextPrice.Enabled = CheckboxIsPurchasable.Checked;
}
private void CheckboxIsSellable_CheckedChanged(object sender, EventArgs e)
{
DateTimePickerSell.Enabled = !CheckboxIsSellable.Checked;
}
private void CheckboxIsTradable_CheckedChanged(object sender, EventArgs e)
{
DateTimePickerTrade.Enabled = !CheckboxIsTradable.Checked;
} }
} }
} }

View File

@ -0,0 +1,43 @@
using Milimoe.FunGame.Core.Api.Utility;
using Milimoe.FunGame.Core.Entity;
namespace Milimoe.FunGame.Testing.Desktop.Solutions
{
public class ItemManager
{
public Dictionary<string, Item> LoadedItems { get; set; } = [];
public void Load()
{
EntityModuleConfig<Item> config = new("EntityEditor", "items");
config.LoadConfig();
LoadedItems = new(config);
}
public bool Add(string name, Item item)
{
return LoadedItems.TryAdd(name, item);
}
public bool Remove(string name)
{
return LoadedItems.Remove(name);
}
public void Save()
{
EntityModuleConfig<Item> config = new("EntityEditor", "items");
foreach (string key in LoadedItems.Keys)
{
config.Add(key, LoadedItems[key]);
}
config.SaveConfig();
}
public void OpenCreator(Item? item = null)
{
ItemCreator manager = new(this, item);
manager.ShowDialog();
}
}
}

View File

@ -4,18 +4,18 @@ namespace Milimoe.FunGame.Testing.Desktop.Solutions
{ {
public partial class ShowDetail : Form public partial class ShowDetail : Form
{ {
private CharacterCreator? CharacterCreator { get; } private CharacterManager? CharacterManager { get; }
private SkillCreator? SkillCreator { get; } private SkillManager? SkillManager { get; }
private ItemCreator? ItemCreator { get; } private ItemManager? ItemManager { get; }
private int NowClick { get; set; } = -1; private int NowClick { get; set; } = -1;
private BaseEntity? BaseEntity { get; set; } private BaseEntity? BaseEntity { get; set; }
public ShowDetail(CharacterCreator? characterCreator, SkillCreator? skillCreator, ItemCreator? itemCreator) public ShowDetail(CharacterManager? characterManager, SkillManager? skillManager, ItemManager? itemManager)
{ {
InitializeComponent(); InitializeComponent();
CharacterCreator = characterCreator; CharacterManager = characterManager;
SkillCreator = skillCreator; SkillManager = skillManager;
ItemCreator = itemCreator; ItemManager = itemManager;
Text = "详细信息查看"; Text = "详细信息查看";
} }
@ -62,32 +62,32 @@ namespace Milimoe.FunGame.Testing.Desktop.Solutions
{ {
if (NowClick == 0 && BaseEntity is Character c) if (NowClick == 0 && BaseEntity is Character c)
{ {
CharacterCreator?.OpenCreator(c); CharacterManager?.OpenCreator(c);
} }
else if (NowClick == 1 && BaseEntity is Skill s) else if (NowClick == 1 && BaseEntity is Skill s)
{ {
SkillCreator?.OpenCreator(s); SkillManager?.OpenCreator(s);
} }
else if (NowClick == 2 && BaseEntity is Item i) else if (NowClick == 2 && BaseEntity is Item i)
{ {
ItemCreator?.OpenCreator(i); ItemManager?.OpenCreator(i);
} }
} }
private void _Click(object sender, EventArgs e) private void _Click(object sender, EventArgs e)
{ {
if (NowClick == 0 && ItemCreator != null && BaseEntity is Character c) if (NowClick == 0 && ItemManager != null && BaseEntity is Character c)
{ {
if (ItemCreator.LoadedItems.Count != 0) if (ItemManager.LoadedItems.Count != 0)
{ {
ShowList l = new(); ShowList l = new();
l.AddListItem(ItemCreator.LoadedItems.OrderBy(kv => kv.Value.Id).Select(kv => EntityCreator.GetItemDisplayName(ItemCreator, kv.Key)).ToArray()); l.AddListItem(ItemManager.LoadedItems.OrderBy(kv => kv.Value.Id).Select(kv => EntityEditor.GetItemDisplayName(ItemManager, kv.Key)).ToArray());
l.ShowDialog(); l.ShowDialog();
string selected = l.SelectItem; string selected = l.SelectItem;
Item? i = ItemCreator.LoadedItems.Where(kv => EntityCreator.GetItemDisplayName(ItemCreator, kv.Key) == selected).Select(kv => kv.Value).FirstOrDefault(); Item? i = ItemManager.LoadedItems.Where(kv => EntityEditor.GetItemDisplayName(ItemManager, kv.Key) == selected).Select(kv => kv.Value).FirstOrDefault();
if (c != null && i != null) if (c != null && i != null)
{ {
Item? i2 = EntityCreator.(i.Id, i.Name, i.ItemType); Item? i2 = EntityEditor.(i.Id, i.Name, i.ItemType);
if (i2 != null) if (i2 != null)
{ {
i.SetPropertyToItemModuleNew(i2); i.SetPropertyToItemModuleNew(i2);
@ -106,18 +106,18 @@ namespace Milimoe.FunGame.Testing.Desktop.Solutions
private void _Click(object sender, EventArgs e) private void _Click(object sender, EventArgs e)
{ {
if (NowClick == 0 && SkillCreator != null && BaseEntity is Character c) if (NowClick == 0 && SkillManager != null && BaseEntity is Character c)
{ {
if (SkillCreator.LoadedSkills.Count != 0) if (SkillManager.LoadedSkills.Count != 0)
{ {
ShowList l = new(); ShowList l = new();
l.AddListItem(SkillCreator.LoadedSkills.OrderBy(kv => kv.Value.Id).Where(kv => kv.Value.SkillType != Core.Library.Constant.SkillType.Item).Select(kv => EntityCreator.GetSkillDisplayName(SkillCreator, kv.Key)).ToArray()); l.AddListItem(SkillManager.LoadedSkills.OrderBy(kv => kv.Value.Id).Where(kv => kv.Value.SkillType != Core.Library.Constant.SkillType.Item).Select(kv => EntityEditor.GetSkillDisplayName(SkillManager, kv.Key)).ToArray());
l.ShowDialog(); l.ShowDialog();
string selected = l.SelectItem; string selected = l.SelectItem;
Skill? s = SkillCreator.LoadedSkills.Where(kv => EntityCreator.GetSkillDisplayName(SkillCreator, kv.Key) == selected).Select(kv => kv.Value).FirstOrDefault(); Skill? s = SkillManager.LoadedSkills.Where(kv => EntityEditor.GetSkillDisplayName(SkillManager, kv.Key) == selected).Select(kv => kv.Value).FirstOrDefault();
if (c != null && s != null) if (c != null && s != null)
{ {
Skill? s2 = EntityCreator.(s.Id, s.Name, s.SkillType); Skill? s2 = EntityEditor.(s.Id, s.Name, s.SkillType);
if (s2 != null) if (s2 != null)
{ {
s = s2; s = s2;

View File

@ -1,6 +1,6 @@
namespace Milimoe.FunGame.Testing.Desktop.Solutions namespace Milimoe.FunGame.Testing.Desktop.Solutions
{ {
partial class CreateSkill partial class SkillCreator
{ {
/// <summary> /// <summary>
/// Required designer variable. /// Required designer variable.

View File

@ -1,43 +1,104 @@
using Milimoe.FunGame.Core.Api.Utility; using Milimoe.FunGame.Core.Api.Utility;
using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
namespace Milimoe.FunGame.Testing.Desktop.Solutions namespace Milimoe.FunGame.Testing.Desktop.Solutions
{ {
public class SkillCreator public partial class SkillCreator : Form
{ {
public Dictionary<string, Skill> LoadedSkills { get; set; } = []; private SkillManager SkillManager { get; }
private Skill? EditSkill { get; }
public void Load() public SkillCreator(SkillManager manager, Skill? skill = null)
{ {
EntityModuleConfig<Skill> config = new("EntityCreator", "skill.creator"); InitializeComponent();
config.LoadConfig(); SkillManager = manager;
LoadedSkills = new(config); if (skill != null)
}
public bool Add(string name, Skill skill)
{
return LoadedSkills.TryAdd(name, skill);
}
public bool Remove(string name)
{
return LoadedSkills.Remove(name);
}
public void Save()
{
EntityModuleConfig<Skill> config = new("EntityCreator", "skill.creator");
foreach (string key in LoadedSkills.Keys)
{ {
config.Add(key, LoadedSkills[key]); Text = "技能编辑器";
BtnCreate.Text = "编辑";
EditSkill = skill;
TextID.Text = skill.Id.ToString();
TextCode.Text = manager.LoadedSkills.Where(kv => kv.Value.Equals(skill)).Select(kv => kv.Key).FirstOrDefault() ?? "";
TextName.Text = skill.Name;
ComboSkillType.Text = SkillSet.GetSkillTypeName(skill.SkillType);
} }
config.SaveConfig();
} }
public void OpenCreator(Skill? skill = null) private void BtnCreate_Click(object sender, EventArgs e)
{ {
CreateSkill creator = new(this, skill); Skill s;
creator.ShowDialog(); if (EditSkill != null)
{
s = EditSkill;
}
else
{
s = Factory.GetSkill();
}
string name;
if (TextID.Text.Trim() != "" && long.TryParse(TextID.Text.Trim(), out long id))
{
s.Id = id;
}
else
{
MessageBox.Show("ID不能为空。");
return;
}
if (TextName.Text.Trim() != "")
{
s.Name = TextName.Text.Trim();
}
else
{
MessageBox.Show("名称不能为空。");
return;
}
if (TextCode.Text.Trim() != "")
{
name = TextCode.Text.Trim();
}
else
{
MessageBox.Show("技能存档标识不能为空。");
return;
}
if (EditSkill != null)
{
MessageBox.Show("保存成功!");
Dispose();
return;
}
else
{
if (SkillManager.Add(name, s))
{
ShowDetail d = new(null, SkillManager, null);
d.SetText(-1, s, s.ToString());
d.Text = "预览模式";
d.ShowDialog();
d.Dispose();
if (MessageBox.Show("添加成功!是否继续添加?", "提示", MessageBoxButtons.YesNo) == DialogResult.No)
{
Dispose();
return;
}
}
else
{
MessageBox.Show("添加失败!");
}
}
TextID.Text = "";
TextCode.Text = "";
TextName.Text = "";
ComboSkillType.Text = "";
} }
} }
} }

View File

@ -0,0 +1,43 @@
using Milimoe.FunGame.Core.Api.Utility;
using Milimoe.FunGame.Core.Entity;
namespace Milimoe.FunGame.Testing.Desktop.Solutions
{
public class SkillManager
{
public Dictionary<string, Skill> LoadedSkills { get; set; } = [];
public void Load()
{
EntityModuleConfig<Skill> config = new("EntityEditor", "skills");
config.LoadConfig();
LoadedSkills = new(config);
}
public bool Add(string name, Skill skill)
{
return LoadedSkills.TryAdd(name, skill);
}
public bool Remove(string name)
{
return LoadedSkills.Remove(name);
}
public void Save()
{
EntityModuleConfig<Skill> config = new("EntityEditor", "skills");
foreach (string key in LoadedSkills.Keys)
{
config.Add(key, LoadedSkills[key]);
}
config.SaveConfig();
}
public void OpenCreator(Skill? skill = null)
{
SkillCreator manager = new(this, skill);
manager.ShowDialog();
}
}
}