fix(Scripts/Karazhan): Chess Event. (#14736)

This commit is contained in:
UltraNix
2023-03-15 04:07:49 +01:00
committed by GitHub
parent 6cf0f57616
commit b21f98d639
11 changed files with 2570 additions and 57 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -60,6 +60,10 @@ public:
OperaEvent = urand(EVENT_OZ, EVENT_RAJ);
OzDeathCount = 0;
OptionalBossCount = 0;
_chessTeam = TEAM_NEUTRAL;
_chessGamePhase = CHESS_PHASE_NOT_STARTED;
_chessEvent = NOT_STARTED;
}
void OnCreatureCreate(Creature* creature) override
@@ -88,6 +92,27 @@ public:
creature->Respawn(true);
}
break;
case NPC_PAWN_H:
case NPC_KNIGHT_H:
case NPC_QUEEN_H:
case NPC_BISHOP_H:
case NPC_ROOK_H:
case NPC_KING_H:
case NPC_PAWN_A:
case NPC_KNIGHT_A:
case NPC_QUEEN_A:
case NPC_BISHOP_A:
case NPC_ROOK_A:
case NPC_KING_A:
_chessPiecesGUID.insert(creature->GetGUID());
creature->SetHealth(creature->GetMaxHealth());
break;
case NPC_CHESS_EVENT_MEDIVH_CHEAT_FIRES:
_medivhCheatFiresGUID.insert(creature->GetGUID());
break;
case NPC_ECHO_OF_MEDIVH:
_echoOfMedivhGUID = creature->GetGUID();
break;
default:
break;
}
@@ -160,6 +185,82 @@ public:
break;
}
case DATA_CHESS_EVENT:
{
_chessEvent = data;
switch (data)
{
case IN_PROGRESS:
case SPECIAL:
{
DoCastSpellOnPlayers(SPELL_GAME_IN_SESSION);
for (ObjectGuid const& chessPieceGUID : _chessPiecesGUID)
{
if (Creature* piece = instance->GetCreature(chessPieceGUID))
{
if (_chessTeam == TEAM_ALLIANCE)
{
if (piece->GetFaction() == CHESS_FACTION_ALLIANCE)
{
piece->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
}
}
else if (_chessTeam == TEAM_HORDE)
{
if (piece->GetFaction() == CHESS_FACTION_HORDE)
{
piece->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
}
}
else
{
piece->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
}
}
}
break;
}
default:
DoRemoveAurasDueToSpellOnPlayers(SPELL_GAME_IN_SESSION);
break;
}
break;
}
case CHESS_EVENT_TEAM:
_chessTeam = data;
break;
case DATA_CHESS_REINIT_PIECES:
for (ObjectGuid const& chessPieceGUID : _chessPiecesGUID)
{
if (Creature* piece = instance->GetCreature(chessPieceGUID))
{
piece->RemoveAllAuras();
piece->setDeathState(JUST_RESPAWNED);
piece->SetHealth(piece->GetMaxHealth());
float x, y, z, o;
piece->GetHomePosition(x, y, z, o);
piece->NearTeleportTo(x, y, z, o);
piece->AI()->DoAction(ACTION_CHESS_PIECE_RESET_ORIENTATION);
piece->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
piece->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
piece->AI()->Reset();
}
}
for (ObjectGuid const& medivhCheatFireGUID : _medivhCheatFiresGUID)
{
if (Creature* fire = instance->GetCreature(medivhCheatFireGUID))
{
fire->DespawnOrUnsummon();
}
}
_medivhCheatFiresGUID.clear();
break;
case DATA_CHESS_GAME_PHASE:
_chessGamePhase = data;
break;
default:
break;
}
@@ -189,10 +290,6 @@ public:
DoRespawnCreature(_barnesGUID, true);
}
break;
case DATA_CHESS:
if (state == DONE)
DoRespawnGameObject(DustCoveredChest, DAY);
break;
default:
break;
}
@@ -291,6 +388,12 @@ public:
return OperaEvent;
case DATA_OPERA_OZ_DEATHCOUNT:
return OzDeathCount;
case CHESS_EVENT_TEAM:
return _chessTeam;
case DATA_CHESS_GAME_PHASE:
return _chessGamePhase;
case DATA_CHESS_EVENT:
return _chessEvent;
}
return 0;
@@ -332,6 +435,10 @@ public:
return ImageGUID;
case DATA_NIGHTBANE:
return m_uiNightBaneGUID;
case DATA_ECHO_OF_MEDIVH:
return _echoOfMedivhGUID;
case DATA_DUST_COVERED_CHEST:
return DustCoveredChest;
}
return ObjectGuid::Empty;
@@ -341,8 +448,10 @@ public:
uint32 OperaEvent;
uint32 OzDeathCount;
uint32 OptionalBossCount;
//uint32 m_auiEncounter[MAX_ENCOUNTERS];
//uint32 m_uiTeam;
uint32 _chessTeam;
uint32 _chessGamePhase;
uint32 _chessEvent;
ObjectGuid m_uiCurtainGUID;
ObjectGuid m_uiStageDoorLeftGUID;
ObjectGuid m_uiStageDoorRightGUID;
@@ -350,20 +459,22 @@ public:
ObjectGuid m_uiTerestianGUID;
ObjectGuid m_uiMoroesGUID;
ObjectGuid m_uiNightBaneGUID;
//ObjectGuid EchoOfMedivhGUID;
ObjectGuid m_uiLibraryDoor; // Door at Shade of Aran
ObjectGuid m_uiMassiveDoor; // Door at Netherspite
ObjectGuid m_uiSideEntranceDoor; // Side Entrance
ObjectGuid m_uiGamesmansDoor; // Door before Chess
ObjectGuid m_uiGamesmansExitDoor; // Door after Chess
ObjectGuid m_uiNetherspaceDoor; // Door at Malchezaar
//ObjectGuid m_uiServantsAccessDoor; // Door to Brocken Stair
ObjectGuid MastersTerraceDoor[2];
ObjectGuid ImageGUID;
ObjectGuid DustCoveredChest;
ObjectGuid m_uiRelayGUID;
ObjectGuid _barnesGUID;
ObjectGuid _echoOfMedivhGUID;
GuidVector _operaDecorations[EVENT_RAJ];
GuidSet _chessPiecesGUID;
GuidSet _medivhCheatFiresGUID;
};
};

