mirror of
https://github.com/project-redbud/FunGame-Core.git
synced 2025-12-05 00:06:02 +00:00
添加CharacterMode,SkillMode,ItemMode类和其它杂项 (#64)
* 添加CharacterMode,SkillMode,ItemMode * 添加默认地图属性 * 添加CharacterMode, SkillMode, ItemMode的Loader方法,优化构造函数 * 添加和优化Equals方法 * 删除Symbol
This commit is contained in:
parent
47d9813793
commit
7b4a655ff4
@ -7,9 +7,6 @@ namespace Milimoe.FunGame.Core.Api.Factory
|
||||
{
|
||||
public Type EntityType => typeof(Character);
|
||||
|
||||
public Character Create()
|
||||
{
|
||||
return new Character();
|
||||
}
|
||||
public Character Create() => Character.GetInstance();
|
||||
}
|
||||
}
|
||||
|
||||
@ -16,11 +16,11 @@ namespace Milimoe.FunGame.Core.Api.Factory
|
||||
{
|
||||
case ItemType.Passive:
|
||||
_EntityType = typeof(PassiveItem);
|
||||
return new PassiveItem();
|
||||
return PassiveItem.GetInstance();
|
||||
case ItemType.Active:
|
||||
default:
|
||||
_EntityType = typeof(ActiveItem);
|
||||
return new ActiveItem();
|
||||
return PassiveItem.GetInstance();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -16,11 +16,11 @@ namespace Milimoe.FunGame.Core.Api.Factory
|
||||
{
|
||||
case SkillType.Passive:
|
||||
_EntityType = typeof(PassiveSkill);
|
||||
return new PassiveSkill();
|
||||
return PassiveSkill.GetInstance();
|
||||
case SkillType.Active:
|
||||
default:
|
||||
_EntityType = typeof(ActiveSkill);
|
||||
return new ActiveSkill();
|
||||
return ActiveSkill.GetInstance();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
using Milimoe.FunGame.Core.Library.Common.Addon;
|
||||
using Milimoe.FunGame.Core.Entity;
|
||||
using Milimoe.FunGame.Core.Library.Common.Addon;
|
||||
using Milimoe.FunGame.Core.Library.Common.Event;
|
||||
using Milimoe.FunGame.Core.Service;
|
||||
|
||||
@ -8,6 +9,9 @@ namespace Milimoe.FunGame.Core.Api.Utility
|
||||
{
|
||||
public Dictionary<string, GameMode> Modes { get; } = [];
|
||||
public Dictionary<string, GameMap> Maps { get; } = [];
|
||||
public List<Character> Characters { get; } = [];
|
||||
public List<Skill> Skills { get; } = [];
|
||||
public List<Item> Items { get; } = [];
|
||||
|
||||
private GameModeLoader()
|
||||
{
|
||||
@ -17,7 +21,7 @@ namespace Milimoe.FunGame.Core.Api.Utility
|
||||
public static GameModeLoader LoadGameModes(params object[] objs)
|
||||
{
|
||||
GameModeLoader loader = new();
|
||||
AddonManager.LoadGameModes(loader.Modes, objs);
|
||||
AddonManager.LoadGameModes(loader.Modes, loader.Characters, loader.Skills, loader.Items, objs);
|
||||
AddonManager.LoadGameMaps(loader.Maps, objs);
|
||||
return loader;
|
||||
}
|
||||
|
||||
158
Docs/api.xml
158
Docs/api.xml
@ -1157,6 +1157,52 @@
|
||||
服务端和客户端都应该实现这个接口,用于初始化支持的Mod列表
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Milimoe.FunGame.Core.Library.Common.Addon.CharacterMode.Name">
|
||||
<summary>
|
||||
模组名称
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Milimoe.FunGame.Core.Library.Common.Addon.CharacterMode.Description">
|
||||
<summary>
|
||||
模组描述
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Milimoe.FunGame.Core.Library.Common.Addon.CharacterMode.Version">
|
||||
<summary>
|
||||
模组版本
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Milimoe.FunGame.Core.Library.Common.Addon.CharacterMode.Author">
|
||||
<summary>
|
||||
模组作者
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Milimoe.FunGame.Core.Library.Common.Addon.CharacterMode.Characters">
|
||||
<summary>
|
||||
此模组中包含的角色
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Milimoe.FunGame.Core.Library.Common.Addon.CharacterMode.IsLoaded">
|
||||
<summary>
|
||||
加载标记
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Milimoe.FunGame.Core.Library.Common.Addon.CharacterMode.Load(System.Object[])">
|
||||
<summary>
|
||||
加载模组
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Milimoe.FunGame.Core.Library.Common.Addon.CharacterMode.AfterLoad">
|
||||
<summary>
|
||||
模组加载后需要做的事
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Milimoe.FunGame.Core.Library.Common.Addon.CharacterMode.BeforeLoad">
|
||||
<summary>
|
||||
允许返回false来阻止加载此模组
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:Milimoe.FunGame.Core.Library.Common.Addon.ExamplePlugin">
|
||||
<summary>
|
||||
必须继承基类:<see cref="T:Milimoe.FunGame.Core.Library.Common.Addon.Plugin"/><para/>
|
||||
@ -1241,11 +1287,24 @@
|
||||
模组作者
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Milimoe.FunGame.Core.Library.Common.Addon.GameMode.Map">
|
||||
<member name="P:Milimoe.FunGame.Core.Library.Common.Addon.GameMode.DefaultMap">
|
||||
<summary>
|
||||
默认地图
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Milimoe.FunGame.Core.Library.Common.Addon.GameMode.Maps">
|
||||
<summary>
|
||||
模组所使用的地图
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Milimoe.FunGame.Core.Library.Common.Addon.GameMode.StartUI(System.Object[])">
|
||||
<summary>
|
||||
如模组有界面,请重写此方法
|
||||
此方法会在StartGame时调用
|
||||
</summary>
|
||||
<param name="args"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="F:Milimoe.FunGame.Core.Library.Common.Addon.GameMode.IsLoaded">
|
||||
<summary>
|
||||
加载标记
|
||||
@ -1302,6 +1361,52 @@
|
||||
绑定事件。在<see cref="M:Milimoe.FunGame.Core.Library.Common.Addon.GameMode.BeforeLoad"/>后触发
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Milimoe.FunGame.Core.Library.Common.Addon.ItemMode.Name">
|
||||
<summary>
|
||||
模组名称
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Milimoe.FunGame.Core.Library.Common.Addon.ItemMode.Description">
|
||||
<summary>
|
||||
模组描述
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Milimoe.FunGame.Core.Library.Common.Addon.ItemMode.Version">
|
||||
<summary>
|
||||
模组版本
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Milimoe.FunGame.Core.Library.Common.Addon.ItemMode.Author">
|
||||
<summary>
|
||||
模组作者
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Milimoe.FunGame.Core.Library.Common.Addon.ItemMode.Items">
|
||||
<summary>
|
||||
此模组中包含的物品
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Milimoe.FunGame.Core.Library.Common.Addon.ItemMode.IsLoaded">
|
||||
<summary>
|
||||
加载标记
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Milimoe.FunGame.Core.Library.Common.Addon.ItemMode.Load(System.Object[])">
|
||||
<summary>
|
||||
加载模组
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Milimoe.FunGame.Core.Library.Common.Addon.ItemMode.AfterLoad">
|
||||
<summary>
|
||||
模组加载后需要做的事
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Milimoe.FunGame.Core.Library.Common.Addon.ItemMode.BeforeLoad">
|
||||
<summary>
|
||||
允许返回false来阻止加载此模组
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="P:Milimoe.FunGame.Core.Library.Common.Addon.Plugin.Name">
|
||||
<summary>
|
||||
插件名称
|
||||
@ -1378,6 +1483,52 @@
|
||||
绑定事件。在<see cref="M:Milimoe.FunGame.Core.Library.Common.Addon.Plugin.BeforeLoad"/>后触发
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Milimoe.FunGame.Core.Library.Common.Addon.SkillMode.Name">
|
||||
<summary>
|
||||
模组名称
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Milimoe.FunGame.Core.Library.Common.Addon.SkillMode.Description">
|
||||
<summary>
|
||||
模组描述
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Milimoe.FunGame.Core.Library.Common.Addon.SkillMode.Version">
|
||||
<summary>
|
||||
模组版本
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Milimoe.FunGame.Core.Library.Common.Addon.SkillMode.Author">
|
||||
<summary>
|
||||
模组作者
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Milimoe.FunGame.Core.Library.Common.Addon.SkillMode.Skills">
|
||||
<summary>
|
||||
此模组中包含的技能
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Milimoe.FunGame.Core.Library.Common.Addon.SkillMode.IsLoaded">
|
||||
<summary>
|
||||
加载标记
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Milimoe.FunGame.Core.Library.Common.Addon.SkillMode.Load(System.Object[])">
|
||||
<summary>
|
||||
加载模组
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Milimoe.FunGame.Core.Library.Common.Addon.SkillMode.AfterLoad">
|
||||
<summary>
|
||||
模组加载后需要做的事
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Milimoe.FunGame.Core.Library.Common.Addon.SkillMode.BeforeLoad">
|
||||
<summary>
|
||||
允许返回false来阻止加载此模组
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:Milimoe.FunGame.Core.Library.Common.Architecture.AsyncAwaiter`1">
|
||||
<summary>
|
||||
继承这个类可以获得异步等待的功能
|
||||
@ -1870,11 +2021,14 @@
|
||||
<param name="objs"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Milimoe.FunGame.Core.Service.AddonManager.LoadGameModes(System.Collections.Generic.Dictionary{System.String,Milimoe.FunGame.Core.Library.Common.Addon.GameMode},System.Object[])">
|
||||
<member name="M:Milimoe.FunGame.Core.Service.AddonManager.LoadGameModes(System.Collections.Generic.Dictionary{System.String,Milimoe.FunGame.Core.Library.Common.Addon.GameMode},System.Collections.Generic.List{Milimoe.FunGame.Core.Entity.Character},System.Collections.Generic.List{Milimoe.FunGame.Core.Entity.Skill},System.Collections.Generic.List{Milimoe.FunGame.Core.Entity.Item},System.Object[])">
|
||||
<summary>
|
||||
从gamemodes目录加载所有模组
|
||||
</summary>
|
||||
<param name="gamemodes"></param>
|
||||
<param name="Characters"></param>
|
||||
<param name="Skills"></param>
|
||||
<param name="Items"></param>
|
||||
<param name="objs"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
|
||||
@ -1,12 +1,11 @@
|
||||
using System.Collections;
|
||||
using Milimoe.FunGame.Core.Interface.Entity;
|
||||
using Milimoe.FunGame.Core.Library.Constant;
|
||||
|
||||
namespace Milimoe.FunGame.Core.Entity
|
||||
{
|
||||
public class Character
|
||||
public class Character : BaseEntity
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string Name { get; set; } = "";
|
||||
public string FirstName { get; set; } = "";
|
||||
public string NickName { get; set; } = "";
|
||||
public User? User { get; set; } = null;
|
||||
@ -50,12 +49,22 @@ namespace Milimoe.FunGame.Core.Entity
|
||||
public decimal CritRate { get; set; } = 0.05M; // 暴击率
|
||||
public decimal CritDMG { get; set; } = 1.25M; // 暴击伤害
|
||||
public decimal EvadeRate { get; set; } = 0.05M; // 闪避率
|
||||
public Hashtable Skills { get; set; } = new();
|
||||
public Hashtable Items { get; set; } = new();
|
||||
public Hashtable Skills { get; set; } = [];
|
||||
public Hashtable Items { get; set; } = [];
|
||||
|
||||
internal Character()
|
||||
protected Character()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
internal static Character GetInstance()
|
||||
{
|
||||
return new();
|
||||
}
|
||||
|
||||
public override bool Equals(IBaseEntity? other)
|
||||
{
|
||||
return other is Character c && c.Name == Name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,23 +6,31 @@ namespace Milimoe.FunGame.Core.Entity
|
||||
{
|
||||
public ActiveSkill? Skill { get; set; } = null;
|
||||
|
||||
internal ActiveItem()
|
||||
protected ActiveItem()
|
||||
{
|
||||
Active = true;
|
||||
}
|
||||
|
||||
internal ActiveItem(int id, string name)
|
||||
protected ActiveItem(int id, string name)
|
||||
{
|
||||
Active = true;
|
||||
Id = id;
|
||||
Name = name;
|
||||
}
|
||||
|
||||
internal static ActiveItem GetInstance()
|
||||
{
|
||||
return new();
|
||||
}
|
||||
|
||||
internal static ActiveItem GetInstance(int id, string name)
|
||||
{
|
||||
return new(id, name);
|
||||
}
|
||||
|
||||
public override bool Equals(IBaseEntity? other)
|
||||
{
|
||||
if (other != null && other.Guid == this.Guid)
|
||||
return true;
|
||||
else return false;
|
||||
return other is ActiveItem i && i.Name == Name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,23 +6,31 @@ namespace Milimoe.FunGame.Core.Entity
|
||||
{
|
||||
public PassiveSkill? Skill { get; set; } = null;
|
||||
|
||||
internal PassiveItem()
|
||||
protected PassiveItem()
|
||||
{
|
||||
Active = false;
|
||||
}
|
||||
|
||||
internal PassiveItem(int id, string name)
|
||||
protected PassiveItem(int id, string name)
|
||||
{
|
||||
Active = false;
|
||||
Id = id;
|
||||
Name = name;
|
||||
}
|
||||
|
||||
internal static PassiveItem GetInstance()
|
||||
{
|
||||
return new();
|
||||
}
|
||||
|
||||
internal static PassiveItem GetInstance(int id, string name)
|
||||
{
|
||||
return new(id, name);
|
||||
}
|
||||
|
||||
public override bool Equals(IBaseEntity? other)
|
||||
{
|
||||
if (other != null && other.Guid == this.Guid)
|
||||
return true;
|
||||
else return false;
|
||||
return other is PassiveItem i && i.Name == Name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,4 +1,6 @@
|
||||
namespace Milimoe.FunGame.Core.Entity
|
||||
using Milimoe.FunGame.Core.Interface.Entity;
|
||||
|
||||
namespace Milimoe.FunGame.Core.Entity
|
||||
{
|
||||
public class ActiveSkill : Skill
|
||||
{
|
||||
@ -15,9 +17,19 @@
|
||||
public decimal Reference9 { get; set; } = 0;
|
||||
public decimal Reference10 { get; set; } = 0;
|
||||
|
||||
internal ActiveSkill()
|
||||
protected ActiveSkill()
|
||||
{
|
||||
Active = true;
|
||||
}
|
||||
|
||||
internal static ActiveSkill GetInstance()
|
||||
{
|
||||
return new();
|
||||
}
|
||||
|
||||
public override bool Equals(IBaseEntity? other)
|
||||
{
|
||||
return other is ActiveSkill s && s.Name == Name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,4 +1,6 @@
|
||||
namespace Milimoe.FunGame.Core.Entity
|
||||
using Milimoe.FunGame.Core.Interface.Entity;
|
||||
|
||||
namespace Milimoe.FunGame.Core.Entity
|
||||
{
|
||||
public class PassiveSkill : Skill
|
||||
{
|
||||
@ -13,9 +15,19 @@
|
||||
public decimal Reference9 { get; set; } = 0;
|
||||
public decimal Reference10 { get; set; } = 0;
|
||||
|
||||
internal PassiveSkill()
|
||||
protected PassiveSkill()
|
||||
{
|
||||
Active = false;
|
||||
}
|
||||
|
||||
internal static PassiveSkill GetInstance()
|
||||
{
|
||||
return new();
|
||||
}
|
||||
|
||||
public override bool Equals(IBaseEntity? other)
|
||||
{
|
||||
return other is PassiveSkill s && s.Name == Name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,10 +2,8 @@
|
||||
|
||||
namespace Milimoe.FunGame.Core.Entity
|
||||
{
|
||||
public abstract class Skill
|
||||
public abstract class Skill : BaseEntity
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string Name { get; set; } = "";
|
||||
public string Describe { get; set; } = "";
|
||||
public char Key { get; set; }
|
||||
public bool Active { get; set; }
|
||||
|
||||
@ -36,14 +36,9 @@ namespace Milimoe.FunGame.Core.Entity
|
||||
Statistics = new(this);
|
||||
}
|
||||
|
||||
public bool Equals(Room other)
|
||||
{
|
||||
return Equals(other);
|
||||
}
|
||||
|
||||
public override bool Equals(IBaseEntity? other)
|
||||
{
|
||||
return other?.Id == Id;
|
||||
return other is Room r && r.Roomid == Roomid;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -48,9 +48,7 @@ namespace Milimoe.FunGame.Core.Entity
|
||||
|
||||
public override bool Equals(IBaseEntity? other)
|
||||
{
|
||||
if (other == null) return false;
|
||||
if (((User)other).Id == Id) return true;
|
||||
return false;
|
||||
return other is User u && u.Id == Id;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
|
||||
@ -4,6 +4,6 @@
|
||||
IGamingRandomEventHandler, IGamingMoveEventHandler, IGamingAttackEventHandler, IGamingSkillEventHandler, IGamingItemEventHandler, IGamingMagicEventHandler, IGamingBuyEventHandler,
|
||||
IGamingSuperSkillEventHandler, IGamingPauseEventHandler, IGamingUnpauseEventHandler, IGamingSurrenderEventHandler, IGamingUpdateInfoEventHandler
|
||||
{
|
||||
|
||||
public abstract bool StartUI(params object[] args);
|
||||
}
|
||||
}
|
||||
|
||||
75
Library/Common/Addon/CharacterMode.cs
Normal file
75
Library/Common/Addon/CharacterMode.cs
Normal file
@ -0,0 +1,75 @@
|
||||
using Milimoe.FunGame.Core.Entity;
|
||||
using Milimoe.FunGame.Core.Interface;
|
||||
|
||||
namespace Milimoe.FunGame.Core.Library.Common.Addon
|
||||
{
|
||||
public abstract class CharacterMode : IAddon
|
||||
{
|
||||
/// <summary>
|
||||
/// 模组名称
|
||||
/// </summary>
|
||||
public abstract string Name { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 模组描述
|
||||
/// </summary>
|
||||
public abstract string Description { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 模组版本
|
||||
/// </summary>
|
||||
public abstract string Version { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 模组作者
|
||||
/// </summary>
|
||||
public abstract string Author { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 此模组中包含的角色
|
||||
/// </summary>
|
||||
public abstract List<Character> Characters { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 加载标记
|
||||
/// </summary>
|
||||
private bool IsLoaded = false;
|
||||
|
||||
/// <summary>
|
||||
/// 加载模组
|
||||
/// </summary>
|
||||
public bool Load(params object[] objs)
|
||||
{
|
||||
if (IsLoaded)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
// BeforeLoad可以阻止加载此模组
|
||||
if (BeforeLoad())
|
||||
{
|
||||
// 模组加载后,不允许再次加载此模组
|
||||
IsLoaded = true;
|
||||
// 如果加载后需要执行代码,请重写AfterLoad方法
|
||||
AfterLoad();
|
||||
}
|
||||
return IsLoaded;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 模组加载后需要做的事
|
||||
/// </summary>
|
||||
protected virtual void AfterLoad()
|
||||
{
|
||||
// override
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 允许返回false来阻止加载此模组
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
protected virtual bool BeforeLoad()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -28,10 +28,26 @@ namespace Milimoe.FunGame.Core.Library.Common.Addon
|
||||
/// </summary>
|
||||
public abstract string Author { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 默认地图
|
||||
/// </summary>
|
||||
public abstract string DefaultMap { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 模组所使用的地图
|
||||
/// </summary>
|
||||
public abstract string Map { get; }
|
||||
public abstract string[] Maps { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 如模组有界面,请重写此方法
|
||||
/// 此方法会在StartGame时调用
|
||||
/// </summary>
|
||||
/// <param name="args"></param>
|
||||
/// <returns></returns>
|
||||
public virtual bool StartUI(params object[] args)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 加载标记
|
||||
|
||||
75
Library/Common/Addon/ItemMode.cs
Normal file
75
Library/Common/Addon/ItemMode.cs
Normal file
@ -0,0 +1,75 @@
|
||||
using Milimoe.FunGame.Core.Entity;
|
||||
using Milimoe.FunGame.Core.Interface;
|
||||
|
||||
namespace Milimoe.FunGame.Core.Library.Common.Addon
|
||||
{
|
||||
public abstract class ItemMode : IAddon
|
||||
{
|
||||
/// <summary>
|
||||
/// 模组名称
|
||||
/// </summary>
|
||||
public abstract string Name { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 模组描述
|
||||
/// </summary>
|
||||
public abstract string Description { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 模组版本
|
||||
/// </summary>
|
||||
public abstract string Version { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 模组作者
|
||||
/// </summary>
|
||||
public abstract string Author { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 此模组中包含的物品
|
||||
/// </summary>
|
||||
public abstract List<Item> Items { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 加载标记
|
||||
/// </summary>
|
||||
private bool IsLoaded = false;
|
||||
|
||||
/// <summary>
|
||||
/// 加载模组
|
||||
/// </summary>
|
||||
public bool Load(params object[] objs)
|
||||
{
|
||||
if (IsLoaded)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
// BeforeLoad可以阻止加载此模组
|
||||
if (BeforeLoad())
|
||||
{
|
||||
// 模组加载后,不允许再次加载此模组
|
||||
IsLoaded = true;
|
||||
// 如果加载后需要执行代码,请重写AfterLoad方法
|
||||
AfterLoad();
|
||||
}
|
||||
return IsLoaded;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 模组加载后需要做的事
|
||||
/// </summary>
|
||||
protected virtual void AfterLoad()
|
||||
{
|
||||
// override
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 允许返回false来阻止加载此模组
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
protected virtual bool BeforeLoad()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
75
Library/Common/Addon/SkillMode.cs
Normal file
75
Library/Common/Addon/SkillMode.cs
Normal file
@ -0,0 +1,75 @@
|
||||
using Milimoe.FunGame.Core.Entity;
|
||||
using Milimoe.FunGame.Core.Interface;
|
||||
|
||||
namespace Milimoe.FunGame.Core.Library.Common.Addon
|
||||
{
|
||||
public abstract class SkillMode : IAddon
|
||||
{
|
||||
/// <summary>
|
||||
/// 模组名称
|
||||
/// </summary>
|
||||
public abstract string Name { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 模组描述
|
||||
/// </summary>
|
||||
public abstract string Description { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 模组版本
|
||||
/// </summary>
|
||||
public abstract string Version { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 模组作者
|
||||
/// </summary>
|
||||
public abstract string Author { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 此模组中包含的技能
|
||||
/// </summary>
|
||||
public abstract List<Skill> Skills { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 加载标记
|
||||
/// </summary>
|
||||
private bool IsLoaded = false;
|
||||
|
||||
/// <summary>
|
||||
/// 加载模组
|
||||
/// </summary>
|
||||
public bool Load(params object[] objs)
|
||||
{
|
||||
if (IsLoaded)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
// BeforeLoad可以阻止加载此模组
|
||||
if (BeforeLoad())
|
||||
{
|
||||
// 模组加载后,不允许再次加载此模组
|
||||
IsLoaded = true;
|
||||
// 如果加载后需要执行代码,请重写AfterLoad方法
|
||||
AfterLoad();
|
||||
}
|
||||
return IsLoaded;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 模组加载后需要做的事
|
||||
/// </summary>
|
||||
protected virtual void AfterLoad()
|
||||
{
|
||||
// override
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 允许返回false来阻止加载此模组
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
protected virtual bool BeforeLoad()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,4 +1,5 @@
|
||||
using System.Reflection;
|
||||
using Milimoe.FunGame.Core.Entity;
|
||||
using Milimoe.FunGame.Core.Library.Common.Addon;
|
||||
using Milimoe.FunGame.Core.Library.Constant;
|
||||
|
||||
@ -41,9 +42,12 @@ namespace Milimoe.FunGame.Core.Service
|
||||
/// 从gamemodes目录加载所有模组
|
||||
/// </summary>
|
||||
/// <param name="gamemodes"></param>
|
||||
/// <param name="Characters"></param>
|
||||
/// <param name="Skills"></param>
|
||||
/// <param name="Items"></param>
|
||||
/// <param name="objs"></param>
|
||||
/// <returns></returns>
|
||||
internal static Dictionary<string, GameMode> LoadGameModes(Dictionary<string, GameMode> gamemodes, params object[] objs)
|
||||
internal static Dictionary<string, GameMode> LoadGameModes(Dictionary<string, GameMode> gamemodes, List<Character> Characters, List<Skill> Skills, List<Item> Items, params object[] objs)
|
||||
{
|
||||
if (!Directory.Exists(ReflectionSet.GameModeFolderPath)) return gamemodes;
|
||||
|
||||
@ -61,6 +65,33 @@ namespace Milimoe.FunGame.Core.Service
|
||||
gamemodes.TryAdd(instance.Name, instance);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (Type type in assembly.GetTypes().AsEnumerable().Where(type => type.IsSubclassOf(typeof(Character))))
|
||||
{
|
||||
Character? instance = (Character?)Activator.CreateInstance(type);
|
||||
if (instance != null && !Characters.Contains(instance))
|
||||
{
|
||||
Characters.Add(instance);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (Type type in assembly.GetTypes().AsEnumerable().Where(type => type.IsSubclassOf(typeof(Skill))))
|
||||
{
|
||||
Skill? instance = (Skill?)Activator.CreateInstance(type);
|
||||
if (instance != null && !Skills.Contains(instance))
|
||||
{
|
||||
Skills.Add(instance);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (Type type in assembly.GetTypes().AsEnumerable().Where(type => type.IsSubclassOf(typeof(Item))))
|
||||
{
|
||||
Item? instance = (Item?)Activator.CreateInstance(type);
|
||||
if (instance != null && !Items.Contains(instance))
|
||||
{
|
||||
Items.Add(instance);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return gamemodes;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user