Greeterbot
Uit 3Dwiki
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.
- in C voor de AW SDK
- in C++ voor Andras' Linux SDK
- C# voor Byte's .NET wrapper
- in VB voor de AW SDK
- in PureBasic voor Neophile's SDK
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
