添加CharacterMode,SkillMode,ItemMode类和其它杂项 (#64)

* 添加CharacterMode,SkillMode,ItemMode

* 添加默认地图属性

* 添加CharacterMode, SkillMode, ItemMode的Loader方法,优化构造函数

* 添加和优化Equals方法

* 删除Symbol
This commit is contained in:
milimoe 2023-11-30 00:27:49 +08:00 committed by GitHub
parent 47d9813793
commit 7b4a655ff4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 514 additions and 47 deletions

View File

@ -7,9 +7,6 @@ namespace Milimoe.FunGame.Core.Api.Factory
{ {
public Type EntityType => typeof(Character); public Type EntityType => typeof(Character);
public Character Create() public Character Create() => Character.GetInstance();
{
return new Character();
}
} }
} }

View File

@ -16,11 +16,11 @@ namespace Milimoe.FunGame.Core.Api.Factory
{ {
case ItemType.Passive: case ItemType.Passive:
_EntityType = typeof(PassiveItem); _EntityType = typeof(PassiveItem);
return new PassiveItem(); return PassiveItem.GetInstance();
case ItemType.Active: case ItemType.Active:
default: default:
_EntityType = typeof(ActiveItem); _EntityType = typeof(ActiveItem);
return new ActiveItem(); return PassiveItem.GetInstance();
} }
} }

View File

@ -16,11 +16,11 @@ namespace Milimoe.FunGame.Core.Api.Factory
{ {
case SkillType.Passive: case SkillType.Passive:
_EntityType = typeof(PassiveSkill); _EntityType = typeof(PassiveSkill);
return new PassiveSkill(); return PassiveSkill.GetInstance();
case SkillType.Active: case SkillType.Active:
default: default:
_EntityType = typeof(ActiveSkill); _EntityType = typeof(ActiveSkill);
return new ActiveSkill(); return ActiveSkill.GetInstance();
} }
} }

View File

