using System; using System.Collections.Generic; using System.Linq; using System.Text; using CommonLang.Property; using CommonAI.Zone.Instance; using CommonAI.Zone.Attributes; using CommonAI.Zone.EventTrigger; namespace CommonAI.Zone.ZoneEditor.EventTrigger { public static class GameFields { private static Type[] s32_types = new Type[] { typeof(int), typeof(sbyte), typeof(short), typeof(byte), typeof(ushort), typeof(uint), }; private static Type[] f32_types = new Type[] { typeof(float), typeof(double), }; private static FieldManager s_Manager; public static FieldManager Manager { get { return s_Manager; } } internal static void InitFiledManager() { if (s_Manager == null) { s_Manager = new FieldManager(); AddObjectType(typeof(Config)); AddObjectType(typeof(InstanceUnit)); AddObjectType(typeof(UnitInfo)); AddObjectType(typeof(InstanceItem)); AddObjectType(typeof(ItemTemplate)); AddObjectType(typeof(SkillTemplate)); AddObjectType(typeof(SpellTemplate)); AddObjectType(typeof(BuffTemplate)); AddObjectType(typeof(EditorScene)); AddObjectType(TemplateManager.Factory.ExtConfigType); AddObjectType(TemplateManager.Factory.UnitPropertiesType); AddObjectType(TemplateManager.Factory.SkillPropertiesType); AddObjectType(TemplateManager.Factory.SpellPropertiesType); AddObjectType(TemplateManager.Factory.ItemPropertiesType); AddObjectType(TemplateManager.Factory.BuffPropertiesType); AddObjectType(TemplateManager.Factory.ScenePropertiesType); } } public static void AddObjectType(Type objType) { s_Manager.AddFieldsMap(new FieldsMap(objType, typeof(int), s32_types)); s_Manager.AddFieldsMap(new FieldsMap(objType, typeof(float), f32_types)); s_Manager.AddFieldsMap(new FieldsMap(objType, typeof(string))); s_Manager.AddFieldsMap(new FieldsMap(objType, typeof(bool))); } public static T GetValue(object owner, Type baseType, string fieldname) { FieldsMap fm = s_Manager.GetFields(baseType, typeof(T)); if (fm != null) { return fm.GetValue(owner, fieldname); } return default(T); } } public interface IFieldMemberValue { Type OwnerType { get; } } //----------------------------------------------------------------------------------------- #region __Config__ [DescAttribute("配置字段(string)", "字段 - 配置")] public class ConfigFieldStringValue : StringValue { [ObjectMemberNameAttribute(typeof(Config), typeof(string))] [DescAttribute("字段名")] public string FieldName = ""; public override string ToString() { return string.Format("({0}).{1}", "配置", FieldName); } public override string GetValue(IEditorValueAdapter api, EventArguments args) { return GameFields.GetValue(api.ZoneAPI.Templates.CFG, typeof(Config), FieldName); } } [DescAttribute("配置字段(int)", "字段 - 配置")] public class ConfigFieldIntegerValue : IntegerValue { [ObjectMemberNameAttribute(typeof(Config), typeof(int))] [DescAttribute("字段名")] public string FieldName = ""; public override string ToString() { return string.Format("({0}).{1}", "配置", FieldName); } public override int GetValue(IEditorValueAdapter api, EventArguments args) { return GameFields.GetValue(api.ZoneAPI.Templates.CFG, typeof(Config), FieldName); } } [DescAttribute("配置字段(float)", "字段 - 配置")] public class ConfigFieldRealValue : RealValue { [ObjectMemberNameAttribute(typeof(Config), typeof(float))] [DescAttribute("字段名")] public string FieldName = ""; public override string ToString() { return string.Format("({0}).{1}", "配置", FieldName); } public override float GetValue(IEditorValueAdapter api, EventArguments args) { return GameFields.GetValue(api.ZoneAPI.Templates.CFG, typeof(Config), FieldName); } } [DescAttribute("配置字段(bool)", "字段 - 配置")] public class ConfigFieldBoolValue : BooleanValue { [ObjectMemberNameAttribute(typeof(Config), typeof(bool))] [DescAttribute("字段名")] public string FieldName = ""; public override string ToString() { return string.Format("({0}).{1}", "配置", FieldName); } public override bool GetValue(IEditorValueAdapter api, EventArguments args) { return GameFields.GetValue(api.ZoneAPI.Templates.CFG, typeof(Config), FieldName); } } #endregion //----------------------------------------------------------------------------------------- #region __场景实体__ [DescAttribute("场景字段(string)", "字段 - 场景")] public class ZoneFieldStringValue : StringValue { [ObjectMemberNameAttribute(typeof(EditorScene), typeof(string))] [DescAttribute("字段名")] public string FieldName = ""; public override string ToString() { return string.Format("({0}).{1}", "场景", FieldName); } public override string GetValue(IEditorValueAdapter api, EventArguments args) { return GameFields.GetValue(api.ZoneAPI, typeof(EditorScene), FieldName); } } [DescAttribute("场景字段(int)", "字段 - 场景")] public class ZoneFieldIntegerValue : IntegerValue { [ObjectMemberNameAttribute(typeof(EditorScene), typeof(int))] [DescAttribute("字段名")] public string FieldName = ""; public override string ToString() { return string.Format("({0}).{1}", "场景", FieldName); } public override int GetValue(IEditorValueAdapter api, EventArguments args) { return GameFields.GetValue(api.ZoneAPI, typeof(EditorScene), FieldName); } } [DescAttribute("场景字段(float)", "字段 - 场景")] public class ZoneFieldRealValue : RealValue { [ObjectMemberNameAttribute(typeof(EditorScene), typeof(float))] [DescAttribute("字段名")] public string FieldName = ""; public override string ToString() { return string.Format("({0}).{1}", "场景", FieldName); } public override float GetValue(IEditorValueAdapter api, EventArguments args) { return GameFields.GetValue(api.ZoneAPI, typeof(EditorScene), FieldName); } } [DescAttribute("场景字段(bool)", "字段 - 场景")] public class ZoneFieldBoolValue : BooleanValue { [ObjectMemberNameAttribute(typeof(EditorScene), typeof(bool))] [DescAttribute("字段名")] public string FieldName = ""; public override string ToString() { return string.Format("({0}).{1}", "场景", FieldName); } public override bool GetValue(IEditorValueAdapter api, EventArguments args) { return GameFields.GetValue(api.ZoneAPI, typeof(EditorScene), FieldName); } } #endregion //----------------------------------------------------------------------------------------- #region __单位实体__ [DescAttribute("单位字段(string)", "字段 - 单位")] public class UnitFieldStringValue : StringValue { [ObjectMemberNameAttribute(typeof(InstanceUnit), typeof(string))] [DescAttribute("字段名")] public string FieldName = ""; [DescAttribute("单位")] public UnitValue Unit = new UnitValue.Trigging(); public override string ToString() { return string.Format("({0}).{1}", Unit, FieldName); } public override string GetValue(IEditorValueAdapter api, EventArguments args) { InstanceUnit o = Unit.GetValue(api, args); if (o != null) { return GameFields.GetValue(o, typeof(InstanceUnit), FieldName); } return null; } } [DescAttribute("单位字段(int)", "字段 - 单位")] public class UnitFieldIntegerValue : IntegerValue { [ObjectMemberNameAttribute(typeof(InstanceUnit), typeof(int))] [DescAttribute("字段名")] public string FieldName = ""; [DescAttribute("单位")] public UnitValue Unit = new UnitValue.Trigging(); public override string ToString() { return string.Format("({0}).{1}", Unit, FieldName); } public override int GetValue(IEditorValueAdapter api, EventArguments args) { InstanceUnit o = Unit.GetValue(api, args); if (o != null) { return GameFields.GetValue(o, typeof(InstanceUnit), FieldName); } return 0; } } [DescAttribute("单位字段(float)", "字段 - 单位")] public class UnitFieldRealValue : RealValue { [ObjectMemberNameAttribute(typeof(InstanceUnit), typeof(float))] [DescAttribute("字段名")] public string FieldName = ""; [DescAttribute("单位")] public UnitValue Unit = new UnitValue.Trigging(); public override string ToString() { return string.Format("({0}).{1}", Unit, FieldName); } public override float GetValue(IEditorValueAdapter api, EventArguments args) { InstanceUnit o = Unit.GetValue(api, args); if (o != null) { return GameFields.GetValue(o, typeof(InstanceUnit), FieldName); } return 0; } } [DescAttribute("单位字段(bool)", "字段 - 单位")] public class UnitFieldBoolValue : BooleanValue { [ObjectMemberNameAttribute(typeof(InstanceUnit), typeof(bool))] [DescAttribute("字段名")] public string FieldName = ""; [DescAttribute("单位")] public UnitValue Unit = new UnitValue.Trigging(); public override string ToString() { return string.Format("({0}).{1}", Unit, FieldName); } public override bool GetValue(IEditorValueAdapter api, EventArguments args) { InstanceUnit o = Unit.GetValue(api, args); if (o != null) { return GameFields.GetValue(o, typeof(InstanceUnit), FieldName); } return false; } } #endregion //----------------------------------------------------------------------------------------- #region __单位模板__ [DescAttribute("单位模板字段(string)", "字段 - 单位模板")] public class UnitTemplateFieldStringValue : StringValue { [ObjectMemberNameAttribute(typeof(UnitInfo), typeof(string))] [DescAttribute("字段名")] public string FieldName = ""; [DescAttribute("单位")] public UnitValue Unit = new UnitValue.Trigging(); public override string ToString() { return string.Format("({0}).模板.{1}", Unit, FieldName); } public override string GetValue(IEditorValueAdapter api, EventArguments args) { InstanceUnit o = Unit.GetValue(api, args); if (o != null) { return GameFields.GetValue(o.Info, typeof(UnitInfo), FieldName); } return null; } } [DescAttribute("单位模板字段(int)", "字段 - 单位模板")] public class UnitTemplateFieldIntegerValue : IntegerValue { [ObjectMemberNameAttribute(typeof(UnitInfo), typeof(int))] [DescAttribute("字段名")] public string FieldName = ""; [DescAttribute("单位")] public UnitValue Unit = new UnitValue.Trigging(); public override string ToString() { return string.Format("({0}).模板.{1}", Unit, FieldName); } public override int GetValue(IEditorValueAdapter api, EventArguments args) { InstanceUnit o = Unit.GetValue(api, args); if (o != null) { return GameFields.GetValue(o.Info, typeof(UnitInfo), FieldName); } return 0; } } [DescAttribute("单位模板字段(float)", "字段 - 单位模板")] public class UnitTemplateFieldRealValue : RealValue { [ObjectMemberNameAttribute(typeof(UnitInfo), typeof(float))] [DescAttribute("字段名")] public string FieldName = ""; [DescAttribute("单位")] public UnitValue Unit = new UnitValue.Trigging(); public override string ToString() { return string.Format("({0}).模板.{1}", Unit, FieldName); } public override float GetValue(IEditorValueAdapter api, EventArguments args) { InstanceUnit o = Unit.GetValue(api, args); if (o != null) { return GameFields.GetValue(o.Info, typeof(UnitInfo), FieldName); } return 0; } } [DescAttribute("单位模板字段(bool)", "字段 - 单位模板")] public class UnitTemplateFieldBoolValue : BooleanValue { [ObjectMemberNameAttribute(typeof(UnitInfo), typeof(bool))] [DescAttribute("字段名")] public string FieldName = ""; [DescAttribute("单位")] public UnitValue Unit = new UnitValue.Trigging(); public override string ToString() { return string.Format("({0}).模板.{1}", Unit, FieldName); } public override bool GetValue(IEditorValueAdapter api, EventArguments args) { InstanceUnit o = Unit.GetValue(api, args); if (o != null) { return GameFields.GetValue(o.Info, typeof(UnitInfo), FieldName); } return false; } } #endregion //----------------------------------------------------------------------------------------- #region __物品实体__ [DescAttribute("物品字段(string)", "字段 - 物品")] public class ItemFieldStringValue : StringValue { [ObjectMemberNameAttribute(typeof(InstanceItem), typeof(string))] [DescAttribute("字段名")] public string FieldName = ""; [DescAttribute("物品")] public ItemValue Item = new ItemValue.NA(); public override string ToString() { return string.Format("({0}).{1}", Item, FieldName); } public override string GetValue(IEditorValueAdapter api, EventArguments args) { InstanceItem o = Item.GetValue(api, args); if (o != null) { return GameFields.GetValue(o, typeof(InstanceItem), FieldName); } return null; } } [DescAttribute("物品字段(int)", "字段 - 物品")] public class ItemFieldIntegerValue : IntegerValue { [ObjectMemberNameAttribute(typeof(InstanceItem), typeof(int))] [DescAttribute("字段名")] public string FieldName = ""; [DescAttribute("物品")] public ItemValue Item = new ItemValue.NA(); public override string ToString() { return string.Format("({0}).{1}", Item, FieldName); } public override int GetValue(IEditorValueAdapter api, EventArguments args) { InstanceItem o = Item.GetValue(api, args); if (o != null) { return GameFields.GetValue(o, typeof(InstanceItem), FieldName); } return 0; } } [DescAttribute("物品字段(float)", "字段 - 物品")] public class ItemFieldRealValue : RealValue { [ObjectMemberNameAttribute(typeof(InstanceItem), typeof(float))] [DescAttribute("字段名")] public string FieldName = ""; [DescAttribute("物品")] public ItemValue Item = new ItemValue.NA(); public override string ToString() { return string.Format("({0}).{1}", Item, FieldName); } public override float GetValue(IEditorValueAdapter api, EventArguments args) { InstanceItem o = Item.GetValue(api, args); if (o != null) { return GameFields.GetValue(o, typeof(InstanceItem), FieldName); } return 0; } } [DescAttribute("物品字段(bool)", "字段 - 物品")] public class ItemFieldBoolValue : BooleanValue { [ObjectMemberNameAttribute(typeof(InstanceItem), typeof(bool))] [DescAttribute("字段名")] public string FieldName = ""; [DescAttribute("物品")] public ItemValue Item = new ItemValue.NA(); public override string ToString() { return string.Format("({0}).{1}", Item, FieldName); } public override bool GetValue(IEditorValueAdapter api, EventArguments args) { InstanceItem o = Item.GetValue(api, args); if (o != null) { return GameFields.GetValue(o, typeof(InstanceItem), FieldName); } return false; } } #endregion //----------------------------------------------------------------------------------------- #region __物品模板__ [DescAttribute("物品模板字段(string)", "字段 - 物品模板")] public class ItemTemplateFieldStringValue : StringValue { [ObjectMemberNameAttribute(typeof(ItemTemplate), typeof(string))] [DescAttribute("字段名")] public string FieldName = ""; [DescAttribute("物品")] public ItemTemplateValue Item = new ItemTemplateValue.Template(); public override string ToString() { return string.Format("({0}).{1}", Item, FieldName); } public override string GetValue(IEditorValueAdapter api, EventArguments args) { ItemTemplate o = Item.GetValue(api, args); if (o != null) { return GameFields.GetValue(o, typeof(ItemTemplate), FieldName); } return null; } } [DescAttribute("物品模板字段(int)", "字段 - 物品模板")] public class ItemTemplateFieldIntegerValue : IntegerValue { [ObjectMemberNameAttribute(typeof(ItemTemplate), typeof(int))] [DescAttribute("字段名")] public string FieldName = ""; [DescAttribute("物品")] public ItemTemplateValue Item = new ItemTemplateValue.Template(); public override string ToString() { return string.Format("({0}).{1}", Item, FieldName); } public override int GetValue(IEditorValueAdapter api, EventArguments args) { ItemTemplate o = Item.GetValue(api, args); if (o != null) { return GameFields.GetValue(o, typeof(ItemTemplate), FieldName); } return 0; } } [DescAttribute("物品模板字段(float)", "字段 - 物品模板")] public class ItemTemplateFieldRealValue : RealValue { [ObjectMemberNameAttribute(typeof(ItemTemplate), typeof(float))] [DescAttribute("字段名")] public string FieldName = ""; [DescAttribute("物品")] public ItemTemplateValue Item = new ItemTemplateValue.Template(); public override string ToString() { return string.Format("({0}).{1}", Item, FieldName); } public override float GetValue(IEditorValueAdapter api, EventArguments args) { ItemTemplate o = Item.GetValue(api, args); if (o != null) { return GameFields.GetValue(o, typeof(ItemTemplate), FieldName); } return 0; } } [DescAttribute("物品模板字段(bool)", "字段 - 物品模板")] public class ItemTemplateFieldBoolValue : BooleanValue { [ObjectMemberNameAttribute(typeof(ItemTemplate), typeof(bool))] [DescAttribute("字段名")] public string FieldName = ""; [DescAttribute("物品")] public ItemTemplateValue Item = new ItemTemplateValue.Template(); public override string ToString() { return string.Format("({0}).{1}", Item, FieldName); } public override bool GetValue(IEditorValueAdapter api, EventArguments args) { ItemTemplate o = Item.GetValue(api, args); if (o != null) { return GameFields.GetValue(o, typeof(ItemTemplate), FieldName); } return false; } } #endregion //----------------------------------------------------------------------------------------- #region __技能模板__ [DescAttribute("技能模板字段(string)", "字段 - 技能模板")] public class SkillTemplateFieldStringValue : StringValue { [ObjectMemberNameAttribute(typeof(SkillTemplate), typeof(string))] [DescAttribute("字段名")] public string FieldName = ""; [DescAttribute("技能")] public SkillTemplateValue Skill = new SkillTemplateValue.Template(); public override string ToString() { return string.Format("({0}).{1}", Skill, FieldName); } public override string GetValue(IEditorValueAdapter api, EventArguments args) { SkillTemplate o = Skill.GetValue(api, args); if (o != null) { return GameFields.GetValue(o, typeof(SkillTemplate), FieldName); } return null; } } [DescAttribute("技能模板字段(int)", "字段 - 技能模板")] public class SkillTemplateFieldIntegerValue : IntegerValue { [ObjectMemberNameAttribute(typeof(SkillTemplate), typeof(int))] [DescAttribute("字段名")] public string FieldName = ""; [DescAttribute("技能")] public SkillTemplateValue Skill = new SkillTemplateValue.Template(); public override string ToString() { return string.Format("({0}).{1}", Skill, FieldName); } public override int GetValue(IEditorValueAdapter api, EventArguments args) { SkillTemplate o = Skill.GetValue(api, args); if (o != null) { return GameFields.GetValue(o, typeof(SkillTemplate), FieldName); } return 0; } } [DescAttribute("技能模板字段(float)", "字段 - 技能模板")] public class SkillTemplateFieldRealValue : RealValue { [ObjectMemberNameAttribute(typeof(SkillTemplate), typeof(float))] [DescAttribute("字段名")] public string FieldName = ""; [DescAttribute("技能")] public SkillTemplateValue Skill = new SkillTemplateValue.Template(); public override string ToString() { return string.Format("({0}).{1}", Skill, FieldName); } public override float GetValue(IEditorValueAdapter api, EventArguments args) { SkillTemplate o = Skill.GetValue(api, args); if (o != null) { return GameFields.GetValue(o, typeof(SkillTemplate), FieldName); } return 0; } } [DescAttribute("技能模板字段(bool)", "字段 - 技能模板")] public class SkillTemplateFieldBoolValue : BooleanValue { [ObjectMemberNameAttribute(typeof(SkillTemplate), typeof(bool))] [DescAttribute("字段名")] public string FieldName = ""; [DescAttribute("技能")] public SkillTemplateValue Skill = new SkillTemplateValue.Template(); public override string ToString() { return string.Format("({0}).{1}", Skill, FieldName); } public override bool GetValue(IEditorValueAdapter api, EventArguments args) { SkillTemplate o = Skill.GetValue(api, args); if (o != null) { return GameFields.GetValue(o, typeof(SkillTemplate), FieldName); } return false; } } #endregion //----------------------------------------------------------------------------------------- #region __法术模板__ [DescAttribute("法术模板字段(string)", "字段 - 法术模板")] public class SpellTemplateFieldStringValue : StringValue { [ObjectMemberNameAttribute(typeof(SpellTemplate), typeof(string))] [DescAttribute("字段名")] public string FieldName = ""; [DescAttribute("法术")] public SpellTemplateValue Spell = new SpellTemplateValue.Template(); public override string ToString() { return string.Format("({0}).{1}", Spell, FieldName); } public override string GetValue(IEditorValueAdapter api, EventArguments args) { SpellTemplate o = Spell.GetValue(api, args); if (o != null) { return GameFields.GetValue(o, typeof(SpellTemplate), FieldName); } return null; } } [DescAttribute("法术模板字段(int)", "字段 - 法术模板")] public class SpellTemplateFieldIntegerValue : IntegerValue { [ObjectMemberNameAttribute(typeof(SpellTemplate), typeof(int))] [DescAttribute("字段名")] public string FieldName = ""; [DescAttribute("法术")] public SpellTemplateValue Spell = new SpellTemplateValue.Template(); public override string ToString() { return string.Format("({0}).{1}", Spell, FieldName); } public override int GetValue(IEditorValueAdapter api, EventArguments args) { SpellTemplate o = Spell.GetValue(api, args); if (o != null) { return GameFields.GetValue(o, typeof(SpellTemplate), FieldName); } return 0; } } [DescAttribute("法术模板字段(float)", "字段 - 法术模板")] public class SpellTemplateFieldRealValue : RealValue { [ObjectMemberNameAttribute(typeof(SpellTemplate), typeof(float))] [DescAttribute("字段名")] public string FieldName = ""; [DescAttribute("法术")] public SpellTemplateValue Spell = new SpellTemplateValue.Template(); public override string ToString() { return string.Format("({0}).{1}", Spell, FieldName); } public override float GetValue(IEditorValueAdapter api, EventArguments args) { SpellTemplate o = Spell.GetValue(api, args); if (o != null) { return GameFields.GetValue(o, typeof(SpellTemplate), FieldName); } return 0; } } [DescAttribute("法术模板字段(bool)", "字段 - 法术模板")] public class SpellTemplateFieldBoolValue : BooleanValue { [ObjectMemberNameAttribute(typeof(SpellTemplate), typeof(bool))] [DescAttribute("字段名")] public string FieldName = ""; [DescAttribute("法术")] public SpellTemplateValue Spell = new SpellTemplateValue.Template(); public override string ToString() { return string.Format("({0}).{1}", Spell, FieldName); } public override bool GetValue(IEditorValueAdapter api, EventArguments args) { SpellTemplate o = Spell.GetValue(api, args); if (o != null) { return GameFields.GetValue(o, typeof(SpellTemplate), FieldName); } return false; } } #endregion //----------------------------------------------------------------------------------------- #region __BUFF模板__ [DescAttribute("BUFF模板字段(string)", "字段 - BUFF模板")] public class BuffTemplateFieldStringValue : StringValue { [ObjectMemberNameAttribute(typeof(BuffTemplate), typeof(string))] [DescAttribute("字段名")] public string FieldName = ""; [DescAttribute("BUFF")] public BuffTemplateValue Buff = new BuffTemplateValue.Template(); public override string ToString() { return string.Format("({0}).{1}", Buff, FieldName); } public override string GetValue(IEditorValueAdapter api, EventArguments args) { BuffTemplate o = Buff.GetValue(api, args); if (o != null) { return GameFields.GetValue(o, typeof(BuffTemplate), FieldName); } return null; } } [DescAttribute("BUFF模板字段(int)", "字段 - BUFF模板")] public class BuffTemplateFieldIntegerValue : IntegerValue { [ObjectMemberNameAttribute(typeof(BuffTemplate), typeof(int))] [DescAttribute("字段名")] public string FieldName = ""; [DescAttribute("BUFF")] public BuffTemplateValue Buff = new BuffTemplateValue.Template(); public override string ToString() { return string.Format("({0}).{1}", Buff, FieldName); } public override int GetValue(IEditorValueAdapter api, EventArguments args) { BuffTemplate o = Buff.GetValue(api, args); if (o != null) { return GameFields.GetValue(o, typeof(BuffTemplate), FieldName); } return 0; } } [DescAttribute("BUFF模板字段(float)", "字段 - BUFF模板")] public class BuffTemplateFieldRealValue : RealValue { [ObjectMemberNameAttribute(typeof(BuffTemplate), typeof(float))] [DescAttribute("字段名")] public string FieldName = ""; [DescAttribute("BUFF")] public BuffTemplateValue Buff = new BuffTemplateValue.Template(); public override string ToString() { return string.Format("({0}).{1}", Buff, FieldName); } public override float GetValue(IEditorValueAdapter api, EventArguments args) { BuffTemplate o = Buff.GetValue(api, args); if (o != null) { return GameFields.GetValue(o, typeof(BuffTemplate), FieldName); } return 0; } } [DescAttribute("BUFF模板字段(bool)", "字段 - BUFF模板")] public class BuffTemplateFieldBoolValue : BooleanValue { [ObjectMemberNameAttribute(typeof(BuffTemplate), typeof(bool))] [DescAttribute("字段名")] public string FieldName = ""; [DescAttribute("BUFF")] public BuffTemplateValue Buff = new BuffTemplateValue.Template(); public override string ToString() { return string.Format("({0}).{1}", Buff, FieldName); } public override bool GetValue(IEditorValueAdapter api, EventArguments args) { BuffTemplate o = Buff.GetValue(api, args); if (o != null) { return GameFields.GetValue(o, typeof(BuffTemplate), FieldName); } return false; } } #endregion //----------------------------------------------------------------------------------------- }