/* 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); }