Scripts/Molten Core: Fixed core freezes caused by this script
Closes #1217, #798, #905
This commit is contained in:
@@ -29,7 +29,7 @@ EndScriptData */
|
|||||||
#include "CreatureAI.h"
|
#include "CreatureAI.h"
|
||||||
#include "molten_core.h"
|
#include "molten_core.h"
|
||||||
|
|
||||||
const Position SummonPositions[10] =
|
Position const SummonPositions[10] =
|
||||||
{
|
{
|
||||||
{737.850f, -1145.35f, -120.288f, 4.71368f},
|
{737.850f, -1145.35f, -120.288f, 4.71368f},
|
||||||
{744.162f, -1151.63f, -119.726f, 4.58204f},
|
{744.162f, -1151.63f, -119.726f, 4.58204f},
|
||||||
@@ -56,21 +56,40 @@ class instance_molten_core : public InstanceMapScript
|
|||||||
_golemaggTheIncineratorGUID = 0;
|
_golemaggTheIncineratorGUID = 0;
|
||||||
_majordomoExecutusGUID = 0;
|
_majordomoExecutusGUID = 0;
|
||||||
_cacheOfTheFirelordGUID = 0;
|
_cacheOfTheFirelordGUID = 0;
|
||||||
|
_executusSchedule = NULL;
|
||||||
_deadBossCount = 0;
|
_deadBossCount = 0;
|
||||||
_ragnarosAddDeaths = 0;
|
_ragnarosAddDeaths = 0;
|
||||||
|
_isLoading = false;
|
||||||
_summonedExecutus = false;
|
_summonedExecutus = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
~instance_molten_core_InstanceMapScript()
|
||||||
|
{
|
||||||
|
delete _executusSchedule;
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnPlayerEnter(Player* /*player*/)
|
||||||
|
{
|
||||||
|
if (_executusSchedule)
|
||||||
|
{
|
||||||
|
SummonMajordomoExecutus(*_executusSchedule);
|
||||||
|
delete _executusSchedule;
|
||||||
|
_executusSchedule = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void OnCreatureCreate(Creature* creature)
|
void OnCreatureCreate(Creature* creature)
|
||||||
{
|
{
|
||||||
switch (creature->GetEntry())
|
switch (creature->GetEntry())
|
||||||
{
|
{
|
||||||
case NPC_GOLEMAGG_THE_INCINERATOR:
|
case NPC_GOLEMAGG_THE_INCINERATOR:
|
||||||
_golemaggTheIncineratorGUID = creature->GetGUID();
|
_golemaggTheIncineratorGUID = creature->GetGUID();
|
||||||
break;
|
break;
|
||||||
case NPC_MAJORDOMO_EXECUTUS:
|
case NPC_MAJORDOMO_EXECUTUS:
|
||||||
_majordomoExecutusGUID = creature->GetGUID();
|
_majordomoExecutusGUID = creature->GetGUID();
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,6 +100,8 @@ class instance_molten_core : public InstanceMapScript
|
|||||||
case GO_CACHE_OF_THE_FIRELORD:
|
case GO_CACHE_OF_THE_FIRELORD:
|
||||||
_cacheOfTheFirelordGUID = go->GetGUID();
|
_cacheOfTheFirelordGUID = go->GetGUID();
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -125,8 +146,13 @@ class instance_molten_core : public InstanceMapScript
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (state == DONE && bossId < BOSS_MAJORDOMO_EXECUTUS)
|
if (state == DONE && bossId < BOSS_MAJORDOMO_EXECUTUS)
|
||||||
if (++_deadBossCount == 8)
|
++_deadBossCount;
|
||||||
SummonMajordomoExecutus(false);
|
|
||||||
|
if (_isLoading)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (_deadBossCount == 8)
|
||||||
|
SummonMajordomoExecutus(false);
|
||||||
|
|
||||||
if (bossId == BOSS_MAJORDOMO_EXECUTUS && state == DONE)
|
if (bossId == BOSS_MAJORDOMO_EXECUTUS && state == DONE)
|
||||||
DoRespawnGameObject(_cacheOfTheFirelordGUID, 7 * DAY);
|
DoRespawnGameObject(_cacheOfTheFirelordGUID, 7 * DAY);
|
||||||
@@ -175,6 +201,7 @@ class instance_molten_core : public InstanceMapScript
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_isLoading = true;
|
||||||
OUT_LOAD_INST_DATA(data);
|
OUT_LOAD_INST_DATA(data);
|
||||||
|
|
||||||
char dataHead1, dataHead2;
|
char dataHead1, dataHead2;
|
||||||
@@ -201,7 +228,7 @@ class instance_molten_core : public InstanceMapScript
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (executusCounter >= 8 && states[BOSS_RAGNAROS] != DONE)
|
if (executusCounter >= 8 && states[BOSS_RAGNAROS] != DONE)
|
||||||
SummonMajordomoExecutus(states[BOSS_MAJORDOMO_EXECUTUS] == DONE);
|
_executusSchedule = new bool(states[BOSS_MAJORDOMO_EXECUTUS] == DONE);
|
||||||
|
|
||||||
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
|
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
|
||||||
SetBossState(i, states[i]);
|
SetBossState(i, states[i]);
|
||||||
@@ -210,14 +237,17 @@ class instance_molten_core : public InstanceMapScript
|
|||||||
OUT_LOAD_INST_DATA_FAIL;
|
OUT_LOAD_INST_DATA_FAIL;
|
||||||
|
|
||||||
OUT_LOAD_INST_DATA_COMPLETE;
|
OUT_LOAD_INST_DATA_COMPLETE;
|
||||||
|
_isLoading = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
uint64 _golemaggTheIncineratorGUID;
|
uint64 _golemaggTheIncineratorGUID;
|
||||||
uint64 _majordomoExecutusGUID;
|
uint64 _majordomoExecutusGUID;
|
||||||
uint64 _cacheOfTheFirelordGUID;
|
uint64 _cacheOfTheFirelordGUID;
|
||||||
|
bool* _executusSchedule;
|
||||||
uint8 _deadBossCount;
|
uint8 _deadBossCount;
|
||||||
uint8 _ragnarosAddDeaths;
|
uint8 _ragnarosAddDeaths;
|
||||||
|
bool _isLoading;
|
||||||
bool _summonedExecutus;
|
bool _summonedExecutus;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user