Greeterbot

Uit 3Dwiki

Ga naar: navigatie, zoeken

Greeterbot is een voorbeeld bot die vaak gemaakt wordt voor bij een SDK om te laten zien hoe je met die SDK een werkende robot krijgt. Net zoiets als Hello World.

Voor verschillende programmeertalen zijn er greeterbots te vinden.

Hieronder staan voor een aantal programmeertalen voorbeelden van greeterbots.

Inhoud

[bewerken] C

Zie hier de code voor een greeterbot in C.

Bij de functie aw_create() moet je opgeven wat de hostnaam en de poort van het universum is. Bovenin de code kun je deze invullen. Zie robot inloggen voor de juiste host en poort.

/* greeter.c : Een simpele Active Worlds greeterbot in C. */
 
#include "aw.h"
#include <stdio.h>
#include <stdlib.h>
 
#define HOST   "auth.activeworlds.com"  /* Het adres waar je bot moet inloggen. */
#define POORT  6702                     /* De poort waar je bot moet inloggen. */
#define WERELD "Beta"                   /* De wereld die je bot moet binnen gaan. */
 
#define BEWONERSNUMMER 1024             /* Je bewonersnummer. */
#define WACHTWOORD     "helloworld"     /* Je privilege-wachtwoord. */
#define BOTNAAM        "GreeterBot"     /* De naam van de bot. */
 
void handle_avatar_add(void);
 
int main()
{
    int rc;
 
    /* Initialiseer de Active Worlds API. */
    if (rc = aw_init(AW_BUILD))
    {
        printf("Kan AW API niet initialiseren (reden: %d).\n", rc);
        exit(1);
    }
 
    /* Als een avatar de wereld binnenkomt: een functie aanroepen. */
    aw_event_set(AW_EVENT_AVATAR_ADD, handle_avatar_add);
 
    /* Een nieuwe bot aanmaken. */
    if (rc = aw_create(HOST, POORT, 0))
    {
        printf("Kan geen bot aanmaken (reden: %d).\n", rc);
        exit(1);
    }
 
    /* De bot inloggen in het universum. */
    aw_int_set(AW_LOGIN_OWNER, BEWONERSNUMMER);
    aw_string_set(AW_LOGIN_PRIVILEGE_PASSWORD, WACHTWOORD);
    aw_string_set(AW_LOGIN_APPLICATION, "SDK voorbeeld");
    aw_string_set(AW_LOGIN_NAME, BOTNAAM);
    if (rc = aw_login())
    {
        printf("Kan niet inloggen (reden: %d).\n", rc);
        exit(1);
    }
 
    /* Laat de bot de wereld binnengaan. */
    if (rc = aw_enter(WERELD))
    {
        printf("Kan wereld niet binnengaan (reden: %d).\n", rc);
        exit(1);
    }
 
    /* De positie van de bot bekend maken in de wereld. */
    aw_int_set(AW_MY_X, 1000);    /* 1W */
    aw_int_set(AW_MY_Z, 1000);    /* 1N */
    aw_int_set(AW_MY_YAW, 2250);  /* Kijkend naar GZ */
    if (rc = aw_state_change())
    {
        printf("Kan status niet veranderen (reden: %d).\n", rc);
        exit(1);
    }
 
    /* Event loop. */
    while (!aw_wait(-1))
        ;
 
    /* Afsluiten. */
    aw_destroy();
    aw_term();
    return 0;
}
 
/* handle_avatar_add() : Deze functie wordt aangeroepen als een avatar de wereld binnenkomt. */
void handle_avatar_add(void)
{
    char message[64];
 
    /* Groet de nieuwe avatar en schrijf ook een berichtje naar de console. */
    sprintf(message, "Hoi, %s!", aw_string(AW_AVATAR_NAME));
    aw_say(message);
 
    printf("avatar_add: %s\n", aw_string(AW_AVATAR_NAME));
}

[bewerken] C#

