Beispiel #1
0
        // Creates formatting tokens for skill popups
        TextFile.Token[] CreateSkillTokens(DFCareer.Skills skill)
        {
            List <TextFile.Token> tokens = new List <TextFile.Token>();

            TextFile.Token skillNameToken = new TextFile.Token();
            skillNameToken.text       = DaggerfallUnity.Instance.TextProvider.GetSkillName(skill);
            skillNameToken.formatting = TextFile.Formatting.Text;

            TextFile.Token skillValueToken = new TextFile.Token();
            skillValueToken.text       = string.Format("{0}%", playerEntity.Skills.GetSkillValue(skill));
            skillValueToken.formatting = TextFile.Formatting.Text;

            DFCareer.Stats primaryStat           = DaggerfallSkills.GetPrimaryStat(skill);
            TextFile.Token skillPrimaryStatToken = new TextFile.Token();
            skillPrimaryStatToken.text       = DaggerfallUnity.Instance.TextProvider.GetAbbreviatedStatName(primaryStat);
            skillPrimaryStatToken.formatting = TextFile.Formatting.Text;

            TextFile.Token spacesToken = new TextFile.Token();
            spacesToken.formatting = TextFile.Formatting.Text;
            spacesToken.text       = "  ";

            TextFile.Token tabToken = new TextFile.Token();
            tabToken.formatting = TextFile.Formatting.PositionPrefix;

            // Add tokens in order
            tokens.Add(skillNameToken);
            tokens.Add(tabToken);
            tokens.Add(tabToken);
            tokens.Add(skillValueToken);
            tokens.Add(spacesToken);
            tokens.Add(skillPrimaryStatToken);

            return(tokens.ToArray());
        }
        // Adds button for attribute popup text
        // NOTE: This has only partial functionality until %vars and all formatting tokens are supported
        void AddAttributePopupButton(DFCareer.Stats stat, Rect rect)
        {
            Button button = DaggerfallUI.AddButton(rect, NativePanel);

            button.Tag           = DaggerfallUnity.TextProvider.GetStatDescriptionTextID(stat);
            button.OnMouseClick += StatButton_OnMouseClick;
        }
Beispiel #3
0
        public void Blessing(PlayerEntity playerEntity, int donationAmount)
        {
            int boost = FormulaHelper.CalculateTempleBlessing(donationAmount, GetReputation(playerEntity));

            if (boost > 0)
            {
                DFCareer.Stats stat = BlessingStat();
                if (stat != NoStat)
                {
                    // Apply stat blessing
                    // TODO - wait for stat effects with timeouts to be implemented and use them
                    Debug.Log("Blessing: boost stat " + stat);
                }
                else
                {
                    if (deity == Divines.Stendarr)
                    {
                        Debug.Log("Blessing: boost legal rep");
                    }
                    else if (deity == Divines.Zenithar)
                    {
                        Debug.Log("Blessing: boost mercantile skill");
                    }
                }
                DaggerfallUI.MessageBox(templeData[deity].blessingMsgId);
            }
        }
        /// <summary>
        /// Gets permanent stat value by enum, does not include effect mods.
        /// </summary>
        /// <param name="stat">Stat to get.</param>
        /// <returns>Stat value.</returns>
        public int GetPermanentStatValue(DFCareer.Stats stat)
        {
            switch (stat)
            {
            case DFCareer.Stats.Strength:
                return(Strength);

            case DFCareer.Stats.Intelligence:
                return(Intelligence);

            case DFCareer.Stats.Willpower:
                return(Willpower);

            case DFCareer.Stats.Agility:
                return(Agility);

            case DFCareer.Stats.Endurance:
                return(Endurance);

            case DFCareer.Stats.Personality:
                return(Personality);

            case DFCareer.Stats.Speed:
                return(Speed);

            case DFCareer.Stats.Luck:
                return(Luck);

            default:
                return(0);
            }
        }
        public string GetStatName(DFCareer.Stats stat)
        {
            switch (stat)
            {
            case DFCareer.Stats.Strength:
                return(TextManager.Instance.GetLocalizedText("strength"));

            case DFCareer.Stats.Intelligence:
                return(TextManager.Instance.GetLocalizedText("intelligence"));

            case DFCareer.Stats.Willpower:
                return(TextManager.Instance.GetLocalizedText("willpower"));

            case DFCareer.Stats.Agility:
                return(TextManager.Instance.GetLocalizedText("agility"));

            case DFCareer.Stats.Endurance:
                return(TextManager.Instance.GetLocalizedText("endurance"));

            case DFCareer.Stats.Personality:
                return(TextManager.Instance.GetLocalizedText("personality"));

            case DFCareer.Stats.Speed:
                return(TextManager.Instance.GetLocalizedText("speed"));

            case DFCareer.Stats.Luck:
                return(TextManager.Instance.GetLocalizedText("luck"));

            default:
                return(string.Empty);
            }
        }
