200 lines
7.1 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 ItemCreator : Form
{
private ItemManager ItemManager { get; }
private Item? EditItem { get; }
public ItemCreator(ItemManager manager, Item? item = null)
{
InitializeComponent();
ItemManager = manager;
if (item != null)
{
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;
}
}
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 (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;
}
}
}