nightmare4_fluffos_v1/
nightmare4_fluffos_v1/bin/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/ChangeLog.old/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/Win32/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/compat/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/compat/simuls/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/include/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/clone/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/command/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/data/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/etc/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/include/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/inherit/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/inherit/master/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/log/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/single/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/single/tests/compiler/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/single/tests/efuns/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/single/tests/operators/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/testsuite/u/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/tmp/
nightmare4_fluffos_v1/fluffos-2.9-ds2.14/windows/
nightmare4_fluffos_v1/lib/cfg/
nightmare4_fluffos_v1/lib/cmds/admins/
nightmare4_fluffos_v1/lib/cmds/common/
nightmare4_fluffos_v1/lib/cmds/creators/include/
nightmare4_fluffos_v1/lib/cmds/creators/include/SCCS/
nightmare4_fluffos_v1/lib/cmds/hm/
nightmare4_fluffos_v1/lib/daemon/services/
nightmare4_fluffos_v1/lib/doc/
nightmare4_fluffos_v1/lib/doc/faq/
nightmare4_fluffos_v1/lib/doc/help/classes/
nightmare4_fluffos_v1/lib/doc/help/creators/
nightmare4_fluffos_v1/lib/doc/help/hm/
nightmare4_fluffos_v1/lib/doc/help/players/
nightmare4_fluffos_v1/lib/doc/help/races/
nightmare4_fluffos_v1/lib/doc/help/religion/
nightmare4_fluffos_v1/lib/doc/mudlib/
nightmare4_fluffos_v1/lib/doc/mudlib/cfg/
nightmare4_fluffos_v1/lib/domains/Ylsrim/
nightmare4_fluffos_v1/lib/domains/Ylsrim/adm/
nightmare4_fluffos_v1/lib/domains/Ylsrim/armour/
nightmare4_fluffos_v1/lib/domains/Ylsrim/fish/
nightmare4_fluffos_v1/lib/domains/Ylsrim/meal/
nightmare4_fluffos_v1/lib/domains/Ylsrim/npc/
nightmare4_fluffos_v1/lib/domains/Ylsrim/virtual/
nightmare4_fluffos_v1/lib/domains/Ylsrim/weapon/
nightmare4_fluffos_v1/lib/domains/Ylsrim/xtra/
nightmare4_fluffos_v1/lib/lib/comp/
nightmare4_fluffos_v1/lib/lib/lvs/
nightmare4_fluffos_v1/lib/lib/std/
nightmare4_fluffos_v1/lib/lib/user/
nightmare4_fluffos_v1/lib/news/
nightmare4_fluffos_v1/lib/obj/
nightmare4_fluffos_v1/lib/obj/include/
nightmare4_fluffos_v1/lib/save/
nightmare4_fluffos_v1/lib/save/kills/a/
nightmare4_fluffos_v1/lib/save/kills/b/
nightmare4_fluffos_v1/lib/save/kills/f/
nightmare4_fluffos_v1/lib/save/kills/m/
nightmare4_fluffos_v1/lib/save/kills/q/
nightmare4_fluffos_v1/lib/save/kills/r/
nightmare4_fluffos_v1/lib/secure/cfg/
nightmare4_fluffos_v1/lib/secure/cfg/classes/
nightmare4_fluffos_v1/lib/secure/cfg/races/SCCS/
nightmare4_fluffos_v1/lib/secure/cmds/creators/include/
nightmare4_fluffos_v1/lib/secure/cmds/players/
nightmare4_fluffos_v1/lib/secure/cmds/players/include/
nightmare4_fluffos_v1/lib/secure/daemon/include/
nightmare4_fluffos_v1/lib/secure/lib/
nightmare4_fluffos_v1/lib/secure/lib/include/
nightmare4_fluffos_v1/lib/secure/lib/net/
nightmare4_fluffos_v1/lib/secure/lib/std/
nightmare4_fluffos_v1/lib/secure/obj/
nightmare4_fluffos_v1/lib/secure/obj/include/
nightmare4_fluffos_v1/lib/secure/save/
nightmare4_fluffos_v1/lib/secure/save/boards/
nightmare4_fluffos_v1/lib/secure/save/votes/
nightmare4_fluffos_v1/lib/spells/
nightmare4_fluffos_v1/lib/verbs/admins/include/
nightmare4_fluffos_v1/lib/verbs/common/
nightmare4_fluffos_v1/lib/verbs/common/include/
nightmare4_fluffos_v1/lib/verbs/creators/
nightmare4_fluffos_v1/lib/verbs/creators/include/
nightmare4_fluffos_v1/lib/verbs/players/include/SCCS/
nightmare4_fluffos_v1/lib/verbs/rooms/
nightmare4_fluffos_v1/lib/verbs/rooms/include/
nightmare4_fluffos_v1/lib/www/
nightmare4_fluffos_v1/old/
nightmare4_fluffos_v1/old/tools/
nightmare4_fluffos_v1/win32/
/*    /secure/cmds/admins/link.c
 *    from the Nightmare V Object Library
 *    link SECONDARY to PRIMARY
 *    link PLAYER
 *    link
 *    created by Descartes of Borg 951216
 */

