Beispiel #1
0
        /// <summary>
        /// Generate EffectSettings from classic EffectRecordData.
        /// </summary>
        /// <param name="effectRecordData">Classic effect record data.</param>
        /// <returns>EffectSettings.</returns>
        public EffectSettings ClassicEffectRecordToEffectSettings(SpellRecord.EffectRecordData effectRecordData, bool supportDuration, bool supportChance, bool supportMagnitude)
        {
            EffectSettings effectSettings = BaseEntityEffect.DefaultEffectSettings();

            if (supportDuration)
            {
                effectSettings.DurationBase     = effectRecordData.durationBase;
                effectSettings.DurationPlus     = effectRecordData.durationMod;
                effectSettings.DurationPerLevel = effectRecordData.durationPerLevel;
            }

            if (supportChance)
            {
                effectSettings.ChanceBase     = effectRecordData.chanceBase;
                effectSettings.ChancePlus     = effectRecordData.chanceMod;
                effectSettings.ChancePerLevel = effectRecordData.chancePerLevel;
            }

            if (supportMagnitude)
            {
                effectSettings.MagnitudeBaseMin  = effectRecordData.magnitudeBaseLow;
                effectSettings.MagnitudeBaseMax  = effectRecordData.magnitudeBaseHigh;
                effectSettings.MagnitudePlusMin  = effectRecordData.magnitudeLevelBase;
                effectSettings.MagnitudePlusMax  = effectRecordData.magnitudeLevelHigh;
                effectSettings.MagnitudePerLevel = effectRecordData.magnitudePerLevel;
            }

            return(effectSettings);
        }
Beispiel #2
0
        /// <summary>
        /// Gets effect template from classic effect record data, if one is available.
        /// </summary>
        /// <param name="effectRecordData">Classic effect record data.</param>
        /// <returns>IEntityEffect of template found or null if no matching template found.</returns>
        public IEntityEffect GetEffectTemplateFromClassicEffectRecordData(SpellRecord.EffectRecordData effectRecordData)
        {
            // Ignore unused effect
            if (effectRecordData.type == -1)
            {
                return(null);
            }

            // Get effect type/subtype
            int type, subType;

            type    = effectRecordData.type;
            subType = (effectRecordData.subType < 0) ? 255 : effectRecordData.subType; // Entity effect keys use 255 instead of -1 for subtype

            // Check if effect template is implemented for this slot - instant fail if effect not implemented
            int classicKey = BaseEntityEffect.MakeClassicKey((byte)type, (byte)subType);

            // Attempt to find the effect template
            IEntityEffect result = GameManager.Instance.EntityEffectBroker.GetEffectTemplate(classicKey);

            if (result == null)
            {
                Debug.LogWarningFormat("Could not find effect template for type={0} subType={1}", type, subType);
            }

            return(result);
        }
Beispiel #3
0
        /// <summary>
        /// Checks if effect bundle contains an effect matching a classic effect record.
        /// </summary>
        /// <param name="effectRecord">Effect record to compare with native bundle effects.</param>
        /// <returns>True if bundle contains effect matching classic effect record.</returns>
        public bool HasMatchForClassicEffect(SpellRecord.EffectRecordData effectRecord)
        {
            int classicKey = BaseEntityEffect.MakeClassicKey((byte)effectRecord.type, (byte)effectRecord.subType);

            foreach (EffectEntry entry in settings.Effects)
            {
                IEntityEffect effectTemplate = GameManager.Instance.EntityEffectBroker.GetEffectTemplate(entry.Key);
                if (effectTemplate.Properties.ClassicKey == classicKey)
                {
                    return(true);
                }
            }

            return(false);
        }
Beispiel #4
0
        /// <summary>
        /// Gets effect template from classic effect record data, if one is available.
        /// </summary>
        /// <param name="effectRecordData">Classic effect record data.</param>
        /// <returns>IEntityEffect of template found or null if no matching template found.</returns>
        public IEntityEffect GetEffectTemplateFromClassicEffectRecordData(SpellRecord.EffectRecordData effectRecordData)
        {
            // Ignore unused effect
            if (effectRecordData.type == -1)
            {
                return(null);
            }

            // Get effect type/subtype
            int type, subType;

            type    = effectRecordData.type;
            subType = (effectRecordData.subType < 0) ? 255 : effectRecordData.subType; // Entity effect keys use 255 instead of -1 for subtype

            // Check if effect template is implemented for this slot - instant fail if effect not implemented
            int classicKey = BaseEntityEffect.MakeClassicKey((byte)type, (byte)subType);

            return(GameManager.Instance.EntityEffectBroker.GetEffectTemplate(classicKey));
        }
Beispiel #5
0
        /// <summary>
        /// Generate EffectEntry from classic EffectRecordData.
        /// </summary>
        /// <param name="effectRecordData">Classic effect record data.</param>
        /// <returns>EffectEntry.</returns>
        public bool ClassicEffectRecordToEffectEntry(SpellRecord.EffectRecordData effectRecordData, out EffectEntry effectEntryOut)
        {
            // Get template
            IEntityEffect effectTemplate = GetEffectTemplateFromClassicEffectRecordData(effectRecordData);

            if (effectTemplate == null)
            {
                effectEntryOut = new EffectEntry();
                return(false);
            }

            // Get settings and create entry
            EffectSettings effectSettings = ClassicEffectRecordToEffectSettings(
                effectRecordData,
                effectTemplate.Properties.SupportDuration,
                effectTemplate.Properties.SupportChance,
                effectTemplate.Properties.SupportMagnitude);

            effectEntryOut = new EffectEntry(effectTemplate.Key, effectSettings);

            return(true);
        }