Scripts/Trial of the Crusader: Made instance script a more readable, fixed early despawning of worm boss
Closes issue #3915. --HG-- branch : trunk extra : rebase_source : 7c086f0859bec23e53b2f9f9b2c458c48b9940df
This commit is contained in:
+24
-8
@@ -108,14 +108,30 @@ public:
|
|||||||
uint8 pos = urand(0, vHealersEntries.size()-1);
|
uint8 pos = urand(0, vHealersEntries.size()-1);
|
||||||
switch (vHealersEntries[pos])
|
switch (vHealersEntries[pos])
|
||||||
{
|
{
|
||||||
case NPC_ALLIANCE_DRUID_RESTORATION: vOtherEntries.push_back(NPC_ALLIANCE_DRUID_BALANCE); break;
|
case NPC_ALLIANCE_DRUID_RESTORATION:
|
||||||
case NPC_HORDE_DRUID_RESTORATION: vOtherEntries.push_back(NPC_HORDE_DRUID_BALANCE); break;
|
vOtherEntries.push_back(NPC_ALLIANCE_DRUID_BALANCE);
|
||||||
case NPC_ALLIANCE_PALADIN_HOLY: vOtherEntries.push_back(NPC_ALLIANCE_PALADIN_RETRIBUTION); break;
|
break;
|
||||||
case NPC_HORDE_PALADIN_HOLY: vOtherEntries.push_back(NPC_HORDE_PALADIN_RETRIBUTION); break;
|
case NPC_HORDE_DRUID_RESTORATION:
|
||||||
case NPC_ALLIANCE_PRIEST_DISCIPLINE: vOtherEntries.push_back(NPC_ALLIANCE_PRIEST_SHADOW); break;
|
vOtherEntries.push_back(NPC_HORDE_DRUID_BALANCE);
|
||||||
case NPC_HORDE_PRIEST_DISCIPLINE: vOtherEntries.push_back(NPC_HORDE_PRIEST_SHADOW); break;
|
break;
|
||||||
case NPC_ALLIANCE_SHAMAN_RESTORATION: vOtherEntries.push_back(NPC_ALLIANCE_SHAMAN_ENHANCEMENT); break;
|
case NPC_ALLIANCE_PALADIN_HOLY:
|
||||||
case NPC_HORDE_SHAMAN_RESTORATION: vOtherEntries.push_back(NPC_HORDE_SHAMAN_ENHANCEMENT); break;
|
vOtherEntries.push_back(NPC_ALLIANCE_PALADIN_RETRIBUTION);
|
||||||
|
break;
|
||||||
|
case NPC_HORDE_PALADIN_HOLY:
|
||||||
|
vOtherEntries.push_back(NPC_HORDE_PALADIN_RETRIBUTION);
|
||||||
|
break;
|
||||||
|
case NPC_ALLIANCE_PRIEST_DISCIPLINE:
|
||||||
|
vOtherEntries.push_back(NPC_ALLIANCE_PRIEST_SHADOW);
|
||||||
|
break;
|
||||||
|
case NPC_HORDE_PRIEST_DISCIPLINE:
|
||||||
|
vOtherEntries.push_back(NPC_HORDE_PRIEST_SHADOW);
|
||||||
|
break;
|
||||||
|
case NPC_ALLIANCE_SHAMAN_RESTORATION:
|
||||||
|
vOtherEntries.push_back(NPC_ALLIANCE_SHAMAN_ENHANCEMENT);
|
||||||
|
break;
|
||||||
|
case NPC_HORDE_SHAMAN_RESTORATION:
|
||||||
|
vOtherEntries.push_back(NPC_HORDE_SHAMAN_ENHANCEMENT);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
vHealersEntries.erase(vHealersEntries.begin()+pos);
|
vHealersEntries.erase(vHealersEntries.begin()+pos);
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-13
@@ -101,7 +101,7 @@ public:
|
|||||||
{
|
{
|
||||||
boss_jaraxxusAI(Creature* pCreature) : ScriptedAI(pCreature), Summons(me)
|
boss_jaraxxusAI(Creature* pCreature) : ScriptedAI(pCreature), Summons(me)
|
||||||
{
|
{
|
||||||
m_pInstance = (InstanceScript*)pCreature->GetInstanceScript();
|
m_pInstance = pCreature->GetInstanceScript();
|
||||||
Reset();
|
Reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -249,7 +249,6 @@ public:
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class mob_legion_flame : public CreatureScript
|
class mob_legion_flame : public CreatureScript
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -276,14 +275,12 @@ public:
|
|||||||
|
|
||||||
void UpdateAI(const uint32 /*uiDiff*/)
|
void UpdateAI(const uint32 /*uiDiff*/)
|
||||||
{
|
{
|
||||||
if (!UpdateVictim())
|
UpdateVictim();
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class mob_infernal_volcano : public CreatureScript
|
class mob_infernal_volcano : public CreatureScript
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -354,14 +351,12 @@ public:
|
|||||||
m_Timer = 5*IN_MILLISECONDS;
|
m_Timer = 5*IN_MILLISECONDS;
|
||||||
} else m_Timer -= uiDiff;
|
} else m_Timer -= uiDiff;
|
||||||
|
|
||||||
if (!UpdateVictim())
|
UpdateVictim();
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class mob_fel_infernal : public CreatureScript
|
class mob_fel_infernal : public CreatureScript
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -416,7 +411,6 @@ public:
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class mob_nether_portal : public CreatureScript
|
class mob_nether_portal : public CreatureScript
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -481,14 +475,12 @@ public:
|
|||||||
m_Timer = 15*IN_MILLISECONDS;
|
m_Timer = 15*IN_MILLISECONDS;
|
||||||
} else m_Timer -= uiDiff;
|
} else m_Timer -= uiDiff;
|
||||||
|
|
||||||
if (!UpdateVictim())
|
UpdateVictim();
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class mob_mistress_of_pain : public CreatureScript
|
class mob_mistress_of_pain : public CreatureScript
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -562,7 +554,6 @@ public:
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
void AddSC_boss_jaraxxus()
|
void AddSC_boss_jaraxxus()
|
||||||
{
|
{
|
||||||
new boss_jaraxxus();
|
new boss_jaraxxus();
|
||||||
|
|||||||
+134
-119
@@ -359,62 +359,56 @@ public:
|
|||||||
|
|
||||||
struct boss_jormungarAI : public ScriptedAI
|
struct boss_jormungarAI : public ScriptedAI
|
||||||
{
|
{
|
||||||
boss_jormungarAI(Creature* pCreature) : ScriptedAI(pCreature)
|
boss_jormungarAI(Creature* creature) : ScriptedAI(creature)
|
||||||
{
|
{
|
||||||
m_pInstance = (InstanceScript*)pCreature->GetInstanceScript();
|
instanceScript = creature->GetInstanceScript();
|
||||||
}
|
}
|
||||||
|
|
||||||
InstanceScript* m_pInstance;
|
|
||||||
|
|
||||||
uint32 m_uiSisterID;
|
|
||||||
|
|
||||||
uint32 m_uiModelStationary;
|
|
||||||
uint32 m_uiModelMobile;
|
|
||||||
|
|
||||||
uint32 m_uiBiteSpell;
|
|
||||||
uint32 m_uiSpewSpell;
|
|
||||||
uint32 m_uiSpitSpell;
|
|
||||||
uint32 m_uiSpraySpell;
|
|
||||||
|
|
||||||
uint32 m_uiBiteTimer;
|
|
||||||
uint32 m_uiSpewTimer;
|
|
||||||
uint32 m_uiSlimePoolTimer;
|
|
||||||
uint32 m_uiSpitTimer;
|
|
||||||
uint32 m_uiSprayTimer;
|
|
||||||
uint32 m_uiSweepTimer;
|
|
||||||
uint32 m_uiSubmergeTimer;
|
|
||||||
uint8 m_uiStage;
|
|
||||||
bool m_bEnraged;
|
|
||||||
|
|
||||||
void Reset()
|
void Reset()
|
||||||
{
|
{
|
||||||
m_bEnraged = false;
|
enraged = false;
|
||||||
m_uiBiteTimer = urand(15*IN_MILLISECONDS,30*IN_MILLISECONDS);
|
biteTimer = urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS);
|
||||||
m_uiSpewTimer = urand(15*IN_MILLISECONDS,30*IN_MILLISECONDS);
|
spewTimer = urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS);
|
||||||
m_uiSlimePoolTimer = 15*IN_MILLISECONDS;
|
slimePoolTimer = 15*IN_MILLISECONDS;
|
||||||
m_uiSpitTimer = urand(15*IN_MILLISECONDS,30*IN_MILLISECONDS);
|
spitTimer = urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS);
|
||||||
m_uiSprayTimer = urand(15*IN_MILLISECONDS,30*IN_MILLISECONDS);
|
sprayTimer = urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS);
|
||||||
m_uiSweepTimer = urand(15*IN_MILLISECONDS,30*IN_MILLISECONDS);
|
sweepTimer = urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS);
|
||||||
}
|
}
|
||||||
|
|
||||||
void JustDied(Unit* /*pKiller*/)
|
void JustDied(Unit* /*pKiller*/)
|
||||||
{
|
{
|
||||||
if (m_pInstance)
|
if (instanceScript)
|
||||||
{
|
{
|
||||||
if (Creature* pSister = Unit::GetCreature((*me),m_pInstance->GetData64(m_uiSisterID)))
|
if (Creature* otherWorm = Unit::GetCreature(*me, instanceScript->GetData64(otherWormEntry)))
|
||||||
{
|
{
|
||||||
if (!pSister->isAlive())
|
if (!otherWorm->isAlive())
|
||||||
m_pInstance->SetData(TYPE_NORTHREND_BEASTS, SNAKES_DONE);
|
{
|
||||||
|
instanceScript->SetData(TYPE_NORTHREND_BEASTS, SNAKES_DONE);
|
||||||
|
|
||||||
|
if (TempSummon* summ = me->ToTempSummon())
|
||||||
|
summ->UnSummon();
|
||||||
else
|
else
|
||||||
m_pInstance->SetData(TYPE_NORTHREND_BEASTS, SNAKES_SPECIAL);
|
me->ForcedDespawn();
|
||||||
|
|
||||||
|
if (TempSummon* summ = otherWorm->ToTempSummon())
|
||||||
|
summ->UnSummon();
|
||||||
|
else
|
||||||
|
otherWorm->ForcedDespawn();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
instanceScript->SetData(TYPE_NORTHREND_BEASTS, SNAKES_SPECIAL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void JustReachedHome()
|
void JustReachedHome()
|
||||||
{
|
{
|
||||||
if (m_pInstance && m_pInstance->GetData(TYPE_NORTHREND_BEASTS) != FAIL)
|
if (instanceScript && instanceScript->GetData(TYPE_NORTHREND_BEASTS) != FAIL)
|
||||||
m_pInstance->SetData(TYPE_NORTHREND_BEASTS, FAIL);
|
instanceScript->SetData(TYPE_NORTHREND_BEASTS, FAIL);
|
||||||
|
|
||||||
|
if (TempSummon* summ = me->ToTempSummon())
|
||||||
|
summ->UnSummon();
|
||||||
|
else
|
||||||
me->ForcedDespawn();
|
me->ForcedDespawn();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -422,70 +416,71 @@ struct boss_jormungarAI : public ScriptedAI
|
|||||||
{
|
{
|
||||||
if (pWho->GetTypeId() == TYPEID_PLAYER)
|
if (pWho->GetTypeId() == TYPEID_PLAYER)
|
||||||
{
|
{
|
||||||
if (m_pInstance)
|
if (instanceScript)
|
||||||
m_pInstance->SetData(DATA_TRIBUTE_TO_IMMORTALITY_ELEGIBLE, 0);
|
instanceScript->SetData(DATA_TRIBUTE_TO_IMMORTALITY_ELEGIBLE, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnterCombat(Unit* /*pWho*/)
|
void EnterCombat(Unit* /*pWho*/)
|
||||||
{
|
{
|
||||||
me->SetInCombatWithZone();
|
me->SetInCombatWithZone();
|
||||||
if (m_pInstance)
|
if (instanceScript)
|
||||||
m_pInstance->SetData(TYPE_NORTHREND_BEASTS, SNAKES_IN_PROGRESS);
|
instanceScript->SetData(TYPE_NORTHREND_BEASTS, SNAKES_IN_PROGRESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdateAI(const uint32 uiDiff)
|
void UpdateAI(const uint32 uiDiff)
|
||||||
{
|
{
|
||||||
if (!UpdateVictim()) return;
|
if (!UpdateVictim()) return;
|
||||||
|
|
||||||
if (m_pInstance && m_pInstance->GetData(TYPE_NORTHREND_BEASTS) == SNAKES_SPECIAL && !m_bEnraged)
|
if (instanceScript && instanceScript->GetData(TYPE_NORTHREND_BEASTS) == SNAKES_SPECIAL && !enraged)
|
||||||
{
|
{
|
||||||
DoScriptText(SAY_EMERGE, me);
|
DoScriptText(SAY_EMERGE, me);
|
||||||
me->RemoveAurasDueToSpell(SPELL_SUBMERGE_0);
|
me->RemoveAurasDueToSpell(SPELL_SUBMERGE_0);
|
||||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
|
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
|
||||||
DoCast(SPELL_ENRAGE);
|
DoCast(SPELL_ENRAGE);
|
||||||
m_bEnraged = true;
|
enraged = true;
|
||||||
DoScriptText(SAY_BERSERK, me);
|
DoScriptText(SAY_BERSERK, me);
|
||||||
switch (m_uiStage)
|
switch (stage)
|
||||||
{
|
{
|
||||||
case 0: break;
|
case 0:
|
||||||
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
m_uiStage = 5;
|
stage = 5;
|
||||||
m_uiSubmergeTimer = 5*IN_MILLISECONDS;
|
submergeTimer = 5*IN_MILLISECONDS;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
m_uiStage = 7;
|
stage = 7;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (m_uiStage)
|
switch (stage)
|
||||||
{
|
{
|
||||||
case 0: // Mobile
|
case 0: // Mobile
|
||||||
if (m_uiBiteTimer <= uiDiff)
|
if (biteTimer <= uiDiff)
|
||||||
{
|
{
|
||||||
DoCastVictim(m_uiBiteSpell);
|
DoCastVictim(biteSpell);
|
||||||
m_uiBiteTimer = urand(15*IN_MILLISECONDS,30*IN_MILLISECONDS);
|
biteTimer = urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS);
|
||||||
} else m_uiBiteTimer -= uiDiff;
|
} else biteTimer -= uiDiff;
|
||||||
|
|
||||||
if (m_uiSpewTimer <= uiDiff)
|
if (spewTimer <= uiDiff)
|
||||||
{
|
{
|
||||||
DoCastAOE(m_uiSpewSpell);
|
DoCastAOE(spewSpell);
|
||||||
m_uiSpewTimer = urand(15*IN_MILLISECONDS,30*IN_MILLISECONDS);
|
spewTimer = urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS);
|
||||||
} else m_uiSpewTimer -= uiDiff;
|
} else spewTimer -= uiDiff;
|
||||||
|
|
||||||
if (m_uiSlimePoolTimer <= uiDiff)
|
if (slimePoolTimer <= uiDiff)
|
||||||
{
|
{
|
||||||
/* Spell summon has only 30s duration */
|
/* Spell summon has only 30s duration */
|
||||||
//DoCast(SUMMON_SLIME_POOL);
|
//DoCast(SUMMON_SLIME_POOL);
|
||||||
me->SummonCreature(NPC_SLIME_POOL, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0);
|
me->SummonCreature(NPC_SLIME_POOL, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0);
|
||||||
m_uiSlimePoolTimer = 30*IN_MILLISECONDS;
|
slimePoolTimer = 30*IN_MILLISECONDS;
|
||||||
} else m_uiSlimePoolTimer -= uiDiff;
|
} else slimePoolTimer -= uiDiff;
|
||||||
|
|
||||||
if (m_uiSubmergeTimer <= uiDiff && !m_bEnraged)
|
if (submergeTimer <= uiDiff && !enraged)
|
||||||
{
|
{
|
||||||
m_uiStage = 1;
|
stage = 1;
|
||||||
m_uiSubmergeTimer = 5*IN_MILLISECONDS;
|
submergeTimer = 5*IN_MILLISECONDS;
|
||||||
} else m_uiSubmergeTimer -= uiDiff;
|
} else submergeTimer -= uiDiff;
|
||||||
|
|
||||||
DoMeleeAttackIfReady();
|
DoMeleeAttackIfReady();
|
||||||
break;
|
break;
|
||||||
@@ -494,16 +489,16 @@ struct boss_jormungarAI : public ScriptedAI
|
|||||||
DoCast(me, SPELL_SUBMERGE_0);
|
DoCast(me, SPELL_SUBMERGE_0);
|
||||||
DoScriptText(SAY_SUBMERGE, me);
|
DoScriptText(SAY_SUBMERGE, me);
|
||||||
me->GetMotionMaster()->MovePoint(0, ToCCommonLoc[1].GetPositionX()+urand(0, 80)-40, ToCCommonLoc[1].GetPositionY()+urand(0, 80)-40, ToCCommonLoc[1].GetPositionZ());
|
me->GetMotionMaster()->MovePoint(0, ToCCommonLoc[1].GetPositionX()+urand(0, 80)-40, ToCCommonLoc[1].GetPositionY()+urand(0, 80)-40, ToCCommonLoc[1].GetPositionZ());
|
||||||
m_uiStage = 2;
|
stage = 2;
|
||||||
case 2: // Wait til emerge
|
case 2: // Wait til emerge
|
||||||
if (m_uiSubmergeTimer <= uiDiff)
|
if (submergeTimer <= uiDiff)
|
||||||
{
|
{
|
||||||
m_uiStage = 3;
|
stage = 3;
|
||||||
m_uiSubmergeTimer = 50*IN_MILLISECONDS;
|
submergeTimer = 50*IN_MILLISECONDS;
|
||||||
} else m_uiSubmergeTimer -= uiDiff;
|
} else submergeTimer -= uiDiff;
|
||||||
break;
|
break;
|
||||||
case 3: // Emerge
|
case 3: // Emerge
|
||||||
me->SetDisplayId(m_uiModelStationary);
|
me->SetDisplayId(modelStationary);
|
||||||
DoScriptText(SAY_EMERGE, me);
|
DoScriptText(SAY_EMERGE, me);
|
||||||
me->RemoveAurasDueToSpell(SPELL_SUBMERGE_0);
|
me->RemoveAurasDueToSpell(SPELL_SUBMERGE_0);
|
||||||
DoCast(me, SPELL_EMERGE_0);
|
DoCast(me, SPELL_EMERGE_0);
|
||||||
@@ -511,45 +506,45 @@ struct boss_jormungarAI : public ScriptedAI
|
|||||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
|
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
|
||||||
SetCombatMovement(false);
|
SetCombatMovement(false);
|
||||||
me->GetMotionMaster()->MoveIdle();
|
me->GetMotionMaster()->MoveIdle();
|
||||||
m_uiStage = 4;
|
stage = 4;
|
||||||
break;
|
break;
|
||||||
case 4: // Stationary
|
case 4: // Stationary
|
||||||
if (m_uiSprayTimer <= uiDiff)
|
if (sprayTimer <= uiDiff)
|
||||||
{
|
{
|
||||||
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
|
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
|
||||||
DoCast(pTarget,m_uiSpraySpell);
|
DoCast(pTarget, spraySpell);
|
||||||
m_uiSprayTimer = urand(15*IN_MILLISECONDS,30*IN_MILLISECONDS);
|
sprayTimer = urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS);
|
||||||
} else m_uiSprayTimer -= uiDiff;
|
} else sprayTimer -= uiDiff;
|
||||||
|
|
||||||
if (m_uiSweepTimer <= uiDiff)
|
if (sweepTimer <= uiDiff)
|
||||||
{
|
{
|
||||||
DoCastAOE(SPELL_SWEEP_0);
|
DoCastAOE(SPELL_SWEEP_0);
|
||||||
m_uiSweepTimer = urand(15*IN_MILLISECONDS,30*IN_MILLISECONDS);
|
sweepTimer = urand(15*IN_MILLISECONDS, 30*IN_MILLISECONDS);
|
||||||
} else m_uiSweepTimer -= uiDiff;
|
} else sweepTimer -= uiDiff;
|
||||||
|
|
||||||
if (m_uiSubmergeTimer <= uiDiff)
|
if (submergeTimer <= uiDiff)
|
||||||
{
|
{
|
||||||
m_uiStage = 5;
|
stage = 5;
|
||||||
m_uiSubmergeTimer = 10*IN_MILLISECONDS;
|
submergeTimer = 10*IN_MILLISECONDS;
|
||||||
} else m_uiSubmergeTimer -= uiDiff;
|
} else submergeTimer -= uiDiff;
|
||||||
|
|
||||||
DoSpellAttackIfReady(m_uiSpitSpell);
|
DoSpellAttackIfReady(spitSpell);
|
||||||
break;
|
break;
|
||||||
case 5: // Submerge
|
case 5: // Submerge
|
||||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
|
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
|
||||||
DoCast(me, SPELL_SUBMERGE_0);
|
DoCast(me, SPELL_SUBMERGE_0);
|
||||||
DoScriptText(SAY_SUBMERGE, me);
|
DoScriptText(SAY_SUBMERGE, me);
|
||||||
me->GetMotionMaster()->MovePoint(0, ToCCommonLoc[1].GetPositionX()+urand(0, 80)-40, ToCCommonLoc[1].GetPositionY()+urand(0, 80)-40, ToCCommonLoc[1].GetPositionZ());
|
me->GetMotionMaster()->MovePoint(0, ToCCommonLoc[1].GetPositionX()+urand(0, 80)-40, ToCCommonLoc[1].GetPositionY()+urand(0, 80)-40, ToCCommonLoc[1].GetPositionZ());
|
||||||
m_uiStage = 6;
|
stage = 6;
|
||||||
case 6: // Wait til emerge
|
case 6: // Wait til emerge
|
||||||
if (m_uiSubmergeTimer <= uiDiff)
|
if (submergeTimer <= uiDiff)
|
||||||
{
|
{
|
||||||
m_uiStage = 7;
|
stage = 7;
|
||||||
m_uiSubmergeTimer = 45*IN_MILLISECONDS;
|
submergeTimer = 45*IN_MILLISECONDS;
|
||||||
} else m_uiSubmergeTimer -= uiDiff;
|
} else submergeTimer -= uiDiff;
|
||||||
break;
|
break;
|
||||||
case 7: // Emerge
|
case 7: // Emerge
|
||||||
me->SetDisplayId(m_uiModelMobile);
|
me->SetDisplayId(modelMobile);
|
||||||
DoScriptText(SAY_EMERGE, me);
|
DoScriptText(SAY_EMERGE, me);
|
||||||
me->RemoveAurasDueToSpell(SPELL_SUBMERGE_0);
|
me->RemoveAurasDueToSpell(SPELL_SUBMERGE_0);
|
||||||
DoCast(me, SPELL_EMERGE_0);
|
DoCast(me, SPELL_EMERGE_0);
|
||||||
@@ -557,10 +552,32 @@ struct boss_jormungarAI : public ScriptedAI
|
|||||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
|
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
|
||||||
SetCombatMovement(true);
|
SetCombatMovement(true);
|
||||||
me->GetMotionMaster()->MoveChase(me->getVictim());
|
me->GetMotionMaster()->MoveChase(me->getVictim());
|
||||||
m_uiStage = 0;
|
stage = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
InstanceScript* instanceScript;
|
||||||
|
|
||||||
|
uint32 otherWormEntry;
|
||||||
|
|
||||||
|
uint32 modelStationary;
|
||||||
|
uint32 modelMobile;
|
||||||
|
|
||||||
|
uint32 biteSpell;
|
||||||
|
uint32 spewSpell;
|
||||||
|
uint32 spitSpell;
|
||||||
|
uint32 spraySpell;
|
||||||
|
|
||||||
|
uint32 biteTimer;
|
||||||
|
uint32 spewTimer;
|
||||||
|
uint32 slimePoolTimer;
|
||||||
|
uint32 spitTimer;
|
||||||
|
uint32 sprayTimer;
|
||||||
|
uint32 sweepTimer;
|
||||||
|
uint32 submergeTimer;
|
||||||
|
uint8 stage;
|
||||||
|
bool enraged;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -569,11 +586,6 @@ class boss_acidmaw : public CreatureScript
|
|||||||
public:
|
public:
|
||||||
boss_acidmaw() : CreatureScript("boss_acidmaw") { }
|
boss_acidmaw() : CreatureScript("boss_acidmaw") { }
|
||||||
|
|
||||||
CreatureAI* GetAI(Creature* pCreature) const
|
|
||||||
{
|
|
||||||
return new boss_acidmawAI(pCreature);
|
|
||||||
}
|
|
||||||
|
|
||||||
struct boss_acidmawAI : public boss_jormungarAI
|
struct boss_acidmawAI : public boss_jormungarAI
|
||||||
{
|
{
|
||||||
boss_acidmawAI(Creature* pCreature) : boss_jormungarAI(pCreature) { }
|
boss_acidmawAI(Creature* pCreature) : boss_jormungarAI(pCreature) { }
|
||||||
@@ -581,20 +593,24 @@ class boss_acidmaw : public CreatureScript
|
|||||||
void Reset()
|
void Reset()
|
||||||
{
|
{
|
||||||
boss_jormungarAI::Reset();
|
boss_jormungarAI::Reset();
|
||||||
m_uiBiteSpell = SPELL_PARALYTIC_BITE;
|
biteSpell = SPELL_PARALYTIC_BITE;
|
||||||
m_uiSpewSpell = SPELL_ACID_SPEW;
|
spewSpell = SPELL_ACID_SPEW;
|
||||||
m_uiSpitSpell = SPELL_ACID_SPIT;
|
spitSpell = SPELL_ACID_SPIT;
|
||||||
m_uiSpraySpell = SPELL_PARALYTIC_SPRAY;
|
spraySpell = SPELL_PARALYTIC_SPRAY;
|
||||||
m_uiModelStationary = MODEL_ACIDMAW_STATIONARY;
|
modelStationary = MODEL_ACIDMAW_STATIONARY;
|
||||||
m_uiModelMobile = MODEL_ACIDMAW_MOBILE;
|
modelMobile = MODEL_ACIDMAW_MOBILE;
|
||||||
m_uiSisterID = NPC_DREADSCALE;
|
otherWormEntry = NPC_DREADSCALE;
|
||||||
|
|
||||||
m_uiSubmergeTimer = 500;
|
submergeTimer = 500;
|
||||||
DoCast(me, SPELL_SUBMERGE_0);
|
DoCast(me, SPELL_SUBMERGE_0);
|
||||||
m_uiStage = 2;
|
stage = 2;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
CreatureAI* GetAI(Creature* creature) const
|
||||||
|
{
|
||||||
|
return new boss_acidmawAI(creature);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -603,11 +619,6 @@ class boss_dreadscale : public CreatureScript
|
|||||||
public:
|
public:
|
||||||
boss_dreadscale() : CreatureScript("boss_dreadscale") { }
|
boss_dreadscale() : CreatureScript("boss_dreadscale") { }
|
||||||
|
|
||||||
CreatureAI* GetAI(Creature* pCreature) const
|
|
||||||
{
|
|
||||||
return new boss_dreadscaleAI(pCreature);
|
|
||||||
}
|
|
||||||
|
|
||||||
struct boss_dreadscaleAI : public boss_jormungarAI
|
struct boss_dreadscaleAI : public boss_jormungarAI
|
||||||
{
|
{
|
||||||
boss_dreadscaleAI(Creature* pCreature) : boss_jormungarAI(pCreature) { }
|
boss_dreadscaleAI(Creature* pCreature) : boss_jormungarAI(pCreature) { }
|
||||||
@@ -615,19 +626,23 @@ public:
|
|||||||
void Reset()
|
void Reset()
|
||||||
{
|
{
|
||||||
boss_jormungarAI::Reset();
|
boss_jormungarAI::Reset();
|
||||||
m_uiBiteSpell = SPELL_BURNING_BITE;
|
biteSpell = SPELL_BURNING_BITE;
|
||||||
m_uiSpewSpell = SPELL_MOLTEN_SPEW;
|
spewSpell = SPELL_MOLTEN_SPEW;
|
||||||
m_uiSpitSpell = SPELL_FIRE_SPIT;
|
spitSpell = SPELL_FIRE_SPIT;
|
||||||
m_uiSpraySpell = SPELL_BURNING_SPRAY;
|
spraySpell = SPELL_BURNING_SPRAY;
|
||||||
m_uiModelStationary = MODEL_DREADSCALE_STATIONARY;
|
modelStationary = MODEL_DREADSCALE_STATIONARY;
|
||||||
m_uiModelMobile = MODEL_DREADSCALE_MOBILE;
|
modelMobile = MODEL_DREADSCALE_MOBILE;
|
||||||
m_uiSisterID = NPC_ACIDMAW;
|
otherWormEntry = NPC_ACIDMAW;
|
||||||
|
|
||||||
m_uiSubmergeTimer = 45*IN_MILLISECONDS;
|
submergeTimer = 45 * IN_MILLISECONDS;
|
||||||
m_uiStage = 0;
|
stage = 0;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
CreatureAI* GetAI(Creature* pCreature) const
|
||||||
|
{
|
||||||
|
return new boss_dreadscaleAI(pCreature);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+319
-227
@@ -31,154 +31,174 @@ class instance_trial_of_the_crusader : public InstanceMapScript
|
|||||||
public:
|
public:
|
||||||
instance_trial_of_the_crusader() : InstanceMapScript("instance_trial_of_the_crusader", 649) { }
|
instance_trial_of_the_crusader() : InstanceMapScript("instance_trial_of_the_crusader", 649) { }
|
||||||
|
|
||||||
InstanceScript* GetInstanceScript(InstanceMap* pMap) const
|
|
||||||
{
|
|
||||||
return new instance_trial_of_the_crusader_InstanceMapScript(pMap);
|
|
||||||
}
|
|
||||||
|
|
||||||
struct instance_trial_of_the_crusader_InstanceMapScript : public InstanceScript
|
struct instance_trial_of_the_crusader_InstanceMapScript : public InstanceScript
|
||||||
{
|
{
|
||||||
instance_trial_of_the_crusader_InstanceMapScript(Map* pMap) : InstanceScript(pMap) {Initialize();};
|
instance_trial_of_the_crusader_InstanceMapScript(Map* pMap) : InstanceScript(pMap) {Initialize();};
|
||||||
|
|
||||||
uint32 m_auiEncounter[MAX_ENCOUNTERS];
|
uint32 EncounterStatus[MAX_ENCOUNTERS];
|
||||||
uint32 m_uiTrialCounter;
|
uint32 TrialCounter;
|
||||||
uint32 m_uiEvent;
|
uint32 EventStage;
|
||||||
uint32 m_uiEventTimer;
|
uint32 EventTimer;
|
||||||
uint32 m_uiEventNPCId;
|
uint32 EventNPCId;
|
||||||
uint32 m_uiNorthrendBeasts;
|
uint32 NorthrendBeasts;
|
||||||
std::string m_strInstData;
|
std::string SaveDataBuffer;
|
||||||
bool m_bNeedSave;
|
bool NeedSave;
|
||||||
|
|
||||||
uint32 m_uiDataDamageTwin;
|
uint32 DataDamageTwin;
|
||||||
uint32 m_uiFjolaCasting;
|
uint32 FjolaCasting;
|
||||||
uint32 m_uiEydisCasting;
|
uint32 EydisCasting;
|
||||||
|
|
||||||
uint64 m_uiBarrentGUID;
|
uint64 BarrentGUID;
|
||||||
uint64 m_uiTirionGUID;
|
uint64 TirionGUID;
|
||||||
uint64 m_uiFizzlebangGUID;
|
uint64 FizzlebangGUID;
|
||||||
uint64 m_uiGarroshGUID;
|
uint64 GarroshGUID;
|
||||||
uint64 m_uiVarianGUID;
|
uint64 VarianGUID;
|
||||||
|
|
||||||
uint64 m_uiGormokGUID;
|
uint64 GormokGUID;
|
||||||
uint64 m_uiAcidmawGUID;
|
uint64 AcidmawGUID;
|
||||||
uint64 m_uiDreadscaleGUID;
|
uint64 DreadscaleGUID;
|
||||||
uint64 m_uiIcehowlGUID;
|
uint64 IcehowlGUID;
|
||||||
uint64 m_uiJaraxxusGUID;
|
uint64 JaraxxusGUID;
|
||||||
uint64 m_uiChampionsControllerGUID;
|
uint64 ChampionsControllerGUID;
|
||||||
uint64 m_uiDarkbaneGUID;
|
uint64 DarkbaneGUID;
|
||||||
uint64 m_uiLightbaneGUID;
|
uint64 LightbaneGUID;
|
||||||
uint64 m_uiAnubarakGUID;
|
uint64 AnubarakGUID;
|
||||||
|
|
||||||
uint64 m_uiCrusadersCacheGUID;
|
uint64 CrusadersCacheGUID;
|
||||||
uint64 m_uiFloorGUID;
|
uint64 FloorGUID;
|
||||||
|
|
||||||
uint64 m_uiTributeChestGUID;
|
uint64 TributeChestGUID;
|
||||||
|
|
||||||
uint64 m_uiMainGateDoorGUID;
|
uint64 MainGateDoorGUID;
|
||||||
uint64 m_uiEastPortcullisGUID;
|
uint64 EastPortcullisGUID;
|
||||||
uint64 m_uiWebDoorGUID;
|
uint64 WebDoorGUID;
|
||||||
|
|
||||||
// Achievement stuff
|
// Achievement stuff
|
||||||
uint32 m_uiNotOneButTwoJormungarsTimer;
|
uint32 NotOneButTwoJormungarsTimer;
|
||||||
uint32 m_uiResilienceWillFixItTimer;
|
uint32 ResilienceWillFixItTimer;
|
||||||
uint8 m_uiSnoboldCount;
|
uint8 SnoboldCount;
|
||||||
uint8 m_uiMistressOfPainCount;
|
uint8 MistressOfPainCount;
|
||||||
bool m_bTributeToImmortalityElegible;
|
bool TributeToImmortalityElegible;
|
||||||
std::list<uint32> m_vScarabTimeOfDeath;
|
|
||||||
|
|
||||||
void Initialize()
|
void Initialize()
|
||||||
{
|
{
|
||||||
for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i)
|
for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i)
|
||||||
m_auiEncounter[i] = NOT_STARTED;
|
EncounterStatus[i] = NOT_STARTED;
|
||||||
|
|
||||||
m_uiTrialCounter = 50;
|
TrialCounter = 50;
|
||||||
m_uiEvent = 0;
|
EventStage = 0;
|
||||||
|
|
||||||
m_uiTributeChestGUID = 0;
|
TributeChestGUID = 0;
|
||||||
m_uiDataDamageTwin = 0;
|
DataDamageTwin = 0;
|
||||||
|
|
||||||
m_uiMainGateDoorGUID = 0;
|
MainGateDoorGUID = 0;
|
||||||
m_uiEastPortcullisGUID = 0;
|
EastPortcullisGUID = 0;
|
||||||
m_uiWebDoorGUID = 0;
|
WebDoorGUID = 0;
|
||||||
|
|
||||||
m_uiNorthrendBeasts = NOT_STARTED;
|
NorthrendBeasts = NOT_STARTED;
|
||||||
|
|
||||||
m_uiEventTimer = 1000;
|
EventTimer = 1000;
|
||||||
|
|
||||||
m_uiNotOneButTwoJormungarsTimer = 0;
|
NotOneButTwoJormungarsTimer = 0;
|
||||||
m_uiResilienceWillFixItTimer = 0;
|
ResilienceWillFixItTimer = 0;
|
||||||
m_uiSnoboldCount = 0;
|
SnoboldCount = 0;
|
||||||
m_uiMistressOfPainCount = 0;
|
MistressOfPainCount = 0;
|
||||||
m_bTributeToImmortalityElegible = true;
|
TributeToImmortalityElegible = true;
|
||||||
|
|
||||||
m_bNeedSave = false;
|
NeedSave = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IsEncounterInProgress() const
|
bool IsEncounterInProgress() const
|
||||||
{
|
{
|
||||||
for (uint8 i = 0; i < MAX_ENCOUNTERS ; ++i)
|
for (uint8 i = 0; i < MAX_ENCOUNTERS ; ++i)
|
||||||
if (m_auiEncounter[i] == IN_PROGRESS)
|
if (EncounterStatus[i] == IN_PROGRESS)
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnPlayerEnter(Player *m_player)
|
void OnPlayerEnter(Player* player)
|
||||||
{
|
{
|
||||||
if (instance->IsHeroic())
|
if (instance->IsHeroic())
|
||||||
{
|
{
|
||||||
m_player->SendUpdateWorldState(UPDATE_STATE_UI_SHOW,1);
|
player->SendUpdateWorldState(UPDATE_STATE_UI_SHOW, 1);
|
||||||
m_player->SendUpdateWorldState(UPDATE_STATE_UI_COUNT, GetData(TYPE_COUNTER));
|
player->SendUpdateWorldState(UPDATE_STATE_UI_COUNT, GetData(TYPE_COUNTER));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IsRaidWiped()
|
bool IsRaidWiped()
|
||||||
{
|
{
|
||||||
Map::PlayerList const &players = instance->GetPlayers();
|
Map::PlayerList const &players = instance->GetPlayers();
|
||||||
|
|
||||||
for (Map::PlayerList::const_iterator i = players.begin(); i != players.end(); ++i)
|
for (Map::PlayerList::const_iterator i = players.begin(); i != players.end(); ++i)
|
||||||
{
|
if (Player* player = i->getSource())
|
||||||
if (Player* pPlayer = i->getSource())
|
if (player->isAlive())
|
||||||
{
|
|
||||||
if (pPlayer->isAlive())
|
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpenDoor(uint64 guid)
|
void OpenDoor(uint64 guid)
|
||||||
{
|
{
|
||||||
if (!guid) return;
|
if (!guid)
|
||||||
GameObject* go = instance->GetGameObject(guid);
|
return;
|
||||||
if (go) go->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
|
if (GameObject* go = instance->GetGameObject(guid))
|
||||||
|
go->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CloseDoor(uint64 guid)
|
void CloseDoor(uint64 guid)
|
||||||
{
|
{
|
||||||
if (!guid) return;
|
if (!guid)
|
||||||
GameObject* go = instance->GetGameObject(guid);
|
return;
|
||||||
if (go) go->SetGoState(GO_STATE_READY);
|
if (GameObject* go = instance->GetGameObject(guid))
|
||||||
|
go->SetGoState(GO_STATE_READY);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnCreatureCreate(Creature* creature)
|
void OnCreatureCreate(Creature* creature)
|
||||||
{
|
{
|
||||||
switch (creature->GetEntry())
|
switch (creature->GetEntry())
|
||||||
{
|
{
|
||||||
case NPC_BARRENT: m_uiBarrentGUID = creature->GetGUID(); break;
|
case NPC_BARRENT:
|
||||||
case NPC_TIRION: m_uiTirionGUID = creature->GetGUID(); break;
|
BarrentGUID = creature->GetGUID();
|
||||||
case NPC_FIZZLEBANG: m_uiFizzlebangGUID = creature->GetGUID(); break;
|
break;
|
||||||
case NPC_GARROSH: m_uiGarroshGUID = creature->GetGUID(); break;
|
case NPC_TIRION:
|
||||||
case NPC_VARIAN: m_uiVarianGUID = creature->GetGUID(); break;
|
TirionGUID = creature->GetGUID();
|
||||||
|
break;
|
||||||
|
case NPC_FIZZLEBANG:
|
||||||
|
FizzlebangGUID = creature->GetGUID();
|
||||||
|
break;
|
||||||
|
case NPC_GARROSH:
|
||||||
|
GarroshGUID = creature->GetGUID();
|
||||||
|
break;
|
||||||
|
case NPC_VARIAN:
|
||||||
|
VarianGUID = creature->GetGUID();
|
||||||
|
break;
|
||||||
|
|
||||||
case NPC_GORMOK: m_uiGormokGUID = creature->GetGUID(); break;
|
case NPC_GORMOK:
|
||||||
case NPC_ACIDMAW: m_uiAcidmawGUID = creature->GetGUID(); break;
|
GormokGUID = creature->GetGUID();
|
||||||
case NPC_DREADSCALE: m_uiDreadscaleGUID = creature->GetGUID(); break;
|
break;
|
||||||
case NPC_ICEHOWL: m_uiIcehowlGUID = creature->GetGUID(); break;
|
case NPC_ACIDMAW:
|
||||||
case NPC_JARAXXUS: m_uiJaraxxusGUID = creature->GetGUID(); break;
|
AcidmawGUID = creature->GetGUID();
|
||||||
case NPC_CHAMPIONS_CONTROLLER: m_uiChampionsControllerGUID = creature->GetGUID(); break;
|
break;
|
||||||
case NPC_DARKBANE: m_uiDarkbaneGUID = creature->GetGUID(); break;
|
case NPC_DREADSCALE:
|
||||||
case NPC_LIGHTBANE: m_uiLightbaneGUID = creature->GetGUID(); break;
|
DreadscaleGUID = creature->GetGUID();
|
||||||
case NPC_ANUBARAK: m_uiAnubarakGUID = creature->GetGUID(); break;
|
break;
|
||||||
|
case NPC_ICEHOWL:
|
||||||
|
IcehowlGUID = creature->GetGUID();
|
||||||
|
break;
|
||||||
|
case NPC_JARAXXUS:
|
||||||
|
JaraxxusGUID = creature->GetGUID();
|
||||||
|
break;
|
||||||
|
case NPC_CHAMPIONS_CONTROLLER:
|
||||||
|
ChampionsControllerGUID = creature->GetGUID();
|
||||||
|
break;
|
||||||
|
case NPC_DARKBANE:
|
||||||
|
DarkbaneGUID = creature->GetGUID();
|
||||||
|
break;
|
||||||
|
case NPC_LIGHTBANE:
|
||||||
|
LightbaneGUID = creature->GetGUID();
|
||||||
|
break;
|
||||||
|
case NPC_ANUBARAK:
|
||||||
|
AnubarakGUID = creature->GetGUID();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,24 +208,32 @@ public:
|
|||||||
{
|
{
|
||||||
case GO_CRUSADERS_CACHE_10:
|
case GO_CRUSADERS_CACHE_10:
|
||||||
if (instance->GetSpawnMode() == RAID_DIFFICULTY_10MAN_NORMAL)
|
if (instance->GetSpawnMode() == RAID_DIFFICULTY_10MAN_NORMAL)
|
||||||
m_uiCrusadersCacheGUID = go->GetGUID();
|
CrusadersCacheGUID = go->GetGUID();
|
||||||
break;
|
break;
|
||||||
case GO_CRUSADERS_CACHE_25:
|
case GO_CRUSADERS_CACHE_25:
|
||||||
if (instance->GetSpawnMode() == RAID_DIFFICULTY_25MAN_NORMAL)
|
if (instance->GetSpawnMode() == RAID_DIFFICULTY_25MAN_NORMAL)
|
||||||
m_uiCrusadersCacheGUID = go->GetGUID();
|
CrusadersCacheGUID = go->GetGUID();
|
||||||
break;
|
break;
|
||||||
case GO_CRUSADERS_CACHE_10_H:
|
case GO_CRUSADERS_CACHE_10_H:
|
||||||
if (instance->GetSpawnMode() == RAID_DIFFICULTY_10MAN_HEROIC)
|
if (instance->GetSpawnMode() == RAID_DIFFICULTY_10MAN_HEROIC)
|
||||||
m_uiCrusadersCacheGUID = go->GetGUID();
|
CrusadersCacheGUID = go->GetGUID();
|
||||||
break;
|
break;
|
||||||
case GO_CRUSADERS_CACHE_25_H:
|
case GO_CRUSADERS_CACHE_25_H:
|
||||||
if (instance->GetSpawnMode() == RAID_DIFFICULTY_25MAN_HEROIC)
|
if (instance->GetSpawnMode() == RAID_DIFFICULTY_25MAN_HEROIC)
|
||||||
m_uiCrusadersCacheGUID = go->GetGUID();
|
CrusadersCacheGUID = go->GetGUID();
|
||||||
|
break;
|
||||||
|
case GO_ARGENT_COLISEUM_FLOOR:
|
||||||
|
FloorGUID = go->GetGUID();
|
||||||
|
break;
|
||||||
|
case GO_MAIN_GATE_DOOR:
|
||||||
|
MainGateDoorGUID = go->GetGUID();
|
||||||
|
break;
|
||||||
|
case GO_EAST_PORTCULLIS:
|
||||||
|
EastPortcullisGUID = go->GetGUID();
|
||||||
|
break;
|
||||||
|
case GO_WEB_DOOR:
|
||||||
|
WebDoorGUID = go->GetGUID();
|
||||||
break;
|
break;
|
||||||
case GO_ARGENT_COLISEUM_FLOOR: m_uiFloorGUID = go->GetGUID(); break;
|
|
||||||
case GO_MAIN_GATE_DOOR: m_uiMainGateDoorGUID = go->GetGUID(); break;
|
|
||||||
case GO_EAST_PORTCULLIS: m_uiEastPortcullisGUID = go->GetGUID(); break;
|
|
||||||
case GO_WEB_DOOR: m_uiWebDoorGUID = go->GetGUID(); break;
|
|
||||||
|
|
||||||
case GO_TRIBUTE_CHEST_10H_25:
|
case GO_TRIBUTE_CHEST_10H_25:
|
||||||
case GO_TRIBUTE_CHEST_10H_45:
|
case GO_TRIBUTE_CHEST_10H_45:
|
||||||
@@ -215,117 +243,134 @@ public:
|
|||||||
case GO_TRIBUTE_CHEST_25H_45:
|
case GO_TRIBUTE_CHEST_25H_45:
|
||||||
case GO_TRIBUTE_CHEST_25H_50:
|
case GO_TRIBUTE_CHEST_25H_50:
|
||||||
case GO_TRIBUTE_CHEST_25H_99:
|
case GO_TRIBUTE_CHEST_25H_99:
|
||||||
m_uiTributeChestGUID = go->GetGUID(); break;
|
TributeChestGUID = go->GetGUID();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetData(uint32 uiType, uint32 uiData)
|
void SetData(uint32 type, uint32 data)
|
||||||
{
|
{
|
||||||
switch(uiType)
|
switch (type)
|
||||||
{
|
{
|
||||||
case TYPE_JARAXXUS:
|
case TYPE_JARAXXUS:
|
||||||
if (uiData == DONE) m_uiEvent = 2000;
|
if (data == DONE)
|
||||||
|
EventStage = 2000;
|
||||||
break;
|
break;
|
||||||
case TYPE_CRUSADERS:
|
case TYPE_CRUSADERS:
|
||||||
switch (uiData)
|
switch (data)
|
||||||
{
|
{
|
||||||
case IN_PROGRESS: m_uiResilienceWillFixItTimer = 0; break;
|
case IN_PROGRESS:
|
||||||
|
ResilienceWillFixItTimer = 0;
|
||||||
|
break;
|
||||||
case SPECIAL: //Means the first blood
|
case SPECIAL: //Means the first blood
|
||||||
m_uiResilienceWillFixItTimer = 60*IN_MILLISECONDS;
|
ResilienceWillFixItTimer = 60*IN_MILLISECONDS;
|
||||||
uiData = IN_PROGRESS;
|
data = IN_PROGRESS;
|
||||||
break;
|
break;
|
||||||
case DONE:
|
case DONE:
|
||||||
DoUpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, SPELL_DEFEAT_FACTION_CHAMPIONS);
|
DoUpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, SPELL_DEFEAT_FACTION_CHAMPIONS);
|
||||||
if (m_uiResilienceWillFixItTimer > 0)
|
if (ResilienceWillFixItTimer > 0)
|
||||||
DoUpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, SPELL_CHAMPIONS_KILLED_IN_MINUTE);
|
DoUpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, SPELL_CHAMPIONS_KILLED_IN_MINUTE);
|
||||||
if (GameObject* pChest = instance->GetGameObject(m_uiCrusadersCacheGUID))
|
DoRespawnGameObject(CrusadersCacheGUID, 7*DAY);
|
||||||
if (pChest && !pChest->isSpawned())
|
EventStage = 3100;
|
||||||
pChest->SetRespawnTime(7*DAY);
|
|
||||||
m_uiEvent = 3100;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case TYPE_VALKIRIES:
|
case TYPE_VALKIRIES:
|
||||||
switch (uiData)
|
switch (data)
|
||||||
{
|
{
|
||||||
case FAIL:
|
case FAIL:
|
||||||
if (m_auiEncounter[TYPE_VALKIRIES] == NOT_STARTED) uiData = NOT_STARTED;
|
if (EncounterStatus[TYPE_VALKIRIES] == NOT_STARTED)
|
||||||
|
data = NOT_STARTED;
|
||||||
break;
|
break;
|
||||||
case SPECIAL:
|
case SPECIAL:
|
||||||
if (m_auiEncounter[TYPE_VALKIRIES] == SPECIAL) uiData = DONE;
|
if (EncounterStatus[TYPE_VALKIRIES] == SPECIAL)
|
||||||
|
data = DONE;
|
||||||
break;
|
break;
|
||||||
case DONE:
|
case DONE:
|
||||||
if (instance->GetPlayers().getFirst()->getSource()->GetTeam() == ALLIANCE)
|
if (instance->GetPlayers().getFirst()->getSource()->GetTeam() == ALLIANCE)
|
||||||
m_uiEvent = 4020;
|
EventStage = 4020;
|
||||||
else
|
else
|
||||||
m_uiEvent = 4030;
|
EventStage = 4030;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case TYPE_ANUBARAK:
|
case TYPE_ANUBARAK:
|
||||||
switch (uiData)
|
switch (data)
|
||||||
{
|
{
|
||||||
case DONE:
|
case DONE:
|
||||||
m_uiEvent = 6000;
|
EventStage = 6000;
|
||||||
break;
|
break;
|
||||||
case SPECIAL:
|
case SPECIAL:
|
||||||
uint32 tributeChest = 0;
|
uint32 tributeChest = 0;
|
||||||
if (instance->GetSpawnMode() == RAID_DIFFICULTY_10MAN_HEROIC)
|
if (instance->GetSpawnMode() == RAID_DIFFICULTY_10MAN_HEROIC)
|
||||||
{
|
{
|
||||||
if (m_uiTrialCounter >= 50)
|
if (TrialCounter >= 50)
|
||||||
tributeChest = GO_TRIBUTE_CHEST_10H_99;
|
tributeChest = GO_TRIBUTE_CHEST_10H_99;
|
||||||
else
|
else
|
||||||
if (m_uiTrialCounter >= 45)
|
if (TrialCounter >= 45)
|
||||||
tributeChest = GO_TRIBUTE_CHEST_10H_50;
|
tributeChest = GO_TRIBUTE_CHEST_10H_50;
|
||||||
else
|
else
|
||||||
if (m_uiTrialCounter >= 25)
|
if (TrialCounter >= 25)
|
||||||
tributeChest = GO_TRIBUTE_CHEST_10H_45;
|
tributeChest = GO_TRIBUTE_CHEST_10H_45;
|
||||||
else
|
else
|
||||||
tributeChest = GO_TRIBUTE_CHEST_10H_25;
|
tributeChest = GO_TRIBUTE_CHEST_10H_25;
|
||||||
}
|
}
|
||||||
else if (instance->GetSpawnMode() == RAID_DIFFICULTY_25MAN_HEROIC)
|
else if (instance->GetSpawnMode() == RAID_DIFFICULTY_25MAN_HEROIC)
|
||||||
{
|
{
|
||||||
if (m_uiTrialCounter >= 50)
|
if (TrialCounter >= 50)
|
||||||
tributeChest = GO_TRIBUTE_CHEST_25H_99;
|
tributeChest = GO_TRIBUTE_CHEST_25H_99;
|
||||||
else
|
else
|
||||||
if (m_uiTrialCounter >= 45)
|
if (TrialCounter >= 45)
|
||||||
tributeChest = GO_TRIBUTE_CHEST_25H_50;
|
tributeChest = GO_TRIBUTE_CHEST_25H_50;
|
||||||
else
|
else
|
||||||
if (m_uiTrialCounter >= 25)
|
if (TrialCounter >= 25)
|
||||||
tributeChest = GO_TRIBUTE_CHEST_25H_45;
|
tributeChest = GO_TRIBUTE_CHEST_25H_45;
|
||||||
else
|
else
|
||||||
tributeChest = GO_TRIBUTE_CHEST_25H_25;
|
tributeChest = GO_TRIBUTE_CHEST_25H_25;
|
||||||
}
|
}
|
||||||
if (tributeChest)
|
if (tributeChest)
|
||||||
if (Creature* pTirion = instance->GetCreature(m_uiTirionGUID))
|
if (Creature* tirion = instance->GetCreature(TirionGUID))
|
||||||
if (GameObject* pChest = pTirion->SummonGameObject(tributeChest,805.62f,134.87f,142.16f,3.27f,0,0,0,0,90000000))
|
if (GameObject* chest = tirion->SummonGameObject(tributeChest, 805.62f, 134.87f, 142.16f, 3.27f, 0, 0, 0, 0, 90000000))
|
||||||
pChest->SetRespawnTime(pChest->GetRespawnDelay());
|
chest->SetRespawnTime(chest->GetRespawnDelay());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case TYPE_COUNTER: m_uiTrialCounter = uiData; uiData = DONE; break;
|
case TYPE_COUNTER:
|
||||||
case TYPE_EVENT: m_uiEvent = uiData; uiData = NOT_STARTED; break;
|
TrialCounter = data;
|
||||||
case TYPE_EVENT_TIMER: m_uiEventTimer = uiData; uiData = NOT_STARTED; break;
|
data = DONE;
|
||||||
|
break;
|
||||||
|
case TYPE_EVENT:
|
||||||
|
EventStage = data;
|
||||||
|
data = NOT_STARTED;
|
||||||
|
break;
|
||||||
|
case TYPE_EVENT_TIMER:
|
||||||
|
EventTimer = data;
|
||||||
|
data = NOT_STARTED;
|
||||||
|
break;
|
||||||
case TYPE_NORTHREND_BEASTS:
|
case TYPE_NORTHREND_BEASTS:
|
||||||
m_uiNorthrendBeasts = uiData;
|
NorthrendBeasts = data;
|
||||||
switch (uiData)
|
switch (data)
|
||||||
{
|
{
|
||||||
case GORMOK_DONE:
|
case GORMOK_DONE:
|
||||||
m_uiEvent = 200;
|
EventStage = 200;
|
||||||
SetData(TYPE_NORTHREND_BEASTS, IN_PROGRESS);
|
SetData(TYPE_NORTHREND_BEASTS, IN_PROGRESS);
|
||||||
SetData(TYPE_BEASTS, IN_PROGRESS);
|
SetData(TYPE_BEASTS, IN_PROGRESS);
|
||||||
break;
|
break;
|
||||||
case SNAKES_IN_PROGRESS: m_uiNotOneButTwoJormungarsTimer = 0; break;
|
case SNAKES_IN_PROGRESS:
|
||||||
case SNAKES_SPECIAL: m_uiNotOneButTwoJormungarsTimer = 10*IN_MILLISECONDS; break;
|
NotOneButTwoJormungarsTimer = 0;
|
||||||
|
break;
|
||||||
|
case SNAKES_SPECIAL:
|
||||||
|
NotOneButTwoJormungarsTimer = 10*IN_MILLISECONDS;
|
||||||
|
break;
|
||||||
case SNAKES_DONE:
|
case SNAKES_DONE:
|
||||||
if (m_uiNotOneButTwoJormungarsTimer > 0)
|
if (NotOneButTwoJormungarsTimer > 0)
|
||||||
DoUpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, SPELL_WORMS_KILLED_IN_10_SECONDS);
|
DoUpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, SPELL_WORMS_KILLED_IN_10_SECONDS);
|
||||||
m_uiEvent = 300;
|
EventStage = 300;
|
||||||
SetData(TYPE_NORTHREND_BEASTS, IN_PROGRESS);
|
SetData(TYPE_NORTHREND_BEASTS, IN_PROGRESS);
|
||||||
SetData(TYPE_BEASTS, IN_PROGRESS);
|
SetData(TYPE_BEASTS, IN_PROGRESS);
|
||||||
break;
|
break;
|
||||||
case ICEHOWL_DONE:
|
case ICEHOWL_DONE:
|
||||||
m_uiEvent = 400;
|
EventStage = 400;
|
||||||
SetData(TYPE_NORTHREND_BEASTS, DONE);
|
SetData(TYPE_NORTHREND_BEASTS, DONE);
|
||||||
SetData(TYPE_BEASTS, DONE);
|
SetData(TYPE_BEASTS, DONE);
|
||||||
break;
|
break;
|
||||||
@@ -334,102 +379,139 @@ public:
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case DATA_HEALTH_TWIN_SHARED: m_uiDataDamageTwin = uiData; uiData = NOT_STARTED; break;
|
case DATA_HEALTH_TWIN_SHARED:
|
||||||
|
DataDamageTwin = data;
|
||||||
|
data = NOT_STARTED;
|
||||||
|
break;
|
||||||
|
|
||||||
//Achievements
|
//Achievements
|
||||||
case DATA_SNOBOLD_COUNT:
|
case DATA_SNOBOLD_COUNT:
|
||||||
if (uiData == INCREASE)
|
if (data == INCREASE)
|
||||||
++m_uiSnoboldCount;
|
++SnoboldCount;
|
||||||
else if (uiData == DECREASE)
|
else if (data == DECREASE)
|
||||||
--m_uiSnoboldCount;
|
--SnoboldCount;
|
||||||
break;
|
break;
|
||||||
case DATA_MISTRESS_OF_PAIN_COUNT:
|
case DATA_MISTRESS_OF_PAIN_COUNT:
|
||||||
if (uiData == INCREASE)
|
if (data == INCREASE)
|
||||||
++m_uiMistressOfPainCount;
|
++MistressOfPainCount;
|
||||||
else if (uiData == DECREASE)
|
else if (data == DECREASE)
|
||||||
--m_uiMistressOfPainCount;
|
--MistressOfPainCount;
|
||||||
break;
|
break;
|
||||||
case DATA_TRIBUTE_TO_IMMORTALITY_ELEGIBLE:
|
case DATA_TRIBUTE_TO_IMMORTALITY_ELEGIBLE:
|
||||||
m_bTributeToImmortalityElegible = false;
|
TributeToImmortalityElegible = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (IsEncounterInProgress())
|
if (IsEncounterInProgress())
|
||||||
{
|
{
|
||||||
CloseDoor(GetData64(GO_EAST_PORTCULLIS));
|
CloseDoor(GetData64(GO_EAST_PORTCULLIS));
|
||||||
CloseDoor(GetData64(GO_WEB_DOOR));
|
CloseDoor(GetData64(GO_WEB_DOOR));
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
OpenDoor(GetData64(GO_EAST_PORTCULLIS));
|
OpenDoor(GetData64(GO_EAST_PORTCULLIS));
|
||||||
OpenDoor(GetData64(GO_WEB_DOOR));
|
OpenDoor(GetData64(GO_WEB_DOOR));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (uiType < MAX_ENCOUNTERS)
|
if (type < MAX_ENCOUNTERS)
|
||||||
{
|
{
|
||||||
sLog->outBasic("[ToCr] m_auiEncounter[uiType %u] %u = uiData %u;",uiType,m_auiEncounter[uiType],uiData);
|
sLog->outDetail("[ToCr] EncounterStatus[type %u] %u = data %u;", type, EncounterStatus[type], data);
|
||||||
if (uiData == FAIL)
|
if (data == FAIL)
|
||||||
{
|
{
|
||||||
if (IsRaidWiped())
|
if (IsRaidWiped())
|
||||||
{
|
{
|
||||||
--m_uiTrialCounter;
|
--TrialCounter;
|
||||||
m_bNeedSave = true;
|
NeedSave = true;
|
||||||
m_uiEvent = (uiType == TYPE_BEASTS? 666 : 0);
|
EventStage = (type == TYPE_BEASTS ? 666 : 0);
|
||||||
}
|
}
|
||||||
uiData = NOT_STARTED;
|
data = NOT_STARTED;
|
||||||
}
|
}
|
||||||
m_auiEncounter[uiType] = uiData;
|
|
||||||
|
|
||||||
if (uiData == DONE || m_bNeedSave == true)
|
EncounterStatus[type] = data;
|
||||||
|
|
||||||
|
if (data == DONE || NeedSave == true)
|
||||||
{
|
{
|
||||||
if (Unit* pAnnouncer = instance->GetCreature(GetData64(NPC_BARRENT)))
|
if (Unit* announcer = instance->GetCreature(GetData64(NPC_BARRENT)))
|
||||||
pAnnouncer->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
|
announcer->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
|
||||||
Save();
|
Save();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64 GetData64(uint32 uiData)
|
uint64 GetData64(uint32 type)
|
||||||
{
|
{
|
||||||
switch(uiData)
|
switch (type)
|
||||||
{
|
{
|
||||||
case NPC_BARRENT: return m_uiBarrentGUID;
|
case NPC_BARRENT:
|
||||||
case NPC_TIRION: return m_uiTirionGUID;
|
return BarrentGUID;
|
||||||
case NPC_FIZZLEBANG: return m_uiFizzlebangGUID;
|
case NPC_TIRION:
|
||||||
case NPC_GARROSH: return m_uiGarroshGUID;
|
return TirionGUID;
|
||||||
case NPC_VARIAN: return m_uiVarianGUID;
|
case NPC_FIZZLEBANG:
|
||||||
|
return FizzlebangGUID;
|
||||||
|
case NPC_GARROSH:
|
||||||
|
return GarroshGUID;
|
||||||
|
case NPC_VARIAN:
|
||||||
|
return VarianGUID;
|
||||||
|
|
||||||
case NPC_GORMOK: return m_uiGormokGUID;
|
case NPC_GORMOK:
|
||||||
case NPC_ACIDMAW: return m_uiAcidmawGUID;
|
return GormokGUID;
|
||||||
case NPC_DREADSCALE: return m_uiDreadscaleGUID;
|
case NPC_ACIDMAW:
|
||||||
case NPC_ICEHOWL: return m_uiIcehowlGUID;
|
return AcidmawGUID;
|
||||||
case NPC_JARAXXUS: return m_uiJaraxxusGUID;
|
case NPC_DREADSCALE:
|
||||||
case NPC_CHAMPIONS_CONTROLLER: return m_uiChampionsControllerGUID;
|
return DreadscaleGUID;
|
||||||
case NPC_DARKBANE: return m_uiDarkbaneGUID;
|
case NPC_ICEHOWL:
|
||||||
case NPC_LIGHTBANE: return m_uiLightbaneGUID;
|
return IcehowlGUID;
|
||||||
case NPC_ANUBARAK: return m_uiAnubarakGUID;
|
case NPC_JARAXXUS:
|
||||||
|
return JaraxxusGUID;
|
||||||
|
case NPC_CHAMPIONS_CONTROLLER:
|
||||||
|
return ChampionsControllerGUID;
|
||||||
|
case NPC_DARKBANE:
|
||||||
|
return DarkbaneGUID;
|
||||||
|
case NPC_LIGHTBANE:
|
||||||
|
return LightbaneGUID;
|
||||||
|
case NPC_ANUBARAK:
|
||||||
|
return AnubarakGUID;
|
||||||
|
|
||||||
case GO_ARGENT_COLISEUM_FLOOR: return m_uiFloorGUID;
|
case GO_ARGENT_COLISEUM_FLOOR:
|
||||||
case GO_MAIN_GATE_DOOR: return m_uiMainGateDoorGUID;
|
return FloorGUID;
|
||||||
case GO_EAST_PORTCULLIS: return m_uiEastPortcullisGUID;
|
case GO_MAIN_GATE_DOOR:
|
||||||
case GO_WEB_DOOR: return m_uiWebDoorGUID;
|
return MainGateDoorGUID;
|
||||||
|
case GO_EAST_PORTCULLIS:
|
||||||
|
return EastPortcullisGUID;
|
||||||
|
case GO_WEB_DOOR:
|
||||||
|
return WebDoorGUID;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32 GetData(uint32 uiType)
|
uint32 GetData(uint32 type)
|
||||||
{
|
{
|
||||||
switch(uiType)
|
switch (type)
|
||||||
{
|
{
|
||||||
case TYPE_BEASTS: return m_auiEncounter[TYPE_BEASTS];
|
case TYPE_BEASTS:
|
||||||
case TYPE_JARAXXUS: return m_auiEncounter[TYPE_JARAXXUS];
|
return EncounterStatus[TYPE_BEASTS];
|
||||||
case TYPE_CRUSADERS: return m_auiEncounter[TYPE_CRUSADERS];
|
case TYPE_JARAXXUS:
|
||||||
case TYPE_VALKIRIES: return m_auiEncounter[TYPE_VALKIRIES];
|
return EncounterStatus[TYPE_JARAXXUS];
|
||||||
case TYPE_LICH_KING: return m_auiEncounter[TYPE_LICH_KING];
|
case TYPE_CRUSADERS:
|
||||||
case TYPE_ANUBARAK: return m_auiEncounter[TYPE_ANUBARAK];
|
return EncounterStatus[TYPE_CRUSADERS];
|
||||||
case TYPE_COUNTER: return m_uiTrialCounter;
|
case TYPE_VALKIRIES:
|
||||||
case TYPE_EVENT: return m_uiEvent;
|
return EncounterStatus[TYPE_VALKIRIES];
|
||||||
case TYPE_NORTHREND_BEASTS: return m_uiNorthrendBeasts;
|
case TYPE_LICH_KING:
|
||||||
case TYPE_EVENT_TIMER: return m_uiEventTimer;
|
return EncounterStatus[TYPE_LICH_KING];
|
||||||
|
case TYPE_ANUBARAK:
|
||||||
|
return EncounterStatus[TYPE_ANUBARAK];
|
||||||
|
case TYPE_COUNTER:
|
||||||
|
return TrialCounter;
|
||||||
|
case TYPE_EVENT:
|
||||||
|
return EventStage;
|
||||||
|
case TYPE_NORTHREND_BEASTS:
|
||||||
|
return NorthrendBeasts;
|
||||||
|
case TYPE_EVENT_TIMER:
|
||||||
|
return EventTimer;
|
||||||
case TYPE_EVENT_NPC:
|
case TYPE_EVENT_NPC:
|
||||||
switch (m_uiEvent)
|
switch (EventStage)
|
||||||
{
|
{
|
||||||
case 110:
|
case 110:
|
||||||
case 140:
|
case 140:
|
||||||
@@ -470,7 +552,7 @@ public:
|
|||||||
case 6000:
|
case 6000:
|
||||||
case 6005:
|
case 6005:
|
||||||
case 6010:
|
case 6010:
|
||||||
m_uiEventNPCId = NPC_TIRION;
|
EventNPCId = NPC_TIRION;
|
||||||
break;
|
break;
|
||||||
case 5010:
|
case 5010:
|
||||||
case 5030:
|
case 5030:
|
||||||
@@ -479,7 +561,7 @@ public:
|
|||||||
case 5060:
|
case 5060:
|
||||||
case 5070:
|
case 5070:
|
||||||
case 5080:
|
case 5080:
|
||||||
m_uiEventNPCId = NPC_LICH_KING_1;
|
EventNPCId = NPC_LICH_KING_1;
|
||||||
break;
|
break;
|
||||||
case 120:
|
case 120:
|
||||||
case 122:
|
case 122:
|
||||||
@@ -488,7 +570,7 @@ public:
|
|||||||
case 3051:
|
case 3051:
|
||||||
case 3071:
|
case 3071:
|
||||||
case 4020:
|
case 4020:
|
||||||
m_uiEventNPCId = NPC_VARIAN;
|
EventNPCId = NPC_VARIAN;
|
||||||
break;
|
break;
|
||||||
case 130:
|
case 130:
|
||||||
case 132:
|
case 132:
|
||||||
@@ -497,7 +579,7 @@ public:
|
|||||||
case 3070:
|
case 3070:
|
||||||
case 3081:
|
case 3081:
|
||||||
case 4030:
|
case 4030:
|
||||||
m_uiEventNPCId = NPC_GARROSH;
|
EventNPCId = NPC_GARROSH;
|
||||||
break;
|
break;
|
||||||
case 1110:
|
case 1110:
|
||||||
case 1120:
|
case 1120:
|
||||||
@@ -509,32 +591,38 @@ public:
|
|||||||
case 1142:
|
case 1142:
|
||||||
case 1144:
|
case 1144:
|
||||||
case 1150:
|
case 1150:
|
||||||
m_uiEventNPCId = NPC_FIZZLEBANG;
|
EventNPCId = NPC_FIZZLEBANG;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
m_uiEventNPCId = NPC_TIRION;
|
EventNPCId = NPC_TIRION;
|
||||||
break;
|
break;
|
||||||
};
|
};
|
||||||
return m_uiEventNPCId;
|
return EventNPCId;
|
||||||
case DATA_HEALTH_TWIN_SHARED: return m_uiDataDamageTwin;
|
case DATA_HEALTH_TWIN_SHARED:
|
||||||
|
return DataDamageTwin;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Update(uint32 uiDiff)
|
void Update(uint32 diff)
|
||||||
{
|
{
|
||||||
if (GetData(TYPE_NORTHREND_BEASTS) == SNAKES_SPECIAL && m_uiNotOneButTwoJormungarsTimer)
|
if (GetData(TYPE_NORTHREND_BEASTS) == SNAKES_SPECIAL && NotOneButTwoJormungarsTimer)
|
||||||
{
|
{
|
||||||
if (m_uiNotOneButTwoJormungarsTimer <= uiDiff)
|
if (NotOneButTwoJormungarsTimer <= diff)
|
||||||
m_uiNotOneButTwoJormungarsTimer = 0;
|
NotOneButTwoJormungarsTimer = 0;
|
||||||
else m_uiNotOneButTwoJormungarsTimer -= uiDiff;
|
else
|
||||||
|
NotOneButTwoJormungarsTimer -= diff;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (GetData(TYPE_CRUSADERS) == IN_PROGRESS && m_uiResilienceWillFixItTimer)
|
if (GetData(TYPE_CRUSADERS) == IN_PROGRESS && ResilienceWillFixItTimer)
|
||||||
{
|
{
|
||||||
if (m_uiResilienceWillFixItTimer <= uiDiff)
|
if (ResilienceWillFixItTimer <= diff)
|
||||||
m_uiResilienceWillFixItTimer = 0;
|
ResilienceWillFixItTimer = 0;
|
||||||
else m_uiResilienceWillFixItTimer -= uiDiff;
|
else
|
||||||
|
ResilienceWillFixItTimer -= diff;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -545,19 +633,19 @@ public:
|
|||||||
std::ostringstream saveStream;
|
std::ostringstream saveStream;
|
||||||
|
|
||||||
for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i)
|
for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i)
|
||||||
saveStream << m_auiEncounter[i] << " ";
|
saveStream << EncounterStatus[i] << " ";
|
||||||
|
|
||||||
saveStream << m_uiTrialCounter;
|
saveStream << TrialCounter;
|
||||||
m_strInstData = saveStream.str();
|
SaveDataBuffer = saveStream.str();
|
||||||
|
|
||||||
SaveToDB();
|
SaveToDB();
|
||||||
OUT_SAVE_INST_DATA_COMPLETE;
|
OUT_SAVE_INST_DATA_COMPLETE;
|
||||||
m_bNeedSave = false;
|
NeedSave = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string GetSaveData()
|
std::string GetSaveData()
|
||||||
{
|
{
|
||||||
return m_strInstData;
|
return SaveDataBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Load(const char* strIn)
|
void Load(const char* strIn)
|
||||||
@@ -574,13 +662,14 @@ public:
|
|||||||
|
|
||||||
for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i)
|
for (uint8 i = 0; i < MAX_ENCOUNTERS; ++i)
|
||||||
{
|
{
|
||||||
loadStream >> m_auiEncounter[i];
|
loadStream >> EncounterStatus[i];
|
||||||
|
|
||||||
if (m_auiEncounter[i] == IN_PROGRESS)
|
if (EncounterStatus[i] == IN_PROGRESS)
|
||||||
m_auiEncounter[i] = NOT_STARTED;
|
EncounterStatus[i] = NOT_STARTED;
|
||||||
}
|
}
|
||||||
loadStream >> m_uiTrialCounter;
|
|
||||||
m_uiEvent = 0;
|
loadStream >> TrialCounter;
|
||||||
|
EventStage = 0;
|
||||||
|
|
||||||
OUT_LOAD_INST_DATA_COMPLETE;
|
OUT_LOAD_INST_DATA_COMPLETE;
|
||||||
}
|
}
|
||||||
@@ -591,28 +680,28 @@ public:
|
|||||||
{
|
{
|
||||||
case UPPER_BACK_PAIN_10_PLAYER:
|
case UPPER_BACK_PAIN_10_PLAYER:
|
||||||
case UPPER_BACK_PAIN_10_PLAYER_HEROIC:
|
case UPPER_BACK_PAIN_10_PLAYER_HEROIC:
|
||||||
return m_uiSnoboldCount >= 2;
|
return SnoboldCount >= 2;
|
||||||
case UPPER_BACK_PAIN_25_PLAYER:
|
case UPPER_BACK_PAIN_25_PLAYER:
|
||||||
case UPPER_BACK_PAIN_25_PLAYER_HEROIC:
|
case UPPER_BACK_PAIN_25_PLAYER_HEROIC:
|
||||||
return m_uiSnoboldCount >= 4;
|
return SnoboldCount >= 4;
|
||||||
case THREE_SIXTY_PAIN_SPIKE_10_PLAYER:
|
case THREE_SIXTY_PAIN_SPIKE_10_PLAYER:
|
||||||
case THREE_SIXTY_PAIN_SPIKE_10_PLAYER_HEROIC:
|
case THREE_SIXTY_PAIN_SPIKE_10_PLAYER_HEROIC:
|
||||||
case THREE_SIXTY_PAIN_SPIKE_25_PLAYER:
|
case THREE_SIXTY_PAIN_SPIKE_25_PLAYER:
|
||||||
case THREE_SIXTY_PAIN_SPIKE_25_PLAYER_HEROIC:
|
case THREE_SIXTY_PAIN_SPIKE_25_PLAYER_HEROIC:
|
||||||
return m_uiMistressOfPainCount >= 2;
|
return MistressOfPainCount >= 2;
|
||||||
case A_TRIBUTE_TO_SKILL_10_PLAYER:
|
case A_TRIBUTE_TO_SKILL_10_PLAYER:
|
||||||
case A_TRIBUTE_TO_SKILL_25_PLAYER:
|
case A_TRIBUTE_TO_SKILL_25_PLAYER:
|
||||||
return m_uiTrialCounter >= 25;
|
return TrialCounter >= 25;
|
||||||
case A_TRIBUTE_TO_MAD_SKILL_10_PLAYER:
|
case A_TRIBUTE_TO_MAD_SKILL_10_PLAYER:
|
||||||
case A_TRIBUTE_TO_MAD_SKILL_25_PLAYER:
|
case A_TRIBUTE_TO_MAD_SKILL_25_PLAYER:
|
||||||
return m_uiTrialCounter >= 45;
|
return TrialCounter >= 45;
|
||||||
case A_TRIBUTE_TO_INSANITY_10_PLAYER:
|
case A_TRIBUTE_TO_INSANITY_10_PLAYER:
|
||||||
case A_TRIBUTE_TO_INSANITY_25_PLAYER:
|
case A_TRIBUTE_TO_INSANITY_25_PLAYER:
|
||||||
case REALM_FIRST_GRAND_CRUSADER:
|
case REALM_FIRST_GRAND_CRUSADER:
|
||||||
return m_uiTrialCounter == 50;
|
return TrialCounter == 50;
|
||||||
case A_TRIBUTE_TO_IMMORTALITY_HORDE:
|
case A_TRIBUTE_TO_IMMORTALITY_HORDE:
|
||||||
case A_TRIBUTE_TO_IMMORTALITY_ALLIANCE:
|
case A_TRIBUTE_TO_IMMORTALITY_ALLIANCE:
|
||||||
return m_uiTrialCounter == 50 && m_bTributeToImmortalityElegible;
|
return TrialCounter == 50 && TributeToImmortalityElegible;
|
||||||
case A_TRIBUTE_TO_DEDICATED_INSANITY:
|
case A_TRIBUTE_TO_DEDICATED_INSANITY:
|
||||||
return false/*uiGrandCrusaderAttemptsLeft == 50 && !bHasAtAnyStagePlayerEquippedTooGoodItem*/;
|
return false/*uiGrandCrusaderAttemptsLeft == 50 && !bHasAtAnyStagePlayerEquippedTooGoodItem*/;
|
||||||
}
|
}
|
||||||
@@ -621,9 +710,12 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
InstanceScript* GetInstanceScript(InstanceMap* map) const
|
||||||
|
{
|
||||||
|
return new instance_trial_of_the_crusader_InstanceMapScript(map);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
void AddSC_instance_trial_of_the_crusader()
|
void AddSC_instance_trial_of_the_crusader()
|
||||||
{
|
{
|
||||||
new instance_trial_of_the_crusader();
|
new instance_trial_of_the_crusader();
|
||||||
|
|||||||
+2
-2
@@ -592,8 +592,8 @@ class npc_tirion_toc : public CreatureScript
|
|||||||
case 210:
|
case 210:
|
||||||
if (m_pInstance->GetData(TYPE_BEASTS) != DONE)
|
if (m_pInstance->GetData(TYPE_BEASTS) != DONE)
|
||||||
{
|
{
|
||||||
me->SummonCreature(NPC_DREADSCALE, ToCCommonLoc[3].GetPositionX(), ToCCommonLoc[3].GetPositionY(), ToCCommonLoc[3].GetPositionZ(), 5, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30*IN_MILLISECONDS);
|
me->SummonCreature(NPC_DREADSCALE, ToCCommonLoc[3].GetPositionX(), ToCCommonLoc[3].GetPositionY(), ToCCommonLoc[3].GetPositionZ(), 5, TEMPSUMMON_MANUAL_DESPAWN);
|
||||||
me->SummonCreature(NPC_ACIDMAW, ToCCommonLoc[4].GetPositionX(), ToCCommonLoc[4].GetPositionY(), ToCCommonLoc[4].GetPositionZ(), 5, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30*IN_MILLISECONDS);
|
me->SummonCreature(NPC_ACIDMAW, ToCCommonLoc[4].GetPositionX(), ToCCommonLoc[4].GetPositionY(), ToCCommonLoc[4].GetPositionZ(), 5, TEMPSUMMON_MANUAL_DESPAWN);
|
||||||
if (Creature* pTemp = Unit::GetCreature((*me), m_pInstance->GetData64(NPC_DREADSCALE)))
|
if (Creature* pTemp = Unit::GetCreature((*me), m_pInstance->GetData64(NPC_DREADSCALE)))
|
||||||
{
|
{
|
||||||
pTemp->GetMotionMaster()->MovePoint(0, ToCCommonLoc[8].GetPositionX(), ToCCommonLoc[8].GetPositionY(), ToCCommonLoc[8].GetPositionZ());
|
pTemp->GetMotionMaster()->MovePoint(0, ToCCommonLoc[8].GetPositionX(), ToCCommonLoc[8].GetPositionY(), ToCCommonLoc[8].GetPositionZ());
|
||||||
|
|||||||
Reference in New Issue
Block a user