dsIIr4/bin/
dsIIr4/extra/creremote/
dsIIr4/extra/wolfpaw/
dsIIr4/lib/cmds/admins/
dsIIr4/lib/cmds/common/
dsIIr4/lib/cmds/creators/include/
dsIIr4/lib/cmds/creators/include/SCCS/
dsIIr4/lib/daemon/services/
dsIIr4/lib/doc/
dsIIr4/lib/domains/Ylsrim/
dsIIr4/lib/domains/Ylsrim/adm/
dsIIr4/lib/domains/Ylsrim/armor/
dsIIr4/lib/domains/Ylsrim/broken/
dsIIr4/lib/domains/Ylsrim/fish/
dsIIr4/lib/domains/Ylsrim/meal/
dsIIr4/lib/domains/Ylsrim/npc/
dsIIr4/lib/domains/Ylsrim/virtual/
dsIIr4/lib/domains/Ylsrim/weapon/
dsIIr4/lib/domains/campus/adm/
dsIIr4/lib/domains/campus/etc/
dsIIr4/lib/domains/campus/meals/
dsIIr4/lib/domains/campus/npc/
dsIIr4/lib/domains/campus/save/
dsIIr4/lib/domains/campus/txt/
dsIIr4/lib/domains/campus/txt/ai/charles/
dsIIr4/lib/domains/campus/txt/ai/charles/bak2/
dsIIr4/lib/domains/campus/txt/ai/charles/bak2/bak1/
dsIIr4/lib/domains/campus/txt/ai/charly/
dsIIr4/lib/domains/campus/txt/ai/charly/bak/
dsIIr4/lib/domains/campus/txt/jenny/
dsIIr4/lib/domains/default/creator/
dsIIr4/lib/domains/default/doors/
dsIIr4/lib/domains/default/etc/
dsIIr4/lib/domains/default/virtual/
dsIIr4/lib/domains/default/weap/
dsIIr4/lib/domains/town/virtual/
dsIIr4/lib/lib/comp/
dsIIr4/lib/lib/lvs/
dsIIr4/lib/lib/user/
dsIIr4/lib/lib/virtual/
dsIIr4/lib/log/
dsIIr4/lib/obj/book_source/
dsIIr4/lib/obj/include/
dsIIr4/lib/realms/template/
dsIIr4/lib/realms/template/adm/
dsIIr4/lib/realms/template/area/armor/
dsIIr4/lib/realms/template/area/npc/
dsIIr4/lib/realms/template/area/obj/
dsIIr4/lib/realms/template/area/room/
dsIIr4/lib/realms/template/area/weap/
dsIIr4/lib/realms/template/bak/
dsIIr4/lib/realms/template/cmds/
dsIIr4/lib/save/
dsIIr4/lib/save/kills/o/
dsIIr4/lib/secure/cfg/classes/
dsIIr4/lib/secure/cmds/creators/include/
dsIIr4/lib/secure/cmds/players/
dsIIr4/lib/secure/cmds/players/include/
dsIIr4/lib/secure/daemon/include/
dsIIr4/lib/secure/lib/
dsIIr4/lib/secure/lib/include/
dsIIr4/lib/secure/lib/net/include/
dsIIr4/lib/secure/lib/std/
dsIIr4/lib/secure/modules/
dsIIr4/lib/secure/npc/
dsIIr4/lib/secure/obj/include/
dsIIr4/lib/secure/room/
dsIIr4/lib/secure/save/
dsIIr4/lib/secure/save/boards/
dsIIr4/lib/secure/save/players/g/
dsIIr4/lib/secure/tmp/
dsIIr4/lib/secure/verbs/creators/
dsIIr4/lib/shadows/
dsIIr4/lib/spells/
dsIIr4/lib/std/board/
dsIIr4/lib/std/lib/
dsIIr4/lib/tmp/
dsIIr4/lib/verbs/admins/include/
dsIIr4/lib/verbs/common/
dsIIr4/lib/verbs/common/include/
dsIIr4/lib/verbs/creators/include/
dsIIr4/lib/verbs/players/include/SCCS/
dsIIr4/lib/verbs/rooms/
dsIIr4/lib/verbs/rooms/include/
dsIIr4/lib/www/
dsIIr4/v22.2b14-dsouls2/
dsIIr4/v22.2b14-dsouls2/ChangeLog.old/
dsIIr4/v22.2b14-dsouls2/Win32/
dsIIr4/v22.2b14-dsouls2/compat/
dsIIr4/v22.2b14-dsouls2/compat/simuls/
dsIIr4/v22.2b14-dsouls2/include/
dsIIr4/v22.2b14-dsouls2/mudlib/
dsIIr4/v22.2b14-dsouls2/testsuite/
dsIIr4/v22.2b14-dsouls2/testsuite/clone/
dsIIr4/v22.2b14-dsouls2/testsuite/command/
dsIIr4/v22.2b14-dsouls2/testsuite/data/
dsIIr4/v22.2b14-dsouls2/testsuite/etc/
dsIIr4/v22.2b14-dsouls2/testsuite/include/
dsIIr4/v22.2b14-dsouls2/testsuite/inherit/
dsIIr4/v22.2b14-dsouls2/testsuite/inherit/master/
dsIIr4/v22.2b14-dsouls2/testsuite/log/
dsIIr4/v22.2b14-dsouls2/testsuite/single/
dsIIr4/v22.2b14-dsouls2/testsuite/single/tests/compiler/
dsIIr4/v22.2b14-dsouls2/testsuite/single/tests/efuns/
dsIIr4/v22.2b14-dsouls2/testsuite/single/tests/operators/
dsIIr4/v22.2b14-dsouls2/testsuite/u/
dsIIr4/v22.2b14-dsouls2/tmp/
dsIIr4/win32/
/*    /domains/Ylsrim/npc/leader.c
 *    from the Dead Souls Object Library
 *    class leader inheritable
 *    created by Descartes of Borg 951115
 *    Version: @(#) leader.c 1.5@(#)
 *    Last modified: 96/11/24
 */

