Merge commit 'origin/master' into 310

This commit is contained in:
tomrus88 2009-05-10 21:46:26 +04:00
commit 5ab735d374
14 changed files with 172 additions and 140 deletions

View file

@ -705,12 +705,10 @@ void BattleGround::EndBattleGround(uint32 winner)
if (team == winner) if (team == winner)
{ {
RewardMark(plr,ITEM_WINNER_COUNT); RewardMark(plr,ITEM_WINNER_COUNT);
RewardQuest(plr); RewardQuestComplete(plr);
} }
else else
{
RewardMark(plr,ITEM_LOSER_COUNT); RewardMark(plr,ITEM_LOSER_COUNT);
}
plr->CombatStopWithPets(true); plr->CombatStopWithPets(true);
@ -764,10 +762,6 @@ uint32 BattleGround::GetBattlemasterEntry() const
void BattleGround::RewardMark(Player *plr,uint32 count) void BattleGround::RewardMark(Player *plr,uint32 count)
{ {
// 'Inactive' this aura prevents the player from gaining honor points and battleground tokens
if (plr->GetDummyAura(SPELL_AURA_PLAYER_INACTIVE))
return;
BattleGroundMarks mark; BattleGroundMarks mark;
bool IsSpell; bool IsSpell;
switch(GetTypeID()) switch(GetTypeID())
@ -802,22 +796,52 @@ void BattleGround::RewardMark(Player *plr,uint32 count)
} }
if (IsSpell) if (IsSpell)
plr->CastSpell(plr, mark, true); RewardSpellCast(plr,mark);
else if (objmgr.GetItemPrototype( mark ) ) else
RewardItem(plr,mark,count);
}
void BattleGround::RewardSpellCast(Player *plr, uint32 spell_id)
{
// 'Inactive' this aura prevents the player from gaining honor points and battleground tokens
if (plr->GetDummyAura(SPELL_AURA_PLAYER_INACTIVE))
return;
SpellEntry const *spellInfo = sSpellStore.LookupEntry(spell_id);
if(!spellInfo)
{ {
ItemPosCountVec dest; sLog.outError("Battleground reward casting spell %u not exist.",spell_id);
uint32 no_space_count = 0; return;
uint8 msg = plr->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, mark, count, &no_space_count );
if( msg != EQUIP_ERR_OK ) // convert to possible store amount
count -= no_space_count;
if( count != 0 && !dest.empty()) // can add some
if (Item* item = plr->StoreNewItem( dest, mark, true, 0))
plr->SendNewItem(item,count,false,true);
if (no_space_count > 0)
SendRewardMarkByMail(plr,mark,no_space_count);
} }
plr->CastSpell(plr, spellInfo, true);
}
void BattleGround::RewardItem(Player *plr, uint32 item_id, uint32 count)
{
// 'Inactive' this aura prevents the player from gaining honor points and battleground tokens
if (plr->GetDummyAura(SPELL_AURA_PLAYER_INACTIVE))
return;
ItemPosCountVec dest;
uint32 no_space_count = 0;
uint8 msg = plr->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, item_id, count, &no_space_count );
if( msg == EQUIP_ERR_ITEM_NOT_FOUND)
{
sLog.outErrorDb("Battleground reward item (Entry %u) not exist in `item_template`.",item_id);
return;
}
if( msg != EQUIP_ERR_OK ) // convert to possible store amount
count -= no_space_count;
if( count != 0 && !dest.empty()) // can add some
if (Item* item = plr->StoreNewItem( dest, item_id, true, 0))
plr->SendNewItem(item,count,false,true);
if (no_space_count > 0)
SendRewardMarkByMail(plr,item_id,no_space_count);
} }
void BattleGround::SendRewardMarkByMail(Player *plr,uint32 mark, uint32 count) void BattleGround::SendRewardMarkByMail(Player *plr,uint32 mark, uint32 count)
@ -857,12 +881,8 @@ void BattleGround::SendRewardMarkByMail(Player *plr,uint32 mark, uint32 count)
} }
} }
void BattleGround::RewardQuest(Player *plr) void BattleGround::RewardQuestComplete(Player *plr)
{ {
// 'Inactive' this aura prevents the player from gaining honor points and battleground tokens
if (plr->GetDummyAura(SPELL_AURA_PLAYER_INACTIVE))
return;
uint32 quest; uint32 quest;
switch(GetTypeID()) switch(GetTypeID())
{ {
@ -882,7 +902,7 @@ void BattleGround::RewardQuest(Player *plr)
return; return;
} }
plr->CastSpell(plr, quest, true); RewardSpellCast(plr, quest);
} }
void BattleGround::BlockMovement(Player *plr) void BattleGround::BlockMovement(Player *plr)

