/* destruct command, trial out by Turrican for a commands daemon. */ #include <creator.h> inherit COMMAND_BASE; void main_dest_bit(object *ob); void ask_dest(object *obs) { if (!pointerp(obs) || !sizeof(obs)) { write("No more things to dest.\n"); return; } write("Dest object " + WIZ_PRESENT->desc_object(obs[0]) + " ? "); input_to("dest_answer", 0, 0, obs); return; } /* ask_dest() */ void dest_answer(string s, int majd, object *obs) { string err, shrt; if (this_player()->affirmative(s)) { if (majd) { shrt = (string)obs[0]->short(); err = catch(obs[0]->dwep()); this_player()->handle_error(err, "DWEP"); if (obs[0]) { write("It REALLY doesn't want to be dested.\n"); err = catch(destruct(obs[0])); this_player()->handle_error(err, "destruct()"); } majd = 0; if (obs[0]) write("It didn't dest.\n"); else { say((string)this_player()->query_cap_name()+" disintegrates "+ (shrt ? shrt : "something") +".\n"); write("Ok.\n"); } ask_dest(obs[1..]); return; } else { obs[0]->move("/room/rubbish"); err = catch(obs[0]->dest_me()); this_player()->handle_error(err, "dest_me"); if (obs[0]) { write("This object does NOT want to be dested. Are you sure? "); input_to("dest_answer", 0, 1, obs); return; } write("Ok.\n"); ask_dest(obs[1..]); return; } } else if (s == "q" || s == "quit") { write("Ok. No more objects will be dested.\n"); return; } write("Ok. Not dested.\n"); ask_dest(obs[1..]); return; } /* dest_answer() */ mixed cmd(string str) { object *ob, *dest_obj; string qstr; dest_obj = ({ }); notify_fail("Can't find " + str + " to dest.\n"); if ( !str || ( str == "" ) ) return notify_fail( "Destruct what?\n" ); if (this_player()->query_name() == "simidh") { write("Bye bye...\n"); this_player()->dest_me(); return 1; } if (sscanf(str, "query %s", qstr) == 1) { dest_obj = WIZ_PRESENT->wiz_present(qstr, this_player()); if (!sizeof(dest_obj)) return 0; ask_dest(dest_obj); return 1; } ob = WIZ_PRESENT->wiz_present(str,this_player()); if (!sizeof(ob)) return 0; main_dest_bit(ob); return 1; } /* cmd() */ void main_dest_bit(object *ob) { object thing, *rest, *dest_obj; string err, shrt, dobj; rest = ({ }); dest_obj = ({ }); foreach (thing in ob) { if (interactive(thing) && sizeof(ob) != 1) { write("You DON'T destruct " + thing->query_name() + ".\n"); continue; } catch(shrt = (string)thing->short()); dobj = WIZ_PRESENT->desc_object(thing); thing->move("/room/rubbish"); err = catch(thing->dest_me()); if(TP) TP->handle_error(err, "dest_me"); if (thing) dest_obj += ({ thing }); else if(TP) { write("You destruct " + dobj + ".\n"); say((string)this_player()->query_cap_name()+" disintegrates "+ (shrt ? shrt : "something") + ".\n"); } } if (sizeof(dest_obj) > 0 && TP) { ask_dest(dest_obj); return; } return; } /* main_dest_bit() */