aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorQAston <none@none>2009-03-15 16:20:10 +0100
committerQAston <none@none>2009-03-15 16:20:10 +0100
commitd910fc951e0ccc74f904700d28e7dc5faed5462e (patch)
tree6a879bf0067a611f6afba098ba3b1a77ddb70c84 /src
parent8b246d66d31b8f99544a4e7b74ccfa16b9c0f3c4 (diff)
*Auras by caster are now shown correctly (doublesized).
*First rank of Psychic Horror now procs correctly. *Mana drain effects amount of damage is now correct. *Raczman is now satisfied. --HG-- branch : trunk rename : sql/updates/1910_world.sql => sql/updates/1912_world.sql
Diffstat (limited to 'src')
-rw-r--r--src/game/Player.cpp5
-rw-r--r--src/game/SpellAuraDefines.h2
-rw-r--r--src/game/SpellAuras.cpp13
-rw-r--r--src/game/Unit.cpp5
4 files changed, 8 insertions, 17 deletions
diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index b45527b9401..a7828439383 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -19282,9 +19282,10 @@ void Player::SendAurasForTarget(Unit *target)
// charges
data << uint8(aura->GetAuraCharges());
- if(!(itr->second.m_Flags & AFLAG_NOT_CASTER))
+ if(!(itr->second.m_Flags & AFLAG_CASTER))
{
- data << uint8(0); // packed GUID of someone (caster?)
+ if (Unit * caster = aura->GetCaster())
+ data.append(caster->GetPackGUID());
}
if(itr->second.m_Flags & AFLAG_DURATION) // include aura duration
diff --git a/src/game/SpellAuraDefines.h b/src/game/SpellAuraDefines.h
index 2bea07d9a9b..9fdf622633f 100644
--- a/src/game/SpellAuraDefines.h
+++ b/src/game/SpellAuraDefines.h
@@ -28,7 +28,7 @@ enum AURA_FLAGS
AFLAG_EFF_INDEX_0 = 0x01,
AFLAG_EFF_INDEX_1 = 0x02,
AFLAG_EFF_INDEX_2 = 0x04,
- AFLAG_NOT_CASTER = 0x08,
+ AFLAG_CASTER = 0x08,
AFLAG_POSITIVE = 0x10,
AFLAG_DURATION = 0x20,
AFLAG_UNK2 = 0x40,
diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp
index b4bedebbfe9..c0cf9d17b0e 100644
--- a/src/game/SpellAuras.cpp
+++ b/src/game/SpellAuras.cpp
@@ -846,7 +846,7 @@ void Aura::_AddAura()
assert(slot < MAX_AURAS); // assert that we find a slot and it is valid
AuraSlotEntry t_entry;
- t_entry.m_Flags=(IsPositive() ? AFLAG_POSITIVE : AFLAG_NEGATIVE) | AFLAG_NOT_CASTER | ((GetAuraMaxDuration() > 0) ? AFLAG_DURATION : AFLAG_NONE);
+ t_entry.m_Flags=(IsPositive() ? AFLAG_POSITIVE : AFLAG_NEGATIVE) | ((GetCasterGUID() == m_target->GetGUID()) ? AFLAG_CASTER : AFLAG_NONE) | ((GetAuraMaxDuration() > 0) ? AFLAG_DURATION : AFLAG_NONE);
t_entry.m_Level=(caster ? caster->getLevel() : sWorld.getConfig(CONFIG_MAX_PLAYER_LEVEL));
t_entry.m_spellId = GetId();
//init pointers-prevent unexpected behaviour
@@ -5816,17 +5816,6 @@ void Aura::PeriodicTick()
int32 drain_amount = m_target->GetPower(power) > pdamage ? pdamage : m_target->GetPower(power);
- //Viper sting and Drain Life take mana % amount from target, but not bigger than amount*2 of caster mana
- if ((m_spellProto->SpellFamilyName==SPELLFAMILY_WARLOCK && m_spellProto->SpellFamilyFlags[0]&0x10)
- || (m_spellProto->SpellFamilyName==SPELLFAMILY_HUNTER && m_spellProto->SpellFamilyFlags[1]&0x80))
- {
- uint32 drain = m_target->GetMaxPower(power) * drain_amount /100;
- if(drain > pCaster->GetMaxPower(power) * drain_amount / 50)
- drain_amount = pCaster->GetMaxPower(power) * drain_amount / 50;
- else
- drain_amount = drain;
- }
-
// resilience reduce mana draining effect at spell crit damage reduction (added in 2.4)
if (power == POWER_MANA && m_target->GetTypeId() == TYPEID_PLAYER)
drain_amount -= ((Player*)m_target)->GetSpellCritDamageReduction(drain_amount);
diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp
index 48e7aec78c8..ddd4e12b3fb 100644
--- a/src/game/Unit.cpp
+++ b/src/game/Unit.cpp
@@ -13418,9 +13418,10 @@ void Unit::SendAuraUpdate(uint8 slot)
data << uint8(entry->m_Level);
data << uint8(ptr->GetAuraCharges()? ptr->GetAuraCharges() : ptr->GetStackAmount());
- if(!(entry->m_Flags & AFLAG_NOT_CASTER))
+ if(!(entry->m_Flags & AFLAG_CASTER))
{
- data << uint8(0); // pguid
+ if (Unit * caster = ptr->GetCaster())
+ data.append(caster->GetPackGUID());
}
if(entry->m_Flags & AFLAG_DURATION)