View file

@ -411,7 +411,9 @@ class BattleGround
void RewardReputationToTeam(uint32 faction_id, uint32 Reputation, uint32 TeamID); void RewardReputationToTeam(uint32 faction_id, uint32 Reputation, uint32 TeamID);
void RewardMark(Player *plr,uint32 count); void RewardMark(Player *plr,uint32 count);
void SendRewardMarkByMail(Player *plr,uint32 mark, uint32 count); void SendRewardMarkByMail(Player *plr,uint32 mark, uint32 count);
void RewardQuest(Player *plr); void RewardItem(Player *plr, uint32 item_id, uint32 count);
void RewardQuestComplete(Player *plr);
void RewardSpellCast(Player *plr, uint32 spell_id);
void UpdateWorldState(uint32 Field, uint32 Value); void UpdateWorldState(uint32 Field, uint32 Value);
void UpdateWorldStateForPlayer(uint32 Field, uint32 Value, Player *Source); void UpdateWorldStateForPlayer(uint32 Field, uint32 Value, Player *Source);
void EndBattleGround(uint32 winner); void EndBattleGround(uint32 winner);

View file

@ -104,6 +104,21 @@ enum Gossip_Guard_Skill
GOSSIP_GUARD_SKILL_ENGINERING = 91 GOSSIP_GUARD_SKILL_ENGINERING = 91
}; };
enum GossipOptionIcon
{
GOSSIP_ICON_CHAT = 0, //white chat bubble
GOSSIP_ICON_VENDOR = 1, //brown bag
GOSSIP_ICON_TAXI = 2, //flight
GOSSIP_ICON_TRAINER = 3, //book
GOSSIP_ICON_INTERACT_1 = 4, //interaction wheel
GOSSIP_ICON_INTERACT_2 = 5, //interaction wheel
GOSSIP_ICON_MONEY_BAG = 6, //brown bag with yellow dot
GOSSIP_ICON_TALK = 7, //white chat bubble with black dots
GOSSIP_ICON_TABARD = 8, //tabard
GOSSIP_ICON_BATTLE = 9, //two swords
GOSSIP_ICON_DOT = 10 //yellow dot
};
struct GossipOption struct GossipOption
{ {
uint32 Id; uint32 Id;
@ -600,6 +615,7 @@ class MANGOS_DLL_SPEC Creature : public Unit
bool IsVisibleInGridForPlayer(Player* pl) const; bool IsVisibleInGridForPlayer(Player* pl) const;
void RemoveCorpse(); void RemoveCorpse();
bool isDeadByDefault() const { return m_isDeadByDefault; };
time_t const& GetRespawnTime() const { return m_respawnTime; } time_t const& GetRespawnTime() const { return m_respawnTime; }
time_t GetRespawnTimeEx() const; time_t GetRespawnTimeEx() const;

View file

@ -504,6 +504,53 @@ namespace MaNGOS
// CHECKS && DO classes // CHECKS && DO classes
// WorldObject check classes // WorldObject check classes
class RaiseDeadObjectCheck
{
public:
RaiseDeadObjectCheck(Unit* funit, float range) : i_funit(funit), i_range(range) {}
bool operator()(Creature* u)
{
if (i_funit->GetTypeId()!=TYPEID_PLAYER || !((Player*)i_funit)->isHonorOrXPTarget(u) ||
u->getDeathState() != CORPSE || u->isDeadByDefault() || u->isInFlight() ||
( u->GetCreatureTypeMask() & (1 << (CREATURE_TYPE_HUMANOID-1)) )==0 ||
(u->GetDisplayId() != u->GetNativeDisplayId()))
return false;
return i_funit->IsWithinDistInMap(u, i_range);
}
template<class NOT_INTERESTED> bool operator()(NOT_INTERESTED*) { return false; }
private:
Unit* const i_funit;
float i_range;
};
class ExplodeCorpseObjectCheck
{
public:
ExplodeCorpseObjectCheck(Unit* funit, float range) : i_funit(funit), i_range(range) {}
bool operator()(Player* u)
{
if (u->getDeathState()!=CORPSE || u->isInFlight() ||
u->HasAuraType(SPELL_AURA_GHOST) || (u->GetDisplayId() != u->GetNativeDisplayId()))
return false;
return i_funit->IsWithinDistInMap(u, i_range);
}
bool operator()(Creature* u)
{
if (u->getDeathState()!=CORPSE || u->isInFlight() || u->isDeadByDefault() ||
(u->GetDisplayId() != u->GetNativeDisplayId()) ||
(u->GetCreatureTypeMask() & CREATURE_TYPEMASK_MECHANICAL_OR_ELEMENTAL)!=0)
return false;
return i_funit->IsWithinDistInMap(u, i_range);
}
template<class NOT_INTERESTED> bool operator()(NOT_INTERESTED*) { return false; }
private:
Unit* const i_funit;
float i_range;
};
class CannibalizeObjectCheck class CannibalizeObjectCheck
{ {
public: public:
@ -513,22 +560,16 @@ namespace MaNGOS
if( i_funit->IsFriendlyTo(u) || u->isAlive() || u->isInFlight() ) if( i_funit->IsFriendlyTo(u) || u->isAlive() || u->isInFlight() )
return false; return false;
if(i_funit->IsWithinDistInMap(u, i_range) ) return i_funit->IsWithinDistInMap(u, i_range);
return true;
return false;
} }
bool operator()(Corpse* u); bool operator()(Corpse* u);
bool operator()(Creature* u) bool operator()(Creature* u)
{ {
if( i_funit->IsFriendlyTo(u) || u->isAlive() || u->isInFlight() || if (i_funit->IsFriendlyTo(u) || u->isAlive() || u->isInFlight() ||
(u->GetCreatureTypeMask() & CREATURE_TYPEMASK_HUMANOID_OR_UNDEAD)==0) (u->GetCreatureTypeMask() & CREATURE_TYPEMASK_HUMANOID_OR_UNDEAD)==0)
return false; return false;
if(i_funit->IsWithinDistInMap(u, i_range) ) return i_funit->IsWithinDistInMap(u, i_range);
return true;
return false;
} }
template<class NOT_INTERESTED> bool operator()(NOT_INTERESTED*) { return false; } template<class NOT_INTERESTED> bool operator()(NOT_INTERESTED*) { return false; }
private: private:

View file

@ -1064,11 +1064,7 @@ bool ChatHandler::HandleCooldownCommand(const char* args)
return false; return false;
} }
WorldPacket data( SMSG_CLEAR_COOLDOWN, (4+8) ); target->RemoveSpellCooldown(spell_id,true);
data << uint32(spell_id);
data << uint64(target->GetGUID());
target->GetSession()->SendPacket(&data);
target->RemoveSpellCooldown(spell_id);
PSendSysMessage(LANG_REMOVE_COOLDOWN, spell_id, target==m_session->GetPlayer() ? GetMangosString(LANG_YOU) : tNameLink.c_str()); PSendSysMessage(LANG_REMOVE_COOLDOWN, spell_id, target==m_session->GetPlayer() ? GetMangosString(LANG_YOU) : tNameLink.c_str());
} }
return true; return true;

