예제 #1
0
bool Raid::loadFromXml(const std::string& _filename)
{
	if (isLoaded()) {
		return true;
	}

	pugi::xml_document doc;
	pugi::xml_parse_result result = doc.load_file(_filename.c_str());
	if (!result) {
		std::cout << "[Error - Raid::loadFromXml] Failed to load " << _filename << ": " << result.description() << std::endl;
		return false;
	}

	for (pugi::xml_node eventNode = doc.child("raid").first_child(); eventNode; eventNode = eventNode.next_sibling()) {
		RaidEvent* event;
		if (strcasecmp(eventNode.name(), "announce") == 0) {
			event = new AnnounceEvent();
		} else if (strcasecmp(eventNode.name(), "singlespawn") == 0) {
			event = new SingleSpawnEvent();
		} else if (strcasecmp(eventNode.name(), "areaspawn") == 0) {
			event = new AreaSpawnEvent();
		} else if (strcasecmp(eventNode.name(), "script") == 0) {
			event = new ScriptEvent(&Raids::getInstance()->getScriptInterface());
		} else {
			continue;
		}

		if (event->configureRaidEvent(eventNode)) {
			raidEvents.push_back(event);
		} else {
			std::cout << "[Error - Raid::loadFromXml] In file (" << _filename << "), eventNode: " << eventNode.name() << std::endl;
			delete event;
		}
	}

	//sort by delay time
	std::sort(raidEvents.begin(), raidEvents.end(), RaidEvent::compareEvents);

	loaded = true;
	return true;
}
예제 #2
0
bool Raid::loadFromXml(const std::string& filename)
{
    if (isLoaded()) {
        return true;
    }

    pugi::xml_document doc;
    pugi::xml_parse_result result = doc.load_file(filename.c_str());
    if (!result) {
        printXMLError("Error - Raid::loadFromXml", filename, result);
        return false;
    }

    for (auto eventNode : doc.child("raid").children()) {
        RaidEvent* event;
        if (strcasecmp(eventNode.name(), "announce") == 0) {
            event = new AnnounceEvent();
        } else if (strcasecmp(eventNode.name(), "singlespawn") == 0) {
            event = new SingleSpawnEvent();
        } else if (strcasecmp(eventNode.name(), "areaspawn") == 0) {
            event = new AreaSpawnEvent();
        } else if (strcasecmp(eventNode.name(), "script") == 0) {
            event = new ScriptEvent(&g_game.raids.getScriptInterface());
        } else {
            continue;
        }

        if (event->configureRaidEvent(eventNode)) {
            raidEvents.push_back(event);
        } else {
            std::cout << "[Error - Raid::loadFromXml] In file (" << filename << "), eventNode: " << eventNode.name() << std::endl;
            delete event;
        }
    }

    //sort by delay time
    std::sort(raidEvents.begin(), raidEvents.end(), RaidEvent::compareEvents);

    loaded = true;
    return true;
}
예제 #3
0
bool Raid::loadFromXml(const std::string& _filename)
{
	if(isLoaded())
		return true;

	xmlDocPtr doc = xmlParseFile(_filename.c_str());

	if(doc)
	{
		xmlNodePtr root, eventNode;
		root = xmlDocGetRootElement(doc);

		if(xmlStrcmp(root->name,(const xmlChar*)"raid") != 0)
		{
			std::cout << "[Error] Raids: Wrong root node." << std::endl;
			xmlFreeDoc(doc);
			return false;
		}

		std::string strValue;

		eventNode = root->children;
		while(eventNode)
		{
			RaidEvent* event;
			if(xmlStrcmp(eventNode->name, (const xmlChar*)"announce") == 0)
				event = new AnnounceEvent();
			else if(xmlStrcmp(eventNode->name, (const xmlChar*)"singlespawn") == 0)
				event = new SingleSpawnEvent();
			else if(xmlStrcmp(eventNode->name, (const xmlChar*)"areaspawn") == 0)
				event = new AreaSpawnEvent();
			else if(xmlStrcmp(eventNode->name, (const xmlChar*)"script") == 0)
				event = new ScriptEvent();
			else
			{
				eventNode = eventNode->next;
				continue;
			}

			if(event->configureRaidEvent(eventNode))
				raidEvents.push_back(event);
			else
			{
				std::cout << "Raids: Error in file(" << _filename << ") eventNode: " << eventNode->name << std::endl;
				delete event;
			}
			eventNode = eventNode->next;
		}

		//sort by delay time
		std::sort(raidEvents.begin(), raidEvents.end(), RaidEvent::compareEvents);

		xmlFreeDoc(doc);
	}
	else
	{
		std::cout << "[Error] Raid: Could not load " << _filename << "!" << std::endl;
		return false;
	}

	loaded = true;
	return true;
}
예제 #4
0
파일: raids.cpp 프로젝트: milbradt/TFS
bool Raid::loadFromXml(const std::string& _filename)
{
	if(isLoaded())
		return true;

	xmlDocPtr doc = xmlParseFile(_filename.c_str());
	if(!doc)
	{
		std::clog << "[Error - Raid::loadFromXml] Could not load raid file (" << _filename << ")." << std::endl;
		std::clog << getLastXMLError() << std::endl;
		return false;
	}

	xmlNodePtr root, eventNode;
	root = xmlDocGetRootElement(doc);
	if(xmlStrcmp(root->name,(const xmlChar*)"raid"))
	{
		std::clog << "[Error - Raid::loadFromXml] Malformed raid file (" << _filename << ")." << std::endl;
		xmlFreeDoc(doc);
		return false;
	}

	std::string strValue;
	eventNode = root->children;
	while(eventNode)
	{
		RaidEvent* event;
		if(!xmlStrcmp(eventNode->name, (const xmlChar*)"announce"))
			event = new AnnounceEvent(this, ref);
		else if(!xmlStrcmp(eventNode->name, (const xmlChar*)"effect"))
			event = new EffectEvent(this, ref);
		else if(!xmlStrcmp(eventNode->name, (const xmlChar*)"itemspawn"))
			event = new ItemSpawnEvent(this, ref);
		else if(!xmlStrcmp(eventNode->name, (const xmlChar*)"singlespawn"))
			event = new SingleSpawnEvent(this, ref);
		else if(!xmlStrcmp(eventNode->name, (const xmlChar*)"areaspawn"))
			event = new AreaSpawnEvent(this, ref);
		else if(!xmlStrcmp(eventNode->name, (const xmlChar*)"script"))
			event = new ScriptEvent(this, ref);
		else
		{
			eventNode = eventNode->next;
			continue;
		}

		if(!event->configureRaidEvent(eventNode))
		{
			std::clog << "[Error - Raid::loadFromXml] Could not configure raid in file: " << _filename << ", eventNode: " << eventNode->name << std::endl;
			delete event;
		}
		else
			raidEvents.push_back(event);

		eventNode = eventNode->next;
	}

	//sort by delay time
	std::sort(raidEvents.begin(), raidEvents.end(), RaidEvent::compareEvents);
	xmlFreeDoc(doc);

	loaded = true;
	return true;
}