示例#1
0
文件: Program.cs 项目: jjrh/OpenEQ
        static void Main(string[] args)
        {
            //EQStream.Debug = true;

            var running = true;
            var login   = new LoginStream("192.168.1.119", 5998);

            login.LoginSuccess += (sender, success) => {
                if (success)
                {
                    WriteLine("Login successful. Requesting server list.");
                    login.RequestServerList();
                }
                else
                {
                    WriteLine("Login failed.");
                    running = false;
                }
            };

            login.ServerList += (sender, servers) => {
                WriteLine($"Got {servers.Count} servers:");
                foreach (var server in servers)
                {
                    WriteLine($"- '{server.Longname}' @ {server.WorldIP} is {server.Status} with {server.PlayersOnline} players");
                }
                var chosen = servers[0];
                WriteLine($"Sending play request for server '{chosen.Longname}' @ {chosen.WorldIP}");
                login.Play(chosen);
            };

            login.PlaySuccess += (sender, server) => {
                if (server == null)
                {
                    WriteLine("Play request rejected.");
                    running = false;
                }
                else
                {
                    WriteLine("Play request accepted.  Initializing world.");
                    var world = new WorldStream(server?.WorldIP, 9000, login.accountID, login.sessionKey);
                    SetupWorld(world);
                }
            };

            login.Login("testacct", "testacct");

            while (running)
            {
                Thread.Sleep(100);
            }

            WriteLine("Completed.");
            ReadLine();
        }
示例#2
0
    void OnPlaySuccess(object sender, ServerListElement?server)
    {
        Debug.Log("Play Response: " + server);
        if (isInitialized)
        {
            return;
        }
        if (server == null)
        {
            Debug.LogError("No server responded, likely a malformed request");
            return;
        }
        world = new WorldStream(server.Value.WorldIP, 9000, login.accountID, login.sessionKey);
        //SceneSystem.SceneInstance.Scene = Content.Load<Scene>("WorldScene");
        //var wui = SceneSystem.SceneInstance.Scene.Entities.Where(x => x.Name == "WorldDialog").First();

        /*foreach (var comp in wui.Components)
         *  if (comp is WorldScript)
         *      ((WorldScript)comp).world = new WorldStream(server.Value.WorldIP, 9000, login.accountID, login.sessionKey);*/

        InitializeWorld();
    }
示例#3
0
文件: Program.cs 项目: jjrh/OpenEQ
        static void SetupWorld(WorldStream world)
        {
            string charname = null;

            world.CharacterList += (sender, chars) => {
                WriteLine($"Got {chars.Count} characters:");
                foreach (var character in chars)
                {
                    WriteLine($"- {character.Name} - Level {character.Level}");
                }
                charname = chars[0].Name;
                WriteLine($"Entering world with { charname }");
                world.EnterWorld(charname, false, false);
            };

            world.ZoneServer += (sender, server) => {
                WriteLine($"Zone server info: {server.Host}:{server.Port}");

                var zone = new ZoneStream(server.Host, server.Port, charname);
                SetupZone(zone);
            };
        }
示例#4
0
    private void OnDestroy()
    {
        Debug.Log("Cleaning up subscriptions on exit");
        if (login != null)
        {
            login.PlaySuccess  -= OnPlaySuccess;
            login.LoginSuccess -= OnLoginSuccess;
            login.ServerList   -= OnServerList;

            login.Disconnect();
        }
        login = null;

        if (world != null)
        {
            world.CharacterList  -= OnCharacterList;
            world.ChatServerList -= OnChatServerList;
            world.ZoneServer     -= OnZoneServer;

            world.Disconnect();
        }
        world = null;

        if (zone != null)
        {
            //try to camp out
            zone.SendCamp();

            zone.ZoneEntry                  -= OnZoneEntry;
            zone.DeleteSpawn                -= OnDeleteSpawn;
            zone.ChannelMessage             -= OnChannelMessage;
            zone.SpawnHPUpdate              -= OnSpawnHPUpdate;
            zone.SpawnPositionUpdate        -= OnSpawnPositionUpdate;
            zone.PlayerPositionUpdateServer -= OnPlayerPositionUpdateServer;
            zone.Disconnect();
        }
        zone = null;
    }
示例#5
0
        static void ConnectWorld(LoginStream ls, ServerListElement server)
        {
            WriteLine($"Selected {server}.  Connecting.");
            var worldStream = new WorldStream(server.WorldIP, 9000, ls.AccountID, ls.SessionKey);

            string charName = null;

            worldStream.CharacterList += (_, chars) => {
                WriteLine("Select a character:");
                WriteLine("0: Create a new character");
                chars.ForEach((@char, i) => WriteLine($"{i + 1}: {@char.Name} - Level {@char.Level}"));
                int ret;
                while (!int.TryParse(Input("Character number"), out ret) || ret < 0 || chars.Count < ret)
                {
                }
                if (ret == 0)
                {
                    CreateCharacter();
                }
                else
                {
                    worldStream.SendEnterWorld(new EnterWorld(charName = chars[ret - 1].Name, false, false));
                }
            };

            void CreateCharacter()
            {
                charName = Input("Name");
                worldStream.SendNameApproval(new NameApproval {
                    Name    = charName,
                    Class   = 3,
                    Race    = 1,
                    Unknown = 214
                });
            }

            worldStream.CharacterCreateNameApproval += (_, success) => {
                if (!success)
                {
                    WriteLine("Name not approved by server");
                    CreateCharacter();
                }
                else
                {
                    WriteLine("Name approved, creating");
                    worldStream.SendCharacterCreate(new CharCreate {
                        Class_          = 1,
                        Haircolor       = 255,
                        BeardColor      = 255,
                        Beard           = 255,
                        Gender          = 0,
                        Race            = 2,
                        StartZone       = 29,
                        HairStyle       = 255,
                        Deity           = 211,
                        STR             = 113,
                        STA             = 130,
                        AGI             = 87,
                        DEX             = 70,
                        WIS             = 70,
                        INT             = 60,
                        CHA             = 55,
                        Face            = 0,
                        EyeColor1       = 9,
                        EyeColor2       = 9,
                        DrakkinHeritage = 1,
                        DrakkinTattoo   = 0,
                        DrakkinDetails  = 0,
                        Tutorial        = 0
                    });
                }
            };

            worldStream.ZoneServer += (_, zs) => {
                WriteLine($"Got zone server at {zs.Host}:{zs.Port}.  Connecting");
                ConnectZone(charName, zs.Host, zs.Port);
            };
        }