View file

@ -3213,6 +3213,20 @@ void Player::removeSpell(uint32 spell_id, bool disabled, bool update_action_bar_
} }
} }
void Player::RemoveSpellCooldown( uint32 spell_id, bool update /* = false */ )
{
m_spellCooldowns.erase(spell_id);
if(update)
{
WorldPacket data(SMSG_CLEAR_COOLDOWN, (4+8));
data << uint32(spell_id);
data << uint64(GetGUID());
SendDirectMessage(&data);
}
}
void Player::RemoveArenaSpellCooldowns() void Player::RemoveArenaSpellCooldowns()
{ {
// remove cooldowns on spells that has < 15 min CD // remove cooldowns on spells that has < 15 min CD

View file

@ -1416,7 +1416,7 @@ class MANGOS_DLL_SPEC Player : public Unit
void AddSpellCooldown(uint32 spell_id, uint32 itemid, time_t end_time); void AddSpellCooldown(uint32 spell_id, uint32 itemid, time_t end_time);
void SendCooldownEvent(SpellEntry const *spellInfo, uint32 itemId = 0, Spell* spell = NULL); void SendCooldownEvent(SpellEntry const *spellInfo, uint32 itemId = 0, Spell* spell = NULL);
void ProhibitSpellScholl(SpellSchoolMask idSchoolMask, uint32 unTimeMs ); void ProhibitSpellScholl(SpellSchoolMask idSchoolMask, uint32 unTimeMs );
void RemoveSpellCooldown(uint32 spell_id) { m_spellCooldowns.erase(spell_id); } void RemoveSpellCooldown(uint32 spell_id, bool update = false);
void RemoveArenaSpellCooldowns(); void RemoveArenaSpellCooldowns();
void RemoveAllSpellCooldown(); void RemoveAllSpellCooldown();
void _LoadSpellCooldowns(QueryResult *result); void _LoadSpellCooldowns(QueryResult *result);

View file

@ -1769,6 +1769,7 @@ enum CreatureType
}; };
uint32 const CREATURE_TYPEMASK_HUMANOID_OR_UNDEAD = (1 << (CREATURE_TYPE_HUMANOID-1)) | (1 << (CREATURE_TYPE_UNDEAD-1)); uint32 const CREATURE_TYPEMASK_HUMANOID_OR_UNDEAD = (1 << (CREATURE_TYPE_HUMANOID-1)) | (1 << (CREATURE_TYPE_UNDEAD-1));
uint32 const CREATURE_TYPEMASK_MECHANICAL_OR_ELEMENTAL = (1 << (CREATURE_TYPE_MECHANICAL-1)) | (1 << (CREATURE_TYPE_ELEMENTAL-1));
// CreatureFamily.dbc // CreatureFamily.dbc
enum CreatureFamily enum CreatureFamily

