tmi2_fluffos_v2/
tmi2_fluffos_v2/bin/
tmi2_fluffos_v2/etc/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/ChangeLog.old/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/Win32/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/compat/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/compat/simuls/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/include/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/clone/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/command/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/data/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/etc/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/include/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/inherit/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/inherit/master/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/log/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/tests/compiler/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/tests/efuns/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/tests/operators/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/u/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/tmp/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/windows/
tmi2_fluffos_v2/lib/
tmi2_fluffos_v2/lib/adm/
tmi2_fluffos_v2/lib/adm/daemons/languages/
tmi2_fluffos_v2/lib/adm/daemons/network/I3/
tmi2_fluffos_v2/lib/adm/daemons/virtual/
tmi2_fluffos_v2/lib/adm/daemons/virtual/template/
tmi2_fluffos_v2/lib/adm/news/
tmi2_fluffos_v2/lib/adm/obj/
tmi2_fluffos_v2/lib/adm/obj/master/
tmi2_fluffos_v2/lib/adm/priv/
tmi2_fluffos_v2/lib/adm/shell/
tmi2_fluffos_v2/lib/adm/tmp/
tmi2_fluffos_v2/lib/cmds/
tmi2_fluffos_v2/lib/d/
tmi2_fluffos_v2/lib/d/Conf/
tmi2_fluffos_v2/lib/d/Conf/adm/
tmi2_fluffos_v2/lib/d/Conf/boards/
tmi2_fluffos_v2/lib/d/Conf/cmds/
tmi2_fluffos_v2/lib/d/Conf/data/
tmi2_fluffos_v2/lib/d/Conf/logs/
tmi2_fluffos_v2/lib/d/Conf/obj/
tmi2_fluffos_v2/lib/d/Conf/text/help/
tmi2_fluffos_v2/lib/d/Fooland/adm/
tmi2_fluffos_v2/lib/d/Fooland/data/
tmi2_fluffos_v2/lib/d/Fooland/data/attic/
tmi2_fluffos_v2/lib/d/Fooland/items/
tmi2_fluffos_v2/lib/d/TMI/
tmi2_fluffos_v2/lib/d/TMI/adm/
tmi2_fluffos_v2/lib/d/TMI/boards/
tmi2_fluffos_v2/lib/d/TMI/data/
tmi2_fluffos_v2/lib/d/TMI/rooms/
tmi2_fluffos_v2/lib/d/grid/
tmi2_fluffos_v2/lib/d/grid/adm/
tmi2_fluffos_v2/lib/d/grid/data/
tmi2_fluffos_v2/lib/d/std/
tmi2_fluffos_v2/lib/d/std/adm/
tmi2_fluffos_v2/lib/data/adm/
tmi2_fluffos_v2/lib/data/adm/daemons/
tmi2_fluffos_v2/lib/data/adm/daemons/doc_d/
tmi2_fluffos_v2/lib/data/adm/daemons/emoted/
tmi2_fluffos_v2/lib/data/adm/daemons/network/http/
tmi2_fluffos_v2/lib/data/adm/daemons/network/services/mail_q/
tmi2_fluffos_v2/lib/data/adm/daemons/network/smtp/
tmi2_fluffos_v2/lib/data/adm/daemons/news/archives/
tmi2_fluffos_v2/lib/data/attic/connection/
tmi2_fluffos_v2/lib/data/attic/user/
tmi2_fluffos_v2/lib/data/std/connection/b/
tmi2_fluffos_v2/lib/data/std/connection/l/
tmi2_fluffos_v2/lib/data/std/user/a/
tmi2_fluffos_v2/lib/data/std/user/b/
tmi2_fluffos_v2/lib/data/std/user/d/
tmi2_fluffos_v2/lib/data/std/user/f/
tmi2_fluffos_v2/lib/data/std/user/l/
tmi2_fluffos_v2/lib/data/std/user/x/
tmi2_fluffos_v2/lib/data/u/d/dm/working/doc_d/
tmi2_fluffos_v2/lib/data/u/l/leto/doc_d/
tmi2_fluffos_v2/lib/data/u/l/leto/smtp/
tmi2_fluffos_v2/lib/doc/
tmi2_fluffos_v2/lib/doc/driverdoc/applies/
tmi2_fluffos_v2/lib/doc/driverdoc/applies/interactive/
tmi2_fluffos_v2/lib/doc/driverdoc/concepts/
tmi2_fluffos_v2/lib/doc/driverdoc/driver/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/arrays/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/buffers/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/compile/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/ed/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/filesystem/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/floats/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/functions/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/general/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/mappings/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/numbers/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/parsing/
tmi2_fluffos_v2/lib/doc/driverdoc/lpc/constructs/
tmi2_fluffos_v2/lib/doc/driverdoc/lpc/preprocessor/
tmi2_fluffos_v2/lib/doc/driverdoc/lpc/types/
tmi2_fluffos_v2/lib/doc/driverdoc/platforms/
tmi2_fluffos_v2/lib/doc/mudlib/
tmi2_fluffos_v2/lib/ftp/
tmi2_fluffos_v2/lib/include/driver/
tmi2_fluffos_v2/lib/log/
tmi2_fluffos_v2/lib/log/driver/
tmi2_fluffos_v2/lib/obj/net/
tmi2_fluffos_v2/lib/obj/shells/
tmi2_fluffos_v2/lib/obj/tools/
tmi2_fluffos_v2/lib/std/adt/
tmi2_fluffos_v2/lib/std/board/
tmi2_fluffos_v2/lib/std/body/
tmi2_fluffos_v2/lib/std/fun/
tmi2_fluffos_v2/lib/std/living/
tmi2_fluffos_v2/lib/std/object/
tmi2_fluffos_v2/lib/std/shop/
tmi2_fluffos_v2/lib/std/socket/
tmi2_fluffos_v2/lib/std/user/
tmi2_fluffos_v2/lib/std/virtual/
tmi2_fluffos_v2/lib/student/
tmi2_fluffos_v2/lib/student/kalypso/
tmi2_fluffos_v2/lib/student/kalypso/armor/
tmi2_fluffos_v2/lib/student/kalypso/rooms/
tmi2_fluffos_v2/lib/student/kalypso/weapons/
tmi2_fluffos_v2/lib/u/l/leto/
tmi2_fluffos_v2/lib/u/l/leto/cmds/
tmi2_fluffos_v2/lib/www/errors/
tmi2_fluffos_v2/lib/www/gateways/
tmi2_fluffos_v2/lib/www/images/
tmi2_fluffos_v2/old/
tmi2_fluffos_v2/win32/
// The shadow spy. It tells you what objects are being shadowed by what
// other objects and gives you some leeway to alter that.
// Rather old. I believe it was originally written by Tarod, although the
// comment that made me think that is gone now. It survived until November
// 1992 without a header, when Mobydick@TMI-2 added this one.

