void CSE_ALifeGroupAbstract::switch_offline	()
{
	CSE_ALifeDynamicObject		*object = smart_cast<CSE_ALifeDynamicObject*>(base());
	VERIFY						(object);

	R_ASSERT					(object->m_bOnline);
	object->m_bOnline			= false;

	ALife::OBJECT_IT			I = m_tpMembers.begin();
	ALife::OBJECT_IT			E = m_tpMembers.end();
	if (I != E) {
		CSE_ALifeMonsterAbstract		*tpGroupMember	= smart_cast<CSE_ALifeMonsterAbstract*>(ai().alife().objects().object(*I));
		CSE_ALifeMonsterAbstract		*tpGroup		= smart_cast<CSE_ALifeMonsterAbstract*>(this);
		if (tpGroupMember && tpGroup) {
			tpGroup->m_fCurSpeed		= tpGroup->m_fCurrentLevelGoingSpeed;
			tpGroup->o_Position			= tpGroupMember->o_Position;
			u32	dwNodeID				= tpGroup->m_tNodeID;
			tpGroup->m_tGraphID			= ai().cross_table().vertex(dwNodeID).game_vertex_id();
			tpGroup->m_fDistanceToPoint = ai().cross_table().vertex(dwNodeID).distance();
			tpGroup->m_tNextGraphID		= tpGroup->m_tGraphID;
			u16	wNeighbourCount			= ai().game_graph().vertex(tpGroup->m_tGraphID)->edge_count();
			CGameGraph::const_iterator	i,e;
			ai().game_graph().begin		(tpGroup->m_tGraphID,i,e);
			tpGroup->m_tPrevGraphID		= (*(i + object->randI(0,wNeighbourCount))).vertex_id();
		}
		object->alife().remove_online	(tpGroupMember,false);
		++I;
	}
	for ( ; I != E; ++I)
		object->alife().remove_online	(ai().alife().objects().object(*I),false);
	object->alife().scheduled().add		(object);
	object->alife().graph().add			(object,object->m_tGraphID,false);
}