Beispiel #6
0
        public int GetStatDescriptionTextID(DFCareer.Stats stat)
        {
            switch (stat)
            {
            case DFCareer.Stats.Strength:
                return(0);

            case DFCareer.Stats.Intelligence:
                return(1);

            case DFCareer.Stats.Willpower:
                return(2);

            case DFCareer.Stats.Agility:
                return(3);

            case DFCareer.Stats.Endurance:
                return(4);

            case DFCareer.Stats.Personality:
                return(5);

            case DFCareer.Stats.Speed:
                return(6);

            case DFCareer.Stats.Luck:
                return(7);

            default:
                return(-1);
            }
        }
Beispiel #7
0
        public string GetAbbreviatedStatName(DFCareer.Stats stat)
        {
            switch (stat)
            {
            case DFCareer.Stats.Strength:
                return("STR");

            case DFCareer.Stats.Intelligence:
                return("INT");

            case DFCareer.Stats.Willpower:
                return("WIL");

            case DFCareer.Stats.Agility:
                return("AGI");

            case DFCareer.Stats.Endurance:
                return("END");

            case DFCareer.Stats.Personality:
                return("PER");

            case DFCareer.Stats.Speed:
                return("SPD");

            case DFCareer.Stats.Luck:
                return("LUC");

            default:
                return(string.Empty);
            }
        }
Beispiel #8
0
        public string GetStatName(DFCareer.Stats stat)
        {
            switch (stat)
            {
            case DFCareer.Stats.Strength:
                return("Strength");

            case DFCareer.Stats.Intelligence:
                return("Intelligence");

            case DFCareer.Stats.Willpower:
                return("Willpower");

            case DFCareer.Stats.Agility:
                return("Agility");

            case DFCareer.Stats.Endurance:
                return("Endurance");

            case DFCareer.Stats.Personality:
                return("Personality");

            case DFCareer.Stats.Speed:
                return("Speed");

            case DFCareer.Stats.Luck:
                return("Luck");

            default:
                return(string.Empty);
            }
        }
Beispiel #9
0
        protected void SetStatMod(DFCareer.Stats stat, int value)
        {
            if (stat == DFCareer.Stats.None)
            {
                return;
            }

            statMods[(int)stat] = value;
        }
        /// <summary>
        /// Gets the attribute modifier of this effect.
        /// </summary>
        /// <param name="stat">Attribute to query.</param>
        /// <returns>Current attribute modifier.</returns>
        public int GetAttributeMod(DFCareer.Stats stat)
        {
            if (stat == DFCareer.Stats.None)
            {
                return(0);
            }

            return(statMods[(int)stat]);
        }
Beispiel #11
0
        protected void ChangeStatMod(DFCareer.Stats stat, int amount)
        {
            if (stat == DFCareer.Stats.None)
            {
                return;
            }

            statMods[(int)stat] += amount;
        }
