/* -*- LPC -*- */
/*
* $Locker: $
* $Id: cl_one.c,v 1.2 1998/03/25 15:49:45 turrican Exp $
* $Log: cl_one.c,v $
* Revision 1.2 1998/03/25 15:49:45 turrican
* Moved from /cmds/creator
*
* Revision 1.1 1998/01/06 05:25:41 ceres
* Initial revision
*
*/
/* clone command, trial out by Turrican for a commands daemon. */
#include <creator.h>
inherit "/cmds/base";
mixed cmd(string str) {
object ob;
string err, *filenames, obvarname;
int loop, mov;
if (!str) {
notify_fail("Clone what ?\n");
return 0;
}
obvarname = (string)0;
sscanf(str, "%s=%s", obvarname, str); /* for clone temp=/obj/misc/torch */
filenames = this_player()->get_cfiles(str);
if (!sizeof(filenames)) {
notify_fail("No such file.\n");
return 0;
}
for(loop = 0; loop < sizeof(filenames); loop++) {
str = filenames[loop];
if (file_size(str) < 0 && file_size(str + ".c") < 0) {
notify_fail("No such file.\n");
return 0;
}
/* err = catch(ob = clone_object(str));
handle_error(err, "clone_object()"); */
ob = clone_object(str);
if (obvarname) this_player()->set_obvar(obvarname, ob); /* hack by ember */
if (ob) {
err = catch((mov = (int)ob->move(this_player())));
this_player()->handle_error(err, "move(this_player())");
if (err || mov) {
err = catch(ob -> move(environment(this_player())));
this_player()->handle_error(err, "move(environment())");
}
printf("Ok. Object %O cloned and put in "+
(environment(ob)==this_player() ? "you" :
(environment(ob)==environment(this_player()) ? "here" : WIZ_PRESENT->desc_object(environment(ob))))+
".\n", ob);
say((string)this_player()->query_cap_name() + " fetches " +
(string)ob->one_short() + " from another dimension.\n");
} else {
printf("Failed to clone.\n");
}
}
return 1;
}