/*
Copyright (C) 1991, Marcus J. Ranum. All rights reserved.
*/
#ifndef lint
static char RCSid[] = "$Header: /home/mjr/hacks/umud/CMD/RCS/take.c,v 1.2 92/03/01 23:13:36 mjr Exp $";
#endif
/* configure all options BEFORE including system stuff. */
#include "config.h"
#include "mud.h"
#include "match.h"
#include "vars.h"
/* ARGSUSED */
cmd_take(ac,av,who,aswho)
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);
}