mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 16:37:01 +00:00
Implemented precast spell store as dynamicaly allocated list of precasts.
Signed-off-by: ApoC <apoc@nymfe.net>
This commit is contained in:
parent
0f6d312e59
commit
6002d7ea2c
2 changed files with 27 additions and 13 deletions
|
|
@ -405,7 +405,7 @@ Spell::Spell( Unit* Caster, SpellEntry const *info, bool triggered, uint64 origi
|
||||||
focusObject = NULL;
|
focusObject = NULL;
|
||||||
m_cast_count = 0;
|
m_cast_count = 0;
|
||||||
m_glyphIndex = 0;
|
m_glyphIndex = 0;
|
||||||
m_preCastSpell = 0;
|
m_preCastSpells = NULL;
|
||||||
m_triggeredByAuraSpell = NULL;
|
m_triggeredByAuraSpell = NULL;
|
||||||
|
|
||||||
//Auto Shot & Shoot (wand)
|
//Auto Shot & Shoot (wand)
|
||||||
|
|
@ -445,6 +445,7 @@ Spell::Spell( Unit* Caster, SpellEntry const *info, bool triggered, uint64 origi
|
||||||
|
|
||||||
Spell::~Spell()
|
Spell::~Spell()
|
||||||
{
|
{
|
||||||
|
delete m_preCastSpells;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
|
|
@ -1238,8 +1239,13 @@ void Spell::DoSpellHitOnUnit(Unit *unit, const uint32 effectMask)
|
||||||
unit->IncrDiminishing(m_diminishGroup);
|
unit->IncrDiminishing(m_diminishGroup);
|
||||||
|
|
||||||
// Apply additional spell effects to target
|
// Apply additional spell effects to target
|
||||||
if (m_preCastSpell)
|
if (m_preCastSpells)
|
||||||
m_caster->CastSpell(unit, m_preCastSpell, true, m_CastItem);
|
{
|
||||||
|
for (SpellPrecasts::const_iterator i = m_preCastSpells->begin(); i != m_preCastSpells->end(); ++i)
|
||||||
|
m_caster->CastSpell(unit, *i, true, m_CastItem);
|
||||||
|
delete m_preCastSpells;
|
||||||
|
m_preCastSpells = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
for(uint32 effectNumber = 0; effectNumber < 3; ++effectNumber)
|
for(uint32 effectNumber = 0; effectNumber < 3; ++effectNumber)
|
||||||
{
|
{
|
||||||
|
|
@ -2288,17 +2294,17 @@ void Spell::cast(bool skipCheck)
|
||||||
case SPELLFAMILY_GENERIC:
|
case SPELLFAMILY_GENERIC:
|
||||||
{
|
{
|
||||||
if (m_spellInfo->Mechanic == MECHANIC_BANDAGE) // Bandages
|
if (m_spellInfo->Mechanic == MECHANIC_BANDAGE) // Bandages
|
||||||
m_preCastSpell = 11196; // Recently Bandaged
|
AddPrecastSpell(11196); // Recently Bandaged
|
||||||
else if(m_spellInfo->SpellIconID == 1662 && m_spellInfo->AttributesEx & 0x20)
|
else if(m_spellInfo->SpellIconID == 1662 && m_spellInfo->AttributesEx & 0x20)
|
||||||
// Blood Fury (Racial)
|
// Blood Fury (Racial)
|
||||||
m_preCastSpell = 23230; // Blood Fury - Healing Reduction
|
AddPrecastSpell(23230); // Blood Fury - Healing Reduction
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SPELLFAMILY_MAGE:
|
case SPELLFAMILY_MAGE:
|
||||||
{
|
{
|
||||||
// Ice Block
|
// Ice Block
|
||||||
if (m_spellInfo->SpellFamilyFlags & UI64LIT(0x0000008000000000))
|
if (m_spellInfo->SpellFamilyFlags & UI64LIT(0x0000008000000000))
|
||||||
m_preCastSpell = 41425; // Hypothermia
|
AddPrecastSpell(41425); // Hypothermia
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SPELLFAMILY_PRIEST:
|
case SPELLFAMILY_PRIEST:
|
||||||
|
|
@ -2306,27 +2312,27 @@ void Spell::cast(bool skipCheck)
|
||||||
// Power Word: Shield
|
// Power Word: Shield
|
||||||
if (m_spellInfo->Mechanic == MECHANIC_SHIELD &&
|
if (m_spellInfo->Mechanic == MECHANIC_SHIELD &&
|
||||||
(m_spellInfo->SpellFamilyFlags & UI64LIT(0x0000000000000001)))
|
(m_spellInfo->SpellFamilyFlags & UI64LIT(0x0000000000000001)))
|
||||||
m_preCastSpell = 6788; // Weakened Soul
|
AddPrecastSpell(6788); // Weakened Soul
|
||||||
// Dispersion (transform)
|
// Dispersion (transform)
|
||||||
if (m_spellInfo->Id == 47585)
|
if (m_spellInfo->Id == 47585)
|
||||||
m_preCastSpell = 60069; // Dispersion (mana regen)
|
AddPrecastSpell(60069); // Dispersion (mana regen)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SPELLFAMILY_PALADIN:
|
case SPELLFAMILY_PALADIN:
|
||||||
{
|
{
|
||||||
// Divine Shield, Divine Protection or Hand of Protection
|
// Divine Shield, Divine Protection or Hand of Protection
|
||||||
if (m_spellInfo->SpellFamilyFlags & UI64LIT(0x0000000000400080))
|
if (m_spellInfo->SpellFamilyFlags & UI64LIT(0x0000000000400080))
|
||||||
m_preCastSpell = 25771; // Forbearance
|
AddPrecastSpell(25771); // Forbearance
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SPELLFAMILY_SHAMAN:
|
case SPELLFAMILY_SHAMAN:
|
||||||
{
|
{
|
||||||
// Bloodlust
|
// Bloodlust
|
||||||
if (m_spellInfo->Id == 2825)
|
if (m_spellInfo->Id == 2825)
|
||||||
m_preCastSpell = 57724; // Sated
|
AddPrecastSpell(57724); // Sated
|
||||||
// Heroism
|
// Heroism
|
||||||
else if (m_spellInfo->Id == 32182)
|
else if (m_spellInfo->Id == 32182)
|
||||||
m_preCastSpell = 57723; // Exhaustion
|
AddPrecastSpell(57723); // Exhaustion
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
|
|
||||||
|
|
@ -204,6 +204,7 @@ enum SpellTargets
|
||||||
#define SPELL_SPELL_CHANNEL_UPDATE_INTERVAL (1*IN_MILISECONDS)
|
#define SPELL_SPELL_CHANNEL_UPDATE_INTERVAL (1*IN_MILISECONDS)
|
||||||
|
|
||||||
typedef std::multimap<uint64, uint64> SpellTargetTimeMap;
|
typedef std::multimap<uint64, uint64> SpellTargetTimeMap;
|
||||||
|
typedef std::list<uint32> SpellPrecasts;
|
||||||
|
|
||||||
class Spell
|
class Spell
|
||||||
{
|
{
|
||||||
|
|
@ -335,6 +336,13 @@ class Spell
|
||||||
void TakeCastItem();
|
void TakeCastItem();
|
||||||
void TriggerSpell();
|
void TriggerSpell();
|
||||||
|
|
||||||
|
void AddPrecastSpell(uint32 spellId)
|
||||||
|
{
|
||||||
|
if (!m_preCastSpells)
|
||||||
|
m_preCastSpells = new SpellPrecasts();
|
||||||
|
m_preCastSpells->push_back(spellId);
|
||||||
|
}
|
||||||
|
|
||||||
SpellCastResult CheckCast(bool strict);
|
SpellCastResult CheckCast(bool strict);
|
||||||
SpellCastResult CheckPetCast(Unit* target);
|
SpellCastResult CheckPetCast(Unit* target);
|
||||||
|
|
||||||
|
|
@ -399,7 +407,7 @@ class Spell
|
||||||
Item* m_CastItem;
|
Item* m_CastItem;
|
||||||
uint8 m_cast_count;
|
uint8 m_cast_count;
|
||||||
uint32 m_glyphIndex;
|
uint32 m_glyphIndex;
|
||||||
uint32 m_preCastSpell;
|
SpellPrecasts *m_preCastSpells;
|
||||||
SpellCastTargets m_targets;
|
SpellCastTargets m_targets;
|
||||||
|
|
||||||
int32 GetCastTime() const { return m_casttime; }
|
int32 GetCastTime() const { return m_casttime; }
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue