Trevor (#790)(an instance of generic thing made by Calkins)     Trevor Machine is a generic automaton who listens. Go to location of this object, Postmodern Laboratory. VERB SOURCE CODE: tell:
if (this:audience())
c = this.location:contents();
words = $string_utils:from_list(args);
words = $string_utils:strip_chars(words, "'\",?.!][;:-");
words = $string_utils:words(words);
if ((words && (words[1] != this.name)) && (this.name in words))
forwhom = $string_utils:match(words[1], c, "name");
if ((forwhom != this) && valid(forwhom))
acts = $set_utils:intersection(this.actions, words);
if (acts)
this:perform(forwhom.name, acts[1]);
endif
endif
endif
else
this:changeMood("initial");
endif
.
perform:
"perform - submit an input token to the finite state machine";
if (caller != this)
return E_PERM;
endif
forwhom = args[1];
what = args[2];
if (i = (what + ":") in this.mood)
j = length(this.mood);
fork (0)
for line in (this.mood[i + 1..j])
len = length(line);
suspend(2);
if ((len >= 5) && (line[1..4] == "say "))
this:say(line[5..length(line)]);
elseif ((len >= 7) && (line[1..6] == "emote "))
this:emote(line[7..length(line)]);
elseif ((len >= 6) && (line[1..5] == "mood "))
this:changeMood(line[6..length(line)]);
return;
elseif ((len == 3) && (line[1..3] == "end"))
return;
endif
endfor
endfork
endif
.
look_self:
player:tell(this:titlec());
pass(@args);
player:tell("He is awake and looks alert.");
if ("looks" in this.actions)
this:perform(player.name, "looks");
endif
.
emote:
"emote - simulate an emote action in the room";
if (caller != this)
return E_PERM;
endif
this.location:announce_all(this.name, " ", args[1]);
.
say:
"say - simulate a say action in the room";
if (caller != this)
return E_PERM;
endif
this.location:announce_all(this.name, " says, \"", args[1], "\"");
.
changeMood:
if (caller != this)
return E_PERM;
endif
mood = "*" + args[1];
if (i = mood in this.database)
end = j = length(this.database);
for k in [i + 1..end]
if (this.database[k][1] == "*")
j = k - 1;
this.mood = this.database[i..j];
this:set_description(this.mood[2]);
return;
endif
endfor
this.mood = this.database[i..j];
this:set_description(this.mood[2]);
endif
.
@compile:
if (player == this.owner)
this.actions = {};
for lines in (this.database)
if (lines[length(lines)] == ":")
this.actions = setadd(this.actions, lines[1..length(lines) - 1]);
endif
endfor
this:changeMood("initial");
player:tell("Action list build and state set to initial.");
else
player:tell(E_PERM);
endif
.
audience:
if ($object_utils:connected(this.location))
return 1;
else
for c in (this.location.contents)
if ($object_utils:connected(c))
return 1;
endif
endfor
endif
return 0;
.
PROPERTY DATA:       actions       database       mood |