int main(){
	scanf("%d%d",&cowNum,&shiftNum);
	for(int cowIndex=0;cowIndex<cowNum;cowIndex++)
		scanf("%d%d",&intervals[cowIndex].begin,&intervals[cowIndex].end);
	printf("%d\n",hire());
	return 0;
}
Exemplo n.º 2
0
//----------- Begin of function FirmInn::free_all_people --------//
//
void FirmInn::free_all_people()
{
	Firm::free_all_people();

	if( !sys.signal_exit_flag )
	{
		for(int i = inn_unit_count; i > 0; --i )
		{
			if( inn_unit_array[i-1].spy_recno && (transfer_inn_unit(i) || hire(i, 1)) )
			{
				// spy try to transfer to hire inn, if fails, escape from the inn
			}
			else
			{
				del_inn_unit(i);
			}
		}
	}
	else
	{
		for(int i = inn_unit_count; i > 0; --i )
		{
			del_inn_unit(i);
		}
	}
}
Exemplo n.º 3
0
//--------- Begin of function FirmInn::update_del_hire_list --------//
//
void FirmInn::update_del_hire_list()
{
	//------- existing units leave -------//

	for( int i=inn_unit_count ; i>0 && inn_unit_count>0 ; i-- )
	{
		if( --inn_unit_array[i-1].stay_count==0 )
		{
			if( inn_unit_array[i-1].spy_recno && (transfer_inn_unit(i) || hire(i, 1)) )
			{
				// spy try to transfer to hire inn, if fails, escape from the inn
			}
			else
			{
				del_inn_unit(i);
			}
/*
			if( firm_recno == firm_array.selected_recno )
			{
				if( browse_hire.recno() > i && browse_hire.recno() > 1 )
					browse_hire.refresh( browse_hire.recno()-1, inn_unit_count );
			}
*/		}
	}
}
Exemplo n.º 4
0
//--------- Begin of function FirmInn::detect_info ---------//
//
void FirmInn::detect_info()
{
	firm_inn_ptr = this;

	if( detect_basic_info() )
		return;

	//-------- detect spy button ----------//

	if( !own_firm() )
	{
		detect_spy_button();
		return;
	}

	//-------------------------------------//

	if( browse_hire.detect() )
	{
		put_det(INFO_UPDATE);
	}

	if( button_hire.detect('R') && inn_unit_count > 0 )
	{
		// ###### begin Gilbert 31/7 #######//
		se_res.far_sound(center_x, center_y, 1, 'S', 
			unit_res[inn_unit_array[browse_hire.recno()-1].unit_id]->sprite_id,
			"RDY" );
		// ###### end Gilbert 31/7 #######//
		if(remote.is_enable())
		{
			// packet structure : <firm recno>, <hire Id> <nation no>
			short *shortPtr=(short *)remote.new_send_queue_msg(MSG_F_INN_HIRE, 3*sizeof(short));
			shortPtr[0] = firm_recno;
			shortPtr[1] = browse_hire.recno();
			shortPtr[2] = nation_recno;
		}
		else
		{
			hire(browse_hire.recno());
		}
	}
}
Exemplo n.º 5
0
//-------- Begin of function FirmInn::transfer_inn_unit --------//
//
int FirmInn::transfer_inn_unit(int recNo)
{
	err_when( recNo < 1 );
	
	if( recNo > inn_unit_count )
		return 0;

	InnUnit *innUnit = inn_unit_array+recNo-1;

	if( !innUnit->spy_recno )
		return 0;					// only spy considers transfer

	Spy *spyPtr = NULL;
	if( innUnit->spy_recno && !spy_array.is_deleted(innUnit->spy_recno) )
		spyPtr = spy_array[innUnit->spy_recno];

	// -------- scan any inn firm in world ----------//

	int ownFirmRecno = 0;
	int anyOwnInn = 0;
	int firmRecno = 1+misc.random(firm_array.size());

	int firmCount;
	for( firmCount = firm_array.size(); firmCount > 0; --firmCount, ++firmRecno )
	{
		if( firmRecno > firm_array.size() )
			firmRecno -= firm_array.size();
		err_when(firmRecno < 1 || firmRecno > firm_array.size());

		if( firm_array.is_deleted(firmRecno) )
			continue;

		FirmInn *firmInn = firm_array[firmRecno]->cast_to_FirmInn();

		if( !firmInn )
			continue;

		if( spyPtr && firmInn->nation_recno == spyPtr->true_nation_recno )
		{
			if( !anyOwnInn )
				anyOwnInn = firmRecno;
		}

		if( firmRecno == firm_recno )		// never go back to the same inn
			continue;

		if( firmInn->inn_unit_count >= MAX_INN_UNIT )
			continue;

		if( spyPtr && firmInn->nation_recno == spyPtr->true_nation_recno )
		{
			if( !ownFirmRecno )
				ownFirmRecno = firmRecno;
			continue;							// spy tend not to go back to own firmInn, unless no other choice
		}

		break;
	}

	if( firmCount <= 0 )				// if no other firm found, go back to own firm
		firmRecno = ownFirmRecno;

	if( firmRecno )					// if no any firm to go return false
	{
		// ------ transfer inn unit -------//

		FirmInn *firmInn = firm_array[firmRecno]->cast_to_FirmInn();		
		err_when( !firmInn );
		InnUnit *newInnUnit = firmInn->inn_unit_array + firmInn->inn_unit_count;
		firmInn->inn_unit_count++;
		*newInnUnit = *innUnit;

		// ------- generate new stay count ------//

		newInnUnit->stay_count = 10 + misc.random(5);
		newInnUnit->set_hire_cost();

		// ------ trasfer Spy ------- //

		if( spyPtr )
			spyPtr->set_place(SPY_FIRM, firmRecno);
		innUnit->spy_recno = 0;					// prevent del_inn_unit call spy_array.del_spy

		// ------ delete inn unit of current inn ------//

		del_inn_unit(recNo);
		innUnit = newInnUnit;			// set innUnit to the transferred place for later use
	}
	else if( (firmRecno = anyOwnInn) )
	{
		// mobilize in another any own inn

		hire( recNo, 1, firmRecno );
		innUnit = NULL;
	}

	return firmRecno;
}
Exemplo n.º 6
0
//--------- Begin of function FirmInn::detect_info ---------//
//
void FirmInn::detect_info()
{
//	firm_inn_ptr = this;

	Firm::detect_info();

//	if( detect_basic_info() )
//		return;

	if( !should_show_info() )
		return;

	detect_unit_list();

	// ------ detect hire button -------//

	// since button_hire and button_spy_mobilize share the same place
	// if one is not visible, do not call detect() to avoid incorrect help text displayed

	if( button_hire_visible && button_hire.detect() 
		&& selected_unit_id > 0 && selected_unit_id <= inn_unit_count )
	{
		InnUnit *innUnit = inn_unit_array + selected_unit_id - 1;

		se_ctrl.immediate_sound("TAXGRANT");

		se_res.far_sound(center_x, center_y, 1, 'S', 
			unit_res[innUnit->unit_id]->sprite_id,
			"RDY" );
		if(remote.is_enable())
		{
			// packet structure : <firm recno>, <hire Id> <nation no> <spy escape>
			short *shortPtr=(short *)remote.new_send_queue_msg(MSG_F_INN_HIRE, 4*sizeof(short));
			shortPtr[0] = firm_recno;
			shortPtr[1] = selected_unit_id;
			shortPtr[2] = nation_recno;
			// ###### begin Gilbert 13/2 #######//
			shortPtr[3] = 0;
			// ###### end Gilbert 13/2 #######//
		}
		else
		{
			hire(selected_unit_id, 0);
		}

		// ------ clear selected_unit_id ------//

		selected_unit_id = 0;
	}
	else if( button_spy_mobilize_visible && button_spy_mobilize.detect() 
		&& selected_unit_id > 0 && selected_unit_id <= inn_unit_count )
	{
		se_res.far_sound(center_x, center_y, 1, 'S', 
			unit_res[inn_unit_array[selected_unit_id-1].unit_id]->sprite_id,
			"RDY" );

		err_when( spy_array.is_deleted(inn_unit_array[selected_unit_id-1].spy_recno) );
		Spy *spyPtr = spy_array[inn_unit_array[selected_unit_id-1].spy_recno];
		if( !remote.is_enable() )
		{
			if( spyPtr->mobilize_firm_spy() )
			{
				spyPtr->notify_cloaked_nation_flag = 0;		// reset it so the player can control it
			}
		}
		else
		{
			// packet structure <spy recno>
			short *shortPtr = (short *)remote.new_send_queue_msg(MSG_SPY_LEAVE_FIRM, sizeof(short) );
			*shortPtr = spyPtr->spy_recno;
		}

		// ------ clear selected_unit_id ------//

		selected_unit_id = 0;
	}

	// -------- detect buy item ------//

	if( selected_unit_id > 0 && selected_unit_id <= inn_unit_count )
	{
		InnUnit *innUnit = inn_unit_array + selected_unit_id - 1;

		if( button_buy_item.detect() )
		{
			se_ctrl.immediate_sound("TAXGRANT");

			if( !remote.is_enable() )
			{
				buy_item( selected_unit_id, 0 );
			}
			else
			{
				short *shortPtr = (short *)remote.new_send_queue_msg(MSG_F_INN_BUY_ITEM, 2*sizeof(short));
				// packet structure : <firm recno>, <inn unid id>
				shortPtr[0] = firm_recno;
				shortPtr[1] = selected_unit_id;
			}
			se_ctrl.immediate_sound("TURN_ON");
		}
		else if( innUnit->item.id )
		{
			help.set_custom_help( button_buy_item.x1, button_buy_item.y1, 
				button_buy_item.x2, button_buy_item.y2, 
				text_firm.str_buy_item_help( &innUnit->item ),
				innUnit->item.item_desc() );
		}
	}
}