Ru-MaNGOS

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

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

Патчи Если кто-то хочет выложить не свой готовый патч - не забудьте указать автора и источник.

Если кто-то хочет задать вопрос по патчу - велкам.

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.11.2010, 12:51   #1
Insider42
Ученый
 
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
Insider42 Как самоцвет среди гранитаInsider42 Как самоцвет среди гранитаInsider42 Как самоцвет среди гранита
По умолчанию [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.
Insider42 вне форума   Ответить с цитированием
Старый 14.11.2010, 12:57   #2
LordJZ
Супер-модератор
 
Аватар для LordJZ
 
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
LordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранита
По умолчанию

Диспел не со всех спеллов снимает один стак. С некоторых - все стаки сразу.

Добавлено: возможно зависит от того вредный или полезный спелл.

Последний раз редактировалось LordJZ; 14.11.2010 в 13:10.
LordJZ вне форума   Ответить с цитированием
Старый 14.11.2010, 13:02   #3
Insider42
Ученый
 
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
Insider42 Как самоцвет среди гранитаInsider42 Как самоцвет среди гранитаInsider42 Как самоцвет среди гранита
По умолчанию

Вы заряды и стаки то не путайте.
А близы сделали хитрее. У них теперь все зарядовые позитивные спеллы (Внутренний огонь у пристов и т.д.) не могут быть сдиспелены, как раз таки кроме Щита земли. Видимо так они и обошли данный вопрос. А негативных зарядовых я вроде пока не видел, они в основной на стаках, нежели на зарядах основаны (Смертельный яд и т.д.)
__________________
Если ты видишь это сообщение то ты просто обязан нажать "Спасибо"
Insider42 вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
LordJZ (14.11.2010)
Старый 17.11.2010, 21:12   #4
Insider42
Ученый
 
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
Insider42 Как самоцвет среди гранитаInsider42 Как самоцвет среди гранитаInsider42 Как самоцвет среди гранита
По умолчанию

кхм... упал вот с таким дампом
Код:
#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.
Insider42 вне форума   Ответить с цитированием
Старый 17.11.2010, 21:22   #5
Energy
Пользователь
 
Регистрация: 04.05.2010
Сообщений: 54
Сказал(а) спасибо: 11
Поблагодарили 13 раз(а) в 11 сообщениях
Energy На верном пути
По умолчанию

По крайней мере спеллстилится (а значит 99% что и диспеллится) щит земли целиком, все чарджи (заряды) сразу. Стакающихся диспелящихся БАФФОВ я не встречал, так же как и дебаффов с зарядами. Диспелл дебаффов всегда снимает 1 стак.
Energy вне форума   Ответить с цитированием
Старый 17.11.2010, 21:31   #6
Insider42
Ученый
 
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
Insider42 Как самоцвет среди гранитаInsider42 Как самоцвет среди гранитаInsider42 Как самоцвет среди гранита
По умолчанию

Цитата:
Сообщение от Energy Посмотреть сообщение
По крайней мере спеллстилится (а значит 99% что и диспеллится) щит земли целиком, все чарджи (заряды) сразу. Стакающихся диспелящихся БАФФОВ я не встречал, так же как и дебаффов с зарядами. Диспелл дебаффов всегда снимает 1 стак.
Как по-моему он должен работать (собственно с патчем и работает)
Спеллстил - ворует баф в целом
Диспел - рассеивает № зарядов (сколько бы снял эффектов)

Судя по всему зарядовых негативных реально не существует... это хорошо... хорошо что патч переделывать не придётся
__________________
Если ты видишь это сообщение то ты просто обязан нажать "Спасибо"
Insider42 вне форума   Ответить с цитированием
Старый 18.11.2010, 02:53   #7
Energy
Пользователь
 
Регистрация: 04.05.2010
Сообщений: 54
Сказал(а) спасибо: 11
Поблагодарили 13 раз(а) в 11 сообщениях
Energy На верном пути
По умолчанию

Кроме Earh Shield еще есть друидский хот. А вот он как раз стакающийся.. И насколько я знаю он диспеллится. И спеллстилится.
Завтра могу проверить и то и другое.
Energy вне форума   Ответить с цитированием
Старый 18.11.2010, 09:17   #8
Insider42
Ученый
 
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
Insider42 Как самоцвет среди гранитаInsider42 Как самоцвет среди гранитаInsider42 Как самоцвет среди гранита
По умолчанию

Цитата:
Сообщение от Energy Посмотреть сообщение
Кроме Earh Shield еще есть друидский хот. А вот он как раз стакающийся..
ок, тогда перечитайте пост №3 точнее первое в нем предложение. Т.е. к данному патчу это вообще отношения не имеет
__________________
Если ты видишь это сообщение то ты просто обязан нажать "Спасибо"
Insider42 вне форума   Ответить с цитированием
Старый 18.11.2010, 17:09   #9
Energy
Пользователь
 
Регистрация: 04.05.2010
Сообщений: 54
Сказал(а) спасибо: 11
Поблагодарили 13 раз(а) в 11 сообщениях
Energy На верном пути
По умолчанию

Я заряды и стаки не путаю
Будем считать что пурж == диспелл.
Пурж снимает с вражеской цели 2 положительных эффекта.
Тестились друидский хот со _стаками_ (жизнецвет) и шаманский Щит земли (с чарджами)

Так вот пурж снимает 2 стака жизнецвета. В случае с щитом земли снимаются 2 заряда. То есть в данном случае заряды == стаки в плане диспелла. Странно, я почему-то считал что баффы с чарджами диспеллятся как один эффект.
Energy вне форума   Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[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


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


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