ds2.9a12/bin/
ds2.9a12/extra/
ds2.9a12/extra/crat/
ds2.9a12/extra/creremote/
ds2.9a12/extra/mingw/
ds2.9a12/extra/wolfpaw/
ds2.9a12/fluffos-2.14-ds13/
ds2.9a12/fluffos-2.14-ds13/Win32/
ds2.9a12/fluffos-2.14-ds13/compat/
ds2.9a12/fluffos-2.14-ds13/compat/simuls/
ds2.9a12/fluffos-2.14-ds13/include/
ds2.9a12/fluffos-2.14-ds13/testsuite/
ds2.9a12/fluffos-2.14-ds13/testsuite/clone/
ds2.9a12/fluffos-2.14-ds13/testsuite/command/
ds2.9a12/fluffos-2.14-ds13/testsuite/data/
ds2.9a12/fluffos-2.14-ds13/testsuite/etc/
ds2.9a12/fluffos-2.14-ds13/testsuite/include/
ds2.9a12/fluffos-2.14-ds13/testsuite/inherit/
ds2.9a12/fluffos-2.14-ds13/testsuite/inherit/master/
ds2.9a12/fluffos-2.14-ds13/testsuite/log/
ds2.9a12/fluffos-2.14-ds13/testsuite/single/
ds2.9a12/fluffos-2.14-ds13/testsuite/single/tests/compiler/
ds2.9a12/fluffos-2.14-ds13/testsuite/single/tests/efuns/
ds2.9a12/fluffos-2.14-ds13/testsuite/single/tests/operators/
ds2.9a12/fluffos-2.14-ds13/testsuite/u/
ds2.9a12/lib/cmds/admins/
ds2.9a12/lib/cmds/common/
ds2.9a12/lib/cmds/creators/include/
ds2.9a12/lib/daemon/services/
ds2.9a12/lib/daemon/tmp/
ds2.9a12/lib/doc/
ds2.9a12/lib/doc/bguide/
ds2.9a12/lib/doc/efun/all/
ds2.9a12/lib/doc/efun/arrays/
ds2.9a12/lib/doc/efun/buffers/
ds2.9a12/lib/doc/efun/compile/
ds2.9a12/lib/doc/efun/floats/
ds2.9a12/lib/doc/efun/functions/
ds2.9a12/lib/doc/efun/general/
ds2.9a12/lib/doc/efun/mixed/
ds2.9a12/lib/doc/efun/numbers/
ds2.9a12/lib/doc/efun/parsing/
ds2.9a12/lib/doc/hbook/
ds2.9a12/lib/doc/help/classes/
ds2.9a12/lib/doc/help/races/
ds2.9a12/lib/doc/lfun/
ds2.9a12/lib/doc/lfun/all/
ds2.9a12/lib/doc/lfun/lib/abilities/
ds2.9a12/lib/doc/lfun/lib/armor/
ds2.9a12/lib/doc/lfun/lib/bank/
ds2.9a12/lib/doc/lfun/lib/bot/
ds2.9a12/lib/doc/lfun/lib/clay/
ds2.9a12/lib/doc/lfun/lib/clean/
ds2.9a12/lib/doc/lfun/lib/clerk/
ds2.9a12/lib/doc/lfun/lib/client/
ds2.9a12/lib/doc/lfun/lib/combat/
ds2.9a12/lib/doc/lfun/lib/connect/
ds2.9a12/lib/doc/lfun/lib/container/
ds2.9a12/lib/doc/lfun/lib/corpse/
ds2.9a12/lib/doc/lfun/lib/creator/
ds2.9a12/lib/doc/lfun/lib/daemon/
ds2.9a12/lib/doc/lfun/lib/damage/
ds2.9a12/lib/doc/lfun/lib/deterioration/
ds2.9a12/lib/doc/lfun/lib/donate/
ds2.9a12/lib/doc/lfun/lib/door/
ds2.9a12/lib/doc/lfun/lib/equip/
ds2.9a12/lib/doc/lfun/lib/file/
ds2.9a12/lib/doc/lfun/lib/fish/
ds2.9a12/lib/doc/lfun/lib/fishing/
ds2.9a12/lib/doc/lfun/lib/flashlight/
ds2.9a12/lib/doc/lfun/lib/follow/
ds2.9a12/lib/doc/lfun/lib/ftp_client/
ds2.9a12/lib/doc/lfun/lib/ftp_data_connection/
ds2.9a12/lib/doc/lfun/lib/fuel/
ds2.9a12/lib/doc/lfun/lib/furnace/
ds2.9a12/lib/doc/lfun/lib/genetics/
ds2.9a12/lib/doc/lfun/lib/holder/
ds2.9a12/lib/doc/lfun/lib/id/
ds2.9a12/lib/doc/lfun/lib/interactive/
ds2.9a12/lib/doc/lfun/lib/lamp/
ds2.9a12/lib/doc/lfun/lib/leader/
ds2.9a12/lib/doc/lfun/lib/light/
ds2.9a12/lib/doc/lfun/lib/limb/
ds2.9a12/lib/doc/lfun/lib/living/
ds2.9a12/lib/doc/lfun/lib/load/
ds2.9a12/lib/doc/lfun/lib/look/
ds2.9a12/lib/doc/lfun/lib/manipulate/
ds2.9a12/lib/doc/lfun/lib/meal/
ds2.9a12/lib/doc/lfun/lib/messages/
ds2.9a12/lib/doc/lfun/lib/player/
ds2.9a12/lib/doc/lfun/lib/poison/
ds2.9a12/lib/doc/lfun/lib/position/
ds2.9a12/lib/doc/lfun/lib/post_office/
ds2.9a12/lib/doc/lfun/lib/potion/
ds2.9a12/lib/doc/lfun/lib/room/
ds2.9a12/lib/doc/lfun/lib/server/
ds2.9a12/lib/doc/lfun/lib/spell/
ds2.9a12/lib/doc/lfun/lib/torch/
ds2.9a12/lib/doc/lfun/lib/vendor/
ds2.9a12/lib/doc/lfun/lib/virt_sky/
ds2.9a12/lib/doc/lfun/lib/weapon/
ds2.9a12/lib/doc/lfun/lib/worn_storage/
ds2.9a12/lib/doc/lpc/basic/
ds2.9a12/lib/doc/lpc/concepts/
ds2.9a12/lib/doc/lpc/constructs/
ds2.9a12/lib/doc/lpc/etc/
ds2.9a12/lib/doc/lpc/intermediate/
ds2.9a12/lib/doc/lpc/types/
ds2.9a12/lib/doc/misc/
ds2.9a12/lib/doc/old/
ds2.9a12/lib/domains/
ds2.9a12/lib/domains/Praxis/adm/
ds2.9a12/lib/domains/Praxis/attic/
ds2.9a12/lib/domains/Praxis/cemetery/mon/
ds2.9a12/lib/domains/Praxis/data/
ds2.9a12/lib/domains/Praxis/death/
ds2.9a12/lib/domains/Praxis/mountains/
ds2.9a12/lib/domains/Praxis/obj/armour/
ds2.9a12/lib/domains/Praxis/obj/magic/
ds2.9a12/lib/domains/Praxis/obj/weapon/
ds2.9a12/lib/domains/Praxis/orc_valley/
ds2.9a12/lib/domains/Ylsrim/
ds2.9a12/lib/domains/Ylsrim/adm/
ds2.9a12/lib/domains/Ylsrim/armor/
ds2.9a12/lib/domains/Ylsrim/broken/
ds2.9a12/lib/domains/Ylsrim/fish/
ds2.9a12/lib/domains/Ylsrim/meal/
ds2.9a12/lib/domains/Ylsrim/npc/
ds2.9a12/lib/domains/Ylsrim/obj/
ds2.9a12/lib/domains/Ylsrim/virtual/
ds2.9a12/lib/domains/Ylsrim/weapon/
ds2.9a12/lib/domains/campus/adm/
ds2.9a12/lib/domains/campus/etc/
ds2.9a12/lib/domains/campus/meals/
ds2.9a12/lib/domains/campus/save/
ds2.9a12/lib/domains/campus/txt/ai/charles/
ds2.9a12/lib/domains/campus/txt/ai/charles/bak2/
ds2.9a12/lib/domains/campus/txt/ai/charles/bak2/bak1/
ds2.9a12/lib/domains/campus/txt/ai/charly/
ds2.9a12/lib/domains/campus/txt/ai/charly/bak/
ds2.9a12/lib/domains/campus/txt/jenny/
ds2.9a12/lib/domains/cave/doors/
ds2.9a12/lib/domains/cave/etc/
ds2.9a12/lib/domains/cave/meals/
ds2.9a12/lib/domains/cave/weap/
ds2.9a12/lib/domains/default/creator/
ds2.9a12/lib/domains/default/doors/
ds2.9a12/lib/domains/default/etc/
ds2.9a12/lib/domains/default/vehicles/
ds2.9a12/lib/domains/default/virtual/
ds2.9a12/lib/domains/default/weap/
ds2.9a12/lib/domains/town/txt/shame/
ds2.9a12/lib/domains/town/virtual/
ds2.9a12/lib/domains/town/virtual/bottom/
ds2.9a12/lib/domains/town/virtual/space/
ds2.9a12/lib/estates/
ds2.9a12/lib/ftp/
ds2.9a12/lib/lib/comp/
ds2.9a12/lib/lib/daemons/
ds2.9a12/lib/lib/daemons/include/
ds2.9a12/lib/lib/lvs/
ds2.9a12/lib/lib/user/
ds2.9a12/lib/lib/virtual/
ds2.9a12/lib/log/
ds2.9a12/lib/log/adm/
ds2.9a12/lib/log/archive/
ds2.9a12/lib/log/chan/
ds2.9a12/lib/log/errors/
ds2.9a12/lib/log/law/adm/
ds2.9a12/lib/log/law/email/
ds2.9a12/lib/log/law/names/
ds2.9a12/lib/log/law/sites-misc/
ds2.9a12/lib/log/law/sites-register/
ds2.9a12/lib/log/law/sites-tempban/
ds2.9a12/lib/log/law/sites-watch/
ds2.9a12/lib/log/open/
ds2.9a12/lib/log/reports/
ds2.9a12/lib/log/router/
ds2.9a12/lib/log/secure/
ds2.9a12/lib/log/watch/
ds2.9a12/lib/obj/book_source/
ds2.9a12/lib/obj/include/
ds2.9a12/lib/powers/prayers/
ds2.9a12/lib/powers/spells/
ds2.9a12/lib/realms/template/adm/
ds2.9a12/lib/realms/template/area/armor/
ds2.9a12/lib/realms/template/area/npc/
ds2.9a12/lib/realms/template/area/obj/
ds2.9a12/lib/realms/template/area/room/
ds2.9a12/lib/realms/template/area/weap/
ds2.9a12/lib/realms/template/bak/
ds2.9a12/lib/realms/template/cmds/
ds2.9a12/lib/save/kills/o/
ds2.9a12/lib/secure/cfg/classes/
ds2.9a12/lib/secure/cmds/builders/
ds2.9a12/lib/secure/cmds/creators/include/
ds2.9a12/lib/secure/cmds/players/
ds2.9a12/lib/secure/cmds/players/include/
ds2.9a12/lib/secure/daemon/imc2server/
ds2.9a12/lib/secure/daemon/include/
ds2.9a12/lib/secure/lib/
ds2.9a12/lib/secure/lib/include/
ds2.9a12/lib/secure/lib/net/include/
ds2.9a12/lib/secure/lib/std/
ds2.9a12/lib/secure/log/adm/
ds2.9a12/lib/secure/log/bak/
ds2.9a12/lib/secure/log/intermud/
ds2.9a12/lib/secure/log/network/
ds2.9a12/lib/secure/modules/
ds2.9a12/lib/secure/npc/
ds2.9a12/lib/secure/obj/include/
ds2.9a12/lib/secure/room/
ds2.9a12/lib/secure/save/
ds2.9a12/lib/secure/save/backup/
ds2.9a12/lib/secure/save/boards/
ds2.9a12/lib/secure/tmp/
ds2.9a12/lib/secure/upgrades/files/
ds2.9a12/lib/secure/verbs/creators/
ds2.9a12/lib/std/board/
ds2.9a12/lib/std/lib/
ds2.9a12/lib/tmp/
ds2.9a12/lib/verbs/admins/include/
ds2.9a12/lib/verbs/builders/
ds2.9a12/lib/verbs/common/
ds2.9a12/lib/verbs/common/include/
ds2.9a12/lib/verbs/creators/
ds2.9a12/lib/verbs/creators/include/
ds2.9a12/lib/verbs/rooms/
ds2.9a12/lib/verbs/rooms/include/
ds2.9a12/lib/www/client/
ds2.9a12/lib/www/errors/
ds2.9a12/lib/www/images/
ds2.9a12/lib/www/lpmuds/downloads_files/
ds2.9a12/lib/www/lpmuds/intermud_files/
ds2.9a12/lib/www/lpmuds/links_files/
ds2.9a12/win32/
#include <lib.h>

