lima-1.0b5/
lima-1.0b5/driver/
lima-1.0b5/driver/ChangeLog.old/
lima-1.0b5/driver/Win32/
lima-1.0b5/driver/compat/
lima-1.0b5/driver/include/
lima-1.0b5/driver/testsuite/
lima-1.0b5/driver/testsuite/clone/
lima-1.0b5/driver/testsuite/command/
lima-1.0b5/driver/testsuite/data/
lima-1.0b5/driver/testsuite/etc/
lima-1.0b5/driver/testsuite/include/
lima-1.0b5/driver/testsuite/inherit/
lima-1.0b5/driver/testsuite/inherit/master/
lima-1.0b5/driver/testsuite/log/
lima-1.0b5/driver/testsuite/single/
lima-1.0b5/driver/testsuite/single/tests/compiler/
lima-1.0b5/driver/testsuite/single/tests/efuns/
lima-1.0b5/driver/testsuite/single/tests/operators/
lima-1.0b5/driver/testsuite/u/
lima-1.0b5/driver/tmp/
lima-1.0b5/etc/
lima-1.0b5/lib/WWW/help/
lima-1.0b5/lib/cmds/
lima-1.0b5/lib/cmds/create/
lima-1.0b5/lib/cmds/player/attic/
lima-1.0b5/lib/contrib/bboard/
lima-1.0b5/lib/contrib/boards/
lima-1.0b5/lib/contrib/marriage/
lima-1.0b5/lib/contrib/roommaker/
lima-1.0b5/lib/contrib/transient_effect/
lima-1.0b5/lib/daemons/channel/
lima-1.0b5/lib/daemons/imud/
lima-1.0b5/lib/data/
lima-1.0b5/lib/data/config/
lima-1.0b5/lib/data/links/
lima-1.0b5/lib/data/news/
lima-1.0b5/lib/data/players/
lima-1.0b5/lib/data/secure/
lima-1.0b5/lib/domains/
lima-1.0b5/lib/domains/std/2.4.5/maze1/
lima-1.0b5/lib/domains/std/2.4.5/npc/
lima-1.0b5/lib/domains/std/2.4.5/post_dir/
lima-1.0b5/lib/domains/std/2.4.5/sub/
lima-1.0b5/lib/domains/std/camera/
lima-1.0b5/lib/domains/std/config/
lima-1.0b5/lib/domains/std/cult/
lima-1.0b5/lib/domains/std/effects/
lima-1.0b5/lib/domains/std/misc/
lima-1.0b5/lib/domains/std/monsters/
lima-1.0b5/lib/domains/std/recorder/
lima-1.0b5/lib/domains/std/rooms/
lima-1.0b5/lib/domains/std/rooms/beach/
lima-1.0b5/lib/domains/std/rooms/labyrinth/
lima-1.0b5/lib/domains/std/school/
lima-1.0b5/lib/domains/std/school/O/
lima-1.0b5/lib/domains/std/spells/
lima-1.0b5/lib/domains/std/spells/stock-mage/
lima-1.0b5/lib/domains/std/spells/stock-priest/
lima-1.0b5/lib/help/
lima-1.0b5/lib/help/admin/
lima-1.0b5/lib/help/hints/General_Questions/
lima-1.0b5/lib/help/hints/Pirate_Quest/
lima-1.0b5/lib/help/player/
lima-1.0b5/lib/help/player/bin/
lima-1.0b5/lib/help/player/quests/
lima-1.0b5/lib/help/wizard/
lima-1.0b5/lib/help/wizard/coding/guilds/
lima-1.0b5/lib/help/wizard/coding/rooms/
lima-1.0b5/lib/help/wizard/lib/daemons/
lima-1.0b5/lib/help/wizard/lib/lfun/
lima-1.0b5/lib/help/wizard/lib/std/
lima-1.0b5/lib/help/wizard/mudos_doc/
lima-1.0b5/lib/help/wizard/mudos_doc/applies/
lima-1.0b5/lib/help/wizard/mudos_doc/applies/interactive/
lima-1.0b5/lib/help/wizard/mudos_doc/applies/parsing/
lima-1.0b5/lib/help/wizard/mudos_doc/concepts/
lima-1.0b5/lib/help/wizard/mudos_doc/driver/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/arrays/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/buffers/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/compile/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/filesystem/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/floats/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/functions/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/general/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/mappings/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/mixed/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/numbers/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/parsing/
lima-1.0b5/lib/help/wizard/mudos_doc/lpc/constructs/
lima-1.0b5/lib/help/wizard/mudos_doc/lpc/types/
lima-1.0b5/lib/include/driver/
lima-1.0b5/lib/log/
lima-1.0b5/lib/obj/admtool/
lima-1.0b5/lib/obj/admtool/internal/
lima-1.0b5/lib/obj/admtool/mudinfo/
lima-1.0b5/lib/obj/admtool/secure/
lima-1.0b5/lib/obj/secure/
lima-1.0b5/lib/obj/secure/cmd/
lima-1.0b5/lib/obj/secure/mailers/
lima-1.0b5/lib/obj/secure/shell/
lima-1.0b5/lib/obj/secure/shell/classes/
lima-1.0b5/lib/obj/tasktool/
lima-1.0b5/lib/obj/tasktool/internal/
lima-1.0b5/lib/open/
lima-1.0b5/lib/secure/
lima-1.0b5/lib/secure/cgi/
lima-1.0b5/lib/secure/modules/
lima-1.0b5/lib/secure/simul_efun/
lima-1.0b5/lib/std/adversary/
lima-1.0b5/lib/std/adversary/advancement/
lima-1.0b5/lib/std/adversary/armor/
lima-1.0b5/lib/std/adversary/blows/
lima-1.0b5/lib/std/adversary/death/
lima-1.0b5/lib/std/adversary/formula/
lima-1.0b5/lib/std/adversary/health/
lima-1.0b5/lib/std/adversary/pulse/
lima-1.0b5/lib/std/adversary/wield/
lima-1.0b5/lib/std/classes/event_info/
lima-1.0b5/lib/std/container/
lima-1.0b5/lib/std/living/
lima-1.0b5/lib/std/modules/contrib/
lima-1.0b5/lib/std/patterns/
lima-1.0b5/lib/std/race/
lima-1.0b5/lib/std/race/restricted/
lima-1.0b5/lib/std/room/
lima-1.0b5/lib/tmp/
lima-1.0b5/lib/trans/
lima-1.0b5/lib/trans/admincmds/
lima-1.0b5/lib/trans/obj/
lima-1.0b5/lib/wiz/
/* Do not remove the headers from this file! see /USAGE for more info. */

