Boolean Expressions in UnterMUD
UnterMUD booleans are generally similar to TinyMU* booleans with some
extensions. They are primarily able to test for the identity of a
player or the presence of some object. This is a result of their
heritage as locks for exits where the main issue is who it is and
whether they have the "key(s)".
VALUES
UnterMUD boolean expressions are composed of values, relational
operators and grouping. Values are of two types, objects (names or
OID's) and the special constants ('T' or 'F'). Objects in a boolean
expression are implicitly checked for presence either as the actor, in
their inventory or at the same location. The special constants 'T' and
'F' stand respectively for true and false, they are primarily useful
for degenerate cases (e.g. boo lnk=T).
OPERATORS
The relational operators supported are '&', '|', '!' and 'with'.
Operator '&' is generally thought of as "and", however it's probably
closer to "carrying or using" in many cases, it is a binary operator.
Operator '|' is "or", it is a binary operator. Operator '!' is "not",
it is a unary operator. Operator 'with' checks if it's operand is an
object or player at the same location as the actor, it is a unary
opertator.
GROUPING
Two types of grouping are available. The quotes ' and " provide token
grouping for names with spaces or odd characters embedded in them, the
escape character \ is also available to use with special characters.
Parentheses () provide logical grouping and control order of evaluation.
VALIDATION
When a user sets a boolean the expression is checked and rewritten.
Any objects specified by name are resolved to OID's which are validated
for existance (the player or object MUST EXIST IN THE LOCAL DB for you
to use their OID in setting a bool) and any relational operators are
checked to ensure that each operator has the proper numer of values.
EXAMPLES
Below are some examples with brief explainations, they assume that there
are two two players UnterWiz (wizard) and testbozo (22@DEEPMUD) and two
objects frisbee (21@DEEPMUD) and bat (20@DEEPMUD).
T Always
!testbozo not testbozo
testbozo | UnterWiz either testbozo or UnterWiz
22@DEEPMUD & 20@DEEPMUD testbozo carrying bat
frisbee anyone carrying frisbee
UnterWiz | bat UnterWiz or anyone carrying bat
wizard & (21@DEEPMUD | 20@DEEPMUD) UnterWiz carrying frisbee or bat
with 22@DEEPMUD testbozo in the room
If UnterWiz set a lock on the exit "up" to allow him/her and the
testbozo to use it but not take the frisbee:
set up lock "(testbozo | me) & !frisbee"
The result looks like this in the OIF:
boo lok=(22@DEEPMUD|wizard)&!21@DEEPMUD
SUMMARY
what type meaning
--------------------------
<OID> object test objects presence
T const true
F const false
! unary not
| binary or
& binary and (carrying or using)
with unary here (in the same room)
() group evalute contents as a unit
"" quote make a single token with expansion
'' quote make a single token without expansion
\ escape ignore special meaning of next character