Re: [CODE] re:spec_proc invis_item

From: Chris Proctor (cjp@YOYO.CC.MONASH.EDU.AU)
Date: 11/13/97


> I have a minor issue with your code. As written, the specproc may only
> work with a single object (vnum 35) although it is of course possible
> to ASSIGNOBJ() to multiple objects. Of course you can say "if I add a
> new object, I just check for it's vnum too". Yes, this will work but it
> is not clean. Instead of checking the vnum, just check to see if the
> object has a specproc == invis_item.
>
> Here's how i did just that in an object specproc:
>
> SPECIAL(handgrenade)
> {
>   ...
>
>   /* make sure the object found has this as a specproc */
>   if (obj_index[obj->item_number].func != handgrenade) {
>     /* this is the wrong object */
>     do whatever
>     return;
>   }

Or, even easier, check to see if this is the object the spec_proc is
atteched to, by use of "me".

in the top line of the proc:

SPECIAL(whatever)
{
  struct obj_data *invis_obj = (struct obj_data *)me;
/* cast the "me" pointer to struct obj_data, and assign it to invis_obj */
  if (invis_obj->carried_by != ch)
/* check to see if the person carrying the invis_obj is the character
issuing the command, if not exit the proc */
        return 1;
...
}

Or whatever.

Chris.

_____________________________________________________
Q:  How many IBM CPU's does it take to
    execute a job?
A:  Four; three to hold it down, and one to
    rip its head off.
-----------------------------------------------------
     Check out Dominia Mud, on snafu.net.au 3333
  Or my homepage: http://yoyo.cc.monash.edu.au/~cjp


     +------------------------------------------------------------+
     | Ensure that you have read the CircleMUD Mailing List FAQ:  |
     | http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
     +------------------------------------------------------------+



This archive was generated by hypermail 2b30 : 12/08/00 PST