Exemplo n.º 1
0
        /// <summary>
        /// Outputs spells available to this item effect abstracted as EnchantmentSettings array.
        /// When EnchantmentSettings.ClassicParam is set, it refers to a classic spell ID.
        /// When EnchantmentSettings.CustomParam is set, it refers to a custom spell bundle.
        /// </summary>
        public override EnchantmentSettings[] GetEnchantmentSettings()
        {
            List <EnchantmentSettings> enchantments = new List <EnchantmentSettings>();

            // Enumerate classic spells
            SpellRecord.SpellRecordData spellRecord;
            for (int i = 0; i < classicSpellIDs.Length; i++)
            {
                short id = classicSpellIDs[i];
                if (!GameManager.Instance.EntityEffectBroker.GetClassicSpellRecord(id, out spellRecord))
                {
                    throw new Exception(string.Format("Could not find classic spell record with ID '{0}'", id));
                }

                EnchantmentSettings enchantment = new EnchantmentSettings()
                {
                    Version              = 1,
                    EffectKey            = EffectKey,
                    ClassicType          = EnchantmentTypes.CastWhenUsed,
                    ClassicParam         = id,
                    PrimaryDisplayName   = properties.GroupName,
                    SecondaryDisplayName = spellRecord.spellName,
                    EnchantCost          = classicSpellCosts[i],
                };

                enchantments.Add(enchantment);
            }

            // TODO: Enumerate custom spell bundles supporting EnchantmentUsage.WhenUsed flag

            // TODO: Support ordering of list

            return(enchantments.ToArray());
        }
Exemplo n.º 2
0
        /// <summary>
        /// Outputs all variant settings for this enchantment.
        /// </summary>
        public override EnchantmentSettings[] GetEnchantmentSettings()
        {
            List <EnchantmentSettings> enchantments = new List <EnchantmentSettings>();

            // Enumerate classic params
            for (int i = 0; i < classicParams.Length; i++)
            {
                short id = classicParams[i];

                EnchantmentSettings enchantment = new EnchantmentSettings()
                {
                    Version              = 1,
                    EffectKey            = EffectKey,
                    ClassicType          = EnchantmentTypes.ExtraSpellPts,
                    ClassicParam         = id,
                    PrimaryDisplayName   = properties.GroupName,
                    SecondaryDisplayName = TextManager.Instance.GetText(textDatabase, classicTextKeys[i]),
                    EnchantCost          = classicParamCosts[i],
                };

                enchantments.Add(enchantment);
            }

            return(enchantments.ToArray());
        }
Exemplo n.º 3
0
        void SortForcedEnchantments(EnchantmentSettings parentEnchantment, ForcedEnchantmentSet set, out EnchantmentSettings[] forcedPowersOut, out EnchantmentSettings[] forcedSideEffectsOut)
        {
            List <EnchantmentSettings> forcedPowers      = new List <EnchantmentSettings>();
            List <EnchantmentSettings> forcedSideEffects = new List <EnchantmentSettings>();

            foreach (ForcedEnchantment forcedEnchantment in set.forcedEffects)
            {
                IEntityEffect effect = GameManager.Instance.EntityEffectBroker.GetEffectTemplate(forcedEnchantment.key);
                if (effect == null)
                {
                    continue;
                }

                EnchantmentSettings?enchantmentSettings = effect.GetEnchantmentSettings(forcedEnchantment.param);
                if (enchantmentSettings == null)
                {
                    continue;
                }

                EnchantmentSettings forcedSettings = enchantmentSettings.Value;
                forcedSettings.ParentEnchantment = parentEnchantment.GetHashCode();
                if (forcedSettings.EnchantCost > 0)
                {
                    forcedPowers.Add(forcedSettings);
                }
                else
                {
                    forcedSideEffects.Add(forcedSettings);
                }
            }

            forcedPowersOut      = forcedPowers.ToArray();
            forcedSideEffectsOut = forcedSideEffects.ToArray();
        }
        public void AddEnchantment(EnchantmentSettings enchantment)
        {
            EnchantmentPanel panel = new EnchantmentPanel(enchantment, new Rect(0, 0, GetRenderWidth(), InteriorHeight));

            enchantmentPanels.Add(panel);
            RefreshPanelLayout();
        }
