コード例 #1
0
QSqlQuery cPersistentBroker::query( const QString& query )
{
	if ( !d->connection.isValid() )
		throw wpException( QString( "PersistentBroker not connected to database." ) );

	return d->connection.exec( query );
}
コード例 #2
0
bool PersistentBroker::openDriver( const QString& driver )
{
	if( d->connection != 0 )
	{
		d->connection->close();
		delete d->connection;
		d->connection = 0;
	}

	if( driver == "sqlite" )
	{
		d->connection = new cSQLiteDriver();
		d->sqlite = true;
	}
	else if( driver == "mysql" )
	{
#ifdef MYSQL_DRIVER
		d->connection = new cMySQLDriver;
		d->sqlite = false;
#else
		throw wpException( "Sorry, you have to define MYSQL_DRIVER to make wolfpack work with MySQL.\n" );
#endif
	}

	if ( !d->connection )
		return false;

	return true;
}
コード例 #3
0
bool cPersistentBroker::tableExists( const QString& table )
{
	if ( !d->connection.isOpen() )
	{
		throw wpException( QString( "Trying to query an existing table without a database connection." ) );
	}

	return d->connection.tables().contains( table, Qt::CaseInsensitive );
}
コード例 #4
0
bool cPersistentBroker::executeQuery( const QString& query )
{
	if ( !d->connection.isValid() )
		throw wpException( tr( "PersistentBroker not connected to database." ) );

	QSqlQuery q;
	if ( !q.exec( query ) )
	{
		Console::instance()->log( LOG_ERROR, q.lastError().text() );
		return false;
	}
	return true;
}
コード例 #5
0
void cSectorMaps::addMap( unsigned char map, unsigned int width, unsigned int height )
{
	// Create a map in the Char and in the Item map
	cSectorMap* itemmap = new cSectorMap;

	if ( !itemmap->init( width, height ) )
	{
		delete itemmap;
		throw wpException( QString( itemmap->error() ) );
	}

	cSectorMap* charmap = new cSectorMap;

	if ( !charmap->init( width, height ) )
	{
		delete charmap;
		delete itemmap;
		throw wpException( QString( charmap->error() ) );
	}

	charmaps.insert( std::make_pair( map, charmap ) );
	itemmaps.insert( std::make_pair( map, itemmap ) );
}
コード例 #6
0
void cAccounts::load()
{
	ISerialization* archive = cPluginFactory::serializationArchiver( SrvParams->accountsArchiver());
	archive->prepareReading("accounts");
	for (uint i = 0; i < archive->size(); ++i)
	{
		QString objectID;
		archive->readObjectID( objectID );
		if ( objectID == "ACCOUNT" )
		{
			AccountRecord* d = new AccountRecord;
			archive->readObject( d );
			accounts.insert( d->login(), d );
		}
		else
			throw wpException( "Error parsing account records." );
	}
	archive->close();
	delete archive;
}
コード例 #7
0
/*!
	Parses and loads multi definitions
*/
void cMultiCache::load( const QString &basePath )
{
	QFile indexFile( basePath + "multi.idx" );
	if( !indexFile.open( IO_ReadOnly ) )
		throw wpException( QString( "Error opening file %1 for reading." ).arg( basePath + "multi.idx" ) );

	QDataStream indexStream( &indexFile );
	indexStream.setByteOrder( QDataStream::LittleEndian );

	QFile multiFile( basePath + "multi.mul" );
	if ( !multiFile.open( IO_ReadOnly ) )
		throw wpException( QString( "Error opening file %1 for reading." ).arg( basePath + "multi.mul" ) );

	struct
	{
		Q_INT32 start;
		Q_INT32 length;
		Q_INT32 unknown;
	} indexData;
	ushort currentID = 0;
	while ( !indexStream.atEnd() )
	{
		indexFile.at( currentID * 12 );
		indexStream >> indexData.start;
		indexStream >> indexData.length;
		indexStream >> indexData.unknown;

		if ( indexData.start == -1 ) // empty record?
		{
			++currentID;
			continue;
		}

		QValueVector<multiItem_st> items;
		items.reserve( indexData.length / 12 );
		uint i = 0;

		multiFile.at( indexData.start );
		QDataStream multiStream( &multiFile );
		multiStream.setByteOrder( QDataStream::LittleEndian );

		for (; i < indexData.length / 12; ++i )
		{
			multiItem_st item;
			multiStream >> item.tile;
			multiStream >> item.x;
			multiStream >> item.y;
			multiStream >> item.z;
			Q_UINT8  empty;
			multiStream >> empty; // ????
			Q_UINT32 isVisible = 0;
			multiStream >> isVisible;
			item.visible = isVisible > 0 ? true : false;

			if ( item.visible ) // we ignore invisible items (?)
				items.push_back(item);
		}
		MultiDefinition* multi = new MultiDefinition;
		multi->setItems( items );
		
		multis.insert( currentID++, multi );
	}
}