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