bool Parse(int lumpnum, FileReader *lump, int lumplen) { char *buffer = new char[lumplen]; lump->Read(buffer, lumplen); sc.OpenMem(Wads.GetLumpFullName(lumpnum), buffer, lumplen); delete [] buffer; sc.SetCMode(true); // Namespace must be the first field because everything else depends on it. if (sc.CheckString("namespace")) { sc.MustGetToken('='); sc.MustGetToken(TK_StringConst); namespc = sc.String; switch(namespc) { case NAME_ZDoom: namespace_bits = Zd; break; case NAME_Strife: namespace_bits = St; break; default: sc.ScriptMessage("Unknown namespace %s. Ignoring dialogue lump.\n", sc.String); return false; } sc.MustGetToken(';'); } else { sc.ScriptMessage("Map does not define a namespace.\n"); return false; } while (sc.GetString()) { if (sc.Compare("conversation")) { sc.MustGetToken('{'); if (!ParseConversation()) return false; } else if (sc.Compare("include")) { sc.MustGetToken('='); sc.MustGetToken(TK_StringConst); LoadScriptFile(sc.String, true); sc.MustGetToken(';'); } else { Skip(); } } return true; }
void cConversationManager::Init(const string &lacConversationFile) { TiXmlDocument doc(lacConversationFile); bool lbLoadOk = doc.LoadFile(); if ( lbLoadOk ) { TiXmlHandle lpRoot( &doc ); // Buscamos el Handle del Documento TiXmlElement *lpElem; // TiXmlAttribute* pAttrib; // Con estos punteros accedemos Elementos y Atributos lpRoot = lpRoot.FirstChildElement().Element(); //Nos posicionamos en la etiqueta "Conversations" // Read all the Characters (los Personajes,no los Chars) lpElem = lpRoot.FirstChild( "Characters" ).FirstChild().Element(); for (lpElem; lpElem; lpElem = lpElem->NextSiblingElement()) { cCharacterSpeaker lCharacter; //Character ID lpElem->QueryIntAttribute("speakerId", &lCharacter.miCharacterId ); assert(lCharacter.miCharacterId >= 0); // Character Name const char * lacName = lpElem->GetText(); assert(lacName); lCharacter.macCharacterName = lacName; // Add the character to the Vector mSpeakers.push_back( lCharacter ); } // Read all the conversations lpElem = lpRoot.FirstChild( "Conversation" ).Element(); for( lpElem; lpElem; lpElem = lpElem->NextSiblingElement("Conversation")) { ParseConversation( lpElem ); } } }