/// <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); }
/// <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); }
/// <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); }
/// <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)); }
/// <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); }