void do_order(struct char_data *ch, char *argument, int cmd)
{
	char name[MAX_INPUT_LENGTH], message[MAX_INPUT_LENGTH];
	char buf[MAX_STRING_LENGTH];
	bool found = FALSE;
	int org_room;
	struct char_data *victim;
	struct follow_type *k;

	half_chop(argument, name, message);

	if(isdweeb(ch)) { return; }
	if(GET_EXP(ch) < 1500) {
		send_to_char("Due to abuse, you must have at least 1500 experience to use this command.\n\r",ch);
		return;
	}
	if (!*name || !*message)
		send_to_char("Order who to do what?\n\r", ch);
	else if (!(victim = get_char_room_vis(ch, name)) &&
	         str_cmp("follower", name) && str_cmp("followers", name))
			send_to_char("That person isn't here.\n\r", ch);
	else if (ch == victim)
		send_to_char("You obviously suffer from schitzophrenia.\n\r", ch);

	else {
		if (IS_AFFECTED(ch, AFF_CHARM)) {
			send_to_char("Your superior would not aprove of you giving orders.\n\r",ch);
			return;
		}

		if (victim) {
			sprintf(buf, "$N orders you to '%s'", message);
			act(buf, FALSE, victim, 0, ch, TO_CHAR);
			act("$n gives $N an order.", FALSE, ch, 0, victim, TO_ROOM);

			if ( (victim->master!=ch) || !IS_AFFECTED(victim, AFF_CHARM) )
				act("$n has an indifferent look.", FALSE, victim, 0, 0, TO_ROOM);
			else {
				send_to_char("Ok.\n\r", ch);
				command_interpreter(victim, message);
			}
		} else {  /* This is order "followers" */
			sprintf(buf, "$n issues the order '%s'.", message);
			act(buf, FALSE, ch, 0, victim, TO_ROOM);

			org_room = ch->in_room;

			for (k = ch->followers; k; k = k->next) {
				if (org_room == k->follower->in_room)
					if (IS_AFFECTED(k->follower, AFF_CHARM)) {
						found = TRUE;
						command_interpreter(k->follower, message);
					}
			}
			if (found)
				send_to_char("Ok.\n\r", ch);
			else
				send_to_char("Nobody here is a loyal subject of yours!\n\r", ch);
		}
	}
}