/**
* This inheritable will handle all the generic stuff for commands that
* need a response. Like 'teach' and 'offer'.
* @author Pinkfish
* @started Mon Aug 17 04:13:10 EDT 1998
*/
private nosave mapping _respond_cmd;
class respond_data {
/**
* The person offering us the thingy.
*/
object ob;
mixed data;
}
void remove_respond_command( string type, object ob );
/** @ignore yes */
mapping query_respond_cmd_data() { return _respond_cmd || ([ ]); }
void create() {
// _respond_cmd = ([ ]);
} /* create() */
/**
* This method adds a responable command set of values to the
* living object.
* @param type the type of thing to set as a response
* @param ob the object which is giving us the thing
* @param data the data associated with the command
*/
void add_respond_command(string type, object ob, mixed data) {
class respond_data frog;
// Make sure we only have one of them.
remove_respond_command( type, ob );
if( !mapp(_respond_cmd) )
_respond_cmd = ([ ]);
frog = new( class respond_data );
frog->ob = ob;
frog->data = data;
if( !_respond_cmd[type] )
_respond_cmd[type] = ({ });
_respond_cmd[type] += ({ frog });
} /* add_respond_commnad() */
/**
* This method returns the data associated with specified type
* and object for a respondable command.
* @param type the type of the respondable
* @param ob the object we are checking against
* @return the data associated with the response, 0 if not found
*/
mixed query_respond_command( string type, object ob ) {
class respond_data frog;
if( !mapp(_respond_cmd) )
return 0;
if( _respond_cmd[type] ) {
foreach( frog in _respond_cmd[type] ) {
if( frog->ob == ob ) {
return frog->data;
}
}
}
return 0;
} /* query_respond_command() */
/**
* This method removes the response for this command.
* @param type the type of the responable
* @param ob the object that we are removing a responable for
*/
void remove_respond_command(string type, object ob) {
class respond_data frog;
int i;
if( !mapp(_respond_cmd) )
return;
if( _respond_cmd[type] ) {
for (i = 0; i < sizeof(_respond_cmd[type]); i++) {
frog = _respond_cmd[type][i];
if( frog->ob == ob ) {
_respond_cmd[type] = _respond_cmd[type][0..i - 1] +
_respond_cmd[type][i+1..];
i--;
}
}
}
} /* remove_respond_command() */
/**
* @ignore yes
* Added to allow manual clearing of this stuff when it screws up
*/
void clear_respond_commands() { _respond_cmd = 0; }