// team_menu.c - Menu object accessible through the 'team' command
//                for all players. Includes all team-related
//                functions.
// March 1, 1997: Iizuka@Lima Bean created.
// August 15, 1999: Iizuka@Lima Bean ripped creation process out of the
//                  team player command and moved it here.

#define MAX_ATTEMPTS 3

#include <menu.h>
#include <mudlib.h>

inherit MENUS;

private varargs void enter_password(string owner,
                                    string team_name,
                                    int failures,
                                    string response);


MENU toplevel;
MENU maint;

MENU_ITEM quit_item;
MENU_ITEM main_seperator;
MENU_ITEM help_item;
private string team_name;

void who_current()
{
   string s;
   string array members = TEAM_D->query_team_members(team_name);

   s = sprintf("%%^BOLD%%^%%^WHITE%%^Members of %s%%^RESET%%^%%^MAGENTA%%^:%%^RESET%%^\n", team_name);
   
   printf("%s%%^BOLD%%^%%^BLUE%%^%s\n", s, repeat_string("-", sizeof(s)));
   foreach(string str in members)
   {
      printf("%s\n", str);
   }
   printf("%%^BOLD%%^%%^BLUE%%^%s\n\n", repeat_string("-", sizeof(s)));
}

void team_maint()
{
   return;
}

void team_help()
{
   return;
}

void last_ten_kills()
{
   return;
}

void who_offline()
{
   return;
}

void list_active()
{
   string array active = TEAM_D->list_all_parties();
   string line = sprintf("%%^BOLD%%^%%^BLUE%%^%s%%^RESET%%^",
                    repeat_string("-", 20));

   printf("%%^BOLD%%^%%^WHITE%%^Teams on %s%%^RESET%%^\n", mud_name());
   printf("%s\n  %s\n%s\n\n", line, implode(active, "\n  "), line);
}

void quit_team()
{
   printf("Removing you from %s.. %%^RED%%^done.%%^RESET%%^\n\n", team_name);
   if(sizeof(TEAM_D->query_team_members(team_name)) == 1)
      TEAM_D->remove_team(team_name);
   else
      TEAM_D->remove_member(this_body()->query_name(), team_name);
   quit_menu_application();
}

