You get the error because the PLR_FLAGGED macro is intended to take a *char_data argument, not char_file_u. You should probably just check the deleted "flag" by doing your own "&" test on the bitvector (I don't know it's name off-hand, check the char_file_u struct in structs.h for the name of the member) and the PLR_DELETED flag. -Cj ----- Original Message ----- From: Melissa Jadwinski <jadwin@tiac.net> To: <CIRCLE@post.queensu.ca> Sent: Friday, January 18, 1999 1:12 PM Subject: [Code] [Newbie] A player list command >Hi all, I have whipped up a player list command which is based on mostly on >do_who and Brian Helms' show immortals snippet. It takes an argument >similar to do_users or do_who. I am pretty new to Circle coding in general >and while the code works fine, it includes deleted players. Any ideas on >how to screen for deleted players? I get compile errors when I do a simple >if "(PLR_FLAGGED(player, PLR_DELETED)) continue;". The command is pretty >useful other than that.... (I have races on my mud, if you don't you >should remove those portions before using this.) > >Thanks a ton! >Melissa Jadwinski >meer@meersan.net > > > >/* Player Search command shamelessly twisted from do_who, idea > inspired by Brian Helms <bhelms1@gl.umbc.edu>'s show immortals > snippet, and by Primacy <jmrobins@wired.uvm.edu>'s do_players. > meer@meersan.net, 18 Jan 99 >*/ > >#define PLAYER_FORMAT \ >"format: players [minlev[-maxlev]] [-s] [-c classlist] [-r racelist]\r\n" > >ACMD(do_players) >{ > FILE *fl; > struct char_file_u player; > size_t i; > char mode; > int low = 0, high = LVL_IMPL; > int showclass = 0, short_list = 0, showrace = 0, num_found = 0, done = 0; > char tmp[64]; > > skip_spaces(&argument); > strcpy(buf, argument); > > if (!(fl = fopen(PLAYER_FILE, "r+"))) { > send_to_char("Can't open player file.", ch); > return; > } > > while (*buf) { > half_chop(buf, arg, buf1); > if (isdigit(*arg)) { > sscanf(arg, "%d-%d", &low, &high); > strcpy(buf, buf1); > } else if (*arg == '-') { > mode = *(arg + 1); /* just in case; we destroy arg in the >switch */ > switch (mode) { > case 's': > short_list = 1; > strcpy(buf, buf1); > break; > case 'l': > half_chop(buf1, arg, buf); > sscanf(arg, "%d-%d", &low, &high); > break; > case 'r': > half_chop(buf1, arg, buf); > for (i = 0; i < strlen(arg); i++) > showrace |= find_race_bitvector(arg[i]); > break; > > case 'c': > half_chop(buf1, arg, buf); > for (i = 0; i < strlen(arg); i++) > showclass |= find_class_bitvector(arg[i]); > break; > default: > send_to_char(PLAYER_FORMAT, ch); > return; > } /* end of switch */ > > } else { /* endif */ > send_to_char(PLAYER_FORMAT, ch); > return; > } > } /* end while (parser) */ > > send_to_char("\r\nPlayer Search: ", ch); > > while (!done) { /* begin while statement */ > fread(&player, sizeof(struct char_file_u), 1, fl); > if (feof(fl)) { > fclose(fl); > done=TRUE; > } >/* if (PLR_FLAGGED(?player, PLR_DELETED)) <----- Arrggh > continue; > */ > if (player.level < low || player.level > high) > continue; > if (showclass && !(showclass & (1 << player.chclass))) > continue; > if (showrace && !(showrace & (1 << player.race))) > continue; > if (short_list) { > sprintf(tmp, "%-12.12s%s", > player.name, > ((!(++num_found % 4)) ? "\r\n" : "")); > strcat(buf, tmp); > > } else { > num_found++; > sprintf(tmp, "%s", player.name); > strcat(buf, tmp); > strcat(buf, "\r\n"); > } /* endif shortlist */ > } > } /* end of while */ > > strcat(buf, "\r\n"); > > if (num_found == 0) > sprintf(tmp, "No players found.\r\n"); > else if (num_found == 1) > sprintf(tmp, "One player found.\r\n"); > else > sprintf(tmp, "%d players found.\r\n", num_found); > send_to_char(tmp, ch); > > page_string(ch->desc, buf, 1); > >} > > > +------------------------------------------------------------+ > | Ensure that you have read the CircleMUD Mailing List FAQ: | > | http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html | > +------------------------------------------------------------+ > +------------------------------------------------------------+ | 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