/*
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_take (int ac, char *av[], char *who, char *aswho)
{
int x;
char *loc;
char ob[MAXOID];
loc = ut_loc (who);
for (x = 1; x < ac; x++) {
if (matchobjects (who, av[x], loc, MTCH_UNIQ | MTCH_QUIET, ob) &&
matchobjects (who, av[x], loc, MTCH_FRST, ob))
continue;
/* check locks */
if (bool_locked (who, ob, loc, var_lock, 0)) {
if (!activate (ACTIV_PONLY, who, ob, loc, var_fail, ac, av))
say (who, "you can't take ", ut_name (ob), ".\n", (char *) 0);
(void) activate (ACTIV_ECAST, who, ob, loc, var_ofail, ac, av);
continue;
}
if (ut_listadd (who, who, var_cont, ob))
return (UERR_FATAL);
if (ut_listdel (who, loc, var_cont, ob))
return (UERR_FATAL);
if (ut_set (who, ob, typ_obj, var_loc, who))
return (UERR_FATAL);
if (!activate (ACTIV_PONLY, who, ob, loc, var_succ, ac, av))
say (who, "took ", ut_name (ob), ".\n", (char *) 0);
eval_cmd_returnstr (ob);
(void) activate (ACTIV_ECAST, who, ob, loc, var_osucc, ac, av);
}
return (UERR_NONE);
}