mirror of
https://github.com/milimoe/FunGame-Testing.git
synced 2025-12-05 00:06:05 +00:00
为实体编号添加枚举;修改实体创建器
This commit is contained in:
parent
8bcddf642f
commit
6d244bb77b
@ -24,4 +24,13 @@
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Update="Solutions\EntityCreator\CreateItem.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Update="Solutions\EntityCreator\CreateSkill.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@ -1,388 +0,0 @@
|
||||
using Microsoft.VisualBasic;
|
||||
using Milimoe.FunGame.Core.Api.Utility;
|
||||
using Milimoe.FunGame.Core.Entity;
|
||||
using Milimoe.FunGame.Core.Interface.Entity;
|
||||
using Milimoe.FunGame.Core.Library.Common.Addon;
|
||||
using Milimoe.FunGame.Core.Library.Constant;
|
||||
|
||||
namespace Milimoe.FunGame.Testing.Desktop.Solutions
|
||||
{
|
||||
public partial class EntityCreator : Form
|
||||
{
|
||||
private CharacterCreator CharacterCreator { get; } = new();
|
||||
private SkillCreator SkillCreator { get; } = new();
|
||||
private ItemCreator ItemCreator { get; } = new();
|
||||
private GameModuleLoader GameModuleLoader { get; }
|
||||
private bool CheckSelectedIndex => 实际列表.SelectedIndex != -1 && 实际列表.SelectedIndex < 实际列表.Items.Count;
|
||||
private int nowClick = 0;
|
||||
|
||||
public EntityCreator()
|
||||
{
|
||||
InitializeComponent();
|
||||
GameModuleLoader = LoadModules();
|
||||
CharacterCreator.Load();
|
||||
SkillCreator.Load();
|
||||
ItemCreator.Load();
|
||||
查看现有技能方法();
|
||||
查看现有物品方法();
|
||||
查看现有角色方法();
|
||||
}
|
||||
|
||||
private void 查看现有角色方法()
|
||||
{
|
||||
实际列表.Items.Clear();
|
||||
foreach (string name in CharacterCreator.LoadedCharacters.Keys)
|
||||
{
|
||||
实际列表.Items.Add(CharacterCreator.LoadedCharacters[name]);
|
||||
}
|
||||
nowClick = 0;
|
||||
}
|
||||
|
||||
private void 查看现有技能方法()
|
||||
{
|
||||
实际列表.Items.Clear();
|
||||
foreach (string name in SkillCreator.LoadedSkills.Keys)
|
||||
{
|
||||
实际列表.Items.Add(SkillCreator.LoadedSkills[name].GetIdName());
|
||||
}
|
||||
nowClick = 1;
|
||||
}
|
||||
|
||||
private void 查看现有物品方法()
|
||||
{
|
||||
实际列表.Items.Clear();
|
||||
foreach (string name in ItemCreator.LoadedItems.Keys)
|
||||
{
|
||||
实际列表.Items.Add(ItemCreator.LoadedItems[name].GetIdName());
|
||||
}
|
||||
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)
|
||||
{
|
||||
CharacterCreator.Save();
|
||||
SkillCreator.Save();
|
||||
ItemCreator.Save();
|
||||
MessageBox.Show("保存成功!");
|
||||
}
|
||||
|
||||
private void 保存角色_Click(object sender, EventArgs e)
|
||||
{
|
||||
CharacterCreator.Save();
|
||||
MessageBox.Show("保存成功!");
|
||||
}
|
||||
|
||||
private void 保存技能_Click(object sender, EventArgs e)
|
||||
{
|
||||
SkillCreator.Save();
|
||||
MessageBox.Show("保存成功!");
|
||||
}
|
||||
|
||||
private void 保存物品_Click(object sender, EventArgs e)
|
||||
{
|
||||
ItemCreator.Save();
|
||||
MessageBox.Show("保存成功!");
|
||||
}
|
||||
|
||||
private Skill? 从模组加载器中获取技能(long id, string name)
|
||||
{
|
||||
foreach (SkillModule module in GameModuleLoader.Skills.Values)
|
||||
{
|
||||
Skill? s = module.GetSkill(id, name);
|
||||
if (s != null)
|
||||
{
|
||||
return s;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private Item? 从模组加载器中获取物品(long id, string name)
|
||||
{
|
||||
foreach (ItemModule module in GameModuleLoader.Items.Values)
|
||||
{
|
||||
Item? i = module.GetItem(id, name);
|
||||
if (i != null)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private void 实际列表_MouseDoubleClick(object sender, EventArgs e)
|
||||
{
|
||||
if (CheckSelectedIndex)
|
||||
{
|
||||
ShowDetail d = new();
|
||||
switch (nowClick)
|
||||
{
|
||||
case 0:
|
||||
d.SetText(CharacterCreator.LoadedCharacters.Values.Where(c => c.ToString() == 实际列表.Items[实际列表.SelectedIndex].ToString()).FirstOrDefault()?.GetInfo() ?? "");
|
||||
d.ShowDialog();
|
||||
break;
|
||||
case 1:
|
||||
Skill? s = SkillCreator.LoadedSkills.Values.Where(c => c.GetIdName() == 实际列表.Items[实际列表.SelectedIndex].ToString()).FirstOrDefault();
|
||||
if (s != null)
|
||||
{
|
||||
s = 从模组加载器中获取技能(s.Id, s.Name);
|
||||
if (s != null)
|
||||
{
|
||||
d.SetText(s.ToString() ?? "");
|
||||
d.ShowDialog();
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
Item? i = ItemCreator.LoadedItems.Values.Where(c => c.GetIdName() == 实际列表.Items[实际列表.SelectedIndex].ToString()).FirstOrDefault();
|
||||
if (i != null)
|
||||
{
|
||||
i = 从模组加载器中获取物品(i.Id, i.Name);
|
||||
if (i != null)
|
||||
{
|
||||
d.SetText(i.ToString() ?? "");
|
||||
d.ShowDialog();
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
d.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
private void 为角色添加技能_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (CheckSelectedIndex && nowClick == 0)
|
||||
{
|
||||
if (SkillCreator.LoadedSkills.Count != 0)
|
||||
{
|
||||
Showlist l = new();
|
||||
l.AddListItem(SkillCreator.LoadedSkills.Values.Select(s => s.GetIdName()).ToArray());
|
||||
l.ShowDialog();
|
||||
string selected = l.SelectItem;
|
||||
Character? c = CharacterCreator.LoadedCharacters.Values.Where(c => c.ToString() == 实际列表.Items[实际列表.SelectedIndex].ToString()).FirstOrDefault();
|
||||
Skill? s = SkillCreator.LoadedSkills.Values.Where(s => s.GetIdName() == selected).FirstOrDefault();
|
||||
if (c != null && s != null)
|
||||
{
|
||||
s = 从模组加载器中获取技能(s.Id, s.Name);
|
||||
if (s != null) c.Skills.Add(s);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show("技能列表为空!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void 为角色添加物品_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (CheckSelectedIndex && nowClick == 0)
|
||||
{
|
||||
if (ItemCreator.LoadedItems.Count != 0)
|
||||
{
|
||||
Showlist l = new();
|
||||
l.AddListItem(ItemCreator.LoadedItems.Values.Select(i => i.GetIdName()).ToArray());
|
||||
l.ShowDialog();
|
||||
string selected = l.SelectItem;
|
||||
Character? c = CharacterCreator.LoadedCharacters.Values.Where(c => c.ToString() == 实际列表.Items[实际列表.SelectedIndex].ToString()).FirstOrDefault();
|
||||
Item? i = ItemCreator.LoadedItems.Values.Where(i => i.GetIdName() == selected).FirstOrDefault();
|
||||
if (c != null && i != null)
|
||||
{
|
||||
i = 从模组加载器中获取物品(i.Id, i.Name);
|
||||
if (i != null) c.Items.Add(i);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show("物品列表为空!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void 创建角色_Click(object sender, EventArgs e)
|
||||
{
|
||||
Character c = Factory.GetCharacter();
|
||||
c.Name = Interaction.InputBox("输入姓", "姓", "");
|
||||
c.FirstName = Interaction.InputBox("输入名", "名", "");
|
||||
c.NickName = Interaction.InputBox("输入昵称", "昵称", "");
|
||||
|
||||
string primaryAttributeInput = Interaction.InputBox("输入核心属性 (STR, AGI, INT)", "核心属性", "None");
|
||||
c.PrimaryAttribute = Enum.TryParse(primaryAttributeInput, out PrimaryAttribute primaryAttribute) ? primaryAttribute : PrimaryAttribute.None;
|
||||
|
||||
// 解析 double 类型的输入
|
||||
c.InitialATK = double.Parse(Interaction.InputBox("输入初始攻击力", "初始攻击力", "0.0"));
|
||||
c.InitialHP = double.Parse(Interaction.InputBox("输入初始生命值", "初始生命值", "1.0"));
|
||||
c.InitialMP = double.Parse(Interaction.InputBox("输入初始魔法值", "初始魔法值", "0.0"));
|
||||
c.InitialSTR = double.Parse(Interaction.InputBox("输入初始力量", "初始力量", "0.0"));
|
||||
c.STRGrowth = double.Parse(Interaction.InputBox("输入力量成长", "力量成长", "0.0"));
|
||||
c.InitialAGI = double.Parse(Interaction.InputBox("输入初始敏捷", "初始敏捷", "0.0"));
|
||||
c.AGIGrowth = double.Parse(Interaction.InputBox("输入敏捷成长", "敏捷成长", "0.0"));
|
||||
c.InitialINT = double.Parse(Interaction.InputBox("输入初始智力", "初始智力", "0.0"));
|
||||
c.INTGrowth = double.Parse(Interaction.InputBox("输入智力成长", "智力成长", "0.0"));
|
||||
c.InitialSPD = double.Parse(Interaction.InputBox("输入初始行动速度", "初始行动速度", "0.0"));
|
||||
c.InitialHR = double.Parse(Interaction.InputBox("输入初始生命回复", "初始生命回复", "0.0"));
|
||||
c.InitialMR = double.Parse(Interaction.InputBox("输入初始魔法回复", "初始魔法回复", "0.0"));
|
||||
|
||||
string name = Interaction.InputBox("输入角色代号以确认创建", "角色代号", "");
|
||||
if (name != "" && c.Name != "" && CharacterCreator.Add(name, c))
|
||||
{
|
||||
MessageBox.Show("创建成功!");
|
||||
查看现有角色方法();
|
||||
ShowDetail d = new();
|
||||
d.SetText(c.GetInfo());
|
||||
d.ShowDialog();
|
||||
d.Dispose();
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show("创建已取消。");
|
||||
}
|
||||
}
|
||||
|
||||
private void 创建技能_Click(object sender, EventArgs e)
|
||||
{
|
||||
Skill s = Factory.GetSkill();
|
||||
s.Id = long.Parse(Interaction.InputBox("输入技能编号", "技能编号", "0"));
|
||||
s.Name = Interaction.InputBox("输入技能名称", "技能名称", "");
|
||||
|
||||
string name = Interaction.InputBox("输入技能代号以确认创建", "技能代号", "");
|
||||
if (name != "" && s.Id != 0 && s.Name != "" && SkillCreator.Add(name, s))
|
||||
{
|
||||
MessageBox.Show("创建成功!");
|
||||
查看现有技能方法();
|
||||
ShowDetail d = new();
|
||||
d.SetText(s.ToString());
|
||||
d.ShowDialog();
|
||||
d.Dispose();
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show("创建已取消。");
|
||||
}
|
||||
}
|
||||
|
||||
private void 创建物品_Click(object sender, EventArgs e)
|
||||
{
|
||||
Item i = Factory.GetItem();
|
||||
i.Id = long.Parse(Interaction.InputBox("输入物品编号", "物品编号", "0"));
|
||||
i.Name = Interaction.InputBox("输入物品名称", "物品名称", "");
|
||||
|
||||
string name = Interaction.InputBox("输入物品代号以确认创建", "物品代号", "");
|
||||
if (name != "" && i.Id != 0 && i.Name != "" && ItemCreator.Add(name, i))
|
||||
{
|
||||
MessageBox.Show("创建成功!");
|
||||
查看现有物品方法();
|
||||
ShowDetail d = new();
|
||||
d.SetText(i.ToString());
|
||||
d.ShowDialog();
|
||||
d.Dispose();
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show("创建已取消。");
|
||||
}
|
||||
}
|
||||
|
||||
private void 删除角色_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (CheckSelectedIndex && MessageBox.Show("是否删除", "删除", MessageBoxButtons.YesNo) == DialogResult.Yes)
|
||||
{
|
||||
string name = CharacterCreator.LoadedCharacters.Where(ky => ky.Value.ToString() == 实际列表.Items[实际列表.SelectedIndex].ToString()).FirstOrDefault().Key ?? "";
|
||||
if (CharacterCreator.Remove(name))
|
||||
{
|
||||
MessageBox.Show("删除成功!");
|
||||
查看现有角色方法();
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show("删除失败!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void 删除技能_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (CheckSelectedIndex && MessageBox.Show("是否删除", "删除", MessageBoxButtons.YesNo) == DialogResult.Yes)
|
||||
{
|
||||
string name = SkillCreator.LoadedSkills.Where(ky => ky.Value.GetIdName() == 实际列表.Items[实际列表.SelectedIndex].ToString()).FirstOrDefault().Key ?? "";
|
||||
if (SkillCreator.Remove(name))
|
||||
{
|
||||
MessageBox.Show("删除成功!");
|
||||
查看现有技能方法();
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show("删除失败!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void 删除物品_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (CheckSelectedIndex && MessageBox.Show("是否删除", "删除", MessageBoxButtons.YesNo) == DialogResult.Yes)
|
||||
{
|
||||
string name = ItemCreator.LoadedItems.Where(ky => ky.Value.GetIdName() == 实际列表.Items[实际列表.SelectedIndex].ToString()).FirstOrDefault().Key ?? "";
|
||||
if (ItemCreator.Remove(name))
|
||||
{
|
||||
MessageBox.Show("删除成功!");
|
||||
查看现有物品方法();
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show("删除失败!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void 重新读取全部_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (MessageBox.Show("重新读取会丢失未保存的数据,是否确认重新读取全部?", "重新读取全部", MessageBoxButtons.YesNo) == DialogResult.Yes)
|
||||
{
|
||||
CharacterCreator.Load();
|
||||
SkillCreator.Load();
|
||||
ItemCreator.Load();
|
||||
查看现有技能方法();
|
||||
查看现有物品方法();
|
||||
查看现有角色方法();
|
||||
}
|
||||
}
|
||||
|
||||
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, []);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -9,9 +9,13 @@ namespace Milimoe.FunGame.Testing.Desktop.Solutions
|
||||
|
||||
public void Load()
|
||||
{
|
||||
EntityModuleConfig<Character> config = new("redbud.fun.entitycreator", "charactercreator");
|
||||
EntityModuleConfig<Character> config = new("EntityCreator", "character.creator");
|
||||
config.LoadConfig();
|
||||
LoadedCharacters = new(config);
|
||||
foreach (Character c in LoadedCharacters.Values)
|
||||
{
|
||||
c.Recovery();
|
||||
}
|
||||
}
|
||||
|
||||
public bool Add(string name, Character character)
|
||||
@ -26,12 +30,18 @@ namespace Milimoe.FunGame.Testing.Desktop.Solutions
|
||||
|
||||
public void Save()
|
||||
{
|
||||
EntityModuleConfig<Character> config = new("redbud.fun.entitycreator", "charactercreator");
|
||||
EntityModuleConfig<Character> config = new("EntityCreator", "character.creator");
|
||||
foreach (string key in LoadedCharacters.Keys)
|
||||
{
|
||||
config.Add(key, LoadedCharacters[key]);
|
||||
}
|
||||
config.SaveConfig();
|
||||
}
|
||||
|
||||
public void OpenCreator(Character? character = null)
|
||||
{
|
||||
CreateCharacter creator = new(this, character);
|
||||
creator.ShowDialog();
|
||||
}
|
||||
}
|
||||
}
|
||||
539
Desktop/Solutions/EntityCreator/CreateCharacter.Designer.cs
generated
Normal file
539
Desktop/Solutions/EntityCreator/CreateCharacter.Designer.cs
generated
Normal file
@ -0,0 +1,539 @@
|
||||
namespace Milimoe.FunGame.Testing.Desktop.Solutions
|
||||
{
|
||||
partial class CreateCharacter
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
LabelName = new Label();
|
||||
TextName = new TextBox();
|
||||
TextFirstName = new TextBox();
|
||||
TipName = new Label();
|
||||
TipFirstName = new Label();
|
||||
TextNickName = new TextBox();
|
||||
TipNickName = new Label();
|
||||
ComboPA = new ComboBox();
|
||||
LabelPA = new Label();
|
||||
LabelSTR = new Label();
|
||||
LabelAGI = new Label();
|
||||
LabelINT = new Label();
|
||||
TextSTR = new TextBox();
|
||||
TextAGI = new TextBox();
|
||||
TextINT = new TextBox();
|
||||
TextGrowthSTR = new TextBox();
|
||||
TextGrowthAGI = new TextBox();
|
||||
TextGrowthINT = new TextBox();
|
||||
LabelGrowth1 = new Label();
|
||||
LabelGrowth2 = new Label();
|
||||
LabelGrowth3 = new Label();
|
||||
LabelHR = new Label();
|
||||
TextHR = new TextBox();
|
||||
TextHP = new TextBox();
|
||||
LabelHP = new Label();
|
||||
LabelMR = new Label();
|
||||
TextMR = new TextBox();
|
||||
TextMP = new TextBox();
|
||||
LabelMP = new Label();
|
||||
TextATK = new TextBox();
|
||||
LabelATK = new Label();
|
||||
TextSPD = new TextBox();
|
||||
LabelSPD = new Label();
|
||||
BtnCreate = new Button();
|
||||
TextCode = new TextBox();
|
||||
LabelCode = new Label();
|
||||
SuspendLayout();
|
||||
//
|
||||
// LabelName
|
||||
//
|
||||
LabelName.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
LabelName.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
LabelName.Location = new Point(47, 54);
|
||||
LabelName.Name = "LabelName";
|
||||
LabelName.Size = new Size(129, 27);
|
||||
LabelName.TabIndex = 0;
|
||||
LabelName.Text = "角色姓名";
|
||||
LabelName.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// TextName
|
||||
//
|
||||
TextName.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
TextName.Font = new Font("等线", 14.25F);
|
||||
TextName.Location = new Point(182, 54);
|
||||
TextName.Name = "TextName";
|
||||
TextName.Size = new Size(94, 27);
|
||||
TextName.TabIndex = 0;
|
||||
TextName.WordWrap = false;
|
||||
//
|
||||
// TextFirstName
|
||||
//
|
||||
TextFirstName.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
TextFirstName.Font = new Font("等线", 14.25F);
|
||||
TextFirstName.Location = new Point(282, 54);
|
||||
TextFirstName.Name = "TextFirstName";
|
||||
TextFirstName.Size = new Size(171, 27);
|
||||
TextFirstName.TabIndex = 1;
|
||||
TextFirstName.WordWrap = false;
|
||||
//
|
||||
// TipName
|
||||
//
|
||||
TipName.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
TipName.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
TipName.Location = new Point(182, 24);
|
||||
TipName.Name = "TipName";
|
||||
TipName.Size = new Size(94, 27);
|
||||
TipName.TabIndex = 2;
|
||||
TipName.Text = "姓";
|
||||
TipName.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// TipFirstName
|
||||
//
|
||||
TipFirstName.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
TipFirstName.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
TipFirstName.Location = new Point(282, 24);
|
||||
TipFirstName.Name = "TipFirstName";
|
||||
TipFirstName.Size = new Size(171, 27);
|
||||
TipFirstName.TabIndex = 4;
|
||||
TipFirstName.Text = "名";
|
||||
TipFirstName.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// TextNickName
|
||||
//
|
||||
TextNickName.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
TextNickName.Font = new Font("等线", 14.25F);
|
||||
TextNickName.Location = new Point(459, 54);
|
||||
TextNickName.Name = "TextNickName";
|
||||
TextNickName.Size = new Size(171, 27);
|
||||
TextNickName.TabIndex = 2;
|
||||
TextNickName.WordWrap = false;
|
||||
//
|
||||
// TipNickName
|
||||
//
|
||||
TipNickName.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
TipNickName.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
TipNickName.Location = new Point(459, 24);
|
||||
TipNickName.Name = "TipNickName";
|
||||
TipNickName.Size = new Size(171, 27);
|
||||
TipNickName.TabIndex = 6;
|
||||
TipNickName.Text = "昵称";
|
||||
TipNickName.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// ComboPA
|
||||
//
|
||||
ComboPA.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
ComboPA.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
ComboPA.FormattingEnabled = true;
|
||||
ComboPA.Items.AddRange(new object[] { "力量", "敏捷", "智力" });
|
||||
ComboPA.Location = new Point(182, 188);
|
||||
ComboPA.Name = "ComboPA";
|
||||
ComboPA.Size = new Size(133, 27);
|
||||
ComboPA.TabIndex = 7;
|
||||
//
|
||||
// LabelPA
|
||||
//
|
||||
LabelPA.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
LabelPA.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
LabelPA.Location = new Point(47, 188);
|
||||
LabelPA.Name = "LabelPA";
|
||||
LabelPA.Size = new Size(129, 27);
|
||||
LabelPA.TabIndex = 8;
|
||||
LabelPA.Text = "核心属性";
|
||||
LabelPA.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// LabelSTR
|
||||
//
|
||||
LabelSTR.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
LabelSTR.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
LabelSTR.Location = new Point(47, 238);
|
||||
LabelSTR.Name = "LabelSTR";
|
||||
LabelSTR.Size = new Size(129, 27);
|
||||
LabelSTR.TabIndex = 9;
|
||||
LabelSTR.Text = "力量";
|
||||
LabelSTR.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// LabelAGI
|
||||
//
|
||||
LabelAGI.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
LabelAGI.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
LabelAGI.Location = new Point(47, 274);
|
||||
LabelAGI.Name = "LabelAGI";
|
||||
LabelAGI.Size = new Size(129, 27);
|
||||
LabelAGI.TabIndex = 10;
|
||||
LabelAGI.Text = "敏捷";
|
||||
LabelAGI.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// LabelINT
|
||||
//
|
||||
LabelINT.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
LabelINT.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
LabelINT.Location = new Point(47, 310);
|
||||
LabelINT.Name = "LabelINT";
|
||||
LabelINT.Size = new Size(129, 27);
|
||||
LabelINT.TabIndex = 11;
|
||||
LabelINT.Text = "智力";
|
||||
LabelINT.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// TextSTR
|
||||
//
|
||||
TextSTR.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
TextSTR.Font = new Font("等线", 14.25F);
|
||||
TextSTR.Location = new Point(182, 238);
|
||||
TextSTR.Name = "TextSTR";
|
||||
TextSTR.Size = new Size(133, 27);
|
||||
TextSTR.TabIndex = 9;
|
||||
TextSTR.WordWrap = false;
|
||||
//
|
||||
// TextAGI
|
||||
//
|
||||
TextAGI.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
TextAGI.Font = new Font("等线", 14.25F);
|
||||
TextAGI.Location = new Point(182, 274);
|
||||
TextAGI.Name = "TextAGI";
|
||||
TextAGI.Size = new Size(133, 27);
|
||||
TextAGI.TabIndex = 11;
|
||||
TextAGI.WordWrap = false;
|
||||
//
|
||||
// TextINT
|
||||
//
|
||||
TextINT.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
TextINT.Font = new Font("等线", 14.25F);
|
||||
TextINT.Location = new Point(182, 310);
|
||||
TextINT.Name = "TextINT";
|
||||
TextINT.Size = new Size(133, 27);
|
||||
TextINT.TabIndex = 13;
|
||||
TextINT.WordWrap = false;
|
||||
//
|
||||
// TextGrowthSTR
|
||||
//
|
||||
TextGrowthSTR.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
TextGrowthSTR.Font = new Font("等线", 14.25F);
|
||||
TextGrowthSTR.Location = new Point(321, 238);
|
||||
TextGrowthSTR.Name = "TextGrowthSTR";
|
||||
TextGrowthSTR.Size = new Size(94, 27);
|
||||
TextGrowthSTR.TabIndex = 10;
|
||||
TextGrowthSTR.WordWrap = false;
|
||||
//
|
||||
// TextGrowthAGI
|
||||
//
|
||||
TextGrowthAGI.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
TextGrowthAGI.Font = new Font("等线", 14.25F);
|
||||
TextGrowthAGI.Location = new Point(321, 275);
|
||||
TextGrowthAGI.Name = "TextGrowthAGI";
|
||||
TextGrowthAGI.Size = new Size(94, 27);
|
||||
TextGrowthAGI.TabIndex = 12;
|
||||
TextGrowthAGI.WordWrap = false;
|
||||
//
|
||||
// TextGrowthINT
|
||||
//
|
||||
TextGrowthINT.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
TextGrowthINT.Font = new Font("等线", 14.25F);
|
||||
TextGrowthINT.Location = new Point(321, 311);
|
||||
TextGrowthINT.Name = "TextGrowthINT";
|
||||
TextGrowthINT.Size = new Size(94, 27);
|
||||
TextGrowthINT.TabIndex = 14;
|
||||
TextGrowthINT.WordWrap = false;
|
||||
//
|
||||
// LabelGrowth1
|
||||
//
|
||||
LabelGrowth1.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
LabelGrowth1.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
LabelGrowth1.Location = new Point(421, 238);
|
||||
LabelGrowth1.Name = "LabelGrowth1";
|
||||
LabelGrowth1.Size = new Size(96, 27);
|
||||
LabelGrowth1.TabIndex = 18;
|
||||
LabelGrowth1.Text = "力量成长";
|
||||
LabelGrowth1.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// LabelGrowth2
|
||||
//
|
||||
LabelGrowth2.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
LabelGrowth2.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
LabelGrowth2.Location = new Point(421, 275);
|
||||
LabelGrowth2.Name = "LabelGrowth2";
|
||||
LabelGrowth2.Size = new Size(96, 27);
|
||||
LabelGrowth2.TabIndex = 19;
|
||||
LabelGrowth2.Text = "敏捷成长";
|
||||
LabelGrowth2.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// LabelGrowth3
|
||||
//
|
||||
LabelGrowth3.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
LabelGrowth3.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
LabelGrowth3.Location = new Point(421, 311);
|
||||
LabelGrowth3.Name = "LabelGrowth3";
|
||||
LabelGrowth3.Size = new Size(96, 27);
|
||||
LabelGrowth3.TabIndex = 20;
|
||||
LabelGrowth3.Text = "智力成长";
|
||||
LabelGrowth3.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// LabelHR
|
||||
//
|
||||
LabelHR.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
LabelHR.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
LabelHR.Location = new Point(421, 97);
|
||||
LabelHR.Name = "LabelHR";
|
||||
LabelHR.Size = new Size(96, 27);
|
||||
LabelHR.TabIndex = 24;
|
||||
LabelHR.Text = "生命回复";
|
||||
LabelHR.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// TextHR
|
||||
//
|
||||
TextHR.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
TextHR.Font = new Font("等线", 14.25F);
|
||||
TextHR.Location = new Point(321, 97);
|
||||
TextHR.Name = "TextHR";
|
||||
TextHR.Size = new Size(94, 27);
|
||||
TextHR.TabIndex = 4;
|
||||
TextHR.WordWrap = false;
|
||||
//
|
||||
// TextHP
|
||||
//
|
||||
TextHP.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
TextHP.Font = new Font("等线", 14.25F);
|
||||
TextHP.Location = new Point(182, 97);
|
||||
TextHP.Name = "TextHP";
|
||||
TextHP.Size = new Size(133, 27);
|
||||
TextHP.TabIndex = 3;
|
||||
TextHP.WordWrap = false;
|
||||
//
|
||||
// LabelHP
|
||||
//
|
||||
LabelHP.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
LabelHP.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
LabelHP.Location = new Point(47, 97);
|
||||
LabelHP.Name = "LabelHP";
|
||||
LabelHP.Size = new Size(129, 27);
|
||||
LabelHP.TabIndex = 21;
|
||||
LabelHP.Text = "初始生命值";
|
||||
LabelHP.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// LabelMR
|
||||
//
|
||||
LabelMR.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
LabelMR.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
LabelMR.Location = new Point(421, 137);
|
||||
LabelMR.Name = "LabelMR";
|
||||
LabelMR.Size = new Size(96, 27);
|
||||
LabelMR.TabIndex = 28;
|
||||
LabelMR.Text = "魔法回复";
|
||||
LabelMR.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// TextMR
|
||||
//
|
||||
TextMR.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
TextMR.Font = new Font("等线", 14.25F);
|
||||
TextMR.Location = new Point(321, 137);
|
||||
TextMR.Name = "TextMR";
|
||||
TextMR.Size = new Size(94, 27);
|
||||
TextMR.TabIndex = 6;
|
||||
TextMR.WordWrap = false;
|
||||
//
|
||||
// TextMP
|
||||
//
|
||||
TextMP.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
TextMP.Font = new Font("等线", 14.25F);
|
||||
TextMP.Location = new Point(182, 137);
|
||||
TextMP.Name = "TextMP";
|
||||
TextMP.Size = new Size(133, 27);
|
||||
TextMP.TabIndex = 5;
|
||||
TextMP.WordWrap = false;
|
||||
//
|
||||
// LabelMP
|
||||
//
|
||||
LabelMP.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
LabelMP.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
LabelMP.Location = new Point(47, 137);
|
||||
LabelMP.Name = "LabelMP";
|
||||
LabelMP.Size = new Size(129, 27);
|
||||
LabelMP.TabIndex = 25;
|
||||
LabelMP.Text = "初始魔法值";
|
||||
LabelMP.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// TextATK
|
||||
//
|
||||
TextATK.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
TextATK.Font = new Font("等线", 14.25F);
|
||||
TextATK.Location = new Point(497, 188);
|
||||
TextATK.Name = "TextATK";
|
||||
TextATK.Size = new Size(133, 27);
|
||||
TextATK.TabIndex = 8;
|
||||
TextATK.WordWrap = false;
|
||||
//
|
||||
// LabelATK
|
||||
//
|
||||
LabelATK.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
LabelATK.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
LabelATK.Location = new Point(362, 188);
|
||||
LabelATK.Name = "LabelATK";
|
||||
LabelATK.Size = new Size(129, 27);
|
||||
LabelATK.TabIndex = 29;
|
||||
LabelATK.Text = "初始攻击力";
|
||||
LabelATK.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// TextSPD
|
||||
//
|
||||
TextSPD.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
TextSPD.Font = new Font("等线", 14.25F);
|
||||
TextSPD.Location = new Point(182, 352);
|
||||
TextSPD.Name = "TextSPD";
|
||||
TextSPD.ReadOnly = true;
|
||||
TextSPD.Size = new Size(133, 27);
|
||||
TextSPD.TabIndex = 15;
|
||||
TextSPD.Text = "300";
|
||||
TextSPD.WordWrap = false;
|
||||
//
|
||||
// LabelSPD
|
||||
//
|
||||
LabelSPD.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
LabelSPD.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
LabelSPD.Location = new Point(47, 352);
|
||||
LabelSPD.Name = "LabelSPD";
|
||||
LabelSPD.Size = new Size(129, 27);
|
||||
LabelSPD.TabIndex = 31;
|
||||
LabelSPD.Text = "行动速度";
|
||||
LabelSPD.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// BtnCreate
|
||||
//
|
||||
BtnCreate.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
BtnCreate.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
BtnCreate.Location = new Point(628, 412);
|
||||
BtnCreate.Name = "BtnCreate";
|
||||
BtnCreate.Size = new Size(103, 45);
|
||||
BtnCreate.TabIndex = 17;
|
||||
BtnCreate.Text = "创建";
|
||||
BtnCreate.UseVisualStyleBackColor = true;
|
||||
BtnCreate.Click += BtnCreate_Click;
|
||||
//
|
||||
// TextCode
|
||||
//
|
||||
TextCode.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
TextCode.Font = new Font("等线", 14.25F);
|
||||
TextCode.Location = new Point(407, 422);
|
||||
TextCode.Name = "TextCode";
|
||||
TextCode.Size = new Size(215, 27);
|
||||
TextCode.TabIndex = 16;
|
||||
TextCode.WordWrap = false;
|
||||
//
|
||||
// LabelCode
|
||||
//
|
||||
LabelCode.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
LabelCode.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
LabelCode.Location = new Point(231, 422);
|
||||
LabelCode.Name = "LabelCode";
|
||||
LabelCode.Size = new Size(170, 27);
|
||||
LabelCode.TabIndex = 34;
|
||||
LabelCode.Text = "代号(存档标识)";
|
||||
LabelCode.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// CreateCharacter
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 17F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
ClientSize = new Size(743, 469);
|
||||
Controls.Add(TextCode);
|
||||
Controls.Add(LabelCode);
|
||||
Controls.Add(BtnCreate);
|
||||
Controls.Add(TextSPD);
|
||||
Controls.Add(LabelSPD);
|
||||
Controls.Add(TextATK);
|
||||
Controls.Add(LabelATK);
|
||||
Controls.Add(LabelMR);
|
||||
Controls.Add(TextMR);
|
||||
Controls.Add(TextMP);
|
||||
Controls.Add(LabelMP);
|
||||
Controls.Add(LabelHR);
|
||||
Controls.Add(TextHR);
|
||||
Controls.Add(TextHP);
|
||||
Controls.Add(LabelHP);
|
||||
Controls.Add(LabelGrowth3);
|
||||
Controls.Add(LabelGrowth2);
|
||||
Controls.Add(LabelGrowth1);
|
||||
Controls.Add(TextGrowthINT);
|
||||
Controls.Add(TextGrowthAGI);
|
||||
Controls.Add(TextGrowthSTR);
|
||||
Controls.Add(TextINT);
|
||||
Controls.Add(TextAGI);
|
||||
Controls.Add(TextSTR);
|
||||
Controls.Add(LabelINT);
|
||||
Controls.Add(LabelAGI);
|
||||
Controls.Add(LabelSTR);
|
||||
Controls.Add(LabelPA);
|
||||
Controls.Add(ComboPA);
|
||||
Controls.Add(TipNickName);
|
||||
Controls.Add(TextNickName);
|
||||
Controls.Add(TipFirstName);
|
||||
Controls.Add(TextFirstName);
|
||||
Controls.Add(TipName);
|
||||
Controls.Add(TextName);
|
||||
Controls.Add(LabelName);
|
||||
Name = "CreateCharacter";
|
||||
StartPosition = FormStartPosition.CenterScreen;
|
||||
Text = "角色创建器";
|
||||
ResumeLayout(false);
|
||||
PerformLayout();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private Label LabelName;
|
||||
private TextBox TextName;
|
||||
private TextBox TextFirstName;
|
||||
private Label TipName;
|
||||
private Label TipFirstName;
|
||||
private TextBox TextNickName;
|
||||
private Label TipNickName;
|
||||
private ComboBox ComboPA;
|
||||
private Label LabelPA;
|
||||
private Label LabelSTR;
|
||||
private Label LabelAGI;
|
||||
private Label LabelINT;
|
||||
private TextBox TextSTR;
|
||||
private TextBox TextAGI;
|
||||
private TextBox TextINT;
|
||||
private TextBox TextGrowthSTR;
|
||||
private TextBox TextGrowthAGI;
|
||||
private TextBox TextGrowthINT;
|
||||
private Label LabelGrowth1;
|
||||
private Label LabelGrowth2;
|
||||
private Label LabelGrowth3;
|
||||
private Label LabelHR;
|
||||
private TextBox TextHR;
|
||||
private TextBox TextHP;
|
||||
private Label LabelHP;
|
||||
private Label LabelMR;
|
||||
private TextBox TextMR;
|
||||
private TextBox TextMP;
|
||||
private Label LabelMP;
|
||||
private TextBox TextATK;
|
||||
private Label LabelATK;
|
||||
private TextBox TextSPD;
|
||||
private Label LabelSPD;
|
||||
private Button BtnCreate;
|
||||
private TextBox TextCode;
|
||||
private Label LabelCode;
|
||||
}
|
||||
}
|
||||
205
Desktop/Solutions/EntityCreator/CreateCharacter.cs
Normal file
205
Desktop/Solutions/EntityCreator/CreateCharacter.cs
Normal file
@ -0,0 +1,205 @@
|
||||
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 = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
391
Desktop/Solutions/EntityCreator/CreateItem.Designer.cs
generated
Normal file
391
Desktop/Solutions/EntityCreator/CreateItem.Designer.cs
generated
Normal file
@ -0,0 +1,391 @@
|
||||
namespace Milimoe.FunGame.Testing.Desktop.Solutions
|
||||
{
|
||||
partial class CreateItem
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
BtnCreate = new Button();
|
||||
TextCode = new TextBox();
|
||||
LabelCode = new Label();
|
||||
TipItemType = new Label();
|
||||
TextName = new TextBox();
|
||||
TipID = new Label();
|
||||
TextID = new TextBox();
|
||||
TipName = new Label();
|
||||
LabelWeaponType = new Label();
|
||||
CheckboxIsWeapon = new CheckBox();
|
||||
CheckboxIsEquip = new CheckBox();
|
||||
LabelEquip = new Label();
|
||||
CheckboxIsPurchasable = new CheckBox();
|
||||
TextPrice = new TextBox();
|
||||
LabelPrice = new Label();
|
||||
CheckboxIsSellable = new CheckBox();
|
||||
LabelNextSellTime = new Label();
|
||||
CheckboxIsTradable = new CheckBox();
|
||||
LabelNextTradeTime = new Label();
|
||||
DateTimePickerSell = new DateTimePicker();
|
||||
DateTimePickerTrade = new DateTimePicker();
|
||||
ComboWeapon = new ComboBox();
|
||||
ComboEquip = new ComboBox();
|
||||
ComboItemType = new ComboBox();
|
||||
SuspendLayout();
|
||||
//
|
||||
// BtnCreate
|
||||
//
|
||||
BtnCreate.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
BtnCreate.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
BtnCreate.Location = new Point(628, 412);
|
||||
BtnCreate.Name = "BtnCreate";
|
||||
BtnCreate.Size = new Size(103, 45);
|
||||
BtnCreate.TabIndex = 14;
|
||||
BtnCreate.Text = "创建";
|
||||
BtnCreate.UseVisualStyleBackColor = true;
|
||||
BtnCreate.Click += BtnCreate_Click;
|
||||
//
|
||||
// TextCode
|
||||
//
|
||||
TextCode.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
TextCode.Font = new Font("等线", 14.25F);
|
||||
TextCode.Location = new Point(407, 422);
|
||||
TextCode.Name = "TextCode";
|
||||
TextCode.Size = new Size(215, 27);
|
||||
TextCode.TabIndex = 13;
|
||||
TextCode.WordWrap = false;
|
||||
//
|
||||
// LabelCode
|
||||
//
|
||||
LabelCode.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
LabelCode.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
LabelCode.Location = new Point(231, 422);
|
||||
LabelCode.Name = "LabelCode";
|
||||
LabelCode.Size = new Size(170, 27);
|
||||
LabelCode.TabIndex = 34;
|
||||
LabelCode.Text = "代号(存档标识)";
|
||||
LabelCode.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// TipItemType
|
||||
//
|
||||
TipItemType.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
TipItemType.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
TipItemType.Location = new Point(214, 128);
|
||||
TipItemType.Name = "TipItemType";
|
||||
TipItemType.Size = new Size(129, 27);
|
||||
TipItemType.TabIndex = 41;
|
||||
TipItemType.Text = "物品类型";
|
||||
TipItemType.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// TextName
|
||||
//
|
||||
TextName.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
TextName.Font = new Font("等线", 14.25F);
|
||||
TextName.Location = new Point(349, 78);
|
||||
TextName.Name = "TextName";
|
||||
TextName.Size = new Size(201, 27);
|
||||
TextName.TabIndex = 1;
|
||||
TextName.WordWrap = false;
|
||||
//
|
||||
// TipID
|
||||
//
|
||||
TipID.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
TipID.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
TipID.Location = new Point(214, 28);
|
||||
TipID.Name = "TipID";
|
||||
TipID.Size = new Size(129, 27);
|
||||
TipID.TabIndex = 40;
|
||||
TipID.Text = "物品编号";
|
||||
TipID.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// TextID
|
||||
//
|
||||
TextID.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
TextID.Font = new Font("等线", 14.25F);
|
||||
TextID.Location = new Point(349, 28);
|
||||
TextID.Name = "TextID";
|
||||
TextID.Size = new Size(201, 27);
|
||||
TextID.TabIndex = 0;
|
||||
TextID.WordWrap = false;
|
||||
//
|
||||
// TipName
|
||||
//
|
||||
TipName.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
TipName.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
TipName.Location = new Point(214, 78);
|
||||
TipName.Name = "TipName";
|
||||
TipName.Size = new Size(129, 27);
|
||||
TipName.TabIndex = 38;
|
||||
TipName.Text = "物品名称";
|
||||
TipName.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// LabelWeaponType
|
||||
//
|
||||
LabelWeaponType.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
LabelWeaponType.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
LabelWeaponType.Location = new Point(272, 192);
|
||||
LabelWeaponType.Name = "LabelWeaponType";
|
||||
LabelWeaponType.Size = new Size(129, 27);
|
||||
LabelWeaponType.TabIndex = 43;
|
||||
LabelWeaponType.Text = "武器类型";
|
||||
LabelWeaponType.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// CheckboxIsWeapon
|
||||
//
|
||||
CheckboxIsWeapon.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
CheckboxIsWeapon.CheckAlign = ContentAlignment.MiddleRight;
|
||||
CheckboxIsWeapon.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
CheckboxIsWeapon.ImageAlign = ContentAlignment.MiddleRight;
|
||||
CheckboxIsWeapon.Location = new Point(121, 192);
|
||||
CheckboxIsWeapon.Name = "CheckboxIsWeapon";
|
||||
CheckboxIsWeapon.Size = new Size(145, 27);
|
||||
CheckboxIsWeapon.TabIndex = 3;
|
||||
CheckboxIsWeapon.Text = "是武器";
|
||||
CheckboxIsWeapon.TextAlign = ContentAlignment.MiddleCenter;
|
||||
CheckboxIsWeapon.UseVisualStyleBackColor = true;
|
||||
CheckboxIsWeapon.CheckedChanged += CheckboxIsWeapon_CheckedChanged;
|
||||
//
|
||||
// CheckboxIsEquip
|
||||
//
|
||||
CheckboxIsEquip.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
CheckboxIsEquip.CheckAlign = ContentAlignment.MiddleRight;
|
||||
CheckboxIsEquip.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
CheckboxIsEquip.ImageAlign = ContentAlignment.MiddleRight;
|
||||
CheckboxIsEquip.Location = new Point(121, 232);
|
||||
CheckboxIsEquip.Name = "CheckboxIsEquip";
|
||||
CheckboxIsEquip.Size = new Size(145, 27);
|
||||
CheckboxIsEquip.TabIndex = 5;
|
||||
CheckboxIsEquip.Text = "可被装备";
|
||||
CheckboxIsEquip.TextAlign = ContentAlignment.MiddleCenter;
|
||||
CheckboxIsEquip.UseVisualStyleBackColor = true;
|
||||
CheckboxIsEquip.CheckedChanged += CheckboxIsEquip_CheckedChanged;
|
||||
//
|
||||
// LabelEquip
|
||||
//
|
||||
LabelEquip.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
LabelEquip.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
LabelEquip.Location = new Point(272, 232);
|
||||
LabelEquip.Name = "LabelEquip";
|
||||
LabelEquip.Size = new Size(129, 27);
|
||||
LabelEquip.TabIndex = 46;
|
||||
LabelEquip.Text = "装备类型";
|
||||
LabelEquip.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// CheckboxIsPurchasable
|
||||
//
|
||||
CheckboxIsPurchasable.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
CheckboxIsPurchasable.CheckAlign = ContentAlignment.MiddleRight;
|
||||
CheckboxIsPurchasable.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
CheckboxIsPurchasable.ImageAlign = ContentAlignment.MiddleRight;
|
||||
CheckboxIsPurchasable.Location = new Point(121, 272);
|
||||
CheckboxIsPurchasable.Name = "CheckboxIsPurchasable";
|
||||
CheckboxIsPurchasable.Size = new Size(145, 27);
|
||||
CheckboxIsPurchasable.TabIndex = 7;
|
||||
CheckboxIsPurchasable.Text = "可供购买";
|
||||
CheckboxIsPurchasable.TextAlign = ContentAlignment.MiddleCenter;
|
||||
CheckboxIsPurchasable.UseVisualStyleBackColor = true;
|
||||
CheckboxIsPurchasable.CheckedChanged += CheckboxIsPurchasable_CheckedChanged;
|
||||
//
|
||||
// TextPrice
|
||||
//
|
||||
TextPrice.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
TextPrice.Font = new Font("等线", 14.25F);
|
||||
TextPrice.Location = new Point(407, 272);
|
||||
TextPrice.Name = "TextPrice";
|
||||
TextPrice.Size = new Size(201, 27);
|
||||
TextPrice.TabIndex = 8;
|
||||
TextPrice.WordWrap = false;
|
||||
//
|
||||
// LabelPrice
|
||||
//
|
||||
LabelPrice.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
LabelPrice.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
LabelPrice.Location = new Point(272, 272);
|
||||
LabelPrice.Name = "LabelPrice";
|
||||
LabelPrice.Size = new Size(129, 27);
|
||||
LabelPrice.TabIndex = 49;
|
||||
LabelPrice.Text = "售价";
|
||||
LabelPrice.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// CheckboxIsSellable
|
||||
//
|
||||
CheckboxIsSellable.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
CheckboxIsSellable.CheckAlign = ContentAlignment.MiddleRight;
|
||||
CheckboxIsSellable.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
CheckboxIsSellable.ImageAlign = ContentAlignment.MiddleRight;
|
||||
CheckboxIsSellable.Location = new Point(121, 312);
|
||||
CheckboxIsSellable.Name = "CheckboxIsSellable";
|
||||
CheckboxIsSellable.Size = new Size(145, 27);
|
||||
CheckboxIsSellable.TabIndex = 9;
|
||||
CheckboxIsSellable.Text = "允许出售";
|
||||
CheckboxIsSellable.TextAlign = ContentAlignment.MiddleCenter;
|
||||
CheckboxIsSellable.UseVisualStyleBackColor = true;
|
||||
CheckboxIsSellable.CheckedChanged += CheckboxIsSellable_CheckedChanged;
|
||||
//
|
||||
// LabelNextSellTime
|
||||
//
|
||||
LabelNextSellTime.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
LabelNextSellTime.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
LabelNextSellTime.Location = new Point(272, 312);
|
||||
LabelNextSellTime.Name = "LabelNextSellTime";
|
||||
LabelNextSellTime.Size = new Size(160, 27);
|
||||
LabelNextSellTime.TabIndex = 52;
|
||||
LabelNextSellTime.Text = "下次可出售时间";
|
||||
LabelNextSellTime.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// CheckboxIsTradable
|
||||
//
|
||||
CheckboxIsTradable.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
CheckboxIsTradable.CheckAlign = ContentAlignment.MiddleRight;
|
||||
CheckboxIsTradable.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
CheckboxIsTradable.ImageAlign = ContentAlignment.MiddleRight;
|
||||
CheckboxIsTradable.Location = new Point(121, 352);
|
||||
CheckboxIsTradable.Name = "CheckboxIsTradable";
|
||||
CheckboxIsTradable.Size = new Size(145, 27);
|
||||
CheckboxIsTradable.TabIndex = 11;
|
||||
CheckboxIsTradable.Text = "允许交易";
|
||||
CheckboxIsTradable.TextAlign = ContentAlignment.MiddleCenter;
|
||||
CheckboxIsTradable.UseVisualStyleBackColor = true;
|
||||
CheckboxIsTradable.CheckedChanged += CheckboxIsTradable_CheckedChanged;
|
||||
//
|
||||
// LabelNextTradeTime
|
||||
//
|
||||
LabelNextTradeTime.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
LabelNextTradeTime.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
LabelNextTradeTime.Location = new Point(272, 352);
|
||||
LabelNextTradeTime.Name = "LabelNextTradeTime";
|
||||
LabelNextTradeTime.Size = new Size(160, 27);
|
||||
LabelNextTradeTime.TabIndex = 55;
|
||||
LabelNextTradeTime.Text = "下次可交易时间";
|
||||
LabelNextTradeTime.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// DateTimePickerSell
|
||||
//
|
||||
DateTimePickerSell.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
DateTimePickerSell.Location = new Point(438, 312);
|
||||
DateTimePickerSell.Name = "DateTimePickerSell";
|
||||
DateTimePickerSell.Size = new Size(170, 27);
|
||||
DateTimePickerSell.TabIndex = 10;
|
||||
//
|
||||
// DateTimePickerTrade
|
||||
//
|
||||
DateTimePickerTrade.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
DateTimePickerTrade.Location = new Point(438, 352);
|
||||
DateTimePickerTrade.Name = "DateTimePickerTrade";
|
||||
DateTimePickerTrade.Size = new Size(170, 27);
|
||||
DateTimePickerTrade.TabIndex = 12;
|
||||
//
|
||||
// ComboWeapon
|
||||
//
|
||||
ComboWeapon.Font = new Font("Microsoft YaHei UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
ComboWeapon.FormattingEnabled = true;
|
||||
ComboWeapon.Items.AddRange(new object[] { "单手剑", "双手重剑", "弓", "手枪", "步枪", "双持短刀", "法器", "法杖", "长柄", "拳套", "暗器" });
|
||||
ComboWeapon.Location = new Point(407, 188);
|
||||
ComboWeapon.Name = "ComboWeapon";
|
||||
ComboWeapon.Size = new Size(201, 33);
|
||||
ComboWeapon.TabIndex = 4;
|
||||
//
|
||||
// ComboEquip
|
||||
//
|
||||
ComboEquip.Font = new Font("Microsoft YaHei UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
ComboEquip.FormattingEnabled = true;
|
||||
ComboEquip.Items.AddRange(new object[] { "魔法卡包", "武器", "防具", "鞋子", "饰品" });
|
||||
ComboEquip.Location = new Point(407, 228);
|
||||
ComboEquip.Name = "ComboEquip";
|
||||
ComboEquip.Size = new Size(201, 33);
|
||||
ComboEquip.TabIndex = 6;
|
||||
//
|
||||
// ComboItemType
|
||||
//
|
||||
ComboItemType.Font = new Font("Microsoft YaHei UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
ComboItemType.FormattingEnabled = true;
|
||||
ComboItemType.Items.AddRange(new object[] { "魔法卡包", "武器", "防具", "鞋子", "饰品", "消耗品", "魔法卡", "收藏品", "特殊物品", "任务物品", "礼包", "其他" });
|
||||
ComboItemType.Location = new Point(349, 125);
|
||||
ComboItemType.Name = "ComboItemType";
|
||||
ComboItemType.Size = new Size(201, 33);
|
||||
ComboItemType.TabIndex = 56;
|
||||
//
|
||||
// CreateItem
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 17F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
ClientSize = new Size(743, 469);
|
||||
Controls.Add(ComboItemType);
|
||||
Controls.Add(ComboEquip);
|
||||
Controls.Add(ComboWeapon);
|
||||
Controls.Add(DateTimePickerTrade);
|
||||
Controls.Add(DateTimePickerSell);
|
||||
Controls.Add(CheckboxIsTradable);
|
||||
Controls.Add(LabelNextTradeTime);
|
||||
Controls.Add(CheckboxIsSellable);
|
||||
Controls.Add(LabelNextSellTime);
|
||||
Controls.Add(CheckboxIsPurchasable);
|
||||
Controls.Add(TextPrice);
|
||||
Controls.Add(LabelPrice);
|
||||
Controls.Add(CheckboxIsEquip);
|
||||
Controls.Add(LabelEquip);
|
||||
Controls.Add(CheckboxIsWeapon);
|
||||
Controls.Add(LabelWeaponType);
|
||||
Controls.Add(TipItemType);
|
||||
Controls.Add(TextName);
|
||||
Controls.Add(TipID);
|
||||
Controls.Add(TextID);
|
||||
Controls.Add(TipName);
|
||||
Controls.Add(TextCode);
|
||||
Controls.Add(LabelCode);
|
||||
Controls.Add(BtnCreate);
|
||||
Name = "CreateItem";
|
||||
StartPosition = FormStartPosition.CenterScreen;
|
||||
Text = "物品创建器";
|
||||
ResumeLayout(false);
|
||||
PerformLayout();
|
||||
}
|
||||
|
||||
#endregion
|
||||
private Button BtnCreate;
|
||||
private TextBox TextCode;
|
||||
private Label LabelCode;
|
||||
private Label TipItemType;
|
||||
private TextBox TextName;
|
||||
private Label TipID;
|
||||
private TextBox TextID;
|
||||
private Label TipName;
|
||||
private Label LabelWeaponType;
|
||||
private CheckBox CheckboxIsWeapon;
|
||||
private CheckBox CheckboxIsEquip;
|
||||
private Label LabelEquip;
|
||||
private CheckBox CheckboxIsPurchasable;
|
||||
private TextBox TextPrice;
|
||||
private Label LabelPrice;
|
||||
private CheckBox CheckboxIsSellable;
|
||||
private Label LabelNextSellTime;
|
||||
private CheckBox CheckboxIsTradable;
|
||||
private Label LabelNextTradeTime;
|
||||
private DateTimePicker DateTimePickerSell;
|
||||
private DateTimePicker DateTimePickerTrade;
|
||||
private ComboBox ComboWeapon;
|
||||
private ComboBox ComboEquip;
|
||||
private ComboBox ComboItemType;
|
||||
}
|
||||
}
|
||||
199
Desktop/Solutions/EntityCreator/CreateItem.cs
Normal file
199
Desktop/Solutions/EntityCreator/CreateItem.cs
Normal file
@ -0,0 +1,199 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
171
Desktop/Solutions/EntityCreator/CreateSkill.Designer.cs
generated
Normal file
171
Desktop/Solutions/EntityCreator/CreateSkill.Designer.cs
generated
Normal file
@ -0,0 +1,171 @@
|
||||
namespace Milimoe.FunGame.Testing.Desktop.Solutions
|
||||
{
|
||||
partial class CreateSkill
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
TipName = new Label();
|
||||
TextID = new TextBox();
|
||||
TextName = new TextBox();
|
||||
TipID = new Label();
|
||||
BtnCreate = new Button();
|
||||
TextCode = new TextBox();
|
||||
LabelCode = new Label();
|
||||
TipSkillType = new Label();
|
||||
ComboSkillType = new ComboBox();
|
||||
SuspendLayout();
|
||||
//
|
||||
// TipName
|
||||
//
|
||||
TipName.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
TipName.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
TipName.Location = new Point(78, 95);
|
||||
TipName.Name = "TipName";
|
||||
TipName.Size = new Size(129, 27);
|
||||
TipName.TabIndex = 0;
|
||||
TipName.Text = "技能名称";
|
||||
TipName.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// TextID
|
||||
//
|
||||
TextID.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
TextID.Font = new Font("等线", 14.25F);
|
||||
TextID.Location = new Point(213, 45);
|
||||
TextID.Name = "TextID";
|
||||
TextID.Size = new Size(201, 27);
|
||||
TextID.TabIndex = 0;
|
||||
TextID.WordWrap = false;
|
||||
//
|
||||
// TextName
|
||||
//
|
||||
TextName.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
TextName.Font = new Font("等线", 14.25F);
|
||||
TextName.Location = new Point(213, 95);
|
||||
TextName.Name = "TextName";
|
||||
TextName.Size = new Size(201, 27);
|
||||
TextName.TabIndex = 1;
|
||||
TextName.WordWrap = false;
|
||||
//
|
||||
// TipID
|
||||
//
|
||||
TipID.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
TipID.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
TipID.Location = new Point(78, 45);
|
||||
TipID.Name = "TipID";
|
||||
TipID.Size = new Size(129, 27);
|
||||
TipID.TabIndex = 2;
|
||||
TipID.Text = "技能编号";
|
||||
TipID.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// BtnCreate
|
||||
//
|
||||
BtnCreate.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
BtnCreate.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
BtnCreate.Location = new Point(420, 216);
|
||||
BtnCreate.Name = "BtnCreate";
|
||||
BtnCreate.Size = new Size(103, 45);
|
||||
BtnCreate.TabIndex = 4;
|
||||
BtnCreate.Text = "创建";
|
||||
BtnCreate.UseVisualStyleBackColor = true;
|
||||
BtnCreate.Click += BtnCreate_Click;
|
||||
//
|
||||
// TextCode
|
||||
//
|
||||
TextCode.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
TextCode.Font = new Font("等线", 14.25F);
|
||||
TextCode.Location = new Point(199, 226);
|
||||
TextCode.Name = "TextCode";
|
||||
TextCode.Size = new Size(215, 27);
|
||||
TextCode.TabIndex = 3;
|
||||
TextCode.WordWrap = false;
|
||||
//
|
||||
// LabelCode
|
||||
//
|
||||
LabelCode.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
LabelCode.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
LabelCode.Location = new Point(23, 226);
|
||||
LabelCode.Name = "LabelCode";
|
||||
LabelCode.Size = new Size(170, 27);
|
||||
LabelCode.TabIndex = 34;
|
||||
LabelCode.Text = "代号(存档标识)";
|
||||
LabelCode.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// TipSkillType
|
||||
//
|
||||
TipSkillType.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
TipSkillType.Font = new Font("等线", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
TipSkillType.Location = new Point(78, 145);
|
||||
TipSkillType.Name = "TipSkillType";
|
||||
TipSkillType.Size = new Size(129, 27);
|
||||
TipSkillType.TabIndex = 35;
|
||||
TipSkillType.Text = "技能类型";
|
||||
TipSkillType.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// ComboSkillType
|
||||
//
|
||||
ComboSkillType.Font = new Font("Microsoft YaHei UI", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
ComboSkillType.FormattingEnabled = true;
|
||||
ComboSkillType.Items.AddRange(new object[] { "魔法", "战技", "爆发技", "被动", "物品" });
|
||||
ComboSkillType.Location = new Point(213, 141);
|
||||
ComboSkillType.Name = "ComboSkillType";
|
||||
ComboSkillType.Size = new Size(201, 33);
|
||||
ComboSkillType.TabIndex = 57;
|
||||
//
|
||||
// CreateSkill
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 17F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
ClientSize = new Size(535, 273);
|
||||
Controls.Add(ComboSkillType);
|
||||
Controls.Add(TipSkillType);
|
||||
Controls.Add(TextCode);
|
||||
Controls.Add(LabelCode);
|
||||
Controls.Add(BtnCreate);
|
||||
Controls.Add(TextName);
|
||||
Controls.Add(TipID);
|
||||
Controls.Add(TextID);
|
||||
Controls.Add(TipName);
|
||||
Name = "CreateSkill";
|
||||
StartPosition = FormStartPosition.CenterScreen;
|
||||
Text = "技能创建器";
|
||||
ResumeLayout(false);
|
||||
PerformLayout();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private Label TipName;
|
||||
private TextBox TextID;
|
||||
private TextBox TextName;
|
||||
private Label TipID;
|
||||
private Button BtnCreate;
|
||||
private TextBox TextCode;
|
||||
private Label LabelCode;
|
||||
private Label TipSkillType;
|
||||
private ComboBox ComboSkillType;
|
||||
}
|
||||
}
|
||||
104
Desktop/Solutions/EntityCreator/CreateSkill.cs
Normal file
104
Desktop/Solutions/EntityCreator/CreateSkill.cs
Normal file
@ -0,0 +1,104 @@
|
||||
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 = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -46,13 +46,15 @@
|
||||
为角色添加技能 = new Button();
|
||||
为角色添加物品 = new Button();
|
||||
重新读取全部 = new Button();
|
||||
删除角色物品 = new Button();
|
||||
删除角色技能 = new Button();
|
||||
列表.SuspendLayout();
|
||||
SuspendLayout();
|
||||
//
|
||||
// 查看现有角色
|
||||
//
|
||||
查看现有角色.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
查看现有角色.Location = new Point(460, 103);
|
||||
查看现有角色.Location = new Point(460, 22);
|
||||
查看现有角色.Name = "查看现有角色";
|
||||
查看现有角色.Size = new Size(98, 35);
|
||||
查看现有角色.TabIndex = 0;
|
||||
@ -63,10 +65,10 @@
|
||||
// 查看现有技能
|
||||
//
|
||||
查看现有技能.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
查看现有技能.Location = new Point(460, 144);
|
||||
查看现有技能.Location = new Point(460, 63);
|
||||
查看现有技能.Name = "查看现有技能";
|
||||
查看现有技能.Size = new Size(98, 35);
|
||||
查看现有技能.TabIndex = 1;
|
||||
查看现有技能.TabIndex = 2;
|
||||
查看现有技能.Text = "查看现有技能";
|
||||
查看现有技能.UseVisualStyleBackColor = true;
|
||||
查看现有技能.Click += 查看现有技能_Click;
|
||||
@ -74,10 +76,10 @@
|
||||
// 查看现有物品
|
||||
//
|
||||
查看现有物品.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
查看现有物品.Location = new Point(460, 185);
|
||||
查看现有物品.Location = new Point(460, 104);
|
||||
查看现有物品.Name = "查看现有物品";
|
||||
查看现有物品.Size = new Size(98, 35);
|
||||
查看现有物品.TabIndex = 2;
|
||||
查看现有物品.TabIndex = 4;
|
||||
查看现有物品.Text = "查看现有物品";
|
||||
查看现有物品.UseVisualStyleBackColor = true;
|
||||
查看现有物品.Click += 查看现有物品_Click;
|
||||
@ -88,7 +90,7 @@
|
||||
创建角色.Location = new Point(564, 226);
|
||||
创建角色.Name = "创建角色";
|
||||
创建角色.Size = new Size(98, 35);
|
||||
创建角色.TabIndex = 3;
|
||||
创建角色.TabIndex = 9;
|
||||
创建角色.Text = "创建角色";
|
||||
创建角色.UseVisualStyleBackColor = true;
|
||||
创建角色.Click += 创建角色_Click;
|
||||
@ -99,7 +101,7 @@
|
||||
创建技能.Location = new Point(564, 267);
|
||||
创建技能.Name = "创建技能";
|
||||
创建技能.Size = new Size(98, 35);
|
||||
创建技能.TabIndex = 4;
|
||||
创建技能.TabIndex = 11;
|
||||
创建技能.Text = "创建技能";
|
||||
创建技能.UseVisualStyleBackColor = true;
|
||||
创建技能.Click += 创建技能_Click;
|
||||
@ -110,7 +112,7 @@
|
||||
创建物品.Location = new Point(564, 308);
|
||||
创建物品.Name = "创建物品";
|
||||
创建物品.Size = new Size(98, 35);
|
||||
创建物品.TabIndex = 5;
|
||||
创建物品.TabIndex = 13;
|
||||
创建物品.Text = "创建物品";
|
||||
创建物品.UseVisualStyleBackColor = true;
|
||||
创建物品.Click += 创建物品_Click;
|
||||
@ -121,7 +123,7 @@
|
||||
删除物品.Location = new Point(460, 308);
|
||||
删除物品.Name = "删除物品";
|
||||
删除物品.Size = new Size(98, 35);
|
||||
删除物品.TabIndex = 8;
|
||||
删除物品.TabIndex = 12;
|
||||
删除物品.Text = "删除物品";
|
||||
删除物品.UseVisualStyleBackColor = true;
|
||||
删除物品.Click += 删除物品_Click;
|
||||
@ -132,7 +134,7 @@
|
||||
删除技能.Location = new Point(460, 267);
|
||||
删除技能.Name = "删除技能";
|
||||
删除技能.Size = new Size(98, 35);
|
||||
删除技能.TabIndex = 7;
|
||||
删除技能.TabIndex = 10;
|
||||
删除技能.Text = "删除技能";
|
||||
删除技能.UseVisualStyleBackColor = true;
|
||||
删除技能.Click += 删除技能_Click;
|
||||
@ -143,7 +145,7 @@
|
||||
删除角色.Location = new Point(460, 226);
|
||||
删除角色.Name = "删除角色";
|
||||
删除角色.Size = new Size(98, 35);
|
||||
删除角色.TabIndex = 6;
|
||||
删除角色.TabIndex = 8;
|
||||
删除角色.Text = "删除角色";
|
||||
删除角色.UseVisualStyleBackColor = true;
|
||||
删除角色.Click += 删除角色_Click;
|
||||
@ -175,7 +177,7 @@
|
||||
全部保存.Location = new Point(460, 349);
|
||||
全部保存.Name = "全部保存";
|
||||
全部保存.Size = new Size(98, 35);
|
||||
全部保存.TabIndex = 12;
|
||||
全部保存.TabIndex = 14;
|
||||
全部保存.Text = "全部保存";
|
||||
全部保存.UseVisualStyleBackColor = true;
|
||||
全部保存.Click += 全部保存_Click;
|
||||
@ -186,7 +188,7 @@
|
||||
保存角色.Location = new Point(564, 349);
|
||||
保存角色.Name = "保存角色";
|
||||
保存角色.Size = new Size(98, 35);
|
||||
保存角色.TabIndex = 11;
|
||||
保存角色.TabIndex = 15;
|
||||
保存角色.Text = "保存角色";
|
||||
保存角色.UseVisualStyleBackColor = true;
|
||||
保存角色.Click += 保存角色_Click;
|
||||
@ -197,7 +199,7 @@
|
||||
保存技能.Location = new Point(460, 390);
|
||||
保存技能.Name = "保存技能";
|
||||
保存技能.Size = new Size(98, 35);
|
||||
保存技能.TabIndex = 10;
|
||||
保存技能.TabIndex = 16;
|
||||
保存技能.Text = "保存技能";
|
||||
保存技能.UseVisualStyleBackColor = true;
|
||||
保存技能.Click += 保存技能_Click;
|
||||
@ -208,7 +210,7 @@
|
||||
保存物品.Location = new Point(564, 390);
|
||||
保存物品.Name = "保存物品";
|
||||
保存物品.Size = new Size(98, 35);
|
||||
保存物品.TabIndex = 13;
|
||||
保存物品.TabIndex = 17;
|
||||
保存物品.Text = "保存物品";
|
||||
保存物品.UseVisualStyleBackColor = true;
|
||||
保存物品.Click += 保存物品_Click;
|
||||
@ -217,10 +219,10 @@
|
||||
//
|
||||
为角色添加技能.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
为角色添加技能.Font = new Font("Microsoft YaHei UI", 8F);
|
||||
为角色添加技能.Location = new Point(564, 103);
|
||||
为角色添加技能.Location = new Point(564, 22);
|
||||
为角色添加技能.Name = "为角色添加技能";
|
||||
为角色添加技能.Size = new Size(98, 35);
|
||||
为角色添加技能.TabIndex = 14;
|
||||
为角色添加技能.TabIndex = 1;
|
||||
为角色添加技能.Text = "为角色添加技能";
|
||||
为角色添加技能.UseVisualStyleBackColor = true;
|
||||
为角色添加技能.Click += 为角色添加技能_Click;
|
||||
@ -229,10 +231,10 @@
|
||||
//
|
||||
为角色添加物品.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
为角色添加物品.Font = new Font("Microsoft YaHei UI", 8F);
|
||||
为角色添加物品.Location = new Point(564, 144);
|
||||
为角色添加物品.Location = new Point(564, 63);
|
||||
为角色添加物品.Name = "为角色添加物品";
|
||||
为角色添加物品.Size = new Size(98, 35);
|
||||
为角色添加物品.TabIndex = 15;
|
||||
为角色添加物品.TabIndex = 3;
|
||||
为角色添加物品.Text = "为角色添加物品";
|
||||
为角色添加物品.UseVisualStyleBackColor = true;
|
||||
为角色添加物品.Click += 为角色添加物品_Click;
|
||||
@ -244,16 +246,42 @@
|
||||
重新读取全部.Location = new Point(564, 185);
|
||||
重新读取全部.Name = "重新读取全部";
|
||||
重新读取全部.Size = new Size(98, 35);
|
||||
重新读取全部.TabIndex = 16;
|
||||
重新读取全部.TabIndex = 7;
|
||||
重新读取全部.Text = "重新读取全部";
|
||||
重新读取全部.UseVisualStyleBackColor = true;
|
||||
重新读取全部.Click += 重新读取全部_Click;
|
||||
//
|
||||
// 删除角色物品
|
||||
//
|
||||
删除角色物品.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
删除角色物品.Font = new Font("Microsoft YaHei UI", 8F);
|
||||
删除角色物品.Location = new Point(564, 145);
|
||||
删除角色物品.Name = "删除角色物品";
|
||||
删除角色物品.Size = new Size(98, 35);
|
||||
删除角色物品.TabIndex = 6;
|
||||
删除角色物品.Text = "删除角色物品";
|
||||
删除角色物品.UseVisualStyleBackColor = true;
|
||||
删除角色物品.Click += 删除角色物品_Click;
|
||||
//
|
||||
// 删除角色技能
|
||||
//
|
||||
删除角色技能.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
删除角色技能.Font = new Font("Microsoft YaHei UI", 8F);
|
||||
删除角色技能.Location = new Point(564, 104);
|
||||
删除角色技能.Name = "删除角色技能";
|
||||
删除角色技能.Size = new Size(98, 35);
|
||||
删除角色技能.TabIndex = 5;
|
||||
删除角色技能.Text = "删除角色技能";
|
||||
删除角色技能.UseVisualStyleBackColor = true;
|
||||
删除角色技能.Click += 删除角色技能_Click;
|
||||
//
|
||||
// EntityCreator
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 17F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
ClientSize = new Size(674, 437);
|
||||
Controls.Add(删除角色物品);
|
||||
Controls.Add(删除角色技能);
|
||||
Controls.Add(重新读取全部);
|
||||
Controls.Add(为角色添加物品);
|
||||
Controls.Add(为角色添加技能);
|
||||
@ -272,6 +300,7 @@
|
||||
Controls.Add(查看现有技能);
|
||||
Controls.Add(查看现有角色);
|
||||
Name = "EntityCreator";
|
||||
StartPosition = FormStartPosition.CenterScreen;
|
||||
Text = "实体创建器";
|
||||
列表.ResumeLayout(false);
|
||||
ResumeLayout(false);
|
||||
@ -297,5 +326,7 @@
|
||||
private Button 为角色添加技能;
|
||||
private Button 为角色添加物品;
|
||||
private Button 重新读取全部;
|
||||
private Button 删除角色物品;
|
||||
private Button 删除角色技能;
|
||||
}
|
||||
}
|
||||
440
Desktop/Solutions/EntityCreator/EntityCreator.cs
Normal file
440
Desktop/Solutions/EntityCreator/EntityCreator.cs
Normal file
@ -0,0 +1,440 @@
|
||||
using Microsoft.VisualBasic;
|
||||
using Milimoe.FunGame.Core.Api.Utility;
|
||||
using Milimoe.FunGame.Core.Entity;
|
||||
using Milimoe.FunGame.Core.Library.Common.Addon;
|
||||
using Milimoe.FunGame.Core.Library.Constant;
|
||||
|
||||
namespace Milimoe.FunGame.Testing.Desktop.Solutions
|
||||
{
|
||||
public partial class EntityCreator : Form
|
||||
{
|
||||
private static GameModuleLoader? GameModuleLoader { get; set; } = null;
|
||||
private CharacterCreator CharacterCreator { get; } = new();
|
||||
private SkillCreator SkillCreator { get; } = new();
|
||||
private ItemCreator ItemCreator { get; } = new();
|
||||
private bool CheckSelectedIndex => 实际列表.SelectedIndex != -1 && 实际列表.SelectedIndex < 实际列表.Items.Count;
|
||||
private int nowClick = 0;
|
||||
|
||||
public EntityCreator()
|
||||
{
|
||||
InitializeComponent();
|
||||
GameModuleLoader = LoadModules();
|
||||
CharacterCreator.Load();
|
||||
SkillCreator.Load();
|
||||
ItemCreator.Load();
|
||||
查看现有技能方法();
|
||||
查看现有物品方法();
|
||||
查看现有角色方法();
|
||||
}
|
||||
|
||||
private void 查看现有角色方法()
|
||||
{
|
||||
实际列表.Items.Clear();
|
||||
foreach (string name in CharacterCreator.LoadedCharacters.Keys)
|
||||
{
|
||||
实际列表.Items.Add(CharacterCreator.LoadedCharacters[name]);
|
||||
}
|
||||
nowClick = 0;
|
||||
}
|
||||
|
||||
private void 查看现有技能方法()
|
||||
{
|
||||
实际列表.Items.Clear();
|
||||
foreach (string name in SkillCreator.LoadedSkills.OrderBy(kv => kv.Value.Id).Select(kv => kv.Key))
|
||||
{
|
||||
实际列表.Items.Add(GetSkillDisplayName(SkillCreator, name));
|
||||
}
|
||||
nowClick = 1;
|
||||
}
|
||||
|
||||
private void 查看现有物品方法()
|
||||
{
|
||||
实际列表.Items.Clear();
|
||||
foreach (string name in ItemCreator.LoadedItems.OrderBy(kv => kv.Value.Id).Select(kv => kv.Key))
|
||||
{
|
||||
实际列表.Items.Add(GetItemDisplayName(ItemCreator, 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)
|
||||
{
|
||||
CharacterCreator.Save();
|
||||
SkillCreator.Save();
|
||||
ItemCreator.Save();
|
||||
MessageBox.Show("保存成功!");
|
||||
}
|
||||
|
||||
private void 保存角色_Click(object sender, EventArgs e)
|
||||
{
|
||||
CharacterCreator.Save();
|
||||
MessageBox.Show("保存成功!");
|
||||
}
|
||||
|
||||
private void 保存技能_Click(object sender, EventArgs e)
|
||||
{
|
||||
SkillCreator.Save();
|
||||
MessageBox.Show("保存成功!");
|
||||
}
|
||||
|
||||
private void 保存物品_Click(object sender, EventArgs e)
|
||||
{
|
||||
ItemCreator.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(CharacterCreator, SkillCreator, ItemCreator);
|
||||
switch (nowClick)
|
||||
{
|
||||
case 0:
|
||||
Character? character = CharacterCreator.LoadedCharacters.Values.Where(c => c.ToString() == 实际列表.Items[实际列表.SelectedIndex].ToString()).FirstOrDefault();
|
||||
d.SetText(nowClick, character, character?.GetInfo() ?? "");
|
||||
d.ShowDialog();
|
||||
break;
|
||||
case 1:
|
||||
Skill? s = SkillCreator.LoadedSkills.Where(kv => GetSkillDisplayName(SkillCreator, 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 = ItemCreator.LoadedItems.Where(kv => GetItemDisplayName(ItemCreator, 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 (SkillCreator.LoadedSkills.Count != 0)
|
||||
{
|
||||
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.ShowDialog();
|
||||
string selected = l.SelectItem;
|
||||
Character? c = CharacterCreator.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();
|
||||
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 (ItemCreator.LoadedItems.Count != 0)
|
||||
{
|
||||
ShowList l = new();
|
||||
l.AddListItem(ItemCreator.LoadedItems.OrderBy(kv => kv.Value.Id).Select(kv => GetItemDisplayName(ItemCreator, kv.Key)).ToArray());
|
||||
l.ShowDialog();
|
||||
string selected = l.SelectItem;
|
||||
Character? c = CharacterCreator.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();
|
||||
if (c != null && i != null)
|
||||
{
|
||||
Item? i2 = 从模组加载器中获取物品(i.Id, i.Name, i.ItemType);
|
||||
if (i2 != null)
|
||||
{
|
||||
i.SetPropertyToItemModuleNew(i2);
|
||||
i = i2;
|
||||
}
|
||||
c.Equip(i);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show("物品列表为空!");
|
||||
}
|
||||
}
|
||||
|
||||
private void 删除角色技能方法()
|
||||
{
|
||||
Character? c = CharacterCreator.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 = CharacterCreator.LoadedCharacters.Values.Where(c => c.ToString() == 实际列表.Items[实际列表.SelectedIndex].ToString()).FirstOrDefault();
|
||||
if (c != null)
|
||||
{
|
||||
if (c.Items.Count != 0)
|
||||
{
|
||||
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)
|
||||
{
|
||||
c.UnEquip(c.EquipSlot.GetEquipItemToSlot(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)
|
||||
{
|
||||
CharacterCreator.OpenCreator();
|
||||
查看现有角色方法();
|
||||
}
|
||||
|
||||
private void 创建技能_Click(object sender, EventArgs e)
|
||||
{
|
||||
SkillCreator.OpenCreator();
|
||||
查看现有技能方法();
|
||||
}
|
||||
|
||||
private void 创建物品_Click(object sender, EventArgs e)
|
||||
{
|
||||
ItemCreator.OpenCreator();
|
||||
查看现有物品方法();
|
||||
}
|
||||
|
||||
private void 删除角色_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (CheckSelectedIndex && nowClick == 0 && MessageBox.Show("是否删除", "删除", MessageBoxButtons.YesNo) == DialogResult.Yes)
|
||||
{
|
||||
string name = CharacterCreator.LoadedCharacters.Where(ky => ky.Value.ToString() == 实际列表.Items[实际列表.SelectedIndex].ToString()).FirstOrDefault().Key ?? "";
|
||||
if (CharacterCreator.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 = SkillCreator.LoadedSkills.Where(kv => GetSkillDisplayName(SkillCreator, kv.Key) == 实际列表.Items[实际列表.SelectedIndex].ToString()).FirstOrDefault().Key ?? "";
|
||||
if (SkillCreator.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 = ItemCreator.LoadedItems.Where(kv => GetItemDisplayName(ItemCreator, kv.Key) == 实际列表.Items[实际列表.SelectedIndex].ToString()).FirstOrDefault().Key ?? "";
|
||||
if (ItemCreator.Remove(name))
|
||||
{
|
||||
MessageBox.Show("删除成功!");
|
||||
查看现有物品方法();
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show("删除失败!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void 重新读取全部_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (MessageBox.Show("重新读取会丢失未保存的数据,是否确认重新读取全部?", "重新读取全部", MessageBoxButtons.YesNo) == DialogResult.Yes)
|
||||
{
|
||||
CharacterCreator.Load();
|
||||
SkillCreator.Load();
|
||||
ItemCreator.Load();
|
||||
查看现有技能方法();
|
||||
查看现有物品方法();
|
||||
查看现有角色方法();
|
||||
}
|
||||
}
|
||||
|
||||
public static string GetSkillDisplayName(SkillCreator skillCreator, string name)
|
||||
{
|
||||
if (skillCreator.LoadedSkills.TryGetValue(name, out Skill? skill) && skill != null)
|
||||
{
|
||||
return $"[ {name} ] {skill.GetIdName()}";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public static string GetItemDisplayName(ItemCreator itemCreator, string name)
|
||||
{
|
||||
if (itemCreator.LoadedItems.TryGetValue(name, out Item? item) && item != null)
|
||||
{
|
||||
return $"[ {name} ] {item.GetIdName()}";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
private static ItemType SelectItemType()
|
||||
{
|
||||
ShowList l = new();
|
||||
l.AddListItem([ItemType.MagicCardPack, ItemType.Weapon, ItemType.Armor, ItemType.Shoes, ItemType.Accessory,
|
||||
ItemType.Consumable, ItemType.MagicCard, ItemType.Collectible, ItemType.SpecialItem, ItemType.QuestItem, ItemType.GiftBox, ItemType.Others]);
|
||||
l.Text = "选择一个物品类型";
|
||||
l.ShowDialog();
|
||||
return Enum.TryParse(l.SelectItem, out ItemType type) ? type : ItemType.Others;
|
||||
}
|
||||
|
||||
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, []);
|
||||
}
|
||||
}
|
||||
}
|
||||
120
Desktop/Solutions/EntityCreator/EntityCreator.resx
Normal file
120
Desktop/Solutions/EntityCreator/EntityCreator.resx
Normal file
@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
||||
@ -9,7 +9,7 @@ namespace Milimoe.FunGame.Testing.Desktop.Solutions
|
||||
|
||||
public void Load()
|
||||
{
|
||||
EntityModuleConfig<Item> config = new("redbud.fun.entitycreator", "itemcreator");
|
||||
EntityModuleConfig<Item> config = new("EntityCreator", "item.creator");
|
||||
config.LoadConfig();
|
||||
LoadedItems = new(config);
|
||||
}
|
||||
@ -26,12 +26,18 @@ namespace Milimoe.FunGame.Testing.Desktop.Solutions
|
||||
|
||||
public void Save()
|
||||
{
|
||||
EntityModuleConfig<Item> config = new("redbud.fun.entitycreator", "itemcreator");
|
||||
EntityModuleConfig<Item> config = new("EntityCreator", "item.creator");
|
||||
foreach (string key in LoadedItems.Keys)
|
||||
{
|
||||
config.Add(key, LoadedItems[key]);
|
||||
}
|
||||
config.SaveConfig();
|
||||
}
|
||||
|
||||
public void OpenCreator(Item? item = null)
|
||||
{
|
||||
CreateItem creator = new(this, item);
|
||||
creator.ShowDialog();
|
||||
}
|
||||
}
|
||||
}
|
||||
130
Desktop/Solutions/EntityCreator/ShowDetail.Designer.cs
generated
Normal file
130
Desktop/Solutions/EntityCreator/ShowDetail.Designer.cs
generated
Normal file
@ -0,0 +1,130 @@
|
||||
namespace Milimoe.FunGame.Testing.Desktop.Solutions
|
||||
{
|
||||
partial class ShowDetail
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
详细内容 = new RichTextBox();
|
||||
编辑 = new Button();
|
||||
加技能 = new Button();
|
||||
加物品 = new Button();
|
||||
删物品 = new Button();
|
||||
删技能 = new Button();
|
||||
SuspendLayout();
|
||||
//
|
||||
// richTextBox1
|
||||
//
|
||||
详细内容.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
|
||||
详细内容.Location = new Point(12, 12);
|
||||
详细内容.Name = "richTextBox1";
|
||||
详细内容.ReadOnly = true;
|
||||
详细内容.Size = new Size(584, 513);
|
||||
详细内容.TabIndex = 0;
|
||||
详细内容.Text = "";
|
||||
//
|
||||
// 编辑
|
||||
//
|
||||
编辑.Font = new Font("等线", 18F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
编辑.Location = new Point(602, 456);
|
||||
编辑.Name = "编辑";
|
||||
编辑.Size = new Size(89, 69);
|
||||
编辑.TabIndex = 1;
|
||||
编辑.Text = "编辑";
|
||||
编辑.UseVisualStyleBackColor = true;
|
||||
编辑.Click += 编辑_Click;
|
||||
//
|
||||
// 加技能
|
||||
//
|
||||
加技能.Font = new Font("等线", 15F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
加技能.Location = new Point(602, 306);
|
||||
加技能.Name = "加技能";
|
||||
加技能.Size = new Size(89, 69);
|
||||
加技能.TabIndex = 2;
|
||||
加技能.Text = "加技能";
|
||||
加技能.UseVisualStyleBackColor = true;
|
||||
加技能.Click += 加技能_Click;
|
||||
//
|
||||
// 加物品
|
||||
//
|
||||
加物品.Font = new Font("等线", 15F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
加物品.Location = new Point(602, 381);
|
||||
加物品.Name = "加物品";
|
||||
加物品.Size = new Size(89, 69);
|
||||
加物品.TabIndex = 3;
|
||||
加物品.Text = "加物品";
|
||||
加物品.UseVisualStyleBackColor = true;
|
||||
加物品.Click += 加物品_Click;
|
||||
//
|
||||
// 删物品
|
||||
//
|
||||
删物品.Font = new Font("等线", 15F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
删物品.Location = new Point(602, 231);
|
||||
删物品.Name = "删物品";
|
||||
删物品.Size = new Size(89, 69);
|
||||
删物品.TabIndex = 5;
|
||||
删物品.Text = "删物品";
|
||||
删物品.UseVisualStyleBackColor = true;
|
||||
删物品.Click += 删物品_Click;
|
||||
//
|
||||
// 删技能
|
||||
//
|
||||
删技能.Font = new Font("等线", 15F, FontStyle.Regular, GraphicsUnit.Point, 134);
|
||||
删技能.Location = new Point(602, 156);
|
||||
删技能.Name = "删技能";
|
||||
删技能.Size = new Size(89, 69);
|
||||
删技能.TabIndex = 4;
|
||||
删技能.Text = "删技能";
|
||||
删技能.UseVisualStyleBackColor = true;
|
||||
删技能.Click += 删技能_Click;
|
||||
//
|
||||
// ShowDetail
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 17F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
ClientSize = new Size(697, 537);
|
||||
Controls.Add(删物品);
|
||||
Controls.Add(删技能);
|
||||
Controls.Add(加物品);
|
||||
Controls.Add(加技能);
|
||||
Controls.Add(编辑);
|
||||
Controls.Add(详细内容);
|
||||
Name = "ShowDetail";
|
||||
StartPosition = FormStartPosition.CenterScreen;
|
||||
Text = "ShowDetail";
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private RichTextBox 详细内容;
|
||||
private Button 编辑;
|
||||
private Button 加技能;
|
||||
private Button 加物品;
|
||||
private Button 删物品;
|
||||
private Button 删技能;
|
||||
}
|
||||
}
|
||||
199
Desktop/Solutions/EntityCreator/ShowDetail.cs
Normal file
199
Desktop/Solutions/EntityCreator/ShowDetail.cs
Normal file
@ -0,0 +1,199 @@
|
||||
using Milimoe.FunGame.Core.Entity;
|
||||
|
||||
namespace Milimoe.FunGame.Testing.Desktop.Solutions
|
||||
{
|
||||
public partial class ShowDetail : Form
|
||||
{
|
||||
private CharacterCreator? CharacterCreator { get; }
|
||||
private SkillCreator? SkillCreator { get; }
|
||||
private ItemCreator? ItemCreator { get; }
|
||||
private int NowClick { get; set; } = -1;
|
||||
private BaseEntity? BaseEntity { get; set; }
|
||||
|
||||
public ShowDetail(CharacterCreator? characterCreator, SkillCreator? skillCreator, ItemCreator? itemCreator)
|
||||
{
|
||||
InitializeComponent();
|
||||
CharacterCreator = characterCreator;
|
||||
SkillCreator = skillCreator;
|
||||
ItemCreator = itemCreator;
|
||||
Text = "详细信息查看";
|
||||
}
|
||||
|
||||
public void SetText(int nowClick, BaseEntity? entity, string text)
|
||||
{
|
||||
NowClick = nowClick;
|
||||
BaseEntity = entity;
|
||||
if (nowClick == 0)
|
||||
{
|
||||
删技能.Enabled = true;
|
||||
删物品.Enabled = true;
|
||||
加技能.Enabled = true;
|
||||
加物品.Enabled = true;
|
||||
编辑.Enabled = true;
|
||||
}
|
||||
else if (nowClick == 1)
|
||||
{
|
||||
删技能.Enabled = false;
|
||||
删物品.Enabled = false;
|
||||
加技能.Enabled = false;
|
||||
加物品.Enabled = false;
|
||||
编辑.Enabled = true;
|
||||
}
|
||||
else if (nowClick == 2)
|
||||
{
|
||||
删技能.Enabled = true;
|
||||
删物品.Enabled = false;
|
||||
加技能.Enabled = true;
|
||||
加物品.Enabled = false;
|
||||
编辑.Enabled = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
删技能.Enabled = false;
|
||||
删物品.Enabled = false;
|
||||
加技能.Enabled = false;
|
||||
加物品.Enabled = false;
|
||||
编辑.Enabled = false;
|
||||
}
|
||||
详细内容.Text = text;
|
||||
}
|
||||
|
||||
private void 编辑_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (NowClick == 0 && BaseEntity is Character c)
|
||||
{
|
||||
CharacterCreator?.OpenCreator(c);
|
||||
}
|
||||
else if (NowClick == 1 && BaseEntity is Skill s)
|
||||
{
|
||||
SkillCreator?.OpenCreator(s);
|
||||
}
|
||||
else if (NowClick == 2 && BaseEntity is Item i)
|
||||
{
|
||||
ItemCreator?.OpenCreator(i);
|
||||
}
|
||||
}
|
||||
|
||||
private void 加物品_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (NowClick == 0 && ItemCreator != null && BaseEntity is Character c)
|
||||
{
|
||||
if (ItemCreator.LoadedItems.Count != 0)
|
||||
{
|
||||
ShowList l = new();
|
||||
l.AddListItem(ItemCreator.LoadedItems.OrderBy(kv => kv.Value.Id).Select(kv => EntityCreator.GetItemDisplayName(ItemCreator, kv.Key)).ToArray());
|
||||
l.ShowDialog();
|
||||
string selected = l.SelectItem;
|
||||
Item? i = ItemCreator.LoadedItems.Where(kv => EntityCreator.GetItemDisplayName(ItemCreator, kv.Key) == selected).Select(kv => kv.Value).FirstOrDefault();
|
||||
if (c != null && i != null)
|
||||
{
|
||||
Item? i2 = EntityCreator.从模组加载器中获取物品(i.Id, i.Name, i.ItemType);
|
||||
if (i2 != null)
|
||||
{
|
||||
i.SetPropertyToItemModuleNew(i2);
|
||||
i = i2;
|
||||
}
|
||||
c.Equip(i);
|
||||
详细内容.Text = c.GetInfo();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show("物品列表为空!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void 加技能_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (NowClick == 0 && SkillCreator != null && BaseEntity is Character c)
|
||||
{
|
||||
if (SkillCreator.LoadedSkills.Count != 0)
|
||||
{
|
||||
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.ShowDialog();
|
||||
string selected = l.SelectItem;
|
||||
Skill? s = SkillCreator.LoadedSkills.Where(kv => EntityCreator.GetSkillDisplayName(SkillCreator, kv.Key) == selected).Select(kv => kv.Value).FirstOrDefault();
|
||||
if (c != null && s != null)
|
||||
{
|
||||
Skill? s2 = EntityCreator.从模组加载器中获取技能(s.Id, s.Name, s.SkillType);
|
||||
if (s2 != null)
|
||||
{
|
||||
s = s2;
|
||||
}
|
||||
s.Character = c;
|
||||
c.Skills.Add(s);
|
||||
详细内容.Text = c.GetInfo();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show("技能列表为空!");
|
||||
}
|
||||
}
|
||||
else if (NowClick == 2)
|
||||
{
|
||||
MessageBox.Show("再说吧,暂不支持。");
|
||||
}
|
||||
}
|
||||
|
||||
private void 删物品_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (NowClick == 0 && BaseEntity is Character c)
|
||||
{
|
||||
if (c != null)
|
||||
{
|
||||
if (c.Items.Count != 0)
|
||||
{
|
||||
ShowList l = new();
|
||||
l.AddListItem(c.Items.OrderBy(i => i.Id).Select(i => i.GetIdName()).ToArray());
|
||||
l.ShowDialog();
|
||||
string selected = l.SelectItem;
|
||||
Item? i = c.Items.Where(i => i.GetIdName() == selected).FirstOrDefault();
|
||||
if (i != null)
|
||||
{
|
||||
c.UnEquip(c.EquipSlot.GetEquipItemToSlot(i));
|
||||
详细内容.Text = c.GetInfo();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show("物品列表为空!");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void 删技能_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (NowClick == 0 && BaseEntity is Character c)
|
||||
{
|
||||
if (c != null)
|
||||
{
|
||||
if (c.Skills.Count != 0)
|
||||
{
|
||||
ShowList l = new();
|
||||
l.AddListItem(c.Skills.OrderBy(s => s.Id).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);
|
||||
详细内容.Text = c.GetInfo();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show("技能列表为空!");
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (NowClick == 2)
|
||||
{
|
||||
MessageBox.Show("再说吧,暂不支持。");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
120
Desktop/Solutions/EntityCreator/ShowDetail.resx
Normal file
120
Desktop/Solutions/EntityCreator/ShowDetail.resx
Normal file
@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
||||
@ -1,6 +1,6 @@
|
||||
namespace Milimoe.FunGame.Testing.Desktop.Solutions
|
||||
{
|
||||
partial class Showlist
|
||||
partial class ShowList
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
@ -48,8 +48,9 @@
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
ClientSize = new Size(508, 450);
|
||||
Controls.Add(选择表);
|
||||
Name = "Showlist";
|
||||
Text = "Showlist";
|
||||
Name = "ShowList";
|
||||
Text = "ShowList";
|
||||
StartPosition = FormStartPosition.CenterScreen;
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
@ -1,12 +1,13 @@
|
||||
namespace Milimoe.FunGame.Testing.Desktop.Solutions
|
||||
{
|
||||
public partial class Showlist : Form
|
||||
public partial class ShowList : Form
|
||||
{
|
||||
public string SelectItem { get; set; } = "";
|
||||
|
||||
public Showlist()
|
||||
public ShowList()
|
||||
{
|
||||
InitializeComponent();
|
||||
Text = "双击选择一项";
|
||||
}
|
||||
|
||||
public void AddListItem(object[] items)
|
||||
120
Desktop/Solutions/EntityCreator/ShowList.resx
Normal file
120
Desktop/Solutions/EntityCreator/ShowList.resx
Normal file
@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
||||
@ -9,7 +9,7 @@ namespace Milimoe.FunGame.Testing.Desktop.Solutions
|
||||
|
||||
public void Load()
|
||||
{
|
||||
EntityModuleConfig<Skill> config = new("redbud.fun.entitycreator", "skillcreator");
|
||||
EntityModuleConfig<Skill> config = new("EntityCreator", "skill.creator");
|
||||
config.LoadConfig();
|
||||
LoadedSkills = new(config);
|
||||
}
|
||||
@ -26,12 +26,18 @@ namespace Milimoe.FunGame.Testing.Desktop.Solutions
|
||||
|
||||
public void Save()
|
||||
{
|
||||
EntityModuleConfig<Skill> config = new("redbud.fun.entitycreator", "skillcreator");
|
||||
EntityModuleConfig<Skill> config = new("EntityCreator", "skill.creator");
|
||||
foreach (string key in LoadedSkills.Keys)
|
||||
{
|
||||
config.Add(key, LoadedSkills[key]);
|
||||
}
|
||||
config.SaveConfig();
|
||||
}
|
||||
|
||||
public void OpenCreator(Skill? skill = null)
|
||||
{
|
||||
CreateSkill creator = new(this, skill);
|
||||
creator.ShowDialog();
|
||||
}
|
||||
}
|
||||
}
|
||||
59
Desktop/Solutions/ShowDetail.Designer.cs
generated
59
Desktop/Solutions/ShowDetail.Designer.cs
generated
@ -1,59 +0,0 @@
|
||||
namespace Milimoe.FunGame.Testing.Desktop.Solutions
|
||||
{
|
||||
partial class ShowDetail
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
richTextBox1 = new RichTextBox();
|
||||
SuspendLayout();
|
||||
//
|
||||
// richTextBox1
|
||||
//
|
||||
richTextBox1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
|
||||
richTextBox1.Location = new Point(12, 12);
|
||||
richTextBox1.Name = "richTextBox1";
|
||||
richTextBox1.ReadOnly = true;
|
||||
richTextBox1.Size = new Size(622, 453);
|
||||
richTextBox1.TabIndex = 0;
|
||||
richTextBox1.Text = "";
|
||||
//
|
||||
// ShowDetail
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 17F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
ClientSize = new Size(646, 477);
|
||||
Controls.Add(richTextBox1);
|
||||
Name = "ShowDetail";
|
||||
Text = "ShowDetail";
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private RichTextBox richTextBox1;
|
||||
}
|
||||
}
|
||||
@ -1,15 +0,0 @@
|
||||
namespace Milimoe.FunGame.Testing.Desktop.Solutions
|
||||
{
|
||||
public partial class ShowDetail : Form
|
||||
{
|
||||
public ShowDetail()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
public void SetText(string text)
|
||||
{
|
||||
richTextBox1.Text = text;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -7,11 +7,11 @@ namespace Milimoe.FunGame.Testing.Effects
|
||||
{
|
||||
public override long Id => Skill.Id;
|
||||
public override string Name => Skill.Name;
|
||||
public override string Description => $"增加角色 {实际冷却缩减加成 * 100:0.##}% 冷却缩减。" + (!TargetSelf ? $"来自:[ {Source} ] 的 [ {Item.Name} ]" : "");
|
||||
public override string Description => $"增加角色 {实际冷却缩减加成 * 100:0.##}% 冷却缩减。" + (!TargetSelf ? $"来自:[ {Source} ]" + (Item != null ? $" 的 [ {Item.Name} ]" : "") : "");
|
||||
public override EffectType EffectType => EffectType.Item;
|
||||
public override bool TargetSelf => true;
|
||||
|
||||
public Item Item { get; }
|
||||
public Item? Item { get; }
|
||||
private readonly double 实际冷却缩减加成 = 0;
|
||||
|
||||
public override void OnEffectGained(Character character)
|
||||
@ -24,7 +24,7 @@ namespace Milimoe.FunGame.Testing.Effects
|
||||
character.ExCDR -= 实际冷却缩减加成;
|
||||
}
|
||||
|
||||
public 冷却缩减加成(Skill skill, Character? source, Item item, double exCdr) : base(skill)
|
||||
public 冷却缩减加成(Skill skill, Character? source, Item? item, double exCdr) : base(skill)
|
||||
{
|
||||
ActionQueue = skill.ActionQueue;
|
||||
Source = source;
|
||||
|
||||
@ -8,11 +8,11 @@ namespace Milimoe.FunGame.Testing.Effects
|
||||
{
|
||||
public override long Id => Skill.Id;
|
||||
public override string Name => Skill.Name;
|
||||
public override string Description => $"减少角色的所有主动技能 {实际硬直时间减少} 硬直时间。" + (!TargetSelf ? $"来自:[ {Source} ] 的 [ {Item.Name} ]" : "");
|
||||
public override string Description => $"减少角色的所有主动技能 {实际硬直时间减少} 硬直时间。" + (!TargetSelf ? $"来自:[ {Source} ]" + (Item != null ? $" 的 [ {Item.Name} ]" : "") : "");
|
||||
public override EffectType EffectType => EffectType.Item;
|
||||
public override bool TargetSelf => true;
|
||||
|
||||
public Item Item { get; }
|
||||
public Item? Item { get; }
|
||||
private readonly double 实际硬直时间减少 = 2;
|
||||
|
||||
public override void OnEffectGained(Character character)
|
||||
@ -41,7 +41,7 @@ namespace Milimoe.FunGame.Testing.Effects
|
||||
}
|
||||
}
|
||||
|
||||
public 技能硬直时间减少(Skill skill, Character? source, Item item, double reduce) : base(skill)
|
||||
public 技能硬直时间减少(Skill skill, Character? source, Item? item, double reduce) : base(skill)
|
||||
{
|
||||
ActionQueue = skill.ActionQueue;
|
||||
Source = source;
|
||||
|
||||
@ -7,11 +7,11 @@ namespace Milimoe.FunGame.Testing.Effects
|
||||
{
|
||||
public override long Id => Skill.Id;
|
||||
public override string Name => Skill.Name;
|
||||
public override string Description => $"增加角色 {实际攻击力加成} 点攻击力。" + (!TargetSelf ? $"来自:[ {Source} ] 的 [ {Item.Name} ]" : "");
|
||||
public override string Description => $"增加角色 {实际攻击力加成} 点攻击力。" + (!TargetSelf ? $"来自:[ {Source} ]" + (Item != null ? $" 的 [ {Item.Name} ]" : "") : "");
|
||||
public override EffectType EffectType => EffectType.Item;
|
||||
public override bool TargetSelf => true;
|
||||
|
||||
public Item Item { get; }
|
||||
public Item? Item { get; }
|
||||
private readonly double 实际攻击力加成 = 0;
|
||||
|
||||
public override void OnEffectGained(Character character)
|
||||
@ -24,7 +24,7 @@ namespace Milimoe.FunGame.Testing.Effects
|
||||
character.ExATK2 -= 实际攻击力加成;
|
||||
}
|
||||
|
||||
public 攻击力加成(Skill skill, Character? source, Item item, double exATK) : base(skill)
|
||||
public 攻击力加成(Skill skill, Character? source, Item? item, double exATK) : base(skill)
|
||||
{
|
||||
ActionQueue = skill.ActionQueue;
|
||||
Source = source;
|
||||
|
||||
@ -8,11 +8,11 @@ namespace Milimoe.FunGame.Testing.Effects
|
||||
{
|
||||
public override long Id => Skill.Id;
|
||||
public override string Name => Skill.Name;
|
||||
public override string Description => $"减少角色的普通攻击 {实际硬直时间减少} 硬直时间。" + (!TargetSelf ? $"来自:[ {Source} ] 的 [ {Item.Name} ]" : "");
|
||||
public override string Description => $"减少角色的普通攻击 {实际硬直时间减少} 硬直时间。" + (!TargetSelf ? $"来自:[ {Source} ]" + (Item != null ? $" 的 [ {Item.Name} ]" : "") : "");
|
||||
public override EffectType EffectType => EffectType.Item;
|
||||
public override bool TargetSelf => true;
|
||||
|
||||
public Item Item { get; }
|
||||
public Item? Item { get; }
|
||||
private readonly double 实际硬直时间减少 = 2;
|
||||
|
||||
public override void OnEffectGained(Character character)
|
||||
@ -25,7 +25,7 @@ namespace Milimoe.FunGame.Testing.Effects
|
||||
character.NormalAttack.HardnessTime = Calculation.Round2Digits(character.NormalAttack.HardnessTime + 实际硬直时间减少); ;
|
||||
}
|
||||
|
||||
public 普攻硬直时间减少(Skill skill, Character? source, Item item, double reduce) : base(skill)
|
||||
public 普攻硬直时间减少(Skill skill, Character? source, Item? item, double reduce) : base(skill)
|
||||
{
|
||||
ActionQueue = skill.ActionQueue;
|
||||
Source = source;
|
||||
|
||||
@ -7,11 +7,11 @@ namespace Milimoe.FunGame.Testing.Effects
|
||||
{
|
||||
public override long Id => Skill.Id;
|
||||
public override string Name => Skill.Name;
|
||||
public override string Description => $"增加角色 {实际物理护甲加成} 点物理护甲。" + (!TargetSelf ? $"来自:[ {Source} ] 的 [ {Item.Name} ]" : "");
|
||||
public override string Description => $"增加角色 {实际物理护甲加成} 点物理护甲。" + (!TargetSelf ? $"来自:[ {Source} ]" + (Item != null ? $" 的 [ {Item.Name} ]" : "") : "");
|
||||
public override EffectType EffectType => EffectType.Item;
|
||||
public override bool TargetSelf => true;
|
||||
|
||||
public Item Item { get; }
|
||||
public Item? Item { get; }
|
||||
private readonly double 实际物理护甲加成 = 0;
|
||||
|
||||
public override void OnEffectGained(Character character)
|
||||
@ -24,7 +24,7 @@ namespace Milimoe.FunGame.Testing.Effects
|
||||
character.ExDEF2 -= 实际物理护甲加成;
|
||||
}
|
||||
|
||||
public 物理护甲加成(Skill skill, Character? source, Item item, double exDef) : base(skill)
|
||||
public 物理护甲加成(Skill skill, Character? source, Item? item, double exDef) : base(skill)
|
||||
{
|
||||
ActionQueue = skill.ActionQueue;
|
||||
Source = source;
|
||||
|
||||
@ -1,12 +1,13 @@
|
||||
using Milimoe.FunGame.Testing.Effects;
|
||||
using Milimoe.FunGame.Core.Entity;
|
||||
using Milimoe.FunGame.Core.Library.Constant;
|
||||
using Milimoe.FunGame.Testing.Skills;
|
||||
|
||||
namespace Milimoe.FunGame.Testing.Items
|
||||
{
|
||||
public class 攻击之爪10 : Item
|
||||
{
|
||||
public override long Id => 14001;
|
||||
public override long Id => (long)AccessoryID.攻击之爪10;
|
||||
public override string Name => "攻击之爪 +10";
|
||||
public override string Description => Skills.Passives.Count > 0 ? Skills.Passives.First().Description : "";
|
||||
|
||||
@ -18,6 +19,7 @@ namespace Milimoe.FunGame.Testing.Items
|
||||
|
||||
public class 攻击之爪30 : Item
|
||||
{
|
||||
public override long Id => (long)AccessoryID.攻击之爪30;
|
||||
public override string Name => "攻击之爪 +30";
|
||||
public override string Description => Skills.Passives.Count > 0 ? Skills.Passives.First().Description : "";
|
||||
|
||||
@ -29,6 +31,7 @@ namespace Milimoe.FunGame.Testing.Items
|
||||
|
||||
public class 攻击之爪50 : Item
|
||||
{
|
||||
public override long Id => (long)AccessoryID.攻击之爪50;
|
||||
public override string Name => "攻击之爪 +50";
|
||||
public override string Description => Skills.Passives.Count > 0 ? Skills.Passives.First().Description : "";
|
||||
|
||||
@ -40,12 +43,12 @@ namespace Milimoe.FunGame.Testing.Items
|
||||
|
||||
public class 攻击之爪技能 : Skill
|
||||
{
|
||||
public override long Id => 5001;
|
||||
public override long Id => (long)ItemPassiveID.攻击之爪;
|
||||
public override string Name => "攻击之爪";
|
||||
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
||||
public Item Item { get; }
|
||||
public Item? Item { get; }
|
||||
|
||||
public 攻击之爪技能(Character? character, Item item, double exATK) : base(SkillType.Passive, character)
|
||||
public 攻击之爪技能(Character? character = null, Item? item = null, double exATK = 0) : base(SkillType.Passive, character)
|
||||
{
|
||||
Level = 1;
|
||||
Item = item;
|
||||
|
||||
9
Library/Items/ItemID.cs
Normal file
9
Library/Items/ItemID.cs
Normal file
@ -0,0 +1,9 @@
|
||||
namespace Milimoe.FunGame.Testing.Items
|
||||
{
|
||||
public enum AccessoryID : long
|
||||
{
|
||||
攻击之爪10 = 14001,
|
||||
攻击之爪30 = 14002,
|
||||
攻击之爪50 = 14003,
|
||||
}
|
||||
}
|
||||
@ -7,14 +7,14 @@ namespace Milimoe.FunGame.Testing.Skills
|
||||
{
|
||||
public class 嗜血本能 : Skill
|
||||
{
|
||||
public override long Id => 3010;
|
||||
public override long Id => (long)SuperSkillID.嗜血本能;
|
||||
public override string Name => "嗜血本能";
|
||||
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
||||
public override double EPCost => 100;
|
||||
public override double CD => 42 - 1 * (Level - 1);
|
||||
public override double HardnessTime { get; set; } = 12;
|
||||
|
||||
public 嗜血本能(Character character) : base(SkillType.SuperSkill, character)
|
||||
public 嗜血本能(Character? character = null) : base(SkillType.SuperSkill, character)
|
||||
{
|
||||
Effects.Add(new 嗜血本能特效(this));
|
||||
}
|
||||
|
||||
@ -7,11 +7,11 @@ namespace Milimoe.FunGame.Testing.Skills
|
||||
{
|
||||
public class 累积之压 : Skill
|
||||
{
|
||||
public override long Id => 4010;
|
||||
public override long Id => (long)PassiveID.累积之压;
|
||||
public override string Name => "累积之压";
|
||||
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
||||
|
||||
public 累积之压(Character character) : base(SkillType.Passive, character)
|
||||
public 累积之压(Character? character = null) : base(SkillType.Passive, character)
|
||||
{
|
||||
Effects.Add(new 累积之压特效(this));
|
||||
}
|
||||
|
||||
@ -6,14 +6,14 @@ namespace Milimoe.FunGame.Testing.Skills
|
||||
{
|
||||
public class 精准打击 : Skill
|
||||
{
|
||||
public override long Id => 3006;
|
||||
public override long Id => (long)SuperSkillID.精准打击;
|
||||
public override string Name => "精准打击";
|
||||
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
||||
public override double EPCost => 100;
|
||||
public override double CD => 40 - 1 * (Level - 1);
|
||||
public override double HardnessTime { get; set; } = 8;
|
||||
|
||||
public 精准打击(Character character) : base(SkillType.SuperSkill, character)
|
||||
public 精准打击(Character? character = null) : base(SkillType.SuperSkill, character)
|
||||
{
|
||||
Effects.Add(new 精准打击特效(this));
|
||||
}
|
||||
|
||||
@ -5,11 +5,11 @@ namespace Milimoe.FunGame.Testing.Skills
|
||||
{
|
||||
public class 致命打击 : Skill
|
||||
{
|
||||
public override long Id => 4006;
|
||||
public override long Id => (long)PassiveID.致命打击;
|
||||
public override string Name => "致命打击";
|
||||
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
||||
|
||||
public 致命打击(Character character) : base(SkillType.Passive, character)
|
||||
public 致命打击(Character? character = null) : base(SkillType.Passive, character)
|
||||
{
|
||||
Effects.Add(new 致命打击特效(this));
|
||||
}
|
||||
|
||||
@ -5,14 +5,14 @@ namespace Milimoe.FunGame.Testing.Skills
|
||||
{
|
||||
public class 三重叠加 : Skill
|
||||
{
|
||||
public override long Id => 3004;
|
||||
public override long Id => (long)SuperSkillID.三重叠加;
|
||||
public override string Name => "三重叠加";
|
||||
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
||||
public override double EPCost => 100;
|
||||
public override double CD => 35 - 2 * (Level - 1);
|
||||
public override double HardnessTime { get; set; } = 10;
|
||||
|
||||
public 三重叠加(Character character) : base(SkillType.SuperSkill, character)
|
||||
public 三重叠加(Character? character = null) : base(SkillType.SuperSkill, character)
|
||||
{
|
||||
Effects.Add(new 三重叠加特效(this));
|
||||
}
|
||||
|
||||
@ -6,11 +6,11 @@ namespace Milimoe.FunGame.Testing.Skills
|
||||
{
|
||||
public class 灵能反射 : Skill
|
||||
{
|
||||
public override long Id => 4004;
|
||||
public override long Id => (long)PassiveID.灵能反射;
|
||||
public override string Name => "灵能反射";
|
||||
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
||||
|
||||
public 灵能反射(Character character) : base(SkillType.Passive, character)
|
||||
public 灵能反射(Character? character = null) : base(SkillType.Passive, character)
|
||||
{
|
||||
Effects.Add(new 灵能反射特效(this));
|
||||
}
|
||||
|
||||
@ -6,14 +6,14 @@ namespace Milimoe.FunGame.Testing.Skills
|
||||
{
|
||||
public class 变幻之心 : Skill
|
||||
{
|
||||
public override long Id => 3005;
|
||||
public override long Id => (long)SuperSkillID.变幻之心;
|
||||
public override string Name => "变幻之心";
|
||||
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
||||
public override double EPCost => 100;
|
||||
public override double CD => 30;
|
||||
public override double HardnessTime { get; set; } = 10;
|
||||
|
||||
public 变幻之心(Character character) : base(SkillType.SuperSkill, character)
|
||||
public 变幻之心(Character? character = null) : base(SkillType.SuperSkill, character)
|
||||
{
|
||||
Effects.Add(new 变幻之心特效(this));
|
||||
}
|
||||
|
||||
@ -5,11 +5,11 @@ namespace Milimoe.FunGame.Testing.Skills
|
||||
{
|
||||
public class 智慧与力量 : Skill
|
||||
{
|
||||
public override long Id => 4005;
|
||||
public override long Id => (long)PassiveID.智慧与力量;
|
||||
public override string Name => "智慧与力量";
|
||||
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
||||
|
||||
public 智慧与力量(Character character) : base(SkillType.Passive, character)
|
||||
public 智慧与力量(Character? character = null) : base(SkillType.Passive, character)
|
||||
{
|
||||
Effects.Add(new 智慧与力量特效(this));
|
||||
}
|
||||
|
||||
@ -6,11 +6,11 @@ namespace Milimoe.FunGame.Testing.Skills
|
||||
{
|
||||
public class META马 : Skill
|
||||
{
|
||||
public override long Id => 4001;
|
||||
public override long Id => (long)PassiveID.META马;
|
||||
public override string Name => "META马";
|
||||
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
||||
|
||||
public META马(Character character) : base(SkillType.Passive, character)
|
||||
public META马(Character? character = null) : base(SkillType.Passive, character)
|
||||
{
|
||||
Effects.Add(new META马特效(this));
|
||||
}
|
||||
|
||||
@ -6,14 +6,14 @@ namespace Milimoe.FunGame.Testing.Skills
|
||||
{
|
||||
public class 力量爆发 : Skill
|
||||
{
|
||||
public override long Id => 3002;
|
||||
public override long Id => (long)SuperSkillID.力量爆发;
|
||||
public override string Name => "力量爆发";
|
||||
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
||||
public override double EPCost => 100;
|
||||
public override double CD => 55;
|
||||
public override double HardnessTime { get; set; } = 0;
|
||||
|
||||
public 力量爆发(Character character) : base(SkillType.SuperSkill, character)
|
||||
public 力量爆发(Character? character = null) : base(SkillType.SuperSkill, character)
|
||||
{
|
||||
Effects.Add(new 力量爆发特效(this));
|
||||
}
|
||||
|
||||
@ -6,11 +6,11 @@ namespace Milimoe.FunGame.Testing.Skills
|
||||
{
|
||||
public class 玻璃大炮 : Skill
|
||||
{
|
||||
public override long Id => 4009;
|
||||
public override long Id => (long)PassiveID.玻璃大炮;
|
||||
public override string Name => "玻璃大炮";
|
||||
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
||||
|
||||
public 玻璃大炮(Character character) : base(SkillType.Passive, character)
|
||||
public 玻璃大炮(Character? character = null) : base(SkillType.Passive, character)
|
||||
{
|
||||
Effects.Add(new 玻璃大炮特效(this));
|
||||
}
|
||||
|
||||
@ -6,14 +6,14 @@ namespace Milimoe.FunGame.Testing.Skills
|
||||
{
|
||||
public class 迅捷之势 : Skill
|
||||
{
|
||||
public override long Id => 3009;
|
||||
public override long Id => (long)SuperSkillID.迅捷之势;
|
||||
public override string Name => "迅捷之势";
|
||||
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
||||
public override double EPCost => 100;
|
||||
public override double CD => 60 - 2 * (Level - 1);
|
||||
public override double HardnessTime { get; set; } = 15;
|
||||
|
||||
public 迅捷之势(Character character) : base(SkillType.SuperSkill, character)
|
||||
public 迅捷之势(Character? character = null) : base(SkillType.SuperSkill, character)
|
||||
{
|
||||
Effects.Add(new 迅捷之势特效(this));
|
||||
}
|
||||
|
||||
@ -6,11 +6,11 @@ namespace Milimoe.FunGame.Testing.Skills
|
||||
{
|
||||
public class 枯竭打击 : Skill
|
||||
{
|
||||
public override long Id => 4008;
|
||||
public override long Id => (long)PassiveID.枯竭打击;
|
||||
public override string Name => "枯竭打击";
|
||||
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
||||
|
||||
public 枯竭打击(Character character) : base(SkillType.Passive, character)
|
||||
public 枯竭打击(Character? character = null) : base(SkillType.Passive, character)
|
||||
{
|
||||
Effects.Add(new 枯竭打击特效(this));
|
||||
}
|
||||
|
||||
@ -6,14 +6,14 @@ namespace Milimoe.FunGame.Testing.Skills
|
||||
{
|
||||
public class 能量毁灭 : Skill
|
||||
{
|
||||
public override long Id => 3008;
|
||||
public override long Id => (long)SuperSkillID.能量毁灭;
|
||||
public override string Name => "能量毁灭";
|
||||
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
||||
public override double EPCost => 100;
|
||||
public override double CD => 55 - 3 * (Level - 1);
|
||||
public override double HardnessTime { get; set; } = 25;
|
||||
|
||||
public 能量毁灭(Character character) : base(SkillType.SuperSkill, character)
|
||||
public 能量毁灭(Character? character = null) : base(SkillType.SuperSkill, character)
|
||||
{
|
||||
Effects.Add(new 能量毁灭特效(this));
|
||||
}
|
||||
|
||||
@ -6,11 +6,11 @@ namespace Milimoe.FunGame.Testing.Skills
|
||||
{
|
||||
public class 弱者猎手 : Skill
|
||||
{
|
||||
public override long Id => 4012;
|
||||
public override long Id => (long)PassiveID.弱者猎手;
|
||||
public override string Name => "弱者猎手";
|
||||
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
||||
|
||||
public 弱者猎手(Character character) : base(SkillType.Passive, character)
|
||||
public 弱者猎手(Character? character = null) : base(SkillType.Passive, character)
|
||||
{
|
||||
Effects.Add(new 弱者猎手特效(this));
|
||||
}
|
||||
|
||||
@ -7,14 +7,14 @@ namespace Milimoe.FunGame.Testing.Skills
|
||||
{
|
||||
public class 血之狂欢 : Skill
|
||||
{
|
||||
public override long Id => 4012;
|
||||
public override long Id => (long)SuperSkillID.血之狂欢;
|
||||
public override string Name => "血之狂欢";
|
||||
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
||||
public override double EPCost => 100;
|
||||
public override double CD => 45;
|
||||
public override double HardnessTime { get; set; } = 7;
|
||||
|
||||
public 血之狂欢(Character character) : base(SkillType.SuperSkill, character)
|
||||
public 血之狂欢(Character? character = null) : base(SkillType.SuperSkill, character)
|
||||
{
|
||||
Effects.Add(new 血之狂欢特效(this));
|
||||
}
|
||||
|
||||
54
Library/Skills/SkillID.cs
Normal file
54
Library/Skills/SkillID.cs
Normal file
@ -0,0 +1,54 @@
|
||||
namespace Milimoe.FunGame.Testing.Skills
|
||||
{
|
||||
public enum MagicID : long
|
||||
{
|
||||
冰霜攻击 = 1001,
|
||||
}
|
||||
|
||||
public enum SkillID : long
|
||||
{
|
||||
疾风步 = 2001,
|
||||
}
|
||||
|
||||
public enum SuperSkillID : long
|
||||
{
|
||||
力量爆发 = 3001,
|
||||
天赐之力 = 3002,
|
||||
魔法涌流 = 3003,
|
||||
三重叠加 = 3004,
|
||||
变幻之心 = 3005,
|
||||
精准打击 = 3006,
|
||||
绝对领域 = 3007,
|
||||
能量毁灭 = 3008,
|
||||
迅捷之势 = 3009,
|
||||
嗜血本能 = 3010,
|
||||
平衡强化 = 3011,
|
||||
血之狂欢 = 3012,
|
||||
}
|
||||
|
||||
public enum PassiveID : long
|
||||
{
|
||||
META马 = 4001,
|
||||
心灵之火 = 4002,
|
||||
魔法震荡 = 4003,
|
||||
灵能反射 = 4004,
|
||||
智慧与力量 = 4005,
|
||||
致命打击 = 4006,
|
||||
毁灭之势 = 4007,
|
||||
枯竭打击 = 4008,
|
||||
玻璃大炮 = 4009,
|
||||
累积之压 = 4010,
|
||||
敏捷之刃 = 4011,
|
||||
弱者猎手 = 4012,
|
||||
}
|
||||
|
||||
public enum ItemPassiveID : long
|
||||
{
|
||||
攻击之爪 = 5001,
|
||||
}
|
||||
|
||||
public enum ItemActiveID : long
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
@ -6,14 +6,14 @@ namespace Milimoe.FunGame.Testing.Skills
|
||||
{
|
||||
public class 天赐之力 : Skill
|
||||
{
|
||||
public override long Id => 3001;
|
||||
public override long Id => (long)SuperSkillID.天赐之力;
|
||||
public override string Name => "天赐之力";
|
||||
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
||||
public override double EPCost => 100;
|
||||
public override double CD => 60;
|
||||
public override double HardnessTime { get; set; } = 15;
|
||||
|
||||
public 天赐之力(Character character) : base(SkillType.SuperSkill, character)
|
||||
public 天赐之力(Character? character = null) : base(SkillType.SuperSkill, character)
|
||||
{
|
||||
Effects.Add(new 天赐之力特效(this));
|
||||
}
|
||||
|
||||
@ -6,11 +6,11 @@ namespace Milimoe.FunGame.Testing.Skills
|
||||
{
|
||||
public class 心灵之火 : Skill
|
||||
{
|
||||
public override long Id => 4002;
|
||||
public override long Id => (long)PassiveID.心灵之火;
|
||||
public override string Name => "心灵之火";
|
||||
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
||||
|
||||
public 心灵之火(Character character) : base(SkillType.Passive, character)
|
||||
public 心灵之火(Character? character = null) : base(SkillType.Passive, character)
|
||||
{
|
||||
Effects.Add(new 心灵之火特效(this));
|
||||
}
|
||||
|
||||
@ -6,14 +6,14 @@ namespace Milimoe.FunGame.Testing.Skills
|
||||
{
|
||||
public class 魔法涌流 : Skill
|
||||
{
|
||||
public override long Id => 3003;
|
||||
public override long Id => (long)SuperSkillID.魔法涌流;
|
||||
public override string Name => "魔法涌流";
|
||||
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
||||
public override double EPCost => 100;
|
||||
public override double CD => 35;
|
||||
public override double HardnessTime { get; set; } = 10;
|
||||
|
||||
public 魔法涌流(Character character) : base(SkillType.SuperSkill, character)
|
||||
public 魔法涌流(Character? character = null) : base(SkillType.SuperSkill, character)
|
||||
{
|
||||
Effects.Add(new 魔法涌流特效(this));
|
||||
}
|
||||
|
||||
@ -6,11 +6,11 @@ namespace Milimoe.FunGame.Testing.Skills
|
||||
{
|
||||
public class 魔法震荡 : Skill
|
||||
{
|
||||
public override long Id => 4003;
|
||||
public override long Id => (long)PassiveID.魔法震荡;
|
||||
public override string Name => "魔法震荡";
|
||||
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
||||
|
||||
public 魔法震荡(Character character) : base(SkillType.Passive, character)
|
||||
public 魔法震荡(Character? character = null) : base(SkillType.Passive, character)
|
||||
{
|
||||
Effects.Add(new 魔法震荡特效(this));
|
||||
}
|
||||
|
||||
@ -6,14 +6,14 @@ namespace Milimoe.FunGame.Testing.Skills
|
||||
{
|
||||
public class 疾风步 : Skill
|
||||
{
|
||||
public override long Id => 2001;
|
||||
public override long Id => (long)SkillID.疾风步;
|
||||
public override string Name => "疾风步";
|
||||
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
||||
public override double EPCost => 60;
|
||||
public override double CD => 35;
|
||||
public override double HardnessTime { get; set; } = 5;
|
||||
|
||||
public 疾风步(Character character) : base(SkillType.Skill, character)
|
||||
public 疾风步(Character? character = null) : base(SkillType.Skill, character)
|
||||
{
|
||||
Effects.Add(new 疾风步特效(this));
|
||||
}
|
||||
|
||||
@ -5,14 +5,14 @@ namespace Milimoe.FunGame.Testing.Skills
|
||||
{
|
||||
public class 平衡强化 : Skill
|
||||
{
|
||||
public override long Id => 4011;
|
||||
public override long Id => (long)SuperSkillID.平衡强化;
|
||||
public override string Name => "平衡强化";
|
||||
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
||||
public override double EPCost => 100;
|
||||
public override double CD => 55 - (1 * (Level - 1));
|
||||
public override double HardnessTime { get; set; } = 12;
|
||||
|
||||
public 平衡强化(Character character) : base(SkillType.SuperSkill, character)
|
||||
public 平衡强化(Character? character = null) : base(SkillType.SuperSkill, character)
|
||||
{
|
||||
Effects.Add(new 平衡强化特效(this));
|
||||
}
|
||||
|
||||
@ -6,11 +6,11 @@ namespace Milimoe.FunGame.Testing.Skills
|
||||
{
|
||||
public class 敏捷之刃 : Skill
|
||||
{
|
||||
public override long Id => 4011;
|
||||
public override long Id => (long)PassiveID.敏捷之刃;
|
||||
public override string Name => "敏捷之刃";
|
||||
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
||||
|
||||
public 敏捷之刃(Character character) : base(SkillType.Passive, character)
|
||||
public 敏捷之刃(Character? character = null) : base(SkillType.Passive, character)
|
||||
{
|
||||
Effects.Add(new 敏捷之刃特效(this));
|
||||
}
|
||||
|
||||
@ -6,11 +6,11 @@ namespace Milimoe.FunGame.Testing.Skills
|
||||
{
|
||||
public class 毁灭之势 : Skill
|
||||
{
|
||||
public override long Id => 4007;
|
||||
public override long Id => (long)PassiveID.毁灭之势;
|
||||
public override string Name => "毁灭之势";
|
||||
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
||||
|
||||
public 毁灭之势(Character character) : base(SkillType.Passive, character)
|
||||
public 毁灭之势(Character? character = null) : base(SkillType.Passive, character)
|
||||
{
|
||||
Effects.Add(new 毁灭之势特效(this));
|
||||
}
|
||||
|
||||
@ -6,14 +6,14 @@ namespace Milimoe.FunGame.Testing.Skills
|
||||
{
|
||||
public class 绝对领域 : Skill
|
||||
{
|
||||
public override long Id => 3007;
|
||||
public override long Id => (long)SuperSkillID.绝对领域;
|
||||
public override string Name => "绝对领域";
|
||||
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
||||
public override double EPCost => Math.Max(100, Character?.EP ?? 100);
|
||||
public override double CD => 32 + (1 * (Level - 1));
|
||||
public override double HardnessTime { get; set; } = 12;
|
||||
|
||||
public 绝对领域(Character character) : base(SkillType.SuperSkill, character)
|
||||
public 绝对领域(Character? character = null) : base(SkillType.SuperSkill, character)
|
||||
{
|
||||
Effects.Add(new 绝对领域特效(this));
|
||||
}
|
||||
|
||||
@ -6,7 +6,7 @@ namespace Milimoe.FunGame.Testing.Skills
|
||||
{
|
||||
public class 冰霜攻击 : Skill
|
||||
{
|
||||
public override long Id => 2001;
|
||||
public override long Id => (long)MagicID.冰霜攻击;
|
||||
public override string Name => "冰霜攻击";
|
||||
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
||||
public override double MPCost => 30 + (50 * (Level - 1));
|
||||
@ -14,7 +14,7 @@ namespace Milimoe.FunGame.Testing.Skills
|
||||
public override double CastTime => 6;
|
||||
public override double HardnessTime { get; set; } = 3;
|
||||
|
||||
public 冰霜攻击(Character character) : base(SkillType.Magic, character)
|
||||
public 冰霜攻击(Character? character = null) : base(SkillType.Magic, character)
|
||||
{
|
||||
Effects.Add(new 冰霜攻击特效(this));
|
||||
}
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
using Milimoe.FunGame.Core.Api.Utility;
|
||||
using Milimoe.FunGame.Core.Entity;
|
||||
using Milimoe.FunGame.Core.Library.Common.Addon;
|
||||
using Milimoe.FunGame.Core.Library.Constant;
|
||||
using Milimoe.FunGame.Testing.Items;
|
||||
using Milimoe.FunGame.Testing.Skills;
|
||||
|
||||
@ -49,47 +50,108 @@ namespace Addons
|
||||
{
|
||||
get
|
||||
{
|
||||
Character c = Factory.GetCharacter();
|
||||
List<Skill> list = [];
|
||||
list.Add(new 冰霜攻击(c));
|
||||
list.Add(new 疾风步(c));
|
||||
list.Add(new META马(c));
|
||||
list.Add(new 力量爆发(c));
|
||||
list.Add(new 心灵之火(c));
|
||||
list.Add(new 天赐之力(c));
|
||||
list.Add(new 魔法震荡(c));
|
||||
list.Add(new 魔法涌流(c));
|
||||
list.Add(new 灵能反射(c));
|
||||
list.Add(new 三重叠加(c));
|
||||
list.Add(new 智慧与力量(c));
|
||||
list.Add(new 变幻之心(c));
|
||||
list.Add(new 致命打击(c));
|
||||
list.Add(new 精准打击(c));
|
||||
list.Add(new 毁灭之势(c));
|
||||
list.Add(new 绝对领域(c));
|
||||
list.Add(new 枯竭打击(c));
|
||||
list.Add(new 能量毁灭(c));
|
||||
list.Add(new 玻璃大炮(c));
|
||||
list.Add(new 迅捷之势(c));
|
||||
list.Add(new 累积之压(c));
|
||||
list.Add(new 嗜血本能(c));
|
||||
list.Add(new 敏捷之刃(c));
|
||||
list.Add(new 平衡强化(c));
|
||||
list.Add(new 弱者猎手(c));
|
||||
list.Add(new 血之狂欢(c));
|
||||
list.Add(new 冰霜攻击(c));
|
||||
list.Add(new 疾风步(c));
|
||||
return list;
|
||||
EntityModuleConfig<Skill> config = new(ExampleGameModuleConstant.Example, ExampleGameModuleConstant.ExampleSkill);
|
||||
config.LoadConfig();
|
||||
foreach (string key in config.Keys)
|
||||
{
|
||||
Skill prev = config[key];
|
||||
Skill? next = GetSkill(prev.Id, prev.Name, prev.SkillType);
|
||||
if (next != null)
|
||||
{
|
||||
config[key] = next;
|
||||
}
|
||||
}
|
||||
return [.. config.Values];
|
||||
}
|
||||
}
|
||||
|
||||
public override Skill? GetSkill(long id, string name)
|
||||
public override Skill? GetSkill(long id, string name, SkillType type)
|
||||
{
|
||||
string str = id + "." + name;
|
||||
if (Skills.Where(s => s.GetIdName() == str).FirstOrDefault() is Skill s)
|
||||
if (type == SkillType.Magic)
|
||||
{
|
||||
return s;
|
||||
switch ((MagicID)id)
|
||||
{
|
||||
case MagicID.冰霜攻击:
|
||||
return new 冰霜攻击();
|
||||
}
|
||||
}
|
||||
|
||||
if (type == SkillType.Skill)
|
||||
{
|
||||
switch ((SkillID)id)
|
||||
{
|
||||
case SkillID.疾风步:
|
||||
return new 疾风步();
|
||||
}
|
||||
}
|
||||
|
||||
if (type == SkillType.SuperSkill)
|
||||
{
|
||||
switch ((SuperSkillID)id)
|
||||
{
|
||||
case SuperSkillID.力量爆发:
|
||||
return new 力量爆发();
|
||||
case SuperSkillID.天赐之力:
|
||||
return new 天赐之力();
|
||||
case SuperSkillID.魔法涌流:
|
||||
return new 魔法涌流();
|
||||
case SuperSkillID.三重叠加:
|
||||
return new 三重叠加();
|
||||
case SuperSkillID.变幻之心:
|
||||
return new 变幻之心();
|
||||
case SuperSkillID.精准打击:
|
||||
return new 精准打击();
|
||||
case SuperSkillID.绝对领域:
|
||||
return new 绝对领域();
|
||||
case SuperSkillID.能量毁灭:
|
||||
return new 能量毁灭();
|
||||
case SuperSkillID.迅捷之势:
|
||||
return new 迅捷之势();
|
||||
case SuperSkillID.嗜血本能:
|
||||
return new 嗜血本能();
|
||||
case SuperSkillID.平衡强化:
|
||||
return new 平衡强化();
|
||||
case SuperSkillID.血之狂欢:
|
||||
return new 血之狂欢();
|
||||
}
|
||||
}
|
||||
|
||||
if (type == SkillType.Passive)
|
||||
{
|
||||
switch ((PassiveID)id)
|
||||
{
|
||||
case PassiveID.META马:
|
||||
return new META马();
|
||||
case PassiveID.心灵之火:
|
||||
return new 心灵之火();
|
||||
case PassiveID.魔法震荡:
|
||||
return new 魔法震荡();
|
||||
case PassiveID.灵能反射:
|
||||
return new 灵能反射();
|
||||
case PassiveID.智慧与力量:
|
||||
return new 智慧与力量();
|
||||
case PassiveID.致命打击:
|
||||
return new 致命打击();
|
||||
case PassiveID.毁灭之势:
|
||||
return new 毁灭之势();
|
||||
case PassiveID.枯竭打击:
|
||||
return new 枯竭打击();
|
||||
case PassiveID.玻璃大炮:
|
||||
return new 玻璃大炮();
|
||||
case PassiveID.累积之压:
|
||||
return new 累积之压();
|
||||
case PassiveID.敏捷之刃:
|
||||
return new 敏捷之刃();
|
||||
case PassiveID.弱者猎手:
|
||||
return new 弱者猎手();
|
||||
}
|
||||
switch ((ItemPassiveID)id)
|
||||
{
|
||||
case ItemPassiveID.攻击之爪:
|
||||
return new 攻击之爪技能();
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@ -108,19 +170,42 @@ namespace Addons
|
||||
{
|
||||
get
|
||||
{
|
||||
List<Item> list = [];
|
||||
list.Add(new 攻击之爪50());
|
||||
return list;
|
||||
EntityModuleConfig<Item> config = new(ExampleGameModuleConstant.Example, ExampleGameModuleConstant.ExampleItem);
|
||||
config.LoadConfig();
|
||||
foreach (string key in config.Keys)
|
||||
{
|
||||
Item prev = config[key];
|
||||
Item? next = GetItem(prev.Id, prev.Name, prev.ItemType);
|
||||
if (next != null)
|
||||
{
|
||||
prev.SetPropertyToItemModuleNew(next);
|
||||
config[key] = next;
|
||||
}
|
||||
}
|
||||
return [.. config.Values];
|
||||
}
|
||||
}
|
||||
|
||||
public override Item? GetItem(long id, string name)
|
||||
public override Item? GetItem(long id, string name, ItemType type)
|
||||
{
|
||||
string str = id + "." + name;
|
||||
if (Items.Where(s => s.GetIdName() == str).FirstOrDefault() is Item i)
|
||||
if (type == ItemType.MagicCardPack)
|
||||
{
|
||||
return i;
|
||||
|
||||
}
|
||||
|
||||
if (type == ItemType.Accessory)
|
||||
{
|
||||
switch ((AccessoryID)id)
|
||||
{
|
||||
case AccessoryID.攻击之爪10:
|
||||
return new 攻击之爪10();
|
||||
case AccessoryID.攻击之爪30:
|
||||
return new 攻击之爪30();
|
||||
case AccessoryID.攻击之爪50:
|
||||
return new 攻击之爪50();
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@ -78,6 +78,8 @@ namespace Addons
|
||||
|
||||
EntityModuleConfig<Item> config3 = new(ExampleGameModuleConstant.Example, ExampleGameModuleConstant.ExampleItem)
|
||||
{
|
||||
{ "攻击之爪10", new 攻击之爪10() },
|
||||
{ "攻击之爪30", new 攻击之爪30() },
|
||||
{ "攻击之爪50", new 攻击之爪50() }
|
||||
};
|
||||
config3.SaveConfig();
|
||||
|
||||
@ -422,10 +422,10 @@ namespace Milimoe.FunGame.Testing.Tests
|
||||
Item[] 这次发放的空投;
|
||||
if (totalTime == 0)
|
||||
{
|
||||
WriteLine("社区送温暖了,现在向所有人发放 [ 攻击之爪 +50 ]!!");
|
||||
WriteLine("社区送温暖了,现在向所有人发放 [ 攻击之爪 +10 ]!!");
|
||||
foreach (Character character in queue.Queue)
|
||||
{
|
||||
这次发放的空投 = [new 攻击之爪50()];
|
||||
这次发放的空投 = [new 攻击之爪10()];
|
||||
foreach (Item item in 这次发放的空投)
|
||||
{
|
||||
queue.Equip(character, EquipItemToSlot.Accessory1, item);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user