Exemplo n.º 5
0
        public override EnchantmentSettings[] GetEnchantmentSettings()
        {
            List <EnchantmentSettings> enchantments = new List <EnchantmentSettings>();

            // Enumerate available soul traps in player inventory without showing duplicates
            EnumerateFilledTraps();
            for (int i = 0; i < enumeratedTraps.Length; i++)
            {
                if (enumeratedTraps[i] == 0)
                {
                    continue;
                }

                EnchantmentSettings enchantment = new EnchantmentSettings()
                {
                    Version              = 1,
                    EffectKey            = EffectKey,
                    ClassicType          = EnchantmentTypes.SoulBound,
                    ClassicParam         = (short)i,
                    PrimaryDisplayName   = properties.GroupName,
                    SecondaryDisplayName = EnemyBasics.Enemies[i].Name,
                    EnchantCost          = classicParamCosts[i],
                };

                enchantments.Add(enchantment);
            }

            return(enchantments.ToArray());
        }
Exemplo n.º 6
0
 bool ContainsEnchantmentSettings(EnchantmentSettings enchantment)
 {
     if (selectingPowers)
     {
         return(powersList.ContainsEnchantment(enchantment));
     }
     else
     {
         return(sideEffectsList.ContainsEnchantment(enchantment));
     }
 }
Exemplo n.º 7
0
        public bool ContainsEnchantment(EnchantmentSettings other)
        {
            foreach (EnchantmentPanel panel in enchantmentPanels)
            {
                if (panel.Enchantment == other)
                {
                    return(true);
                }
            }

            return(false);
        }
Exemplo n.º 8
0
        public void AddEnchantment(EnchantmentSettings enchantment)
        {
            EnchantmentPanel panel = new EnchantmentPanel(enchantment, new Rect(0, 0, GetRenderWidth(), InteriorHeight));

            if (enchantment.ParentEnchantment != 0)
            {
                panel.TextColor            = DaggerfallUI.DaggerfallForcedEnchantmentTextColor;
                panel.HighlightedTextColor = DaggerfallUI.DaggerfallForcedEnchantmentTextColor;
            }
            panel.OnMouseClick += EnchantmentPanel_OnMouseClick;
            enchantmentPanels.Add(panel);
            RefreshPanelLayout();
        }
Exemplo n.º 9
0
 void AddEnchantmentSettings(EnchantmentSettings enchantment)
 {
     if (selectingPowers)
     {
         itemPowers.Add(enchantment);
         powersList.AddEnchantment(enchantment);
     }
     else
     {
         itemSideEffects.Add(enchantment);
         sideEffectsList.AddEnchantment(enchantment);
     }
 }
Exemplo n.º 10
0
        public override EnchantmentSettings[] GetEnchantmentSettings()
        {
            EnchantmentSettings[] enchantments = new EnchantmentSettings[1];
            enchantments[0] = new EnchantmentSettings()
            {
                Version            = 1,
                EffectKey          = EffectKey,
                ClassicType        = EnchantmentTypes.StrengthensArmor,
                ClassicParam       = -1,
                PrimaryDisplayName = GroupName,
                EnchantCost        = enchantCost,
            };

            return(enchantments);
        }
