do_who and attacking

From: zeus.net (zeus.net@terra.com.br)
Date: 03/05/02


Hello friends...


        I am having difficulty in solving two problems:

- The first:
        inside of the file "act. informative. c" in the part of "ACMD
(do_who)" I am not getting to alter the command so that besides the
class it is also exhibited the players' race...
now it is like this:

#define WHO_FORMAT \
"format: who [minlev[-maxlev]] [-n name] [-c classlist] [-s] [-o] [-
q] [-r] [-z]\r\n"

ACMD(do_who)
{
  struct descriptor_data *d;
  struct char_data *tch;
  char name_search[MAX_INPUT_LENGTH];
  char mode;
  size_t i;
  int low = 0, high = LVL_IMPL, localwho = 0, questwho = 0;
  int showclass = 0, short_list = 0, outlaws = 0, num_can_see = 0;
  int who_room = 0;

  skip_spaces(&argument);
  strcpy(buf, argument);
  name_search[0] = '\0';

  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 'o':
      case 'k':
        outlaws = 1;
        strcpy(buf, buf1);
        break;
      case 'z':
        localwho = 1;
        strcpy(buf, buf1);
        break;
      case 's':
        short_list = 1;
        strcpy(buf, buf1);
        break;
      case 'q':
        questwho = 1;
        strcpy(buf, buf1);
        break;
      case 'l':
        half_chop(buf1, arg, buf);
        sscanf(arg, "%d-%d", &low, &high);
        break;
      case 'n':
        half_chop(buf1, name_search, buf);
        break;
      case 'r':
        who_room = 1;
        strcpy(buf, buf1);
        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(WHO_FORMAT, ch);
        return;
      }                         /* end of switch */

    } else {                    /* endif */
      send_to_char(WHO_FORMAT, ch);
      return;
    }
  }                             /* end while (parser) */

  send_to_char("Jogadores\r\n-------\r\n", ch);

  for (d = descriptor_list; d; d = d->next) {
    if (STATE(d) != CON_PLAYING)
      continue;

    if (d->original)
      tch = d->original;
    else if (!(tch = d->character))
      continue;

    if (*name_search && str_cmp(GET_NAME(tch), name_search) &&
        !strstr(GET_TITLE(tch), name_search))
      continue;
    if (!CAN_SEE(ch, tch) || GET_LEVEL(tch) < low || GET_LEVEL(tch) >
high)
      continue;
    if (outlaws && !PLR_FLAGGED(tch, PLR_KILLER) &&
        !PLR_FLAGGED(tch, PLR_THIEF))
      continue;
    if (questwho && !PRF_FLAGGED(tch, PRF_QUEST))
      continue;
    if (localwho && world[ch->in_room].zone != world[tch-
>in_room].zone)
      continue;
    if (who_room && (tch->in_room != ch->in_room))
      continue;
    if (showclass && !(showclass & (1 << GET_CLASS(tch))))
      continue;
    if (short_list) {
      sprintf(buf, "%s[%2d %s] %-12.12s%s%s",
              (GET_LEVEL(tch) >= LVL_IMMORT ? CCYEL(ch, C_SPR) : ""),
              GET_LEVEL(tch), CLASS_ABBR(tch), GET_NAME(tch),
              (GET_LEVEL(tch) >= LVL_IMMORT ? CCNRM(ch, C_SPR) : ""),
              ((!(++num_can_see % 4)) ? "\r\n" : ""));
      send_to_char(buf, ch);
    } else {
      num_can_see++;
      sprintf(buf, "%s[%2d %s] %s %s",
              (GET_LEVEL(tch) >= LVL_IMMORT ? CCYEL(ch, C_SPR) : ""),
              GET_LEVEL(tch), CLASS_ABBR(tch), GET_NAME(tch),
              GET_TITLE(tch));

      if (GET_INVIS_LEV(tch))
        sprintf(buf + strlen(buf), " (i%d)", GET_INVIS_LEV(tch));
      else if (AFF_FLAGGED(tch, AFF_INVISIBLE))
        strcat(buf, " (invis)");

      if (PLR_FLAGGED(tch, PLR_MAILING))
        strcat(buf, " (remetendo)");
      else if (PLR_FLAGGED(tch, PLR_WRITING))
        strcat(buf, " (escrevendo)");

      if (PRF_FLAGGED(tch, PRF_DEAF))
        strcat(buf, " (surdo)");
      if (PRF_FLAGGED(tch, PRF_NOTELL))
        strcat(buf, " (notell)");
      if (PRF_FLAGGED(tch, PRF_QUEST))
        strcat(buf, " (aventureiro)");
      if (PLR_FLAGGED(tch, PLR_THIEF))
        strcat(buf, " (LADRAO)");
      if (PLR_FLAGGED(tch, PLR_KILLER))
        strcat(buf, " (ASSASSINO)");
      if (GET_LEVEL(tch) >= LVL_IMMORT)
        strcat(buf, CCNRM(ch, C_SPR));
      strcat(buf, "\r\n");
      send_to_char(buf, ch);
    }                           /* endif shortlist */
  }                             /* end of for */
  if (short_list && (num_can_see % 4))
    send_to_char("\r\n", ch);
  if (num_can_see == 0)
    sprintf(buf, "\r\nNinguem!\r\n");
  else if (num_can_see == 1)
    sprintf(buf, "\r\nUm solitario jogador exibido.\r\n");
  else
    sprintf(buf, "\r\n%d jogadores exibidos.\r\n", num_can_see);
  send_to_char(buf, ch);
}




 - The Second problem:
        When a player wants to attack, he has to type the whole name
of the mob. I am not finding where to alter this so that it be
necessary just to type the first letters of the name of the mob. If
somebody already altered this and can help me, I am thankful.

--
   +---------------------------------------------------------------+
   | FAQ: http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html |
   | Archives: http://post.queensu.ca/listserv/wwwarch/circle.html |
   | Newbie List:  http://groups.yahoo.com/group/circle-newbies/   |
   +---------------------------------------------------------------+



This archive was generated by hypermail 2b30 : 06/25/03 PDT