| ! 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, ".)^"; | |
| <<Unlock noun assumed_key>>; | |
| ]; | |
| [ DefaultLockSub; | |
| print "(with ", (the) assumed_key, ".)^"; | |
| <<Lock noun 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; | |
Xet Storage Details
- Size:
- 1.73 kB
- Xet hash:
- 6afcca5517321143befb7f2febdb2ac295aa481241469f592f404061b15eaeaf
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.