[9618] More use ObjectGuid in spell/etc code

This commit is contained in:
VladimirMangos 2010-03-25 11:55:30 +03:00
parent 21ff192866
commit b658b25ff8
19 changed files with 117 additions and 122 deletions

View file

@ -1748,9 +1748,9 @@ void ChatHandler::FillMessageData( WorldPacket *data, WorldSession* session, uin
*data << uint32(0); // 2.1.0 *data << uint32(0); // 2.1.0
*data << uint32(strlen(speaker->GetName()) + 1); *data << uint32(strlen(speaker->GetName()) + 1);
*data << speaker->GetName(); *data << speaker->GetName();
uint64 listener_guid = 0; ObjectGuid listener_guid;
*data << uint64(listener_guid); *data << listener_guid;
if(listener_guid && !IS_PLAYER_GUID(listener_guid)) if (!listener_guid.IsEmpty() && !listener_guid.IsPlayer())
{ {
*data << uint32(1); // string listener_name_length *data << uint32(1); // string listener_name_length
*data << uint8(0); // string listener_name *data << uint8(0); // string listener_name

View file

@ -542,7 +542,7 @@ void CreatureEventAI::ProcessAction(CreatureEventAI_Action const& action, uint32
case ACTION_T_CAST_EVENT: case ACTION_T_CAST_EVENT:
if (Unit* target = GetTargetByType(action.cast_event.target, pActionInvoker)) if (Unit* target = GetTargetByType(action.cast_event.target, pActionInvoker))
if (target->GetTypeId() == TYPEID_PLAYER) if (target->GetTypeId() == TYPEID_PLAYER)
((Player*)target)->CastedCreatureOrGO(action.cast_event.creatureId, m_creature->GetGUID(), action.cast_event.spellId); ((Player*)target)->CastedCreatureOrGO(action.cast_event.creatureId, m_creature->GetObjectGuid(), action.cast_event.spellId);
break; break;
case ACTION_T_SET_UNIT_FIELD: case ACTION_T_SET_UNIT_FIELD:
{ {
@ -643,7 +643,7 @@ void CreatureEventAI::ProcessAction(CreatureEventAI_Action const& action, uint32
for (ThreatList::const_iterator i = threatList.begin(); i != threatList.end(); ++i) for (ThreatList::const_iterator i = threatList.begin(); i != threatList.end(); ++i)
if (Unit* Temp = Unit::GetUnit(*m_creature,(*i)->getUnitGuid())) if (Unit* Temp = Unit::GetUnit(*m_creature,(*i)->getUnitGuid()))
if (Temp->GetTypeId() == TYPEID_PLAYER) if (Temp->GetTypeId() == TYPEID_PLAYER)
((Player*)Temp)->CastedCreatureOrGO(action.cast_event_all.creatureId, m_creature->GetGUID(), action.cast_event_all.spellId); ((Player*)Temp)->CastedCreatureOrGO(action.cast_event_all.creatureId, m_creature->GetObjectGuid(), action.cast_event_all.spellId);
break; break;
} }
case ACTION_T_REMOVEAURASFROMSPELL: case ACTION_T_REMOVEAURASFROMSPELL:

View file

@ -78,20 +78,15 @@ void GameObject::RemoveFromWorld()
if(IsInWorld()) if(IsInWorld())
{ {
// Remove GO from owner // Remove GO from owner
if(uint64 owner_guid = GetOwnerGUID()) ObjectGuid owner_guid = GetOwnerGUID();
if (!owner_guid.IsEmpty())
{ {
if (Unit* owner = ObjectAccessor::GetUnit(*this,owner_guid)) if (Unit* owner = ObjectAccessor::GetUnit(*this,owner_guid))
owner->RemoveGameObject(this,false); owner->RemoveGameObject(this,false);
else else
{ {
const char * ownerType = "creature"; sLog.outError("Delete %s with SpellId %u LinkedGO %u that lost references to owner %s GO list. Crash possible later.",
if(IS_PLAYER_GUID(owner_guid)) GetObjectGuid().GetString().c_str(), m_spellId, GetGOInfo()->GetLinkedGameObjectEntry(), owner_guid.GetString().c_str());
ownerType = "player";
else if(IS_PET_GUID(owner_guid))
ownerType = "pet";
sLog.outError("Delete GameObject (GUID: %u Entry: %u SpellId %u LinkedGO %u) that lost references to owner (GUID %u Type '%s') GO list. Crash possible later.",
GetGUIDLow(), GetGOInfo()->id, m_spellId, GetGOInfo()->GetLinkedGameObjectEntry(), GUID_LOPART(owner_guid), ownerType);
} }
} }
@ -164,7 +159,7 @@ bool GameObject::Create(uint32 guidlow, uint32 name_id, Map *map, uint32 phaseMa
void GameObject::Update(uint32 /*p_time*/) void GameObject::Update(uint32 /*p_time*/)
{ {
if (IS_MO_TRANSPORT(GetGUID())) if (GetObjectGuid().IsMOTransport())
{ {
//((Transport*)this)->Update(p_time); //((Transport*)this)->Update(p_time);
return; return;
@ -1062,7 +1057,7 @@ void GameObject::Use(Unit* user)
break; break;
} }
player->CastedCreatureOrGO(info->id, GetGUID(), 0); player->CastedCreatureOrGO(info->id, GetObjectGuid(), 0);
} }
if (uint32 trapEntry = info->goober.linkedTrapId) if (uint32 trapEntry = info->goober.linkedTrapId)

View file

@ -4889,18 +4889,18 @@ bool ChatHandler::HandleQuestComplete(const char* args)
if(uint32 spell_id = pQuest->ReqSpell[i]) if(uint32 spell_id = pQuest->ReqSpell[i])
{ {
for(uint16 z = 0; z < creaturecount; ++z) for(uint16 z = 0; z < creaturecount; ++z)
player->CastedCreatureOrGO(creature,0,spell_id); player->CastedCreatureOrGO(creature, ObjectGuid::EmptyGuid, spell_id);
} }
else if(creature > 0) else if(creature > 0)
{ {
if(CreatureInfo const* cInfo = ObjectMgr::GetCreatureTemplate(creature)) if(CreatureInfo const* cInfo = ObjectMgr::GetCreatureTemplate(creature))
for(uint16 z = 0; z < creaturecount; ++z) for(uint16 z = 0; z < creaturecount; ++z)
player->KilledMonster(cInfo,0); player->KilledMonster(cInfo, ObjectGuid::EmptyGuid);
} }
else if(creature < 0) else if(creature < 0)
{ {
for(uint16 z = 0; z < creaturecount; ++z) for(uint16 z = 0; z < creaturecount; ++z)
player->CastedCreatureOrGO(-(creature),0,0); player->CastedCreatureOrGO(-creature, ObjectGuid::EmptyGuid, 0);
} }
} }

View file

@ -271,7 +271,7 @@ void WorldSession::HandleMovementOpcodes( WorldPacket & recv_data )
// elevators also cause the client to send MOVEFLAG_ONTRANSPORT - just unmount if the guid can be found in the transport list // elevators also cause the client to send MOVEFLAG_ONTRANSPORT - just unmount if the guid can be found in the transport list
for (MapManager::TransportSet::const_iterator iter = sMapMgr.m_Transports.begin(); iter != sMapMgr.m_Transports.end(); ++iter) for (MapManager::TransportSet::const_iterator iter = sMapMgr.m_Transports.begin(); iter != sMapMgr.m_Transports.end(); ++iter)
{ {
if ((*iter)->GetGUID() == movementInfo.GetTransportGuid()) if ((*iter)->GetObjectGuid() == movementInfo.GetTransportGuid())
{ {
plMover->m_transport = (*iter); plMover->m_transport = (*iter);
(*iter)->AddPassenger(plMover); (*iter)->AddPassenger(plMover);

View file

@ -1641,7 +1641,7 @@ void WorldObject::AddObjectToRemoveList()
Creature* WorldObject::SummonCreature(uint32 id, float x, float y, float z, float ang,TempSummonType spwtype,uint32 despwtime) Creature* WorldObject::SummonCreature(uint32 id, float x, float y, float z, float ang,TempSummonType spwtype,uint32 despwtime)
{ {
TemporarySummon* pCreature = new TemporarySummon(GetGUID()); TemporarySummon* pCreature = new TemporarySummon(GetObjectGuid());
uint32 team = 0; uint32 team = 0;
if (GetTypeId()==TYPEID_PLAYER) if (GetTypeId()==TYPEID_PLAYER)

View file

@ -22,6 +22,8 @@
#include <sstream> #include <sstream>
ObjectGuid const ObjectGuid::EmptyGuid;
char const* ObjectGuid::GetTypeName(HighGuid high) char const* ObjectGuid::GetTypeName(HighGuid high)
{ {
switch(high) switch(high)

View file

@ -69,14 +69,8 @@ enum HighGuid
}; };
//*** Must be replaced by ObjectGuid use *** //*** Must be replaced by ObjectGuid use ***
#define IS_CREATURE_GUID(Guid) ( GUID_HIPART(Guid) == HIGHGUID_UNIT )
#define IS_PET_GUID(Guid) ( GUID_HIPART(Guid) == HIGHGUID_PET )
#define IS_PLAYER_GUID(Guid) ( GUID_HIPART(Guid) == HIGHGUID_PLAYER && Guid!=0 ) #define IS_PLAYER_GUID(Guid) ( GUID_HIPART(Guid) == HIGHGUID_PLAYER && Guid!=0 )
#define IS_UNIT_GUID(Guid) ( IS_CREATURE_GUID(Guid) || IS_PET_GUID(Guid) || IS_PLAYER_GUID(Guid) )
// special case for empty guid need check // special case for empty guid need check
#define IS_GAMEOBJECT_GUID(Guid) ( GUID_HIPART(Guid) == HIGHGUID_GAMEOBJECT )
#define IS_MO_TRANSPORT(Guid) ( GUID_HIPART(Guid) == HIGHGUID_MO_TRANSPORT )
// l - OBJECT_FIELD_GUID // l - OBJECT_FIELD_GUID
// e - OBJECT_FIELD_ENTRY for GO (except GAMEOBJECT_TYPE_MO_TRANSPORT) and creatures or UNIT_FIELD_PETNUMBER for pets // e - OBJECT_FIELD_ENTRY for GO (except GAMEOBJECT_TYPE_MO_TRANSPORT) and creatures or UNIT_FIELD_PETNUMBER for pets
// h - OBJECT_FIELD_GUID + 1 // h - OBJECT_FIELD_GUID + 1
@ -128,6 +122,9 @@ class ObjectGuid
ObjectGuid(HighGuid hi, uint32 entry, uint32 counter) : m_guid(uint64(counter) | (uint64(entry) << 24) | (uint64(hi) << 48)) {} ObjectGuid(HighGuid hi, uint32 entry, uint32 counter) : m_guid(uint64(counter) | (uint64(entry) << 24) | (uint64(hi) << 48)) {}
ObjectGuid(HighGuid hi, uint32 counter) : m_guid(uint64(counter) | (uint64(hi) << 48)) {} ObjectGuid(HighGuid hi, uint32 counter) : m_guid(uint64(counter) | (uint64(hi) << 48)) {}
public: // statics
static ObjectGuid const EmptyGuid;
public: // modifiers public: // modifiers
PackedGuidReader ReadAsPacked() { return PackedGuidReader(*this); } PackedGuidReader ReadAsPacked() { return PackedGuidReader(*this); }

View file

@ -14059,17 +14059,17 @@ void Player::ItemRemovedQuestCheck( uint32 entry, uint32 count )
UpdateForQuestWorldObjects(); UpdateForQuestWorldObjects();
} }
void Player::KilledMonster( CreatureInfo const* cInfo, uint64 guid ) void Player::KilledMonster( CreatureInfo const* cInfo, ObjectGuid guid )
{ {
if(cInfo->Entry) if(cInfo->Entry)
KilledMonsterCredit(cInfo->Entry,guid); KilledMonsterCredit(cInfo->Entry, guid);
for(int i = 0; i < MAX_KILL_CREDIT; ++i) for(int i = 0; i < MAX_KILL_CREDIT; ++i)
if(cInfo->KillCredit[i]) if(cInfo->KillCredit[i])
KilledMonsterCredit(cInfo->KillCredit[i],guid); KilledMonsterCredit(cInfo->KillCredit[i], guid);
} }
void Player::KilledMonsterCredit( uint32 entry, uint64 guid ) void Player::KilledMonsterCredit( uint32 entry, ObjectGuid guid )
{ {
uint32 addkillcount = 1; uint32 addkillcount = 1;
GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE, entry, addkillcount); GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE, entry, addkillcount);
@ -14123,9 +14123,9 @@ void Player::KilledMonsterCredit( uint32 entry, uint64 guid )
} }
} }
void Player::CastedCreatureOrGO( uint32 entry, uint64 guid, uint32 spell_id ) void Player::CastedCreatureOrGO( uint32 entry, ObjectGuid guid, uint32 spell_id )
{ {
bool isCreature = IS_CREATURE_GUID(guid); bool isCreature = guid.IsCreature();
uint32 addCastCount = 1; uint32 addCastCount = 1;
for( int i = 0; i < MAX_QUEST_LOG_SIZE; ++i) for( int i = 0; i < MAX_QUEST_LOG_SIZE; ++i)
@ -14192,7 +14192,7 @@ void Player::CastedCreatureOrGO( uint32 entry, uint64 guid, uint32 spell_id )
} }
} }
void Player::TalkedToCreature( uint32 entry, uint64 guid ) void Player::TalkedToCreature( uint32 entry, ObjectGuid guid )
{ {
uint32 addTalkCount = 1; uint32 addTalkCount = 1;
for( int i = 0; i < MAX_QUEST_LOG_SIZE; ++i ) for( int i = 0; i < MAX_QUEST_LOG_SIZE; ++i )
@ -14481,7 +14481,7 @@ void Player::SendQuestUpdateAddItem( Quest const* /*pQuest*/, uint32 /*item_idx*
GetSession()->SendPacket( &data ); GetSession()->SendPacket( &data );
} }
void Player::SendQuestUpdateAddCreatureOrGo( Quest const* pQuest, uint64 guid, uint32 creatureOrGO_idx, uint32 old_count, uint32 add_count ) void Player::SendQuestUpdateAddCreatureOrGo( Quest const* pQuest, ObjectGuid guid, uint32 creatureOrGO_idx, uint32 old_count, uint32 add_count )
{ {
assert(old_count + add_count < 65536 && "mob/GO count store in 16 bits 2^16 = 65536 (0..65536)"); assert(old_count + add_count < 65536 && "mob/GO count store in 16 bits 2^16 = 65536 (0..65536)");
@ -14496,7 +14496,7 @@ void Player::SendQuestUpdateAddCreatureOrGo( Quest const* pQuest, uint64 guid, u
data << uint32(entry); data << uint32(entry);
data << uint32(old_count + add_count); data << uint32(old_count + add_count);
data << uint32(pQuest->ReqCreatureOrGOCount[ creatureOrGO_idx ]); data << uint32(pQuest->ReqCreatureOrGOCount[ creatureOrGO_idx ]);
data << uint64(guid); data << guid;
GetSession()->SendPacket(&data); GetSession()->SendPacket(&data);
uint16 log_slot = FindQuestSlot( pQuest->GetQuestId() ); uint16 log_slot = FindQuestSlot( pQuest->GetQuestId() );
@ -19846,7 +19846,7 @@ bool Player::RewardPlayerAndGroupAtKill(Unit* pVictim)
{ {
// normal creature (not pet/etc) can be only in !PvP case // normal creature (not pet/etc) can be only in !PvP case
if(pVictim->GetTypeId()==TYPEID_UNIT) if(pVictim->GetTypeId()==TYPEID_UNIT)
pGroupGuy->KilledMonster(((Creature*)pVictim)->GetCreatureInfo(), pVictim->GetGUID()); pGroupGuy->KilledMonster(((Creature*)pVictim)->GetCreatureInfo(), pVictim->GetObjectGuid());
} }
} }
} }
@ -19871,7 +19871,7 @@ bool Player::RewardPlayerAndGroupAtKill(Unit* pVictim)
// normal creature (not pet/etc) can be only in !PvP case // normal creature (not pet/etc) can be only in !PvP case
if(pVictim->GetTypeId()==TYPEID_UNIT) if(pVictim->GetTypeId()==TYPEID_UNIT)
KilledMonster(((Creature*)pVictim)->GetCreatureInfo(), pVictim->GetGUID()); KilledMonster(((Creature*)pVictim)->GetCreatureInfo(), pVictim->GetObjectGuid());
} }
} }
return xp || honored_kill; return xp || honored_kill;

View file

@ -1372,10 +1372,10 @@ class MANGOS_DLL_SPEC Player : public Unit
void GroupEventHappens( uint32 questId, WorldObject const* pEventObject ); void GroupEventHappens( uint32 questId, WorldObject const* pEventObject );
void ItemAddedQuestCheck( uint32 entry, uint32 count ); void ItemAddedQuestCheck( uint32 entry, uint32 count );
void ItemRemovedQuestCheck( uint32 entry, uint32 count ); void ItemRemovedQuestCheck( uint32 entry, uint32 count );
void KilledMonster( CreatureInfo const* cInfo, uint64 guid ); void KilledMonster( CreatureInfo const* cInfo, ObjectGuid guid );
void KilledMonsterCredit( uint32 entry, uint64 guid ); void KilledMonsterCredit( uint32 entry, ObjectGuid guid );
void CastedCreatureOrGO( uint32 entry, uint64 guid, uint32 spell_id ); void CastedCreatureOrGO( uint32 entry, ObjectGuid guid, uint32 spell_id );
void TalkedToCreature( uint32 entry, uint64 guid ); void TalkedToCreature( uint32 entry, ObjectGuid guid );
void MoneyChanged( uint32 value ); void MoneyChanged( uint32 value );
void ReputationChanged(FactionEntry const* factionEntry ); void ReputationChanged(FactionEntry const* factionEntry );
bool HasQuestForItem( uint32 itemid ) const; bool HasQuestForItem( uint32 itemid ) const;
@ -1391,7 +1391,7 @@ class MANGOS_DLL_SPEC Player : public Unit
void SendQuestConfirmAccept(Quest const* pQuest, Player* pReceiver); void SendQuestConfirmAccept(Quest const* pQuest, Player* pReceiver);
void SendPushToPartyResponse( Player *pPlayer, uint32 msg ); void SendPushToPartyResponse( Player *pPlayer, uint32 msg );
void SendQuestUpdateAddItem( Quest const* pQuest, uint32 item_idx, uint32 count ); void SendQuestUpdateAddItem( Quest const* pQuest, uint32 item_idx, uint32 count );
void SendQuestUpdateAddCreatureOrGo( Quest const* pQuest, uint64 guid, uint32 creatureOrGO_idx, uint32 old_count, uint32 add_count ); void SendQuestUpdateAddCreatureOrGo( Quest const* pQuest, ObjectGuid guid, uint32 creatureOrGO_idx, uint32 old_count, uint32 add_count );
uint64 GetDivider() { return m_divider; } uint64 GetDivider() { return m_divider; }
void SetDivider( uint64 guid ) { m_divider = guid; } void SetDivider( uint64 guid ) { m_divider = guid; }

View file

@ -101,8 +101,8 @@ void PointMovementGenerator<Creature>::MovementInform(Creature &unit)
if (unit.isTemporarySummon()) if (unit.isTemporarySummon())
{ {
TemporarySummon* pSummon = (TemporarySummon*)(&unit); TemporarySummon* pSummon = (TemporarySummon*)(&unit);
if (IS_CREATURE_GUID(pSummon->GetSummonerGUID())) if (pSummon->GetSummonerGuid().IsCreature())
if(Creature* pSummoner = unit.GetMap()->GetCreature(pSummon->GetSummonerGUID())) if(Creature* pSummoner = unit.GetMap()->GetCreature(pSummon->GetSummonerGuid()))
if (pSummoner->AI()) if (pSummoner->AI())
pSummoner->AI()->SummonedMovementInform(&unit, POINT_MOTION_TYPE, id); pSummoner->AI()->SummonedMovementInform(&unit, POINT_MOTION_TYPE, id);
} }

View file

@ -312,7 +312,7 @@ void SpellCastTargets::write( ByteBuffer& data ) const
data << m_strTarget; data << m_strTarget;
} }
Spell::Spell( Unit* Caster, SpellEntry const *info, bool triggered, uint64 originalCasterGUID, Spell** triggeringContainer ) Spell::Spell( Unit* Caster, SpellEntry const *info, bool triggered, ObjectGuid originalCasterGUID, Spell** triggeringContainer )
{ {
ASSERT( Caster != NULL && info != NULL ); ASSERT( Caster != NULL && info != NULL );
ASSERT( info == sSpellStore.LookupEntry( info->Id ) && "`info` must be pointer to sSpellStore element"); ASSERT( info == sSpellStore.LookupEntry( info->Id ) && "`info` must be pointer to sSpellStore element");
@ -345,10 +345,10 @@ Spell::Spell( Unit* Caster, SpellEntry const *info, bool triggered, uint64 origi
// Set health leech amount to zero // Set health leech amount to zero
m_healthLeech = 0; m_healthLeech = 0;
if(originalCasterGUID) if(!originalCasterGUID.IsEmpty())
m_originalCasterGUID = originalCasterGUID; m_originalCasterGUID = originalCasterGUID;
else else
m_originalCasterGUID = m_caster->GetGUID(); m_originalCasterGUID = m_caster->GetObjectGuid();
UpdateOriginalCasterPointer(); UpdateOriginalCasterPointer();
@ -767,7 +767,7 @@ void Spell::AddUnitTarget(Unit* pVictim, SpellEffectIndex effIndex)
// Check for effect immune skip if immuned // Check for effect immune skip if immuned
bool immuned = pVictim->IsImmunedToSpellEffect(m_spellInfo, effIndex); bool immuned = pVictim->IsImmunedToSpellEffect(m_spellInfo, effIndex);
uint64 targetGUID = pVictim->GetGUID(); ObjectGuid targetGUID = pVictim->GetObjectGuid();
// Lookup target in already in list // Lookup target in already in list
for(std::list<TargetInfo>::iterator ihit = m_UniqueTargetInfo.begin(); ihit != m_UniqueTargetInfo.end(); ++ihit) for(std::list<TargetInfo>::iterator ihit = m_UniqueTargetInfo.begin(); ihit != m_UniqueTargetInfo.end(); ++ihit)
@ -837,7 +837,7 @@ void Spell::AddGOTarget(GameObject* pVictim, SpellEffectIndex effIndex)
if( m_spellInfo->Effect[effIndex] == 0 ) if( m_spellInfo->Effect[effIndex] == 0 )
return; return;
uint64 targetGUID = pVictim->GetGUID(); ObjectGuid targetGUID = pVictim->GetObjectGuid();
// Lookup target in already in list // Lookup target in already in list
for(std::list<GOTargetInfo>::iterator ihit = m_UniqueGOTargetInfo.begin(); ihit != m_UniqueGOTargetInfo.end(); ++ihit) for(std::list<GOTargetInfo>::iterator ihit = m_UniqueGOTargetInfo.begin(); ihit != m_UniqueGOTargetInfo.end(); ++ihit)
@ -913,7 +913,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo *target)
// Get mask of effects for target // Get mask of effects for target
uint32 mask = target->effectMask; uint32 mask = target->effectMask;
Unit* unit = m_caster->GetGUID() == target->targetGUID ? m_caster : ObjectAccessor::GetUnit(*m_caster, target->targetGUID); Unit* unit = m_caster->GetObjectGuid() == target->targetGUID ? m_caster : ObjectAccessor::GetUnit(*m_caster, target->targetGUID);
if (!unit) if (!unit)
return; return;
@ -1017,7 +1017,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo *target)
// ignore pets or autorepeat/melee casts for speed (not exist quest for spells (hm... ) // ignore pets or autorepeat/melee casts for speed (not exist quest for spells (hm... )
if (real_caster && !((Creature*)unit)->isPet() && !IsAutoRepeat() && !IsNextMeleeSwingSpell() && !IsChannelActive()) if (real_caster && !((Creature*)unit)->isPet() && !IsAutoRepeat() && !IsNextMeleeSwingSpell() && !IsChannelActive())
if (Player* p = real_caster->GetCharmerOrOwnerPlayerOrPlayerItself()) if (Player* p = real_caster->GetCharmerOrOwnerPlayerOrPlayerItself())
p->CastedCreatureOrGO(unit->GetEntry(), unit->GetGUID(), m_spellInfo->Id); p->CastedCreatureOrGO(unit->GetEntry(), unit->GetObjectGuid(), m_spellInfo->Id);
if(((Creature*)unit)->AI()) if(((Creature*)unit)->AI())
((Creature*)unit)->AI()->SpellHit(m_caster, m_spellInfo); ((Creature*)unit)->AI()->SpellHit(m_caster, m_spellInfo);
@ -1178,7 +1178,7 @@ void Spell::DoAllEffectOnTarget(GOTargetInfo *target)
if( !IsAutoRepeat() && !IsNextMeleeSwingSpell() && !IsChannelActive() ) if( !IsAutoRepeat() && !IsNextMeleeSwingSpell() && !IsChannelActive() )
{ {
if ( Player* p = m_caster->GetCharmerOrOwnerPlayerOrPlayerItself() ) if ( Player* p = m_caster->GetCharmerOrOwnerPlayerOrPlayerItself() )
p->CastedCreatureOrGO(go->GetEntry(), go->GetGUID(), m_spellInfo->Id); p->CastedCreatureOrGO(go->GetEntry(), go->GetObjectGuid(), m_spellInfo->Id);
} }
} }
@ -1205,7 +1205,7 @@ bool Spell::IsAliveUnitPresentInTargetList()
{ {
if( ihit->missCondition == SPELL_MISS_NONE && (needAliveTargetMask & ihit->effectMask) ) if( ihit->missCondition == SPELL_MISS_NONE && (needAliveTargetMask & ihit->effectMask) )
{ {
Unit *unit = m_caster->GetGUID() == ihit->targetGUID ? m_caster : ObjectAccessor::GetUnit(*m_caster, ihit->targetGUID); Unit *unit = m_caster->GetObjectGuid() == ihit->targetGUID ? m_caster : ObjectAccessor::GetUnit(*m_caster, ihit->targetGUID);
// either unit is alive and normal spell, or unit dead and deathonly-spell // either unit is alive and normal spell, or unit dead and deathonly-spell
if (unit && (unit->isAlive() != IsDeathOnlySpell(m_spellInfo))) if (unit && (unit->isAlive() != IsDeathOnlySpell(m_spellInfo)))
@ -2479,7 +2479,7 @@ void Spell::cancel()
{ {
if( ihit->missCondition == SPELL_MISS_NONE ) if( ihit->missCondition == SPELL_MISS_NONE )
{ {
Unit* unit = m_caster->GetGUID() == (*ihit).targetGUID ? m_caster : ObjectAccessor::GetUnit(*m_caster, ihit->targetGUID); Unit* unit = m_caster->GetObjectGuid() == (*ihit).targetGUID ? m_caster : ObjectAccessor::GetUnit(*m_caster, ihit->targetGUID);
if( unit && unit->isAlive() ) if( unit && unit->isAlive() )
unit->RemoveAurasByCasterSpell(m_spellInfo->Id, m_caster->GetGUID()); unit->RemoveAurasByCasterSpell(m_spellInfo->Id, m_caster->GetGUID());
} }
@ -2956,14 +2956,14 @@ void Spell::update(uint32 difftime)
for(std::list<TargetInfo>::iterator ihit = m_UniqueTargetInfo.begin(); ihit != m_UniqueTargetInfo.end(); ++ihit) for(std::list<TargetInfo>::iterator ihit = m_UniqueTargetInfo.begin(); ihit != m_UniqueTargetInfo.end(); ++ihit)
{ {
TargetInfo* target = &*ihit; TargetInfo* target = &*ihit;
if(!IS_CREATURE_GUID(target->targetGUID)) if(!target->targetGUID.IsCreature())
continue; continue;
Unit* unit = m_caster->GetGUID() == target->targetGUID ? m_caster : ObjectAccessor::GetUnit(*m_caster, target->targetGUID); Unit* unit = m_caster->GetObjectGuid() == target->targetGUID ? m_caster : ObjectAccessor::GetUnit(*m_caster, target->targetGUID);
if (unit == NULL) if (unit == NULL)
continue; continue;
p->CastedCreatureOrGO(unit->GetEntry(), unit->GetGUID(), m_spellInfo->Id); p->CastedCreatureOrGO(unit->GetEntry(), unit->GetObjectGuid(), m_spellInfo->Id);
} }
for(std::list<GOTargetInfo>::iterator ihit = m_UniqueGOTargetInfo.begin(); ihit != m_UniqueGOTargetInfo.end(); ++ihit) for(std::list<GOTargetInfo>::iterator ihit = m_UniqueGOTargetInfo.begin(); ihit != m_UniqueGOTargetInfo.end(); ++ihit)
@ -2974,7 +2974,7 @@ void Spell::update(uint32 difftime)
if(!go) if(!go)
continue; continue;
p->CastedCreatureOrGO(go->GetEntry(), go->GetGUID(), m_spellInfo->Id); p->CastedCreatureOrGO(go->GetEntry(), go->GetObjectGuid(), m_spellInfo->Id);
} }
} }
} }
@ -3017,7 +3017,7 @@ void Spell::finish(bool ok)
if( ihit->missCondition == SPELL_MISS_NONE ) if( ihit->missCondition == SPELL_MISS_NONE )
{ {
// check m_caster->GetGUID() let load auras at login and speedup most often case // check m_caster->GetGUID() let load auras at login and speedup most often case
Unit *unit = m_caster->GetGUID()== ihit->targetGUID ? m_caster : ObjectAccessor::GetUnit(*m_caster, ihit->targetGUID); Unit *unit = m_caster->GetObjectGuid() == ihit->targetGUID ? m_caster : ObjectAccessor::GetUnit(*m_caster, ihit->targetGUID);
if (unit && unit->isAlive()) if (unit && unit->isAlive())
{ {
SpellEntry const *auraSpellInfo = (*i)->GetSpellProto(); SpellEntry const *auraSpellInfo = (*i)->GetSpellProto();
@ -3054,7 +3054,7 @@ void Spell::finish(bool ok)
{ {
for(std::list<TargetInfo>::const_iterator ihit = m_UniqueTargetInfo.begin(); ihit != m_UniqueTargetInfo.end(); ++ihit) for(std::list<TargetInfo>::const_iterator ihit = m_UniqueTargetInfo.begin(); ihit != m_UniqueTargetInfo.end(); ++ihit)
{ {
if (ihit->missCondition != SPELL_MISS_NONE && ihit->targetGUID != m_caster->GetGUID()) if (ihit->missCondition != SPELL_MISS_NONE && ihit->targetGUID != m_caster->GetObjectGuid())
{ {
needDrop = false; needDrop = false;
break; break;
@ -3380,20 +3380,20 @@ void Spell::WriteSpellGoTargets( WorldPacket * data )
{ {
if ((*ihit).missCondition == SPELL_MISS_NONE) // Add only hits if ((*ihit).missCondition == SPELL_MISS_NONE) // Add only hits
{ {
*data << uint64(ihit->targetGUID); *data << ihit->targetGUID;
m_needAliveTargetMask |=ihit->effectMask; m_needAliveTargetMask |=ihit->effectMask;
} }
} }
for(std::list<GOTargetInfo>::const_iterator ighit = m_UniqueGOTargetInfo.begin(); ighit != m_UniqueGOTargetInfo.end(); ++ighit) for(std::list<GOTargetInfo>::const_iterator ighit = m_UniqueGOTargetInfo.begin(); ighit != m_UniqueGOTargetInfo.end(); ++ighit)
*data << uint64(ighit->targetGUID); // Always hits *data << ighit->targetGUID; // Always hits
*data << (uint8)miss; *data << (uint8)miss;
for(std::list<TargetInfo>::const_iterator ihit = m_UniqueTargetInfo.begin(); ihit != m_UniqueTargetInfo.end(); ++ihit) for(std::list<TargetInfo>::const_iterator ihit = m_UniqueTargetInfo.begin(); ihit != m_UniqueTargetInfo.end(); ++ihit)
{ {
if( ihit->missCondition != SPELL_MISS_NONE ) // Add only miss if( ihit->missCondition != SPELL_MISS_NONE ) // Add only miss
{ {
*data << uint64(ihit->targetGUID); *data << ihit->targetGUID;
*data << uint8(ihit->missCondition); *data << uint8(ihit->missCondition);
if( ihit->missCondition == SPELL_MISS_REFLECT ) if( ihit->missCondition == SPELL_MISS_REFLECT )
*data << uint8(ihit->reflectResult); *data << uint8(ihit->reflectResult);
@ -3535,10 +3535,10 @@ void Spell::SendChannelUpdate(uint32 time)
{ {
m_caster->RemoveAurasByCasterSpell(m_spellInfo->Id, m_caster->GetGUID()); m_caster->RemoveAurasByCasterSpell(m_spellInfo->Id, m_caster->GetGUID());
if(uint64 target_guid = m_caster->GetChannelObjectGUID()) ObjectGuid target_guid = m_caster->GetChannelObjectGUID();
if(target_guid != m_caster->GetGUID() && IS_UNIT_GUID(target_guid)) if (target_guid != m_caster->GetObjectGuid() && target_guid.IsUnit())
if(Unit* target = ObjectAccessor::GetUnit(*m_caster, target_guid)) if (Unit* target = ObjectAccessor::GetUnit(*m_caster, target_guid))
target->RemoveAurasByCasterSpell(m_spellInfo->Id, m_caster->GetGUID()); target->RemoveAurasByCasterSpell(m_spellInfo->Id, m_caster->GetGUID());
m_caster->SetChannelObjectGUID(0); m_caster->SetChannelObjectGUID(0);
m_caster->SetUInt32Value(UNIT_CHANNEL_SPELL, 0); m_caster->SetUInt32Value(UNIT_CHANNEL_SPELL, 0);
@ -3559,7 +3559,7 @@ void Spell::SendChannelStart(uint32 duration)
{ {
for(std::list<TargetInfo>::const_iterator itr = m_UniqueTargetInfo.begin(); itr != m_UniqueTargetInfo.end(); ++itr) for(std::list<TargetInfo>::const_iterator itr = m_UniqueTargetInfo.begin(); itr != m_UniqueTargetInfo.end(); ++itr)
{ {
if( (itr->effectMask & (1 << 0)) && itr->reflectResult == SPELL_MISS_NONE && itr->targetGUID != m_caster->GetGUID()) if( (itr->effectMask & (1 << 0)) && itr->reflectResult == SPELL_MISS_NONE && itr->targetGUID != m_caster->GetObjectGuid())
{ {
target = ObjectAccessor::GetUnit(*m_caster, itr->targetGUID); target = ObjectAccessor::GetUnit(*m_caster, itr->targetGUID);
break; break;
@ -5209,7 +5209,7 @@ SpellCastResult Spell::CheckCasterAuras() const
bool Spell::CanAutoCast(Unit* target) bool Spell::CanAutoCast(Unit* target)
{ {
uint64 targetguid = target->GetGUID(); ObjectGuid targetguid = target->GetObjectGuid();
for(int j = 0; j < MAX_EFFECT_INDEX; ++j) for(int j = 0; j < MAX_EFFECT_INDEX; ++j)
{ {
@ -5916,7 +5916,7 @@ void Spell::DelayedChannel()
{ {
if ((*ihit).missCondition == SPELL_MISS_NONE) if ((*ihit).missCondition == SPELL_MISS_NONE)
{ {
if (Unit* unit = m_caster->GetGUID() == ihit->targetGUID ? m_caster : ObjectAccessor::GetUnit(*m_caster, ihit->targetGUID)) if (Unit* unit = m_caster->GetObjectGuid() == ihit->targetGUID ? m_caster : ObjectAccessor::GetUnit(*m_caster, ihit->targetGUID))
for (int j = 0; j < MAX_EFFECT_INDEX; ++j) for (int j = 0; j < MAX_EFFECT_INDEX; ++j)
if (ihit->effectMask & (1 << j)) if (ihit->effectMask & (1 << j))
unit->DelayAura(m_spellInfo->Id, SpellEffectIndex(j), delaytime); unit->DelayAura(m_spellInfo->Id, SpellEffectIndex(j), delaytime);
@ -5936,9 +5936,9 @@ void Spell::DelayedChannel()
void Spell::UpdateOriginalCasterPointer() void Spell::UpdateOriginalCasterPointer()
{ {
if(m_originalCasterGUID == m_caster->GetGUID()) if(m_originalCasterGUID == m_caster->GetObjectGuid())
m_originalCaster = m_caster; m_originalCaster = m_caster;
else if (IS_GAMEOBJECT_GUID(m_originalCasterGUID)) else if (m_originalCasterGUID.IsGameobject())
{ {
GameObject* go = m_caster->IsInWorld() ? m_caster->GetMap()->GetGameObject(m_originalCasterGUID) : NULL; GameObject* go = m_caster->IsInWorld() ? m_caster->GetMap()->GetGameObject(m_originalCasterGUID) : NULL;
m_originalCaster = go ? go->GetOwner() : NULL; m_originalCaster = go ? go->GetOwner() : NULL;
@ -6382,7 +6382,7 @@ void Spell::FillRaidOrPartyHealthPriorityTargets(UnitList &targetUnitMap, Unit*
WorldObject* Spell::GetCastingObject() const WorldObject* Spell::GetCastingObject() const
{ {
if (IS_GAMEOBJECT_GUID(m_originalCasterGUID)) if (m_originalCasterGUID.IsGameobject())
return m_caster->IsInWorld() ? m_caster->GetMap()->GetGameObject(m_originalCasterGUID) : NULL; return m_caster->IsInWorld() ? m_caster->GetMap()->GetGameObject(m_originalCasterGUID) : NULL;
else else
return m_caster; return m_caster;

View file

@ -22,6 +22,7 @@
#include "GridDefines.h" #include "GridDefines.h"
#include "SharedDefines.h" #include "SharedDefines.h"
#include "DBCEnums.h" #include "DBCEnums.h"
#include "ObjectGuid.h"
class WorldSession; class WorldSession;
class Unit; class Unit;
@ -357,7 +358,7 @@ class Spell
void EffectSpecCount(SpellEffectIndex eff_idx); void EffectSpecCount(SpellEffectIndex eff_idx);
void EffectActivateSpec(SpellEffectIndex eff_idx); void EffectActivateSpec(SpellEffectIndex eff_idx);
Spell( Unit* Caster, SpellEntry const *info, bool triggered, uint64 originalCasterGUID = 0, Spell** triggeringContainer = NULL ); Spell( Unit* Caster, SpellEntry const *info, bool triggered, ObjectGuid originalCasterGUID = ObjectGuid::EmptyGuid, Spell** triggeringContainer = NULL );
~Spell(); ~Spell();
void prepare(SpellCastTargets const* targets, Aura* triggeredByAura = NULL); void prepare(SpellCastTargets const* targets, Aura* triggeredByAura = NULL);
@ -474,7 +475,7 @@ class Spell
// formal spell caster, in game source of spell affects cast // formal spell caster, in game source of spell affects cast
Unit* GetCaster() const { return m_caster; } Unit* GetCaster() const { return m_caster; }
// real source of cast affects, explcit caster, or DoT/HoT applier, or GO owner, etc. Can be NULL // real source of cast affects, explcit caster, or DoT/HoT applier, or GO owner, etc. Can be NULL
Unit* GetAffectiveCaster() const { return m_originalCasterGUID ? m_originalCaster : m_caster; } Unit* GetAffectiveCaster() const { return !m_originalCasterGUID.IsEmpty() ? m_originalCaster : m_caster; }
// m_originalCasterGUID can store GO guid, and in this case this is visual caster // m_originalCasterGUID can store GO guid, and in this case this is visual caster
WorldObject* GetCastingObject() const; WorldObject* GetCastingObject() const;
@ -500,7 +501,7 @@ class Spell
Unit* m_caster; Unit* m_caster;
uint64 m_originalCasterGUID; // real source of cast (aura caster/etc), used for spell targets selection ObjectGuid m_originalCasterGUID; // real source of cast (aura caster/etc), used for spell targets selection
// e.g. damage around area spell trigered by victim aura and da,age emeies of aura caster // e.g. damage around area spell trigered by victim aura and da,age emeies of aura caster
Unit* m_originalCaster; // cached pointer for m_originalCaster, updated at Spell::UpdatePointers() Unit* m_originalCaster; // cached pointer for m_originalCaster, updated at Spell::UpdatePointers()
@ -570,7 +571,7 @@ class Spell
// Targets store structures and data // Targets store structures and data
struct TargetInfo struct TargetInfo
{ {
uint64 targetGUID; ObjectGuid targetGUID;
uint64 timeDelay; uint64 timeDelay;
SpellMissInfo missCondition:8; SpellMissInfo missCondition:8;
SpellMissInfo reflectResult:8; SpellMissInfo reflectResult:8;
@ -582,7 +583,7 @@ class Spell
struct GOTargetInfo struct GOTargetInfo
{ {
uint64 targetGUID; ObjectGuid targetGUID;
uint64 timeDelay; uint64 timeDelay;
uint8 effectMask:8; uint8 effectMask:8;
bool processed:1; bool processed:1;

View file

@ -2846,7 +2846,7 @@ void Spell::EffectApplyAura(SpellEffectIndex eff_idx)
{ {
// FIXME: currently we can't have auras applied explIcitly by gameobjects // FIXME: currently we can't have auras applied explIcitly by gameobjects
// so for auras from wild gameobjects (no owner) target used // so for auras from wild gameobjects (no owner) target used
if (IS_GAMEOBJECT_GUID(m_originalCasterGUID)) if (m_originalCasterGUID.IsGameobject())
caster = unitTarget; caster = unitTarget;
else else
return; return;
@ -5489,7 +5489,7 @@ void Spell::EffectScriptEffect(SpellEffectIndex eff_idx)
TemporarySummon* pSummon = (TemporarySummon*)pTarget; TemporarySummon* pSummon = (TemporarySummon*)pTarget;
// can only affect "own" summoned // can only affect "own" summoned
if (pSummon->GetSummonerGUID() == m_caster->GetGUID()) if (pSummon->GetSummonerGuid() == m_caster->GetObjectGuid())
{ {
if (pTarget->hasUnitState(UNIT_STAT_ROAMING | UNIT_STAT_ROAMING_MOVE)) if (pTarget->hasUnitState(UNIT_STAT_ROAMING | UNIT_STAT_ROAMING_MOVE))
pTarget->GetMotionMaster()->MovementExpired(); pTarget->GetMotionMaster()->MovementExpired();

View file

@ -21,7 +21,7 @@
#include "ObjectAccessor.h" #include "ObjectAccessor.h"
#include "CreatureAI.h" #include "CreatureAI.h"
TemporarySummon::TemporarySummon( uint64 summoner ) : TemporarySummon::TemporarySummon( ObjectGuid summoner ) :
Creature(CREATURE_SUBTYPE_TEMPORARY_SUMMON), m_type(TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN), m_timer(0), m_lifetime(0), m_summoner(summoner) Creature(CREATURE_SUBTYPE_TEMPORARY_SUMMON), m_type(TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN), m_timer(0), m_lifetime(0), m_summoner(summoner)
{ {
} }
@ -165,8 +165,8 @@ void TemporarySummon::UnSummon()
{ {
CombatStop(); CombatStop();
if (IS_CREATURE_GUID(GetSummonerGUID())) if (GetSummonerGuid().IsCreature())
if(Creature* sum = GetMap()->GetCreature(GetSummonerGUID())) if(Creature* sum = GetMap()->GetCreature(GetSummonerGuid()))
if (sum->AI()) if (sum->AI())
sum->AI()->SummonedCreatureDespawn(this); sum->AI()->SummonedCreatureDespawn(this);

View file

@ -25,18 +25,18 @@
class TemporarySummon : public Creature class TemporarySummon : public Creature
{ {
public: public:
explicit TemporarySummon(uint64 summoner = 0); explicit TemporarySummon(ObjectGuid summoner = ObjectGuid::EmptyGuid);
virtual ~TemporarySummon(){}; virtual ~TemporarySummon(){};
void Update(uint32 time); void Update(uint32 time);
void Summon(TempSummonType type, uint32 lifetime); void Summon(TempSummonType type, uint32 lifetime);
void MANGOS_DLL_SPEC UnSummon(); void MANGOS_DLL_SPEC UnSummon();
void SaveToDB(); void SaveToDB();
uint64 GetSummonerGUID() const { return m_summoner ; } ObjectGuid const& GetSummonerGuid() const { return m_summoner ; }
Unit* GetSummoner() const { return m_summoner ? ObjectAccessor::GetUnit(*this, m_summoner) : NULL; } Unit* GetSummoner() const { return ObjectAccessor::GetUnit(*this, m_summoner); }
private: private:
TempSummonType m_type; TempSummonType m_type;
uint32 m_timer; uint32 m_timer;
uint32 m_lifetime; uint32 m_lifetime;
uint64 m_summoner; ObjectGuid m_summoner;
}; };
#endif #endif

View file

@ -594,7 +594,7 @@ uint32 Unit::DealDamage(Unit *pVictim, uint32 damage, CleanDamage const* cleanDa
// some critters required for quests (need normal entry instead possible heroic in any cases) // some critters required for quests (need normal entry instead possible heroic in any cases)
if(GetTypeId() == TYPEID_PLAYER) if(GetTypeId() == TYPEID_PLAYER)
if(CreatureInfo const* normalInfo = ObjectMgr::GetCreatureTemplate(pVictim->GetEntry())) if(CreatureInfo const* normalInfo = ObjectMgr::GetCreatureTemplate(pVictim->GetEntry()))
((Player*)this)->KilledMonster(normalInfo,pVictim->GetGUID()); ((Player*)this)->KilledMonster(normalInfo,pVictim->GetObjectGuid());
return damage; return damage;
} }
@ -820,8 +820,8 @@ uint32 Unit::DealDamage(Unit *pVictim, uint32 damage, CleanDamage const* cleanDa
if (cVictim->isTemporarySummon()) if (cVictim->isTemporarySummon())
{ {
TemporarySummon* pSummon = (TemporarySummon*)cVictim; TemporarySummon* pSummon = (TemporarySummon*)cVictim;
if (IS_CREATURE_GUID(pSummon->GetSummonerGUID())) if (pSummon->GetSummonerGuid().IsCreature())
if(Creature* pSummoner = cVictim->GetMap()->GetCreature(pSummon->GetSummonerGUID())) if(Creature* pSummoner = cVictim->GetMap()->GetCreature(pSummon->GetSummonerGuid()))
if (pSummoner->AI()) if (pSummoner->AI())
pSummoner->AI()->SummonedCreatureJustDied(cVictim); pSummoner->AI()->SummonedCreatureJustDied(cVictim);
} }
@ -1064,34 +1064,34 @@ void Unit::CastStop(uint32 except_spellid)
InterruptSpell(CurrentSpellTypes(i),false); InterruptSpell(CurrentSpellTypes(i),false);
} }
void Unit::CastSpell(Unit* Victim, uint32 spellId, bool triggered, Item *castItem, Aura* triggeredByAura, uint64 originalCaster) void Unit::CastSpell(Unit* Victim, uint32 spellId, bool triggered, Item *castItem, Aura* triggeredByAura, ObjectGuid originalCaster)
{ {
SpellEntry const *spellInfo = sSpellStore.LookupEntry(spellId ); SpellEntry const *spellInfo = sSpellStore.LookupEntry(spellId);
if(!spellInfo) if(!spellInfo)
{ {
sLog.outError("CastSpell: unknown spell id %i by caster: %s %u)", spellId,(GetTypeId()==TYPEID_PLAYER ? "player (GUID:" : "creature (Entry:"),(GetTypeId()==TYPEID_PLAYER ? GetGUIDLow() : GetEntry())); sLog.outError("CastSpell: unknown spell id %i by caster: %s", spellId, GetObjectGuid().GetString().c_str());
return; return;
} }
CastSpell(Victim,spellInfo,triggered,castItem,triggeredByAura, originalCaster); CastSpell(Victim, sSpellStore.LookupEntry(spellId), triggered, castItem, triggeredByAura, originalCaster);
} }
void Unit::CastSpell(Unit* Victim,SpellEntry const *spellInfo, bool triggered, Item *castItem, Aura* triggeredByAura, uint64 originalCaster) void Unit::CastSpell(Unit* Victim,SpellEntry const *spellInfo, bool triggered, Item *castItem, Aura* triggeredByAura, ObjectGuid originalCaster)
{ {
if(!spellInfo) if(!spellInfo)
{ {
sLog.outError("CastSpell: unknown spell by caster: %s %u)", (GetTypeId()==TYPEID_PLAYER ? "player (GUID:" : "creature (Entry:"),(GetTypeId()==TYPEID_PLAYER ? GetGUIDLow() : GetEntry())); sLog.outError("CastSpell: unknown spell by caster: %s", GetObjectGuid().GetString().c_str());
return; return;
} }
if (castItem) if (castItem)
DEBUG_LOG("WORLD: cast Item spellId - %i", spellInfo->Id); DEBUG_LOG("WORLD: cast Item spellId - %i", spellInfo->Id);
if(!originalCaster && triggeredByAura) if(originalCaster.IsEmpty() && triggeredByAura)
originalCaster = triggeredByAura->GetCasterGUID(); originalCaster = triggeredByAura->GetCasterGUID();
Spell *spell = new Spell(this, spellInfo, triggered, originalCaster ); Spell *spell = new Spell(this, spellInfo, triggered, originalCaster);
SpellCastTargets targets; SpellCastTargets targets;
targets.setUnitTarget( Victim ); targets.setUnitTarget( Victim );
@ -1099,31 +1099,31 @@ void Unit::CastSpell(Unit* Victim,SpellEntry const *spellInfo, bool triggered, I
spell->prepare(&targets, triggeredByAura); spell->prepare(&targets, triggeredByAura);
} }
void Unit::CastCustomSpell(Unit* Victim,uint32 spellId, int32 const* bp0, int32 const* bp1, int32 const* bp2, bool triggered, Item *castItem, Aura* triggeredByAura, uint64 originalCaster) void Unit::CastCustomSpell(Unit* Victim,uint32 spellId, int32 const* bp0, int32 const* bp1, int32 const* bp2, bool triggered, Item *castItem, Aura* triggeredByAura, ObjectGuid originalCaster)
{ {
SpellEntry const *spellInfo = sSpellStore.LookupEntry(spellId ); SpellEntry const *spellInfo = sSpellStore.LookupEntry(spellId);
if(!spellInfo) if(!spellInfo)
{ {
sLog.outError("CastCustomSpell: unknown spell id %i", spellId); sLog.outError("CastCustomSpell: unknown spell id %i by caster: %s", spellId, GetObjectGuid().GetString().c_str());
return; return;
} }
CastCustomSpell(Victim,spellInfo,bp0,bp1,bp2,triggered,castItem,triggeredByAura, originalCaster); CastCustomSpell(Victim, spellInfo, bp0, bp1, bp2, triggered, castItem, triggeredByAura, originalCaster);
} }
void Unit::CastCustomSpell(Unit* Victim,SpellEntry const *spellInfo, int32 const* bp0, int32 const* bp1, int32 const* bp2, bool triggered, Item *castItem, Aura* triggeredByAura, uint64 originalCaster) void Unit::CastCustomSpell(Unit* Victim, SpellEntry const *spellInfo, int32 const* bp0, int32 const* bp1, int32 const* bp2, bool triggered, Item *castItem, Aura* triggeredByAura, ObjectGuid originalCaster)
{ {
if(!spellInfo) if(!spellInfo)
{ {
sLog.outError("CastCustomSpell: unknown spell"); sLog.outError("CastCustomSpell: unknown spell by caster: %s", GetObjectGuid().GetString().c_str());
return; return;
} }
if (castItem) if (castItem)
DEBUG_LOG("WORLD: cast Item spellId - %i", spellInfo->Id); DEBUG_LOG("WORLD: cast Item spellId - %i", spellInfo->Id);
if(!originalCaster && triggeredByAura) if(originalCaster.IsEmpty() && triggeredByAura)
originalCaster = triggeredByAura->GetCasterGUID(); originalCaster = triggeredByAura->GetCasterGUID();
Spell *spell = new Spell(this, spellInfo, triggered, originalCaster); Spell *spell = new Spell(this, spellInfo, triggered, originalCaster);
@ -1144,35 +1144,35 @@ void Unit::CastCustomSpell(Unit* Victim,SpellEntry const *spellInfo, int32 const
} }
// used for scripting // used for scripting
void Unit::CastSpell(float x, float y, float z, uint32 spellId, bool triggered, Item *castItem, Aura* triggeredByAura, uint64 originalCaster) void Unit::CastSpell(float x, float y, float z, uint32 spellId, bool triggered, Item *castItem, Aura* triggeredByAura, ObjectGuid originalCaster)
{ {
SpellEntry const *spellInfo = sSpellStore.LookupEntry(spellId ); SpellEntry const *spellInfo = sSpellStore.LookupEntry(spellId);
if(!spellInfo) if(!spellInfo)
{ {
sLog.outError("CastSpell(x,y,z): unknown spell id %i by caster: %s %u)", spellId,(GetTypeId()==TYPEID_PLAYER ? "player (GUID:" : "creature (Entry:"),(GetTypeId()==TYPEID_PLAYER ? GetGUIDLow() : GetEntry())); sLog.outError("CastSpell(x,y,z): unknown spell id %i by caster: %s", spellId, GetObjectGuid().GetString().c_str());
return; return;
} }
CastSpell(x, y, z,spellInfo,triggered,castItem,triggeredByAura, originalCaster); CastSpell(x, y, z, spellInfo, triggered, castItem, triggeredByAura, originalCaster);
} }
// used for scripting // used for scripting
void Unit::CastSpell(float x, float y, float z, SpellEntry const *spellInfo, bool triggered, Item *castItem, Aura* triggeredByAura, uint64 originalCaster) void Unit::CastSpell(float x, float y, float z, SpellEntry const *spellInfo, bool triggered, Item *castItem, Aura* triggeredByAura, ObjectGuid originalCaster)
{ {
if(!spellInfo) if(!spellInfo)
{ {
sLog.outError("CastSpell(x,y,z): unknown spell by caster: %s %u)", (GetTypeId()==TYPEID_PLAYER ? "player (GUID:" : "creature (Entry:"),(GetTypeId()==TYPEID_PLAYER ? GetGUIDLow() : GetEntry())); sLog.outError("CastSpell(x,y,z): unknown spell by caster: %s", GetObjectGuid().GetString().c_str());
return; return;
} }
if (castItem) if (castItem)
DEBUG_LOG("WORLD: cast Item spellId - %i", spellInfo->Id); DEBUG_LOG("WORLD: cast Item spellId - %i", spellInfo->Id);
if(!originalCaster && triggeredByAura) if(originalCaster.IsEmpty() && triggeredByAura)
originalCaster = triggeredByAura->GetCasterGUID(); originalCaster = triggeredByAura->GetCasterGUID();
Spell *spell = new Spell(this, spellInfo, triggered, originalCaster ); Spell *spell = new Spell(this, spellInfo, triggered, originalCaster);
SpellCastTargets targets; SpellCastTargets targets;
targets.setDestination(x, y, z); targets.setDestination(x, y, z);

View file

@ -773,7 +773,7 @@ class MovementInfo
t_time = time; t_time = time;
t_seat = seat; t_seat = seat;
} }
uint64 GetTransportGuid() const { return t_guid.GetRawValue(); } ObjectGuid const& GetTransportGuid() const { return t_guid; }
Position const *GetTransportPos() const { return &t_pos; } Position const *GetTransportPos() const { return &t_pos; }
int8 GetTransportSeat() const { return t_seat; } int8 GetTransportSeat() const { return t_seat; }
uint32 GetTransportTime() const { return t_time; } uint32 GetTransportTime() const { return t_time; }
@ -1352,12 +1352,12 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
void SendEnergizeSpellLog(Unit *pVictim, uint32 SpellID, uint32 Damage,Powers powertype); void SendEnergizeSpellLog(Unit *pVictim, uint32 SpellID, uint32 Damage,Powers powertype);
void EnergizeBySpell(Unit *pVictim, uint32 SpellID, uint32 Damage, Powers powertype); void EnergizeBySpell(Unit *pVictim, uint32 SpellID, uint32 Damage, Powers powertype);
uint32 SpellNonMeleeDamageLog(Unit *pVictim, uint32 spellID, uint32 damage); uint32 SpellNonMeleeDamageLog(Unit *pVictim, uint32 spellID, uint32 damage);
void CastSpell(Unit* Victim, uint32 spellId, bool triggered, Item *castItem = NULL, Aura* triggeredByAura = NULL, uint64 originalCaster = 0); void CastSpell(Unit* Victim, uint32 spellId, bool triggered, Item *castItem = NULL, Aura* triggeredByAura = NULL, ObjectGuid originalCaster = ObjectGuid::EmptyGuid);
void CastSpell(Unit* Victim,SpellEntry const *spellInfo, bool triggered, Item *castItem= NULL, Aura* triggeredByAura = NULL, uint64 originalCaster = 0); void CastSpell(Unit* Victim,SpellEntry const *spellInfo, bool triggered, Item *castItem= NULL, Aura* triggeredByAura = NULL, ObjectGuid originalCaster = ObjectGuid::EmptyGuid);
void CastCustomSpell(Unit* Victim, uint32 spellId, int32 const* bp0, int32 const* bp1, int32 const* bp2, bool triggered, Item *castItem= NULL, Aura* triggeredByAura = NULL, uint64 originalCaster = 0); void CastCustomSpell(Unit* Victim, uint32 spellId, int32 const* bp0, int32 const* bp1, int32 const* bp2, bool triggered, Item *castItem= NULL, Aura* triggeredByAura = NULL, ObjectGuid originalCaster = ObjectGuid::EmptyGuid);
void CastCustomSpell(Unit* Victim,SpellEntry const *spellInfo, int32 const* bp0, int32 const* bp1, int32 const* bp2, bool triggered, Item *castItem= NULL, Aura* triggeredByAura = NULL, uint64 originalCaster = 0); void CastCustomSpell(Unit* Victim,SpellEntry const *spellInfo, int32 const* bp0, int32 const* bp1, int32 const* bp2, bool triggered, Item *castItem= NULL, Aura* triggeredByAura = NULL, ObjectGuid originalCaster = ObjectGuid::EmptyGuid);
void CastSpell(float x, float y, float z, uint32 spellId, bool triggered, Item *castItem = NULL, Aura* triggeredByAura = NULL, uint64 originalCaster = 0); void CastSpell(float x, float y, float z, uint32 spellId, bool triggered, Item *castItem = NULL, Aura* triggeredByAura = NULL, ObjectGuid originalCaster = ObjectGuid::EmptyGuid);
void CastSpell(float x, float y, float z, SpellEntry const *spellInfo, bool triggered, Item *castItem = NULL, Aura* triggeredByAura = NULL, uint64 originalCaster = 0); void CastSpell(float x, float y, float z, SpellEntry const *spellInfo, bool triggered, Item *castItem = NULL, Aura* triggeredByAura = NULL, ObjectGuid originalCaster = ObjectGuid::EmptyGuid);
bool IsDamageToThreatSpell(SpellEntry const * spellInfo) const; bool IsDamageToThreatSpell(SpellEntry const * spellInfo) const;

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 "9617" #define REVISION_NR "9618"
#endif // __REVISION_NR_H__ #endif // __REVISION_NR_H__