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(); }
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(); }
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); }; }
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; }
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); }; }
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(); }
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); }; }