View file

@ -423,6 +423,36 @@ Spell::~Spell()
{ {
} }
template<typename T>
WorldObject* Spell::FindCorpseUsing()
{
// non-standard target selection
SpellRangeEntry const* srange = sSpellRangeStore.LookupEntry(m_spellInfo->rangeIndex);
float max_range = GetSpellMaxRange(srange);
CellPair p(MaNGOS::ComputeCellPair(m_caster->GetPositionX(), m_caster->GetPositionY()));
Cell cell(p);
cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
WorldObject* result = NULL;
T u_check(m_caster, max_range);
MaNGOS::WorldObjectSearcher<T> searcher(m_caster, result, u_check);
TypeContainerVisitor<MaNGOS::WorldObjectSearcher<T>, GridTypeMapContainer > grid_searcher(searcher);
CellLock<GridReadGuard> cell_lock(cell, p);
cell_lock->Visit(cell_lock, grid_searcher, *m_caster->GetMap());
if (!result)
{
TypeContainerVisitor<MaNGOS::WorldObjectSearcher<T>, WorldTypeMapContainer > world_searcher(searcher);
cell_lock->Visit(cell_lock, world_searcher, *m_caster->GetMap());
}
return result;
}
void Spell::FillTargetMap() void Spell::FillTargetMap()
{ {
// TODO: ADD the correct target FILLS!!!!!! // TODO: ADD the correct target FILLS!!!!!!
@ -537,29 +567,7 @@ void Spell::FillTargetMap()
{ {
case 20577: // Cannibalize case 20577: // Cannibalize
{ {
// non-standard target selection WorldObject* result = FindCorpseUsing<MaNGOS::CannibalizeObjectCheck> ();
SpellRangeEntry const* srange = sSpellRangeStore.LookupEntry(m_spellInfo->rangeIndex);
float max_range = GetSpellMaxRange(srange);
CellPair p(MaNGOS::ComputeCellPair(m_caster->GetPositionX(), m_caster->GetPositionY()));
Cell cell(p);
cell.data.Part.reserved = ALL_DISTRICT;
cell.SetNoCreate();
WorldObject* result = NULL;
MaNGOS::CannibalizeObjectCheck u_check(m_caster, max_range);
MaNGOS::WorldObjectSearcher<MaNGOS::CannibalizeObjectCheck > searcher(m_caster, result, u_check);
TypeContainerVisitor<MaNGOS::WorldObjectSearcher<MaNGOS::CannibalizeObjectCheck >, GridTypeMapContainer > grid_searcher(searcher);
CellLock<GridReadGuard> cell_lock(cell, p);
cell_lock->Visit(cell_lock, grid_searcher, *m_caster->GetMap());
if(!result)
{
TypeContainerVisitor<MaNGOS::WorldObjectSearcher<MaNGOS::CannibalizeObjectCheck >, WorldTypeMapContainer > world_searcher(searcher);
cell_lock->Visit(cell_lock, world_searcher, *m_caster->GetMap());
}
if(result) if(result)
{ {
@ -580,15 +588,7 @@ void Spell::FillTargetMap()
{ {
// clear cooldown at fail // clear cooldown at fail
if(m_caster->GetTypeId()==TYPEID_PLAYER) if(m_caster->GetTypeId()==TYPEID_PLAYER)
{ ((Player*)m_caster)->RemoveSpellCooldown(m_spellInfo->Id,true);
((Player*)m_caster)->RemoveSpellCooldown(m_spellInfo->Id);
WorldPacket data(SMSG_CLEAR_COOLDOWN, (4+8));
data << uint32(m_spellInfo->Id);
data << uint64(m_caster->GetGUID());
((Player*)m_caster)->GetSession()->SendPacket(&data);
}
SendCastResult(SPELL_FAILED_NO_EDIBLE_CORPSES); SendCastResult(SPELL_FAILED_NO_EDIBLE_CORPSES);
finish(false); finish(false);
} }

View file

@ -381,6 +381,8 @@ class Spell
void SetTargetMap(uint32 i,uint32 cur,UnitList& TagUnitMap); void SetTargetMap(uint32 i,uint32 cur,UnitList& TagUnitMap);
void FillAreaTargets( UnitList& TagUnitMap, float x, float y, float radius, SpellNotifyPushType pushType, SpellTargets spellTargets ); void FillAreaTargets( UnitList& TagUnitMap, float x, float y, float radius, SpellNotifyPushType pushType, SpellTargets spellTargets );
template<typename T> WorldObject* FindCorpseUsing();
bool CheckTarget( Unit* target, uint32 eff ); bool CheckTarget( Unit* target, uint32 eff );
bool CanAutoCast(Unit* target); bool CanAutoCast(Unit* target);

View file

@ -2386,29 +2386,7 @@ void Aura::HandleAuraDummy(bool apply, bool Real)
break; break;
} }
case SPELLFAMILY_HUNTER: case SPELLFAMILY_HUNTER:
{
// Improved Aspect of the Viper
if( GetId()==38390 && m_target->GetTypeId()==TYPEID_PLAYER )
{
if(apply)
{
// + effect value for Aspect of the Viper
SpellModifier *mod = new SpellModifier;
mod->op = SPELLMOD_EFFECT1;
mod->value = m_modifier.m_amount;
mod->type = SPELLMOD_FLAT;
mod->spellId = GetId();
mod->mask = 0x4000000000000LL;
mod->mask2= 0LL;
m_spellmod = mod;
}
((Player*)m_target)->AddSpellMod(m_spellmod, apply);
return;
}
break; break;
}
case SPELLFAMILY_SHAMAN: case SPELLFAMILY_SHAMAN:
{ {
// Improved Weapon Totems // Improved Weapon Totems

View file

@ -1199,12 +1199,7 @@ void Spell::EffectDummy(uint32 i)
(GetSpellSchoolMask(spellInfo) & SPELL_SCHOOL_MASK_FROST) && (GetSpellSchoolMask(spellInfo) & SPELL_SCHOOL_MASK_FROST) &&
spellInfo->Id != 11958 && GetSpellRecoveryTime(spellInfo) > 0 ) spellInfo->Id != 11958 && GetSpellRecoveryTime(spellInfo) > 0 )
{ {
((Player*)m_caster)->RemoveSpellCooldown(classspell); ((Player*)m_caster)->RemoveSpellCooldown(classspell,true);
WorldPacket data(SMSG_CLEAR_COOLDOWN, (4+8));
data << uint32(classspell);
data << uint64(m_caster->GetGUID());
((Player*)m_caster)->GetSession()->SendPacket(&data);
} }
} }
return; return;
@ -1447,14 +1442,7 @@ void Spell::EffectDummy(uint32 i)
SpellEntry const *spellInfo = sSpellStore.LookupEntry(classspell); SpellEntry const *spellInfo = sSpellStore.LookupEntry(classspell);
if (spellInfo->SpellFamilyName == SPELLFAMILY_ROGUE && (spellInfo->SpellFamilyFlags & 0x0000024000000860LL)) if (spellInfo->SpellFamilyName == SPELLFAMILY_ROGUE && (spellInfo->SpellFamilyFlags & 0x0000024000000860LL))
{ ((Player*)m_caster)->RemoveSpellCooldown(classspell,true);
((Player*)m_caster)->RemoveSpellCooldown(classspell);
WorldPacket data(SMSG_CLEAR_COOLDOWN, (4+8));
data << uint32(classspell);
data << uint64(m_caster->GetGUID());
((Player*)m_caster)->GetSession()->SendPacket(&data);
}
} }
return; return;
} }
@ -1505,14 +1493,7 @@ void Spell::EffectDummy(uint32 i)
SpellEntry const *spellInfo = sSpellStore.LookupEntry(classspell); SpellEntry const *spellInfo = sSpellStore.LookupEntry(classspell);
if (spellInfo->SpellFamilyName == SPELLFAMILY_HUNTER && spellInfo->Id != 23989 && GetSpellRecoveryTime(spellInfo) > 0 ) if (spellInfo->SpellFamilyName == SPELLFAMILY_HUNTER && spellInfo->Id != 23989 && GetSpellRecoveryTime(spellInfo) > 0 )
{ ((Player*)m_caster)->RemoveSpellCooldown(classspell,true);
((Player*)m_caster)->RemoveSpellCooldown(classspell);
WorldPacket data(SMSG_CLEAR_COOLDOWN, (4+8));
data << uint32(classspell);
data << uint64(m_caster->GetGUID());
((Player*)m_caster)->GetSession()->SendPacket(&data);
}
} }
return; return;
} }
@ -1611,17 +1592,8 @@ void Spell::EffectDummy(uint32 i)
// non-standard cast requirement check // non-standard cast requirement check
if (!unitTarget || unitTarget->getAttackers().empty()) if (!unitTarget || unitTarget->getAttackers().empty())
{ {
// clear cooldown at fail
if(m_caster->GetTypeId()==TYPEID_PLAYER) if(m_caster->GetTypeId()==TYPEID_PLAYER)
{ ((Player*)m_caster)->RemoveSpellCooldown(m_spellInfo->Id,true);
((Player*)m_caster)->RemoveSpellCooldown(m_spellInfo->Id);
WorldPacket data(SMSG_CLEAR_COOLDOWN, (4+8));
data << uint32(m_spellInfo->Id);
data << uint64(m_caster->GetGUID());
((Player*)m_caster)->GetSession()->SendPacket(&data);
}
SendCastResult(SPELL_FAILED_TARGET_AFFECTING_COMBAT); SendCastResult(SPELL_FAILED_TARGET_AFFECTING_COMBAT);
return; return;
} }

