CGameObject* CFactory::InstantiatePrototype(const string &AProtoName, const string &AName /*= ""*/) { CXMLNode *xml = GetPrototypeXML(AProtoName); if (!xml) { Log("ERROR", "Can't create prototype instance: no such prototype: '%s'", AProtoName.c_str()); return NULL; } CGameObject *result = New<CGameObject>(AName); if (AName.empty()) result->SetName(AProtoName + itos(result->GetID())); result->Prototype = true; result->Deserialize(xml); SetRecursionLimit(AProtoName, from_string<int>(xml->SafeGetAttribute("RecursionLimit", "-1"))); TraversePrototypeNode(xml, result, result); result->FinalizeCreation(); Log("INFO", "Prototype INSTANTIATED: '%s', instance name: '%s'", AProtoName.c_str(), result->GetName().c_str()); return result; }