void cVariant::serialize( cBufferedWriter& writer, unsigned int /*version*/ )
{
	writer.writeByte( typ );
	char skipper[8];

	switch ( typ )
	{
	case InvalidType:
		writer.writeRaw( skipper, 8 );
		break;

	case StringType:
		if ( value.ptr )
		{
			writer.writeUtf8( *( QString * ) value.ptr );
		}
		else
		{
			writer.writeUtf8( QString::null );
		}
		writer.writeRaw( skipper, 4 );
		break;

	case IntType:
		writer.writeInt( value.i );
		writer.writeRaw( skipper, 4 );
		break;

	case LongType:
		writer.writeInt( value.i );
		writer.writeRaw( skipper, 4 );
		break;

	case DoubleType:
		writer.writeDouble( value.d );
		break;

	case BaseCharType:
		if ( value.ptr )
		{
			writer.writeInt( ( ( P_CHAR ) value.ptr )->serial() );
		}
		else
		{
			writer.writeInt( INVALID_SERIAL );
		}
		writer.writeRaw( skipper, 4 );
		break;

	case ItemType:
		if ( value.ptr )
		{
			writer.writeInt( ( ( P_ITEM ) value.ptr )->serial() );
		}
		else
		{
			writer.writeInt( INVALID_SERIAL );
		}
		writer.writeRaw( skipper, 4 );
		break;

	case CoordType:
		writer.writeShort( ( ( Coord * ) ( value.ptr ) )->x );
		writer.writeShort( ( ( Coord * ) ( value.ptr ) )->y );
		writer.writeByte( ( ( Coord * ) ( value.ptr ) )->z );
		writer.writeByte( ( ( Coord * ) ( value.ptr ) )->map );
		writer.writeRaw( skipper, 2 );
		break;
	}
}