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/
// File: /cmds/std/_party.c
// written by Zeus @1993
// to be used in conjunction with
// my party daemon

#include <mudlib.h>
#include <daemons.h>

#define NAME(x) (string)x->query("name")
#define CAPNAME(x) (string)x->query("cap_name")
#define LEADER(x) (string)x->query("leader")
#define POSS(x) possessive((string)x->query("gender"))

inherit DAEMON;

string help();

int handle_form() {
     if((LEADER(this_player()))) {
          notify_fail("You are already in a party.\n");
          return 0;
     }
     PARTY_D->form_party(this_player());
     return 1;
}

int handle_invite(string str) {
     object ob;

     if(!(LEADER(this_player()))) {
          notify_fail("You are not in a party.\n");
          return 0;
     }
     if((LEADER(this_player())) != (NAME(this_player()))) {
          notify_fail("You are not permitted to do that.\n");
          return 0;
     }
     ob = present(lower_case(str), environment(this_player()));
     if(!ob) {
          notify_fail("There is no one by that name here.\n");
          return 0;
   }
    if(ob==this_player()) {
       notify_fail("Don't be narcistic please, find someone else to party with.\n");
      return 0;
     }
     PARTY_D->invite_member(this_player(), ob);
     return 1;
}

int handle_join(string str) {
     object ob;

     if((LEADER(this_player()))) {
          notify_fail("You are already in a party.\n");
          return 0;
     }
     ob = present(lower_case(str), environment(this_player()));
     if(!ob) {
          notify_fail("There is no one by that name here.\n");
          return 0;
     }
     if(!(LEADER(ob))) {
          notify_fail(CAPNAME(ob)+" is not in a party.\n");
          return 0;
     }
     if((LEADER(ob)) != (NAME(ob))) {
          notify_fail(CAPNAME(ob)+" is not leader of "+
               POSS(ob)+" party.\n");
          return 0;
     }
     PARTY_D->add_member(ob, this_player());
     return 1;
}

int handle_leave() {
     object ob;

     if(!(LEADER(this_player()))) {
          notify_fail("You are not in a party.\n");
          return 0;
     }
     if((LEADER(this_player())) == (NAME(this_player()))) {
          notify_fail("You are not permitted to do that.\n");
          return 0;
     }
     ob = find_living(lower_case(LEADER(this_player())));
     if(!ob) {     
          notify_fail("Your leader is gone...PLEASE NOTIFY A WIZ.\n");
          return 0;
     }
     PARTY_D->disband_member(ob, this_player(), 0);
     return 1;
}

int handle_remove(string str) {
     object ob;

     if(!(LEADER(this_player()))) {
          notify_fail("You are not in a party.\n");
          return 0;
     }
     if((LEADER(this_player())) != (NAME(this_player()))) {
          notify_fail("You are not permitted to do that.\n");
          return 0;
     }
     ob = find_living(lower_case(str));
     if(!ob) {
          notify_fail("That person is not logged on.\n");
          return 0;
     }
     if((LEADER(this_player())) != (LEADER(ob))) {
          notify_fail(CAPNAME(ob)+" is not a member of your party.\n");
          return 0;
     }
     PARTY_D->disband_member(this_player(), ob, 1);
     return 1;
}

int handle_disband() {
     if(!(LEADER(this_player()))) {
          notify_fail("You are not in a party.\n");
          return 0;
     }
     if((LEADER(this_player())) != (NAME(this_player()))) {
          notify_fail("You are not permitted to do that.\n");
          return 0;
     }
     PARTY_D->disband_party(this_player());
     return 1;
}

int handle_members() {
     object ob;

     if(!(LEADER(this_player()))) {
          notify_fail("You are not in a party.\n");
          return 0;
     }
     if((LEADER(this_player())) == (NAME(this_player()))) ob = this_player();
     else ob = find_living(lower_case(LEADER(this_player())));
     if(!ob) {     
          notify_fail("Your leader is gone...PLEASE NOTIFY A WIZ.\n");
          return 0;
     }
     PARTY_D->party_list(ob);
     return 1;
}

int handle_leader(string str) {
     object ob;

     if(!(LEADER(this_player()))) {
          notify_fail("You are not in a party.\n");
          return 0;
     }
     if((LEADER(this_player())) != (NAME(this_player()))) {
          notify_fail("You are not permitted to do that.\n");
          return 0;
     }
     ob = find_living(lower_case(str));
     if(!ob) {
          notify_fail("That person is not logged on.\n");
          return 0;
     }
     if((LEADER(this_player())) != (LEADER(ob))) {
          notify_fail(CAPNAME(ob)+" is not a member of your party.\n");
          return 0;
     }
     PARTY_D->change_leader(this_player(), ob);
     return 1;
}

int cmd_party(string str) {
     string foo, fii;

     if(!str) {
          if((LEADER(this_player())))
               write("You are a member of "+
                    capitalize(LEADER(this_player()))+"'s party.\n");
          else write("Usage: party <action> [<player>]\n");
          return 1;
     }
     if(sscanf(str, "%s %s", foo, fii) == 2) {
          switch(foo) {
               case "invite" : return handle_invite(fii); break;
               case "join" : return handle_join(fii); break;
               case "remove" : return handle_remove(fii); break;
               case "leader" : return handle_leader(fii); break;
               default : return notify_fail(help());
          }
     } else if(sscanf(str, "%s", foo) == 1) {
          switch(foo) {
               case "form" : return handle_form(); break;
               case "leave" : return handle_leave(); break;
               case "disband" : return handle_disband(); break;
               case "members" : return handle_members(); break;
               default : return notify_fail(help());
          }
     }
     return notify_fail(help());
}

string help() {
     write("Syntax: party form             non-members ONLY.\n"+
           "       party join <player>    non-members ONLY.\n"+
           "       party leave            members ONLY\n"+
           "       party members          all members\n"+
           "       party invite <player>  leader ONLY\n"+
           "       party remove <player>  leader ONLY\n"+
           "       party leader <player>  leader ONLY\n"+
           "       praty disband          leader ONLY\n"+
     "\nThis command allows players to form and manage small\n"+
           "parties. To join an existing party, you must be invited\n"+
           "by its leader. Once invited, you have 60 seconds to join\n"+
           "before your invitation expires. If you quit, die or go\n"+
           "netdead whilst in a party, your membership to that party\n"+
           "is automatically removed. If you are the leader of that\n"+
           "party, then the party will be disbanded.\n");
}