Few questions.. Why are you using &nitems. I'm trying to int that but it gives me parse error (in do_quit). It also tells me that its making a pointer from integer... usually its where I place an == instead of = or something. Any ideas? Angus Mezick wrote: > > Here is a snippet, I log the num items as they enter and leave the mud, just so > I can catch repeat offenders that decide to use the auto-rent feature to avoid > this limit. > --Angus > > +++ utils.c > void count_items(struct obj_data * obj, long *nitems) > { > if (obj) > { > (*nitems)++; > count_items(obj->contains, nitems); > count_items(obj->next_content, nitems); > } > } > > +++ utils.h > void count_items(struct obj_data * obj, long *nitems); > > +++ act.informative.c > ACMD(do_item_count) > { > struct char_data *vict; > int i; > long numitems=0; > char *buf=get_buffer(256); > > skip_spaces(&argument); > if(strlen(argument)>4) > { > if(GET_LEVEL(ch)>LVL_GOD) > { > if(!(vict=get_char_vis(ch,argument))) > send_to_char("Your target isn't here, try show rent > <person>\r\n",ch); > else > { > count_items(vict->carrying,&numitems); > > for(i=0;i<NUM_WEARS;i++) > count_items(GET_EQ(vict,i),&numitems); > sprintf(buf,"%s is carrying %ld items.\r\n",GET_NAME(vict), > numitems); > send_to_char(buf,ch); > } > } > else > { > send_to_char("You can only count your own items!\r\n",ch); > } > } > else > { > count_items(ch->carrying,&numitems); > > for(i=0;i<NUM_WEARS;i++) > count_items(GET_EQ(ch,i),&numitems); > sprintf(buf,"You are carrying %ld items.\r\n", numitems); > send_to_char(buf,ch); > } > release_buffer(buf); > } > > ++act.other.c: ACMD(do_quit) > else > { > + char *buf=get_buffer(SMALL_BUFSIZE); > + for(i=0;i<NUM_WEARS;i++) > + count_items(GET_EQ(ch,i),&nitems); > + count_items(ch->carrying,&nitems); > + > + > + if((nitems>max_obj_save)&&(!PRF_FLAGGED(ch,PRF_NOHASSLE))) > + { > + sprintf(buf, > + "You cannot camp with more than %d items in your camp!\r\n" > + "You have %ld items on your person. Time to donate some stuff!" > + "\r\n",max_obj_save,nitems); > + send_to_char(buf,ch); > + } > + else > + { > if (!GET_INVIS_LEV(ch)) > act("$n has left the game.", TRUE, ch, 0, 0, TO_ROOM); > sprintf(buf, "%s has quit the game.", GET_NAME(ch)); > mudlog(buf, NRM, MAX(LVL_IMMORT, GET_INVIS_LEV(ch)), TRUE); > > +++ objsave.c:Crash_rentsave() > Crash_extract_norents_from_equipped(ch); > > Crash_extract_norents(ch->carrying); > > /**** count here ****/ > + nitems=0; > + for(j=0;j<NUM_WEARS;j++) > + count_items(GET_EQ(ch,j),&nitems); > + count_items(ch->carrying, &nitems); > > + if(nitems>max_obj_save) > + { > + sprintf(buf,"CAMP ALERT: %s camped with %ld items.",GET_NAME(ch),nitems); > + mudlog(buf, NRM, MAX(LVL_IMMORT, GET_INVIS_LEV(ch)), TRUE); > + } > + else > + { > + sprintf(buf, "CAMP: %s camped with %ld items.",GET_NAME(ch),nitems); > + mudlog(buf, CMP, MAX(LVL_IMMORT, GET_INVIS_LEV(ch)), TRUE); > + } > + release_buffer(buf); > > rent.net_cost_per_diem = cost; > rent.rentcode = RENT_RENTED; > > I also stuck a counter in Crash_load() that > if (!feof(fl)) > { > + counter++; > if ((obj = Obj_from_store_to(object, &locate))) > { > ---- > > + sprintf(buf+strlen(buf),"(%d Items)",counter); > mudlog(buf, NRM, MAX(LVL_IMMORT, GET_INVIS_LEV(ch)), TRUE); > > + if(counter>max_obj_save) > + { > + sprintf(buf, "ALERT: %s un-rented with %d items.",GET_NAME(ch),counter); > + mudlog(buf, NRM, MAX(LVL_IMMORT, GET_INVIS_LEV(ch)), TRUE); > + } > + release_buffer(buf); > /* turn this into a crash file by re-writing the control block */ > rent.rentcode = RENT_CRASH; > > _______________________________________ > <question about counting items snipped> > <George's mailer code snipped> > > +------------------------------------------------------------+ > | Ensure that you have read the CircleMUD Mailing List FAQ: | > | http://democracy.queensu.ca/~fletcher/Circle/list-faq.html | > +------------------------------------------------------------+ +------------------------------------------------------------+ | 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/15/00 PST