#include <lib.h>
#include <daemons.h>
#include <message_class.h>
#include "include/leader.h"

inherit LIB_SENTIENT;

int eventTeachPlayer(object who, string spell);

static void create() {
    sentient::create();
}

mixed eventAsk(object who, string str) {
    string cmd, args;
    mixed tmp;

    if( (tmp = sentient::eventAsk(who, str)) == 1 ) return 1;
    if( !str || str == "" ) {
	eventForce("speak ask me to what? To describe " + GetClass() + "s?");
	return 1;
    }
    if( sscanf(str, "%s %s", cmd, args) != 2 ) {
	cmd = str;
	args = 0;
    }
    switch(cmd) {
    case "describe": case "preview": case "explain":
	eventPreview(who, args);
	break;

    case "convert":
	eventConvert(who, args);
	break;

    case "join": case "become": case "be":
	eventJoin(who, args);
	break;

    case "teach":
	eventTeachPlayer(who, args);
	break;

    default:
	eventForce("speak I am not sure what you want");
	if( who->GetClass() ) {
	    eventForce("speak do you mean to ask me to teach a spell?");
	}
	else {
	    eventForce("speak do you mean to ask me to describe " +
	      pluralize(GetClass()) + "?");
	}
	break;
    }
    return 1;
}

void eventConvert(object who, string args) {
    if( GetSkillLevel("faith") < 1 ) {
	eventForce("speak I don't do conversions");
	return;
    }
    if( !args || args == "" ) {
	eventForce("speak convert whom?");
	return;
    }
    if( args != "me" ) {
	object ob;

	ob = present(args, environment());
	if( !ob ) {
	    eventForce("speak I don't see any such thing here");
	    return;
	}
	if( !living(ob) ) {
	    eventForce("laugh");
	    eventForce("speak would like to worsip some cheese too?");
	    return;
	}
	if( ob != who ) {
	    eventForce("speak " + (string)ob->GetName() + " must request "
	      "conversion of " + possessive(ob) + " own free will.");
	    return;
	}
    }
    who->SetProperty("converting", GetReligion(1));
    eventForce("speak I will give it a try, I hope my faith servers me");
    call_out((: eventForce("convert " + (string)($(who))->GetKeyName()) :), 1);
}

void eventPreview(object who, string args) {
    if( args ) args = remove_article(lower_case(args));
    if( args && args != "" && args != GetClass() ) {
	if( args[0..<2] != GetClass() ) {
	    eventForce("speak You want me to describe what?");
	    return;
	}
    }
    who->eventPage(DIR_CLASS_HELP "/" + GetClass(), MSG_HELP);
}

void eventJoin(object who, string args) {
    if( !args || args == "" ) {
	eventForce("speak Do you mean you wish to become " +
	  add_article(GetClass()) + "?");
	return;
    }
    args = remove_article(lower_case(args));
    if( args != GetClass() && args[0..<2] != GetClass() && args != pluralize(GetClass()) ) {
	eventForce("speak you want me to make you a what?");
	eventForce("speak people only ask me to join the " +
	  pluralize(GetClass()));
	return;
    }
    if( (int)who->ClassMember(GetClass()) ) {
	eventForce("speak You are already " + add_article(GetClass()));
	return;
    }
    if( (string)who->GetClass() == (string)who->SetClass(GetClass()) ) {
	eventForce("speak You cannot become " + add_article(GetClass()) + "!");
	eventForce("attack " + (string)who->GetKeyName());
	return;
    }
    if( !((string)who->GetReligion()) && GetReligion() )
	who->SetReligion(GetReligion(0), GetReligion(1));
    environment()->eventPrint(GetName() + " makes " + (string)who->GetName() +
      " " + add_article(GetClass()) + ".",
      ({ who, this_object() }));
    eventForce("speak welcome new " + GetClass() + "!");
    eventForce("speak Inside this hall, you will find sanctuary.");
    eventForce(GetClass() + " " + (string)who->GetName() +
      " just joined our ranks!");
    who->SetShort("foo");  /* reset title */
    return;
}

int eventPreAttack(object ob) {
    if( member_array(ob, GetEnemies()) > -1 ) return sentient::eventPreAttack(ob);
    eventForce(GetClass() + " " + pluralize(GetClass()) + "! Our home is " 
      "being raided by " + (string)ob->GetName() + "!");
    return sentient::eventPreAttack(ob);
}

int eventTeachPlayer(object who, string spell) {
    object ob = SPELLS_D->GetSpell(spell);

    if( ob ) {
	foreach(string skill in ob->GetSkills()) {
	    if( GetSkillLevel(skill) < ob->GetRequiredSkill(skill) ) {
		eventForce("speak I don't know " + spell + ".");
		return 1;
	    }
	}
	if( !who->eventLearnSpell(spell) ) {
	    eventForce("speak You are not prepared for that spell!");
	    return 1;
	}
	who->eventPrint(GetName() + " touches your forehead and gives "
	  "you knowledge of " + spell + ".");
	environment()->eventPrint(GetName() + " touches " +
	  possessive_noun(who) +
	  " forehead and gives " +
	  objective(who) + " knowledge of " +
	  spell + ".", who);
	return 1;
    }
    else {
	eventForce("speak I have never heard of such a spell");
	return 1;
    }
}