/* team.c - Zeus (13/01/1993)
// this is the team object inherited by living.c
// based on Lars's team object for mudlib 2.4.5
*/
static object *members;
static string leader_name;
int init_team ();
int add_member (object mem);
void move_team (object env);
void disband_team ();
int disband_member (object mem);
int list_members (string name);
int init_team() {
if(leader_name) {
notify_fail("You are already leader of a team.\n");
return 0;
}
members = ({});
leader_name = this_player()->query("cap_name");
this_player()->set("leader", leader_name);
tell_object(this_player(), "You start a new team.\n");
shout(leader_name+" starts a new team.\n");
return 1;
}
void check_team() {
object ob;
if(this_object()->query("leader") &&
this_object()->query("leader") == this_object()->query("cap_name")) {
disband_team();
return;
}
if(this_object()->query("leader") &&
this_object()->query("leader") != this_object()->query("cap_name")) {
ob = find_living(lower_case((string)this_object()->query("leader")));
ob->disband_member(this_object());
}
}
int add_member(object mem) {
int i;
i = member_array(mem, members);
if(i > -1) {
notify_fail("You are already member of a team.\n");
return 0;
}
members = ({ mem }) + members;
mem->set("leader", leader_name);
return 1;
}
void move_team(object env) {
int i;
if(!pointerp(members) || sizeof(members) == 0) return;
for(i = 0; i < sizeof(members); i++) {
if(environment(members[i]) != env) {
tell_object(members[i], "Your team moves without you.\n");
}
else {
members[i]->move_player(environment(this_object()), members[i]->query("cap_name")+
" follows "+this_object()->query("cap_name"));
tell_object(members[i], "You follow "+leader_name+".\n");
tell_object(this_object(), members[i]->query("cap_name")+" arrives.\n");
}
}
}
void disband_team() {
int i;
if(!pointerp(members)) return;
if(!leader_name) return;
for(i = 0; i < sizeof(members); i++) {
members[i]->set("leader", 0);
tell_object(members[i], "Your team has been disbanded by "+leader_name+"\n");
}
this_object()->set("leader", 0);
members = 0;
leader_name = 0;
}
int disband_member(object mem) {
int i;
i = member_array(mem, members);
if(i == -1) {
notify_fail("This person is not a member of your team.\n");
return 0;
}
members[i]->set("leader", 0);
members = members - ({ members[i] });
return 1;
}
int list_members(object ob) {
int i;
if(sizeof(members) > 0) {
tell_object(ob, "Your team has "+(sizeof(members)+1)+" members.\n");
}
else {
tell_object(ob, "Your team has "+(sizeof(members)+1)+" member.\n");
}
tell_object(ob, leader_name+" [Leader]\n");
for(i = 0; i < sizeof(members); i++) {
tell_object(ob, members[i]->query("cap_name")+"\n");
}
return 1;
}