/*!
	Play the sound effect for a miss.
*/
void cCombat::playMissedSoundEffect( P_CHAR pChar, UINT16 skill )
{
	UINT16 id = 0;

	switch( skill )
	{
	case ARCHERY:
		id = RandomNum( 0, 1 ) ? 0x233 : 0x238;
		break;

	// Wrestling Sounds are creature-dependant
	case WRESTLING:
		if( !pChar->isHuman() )
		{
			cCharBaseDef *def = BaseDefManager::instance()->getCharBaseDef( pChar->body() );

			if( def != 0 )
				id = def->basesound() + RandomNum( 0, 1 );
			break;
		}

	default:
		id = RandomNum( 0x238, 0x23a );
		break;
	}

	if( id != 0 )
		pChar->soundEffect( id );
}
/*!
	Play the soundeffect for getting hit.
*/
void cCombat::playGetHitSoundEffect( P_CHAR pChar )
{
	if ( pChar->body() == 0x191 )
	{
		UI16 sound = hex2dec( Definitions::instance()->getRandomListEntry( "SOUNDS_COMBAT_HIT_HUMAN_FEMALE" ) ).toUShort();
		if ( sound > 0 )
			pChar->soundEffect( sound );
		else
			pChar->soundEffect( 0x14b );
	}
	else if ( pChar->body() == 0x190 )
	{
		UI16 sound = hex2dec( Definitions::instance()->getRandomListEntry( "SOUNDS_COMBAT_HIT_HUMAN_MALE" ) ).toUShort();
		if ( sound > 0 )
			pChar->soundEffect( sound );
		else
			pChar->soundEffect( 0x156 );
	}
	else
		pChar->bark( cBaseChar::Bark_GetHit );
}
	cTrackingList( P_CHAR player, UINT8 type )
	{
		setType( 0xFE12ACDE );

		startPage( 0 );
		addBackground( 0x13BE, 440, 160 );
		addResizeGump( 10, 10, 0xA3C, 420, 75 );
		addResizeGump( 10, 85, 0xBB8, 420, 50 );

		UINT32 pCount = 0;
		UINT32 pAmount = 0;

		// 1: Animals
		// 2: Monsters
		// 3: Humans
		// 4: Players
		cCharSectorIterator *iter = SectorMaps::instance()->findChars( player->pos(), 18 );

		for( P_CHAR pChar = iter->first(); pChar; pChar = iter->next() )
		{
			// Do the neccesary checks
			bool passed = true;

			switch( type )
			{
			// Animals
			case 1:
				passed = !( pChar->objectType() != enNPC || pChar->body() == 0x190 || pChar->body() == 0x191 ); //|| pChar->npcaitype() == 2 );
				break;
			// Monsters
			case 2:
				passed = !( pChar->objectType() != enNPC || pChar->body() == 0x190 || pChar->body() == 0x191 ); //|| pChar->npcaitype() != 2 );
				break;
			// Human
			case 3:
				passed = !( pChar->objectType() != enNPC || ( pChar->body() != 0x190 && pChar->body() != 0x191 ) );
				break;
			case 4:
				passed = ( pChar->objectType() == enPlayer && dynamic_cast<P_PLAYER>(pChar)->socket() );
				break;
			};

			if( !passed )
				continue;

			// Checks passed, add the character
			if( pAmount == 0 ) // Start new page
			{
				// Add a button on the old page
				if( pCount > 0 )
				{
					addPageButton( 395, 137, 0x26af, 0x26b1, pCount );
				}

				startPage( ++pCount );

				// Add a button on the new page
				if( pCount > 1 )
				{
					addPageButton( 365, 137, 0x26b5, 0x26b7, pCount-1 );
				}
			}

			cCharBaseDef *def = BaseDefManager::instance()->getCharBaseDef( pChar->body() );

			if( def && def->shrinked() != 0 )
				addTilePic( (pAmount*100)+20, 20, def->shrinked() );

			addButton( (pAmount*100)+20, 110, 0xFA5, 0xFA7, pChar->serial() );
			addCroppedText( (pAmount*100)+20, 90, 100, 40, pChar->name() );

			++pAmount;
		}

		delete iter;
	}