---------- Forwarded message ---------- Date: Thu, 9 Nov 1995 05:50:12 -36000 From: Circle Mud <mud@bucket.ualr.edu> To: vignes@plato.rtl.selu.edu Subject: Put, Give, Drop, Get multiple items -- Darksword All code contained here is given AS IS. I have had no problems with this code but I do not guarantee that you won't find any problems with it. Most of the code is the same for each function, but I mailed my full functions so that people who are not CODERS can just add this code in as is. If you have any problems using this code please contact me ASAP. Otherwise enjoy! Darksword Cities of Glory IMP bucket.ualr.edu 4000 /* Put, Get, Drop multiple items by Darksword */ ACMD(do_put) { char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; struct obj_data *obj, *next_obj, *cont; struct char_data *tmp_char; int obj_dotmode, cont_dotmode, found = 0; int put_num, amount; /* Added by Darksword */ two_arguments(argument, arg1, arg2); obj_dotmode = find_all_dots(arg1); cont_dotmode = find_all_dots(arg2); if (!*arg1) send_to_char("Put what in what?\r\n", ch); else if (cont_dotmode != FIND_INDIV) send_to_char("You can only put things into one container at a time.\r\n", ch); /* ADDED by Darksword */ else if (is_number(arg1)) { put_num = atoi(arg1); argument = two_arguments(argument, arg1, arg2); one_argument(argument, arg1); if (!*arg2) send_to_char("Put what in what?\r\n", ch); else if (!*arg1) { sprintf(buf, "What do you want to put %s in?\r\n", arg2); send_to_char(buf, ch); } else { generic_find(arg1, FIND_OBJ_INV | FIND_OBJ_ROOM, ch, &tmp_char, &cont); if (!cont) { sprintf(buf, "You don't see %s %s here.\r\n", AN(arg1), arg1); send_to_char(buf, ch); } else if (GET_OBJ_TYPE(cont) != ITEM_CONTAINER) act("$p is not a container.", FALSE, ch, cont, 0, TO_CHAR); else if (IS_SET(GET_OBJ_VAL(cont, 1), CONT_CLOSED)) send_to_char("You'd better open it first!\r\n", ch); else { /* ADDED by Darksword put # <obj> <container> */ for (amount = 0; amount < put_num; amount++) if (!(obj = get_obj_in_list_vis(ch, arg2, ch->carrying))) { sprintf(buf, "You aren't carrying %s %s.\r\n", AN(arg2), arg2); send_to_char(buf, ch); amount = put_num; } else if (obj == cont) { send_to_char("You attempt to fold it into itself, but fail.\r\n", ch); amount = put_num; } else perform_put(ch, obj, cont); } } /* END of Darksword */ } else if (!*arg2) { sprintf(buf, "What do you want to put %s in?\r\n", ((obj_dotmode == FIND_INDIV) ? "it" : "them")); send_to_char(buf, ch); } else { generic_find(arg2, FIND_OBJ_INV | FIND_OBJ_ROOM, ch, &tmp_char, &cont); if (!cont) { sprintf(buf, "You don't see %s %s here.\r\n", AN(arg2), arg2); send_to_char(buf, ch); } else if (GET_OBJ_TYPE(cont) != ITEM_CONTAINER) act("$p is not a container.", FALSE, ch, cont, 0, TO_CHAR); else if (IS_SET(GET_OBJ_VAL(cont, 1), CONT_CLOSED)) send_to_char("You'd better open it first!\r\n", ch); else { if (obj_dotmode == FIND_INDIV) { /* put <obj> <container> */ if (!(obj = get_obj_in_list_vis(ch, arg1, ch->carrying))) { sprintf(buf, "You aren't carrying %s %s.\r\n", AN(arg1), arg1); send_to_char(buf, ch); } else if (obj == cont) send_to_char("You attempt to fold it into itself, but fail.\r\n", ch); else perform_put(ch, obj, cont); } else { for (obj = ch->carrying; obj; obj = next_obj) { next_obj = obj->next_content; if (obj != cont && CAN_SEE_OBJ(ch, obj) && (obj_dotmode == FIND_ALL || isname(arg1, obj->name))) { found = 1; perform_put(ch, obj, cont); } } if (!found) { if (obj_dotmode == FIND_ALL) send_to_char("You don't seem to have anything to put in it.\r\n", ch); else { sprintf(buf, "You don't seem to have any %ss.\r\n", arg1); send_to_char(buf, ch); } } } } } } ACMD(do_get) { char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; struct obj_data *obj; int cont_dotmode, found = 0, mode; struct obj_data *cont; struct char_data *tmp_char; int amount, get_num; /* Added by Darksword */ two_arguments(argument, arg1, arg2); if (IS_CARRYING_N(ch) >= CAN_CARRY_N(ch)) send_to_char("Your arms are already full!\r\n", ch); else if (!*arg1) send_to_char("Get what?\r\n", ch); /* ADDED by Darksword */ /* The following code allows you to get # items from room or container */ else if (is_number(arg1)) { get_num = atoi(arg1); argument = two_arguments(argument, arg1, arg2); one_argument(argument, arg1); if (!*arg2) send_to_char("Get what?\r\n", ch); else if (!*arg1) { for (amount = 0; amount < get_num; amount++) if (!(obj = get_obj_in_list_vis(ch, arg2, world[ch->in_room].contents))) { sprintf(buf, "You don't see %s %s here.\r\n", AN(arg2), arg2); send_to_char(buf, ch); amount = get_num; } else perform_get_from_room(ch, obj); } else { mode = generic_find(arg1, FIND_OBJ_INV | FIND_OBJ_ROOM, ch, &tmp_char, &cont); if (!cont) { sprintf(buf, "You don't have %s %s.\r\n", AN(arg1), arg1); send_to_char(buf, ch); } else if (GET_OBJ_TYPE(cont) != ITEM_CONTAINER) act("$p is not a container.", FALSE, ch, cont, 0, TO_CHAR); else for (amount = 0; amount < get_num; amount++) if (!(obj = get_obj_in_list_vis(ch, arg2, cont->contains))) { sprintf(buf, "There doesn't seem to be %s %s in %s.\r\n", AN(arg2), arg2, arg1); send_to_char(buf, ch); amount = get_num; } else get_from_container(ch, cont, arg2, mode); } } /* END of Darksword */ else if (!*arg2) get_from_room(ch, arg1); else { cont_dotmode = find_all_dots(arg2); if (cont_dotmode == FIND_INDIV) { mode = generic_find(arg2, FIND_OBJ_INV | FIND_OBJ_ROOM, ch, &tmp_char, &cont); if (!cont) { sprintf(buf, "You don't have %s %s.\r\n", AN(arg2), arg2); send_to_char(buf, ch); } else if (GET_OBJ_TYPE(cont) != ITEM_CONTAINER) act("$p is not a container.", FALSE, ch, cont, 0, TO_CHAR); else get_from_container(ch, cont, arg1, mode); } else { if (cont_dotmode == FIND_ALLDOT && !*arg2) { send_to_char("Get from all of what?\r\n", ch); return; } for (cont = ch->carrying; cont; cont = cont->next_content) if (CAN_SEE_OBJ(ch, cont) && (cont_dotmode == FIND_ALL || isname(arg2, cont->name))) if (GET_OBJ_TYPE(cont) == ITEM_CONTAINER) { found = 1; get_from_container(ch, cont, arg1, FIND_OBJ_INV); } else if (cont_dotmode == FIND_ALLDOT) { found = 1; act("$p is not a container.", FALSE, ch, cont, 0, TO_CHAR); } for (cont = world[ch->in_room].contents; cont; cont = cont->next_content) if (CAN_SEE_OBJ(ch, cont) && (cont_dotmode == FIND_ALL || isname(arg2, cont->name))) if (GET_OBJ_TYPE(cont) == ITEM_CONTAINER) { get_from_container(ch, cont, arg1, FIND_OBJ_ROOM); found = 1; } else if (cont_dotmode == FIND_ALLDOT) { act("$p is not a container.", FALSE, ch, cont, 0, TO_CHAR); found = 1; } if (!found) { if (cont_dotmode == FIND_ALL) send_to_char("You can't seem to find any containers.\r\n", ch); else { sprintf(buf, "You can't seem to find any %ss here.\r\n", arg2); send_to_char(buf, ch); } } } } } ACMD(do_drop) { extern sh_int donation_room_1; #if 0 extern sh_int donation_room_2; /* uncomment if needed! */ extern sh_int donation_room_3; /* uncomment if needed! */ #endif struct obj_data *obj, *next_obj; sh_int RDR = 0; byte mode = SCMD_DROP; int dotmode, amount = 0; char *sname; int drop_num; /* Added by Darksword -- to drop multiple items */ switch (subcmd) { case SCMD_JUNK: sname = "junk"; mode = SCMD_JUNK; break; case SCMD_DONATE: sname = "donate"; mode = SCMD_DONATE; switch (number(0, 2)) { case 0: mode = SCMD_JUNK; break; case 1: case 2: RDR = real_room(donation_room_1); break; /* case 3: RDR = real_room(donation_room_2); break; case 4: RDR = real_room(donation_room_3); break; */ } if (RDR == NOWHERE) { send_to_char("Sorry, you can't donate anything right now.\r\n", ch); return; } break; default: sname = "drop"; break; } argument = one_argument(argument, arg); if (!*arg) { sprintf(buf, "What do you want to %s?\r\n", sname); send_to_char(buf, ch); return; } else if (is_number(arg)) { amount = atoi(arg); argument = one_argument(argument, arg); if (!str_cmp("coins", arg) || !str_cmp("coin", arg)) perform_drop_gold(ch, amount, mode, RDR); else { if (amount < 0) { send_to_char("Sorry you can't do that.\r\n", ch); return; } else { /* Code to drop multiple items added by Darksword */ /* added variables int drop_num */ drop_num = amount; for (amount = 0; amount < drop_num; amount++) if (!(obj = get_obj_in_list_vis(ch, arg, ch->carrying))) { sprintf(buf, "You don't seem to have %s %s.\r\n", AN(arg), arg); send_to_char(buf, ch); amount = drop_num; /* just let them know no more then stop */ } else amount += perform_drop(ch, obj, mode, sname, RDR); } } return; } else { dotmode = find_all_dots(arg); /* Can't junk or donate all */ if ((dotmode == FIND_ALL) && (subcmd == SCMD_JUNK || subcmd == SCMD_DONATE)) { if (subcmd == SCMD_JUNK) send_to_char("Go to the dump if you want to junk EVERYTHING!\r\n", ch); else send_to_char("Go do the donation room if you want to donate EVERYTHING!\r\n", ch); return; } if (dotmode == FIND_ALL) { if (!ch->carrying) send_to_char("You don't seem to be carrying anything.\r\n", ch); else for (obj = ch->carrying; obj; obj = next_obj) { next_obj = obj->next_content; amount += perform_drop(ch, obj, mode, sname, RDR); } } else if (dotmode == FIND_ALLDOT) { if (!*arg) { sprintf(buf, "What do you want to %s all of?\r\n", sname); send_to_char(buf, ch); return; } if (!(obj = get_obj_in_list_vis(ch, arg, ch->carrying))) { sprintf(buf, "You don't seem to have any %ss.\r\n", arg); send_to_char(buf, ch); } while (obj) { next_obj = get_obj_in_list_vis(ch, arg, obj->next_content); amount += perform_drop(ch, obj, mode, sname, RDR); obj = next_obj; } } else { if (!(obj = get_obj_in_list_vis(ch, arg, ch->carrying))) { sprintf(buf, "You don't seem to have %s %s.\r\n", AN(arg), arg); send_to_char(buf, ch); } else amount += perform_drop(ch, obj, mode, sname, RDR); } } if (amount && (subcmd == SCMD_JUNK)) { send_to_char("You have been rewarded by the gods!\r\n", ch); act("$n has been rewarded by the gods!", TRUE, ch, 0, 0, TO_ROOM); GET_GOLD(ch) += amount; } } ACMD(do_give) { int amount, dotmode; struct char_data *vict; struct obj_data *obj, *next_obj; char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; int give_num; /* Added by Darksword -- to give multiple items */ argument = one_argument(argument, arg); if (!*arg) send_to_char("Give what to who?\r\n", ch); else if (is_number(arg)) { amount = atoi(arg); argument = one_argument(argument, arg); if (!str_cmp("coins", arg) || !str_cmp("coin", arg)) { argument = one_argument(argument, arg); if ((vict = give_find_vict(ch, arg))) perform_give_gold(ch, vict, amount); return; } else { /* Code to give multiple items added by Darksword */ /* added variables int give_num */ give_num = amount; argument = two_arguments(argument, arg1, arg2); if ((vict = give_find_vict(ch, arg1))) for (amount = 0; amount < give_num; amount++) if (!(obj = get_obj_in_list_vis(ch, arg, ch->carrying))) { sprintf(buf, "You don't seem to have %s %s.\r\n", AN(arg), arg); send_to_char(buf, ch); amount = give_num; /* just let them know no more then stop */ } else perform_give(ch, vict, obj); /* End added by Darksword */ return; } } else { one_argument(argument, buf1); if (!(vict = give_find_vict(ch, buf1))) return; dotmode = find_all_dots(arg); if (dotmode == FIND_INDIV) { if (!(obj = get_obj_in_list_vis(ch, arg, ch->carrying))) { sprintf(buf, "You don't seem to have %s %s.\r\n", AN(arg), arg); send_to_char(buf, ch); } else perform_give(ch, vict, obj); } else { if (dotmode == FIND_ALLDOT && !*arg) { send_to_char("All of what?\r\n", ch); return; } if (!ch->carrying) send_to_char("You don't seem to be holding anything.\r\n", ch); else for (obj = ch->carrying; obj; obj = next_obj) { next_obj = obj->next_content; if (CAN_SEE_OBJ(ch, obj) && ((dotmode == FIND_ALL || isname(arg, obj->name)))) perform_give(ch, vict, obj); } } } }
This archive was generated by hypermail 2b30 : 12/07/00 PST