Grouping commands & bug/quirk

From: Doppleganger Software (doppsoft@TZC.COM)
Date: 04/28/98


Ok....first, the bug/quirk.  I am not sure if it is on stock, but one MUD
I am on has this problem.  With the gaining XP for each hit, it places
the gain_exp function BEFORE the damage is capped off at the maximum
amount of damage.  This can cause tremendous problems if some one decides
to make a powerful weapon that does like 500d500 damage because the
weapon will give outrageous XP for just attacking, and not do much damage.

Now the grouping of commands idea.  A lot of similar commands (like
freeze, pardon, etc.) are grouped, but others that are similar (echo,
gecho, qecho) aren't  Shouldn't those 3 be grouped together as one
command with separate SCMD's?  Here's a quick mailer code idea of what I
mean.  Obviously, it means changes in interpreter.c & interpreter.h, as
well as act.comm.c and then act.wizard.c of course.  Don't ask for
instructions on how to 'install' it, as this isn't meant for newbie
coders, but really for the high-ups who determine the direction of circle
:)

ACMD(do_echo)
{
  struct char_data *list = NULL;
  struct descriptor_data *pt = NULL;

  skip_spaces(&argument);
  delete_doubledollar(argument);

  if (!*argument) {
    send_to_char("That must be a mistake...\r\n", ch);
    return;
  }

  if (subcmd == SCMD_EMOTE) {
    sprintf(buf, "$n %s", argument);
    act(buf, FALSE, ch, 0, 0, TO_ROOM);
  } else if (subcmd == SCMD_ECHO) {
    strcpy(buf, argument);
    act(buf, FALSE, ch, 0, 0, TO_ROOM);
  }

  if ((subcmd == SCMD_GECHO) || (subcmd == SCMD_QECHO)) {
    sprintf(buf, "%s\r\n", argument);

    for (pt = descriptor_list; pt; pt = pt->next) {
      if (!(!pt->connected && pt->character))
         continue;
      list = pt->character;
      if (list == ch)
        continue;
      if ((subcmd == SCMD_QECHO) && !PRF_FLAGGED(list, PRF_QUEST))
        continue;

       send_to_char(buf, pt->character);
    }
  }
  if (PRF_FLAGGED(ch, PRF_NOREPEAT))
    send_to_char(OK, ch);
  else
    send_to_char(buf, ch);
}


I know it's a little cumbersome, but you can also add stuff later, like
"zecho" (echo to a zone), "iecho" (echo to imms only), "mecho" (echo only
to mortals), and others with relative ease.  Just a thought to make
circle a little more expandable :)

---
"One hundred years from now, none of this will matter because you and I
will be dead -- unless the Grim Reaper has switched his record-keeping to
a Windows 95-based system, in which case we all might live forever. "
-- Associated Press


     +------------------------------------------------------------+
     | 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/15/00 PST