public TrinitySpell(Unit caster, TrinitySpellInfo info, TriggerCastFlags triggerFlags, Guid originalCasterId, bool skipCheck = false)
    {
        SpellValue = new SpellValue(info);

        Caster    = caster;
        SpellInfo = info;

        CastId         = Guid.NewGuid();
        OriginalCastId = CastId;
        SkipCheck      = skipCheck;

        ExecutedCurrently          = false;
        ApplyMultiplierMask        = 0;
        DamageMultipliers          = new float[3];
        ReferencedFromCurrentSpell = false;

        SpellSchoolMask = SpellInfo.SchoolMask;

        if (originalCasterId != Guid.Empty)
        {
            OriginalCasterGuid = originalCasterId;
        }
        else
        {
            OriginalCasterGuid = caster.Character.Id;
        }

        if (OriginalCasterGuid == caster.Character.Id)
        {
            OriginalCaster = caster;
        }
        else
        {
            OriginalCaster = ArenaManager.ArenaUnits.Find(unit => unit.Character.Id == OriginalCasterGuid);
        }

        SpellState       = SpellState.NONE;
        TriggerCastFlags = triggerFlags;

        UnitTarget       = null;
        DestTarget       = null;
        Damage           = 0;
        Variance         = 0.0f;
        EffectHandleMode = SpellEffectHandleMode.LAUNCH;
        EffectInfo       = null;

        DiminishLevel = DiminishingLevels.LEVEL_1;
        DiminishGroup = DiminishingGroup.NONE;

        EffectDamage  = 0;
        EffectHealing = 0;
        SpellAura     = null;

        SpellVisual = SpellInfo.VisualId;
        CanReflect  = SpellInfo.DamageClass == SpellDamageClass.MAGIC && !SpellInfo.HasAttribute(SpellAttributes.CANT_BE_REFLECTED) &&
                      !SpellInfo.IsPassive() && !SpellInfo.IsPositive();

        UniqueTargets = new List <TargetInfo>();
        SpellEffects  = new List <TrinitySpellEffectInfo>(SpellInfo.SpellEffectInfos);
    }
Ejemplo n.º 2
0
        void ApplyDamageMultiplier(uint effIndex)
        {
            SpellValue spellValue = GetSpellValue();

            if ((spellValue.CustomBasePointsMask & (1 << 1)) != 0)
            {
                int   originalDamage = GetHitDamage();
                float targetIndex    = (float)spellValue.EffectBasePoints[1];
                float multiplier     = MathF.Pow(GetEffectInfo().CalcDamageMultiplier(GetCaster(), GetSpell()), targetIndex);
                SetHitDamage((int)(originalDamage * multiplier));
            }
        }