Board code -- Replies [by tigeba]
Snippet Posted Wednesday, August 12th @ 11:24:39 PM, by George Greer in the Utils dept.
Added Jun 23, 1997. Click the link below to read it or download it.

From: tigeba <tigeba@sprintmail.com>
Subject: reply function for boards

Thanks, I completely had a mental block there.  Anyway, without
further ado here is my shameless hack of the board.c code, and
a little function that allows players to reply to board messages
feel free to use it if you like it.  I think all the changes are
contained in boards.c so let me know if I forgot anything.

Enjoy,

Tigeba@sprintmail.com


Ok, add the following function to boards.c and make sure to prototype
it at the top of the file

void Board_reply_message(int board_type, struct char_data * ch, char *arg)
{
  char *tmstr;
  int len, msg, ind;
  time_t ct;
  char buf[MAX_INPUT_LENGTH], buf2[MAX_INPUT_LENGTH];
  char number[MAX_STRING_LENGTH];

  one_argument(arg, number);

  if (GET_LEVEL(ch) < WRITE_LVL(board_type)) {
    send_to_char("You are not holy enough to write on this board.\r\n", ch);
    return;
  }
  if (num_of_msgs[board_type] >= MAX_BOARD_MESSAGES) {
    send_to_char("The board is full.\r\n", ch);
    return;
  }
  if ((NEW_MSG_INDEX(board_type).slot_num = find_slot()) == -1) {
    send_to_char("The board is malfunctioning - sorry.\r\n", ch);
    log("SYSERR: Board: failed to find empty slot on write.");
    return;
  }
  /* skip blanks */
  if (!*number)
    return;
  if (!isdigit(*number) || (!(msg = atoi(number))))
    return;

  if (GET_LEVEL(ch) < READ_LVL(board_type)) {
    send_to_char("You try to reply but fail in your sneaky tactic.\r\n",ch);
    return;
    }

 if (!num_of_msgs[board_type]) {
    send_to_char("The board is empty!\r\n", ch);
    return;
  }

  if (msg < 1 || msg > num_of_msgs[board_type]) {
    send_to_char("That message exists only in your imagination.\r\n",
                 ch);
    return;
  }

 ind = msg -1;
  if (MSG_SLOTNUM(board_type, ind) < 0 ||
      MSG_SLOTNUM(board_type, ind) >= INDEX_SIZE) {
    send_to_char("Sorry, the board is not working.\r\n", ch);
    log("SYSERR: Board is screwed up.");
    return;
  }

  if (!(MSG_HEADING(board_type, ind))) {
    send_to_char("That message appears to be screwed up.\r\n", ch);
    return;
  }

  if (!(msg_storage[MSG_SLOTNUM(board_type, ind)])) {
    send_to_char("That message seems to be empty.\r\n", ch);
    return;
  }
  ct = time(0);
  tmstr = (char *) asctime(localtime(&ct));
  *(tmstr + strlen(tmstr) - 1) = '\0';


  sprintf(buf2, "(%s)", GET_NAME(ch));

  sprintf(buf, "%6.10s %-12s :: Re: %s", tmstr, buf2,
        (MSG_HEADING(board_type, ind)+26));
  len = strlen(buf) + 1;
  if (!(NEW_MSG_INDEX(board_type).heading = (char *) malloc(sizeof(char) * len)
)) {
    send_to_char("The board is malfunctioning - sorry.\r\n", ch);
    return;
  }
  strcpy(NEW_MSG_INDEX(board_type).heading, buf);
  NEW_MSG_INDEX(board_type).heading[len - 1] = '\0';
  NEW_MSG_INDEX(board_type).level = GET_LEVEL(ch);

  send_to_char("Write your message.  (/s saves /h for help)\r\n\r\n",ch);
  act("$n starts to write a message.", TRUE, ch, 0, 0, TO_ROOM);

  if (!IS_NPC(ch))
    SET_BIT(PLR_FLAGS(ch), PLR_WRITING);

  ch->desc->str = &(msg_storage[NEW_MSG_INDEX(board_type).slot_num]);
  ch->desc->max_str = MAX_MESSAGE_LENGTH;
  ch->desc->mail_to = board_type + BOARD_MAGIC;

  num_of_msgs[board_type]++;
}



Next, make the following changes to the SPECIAL(gen_board);


Search for:

  CMD_READ = find_command("read");
  CMD_WRITE = find_command("write");
  CMD_REMOVE = find_command("remove");
  CMD_LOOK = find_command("look");
  CMD_EXAMINE = find_command("examine");
  CMD_REPLY = find_command("reply");   <------ add

Directly below:

  if (cmd != CMD_WRITE && cmd != CMD_LOOK && cmd != CMD_EXAMINE &&
      cmd != CMD_READ && cmd != CMD_REMOVE && cmd != CMD_REPLY) <-----
add
    return 0;


Search for:

  Board_write_message(board_type, ch, argument);
    return 1;
 } else if (cmd == CMD_REPLY){                           <---- Add
    (Board_reply_message(board_type, ch, argument));     <---- Add
    return 1;
 } else if (cmd == CMD_LOOK || cmd == CMD_EXAMINE)
    return (Board_show_board(board_type, ch, argument));



Compile and that should be it..


<< Blood Left Behind [by Rasdan] | Reply | View as text | Flattened | Body Parts [by Patrick Dughi] >>

 


Related Links
  download
Related Articles
More by greerga
 
 

CircleMUD Snippets
 
Note: Not all of these snippets will work perfectly with your version of code, so be prepared to fix one or two bugs that may arise, and please let me know what you needed to do to fix it. Sending a corrected version is always welcome.
Finally, if you wish to use any of the snippets from this page, you are more than welcome, just mention the authors in your credits. If you wish to release any of these snippets to the public on another site, contact me FIRST.