示例#6
0
        static void Main(string[] args)
        {
            var _waitForLogin = new AutoResetEvent(false);

            //EQStream.Debug = true;

            var running = true;
            var login   = new LoginStream("127.0.0.1", 5999);

            login.LoginSuccess += (sender, success) => {
                if (success)
                {
                    WriteLine("Login successful. Requesting server list.");
                    login.RequestServerList();
                }
                else
                {
                    WriteLine("Login failed.");
                    running = false;
                }
            };

            login.ServerList += (sender, servers) => {
                WriteLine($"Got {servers.Count} servers:");
                foreach (var server in servers)
                {
                    WriteLine(
                        $"- '{server.Longname}' @ {server.WorldIP} is {server.Status} with {server.PlayersOnline} players");
                }

                var chosen = servers.First(s => s.Longname.Contains("Ex1Gj0"));
                //var chosen = servers[0];
                WriteLine($"Sending play request for server '{chosen.Longname}' @ {chosen.WorldIP}");
                login.Play(chosen);
            };

            login.PlaySuccess += (sender, server) => {
                if (server == null)
                {
                    WriteLine("Play request rejected.");
                    running = false;
                }
                else
                {
                    WriteLine("Play request accepted.  Initializing world.");
                    var world = new WorldStream(server?.WorldIP, 9000, login.accountID, login.sessionKey);
                    SetupWorld(world);
                }
            };

            login.Login("daeken", "omgwtfbbq");

            //_waitForLogin.WaitOne();
            while (running)
            {
                Thread.Sleep(100);
            }

            WriteLine("Completed.");
            ReadLine();
        }
示例#7
0
        static void SetupWorld(WorldStream world)
        {
            string charname = null;

            world.CharacterCreateNameApproval += (sender, approvalState) => {
                if (1 == approvalState)
                {
                    // approved.  Send charactercreate and EnterWorld.
                    world.SendCharacterCreate(new CharCreate {
                        Class_          = 1,
                        Haircolor       = 255,
                        BeardColor      = 255,
                        Beard           = 255,
                        Gender          = 0,
                        Race            = 2,
                        StartZone       = 29,
                        HairStyle       = 255,
                        Deity           = 211,
                        STR             = 113,
                        STA             = 130,
                        AGI             = 87,
                        DEX             = 70,
                        WIS             = 70,
                        INT             = 60,
                        CHA             = 55,
                        Face            = 0,
                        EyeColor1       = 9,
                        EyeColor2       = 9,
                        DrakkinHeritage = 1,
                        DrakkinTattoo   = 0,
                        DrakkinDetails  = 0,
                        Tutorial        = 0
                    });

                    world.SendEnterWorld(new EnterWorld {
                        Name     = charname,
                        GoHome   = false,
                        Tutorial = false
                    });
                }
                else
                {
                    // Denied.  Let them try a different name.
                }
            };

            world.CharacterList += (sender, chars) => {
                WriteLine($"Got {chars.Count} characters:");

                if (0 == chars.Count)
                {
                    charname = "JimTomShiner";

                    Console.WriteLine("0 Characters found.  Simple char creation:");
                    Console.WriteLine($"1. Barbarian, Male, Warrior, Name is {charname}");
                    Console.WriteLine("Enter number of the character type you want and press Enter.");
                    var selection = Console.ReadLine();

                    // Send char create packet with defaults.
                    world.SendNameApproval(new NameApproval {
                        Name    = charname,
                        Class   = 3,
                        Race    = 1,
                        Unknown = 214
                    });
                }
                else
                {
                    foreach (var character in chars)
                    {
                        WriteLine($"- {character.Name} - Level {character.Level}");
                    }

                    Console.WriteLine("Enter a character number and press Enter.");
                    var charNum = "1";                    //Console.ReadLine();
                    charname = chars[Convert.ToInt32(charNum) - 1].Name;
                    WriteLine(chars[0]);
                    WriteLine($"Entering world with {charname}");
                    //world.ResetAckForZone();
                    world.SendEnterWorld(new EnterWorld {
                        Name     = charname,
                        GoHome   = false,
                        Tutorial = false
                    });
                }
            };

            world.ZoneServer += (sender, server) => {
                WriteLine($"Zone server info: {server.Host}:{server.Port}");

                var zone = new ZoneStream(server.Host, server.Port, charname);
                SetupZone(zone);
            };
        }