One room one exit
From Tapestries MUCK
General premise is that by placing the exit on the parent, then using MPI to limit/lock where it can be used from, you can cut down on the quota used for exits.
*********************************** ON PARENT (ONCE) *********************************** /* Global no-access failure messages*/ @set <#parent>=/_exit/msg/fail:Huh? (Type "help" for help.) @set <#parent>=/_exit/msg/ofail: /* Exit-origin combo specific message code */ @set <#parent>=/_exit/code/fail:{if:{ne:{eval:{prop:_allowed?}},yes},{prop:_exit/msg/fail,<#parent>},{prop:_origins/{ref:here}/fail/locked}} @set <#parent>=/_exit/code/ofail:{if:{ne:{eval:{prop:_allowed?}},yes},{prop:_exit/msg/ofail,<#parent>},{prop:_origins/{ref:here}/ofail/locked}} @set <#parent>=/_exit/code/succ:{prop:_origins/{ref:here}/succ} @set <#parent>=/_exit/code/osucc:{prop:_origins/{ref:here}/osucc} @set <#parent>=/_exit/code/odrop:{prop:_origins/{ref:here}/odrop} *********************************** ON EACH EXIT (ONCE) *********************************** @open <tla>=here,<#dest> /* @lock info: lockable-room and origin both reasons to deny entry */ @lock <exit> = _allowed?:yes&!_locked:yes @set <exit> =/_allowed?:{if:{propdir:_origins/{ref:here}},yes,no} @set <exit>=/_locked:{prop:_locked,{links:this}} /* set all fail/ofail messages to use code stored in parent */ @fail <exit>={eval:{prop:/_exit/code/fail,<#parent>}} @ofail <exit>={eval:{prop:/_exit/code/ofail,<#parent>}} @succ <exit>={eval:{prop:/_exit/code/succ,<#parent>}} @osucc <exit>={eval:{prop:/_exit/code/osucc,<#parent>}} @odrop <exit>={eval:{prop:/_exit/code/odrop,<#parent>}} *********************************** ON EACH EXIT (FOR EACH ORIGIN ROOM) *********************************** @set <exit>=/_origins/<#origin>/fail/locked:[MESSAGE] @set <exit>=/_origins/<#origin>/ofail/locked:[MESSAGE] @set <exit>=/_origins/<#origin>/succ:[MESSAGE] @set <exit>=/_origins/<#origin>/osucc:[MESSAGE] @set <exit>=/_origins/<#origin>/odrop:[MESSAGE]