*Fix a crash caused by charm/possess spells.

--HG--
branch : trunk
This commit is contained in:
megamage
2009-02-18 16:26:02 -06:00
parent 7bff1c1d60
commit 0ff7fbcd7f
3 changed files with 20 additions and 10 deletions

View File

@@ -410,12 +410,23 @@ SpellSpecific GetSpellSpecific(uint32 spellId)
return SPELL_ASPECT;
}
for(int i = 0; i < 3; i++)
if( spellInfo->Effect[i] == SPELL_EFFECT_APPLY_AURA && (
spellInfo->EffectApplyAuraName[i] == SPELL_AURA_TRACK_CREATURES ||
spellInfo->EffectApplyAuraName[i] == SPELL_AURA_TRACK_RESOURCES ||
spellInfo->EffectApplyAuraName[i] == SPELL_AURA_TRACK_STEALTHED ) )
return SPELL_TRACKER;
for(int i = 0; i < 3; ++i)
{
if(spellInfo->Effect[i] == SPELL_EFFECT_APPLY_AURA)
{
switch(spellInfo->EffectApplyAuraName[i])
{
case SPELL_AURA_TRACK_CREATURES:
case SPELL_AURA_TRACK_RESOURCES:
case SPELL_AURA_TRACK_STEALTHED:
return SPELL_TRACKER;
case SPELL_AURA_MOD_CHARM:
case SPELL_AURA_MOD_POSSESS_PET:
case SPELL_AURA_MOD_POSSESS:
return SPELL_CHARM;
}
}
}
// elixirs can have different families, but potion most ofc.
if(SpellSpecific sp = spellmgr.GetSpellElixirSpecific(spellInfo->Id))
@@ -455,6 +466,7 @@ bool IsSingleFromSpellSpecificPerTarget(uint32 spellSpec1,uint32 spellSpec2)
case SPELL_WELL_FED:
case SPELL_DRINK:
case SPELL_FOOD:
case SPELL_CHARM:
return spellSpec1==spellSpec2;
case SPELL_BATTLE_ELIXIR:
return spellSpec2==SPELL_BATTLE_ELIXIR

View File

@@ -288,7 +288,8 @@ enum SpellSpecific
SPELL_WARLOCK_CORRUPTION= 17,
SPELL_WELL_FED = 18,
SPELL_DRINK = 19,
SPELL_FOOD = 20
SPELL_FOOD = 20,
SPELL_CHARM = 21,
};
#define SPELL_LINKED_MAX_SPELLS 200000

View File

@@ -12969,9 +12969,6 @@ void Unit::SetCharmedOrPossessedBy(Unit* charmer, bool possess)
if(GetTypeId() == TYPEID_PLAYER)
((Player*)this)->StopCastingCharm();
// Charmed stop being charmed
RemoveCharmAuras();
// Set charmed
charmer->SetCharm(this);
SetCharmerGUID(charmer->GetGUID());