Insider42
14.11.2010, 12:51
Суть проблемы: не реализовано исправление патча 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;
+ }
}
}
}
Принимаются все пожелания по оптимизации/реорганизации патча если вы предоставляете хотя бы часть примерного кода, который как вы считаете будет более верным. В текущей версии с патчем проблем не обнаружено :declare:
автор: я
исправляем сие недоразумение
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;
+ }
}
}
}
Принимаются все пожелания по оптимизации/реорганизации патча если вы предоставляете хотя бы часть примерного кода, который как вы считаете будет более верным. В текущей версии с патчем проблем не обнаружено :declare: