! NewLock A replacement for Lock and Unlock to implement multiple ! keys and key-side definition. By L. Ross Raszewski ! ! Ever wanted to have multiple keys for the same lockable object? Instead of ! using "with_key" on the lock, use "key_to" on the key. "key_to" can hold ! a single value or an array, and works just as well as "with_key" ! ! Before inclusion of "verblib.h", insert these two lines: ! Replace LockSub; ! Replace UnlockSub; ! Include this file shortly after Verblib. ! ! Example: Create a stone door which can be opened by a stone key or a skeleton ! key, which also unlocks a wood door. ! ! Object stonedoor "Stone Door" ! has openable closed lockable door static; ! ! Object stone_key "Stone key" ! with key_to stonedoor; ! ! Object s_key "Skeleton Key" ! with key_to stonedoor wood_door; ! property key_to $ffff; [ TestforKey obj pkey j; if (obj.with_key==pkey) rtrue; for (j=0:j<=(pkey.#key_to):j++) if ((pkey.&key_to)-->j==noun) rtrue; rfalse; ]; [ UnlockSub; if (noun hasnt lockable) return L__M(##Unlock,1); if (noun hasnt locked) return L__M(##Unlock,2); if (TestForKey(noun,second)~=1) return L__M(##Unlock,3); give noun ~locked; if (AfterRoutines()==1) rtrue; if (keep_silent==1) rtrue; L__M(##Unlock,4,noun); ]; [ LockSub; if (noun hasnt lockable) return L__M(##Lock,1); if (noun has locked) return L__M(##Lock,2); if (noun has open) return L__M(##Lock,3); if (TestForKey(noun,second)~=1) return L__M(##Lock,4); give noun locked; if (AfterRoutines()==1) rtrue; if (keep_silent==1) rtrue; L__M(##Lock,5,noun); ];