"ARHCER_GENERAL_FOLLOW_UNIT"
{
	INT my_unit_recno 
	my_unit_recno = FUNC("get_character_recno") 

	INT random_number 
	INT enemy_recno
	INT near_enemy_recno
	INT enemy_item_recno
	INT target_recno

	INT follow_unit_recno 
	follow_unit_recno = FUNC("get_curr_task_para" , my_unit_recno, 1) 

	INT follow_direction
	follow_direction = FUNC("get_curr_task_para" , my_unit_recno, 2) 

	if( follow_direction == 0 )
	{
		follow_direction = 180 
	}

	INT unit_dist
	unit_dist = FUNC("get_unit_dist" , my_unit_recno, follow_unit_recno) 
	target_recno = FUNC("search_for_unit", my_unit_recno, "T", 0, 0, 0, 0)

	if( unit_dist > 400 ) // if the follow unit is not here even in 400 radius!!!
	{
		// go back to follow formation and don't do anything
		ACTION("give_order" , my_unit_recno, "FOLLOW_UNIT" , -1 , 0 , follow_unit_recno , follow_direction  , 200 , 0, 5000)
		FUNC("set_unit_target_unit_recno", my_unit_recno, 0)
		exit
	}

	if( target_recno == 0 )	
	{
		ACTION("give_order" , my_unit_recno, "FOLLOW_UNIT" , -1 , 0 , follow_unit_recno , follow_direction , 200 , 0, 5000)
	}

	enemy_recno = FUNC("search_for_unit" , my_unit_recno, "E" , FUNC("get_unit_range", my_unit_recno, 2), 0, 0, 0) 
	near_enemy_recno = FUNC("search_for_unit" , my_unit_recno, "E" , FUNC("get_unit_range", my_unit_recno, 1) , 0, 0, 0) 
	enemy_item_recno = FUNC("search_for_item" , my_unit_recno, "EGC" , FUNC("get_unit_range", my_unit_recno, 2), 0) 

	// if there is enemy near , try run away from that enemy!!
	if( near_enemy_recno ) 
	{
		ACTION("give_order" , my_unit_recno, "APPROACH_ENEMY" , 1 , 0 , near_enemy_recno , FUNC("get_unit_range", my_unit_recno, 1), 400 , 0, 30000)
		exit
	}

	if( enemy_recno || enemy_item_recno )
	{
		FUNC("set_unit_mode" , my_unit_recno, "ATTACK")
	}

	if ( enemy_recno == 0 && enemy_item_recno == 0 )
	{
		FUNC("set_unit_mode" , my_unit_recno, "ACTIVE" )
	}

	if( FUNC("is_attack_mode", my_unit_recno) )
	{
		if( enemy_recno )
		{
			ACTION("give_order" , my_unit_recno, "TURN" , 3 , 0 , FUNC("get_rotation" , my_unit_recno, enemy_recno) , 0 , 0 , 0, 2500)

			random_number = FUNC("random_number" , 10)

			if ( random_number < 5 )		// 1/3 attack the enemy!
			{
				ACTION("give_order" , my_unit_recno, "SHOOT" , 2 , 0 , 1 , enemy_recno , 0 , 0, 1500) 
				exit
			}

		}

		if( enemy_item_recno )
		{
			ACTION("give_order" , my_unit_recno, "TURN" , 3 , 0 , FUNC("get_item_rotation" , my_unit_recno, enemy_item_recno) , 0 , 0 , 0, 2500)

			random_number = FUNC("random_number" , 10)

			if ( random_number < 5 )		// 1/3 attack the enemy!
			{
				ACTION("give_order" , my_unit_recno, "SHOOT" , 2 , 0 , 1 , enemy_recno , 0 , 0, 1500) 
				exit
			}

		}

		exit
	}

	if( FUNC("is_idle_mode", my_unit_recno) )
	{
		// search for unit again, move to the enemy unit if is near
		enemy_recno = FUNC("search_for_unit" , my_unit_recno, "E" , FUNC("get_unit_range", my_unit_recno, 3), 1, 0, 0) 

		if( enemy_recno > 0 ) 
		{
			ACTION("give_order" , my_unit_recno, "APPROACH_ENEMY" , 1 , 0 , enemy_recno , ( FUNC("get_unit_range", my_unit_recno, 2) - 400 ) , 400 , 0, 30000)
			exit
		}

		FUNC("set_unit_mode" , my_unit_recno, "IDLE" )

	}

}
   


