public void SetTraitLevel(TraitObject traitObject, int newLevel)
        {
            HeroAdminCharacterTrait result = Traits.FirstOrDefault(tr => tr.StringId.Equals(traitObject.StringId));

            if (null != result)
            {
                result.Level = newLevel;
            }
        }
        public int GetTraitLevel(TraitObject traitObject)
        {
            HeroAdminCharacterTrait trait = Traits.FirstOrDefault(tr => tr.StringId.Equals(traitObject.StringId));

            if (null != trait)
            {
                return(trait.Level);
            }

            return(0);
        }
        public void ToHero(Hero hero)
        {
            /// hero.HeroDeveloper.ClearHero();
            BodyProperties bodyProperties = BodyProperties.Default;

            hero.Level = this.Level;
            BodyProperties.FromString(this.BodyPropertiesString, out bodyProperties);
            HeroUtils.UpdateHeroCharacterBodyProperties(hero.CharacterObject, bodyProperties, this.IsFemale);
            HeroAdminCharacterAttribute attr;

            hero.ClearAttributes();
            for (int i = 0; i < 6; i++)
            {
                attr = this.Attributes.FirstOrDefault((obj) => obj.AttributeName == Enum.GetName(typeof(CharacterAttributesEnum), i));
                if (null != attr)
                {
                    hero.SetAttributeValue((CharacterAttributesEnum)i, attr.AttributeValue);
                    // hero.HeroDeveloper.AddAttribute((CharacterAttributesEnum)i, attr.AttributeValue, false);
                }
            }
            HeroAdminCharacterSkill adminCharacterSkill;

            hero.ClearSkills();
            foreach (SkillObject current in SkillObject.All)
            {
                adminCharacterSkill = Skills.FirstOrDefault((obj) => obj.StringId.Equals(current.StringId));
                if (null != adminCharacterSkill)
                {
                    // hero.SetSkillValue(current, adminCharacterSkill.SkillValue);
                    int xpRequiredForSkillLevel = Campaign.Current.Models.CharacterDevelopmentModel.GetXpRequiredForSkillLevel(adminCharacterSkill.SkillValue);
                    hero.HeroDeveloper.SetPropertyValue(current, (float)xpRequiredForSkillLevel);
                    hero.SetSkillValue(current, adminCharacterSkill.SkillValue);
                    ReflectUtils.ReflectMethodAndInvoke("SetFocus", hero.HeroDeveloper, new object[] { current, adminCharacterSkill.SkillFocus });
                    ///hero.HeroDeveloper.AddFocus(current, adminCharacterSkill.SkillFocus, false);
                }
            }
            hero.ClearPerks();
            foreach (PerkObject perk in PerkObject.All)
            {
                HeroAdminCharacterPerk result = this.Perks.FirstOrDefault(cp => cp.StringId.Equals(perk.StringId));
                if (null != result)
                {
                    // hero.SetPerkValue(current, true);
                    // 直接修改数据,因为上面方法会发送事件
                    CharacterPerks heroPerks = ReflectUtils.ReflectField <CharacterPerks>("_heroPerks", hero);
                    if (null != heroPerks)
                    {
                        heroPerks.SetPropertyValue(perk, result.Enable ? 1: 0);
                    }
                }
            }

            hero.ClearTraits();
            foreach (TraitObject trait in TraitObject.All)
            {
                HeroAdminCharacterTrait characterTrait = Traits.FirstOrDefault((obj) => obj.StringId.Equals(trait.StringId));
                if (null != characterTrait)
                {
                    hero.SetTraitLevel(trait, characterTrait.Level);
                }
            }
        }