184 lines
6.3 KiB
C
184 lines
6.3 KiB
C
#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() {
|
|
::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);
|
|
SetLevel(10);
|
|
SetWimpy(95);
|
|
SetRace("human");
|
|
SetGender("male");
|
|
SetEncounter( (: EncounterCheck :) );
|
|
SetInventory(([
|
|
"/domains/campus/obj/omni" : 1,
|
|
"/domains/campus/armor/badge2" : "wear badge",
|
|
]));
|
|
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.",
|
|
]) );
|
|
}
|
|
|
|
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;
|
|
}
|