AFK Code -- Another method [by Rasdan]
Snippet Posted Wednesday, August 12th @ 11:23:42 PM, by George Greer in the Commands dept.
Updated Dec 8, 1997. Click the link below to read it or download it.

From: Rasdan <rasdan@PEAK.ORG>
Subject: AFK Code

Almost a year ago, I posted some AFK code. It worked, but it was kind of
bad. So I decided to redo it. This is the new version.

   FEATURES:

* Allows you to set an afk message.

* Allows a message to be displayed to whoever is telling to you

  that you are afk, and what that message is.

* Displays to the room your message when you are afk, and informs

  everyone in the room when you are back from AFK.


#define PRF_AFK         (1 << ##)       /* Player is AFK */
   where ## is whatever is next on your PRF listing.

In char_player_data, add:
   char *afk_message;  /* PC / NPC's AFK MESSAGE                */

In char_file_u, add:
   char afk_message[POOF_LENGTH + 1];


------------------------ NOTE: THIS WILL CORRUPT YOUR PFILE! ---------------
With the function prototypes at the top of utils.h, add:
void    set_afk(struct char_data *ch, char *afk_message, int result);

 with the POOFIN(ch) defines, put
#define AFK_DEFAULT     "I am afk, not looking at keyboard"

#define GET_AFK(ch)     ((ch)->player.afk_message)

If you want it to save in pfile, you will need to modify the character
saving/loading functions in db.c


In limits.c, add:


void set_afk(struct char_data * ch, char *afk_message, int result)
{
  if (!*afk_message)
    sprintf(buf1, "%s", AFK_DEFAULT);
  else
    sprintf(buf1, "%s", afk_message);

  if (strlen(buf1) > POOF_LENGTH) {
    send_to_char("Afk message too long, using default.\r\n", ch);
    sprintf(buf1, "%s", AFK_DEFAULT);
  }

  if (GET_AFK(ch))
    free(GET_AFK(ch));
  GET_AFK(ch) = NULL;
  GET_AFK(ch) = str_dup(buf1);

  if (result) {
    sprintf(buf, "$n has just gone AFK: %s", GET_AFK(ch));
    act(buf, FALSE, ch, 0, 0, TO_ROOM);
    sprintf(buf, "You have just gone AFK: %s", GET_AFK(ch));
    act(buf, FALSE< ch, 0, 0, TO_CHAR);
  } else {
    act("$n is back from AFK!", FALSE, ch, 0, 0, TO_ROOM);
    act("You are back from AFK!", FALSE, ch, 0, 0, TO_CHAR);
  }
}


In act.other.c, put this:

ACMD(do_afk)
{
  int result;

  if (IS_NPC(ch)) {
    send_to_char("Mobs don't have keyboards, go away.\r\n", ch);
    return;
  }

  skip_spaces(&argument);

  if (PRF_FLAGGED(ch, PRF_AFK)) {
    result = FALSE;
    REMOVE_BIT(PRF_FLAGS(ch), PRF_AFK);
  } else {
    result = TRUE;
    SET_BIT(PRF_FLAGS(ch), PRF_AFK);
  }
  set_afk(ch, argument, result);
}

In act.comm.c, in ACMD(do_tell)

after
  else if (PRF_FLAGGED(vict, PRF_NOTELL) || ROOM_FLAGGED(vict->in_room, ROOM_SO
UNDPROOF))
    act("$E can't hear you.", FALSE, ch, 0, vict, TO_CHAR | TO_SLEEP);

add:

  else {
  if (PRF_FLAGGED(vict, PRF_AFK)) {
        sprintf(buf, "%s is AFK and may not hear your tell.\r\n", GET_NAME(vict
));
        send_to_char(buf, ch);
        sprintf(buf, "MESSAGE: %s\r\n", GET_AFK(vict));
        send_to_char(buf, ch);

       }


In act.informative.c, in list_one_char, after:

  if (PLR_FLAGGED(i, PLR_WRITING))
    strcat(buf, " [COMPOSING]");  <---- I think it's (Composing) in stock Circl
e

add:

  if (PRF_FLAGGED(i, PRF_AFK))
    strcat(buf, " [AFK]");


In do_who after
      if (PRF_FLAGGED(tch, PRF_NOTELL))
        strcat(buf, " [NO-TELLS]");  <---- Think it is (No-Tell) in stock Circl
e

      if (PRF_FLAGGED(tch, PRF_AFK))
        strcat(buf, " [AFK]");


In comm.c, in make_prompt,


before:

    if (PRF_FLAGGED(d->character, PRF_DISPHP))
      sprintf(prompt, "%s%s<%dhp ", prompt,
                CBBLU(d->character,C_SPR),GET_HIT(d->character));

add:

    if (PRF_FLAGGED(d->character, PRF_AFK))
      sprintf(prompt, "%s%s[AFK]%s", prompt, CBCYN(d->character, C_SPR),
                CCNRM(d->character, C_SPR));


<< AFK Code [by Mark Komus] | Reply | View as text | Threaded | Archer Code [by Sammy] >>

 


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.