Zie hier de code voor een greeterbot in C#. Bij het aanmaken van een nieuw Instance object moet je de host en poort opgeven, zie robot inloggen.

// GreeterBot.cs : Een simpele Active Worlds greeterbot in C#.
 
using System;
using AW;
 
namespace GreeterBot
{
    class Program
    {
        const string Host = "auth.activeworlds.com";  // Het adres waar je bot moet inloggen.
        const int Port = 5670;                        // De poort waar je bot moet inloggen.
        const string BotNaam = "GreeterBot";          // De naam van je bot.
 
        // Main() : Beginpunt van het programma.
        static void Main(string[] args)
        {
            try
            {
                // Een nieuwe bot aanmaken.
                Instance greeter = new Instance(Host, Port);
 
                // Als een avatar de wereld binnenkomt: een functie aanroepen.
                greeter.EventAvatarAdd += new Instance.Event(HandleAvatarAdd);
 
                // Vraag om het bewonersnummer.
                Console.Write("Voer je bewonersnummer in: ");
                int bewonersnummer = int.Parse(Console.ReadLine());
 
                // Vraag om het privilegewachtwoord.
                Console.Write("Voer je privilegewachtwoord in: ");
                string wachtwoord = Console.ReadLine();
 
                // Log de bot in met de opgegeven informatie.
                greeter.SetString(Attributes.LoginName, BotNaam);
                greeter.SetInt(Attributes.LoginOwner, bewonersnummer);
                greeter.SetString(Attributes.LoginPrivilegePassword, wachtwoord);
                greeter.Login();
 
                // Vraag de wereld om binnen te gaan.
                Console.Write("Voor een de te bezoeken wereld in: ");
                string wereld = Console.ReadLine();
                greeter.Enter(wereld);
 
                // Bepaal de positie van de bot binnen de wereld.
                greeter.SetInt(Attributes.MyX, 1000);    // 1W
                greeter.SetInt(Attributes.MyZ, 1000);    // 1N
                greeter.SetInt(Attributes.MyYaw, 2250);  // Kijkend naar centrum
                greeter.StateChange();
 
                // Event-lus.
                while (Utility.Wait(0) == 0)
                    ;
            }
            catch (InstanceException ex)
            {
                // Deze code handelt fouten af. Een beschrijving van de fout wordt afgedrukt.
                Console.WriteLine("Er is een fout opgetreden in GreeterBot (reden: {0}, {1}).",
                    ex.ErrorCode, Utility.ReturnCodes[ex.ErrorCode]);
            }
        }
 
        // HandleAvatarAdd() : Deze functie wordt aangeroepen als een avatar de wereld binnenkomt.
        static void HandleAvatarAdd(Instance sender)
        {
            // Groet de nieuwe avatar en schrijf ook een berichtje naar de console.
            sender.Say("Hoi, {0}!", sender.GetString(Attributes.AvatarName));
            Console.WriteLine("avatar_add: ", sender.GetString(Attributes.AvatarName));
        }
    }
}

[bewerken] PHP

Zie hier de code voor een greeterbot in PHP.

<?
include("aw.php");
 
$host			= "auth.activeworlds.com"; // Het adres waar je bot moet inloggen.
$poort			= 6702;			   // De poort waar je bot moet inloggen.
$wereld		= "Beta";		   // De wereld die je bot moet binnen gaan.
 
$bewonersnummer	= 1024;			   // Je bewonersnummer.
$wachtwoord		= "helloworld";		   // Je privilege-wachtwoord.
$botnaam		= "GreeterBot";		   // De naam van de bot.
 
//handle_avatar_add() : Deze functie wordt aangeroepen als een avatar de wereld binnenkomt.
function avatar_add()
{
    aw_whisper(aw_int(AW_AVATAR_SESSION), "Hoi, " . aw_string(AW_AVATAR_NAME) . "!");
}
 
//Initialiseer de Active Worlds API.
aw_init(AW_BUILD);
 
