revert(Core): ChrRace.dbc full implementation (#16114)
* revert (core): ChrRace.dbc full implementation we revert this due to several issues arrising. Although the dbc reading is done in full and correctly. Azerothcore relied on the original handling (althought not propper) for so long that there is * revert * Update remove_charrace_dbc.sql * Update remove_charrace_dbc.sql * Update remove_charrace_dbc.sql
This commit is contained in:
parent
43103b6145
commit
7e58650cf5
26 changed files with 225 additions and 165 deletions
99
data/sql/updates/pending_db_world/remove_charrace_dbc.sql
Normal file
99
data/sql/updates/pending_db_world/remove_charrace_dbc.sql
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
-- --------------------------------------------------------
|
||||
-- Host: 127.0.0.1
|
||||
-- Server version: 8.0.29 - MySQL Community Server - GPL
|
||||
-- Server OS: Win64
|
||||
-- HeidiSQL Version: 12.0.0.6468
|
||||
-- --------------------------------------------------------
|
||||
|
||||
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET NAMES utf8 */;
|
||||
/*!50503 SET NAMES utf8mb4 */;
|
||||
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
|
||||
/*!40103 SET TIME_ZONE='+00:00' */;
|
||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
||||
|
||||
-- Dumping structure for table acore_world.chrraces_dbc
|
||||
DROP TABLE IF EXISTS `chrraces_dbc`;
|
||||
CREATE TABLE IF NOT EXISTS `chrraces_dbc` (
|
||||
`ID` int NOT NULL DEFAULT '0',
|
||||
`Flags` int NOT NULL DEFAULT '0',
|
||||
`FactionID` int NOT NULL DEFAULT '0',
|
||||
`ExplorationSoundID` int NOT NULL DEFAULT '0',
|
||||
`MaleDisplayId` int NOT NULL DEFAULT '0',
|
||||
`FemaleDisplayId` int NOT NULL DEFAULT '0',
|
||||
`ClientPrefix` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`BaseLanguage` int NOT NULL DEFAULT '0',
|
||||
`CreatureType` int NOT NULL DEFAULT '0',
|
||||
`ResSicknessSpellID` int NOT NULL DEFAULT '0',
|
||||
`SplashSoundID` int NOT NULL DEFAULT '0',
|
||||
`ClientFilestring` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`CinematicSequenceID` int NOT NULL DEFAULT '0',
|
||||
`Alliance` int NOT NULL DEFAULT '0',
|
||||
`Name_Lang_enUS` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Lang_enGB` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Lang_koKR` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Lang_frFR` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Lang_deDE` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Lang_enCN` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Lang_zhCN` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Lang_enTW` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Lang_zhTW` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Lang_esES` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Lang_esMX` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Lang_ruRU` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Lang_ptPT` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Lang_ptBR` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Lang_itIT` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Lang_Unk` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Lang_Mask` int unsigned NOT NULL DEFAULT '0',
|
||||
`Name_Female_Lang_enUS` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Female_Lang_enGB` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Female_Lang_koKR` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Female_Lang_frFR` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Female_Lang_deDE` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Female_Lang_enCN` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Female_Lang_zhCN` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Female_Lang_enTW` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Female_Lang_zhTW` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Female_Lang_esES` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Female_Lang_esMX` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Female_Lang_ruRU` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Female_Lang_ptPT` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Female_Lang_ptBR` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Female_Lang_itIT` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Female_Lang_Unk` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Female_Lang_Mask` int unsigned NOT NULL DEFAULT '0',
|
||||
`Name_Male_Lang_enUS` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Male_Lang_enGB` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Male_Lang_koKR` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Male_Lang_frFR` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Male_Lang_deDE` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Male_Lang_enCN` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Male_Lang_zhCN` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Male_Lang_enTW` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Male_Lang_zhTW` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Male_Lang_esES` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Male_Lang_esMX` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Male_Lang_ruRU` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Male_Lang_ptPT` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Male_Lang_ptBR` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Male_Lang_itIT` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Male_Lang_Unk` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Name_Male_Lang_Mask` int unsigned NOT NULL DEFAULT '0',
|
||||
`FacialHairCustomization_1` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`FacialHairCustomization_2` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`HairCustomization` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`Required_Expansion` int NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`ID`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- Dumping data for table acore_world.chrraces_dbc: ~0 rows (approximately)
|
||||
DELETE FROM `chrraces_dbc`;
|
||||
|
||||
/*!40103 SET TIME_ZONE=IFNULL(@OLD_TIME_ZONE, 'system') */;
|
||||
/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
|
||||
/*!40014 SET FOREIGN_KEY_CHECKS=IFNULL(@OLD_FOREIGN_KEY_CHECKS, 1) */;
|
||||
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||
/*!40111 SET SQL_NOTES=IFNULL(@OLD_SQL_NOTES, 1) */;
|
||||
|
|
@ -2258,7 +2258,7 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement)
|
|||
//! Since no common attributes were found, (not even in titleRewardFlags field)
|
||||
//! we explicitly check by ID. Maybe in the future we could move the achievement_reward
|
||||
//! condition fields to the condition system.
|
||||
if (uint32 titleId = reward->titleId[achievement->ID == 1793 ? GetPlayer()->GetNativeGender() : (GetPlayer()->GetTeam() == ALLIANCE ? 0 : 1)])
|
||||
if (uint32 titleId = reward->titleId[achievement->ID == 1793 ? GetPlayer()->getGender() : uint8(GetPlayer()->GetTeamId())])
|
||||
if (CharTitlesEntry const* titleEntry = sCharTitlesStore.LookupEntry(titleId))
|
||||
GetPlayer()->SetTitle(titleEntry);
|
||||
|
||||
|
|
@ -2363,8 +2363,8 @@ bool AchievementMgr::CanUpdateCriteria(AchievementCriteriaEntry const* criteria,
|
|||
if (achievement->mapID != -1 && GetPlayer()->GetMapId() != uint32(achievement->mapID))
|
||||
return false;
|
||||
|
||||
if ((achievement->requiredFaction == ACHIEVEMENT_FACTION_HORDE && GetPlayer()->GetTeamId() != TEAM_HORDE) ||
|
||||
(achievement->requiredFaction == ACHIEVEMENT_FACTION_ALLIANCE && GetPlayer()->GetTeamId() != TEAM_ALLIANCE))
|
||||
if ((achievement->requiredFaction == ACHIEVEMENT_FACTION_HORDE && GetPlayer()->GetTeamId(true) != TEAM_HORDE) ||
|
||||
(achievement->requiredFaction == ACHIEVEMENT_FACTION_ALLIANCE && GetPlayer()->GetTeamId(true) != TEAM_ALLIANCE))
|
||||
return false;
|
||||
|
||||
for (uint32 i = 0; i < MAX_CRITERIA_REQUIREMENTS; ++i)
|
||||
|
|
|
|||
|
|
@ -1506,11 +1506,6 @@ struct WGWorkshop
|
|||
teamControl = team;
|
||||
break;
|
||||
}
|
||||
case HORDE_FACTION:
|
||||
case ALLIANCE_FACTION:
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!init)
|
||||
|
|
|
|||
|
|
@ -744,7 +744,7 @@ uint32 Battleground::GetRealRepFactionForPlayer(uint32 factionId, Player* player
|
|||
if (player)
|
||||
{
|
||||
// if the bg team is not the original team, reverse reputation
|
||||
if (player->GetBgTeamId() != player->GetTeamId())
|
||||
if (player->GetBgTeamId() != player->GetTeamId(true))
|
||||
{
|
||||
switch (factionId)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -144,7 +144,7 @@ GroupQueueInfo* BattlegroundQueue::AddGroup(Player* leader, Group* group, Battle
|
|||
ginfo->JoinTime = GameTime::GetGameTimeMS().count();
|
||||
ginfo->RemoveInviteTime = 0;
|
||||
ginfo->teamId = leader->GetTeamId();
|
||||
ginfo->RealTeamID = leader->GetTeamId();
|
||||
ginfo->RealTeamID = leader->GetTeamId(true);
|
||||
ginfo->ArenaTeamRating = arenaRating;
|
||||
ginfo->ArenaMatchmakerRating = matchmakerRating;
|
||||
ginfo->PreviousOpponentsTeamId = opponentsArenaTeamId;
|
||||
|
|
|
|||
|
|
@ -431,7 +431,7 @@ namespace lfg
|
|||
{
|
||||
if (!itemRequirement->checkLeaderOnly || !group || group->GetLeaderGUID() == player->GetGUID())
|
||||
{
|
||||
if (itemRequirement->faction == TEAM_NEUTRAL || itemRequirement->faction == player->GetTeamId())
|
||||
if (itemRequirement->faction == TEAM_NEUTRAL || itemRequirement->faction == player->GetTeamId(true))
|
||||
{
|
||||
if (!player->HasItemCount(itemRequirement->id, 1))
|
||||
{
|
||||
|
|
@ -447,7 +447,7 @@ namespace lfg
|
|||
{
|
||||
if (!questRequirement->checkLeaderOnly || !group || group->GetLeaderGUID() == player->GetGUID())
|
||||
{
|
||||
if (questRequirement->faction == TEAM_NEUTRAL || questRequirement->faction == player->GetTeamId())
|
||||
if (questRequirement->faction == TEAM_NEUTRAL || questRequirement->faction == player->GetTeamId(true))
|
||||
{
|
||||
if (!player->GetQuestRewardStatus(questRequirement->id))
|
||||
{
|
||||
|
|
@ -469,7 +469,7 @@ namespace lfg
|
|||
{
|
||||
if (!achievementRequirement->checkLeaderOnly || !group || group->GetLeaderGUID() == player->GetGUID())
|
||||
{
|
||||
if (achievementRequirement->faction == TEAM_NEUTRAL || achievementRequirement->faction == player->GetTeamId())
|
||||
if (achievementRequirement->faction == TEAM_NEUTRAL || achievementRequirement->faction == player->GetTeamId(true))
|
||||
{
|
||||
if (!player->HasAchieved(achievementRequirement->id))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -517,10 +517,9 @@ bool Player::Create(ObjectGuid::LowType guidlow, CharacterCreateInfo* createInfo
|
|||
return false;
|
||||
}
|
||||
|
||||
setRace(createInfo->Race);
|
||||
setClass(createInfo->Class);
|
||||
setGender(Gender(createInfo->Gender));
|
||||
setPowerType(Powers(powertype), false);
|
||||
uint32 RaceClassGender = (createInfo->Race) | (createInfo->Class << 8) | (createInfo->Gender << 16);
|
||||
|
||||
SetUInt32Value(UNIT_FIELD_BYTES_0, (RaceClassGender | (powertype << 24)));
|
||||
InitDisplayIds();
|
||||
if (sWorld->getIntConfig(CONFIG_GAME_TYPE) == REALM_TYPE_PVP || sWorld->getIntConfig(CONFIG_GAME_TYPE) == REALM_TYPE_RPPVP)
|
||||
{
|
||||
|
|
@ -725,7 +724,7 @@ bool Player::StoreNewItemInBestSlots(uint32 titem_id, uint32 titem_amount)
|
|||
}
|
||||
|
||||
// item can't be added
|
||||
LOG_ERROR("entities.player", "STORAGE: Can't equip or store initial item {} for race {} class {}, error msg = {}", titem_id, getRace(), getClass(), msg);
|
||||
LOG_ERROR("entities.player", "STORAGE: Can't equip or store initial item {} for race {} class {}, error msg = {}", titem_id, getRace(true), getClass(), msg);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -2225,7 +2224,7 @@ void Player::SetGameMaster(bool on)
|
|||
SetPhaseMask(newPhase, false);
|
||||
|
||||
m_ExtraFlags &= ~ PLAYER_EXTRA_GM_ON;
|
||||
SetFactionForRace(getRace());
|
||||
SetFactionForRace(getRace(true));
|
||||
RemovePlayerFlag(PLAYER_FLAGS_GM);
|
||||
RemoveUnitFlag2(UNIT_FLAG2_ALLOW_CHEAT_SPELLS);
|
||||
|
||||
|
|
@ -2436,7 +2435,7 @@ void Player::GiveLevel(uint8 level)
|
|||
guild->UpdateMemberData(this, GUILD_MEMBER_DATA_LEVEL, level);
|
||||
|
||||
PlayerLevelInfo info;
|
||||
sObjectMgr->GetPlayerLevelInfo(getRace(), getClass(), level, &info);
|
||||
sObjectMgr->GetPlayerLevelInfo(getRace(true), getClass(), level, &info);
|
||||
|
||||
PlayerClassLevelInfo classInfo;
|
||||
sObjectMgr->GetPlayerClassLevelInfo(getClass(), level, &classInfo);
|
||||
|
|
@ -2552,7 +2551,7 @@ void Player::InitStatsForLevel(bool reapplyMods)
|
|||
sObjectMgr->GetPlayerClassLevelInfo(getClass(), GetLevel(), &classInfo);
|
||||
|
||||
PlayerLevelInfo info;
|
||||
sObjectMgr->GetPlayerLevelInfo(getRace(), getClass(), GetLevel(), &info);
|
||||
sObjectMgr->GetPlayerLevelInfo(getRace(true), getClass(), GetLevel(), &info);
|
||||
|
||||
uint32 maxPlayerLevel = sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL);
|
||||
sScriptMgr->OnSetMaxLevel(this, maxPlayerLevel);
|
||||
|
|
@ -4339,7 +4338,7 @@ void Player::BuildPlayerRepop()
|
|||
WorldPacket data(SMSG_PRE_RESURRECT, GetPackGUID().size());
|
||||
data << GetPackGUID();
|
||||
GetSession()->SendPacket(&data);
|
||||
if (getRace() == RACE_NIGHTELF)
|
||||
if (getRace(true) == RACE_NIGHTELF)
|
||||
{
|
||||
CastSpell(this, 20584, true);
|
||||
}
|
||||
|
|
@ -5743,19 +5742,19 @@ TeamId Player::TeamIdForRace(uint8 race)
|
|||
{
|
||||
if (ChrRacesEntry const* rEntry = sChrRacesStore.LookupEntry(race))
|
||||
{
|
||||
switch (rEntry->BaseLanguage)
|
||||
switch (rEntry->TeamID)
|
||||
{
|
||||
case 1:
|
||||
return HORDE_FACTION;
|
||||
return TEAM_HORDE;
|
||||
case 7:
|
||||
return ALLIANCE_FACTION;
|
||||
return TEAM_ALLIANCE;
|
||||
}
|
||||
LOG_ERROR("entities.player", "Race ({}) has wrong teamid ({}) in DBC: wrong DBC files?", uint32(race), rEntry->BaseLanguage);
|
||||
LOG_ERROR("entities.player", "Race ({}) has wrong teamid ({}) in DBC: wrong DBC files?", uint32(race), rEntry->TeamID);
|
||||
}
|
||||
else
|
||||
LOG_ERROR("entities.player", "Race ({}) not found in DBC: wrong DBC files?", uint32(race));
|
||||
|
||||
return ALLIANCE_FACTION;
|
||||
return TEAM_ALLIANCE;
|
||||
}
|
||||
|
||||
void Player::SetFactionForRace(uint8 race)
|
||||
|
|
@ -5764,7 +5763,7 @@ void Player::SetFactionForRace(uint8 race)
|
|||
|
||||
sScriptMgr->OnPlayerUpdateFaction(this);
|
||||
|
||||
if (GetTeamId() != GetTeamId())
|
||||
if (GetTeamId(true) != GetTeamId())
|
||||
return;
|
||||
|
||||
ChrRacesEntry const* rEntry = sChrRacesStore.LookupEntry(race);
|
||||
|
|
@ -5882,7 +5881,7 @@ void Player::RewardReputation(Unit* victim, float rate)
|
|||
ChampioningFaction = GetChampioningFaction();
|
||||
}
|
||||
|
||||
TeamId teamId = GetTeamId(); // Always check player original reputation when rewarding
|
||||
TeamId teamId = GetTeamId(true); // Always check player original reputation when rewarding
|
||||
|
||||
if (Rep->RepFaction1 && (!Rep->TeamDependent || teamId == TEAM_ALLIANCE))
|
||||
{
|
||||
|
|
@ -6066,7 +6065,7 @@ bool Player::RewardHonor(Unit* uVictim, uint32 groupsize, int32 honor, bool awar
|
|||
ApplyModUInt32Value(PLAYER_FIELD_LIFETIME_HONORABLE_KILLS, 1, true);
|
||||
UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_EARN_HONORABLE_KILL);
|
||||
UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HK_CLASS, victim->getClass());
|
||||
UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HK_RACE, victim->getRace());
|
||||
UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HK_RACE, victim->getRace(true));
|
||||
UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL_AT_AREA, GetAreaId());
|
||||
UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL, 1, 0, victim);
|
||||
UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_SPECIAL_PVP_KILL, 1, 0, victim);
|
||||
|
|
@ -10271,7 +10270,7 @@ bool Player::ActivateTaxiPathTo(std::vector<uint32> const& nodes, Creature* npc
|
|||
// only one mount ID for both sides. Probably not good to use 315 in case DBC nodes
|
||||
// change but I couldn't find a suitable alternative. OK to use class because only DK
|
||||
// can use this taxi.
|
||||
uint32 mount_display_id = sObjectMgr->GetTaxiMountDisplayId(sourcenode, GetTeamId(), npc == nullptr || (sourcenode == 315 && getClass() == CLASS_DEATH_KNIGHT));
|
||||
uint32 mount_display_id = sObjectMgr->GetTaxiMountDisplayId(sourcenode, GetTeamId(true), npc == nullptr || (sourcenode == 315 && getClass() == CLASS_DEATH_KNIGHT));
|
||||
|
||||
// in spell case allow 0 model
|
||||
if ((mount_display_id == 0 && spellid == 0) || sourcepath == 0)
|
||||
|
|
@ -10366,7 +10365,7 @@ void Player::ContinueTaxiFlight()
|
|||
|
||||
LOG_DEBUG("entities.unit", "WORLD: Restart character {} taxi flight", GetGUID().ToString());
|
||||
|
||||
uint32 mountDisplayId = sObjectMgr->GetTaxiMountDisplayId(sourceNode, GetTeamId(), true);
|
||||
uint32 mountDisplayId = sObjectMgr->GetTaxiMountDisplayId(sourceNode, GetTeamId(true), true);
|
||||
if (!mountDisplayId)
|
||||
return;
|
||||
|
||||
|
|
@ -10535,7 +10534,7 @@ void Player::InitDataForForm(bool reapplyMods)
|
|||
|
||||
void Player::InitDisplayIds()
|
||||
{
|
||||
PlayerInfo const* info = sObjectMgr->GetPlayerInfo(getRace(), getClass());
|
||||
PlayerInfo const* info = sObjectMgr->GetPlayerInfo(getRace(true), getClass());
|
||||
if (!info)
|
||||
{
|
||||
LOG_ERROR("entities.player", "Player {} has incorrect race/class pair. Can't init display ids.", GetGUID().ToString());
|
||||
|
|
@ -10656,7 +10655,7 @@ bool Player::BuyItemFromVendorSlot(ObjectGuid vendorguid, uint32 vendorslot, uin
|
|||
return false;
|
||||
}
|
||||
|
||||
if (!IsGameMaster() && ((pProto->Flags2 & ITEM_FLAGS_EXTRA_HORDE_ONLY && GetTeamId() == TEAM_ALLIANCE) || (pProto->Flags2 & ITEM_FLAGS_EXTRA_ALLIANCE_ONLY && GetTeamId() == TEAM_HORDE)))
|
||||
if (!IsGameMaster() && ((pProto->Flags2 & ITEM_FLAGS_EXTRA_HORDE_ONLY && GetTeamId(true) == TEAM_ALLIANCE) || (pProto->Flags2 & ITEM_FLAGS_EXTRA_ALLIANCE_ONLY && GetTeamId(true) == TEAM_HORDE)))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
@ -11318,7 +11317,7 @@ void Player::ReportedAfkBy(Player* reporter)
|
|||
|
||||
WorldLocation Player::GetStartPosition() const
|
||||
{
|
||||
PlayerInfo const* info = sObjectMgr->GetPlayerInfo(getRace(), getClass());
|
||||
PlayerInfo const* info = sObjectMgr->GetPlayerInfo(getRace(true), getClass());
|
||||
uint32 mapId = info->mapId;
|
||||
if (getClass() == CLASS_DEATH_KNIGHT && HasSpell(50977))
|
||||
return WorldLocation(0, 2352.0f, -5709.0f, 154.5f, 0.0f);
|
||||
|
|
@ -14600,7 +14599,7 @@ void Player::_SaveCharacter(bool create, CharacterDatabaseTransaction trans)
|
|||
stmt->SetData(index++, GetGUID().GetCounter());
|
||||
stmt->SetData(index++, GetSession()->GetAccountId());
|
||||
stmt->SetData(index++, GetName());
|
||||
stmt->SetData(index++, getRace());
|
||||
stmt->SetData(index++, getRace(true));
|
||||
stmt->SetData(index++, getClass());
|
||||
stmt->SetData(index++, GetByteValue(PLAYER_BYTES_3, 0)); // save gender from PLAYER_BYTES_3, UNIT_BYTES_0 changes with every transform effect
|
||||
stmt->SetData(index++, GetLevel());
|
||||
|
|
@ -14718,7 +14717,7 @@ void Player::_SaveCharacter(bool create, CharacterDatabaseTransaction trans)
|
|||
// Update query
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHARACTER);
|
||||
stmt->SetData(index++, GetName());
|
||||
stmt->SetData(index++, getRace());
|
||||
stmt->SetData(index++, getRace(true));
|
||||
stmt->SetData(index++, getClass());
|
||||
stmt->SetData(index++, GetByteValue(PLAYER_BYTES_3, 0)); // save gender from PLAYER_BYTES_3, UNIT_BYTES_0 changes with every transform effect
|
||||
stmt->SetData(index++, GetLevel());
|
||||
|
|
|
|||
|
|
@ -2056,9 +2056,9 @@ public:
|
|||
void CheckAreaExploreAndOutdoor();
|
||||
|
||||
static TeamId TeamIdForRace(uint8 race);
|
||||
[[nodiscard]] uint32 GetTeam() const { return m_team; }
|
||||
[[nodiscard]] TeamId GetTeamId() const { return m_team == ALLIANCE ? TEAM_ALLIANCE : TEAM_HORDE; }
|
||||
[[nodiscard]] TeamId GetTeamId(bool original = false) const { return original ? TeamIdForRace(getRace(true)) : m_team; };
|
||||
void SetFactionForRace(uint8 race);
|
||||
void setTeamId(TeamId teamid) { m_team = teamid; };
|
||||
|
||||
void InitDisplayIds();
|
||||
|
||||
|
|
@ -2709,7 +2709,7 @@ public:
|
|||
void outDebugValues() const;
|
||||
ObjectGuid m_lootGuid;
|
||||
|
||||
uint32 m_team;
|
||||
TeamId m_team;
|
||||
uint32 m_nextSave; // pussywizard
|
||||
uint16 m_additionalSaveTimer; // pussywizard
|
||||
uint8 m_additionalSaveMask; // pussywizard
|
||||
|
|
|
|||
|
|
@ -2310,12 +2310,12 @@ InventoryResult Player::CanUseItem(ItemTemplate const* proto) const
|
|||
return EQUIP_ERR_ITEM_NOT_FOUND;
|
||||
}
|
||||
|
||||
if ((proto->Flags2 & ITEM_FLAGS_EXTRA_HORDE_ONLY) && GetTeamId() != TEAM_HORDE)
|
||||
if ((proto->Flags2 & ITEM_FLAGS_EXTRA_HORDE_ONLY) && GetTeamId(true) != TEAM_HORDE)
|
||||
{
|
||||
return EQUIP_ERR_YOU_CAN_NEVER_USE_THAT_ITEM;
|
||||
}
|
||||
|
||||
if ((proto->Flags2 & ITEM_FLAGS_EXTRA_ALLIANCE_ONLY) && GetTeamId() != TEAM_ALLIANCE)
|
||||
if ((proto->Flags2 & ITEM_FLAGS_EXTRA_ALLIANCE_ONLY) && GetTeamId(true) != TEAM_ALLIANCE)
|
||||
{
|
||||
return EQUIP_ERR_YOU_CAN_NEVER_USE_THAT_ITEM;
|
||||
}
|
||||
|
|
@ -5076,7 +5076,7 @@ bool Player::LoadFromDB(ObjectGuid playerGuid, CharacterDatabaseQueryHolder cons
|
|||
|
||||
//Need to call it to initialize m_team (m_team can be calculated from race)
|
||||
//Other way is to saves m_team into characters table.
|
||||
SetFactionForRace(getRace());
|
||||
SetFactionForRace(getRace(true));
|
||||
|
||||
// pussywizard: create empty instance bind containers if necessary
|
||||
sInstanceSaveMgr->PlayerCreateBoundInstancesMaps(playerGuid);
|
||||
|
|
@ -5249,7 +5249,7 @@ bool Player::LoadFromDB(ObjectGuid playerGuid, CharacterDatabaseQueryHolder cons
|
|||
else if (!taxi_nodes.empty())
|
||||
{
|
||||
instanceId = 0;
|
||||
if (!m_taxi.LoadTaxiDestinationsFromString(taxi_nodes, GetTeamId()))
|
||||
if (!m_taxi.LoadTaxiDestinationsFromString(taxi_nodes, GetTeamId(true)))
|
||||
{
|
||||
// xinef: could no load valid data for taxi, relocate to homebind and clear
|
||||
m_taxi.ClearTaxiDestinations();
|
||||
|
|
@ -5311,7 +5311,7 @@ bool Player::LoadFromDB(ObjectGuid playerGuid, CharacterDatabaseQueryHolder cons
|
|||
map = sMapMgr->CreateMap(mapId, this);
|
||||
if (!map)
|
||||
{
|
||||
PlayerInfo const* info = sObjectMgr->GetPlayerInfo(getRace(), getClass());
|
||||
PlayerInfo const* info = sObjectMgr->GetPlayerInfo(getRace(true), getClass());
|
||||
mapId = info->mapId;
|
||||
Relocate(info->positionX, info->positionY, info->positionZ, 0.0f);
|
||||
LOG_ERROR("entities.player", "Player (guidlow {}) have invalid coordinates (X: {} Y: {} Z: {} O: {}). Teleport to default race/class locations.", guid, GetPositionX(), GetPositionY(), GetPositionZ(), GetOrientation());
|
||||
|
|
@ -6780,7 +6780,7 @@ bool Player::Satisfy(DungeonProgressionRequirements const* ar, uint32 target_map
|
|||
missingItems = &missingLeaderItems;
|
||||
}
|
||||
|
||||
if (itemRequirement->faction == TEAM_NEUTRAL || itemRequirement->faction == checkPlayer->GetTeamId())
|
||||
if (itemRequirement->faction == TEAM_NEUTRAL || itemRequirement->faction == checkPlayer->GetTeamId(true))
|
||||
{
|
||||
if (!checkPlayer->HasItemCount(itemRequirement->id, 1))
|
||||
{
|
||||
|
|
@ -6802,7 +6802,7 @@ bool Player::Satisfy(DungeonProgressionRequirements const* ar, uint32 target_map
|
|||
missingAchievements = &missingLeaderAchievements;
|
||||
}
|
||||
|
||||
if (achievementRequirement->faction == TEAM_NEUTRAL || achievementRequirement->faction == GetTeamId())
|
||||
if (achievementRequirement->faction == TEAM_NEUTRAL || achievementRequirement->faction == GetTeamId(true))
|
||||
{
|
||||
if (!checkPlayer || !checkPlayer->HasAchieved(achievementRequirement->id))
|
||||
{
|
||||
|
|
@ -6824,7 +6824,7 @@ bool Player::Satisfy(DungeonProgressionRequirements const* ar, uint32 target_map
|
|||
missingQuests = &missingLeaderQuests;
|
||||
}
|
||||
|
||||
if (questRequirement->faction == TEAM_NEUTRAL || questRequirement->faction == checkPlayer->GetTeamId())
|
||||
if (questRequirement->faction == TEAM_NEUTRAL || questRequirement->faction == checkPlayer->GetTeamId(true))
|
||||
{
|
||||
if (!checkPlayer->GetQuestRewardStatus(questRequirement->id))
|
||||
{
|
||||
|
|
@ -7005,7 +7005,7 @@ bool Player::CheckInstanceCount(uint32 instanceId) const
|
|||
|
||||
bool Player::_LoadHomeBind(PreparedQueryResult result)
|
||||
{
|
||||
PlayerInfo const* info = sObjectMgr->GetPlayerInfo(getRace(), getClass());
|
||||
PlayerInfo const* info = sObjectMgr->GetPlayerInfo(getRace(true), getClass());
|
||||
if (!info)
|
||||
{
|
||||
LOG_ERROR("entities.player", "Player (Name {}) has incorrect race/class pair. Can't be loaded.", GetName());
|
||||
|
|
|
|||
|
|
@ -1195,7 +1195,7 @@ void Player::UpdateArea(uint32 newArea)
|
|||
else
|
||||
RemoveByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_SANCTUARY);
|
||||
|
||||
uint32 const areaRestFlag = (GetTeamId() == TEAM_ALLIANCE)
|
||||
uint32 const areaRestFlag = (GetTeamId(true) == TEAM_ALLIANCE)
|
||||
? AREA_FLAG_REST_ZONE_ALLIANCE
|
||||
: AREA_FLAG_REST_ZONE_HORDE;
|
||||
if (area && area->flags & areaRestFlag)
|
||||
|
|
@ -1255,12 +1255,12 @@ void Player::UpdateZone(uint32 newZone, uint32 newArea)
|
|||
{
|
||||
case AREATEAM_ALLY:
|
||||
pvpInfo.IsInHostileArea =
|
||||
GetTeamId() != TEAM_ALLIANCE &&
|
||||
GetTeamId(true) != TEAM_ALLIANCE &&
|
||||
(sWorld->IsPvPRealm() || zone->flags & AREA_FLAG_CAPITAL);
|
||||
break;
|
||||
case AREATEAM_HORDE:
|
||||
pvpInfo.IsInHostileArea =
|
||||
GetTeamId() != TEAM_HORDE &&
|
||||
GetTeamId(true) != TEAM_HORDE &&
|
||||
(sWorld->IsPvPRealm() || zone->flags & AREA_FLAG_CAPITAL);
|
||||
break;
|
||||
case AREATEAM_NONE:
|
||||
|
|
|
|||
|
|
@ -9974,15 +9974,9 @@ bool Unit::HandleOverrideClassScriptAuraProc(Unit* victim, uint32 /*damage*/, Au
|
|||
return true;
|
||||
}
|
||||
|
||||
void Unit::setPowerType(Powers new_powertype, bool sendUpdate/* = true*/)
|
||||
void Unit::setPowerType(Powers new_powertype)
|
||||
{
|
||||
if (getPowerType() == new_powertype)
|
||||
return;
|
||||
|
||||
SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_POWER_TYPE, new_powertype);
|
||||
|
||||
if (!sendUpdate)
|
||||
return;
|
||||
SetByteValue(UNIT_FIELD_BYTES_0, 3, new_powertype);
|
||||
|
||||
if (GetTypeId() == TYPEID_PLAYER)
|
||||
{
|
||||
|
|
@ -15185,10 +15179,7 @@ uint32 Unit::GetCreatureType() const
|
|||
if (ssEntry && ssEntry->creatureType > 0)
|
||||
return ssEntry->creatureType;
|
||||
else
|
||||
{
|
||||
ChrRacesEntry const* raceEntry = sChrRacesStore.AssertEntry(getRace());
|
||||
return raceEntry->CreatureType;
|
||||
}
|
||||
return CREATURE_TYPE_HUMANOID;
|
||||
}
|
||||
else
|
||||
return ToCreature()->GetCreatureTemplate()->type;
|
||||
|
|
@ -21292,6 +21283,25 @@ void Unit::BuildCooldownPacket(WorldPacket& data, uint8 flags, PacketCooldowns c
|
|||
}
|
||||
}
|
||||
|
||||
uint8 Unit::getRace(bool original) const
|
||||
{
|
||||
if (GetTypeId() == TYPEID_PLAYER)
|
||||
{
|
||||
if (original)
|
||||
return m_realRace;
|
||||
else
|
||||
return m_race;
|
||||
}
|
||||
|
||||
return GetByteValue(UNIT_FIELD_BYTES_0, 0);
|
||||
}
|
||||
|
||||
void Unit::setRace(uint8 race)
|
||||
{
|
||||
if (GetTypeId() == TYPEID_PLAYER)
|
||||
m_race = race;
|
||||
}
|
||||
|
||||
// Check if unit in combat with specific unit
|
||||
bool Unit::IsInCombatWith(Unit const* who) const
|
||||
{
|
||||
|
|
|
|||
|
|
@ -39,14 +39,6 @@
|
|||
#define BASE_MAXDAMAGE 2.0f
|
||||
#define BASE_ATTACK_TIME 2000
|
||||
|
||||
enum UnitBytes0Offsets : uint8
|
||||
{
|
||||
UNIT_BYTES_0_OFFSET_RACE = 0,
|
||||
UNIT_BYTES_0_OFFSET_CLASS = 1,
|
||||
UNIT_BYTES_0_OFFSET_GENDER = 2,
|
||||
UNIT_BYTES_0_OFFSET_POWER_TYPE = 3
|
||||
};
|
||||
|
||||
enum UnitBytes1Offsets : uint8
|
||||
{
|
||||
UNIT_BYTES_1_OFFSET_STAND_STATE = 0,
|
||||
|
|
@ -1452,21 +1444,12 @@ public:
|
|||
[[nodiscard]] uint8 GetLevel() const { return getLevel(); }
|
||||
uint8 getLevelForTarget(WorldObject const* /*target*/) const override { return GetLevel(); }
|
||||
void SetLevel(uint8 lvl, bool showLevelChange = true);
|
||||
[[nodiscard]] uint8 getRace() const { return GetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_RACE); }
|
||||
void setRace(uint8 race) { SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_RACE, race); }
|
||||
[[nodiscard]] uint32 getRaceMask() const { return 1 << (getRace() - 1); }
|
||||
[[nodiscard]] uint8 getClass() const { return GetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS); }
|
||||
void setClass(uint8 classId) { SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, classId); }
|
||||
[[nodiscard]] uint8 GetRace() const { return GetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_RACE); }
|
||||
void SetRace(uint8 race) { SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_RACE, race); }
|
||||
[[nodiscard]] uint32 GetRaceMask() const { return 1 << (getRace() - 1); }
|
||||
[[nodiscard]] uint8 GetClass() const { return GetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS); }
|
||||
void SetClass(uint8 classId) { SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, classId); }
|
||||
[[nodiscard]] uint8 getRace(bool original = false) const;
|
||||
void setRace(uint8 race);
|
||||
[[nodiscard]] uint32 getRaceMask() const { return 1 << (getRace(true) - 1); }
|
||||
[[nodiscard]] uint8 getClass() const { return GetByteValue(UNIT_FIELD_BYTES_0, 1); }
|
||||
[[nodiscard]] uint32 getClassMask() const { return 1 << (getClass() - 1); }
|
||||
Gender getGender() const { return Gender(GetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER)); }
|
||||
void setGender(Gender gender) { SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER, gender); }
|
||||
virtual Gender GetNativeGender() const { return getGender(); }
|
||||
virtual void SetNativeGender(Gender gender) { setGender(gender); }
|
||||
[[nodiscard]] uint8 getGender() const { return GetByteValue(UNIT_FIELD_BYTES_0, 2); }
|
||||
|
||||
[[nodiscard]] float GetStat(Stats stat) const { return float(GetUInt32Value(static_cast<uint16>(UNIT_FIELD_STAT0) + stat)); }
|
||||
void SetStat(Stats stat, int32 val) { SetStatInt32Value(static_cast<uint16>(UNIT_FIELD_STAT0) + stat, val); }
|
||||
|
|
@ -1497,8 +1480,8 @@ public:
|
|||
int32 ModifyHealth(int32 val);
|
||||
int32 GetHealthGain(int32 dVal);
|
||||
|
||||
[[nodiscard]] Powers getPowerType() const { return Powers(GetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_POWER_TYPE)); }
|
||||
void setPowerType(Powers power, bool sendUpdate = true);
|
||||
[[nodiscard]] Powers getPowerType() const { return Powers(GetByteValue(UNIT_FIELD_BYTES_0, 3)); }
|
||||
void setPowerType(Powers power);
|
||||
[[nodiscard]] uint32 GetPower(Powers power) const { return GetUInt32Value(static_cast<uint16>(UNIT_FIELD_POWER1) + power); }
|
||||
[[nodiscard]] uint32 GetMaxPower(Powers power) const { return GetUInt32Value(static_cast<uint16>(UNIT_FIELD_MAXPOWER1) + power); }
|
||||
void SetPower(Powers power, uint32 val, bool withPowerUpdate = true, bool fromRegenerate = false);
|
||||
|
|
|
|||
|
|
@ -3744,8 +3744,8 @@ void ObjectMgr::LoadPlayerInfo()
|
|||
info->positionY = positionY;
|
||||
info->positionZ = positionZ;
|
||||
info->orientation = orientation;
|
||||
info->displayId_m = rEntry->MaleDisplayID;
|
||||
info->displayId_f = rEntry->FemaleDisplayID;
|
||||
info->displayId_m = rEntry->model_m;
|
||||
info->displayId_f = rEntry->model_f;
|
||||
_playerInfo[current_race][current_class] = info;
|
||||
|
||||
++count;
|
||||
|
|
|
|||
|
|
@ -1441,7 +1441,7 @@ void Guild::HandleInviteMember(WorldSession* session, std::string const& name)
|
|||
if (pInvitee->GetSocial()->HasIgnore(player->GetGUID()))
|
||||
return;
|
||||
|
||||
if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD) && pInvitee->GetTeamId() != player->GetTeamId())
|
||||
if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD) && pInvitee->GetTeamId(true) != player->GetTeamId(true))
|
||||
{
|
||||
SendCommandResult(session, GUILD_COMMAND_INVITE, ERR_GUILD_NOT_ALLIED, name);
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -308,10 +308,10 @@ void WorldSession::HandleCharCreateOpcode(WorldPacket& recvData)
|
|||
}
|
||||
|
||||
// prevent character creating Expansion race without Expansion account
|
||||
if (raceEntry->RequiredExpansion > Expansion())
|
||||
if (raceEntry->expansion > Expansion())
|
||||
{
|
||||
SendCharCreate(CHAR_CREATE_EXPANSION);
|
||||
LOG_ERROR("network.opcode", "Expansion {} account:[{}] tried to Create character with expansion {} race ({})", Expansion(), GetAccountId(), raceEntry->RequiredExpansion, createInfo->Race);
|
||||
LOG_ERROR("network.opcode", "Expansion {} account:[{}] tried to Create character with expansion {} race ({})", Expansion(), GetAccountId(), raceEntry->expansion, createInfo->Race);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -325,13 +325,6 @@ void WorldSession::HandleCharCreateOpcode(WorldPacket& recvData)
|
|||
|
||||
if (AccountMgr::IsPlayerAccount(GetSecurity()))
|
||||
{
|
||||
if (raceEntry->Alliance == CHRRACES_ALLIANCE_TYPE_NOT_PLAYABLE || raceEntry->HasFlag(CHRRACES_FLAGS_NOT_PLAYABLE))
|
||||
{
|
||||
LOG_ERROR("network", "Race ({}) was not playable but requested while creating new char for account (ID: {}): wrong DBC files or cheater?", createInfo->Race, GetAccountId());
|
||||
SendCharCreate(CHAR_CREATE_DISABLED);
|
||||
return;
|
||||
}
|
||||
|
||||
uint32 raceMaskDisabled = sWorld->getIntConfig(CONFIG_CHARACTER_CREATING_DISABLED_RACEMASK);
|
||||
if ((1 << (createInfo->Race - 1)) & raceMaskDisabled)
|
||||
{
|
||||
|
|
@ -878,7 +871,7 @@ void WorldSession::HandlePlayerLoginFromDB(LoginQueryHolder const& holder)
|
|||
if (cEntry->CinematicSequence)
|
||||
pCurrChar->SendCinematicStart(cEntry->CinematicSequence);
|
||||
else if (ChrRacesEntry const* rEntry = sChrRacesStore.LookupEntry(pCurrChar->getRace()))
|
||||
pCurrChar->SendCinematicStart(rEntry->CinematicSequenceID);
|
||||
pCurrChar->SendCinematicStart(rEntry->CinematicSequence);
|
||||
|
||||
// send new char string if not empty
|
||||
if (!sWorld->GetNewCharString().empty())
|
||||
|
|
|
|||
|
|
@ -741,7 +741,7 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket& recv_data)
|
|||
return;
|
||||
}
|
||||
|
||||
uint32 teamFaction = player->GetTeamId() == TEAM_ALLIANCE ? FACTION_MASK_ALLIANCE : FACTION_MASK_HORDE;
|
||||
uint32 teamFaction = player->GetTeamId(true) == TEAM_ALLIANCE ? FACTION_MASK_ALLIANCE : FACTION_MASK_HORDE;
|
||||
bool isTavernAreatrigger = sObjectMgr->IsTavernAreaTrigger(triggerId, teamFaction);
|
||||
if (!player->IsInAreaTriggerRadius(atEntry, isTavernAreatrigger ? 5.f : 0.f))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -439,12 +439,12 @@ bool LootItem::AllowedForPlayer(Player const* player, ObjectGuid source) const
|
|||
}
|
||||
|
||||
// not show loot for not own team
|
||||
if ((pProto->Flags2 & ITEM_FLAGS_EXTRA_HORDE_ONLY) && player->GetTeamId() != TEAM_HORDE)
|
||||
if ((pProto->Flags2 & ITEM_FLAGS_EXTRA_HORDE_ONLY) && player->GetTeamId(true) != TEAM_HORDE)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if ((pProto->Flags2 & ITEM_FLAGS_EXTRA_ALLIANCE_ONLY) && player->GetTeamId() != TEAM_ALLIANCE)
|
||||
if ((pProto->Flags2 & ITEM_FLAGS_EXTRA_ALLIANCE_ONLY) && player->GetTeamId(true) != TEAM_ALLIANCE)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5104,13 +5104,17 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
|
|||
target->PlayDistanceSound(11965);
|
||||
break;
|
||||
case 46354: // Blood Elf Illusion
|
||||
// We change this to a if statement since workflow failed due to not having nuetral race as a part of the switch.
|
||||
if (caster)
|
||||
{
|
||||
if (caster->getGender() == GENDER_FEMALE)
|
||||
caster->CastSpell(target, 46356, true, nullptr, this);
|
||||
else
|
||||
caster->CastSpell(target, 46355, true, nullptr, this);
|
||||
switch (caster->getGender())
|
||||
{
|
||||
case GENDER_FEMALE:
|
||||
caster->CastSpell(target, 46356, true, nullptr, this);
|
||||
break;
|
||||
case GENDER_MALE:
|
||||
caster->CastSpell(target, 46355, true, nullptr, this);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 46361: // Reinforced Net
|
||||
|
|
|
|||
|
|
@ -2206,7 +2206,7 @@ void World::DetectDBCLang()
|
|||
uint8 default_locale = TOTAL_LOCALES;
|
||||
for (uint8 i = default_locale - 1; i < TOTAL_LOCALES; --i) // -1 will be 255 due to uint8
|
||||
{
|
||||
if (race->Name[i][0] != '\0') // check by race names
|
||||
if (race->name[i][0] != '\0') // check by race names
|
||||
{
|
||||
default_locale = i;
|
||||
_availableDbcLocaleMask |= (1 << i);
|
||||
|
|
|
|||
|
|
@ -134,11 +134,6 @@ void OutdoorPvPTF::ResetZoneToTeamControlled(TeamId team)
|
|||
m_HordeTowersControlled = 0;
|
||||
m_AllianceTowersControlled = 0;
|
||||
break;
|
||||
case HORDE_FACTION:
|
||||
case ALLIANCE_FACTION:
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (auto& [guid, tower] : m_capturePoints)
|
||||
|
|
@ -169,11 +164,6 @@ void OPvPCapturePointTF::ResetToTeamControlled(TeamId team)
|
|||
m_OldState = OBJECTIVESTATE_NEUTRAL;
|
||||
m_team = TEAM_NEUTRAL;
|
||||
break;
|
||||
case HORDE_FACTION:
|
||||
case ALLIANCE_FACTION:
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
m_value = 0.0f;
|
||||
|
|
|
|||
|
|
@ -180,13 +180,13 @@ struct npc_pet_gen_argent_pony_bridle : public ScriptedAI
|
|||
{
|
||||
_state = ARGENT_PONY_STATE_ENCH;
|
||||
|
||||
aura = (player->GetTeamId() == TEAM_ALLIANCE ? SPELL_AURA_TIRED_S : SPELL_AURA_TIRED_G);
|
||||
aura = (player->GetTeamId(true) == TEAM_ALLIANCE ? SPELL_AURA_TIRED_S : SPELL_AURA_TIRED_G);
|
||||
duration = player->GetSpellCooldownDelay(aura);
|
||||
me->ReplaceAllNpcFlags(UNIT_NPC_FLAG_GOSSIP);
|
||||
|
||||
for (uint8 i = 0; i < 3; ++i)
|
||||
{
|
||||
if (player->GetTeamId() == TEAM_ALLIANCE)
|
||||
if (player->GetTeamId(true) == TEAM_ALLIANCE)
|
||||
{
|
||||
if (uint32 cooldown = player->GetSpellCooldownDelay(SPELL_AURA_POSTMAN_S + i))
|
||||
{
|
||||
|
|
@ -211,7 +211,7 @@ struct npc_pet_gen_argent_pony_bridle : public ScriptedAI
|
|||
}
|
||||
|
||||
// Generate Banners
|
||||
uint32 mask = player->GetTeamId() ? RACEMASK_HORDE : RACEMASK_ALLIANCE;
|
||||
uint32 mask = player->GetTeamId(true) ? RACEMASK_HORDE : RACEMASK_ALLIANCE;
|
||||
for (uint8 i = 1; i < MAX_RACES; ++i)
|
||||
if (mask & (1 << (i - 1)) && player->HasAchieved(argentBanners[i].achievement))
|
||||
_banners[i] = true;
|
||||
|
|
@ -268,7 +268,7 @@ struct npc_pet_gen_argent_pony_bridle : public ScriptedAI
|
|||
if (player->GetGUID() != creature->GetOwnerGUID())
|
||||
return true;
|
||||
|
||||
if (!creature->HasAura(player->GetTeamId() ? SPELL_AURA_TIRED_G : SPELL_AURA_TIRED_S))
|
||||
if (!creature->HasAura(player->GetTeamId(true) ? SPELL_AURA_TIRED_G : SPELL_AURA_TIRED_S))
|
||||
{
|
||||
uint8 _state = creature->AI()->GetData(0 /*GET_DATA_STATE*/);
|
||||
if (_state == ARGENT_PONY_STATE_ENCH || _state == ARGENT_PONY_STATE_VENDOR)
|
||||
|
|
@ -296,20 +296,20 @@ struct npc_pet_gen_argent_pony_bridle : public ScriptedAI
|
|||
case GOSSIP_ACTION_TRADE:
|
||||
creature->ReplaceAllNpcFlags(UNIT_NPC_FLAG_VENDOR);
|
||||
player->GetSession()->SendListInventory(creature->GetGUID());
|
||||
spellId = player->GetTeamId() ? SPELL_AURA_SHOP_G : SPELL_AURA_SHOP_S;
|
||||
spellId = player->GetTeamId(true) ? SPELL_AURA_SHOP_G : SPELL_AURA_SHOP_S;
|
||||
creature->AI()->DoAction(ARGENT_PONY_STATE_VENDOR);
|
||||
break;
|
||||
case GOSSIP_ACTION_BANK:
|
||||
creature->ReplaceAllNpcFlags(UNIT_NPC_FLAG_BANKER);
|
||||
player->GetSession()->SendShowBank(player->GetGUID());
|
||||
spellId = player->GetTeamId() ? SPELL_AURA_BANK_G : SPELL_AURA_BANK_S;
|
||||
spellId = player->GetTeamId(true) ? SPELL_AURA_BANK_G : SPELL_AURA_BANK_S;
|
||||
creature->AI()->DoAction(ARGENT_PONY_STATE_BANK);
|
||||
break;
|
||||
case GOSSIP_ACTION_MAILBOX:
|
||||
{
|
||||
creature->ReplaceAllNpcFlags(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_MAILBOX);
|
||||
player->GetSession()->SendShowMailBox(creature->GetGUID());
|
||||
spellId = player->GetTeamId() ? SPELL_AURA_POSTMAN_G : SPELL_AURA_POSTMAN_S;
|
||||
spellId = player->GetTeamId(true) ? SPELL_AURA_POSTMAN_G : SPELL_AURA_POSTMAN_S;
|
||||
creature->AI()->DoAction(ARGENT_PONY_STATE_MAILBOX);
|
||||
break;
|
||||
}
|
||||
|
|
@ -326,7 +326,7 @@ struct npc_pet_gen_argent_pony_bridle : public ScriptedAI
|
|||
{
|
||||
creature->CastSpell(creature, spellId, true);
|
||||
player->AddSpellCooldown(spellId, 0, 3 * MINUTE * IN_MILLISECONDS);
|
||||
player->AddSpellCooldown(player->GetTeamId() ? SPELL_AURA_TIRED_G : SPELL_AURA_TIRED_S, 0, 3 * MINUTE * IN_MILLISECONDS + 4 * HOUR * IN_MILLISECONDS);
|
||||
player->AddSpellCooldown(player->GetTeamId(true) ? SPELL_AURA_TIRED_G : SPELL_AURA_TIRED_S, 0, 3 * MINUTE * IN_MILLISECONDS + 4 * HOUR * IN_MILLISECONDS);
|
||||
creature->DespawnOrUnsummon(3 * MINUTE * IN_MILLISECONDS);
|
||||
}
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -1968,7 +1968,7 @@ class spell_pvp_trinket_wotf_shared_cd : public SpellScript
|
|||
// Spell::SendSpellCooldown() skips all spells with TRIGGERED_IGNORE_SPELL_AND_CATEGORY_CD
|
||||
player->AddSpellAndCategoryCooldowns(GetSpellInfo(), GetCastItem() ? GetCastItem()->GetEntry() : 0, GetSpell());
|
||||
|
||||
if (player->GetTeamId() == TEAM_HORDE)
|
||||
if (player->GetTeamId(true) == TEAM_HORDE)
|
||||
{
|
||||
if (GetSpellInfo()->Id == SPELL_WILL_OF_THE_FORSAKEN_COOLDOWN_TRIGGER)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -3643,7 +3643,7 @@ class spell_item_recall : public SpellScript
|
|||
}
|
||||
|
||||
TeamId bgTeam = player->GetBgTeamId();
|
||||
if (player->GetTeamId() != bgTeam)
|
||||
if (player->GetTeamId(true) != bgTeam)
|
||||
{
|
||||
if (SpellTargetPosition const* recallSpellTarget = sSpellMgr->GetSpellTargetPosition(bgTeam == TEAM_HORDE ? SPELL_RECALL_HORDE : SPELL_RECALL_ALLIANCE, EFFECT_0))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -668,13 +668,6 @@ struct ChrClassesEntry
|
|||
uint32 expansion; // 59 (0 - original race, 1 - tbc addon, ...)
|
||||
};
|
||||
|
||||
enum ChrRacesAllianceType
|
||||
{
|
||||
CHRRACES_ALLIANCE_TYPE_ALLIANCE = 0,
|
||||
CHRRACES_ALLIANCE_TYPE_HORDE = 1,
|
||||
CHRRACES_ALLIANCE_TYPE_NOT_PLAYABLE = 2,
|
||||
};
|
||||
|
||||
enum ChrRacesFlags
|
||||
{
|
||||
CHRRACES_FLAGS_NOT_PLAYABLE = 0x01,
|
||||
|
|
@ -684,29 +677,25 @@ enum ChrRacesFlags
|
|||
|
||||
struct ChrRacesEntry
|
||||
{
|
||||
uint32 ID; // 0
|
||||
uint32 Flags; // 1
|
||||
uint32 FactionID; // 2
|
||||
//uint32 ExplorationSoundID; // 3
|
||||
uint32 MaleDisplayID; // 4
|
||||
uint32 FemaleDisplayID; // 5
|
||||
//char const* ClientPrefix; // 6
|
||||
uint32 BaseLanguage; // 7 (7-Alliance 1-Horde)
|
||||
uint32 CreatureType; // 8
|
||||
uint32 ResSicknessSpellID; // 9
|
||||
//uint32 SplashSoundID; // 10
|
||||
//char const* ClientFileString; // 11
|
||||
uint32 CinematicSequenceID; // 12 ID from CinematicSequences.dbc
|
||||
uint32 Alliance; // 13
|
||||
char const* Name[16]; // 14-29
|
||||
//uint32 Name_lang_mask; // 30
|
||||
//char const* NameFemale[16]; // 31-46
|
||||
//uint32 NameFemale_lang_mask; // 47
|
||||
//char const* NameMale[16]; // 48-63
|
||||
//uint32 NameMale_lang_mask; // 64
|
||||
//char const* FacialHairCustomization[2]; // 65-66
|
||||
//char const* HairCustomization; // 67
|
||||
uint32 RequiredExpansion; // 68
|
||||
uint32 RaceID; // 0
|
||||
uint32 Flags; // 1
|
||||
uint32 FactionID; // 2 facton template id
|
||||
// 3 unused
|
||||
uint32 model_m; // 4
|
||||
uint32 model_f; // 5
|
||||
// 6 unused
|
||||
uint32 TeamID; // 7 (7-Alliance 1-Horde)
|
||||
// 8-11 unused
|
||||
uint32 CinematicSequence; // 12 id from CinematicSequences.dbc
|
||||
//uint32 unk_322; // 13 faction (0 alliance, 1 horde, 2 not available?)
|
||||
char const* name[16]; // 14-29 used for DBC language detection/selection
|
||||
// 30 string flags, unused
|
||||
//char const* nameFemale[16]; // 31-46, if different from base (male) case
|
||||
// 47 string flags, unused
|
||||
//char const* nameNeutralGender[16]; // 48-63, if different from base (male) case
|
||||
// 64 string flags, unused
|
||||
// 65-67 unused
|
||||
uint32 expansion; // 68 (0 - original race, 1 - tbc addon, ...)
|
||||
|
||||
inline bool HasFlag(ChrRacesFlags flag) const { return (Flags & flag) != 0; }
|
||||
};
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ char constexpr CharStartOutfitEntryfmt[] = "dbbbXiiiiiiiiiiiiiiiiiiiiiiiixxxxxxx
|
|||
char constexpr CharTitlesEntryfmt[] = "nxssssssssssssssssxssssssssssssssssxi";
|
||||
char constexpr ChatChannelsEntryfmt[] = "nixssssssssssssssssxxxxxxxxxxxxxxxxxx"; // ChatChannelsEntryfmt, index not used (more compact store)
|
||||
char constexpr ChrClassesEntryfmt[] = "nxixssssssssssssssssxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxixii";
|
||||
char constexpr ChrRacesEntryfmt[] = "niixiixiiixxiissssssssssssssssxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxi";
|
||||
char constexpr ChrRacesEntryfmt[] = "niixiixixxxxixssssssssssssssssxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxi";
|
||||
char constexpr CinematicCameraEntryfmt[] = "nsiffff";
|
||||
char constexpr CinematicSequencesEntryfmt[] = "nxixxxxxxx";
|
||||
char constexpr CreatureDisplayInfofmt[] = "nixifxxxxxxxxxxx";
|
||||
|
|
|
|||
|
|
@ -730,10 +730,8 @@ enum Language
|
|||
enum TeamId
|
||||
{
|
||||
TEAM_ALLIANCE = 0,
|
||||
TEAM_HORDE = 1,
|
||||
TEAM_NEUTRAL = 2,
|
||||
HORDE_FACTION = 67,
|
||||
ALLIANCE_FACTION = 469
|
||||
TEAM_HORDE,
|
||||
TEAM_NEUTRAL,
|
||||
};
|
||||
|
||||
enum Team
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue