diff options
Diffstat (limited to 'src/game/Unit.cpp')
-rw-r--r-- | src/game/Unit.cpp | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 8875c3301a7..049991d229e 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -4009,7 +4009,7 @@ void Unit::RemoveAurasDueToSpellBySteal(uint32 spellId, uint64 casterGUID, Unit // set its duration and maximum duration // max duration 2 minutes (in msecs) int32 dur = aur->GetAuraDuration(); - const int32 max_dur = 2*MINUTE*1000; + const int32 max_dur = 2*MINUTE*IN_MILISECONDS; new_aur->SetAuraMaxDuration( max_dur > dur ? dur : max_dur ); new_aur->SetAuraDuration( max_dur > dur ? dur : max_dur ); @@ -4445,6 +4445,15 @@ void Unit::AddGameObject(GameObject* gameObj) assert(gameObj && gameObj->GetOwnerGUID()==0); m_gameObj.push_back(gameObj); gameObj->SetOwnerGUID(GetGUID()); + + if ( GetTypeId()==TYPEID_PLAYER && gameObj->GetSpellId() ) + { + SpellEntry const* createBySpell = sSpellStore.LookupEntry(gameObj->GetSpellId()); + // Need disable spell use for owner + if (createBySpell && createBySpell->Attributes & SPELL_ATTR_DISABLED_WHILE_ACTIVE) + // note: item based cooldowns and cooldown spell mods with charges ignored (unknown existed cases) + ((Player*)this)->AddSpellAndCategoryCooldowns(createBySpell,0,NULL,true); + } } void Unit::RemoveGameObject(GameObject* gameObj, bool del) @@ -4457,6 +4466,7 @@ void Unit::RemoveGameObject(GameObject* gameObj, bool del) SpellEntry const* createBySpell = sSpellStore.LookupEntry(gameObj->GetSpellId()); // Need activate spell use for owner if (createBySpell && createBySpell->Attributes & SPELL_ATTR_DISABLED_WHILE_ACTIVE) + // note: item based cooldowns and cooldown spell mods with charges ignored (unknown existed cases) ((Player*)this)->SendCooldownEvent(createBySpell); } gameObj->SetOwnerGUID(0); @@ -6332,7 +6342,6 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu } case SPELLFAMILY_POTION: { - sLog.outError("It Procs!"); if (dummySpell->Id == 17619) { if (procSpell->Category==4) //potion category @@ -9471,6 +9480,8 @@ void Unit::ClearInCombat() // Player's state will be cleared in Player::UpdateContestedPvP if(GetTypeId()!=TYPEID_PLAYER) clearUnitState(UNIT_STAT_ATTACK_PLAYER); + else + ((Player*)this)->UpdatePotionCooldown(); if(GetTypeId() != TYPEID_PLAYER && ((Creature*)this)->isPet()) { @@ -12330,6 +12341,7 @@ void Unit::Kill(Unit *pVictim, bool durabilityLoss) // FORM_SPIRITOFREDEMPTION and related auras pVictim->CastSpell(pVictim,27827,true,NULL,*itr); + pVictim->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); // should not be attackable SpiritOfRedemption = true; break; } @@ -12340,6 +12352,7 @@ void Unit::Kill(Unit *pVictim, bool durabilityLoss) { DEBUG_LOG("SET JUST_DIED"); pVictim->setDeathState(JUST_DIED); + pVictim->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); // reactive attackable flag } // 10% durability loss on death |