#include <lib.h>
#include <link.h>
#include <daemons.h>
#include <message_class.h>

inherit LIB_DAEMON;

mixed cmd(string args) {
  mixed tmp;
  string primary, secondary;

  if( !archp(previous_object()) ) return 0;

  // If no arguments are specified, dump all links. 
  if( !args || args == "" ) {
    mapping links;
    string formatString;
    int screenSize = ((int *)this_player()->GetScreen())[0];
    int playerSize = ((screenSize * 4) / 16) -1;
    int emailSize = ((screenSize * 6) / 16) - 1;
    int lastOnSize = ((screenSize * 6) / 16) - 1;

    if(playerSize < 14) playerSize = 14;
    if(emailSize < 25) emailSize = 25;
    if(lastOnSize < 25) lastOnSize = 25;

    formatString = "%:-" + playerSize + "s %:-" + emailSize
      + "s %:-" + lastOnSize + "s";

    tmp = ({ center("%^CYAN%^  " + mud_name()
      + " Approved Character Links%^YELLOW%^", screenSize) });
    
    tmp += ({ sprintf(formatString, "Player", "Email", "Last On%^RESET%^") });

    links = (mapping)CHARACTER_D->GetLinks();
    foreach(string p in sort_array(keys(links), 1)) {   
      class char_link l;
	  int maxi;

      l = links[p];
      if( !(maxi = sizeof(l->Secondaries)) ) continue;
      tmp += ({ sprintf(formatString, capitalize(p), l->Email,
        ((l->LastOnWith == p) ? ctime(l->LastOnDate) : "unknown")) });
      foreach(string pl in l->Secondaries)
        tmp += ({ sprintf(formatString, "  " + capitalize(pl), "",
          ((l->LastOnWith == pl) ? ctime(l->LastOnDate) : "unknown")) });
	}
	this_player(1)->eventPage(tmp, MSG_SYSTEM);
	return 1;
  }
  
  // Or, link a secondary to a primary.
  else if( sscanf(args, "%s to %s", secondary, primary) == 2 ) {
    this_player(1)->eventPrint("Email for player: ", MSG_PROMPT);
    input_to(function(string email, string primary, string secondary) {
      mixed tmp;

      if( !email || email == "" ) {
        this_player(1)->eventPrint("Aborted.", MSG_SYSTEM);
        return;
      }
      tmp = (mixed)CHARACTER_D->eventLink(primary, secondary, email);
      if( !tmp ) this_player(1)->eventPrint("Failed.", MSG_SYSTEM);
      else if( tmp == 1) this_player(1)->eventPrint("Linked.", MSG_SYSTEM);
      else this_player(1)->eventPrint(tmp, MSG_SYSTEM);
    }, primary, secondary);
    return 1;
  }
 
  // Otherwise, get link information on a specific player.
  else {
    mapping mp;
    string str;
 
    mp = (mapping)CHARACTER_D->GetLink(convert_name(args));
    if( !mp ) this_player()->eventPrint(capitalize(args) + " has no "
      "links listed.", MSG_SYSTEM);
    else {
      str = "Primary: " + capitalize(mp["primary"]) + "\n";
      str += "Last on " + ctime(mp["last on"]) + " with " +
        capitalize(mp["last char"]) + "\n";
      str += "Secondaries: " + implode(mp["secondaries"], ",");
      this_player()->eventPrint(str, MSG_SYSTEM);
    }
    return 1;
  }
}

string GetHelp(string str) {
    return ("Syntax: <link SECONDARY to PRIMARY>\n"
	    "        <link PLAYER>\n"
	    "        <link>\n\n"
	    "In the first form, it allows you to mark two characters "
	    "as being controlled by the same real individual.  It "
	    "creates a relationship where one character is considered "
	    "primary, and the other is secondary.  If link relationships "
	    "already exist for one or more, this will alter those "
	    "and create a new one with the primary one you specify as "
	    "primary.  For example, if both characters were already set "
	    "up as primary links, the one you specify with this command "
	    "as primary becomes the sole primary link for these characters, "
	    "and the secondary plus its secondaries all become secondaries "
	    "fot his primary.\n\n"
	    "If you just pass a player name as an argument, this command "
	    "will show you the link information on that player.\n\n"
	    "If you give no arguments, then this command will list all "
	    "known links/\n\n"
	    "See also: finger, unlink");
}