Пример #1
0
void hedit_setup_existing(struct descriptor_data *d, int rhouse_num)
{
	/*
	 * Create a scratch house structure.
	 */
	CREATE(OLC_HOUSE(d), struct house_data, 1);

	copy_house(OLC_HOUSE(d), house_index + rhouse_num);
	hedit_disp_menu(d);
}
Пример #2
0
static void hedit_setup_existing(struct descriptor_data *d, int rnum)
{
  CREATE(OLC_HELP(d), struct help_index_element, 1);

  OLC_HELP(d)->keywords		= str_udup(help_table[rnum].keywords);
  OLC_HELP(d)->entry		= str_udup(help_table[rnum].entry);
  OLC_HELP(d)->duplicate	= help_table[rnum].duplicate;
  OLC_HELP(d)->min_level	= help_table[rnum].min_level;
  OLC_VAL(d) = 0;

  hedit_disp_menu(d);
}
Пример #3
0
static void hedit_setup_new(struct descriptor_data *d)
{
  CREATE(OLC_HELP(d), struct help_index_element, 1);

  OLC_HELP(d)->keywords		= strdup(OLC_STORAGE(d));
  OLC_HELP(d)->entry		= strdup("KEYWORDS\r\n\r\nThis help file is unfinished.\r\n");
  OLC_HELP(d)->min_level	= 0;
  OLC_HELP(d)->duplicate	= 0;
  OLC_VAL(d) = 0;

  hedit_disp_menu(d);
}
Пример #4
0
void hedit_setup_new(struct descriptor_data *d)
{
	struct house_data *house;

	/*
	 * Allocate a scratch house structure.
	 */
	CREATE(house, struct house_data, 1);

	/*
	 * Fill in some default values.
	 */
	H_OWNER(house) = NOBODY;
	H_ATRIUM(house) = NOWHERE;
	H_EXIT(house) = NOWHERE;
	H_MODE(house) = HOUSE_PRIVATE;
	H_PRUNE_SAFE(house) = FALSE;
	H_BUILT(house) = time(0);
	H_USED(house) = time(0);
	H_PAID(house) = 0;
	H_COST(house) = 0;
	H_MAX_SECURE(house) = 2;
	H_MAX_LOCKED(house) = 50;
	/*
	 * Stir the lists lightly.
	 */
	CREATE(H_ROOMS(house), long, 1);
	H_ROOM(house, 0) = NOWHERE;

	CREATE(H_COWNERS(house), long, 1);
	H_COWNER(house, 0) = NOBODY;

	CREATE(H_GUESTS(house), long, 1);
	H_GUEST(house, 0) = NOBODY;

	/*
	 * Presto! A house.
	 */
	OLC_HOUSE(d) = house;

	hedit_disp_menu(d);
}
Пример #5
0
void hedit_parse(struct descriptor_data *d, char *arg)
{
	int i, j;

	if (OLC_MODE(d) > HEDIT_NUMERICAL_RESPONSE) {
		if (!isdigit(arg[0]) && ((*arg == '-') && (!isdigit(arg[1])))) {
			write_to_output(d, TRUE, "Field must be numerical, try again : ");
			return;
		}
	}
	switch (OLC_MODE(d)) {
/*-------------------------------------------------------------------*/
	case SEDIT_CONFIRM_SAVESTRING:
		switch (*arg) {
		case 'y':
		case 'Y':
			write_to_output(d, TRUE, "Saving house to memory.\r\n");
			hedit_save_internally(d);
			hedit_save_to_disk();
			extended_mudlog(BRF, SYSL_OLC, TRUE, "%s edits house %d.", GET_NAME(d->character), OLC_NUM(d));
			cleanup_olc(d, CLEANUP_STRUCTS);
			return;
		case 'n':
		case 'N':
			cleanup_olc(d, CLEANUP_ALL);
			return;
		default:
			write_to_output(d, TRUE, "Invalid choice!\r\nDo you wish to save the house? : ");
			return;
		}
		break;

/*-------------------------------------------------------------------*/
	case HEDIT_MAIN_MENU:
		i = 0;
		switch (*arg) {
		case 'q':
		case 'Q':
			if (OLC_VAL(d)) {		/* Anything been changed? */
				write_to_output(d, TRUE, "Do you wish to save the changes to the house? (y/n) : ");
				OLC_MODE(d) = HEDIT_CONFIRM_SAVESTRING;
			} else
				cleanup_olc(d, CLEANUP_ALL);
			return;
		case '0':
			OLC_MODE(d) = HEDIT_OWNER;
			write_to_output(d, TRUE, "Enter the name of the house owner : ");
			i--;
			return;
		case '1':
			OLC_MODE(d) = HEDIT_ATRIUM;
			write_to_output(d, TRUE, "Enter the room number of the atrium : ");
			i++;
			return;
		case '2':
			OLC_MODE(d) = HEDIT_EXIT;
			hedit_exits_menu(d);
			return;
		case '3':
			OLC_MODE(d) = HEDIT_MODE;
			hedit_modes_menu(d);
			return;
		case '4':
			OLC_MODE(d) = HEDIT_PRUNE_SAFE;
			hedit_prune_safe_menu(d);
			return;
		case '5':
			OLC_MODE(d) = HEDIT_COST;
			write_to_output(d, TRUE, "Enter the house cost : ");
			i++;
			return;
		case '6':
			OLC_MODE(d) = HEDIT_MAX_SECURE;
			write_to_output(d, TRUE, "Enter maximum number of secure containers : ");
			i++;
			return;
		case '7':
			OLC_MODE(d) = HEDIT_MAX_LOCKED;
			write_to_output(d, TRUE, "Enter maximum number of locked-down items : ");
			i++;
			return;
		case 'c':
		case 'C':
			hedit_owners_menu(d);
			return;
		case 'g':
		case 'G':
			hedit_guests_menu(d);
			return;
		case 'r':
		case 'R':
			hedit_rooms_menu(d);
			return;
		case 'd':
		case 'D':
			delete_house(d, OLC_NUM(d));
			cleanup_olc(d, CLEANUP_ALL);
			return;
		default:
			hedit_disp_menu(d);
			return;
		}

		if (i == 0)
			break;
		else if (i == 1)
			write_to_output(d, TRUE, "\r\nEnter new value : ");
		else if (i == -1)
			write_to_output(d, TRUE, "\r\nEnter new text :\r\n] ");
		else
			write_to_output(d, TRUE, "Oops...\r\n");
		return;
/*-------------------------------------------------------------------*/
	case HEDIT_ROOMS_MENU:
		switch (*arg) {
		case 'a':
		case 'A':
			write_to_output(d, TRUE, "\r\nEnter new room vnum number : ");
			OLC_MODE(d) = HEDIT_NEW_ROOM;
			return;
		case 'c':
		case 'C':
			hedit_compact_rooms_menu(d);
			return;
		case 'l':
		case 'L':
			hedit_rooms_menu(d);
			return;
		case 'd':
		case 'D':
			write_to_output(d, TRUE, "\r\nDelete which room? : ");
			OLC_MODE(d) = HEDIT_DELETE_ROOM;
			return;
		case 'q':
		case 'Q':
			break;
		}
		break;
/*-------------------------------------------------------------------*/
	case HEDIT_COWNERS_MENU:
		switch (*arg) {
		case 'a':
		case 'A':
			write_to_output(d, TRUE, "\r\nEnter player name : ");
			OLC_MODE(d) = HEDIT_NEW_COWNER;
			return;
		case 'l':
		case 'L':
			hedit_owners_menu(d);
			return;
		case 'd':
		case 'D':
			write_to_output(d, TRUE, "\r\nDelete which co-owner? : ");
			OLC_MODE(d) = HEDIT_DELETE_COWNER;
			return;
		case 'q':
		case 'Q':
			break;
		}
		break;
/*-------------------------------------------------------------------*/
	case HEDIT_GUESTS_MENU:
		switch (*arg) {
		case 'a':
		case 'A':
			write_to_output(d, TRUE, "\r\nEnter player name : ");
			OLC_MODE(d) = HEDIT_NEW_GUEST;
			return;
		case 'l':
		case 'L':
			hedit_guests_menu(d);
			return;
		case 'd':
		case 'D':
			write_to_output(d, TRUE, "\r\nDelete which guest? : ");
			OLC_MODE(d) = HEDIT_DELETE_GUEST;
			return;
		case 'q':
		case 'Q':
			break;
		}
		break;
/*-------------------------------------------------------------------*/
		/*
		 * Numerical responses.
		 */
/*-------------------------------------------------------------------*/
	case HEDIT_OWNER:
		if ((i = get_id_by_name(arg)) == NOBODY) {
			write_to_output(d, TRUE, "No such player, try again : ");
			return;
		}
		H_OWNER(OLC_HOUSE(d)) = i;
		break;
/*-------------------------------------------------------------------*/
	case HEDIT_ATRIUM:
		if ((i = real_room(atoi(arg))) == NOWHERE) {
			write_to_output(d, TRUE, "No such room, try again : ");
			return;
		}
		if ((find_house(atoi(arg))) != NOWHERE) {
			write_to_output(d, TRUE, "That's a house room, try again : ");
			return;
		}
		H_ATRIUM(OLC_HOUSE(d)) = atoi(arg);
		break;
/*-------------------------------------------------------------------*/
	case HEDIT_EXIT:
		/* Check for a valid exit. */
		if (atoi(arg) < 0 || atoi(arg) >= NUM_OF_DIRS) {
			write_to_output(d, TRUE, "\r\n&RThat's not a valid exit.&n\r\n\r\n");
			hedit_exits_menu(d);
			return;
		}
		/* Make sure we have a start room (first in list). */
		if ((i = real_room(H_ROOM(OLC_HOUSE(d), 0))) == NOWHERE) {
			write_to_output(d, TRUE, "\r\n&RYou have to define the starting room first.&n\r\n\r\n");
			break;
		}
		/* Make sure we have an atrium. */
		if ((j = real_room(H_ATRIUM(OLC_HOUSE(d)))) == NOWHERE) {
			write_to_output(d, TRUE, "\r\n&RYou have to define the atrium room first.&n\r\n\r\n");
			break;
		}
		/* Check for a valid exit leading out from start room. */
		if (TOROOM(i, atoi(arg)) == NOWHERE) {
			write_to_output(d, TRUE, "\r\n&RThere is no exit %s from room %d.&n\r\n\r\n", dirs[atoi(arg)], H_ROOM(OLC_HOUSE(d), 0));
			hedit_exits_menu(d);
			return;
		}
		/* Check for a valid return exit from the atrium. */
		if (TOROOM(j, rev_dir[atoi(arg)]) != i) {
			write_to_output(d, TRUE, "\r\n&RThe returning exit %s does not come from the atrium %d.&n\r\n\r\n", dirs[rev_dir[atoi(arg)]], H_ATRIUM(OLC_HOUSE(d)));
			hedit_exits_menu(d);
			return;
		}
		H_EXIT(OLC_HOUSE(d)) = atoi(arg);
		break;
/*-------------------------------------------------------------------*/
	case HEDIT_MODE:
		i = atoi(arg);
		if (i < 0 || i >= NUM_HOUSE_FLAGS) {
			write_to_output(d, TRUE, "\r\n&RThat's not a valid house type.&n\r\n\r\n");
			hedit_modes_menu(d);
			return;
		}
		H_MODE(OLC_HOUSE(d)) = i;
		break;
/*-------------------------------------------------------------------*/
	case HEDIT_PRUNE_SAFE:
		i = atoi(arg);
		if (i < 0 || i > 1) {
			write_to_output(d, TRUE, "\r\n&RValid choices are 0 or 1.&n\r\n\r\n");
			hedit_prune_safe_menu(d);
			return;
		}
		H_PRUNE_SAFE(OLC_HOUSE(d)) = i;
		break;
/*-------------------------------------------------------------------*/
	case HEDIT_COST:
		H_COST(OLC_HOUSE(d)) = atoi(arg);
		break;
/*-------------------------------------------------------------------*/
	case HEDIT_MAX_SECURE:
		if ((i = atoi(arg)) > HOUSE_MAX_SECURES) {
			write_to_output(d, TRUE, "Valid ranges are 0-%d : ", HOUSE_MAX_SECURES);
			return;
		}
		H_MAX_SECURE(OLC_HOUSE(d)) = i;
		break;
/*-------------------------------------------------------------------*/
	case HEDIT_MAX_LOCKED:
		if ((i = atoi(arg)) > HOUSE_MAX_LOCKS) {
			write_to_output(d, TRUE, "Valid ranges are 0-%d : ", HOUSE_MAX_LOCKS);
			return;
		}
		H_MAX_LOCKED(OLC_HOUSE(d)) = i;
		break;
/*-------------------------------------------------------------------*/
	case HEDIT_NEW_ROOM:
		if ((i = atoi(arg)) != -1)
			if ((i = real_room(i)) < 0) {
				write_to_output(d, TRUE, "That room does not exist, try again : ");
				return;
			}
		if (i >= 0)
			add_to_house_list(&(H_ROOMS(OLC_HOUSE(d))), atoi(arg));
		hedit_rooms_menu(d);
		return;
	case HEDIT_DELETE_ROOM:
		remove_from_house_list(&(H_ROOMS(OLC_HOUSE(d))), atoi(arg));
		hedit_rooms_menu(d);
		return;

/*-------------------------------------------------------------------*/
	case HEDIT_NEW_COWNER:
		if ((i = get_id_by_name(arg)) == NOBODY) {
			write_to_output(d, TRUE, "No such player, try again : ");
			return;
		}
		if (i == H_OWNER(OLC_HOUSE(d))) {
			write_to_output(d, TRUE, "That player already owns the house, try again : ");
			return;
		}
		for (j = 0; H_COWNER(OLC_HOUSE(d), j) != NOBODY; j++) {
			if (i == H_COWNER(OLC_HOUSE(d), j)) {
				write_to_output(d, TRUE, "That player has already been added, try again : ");
				return;
			}
		}
		for (j = 0; H_GUEST(OLC_HOUSE(d), j) != NOBODY; j++) {
			if (i == H_GUEST(OLC_HOUSE(d), j)) {
				write_to_output(d, TRUE, "That player is listed as a guest, try again : ");
				return;
			}
		}
		if (i >= 0)
			add_to_house_list(&(H_COWNERS(OLC_HOUSE(d))), i);
		hedit_owners_menu(d);
		return;
	case HEDIT_DELETE_COWNER:
		remove_from_house_list(&(H_COWNERS(OLC_HOUSE(d))), atoi(arg));
		hedit_owners_menu(d);
		return;
/*-------------------------------------------------------------------*/
	case HEDIT_NEW_GUEST:
		if ((i = get_id_by_name(arg)) == NOBODY) {
			write_to_output(d, TRUE, "No such player, try again : ");
			return;
		}
		if (i == H_OWNER(OLC_HOUSE(d))) {
			write_to_output(d, TRUE, "That player already owns the house, try again : ");
			return;
		}
		for (j = 0; H_COWNER(OLC_HOUSE(d), j) != NOBODY; j++) {
			if (i == H_COWNER(OLC_HOUSE(d), j)) {
				write_to_output(d, TRUE, "That player is a co-owner, try again : ");
				return;
			}
		}
		for (j = 0; H_GUEST(OLC_HOUSE(d), j) != NOBODY; j++) {
			if (i == H_GUEST(OLC_HOUSE(d), j)) {
				write_to_output(d, TRUE, "That player has already been added, try again : ");
				return;
			}
		}
		if (i >= 0)
			add_to_house_list(&(H_GUESTS(OLC_HOUSE(d))), i);
		hedit_guests_menu(d);
		return;
	case HEDIT_DELETE_GUEST:
		remove_from_house_list(&(H_GUESTS(OLC_HOUSE(d))), atoi(arg));
		hedit_guests_menu(d);
		return;
/*-------------------------------------------------------------------*/
	default:
		/*
		 * We should never get here.
		 */
		cleanup_olc(d, CLEANUP_ALL);
		extended_mudlog(NRM, SYSL_BUGS, TRUE, "OLC: hedit_parse(): Reached default case!");
		write_to_output(d, TRUE, "Oops...\r\n");
		break;
	}
/*-------------------------------------------------------------------*/

/*
 * END OF CASE 
 * If we get here, we have probably changed something, and now want to
 * return to main menu.  Use OLC_VAL as a 'has changed' flag.
 */
	OLC_VAL(d) = 1;
	hedit_disp_menu(d);
}