/* Copyright (C) 1991, Marcus J. Ranum. All rights reserved. */ /* configure all options BEFORE including system stuff. */ #include "config.h" #include "mud.h" #include "match.h" #include "vars.h" /* ARGSUSED */ int cmd_drop (int argc, char *argv[], char *who, char *aswho) { int x; char *loc; char *dest; char ob[MAXOID]; char *used; char work[MAXOID]; /* Work buffer demanded by ut_dropto() */ loc = ut_loc (who); for (x = 1; x < argc; x++) { if (matchinv (who, argv[x], 1, MTCH_UNIQ | MTCH_QUIET, ob) && matchinv (who, argv[x], 1, MTCH_FRST, ob)) continue; dest = ut_dropto (ob, loc, work); used = ut_getatt (who, 0, typ_obj, var_using, (char *) 0); if (used == (char *) 0 || strcmp (used, ob)) { if (ut_listdel (who, who, var_cont, ob)) return (UERR_FATAL); } else { if (ut_unset (who, who, var_using)) return (UERR_FATAL); } if (ut_set (who, ob, typ_obj, var_loc, dest)) return (UERR_FATAL); if (ut_listadd (who, dest, var_cont, ob)) return (UERR_FATAL); if (!activate (ACTIV_PONLY, who, ob, loc, var_drop, argc, argv)) say (who, "dropped ", ut_name (ob), ".\n", (char *) 0); if (!activate (ACTIV_ECAST, who, ob, loc, var_odrop, argc, argv)) ut_roombcast (loc, who, ut_name (who), " dropped ", ut_name (ob), ".\n", (char *) 0);; } return (UERR_NONE); }