void cCustomTags::save( SERIAL serial, cBufferedWriter& writer )
{
	if ( tags_ )
	{
		QMap<QString, cVariant>::iterator it( tags_->begin() );

		for ( ; it != tags_->end(); ++it )
		{
			// Erase invalid tags.
			if ( !it.value().isValid() )
			{
				continue;
			}

			// Save serial and name
			writer.writeByte( 0xFE );
			//unsigned int length = writer.position();
			writer.writeInt( serial );
			writer.writeUtf8( it.key() );
			it.value().serialize( writer, writer.version() );
			//length = writer.position() - length;

			writer.setSkipSize( 0xFE, 0 );
		}
	}
}
示例#2
0
void cCorpse::save( cBufferedWriter& writer, unsigned int version )
{
	cItem::save( writer, version );
	writer.writeShort( bodyId_ );
	writer.writeShort( hairStyle_ );
	writer.writeShort( hairColor_ );
	writer.writeShort( beardStyle_ );
	writer.writeShort( beardColor_ );
	writer.writeByte( direction_ );
	writer.writeAscii( charbaseid_ );
	writer.writeInt( murderer_ );
	writer.writeInt( murdertime_ );

	// Write a serial for every possible layer (fixed block size)
	unsigned char layer;
	for ( layer = cBaseChar::SingleHandedWeapon; layer <= cBaseChar::Mount; ++layer )
	{
		if ( equipment_.contains( layer ) )
		{
			writer.writeInt( equipment_[layer] );
		}
		else
		{
			writer.writeInt( INVALID_SERIAL );
		}
	}
}
示例#3
0
void cPlayer::save( cBufferedWriter& writer, unsigned int version )
{
	cBaseChar::save( writer, version );
	writer.writeUtf8( account_ ? account_->login() : QString::null );
	writer.writeInt( additionalFlags_ );
	writer.writeByte( visualRange_ );
	writer.writeUtf8( profile_ );
	writer.writeByte( fixedLightLevel_ );
	writer.writeByte( strengthLock_ );
	writer.writeByte( dexterityLock_ );
	writer.writeByte( intelligenceLock_ );
	if (version > 7) {
		writer.writeByte(maxControlSlots_);
	}
}
示例#4
0
void cNPC::save( cBufferedWriter& writer, unsigned int version )
{
	cBaseChar::save( writer, version );

	writer.writeInt( summonTime_ ? summonTime_ - Server::instance()->time() : 0 );
	writer.writeInt( additionalFlags_ );
	writer.writeInt( owner_ ? owner_->serial() : INVALID_SERIAL );
	writer.writeInt( stablemasterSerial_ );
	writer.writeAscii( aiid_.latin1() );
	writer.writeByte( ( unsigned char ) wanderType() );
	writer.writeShort( wanderX1() );
	writer.writeShort( wanderY1() );
	writer.writeShort( wanderX2() );
	writer.writeShort( wanderY2() );
	writer.writeShort( wanderRadius() );
}
示例#5
0
void cUObject::save( cBufferedWriter& writer, unsigned int /*version*/ )
{
	writer.writeUtf8( name_ );
	writer.writeInt( serial_ );
	writer.writeInt( multi_ ? multi_->serial() : INVALID_SERIAL );
	writer.writeShort( pos_.x );
	writer.writeShort( pos_.y );
	writer.writeByte( pos_.z );
	writer.writeByte( pos_.map );
	writer.writeAscii( scriptList() );
}
示例#6
0
void cNPC::save( cBufferedWriter& writer, unsigned int version )
{
	if ( free )
	{
		Console::instance()->log( LOG_WARNING, tr( "Skipping npc 0x%1 during save process because it's already freed.\n" ).arg( serial_, 0, 16 ) );
	}
	else
	{
		cBaseChar::save( writer, version );

		writer.writeInt( summonTime_ ? summonTime_ - Server::instance()->time() : 0 );
		writer.writeInt( additionalFlags_ );
		writer.writeInt( owner_ ? owner_->serial() : INVALID_SERIAL );
		writer.writeInt( stablemasterSerial_ );
		writer.writeAscii( aiid_.toLatin1() );
		writer.writeByte( ( unsigned char ) wanderType() );
		writer.writeShort( wanderX1() );
		writer.writeShort( wanderY1() );
		writer.writeShort( wanderX2() );
		writer.writeShort( wanderY2() );
		writer.writeShort( wanderRadius() );
	}
}
示例#7
0
void cPlayer::save( cBufferedWriter& writer, unsigned int version )
{
	if ( free )
	{
		Console::instance()->log( LOG_WARNING, tr( "Skipping player 0x%1 during save process because it's already freed.\n" ).arg( serial_, 0, 16 ) );
	}
	else
	{
		cBaseChar::save( writer, version );
		writer.writeUtf8( account_ ? account_->login() : QString::null );
		writer.writeInt( additionalFlags_ );
		writer.writeByte( visualRange_ );
		writer.writeUtf8( profile_ );
		writer.writeByte( fixedLightLevel_ );
		writer.writeByte( strengthLock_ );
		writer.writeByte( dexterityLock_ );
		writer.writeByte( intelligenceLock_ );
		if ( version > 7 )
		{
			writer.writeByte( maxControlSlots_ );
		}
	}
}
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;
	}
}