//Een nieuwe bot aanmaken.
$inst = aw_php_create($host, $poort);
 
//Als een avatar de wereld binnenkomt: een functie aanroepen.
aw_php_event_set(AW_EVENT_AVATAR_ADD, 'avatar_add');
 
//De bot inloggen in het universum.
aw_string_set(AW_LOGIN_NAME, $botnaam);
aw_string_set(AW_LOGIN_PRIVILEGE_PASSWORD, $wachtwoord);
aw_int_set(AW_LOGIN_OWNER, $bewonersnummer);
//Login
aw_login();
 
//Laat de bot een wereld binnengaan.
aw_enter($wereld);
 
//De positie van de bot bekend maken in de wereld.
aw_state_change();
 
//Event loop.
while(aw_wait(0) == 0);
 
//Afsluiten.
aw_destroy();
aw_term();
?>

[bewerken] VB.NET

Zie hier de code voor een greeterbot in VB.NET.

Imports AW
 
Module GreeterBot
    'Declare a variable named greeter with the type of Instance.
    'For simplified event handling (no use of delegates) declare it using
    'the WithEvents keyword
    Private WithEvents greeter As Instance
 
    Sub Main()
        'Declare some local variables used to log the bot into the AW universe.
        Dim owner As Integer
        Dim password As String
        Dim world As String
 
        'Prompt the user for their citizen number
        Console.Write("Vul bewonersnummer in: ")
        owner = Integer.Parse(Console.ReadLine())
 
        'Prompt the user for the privilege password
        Console.Write("Vul privilege wachtwoord in: ")
        password = Console.ReadLine()
 
        'Prompt the user for the world to greet in
        Console.Write("Vul de wereld in: ")
        world = Console.ReadLine()
 
        'As of Beta 5, you are now required to check for exceptions coming from the SDK
        'This means that ALL calls to methods associated with the Instance class must 
        'be encased in a Try block with the appropriate Catch for InstanceException
        Try
            'Instantiate a new instance
            greeter = New Instance()
 
            'Set the login attributes and log the bot into the universe
            greeter.SetString(Attributes.LoginName, "GreeterBot")
            greeter.SetString(Attributes.LoginPrivilegePassword, password)
            greeter.SetInt(Attributes.LoginOwner, owner)
            greeter.Login()
 
            'Have the bot enter the specified world
            greeter.Enter(world)
 
            'Have the bot change state to 0n 0w 0a
            greeter.SetInt(Attributes.MyX, 0) 'X position of the bot (E/W)
            greeter.SetInt(Attributes.MyY, 0) 'Y position of the bot (height)
            greeter.SetInt(Attributes.MyZ, 0) 'Z position of the bot (N/S)
            greeter.StateChange()
 
            'Catches any exceptions thrown by the wrapper and outputs them.
        Catch ex As InstanceException
            Console.WriteLine(ex.Message)
        End Try
 
        'Enter an infinite loop
        While Utility.Wait(0) = 0
        End While
    End Sub
 
    'Here we declare a private method for handling avatars entering the world
    'The best method for handling events with the SDK is now to use Delegates
    'like one would in C#, but rather to use the Handles keyword.  Here the
    'method handles the EventAvatarAdd method of the instance greeter.
    '
    'There are several other ways to handle events like this in VB, but this
    'is the simplest way to do so.
    Private Sub HandleAvatarAdd(ByVal sender As Instance) Handles greeter.EventAvatarAdd
        Try
            'Store session and name for later use.  Generally storing attributes
            'at the start of an event is best practice when operating with the SDK
            Dim session As Integer = sender.GetInt(Attributes.AvatarSession)
            Dim name As String = sender.GetString(Attributes.AvatarName)
 
            'Send a whisper to the avatar entering the world
            sender.Whisper(session, "Greetings, {0}!", name)
        Catch ex As InstanceException
            Console.WriteLine(ex.Message)
        End Try
    End Sub
End Module
Persoonlijke instellingen