Пример #1
0
    public Hero(Estate estate, SaveHeroData saveHeroData) : base(saveHeroData)
    {
        InitializeHeroInfo(saveHeroData.RosterId, saveHeroData.Name, saveHeroData.HeroClass,
                           saveHeroData.ResolveLevel, saveHeroData.StressLevel);

        Status            = saveHeroData.Status;
        InActivity        = saveHeroData.InActivity;
        MissingDuration   = saveHeroData.MissingDuration;
        Resolve.CurrentXP = saveHeroData.ResolveXP;

        if (!estate.PickRosterId(RosterId))
        {
            Debug.LogError("Missing id " + RosterId + " in estate from hero " + HeroName);
        }

        InitializeEquipment(estate.GetUpgradedWeaponLevel(RosterId, HeroClass.StringId),
                            estate.GetUpgradedArmorLevel(RosterId, HeroClass.StringId));

        if (saveHeroData.LeftTrinketId != "")
        {
            Trinket trinket = (Trinket)DarkestDungeonManager.Data.Items["trinket"][saveHeroData.LeftTrinketId];
            Equip(trinket, TrinketSlot.Left);
        }
        if (saveHeroData.RightTrinketId != "")
        {
            Trinket trinket = (Trinket)DarkestDungeonManager.Data.Items["trinket"][saveHeroData.RightTrinketId];
            Equip(trinket, TrinketSlot.Right);
        }

        foreach (var quirkEntry in saveHeroData.Quirks)
        {
            quirkData.Add(quirkEntry);
            ApplyQuirk(quirkEntry.Quirk);
        }

        CurrentCombatSkills  = new CombatSkill[7];
        SelectedCombatSkills = new List <CombatSkill>();

        for (int i = 0; i < 7; i++)
        {
            CurrentCombatSkills[i] = HeroClass.CombatSkillVariants.Find(skill => skill.Id == HeroClass.CombatSkills[i].Id &&
                                                                        skill.Level == estate.GetUpgradedSkillLevel(RosterId, HeroClass.StringId, HeroClass.CombatSkills[i].Id));
        }

        foreach (int skillIndex in saveHeroData.SelectedCombatSkillIndexes)
        {
            if (CurrentCombatSkills[skillIndex] != null)
            {
                SelectedCombatSkills.Add(CurrentCombatSkills[skillIndex]);
            }
        }

        CurrentCampingSkills  = new CampingSkill[HeroClass.CampingSkills.Count];
        SelectedCampingSkills = new List <CampingSkill>();

        for (int i = 0; i < CurrentCampingSkills.Length; i++)
        {
            if (estate.GetUpgradedCampingStatus(RosterId, HeroClass.CampingSkills[i].Id))
            {
                CurrentCampingSkills[i] = HeroClass.CampingSkills[i];
            }
        }

        foreach (int skillIndex in saveHeroData.SelectedCampingSkillIndexes)
        {
            if (CurrentCampingSkills[skillIndex] != null)
            {
                SelectedCampingSkills.Add(CurrentCampingSkills[skillIndex]);
            }
        }

        if (saveHeroData.Trait != "")
        {
            var heroTrait = DarkestDungeonManager.Data.Traits.Find(trait => trait.Id == saveHeroData.Trait);
            if (heroTrait != null)
            {
                ApplyTrait(heroTrait);
            }
        }

        GetPairedAttribute(AttributeType.HitPoints).CurrentValue = saveHeroData.CurrentHp;
    }