inherit LIB_SENTIENT;

varargs int ReceiveCoat(mixed already, object who){
    if(already > 1){
        eventForce("say uh...no thanks. I'm set.");
        eventForce("drop a coat");
    }
    else {
        string noun;
        switch(who->GetGender()){
        case "male" : noun = "lad";break;
        case "female" : noun = "lass";break;
        default : noun = who->GetRace();break;
        }
        call_out("eventForce",1,"say Excellent! Well done, young "+noun+"!");
        call_out("eventForce",2,"remove badge");
        call_out("eventForce",3,"emote fumbles awkwardly with the coat.");
        call_out("eventForce",4,"drop badge");
        call_out("eventForce",5,"wear coat");
        call_out("eventForce",6,"say Ahh, much better. Thank you!");
    }
    return 1;
}

int EncounterResponse(int i){
    if(!i) i = random(i)+2;
    switch(i){
    case 1 : 
        eventForce("yell DON'T SHOOT! I'M WITH THE SCIENCE TEAM!");break;
    case 2 :
        eventForce("emote scratches his head thoughtfully.");break;
    case 3 :
        eventForce("frown");break;
    case 4 :
        eventForce("hmm");break;
    default :
        eventForce("emote nods thoughtfully.");break;
    }
    return 1;
}

int CheckResponse(){
    eventForce("say I think you can see I'm busy.");
    if(!present("lab coat",this_object())){
        eventForce("say Say, I don't suppose you could find "+
          "my lab coat for me? I just don't have time to go "+
          "looking for it right now!");
    }
    return 1;
}