Beispiel #12
0
        /// <summary>
        /// Gets live stat value by enum, including effect mods.
        /// </summary>
        /// <param name="stat">Stat to get.</param>
        /// <returns>Stat value.</returns>
        public int GetLiveStatValue(DFCareer.Stats stat)
        {
            int mod   = mods[(int)stat];
            int value = GetPermanentStatValue(stat) + mod;

            // TODO: Any other clamping or processing

            return((short)value);
        }
        // Creates formatting tokens for skill popups
        TextFile.Token[] CreateSkillTokens(DFCareer.Skills skill, bool twoColumn = false, int startPosition = 0)
        {
            bool highlight = playerEntity.GetSkillRecentlyIncreased(skill);

            List <TextFile.Token> tokens = new List <TextFile.Token>();

            TextFile.Formatting formatting = highlight ? TextFile.Formatting.TextHighlight : TextFile.Formatting.Text;

            TextFile.Token skillNameToken = new TextFile.Token();
            skillNameToken.formatting = formatting;
            skillNameToken.text       = DaggerfallUnity.Instance.TextProvider.GetSkillName(skill);

            TextFile.Token skillValueToken = new TextFile.Token();
            skillValueToken.formatting = formatting;
            skillValueToken.text       = string.Format("{0}%", playerEntity.Skills.GetLiveSkillValue(skill));

            DFCareer.Stats primaryStat           = DaggerfallSkills.GetPrimaryStat(skill);
            TextFile.Token skillPrimaryStatToken = new TextFile.Token();
            skillPrimaryStatToken.formatting = formatting;
            skillPrimaryStatToken.text       = DaggerfallUnity.Instance.TextProvider.GetAbbreviatedStatName(primaryStat);

            TextFile.Token positioningToken = new TextFile.Token();
            positioningToken.formatting = TextFile.Formatting.PositionPrefix;

            TextFile.Token tabToken = new TextFile.Token();
            tabToken.formatting = TextFile.Formatting.PositionPrefix;

            // Add tokens in order
            if (!twoColumn)
            {
                tokens.Add(skillNameToken);
                tokens.Add(tabToken);
                tokens.Add(tabToken);
                tokens.Add(tabToken);
                tokens.Add(skillValueToken);
                tokens.Add(tabToken);
                tokens.Add(skillPrimaryStatToken);
            }
            else // miscellaneous skills
            {
                if (startPosition != 0) // if this is the second column
                {
                    positioningToken.x = startPosition;
                    tokens.Add(positioningToken);
                }
                tokens.Add(skillNameToken);
                positioningToken.x = startPosition + 85;
                tokens.Add(positioningToken);
                tokens.Add(skillValueToken);
                positioningToken.x = startPosition + 112;
                tokens.Add(positioningToken);
                tokens.Add(skillPrimaryStatToken);
            }

            return(tokens.ToArray());
        }
        /// <summary>
        /// Gets live stat value by enum, including effect mods.
        /// </summary>
        /// <param name="stat">Stat to get.</param>
        /// <returns>Stat value.</returns>
        public int GetLiveStatValue(DFCareer.Stats stat)
        {
            int mod   = mods[(int)stat];
            int value = GetPermanentStatValue(stat) + mod;

            // Clamp live stat to 1-100
            value = Mathf.Clamp(value, 1, 100);

            return((short)value);
        }
        /// <summary>
        /// Gets live stat value by enum, including effect mods.
        /// </summary>
        /// <param name="stat">Stat to get.</param>
        /// <returns>Stat value.</returns>
        public int GetLiveStatValue(DFCareer.Stats stat)
        {
            int mod   = mods[(int)stat];
            int value = GetPermanentStatValue(stat) + mod;

            // Clamp live stat to 1-MaxStatValue
            value = Mathf.Clamp(value, 1, FormulaHelper.MaxStatValue());

            return((short)value);
        }
        /// <summary>
        /// Gets live stat value by enum, including effect mods.
        /// </summary>
        /// <param name="stat">Stat to get.</param>
        /// <returns>Stat value.</returns>
        public int GetLiveStatValue(DFCareer.Stats stat)
        {
            int value    = GetPermanentStatValue(stat) + mods[(int)stat];
            int maxValue = FormulaHelper.MaxStatValue() + maxMods[(int)stat];

            // Clamp live stat to 0-maxValue (accounting for any max value mods)
            value = Mathf.Clamp(value, 0, maxValue);

            return((short)value);
        }
