示例#1
0
void WorldSession::HandleDismissCritter(WorldPacket& recv_data)
{
#if VERSION_STRING > TBC
    uint64 GUID;

    recv_data >> GUID;

    if (_player->getCritterGuid() == 0)
    {
        LOG_ERROR("Player %u sent dismiss companion packet, but player has no companion", _player->getGuidLow());
        return;
    }

    if (_player->getCritterGuid() != GUID)
    {
        LOG_ERROR("Player %u sent dismiss companion packet, but it doesn't match player's companion", _player->getGuidLow());
        return;
    }

    Unit* companion = _player->GetMapMgr()->GetUnit(GUID);

    if (companion != NULL)
    {
        companion->Delete();
    }

    _player->setCritterGuid(0);
#endif
}
示例#2
0
void SummonHandler::ExpireSummonsInSlot()
{
	for(std::tr1::array< Unit*, SUMMON_SLOTS >::iterator itr = summonslots.begin(); itr != summonslots.end(); ++itr)
	{
		Unit* u = *itr;

		if(u != NULL)
			u->Delete();
	}
	std::fill(summonslots.begin(), summonslots.end(), reinterpret_cast< Unit* >(NULL));
}
示例#3
0
void SummonHandler::RemoveAllSummons()
{
	for(std::set< Unit* >::iterator itr = guardians.begin(); itr != guardians.end();)
	{
		Unit* g = *itr;
		++itr;
		g->Delete();
	}
	guardians.clear();

	ExpireSummonsInSlot();
}
示例#4
0
void Vehicle::RemoveAccessories(){
	for( std::vector< uint64 >::iterator itr = installed_accessories.begin(); itr != installed_accessories.end(); ++itr ){
		Unit *u = owner->GetMapMgr()->GetUnit( *itr );
		if( u == NULL )
			continue;

		if( u->GetVehicleComponent() != NULL )
			u->GetVehicleComponent()->EjectAllPassengers();

		EjectPassenger( u );
		u->Delete();
	}
	
	installed_accessories.clear();
}