| ! 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); | |
| ]; | |
Xet Storage Details
- Size:
- 1.69 kB
- Xet hash:
- 1bb4ec663e8f37b7f425bbdbbba53468ff05e7ff5e1b4e7f8192e1c254a0a49e
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.