コード例 #1
0
bool BaseEvents::loadFromXml()
{
	if (m_loaded) {
		std::cout << "[Error - BaseEvents::loadFromXml] It's already loaded." << std::endl;
		return false;
	}

	std::string scriptsName = getScriptBaseName();
	std::string basePath = "data/" + scriptsName + "/";
	if (getScriptInterface().loadFile(basePath + "lib/" + scriptsName + ".lua") == -1) {
		std::cout << "[Warning - BaseEvents::loadFromXml] Can not load " << scriptsName << " lib/" << scriptsName << ".lua" << std::endl;
	}

	std::string filename = basePath + scriptsName + ".xml";

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

	m_loaded = true;

	for (pugi::xml_node node = doc.child(scriptsName.c_str()).first_child(); node; node = node.next_sibling()) {
		Event* event = getEvent(node.name());
		if (!event) {
			continue;
		}

		if (!event->configureEvent(node)) {
			std::cout << "[Warning - BaseEvents::loadFromXml] Failed to configure event" << std::endl;
			delete event;
			continue;
		}

		bool success;

		pugi::xml_attribute scriptAttribute = node.attribute("script");
		if (scriptAttribute) {
			std::string scriptFile = "scripts/" + std::string(scriptAttribute.as_string());
			success = event->checkScript(basePath, scriptsName, scriptFile) && event->loadScript(basePath + scriptFile);
		} else {
			pugi::xml_attribute functionAttribute = node.attribute("function");
			if (functionAttribute) {
				success = event->loadFunction(functionAttribute.as_string());
			} else {
				success = false;
			}
		}

		if (!success || !registerEvent(event, node)) {
			delete event;
		}
	}
	return true;
}
コード例 #2
0
ファイル: baseevents.cpp プロジェクト: 081421/otxserver
bool BaseEvents::loadFromXml()
{
	std::string scriptsName = getScriptBaseName();
	if(m_loaded)
	{
		std::clog << "[Error - BaseEvents::loadFromXml] " << scriptsName << " interface already loaded!" << std::endl;
		return false;
	}

	std::string path = getFilePath(FILE_TYPE_OTHER, std::string(scriptsName + "/lib/"));
	if(!getInterface().loadDirectory(path, false, true))
		std::clog << "[Warning - BaseEvents::loadFromXml] Cannot load " << path << std::endl;

	#ifdef _MULTIPLATFORM76
	path = getFilePath(FILE_TYPE_OTHER, std::string(scriptsName + "/" + scriptsName + ".xml"));
	#else
	path = getFilePath(FILE_TYPE_OTHER, std::string(scriptsName + "/" + ITEMS_PATH + "/" + scriptsName + ".xml"));
	#endif

	xmlDocPtr doc = xmlParseFile(path.c_str());
	if(!doc)
	{
		std::clog << "[Warning - BaseEvents::loadFromXml] Cannot open " << path << " file." << std::endl;
		std::clog << getLastXMLError() << std::endl;
		return false;
	}

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

	path = getFilePath(FILE_TYPE_OTHER, std::string(scriptsName + "/scripts/"));
	for(xmlNodePtr p = root->children; p; p = p->next)
		parseEventNode(p, path, false);

	xmlFreeDoc(doc);
	m_loaded = true;
	return m_loaded;
}
コード例 #3
0
ファイル: baseevents.cpp プロジェクト: Fir3element/035
bool BaseEvents::loadFromXml()
{
	std::string scriptsName = getScriptBaseName();
	if(m_loaded)
	{
		std::cout << "[Error - BaseEvents::loadFromXml] " << scriptsName << " interface already loaded!" << std::endl;
		return false;
	}

	if(getScriptInterface().loadFile(getFilePath(FILE_TYPE_OTHER, std::string(scriptsName + "/lib/" + scriptsName + ".lua"))) == -1)
		std::cout << "[Warning - BaseEvents::loadFromXml] Cannot load " << scriptsName << "/lib/" << scriptsName << ".lua" << std::endl;

	xmlDocPtr doc = xmlParseFile(getFilePath(FILE_TYPE_OTHER, std::string(scriptsName + "/" + scriptsName + ".xml")).c_str());
	if(!doc)
	{
		std::cout << "[Warning - BaseEvents::loadFromXml] Cannot open " << scriptsName << ".xml file." << std::endl;
		std::cout << getLastXMLError() << std::endl;
		return false;
	}

	xmlNodePtr p, root = xmlDocGetRootElement(doc);
	if(xmlStrcmp(root->name,(const xmlChar*)scriptsName.c_str()))
	{
		std::cout << "[Error - BaseEvents::loadFromXml] Malformed " << scriptsName << ".xml file." << std::endl;
		xmlFreeDoc(doc);
		return false;
	}

	std::string scriptsPath = getFilePath(FILE_TYPE_OTHER, std::string(scriptsName + "/scripts/"));
	p = root->children;
	while(p)
	{
		parseEventNode(p, scriptsPath, false);
		p = p->next;
	}

	xmlFreeDoc(doc);
	m_loaded = true;
	return m_loaded;
}
コード例 #4
0
ファイル: baseevents.cpp プロジェクト: Codex-NG/avesta74
bool BaseEvents::loadFromXml(const std::string& datadir)
{
	if(m_loaded){
		std::cout << "Error: [BaseEvents::loadFromXml] loaded == true" << std::endl;
		return false;
	}
	m_datadir = datadir;
	Event* event = NULL;

	
	std::string scriptsName = getScriptBaseName();
	
	if(getScriptInterface().loadFile(std::string(m_datadir + scriptsName + "/lib/" + scriptsName + ".lua")) == -1){
		std::cout << "Warning: [BaseEvents::loadFromXml] Can not load " << scriptsName << " lib/" << scriptsName << ".lua" << std::endl;
	}
	
	std::string filename = m_datadir + scriptsName + "/" + scriptsName + ".xml";
	xmlDocPtr doc = xmlParseFile(filename.c_str());
	
	if(doc){
		m_loaded = true;
		xmlNodePtr root, p;
		root = xmlDocGetRootElement(doc);
		
		if(xmlStrcmp(root->name,(const xmlChar*)scriptsName.c_str()) != 0){
			xmlFreeDoc(doc);
			return false;
		}

		p = root->children;
		while(p){
			if(p->name){
				std::string nodeName = (const char*)p->name;
				if((event = getEvent(nodeName))){
					if(event->configureEvent(p)){
						bool success = true;
						std::string scriptfile;
						if(readXMLString(p, "script", scriptfile)){
							if(!event->loadScript(m_datadir + scriptsName + "/scripts/" + scriptfile)){
								success = false;
							}
						}
						else if(readXMLString(p, "function", scriptfile)){
							if(!event->loadFunction(scriptfile)){
								success = false;
							}
						}
						else{
							success = false;
						}
						
						if(success){
							if(!registerEvent(event, p)){
								success = false;
								delete event;
							}
						}
						else{
							delete event;
						}
					}
					else{
						std::cout << "Warning: [BaseEvents::loadFromXml] Can not configure event" << std::endl;
						delete event;
					}
					event = NULL;
				}
			}
			p = p->next;
		}
		
		xmlFreeDoc(doc);
	}
	else{
		std::cout << "Warning: [BaseEvents::loadFromXml] Can not open " << scriptsName << ".xml" << std::endl;
	}
	
	return m_loaded;
}