Example #1
0
            void FilterTargets(std::list<Unit*>& unitList)
            {
                if (!GetCaster()->ToPlayer()->GetGroup())
                {
                    unitList.clear();
                    unitList.push_back(GetCaster());
                }
                else
                {
                    unitList.remove(GetTargetUnit());
                    std::list<Unit*> tempTargets;
                    for (std::list<Unit*>::const_iterator itr = unitList.begin(); itr != unitList.end(); ++itr)
                        if ((*itr)->GetTypeId() == TYPEID_PLAYER && GetCaster()->IsInRaidWith(*itr))
                            tempTargets.push_back(*itr);

                    if (tempTargets.empty())
                    {
                        unitList.clear();
                        FinishCast(SPELL_FAILED_DONT_REPORT);
                        return;
                    }

                    Unit* target = SelectRandomContainerElement(tempTargets);
                    unitList.clear();
                    unitList.push_back(target);
                }
            }
Example #2
0
            void FilterTargets(std::list<WorldObject*>& targets)
            {
                if (!GetCaster()->ToPlayer()->GetGroup())
                {
                    targets.clear();
                    targets.push_back(GetCaster());
                }
                else
                {
                    targets.remove(GetExplTargetUnit());
                    std::list<Unit*> tempTargets;
                    for (std::list<WorldObject*>::const_iterator itr = targets.begin(); itr != targets.end(); ++itr)
                        if ((*itr)->GetTypeId() == TYPEID_PLAYER && GetCaster()->IsInRaidWith((*itr)->ToUnit()))
                            tempTargets.push_back((*itr)->ToUnit());

                    if (tempTargets.empty())
                    {
                        targets.clear();
                        FinishCast(SPELL_FAILED_DONT_REPORT);
                        return;
                    }

                    Unit* target = Trinity::Containers::SelectRandomContainerElement(tempTargets);
                    targets.clear();
                    targets.push_back(target);
                }
            }
Example #3
0
            void FilterTargets(std::list<Unit*>& unitList)
            {
                Unit* unit_to_add = NULL;
                for (std::list<Unit*>::iterator itr = unitList.begin() ; itr != unitList.end(); ++itr)
                {
                    if ((*itr)->GetTypeId() == TYPEID_UNIT
                        && (*itr)->GetOwnerGUID() == GetCaster()->GetGUID()
                        && (*itr)->ToCreature()->GetCreatureTemplate()->type == CREATURE_TYPE_UNDEAD)
                    {
                        unit_to_add = (*itr);
                        break;
                    }
                }

                unitList.clear();
                if (unit_to_add)
                    unitList.push_back(unit_to_add);
                else
                {
                    // Pet not found - remove cooldown
                    if (Player* modOwner = GetCaster()->GetSpellModOwner())
                        modOwner->RemoveSpellCooldown(GetSpellInfo()->Id, true);
                    FinishCast(SPELL_FAILED_NO_PET);
                }
            }
            void FilterTargets(std::list<WorldObject*>& targets)
            {
                targets.remove(GetExplTargetWorldObject());

                if (targets.empty())
                    FinishCast(SPELL_FAILED_NO_VALID_TARGETS);
            }
            void SelectTarget(std::list<WorldObject*>& targetList)
            {
                if (!GetCaster())
                    return;

                if (targetList.empty())
                {
                    FinishCast(SPELL_FAILED_NO_VALID_TARGETS);
                    return;
                }

                //Select the two targets.
                std::list<WorldObject*> targets = targetList;
                targetList.remove_if(OnlyTriggerInFrontPredicate(GetCaster()));

                //See if we intersect with any players.
                for (auto object : targets)
                    if (object->GetTypeId() == TYPEID_PLAYER)
                        for (auto trigger : targetList)
                            if (object->IsInBetween(GetCaster(), trigger, 2.0f))
                            {
                                const SpellInfo* damageSpell = sSpellMgr->GetSpellInfo(SPELL_THROW_DAMAGE);
                                GetCaster()->DealDamage(object->ToPlayer(), damageSpell->GetEffect(EFFECT_0)->BasePoints, 0, SPELL_DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, damageSpell);
                            }
            }
Example #6
0
            void FilterTargets(std::list<WorldObject*>& targets)
            {
                if (targets.empty())
                {
                    FinishCast(SPELL_FAILED_NO_VALID_TARGETS);
                    return;
                }

                // get a list of players with mana
                std::list<WorldObject*> _targets;
                for (std::list<WorldObject*>::iterator itr = targets.begin(); itr != targets.end(); ++itr)
                    if ((*itr)->ToUnit()->getPowerType() == POWER_MANA)
                        _targets.push_back(*itr);

                if (_targets.empty())
                    return;

                // pick a random target and kiss him
                if (WorldObject* _target = SkyMistCore::Containers::SelectRandomContainerElement(_targets))
                {
                    // correctly fill "targets" for the visual effect
                    targets.clear();
                    targets.push_back(_target);
                    if (Unit* caster = GetCaster())
                        caster->CastSpell(_target->ToUnit(), SPELL_MISTRESS_KISS_DEBUFF, true);
                }
            }
Example #7
0
            void FilterTargets(std::list<Unit*>& unitList)
            {
                if (!GetCaster()->ToPlayer()->GetGroup())
                {
                    unitList.clear();
                    unitList.push_back(GetCaster());
                }
                else
                {
                    unitList.remove(GetTargetUnit());
                    std::list<Unit*> tempTargets;
                    for (std::list<Unit*>::const_iterator itr = unitList.begin(); itr != unitList.end(); ++itr)
                        if ((*itr)->GetTypeId() == TYPEID_PLAYER && GetCaster()->IsInRaidWith(*itr))
                            tempTargets.push_back(*itr);

                    if (tempTargets.empty())
                    {
                        unitList.clear();
                        FinishCast(SPELL_FAILED_DONT_REPORT);
                        return;
                    }

                    std::list<Unit*>::const_iterator it2 = tempTargets.begin();
                    std::advance(it2, urand(0, tempTargets.size() - 1));
                    unitList.clear();
                    unitList.push_back(*it2);
                }
            }
Example #8
0
    void FilterTargets(std::list<WorldObject*>& targets)
    {
        Creature* caster = GetCaster()->ToCreature();
        if (!caster)
            return;

        if (WorldObject* tank = caster->AI()->SelectTarget(SELECT_TARGET_TOPAGGRO))
            targets.remove(tank);

        if (targets.size() < 2)
        {
            FinishCast(SPELL_FAILED_NO_VALID_TARGETS);
            return;
        }

        Trinity::Containers::RandomResize(targets, 2);

        _targets.push_back(targets.front()->GetGUID());
        _targets.push_back(targets.back()->GetGUID());
    }
Example #9
0
 void FilterTargets(std::list<WorldObject*>& targets)
 {
     if (targets.empty() || GetCaster()->GetVehicleBase())
         FinishCast(SPELL_FAILED_OUT_OF_RANGE);
 }
Example #10
0
 void FilterTargets(std::list<WorldObject*>& targets)
 {
     if (targets.empty())
         FinishCast(SPELL_FAILED_OUT_OF_RANGE);
 }
 void FilterTargets(std::list<WorldObject*>& targets)
 {
     targets.remove_if(Trinity::UnitAuraCheck(true, SPELL_SABER_LASH_IMMUNITY));
     if (targets.size() <= 1)
         FinishCast(SPELL_FAILED_DONT_REPORT);
 }