Core/Misc: Proper fix for previous commit (c5c8e38 - check race change before perfoming faction-change actions)
Core/Misc: tab to spaces and remove trailing whitespaces
This commit is contained in:
1 parent
c5c8e38789
commit
d2ba73d97f
8 files changed
+389
-389
No files matched your search
@@ -1395,9 +1395,9 @@ void LFGMgr::TeleportPlayer(Player* player, bool out, bool fromOpcode /*= false*
|
||||
{
|
||||
sLog->outDebug(LOG_FILTER_LFG, "TeleportPlayer: Player %s not in group/lfggroup or dungeon not found!",
|
||||
player->GetName().c_str());
|
||||
player->GetSession()->SendLfgTeleportError(uint8(LFG_TELEPORTERROR_INVALID_LOCATION));
|
||||
player->GetSession()->SendLfgTeleportError(uint8(LFG_TELEPORTERROR_INVALID_LOCATION));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (out)
|
||||
{
|
||||
|
||||
@@ -1577,7 +1577,7 @@ void Player::Update(uint32 p_time)
|
||||
// check every second
|
||||
if (now > m_Last_tick + 1)
|
||||
UpdateSoulboundTradeItems();
|
||||
|
||||
|
||||
// If mute expired, remove it from the DB
|
||||
if (GetSession()->m_muteTime && GetSession()->m_muteTime < now)
|
||||
{
|
||||
@@ -15714,7 +15714,7 @@ void Player::SetQuestStatus(uint32 quest_id, QuestStatus status)
|
||||
}
|
||||
|
||||
uint32 zone = 0, area = 0;
|
||||
|
||||
|
||||
SpellAreaForQuestMapBounds saBounds = sSpellMgr->GetSpellAreaForQuestMapBounds(quest_id);
|
||||
if (saBounds.first != saBounds.second)
|
||||
{
|
||||
@@ -15725,7 +15725,7 @@ void Player::SetQuestStatus(uint32 quest_id, QuestStatus status)
|
||||
if (!HasAura(itr->second->spellId))
|
||||
CastSpell(this, itr->second->spellId, true);
|
||||
}
|
||||
|
||||
|
||||
saBounds = sSpellMgr->GetSpellAreaForQuestEndMapBounds(quest_id);
|
||||
if (saBounds.first != saBounds.second)
|
||||
{
|
||||
|
||||
@@ -6672,7 +6672,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
|
||||
victim->CastCustomSpell(beaconTarget, triggered_spell_id, &basepoints0, NULL, NULL, true, 0, triggeredByAura);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
// Judgements of the Wise
|
||||
|
||||
@@ -1648,7 +1648,7 @@ void WorldSession::HandleCharFactionOrRaceChange(WorldPacket& recv_data)
|
||||
uint32 used_loginFlag = ((recv_data.GetOpcode() == CMSG_CHAR_RACE_CHANGE) ? AT_LOGIN_CHANGE_RACE : AT_LOGIN_CHANGE_FACTION);
|
||||
|
||||
if (!sObjectMgr->GetPlayerInfo(race, playerClass))
|
||||
{
|
||||
{ops..
|
||||
WorldPacket data(SMSG_CHAR_FACTION_CHANGE, 1);
|
||||
data << uint8(CHAR_CREATE_ERROR);
|
||||
SendPacket(&data);
|
||||
@@ -1731,395 +1731,395 @@ void WorldSession::HandleCharFactionOrRaceChange(WorldPacket& recv_data)
|
||||
|
||||
sWorld->UpdateCharacterNameData(GUID_LOPART(guid), newname, gender, race);
|
||||
|
||||
if (oldRace == race)
|
||||
return;
|
||||
|
||||
TeamId team = TEAM_ALLIANCE;
|
||||
|
||||
// Search each faction is targeted
|
||||
switch (race)
|
||||
if (oldRace != race)
|
||||
{
|
||||
case RACE_ORC:
|
||||
case RACE_TAUREN:
|
||||
case RACE_UNDEAD_PLAYER:
|
||||
case RACE_TROLL:
|
||||
case RACE_BLOODELF:
|
||||
team = TEAM_HORDE;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
TeamId team = TEAM_ALLIANCE;
|
||||
|
||||
// Switch Languages
|
||||
// delete all languages first
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_SKILL_LANGUAGES);
|
||||
stmt->setUInt32(0, lowGuid);
|
||||
trans->Append(stmt);
|
||||
// Search each faction is targeted
|
||||
switch (race)
|
||||
{
|
||||
case RACE_ORC:
|
||||
case RACE_TAUREN:
|
||||
case RACE_UNDEAD_PLAYER:
|
||||
case RACE_TROLL:
|
||||
case RACE_BLOODELF:
|
||||
team = TEAM_HORDE;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// Now add them back
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_SKILL_LANGUAGE);
|
||||
stmt->setUInt32(0, lowGuid);
|
||||
// Switch Languages
|
||||
// delete all languages first
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_SKILL_LANGUAGES);
|
||||
stmt->setUInt32(0, lowGuid);
|
||||
trans->Append(stmt);
|
||||
|
||||
// Faction specific languages
|
||||
if (team == TEAM_HORDE)
|
||||
stmt->setUInt16(1, 109);
|
||||
else
|
||||
stmt->setUInt16(1, 98);
|
||||
|
||||
trans->Append(stmt);
|
||||
|
||||
// Race specific languages
|
||||
if (race != RACE_ORC && race != RACE_HUMAN)
|
||||
{
|
||||
// Now add them back
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_SKILL_LANGUAGE);
|
||||
stmt->setUInt32(0, lowGuid);
|
||||
|
||||
switch (race)
|
||||
// Faction specific languages
|
||||
if (team == TEAM_HORDE)
|
||||
stmt->setUInt16(1, 109);
|
||||
else
|
||||
stmt->setUInt16(1, 98);
|
||||
|
||||
trans->Append(stmt);
|
||||
|
||||
// Race specific languages
|
||||
if (race != RACE_ORC && race != RACE_HUMAN)
|
||||
{
|
||||
case RACE_DWARF:
|
||||
stmt->setUInt16(1, 111);
|
||||
break;
|
||||
case RACE_DRAENEI:
|
||||
stmt->setUInt16(1, 759);
|
||||
break;
|
||||
case RACE_GNOME:
|
||||
stmt->setUInt16(1, 313);
|
||||
break;
|
||||
case RACE_NIGHTELF:
|
||||
stmt->setUInt16(1, 113);
|
||||
break;
|
||||
case RACE_UNDEAD_PLAYER:
|
||||
stmt->setUInt16(1, 673);
|
||||
break;
|
||||
case RACE_TAUREN:
|
||||
stmt->setUInt16(1, 115);
|
||||
break;
|
||||
case RACE_TROLL:
|
||||
stmt->setUInt16(1, 315);
|
||||
break;
|
||||
case RACE_BLOODELF:
|
||||
stmt->setUInt16(1, 137);
|
||||
break;
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_SKILL_LANGUAGE);
|
||||
stmt->setUInt32(0, lowGuid);
|
||||
|
||||
switch (race)
|
||||
{
|
||||
case RACE_DWARF:
|
||||
stmt->setUInt16(1, 111);
|
||||
break;
|
||||
case RACE_DRAENEI:
|
||||
stmt->setUInt16(1, 759);
|
||||
break;
|
||||
case RACE_GNOME:
|
||||
stmt->setUInt16(1, 313);
|
||||
break;
|
||||
case RACE_NIGHTELF:
|
||||
stmt->setUInt16(1, 113);
|
||||
break;
|
||||
case RACE_UNDEAD_PLAYER:
|
||||
stmt->setUInt16(1, 673);
|
||||
break;
|
||||
case RACE_TAUREN:
|
||||
stmt->setUInt16(1, 115);
|
||||
break;
|
||||
case RACE_TROLL:
|
||||
stmt->setUInt16(1, 315);
|
||||
break;
|
||||
case RACE_BLOODELF:
|
||||
stmt->setUInt16(1, 137);
|
||||
break;
|
||||
}
|
||||
|
||||
trans->Append(stmt);
|
||||
}
|
||||
|
||||
trans->Append(stmt);
|
||||
}
|
||||
|
||||
if (recv_data.GetOpcode() == CMSG_CHAR_FACTION_CHANGE)
|
||||
{
|
||||
// Delete all Flypaths
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_TAXI_PATH);
|
||||
stmt->setUInt32(0, lowGuid);
|
||||
trans->Append(stmt);
|
||||
|
||||
if (level > 7)
|
||||
if (recv_data.GetOpcode() == CMSG_CHAR_FACTION_CHANGE)
|
||||
{
|
||||
// Update Taxi path
|
||||
// this doesn't seem to be 100% blizzlike... but it can't really be helped.
|
||||
std::ostringstream taximaskstream;
|
||||
uint32 numFullTaximasks = level / 7;
|
||||
if (numFullTaximasks > 11)
|
||||
numFullTaximasks = 11;
|
||||
if (team == TEAM_ALLIANCE)
|
||||
// Delete all Flypaths
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_TAXI_PATH);
|
||||
stmt->setUInt32(0, lowGuid);
|
||||
trans->Append(stmt);
|
||||
|
||||
if (level > 7)
|
||||
{
|
||||
if (playerClass != CLASS_DEATH_KNIGHT)
|
||||
// Update Taxi path
|
||||
// this doesn't seem to be 100% blizzlike... but it can't really be helped.
|
||||
std::ostringstream taximaskstream;
|
||||
uint32 numFullTaximasks = level / 7;
|
||||
if (numFullTaximasks > 11)
|
||||
numFullTaximasks = 11;
|
||||
if (team == TEAM_ALLIANCE)
|
||||
{
|
||||
for (uint8 i = 0; i < numFullTaximasks; ++i)
|
||||
taximaskstream << uint32(sAllianceTaxiNodesMask[i]) << ' ';
|
||||
if (playerClass != CLASS_DEATH_KNIGHT)
|
||||
{
|
||||
for (uint8 i = 0; i < numFullTaximasks; ++i)
|
||||
taximaskstream << uint32(sAllianceTaxiNodesMask[i]) << ' ';
|
||||
}
|
||||
else
|
||||
{
|
||||
for (uint8 i = 0; i < numFullTaximasks; ++i)
|
||||
taximaskstream << uint32(sAllianceTaxiNodesMask[i] | sDeathKnightTaxiNodesMask[i]) << ' ';
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (uint8 i = 0; i < numFullTaximasks; ++i)
|
||||
taximaskstream << uint32(sAllianceTaxiNodesMask[i] | sDeathKnightTaxiNodesMask[i]) << ' ';
|
||||
if (playerClass != CLASS_DEATH_KNIGHT)
|
||||
{
|
||||
for (uint8 i = 0; i < numFullTaximasks; ++i)
|
||||
taximaskstream << uint32(sHordeTaxiNodesMask[i]) << ' ';
|
||||
}
|
||||
else
|
||||
{
|
||||
for (uint8 i = 0; i < numFullTaximasks; ++i)
|
||||
taximaskstream << uint32(sHordeTaxiNodesMask[i] | sDeathKnightTaxiNodesMask[i]) << ' ';
|
||||
}
|
||||
}
|
||||
|
||||
uint32 numEmptyTaximasks = 11 - numFullTaximasks;
|
||||
for (uint8 i = 0; i < numEmptyTaximasks; ++i)
|
||||
taximaskstream << "0 ";
|
||||
taximaskstream << '0';
|
||||
std::string taximask = taximaskstream.str();
|
||||
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_TAXIMASK);
|
||||
stmt->setString(0, taximask);
|
||||
stmt->setUInt32(1, lowGuid);
|
||||
trans->Append(stmt);
|
||||
}
|
||||
|
||||
// Delete all current quests
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_QUESTSTATUS);
|
||||
stmt->setUInt32(0, GUID_LOPART(guid));
|
||||
trans->Append(stmt);
|
||||
|
||||
// Delete record of the faction old completed quests
|
||||
{
|
||||
std::ostringstream quests;
|
||||
ObjectMgr::QuestMap const& qTemplates = sObjectMgr->GetQuestTemplates();
|
||||
for (ObjectMgr::QuestMap::const_iterator iter = qTemplates.begin(); iter != qTemplates.end(); ++iter)
|
||||
{
|
||||
Quest *qinfo = iter->second;
|
||||
uint32 requiredRaces = qinfo->GetRequiredRaces();
|
||||
if (team == TEAM_ALLIANCE)
|
||||
{
|
||||
if (requiredRaces & RACEMASK_ALLIANCE)
|
||||
{
|
||||
quests << uint32(qinfo->GetQuestId());
|
||||
quests << ',';
|
||||
}
|
||||
}
|
||||
else // if (team == TEAM_HORDE)
|
||||
{
|
||||
if (requiredRaces & RACEMASK_HORDE)
|
||||
{
|
||||
quests << uint32(qinfo->GetQuestId());
|
||||
quests << ',';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::string questsStr = quests.str();
|
||||
questsStr = questsStr.substr(0, questsStr.length() - 1);
|
||||
|
||||
if (!questsStr.empty())
|
||||
trans->PAppend("DELETE FROM `character_queststatus_rewarded` WHERE guid='%u' AND quest IN (%s)", lowGuid, questsStr.c_str());
|
||||
}
|
||||
|
||||
if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD))
|
||||
{
|
||||
// Reset guild
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GUILD_MEMBER);
|
||||
|
||||
stmt->setUInt32(0, lowGuid);
|
||||
|
||||
PreparedQueryResult result = CharacterDatabase.Query(stmt);
|
||||
if (result)
|
||||
if (Guild* guild = sGuildMgr->GetGuildById((result->Fetch()[0]).GetUInt32()))
|
||||
guild->DeleteMember(MAKE_NEW_GUID(lowGuid, 0, HIGHGUID_PLAYER));
|
||||
}
|
||||
|
||||
if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_ADD_FRIEND))
|
||||
{
|
||||
// Delete Friend List
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_SOCIAL_BY_GUID);
|
||||
stmt->setUInt32(0, lowGuid);
|
||||
trans->Append(stmt);
|
||||
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_SOCIAL_BY_FRIEND);
|
||||
stmt->setUInt32(0, lowGuid);
|
||||
trans->Append(stmt);
|
||||
|
||||
}
|
||||
|
||||
// Leave Arena Teams
|
||||
Player::LeaveAllArenaTeams(guid);
|
||||
|
||||
// Reset homebind and position
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PLAYER_HOMEBIND);
|
||||
stmt->setUInt32(0, lowGuid);
|
||||
trans->Append(stmt);
|
||||
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PLAYER_HOMEBIND);
|
||||
stmt->setUInt32(0, lowGuid);
|
||||
if (team == TEAM_ALLIANCE)
|
||||
{
|
||||
stmt->setUInt16(1, 0);
|
||||
stmt->setUInt16(2, 1519);
|
||||
stmt->setFloat (3, -8867.68f);
|
||||
stmt->setFloat (4, 673.373f);
|
||||
stmt->setFloat (5, 97.9034f);
|
||||
Player::SavePositionInDB(0, -8867.68f, 673.373f, 97.9034f, 0.0f, 1519, lowGuid);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (playerClass != CLASS_DEATH_KNIGHT)
|
||||
{
|
||||
for (uint8 i = 0; i < numFullTaximasks; ++i)
|
||||
taximaskstream << uint32(sHordeTaxiNodesMask[i]) << ' ';
|
||||
}
|
||||
else
|
||||
{
|
||||
for (uint8 i = 0; i < numFullTaximasks; ++i)
|
||||
taximaskstream << uint32(sHordeTaxiNodesMask[i] | sDeathKnightTaxiNodesMask[i]) << ' ';
|
||||
}
|
||||
stmt->setUInt16(1, 1);
|
||||
stmt->setUInt16(2, 1637);
|
||||
stmt->setFloat (3, 1633.33f);
|
||||
stmt->setFloat (4, -4439.11f);
|
||||
stmt->setFloat (5, 15.7588f);
|
||||
Player::SavePositionInDB(1, 1633.33f, -4439.11f, 15.7588f, 0.0f, 1637, lowGuid);
|
||||
}
|
||||
|
||||
uint32 numEmptyTaximasks = 11 - numFullTaximasks;
|
||||
for (uint8 i = 0; i < numEmptyTaximasks; ++i)
|
||||
taximaskstream << "0 ";
|
||||
taximaskstream << '0';
|
||||
std::string taximask = taximaskstream.str();
|
||||
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_TAXIMASK);
|
||||
stmt->setString(0, taximask);
|
||||
stmt->setUInt32(1, lowGuid);
|
||||
trans->Append(stmt);
|
||||
}
|
||||
|
||||
// Delete all current quests
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_QUESTSTATUS);
|
||||
stmt->setUInt32(0, GUID_LOPART(guid));
|
||||
trans->Append(stmt);
|
||||
|
||||
// Delete record of the faction old completed quests
|
||||
{
|
||||
std::ostringstream quests;
|
||||
ObjectMgr::QuestMap const& qTemplates = sObjectMgr->GetQuestTemplates();
|
||||
for (ObjectMgr::QuestMap::const_iterator iter = qTemplates.begin(); iter != qTemplates.end(); ++iter)
|
||||
// Achievement conversion
|
||||
for (std::map<uint32, uint32>::const_iterator it = sObjectMgr->FactionChange_Achievements.begin(); it != sObjectMgr->FactionChange_Achievements.end(); ++it)
|
||||
{
|
||||
Quest *qinfo = iter->second;
|
||||
uint32 requiredRaces = qinfo->GetRequiredRaces();
|
||||
if (team == TEAM_ALLIANCE)
|
||||
{
|
||||
if (requiredRaces & RACEMASK_ALLIANCE)
|
||||
{
|
||||
quests << uint32(qinfo->GetQuestId());
|
||||
quests << ',';
|
||||
}
|
||||
}
|
||||
else // if (team == TEAM_HORDE)
|
||||
{
|
||||
if (requiredRaces & RACEMASK_HORDE)
|
||||
{
|
||||
quests << uint32(qinfo->GetQuestId());
|
||||
quests << ',';
|
||||
}
|
||||
}
|
||||
}
|
||||
uint32 achiev_alliance = it->first;
|
||||
uint32 achiev_horde = it->second;
|
||||
|
||||
std::string questsStr = quests.str();
|
||||
questsStr = questsStr.substr(0, questsStr.length() - 1);
|
||||
|
||||
if (!questsStr.empty())
|
||||
trans->PAppend("DELETE FROM `character_queststatus_rewarded` WHERE guid='%u' AND quest IN (%s)", lowGuid, questsStr.c_str());
|
||||
}
|
||||
|
||||
if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD))
|
||||
{
|
||||
// Reset guild
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GUILD_MEMBER);
|
||||
|
||||
stmt->setUInt32(0, lowGuid);
|
||||
|
||||
PreparedQueryResult result = CharacterDatabase.Query(stmt);
|
||||
if (result)
|
||||
if (Guild* guild = sGuildMgr->GetGuildById((result->Fetch()[0]).GetUInt32()))
|
||||
guild->DeleteMember(MAKE_NEW_GUID(lowGuid, 0, HIGHGUID_PLAYER));
|
||||
}
|
||||
|
||||
if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_ADD_FRIEND))
|
||||
{
|
||||
// Delete Friend List
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_SOCIAL_BY_GUID);
|
||||
stmt->setUInt32(0, lowGuid);
|
||||
trans->Append(stmt);
|
||||
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_SOCIAL_BY_FRIEND);
|
||||
stmt->setUInt32(0, lowGuid);
|
||||
trans->Append(stmt);
|
||||
|
||||
}
|
||||
|
||||
// Leave Arena Teams
|
||||
Player::LeaveAllArenaTeams(guid);
|
||||
|
||||
// Reset homebind and position
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_PLAYER_HOMEBIND);
|
||||
stmt->setUInt32(0, lowGuid);
|
||||
trans->Append(stmt);
|
||||
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PLAYER_HOMEBIND);
|
||||
stmt->setUInt32(0, lowGuid);
|
||||
if (team == TEAM_ALLIANCE)
|
||||
{
|
||||
stmt->setUInt16(1, 0);
|
||||
stmt->setUInt16(2, 1519);
|
||||
stmt->setFloat (3, -8867.68f);
|
||||
stmt->setFloat (4, 673.373f);
|
||||
stmt->setFloat (5, 97.9034f);
|
||||
Player::SavePositionInDB(0, -8867.68f, 673.373f, 97.9034f, 0.0f, 1519, lowGuid);
|
||||
}
|
||||
else
|
||||
{
|
||||
stmt->setUInt16(1, 1);
|
||||
stmt->setUInt16(2, 1637);
|
||||
stmt->setFloat (3, 1633.33f);
|
||||
stmt->setFloat (4, -4439.11f);
|
||||
stmt->setFloat (5, 15.7588f);
|
||||
Player::SavePositionInDB(1, 1633.33f, -4439.11f, 15.7588f, 0.0f, 1637, lowGuid);
|
||||
}
|
||||
trans->Append(stmt);
|
||||
|
||||
// Achievement conversion
|
||||
for (std::map<uint32, uint32>::const_iterator it = sObjectMgr->FactionChange_Achievements.begin(); it != sObjectMgr->FactionChange_Achievements.end(); ++it)
|
||||
{
|
||||
uint32 achiev_alliance = it->first;
|
||||
uint32 achiev_horde = it->second;
|
||||
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_ACHIEVEMENT_BY_ACHIEVEMENT);
|
||||
stmt->setUInt16(0, uint16(team == TEAM_ALLIANCE ? achiev_alliance : achiev_horde));
|
||||
stmt->setUInt32(1, lowGuid);
|
||||
trans->Append(stmt);
|
||||
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_ACHIEVEMENT);
|
||||
stmt->setUInt16(0, uint16(team == TEAM_ALLIANCE ? achiev_alliance : achiev_horde));
|
||||
stmt->setUInt16(1, uint16(team == TEAM_ALLIANCE ? achiev_horde : achiev_alliance));
|
||||
stmt->setUInt32(2, lowGuid);
|
||||
trans->Append(stmt);
|
||||
}
|
||||
|
||||
// Item conversion
|
||||
for (std::map<uint32, uint32>::const_iterator it = sObjectMgr->FactionChange_Items.begin(); it != sObjectMgr->FactionChange_Items.end(); ++it)
|
||||
{
|
||||
uint32 item_alliance = it->first;
|
||||
uint32 item_horde = it->second;
|
||||
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_INVENTORY_FACTION_CHANGE);
|
||||
stmt->setUInt32(0, (team == TEAM_ALLIANCE ? item_alliance : item_horde));
|
||||
stmt->setUInt32(1, (team == TEAM_ALLIANCE ? item_horde : item_alliance));
|
||||
stmt->setUInt32(2, guid);
|
||||
trans->Append(stmt);
|
||||
}
|
||||
|
||||
// Spell conversion
|
||||
for (std::map<uint32, uint32>::const_iterator it = sObjectMgr->FactionChange_Spells.begin(); it != sObjectMgr->FactionChange_Spells.end(); ++it)
|
||||
{
|
||||
uint32 spell_alliance = it->first;
|
||||
uint32 spell_horde = it->second;
|
||||
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_SPELL_BY_SPELL);
|
||||
stmt->setUInt32(0, (team == TEAM_ALLIANCE ? spell_alliance : spell_horde));
|
||||
stmt->setUInt32(1, lowGuid);
|
||||
trans->Append(stmt);
|
||||
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_SPELL_FACTION_CHANGE);
|
||||
stmt->setUInt32(0, (team == TEAM_ALLIANCE ? spell_alliance : spell_horde));
|
||||
stmt->setUInt32(1, (team == TEAM_ALLIANCE ? spell_horde : spell_alliance));
|
||||
stmt->setUInt32(2, lowGuid);
|
||||
trans->Append(stmt);
|
||||
}
|
||||
|
||||
// Reputation conversion
|
||||
for (std::map<uint32, uint32>::const_iterator it = sObjectMgr->FactionChange_Reputation.begin(); it != sObjectMgr->FactionChange_Reputation.end(); ++it)
|
||||
{
|
||||
uint32 reputation_alliance = it->first;
|
||||
uint32 reputation_horde = it->second;
|
||||
uint32 newReputation = (team == TEAM_ALLIANCE) ? reputation_alliance : reputation_horde;
|
||||
uint32 oldReputation = (team == TEAM_ALLIANCE) ? reputation_horde : reputation_alliance;
|
||||
|
||||
// select old standing set in db
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_REP_BY_FACTION);
|
||||
stmt->setUInt32(0, oldReputation);
|
||||
stmt->setUInt32(1, lowGuid);
|
||||
PreparedQueryResult result = CharacterDatabase.Query(stmt);
|
||||
|
||||
if (!result)
|
||||
{
|
||||
WorldPacket data(SMSG_CHAR_FACTION_CHANGE, 1);
|
||||
data << uint8(CHAR_CREATE_ERROR);
|
||||
SendPacket(&data);
|
||||
return;
|
||||
}
|
||||
|
||||
Field* fields = result->Fetch();
|
||||
int32 oldDBRep = fields[0].GetInt32();
|
||||
FactionEntry const* factionEntry = sFactionStore.LookupEntry(oldReputation);
|
||||
|
||||
// old base reputation
|
||||
int32 oldBaseRep = sObjectMgr->GetBaseReputationOff(factionEntry, oldRace, playerClass);
|
||||
|
||||
// new base reputation
|
||||
int32 newBaseRep = sObjectMgr->GetBaseReputationOff(sFactionStore.LookupEntry(newReputation), race, playerClass);
|
||||
|
||||
// final reputation shouldnt change
|
||||
int32 FinalRep = oldDBRep + oldBaseRep;
|
||||
int32 newDBRep = FinalRep - newBaseRep;
|
||||
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_REP_BY_FACTION);
|
||||
stmt->setUInt32(0, newReputation);
|
||||
stmt->setUInt32(1, lowGuid);
|
||||
trans->Append(stmt);
|
||||
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_REP_FACTION_CHANGE);
|
||||
stmt->setUInt16(0, uint16(newReputation));
|
||||
stmt->setInt32(1, newDBRep);
|
||||
stmt->setUInt16(2, uint16(oldReputation));
|
||||
stmt->setUInt32(3, lowGuid);
|
||||
trans->Append(stmt);
|
||||
}
|
||||
|
||||
// Title conversion
|
||||
if (knownTitlesStr)
|
||||
{
|
||||
const uint32 ktcount = KNOWN_TITLES_SIZE * 2;
|
||||
uint32 knownTitles[ktcount];
|
||||
Tokenizer tokens(knownTitlesStr, ' ', ktcount);
|
||||
|
||||
if (tokens.size() != ktcount)
|
||||
return;
|
||||
|
||||
for (uint32 index = 0; index < ktcount; ++index)
|
||||
knownTitles[index] = atol(tokens[index]);
|
||||
|
||||
for (std::map<uint32, uint32>::const_iterator it = sObjectMgr->FactionChange_Titles.begin(); it != sObjectMgr->FactionChange_Titles.end(); ++it)
|
||||
{
|
||||
uint32 title_alliance = it->first;
|
||||
uint32 title_horde = it->second;
|
||||
|
||||
CharTitlesEntry const* atitleInfo = sCharTitlesStore.LookupEntry(title_alliance);
|
||||
CharTitlesEntry const* htitleInfo = sCharTitlesStore.LookupEntry(title_horde);
|
||||
// new team
|
||||
if (team == TEAM_ALLIANCE)
|
||||
{
|
||||
uint32 bitIndex = htitleInfo->bit_index;
|
||||
uint32 index = bitIndex / 32;
|
||||
uint32 old_flag = 1 << (bitIndex % 32);
|
||||
uint32 new_flag = 1 << (atitleInfo->bit_index % 32);
|
||||
if (knownTitles[index] & old_flag)
|
||||
{
|
||||
knownTitles[index] &= ~old_flag;
|
||||
// use index of the new title
|
||||
knownTitles[atitleInfo->bit_index / 32] |= new_flag;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
uint32 bitIndex = atitleInfo->bit_index;
|
||||
uint32 index = bitIndex / 32;
|
||||
uint32 old_flag = 1 << (bitIndex % 32);
|
||||
uint32 new_flag = 1 << (htitleInfo->bit_index % 32);
|
||||
if (knownTitles[index] & old_flag)
|
||||
{
|
||||
knownTitles[index] &= ~old_flag;
|
||||
// use index of the new title
|
||||
knownTitles[htitleInfo->bit_index / 32] |= new_flag;
|
||||
}
|
||||
}
|
||||
|
||||
std::ostringstream ss;
|
||||
for (uint32 index = 0; index < ktcount; ++index)
|
||||
ss << knownTitles[index] << ' ';
|
||||
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_TITLES_FACTION_CHANGE);
|
||||
stmt->setString(0, ss.str().c_str());
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_ACHIEVEMENT_BY_ACHIEVEMENT);
|
||||
stmt->setUInt16(0, uint16(team == TEAM_ALLIANCE ? achiev_alliance : achiev_horde));
|
||||
stmt->setUInt32(1, lowGuid);
|
||||
trans->Append(stmt);
|
||||
|
||||
// unset any currently chosen title
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_RES_CHAR_TITLES_FACTION_CHANGE);
|
||||
stmt->setUInt32(0, lowGuid);
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_ACHIEVEMENT);
|
||||
stmt->setUInt16(0, uint16(team == TEAM_ALLIANCE ? achiev_alliance : achiev_horde));
|
||||
stmt->setUInt16(1, uint16(team == TEAM_ALLIANCE ? achiev_horde : achiev_alliance));
|
||||
stmt->setUInt32(2, lowGuid);
|
||||
trans->Append(stmt);
|
||||
}
|
||||
|
||||
// Item conversion
|
||||
for (std::map<uint32, uint32>::const_iterator it = sObjectMgr->FactionChange_Items.begin(); it != sObjectMgr->FactionChange_Items.end(); ++it)
|
||||
{
|
||||
uint32 item_alliance = it->first;
|
||||
uint32 item_horde = it->second;
|
||||
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_INVENTORY_FACTION_CHANGE);
|
||||
stmt->setUInt32(0, (team == TEAM_ALLIANCE ? item_alliance : item_horde));
|
||||
stmt->setUInt32(1, (team == TEAM_ALLIANCE ? item_horde : item_alliance));
|
||||
stmt->setUInt32(2, guid);
|
||||
trans->Append(stmt);
|
||||
}
|
||||
|
||||
// Spell conversion
|
||||
for (std::map<uint32, uint32>::const_iterator it = sObjectMgr->FactionChange_Spells.begin(); it != sObjectMgr->FactionChange_Spells.end(); ++it)
|
||||
{
|
||||
uint32 spell_alliance = it->first;
|
||||
uint32 spell_horde = it->second;
|
||||
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_SPELL_BY_SPELL);
|
||||
stmt->setUInt32(0, (team == TEAM_ALLIANCE ? spell_alliance : spell_horde));
|
||||
stmt->setUInt32(1, lowGuid);
|
||||
trans->Append(stmt);
|
||||
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_SPELL_FACTION_CHANGE);
|
||||
stmt->setUInt32(0, (team == TEAM_ALLIANCE ? spell_alliance : spell_horde));
|
||||
stmt->setUInt32(1, (team == TEAM_ALLIANCE ? spell_horde : spell_alliance));
|
||||
stmt->setUInt32(2, lowGuid);
|
||||
trans->Append(stmt);
|
||||
}
|
||||
|
||||
// Reputation conversion
|
||||
for (std::map<uint32, uint32>::const_iterator it = sObjectMgr->FactionChange_Reputation.begin(); it != sObjectMgr->FactionChange_Reputation.end(); ++it)
|
||||
{
|
||||
uint32 reputation_alliance = it->first;
|
||||
uint32 reputation_horde = it->second;
|
||||
uint32 newReputation = (team == TEAM_ALLIANCE) ? reputation_alliance : reputation_horde;
|
||||
uint32 oldReputation = (team == TEAM_ALLIANCE) ? reputation_horde : reputation_alliance;
|
||||
|
||||
// select old standing set in db
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_REP_BY_FACTION);
|
||||
stmt->setUInt32(0, oldReputation);
|
||||
stmt->setUInt32(1, lowGuid);
|
||||
PreparedQueryResult result = CharacterDatabase.Query(stmt);
|
||||
|
||||
if (!result)
|
||||
{
|
||||
WorldPacket data(SMSG_CHAR_FACTION_CHANGE, 1);
|
||||
data << uint8(CHAR_CREATE_ERROR);
|
||||
SendPacket(&data);
|
||||
return;
|
||||
}
|
||||
|
||||
Field* fields = result->Fetch();
|
||||
int32 oldDBRep = fields[0].GetInt32();
|
||||
FactionEntry const* factionEntry = sFactionStore.LookupEntry(oldReputation);
|
||||
|
||||
// old base reputation
|
||||
int32 oldBaseRep = sObjectMgr->GetBaseReputationOff(factionEntry, oldRace, playerClass);
|
||||
|
||||
// new base reputation
|
||||
int32 newBaseRep = sObjectMgr->GetBaseReputationOff(sFactionStore.LookupEntry(newReputation), race, playerClass);
|
||||
|
||||
// final reputation shouldnt change
|
||||
int32 FinalRep = oldDBRep + oldBaseRep;
|
||||
int32 newDBRep = FinalRep - newBaseRep;
|
||||
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_REP_BY_FACTION);
|
||||
stmt->setUInt32(0, newReputation);
|
||||
stmt->setUInt32(1, lowGuid);
|
||||
trans->Append(stmt);
|
||||
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_REP_FACTION_CHANGE);
|
||||
stmt->setUInt16(0, uint16(newReputation));
|
||||
stmt->setInt32(1, newDBRep);
|
||||
stmt->setUInt16(2, uint16(oldReputation));
|
||||
stmt->setUInt32(3, lowGuid);
|
||||
trans->Append(stmt);
|
||||
}
|
||||
|
||||
// Title conversion
|
||||
if (knownTitlesStr)
|
||||
{
|
||||
const uint32 ktcount = KNOWN_TITLES_SIZE * 2;
|
||||
uint32 knownTitles[ktcount];
|
||||
Tokenizer tokens(knownTitlesStr, ' ', ktcount);
|
||||
|
||||
if (tokens.size() != ktcount)
|
||||
return;
|
||||
|
||||
for (uint32 index = 0; index < ktcount; ++index)
|
||||
knownTitles[index] = atol(tokens[index]);
|
||||
|
||||
for (std::map<uint32, uint32>::const_iterator it = sObjectMgr->FactionChange_Titles.begin(); it != sObjectMgr->FactionChange_Titles.end(); ++it)
|
||||
{
|
||||
uint32 title_alliance = it->first;
|
||||
uint32 title_horde = it->second;
|
||||
|
||||
CharTitlesEntry const* atitleInfo = sCharTitlesStore.LookupEntry(title_alliance);
|
||||
CharTitlesEntry const* htitleInfo = sCharTitlesStore.LookupEntry(title_horde);
|
||||
// new team
|
||||
if (team == TEAM_ALLIANCE)
|
||||
{
|
||||
uint32 bitIndex = htitleInfo->bit_index;
|
||||
uint32 index = bitIndex / 32;
|
||||
uint32 old_flag = 1 << (bitIndex % 32);
|
||||
uint32 new_flag = 1 << (atitleInfo->bit_index % 32);
|
||||
if (knownTitles[index] & old_flag)
|
||||
{
|
||||
knownTitles[index] &= ~old_flag;
|
||||
// use index of the new title
|
||||
knownTitles[atitleInfo->bit_index / 32] |= new_flag;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
uint32 bitIndex = atitleInfo->bit_index;
|
||||
uint32 index = bitIndex / 32;
|
||||
uint32 old_flag = 1 << (bitIndex % 32);
|
||||
uint32 new_flag = 1 << (htitleInfo->bit_index % 32);
|
||||
if (knownTitles[index] & old_flag)
|
||||
{
|
||||
knownTitles[index] &= ~old_flag;
|
||||
// use index of the new title
|
||||
knownTitles[htitleInfo->bit_index / 32] |= new_flag;
|
||||
}
|
||||
}
|
||||
|
||||
std::ostringstream ss;
|
||||
for (uint32 index = 0; index < ktcount; ++index)
|
||||
ss << knownTitles[index] << ' ';
|
||||
|
||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_TITLES_FACTION_CHANGE);
|
||||
stmt->setString(0, ss.str().c_str());
|
||||
stmt->setUInt32(1, lowGuid);
|
||||
trans->Append(stmt);
|
||||
|
||||
// unset any currently chosen title
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_RES_CHAR_TITLES_FACTION_CHANGE);
|
||||
stmt->setUInt32(0, lowGuid);
|
||||
trans->Append(stmt);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CharacterDatabase.CommitTransaction(trans);
|
||||
|
||||
std::string IP_str = GetRemoteAddress();
|
||||
sLog->outDebug(LOG_FILTER_UNITS, "Account: %d (IP: %s), Character guid: %u Change Race/Faction to: %s", GetAccountId(), IP_str.c_str(), lowGuid, newname.c_str());
|
||||
sLog->outDebug(LOG_FILTER_PLAYER, "%s (IP: %s) changed race from %u to %u", GetPlayerInfo().c_str(), IP_str.c_str(), oldRace, race);
|
||||
|
||||
WorldPacket data(SMSG_CHAR_FACTION_CHANGE, 1 + 8 + (newname.size() + 1) + 1 + 1 + 1 + 1 + 1 + 1 + 1);
|
||||
data << uint8(RESPONSE_SUCCESS);
|
||||
|
||||
@@ -85,7 +85,7 @@ enum Quests
|
||||
QUEST_STONEWROUGHT_DAM = 1558,
|
||||
QUEST_DARK_PORTAL_H = 10951,
|
||||
QUEST_DARK_PORTAL_A = 10952,
|
||||
QUEST_LORDAERON_THRONE_ROOM = 1800,
|
||||
QUEST_LORDAERON_THRONE_ROOM = 1800,
|
||||
QUEST_AUCHINDOUN_AND_THE_RING = 10950,
|
||||
QUEST_TIME_TO_VISIT_THE_CAVERNS_H = 10963,
|
||||
QUEST_TIME_TO_VISIT_THE_CAVERNS_A = 10962,
|
||||
@@ -114,7 +114,7 @@ enum Areatriggers
|
||||
NPC_EXODAR_01_CW_TRIGGER = 22851,
|
||||
NPC_EXODAR_02_CW_TRIGGER = 22905,
|
||||
NPC_AERIS_LANDING_CW_TRIGGER = 22838,
|
||||
NPC_AUCHINDOUN_CW_TRIGGER = 22831,
|
||||
NPC_AUCHINDOUN_CW_TRIGGER = 22831,
|
||||
NPC_SPOREGGAR_CW_TRIGGER = 22829,
|
||||
NPC_THRONE_OF_ELEMENTS_CW_TRIGGER = 22839,
|
||||
NPC_SILVERMOON_01_CW_TRIGGER = 22866,
|
||||
@@ -159,7 +159,7 @@ class npc_winterfin_playmate : public CreatureScript
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit* who)
|
||||
{
|
||||
{
|
||||
if (!phase && who && who->GetDistance2d(me) < 10.0f)
|
||||
if (Player* player = who->ToPlayer())
|
||||
if (player->GetQuestStatus(QUEST_PLAYMATE_ORACLE) == QUEST_STATUS_INCOMPLETE)
|
||||
@@ -188,7 +188,7 @@ class npc_winterfin_playmate : public CreatureScript
|
||||
|
||||
switch(phase)
|
||||
{
|
||||
case 1:
|
||||
case 1:
|
||||
orphan->GetMotionMaster()->MovePoint(0, me->GetPositionX() + cos(me->GetOrientation()) * 5,me->GetPositionY() + sin(me->GetOrientation()) * 5, me->GetPositionZ());
|
||||
orphan->AI()->Talk(TEXT_ORACLE_ORPHAN_1);
|
||||
timer = 3000;
|
||||
@@ -256,7 +256,7 @@ class npc_snowfall_glade_playmate : public CreatureScript
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit* who)
|
||||
{
|
||||
{
|
||||
if (!phase && who && who->GetDistance2d(me) < 10.0f)
|
||||
if (Player* player = who->ToPlayer())
|
||||
if (player->GetQuestStatus(QUEST_PLAYMATE_WOLVAR) == QUEST_STATUS_INCOMPLETE)
|
||||
@@ -273,7 +273,7 @@ class npc_snowfall_glade_playmate : public CreatureScript
|
||||
return;
|
||||
|
||||
if (timer <= diff)
|
||||
{
|
||||
{
|
||||
Player* player = Player::GetPlayer(*me, playerGUID);
|
||||
Creature* orphan = Creature::GetCreature(*me, orphanGUID);
|
||||
|
||||
@@ -401,7 +401,7 @@ class npc_the_biggest_tree : public CreatureScript
|
||||
}
|
||||
++phase;
|
||||
}
|
||||
else
|
||||
else
|
||||
timer -= diff;
|
||||
}
|
||||
|
||||
@@ -440,7 +440,7 @@ class npc_high_oracle_soo_roo : public CreatureScript
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit* who)
|
||||
{
|
||||
{
|
||||
if (!phase && who && who->GetDistance2d(me) < 10.0f)
|
||||
if (Player* player = who->ToPlayer())
|
||||
if (player->GetQuestStatus(QUEST_THE_BRONZE_DRAGONSHRINE_ORACLE) == QUEST_STATUS_INCOMPLETE)
|
||||
@@ -527,7 +527,7 @@ class npc_elder_kekek : public CreatureScript
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit* who)
|
||||
{
|
||||
{
|
||||
if (!phase && who && who->GetDistance2d(me) < 10.0f)
|
||||
if (Player* player = who->ToPlayer())
|
||||
if (player->GetQuestStatus(QUEST_THE_BRONZE_DRAGONSHRINE_WOLVAR) == QUEST_STATUS_INCOMPLETE)
|
||||
@@ -577,7 +577,7 @@ class npc_elder_kekek : public CreatureScript
|
||||
else
|
||||
timer -= diff;
|
||||
}
|
||||
|
||||
|
||||
private:
|
||||
uint32 timer;
|
||||
int8 phase;
|
||||
@@ -594,7 +594,7 @@ class npc_elder_kekek : public CreatureScript
|
||||
|
||||
/*######
|
||||
## npc_the_etymidian
|
||||
## TODO: A red crystal as a gift for the great one should be spawned during the event.
|
||||
## TODO: A red crystal as a gift for the great one should be spawned during the event.
|
||||
######*/
|
||||
class npc_the_etymidian : public CreatureScript
|
||||
{
|
||||
@@ -614,7 +614,7 @@ class npc_the_etymidian : public CreatureScript
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit* who)
|
||||
{
|
||||
{
|
||||
if (!phase && who && who->GetDistance2d(me) < 10.0f)
|
||||
if (Player* player = who->ToPlayer())
|
||||
if (player->GetQuestStatus(QUEST_MEETING_A_GREAT_ONE) == QUEST_STATUS_INCOMPLETE)
|
||||
@@ -936,7 +936,7 @@ class npc_cw_area_trigger : public CreatureScript
|
||||
questId = QUEST_THE_SEAT_OF_THE_NARUU;
|
||||
orphanId = ORPHAN_DRAENEI;
|
||||
break;
|
||||
case NPC_EXODAR_02_CW_TRIGGER:
|
||||
case NPC_EXODAR_02_CW_TRIGGER:
|
||||
questId = QUEST_CALL_ON_THE_FARSEER;
|
||||
orphanId = ORPHAN_DRAENEI;
|
||||
break;
|
||||
@@ -959,27 +959,27 @@ class npc_cw_area_trigger : public CreatureScript
|
||||
case NPC_SILVERMOON_01_CW_TRIGGER:
|
||||
if (player->GetQuestStatus(QUEST_NOW_WHEN_I_GROW_UP) == QUEST_STATUS_INCOMPLETE && getOrphanGUID(player, ORPHAN_BLOOD_ELF))
|
||||
{
|
||||
player->AreaExploredOrEventHappens(QUEST_NOW_WHEN_I_GROW_UP);
|
||||
player->AreaExploredOrEventHappens(QUEST_NOW_WHEN_I_GROW_UP);
|
||||
if (player->GetQuestStatus(QUEST_NOW_WHEN_I_GROW_UP) == QUEST_STATUS_COMPLETE)
|
||||
if (Creature* samuro = me->FindNearestCreature(25151, 20.0f))
|
||||
{
|
||||
uint32 emote = 0;
|
||||
switch(urand(1,5))
|
||||
{
|
||||
case 1:
|
||||
emote = EMOTE_ONESHOT_WAVE;
|
||||
case 1:
|
||||
emote = EMOTE_ONESHOT_WAVE;
|
||||
break;
|
||||
case 2:
|
||||
emote = EMOTE_ONESHOT_ROAR;
|
||||
emote = EMOTE_ONESHOT_ROAR;
|
||||
break;
|
||||
case 3:
|
||||
emote = EMOTE_ONESHOT_FLEX;
|
||||
case 3:
|
||||
emote = EMOTE_ONESHOT_FLEX;
|
||||
break;
|
||||
case 4:
|
||||
emote = EMOTE_ONESHOT_SALUTE;
|
||||
emote = EMOTE_ONESHOT_SALUTE;
|
||||
break;
|
||||
case 5:
|
||||
emote = EMOTE_ONESHOT_DANCE;
|
||||
case 5:
|
||||
emote = EMOTE_ONESHOT_DANCE;
|
||||
break;
|
||||
}
|
||||
samuro->HandleEmoteCommand(emote);
|
||||
@@ -1009,13 +1009,13 @@ class npc_grizzlemaw_cw_trigger : public CreatureScript
|
||||
|
||||
struct npc_grizzlemaw_cw_triggerAI : public ScriptedAI
|
||||
{
|
||||
npc_grizzlemaw_cw_triggerAI(Creature* creature) : ScriptedAI (creature)
|
||||
npc_grizzlemaw_cw_triggerAI(Creature* creature) : ScriptedAI (creature)
|
||||
{
|
||||
me->SetDisplayId(DISPLAY_INVISIBLE);
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit* who)
|
||||
{
|
||||
{
|
||||
if (who && who->GetDistance2d(me) < 10.0f)
|
||||
if (Player* player = who->ToPlayer())
|
||||
if (player->GetQuestStatus(QUEST_HOME_OF_THE_BEAR_MEN) == QUEST_STATUS_INCOMPLETE)
|
||||
|
||||
@@ -369,7 +369,7 @@ class boss_halion : public CreatureScript
|
||||
{
|
||||
events.SetPhase(PHASE_TWO);
|
||||
Talk(SAY_PHASE_TWO);
|
||||
|
||||
|
||||
me->CastStop();
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
DoCast(me, SPELL_TWILIGHT_PHASING);
|
||||
@@ -1741,7 +1741,7 @@ void AddSC_boss_halion()
|
||||
{
|
||||
new boss_halion();
|
||||
new boss_twilight_halion();
|
||||
|
||||
|
||||
new npc_halion_controller();
|
||||
new npc_meteor_strike_initial();
|
||||
new npc_meteor_strike();
|
||||
|
||||
@@ -480,7 +480,7 @@ enum utils
|
||||
enum NesingwaryChildrensWeek
|
||||
{
|
||||
SPELL_ORPHAN_OUT = 58818,
|
||||
|
||||
|
||||
QUEST_THE_MIGHTY_HEMET_NESINGWARY = 13957,
|
||||
|
||||
ORPHAN_WOLVAR = 33532,
|
||||
@@ -680,7 +680,7 @@ public:
|
||||
uint32 timer;
|
||||
int8 phase;
|
||||
uint64 playerGUID;
|
||||
uint64 orphanGUID;
|
||||
uint64 orphanGUID;
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const
|
||||
|
||||
@@ -246,7 +246,7 @@ class AreaTrigger_at_sholazar_waygate : public AreaTriggerScript
|
||||
|
||||
bool OnTrigger(Player* player, AreaTriggerEntry const* trigger)
|
||||
{
|
||||
if (!player->isDead() && (player->GetQuestStatus(QUEST_MEETING_A_GREAT_ONE) != QUEST_STATUS_NONE ||
|
||||
if (!player->isDead() && (player->GetQuestStatus(QUEST_MEETING_A_GREAT_ONE) != QUEST_STATUS_NONE ||
|
||||
(player->GetQuestStatus(QUEST_THE_MAKERS_OVERLOOK) == QUEST_STATUS_REWARDED && player->GetQuestStatus(QUEST_THE_MAKERS_PERCH) == QUEST_STATUS_REWARDED)))
|
||||
{
|
||||
switch (trigger->id)
|
||||
|
||||
Reference in new issue
Block a user