View File

@@ -36,7 +36,7 @@ enum KZDataTypes
DATA_ARAN = 6,
DATA_TERESTIAN = 7,
DATA_NETHERSPITE = 8,
DATA_CHESS = 9,
DATA_CHESS_EVENT = 9,
DATA_MALCHEZZAR = 10,
DATA_NIGHTBANE = 11,
DATA_SERVANT_QUARTERS = 12,
@@ -60,40 +60,63 @@ enum KZDataTypes
DATA_GO_SIDE_ENTRANCE_DOOR = 29,
DATA_PRINCE = 30,
DATA_SPAWN_OPERA_DECORATIONS = 31,
DATA_MIDNIGHT = 32
DATA_MIDNIGHT = 32,
// Chess Event
CHESS_EVENT_TEAM = 33,
DATA_CHESS_REINIT_PIECES = 34,
DATA_CHESS_GAME_PHASE = 35,
DATA_ECHO_OF_MEDIVH = 36,
DATA_DUST_COVERED_CHEST = 37
};
enum KZOperaEvents
{
EVENT_OZ = 1,
EVENT_HOOD = 2,
EVENT_RAJ = 3
EVENT_OZ = 1,
EVENT_HOOD = 2,
EVENT_RAJ = 3
};
enum KZMiscCreatures
enum KZCreatures
{
NPC_HYAKISS_THE_LURKER = 16179,
NPC_ROKAD_THE_RAVAGER = 16181,
NPC_SHADIKITH_THE_GLIDER = 16180,
NPC_TERESTIAN_ILLHOOF = 15688,
NPC_MOROES = 15687,
NPC_ATTUMEN_THE_HUNTSMAN = 15550,
NPC_ATTUMEN_THE_HUNTSMAN_MOUNTED = 16152,
NPC_MIDNIGHT = 16151,
NPC_NIGHTBANE = 17225,
NPC_HYAKISS_THE_LURKER = 16179,
NPC_ROKAD_THE_RAVAGER = 16181,
NPC_SHADIKITH_THE_GLIDER = 16180,
NPC_TERESTIAN_ILLHOOF = 15688,
NPC_MOROES = 15687,
NPC_ATTUMEN_THE_HUNTSMAN = 15550,
NPC_ATTUMEN_THE_HUNTSMAN_MOUNTED = 16152,
NPC_MIDNIGHT = 16151,
NPC_NIGHTBANE = 17225,
// Trash
NPC_COLDMIST_WIDOW = 16171,
NPC_COLDMIST_STALKER = 16170,
NPC_SHADOWBAT = 16173,
NPC_VAMPIRIC_SHADOWBAT = 16175,
NPC_GREATER_SHADOWBAT = 16174,
NPC_PHASE_HOUND = 16178,
NPC_DREADBEAST = 16177,
NPC_SHADOWBEAST = 16176,
NPC_KILREK = 17229,
NPC_RELAY = 17645,
NPC_BARNES = 16812
NPC_COLDMIST_WIDOW = 16171,
NPC_COLDMIST_STALKER = 16170,
NPC_SHADOWBAT = 16173,
NPC_VAMPIRIC_SHADOWBAT = 16175,
NPC_GREATER_SHADOWBAT = 16174,
NPC_PHASE_HOUND = 16178,
NPC_DREADBEAST = 16177,
NPC_SHADOWBEAST = 16176,
NPC_KILREK = 17229,
NPC_RELAY = 17645,
NPC_BARNES = 16812,
// Chess Event
NPC_ECHO_OF_MEDIVH = 16816,
NPC_PAWN_H = 17469,
NPC_PAWN_A = 17211,
NPC_KNIGHT_H = 21748,
NPC_KNIGHT_A = 21664,
NPC_QUEEN_H = 21750,
NPC_QUEEN_A = 21683,
NPC_BISHOP_H = 21747,
NPC_BISHOP_A = 21682,
NPC_ROOK_H = 21726,
NPC_ROOK_A = 21160,
NPC_KING_H = 21752,
NPC_KING_A = 21684,
NPC_CHESS_EVENT_MEDIVH_CHEAT_FIRES = 22521
};
enum KZGameObjectIds
@@ -124,14 +147,39 @@ enum KZGameObjectIds
enum KZMisc
{
OPTIONAL_BOSS_REQUIRED_DEATH_COUNT = 50
OPTIONAL_BOSS_REQUIRED_DEATH_COUNT = 50,
ACTION_CHESS_PIECE_RESET_ORIENTATION = 1
};
enum KarazhanSpells
{
SPELL_RATTLED = 32437,
SPELL_OVERLOAD = 29766,
SPELL_BLINK = 29884
SPELL_RATTLED = 32437,
SPELL_OVERLOAD = 29766,
SPELL_BLINK = 29884,
// Chess Event
SPELL_GAME_IN_SESSION = 39331,
SPELL_HAND_OF_MEDIVH = 39339, // 1st cheat: AOE spell burn cell under enemy chesspieces.
SPELL_FURY_OF_MEDIVH = 39383 // 2nd cheat: Berserk own chesspieces.
};
enum KarazhanChessGamePhase
{
CHESS_PHASE_NOT_STARTED = 0,
CHESS_PHASE_PVE_WARMUP = 1, // Medivh has been spoken too but king isn't controlled yet
CHESS_PHASE_INPROGRESS_PVE = 2,
CHESS_PHASE_FAILED = 3,
CHESS_PHASE_PVE_FINISHED = 4,
CHESS_PHASE_PVP_WARMUP = 5,
CHESS_PHASE_INPROGRESS_PVP = 6 // Get back to PVE_FINISHED after that
};
enum KarazhanChessGameFactions
{
CHESS_FACTION_HORDE = 1689,
CHESS_FACTION_ALLIANCE = 1690,
CHESS_FACTION_BOTH = 536
};
template <class AI, class T>

View File

@@ -68,6 +68,7 @@ void AddSC_instance_karazhan(); //Karazhan
void AddSC_boss_servant_quarters();
void AddSC_boss_attumen();
void AddSC_boss_curator();
void AddSC_boss_chess_event();
void AddSC_boss_maiden_of_virtue();
void AddSC_boss_shade_of_aran();
void AddSC_boss_malchezaar();
@@ -220,6 +221,7 @@ void AddEasternKingdomsScripts()
AddSC_boss_servant_quarters();
AddSC_boss_attumen();
AddSC_boss_curator();
AddSC_boss_chess_event();
AddSC_boss_maiden_of_virtue();
AddSC_boss_shade_of_aran();
AddSC_boss_malchezaar();