int EncounterCheck(mixed who){
    object *inv;
    if(!objectp(who) || !living(who)) return 0;
    inv = filter(all_inventory(who), (: inherits(LIB_FIREARM, $1) :));
    inv = filter(inv, (: sizeof($1->GetWorn()) :));
    if(sizeof(inv)){
        call_out("EncounterResponse",0,1);
    }
    else call_out("EncounterResponse",4,random(4)+2);
    return 0;
} 

static void create() {
    sentient::create();
    SetKeyName("kleiner");
    SetId(({"npc","mob","character","scientist","genius"}));
    SetAdjectives(({"old", "white haired","beloved"}));
    SetShort("Dr. Kleiner");
    SetLong("An old, white-haired scientist, Dr. Isaac Kleiner is a beloved campus personality with his affable, kind nature and genius for exotechnology.");
    SetPacifist(1);
    SetInventory(([
        "/domains/campus/obj/omni" : 1,
        "/domains/campus/armor/badge2" : "wear badge",
      ]));
    SetLevel(10);
    SetWimpy(95);
    SetRace("human");
    SetGender("male");
    SetLanguage("common",100);
    SetDefaultLanguage("common");
    SetConsultResponses( ([ 
        "default" : (: CheckResponse :),
        ({ "gate", "gates", "stargate", "stargates", "portal", "portals" }) :
        "Fascinating, aren't they? A legacy of some highly advanced "+ 
        "civilization. Be very careful if you enter one!",
        ({ "door", "badge", "sliding door" }) : "Oh yes, the security "+
        "door. Sorry, only badged employees like me have access to "+
        "the hazardous materials lab.",
        ({ "hazardous materials lab", "materials lab", "lab" }) :
        "I wouldn't try to get in there if I were you. The "+
        "artifacts there can be too powerful for the unskilled.",
      ]) );
    SetRequestResponses( ([
        "default" : (: CheckResponse :),
        ({"a good grade","good grades"}) : "Those are yours to earn.",
      ]) );
    SetTalkResponses( ([ 
        ({"hi","hello","kleiner" }) : "I'm sorry, young person, but "+
        "I'm terribly, terribly busy analyzing this fascinating "+
        "alien teleportation technology.",
      ]) );
    SetEncounter( (: EncounterCheck :) );
}