View file

@ -671,16 +671,6 @@ void Player::UpdateManaRegen()
power_regen_mp5 += GetStat(Stats(mod->m_miscvalue)) * mod->m_amount / 500.0f; power_regen_mp5 += GetStat(Stats(mod->m_miscvalue)) * mod->m_amount / 500.0f;
} }
// Bonus from some dummy auras
AuraList const& mDummyAuras = GetAurasByType(SPELL_AURA_PERIODIC_DUMMY);
for(AuraList::const_iterator i = mDummyAuras.begin();i != mDummyAuras.end(); ++i)
if((*i)->GetId() == 34074) // Aspect of the Viper
{
power_regen_mp5 += (*i)->GetModifier()->m_amount * Intellect / 500.0f;
// Add regen bonus from level in this dummy
power_regen_mp5 += getLevel() * 35 / 100;
}
// Set regen rate in cast state apply only on spirit based regen // Set regen rate in cast state apply only on spirit based regen
int32 modManaRegenInterrupt = GetTotalAuraModifier(SPELL_AURA_MOD_MANA_REGEN_INTERRUPT); int32 modManaRegenInterrupt = GetTotalAuraModifier(SPELL_AURA_MOD_MANA_REGEN_INTERRUPT);
if (modManaRegenInterrupt > 100) if (modManaRegenInterrupt > 100)

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__ #ifndef __REVISION_NR_H__
#define __REVISION_NR_H__ #define __REVISION_NR_H__
#define REVISION_NR "7804" #define REVISION_NR "7809"
#endif // __REVISION_NR_H__ #endif // __REVISION_NR_H__