private void PacketHandler_0x10_ClientJoin(Client client, ClientPacket packet) { var seed = packet.ReadByte(); var keyLength = packet.ReadByte(); var key = packet.Read(keyLength); var name = packet.ReadString8(); var id = packet.ReadUInt32(); var redirect = ExpectedConnections[id]; if (redirect.Matches(name, key, seed)) { ((IDictionary)ExpectedConnections).Remove(id); client.EncryptionKey = key; client.EncryptionSeed = seed; if (redirect.Source is Lobby) { var x60 = new ServerPacket(0x60); x60.WriteByte(0x00); x60.WriteUInt32(Game.NotificationCrc); client.Enqueue(x60); } } }
private void PacketHandler_0x10_ClientJoin(Client client, ClientPacket packet) { var seed = packet.ReadByte(); var keyLength = packet.ReadByte(); var key = packet.Read(keyLength); var name = packet.ReadString8(); var id = packet.ReadUInt32(); var redirect = ExpectedConnections[id]; if (Game.World.WorldData.TryGetAuthInfo(name, out AuthInfo login)) { login.CurrentState = UserState.Login; login.Save(); } if (redirect.Matches(name, key, seed)) { ((IDictionary)ExpectedConnections).Remove(id); client.EncryptionKey = key; client.EncryptionSeed = seed; if (redirect.Source is Lobby || redirect.Source is World) { var x60 = new ServerPacket(0x60); x60.WriteByte(0x00); x60.WriteUInt32(Game.NotificationCrc); client.Enqueue(x60); } } }
private void PacketHandler_0x4F_ProfileTextPortrait(Object obj, ClientPacket packet) { var user = (User) obj; var totalLength = packet.ReadUInt16(); var portraitLength = packet.ReadUInt16(); var portraitData = packet.Read(portraitLength); var profileText = packet.ReadString16(); user.PortraitData = portraitData; user.ProfileText = profileText; }
private void PacketHandler_0x3F_MapPointClick(Object obj, ClientPacket packet) { var user = (User) obj; var target = BitConverter.ToInt64(packet.Read(8), 0); Logger.DebugFormat("target bytes are: {0}, maybe", target); if (user.IsAtWorldMap) { MapPoint targetmap; if (MapPoints.TryGetValue(target, out targetmap)) { user.Teleport(targetmap.DestinationMap, targetmap.DestinationX, targetmap.DestinationY); } else { Logger.ErrorFormat(String.Format("{0}: sent us a click to a non-existent map point!", user.Name)); } } else { Logger.ErrorFormat(String.Format("{0}: sent us an 0x3F outside of a map screen!", user.Name)); } }
private void PacketHandler_0x19_Whisper(Object obj, ClientPacket packet) { var user = (User) obj; var size = packet.ReadByte(); var target = Encoding.GetEncoding(949).GetString(packet.Read(size)); var msgsize = packet.ReadByte(); var message = Encoding.GetEncoding(949).GetString(packet.Read(msgsize)); user.SendWhisper(target, message); }
private void PacketHandler_0x10_ClientJoin(Object obj, ClientPacket packet) { var connectionId = (long) obj; var seed = packet.ReadByte(); var keyLength = packet.ReadByte(); var key = packet.Read(keyLength); var name = packet.ReadString8(); var id = packet.ReadUInt32(); var redirect = ExpectedConnections[id]; if (redirect.Matches(name, key, seed)) { ((IDictionary) ExpectedConnections).Remove(id); if (PlayerExists(name)) { var user = new User(this, connectionId, name); user.SetEncryptionParameters(key, seed, name); user.LoadDataFromEntityFramework(true); user.UpdateLoginTime(); user.UpdateAttributes(StatUpdateFlags.Full); Logger.DebugFormat("Elapsed time since login: {0}", user.SinceLastLogin); if (user.Citizenship.spawn_points.Count != 0 && user.SinceLastLogin > Hybrasyl.Constants.NATION_SPAWN_TIMEOUT) { Insert(user); var spawnpoint = user.Citizenship.spawn_points.First(); user.Teleport((ushort) spawnpoint.map_id, (byte) spawnpoint.map_x, (byte) spawnpoint.map_y); } else if (user.MapId != null && Maps.ContainsKey(user.MapId)) { Insert(user); user.Teleport(user.MapId, (byte) user.MapX, (byte) user.MapY); } else { // Handle any weird cases where a map someone exited on was deleted, etc // This "default" of Mileth should be set somewhere else Insert(user); user.Teleport((ushort) 500, (byte) 50, (byte) 50); } Logger.DebugFormat("Adding {0} to hash", user.Name); AddUser(user); ActiveUsers[connectionId] = user; ActiveUsersByName[user.Name] = connectionId; Logger.InfoFormat("cid {0}: {1} entering world", connectionId, user.Name); } } }