Home Bot

From Virtual Paradise Wiki
Jump to navigation Jump to search

Home Bot is an open source C# program available free of download for anyone to use. It was created as a resource for new programmers to begin the core concepts of understanding the software development kit.

About

Home Bot is an open source C# program available free of download for anyone to use. It was created as a resource for new programmers to begin the core concepts of understanding the software development kit.

Source Code

Bot.cs

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Linq;
using System.Text;
using System.IO;
using System.Data;
using System.Threading;

using VpNet;
using VpNet.Abstract;
using VpNet.Extensions;

using homeBot;
using homeBot.Commands;

namespace homeBot
{
    public class Bot
    {
        public Config myConfig = new Config();
        public playerCommands myCommands = new playerCommands();
        Instance myBot;

        public void Initialize()
        {
            #region Login Area
            myBot = new Instance();
            try
            {
                myBot.Connect();
                myBot.Login(myConfig.Username, myConfig.Password, myConfig.Botname);
                myBot.Enter(myConfig.Worldname);
                myBot.UpdateAvatar(new Vector3(myConfig.Coordinates[0], myConfig.Coordinates[1],  myConfig.Coordinates[2]));
            }
            catch (Exception Ex)
            {
                Console.WriteLine(Ex.Message);
            }
            #endregion

            #region Event Controllers
            myBot.OnAvatarEnter += HandleAvatarEnter;
            myBot.OnAvatarLeave += HandleAvatarLeave;
            myBot.OnChatMessage += HandleChat;
            #endregion

            #region Wait Loop
            while (true)
            {
                myBot.Wait(0);
            }
            #endregion
        }

        #region Avatar Related Events
        void HandleAvatarEnter(Instance mrSender, AvatarEnterEventArgsT<Avatar<Vector3>, Vector3> myArgs)
        {
            if (!myArgs.Avatar.IsBot)
            {
                myBot.Say(string.Format("Welcome {0} to {1}'s beautiful home.", myArgs.Avatar.Name, myConfig.Username));
            }
        }

        void HandleAvatarLeave(Instance mrSender, AvatarLeaveEventArgsT<Avatar<Vector3>, Vector3> myArgs)
        {
        }

        void HandleChat(Instance myInstance, ChatMessageEventArgsT<Avatar<Vector3>, ChatMessage, Vector3, Color> myArgs)
        {
            if (!myArgs.Avatar.IsBot)
            {
                myCommands.myInstance = myInstance;
                myCommands.ChatArgs = myArgs;

                myCommands.ChatSelect();
            }
        }
        #endregion
    }
}

Config.cs

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Xml.Serialization;

namespace homeBot
{
    [Serializable]
    public class Config
    {
        public string Username;
        public string Password;

        public string Botname;

        public string Worldname;

        public float[] Coordinates;

        public void Load()
        {
            if (File.Exists("Configuration.xml"))
            {
                XmlSerializer MySerializer = new XmlSerializer(typeof(Config));
                StreamReader MyStreamReader = new StreamReader("Configuration.xml");
                Config myConfig = (Config)MySerializer.Deserialize(MyStreamReader);

                foreach (var Field in typeof(Config).GetFields())
                {
                    Field.SetValue(this, Field.GetValue(myConfig));
                }

                MyStreamReader.Close();
            }
            else
            {
                Save();
            }
        }

        private void Save()
        {
            Coordinates = new float[3];

            Console.Clear();
            Console.Write("Username: ");
            Username = Console.ReadLine();
            Console.Write("Password: ");
            Password = Console.ReadLine();

            Console.Clear();
            Console.Write("Worldname: ");
            Worldname = Console.ReadLine();
            Console.Write("Botname: ");
            Botname = Console.ReadLine();

            Console.Clear();
            Console.Write("X: ");
            Coordinates[0] = float.Parse(Console.ReadLine());
            Console.Write("Y: ");
            Coordinates[1] = float.Parse(Console.ReadLine());
            Console.Write("Z: ");
            Coordinates[2] = float.Parse(Console.ReadLine());

            XmlSerializer MySerializer = new XmlSerializer(typeof(Config));
            StreamWriter MyStreamWriter = new StreamWriter("Configuration.xml");

            MySerializer.Serialize(MyStreamWriter, this);
            MyStreamWriter.Close();
            Console.Clear();
        }
    }
}

Program.cs

using System;
using System.IO;
using System.Reflection;
using System.Threading;

using VpNet.Abstract;
using VpNet.ManagedApi.System.PluginFramework;
using VpNet.NativeApi;
using VpNet.PluginFramework;
using VpNet.Extensions;
using VpNet.PluginFramework.Interfaces;

namespace homeBot
{
    class Program
    {
        static void MainMenu()
        {
            while (true)
            {
                Console.WriteLine("0 - Exit");
                Console.WriteLine();

                Console.Write("Command: ");
                int myInput = int.Parse(Console.ReadLine());

                switch (myInput)
                {
                    case 0:
                        Environment.Exit(0);
                        break;
                    default:
                        break;
                }

                Console.Clear();
            }
        }

        static void Main(string[] args)
        {
            Console.Title = "Virtual Paradise Homebot";

            Bot HomeBot = new Bot();

            HomeBot.myConfig.Load();

            Thread T = new Thread(new ThreadStart(HomeBot.Initialize));

            T.Start();

            MainMenu();
        }
    }
}

Commands.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.VisualBasic;

using VpNet;
using VpNet.Abstract;
using VpNet.Extensions;

namespace homeBot.Commands
{
    public class playerCommands
    {
        public ChatMessageEventArgsT<Avatar<Vector3>, ChatMessage, Vector3, Color> ChatArgs;
        public Instance myInstance;

        public void ChatSelect()
        {
            string[] Messages = ChatArgs.ChatMessage.Message.Split(' ');

            for(int i = 0; i <= (Messages.Length - 1); i++)
            {
                Messages[i] = Messages[i].ToLower();
            }

            switch (Messages[0])
            {
                case "/version":
                    myInstance.Say("Version 1.0.0.0, HomeBot open source learning bot");
                    break;
                default:
                    break;
            }
        }
    }
}