All pastes #989519 Raw Edit

Miscellany

public text v1 · immutable
#989519 ·published 2008-04-19 13:29 UTC
rendered paste body
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(); }