void init(){
    ::init();
}

int eventFreakout(mixed agent){
    string name;
    if(stringp(agent)) name = agent;
    if(objectp(agent)) name = agent->GetName();
    else name = "young person";
    if(!this_object()->GetDying()){
        if(present("omni", this_object())){
            eventForce("yell OH MY GOD! THEY'LL KILL US ALL!");
            eventForce("push button on omni");
        }
        else if(objectp(agent)){
            int utterance = random(5)+1;
            switch(utterance){
            case 1 :
                eventForce("yell "+name+", stop this madness at once!");
                break;
            case 2 :
                eventForce("yell What are you doing, "+name+
                  "? I am your *friend*!");
                break;  
            case 3 :
                eventForce("yell Fine! Fine! I'll give you an A!");
                break;
            case 4 :
                eventForce("yell Oh God, "+name+
                  ", I don't want to die!");
                break;
            case 5 :
                eventForce("yell Please don't kill me, "+name+"!");
                break;
            default :
                eventForce("kneel");
                eventForce("say I'm praying to you! Look in your heart!");
                break;
            }
        }
        else {
            int utterance = random(5)+1;
            switch(utterance){
            case 1 : 
                eventForce("say I hope someone is taking notes on "+
                  agent+". I wouldn't want my death to be in vain.");
                break;
            case 2 :
                eventForce("say If I don't survive "+agent+
                  ", please promise me you'll take care of Lamarr.");
                break;
            default :
                eventForce("emote whimpers.");
            }
        }
    }
    return 1;
}

varargs int eventReceiveDamage(mixed agent, int type, int x, int internal,
  mixed limbs){
    call_out("eventFreakout",0,agent);
    return ::eventReceiveDamage(agent, type, x, internal, limbs);
}

int eventReceiveObject(object ob) {
    int howmany = sizeof(filter(all_inventory(this_object()),
        (: answers_to("lab coat",$1) :) ));
    if( !ob || !::eventReceiveObject(ob) ) return 0;
    if(answers_to("lab coat",ob)){
        call_out("ReceiveCoat", 0, howmany, this_player());
    }
    return 1;
}