#include <mudlib.h>

inherit OBJECT ;
 
int show (string str, object u_obj) ;
int dest_shadows (string str) ;
object find_shadowed_player (string str) ;
void create() {
	set ("short", "Shadow Spy") ;
	set ("id", ({"show","spy"}) ) ;
	set ("long", "This item shows who is using shadows.\n");
	set ("mass", 50) ;
	set ("bulk", 20) ;
}

void init() {
 add_action("view","sview");
 add_action("show_shadows","sv");
 add_action("dest_shadows","Sdest");
 add_action("alert_sdest","sdest");
 add_action("dest_spec_shadow","rms");
 add_action("help","help");
}
 
int help (string str) {
 if (str!="show" && str!="spy" && str!="shadow") return 0 ;
 
write("Shadow Spy (TM) - v1.0\n");
write("sv             :  Show all shadows on all users logged in.\n");
write("sview <user>   :  See shadows on a specific user.\n");
write("sdest <user>   :  Destruct all shadows on a specific user.\n");
write("Sdest <user>   :  Silent sdest.\n");
write("rms <user> <#> :  Remove shadow <#> from specified user.\n");
return 1;
}
 
int show_shadows() {
  object *u;
  string name;
int i;
write("Shadow Spy (TM)  - by Tarod (To keep you guys in line.) :-)\n");
    u=users();
    i=0;
        while(i<sizeof(u)){
	  name=u[i]->query("cap_name") ;
          if(!name)name="logon";
          show(name,u[i]);
	     i+=1;
	     }
	write("\n");
    return 1;
	}
 
int get () { return 1; }
 
