text: #include <sys/types.h>
  #include <stdio.h>
  #include <string.h>
  #include <unistd.h>
  
  /* include main header file */
  #include "mud.h"
  
  /* event_game_tick is just to show how to make global events
   * which can be used to update the game.
   */
  bool event_game_tick(EVENT_DATA *event)
  {
    ITERATOR Iter;
    D_MOBILE *dMob;
  
    /* send a tick message to everyone */
    AttachIterator(&Iter, dmobile_list);
    while ((dMob = (D_MOBILE *) NextInList(&Iter)) != NULL)
    {
      text_to_mobile(dMob, "Tick!\n\r");
    }
    DetachIterator(&Iter);
  
    /* enqueue another game tick in 10 minutes */
    event = alloc_event();
    event->fun = &event_game_tick;
    event->type = EVENT_GAME_TICK;
    add_event_game(event, 10 * 60 * PULSES_PER_SECOND);
  
    return FALSE;
  }
  
  bool event_mobile_save(EVENT_DATA *event)
  {
    D_MOBILE *dMob;
  
    /* Check to see if there is an owner of this event.
     * If there is no owner, we return TRUE, because
     * it's the safest - and post a bug message.
     */
    if ((dMob = event->owner.dMob) == NULL)
    {
      bug("event_mobile_save: no owner.");
      return TRUE;
    }
  
    /* save the actual player file */
    save_player(dMob);
  
    /* enqueue a new event to save the pfile in 2 minutes */
    event = alloc_event();
    event->fun = &event_mobile_save;
    event->type = EVENT_MOBILE_SAVE;
    add_event_mobile(event, dMob, 2 * 60 * PULSES_PER_SECOND);
  
    return FALSE;
  }
  
  bool event_socket_idle(EVENT_DATA *event)
  {
    D_SOCKET *dSock;
  
    /* Check to see if there is an owner of this event.
     * If there is no owner, we return TRUE, because
     * it's the safest - and post a bug message.
     */
    if ((dSock = event->owner.dSock) == NULL)
    {
      bug("event_socket_idle: no owner.");
      return TRUE;
    }
  
    /* tell the socket that it has idled out, and close it */
    text_to_socket(dSock, "You have idled out...\n\n\r");
    close_socket(dSock, FALSE);
  
    /* since we closed the socket, all events owned
     * by that socket has been dequeued, and we need
     * to return TRUE, so the caller knows this.
     */
    return TRUE;
  }
  