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; }