|
Баг-репорты Описываем проблемы и ошибки работы ядра |
|
Опции темы | Поиск в этой теме | Опции просмотра |
09.01.2011, 22:21 | #1 |
Администратор
|
Восстановление Стража Скверны
До определенного момента пет чернокнижника Страж Скверны восстанавливался полностью, когда игрок слезал с маунта, т.е. призываем пета, лезем в бой, садимся на маунта, слезаем - пет полностью восстановлен.
С определенного момента пет восстанавливается только при нахождении в мире. Если игрок сел на маунта и долгое время не слезал с него, то никакого восстановления пета нет. Так и должно быть? |
10.01.2011, 00:38 | #2 |
Супер-модератор
|
Проверю на оффе
Добавил: Проверил, да пет восстанавливается полностью после слезания с маунта
__________________
Теперь и в Бете Warlords of Draenor & HotS ! Последний раз редактировалось evilstar; 10.01.2011 в 00:44. |
10.01.2011, 00:55 | #3 |
Администратор
|
Значит, в каком-то коммите поломали, т.к. раньше работало.
|
10.01.2011, 11:13 | #4 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Хм. Я себе даже специальный участок кода писал раньше чтобы так было. Потому как меня целая толпа народа уверяла со скринами что пока пет утемпсаммонен - он не восстанавливается. Еще на 3.3.5а.
|
10.01.2011, 16:54 | #5 |
Администратор
|
Т.е. пет не должен полностью восстанавливаться после слезания с маунта?
|
10.01.2011, 17:07 | #6 | |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Цитата:
С учетом того, что на моем ядре петы - весьма мощная боевая единица (почти как на оффе), такое шустрое восстановление ХП демонам лока и хантам их весьма усиливало, особенно в пвп. Попробуй нахилять войду его 35к ХП (при всех глифах) или дождаться пока он сам отресается... |
|
10.01.2011, 17:09 | #7 |
Администратор
|
На текущий момент проще застрелиться, чем дождаться восстановления пета.
Тем более, что иногда этого вообще не происходит, особенно в инстах. |
10.01.2011, 17:16 | #8 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Ну я уже с трудом представляю как там идет восстановление ХП на чистом ядре, слишком давно этот кусок кода ковыряю. У меня бес восстанавливает ману полностью 2 минуты, войд свое ХП (без магии) - 4-5 минут. Что соответствует замерам что для меня делали на 3.3.5. В бою тоже, хоть и с другой скоростью (функцией от скорости хозяина).
|
11.01.2011, 14:07 | #9 |
Администратор
|
Еще раз спросил теперь уже у другого игрока с офа: когда игрок слезает с маунта, пет полностью восстанавливается.
Так сейчас, так было на 335а. На какой-то версии проскакивал баг с неполным восстановлением, но его потом поправили. |
11.01.2011, 22:25 | #10 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
так и есть только что проверил, покоцаный страж скверны появляется со 100% хп если залезть и слезть с маунта
При чем заметил мелкий нюанс, после спешивания страж всегда появляется с очень малым количеством хп, а буквально через секунду у него резко становится 100%. При повышенном пинге этот промежуток времени становится явно различимым. Похоже пет самонится с минимумом хп, а потом приходит апдейт на восстановление полного здоровья. |
12.01.2011, 23:25 | #11 |
Администратор
|
Сейчас:
Код:
void Unit::Unmount() ... ((Player*)this)->ResummonPetTemporaryUnSummonedIfAny(); ... NewPet->LoadPetFromDB(this, 0, m_temporaryUnsummonedPetNumber, true) Как должна исправляться проблема: 1. При посадке на маунта прописывать в базу полные параметры пета? 2. При слезании с маунта восстанавливать все параметры пета? Лично мне ближе второй вариант. Как правильнее исправить баг с невосстановлением петов при слезании с маунта? |
12.01.2011, 23:39 | #12 |
Администратор
|
Для теста попробовал так: в конец
Код:
void Player::ResummonPetTemporaryUnSummonedIfAny() Код:
if (NewPet) { NewPet->InitStatsForLevel(this->getLevel(), ((Unit *)this)); } Какие мысли по этому поводу? |
13.01.2011, 00:48 | #13 |
Новичок
Регистрация: 06.03.2010
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 2 сообщениях
|
У хантов та же тема кстати.
При чем пет сначала появляется с родными статами, а потом добавляются статы хозяина. Если выйти из мира находясь на маунте, а потом войти и слезть с него, у пета даже появляется приписка "вышел из сети" и его какое-то время нет. |
13.01.2011, 02:43 | #14 | ||
Гость
Сообщений: n/a
|
Цитата:
rca, на счёт твоего поста : Цитата:
|
||
13.01.2011, 07:08 | #15 | |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Цитата:
|
|
13.01.2011, 13:14 | #16 | |
Администратор
|
Цитата:
Операций может быть больше, т.к., возможно, еще надо учитывать бафы на пете и т.д. В конечном итоге нужен патч для исправления бага, а то сейчас от пета толку мало, т.к. в первом же бою мана закончилась, а дальше агрить он не особо хочет. |
|
14.01.2011, 07:17 | #17 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
я исправил так:
https://github.com/rsa/mangos/commit...d9834b1669c052 насколько я помню, этот участок кода в чистом ядре весьма похож. PS сразу получил жалобы от роговладельцев, мол ханты с локами их теперь ушибают как умеют. |
14.01.2011, 10:52 | #18 |
Администратор
|
В чистом ядре в Pet::LoadPetFromDB есть блок:
Код:
if (getPetType() == SUMMON_PET && !current) //all (?) summon pets come with full health when called, but not when they are current { SetHealth(GetMaxHealth()); SetPower(POWER_MANA, GetMaxPower(POWER_MANA)); } else { SetHealth(savedhealth > GetMaxHealth() ? GetMaxHealth() : savedhealth); SetPower(POWER_MANA, savedmana > GetMaxPower(POWER_MANA) ? GetMaxPower(POWER_MANA) : savedmana); } Вчера для теста прописал в ядре: Код:
SetHealth(GetMaxHealth()); SetPower(POWER_MANA, GetMaxPower(POWER_MANA)); |
14.01.2011, 10:55 | #19 |
Администратор
|
Или можно просто в Player::ResummonPetTemporaryUnSummonedIfAny() передавать
в Pet::LoadPetFromDB( Player* owner, uint32 petentry, uint32 petnumber, bool current ) в параметре current не true, а false. |
14.01.2011, 12:15 | #21 |
Администратор
|
Код
Код:
if (getPetType() == SUMMON_PET && !current) //all (?) summon pets come with full health when called, but not when they are current { SetHealth(GetMaxHealth()); SetPower(POWER_MANA, GetMaxPower(POWER_MANA)); } else { SetHealth(savedhealth > GetMaxHealth() ? GetMaxHealth() : savedhealth); SetPower(POWER_MANA, savedmana > GetMaxPower(POWER_MANA) ? GetMaxPower(POWER_MANA) : savedmana); } Код:
if (getPetType() == SUMMON_PET) //all (?) summon pets come with full health when called, but not when they are current { SetHealth(GetMaxHealth()); SetPower(POWER_MANA, GetMaxPower(POWER_MANA)); } else { SetHealth(savedhealth > GetMaxHealth() ? GetMaxHealth() : savedhealth); SetPower(POWER_MANA, savedmana > GetMaxPower(POWER_MANA) ? GetMaxPower(POWER_MANA) : savedmana); } И есть ли случаи, когда из базы загружается пет с неполным количеством жизней и маны? Если нет, то условие вообще не нужно. |
14.01.2011, 12:37 | #22 | |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Цитата:
Единственный случай загрузки пета с неполной маной/ХП был как раз предусмотрен для временного ансаммона (залезание/слезание с маунта/вехикла), сейчас в соответствии с Вашими замечаниями этот режим ликвидирован. Еще есть case телепорта игрока с петом, но его в любом случае надо изучать и прописывать отдельно. |
|
15.01.2011, 20:10 | #23 |
Администратор
|
Если сделать так:
Код:
if (getPetType() == SUMMON_PET) //all (?) summon pets come with full health when called Каждый раз разница в 10 единиц, та же картина с маной, т.е. где-то еще идет пересчет параметров пета. |
15.01.2011, 20:23 | #24 | |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Цитата:
PS все еще продолжается отображение резистов пета всегда по 1 каждого типа на чистом ядре? давненько уже не пробовал запустить... |
|
15.01.2011, 20:24 | #25 | |
Администратор
|
Цитата:
Код:
diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 27a83d8..59431a1 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -21900,6 +21900,11 @@ void Player::ResummonPetTemporaryUnSummonedIfAny() Pet* NewPet = new Pet; if(!NewPet->LoadPetFromDB(this, 0, m_temporaryUnsummonedPetNumber, true)) delete NewPet; + else if (NewPet->getPetType() == SUMMON_PET) //all (?) summon pets come with full health when called + { + NewPet->SetHealth(NewPet->GetMaxHealth()); + NewPet->SetPower(POWER_MANA, NewPet->GetMaxPower(POWER_MANA)); + } m_temporaryUnsummonedPetNumber = 0; } |
|
15.01.2011, 21:01 | #26 |
Администратор
|
Чтобы также работало для петов охотника:
Код:
diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 27a83d8..5700541 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -21900,6 +21900,11 @@ void Player::ResummonPetTemporaryUnSummonedIfAny() Pet* NewPet = new Pet; if(!NewPet->LoadPetFromDB(this, 0, m_temporaryUnsummonedPetNumber, true)) delete NewPet; + else + { + NewPet->SetHealth(NewPet->GetMaxHealth()); + NewPet->SetPower(NewPet->getPowerType(), NewPet->GetMaxPower(NewPet->getPowerType())); + } m_temporaryUnsummonedPetNumber = 0; } Будет ли пет чернокнижника или охотника полностью восстановлен или нет? |
15.01.2011, 23:00 | #27 | |
Гость
Сообщений: n/a
|
Цитата:
1. Охотник (Лок) посылает своего пета в атаку. 2. Пет дерётся, автоматом игрок тоже вступает в режим боя, даже не нанеся ни одного удара (тоесть сесть на маунта не сможет, пока не выйдет из режима боя) 3. Если моб убивает пета, то автоматом агро перекидывается на игрока (отстояться когда моб убил пета не получится). 4. Если это хант, то можно использовать спелл "Притвориться мёртвым" чтобы заивейдить моба (снять агро в 0), тогда моб убежит и восстановит своё здоровье в 100%. (есть исключения когда спелл у ханта не работает, это с гвардами. у них агро не сбрасывается и они просто тебя убивают, при атаке городов и прочей местности противоположной фракции) Последний раз редактировалось ZirO; 15.01.2011 в 23:06. |
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Пушка Скверны Дверей Смерти[39219] | virusav | Баг-репорты | 6 | 06.11.2010 19:11 |
Fel Synergy / Узы Скверны | virusav | Баг-репорты | 2 | 26.08.2010 21:01 |