/**
* 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);
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 (_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 (_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 = ([ ]);
}