void start_menu()
{
   team_name = TEAM_D->locate_user(this_body()->query_name());
   toplevel  = new_menu(team_name + " Team Menu");
   maint     = new_menu(team_name + " Maintenance Menu");

   quit_item = new_menu_item("Quit", (: quit_menu_application :), "q");
   main_seperator = new_seperator(repeat_string("-", 34));

   add_menu_item(toplevel, main_seperator);
   add_menu_item(toplevel, new_menu_item("Who is in " + team_name + "?",
                                         (: who_current :), "w"));

   add_menu_item(toplevel, new_menu_item("List all active parties.",
                                         (: list_active :), "a"));

   add_menu_item(toplevel, new_menu_item("List last ten kills. (Disabled)",
                                         (: last_ten_kills :), "k"));

   add_menu_item(toplevel, new_menu_item("List offline team memebers.",
                                         (: who_offline :), "o"));

   if(TEAM_D->query_owner(team_name) == this_body()->query_name())
      add_menu_item(toplevel, new_menu_item("Team maintenance",
                                            (: team_maint :), "m"));

   add_menu_item(toplevel, new_menu_item("QUIT " + team_name + " permanently.",
                                         (: quit_team :), "X"));

   add_menu_item(toplevel, main_seperator);

   add_menu_item(toplevel, new_menu_item("Help!",
                                         (: team_help :), "h"));

   add_menu_item(toplevel, quit_item);

   init_menu_application(toplevel);
}

void confirm_create(string owner, string team_name, string response)
{
   switch(response)
   {
      case "n":
      case "no":
         destruct();
      case "y":
      case "yes":
         modal_simple((: enter_password, owner, team_name, 0 :),
                      "   Enter password: ", 1);
         return;
      default:
         modal_simple((: confirm_create, owner, team_name :),
                      "Enter 'yes' or 'no' please: ", 0);
         return;
   }
}

private void confirm_password(string owner,
                              string team_name, string password,
                              int failures, string response)
{
   if(response != password)
   {
      write("\nPasswords do not match!\n");
      if(++failures == MAX_ATTEMPTS)
      {
         write("Sorry..\n");
         destruct();
      }
      modal_simple((: enter_password, owner, team_name, failures :),
                   "   Enter password: ", 1);
      return;
   }

   TEAM_D->register_team(team_name, owner, password);
   write("\n");
   start_menu();
}

private varargs void enter_password(string owner,
                                    string team_name,
                                    int failures,
                                    string response)
{
   if(!response || response == "")
   {
      write("You must enter a password. And don't forget it!\n");
      if(++failures == MAX_ATTEMPTS)
      {
         write("Sorry.\n");
         destruct();
      }
      modal_simple((: enter_password, owner, team_name, failures :),
                   "   Enter password: ", 1);
      return;
   }

   if(TEAM_D->team_exists(team_name))
   {
      if(!TEAM_D->add_member(owner, team_name, response))
      {
         write("Incorrect password.\n");
         if(++failures == MAX_ATTEMPTS)
         {
            write("Sorry.\n");
            destruct();
         }
         modal_simple((: enter_password, owner, team_name, failures :),
                      "   Enter password: ", 1);
         return;
      }
      failures = 0;
      printf("Joined %s.\n", team_name);
   }
   else
   {
      modal_simple((: confirm_password, owner, team_name,
                      response,  failures :),
                   "\n   Confirm password: ", 1);
      return;
   }

   start_menu();
}

private varargs void enter_team_password(string owner,
                                         string team_name,
                                         int failures,
                                         string response)
{
   write("\n");  // Since we were in secure entry
   if(failures == MAX_ATTEMPTS)
   {
      write("Sorry, you just didn't make the cut.\n");
      destruct();
   }

   if(!TEAM_D->add_member(owner, team_name, response))
   {
      write("Password is incorrect.\n");
      modal_simple((: enter_team_password, owner, team_name, ++failures :),
                   "Try again. Enter password: ");
   }
   else
   {
      write("Congratulations! You've been added to the team!\n");
   }
}

private void enter_team_name(string owner, string response)
{
   if(!response || response == "" || !regexp(response, "^[a-zA-Z]+$"))
   {
      write("Invalid name.\n");
      modal_simple((: enter_team_name, owner :), "   Enter team name: ");
      return;
   }

   if(TEAM_D->team_exists(response))
   {
      printf("%s exists.\n", response);
      modal_simple((: enter_team_password, owner, response, 0 :),
                   "   Enter password: ", 1);
   }
   else
   {
      printf("Team '%s' does not exist. ", response);
      modal_simple((: confirm_create, owner, response :), "Create it? ");
   }
}

private void confirm_join_team(string owner, string response)
{
   response = lower_case(response);

   if(response == "n" || response == "no")
      destruct(this_object());

   if(response == "y" || response == "yes")
   {
      modal_simple((: enter_team_name, owner :), "  Enter team name: ");
   }
}

void join_team()
{
   string owner = this_body()->query_name();

   if(!TEAM_D->locate_user(owner))
   {
      write("You are not a member of any team.\n");
      modal_simple((: confirm_join_team, owner :),
                   "Would you like to join one? ");
   }
   else
   {
      start_menu();
   }
}