Index: src/game/Player.cpp =================================================================== --- src/game/Player.cpp (revision 5663) +++ src/game/Player.cpp (working copy) @@ -350,27 +350,6 @@ m_taximask[0] = rEntry->startingTaxiMask; */ - // capital and taxi hub masks - switch(race) - { - case 1: m_taximask[0]= 1 << ( 2-1); break; // Human - case 2: m_taximask[0]= 1 << (23-1); break; // Orc - case 3: m_taximask[0]= 1 << ( 6-1); break; // Dwarf - // Night Elf - case 4: m_taximask[0]= (1 << (26-1)) | (1 << (27-1)); break; - case 5: m_taximask[0]= 1 << (11-1); break; // Undead - case 6: m_taximask[0]= 1 << (22-1); break; // Tauren - case 7: m_taximask[0]= 1 << ( 6-1); break; // Gnome - case 8: m_taximask[0]= 1 << (23-1); break; // Troll - //case 10: m_taximask[0]= 1 << (1-1); break; // Blood Elf - case 11: m_taximask[0+94/32]= 1 << (94%32-1); break;// Draenei - } - // new continent starting masks (It will be accessible only at new map - switch(TeamForRace(race)) - { - case ALLIANCE: m_taximask[3]= 1 << (4-1); break; - case HORDE: m_taximask[3]= 1 << (3-1); break; - } ChrClassesEntry const* cEntry = sChrClassesStore.LookupEntry(class_); if(!cEntry) @@ -1941,6 +1920,10 @@ Pet* pet = GetPet(); if(pet && pet->getPetType()==SUMMON_PET) pet->GivePetLevel(level); + + // level dependent taxi hubs + if(level >= 65) + SetTaximaskNode(213); //Shattered Sun Staging Area } void Player::InitTalentForLevel() @@ -2131,6 +2114,31 @@ SetPower(POWER_RAGE, GetMaxPower(POWER_RAGE)); SetPower(POWER_FOCUS, 0); SetPower(POWER_HAPPINESS, 0); + + // capital and taxi hub masks + switch(getRace()) + { + case RACE_HUMAN: SetTaximaskNode(2); break; // Human + case RACE_ORC: SetTaximaskNode(23); break; // Orc + case RACE_DWARF: SetTaximaskNode(6); break; // Dwarf + case RACE_NIGHTELF: SetTaximaskNode(26); + SetTaximaskNode(27); break; // Night Elf + case RACE_UNDEAD_PLAYER: SetTaximaskNode(11); break;// Undead + case RACE_TAUREN: SetTaximaskNode(22); break; // Tauren + case RACE_GNOME: SetTaximaskNode(6); break; // Gnome + case RACE_TROLL: SetTaximaskNode(23); break; // Troll + case RACE_BLOODELF: SetTaximaskNode(82); break; // Blood Elf + case RACE_DRAENEI: SetTaximaskNode(94); break; // Draenei + } + // new continent starting masks (It will be accessible only at new map) + switch(TeamForRace(getRace())) + { + case ALLIANCE: SetTaximaskNode(100); break; + case HORDE: SetTaximaskNode(99); break; + } + // level dependent taxi hubs + if(getLevel()>=65) + SetTaximaskNode(213); //Shattered Sun Staging Area } void Player::SendInitialSpells() @@ -13567,6 +13575,14 @@ // load and set bits only for existed taxi nodes m_taximask[index] = sTaxiNodesMask[index] & uint32(atol((*iter).c_str())); } + if(getLevel()>=65) + { + uint32 curloc = 213; //Shattered Sun Staging Area + uint8 field = (uint8)((curloc - 1) / 32); + uint32 submask = 1<<((curloc-1)%32); + if ( (m_taximask[field] & submask) != submask ) + m_taximask[field] = (submask | m_taximask[field]); + } } void Player::_LoadTutorials(QueryResult *result) Index: src/game/Player.h =================================================================== --- src/game/Player.h (revision 5662) +++ src/game/Player.h (working copy) @@ -914,6 +914,13 @@ uint32 GetTaximask( uint8 index ) const { return m_taximask[index]; } void SetTaximask( uint8 index, uint32 value ) { m_taximask[index] = value; } + void SetTaximaskNode(uint32 nodeidx) + { + uint8 field = uint8((nodeidx - 1) / 32); + uint32 submask = 1<<((nodeidx-1)%32); + if ((m_taximask[field] & submask) != submask ) + m_taximask[field] = (submask | m_taximask[field]); + } void ClearTaxiDestinations() { m_TaxiDestinations.clear(); } void AddTaxiDestination(uint32 dest) { m_TaxiDestinations.push_back(dest); } uint32 GetTaxiSource() const { return m_TaxiDestinations.empty() ? 0 : m_TaxiDestinations.front(); }