MOO-cows Mailing List Archive


Re: @create problem

On Sat, 30 Mar 1996, Jeff Kramer wrote:

> > Sorry to bother the list with this question which is probably pretty
> > basic.  I've just installed the latest version of LambdaMOO on a Silicon
> > Graphics machine running Irix.  Everything seems to be working ok except
> > I can't create any objects.  I get the following error message:
> >
> > #90:moveto acceptable (this == #2), line 15:  Invalid indirection
> >   ...called from #1:accept (this == #2), line 2
> >   ...called from built-in function move()
> >   ...called from #4:@create (this == #2), line 41

Welp, the best solution is to find out what went wrong... I do not use 
the new core so i do not know what object #90 is, or what the moveto 
acceptable says... I can _guess_ what the problem is though -- when 
objects are created they are in #-1, the @create verb tries to move them 
to the creator, and #90:moveto tries either to check a property or 
execute a verb on the objects former location -- which is an invalid 
object (#-1). 

This error, however, does not mean the object is not created ! It merely 
rests in #-1, nameless (the namechange is done _after_ the move) and 
possibly without being put in your .owned_objects list. You should be 
careful with this, you can create a lot of unused objects like this :( 

> Same thing happened to me, except I'm running it on a Sparc-Classic/Solaris
> 2.  The easy fix is to just do a @chmod -d #90:moveto, and supress the
> error.  It seems that you have to do that alot to get LambdaCore working.
> (Much thanks to Quinn for enlightenment.)

Hm, well, that is the simplest solution, yes, but it is also a bit more 
dangerous... putting  verbs -d means you get no error messages, and the 
verb continues executing... The object was most likely not moved, and 
whats more, you can get a lot of hard to find bugs... For instance, the 
namechange goes wrong and suddenly you end up with an object with name 
#-3 :-) (just an example, i don't think this can happen save due to 
Database corruption :)

The best solution (IMHO) is to put an if (valid(location)) statement
around the :moveto/acceptable call, or inside the moveto/acceptable verb
itself. This need not be complicated at all, simply a sanity check, and 
if you are new to MOO it is excelent practice :)

Remember, use @list and @display to find the cause of errors, you can 
find out what a given line does with @list, then check on property 
contents and permissions and verb permissions using @display (@d object: 
to see the verbs, @d object. to see the properties)

Hope this helps a bit,

Thomas Wouters   |   Visit The Digitale City (DDS)   | Forever an Addict to |    The Dutch Digital Community    | Virtual, Digital,
Ynnoz @ MOOs     | | Unconventional Rubbish
Jay_* @ MUS[HE]s |  WWW -- World Wide Wackos :)      | (Except for Windows)


Home | Subject Index | Thread Index