Exemplo n.º 11
0
        public override EnchantmentSettings[] GetEnchantmentSettings()
        {
            EnchantmentSettings[] enchantments = new EnchantmentSettings[1];
            enchantments[0] = new EnchantmentSettings()
            {
                Version            = 1,
                EffectKey          = EffectKey,
                ClassicType        = EnchantmentTypes.ExtraWeight,
                ClassicParam       = -1,
                PrimaryDisplayName = properties.GroupName,
                EnchantCost        = enchantCost,
            };

            return(enchantments);
        }
            public EnchantmentPanel(EnchantmentSettings enchantment, Rect renderArea)
            {
                Size           = panelSizeWithoutScroller;
                primaryLabel   = DaggerfallUI.AddTextLabel(DaggerfallUI.SmallFont, Vector2.zero, enchantment.PrimaryDisplayName, this);
                secondaryLabel = DaggerfallUI.AddTextLabel(DaggerfallUI.SmallFont, secondaryLabelPos, secondarySpacing + enchantment.SecondaryDisplayName, this);
                primaryLabel.RestrictedRenderAreaCoordinateType = secondaryLabel.RestrictedRenderAreaCoordinateType = TextLabel.RestrictedRenderArea_CoordinateType.DaggerfallNativeCoordinates;
                primaryLabel.RectRestrictedRenderArea           = secondaryLabel.RectRestrictedRenderArea = renderArea;
                primaryLabel.TextColor = secondaryLabel.TextColor = textColor;

                OnMouseEnter += EnchantmentPanel_OnMouseEnter;
                OnMouseLeave += EnchantmentPanel_OnMouseLeave;

                RenderArea  = renderArea;
                Enchantment = enchantment;
            }
        /// <summary>
        /// Outputs spells available to this item effect abstracted as EnchantmentSettings array.
        /// When EnchantmentSettings.ClassicParam is set, it refers to a classic spell ID.
        /// When EnchantmentSettings.CustomParam is set, it refers to a custom spell bundle.
        /// </summary>
        public override EnchantmentSettings[] GetEnchantmentSettings()
        {
            List <EnchantmentSettings> enchantments = new List <EnchantmentSettings>();

            // Enumerate classic spells
            SpellRecord.SpellRecordData spellRecord;
            for (int i = 0; i < classicSpellIDs.Length; i++)
            {
                short id = classicSpellIDs[i];
                if (!GameManager.Instance.EntityEffectBroker.GetClassicSpellRecord(id, out spellRecord))
                {
                    throw new Exception(string.Format("Could not find classic spell record with ID '{0}'", id));
                }

                EnchantmentSettings enchantment = new EnchantmentSettings()
                {
                    Version              = 1,
                    EffectKey            = EffectKey,
                    ClassicType          = EnchantmentTypes.CastWhenUsed,
                    ClassicParam         = id,
                    PrimaryDisplayName   = GroupName,
                    SecondaryDisplayName = spellRecord.spellName,
                    EnchantCost          = classicSpellCosts[i],
                };

                enchantments.Add(enchantment);
            }

            // Enumerate custom spell bundle offers supporting CastWhenUsedEnchantment flag
            EntityEffectBroker.CustomSpellBundleOffer[] offers = GameManager.Instance.EntityEffectBroker.GetCustomSpellBundleOffers(EntityEffectBroker.CustomSpellBundleOfferUsage.CastWhenUsedEnchantment);
            foreach (EntityEffectBroker.CustomSpellBundleOffer offer in offers)
            {
                EnchantmentSettings enchantment = new EnchantmentSettings()
                {
                    Version              = 1,
                    EffectKey            = EffectKey,
                    CustomParam          = offer.Key,
                    PrimaryDisplayName   = GroupName,
                    SecondaryDisplayName = offer.BundleSetttings.Name,
                    EnchantCost          = offer.EnchantmentCost,
                };

                enchantments.Add(enchantment);
            }

            return(enchantments.ToArray());
        }
Exemplo n.º 14
0
        private void EnchantmentSecondaryPicker_OnUseSelectedItem()
        {
            // Get enchantment tagged to selected item
            ListBox.ListItem listItem = enchantmentSecondaryPicker.ListBox.SelectedValue;
            if (listItem.tag == null)
            {
                throw new Exception(string.Format("ListItem '{0}' has no EnchantmentSettings tag", listItem.textLabel.Text));
            }

            // Get enchantment settings
            EnchantmentSettings enchantmentSettings = (EnchantmentSettings)listItem.tag;
            IEntityEffect       enchantmentEffect   = GameManager.Instance.EntityEffectBroker.GetEffectTemplate(enchantmentSettings.EffectKey);
            EnchantmentParam    enchantmentParam    = new EnchantmentParam()
            {
                ClassicParam = enchantmentSettings.ClassicParam, CustomParam = enchantmentSettings.CustomParam
            };

            // Get forced enchantments for this effect
            EnchantmentSettings[] forcedPowers         = null;
            EnchantmentSettings[] forcedSideEffects    = null;
            ForcedEnchantmentSet? forcedEnchantmentSet = enchantmentEffect.GetForcedEnchantments(enchantmentParam);

            if (forcedEnchantmentSet != null)
            {
                // Sort forced enchantments into powers and side effects
                SortForcedEnchantments(enchantmentSettings, forcedEnchantmentSet.Value, out forcedPowers, out forcedSideEffects);

                // Check for overflow from automatic enchantments and display "no room in item..."
                // Also adding +1 to account for incoming enchantment
                if (powersList.EnchantmentCount + sideEffectsList.EnchantmentCount + forcedPowers.Length + forcedSideEffects.Length + 1 > 10)
                {
                    DaggerfallUI.MessageBox(TextManager.Instance.GetText(textDatabase, "noRoomInItem"));
                    return;
                }
            }

            // Add selected enchantment settings to powers/side-effects
            AddEnchantmentSettings(enchantmentSettings);
            AddForcedPowers(forcedPowers);
            AddForcedSideEffects(forcedSideEffects);

            // Close effect pickers
            enchantmentPrimaryPicker.CloseWindow();
            enchantmentSecondaryPicker.CloseWindow();
        }
