inherit "obj/roomgen/support"; string *room_items, *room_item_descs; string *new_item_desc; static int pos; #define ITEM_HELP "/doc/roomgen/item_help" #define ITEM_EXAMPLE "/doc/roomgen/item_example" void init_item_data() { room_items = ({ }); room_item_descs = ({ }); } void item_menu(); /* Adding item to room code */ void add_item() { output("What will the item be (? for help) : "); input_to("add_item2"); } void add_item_description() { output("Enter the description of the item ** to end ~q to abort.\n"); new_item_desc = ({ }); write("] "); input_to("add_item3"); } void add_item2(string str) { if(str == "") { item_menu(); } if(str == "?") { cat(ITEM_EXAMPLE); add_item(); return; } if(member_array(str, room_items) != -1) { output("That item already exists. Please choose another direction or "+ "delete the item that currently exists.\n"); item_menu(); } room_items += ({ str }); pos = sizeof(room_items) - 1; room_item_descs += ({ "No description" }); add_item_description(); } void add_item3(string str) { if(str == "~q") { output("Item description for " + room_items[pos] + " now reads :\n"); output(room_item_descs[pos]); item_menu(); return; } if(str == "**") { if(!sizeof(new_item_desc)) { add_item3("~q"); return; } new_item_desc[sizeof(new_item_desc) - 1] += " + \"\\n\"\n"; room_item_descs[pos] = implode(new_item_desc, " +\n"); output("Item description for " + room_items[pos] + " now reads :\n"); output(room_item_descs[pos]); item_menu(); return; } if(sizeof(new_item_desc)) { new_item_desc += ({ "\" " + str + "\"" }); } else { new_item_desc += ({ "\"" + str + "\"" }); } write("] "); input_to("add_item3"); } /* Listing item code */ void list_items() { if(sizeof(room_items)) { int loop; output("item, Meaning\n"); for(loop = 0; loop < sizeof(room_items); loop++) { output(room_items[loop] + ", " + room_item_descs[loop] + "\n"); } } else { output("No items defined.\n"); } } void list_room_items() { list_items(); get_key("item_menu"); } /* Editing item code */ void edit_item_menu() { if(!sizeof(room_items)) { output("No items!\n"); item_menu(); return; } output("edit which item : "); input_to("edit_item_menu2"); } void edit_item_menu3(); void edit_item_menu2(string str) { if((pos = member_array(str, room_items)) == -1) { output("No such item!\n"); item_menu(); return; } edit_item_menu3(); } void edit_item_menu3() { output("Edit which field?\n"+ " 1. item\n"+ " 2. description\n"+ " end - back to item menu\n"+ " help - help on items\n"+ "Selection : "); input_to("edit_item_menu4"); } void edit_item_menu4(string str) { switch(str) { case "1": output("new item : "); input_to("get_new_item"); return; case "2": add_item_description(); return; case "end": item_menu(); return; case "help": cat(ITEM_EXAMPLE); get_key("edit_item_menu3"); return; case "": edit_item_menu3(); return; default: output("Bad Selection\n"); edit_item_menu3(); return; } } void get_new_item(string str) { string old; if(str == "") { edit_item_menu3(); } old = room_items[pos]; room_items[pos] = str; output("item modified from " + old + " " + str + "\n"); edit_item_menu3(); } /* delete item code */ void delete_item() { output("Delete which item : "); input_to("delete_item2"); } void delete_item2(string str) { if(str == "") { item_menu(); return; } if((pos = member_array(str, room_items)) == -1) { output("No such item!\n"); item_menu(); return; } output("Delete item " + str + ". Are you sure? (Y/N) :"); input_to("confirm_delete_item"); } void confirm_delete_item(string str) { string rm_name; if(lower_case(str)[0] != 'y') { output("item not deleted!\n"); item_menu(); } rm_name = room_items[pos]; room_items = delete(room_items, pos, 1); room_item_descs = delete(room_item_descs, pos, 1); output("Deleted item " + rm_name + "\n"); item_menu(); } void item_menu() { output(" 1. add an item for the room\n"+ " 2. list items for the room\n"+ " 3. edit item for the room\n"+ " 4. delete item for the room\n"+ " end - return to main menu\n"+ " help - help on items\n"+ "Selection : "); input_to("handle_item_menu"); } void handle_item_menu(string str) { switch(str) { case "1": add_item(); return; case "2": list_room_items(); return; case "3": edit_item_menu(); return; case "4": delete_item(); return; case "end": this_object()->main_menu(); return; case "help": cat(ITEM_HELP); get_key("item_menu"); return; case "": item_menu(); return; default: output("Invalid Choice.\nSelection : "); input_to("handle_item_menu"); } } string dump_items() { string str; int loop; str = ""; for(loop = 0; loop < sizeof(room_items); loop++) { str += " add_item(\"" + room_items[loop] + "\",\n " + room_item_descs[loop] + ");\n"; } return str; } void parse_item(string str) { string temp1, temp2, temp3, temp4; if(sscanf(str, "%svoid setup() {%s", temp1, temp2) == 2) { str = temp2; } else { return; } while(sscanf(str, "%sadd_item(\"%s\",\n%s);\n%s", temp1, temp2, temp3, temp4) == 4) { str = temp4; if(!str) { str = ""; } room_items += ({ temp2 }); room_item_descs += ({ temp3 }); } } void review_item() { }