MOO-cows Mailing List Archive
[email@example.com: Re: parents and locking, listening etc]
------- Start of forwarded message -------
From: Petrea Mitchell <firstname.lastname@example.org>
Subject: Re: parents and locking, listening etc
Date: Mon, 10 Mar 1997 14:19:58 PST
In-Reply-To: <332443A8.46A9@itchen.hants.gov.uk> from Tim MacLachlan at "Mar 10, 97 09:23:52 am"
X-Mailer: ELM [version 2.4ME+ PL22 (25)]
Content-Type: text/plain; charset=US-ASCII
> I have an object which is a parent 'generic beer'#380. An object
> 'barmaid' creates() a child of the generic beer when a player
> asks for a beer. The child beer emotes messages 4 times then recycles
> itself. However, if the player doesnt drink the beer enough so that
> the object recycles itself I dont want the player to be able to
> leave the tavern if they still have the child beer object on them.
> (Else my quota will run out!).
You can't lock an exit with classes, and you're forgetting that people
can teleport out anyway. But there are ways around this.
Solution #1: @verb <room>:exitfunc tnt rxd
Have exitfunc check args.contents (or, if you're really paranoid, use
$object_utils:all_contents()) for children of the generic beer. Call
$recycler:_recycle (<beer>) when you find one. (If your MOO doesn't use
the LambdaCore, then just use "recycle (<beer>)".) If your generic beer
is fertile, then make sure to check that the beers you're recycling are
really yours first.
Solution #2: @verb <beer>:create tnt rxd
Use fork() (or, better, your local in-db scheduler if you have one) here
to spawn a task to recycle the beer after a certain amount of time. This
code will be activated every time a child of the generic beer is brought
into being through any means-- @create, @chparent, function calls, whatever.
Two potential problems here: if the beer is fertile, your code won't be
able to recycle the beers that other people create unless you're a wizard
(and even then, do you necessarily want to recycle them?), and if a lot of
beers are created, that means a lot of forked tasks lying around. You could
set up the barmaid as a rudimentary scheduler if you're worried about this.
In this and the next solution, you'll also need to modify <beer>:recycle
to somehow kill the forked task if the beer is recycled before its time.
Solution #3: Modify the barmaid
Essentially the same as #2, only add the fork to the code on the barmaid
that produces the beer, thereby recycling only the beers that she creates.
Make sure to add a "pass (@args)" somewhere when you modify :create,
:recycle, or :exitfunc, to avoid the possibility of Bad Things happening.
> Also, I want to create an object that 'listens' in a room and runs
> a verb when a certain string is matched...I'm wondering what the best
> way of doing this is. I hacked the #0:notify verb so that it
> also sent the message to the object in a room if it is a child of
> a generic 'puppet' (an object that will listen).
I think you're getting too complicated here-- in the LambdaCore at least,
$room:announce(), :announce_all, and :announce_all_but don't discriminate
between players and other objects. Put your string-matching code in
Or am I missing something here...
Mitchell aka Spindizzy aka the Information Overload Wizard
Petrea Mitchell <|> <|> <email@example.com> <firstname.lastname@example.org>
"What sort of man takes the `frau' out of Jungfrau, Lewis?"
"The sort who gets strangled for his jokes, sir?" ---Mystery!
------- End of forwarded message -------
Subject Index |