! LockTest An inform library to choose default keys ! By L. Ross Raszewski ! ! By giving any key the "is_key" attribute, the commands "Lock" and "Unlock" ! will choose a default key if only one is held. If more than one key is held, ! it checks the property "key_to". If only one object has an entry in its ! key_to array matching the object to be unlocked, it will be chosen as the ! default key. This way, the game can recognise obvious keys, such as a ! "gold key" to a "gold door". If you think that this will give away a puzzle, ! just don't give that object a key_to value. ! ! This library IS compatible with the improved multi-key locking function by ! the author ! #IFNDEF key_to; property key_to $ffff; #ENDIF; global assumed_key; !attribute is_key; [ DefaultUnlockSub; print "(with ", (the) assumed_key, ")^"; <>; ]; [ DefaultLockSub; print "(with ", (the) assumed_key, ")^"; <>; ]; [ DefaultKeyTest i j count; if (noun hasnt lockable) rfalse; objectloop (i in player) if (i has is_key) { count++; assumed_key=i;}; if (count==1) rtrue; if (count>1) { count=0; objectloop (i in player) { if (i has is_key) { for (j=0:j<=(i.#key_to):j++) if ((i.&key_to)-->j==noun) {count++; assumed_key=i;};};};}; if (count==1) rtrue; rfalse; ]; Extend "lock" first * noun=DefaultKeyTest ->DefaultLock; Extend "unlock" first * noun=DefaultKeyTest ->DefaultUnlock;