Ru-MaNGOS

Вернуться   Ru-MaNGOS > Ядро > Патчи > Патчи на рассмотрении

Важная информация

Патчи на рассмотрении Рассматриваемые к принятию патчи

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 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 вне форума   Ответить с цитированием
Старый 04.03.2011, 23:22   #2
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Одно дополнение: в текущем патче после переключения специализации пета охотника можно вызвать по свистку и при маунте/дисмаунте.

После получения информации о сбросе талантов пета охотника надо сделать, чтобы после переключения специализации пета можно было вызвать ТОЛЬКО по свистку.
virusav вне форума   Ответить с цитированием
Старый 05.03.2011, 08:35   #3
ZirO
Гость
 
Сообщений: n/a
По умолчанию

Цитата:
Сообщение от virusav Посмотреть сообщение
По информации с офа, когда охотник переключает специализацию, его пет должен убираться с возможностью призыва, а у других классов петы просто удаляются:

Также есть информация, что у пета охотника сбрасываются очки талантов, только я не пойму, в чем прикол каждый раз при переключении специализации перераспределять заново таланты пета, если только прогонять его перед этим.
Этот момент пока не стал делать до получения более подробной информации.

У кого какая есть информация по данной теме?
Какие будут замечания и предложения?
Насчёт пета охотника.
При смене спека очки сбрасываются только в трёх случаях:
1. При смене спека и ПЕРВОМ вызове данного питомца:
Пример
Охотник находится в Первой ветке (БМ), у него пет Волк. Игрок купил вторую спецификацию. Вторую спецификацию сделал например "Стрелок" (2 ветка). Хотя тут значение ветки не имеет значения. Второй спек может быть таким же, тоесть тоже БМ, но без пары талантов как в первом спеке. Вызывает того же волка, таланты волка сбрасываются, т.к. он в новом спеке вызван был первый раз! При повторном вызове его таланты останутся. Решили дальше вызвать паука опять смотрится, что он во втором спеке вызывается первый раз, тоесть таланты не раскиданы и так с каждым петом который вызывается.

2. При приручении питомца.

3. При сбросе очков талантов у тренера.

Из всего этого делается примерно следующее
а) Ядро должно первое что проверять это номер специализации (1 или 2).
б) Исходя из пункта а) проверяется спек (1-БМ, 2-ММ и 3-Сурв) тоесть сколько очков талантов надо раскинуть на пета. т.к. очки петов зависят от спека и специфики пета. (в БМ например 21 очко талантов, в остальных спеках 17)
в) При вызове пета проверяется первый ли он раз запускается в данной специализации (не путать со спеком) и в данном спеке:
--- если да, то проверяется спек (сколько очков надо дать пету в данном спеке);
--- если нет, то проверяется спек и вызывается пет с уже раскиданными ранее очками талантов.

Если надо более подробно или если что-то не понятно то могу более детально описать.
  Ответить с цитированием
Пользователь сказал cпасибо:
virusav (05.03.2011)
Старый 05.03.2011, 09:06   #4
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

1 - по идее, должно быть сохранение очков талантов питомца в конкретной специализации, чтобы при переключении брались правильные данные.
2 и 3 - это не сюда, т.к. это не касается переключения специализации.

1. Выходит, что для петов надо делать ключ в соответствующих таблицах пет-специализация и сохранять/загружать данные в зависимости от выбранной специализации игрока, т.е. как это сделано для игроков.
2. Можно как-нибудь убрать пета охотника так, чтобы после смены специализации он вызывался только по свистку, но не при маунте/дисмаунте?
virusav вне форума   Ответить с цитированием
Старый 05.03.2011, 11:06   #5
rsa
Почетный флудер
Старожил
 
Аватар для rsa
 
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
rsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранита
По умолчанию

Цитата:
Сообщение от virusav Посмотреть сообщение
2. Можно как-нибудь убрать пета охотника так, чтобы после смены специализации он вызывался только по свистку, но не при маунте/дисмаунте?
в вашем варианте патча нет, потому что temporaryunsummon сделан спец. для маунта-дизмаунта и телепортов. убирать пета при смене специализаций надо через Remove(...), посмотрите как сделано у меня.
rsa вне форума   Ответить с цитированием
Старый 05.03.2011, 11:32   #6
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Я не знаю, где это "у меня", можно было просто кинуть код или ссылку на коммит.
virusav вне форума   Ответить с цитированием
Старый 05.03.2011, 12:31   #7
rsa
Почетный флудер
Старожил
 
Аватар для rsa
 
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
rsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранита
По умолчанию

Цитата:
Сообщение от virusav Посмотреть сообщение
Я не знаю, где это "у меня", можно было просто кинуть код или ссылку на коммит.
сорри, https://github.com/rsa/mangos/blob/m...ame/Player.cpp
в коде соотв. функций. что до конкретного коммита - делал полгода назад, вряд ли найду. да и не в одном коммите оно было.

