Показать сообщение отдельно
Старый 04.03.2011, 23:05   #1
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию [patch/dev]Переключение специализации и петы

По информации с офа, когда охотник переключает специализацию, его пет должен убираться с возможностью призыва, а у других классов петы просто удаляются:
Код:
diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index 80af040..5c98cd3 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -21960,16 +21960,24 @@ void Player::UpdateFallInformationIfNeed( MovementInfo const& minfo,uint16 opcod
         SetFallInformation(minfo.GetFallTime(), minfo.GetPos()->z);
 }
 
-void Player::UnsummonPetTemporaryIfAny()
+void Player::UnsummonPetTemporaryIfAny(PetSaveMode mode)
 {
     Pet* pet = GetPet();
-    if(!pet)
+    if (!pet)
         return;
 
-    if(!m_temporaryUnsummonedPetNumber && pet->isControlled() && !pet->isTemporarySummoned() )
-        m_temporaryUnsummonedPetNumber = pet->GetCharmInfo()->GetPetNumber();
+    switch (mode)
+    {
+        case PET_SAVE_AS_DELETED:
+            m_temporaryUnsummonedPetNumber = 0;
+            break;
+        case PET_SAVE_AS_CURRENT:
+            if (!m_temporaryUnsummonedPetNumber && pet->isControlled() && !pet->isTemporarySummoned() )
+                m_temporaryUnsummonedPetNumber = pet->GetCharmInfo()->GetPetNumber();
 
-    pet->Unsummon(PET_SAVE_AS_CURRENT, this);
+            break;
+    }
+    pet->Unsummon(mode, this);
 }
 
 void Player::ResummonPetTemporaryUnSummonedIfAny()
@@ -22332,7 +22340,11 @@ void Player::ActivateSpec(uint8 specNum)
     if(specNum >= GetSpecsCount())
         return;
 
-    UnsummonPetTemporaryIfAny();
+    PetSaveMode mode = PET_SAVE_AS_DELETED;
+    if (getClass() == CLASS_HUNTER)
+        mode = PET_SAVE_AS_CURRENT;
+
+    UnsummonPetTemporaryIfAny(mode);
 
     // prevent deletion of action buttons by client at spell unlearn or by player while spec change in progress
     SendLockActionButtons();
@@ -22437,8 +22449,6 @@ void Player::ActivateSpec(uint8 specNum)
         ++itr;
     }
 
-    ResummonPetTemporaryUnSummonedIfAny();
-
     ApplyGlyphs(true);
 
     SendInitialActionButtons();
diff --git a/src/game/Player.h b/src/game/Player.h
index 0ca7ba2..719f17d 100644
--- a/src/game/Player.h
+++ b/src/game/Player.h
@@ -2313,7 +2313,7 @@ class MANGOS_DLL_SPEC Player : public Unit
         // Temporarily removed pet cache
         uint32 GetTemporaryUnsummonedPetNumber() const { return m_temporaryUnsummonedPetNumber; }
         void SetTemporaryUnsummonedPetNumber(uint32 petnumber) { m_temporaryUnsummonedPetNumber = petnumber; }
-        void UnsummonPetTemporaryIfAny();
+        void UnsummonPetTemporaryIfAny(PetSaveMode mode = PET_SAVE_AS_CURRENT);
         void ResummonPetTemporaryUnSummonedIfAny();
         bool IsPetNeedBeTemporaryUnsummoned() const { return !IsInWorld() || !isAlive() || IsMounted() /*+in flight*/; }
Также есть информация, что у пета охотника сбрасываются очки талантов, только я не пойму, в чем прикол каждый раз при переключении специализации перераспределять заново таланты пета, если только прогонять его перед этим.
Этот момент пока не стал делать до получения более подробной информации.

У кого какая есть информация по данной теме?
Какие будут замечания и предложения?
virusav вне форума   Ответить с цитированием