mud/lib/domains/campus/npc/kleiner.c
2020-09-06 05:43:07 -07:00

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;
}