@ -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.Library.Common.Event;
using Milimoe.FunGame.Core.Service; using Milimoe.FunGame.Core.Service;
@ -8,6 +9,9 @@ namespace Milimoe.FunGame.Core.Api.Utility
{ {
public Dictionary<string, GameMode> Modes { get; } = []; public Dictionary<string, GameMode> Modes { get; } = [];
public Dictionary<string, GameMap> Maps { get; } = []; public Dictionary<string, GameMap> Maps { get; } = [];
public List<Character> Characters { get; } = [];
public List<Skill> Skills { get; } = [];
public List<Item> Items { get; } = [];
private GameModeLoader() private GameModeLoader()
{ {
@ -17,7 +21,7 @@ namespace Milimoe.FunGame.Core.Api.Utility
public static GameModeLoader LoadGameModes(params object[] objs) public static GameModeLoader LoadGameModes(params object[] objs)
{ {
GameModeLoader loader = new(); GameModeLoader loader = new();
AddonManager.LoadGameModes(loader.Modes, objs); AddonManager.LoadGameModes(loader.Modes, loader.Characters, loader.Skills, loader.Items, objs);
AddonManager.LoadGameMaps(loader.Maps, objs); AddonManager.LoadGameMaps(loader.Maps, objs);
return loader; return loader;
} }

View File

@ -1157,6 +1157,52 @@
服务端和客户端都应该实现这个接口用于初始化支持的Mod列表 服务端和客户端都应该实现这个接口用于初始化支持的Mod列表
</summary> </summary>
</member> </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"> <member name="T:Milimoe.FunGame.Core.Library.Common.Addon.ExamplePlugin">
<summary> <summary>
必须继承基类:<see cref="T:Milimoe.FunGame.Core.Library.Common.Addon.Plugin"/><para/> 必须继承基类:<see cref="T:Milimoe.FunGame.Core.Library.Common.Addon.Plugin"/><para/>
@ -1241,11 +1287,24 @@
模组作者 模组作者
</summary> </summary>
</member> </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>
模组所使用的地图 模组所使用的地图
</summary> </summary>
</member> </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"> <member name="F:Milimoe.FunGame.Core.Library.Common.Addon.GameMode.IsLoaded">
<summary> <summary>
加载标记 加载标记
@ -1302,6 +1361,52 @@
绑定事件。在<see cref="M:Milimoe.FunGame.Core.Library.Common.Addon.GameMode.BeforeLoad"/>后触发 绑定事件。在<see cref="M:Milimoe.FunGame.Core.Library.Common.Addon.GameMode.BeforeLoad"/>后触发
</summary> </summary>
</member> </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"> <member name="P:Milimoe.FunGame.Core.Library.Common.Addon.Plugin.Name">
<summary> <summary>
插件名称 插件名称
@ -1378,6 +1483,52 @@
绑定事件。在<see cref="M:Milimoe.FunGame.Core.Library.Common.Addon.Plugin.BeforeLoad"/>后触发 绑定事件。在<see cref="M:Milimoe.FunGame.Core.Library.Common.Addon.Plugin.BeforeLoad"/>后触发
</summary> </summary>
</member> </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"> <member name="T:Milimoe.FunGame.Core.Library.Common.Architecture.AsyncAwaiter`1">
<summary> <summary>
继承这个类可以获得异步等待的功能 继承这个类可以获得异步等待的功能
@ -1870,11 +2021,14 @@
<param name="objs"></param> <param name="objs"></param>
<returns></returns> <returns></returns>
</member> </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> <summary>
从gamemodes目录加载所有模组 从gamemodes目录加载所有模组
</summary> </summary>
<param name="gamemodes"></param> <param name="gamemodes"></param>
<param name="Characters"></param>
<param name="Skills"></param>
<param name="Items"></param>
<param name="objs"></param> <param name="objs"></param>
<returns></returns> <returns></returns>
</member> </member>

View File

@ -1,12 +1,11 @@
using System.Collections; using System.Collections;
using Milimoe.FunGame.Core.Interface.Entity;
using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Core.Library.Constant;
namespace Milimoe.FunGame.Core.Entity 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 FirstName { get; set; } = "";
public string NickName { get; set; } = ""; public string NickName { get; set; } = "";
public User? User { get; set; } = null; public User? User { get; set; } = null;
@ -50,12 +49,22 @@ namespace Milimoe.FunGame.Core.Entity
public decimal CritRate { get; set; } = 0.05M; // 暴击率 public decimal CritRate { get; set; } = 0.05M; // 暴击率
public decimal CritDMG { get; set; } = 1.25M; // 暴击伤害 public decimal CritDMG { get; set; } = 1.25M; // 暴击伤害
public decimal EvadeRate { get; set; } = 0.05M; // 闪避率 public decimal EvadeRate { get; set; } = 0.05M; // 闪避率
public Hashtable Skills { get; set; } = new(); public Hashtable Skills { get; set; } = [];
public Hashtable Items { get; set; } = new(); 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;
}
} }
} }

View File

@ -6,23 +6,31 @@ namespace Milimoe.FunGame.Core.Entity
{ {
public ActiveSkill? Skill { get; set; } = null; public ActiveSkill? Skill { get; set; } = null;
internal ActiveItem() protected ActiveItem()
{ {
Active = true; Active = true;
} }
internal ActiveItem(int id, string name) protected ActiveItem(int id, string name)
{ {
Active = true; Active = true;
Id = id; Id = id;
Name = name; 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) public override bool Equals(IBaseEntity? other)
{ {
if (other != null && other.Guid == this.Guid) return other is ActiveItem i && i.Name == Name;
return true;
else return false;
} }
} }
} }

View File

@ -6,23 +6,31 @@ namespace Milimoe.FunGame.Core.Entity
{ {
public PassiveSkill? Skill { get; set; } = null; public PassiveSkill? Skill { get; set; } = null;
internal PassiveItem() protected PassiveItem()
{ {
Active = false; Active = false;
} }
internal PassiveItem(int id, string name) protected PassiveItem(int id, string name)
{ {
Active = false; Active = false;
Id = id; Id = id;
Name = name; 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) public override bool Equals(IBaseEntity? other)
{ {
if (other != null && other.Guid == this.Guid) return other is PassiveItem i && i.Name == Name;
return true;
else return false;
} }
} }
} }

View File

@ -1,4 +1,6 @@
namespace Milimoe.FunGame.Core.Entity using Milimoe.FunGame.Core.Interface.Entity;
namespace Milimoe.FunGame.Core.Entity
{ {
public class ActiveSkill : Skill public class ActiveSkill : Skill
{ {
@ -15,9 +17,19 @@
public decimal Reference9 { get; set; } = 0; public decimal Reference9 { get; set; } = 0;
public decimal Reference10 { get; set; } = 0; public decimal Reference10 { get; set; } = 0;
internal ActiveSkill() protected ActiveSkill()
{ {
Active = true; Active = true;
} }
internal static ActiveSkill GetInstance()
{
return new();
}
public override bool Equals(IBaseEntity? other)
{
return other is ActiveSkill s && s.Name == Name;
}
} }
} }

View File

@ -1,4 +1,6 @@
namespace Milimoe.FunGame.Core.Entity using Milimoe.FunGame.Core.Interface.Entity;
namespace Milimoe.FunGame.Core.Entity
{ {
public class PassiveSkill : Skill public class PassiveSkill : Skill
{ {
@ -13,9 +15,19 @@
public decimal Reference9 { get; set; } = 0; public decimal Reference9 { get; set; } = 0;
public decimal Reference10 { get; set; } = 0; public decimal Reference10 { get; set; } = 0;
internal PassiveSkill() protected PassiveSkill()
{ {
Active = false; Active = false;
} }
internal static PassiveSkill GetInstance()
{
return new();
}
public override bool Equals(IBaseEntity? other)
{
return other is PassiveSkill s && s.Name == Name;
}
} }
} }

View File

@ -2,10 +2,8 @@
namespace Milimoe.FunGame.Core.Entity 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 string Describe { get; set; } = "";
public char Key { get; set; } public char Key { get; set; }
public bool Active { get; set; } public bool Active { get; set; }

View File

@ -36,14 +36,9 @@ namespace Milimoe.FunGame.Core.Entity
Statistics = new(this); Statistics = new(this);
} }
public bool Equals(Room other)
{
return Equals(other);
}
public override bool Equals(IBaseEntity? other) public override bool Equals(IBaseEntity? other)
{ {
return other?.Id == Id; return other is Room r && r.Roomid == Roomid;
} }
} }
} }

View File

@ -48,9 +48,7 @@ namespace Milimoe.FunGame.Core.Entity
public override bool Equals(IBaseEntity? other) public override bool Equals(IBaseEntity? other)
{ {
if (other == null) return false; return other is User u && u.Id == Id;
if (((User)other).Id == Id) return true;
return false;
} }
public override string ToString() public override string ToString()

View File

@ -4,6 +4,6 @@
IGamingRandomEventHandler, IGamingMoveEventHandler, IGamingAttackEventHandler, IGamingSkillEventHandler, IGamingItemEventHandler, IGamingMagicEventHandler, IGamingBuyEventHandler, IGamingRandomEventHandler, IGamingMoveEventHandler, IGamingAttackEventHandler, IGamingSkillEventHandler, IGamingItemEventHandler, IGamingMagicEventHandler, IGamingBuyEventHandler,
IGamingSuperSkillEventHandler, IGamingPauseEventHandler, IGamingUnpauseEventHandler, IGamingSurrenderEventHandler, IGamingUpdateInfoEventHandler IGamingSuperSkillEventHandler, IGamingPauseEventHandler, IGamingUnpauseEventHandler, IGamingSurrenderEventHandler, IGamingUpdateInfoEventHandler
{ {
public abstract bool StartUI(params object[] args);
} }
} }

View 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;
}
}
}

View File

@ -28,10 +28,26 @@ namespace Milimoe.FunGame.Core.Library.Common.Addon
/// </summary> /// </summary>
public abstract string Author { get; } public abstract string Author { get; }
/// <summary>
/// 默认地图
/// </summary>
public abstract string DefaultMap { get; }
/// <summary> /// <summary>
/// 模组所使用的地图 /// 模组所使用的地图
/// </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> /// <summary>
/// 加载标记 /// 加载标记

View 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;
}
}
}

View 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;
}
}
}

View File

@ -1,4 +1,5 @@
using System.Reflection; using System.Reflection;
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Common.Addon; using Milimoe.FunGame.Core.Library.Common.Addon;
using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Core.Library.Constant;
@ -41,9 +42,12 @@ namespace Milimoe.FunGame.Core.Service
/// 从gamemodes目录加载所有模组 /// 从gamemodes目录加载所有模组
/// </summary> /// </summary>
/// <param name="gamemodes"></param> /// <param name="gamemodes"></param>
/// <param name="Characters"></param>
/// <param name="Skills"></param>
/// <param name="Items"></param>
/// <param name="objs"></param> /// <param name="objs"></param>
/// <returns></returns> /// <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; if (!Directory.Exists(ReflectionSet.GameModeFolderPath)) return gamemodes;
@ -61,6 +65,33 @@ namespace Milimoe.FunGame.Core.Service
gamemodes.TryAdd(instance.Name, instance); 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; return gamemodes;