/* 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();
}
}