int show (string str, object u_obj) {
object obj;
 
string fn;
write(capitalize(str)+":    \t");
 obj=shadow(u_obj,0);
  if (!obj) {write("Not Shadowed\n"); return 1;}
  fn = file_name(obj);
  write("Shadowed by:  "+fn+"\n");
   obj=shadow(obj,0);
  while (obj) {
	write("Muliple Shadows:   **  \t"+file_name(obj)+"\n");
	obj=shadow(obj,0);
    }
 return 1;
}
 
int view (string str) {
object obj;
string fn;
if (find_shadowed_player(str)) {
write(capitalize(str)+":     \t");
  obj=shadow(find_shadowed_player(str),0);
  if (!obj) {write("Not Shadowed\n"); return 1;}
  fn = file_name(obj);
  write("Shadowed by:  "+fn+"\n");
 obj=shadow(obj,0);
  while (obj) {
	write("Multiple Shadows:   **  \t"+file_name(obj)+"\n");
	obj=shadow(obj,0);
    }
	return 1;
}
write("Find shadows on who?\n");
return 1;
}
 
int alert_sdest (string str) {
object target;
 
    target=find_shadowed_player(str);
    if (!target) { write("sdest:  target not found\n"); return 1; }
    if (environment(target)==environment(this_player())) {
        write("You tear the shadows from "+
            capitalize((string)target->query("cap_name"))+".\n");
        say(capitalize((string)this_player()->query("cap_name"))+
            " tears the shadows from "+
            capitalize((string)target->query("cap_name"))+".\n");
        }
     else {
        write("You tear the shadows from "+
		capitalize((string)target->query("cap_name"))+".\n");
        tell_object(target,capitalize((string)this_player()->query("cap_name"))+
              " tears your shadows from you.\n");
        }
     dest_shadows(str);
return 1;
}
 
int dest_shadows (string str) {
object obj, n_obj;
string fn;
if (find_shadowed_player(str)) {
write(capitalize(str)+":\t");
  obj=shadow(find_shadowed_player(str),0);
  if (!obj) {write("Not Shadowed\n"); return 1;}
  fn = file_name(obj);
  write("Shadowed by:  "+fn);
  n_obj=obj;
  obj=shadow(obj,0);
  destruct(n_obj);
  write(" <- Destructed!\n");
  while (obj) {
    write("Multiple Shadows:   **  \t"+file_name(obj));
      n_obj=obj;
      obj=shadow(obj,0);
    destruct(n_obj);
write(" <- Destructed!\n");
}
	return 1;
}
write("Dest shadows on who?\n");
return 1;
}
 
object find_shadowed_player (string str) {
object *u;
int i;
string name;
    if (!str || str == "") return 0;
    u=users();
    i=0;
        while(i<sizeof(u)){
	  name=u[i]->query("cap_name") ;
          if(!name)name="logon";
          if (capitalize(name)==capitalize(str)) return u[i];
	     i+=1;
	     }
 return 0;
}
 
/* This function seems not to be doing anything... It's commented out.

dest_guild_shadows() {
object *u;
int i;
string name;
u=users();
    i=0;
        while(i<sizeof(u)){
          name=u[i]->query("cap_name");
          if(!name)name="logon";
          clean_shadows(u[i]);
	     i+=1;
	     }
 return 1;
}

*/
 
int dest_spec_shadow (string str) {
object obj, n_obj;
string fn, who;
int snum, count;
if (sscanf(str,"%s %d",who,snum)!=2) {
        write("Shadow Spy:  Invalid Paramaters\n");
        return 1;
    }
if (find_shadowed_player(who)) {
write(capitalize(str)+":\t");
  obj=shadow(find_shadowed_player(who),0);
  if (!obj) { write("Not Shadowed\n"); return 1; }
  fn = file_name(obj);
  count=1;
  write("Shadowed by:  "+fn);
  n_obj=obj;
  obj=shadow(obj,0);
  if (count==snum) {
    destruct(n_obj);
    write(" <- Destructed!\n");
    }
  else write(" <- Ignored.\n");
  while (obj) {
    write("Multiple Shadows:   **  \t"+file_name(obj));
      n_obj=obj;
      obj=shadow(obj,0);
      count++;
      if (count==snum) {
            destruct(n_obj);
            write(" <- Destructed!\n");
        }
       else write(" <- Ignored.\n");
}
	return 1;
}
write("Dest shadow on who?\n");
return 1;
}