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