/* Do not remove the headers from this file! see /USAGE for more info. */
inherit LIVING;
inherit M_ACTIONS;
inherit M_TRIGGERS;
int starts_with(string str, string pref) {
return str[0..strlen(pref)-1] == pref;
}
int ends_with(string str, string suff) {
return str[<strlen(suff)..] == suff;
}
void pattern_setup()
{
add_pattern("%s says: %s.", function(string name, mixed sub) {
if (functionp(sub)) {
if (evaluate(sub, lower_case(name)))
return "say That's true.";
else
return "say You're lying.";
}
if (sub && intp(sub))
return "say I can't figure out what you mean.";
if (random(5))
return 0;
return "say That's boring. I want to know things about your name.";
}, 0, "say_rule");
add_sub_pattern("say_rule", "%s name %s", (: $2 :), 0, "predicate");
add_sub_pattern("predicate", "%s or %s", function(function f1, function f2) {
return (: evaluate($(f1), $1) || evaluate($(f2), $1) :);
}, "and_pred", "predicate");
add_sub_pattern("predicate", "%s", (: $1 :), "and_pred");
add_sub_pattern("and_pred", "%s and %s", function(function f1, function f2) {
return (: evaluate($(f1), $1) && evaluate($(f2), $1) :);
}, "simple_pred", "and_pred");
add_sub_pattern("and_pred", "%s", (: $1 :), "simple_pred");
add_sub_pattern("simple_pred", "is not %s", function(string name) {
return (: $1 != $(name) :);
} );
add_sub_pattern("simple_pred", "is %s", function(string name) {
return (: $1 == $(name) :);
} );
add_sub_pattern("simple_pred", "starts with %s", function(string prefix) {
return (: starts_with($1, $(prefix)) :);
} );
add_sub_pattern("simple_pred", "ends with %s", function(string suffix) {
return (: ends_with($1, $(suffix)) :);
} );
add_sub_pattern("simple_pred", 0, 1);
}
void setup() {
set_name("Logical Genius");
set_gender(1);
set_proper_name("Logical Genius");
set_in_room_desc("A Logical Genius eyes you suspiciously.");
set_id( "genius", "dude" );
set_long("Logical Genius peers at you.\nLogical Genius says: Tell me something about your name.");
pattern_setup();
}