Scripts/Achievements: Fixed achievement Shocking! on 10-man and 25-man
closes #4751 Signed-off-by: Subv2112 <[email protected]>
This commit is contained in:
@@ -333,38 +333,6 @@ void Spell::EffectSchoolDMG(SpellEffIndex effIndex)
|
|||||||
|
|
||||||
switch (m_spellInfo->Id) // better way to check unknown
|
switch (m_spellInfo->Id) // better way to check unknown
|
||||||
{
|
{
|
||||||
// Positive/Negative Charge
|
|
||||||
case 28062:
|
|
||||||
case 28085:
|
|
||||||
case 39090:
|
|
||||||
case 39093:
|
|
||||||
if (!m_triggeredByAuraSpell)
|
|
||||||
break;
|
|
||||||
if (unitTarget == m_caster)
|
|
||||||
{
|
|
||||||
uint8 count = 0;
|
|
||||||
for (std::list<TargetInfo>::iterator ihit = m_UniqueTargetInfo.begin(); ihit != m_UniqueTargetInfo.end(); ++ihit)
|
|
||||||
if (ihit->targetGUID != m_caster->GetGUID())
|
|
||||||
if (Player* target = ObjectAccessor::GetPlayer(*m_caster, ihit->targetGUID))
|
|
||||||
if (target->HasAura(m_triggeredByAuraSpell->Id))
|
|
||||||
++count;
|
|
||||||
if (count)
|
|
||||||
{
|
|
||||||
uint32 spellId = 0;
|
|
||||||
switch (m_spellInfo->Id)
|
|
||||||
{
|
|
||||||
case 28062: spellId = 29659; break;
|
|
||||||
case 28085: spellId = 29660; break;
|
|
||||||
case 39090: spellId = 39089; break;
|
|
||||||
case 39093: spellId = 39092; break;
|
|
||||||
}
|
|
||||||
m_caster->SetAuraStack(spellId, m_caster, count);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (unitTarget->HasAura(m_triggeredByAuraSpell->Id))
|
|
||||||
damage = 0;
|
|
||||||
break;
|
|
||||||
// Consumption
|
// Consumption
|
||||||
case 28865:
|
case 28865:
|
||||||
damage = (((InstanceMap*)m_caster->GetMap())->GetDifficulty() == REGULAR_DIFFICULTY ? 2750 : 4250);
|
damage = (((InstanceMap*)m_caster->GetMap())->GetDifficulty() == REGULAR_DIFFICULTY ? 2750 : 4250);
|
||||||
|
|||||||
@@ -400,9 +400,68 @@ public:
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class spell_thaddius_pos_neg_charge : public SpellScriptLoader
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
spell_thaddius_pos_neg_charge() : SpellScriptLoader("spell_thaddius_pos_neg_charge") { }
|
||||||
|
|
||||||
|
class spell_thaddius_pos_neg_charge_SpellScript : public SpellScript
|
||||||
|
{
|
||||||
|
PrepareSpellScript(spell_thaddius_pos_neg_charge_SpellScript);
|
||||||
|
|
||||||
|
void HandleTargets(std::list<Unit*>& targetList)
|
||||||
|
{
|
||||||
|
uint8 count = 0;
|
||||||
|
for (std::list<Unit*>::iterator ihit = targetList.begin(); ihit != targetList.end(); ++ihit)
|
||||||
|
if ((*ihit)->GetGUID() != GetCaster()->GetGUID())
|
||||||
|
if (Player* target = (*ihit)->ToPlayer())
|
||||||
|
if (target->HasAura(GetTriggeringSpell()->Id))
|
||||||
|
++count;
|
||||||
|
if (count)
|
||||||
|
{
|
||||||
|
uint32 spellId = 0;
|
||||||
|
switch (GetSpellInfo()->Id)
|
||||||
|
{
|
||||||
|
case 28062: spellId = 29659; break;
|
||||||
|
case 28085: spellId = 29660; break;
|
||||||
|
case 39090: spellId = 39089; break;
|
||||||
|
case 39093: spellId = 39092; break;
|
||||||
|
}
|
||||||
|
GetCaster()->SetAuraStack(spellId, GetCaster(), count);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void HandleDamage(SpellEffIndex /*effIndex*/)
|
||||||
|
{
|
||||||
|
if (!GetTriggeringSpell())
|
||||||
|
return;
|
||||||
|
|
||||||
|
Unit* target = GetHitUnit();
|
||||||
|
|
||||||
|
if (target->HasAura(GetTriggeringSpell()->Id))
|
||||||
|
SetHitDamage(0);
|
||||||
|
else
|
||||||
|
if (InstanceScript* instance = target->GetInstanceScript())
|
||||||
|
instance->SetData(DATA_POLARITY_SWITCHED, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Register()
|
||||||
|
{
|
||||||
|
OnEffectHitTarget += SpellEffectFn(spell_thaddius_pos_neg_charge_SpellScript::HandleDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
|
||||||
|
OnUnitTargetSelect += SpellUnitTargetFn(spell_thaddius_pos_neg_charge_SpellScript::HandleTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
SpellScript* GetSpellScript() const
|
||||||
|
{
|
||||||
|
return new spell_thaddius_pos_neg_charge_SpellScript();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
void AddSC_boss_thaddius()
|
void AddSC_boss_thaddius()
|
||||||
{
|
{
|
||||||
new boss_thaddius();
|
new boss_thaddius();
|
||||||
new mob_stalagg();
|
new mob_stalagg();
|
||||||
new mob_feugen();
|
new mob_feugen();
|
||||||
|
new spell_thaddius_pos_neg_charge();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -149,6 +149,8 @@ public:
|
|||||||
|
|
||||||
uint32 playerDied;
|
uint32 playerDied;
|
||||||
|
|
||||||
|
uint32 PolaritySwitch;
|
||||||
|
|
||||||
void Initialize()
|
void Initialize()
|
||||||
{
|
{
|
||||||
gothikGateGUID = 0;
|
gothikGateGUID = 0;
|
||||||
@@ -166,8 +168,10 @@ public:
|
|||||||
kelthuzadGUID = 0;
|
kelthuzadGUID = 0;
|
||||||
kelthuzadTriggerGUID = 0;
|
kelthuzadTriggerGUID = 0;
|
||||||
|
|
||||||
playerDied = 0;
|
playerDied = 0;
|
||||||
gothikDoorState = GO_STATE_ACTIVE;
|
gothikDoorState = GO_STATE_ACTIVE;
|
||||||
|
|
||||||
|
PolaritySwitch = 0;
|
||||||
|
|
||||||
memset(portalsGUID, 0, sizeof(portalsGUID));
|
memset(portalsGUID, 0, sizeof(portalsGUID));
|
||||||
}
|
}
|
||||||
@@ -311,6 +315,9 @@ public:
|
|||||||
case DATA_ABOMINATION_KILLED:
|
case DATA_ABOMINATION_KILLED:
|
||||||
AbominationCount = value;
|
AbominationCount = value;
|
||||||
break;
|
break;
|
||||||
|
case DATA_POLARITY_SWITCHED:
|
||||||
|
PolaritySwitch = value;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -440,6 +447,13 @@ public:
|
|||||||
if (AreAllEncoutersDone() && !playerDied)
|
if (AreAllEncoutersDone() && !playerDied)
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
|
// Criteria for achievement 2178: Shocking! (10-man)
|
||||||
|
case 7604:
|
||||||
|
// Criteria for achievement 2179: Shocking! (25-man)
|
||||||
|
case 7605:
|
||||||
|
if (!PolaritySwitch)
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -447,14 +461,14 @@ public:
|
|||||||
std::string GetSaveData()
|
std::string GetSaveData()
|
||||||
{
|
{
|
||||||
std::ostringstream saveStream;
|
std::ostringstream saveStream;
|
||||||
saveStream << GetBossSaveData() << gothikDoorState << ' ' << playerDied;
|
saveStream << GetBossSaveData() << gothikDoorState << ' ' << playerDied << ' ' << PolaritySwitch;
|
||||||
return saveStream.str();
|
return saveStream.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Load(const char * data)
|
void Load(const char * data)
|
||||||
{
|
{
|
||||||
std::istringstream loadStream(LoadBossState(data));
|
std::istringstream loadStream(LoadBossState(data));
|
||||||
uint32 temp, buff, buff2;
|
uint32 temp, buff, buff2, buff3;
|
||||||
|
|
||||||
for (uint32 i = 0; i < MAX_BOSS_NUMBER; ++i)
|
for (uint32 i = 0; i < MAX_BOSS_NUMBER; ++i)
|
||||||
loadStream >> temp;
|
loadStream >> temp;
|
||||||
@@ -463,6 +477,8 @@ public:
|
|||||||
gothikDoorState = GOState(buff);
|
gothikDoorState = GOState(buff);
|
||||||
loadStream >> buff2;
|
loadStream >> buff2;
|
||||||
playerDied = buff2;
|
playerDied = buff2;
|
||||||
|
loadStream >> buff3;
|
||||||
|
PolaritySwitch = buff3;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -49,6 +49,8 @@ enum Data
|
|||||||
DATA_HORSEMEN2,
|
DATA_HORSEMEN2,
|
||||||
DATA_HORSEMEN3,
|
DATA_HORSEMEN3,
|
||||||
DATA_ABOMINATION_KILLED,
|
DATA_ABOMINATION_KILLED,
|
||||||
|
|
||||||
|
DATA_POLARITY_SWITCHED,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum Data64
|
enum Data64
|
||||||
|
|||||||
Reference in New Issue
Block a user