Re: Incorporating lifespan in act.informative.c [LONG]

From: Surgeon (webremedies@home.com)
Date: 12/11/00


Ok great Tony and thanks alot for the detailed description
pertaining to all areas of matter at hand.
what I have set up in an ACMD(do_scavage)
if(zone_table[world[IN_ROOM(d->character)].zone].scav_counter > 0 &&
zone_table[world[IN_ROOM(d->character)].zone].sav_counter <=
zone_table[world[IN_ROOM(d->character)].zone].sav_count)
 (zone_table[world[IN_ROOM(d->character)].zone].sav_counter)--;
I can get everything to compile, a little problems with 'd'
I believe it was just a struct descriptor_data *d or something like that
at the top of the ACMD, *however* it crashes, and I also get problems
with d is unitialized, I realized I have not assigned d a value in the
ACMD, but exactly how do I fix both problems?
it crashes now on the scavage command,


Tony Robbins wrote:
>
> Quoting Surgeon <webremedies@HOME.COM>:
>
> [snip]
> > =] Ok thanks alot to all that posted,
> > just curious as to how one goes about checking
> > the descriptor to make
> > sure the zone inwhich they are executing the
> > command has a lifespan.
>
> Ok, well, you want to know what zone a character is in.
> You say have a character's descriptor (I doubt this,
> you probably have a char_data reference, but we'll
> trust what you've stated).  descriptors are often
> called ``d'' in CircleMUD's source code, so we'll call
> it d.
>
> d has a member called character, which is a char_data
> structure.  It is referenced as: d->character
>
> char_data has a member called in_room.  It is a
> room_rnum.  It is referenced as: d->character->in_room
> -or-
> IN_ROOM(d->character) if know the macros in utils.h.
>
> room_rnums are the indices of the world[] array.  The
> world array is of types room_data.  room_data has a
> member called zone, which is a zone_rnum.  So we have:
> world[IN_ROOM(d->character)].zone
>
> zone_rnums are the indices of the zone_table[] array.
> The zone_table array is of times zone_data.  zone_data
> has a member called lifespan, which is an int.
> So we have:
> zone_table[world[IN_ROOM(d->character)].zone].lifespan
>
> There's the variable you're looking to compare.  You
> also know the various structures you should know.
> They're in structs.h, if you don't already know, and
> you should read them.  Because you're trying to code.
>
> Oh, and you should realize that the arrays above and
> other variables might be in an EXTERNal file from what
> you're working with.  Somebody else showed you how to
> pull them out of another file.
>
> > ie: what I will need to do is, if lifespan
> > excists and is greater then
> > or equal to 0 and less then 500 I need to
> > increment lifespan, just no
> > clue as to how one checks to make sure
> > everything is ok.
> > a for loop? out on a limb on this one.
>
> Comparison Operators:
> x greater than y : x > y
> x less than y : x < y
> x greater than or equal to y : x >= y
>
> Math Operators:
> (obvious) : + - / *
> pre-increment : ++(variable)
> post-increment : (variable)++
> pre-decrement: --(variable)
> post-decrement: (variable)--
>
> Pre- and post-whatever are important depending on what
> you're doing, in regard to order of operations.
>
> Logical operators:
> and : &&
> or : ||
>
> >From what I've put above, you should be able to see how
> you would say (pseudo-code, a good tool):
>
> if (
> [lifespan of zone of room of character of descriptor]
> is greater than or equal to zero AND
> [lifespan of zone of room of character of descriptor]
> is less than five-hundred] ) then
> increment
> [lifespan of zone of room of character of descriptor]
>
> > *so I how do I make sure the zone has an olc
> > structure, from where the
> > command is being entered by the char, and also
> > what steps should be
> > taken to change the value of lifespan for
> > instance. *
>
> Unless you're using some OLC you've written yourself or
> gotten from someone else, Oasis and Obuild don't have
> olc structures in zones.  A descriptor might have an
> olc structure, and it might not.  If they don't, it has
> been free()'d and set to NULL.  If they do, it should
> hold some value.  You can set up a comparison to test
> this.
>
> I believe that the problem you are having is not
> knowing C and not knowing the code.  You can learn to
> read CircleMUD code without learning C, but it's hard,
> and you trip yourself up a lot.  You can learn C and
> never use it for CircleMUD, and most people do that.
> But without knowing proper C syntax and the critical
> structures that are used throughout the code, you will
> not be able to create anything new or original on your
> own.
>
> This e-mail is a really long RTFC message, and I
> apologize for that.  Don't take offense to it, just
> realize that I just spent 15 or 20 minutes putting
> together something that would explain itself with some
> C knowledge and time spent with the source.
>
> -k.
>
> --
>    +---------------------------------------------------------------+
>    | FAQ: http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html |
>    | Archives: http://post.queensu.ca/listserv/wwwarch/circle.html |
>    +---------------------------------------------------------------+

--
   +---------------------------------------------------------------+
   | FAQ: http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html |
   | Archives: http://post.queensu.ca/listserv/wwwarch/circle.html |
   +---------------------------------------------------------------+



This archive was generated by hypermail 2b30 : 04/11/01 PDT