|
Патчи на рассмотрении Рассматриваемые к принятию патчи |
|
Опции темы | Поиск в этой теме | Опции просмотра |
04.03.2011, 23:05 | #1 |
Администратор
|
[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*/; } Этот момент пока не стал делать до получения более подробной информации. У кого какая есть информация по данной теме? Какие будут замечания и предложения? |
04.03.2011, 23:22 | #2 |
Администратор
|
Одно дополнение: в текущем патче после переключения специализации пета охотника можно вызвать по свистку и при маунте/дисмаунте.
После получения информации о сбросе талантов пета охотника надо сделать, чтобы после переключения специализации пета можно было вызвать ТОЛЬКО по свистку. |
05.03.2011, 08:35 | #3 | |
Гость
Сообщений: n/a
|
Цитата:
При смене спека очки сбрасываются только в трёх случаях: 1. При смене спека и ПЕРВОМ вызове данного питомца: Пример Охотник находится в Первой ветке (БМ), у него пет Волк. Игрок купил вторую спецификацию. Вторую спецификацию сделал например "Стрелок" (2 ветка). Хотя тут значение ветки не имеет значения. Второй спек может быть таким же, тоесть тоже БМ, но без пары талантов как в первом спеке. Вызывает того же волка, таланты волка сбрасываются, т.к. он в новом спеке вызван был первый раз! При повторном вызове его таланты останутся. Решили дальше вызвать паука опять смотрится, что он во втором спеке вызывается первый раз, тоесть таланты не раскиданы и так с каждым петом который вызывается. 2. При приручении питомца. 3. При сбросе очков талантов у тренера. Из всего этого делается примерно следующее а) Ядро должно первое что проверять это номер специализации (1 или 2). б) Исходя из пункта а) проверяется спек (1-БМ, 2-ММ и 3-Сурв) тоесть сколько очков талантов надо раскинуть на пета. т.к. очки петов зависят от спека и специфики пета. (в БМ например 21 очко талантов, в остальных спеках 17) в) При вызове пета проверяется первый ли он раз запускается в данной специализации (не путать со спеком) и в данном спеке: --- если да, то проверяется спек (сколько очков надо дать пету в данном спеке); --- если нет, то проверяется спек и вызывается пет с уже раскиданными ранее очками талантов. Если надо более подробно или если что-то не понятно то могу более детально описать. |
|
Пользователь сказал cпасибо: | virusav (05.03.2011) |
05.03.2011, 09:06 | #4 |
Администратор
|
1 - по идее, должно быть сохранение очков талантов питомца в конкретной специализации, чтобы при переключении брались правильные данные.
2 и 3 - это не сюда, т.к. это не касается переключения специализации. 1. Выходит, что для петов надо делать ключ в соответствующих таблицах пет-специализация и сохранять/загружать данные в зависимости от выбранной специализации игрока, т.е. как это сделано для игроков. 2. Можно как-нибудь убрать пета охотника так, чтобы после смены специализации он вызывался только по свистку, но не при маунте/дисмаунте? |
05.03.2011, 11:06 | #5 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
в вашем варианте патча нет, потому что temporaryunsummon сделан спец. для маунта-дизмаунта и телепортов. убирать пета при смене специализаций надо через Remove(...), посмотрите как сделано у меня.
|
05.03.2011, 11:32 | #6 |
Администратор
|
Я не знаю, где это "у меня", можно было просто кинуть код или ссылку на коммит.
|
05.03.2011, 12:31 | #7 | |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Цитата:
в коде соотв. функций. что до конкретного коммита - делал полгода назад, вряд ли найду. да и не в одном коммите оно было. о, нашел. оно оказывается еще и не совсем верно. надо: Код:
if (getClass() == CLASS_HUNTER) pet->Unsummon(PET_SAVE_AS_CURRENT,this); else pet->Unsummon(PET_SAVE_NOT_IN_SLOT, this); Последний раз редактировалось rsa; 05.03.2011 в 12:36. |
|
05.03.2011, 13:24 | #8 |
Администратор
|
Как я понимаю, в первую очередь надо реализовать сохранение талантов петов в разрезе специализаций игроков, а потом уже править убирание петов при переключении специализации, т.к. в таблицах петов не нашел полей с указанием специализации игрока.
|
05.03.2011, 18:15 | #9 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
это несложно, но потребуется делать еще одно поле в таблице с петами. я уже делал, однако поскольку получить информацию, которая здесь есть в сообщении 3, мне не удалось (точнее я получил много разных несовпадающих версий) то в паблик не запускал.
|
05.03.2011, 19:35 | #10 |
Администратор
|
В таком случае, если патч уже есть, можно выложить его для рассмотрения.
|
06.03.2011, 17:47 | #11 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Это не поможет. Код петов у меня и в чистом ядре настолько разошелся, что сделать патч "на чистое" проблематично. Да не думаю что смогу поднять даже в свой форк - полгода без мержей, код устарел, уже надо писать с нуля.
|
18.05.2011, 13:29 | #12 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
По просьбам трудящихся - дуалспек для петов Упростил до невозможности, желающие могут привинтить на чистое.
https://github.com/mangosR2/mangos/c...a4df52e62be1b3 |
18.05.2011, 16:24 | #13 |
Администратор
|
Изменения затронули только `pet_spell`.
А в других таблицах разве не должен быть ключ, например, в `pet_aura`, `pet_spell_cooldown`, `character_pet` ...? С одной стороны у петов охотника свои таланты в разрезе специализаций игрока, а с другой - у игрока разные петы в разрезе специализаций. Вчера собрал сервер на основе https://github.com/mangosR2/mangos, зашел чернокнижником в ветке демонологии, вызвал Стража Скверны, потом переключился в другую ветку - пет остался, т.е. перепризвался, хотя в вругой ветке его нет. Ситуация, как на чистом ядре. |
19.05.2011, 14:24 | #14 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Как выяснилось нет. В предыдущей версии патча все это было, в текущей нет. Кулдауны привязаны к конкретным спеллам и берутся (и это правильно) от спеллов из другой ветки если она была переключена. в данных пета запоминать состояние спека вообще не нужно - он просто берется от хозяина, что подтверждается игроками с оффа.
Не -хантер петов патч не затрагивает вообще никак. Что до вызова стража - этот баг имеет место быть давно, мне все лень его чинить к патчу отношения не имеет. PS ну раз уж вспомнил - то и починил https://github.com/mangosR2/mangos/c...c3f8fd2f952a0e Последний раз редактировалось rsa; 19.05.2011 в 15:28. Причина: лень поборол |
19.05.2011, 16:47 | #15 |
Администратор
|
>especially for virusaw
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ошибки и дисконекты после двойной специализации | FreeBSD | Языки программирования | 6 | 05.04.2010 19:16 |
Петы нпц и локали... | NeatElves | Корзина | 2 | 09.03.2010 21:02 |