|
Патчи Если кто-то хочет выложить не свой готовый патч - не забудьте указать автора и источник.
Если кто-то хочет задать вопрос по патчу - велкам. |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
14.11.2010, 12:51 | #1 | |
Ученый
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
|
[patch/dev] Earth Shield dispel (рассеивание Щита земли)
Суть проблемы: не реализовано исправление патча 3.2.0a
Цитата:
исправляем сие недоразумение Код:
diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index eade9ba..bdbb27d 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -4375,7 +4375,10 @@ void Spell::EffectDispel(SpellEffectIndex eff_idx) if (unitTarget->HasAura(50536)) continue; - dispel_list.push_back(std::pair<SpellAuraHolder* ,uint32>(holder, holder->GetStackAmount())); + if (holder->GetAuraCharges() > 1) + dispel_list.push_back(std::pair<SpellAuraHolder* ,uint32>(holder, holder->GetAuraCharges())); + else + dispel_list.push_back(std::pair<SpellAuraHolder* ,uint32>(holder, holder->GetStackAmount())); } } // Ok if exist some buffs for dispel try dispel it diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 1a6853f..7459723 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -4600,10 +4600,24 @@ void Unit::RemoveAuraHolderFromStack(uint32 spellId, int32 stackAmount, uint64 c { if (!casterGUID || iter->second->GetCasterGUID() == casterGUID) { - if (iter->second->ModStackAmount(-stackAmount)) + if (iter->second->GetAuraCharges() > 1) { - RemoveSpellAuraHolder(iter->second, mode); - break; + while (stackAmount--) + { + if (iter->second->DropAuraCharge()) + { + RemoveSpellAuraHolder(iter->second, mode); + break; + } + } + } + else + { + if (iter->second->ModStackAmount(-stackAmount)) + { + RemoveSpellAuraHolder(iter->second, mode); + break; + } } } }
__________________
Если ты видишь это сообщение то ты просто обязан нажать "Спасибо" Последний раз редактировалось Insider42; 17.11.2010 в 21:20. |
|
14.11.2010, 12:57 | #2 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
Диспел не со всех спеллов снимает один стак. С некоторых - все стаки сразу.
Добавлено: возможно зависит от того вредный или полезный спелл. Последний раз редактировалось LordJZ; 14.11.2010 в 13:10. |
14.11.2010, 13:02 | #3 |
Ученый
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
|
Вы заряды и стаки то не путайте.
А близы сделали хитрее. У них теперь все зарядовые позитивные спеллы (Внутренний огонь у пристов и т.д.) не могут быть сдиспелены, как раз таки кроме Щита земли. Видимо так они и обошли данный вопрос. А негативных зарядовых я вроде пока не видел, они в основной на стаках, нежели на зарядах основаны (Смертельный яд и т.д.)
__________________
Если ты видишь это сообщение то ты просто обязан нажать "Спасибо" |
Пользователь сказал cпасибо: | LordJZ (14.11.2010) |
17.11.2010, 21:12 | #4 |
Ученый
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
|
кхм... упал вот с таким дампом
Код:
#0 Unit::RemoveAuraHolderFromStack (this=0xc693968, spellId=33151, stackAmount=0, casterGUID=0, mode=AURA_REMOVE_BY_DEFAULT) at ../../../src/game/Unit.cpp:4605 4605 if (iter->second->GetAuraCharges() > 0) (gdb) bt full #0 Unit::RemoveAuraHolderFromStack (this=0xc693968, spellId=33151, stackAmount=0, casterGUID=0, mode=AURA_REMOVE_BY_DEFAULT) at ../../../src/game/Unit.cpp:4605 No locals. #1 0x084abf35 in Unit::ProcDamageAndSpellFor (this=0xc693968, isVictim=false, pTarget=0xc693968, procFlag=16384, procExtra=2, attType=BASE_ATTACK, procSpell=0xafcf8dc8, damage=3612) at ../../../src/game/Unit.cpp:10105 removedSpells = {<std::_List_base<unsigned int,std::allocator<unsigned int> >> = { _M_impl = {<std::allocator<std::_List_node<unsigned int> >> = {<__gnu_cxx::new_allocator<std::_List_node<unsigned int> >> = {<No data fields>}, <No data fields>}, _M_node = { _M_next = 0x7a6be1c0, _M_prev = 0x7a6be1c0}}}, <No data fields>} procTriggered = {<std::_List_base<ProcTriggeredData,std::allocator<ProcTriggeredData> >> = { _M_impl = {<std::allocator<std::_List_node<ProcTriggeredData> >> = {<__gnu_cxx::new_allocator<std::_List_node<ProcTriggeredData> >> = {<No data fields>}, <No data fields>}, _M_node = {_M_next = 0x7b4994f0, _M_prev = 0x75f34f20}}}, <No data fields>} #2 0x084ac410 in Unit::ProcDamageAndSpell (this=0xc693968, pVictim=0xc693968, procAttacker=16384, procVictim=32768, procExtra=2, amount=3612, attType=BASE_ATTACK, procSpell=0xafcf8dc8) at ../../../src/game/Unit.cpp:5272 No locals. #3 0x0842d3ba in Spell::DoAllEffectOnTarget (this=0x7b1ffd18, target=0x74b1c388) at ../../../src/game/Spell.cpp:1021 addhealth = 3612 absorb = 0 или есть... у спелла charges - 1, быть может стоит искать спеллы у которых зарядов не > 0, а больше 1 Поправил 1 пост в связи с этим
__________________
Если ты видишь это сообщение то ты просто обязан нажать "Спасибо" Последний раз редактировалось Insider42; 17.11.2010 в 21:21. |
17.11.2010, 21:22 | #5 |
Пользователь
Регистрация: 04.05.2010
Сообщений: 54
Сказал(а) спасибо: 11
Поблагодарили 13 раз(а) в 11 сообщениях
|
По крайней мере спеллстилится (а значит 99% что и диспеллится) щит земли целиком, все чарджи (заряды) сразу. Стакающихся диспелящихся БАФФОВ я не встречал, так же как и дебаффов с зарядами. Диспелл дебаффов всегда снимает 1 стак.
|
17.11.2010, 21:31 | #6 | |
Ученый
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
|
Цитата:
Спеллстил - ворует баф в целом Диспел - рассеивает № зарядов (сколько бы снял эффектов) Судя по всему зарядовых негативных реально не существует... это хорошо... хорошо что патч переделывать не придётся
__________________
Если ты видишь это сообщение то ты просто обязан нажать "Спасибо" |
|
18.11.2010, 02:53 | #7 |
Пользователь
Регистрация: 04.05.2010
Сообщений: 54
Сказал(а) спасибо: 11
Поблагодарили 13 раз(а) в 11 сообщениях
|
Кроме Earh Shield еще есть друидский хот. А вот он как раз стакающийся.. И насколько я знаю он диспеллится. И спеллстилится.
Завтра могу проверить и то и другое. |
18.11.2010, 09:17 | #8 |
Ученый
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
|
ок, тогда перечитайте пост №3 точнее первое в нем предложение. Т.е. к данному патчу это вообще отношения не имеет
__________________
Если ты видишь это сообщение то ты просто обязан нажать "Спасибо" |
18.11.2010, 17:09 | #9 |
Пользователь
Регистрация: 04.05.2010
Сообщений: 54
Сказал(а) спасибо: 11
Поблагодарили 13 раз(а) в 11 сообщениях
|
Я заряды и стаки не путаю
Будем считать что пурж == диспелл. Пурж снимает с вражеской цели 2 положительных эффекта. Тестились друидский хот со _стаками_ (жизнецвет) и шаманский Щит земли (с чарджами) Так вот пурж снимает 2 стака жизнецвета. В случае с щитом земли снимаются 2 заряда. То есть в данном случае заряды == стаки в плане диспелла. Странно, я почему-то считал что баффы с чарджами диспеллятся как один эффект. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[10832] Spawn pool at aura 63471 dispel in water. | newsbot | CMaNGOS Commits | 0 | 07.12.2010 04:51 |
[SQL patch] Bone Shield (Костяной щит) | Insider42 | Патчи на рассмотрении | 0 | 26.10.2010 19:12 |
[SQL patch] Earth Shield (Щит земли) | Insider42 | Патчи на рассмотрении | 0 | 26.10.2010 19:11 |
[9977][patch] Improved Water Shield (Улучшенный водный щит) | Insider42 | Принятые патчи | 3 | 26.05.2010 21:15 |
[9845] Fix dispel damage for 30108 and ranks | newsbot | CMaNGOS Commits | 0 | 07.05.2010 16:50 |