ES2 MUD LIB :: 東方故事二(ES2) 天朝帝國 mudlib 瀏覽展示

/feature/char/team.c

HOME :: feature :: char :: team.c
/*  team.c

    Copyright (C) 1994-2000 Annihilator 

    This program is a part of ES2 mudlib. Permission is granted to use,
    modify, copy or distribute this program provided this copyright notice
    remains intact and subject to the restriction that this program MAY
    NOT be used in any way for monetary gain.

    Details of terms and conditions is available in the Copyright.ES2 file.
    If you don't receive this file along with this program, write to the
    primary author of ES2 mudlib: Annihilator 
*/

#include 
#include 
#include 
#include 

void do_chat(mixed);
object query_charging();
varargs int is_fighting(object);
void clean_up_enemy();
void reset_time_unit();

static object leader, *team;

int set_leader(object ob)
{
    if( ob==this_object() )
        error("set_leader: Cannot set this_object() as leader.\n");
    leader = ob;
}

object query_leader() { return leader; }

// follow_me()
//
// this function is called by "go" command when a character leaves a room.
int follow_me(object ob, string dir)
{
    if( ((ob != leader) && (ob != query_charging()))
    || !living(this_object())
    || !living(ob) )
return 0;

    clean_up_enemy();

    if( command("go " + dir) ) return 1;
    tell_object(this_object(), HIG "你跟丟" + ob->name() + "了。\n" NOR);
    return 0;
}

int add_team_member(object ob)
{
    object member;

    if( ob==this_object() ) return 0;

    if( arrayp(team) ) {
if( member_array(ob, team)==-1 ) team += ({ ob });
    } else
        team = ({ this_object(), ob });

    foreach(member in team) member->set_team(team);

    return 1;
}

int
is_team_leader()
{
    return arrayp(team) && team[0]==this_object();
}

int
set_team(mixed t)
{
    team = t;
}

int
dismiss_team()
{
    int i;
    object member;

    if( !arrayp(team) ) return 0;
    
    if( team[0]==this_object() ) {
/* 這個物件是領隊:解散整個隊伍 */
foreach(member in team) member->set_team(0);
team = 0;
    } else {
/* 這個物件不是領隊:離開隊伍 */
team -= ({ this_object() });
foreach(member in team) member->set_team(team);
team = 0;
    }

    return 1;
}

object*
query_team()
{
    return team;
}

HOME :: feature :: char :: team.c