[NEWBIE] [CODE] Object Stacking

From: Neuromancer (amarquez@TRINITY.EDU)
Date: 09/19/97


Ok, I maybe it's the sleep deprivation in my effort to dive into
circlemud code (started this saturday, have gone a LONG way since).
I understood the original code for displaying objects, but I wanted the
object stacking code ... I'm a nut about being able to understand my code,
however ... and I just need someone to explain the areas marked by
***(?)*** to me. My confusion stems mainly from the (item_number==NOTHING)
Sections


---------------------------- code ----------------------------
void list_obj_to_char(struct obj_data * list, struct char_data * ch, int mode,
                           bool show)
{
   struct obj_data *i, *j;     // adden j for another file pointer
   char buf[10];               // Added buffer of size ten
   bool found = FALSE;
   int num;
//'i' = list of obj in room ;while i exists do ... ; go to next item
   for (i = list; i; i = i->next_content) {
     num = 0;   // reset number of said item found
     for (j = list; j != i; j = j->next_content)
       if (j->item_number==NOTHING) { // ***(?)*** I think if there is
nothing in room
         if(strcmp(j->short_description,i->short_description)==0) // ***(?)***
           break;
         }
         else if (j->item_number==i->item_number) // if we've reached same
item
           break;
         if (j!=i) // if j != i keep going
           continue;
         for (j = i; j; j = j->next_content) //  ***(?)***
           if (j->item_number==NOTHING) {  // ***(?)***
             if(strcmp(j->short_description,i->short_description)==0) num++;
           }  // ***(?)***

           else if (j->item_number==i->item_number) num++; // if object
numbers are
                                                           // the same
           if (CAN_SEE_OBJ(ch, i)) {
             if (num!=1) {
               sprintf(buf,"[%2i] ",num);
               send_to_char(buf,ch);
             }
             show_obj_to_char(i, ch, mode);
             found = TRUE;
       }
     }
     if (!found && show)
     send_to_char(" Nothing.\r\n", ch);
}

----------------------- end code ----------------------------
I put the "unnecessary" comments in b/c my brain was so fried
from looking through code last night that I might not have
understood what a simple for loop did :) Please feel free to
correct my comments if in fact I didn't understand them. I
wouldn't be surprised if I totally didn't understand what I
was doing.


     +------------------------------------------------------------+
     | 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