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

120 lines
4.4 KiB
C

#include <lib.h>
#include <position.h>
inherit LIB_BARKEEP;
string array flatterers, specials;
string save_str = "";
string saved_str = "";
mixed NoKill(object attacker);
int FlatterResponse(mixed args...){
string who = args[0]->GetKeyName();
if(member_array(who, flatterers) == -1){
flatterers += ({ args[0]->GetKeyName() });
flatterers = distinct_array(flatterers);
save_str = save_variable(flatterers);
unguarded( (: write_file("/domains/town/save/brandy.o", save_str, 1) :) );
args[0]->AddExperiencePoints(300);
}
this_object()->eventForce("say Thank you, "+args[0]->GetName()+". Feel free to ask me "+
"for my special menu.");
return 1;
}
string LongDesc(mixed args){
string str = "";
object looker = this_player();
str = "With eyes that could steal a sailor from the sea, Brandy "+
"works in this harbor town laying whiskey down, fetching round "+
"after round for her fiercely loyal clientele.";
if(member_array(looker->GetKeyName(), flatterers) != -1){
str += " You are allowed to ask her for her special menu: ask brandy for special menu";
}
else {
str += " Word is that she's receptive to flattery.";
}
return str;
}
static void create() {
barkeep::create();
flatterers = ({});
unguarded( (: saved_str = read_file("/domains/town/save/brandy.o") :) );
if(sizeof(saved_str)) flatterers = restore_variable(saved_str);
SetKeyName("brandy");
SetAdjectives( ({ "bar", "fine", "bartender", "keeper", "good", "serving" }) );
SetId( ({ "brandy", "barmaid", "barkeep", "bartender", "keeper", "girl", "wench", "maid" }) );
SetShort("Brandy the barmaid");
SetLevel(1);
SetLong( (: LongDesc :) );
SetMenuItems(([
({ "guinness","beer","stein" }) : "/domains/town/meals/stein",
({ "wine","bottle of wine" }) : "/domains/town/meals/winebottle",
({ "whiskey","bottle of whiskey" }) : "/domains/town/meals/rebel_yell",
]));
SetSpecialMenuItems(([
"javarin" : "/domains/town/meals/javarin",
"speedalin" : "/domains/town/meals/speedalin",
"spazalin" : "/domains/town/meals/spazalin",
//"somnitol" : "/domains/town/meals/potion_healing",
//"phoqitol" : "/domains/town/meals/potion_healing",
//"comatol" : "/domains/town/meals/potion_healing",
"yellow spice" : "/domains/town/meals/yellow_spice",
"green spice" : "/domains/town/meals/green_spice",
"blue spice" : "/domains/town/meals/blue_spice",
"eve tonic" : "/domains/town/meals/mana_tonic",
]));
SetGender("female");
SetMorality(40);
SetRace("human");
AddCurrency("electrum", random(200));
SetSkill("bargaining", 1);
SetProperty("no bump", 1);
SetLocalCurrency("gold");
SetAttackable( (: NoKill :) );
SetPolyglot(1);
SetLanguage("common", 100);
SetDefaultLanguage("common");
SetInventory(([
"/domains/town/armor/locket" : "wear necklace",
"/domains/town/armor/barsmock" : "wear smock",
]));
SetTalkResponses( ([
"randy, you're a fine girl" : (: FlatterResponse :),
"randy, youre a fine girl" : (: FlatterResponse :),
"randy you're a fine girl" : (: FlatterResponse :),
"randy youre a fine girl" : (: FlatterResponse :),
"what a good wife you would be" : (: FlatterResponse :),
]));
}
void init(){
::init();
}
mixed eventSell(object who, string args){
//tc("flatterers: "+identify(flatterers));
if(member_array(args, GetSpecials()) != -1 &&
member_array(who->GetKeyName(), flatterers) == -1){
eventForce("say I don't feel comfortable selling that to you, "+
who->GetName()+".");
return 1;
}
return ::eventSell(who, args);
}
varargs int eventSpecialList(object who, string what){
if(member_array(who->GetKeyName(), flatterers) == -1){
eventForce("say I'm not sure I have a special menu for you, "+
who->GetName()+".");
return 1;
}
return ::eventSpecialList(who, what);
}
mixed NoKill(object attacker){
return "Brandy is such a fine girl you find yourself unable to attack her.";
}