/* -*- LPC -*- */
/*
* $Locker: $
* $Id: debug.c,v 1.5 2003/04/09 22:27:43 ceres Exp $
* $Log: debug.c,v $
* Revision 1.5 2003/04/09 22:27:43 ceres
* Modified to not print debug messages to /room/rubbish since that's useless.
*
* Revision 1.4 2001/09/03 06:44:04 ceres
* Modified to accept arrays for cres
*
* Revision 1.3 2001/06/01 21:16:40 ceres
* Can't remmebr
*
* Revision 1.2 2000/05/22 20:33:31 ceres
* Minor tweaks
*
* Revision 1.1 2000/04/16 20:10:23 wodan
* Initial revision
*
*/
/**
* Debugging simul efuns.
*
* @author Ceres
*/
/**
* This method will generate a debug inform for any creators in the room
* where it is generated. It will always attempt to identify the room
* that the event should be sent to.
*
* @example
* #ifdef DEBUG
* debug_printf("Error, player is: %O\n", player);
* #endif
*
* @param all printf style parameters
* @see printf
*/
void debug_printf(string fmt, mixed args ...) {
object env;
env = previous_object();
if(env)
while(environment(env))
env = environment(env);
if((!env || !env->query_is_room() || base_name(env) == "/room/rubbish") &&
this_player()) {
env = environment(this_player());
}
if(env) {
#if efun_defined(event)
event(env, "inform", sprintf("%O:\n " + fmt, previous_object(), args ...),
"debug");
#else
this_object()->event(env, "inform", sprintf("%O:\n " + fmt,
previous_object(), args ...),
"debug");
#endif
}
}
/**
* This method writes a message to a creator, it's mainly meant
* for debug messages where sending a message to a specific
* creator is smarter than sending it to players, who will only get confused.
*
* Typically you should use debug_printf() instead of this.
*
* @param cre the name or object to send the message to
* @param fmt the format string
* @param args the arguments to the sprintf
*
* @see debug_printf
*/
varargs void tell_creator(mixed cres, string fmt, mixed args ...) {
mixed cre;
if(!arrayp(cres))
cres = ({ cres });
foreach(cre in cres) {
if (stringp(cre)) {
#if efun_defined(find_player)
cre = efun::find_player(cre);
#else
cre = "/obj/handlers/livings"->find_player(cre);
#endif
}
if (objectp(cre) && cre->query_creator()) {
if (sizeof(args)) {
tell_object(cre, sprintf("%O:\n" + fmt, previous_object(), args ...));
} else {
tell_object(cre, sprintf("%O:\n"+fmt, previous_object()));
}
}
}
}