Beispiel #17
0
        public override void RestoreSaveData(object dataIn)
        {
            if (dataIn == null)
            {
                return;
            }

            SaveData_v1 data = (SaveData_v1)dataIn;

            fortifyStat = data.fortifyStat;
        }
        public override void RestoreSaveData(object dataIn)
        {
            if (dataIn == null)
            {
                return;
            }

            SaveData_v1 data = (SaveData_v1)dataIn;

            attribute         = data.attribute;
            minAttributeValue = data.minAttributeValue;
        }
        public override void RestoreSaveData(object dataIn)
        {
            SaveData_v1 data = (SaveData_v1)dataIn;

            if (dataIn == null)
            {
                return;
            }

            fortifyStat           = data.fortifyStat;
            casterStatMods        = data.casterStatMods;
            forcedRoundsRemaining = data.forcedRoundsRemaining;
        }
Beispiel #20
0
        public override void RestoreSaveData(object dataIn)
        {
            if (dataIn == null)
            {
                return;
            }

            SaveData_v1 data = (SaveData_v1)dataIn;

            magnitude             = data.magnitude;
            drainStat             = data.drainStat;
            forcedRoundsRemaining = data.forcedRoundsRemaining;
        }
Beispiel #21
0
        public override void HealAttributeDamage(DFCareer.Stats stat, int amount)
        {
            // Can only heal incumbent matching drain
            if (!IsIncumbent || stat != drainStat)
            {
                return;
            }

            // Heal attribute
            base.HealAttributeDamage(stat, amount);

            // Reduce magnitude and cancel effect once reduced to 0
            if (DecreaseMagnitude((int)amount) == 0)
            {
                forcedRoundsRemaining = 0;
            }
        }
        /// <summary>
        /// Heal attribute damage by amount.
        /// Does nothing if this effect does not damage attributes.
        /// Attribute will not heal past 0.
        /// </summary>
        /// <param name="stat">Attribute to heal.</param>
        /// <param name="amount">Amount to heal. Must be positive value.</param>
        public virtual void HealAttributeDamage(DFCareer.Stats stat, int amount)
        {
            if (amount < 0)
            {
                Debug.LogWarning("EntityEffect.HealAttributeDamage() received a negative value for amount - ignoring.");
                return;
            }

            int result = GetAttributeMod(stat) + amount;

            if (result > 0)
            {
                result = 0;
            }

            SetStatMod(stat, result);
            Debug.LogFormat("Healed {0}'s {1} by {2} points", GetPeeredEntityBehaviour(manager).name, stat.ToString(), amount);
        }
        public TextFile.Token[] GetSkillSummary(DFCareer.Skills skill, int startPosition)
        {
            PlayerEntity playerEntity = GameManager.Instance.PlayerEntity;
            bool         highlight    = playerEntity.GetSkillRecentlyIncreased(skill);

            List <TextFile.Token> tokens = new List <TextFile.Token>();

            TextFile.Formatting formatting = highlight ? TextFile.Formatting.TextHighlight : TextFile.Formatting.Text;

            TextFile.Token skillNameToken = new TextFile.Token();
            skillNameToken.formatting = formatting;
            skillNameToken.text       = DaggerfallUnity.Instance.TextProvider.GetSkillName(skill);

            TextFile.Token skillValueToken = new TextFile.Token();
            skillValueToken.formatting = formatting;
            skillValueToken.text       = string.Format("{0}%", playerEntity.Skills.GetLiveSkillValue(skill));

            DFCareer.Stats primaryStat           = DaggerfallSkills.GetPrimaryStat(skill);
            TextFile.Token skillPrimaryStatToken = new TextFile.Token();
            skillPrimaryStatToken.formatting = formatting;
            skillPrimaryStatToken.text       = DaggerfallUnity.Instance.TextProvider.GetAbbreviatedStatName(primaryStat);

            TextFile.Token positioningToken = new TextFile.Token();
            positioningToken.formatting = TextFile.Formatting.PositionPrefix;

            TextFile.Token tabToken = new TextFile.Token();
            tabToken.formatting = TextFile.Formatting.PositionPrefix;

            if (startPosition != 0) // if this is the second column
            {
                positioningToken.x = startPosition;
                tokens.Add(positioningToken);
            }
            tokens.Add(skillNameToken);
            positioningToken.x = startPosition + 85;
            tokens.Add(positioningToken);
            tokens.Add(skillValueToken);
            positioningToken.x = startPosition + 112;
            tokens.Add(positioningToken);
            tokens.Add(skillPrimaryStatToken);

            return(tokens.ToArray());
        }
        /// <summary>
        /// Searches all effects in all bundles to find DrainEffect incumbent for a specific stat.
        /// </summary>
        /// <param name="drainStat">The stat being drained.</param>
        /// <returns>DrainEffect incumbent for drainStat, or null if not found.</returns>
        public DrainEffect FindDrainStatIncumbent(DFCareer.Stats drainStat)
        {
            foreach (InstancedBundle bundle in instancedBundles)
            {
                foreach (IEntityEffect effect in bundle.liveEffects)
                {
                    if (effect is DrainEffect)
                    {
                        DrainEffect drainEffect = effect as DrainEffect;
                        if (drainEffect.IsIncumbent && drainEffect.DrainStat == drainStat)
                        {
                            return(drainEffect);
                        }
                    }
                }
            }

            return(null);
        }
        /// <summary>
        /// Sets permanent stat value by enum, does not change effect mods.
        /// </summary>
        /// <param name="stat">Stat to set.</param>
        /// <param name="value">Stat value.</param>
        public void SetPermanentStatValue(DFCareer.Stats stat, int value)
        {
            switch (stat)
            {
            case DFCareer.Stats.Strength:
                Strength = value;
                break;

            case DFCareer.Stats.Intelligence:
                Intelligence = value;
                break;

            case DFCareer.Stats.Willpower:
                Willpower = value;
                break;

            case DFCareer.Stats.Agility:
                Agility = value;
                break;

            case DFCareer.Stats.Endurance:
                Endurance = value;
                break;

            case DFCareer.Stats.Personality:
                Personality = value;
                break;

            case DFCareer.Stats.Speed:
                Speed = value;
                break;

            case DFCareer.Stats.Luck:
                Luck = value;
                break;
            }
        }
 public override string End()
 {
     lastStat      = DFCareer.Stats.Endurance;
     lastStatValue = parent.LiveEndurance;
     return(lastStatValue.ToString());
 }
 public override string Agi()
 {
     lastStat      = DFCareer.Stats.Agility;
     lastStatValue = parent.LiveAgility;
     return(lastStatValue.ToString());
 }
 public override string Wil()
 {
     lastStat      = DFCareer.Stats.Willpower;
     lastStatValue = parent.LiveWillpower;
     return(lastStatValue.ToString());
 }
 public override string Int()
 {
     lastStat      = DFCareer.Stats.Intelligence;
     lastStatValue = parent.LiveIntelligence;
     return(lastStatValue.ToString());
 }
 public override string Str()
 {
     lastStat      = DFCareer.Stats.Strength;
     lastStatValue = parent.LiveStrength;
     return(lastStatValue.ToString());
 }