mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-02-17 01:04:34 +00:00
refactor(Core/Instances): Implement GetTeamIdInInstance() for two-fac… (#21168)
This commit is contained in:
@@ -57,7 +57,6 @@ public:
|
||||
}
|
||||
|
||||
bool CLEANED;
|
||||
TeamId TeamIdInInstance;
|
||||
uint32 InstanceProgress;
|
||||
uint32 m_auiEncounter[MAX_ENCOUNTER];
|
||||
std::string str_data;
|
||||
@@ -83,7 +82,6 @@ public:
|
||||
|
||||
void Initialize() override
|
||||
{
|
||||
TeamIdInInstance = TEAM_NEUTRAL;
|
||||
InstanceProgress = 0;
|
||||
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
|
||||
|
||||
@@ -109,67 +107,49 @@ public:
|
||||
|
||||
void OnCreatureCreate(Creature* creature) override
|
||||
{
|
||||
if (TeamIdInInstance == TEAM_NEUTRAL)
|
||||
{
|
||||
Map::PlayerList const& players = instance->GetPlayers();
|
||||
if (!players.IsEmpty())
|
||||
if (Player* pPlayer = players.begin()->GetSource())
|
||||
{
|
||||
if (Group* group = pPlayer->GetGroup())
|
||||
{
|
||||
if (Player* gLeader = ObjectAccessor::FindPlayer(group->GetLeaderGUID()))
|
||||
TeamIdInInstance = Player::TeamIdForRace(gLeader->getRace());
|
||||
else
|
||||
TeamIdInInstance = pPlayer->GetTeamId();
|
||||
}
|
||||
else
|
||||
TeamIdInInstance = pPlayer->GetTeamId();
|
||||
}
|
||||
}
|
||||
|
||||
switch (creature->GetEntry())
|
||||
{
|
||||
// Grand Champions:
|
||||
case NPC_MOKRA:
|
||||
if (TeamIdInInstance == TEAM_HORDE)
|
||||
if (GetTeamIdInInstance() == TEAM_HORDE)
|
||||
creature->UpdateEntry(NPC_JACOB);
|
||||
break;
|
||||
case NPC_ERESSEA:
|
||||
if (TeamIdInInstance == TEAM_HORDE)
|
||||
if (GetTeamIdInInstance() == TEAM_HORDE)
|
||||
creature->UpdateEntry(NPC_AMBROSE);
|
||||
break;
|
||||
case NPC_RUNOK:
|
||||
if (TeamIdInInstance == TEAM_HORDE)
|
||||
if (GetTeamIdInInstance() == TEAM_HORDE)
|
||||
creature->UpdateEntry(NPC_COLOSOS);
|
||||
break;
|
||||
case NPC_ZULTORE:
|
||||
if (TeamIdInInstance == TEAM_HORDE)
|
||||
if (GetTeamIdInInstance() == TEAM_HORDE)
|
||||
creature->UpdateEntry(NPC_JAELYNE);
|
||||
break;
|
||||
case NPC_VISCERI:
|
||||
if (TeamIdInInstance == TEAM_HORDE)
|
||||
if (GetTeamIdInInstance() == TEAM_HORDE)
|
||||
creature->UpdateEntry(NPC_LANA);
|
||||
break;
|
||||
|
||||
// Grand Champion Minions:
|
||||
case NPC_ORGRIMMAR_MINION:
|
||||
if (TeamIdInInstance == TEAM_HORDE)
|
||||
if (GetTeamIdInInstance() == TEAM_HORDE)
|
||||
creature->UpdateEntry(NPC_STORMWIND_MINION);
|
||||
break;
|
||||
case NPC_SILVERMOON_MINION:
|
||||
if (TeamIdInInstance == TEAM_HORDE)
|
||||
if (GetTeamIdInInstance() == TEAM_HORDE)
|
||||
creature->UpdateEntry(NPC_GNOMEREGAN_MINION);
|
||||
break;
|
||||
case NPC_THUNDER_BLUFF_MINION:
|
||||
if (TeamIdInInstance == TEAM_HORDE)
|
||||
if (GetTeamIdInInstance() == TEAM_HORDE)
|
||||
creature->UpdateEntry(NPC_EXODAR_MINION);
|
||||
break;
|
||||
case NPC_SENJIN_MINION:
|
||||
if (TeamIdInInstance == TEAM_HORDE)
|
||||
if (GetTeamIdInInstance() == TEAM_HORDE)
|
||||
creature->UpdateEntry(NPC_DARNASSUS_MINION);
|
||||
break;
|
||||
case NPC_UNDERCITY_MINION:
|
||||
if (TeamIdInInstance == TEAM_HORDE)
|
||||
if (GetTeamIdInInstance() == TEAM_HORDE)
|
||||
creature->UpdateEntry(NPC_IRONFORGE_MINION);
|
||||
break;
|
||||
|
||||
@@ -183,7 +163,7 @@ public:
|
||||
case NPC_JAEREN:
|
||||
case NPC_ARELAS:
|
||||
NPC_AnnouncerGUID = creature->GetGUID();
|
||||
//if (TeamIdInInstance == TEAM_ALLIANCE)
|
||||
//if (GetTeamIdInInstance() == TEAM_ALLIANCE)
|
||||
// creature->UpdateEntry(NPC_ARELAS);
|
||||
creature->SetReactState(REACT_PASSIVE);
|
||||
break;
|
||||
@@ -283,36 +263,14 @@ public:
|
||||
|
||||
void OnPlayerEnter(Player* player) override
|
||||
{
|
||||
if (TeamIdInInstance == TEAM_NEUTRAL)
|
||||
{
|
||||
if (Group* group = player->GetGroup())
|
||||
{
|
||||
if (Player* gLeader = ObjectAccessor::FindPlayer(group->GetLeaderGUID()))
|
||||
TeamIdInInstance = Player::TeamIdForRace(gLeader->getRace());
|
||||
else
|
||||
TeamIdInInstance = player->GetTeamId();
|
||||
}
|
||||
else
|
||||
TeamIdInInstance = player->GetTeamId();
|
||||
}
|
||||
|
||||
if (sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP))
|
||||
player->SetFaction((TeamIdInInstance == TEAM_HORDE) ? 1610 : 1);
|
||||
InstanceScript::OnPlayerEnter(player);
|
||||
|
||||
if (DoNeedCleanup(player))
|
||||
{
|
||||
InstanceCleanup();
|
||||
}
|
||||
|
||||
events.RescheduleEvent(EVENT_CHECK_PLAYERS, CLEANUP_CHECK_INTERVAL);
|
||||
}
|
||||
|
||||
void OnPlayerLeave(Player* player) override
|
||||
{
|
||||
if (sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP))
|
||||
player->SetFactionForRace(player->getRace());
|
||||
}
|
||||
|
||||
bool DoNeedCleanup(Player* ignoredPlayer = nullptr)
|
||||
{
|
||||
uint8 aliveCount = 0;
|
||||
@@ -497,7 +455,7 @@ public:
|
||||
case DATA_INSTANCE_PROGRESS:
|
||||
return InstanceProgress;
|
||||
case DATA_TEAMID_IN_INSTANCE:
|
||||
return TeamIdInInstance;
|
||||
return GetTeamIdInInstance();
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -41,7 +41,6 @@ public:
|
||||
uint32 EncounterStatus;
|
||||
uint32 InstanceProgress;
|
||||
uint32 AttemptsLeft;
|
||||
TeamId TeamIdInInstance;
|
||||
uint8 Counter;
|
||||
uint8 northrendBeastsMask;
|
||||
uint32 AchievementTimer;
|
||||
@@ -168,7 +167,6 @@ public:
|
||||
EncounterStatus = NOT_STARTED;
|
||||
InstanceProgress = INSTANCE_PROGRESS_INITIAL;
|
||||
AttemptsLeft = 50;
|
||||
TeamIdInInstance = TEAM_NEUTRAL;
|
||||
Counter = 0;
|
||||
northrendBeastsMask = 0;
|
||||
AchievementTimer = 0;
|
||||
@@ -475,7 +473,7 @@ public:
|
||||
case TYPE_FACTION_CHAMPIONS_PLAYER_DIED:
|
||||
if (urand(0, 2) == 0 )
|
||||
{
|
||||
if (TeamIdInInstance == TEAM_HORDE)
|
||||
if (GetTeamIdInInstance() == TEAM_HORDE)
|
||||
{
|
||||
if (Creature* pTemp = instance->GetCreature(NPC_VarianGUID))
|
||||
pTemp->AI()->Talk(SAY_VARIAN_KILL_HORDE_PLAYER_1);
|
||||
@@ -971,16 +969,7 @@ public:
|
||||
}
|
||||
case EVENT_SCENE_202:
|
||||
{
|
||||
Map::PlayerList const& pl = instance->GetPlayers();
|
||||
for( Map::PlayerList::const_iterator itr = pl.begin(); itr != pl.end(); ++itr )
|
||||
if (Player* plr = itr->GetSource())
|
||||
if (!plr->IsGameMaster())
|
||||
{
|
||||
TeamIdInInstance = plr->GetTeamId();
|
||||
break;
|
||||
}
|
||||
|
||||
if (TeamIdInInstance == TEAM_ALLIANCE)
|
||||
if (GetTeamIdInInstance() == TEAM_ALLIANCE)
|
||||
{
|
||||
if (Creature* c = instance->GetCreature(NPC_GarroshGUID))
|
||||
c->AI()->Talk(SAY_STAGE_2_02h);
|
||||
@@ -1004,7 +993,7 @@ public:
|
||||
}
|
||||
case EVENT_SCENE_204:
|
||||
{
|
||||
if (TeamIdInInstance == TEAM_ALLIANCE)
|
||||
if (GetTeamIdInInstance() == TEAM_ALLIANCE)
|
||||
{
|
||||
if (Creature* c = instance->GetCreature(NPC_GarroshGUID))
|
||||
c->AI()->Talk(SAY_STAGE_2_04h);
|
||||
@@ -1022,26 +1011,26 @@ public:
|
||||
}
|
||||
case EVENT_SCENE_205:
|
||||
{
|
||||
if (Creature* c = instance->GetCreature(TeamIdInInstance == TEAM_ALLIANCE ? NPC_VarianGUID : NPC_GarroshGUID))
|
||||
c->AI()->Talk(TeamIdInInstance == TEAM_ALLIANCE ? SAY_STAGE_2_05a : SAY_STAGE_2_05h);
|
||||
if (Creature* c = instance->GetCreature(GetTeamIdInInstance() == TEAM_ALLIANCE ? NPC_VarianGUID : NPC_GarroshGUID))
|
||||
c->AI()->Talk(GetTeamIdInInstance() == TEAM_ALLIANCE ? SAY_STAGE_2_05a : SAY_STAGE_2_05h);
|
||||
|
||||
break;
|
||||
}
|
||||
case EVENT_SUMMON_CHAMPIONS:
|
||||
{
|
||||
std::vector<uint32> vHealerEntries;
|
||||
vHealerEntries.push_back(TeamIdInInstance == TEAM_ALLIANCE ? NPC_HORDE_DRUID_RESTORATION : NPC_ALLIANCE_DRUID_RESTORATION);
|
||||
vHealerEntries.push_back(TeamIdInInstance == TEAM_ALLIANCE ? NPC_HORDE_PALADIN_HOLY : NPC_ALLIANCE_PALADIN_HOLY);
|
||||
vHealerEntries.push_back(TeamIdInInstance == TEAM_ALLIANCE ? NPC_HORDE_PRIEST_DISCIPLINE : NPC_ALLIANCE_PRIEST_DISCIPLINE);
|
||||
vHealerEntries.push_back(TeamIdInInstance == TEAM_ALLIANCE ? NPC_HORDE_SHAMAN_RESTORATION : NPC_ALLIANCE_SHAMAN_RESTORATION);
|
||||
vHealerEntries.push_back(GetTeamIdInInstance() == TEAM_ALLIANCE ? NPC_HORDE_DRUID_RESTORATION : NPC_ALLIANCE_DRUID_RESTORATION);
|
||||
vHealerEntries.push_back(GetTeamIdInInstance() == TEAM_ALLIANCE ? NPC_HORDE_PALADIN_HOLY : NPC_ALLIANCE_PALADIN_HOLY);
|
||||
vHealerEntries.push_back(GetTeamIdInInstance() == TEAM_ALLIANCE ? NPC_HORDE_PRIEST_DISCIPLINE : NPC_ALLIANCE_PRIEST_DISCIPLINE);
|
||||
vHealerEntries.push_back(GetTeamIdInInstance() == TEAM_ALLIANCE ? NPC_HORDE_SHAMAN_RESTORATION : NPC_ALLIANCE_SHAMAN_RESTORATION);
|
||||
|
||||
std::vector<uint32> vOtherEntries;
|
||||
vOtherEntries.push_back(TeamIdInInstance == TEAM_ALLIANCE ? NPC_HORDE_DEATH_KNIGHT : NPC_ALLIANCE_DEATH_KNIGHT);
|
||||
vOtherEntries.push_back(TeamIdInInstance == TEAM_ALLIANCE ? NPC_HORDE_HUNTER : NPC_ALLIANCE_HUNTER);
|
||||
vOtherEntries.push_back(TeamIdInInstance == TEAM_ALLIANCE ? NPC_HORDE_MAGE : NPC_ALLIANCE_MAGE);
|
||||
vOtherEntries.push_back(TeamIdInInstance == TEAM_ALLIANCE ? NPC_HORDE_ROGUE : NPC_ALLIANCE_ROGUE);
|
||||
vOtherEntries.push_back(TeamIdInInstance == TEAM_ALLIANCE ? NPC_HORDE_WARLOCK : NPC_ALLIANCE_WARLOCK);
|
||||
vOtherEntries.push_back(TeamIdInInstance == TEAM_ALLIANCE ? NPC_HORDE_WARRIOR : NPC_ALLIANCE_WARRIOR);
|
||||
vOtherEntries.push_back(GetTeamIdInInstance() == TEAM_ALLIANCE ? NPC_HORDE_DEATH_KNIGHT : NPC_ALLIANCE_DEATH_KNIGHT);
|
||||
vOtherEntries.push_back(GetTeamIdInInstance() == TEAM_ALLIANCE ? NPC_HORDE_HUNTER : NPC_ALLIANCE_HUNTER);
|
||||
vOtherEntries.push_back(GetTeamIdInInstance() == TEAM_ALLIANCE ? NPC_HORDE_MAGE : NPC_ALLIANCE_MAGE);
|
||||
vOtherEntries.push_back(GetTeamIdInInstance() == TEAM_ALLIANCE ? NPC_HORDE_ROGUE : NPC_ALLIANCE_ROGUE);
|
||||
vOtherEntries.push_back(GetTeamIdInInstance() == TEAM_ALLIANCE ? NPC_HORDE_WARLOCK : NPC_ALLIANCE_WARLOCK);
|
||||
vOtherEntries.push_back(GetTeamIdInInstance() == TEAM_ALLIANCE ? NPC_HORDE_WARRIOR : NPC_ALLIANCE_WARRIOR);
|
||||
|
||||
uint8 healersSubtracted = 2;
|
||||
if (instance->GetSpawnMode() == RAID_DIFFICULTY_25MAN_NORMAL || instance->GetSpawnMode() == RAID_DIFFICULTY_25MAN_HEROIC )
|
||||
@@ -1089,11 +1078,11 @@ public:
|
||||
uint8 pos2 = 10;
|
||||
for( std::vector<uint32>::iterator itr = vOtherEntries.begin(); itr != vOtherEntries.end(); ++itr )
|
||||
{
|
||||
if (Creature* pTemp = instance->SummonCreature(*itr, FactionChampionLoc[urand(0, 4) + (TeamIdInInstance == TEAM_ALLIANCE ? 0 : 5)]))
|
||||
if (Creature* pTemp = instance->SummonCreature(*itr, FactionChampionLoc[urand(0, 4) + (GetTeamIdInInstance() == TEAM_ALLIANCE ? 0 : 5)]))
|
||||
{
|
||||
NPC_ChampionGUIDs.push_back(pTemp->GetGUID());
|
||||
pTemp->SetHomePosition((TeamIdInInstance == TEAM_ALLIANCE ? FactionChampionLoc[pos2].GetPositionX() : (Locs[LOC_CENTER].GetPositionX() * 2 - FactionChampionLoc[pos2].GetPositionX())), FactionChampionLoc[pos2].GetPositionY(), FactionChampionLoc[pos2].GetPositionZ(), 0.0f);
|
||||
pTemp->GetMotionMaster()->MoveJump((TeamIdInInstance == TEAM_ALLIANCE ? FactionChampionLoc[pos2].GetPositionX() : (Locs[LOC_CENTER].GetPositionX() * 2 - FactionChampionLoc[pos2].GetPositionX())), FactionChampionLoc[pos2].GetPositionY(), FactionChampionLoc[pos2].GetPositionZ(), 20.0f, 20.0f);
|
||||
pTemp->SetHomePosition((GetTeamIdInInstance() == TEAM_ALLIANCE ? FactionChampionLoc[pos2].GetPositionX() : (Locs[LOC_CENTER].GetPositionX() * 2 - FactionChampionLoc[pos2].GetPositionX())), FactionChampionLoc[pos2].GetPositionY(), FactionChampionLoc[pos2].GetPositionZ(), 0.0f);
|
||||
pTemp->GetMotionMaster()->MoveJump((GetTeamIdInInstance() == TEAM_ALLIANCE ? FactionChampionLoc[pos2].GetPositionX() : (Locs[LOC_CENTER].GetPositionX() * 2 - FactionChampionLoc[pos2].GetPositionX())), FactionChampionLoc[pos2].GetPositionY(), FactionChampionLoc[pos2].GetPositionZ(), 20.0f, 20.0f);
|
||||
}
|
||||
++pos2;
|
||||
}
|
||||
@@ -1196,35 +1185,8 @@ public:
|
||||
}
|
||||
case EVENT_SCENE_VALKYR_DEAD:
|
||||
{
|
||||
if (TeamIdInInstance == TEAM_NEUTRAL)
|
||||
{
|
||||
Map::PlayerList const& pl = instance->GetPlayers();
|
||||
for( Map::PlayerList::const_iterator itr = pl.begin(); itr != pl.end(); ++itr )
|
||||
if (Player* plr = itr->GetSource())
|
||||
if (!plr->IsGameMaster())
|
||||
{
|
||||
if (Group* group = plr->GetGroup())
|
||||
{
|
||||
if (Player* gLeader = ObjectAccessor::FindPlayer(group->GetLeaderGUID()))
|
||||
{
|
||||
TeamIdInInstance = Player::TeamIdForRace(gLeader->getRace());
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
TeamIdInInstance = plr->GetTeamId();
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
TeamIdInInstance = plr->GetTeamId();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (Creature* c = instance->GetCreature(TeamIdInInstance == TEAM_ALLIANCE ? NPC_VarianGUID : NPC_GarroshGUID))
|
||||
c->AI()->Talk((TeamIdInInstance == TEAM_ALLIANCE ? SAY_STAGE_3_03a : SAY_STAGE_3_03h));
|
||||
if (Creature* c = instance->GetCreature(GetTeamIdInInstance() == TEAM_ALLIANCE ? NPC_VarianGUID : NPC_GarroshGUID))
|
||||
c->AI()->Talk((GetTeamIdInInstance() == TEAM_ALLIANCE ? SAY_STAGE_3_03a : SAY_STAGE_3_03h));
|
||||
|
||||
events.RescheduleEvent(EVENT_SCENE_401, 60000);
|
||||
break;
|
||||
@@ -1413,21 +1375,7 @@ public:
|
||||
|
||||
void OnPlayerEnter(Player* plr) override
|
||||
{
|
||||
if (TeamIdInInstance == TEAM_NEUTRAL)
|
||||
{
|
||||
if (Group* group = plr->GetGroup())
|
||||
{
|
||||
if (Player* gLeader = ObjectAccessor::FindPlayer(group->GetLeaderGUID()))
|
||||
TeamIdInInstance = Player::TeamIdForRace(gLeader->getRace());
|
||||
else
|
||||
TeamIdInInstance = plr->GetTeamId();
|
||||
}
|
||||
else
|
||||
TeamIdInInstance = plr->GetTeamId();
|
||||
}
|
||||
|
||||
if (sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP))
|
||||
plr->SetFaction((TeamIdInInstance == TEAM_HORDE) ? 1610 : 1);
|
||||
InstanceScript::OnPlayerEnter(plr);
|
||||
|
||||
if (instance->IsHeroic())
|
||||
{
|
||||
@@ -1448,12 +1396,6 @@ public:
|
||||
events.RescheduleEvent(EVENT_CHECK_PLAYERS, 5s);
|
||||
}
|
||||
|
||||
void OnPlayerLeave(Player* player) override
|
||||
{
|
||||
if (sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP))
|
||||
player->SetFactionForRace(player->getRace());
|
||||
}
|
||||
|
||||
bool DoNeedCleanup(Player* ignoredPlayer = nullptr)
|
||||
{
|
||||
uint8 aliveCount = 0;
|
||||
|
||||
Reference in New Issue
Block a user