void PreventHitByLoS() { if (Unit* target = GetHitUnit()) { Unit* caster = GetCaster(); //Temporary Line of Sight Check std::list<GameObject*> blockList; caster->GetGameObjectListWithEntryInGrid(blockList, GO_SARONITE_ROCK, 100.0f); if (!blockList.empty()) { for (std::list<GameObject*>::const_iterator itr = blockList.begin(); itr != blockList.end(); ++itr) { if (!(*itr)->IsInvisibleDueToDespawn()) { if ((*itr)->IsInBetween(caster, target, 4.0f)) { prevented = true; target->ApplySpellImmune(GetSpellInfo()->Id, IMMUNITY_ID, GetSpellInfo()->Id, true); PreventHitDefaultEffect(EFFECT_0); PreventHitDefaultEffect(EFFECT_1); PreventHitDefaultEffect(EFFECT_2); PreventHitDamage(); break; } } } } } }
void HandleDamageCalc(SpellEffIndex /*effIndex*/) { Unit* target = GetHitUnit(); uint32 permafrost = sSpellMgr->GetSpellIdForDifficulty(SPELL_PERMAFROST, target); // make sure Impale doesnt do damage if we are standing on permafrost if (target && target->HasAura(permafrost)) PreventHitDamage(); }
void HandleDamage(SpellEffIndex /*effIndex*/) { if(!GetCaster() || !GetHitUnit()) return; PreventHitDamage(); uint32 ticks = 1; if (constAuraEffectPtr aurEff = GetCaster()->GetAuraEffect(SPELL_BLADE_DANCE_AURA_2, EFFECT_0)) ticks = std::max(aurEff->GetTickNumber(), ticks); SetHitDamage(urand(11875, 13125) * ticks); }
void HammerOfRighteousScript::HandleBeforeHit() { Unit* caster = GetCaster(); Unit* target = GetExplTargetUnit(); if (!caster || !target) return; Aura* hammerJustice = target->GetAura(SPELL_HAMMER_JUSTICE_STUN); // Target isn't affected by HoJ so is able to pickup the Hammer if (!hammerJustice) { caster->CastSpell(target, SPELL_HAMMER_RIGHTEOUS_P); PreventHitDamage(); } }
void OnCast() { if (GetCaster()->GetTypeId() != TYPEID_PLAYER) return; if (IsVampire(GetHitUnit())) { PreventHitDamage(); PreventHitDefaultEffect(EFFECT_1); Spell::SendCastResult(GetCaster()->ToPlayer(), GetSpellInfo(), 0, SPELL_FAILED_BAD_TARGETS); return; } SpellEntry const* spell = sSpellStore.LookupEntry(SPELL_FRENZIED_BLOODTHIRST); spell = sSpellMgr->GetSpellForDifficultyFromSpell(spell, GetCaster()); GetCaster()->RemoveAura(spell->Id, 0, 0, AURA_REMOVE_BY_ENEMY_SPELL); GetCaster()->CastSpell(GetCaster(), SPELL_ESSENCE_OF_THE_BLOOD_QUEEN_PLR, true); // Presence of the Darkfallen buff on Blood-Queen if (GetCaster()->GetMap()->IsHeroic()) GetCaster()->CastSpell(GetCaster(), SPELL_PRESENCE_OF_THE_DARKFALLEN, true); // Shadowmourne questline if (GetCaster()->ToPlayer()->GetQuestStatus(QUEST_BLOOD_INFUSION) == QUEST_STATUS_INCOMPLETE) { if (Aura* aura = GetCaster()->GetAura(SPELL_GUSHING_WOUND)) { if (aura->GetStackAmount() == 3) { GetCaster()->CastSpell(GetCaster(), SPELL_THIRST_QUENCHED, true); GetCaster()->RemoveAura(aura); } else GetCaster()->CastSpell(GetCaster(), SPELL_GUSHING_WOUND, true); } } if (InstanceScript* instance = GetCaster()->GetInstanceScript()) if (Creature* bloodQueen = ObjectAccessor::GetCreature(*GetCaster(), instance->GetData64(DATA_BLOOD_QUEEN_LANA_THEL))) bloodQueen->AI()->SetGUID(GetHitUnit()->GetGUID(), GUID_VAMPIRE); }