#include "move_failures.h"
#define DROP 1
#define GET 2
int move_flag;
private object prev; /* added Mar 3 '93 by Dank to support goback command */
object query_prev() { return prev; }
/* default to being gettable and dropable...
* modify as you will...
*/
void reset_get() { move_flag |= GET; } /* can't be gotten */
void set_get() { move_flag &= ~GET; } /* can be gotten */
void reset_drop() { move_flag |= DROP; } /* can't be dropped */
void set_drop() { move_flag &= ~DROP; } /* can be dropped */
/* these should have been called "query...", but they're not */
int drop() { return move_flag & DROP; }
int get() { return move_flag & GET; }
int gettable() { return !get(); }
void set_move_flag(int i) { move_flag = i; }
int query_move_flag() { return move_flag; }
// the query added by Randor, 20-mar-98
varargs int move(mixed dest, mixed messin, mixed messout) {
prev = environment();
if (!dest)
return MOVE_EMPTY_DEST;
if (environment() && !environment()->test_remove(this_object(),
move_flag & DROP))
return MOVE_NO_DROP;
if (!dest->test_add(this_object(), move_flag & GET))
return MOVE_NO_GET;
if (environment())
event(environment(), "exit", messout, dest);
move_object( dest);
if (objectp(dest))
event(dest, "enter", messin, prev);
else if (find_object(dest))
event(find_object(dest), "enter", messin, prev);
return MOVE_OK;
}
void dest_me() {
int i;
object* obs;
object ob;
// object *siblings; /* Hamlet */
if (environment())
event(environment(), "dest_me");
// Destruct shadows of this object, Wonderflug 96
obs = ({ });
ob = shadow(this_object(), 0);
while ( ob )
{
obs += ({ ob });
ob = shadow(ob, 0);
}
for ( i=0; i<sizeof(obs); i++ )
if ( obs[i] )
destruct(obs[i]);
/* Hamlet's junk... if this was the last clone of the file,
discard the file as well.
if(clonep(this_object())) {
siblings = children(explode(file_name(this_object()),"#")[0]);
siblings -= ({ this_object() });
if((sizeof(siblings) == 1) && !clonep(siblings[0]))
siblings[0]->dest_me();
}
*/
efun::destruct(this_object());
}
/* Do not I repeat do not mask this function.
* is used when all else fails to dest the object...
* If we find you masking this function... We will cut you up
* into little bits... slowly
*/
nomask mixed dwep() {
efun::destruct(this_object());
return "Destruct With Extreme Prejuce";
}