Exemplo n.º 15
0
            public EnchantmentPanel(EnchantmentSettings enchantment, Rect renderArea)
            {
                bool hasSecondaryLabel = !string.IsNullOrEmpty(enchantment.SecondaryDisplayName);

                Size = new Vector2(panelWidthWithoutScroller, hasSecondaryLabel ? panelHeightWithSecondary : panelHeightWithoutSecondary);

                primaryLabel           = DaggerfallUI.AddTextLabel(DaggerfallUI.SmallFont, primaryLabelPos, enchantment.PrimaryDisplayName, this);
                secondaryLabel         = DaggerfallUI.AddTextLabel(DaggerfallUI.SmallFont, secondaryLabelPos, secondarySpacing + enchantment.SecondaryDisplayName, this);
                primaryLabel.TextColor = secondaryLabel.TextColor = textColor;

                if (!hasSecondaryLabel)
                {
                    secondaryLabel.Enabled = false;
                }

                OnMouseEnter += EnchantmentPanel_OnMouseEnter;
                OnMouseLeave += EnchantmentPanel_OnMouseLeave;

                RenderArea  = renderArea;
                Enchantment = enchantment;
            }
        /// <summary>
        /// Outputs all variant settings for this enchantment.
        /// </summary>
        public override EnchantmentSettings[] GetEnchantmentSettings()
        {
            List <EnchantmentSettings> enchantments = new List <EnchantmentSettings>();

            // Enumerate classic params
            for (int i = 0; i < classicParamCosts.Length; i++)
            {
                EnchantmentSettings enchantment = new EnchantmentSettings()
                {
                    Version              = 1,
                    EffectKey            = EffectKey,
                    ClassicType          = EnchantmentTypes.IncreasedWeightAllowance,
                    ClassicParam         = (short)i,
                    PrimaryDisplayName   = GroupName,
                    SecondaryDisplayName = TextManager.Instance.GetLocalizedText(classicTextKeys[i]),
                    EnchantCost          = classicParamCosts[i],
                };

                enchantments.Add(enchantment);
            }

            return(enchantments.ToArray());
        }
Exemplo n.º 17
0
        /// <summary>
        /// Outputs all variant settings for this enchantment.
        /// </summary>
        public override EnchantmentSettings[] GetEnchantmentSettings()
        {
            List <EnchantmentSettings> enchantments = new List <EnchantmentSettings>();

            // Enumerate classic params
            for (int i = 0; i < DaggerfallSkills.Count; i++)
            {
                DFCareer.Skills     skill       = (DFCareer.Skills)i;
                EnchantmentSettings enchantment = new EnchantmentSettings()
                {
                    Version              = 1,
                    EffectKey            = EffectKey,
                    ClassicType          = EnchantmentTypes.EnhancesSkill,
                    ClassicParam         = (short)i,
                    PrimaryDisplayName   = GroupName,
                    SecondaryDisplayName = DaggerfallUnity.Instance.TextProvider.GetSkillName(skill),
                    EnchantCost          = enchantCost,
                };

                enchantments.Add(enchantment);
            }

            return(enchantments.ToArray());
        }