vector<string> ObjectFunctor::operator()()
{
	vector<string> result;
	NetworkID id = get();

	if (id)
	{
		FactoryObject reference = GameFactory::GetObject(id);
		Reference* object = vaultcast<Object>(reference);

		if (object)
		{
			unsigned int flags = this->flags();

			if (flags & FLAG_REFERENCE)
				result.push_back(Utils::toString(object->GetReference()));
			else if (flags & FLAG_BASE)
				result.push_back(Utils::toString(object->GetBase()));
		}
	}
	else
	{
		vector<FactoryObject>::iterator it;
		vector<FactoryObject> references = GameFactory::GetObjectTypes(ID_OBJECT);
		unsigned int refID;

		for (it = references.begin(); it != references.end(); GameFactory::LeaveReference(*it), ++it)
			if ((refID = (**it)->GetReference()) && !filter(**it))
				result.push_back(Utils::toString(refID));
	}

	_next(result);

	return result;
}