if( !socket->player() )
P_CHAR pChar = FindCharBySerial( target->serial() ); if( !pChar ) { socket->sysMessage( tr( "This does not appear to be a living being." ) );
	virtual void responsed( cUOSocket *socket, cUORxTarget *target )	{		if( !socket->player() )			return;		Coord_cl pos = socket->player()->pos;		pos.x = target->x();		pos.y = target->y();		pos.z = target->z();		// Map Target		if( !target->model() && !target->serial() )		{			map_st mapTile = Map->SeekMap( pos );			land_st lTile = cTileCache::instance()->getLand( mapTile.id );						// Display a gump with this information			cGump* pGump = new cGump();			// Basic .INFO Header			pGump->addResizeGump( 0, 40, 0xA28, 450, 250 ); //Background			pGump->addGump( 105, 18, 0x58B ); // Fancy top-bar			pGump->addGump( 182, 0, 0x589 ); // "Button" like gump			pGump->addTilePic( 202, 23, 0x14eb ); // Type of info menu            pGump->addText( 175, 90, tr( "Landscape Info" ), 0x530 );			// Give information about the tile			pGump->addText( 50, 120, tr( "Name: %1" ).arg( lTile.name ), 0x834 );			pGump->addText( 50, 145, tr( "ID: 0x%1" ).arg( mapTile.id, 0, 16 ), 0x834 );			pGump->addText( 50, 170, tr( "Z Height: %1" ).arg( mapTile.z ), 0x834 );			// Wet ? Impassable ? At least these are the most interesting			QStringList flags;			if( lTile.flag1&0x80 )				flags.push_back( tr( "wet" ) );			if( lTile.flag1&0x40 )				flags.push_back( tr( "impassable" ) );			if( lTile.flag2&0x02 )				flags.push_back( tr( "surface" ) );			if( lTile.flag2&0x04 )				flags.push_back( tr( "stairs" ) );			pGump->addText( 50, 195, tr( "Properties: %1" ).arg( flags.join( ", " ) ), 0x834 );			// OK button			pGump->addButton( 90, 240, 0x481, 0x483, 0 ); // Only Exit possible			pGump->addText( 130, 240, tr( "Close" ), 0x834 );			socket->send( pGump );		}		// Static Tiles		else if( target->model() && !target->serial() )		{			tile_st sTile = cTileCache::instance()->getTile( target->model() );			// Display a gump with this information			cGump* pGump = new cGump();			// Basic .INFO Header			pGump->addResizeGump( 0, 40, 0xA28, 450, 300 ); //Background			pGump->addGump( 105, 18, 0x58B ); // Fancy top-bar			pGump->addGump( 182, 0, 0x589 ); // "Button" like gump			pGump->addTilePic( 202, 23, 0x14EF ); // Display our tile            pGump->addText( 175, 90, tr( "Static Info" ), 0x530 );						// Give information about the tile			pGump->addText( 50, 120, tr( "Name: %1" ).arg( sTile.name ), 0x834 );			pGump->addText( 50, 140, tr( "ID: 0x%1" ).arg( target->model(), 0, 16 ), 0x834 );			pGump->addText( 50, 160, tr( "Position: %1,%2,%3" ).arg( target->x() ).arg( target->y() ).arg( target->z() ), 0x834 );			pGump->addText( 50, 180, tr( "Weight: %1" ).arg( (UINT8)sTile.weight ), 0x834 );			pGump->addText( 50, 200, tr( "Height: %1" ).arg( (UINT8)sTile.height ), 0x834 );			// Wet ? Impassable ? At least these are the most interesting			QStringList flags = getFlagNames( sTile );			pGump->addText( 50, 220, tr( "Properties: %1" ).arg( flags.join( ", " ) ), 0x834 );			// OK button			pGump->addButton( 90, 275, 0x481, 0x483, 0 ); // Only Exit possible			pGump->addText( 130, 275, tr( "Close" ), 0x834 );			// Item Preview			pGump->addResizeGump( 300, 120, 0xBB8, 110, 150 );			pGump->addTilePic( 340, 160 - ( sTile.height / 2 ), target->model() );			socket->send( pGump );		}				// dynamic objects		else if( target->serial() )		{			if( isCharSerial( target->serial() ) )			{				P_CHAR pChar = FindCharBySerial( target->serial() );				if( pChar )				{					cCharInfoGump* pGump = new cCharInfoGump( pChar, 1 );					socket->send( pGump );				}			}		}	}