diff options
| author | Machiavelli <none@none> | 2009-08-28 01:57:29 +0200 |
|---|---|---|
| committer | Machiavelli <none@none> | 2009-08-28 01:57:29 +0200 |
| commit | 5ce0b50fc628a82b3df70f6b640638b785d996d7 (patch) | |
| tree | d2eb84e16b572e097b12a40ef71ea1dfa618d8fb /src/game/Unit.cpp | |
| parent | 1c45055482d5af9a2c7e374ae782b3a107c87d37 (diff) | |
| parent | 562f661ac3bc64fecf4a847b506651a5d7306e0b (diff) | |
Merge
--HG--
branch : trunk
Diffstat (limited to 'src/game/Unit.cpp')
| -rw-r--r-- | src/game/Unit.cpp | 54 |
1 files changed, 26 insertions, 28 deletions
diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 1afbcbc652b..b19c88ba376 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -4109,6 +4109,10 @@ void Unit::RemoveAura(AuraMap::iterator &i, AuraRemoveMode mode) ++m_removedAurasCount; + if(Aur->IsPersistent()) + if(DynamicObject *dynObj = ObjectAccessor::GetObjectInWorld(Aur->GetSourceGUID(), (DynamicObject*)NULL)) + dynObj->RemoveAffected(this); + Aur->UnregisterSingleCastAura(); if(Aur->GetSpellProto()->AuraInterruptFlags) @@ -4428,24 +4432,6 @@ void Unit::RemoveAllDynObjects() } } -DynamicObject * Unit::GetDynObject(uint32 spellId, uint32 effIndex) -{ - for (DynObjectGUIDs::iterator i = m_dynObjGUIDs.begin(); i != m_dynObjGUIDs.end();) - { - DynamicObject* dynObj = GetMap()->GetDynamicObject(*i); - if(!dynObj) - { - i = m_dynObjGUIDs.erase(i); - continue; - } - - if (dynObj->GetSpellId() == spellId && dynObj->GetEffIndex() == effIndex) - return dynObj; - ++i; - } - return NULL; -} - DynamicObject * Unit::GetDynObject(uint32 spellId) { for (DynObjectGUIDs::iterator i = m_dynObjGUIDs.begin(); i != m_dynObjGUIDs.end();) @@ -14489,17 +14475,12 @@ void Unit::HandleAuraEffect(AuraEffect * aureff, bool apply) { if (!aureff->IsApplied()) return; + aureff->SetApplied(false); // remove from list before mods removing (prevent cyclic calls, mods added before including to aura list - use reverse order) m_modAuras[aureff->GetAuraName()].remove(aureff); aureff->ApplyModifier(false, true); - Unit * caster = aureff->GetParentAura()->GetCaster(); - if(caster && aureff->IsPersistent()) - { - DynamicObject *dynObj = caster->GetDynObject(aureff->GetId(), aureff->GetEffIndex()); - if (dynObj) - dynObj->RemoveAffected(this); - } + // Remove all triggered by aura spells vs unlimited duration aureff->CleanupTriggeredSpells(); } @@ -14844,8 +14825,9 @@ void Unit::ExitVehicle() BuildHeartBeatMsg(&data); SendMessageToSet(&data, false); - if(vehicle->GetBase()->GetOwnerGUID() == GetGUID()) - vehicle->Dismiss(); + if(vehicle->GetBase()->HasUnitTypeMask(UNIT_MASK_MINION)) + if(((Minion*)vehicle->GetBase())->GetOwner() == this) + vehicle->Dismiss(); } void Unit::BuildMovementPacket(ByteBuffer *data) const @@ -15069,22 +15051,38 @@ void Unit::RewardRage( uint32 damage, uint32 weaponSpeedHitFactor, bool attacker ModifyPower(POWER_RAGE, uint32(addRage*10)); } -void Unit::OutDebugInfo() +void Unit::OutDebugInfo() const { sLog.outError("Unit::OutDebugInfo"); sLog.outString("GUID "UI64FMTD", entry %u, type %u, name %s", GetGUID(), GetEntry(), (uint32)GetTypeId(), GetName()); sLog.outString("OwnerGUID "UI64FMTD", MinionGUID "UI64FMTD", CharmerGUID "UI64FMTD", CharmedGUID "UI64FMTD, GetOwnerGUID(), GetMinionGUID(), GetCharmerGUID(), GetCharmGUID()); + sLog.outString("In world %u, unit type mask %u", (uint32)(IsInWorld() ? 1 : 0), m_unitTypeMask); + sLog.outStringInLine("Summon Slot: "); for(uint32 i = 0; i < MAX_SUMMON_SLOT; ++i) sLog.outStringInLine(UI64FMTD", ", m_SummonSlot[i]); sLog.outString(); + sLog.outStringInLine("Controlled List: "); for(ControlList::const_iterator itr = m_Controlled.begin(); itr != m_Controlled.end(); ++itr) sLog.outStringInLine(UI64FMTD", ", (*itr)->GetGUID()); sLog.outString(); + sLog.outStringInLine("Aura List: "); for(AuraMap::const_iterator itr = m_Auras.begin(); itr != m_Auras.end(); ++itr) sLog.outStringInLine("%u, ", itr->first); sLog.outString(); + + if(IsVehicle()) + { + sLog.outStringInLine("Passenger List: "); + for(SeatMap::iterator itr = GetVehicleKit()->m_Seats.begin(); itr != GetVehicleKit()->m_Seats.end(); ++itr) + if(Unit *passenger = itr->second.passenger) + sLog.outStringInLine(UI64FMTD", ", passenger->GetGUID()); + sLog.outString(); + } + + if(GetVehicle()) + sLog.outString("On vehicle %u.", GetVehicleBase()->GetEntry()); } |
