SDK Sample Program 1

From ActiveWiki
Jump to navigation Jump to search

A simple greeter bot

This program implements a very simple bot. The bot logs into the universe, enters a world, and says "hello" to every user that enters the world. You will need to download the AWSDK to use this program.


#define AW_NO_FUNCTION_MAPPING // for UTF-8 or older single-byte and multi-byte character sets

#include "aw.h"
#include <stdio.h>
#include <stdlib.h>

void handle_avatar_add (void);

int main (int argc, char *argv[])
{

  int rc;

  /* check command line */
  if (argc < 3) {
    printf ("Usage: %s number password\n", argv[0]);
    exit (1);
  }

  /* initialize Active Worlds API */
  if (rc = aw_init (AW_BUILD)) {
    printf ("Unable to initialize API (reason %d)\n", rc);
    exit (1);
  }

  /* install handler for avatar_add event */
  aw_event_set (AW_EVENT_AVATAR_ADD, handle_avatar_add);

  /* create bot instance */
  if (rc = aw_create (0, 0, 0)) {
    printf ("Unable to create bot instance (reason %d)\n", rc);
    exit (1);
  }

  /* log bot into the universe */
  aw_int_set (AW_LOGIN_OWNER, atoi (argv[1]));
  aw_string_set (AW_LOGIN_PRIVILEGE_PASSWORD, argv[2]);
  aw_string_set (AW_LOGIN_APPLICATION, "SDK Sample Application #1");
  aw_string_set (AW_LOGIN_NAME, "GreeterBot");
  if (rc = aw_login ()) {
    printf ("Unable to login (reason %d)\n", rc);
    exit (1);
  }

  /* log bot into the world called "beta" */
  if (rc = aw_enter ("Beta")) {
    printf ("Unable to enter world (reason %d)\n", rc);
    exit (1);
  }

  /* announce our position in the world */
  aw_int_set (AW_MY_X, 1000); /* 1W */
  aw_int_set (AW_MY_Z, 1000); /* 1N */
  aw_int_set (AW_MY_YAW, 2250); /* face towards GZ */
  if (rc = aw_state_change ()) {
    printf ("Unable to change state (reason %d)\n", rc);
    exit (1);
  }

  /* main event loop */
  while (!aw_wait (-1))
    ;

  /* close everything down */
  aw_destroy ();
  aw_term ();
  return 0;

}

void handle_avatar_add (void)
{

  char message[100];

  sprintf (message, "Hello %s", aw_string (AW_AVATAR_NAME));
  aw_say (message);
  /* log the event to the console */
  printf ("avatar_add: %s\n", aw_string (AW_AVATAR_NAME));

}

Troubleshooting

Visual Studio 2010

If the greeterbot does not compile, check for the following:

  • Character Set
    • If you create the Greeterbot VS Project as a Windows Console Project, the default character set will be Unicode and the program will not compile. You can change the character set from Unicode to Multi-Byte from the project's property page.
      • Project > projectName Properties > Configuration Properties > General:
      • Look for the 'Character Set' option, and change to Multi-Byte from there.
  • Library
    • Be sure that aw.dll is in an easy to find location.
    • Be sure to add aw.lib as a dependency.
      • Project > projectName Properties > Configuration Properties > Linker > Input:
      • Add aw.lib to the Additional Dependencies option.
    • You may need to specify the directory that aw.lib is in. You can do this from the project's property page.
      • Project > projectName Properties > Configuration Properties > VC++ Directories:
      • Navigate to the Library Directories option and add what you need from there.