/// <summary> /// Creates a new instnace of AuthClient. /// </summary> /// <param name="socketClient">The socket client associated to the auth client.</param> public AuthClient(SocketClient socketClient) { crypto = new ProjectX_V3_Lib.Cryptography.AuthCrypto(); socketClient.Owner = this; socketClient.Crypto = crypto; this.socketClient = socketClient; }
/// <summary> /// The callback from Accept() /// </summary> /// <param name="asyncResult">The async result.</param> private void Accept_Callback(IAsyncResult asyncResult) { try { Socket accepted = serverSocket.EndAccept(asyncResult); if (accepted.Connected) { SocketClient sClient = new SocketClient(accepted, socketEvents); if (socketEvents.OnConnection.Invoke(sClient)) sClient.Receive(); } } catch { } Accept(); }
/// <summary> /// Handling all connections. /// </summary> /// <param name="socketClient">The socket client.</param> public static bool Handle_Connection(SocketClient socketClient) { try { Client.AuthClient client = new Client.AuthClient(socketClient); using (var packet = new Packets.PasswordSeedPacket()) { packet.Seed = 90011337; client.Send(packet); } } catch (Exception e) { Console.WriteLine(e.ToString()); } return true; }
/// <summary> /// Handling all packets received. /// </summary> /// <param name="socketClient">The socket client.</param> /// <param name="Packet">The packet.</param> public static bool Handle_Receive(SocketClient socketClient, DataPacket Packet) { try { Client.AuthClient client = socketClient.Owner as Client.AuthClient; switch (Packet.PacketID) { case Packets.PacketType.AuthRequestPacket1: case Packets.PacketType.AuthRequestPacket2: Packets.AuthRequestPacket.Handle(client, Packet); break; } } catch (Exception e) { Console.WriteLine(e.ToString()); } return true; }
/// <summary> /// Empty method for the connection events. /// </summary> /// <param name="sClient">The socket client.</param> /// <returns>Returns true always.</returns> static bool empty_conn(SocketClient sClient) { return true; }
/// <summary> /// Empty method for the buffer events. /// </summary> /// <param name="sClient">The socket client.</param> /// <param name="packet">The data packet.</param> /// <returns>Returns true always.</returns> static bool empty_buff(SocketClient sClient, DataPacket packet) { return true; }
public GameClient() { IsAIBot = true; this.socketClient = new ProjectX_V3_Lib.Network.SocketClient(); socketClient.Owner = this; socketClient.Crypto = new ProjectX_V3_Lib.Cryptography.GameCrypto(Program.Config.ReadString("GameKey").GetBytes()); _screen = new ProjectX_V3_Game.Core.Screen(this); _baseentity = new BaseEntity(this); _maxhp = 0; _maxmp = 0; _inventory = new ProjectX_V3_Game.Data.Inventory(this); _equipments = new ProjectX_V3_Game.Data.Equipments(this); _trade = new ProjectX_V3_Game.Data.TradeData(); _spelldata = new ProjectX_V3_Game.Data.SpellData(this); _subclasses = new SubClasses(); Warehouses = new ConcurrentDictionary<ushort, ProjectX_V3_Game.Data.Warehouse>(); foreach (ushort whID in whids) { if (!Warehouses.TryAdd(whID, new Data.Warehouse(this, whID))) throw new Exception("Failed to add Warehouse..."); } TournamentScore = new ProjectX_V3_Game.Tournaments.TournamentScore(); TournamentInfo = new ProjectX_V3_Game.Tournaments.TournamentInfo(this); Arena = new ProjectX_V3_Game.Data.ArenaInfo(this); Pets = new ConcurrentDictionary<int, BattlePet>(); Permission = Enums.PlayerPermission.Normal; }
/// <summary> /// Handles all packets received by the game auth server. /// </summary> /// <param name="client">The socket client.</param> /// <param name="Packet">The packet.</param> /// <returns>ALWAYS returns false.</returns> private static bool HandlePacket(SocketClient client, DataPacket Packet) { if (Packet.PacketID == 9001) { if (Packet.ReadString(4, 16) == Program.Config.ReadString("ServerPassword")) { string Account = Packet.ReadString(20, 16); int DatabaseUID = Packet.ReadInt32(36); if (DatabaseUID == 0) return false; uint EntityUID = Packet.ReadUInt32(40); if (EntityUID == 0) return false; if (Core.Kernel.Clients.Contains(EntityUID)) { UIDCollection.TryRemove(EntityUID); return false; } if (UIDCollection.Contains(EntityUID)) { int secondkey; if (UIDCollection.TryGetSecondKey(EntityUID, out secondkey)) { if (DatabaseUID == secondkey) UIDCollection.TryRemove(EntityUID); } return false; } if (UIDCollection.Contains(DatabaseUID)) { uint firstkey; if (UIDCollection.TryGetFirstKey(DatabaseUID, out firstkey)) { UIDCollection.TryRemove(DatabaseUID); } } UIDCollection.TryAdd(EntityUID, DatabaseUID, DateTime.Now.AddMinutes(10)); // return false; } } return false; }
/// <summary> /// Handling all packets received. /// </summary> /// <param name="socketClient">The socket client.</param> /// <param name="Packet">The packet.</param> public static bool Handle_Receive(SocketClient socketClient, DataPacket Packet) { try { Entities.GameClient client = socketClient.Owner as Entities.GameClient; #region AntiBooth if (client.Booth != null) { switch (Packet.PacketID) { case Packets.PacketType.AuthMessagePacket: case Packets.PacketType.CharacterCreationPacket: case Packets.PacketType.MovementPacket: case Packets.PacketType.NPCRequestPacket: case Packets.PacketType.NPCResponsePacket: case Packets.PacketType.GroundItemPacket: case Packets.PacketType.InteractionPacket: case Packets.PacketType.GemSocketingPacket: case Packets.PacketType.WarehousePacket: case Packets.PacketType.CompositionPacket: case Packets.PacketType.ArenaActionPacket: return true; } } #endregion switch (Packet.PacketID) { #region AuthMessagePacket : 1052 case Packets.PacketType.AuthMessagePacket: return Packets.AuthMessagePacket.Handle(client, Packet); #endregion #region CharacterCreationPacket : 1001 case Packets.PacketType.CharacterCreationPacket: Packets.CharacterCreationPacket.Handle(client, Packet); break; #endregion #region GeneralDataPacket : 10010 case Packets.PacketType.GeneralDataPacket: Packets.GeneralDataPacket.Handle(client, Packet); break; #endregion #region MessagePacket : 1004 case Packets.PacketType.MessagePacket: Packets.MessagePacket.Handle(client, Packet); break; #endregion #region ItemPacket : 1009 case Packets.PacketType.ItemPacket: Packets.ItemPacket.Handle(client, Packet); break; #endregion #region MovementPacket : 10005 case Packets.PacketType.MovementPacket: Packets.MovementPacket.Handle(client, Packet); break; #endregion #region NPCRequestPacket : 2031 case Packets.PacketType.NPCRequestPacket: Packets.NPCRequestPacket.Handle(client, Packet); break; #endregion #region NPCResponsePacket 2032 case Packets.PacketType.NPCResponsePacket: Packets.NPCResponsePacket.Handle(client, Packet); break; #endregion #region GroundItemPacket : 1101 case Packets.PacketType.GroundItemPacket: Packets.GroundItemPacket.Handle(client, Packet); break; #endregion #region TradePacket : 1056 case Packets.PacketType.TradePacket: Packets.TradePacket.Handle(client, Packet); break; #endregion #region InteractionPacket : 1022 case Packets.PacketType.InteractionPacket: Packets.InteractionPacket.Handle(client, Packet); break; #endregion #region CharacterStatsPacket : 1040 case Packets.PacketType.CharacterStatsPacket: Packets.CharacterStatsPacket.Handle(client, Packet); break; #endregion #region Guild 1107 case Packets.PacketType.GuildPacket: Packets.GuildPacket.Handle(client, Packet); break; #endregion #region GuildMemberListPacket : 2102 case Packets.PacketType.GuildMemberListPacket: Packets.GuildMemberListPacket.Handle(client, Packet); break; #endregion #region GuildDonationPacket : 1058 case Packets.PacketType.GuildDonationPacket: Packets.GuildDonationPacket.Handle(client, Packet); break; #endregion #region StringPacket : 1015 case Packets.PacketType.StringPacket: Packets.StringPacket.Handle(client, Packet); break; #endregion #region BroadcastPacket : 2050 case Packets.PacketType.BroadcastPacket: Packets.BroadcastPacket.Handle(client, Packet); break; #endregion #region NobilityPacket : 2064 case Packets.PacketType.NobilityPacket: Packets.NobilityPacket.Handle(client, Packet); break; #endregion #region SubClassPacket : 2320 case Packets.PacketType.SubClassPacket: Packets.SubClassPacket.Handle(client, Packet); break; #endregion #region TeamActionPacket : 1023 case Packets.PacketType.TeamActionPacket: Packets.TeamActionPacket.Handle(client, Packet); break; #endregion #region GemSocketingPacket : 1023 case Packets.PacketType.GemSocketingPacket: Packets.GemSocketingPacket.Handle(client, Packet); break; #endregion #region WarehousePacket : 1102 case Packets.PacketType.WarehousePacket: Packets.WarehousePacket.Handle(client, Packet); break; #endregion #region CompositionPacket : 2036 case Packets.PacketType.CompositionPacket: Packets.CompositionPacket.Handle(client, Packet); break; #endregion #region ArenaActionPacket : 2205 case Packets.PacketType.ArenaActionPacket: Packets.ArenaActionPacket.Handle(client, Packet); break; #endregion #region ArenaPlayersPacket : 2208 case Packets.PacketType.ArenaPlayersPacket: Packets.ArenaPlayersPacket.Handle(client, Packet); break; #endregion #region ArenaStatisticPacket : 2209 case Packets.PacketType.ArenaStatisticPacket: Packets.ArenaStatisticPacket.Handle(client, Packet); break; #endregion #region ArenaBattleInfoPacket : 2206 case Packets.PacketType.ArenaBattleInfoPacket: Packets.ArenaBattleInfoPacket.Handle(client, Packet); break; #endregion #region ArenaWatchPacket : 2211 case Packets.PacketType.ArenaWatchPacket: Packets.ArenaWatchPacket.Handle(client, Packet); break; #endregion #region Unknown Packets // TODO: Log all unknown packets #region 1151 case 1151: // This packet is send from the client to the server during login, not sure if send at other times. break; #endregion #region 1037 case 1037: // This packet is send over time ... cba to analyze it as I could not find any info on it, so probs not important. break; #endregion #endregion #region Unhandled PAckets // all packets here is known by type, but not handled yet... #region QuestPacket : 1134 case 1134: break; #endregion #endregion #region default default: { if (client.LoggedIn) Console.WriteLine("Unknown PacketID: {0} PacketSize: {1} User: {2}", Packet.PacketID, Packet.PacketSize, client.Name); break; } #endregion } } catch (Exception e) { string eString = e.ToString(); if (eString.Contains("get_PacketID()")) { socketClient.Disconnect("Failed to get PacketID... Pointer = null."); return false; } Console.WriteLine("[Major Exception]"); Console.WriteLine(eString); } return true; }
/// <summary> /// Sets the login info of the character or creates the base character file if first time logging in. /// </summary> /// <param name="client">The client.</param> /// <param name="Account">The account.</param> /// <param name="DatabaseUID">The database UID.</param> /// <param name="EntityUID">The entity UID.</param> public static void SetLoginOrCreate(SocketClient client, string Account, int DatabaseUID, uint EntityUID) { IniFile characterfile = new IniFile(DatabaseLocation + "\\Characters\\" + DatabaseUID + ".ini", "Character"); if (!characterfile.Exists()) characterfile.Write<bool>("New", true); characterfile.WriteString("Account", Account); characterfile.Write<uint>("LastEntityUID", EntityUID); }
/// <summary> /// Empty method for the buffer events. /// </summary> /// <param name="sClient">The socket client.</param> /// <param name="packet">The data packet.</param> /// <returns>Returns true always.</returns> static bool empty_buff(SocketClient sClient, DataPacket packet) { return(true); }
/// <summary> /// Empty method for the connection events. /// </summary> /// <param name="sClient">The socket client.</param> /// <returns>Returns true always.</returns> static bool empty_conn(SocketClient sClient) { return(true); }
/// <summary> /// Handling all disconnections. /// </summary> /// <param name="socketClient">The socket client.</param> public static bool Handle_Disconnection(SocketClient socketClient) { try { if (socketClient.Owner == null) return false; Entities.GameClient client = socketClient.Owner as Entities.GameClient; int removetries = 0; if (client.LoggedIn && client.CanSave) { client.Screen.ClearScreen(); Database.CharacterDatabase.Save(client); client.Inventory.SaveInventory(); client.Equipments.SaveEquipments(); if (client.ArenaMatch != null) { client.ArenaMatch.Quit(client); } client.LoggedIn = false; if (client.Booth != null) { client.Booth.CancelBooth(); } if (client.Guild != null) { client.Guild = null; client.GuildMemberInfo.Client = null; client.GuildMemberInfo = null; } if (client.Nobility != null) { client.Nobility.Client = null; client.Nobility = null; } if (!string.IsNullOrEmpty(socketClient.DCReason) && !string.IsNullOrWhiteSpace(socketClient.DCReason)) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("{0} disconnected. Reason: {1}", client.Name, socketClient.DCReason); Console.ResetColor(); } while (!client.Map.LeaveMap(client) && removetries < 5) { removetries++; System.Threading.Thread.Sleep(100); } } removetries = 0; while (!Core.Kernel.Clients.TryRemove(client.EntityUID) && removetries < 5) { removetries++; System.Threading.Thread.Sleep(100); } } catch (Exception e) { Console.WriteLine(e.ToString()); } return true; }