From b1c5d4c59352d6030e0869775f2b439d58cd436d Mon Sep 17 00:00:00 2001 From: megamage Date: Sat, 28 Mar 2009 17:50:36 -0600 Subject: [PATCH] Implement initial known taxi nodes for DK. Author: Lightguard, VladimirMangos --HG-- branch : trunk --- src/game/DBCStores.cpp | 11 +++++++++-- src/game/DBCStores.h | 1 + src/game/Player.cpp | 19 ++++++++++++------- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/game/DBCStores.cpp b/src/game/DBCStores.cpp index 018b361616..eed2e2c8a5 100644 --- a/src/game/DBCStores.cpp +++ b/src/game/DBCStores.cpp @@ -131,6 +131,7 @@ static uint32 sTalentTabPages[12/*MAX_CLASSES*/][3]; DBCStorage sTaxiNodesStore(TaxiNodesEntryfmt); TaxiMask sTaxiNodesMask; +TaxiMask sOldContinentsNodesMask; // DBC used only for initialization sTaxiPathSetBySource at startup. TaxiPathSetBySource sTaxiPathSetBySource; @@ -456,9 +457,11 @@ void LoadDBCStores(const std::string& dataPath) spellPaths.insert(sInfo->EffectMiscValue[j]); memset(sTaxiNodesMask,0,sizeof(sTaxiNodesMask)); + memset(sOldContinentsNodesMask,0,sizeof(sTaxiNodesMask)); for(uint32 i = 1; i < sTaxiNodesStore.GetNumRows(); ++i) { - if(!sTaxiNodesStore.LookupEntry(i)) + TaxiNodesEntry const* node = sTaxiNodesStore.LookupEntry(i); + if(!node) continue; TaxiPathSetBySource::const_iterator src_i = sTaxiPathSetBySource.find(i); @@ -479,10 +482,14 @@ void LoadDBCStores(const std::string& dataPath) continue; } - // valid taxi netowrk node + // valid taxi network node uint8 field = (uint8)((i - 1) / 32); uint32 submask = 1<<((i-1)%32); sTaxiNodesMask[field] |= submask; + + // old continent node (+ nodes virtually at old continents, check explicitly to avoid loading map files for zone info) + if (node->map_id < 2 || i == 82 || i == 83 || i == 93 || i == 94) + sOldContinentsNodesMask[field] |= submask; } } diff --git a/src/game/DBCStores.h b/src/game/DBCStores.h index 4cad2b106c..e79cb44a53 100644 --- a/src/game/DBCStores.h +++ b/src/game/DBCStores.h @@ -134,6 +134,7 @@ extern DBCStorage sTalentTabStore; extern DBCStorage sTaxiNodesStore; extern DBCStorage sTaxiPathStore; extern TaxiMask sTaxiNodesMask; +extern TaxiMask sOldContinentsNodesMask; extern TaxiPathSetBySource sTaxiPathSetBySource; extern TaxiPathNodesByPath sTaxiPathNodesByPath; extern DBCStorage sTotemCategoryStore; diff --git a/src/game/Player.cpp b/src/game/Player.cpp index e439f4bebf..d0742c76fa 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -134,7 +134,18 @@ PlayerTaxi::PlayerTaxi() void PlayerTaxi::InitTaxiNodesForLevel(uint32 race, uint32 chrClass, uint32 level) { - // capital and taxi hub masks + // class specific initial known nodes + switch(chrClass) + { + case CLASS_DEATH_KNIGHT: + { + for(int i = 0; i < TaxiMaskSize; ++i) + m_taximask[i] |= sOldContinentsNodesMask[i]; + break; + } + } + + // race specific initial known nodes: capital and taxi hub masks switch(race) { case RACE_HUMAN: SetTaximaskNode(2); break; // Human @@ -150,12 +161,6 @@ void PlayerTaxi::InitTaxiNodesForLevel(uint32 race, uint32 chrClass, uint32 leve case RACE_DRAENEI: SetTaximaskNode(94); break; // Draenei } - switch(chrClass) - { - case CLASS_DEATH_KNIGHT: // TODO: figure out initial known nodes - break; - } - // new continent starting masks (It will be accessible only at new map) switch(Player::TeamForRace(race)) {