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