C# 运行时的通用可配置条件检查器

C# 运行时的通用可配置条件检查器,c#,configuration,runtime,expression-trees,C#,Configuration,Runtime,Expression Trees,我正在为我的MMORPG项目编写一个“通用”成就系统,它需要对我的游戏设计师友好且高效(无需编写任何代码来添加新成就) 为此,我考虑了一个解决方案,它是一个基本配置文件,链接到“eventType”枚举,并提供一个可选参数列表(基于事件属性) 这里有一个例子 name: ACHIEVEMENT_NAME event_type: ITEM_USAGE # enum as a string, there is a list of event types count: 30 # 30 item usa

我正在为我的MMORPG项目编写一个“通用”成就系统,它需要对我的游戏设计师友好且高效(无需编写任何代码来添加新成就)

为此,我考虑了一个解决方案,它是一个基本配置文件,链接到“eventType”枚举,并提供一个可选参数列表(基于事件属性) 这里有一个例子

name: ACHIEVEMENT_NAME
event_type: ITEM_USAGE # enum as a string, there is a list of event types
count: 30 # 30 item usage
args: # every args are optional
  item_vnum: 1127 # vnum - optional
  map_id: 1 # on map id 1 only - optional
公共枚举实现EventType
{
所使用的项目(u),,
怪物被杀,
}
公共接口IAchievementArgument
{
AchievementEventType事件类型{get;}
}
公共类MonsterKilledAchievementArgument:IAchievementArgument
{
public AchievementEventType=>AchievementEventType.MONSTER\u被杀死;
公共long MonsterVnum{get;set;}
public short?MapId{get;set;}
}
公共类实现配置
{
公共字符串名称{get;set;}
公共字符串事件类型{get;set;}
公共长计数{get;set;}
公共字典?Args{get;set;}
}
公共代表布尔实现过滤器(IAchievementArgument AchievementTarget);
我考虑生成一个表达式树来为我的“成就增量条件”构建一个委托(
AcquisitionFilter
) (基本上,该功能将检查玩家的特定成就计数器是否可以增加)

我认为有两种解决方案,都有各自的优点/缺点,但我在寻找外部观点,您对此有何看法。(或者,你可以向我介绍另一种解决方案)

每个成就1个表达树 我为每个成就生成一个表达式树,将
IAchievementArgument
作为参数与成就配置进行比较

  • 优点:
    • 执行时速度更快(每个成就条件都有自己的委托)
  • 缺点:
    • 内存占用
每个args类型1个表达式树 我为每个
IAchievementArgument
类型生成一个表达式树,它将逐个获取和比较成就配置

  • 缺点:
    • 更多执行时间(需要检查每个成就配置的所有键/值相等性)
  • 优点:
    • 更轻的内存占用

提前感谢:微微一笑:

请不要将代码作为图片共享。请原谅:)