> My coders are attempting to order out wholist by level, higher levs being > on top, sorting down to lower levs. We're unsure of how to do it really, > and we're just screwing around with stuff that works, forgetting about > efficiency (yes, i know, *shudder*). It's not my project, really, so I > can't modify the files, but the constant crashing of the mud is beginnning > to annoy me greatly...so I'm trying to help out. Here it is, hacky as can be. > That code you posted was really rather scary. As much as I dislike people jumping on the list saying something along the lines of 'Use a linked list' as if they were the end-all-be-all construct, I believe that may be what would work best for you. First, just make a nice struct: struct your_list = { int level; struct char_data *ch; struct your_list *next; }; Now, find all your characters online at the time simple enough: struct your_list *your_list = NULL,*temp=NULL,*temp2=NULL; struct descriptor_data *d; int found_slot=0; for(d = descriptor_list;d;d=d->next) { /* stuff */ } And within those for loops, you're going to do two things, 1) determine who's going in that who list (invis, etc), and 2) put them in the 'your_list' ..sorting for your insertion. Step 1 is up to you, step two is easy: CREATE(temp,struct your_list, 1) temp->ch = d->character; temp->level = GET_LEVEL(d->character); if(!your_list) your_list=temp; else { for(temp2=your_list;temp2 && !found_slot;temp2=temp2->next) { if(temp2->level >= temp->level && (!(temp2->next) || (temp2->next)->level < temp->level)) { temp->next=temp2->next; temp2->next = temp; found_slot++; } } } Which should insert it in order. Then, at the end, you iterate down your 'your_list' list, and make the buffer; sprintf(buf,"Your who list.\r\n"); while(your_list) { sprintf(buf + strlen(buf),"%s the level %d adventurer.\r\n", GET_NAME(your_list->ch), your_list->level); your_list=your_list->next; } And then you send your buffer to the person. Of course, and as usual, I may be wrong, and all the above is mailer code, so examine it before just plopping it in. PjD +------------------------------------------------------------+ | Ensure that you have read the CircleMUD Mailing List FAQ: | | http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html | +------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/15/00 PST