Scripts/Icecrown Citadel: Added Professor Putricide script
Scripts/Icecrown Citadel: Fixed Professor Putricide gate opening when both Rotface and Festergut are dead Scripts/Icecrown Citadel: Added script updating entries of NPCs at Light's Hammer depending on faction Scripts/Icecrown Citadel: Rotface should not pick main tank as target for Slime Spray (removed debugging code) Core/Spells/Conditions : Spell script target condition now accepts ConditionValue3 as affecting effect mask (only search targets with matching mask) --HG-- branch : trunk extra : rebase_source : 943e3bac5d9063974d7f7132f144e91946f825d4
This commit is contained in:
@@ -1316,6 +1316,20 @@ void AuraEffect::PeriodicTick(Unit * target, Unit * caster) const
|
||||
}
|
||||
}
|
||||
}
|
||||
if (GetSpellProto()->SpellFamilyName == SPELLFAMILY_GENERIC)
|
||||
{
|
||||
switch (GetId())
|
||||
{
|
||||
case 70911: // Unbound Plague
|
||||
case 72854: // Unbound Plague
|
||||
case 72855: // Unbound Plague
|
||||
case 72856: // Unbound Plague
|
||||
damage *= uint32(pow(1.25f, int32(m_tickNumber)));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
damage = uint32(target->CountPctFromMaxHealth(damage));
|
||||
|
||||
@@ -1877,7 +1877,7 @@ void Spell::SearchGOAreaTarget(std::list<GameObject*> &TagGOMap, float radius, S
|
||||
m_caster->GetMap()->VisitGrid(pos->m_positionX, pos->m_positionY, radius, searcher);
|
||||
}
|
||||
|
||||
WorldObject* Spell::SearchNearbyTarget(float range, SpellTargets TargetType)
|
||||
WorldObject* Spell::SearchNearbyTarget(float range, SpellTargets TargetType, SpellEffIndex effIndex)
|
||||
{
|
||||
switch(TargetType)
|
||||
{
|
||||
@@ -1888,9 +1888,9 @@ WorldObject* Spell::SearchNearbyTarget(float range, SpellTargets TargetType)
|
||||
{
|
||||
sLog.outDebug("Spell (ID: %u) (caster Entry: %u) does not have record in `conditions` for spell script target (ConditionSourceType 14)", m_spellInfo->Id, m_caster->GetEntry());
|
||||
if (IsPositiveSpell(m_spellInfo->Id))
|
||||
return SearchNearbyTarget(range, SPELL_TARGETS_ALLY);
|
||||
return SearchNearbyTarget(range, SPELL_TARGETS_ALLY, effIndex);
|
||||
else
|
||||
return SearchNearbyTarget(range, SPELL_TARGETS_ENEMY);
|
||||
return SearchNearbyTarget(range, SPELL_TARGETS_ENEMY, effIndex);
|
||||
}
|
||||
|
||||
Creature* creatureScriptTarget = NULL;
|
||||
@@ -1900,6 +1900,8 @@ WorldObject* Spell::SearchNearbyTarget(float range, SpellTargets TargetType)
|
||||
{
|
||||
if ((*i_spellST)->mConditionType != CONDITION_SPELL_SCRIPT_TARGET)
|
||||
continue;
|
||||
if ((*i_spellST)->mConditionValue3 && !((*i_spellST)->mConditionValue3 & (1 << uint32(effIndex))))
|
||||
continue;
|
||||
switch((*i_spellST)->mConditionValue1)
|
||||
{
|
||||
case SPELL_TARGET_TYPE_CONTROLLED:
|
||||
@@ -2087,20 +2089,20 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur)
|
||||
case TARGET_UNIT_NEARBY_ENEMY:
|
||||
range = GetSpellMaxRange(m_spellInfo, false);
|
||||
if (modOwner) modOwner->ApplySpellMod(m_spellInfo->Id, SPELLMOD_RANGE, range, this);
|
||||
target = SearchNearbyTarget(range, SPELL_TARGETS_ENEMY);
|
||||
target = SearchNearbyTarget(range, SPELL_TARGETS_ENEMY, SpellEffIndex(i));
|
||||
break;
|
||||
case TARGET_UNIT_NEARBY_ALLY:
|
||||
case TARGET_UNIT_NEARBY_ALLY_UNK:
|
||||
case TARGET_UNIT_NEARBY_RAID:
|
||||
range = GetSpellMaxRange(m_spellInfo, true);
|
||||
if (modOwner) modOwner->ApplySpellMod(m_spellInfo->Id, SPELLMOD_RANGE, range, this);
|
||||
target = SearchNearbyTarget(range, SPELL_TARGETS_ALLY);
|
||||
target = SearchNearbyTarget(range, SPELL_TARGETS_ALLY, SpellEffIndex(i));
|
||||
break;
|
||||
case TARGET_UNIT_NEARBY_ENTRY:
|
||||
case TARGET_GAMEOBJECT_NEARBY_ENTRY:
|
||||
range = GetSpellMaxRange(m_spellInfo, IsPositiveSpell(m_spellInfo->Id));
|
||||
if (modOwner) modOwner->ApplySpellMod(m_spellInfo->Id, SPELLMOD_RANGE, range, this);
|
||||
target = SearchNearbyTarget(range, SPELL_TARGETS_ENTRY);
|
||||
target = SearchNearbyTarget(range, SPELL_TARGETS_ENTRY, SpellEffIndex(i));
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -2303,7 +2305,7 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur)
|
||||
float range = GetSpellMaxRange(m_spellInfo, IsPositiveSpell(m_spellInfo->Id));
|
||||
if (modOwner) modOwner->ApplySpellMod(m_spellInfo->Id, SPELLMOD_RANGE, range, this);
|
||||
|
||||
if (WorldObject *target = SearchNearbyTarget(range, SPELL_TARGETS_ENTRY))
|
||||
if (WorldObject *target = SearchNearbyTarget(range, SPELL_TARGETS_ENTRY, SpellEffIndex(i)))
|
||||
m_targets.setDst(*target);
|
||||
break;
|
||||
}
|
||||
@@ -2473,6 +2475,8 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur)
|
||||
{
|
||||
if ((*i_spellST)->mConditionType != CONDITION_SPELL_SCRIPT_TARGET)
|
||||
continue;
|
||||
if ((*i_spellST)->mConditionValue3 && !((*i_spellST)->mConditionValue3 & (1<<i)))
|
||||
continue;
|
||||
if ((*i_spellST)->mConditionValue1 == SPELL_TARGET_TYPE_CREATURE)
|
||||
SearchAreaTarget(unitList, radius, pushType, SPELL_TARGETS_ENTRY, (*i_spellST)->mConditionValue2);
|
||||
else if ((*i_spellST)->mConditionValue1 == SPELL_TARGET_TYPE_CONTROLLED)
|
||||
@@ -2568,6 +2572,8 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur)
|
||||
{
|
||||
if ((*i_spellST)->mConditionType != CONDITION_SPELL_SCRIPT_TARGET)
|
||||
continue;
|
||||
if ((*i_spellST)->mConditionValue3 && !((*i_spellST)->mConditionValue3 & (1<<i)))
|
||||
continue;
|
||||
if ((*i_spellST)->mConditionValue1 == SPELL_TARGET_TYPE_GAMEOBJECT)
|
||||
SearchGOAreaTarget(gobjectList, radius, pushType, SPELL_TARGETS_GO, (*i_spellST)->mConditionValue2);
|
||||
}
|
||||
|
||||
@@ -660,7 +660,7 @@ class Spell
|
||||
void SearchAreaTarget(std::list<Unit*> &unitList, float radius, SpellNotifyPushType type, SpellTargets TargetType, uint32 entry = 0);
|
||||
void SearchGOAreaTarget(std::list<GameObject*> &gobjectList, float radius, SpellNotifyPushType type, SpellTargets TargetType, uint32 entry = 0);
|
||||
void SearchChainTarget(std::list<Unit*> &unitList, float radius, uint32 unMaxTargets, SpellTargets TargetType);
|
||||
WorldObject* SearchNearbyTarget(float range, SpellTargets TargetType);
|
||||
WorldObject* SearchNearbyTarget(float range, SpellTargets TargetType, SpellEffIndex effIndex);
|
||||
bool IsValidSingleTargetEffect(Unit const* target, Targets type) const;
|
||||
bool IsValidSingleTargetSpell(Unit const* target) const;
|
||||
bool IsValidDeadOrAliveTarget(Unit const* target) const;
|
||||
|
||||
@@ -3605,6 +3605,8 @@ void SpellMgr::LoadSpellCustomAttr()
|
||||
case 64422: case 64688: // Sonic Screech
|
||||
case 72373: // Shared Suffering
|
||||
case 71904: // Chaos Bane
|
||||
case 70492: case 72505: // Ooze Eruption
|
||||
case 72624: case 72625: // Ooze Eruption
|
||||
// ONLY SPELLS WITH SPELLFAMILY_GENERIC and EFFECT_SCHOOL_DAMAGE
|
||||
mSpellCustomAttr[i] |= SPELL_ATTR_CU_SHARE_DAMAGE;
|
||||
count++;
|
||||
@@ -3882,6 +3884,44 @@ void SpellMgr::LoadSpellCustomAttr()
|
||||
spellInfo->EffectSpellClassMask[0] = flag96(423937, 276955137, 2049);
|
||||
count++;
|
||||
break;
|
||||
// this is here until targetAuraSpell and alike support SpellDifficulty.dbc
|
||||
case 70459: // Ooze Eruption Search Effect
|
||||
spellInfo->targetAuraSpell = 0;
|
||||
count++;
|
||||
break;
|
||||
case 71413: // Green Ooze Summon
|
||||
case 71414: // Orange Ooze Summon
|
||||
spellInfo->EffectImplicitTargetA[0] = TARGET_DEST_DEST;
|
||||
count++;
|
||||
break;
|
||||
// THIS IS HERE BECAUSE COOLDOWN ON CREATURE PROCS IS NOT IMPLEMENTED
|
||||
case 71604: // Mutated Strength
|
||||
case 72673: // Mutated Strength
|
||||
case 72674: // Mutated Strength
|
||||
case 72675: // Mutated Strength
|
||||
spellInfo->Effect[1] = 0;
|
||||
count++;
|
||||
break;
|
||||
case 70447: // Volatile Ooze Adhesive
|
||||
case 72836: // Volatile Ooze Adhesive
|
||||
case 72837: // Volatile Ooze Adhesive
|
||||
case 72838: // Volatile Ooze Adhesive
|
||||
case 70672: // Gaseous Bloat
|
||||
case 72455: // Gaseous Bloat
|
||||
case 72832: // Gaseous Bloat
|
||||
case 72833: // Gaseous Bloat
|
||||
spellInfo->EffectImplicitTargetB[0] = TARGET_UNIT_TARGET_ENEMY;
|
||||
spellInfo->EffectImplicitTargetB[1] = TARGET_UNIT_TARGET_ENEMY;
|
||||
spellInfo->EffectImplicitTargetB[2] = TARGET_UNIT_TARGET_ENEMY;
|
||||
count++;
|
||||
break;
|
||||
case 70911: // Unbound Plague
|
||||
case 72854: // Unbound Plague
|
||||
case 72855: // Unbound Plague
|
||||
case 72856: // Unbound Plague
|
||||
spellInfo->EffectImplicitTargetB[0] = TARGET_UNIT_TARGET_ENEMY;
|
||||
count++;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user