Simple greeter bot: Difference between revisions

From Virtual Paradise Wiki
Jump to navigation Jump to search
No edit summary
(Fix code to work with newer SDK)
 
Line 27: Line 27:
     }
     }


     sdk = vp_create();
     sdk = vp_create(NULL);


     if(err = vp_connect_universe(sdk, "universe.virtualparadise.org", 57000))
     if(err = vp_connect_universe(sdk, "universe.virtualparadise.org", 57000))

Latest revision as of 22:12, 30 July 2021

C/C++

In order to use the Virtual Paradise C SDK you must:

  • Have Visual Studio, Visual C++ Express or another compatible C/C++ IDE+Compiler installed and configured
  • Download the x86 SDK from the Developer Downloads page
#include <VPSDK/VP.h>
#include <stdio.h>
#include <stdlib.h>

#define Username "username"
#define Password "password"
#define Botname  "greeterbot"
#define Worldname "testworld"

void event_avatar_add(VPInstance sdk);

int main(int argc, char ** argv)
{
    int err;
    VPInstance sdk;

    if(err = vp_init(VPSDK_VERSION))
    {
        printf("Couldn't initialize VP API(reason %d)", err);
        return 1;
    }

    sdk = vp_create(NULL);

    if(err = vp_connect_universe(sdk, "universe.virtualparadise.org", 57000))
    {
        printf("Couldn't connect to universe(reason %d)", err);
        return 1;
    }
    
    if(err = vp_login(sdk, Username, Password, Botname))
    {
        printf("Couldn't login(reason %d)", err);
        return 1;
    }
    
    if(err = vp_enter(sdk, Worldname))
    {
        printf("Couldn't enter world(reason %d)", err);
        return 1;
    }
    
    vp_event_set(sdk, VP_EVENT_AVATAR_ADD, event_avatar_add);
    
    vp_state_change(sdk);
    
    while(vp_wait(sdk, 1000) == 0){}
    return 0;
}

void event_avatar_add(VPInstance sdk)
{
    char message[300];
    sprintf((char*)&message, "Hello, %s!", vp_string(sdk, VP_AVATAR_NAME));
    vp_say(sdk, (char*)&message);
}

C#

Requirements for building and running the code below:

  • C# console application project (at least .NET Framework 4.6.1 or .NET Core 2.0)
  • Reference to the VpNet NuGet package (version 1.0.9.2960-alpha or later)
  • vpsdk.dll present in the output folder, this can be downloaded from the developer downloads page
  • Language version for your project set to at least C# 7.1 (In Visual Studio: Project Properties ▶ Build ▶ Advanced... ▶ Language Version)
using System.Threading.Tasks;
using VpNet;

namespace GreeterBot
{
    class Program
    {
        static async Task Main(string[] args)
        {
            var instance = new Instance();

            // Register the events you wish to capture (such as avatar entry)
            instance.OnAvatarEnter += Instance_OnAvatarEnter;
            instance.OnAvatarLeave += Instance_OnAvatarLeave;

            await instance.ConnectAsync();
            await instance.LoginAsync("Username", "Password", "MyBotName");
            await instance.EnterAsync("MyWorld");

            // Announce the position in the world, this allows the bot to receive avatar and chat events
            instance.UpdateAvatar(0.0f, 0.0f, 0.0f);

            // Wait forever
            while (true)
            {
                await Task.Delay(System.TimeSpan.FromMilliseconds(int.MaxValue));
            }
        }

        private static void Instance_OnAvatarEnter(Instance sender, AvatarEnterEventArgsT<Avatar<Vector3>, Vector3> args)
        {
            sender.Say($"Hello {args.Avatar.Name}");
        }

        private static void Instance_OnAvatarLeave(Instance sender, AvatarLeaveEventArgsT<Avatar<Vector3>, Vector3> args)
        {
            sender.Say($"Goodbye {args.Avatar.Name}");
        }
    }
}

VB .Net

Requirements for building and running the code below:

  • VB console application project (at least .NET Framework 4.6.1 or .NET Core 2.0)
  • Reference to the VpNet NuGet package (version 1.0.9.2960-alpha or later)
  • vpsdk.dll present in the output folder, this can be downloaded from the developer downloads page
Imports VpNet

Module Program
    Sub Main(args As String())
        MainAsync().GetAwaiter().GetResult()
    End Sub

    Async Function MainAsync() As Task
        Dim instance = New Instance

        ' Register the events you wish to capture (such as avatar entry)
        AddHandler instance.OnAvatarEnter, AddressOf Instance_OnAvatarEnter
        AddHandler instance.OnAvatarLeave, AddressOf Instance_OnAvatarLeave

        Await instance.ConnectAsync()
        Await instance.LoginAsync("Username", "Password", "MyBotName")
        Await instance.EnterAsync("MyWorld")

        ' Announce the position in the world, this allows the bot to receive avatar and chat events
        instance.UpdateAvatar(0.0F, 0.0F, 0.0F)

        ' Wait forever
        While True
            Await Task.Delay(System.TimeSpan.FromMilliseconds(Integer.MaxValue))
        End While
    End Function

    Private Sub Instance_OnAvatarEnter(sender As Instance, args As AvatarEnterEventArgsT(Of Avatar(Of Vector3), Vector3))
        sender.Say($"Hello {args.Avatar.Name}")
    End Sub

    Private Sub Instance_OnAvatarLeave(sender As Instance, args As AvatarLeaveEventArgsT(Of Avatar(Of Vector3), Vector3))
        sender.Say($"Goodbye {args.Avatar.Name}")
    End Sub
End Module