dsI/bin/
dsI/extra/creremote/
dsI/extra/mingw/
dsI/extra/wolfpaw/
dsI/fluffos-2.7-ds2.018/
dsI/fluffos-2.7-ds2.018/ChangeLog.old/
dsI/fluffos-2.7-ds2.018/Win32/
dsI/fluffos-2.7-ds2.018/compat/
dsI/fluffos-2.7-ds2.018/compat/simuls/
dsI/fluffos-2.7-ds2.018/testsuite/
dsI/fluffos-2.7-ds2.018/testsuite/clone/
dsI/fluffos-2.7-ds2.018/testsuite/command/
dsI/fluffos-2.7-ds2.018/testsuite/data/
dsI/fluffos-2.7-ds2.018/testsuite/etc/
dsI/fluffos-2.7-ds2.018/testsuite/include/
dsI/fluffos-2.7-ds2.018/testsuite/inherit/
dsI/fluffos-2.7-ds2.018/testsuite/inherit/master/
dsI/fluffos-2.7-ds2.018/testsuite/log/
dsI/fluffos-2.7-ds2.018/testsuite/single/
dsI/fluffos-2.7-ds2.018/testsuite/single/tests/compiler/
dsI/fluffos-2.7-ds2.018/testsuite/single/tests/efuns/
dsI/fluffos-2.7-ds2.018/testsuite/single/tests/operators/
dsI/fluffos-2.7-ds2.018/testsuite/u/
dsI/fluffos-2.7-ds2.018/tmp/
dsI/lib/cfg/
dsI/lib/cmds/common/
dsI/lib/cmds/creators/include/
dsI/lib/cmds/creators/include/SCCS/
dsI/lib/daemon/services/
dsI/lib/doc/
dsI/lib/domains/Ylsrim/
dsI/lib/domains/Ylsrim/adm/
dsI/lib/domains/Ylsrim/armour/
dsI/lib/domains/Ylsrim/broken/
dsI/lib/domains/Ylsrim/fish/
dsI/lib/domains/Ylsrim/meal/
dsI/lib/domains/Ylsrim/npc/
dsI/lib/domains/Ylsrim/virtual/
dsI/lib/domains/Ylsrim/weapon/
dsI/lib/domains/default/creator/
dsI/lib/domains/default/etc/
dsI/lib/domains/default/room/
dsI/lib/lib/comp/
dsI/lib/lib/lvs/
dsI/lib/lib/user/
dsI/lib/lib/virtual/
dsI/lib/obj/
dsI/lib/obj/include/
dsI/lib/realms/
dsI/lib/save/kills/a/
dsI/lib/save/kills/b/
dsI/lib/save/kills/f/
dsI/lib/save/kills/m/
dsI/lib/save/kills/q/
dsI/lib/save/kills/r/
dsI/lib/secure/cfg/
dsI/lib/secure/cfg/classes/
dsI/lib/secure/cfg/races/SCCS/
dsI/lib/secure/cmds/creators/include/
dsI/lib/secure/cmds/players/
dsI/lib/secure/cmds/players/include/
dsI/lib/secure/daemon/include/
dsI/lib/secure/lib/
dsI/lib/secure/lib/include/
dsI/lib/secure/lib/net/
dsI/lib/secure/lib/net/include/
dsI/lib/secure/lib/std/
dsI/lib/secure/obj/
dsI/lib/secure/obj/include/
dsI/lib/secure/save/
dsI/lib/spells/
dsI/lib/verbs/admins/include/
dsI/lib/verbs/common/
dsI/lib/verbs/common/include/
dsI/lib/verbs/creators/
dsI/lib/verbs/creators/include/
dsI/lib/verbs/players/include/SCCS/
dsI/lib/verbs/rooms/
dsI/lib/verbs/rooms/include/
dsI/lib/www/
dsI/v22.2b14/
dsI/win32/
/*    /domains/Ylsrim/npc/leader.c
 *    from the Dead Soulsr2 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 no 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;
    }
}