о, нашел. оно оказывается еще и не совсем верно. надо:
Код:
    if (getClass() == CLASS_HUNTER)
        pet->Unsummon(PET_SAVE_AS_CURRENT,this);
    else 
        pet->Unsummon(PET_SAVE_NOT_IN_SLOT, this);
ну или через RemovePet()

Последний раз редактировалось rsa; 05.03.2011 в 12:36.
rsa вне форума   Ответить с цитированием
Старый 05.03.2011, 13:24   #8
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Как я понимаю, в первую очередь надо реализовать сохранение талантов петов в разрезе специализаций игроков, а потом уже править убирание петов при переключении специализации, т.к. в таблицах петов не нашел полей с указанием специализации игрока.
virusav вне форума   Ответить с цитированием
Старый 05.03.2011, 18:15   #9
rsa
Почетный флудер
Старожил
 
Аватар для rsa
 
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
rsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранита
По умолчанию

Цитата:
Сообщение от virusav Посмотреть сообщение
Как я понимаю, в первую очередь надо реализовать сохранение талантов петов в разрезе специализаций игроков, а потом уже править убирание петов при переключении специализации, т.к. в таблицах петов не нашел полей с указанием специализации игрока.
это несложно, но потребуется делать еще одно поле в таблице с петами. я уже делал, однако поскольку получить информацию, которая здесь есть в сообщении 3, мне не удалось (точнее я получил много разных несовпадающих версий) то в паблик не запускал.
rsa вне форума   Ответить с цитированием
Старый 05.03.2011, 19:35   #10
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

В таком случае, если патч уже есть, можно выложить его для рассмотрения.
virusav вне форума   Ответить с цитированием
Старый 06.03.2011, 17:47   #11
rsa
Почетный флудер
Старожил
 
Аватар для rsa
 
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
rsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранита
По умолчанию

Это не поможет. Код петов у меня и в чистом ядре настолько разошелся, что сделать патч "на чистое" проблематично. Да не думаю что смогу поднять даже в свой форк - полгода без мержей, код устарел, уже надо писать с нуля.
rsa вне форума   Ответить с цитированием
Старый 18.05.2011, 13:29   #12
rsa
Почетный флудер
Старожил
 
Аватар для rsa
 
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
rsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранита
По умолчанию

По просьбам трудящихся - дуалспек для петов Упростил до невозможности, желающие могут привинтить на чистое.
https://github.com/mangosR2/mangos/c...a4df52e62be1b3
rsa вне форума   Ответить с цитированием
3 пользователя(ей) сказали cпасибо:
Dragon (18.05.2011), KiriX (18.05.2011), Limpnau (18.05.2011)
Старый 18.05.2011, 16:24   #13
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Изменения затронули только `pet_spell`.
А в других таблицах разве не должен быть ключ, например, в `pet_aura`, `pet_spell_cooldown`, `character_pet` ...?

С одной стороны у петов охотника свои таланты в разрезе специализаций игрока, а с другой - у игрока разные петы в разрезе специализаций.

Вчера собрал сервер на основе https://github.com/mangosR2/mangos, зашел чернокнижником в ветке демонологии, вызвал Стража Скверны, потом переключился в другую ветку - пет остался, т.е. перепризвался, хотя в вругой ветке его нет.
Ситуация, как на чистом ядре.
virusav вне форума   Ответить с цитированием
Старый 19.05.2011, 14:24   #14
rsa
Почетный флудер
Старожил
 
Аватар для rsa
 
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
rsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранита
По умолчанию

Как выяснилось нет. В предыдущей версии патча все это было, в текущей нет. Кулдауны привязаны к конкретным спеллам и берутся (и это правильно) от спеллов из другой ветки если она была переключена. в данных пета запоминать состояние спека вообще не нужно - он просто берется от хозяина, что подтверждается игроками с оффа.
Не -хантер петов патч не затрагивает вообще никак. Что до вызова стража - этот баг имеет место быть давно, мне все лень его чинить к патчу отношения не имеет.
PS ну раз уж вспомнил - то и починил
https://github.com/mangosR2/mangos/c...c3f8fd2f952a0e

Последний раз редактировалось rsa; 19.05.2011 в 15:28. Причина: лень поборол
rsa вне форума   Ответить с цитированием
Старый 19.05.2011, 16:47   #15
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

>especially for virusaw
virusav вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибки и дисконекты после двойной специализации FreeBSD Языки программирования 6 05.04.2010 19:16
Петы нпц и локали... NeatElves Корзина 2 09.03.2010 21:02


Текущее время: 05:00. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot