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