Esempio n. 1
0
        public int HandlePacket(BaseClient client, PacketIn packet)
        {
            LobbyClient cclient  = (LobbyClient)client;
            PacketOut   Out      = new PacketOut((uint)Opcodes.ANS_CHARACTER_CREATE);
            byte        freeSlot = GetFreeSlot(cclient);

            if (freeSlot == 0)
            {
                Out.WriteInt32Reverse((int)ResponseCodes.RC_FAILED);
            }
            else
            {
                cclient.Pending.Slot    = freeSlot;
                cclient.Pending.Faction = packet.GetUint8();
                cclient.Pending.Gender  = packet.GetUint8();
                cclient.Pending.Version = (byte)packet.GetUint32Reversed();
                packet.GetUint32Reversed();
                packet.GetUint32Reversed();
                byte[] Custom = new byte[packet.Length - packet.Position];
                packet.Read(Custom, 0, Custom.Length);
                byte[] ActualCustom = new byte[Custom.Length + 4];
                ActualCustom[0] = 0x36;
                ActualCustom[1] = 0x00;
                ActualCustom[2] = 0x00;
                ActualCustom[3] = 0x00;
                Buffer.BlockCopy(Custom, 0, ActualCustom, 4, Custom.Length);
                cclient.Pending.Appearance = BitConverter.ToString(ActualCustom);
                Databases.CharacterTable.Add(cclient.Pending);
                Out.WriteInt32Reverse((int)ResponseCodes.RC_SUCCESS);
                Out.WriteInt32Reverse(cclient.Pending.Slot);
            }
            cclient.Send(Out);
            return(0);
        }
Esempio n. 2
0
 public static void Send(LobbyClient client)
 {
     PacketOut Out = new PacketOut((UInt32)Opcodes.ANS_LOGIN_SUCCESS);
     Out.WriteParsedString("Welcome to rebornAPB", 48);
     Out.WriteUInt32Reverse(client.Account.IsAdmin);
     Out.WriteInt64Reverse(TCPManager.GetTimeStamp());
     Out.WriteByte(0x13);
     Out.WriteByte(0x29);
     Out.WriteUInt16Reverse(0x12);
     Out.WriteByte(0x0E);
     Out.WriteByte(0x07);
     Out.WriteUInt16Reverse(9999);
     Out.WriteInt32Reverse(1450);
     Out.WriteUInt32Reverse((uint)client.Account.RTW_Points);
     for (int i = 1; i < 6; ++i) Out.WriteInt32Reverse(Program.FileMgr.GetFileVersion((int)client.Account.Index, i, true, "", ""));
     Out.WriteInt32Reverse(0);
     Out.WriteUInt16(0x957D);
     Out.WriteUInt16(0x0400);
     Out.WriteUInt16(0x5052);
     Out.WriteUInt16(0x4F45);
     Out.WriteUInt16(0x552E);
     Out.WriteUInt16(0x3232);
     Out.WriteUInt16(0x3738);
     Out.WriteUInt16(0x3031);
     Out.WriteUInt16(0);
     Out.WriteUInt16(0x0067);
     Out.WriteUInt64(0x526C624331313256);
     Out.WriteUInt64(0x486E314100000000);
     Out.WriteUInt16(0);
     Out.WriteStringBytes("");
     Out.WriteByte(0);
     client.Send(Out);
 }
Esempio n. 3
0
        public int HandlePacket(BaseClient client, PacketIn packet)
        {
            LobbyClient cclient = (LobbyClient)client;

            PacketOut Out      = new PacketOut((uint)Opcodes.ANS_CHARACTER_CREATE);
            byte      freeSlot = GetFreeSlot(cclient);

            if (freeSlot == 0)
            {
                Out.WriteInt32Reverse((int)ResponseCodes.RC_FAILED);
            }
            else
            {
                cclient.Pending.Slot    = freeSlot;
                cclient.Pending.Faction = packet.GetUint8();
                cclient.Pending.Gender  = packet.GetUint8();
                cclient.Pending.Version = (byte)packet.GetUint32Reversed();
                packet.GetUint32Reversed();
                byte[] Custom = new byte[packet.Length - packet.Position];
                packet.Read(Custom, 0, Custom.Length);
                cclient.Pending.Appearance = BitConverter.ToString(Custom);
                Databases.CharacterTable.Add(cclient.Pending);
                Out.WriteInt32Reverse((int)ResponseCodes.RC_SUCCESS);
                Out.WriteInt32Reverse(cclient.Pending.Slot);
            }
            cclient.Send(Out);
            System.Threading.Thread.Sleep(500);
            cclient.Pending = default(CharacterEntry);
            System.Threading.Thread.Sleep(500);
            cclient.Disconnect();
            return(0);
        }
Esempio n. 4
0
        static public void Send(LobbyClient client, int code)
        {
            PacketOut packet = new PacketOut((uint)Opcodes.ANS_LOGIN_FAILED);

            packet.WriteInt32Reverse(code);
            packet.WriteInt32Reverse(0);
            client.Send(packet);
        }
Esempio n. 5
0
 static public void Send(LobbyClient client)
 {
     PacketOut Out = new PacketOut((UInt32)Opcodes.ANS_CHARACTER_CREATE);
     if (client.Pending == null) Out.WriteInt32Reverse((int)ResponseCodes.RC_FAILED);
     else
     {
         Out.WriteInt32Reverse((int)ResponseCodes.RC_SUCCESS);
         Out.WriteInt32Reverse(client.Pending.Slot);
     }
     client.Pending = null;
     client.Send(Out);
 }
Esempio n. 6
0
        static public void Send(LobbyClient client)
        {
            PacketOut Out = new PacketOut((uint)Opcodes.LOGIN_PUZZLE);

            if (Program.version == GameVersion.RTW_LAST)
            {
                Out.WriteInt32Reverse(1);
                Out.WriteInt32Reverse(4);
                Out.WriteInt32Reverse(1);
                Out.WriteInt32Reverse(555239);
            }
            else if (Program.version == GameVersion.G1_LATEST)
            {
                Out.WriteInt32Reverse(1);
                Out.WriteInt32Reverse(19);
                Out.WriteInt32Reverse(4);
                Out.WriteInt32Reverse(775065);
            }
            Out.WriteByte(0x05);
            for (int i = 0; i < client.ECrypt.Key.Length; i++)
            {
                Out.WriteByte(client.ECrypt.Key[i]);
            }
            Out.WriteUInt32Reverse(0);
            Out.WriteUInt32Reverse(0);
            Out.WriteUInt32Reverse(0);
            client.SendTCP(Out);
        }
Esempio n. 7
0
 static public void Send(LobbyClient client)
 {
     PacketOut Out = new PacketOut((UInt32)Opcodes.LOGIN_PUZZLE);
     Out.WriteInt32Reverse(Program.Version[0]);
     Out.WriteInt32Reverse(Program.Version[1]);
     Out.WriteInt32Reverse(Program.Version[2]);
     Out.WriteInt32Reverse(Program.Build);
     Out.WriteByte(0x05);
     for (int i = 0; i < client.ECrypt.Key.Length; i++) Out.WriteByte(client.ECrypt.Key[i]);
     Out.WriteUInt32Reverse(0);
     Out.WriteUInt32Reverse(0);
     Out.WriteUInt32Reverse(0);
     client.SendTCP(Out);
 }
Esempio n. 8
0
 static public void Send(LobbyClient client)
 {
     PacketOut Out = new PacketOut((UInt32)Opcodes.ANS_CHARACTER_CREATE);
     if (client.Pending.Index < 1) Out.WriteInt32Reverse((int)ResponseCodes.RC_FAILED);
     else
     {
         Out.WriteInt32Reverse((int)ResponseCodes.RC_SUCCESS);
         Out.WriteInt32Reverse(client.Pending.Slot);
     }
     client.Pending = default(CharacterEntry);
     client.Send(Out);
     System.Threading.Thread.Sleep(200);
     client.Disconnect();
 }
Esempio n. 9
0
        public static void Send(LobbyClient cclient)
        {
            PacketOut Out = new PacketOut((uint)Opcodes.WORLD_LIST);

            Out.WriteInt32Reverse((int)ResponseCodes.RC_SUCCESS);
            lock (Program.worldListener.Worlds)
            {
                Out.WriteUInt16Reverse((ushort)Program.worldListener.Worlds.Count);
                foreach (KeyValuePair <uint, World.World> info in Program.worldListener.Worlds)
                {
                    Out.WriteUInt32Reverse(info.Key);
                    Out.WriteParsedString(info.Value.Name, 32);
                    Out.WriteByte((byte)info.Value.Id);
                    Out.WriteByte(0); //m_nPopulation %d
                    Out.WriteByte(0); //m_nEnfFaction %d
                    Out.WriteByte(0); //m_nCrimFaction %d
                    Out.WriteByte(0); //m_nPremiumOnly %d
                    Out.WriteByte(info.Value.IP1);
                    Out.WriteByte(info.Value.IP2);
                    Out.WriteByte(info.Value.IP3);
                    Out.WriteByte(info.Value.IP4);
                }
            }
            cclient.Send(Out);
        }
Esempio n. 10
0
        static public void Send(LobbyClient client)
        {
            PacketOut Out = new PacketOut((uint)Opcodes.LOGIN_PUZZLE);

            //05.05.2019 : version 1.19.7.806251 -> change the numbers below in order to change support for latest game version
            Out.WriteInt32Reverse(1);
            Out.WriteInt32Reverse(19);
            Out.WriteInt32Reverse(7);
            Out.WriteInt32Reverse(806251);

            Out.WriteByte(0x05);
            for (int i = 0; i < client.ECrypt.Key.Length; i++)
            {
                Out.WriteByte(client.ECrypt.Key[i]);
            }
            Out.WriteUInt32Reverse(0);
            Out.WriteUInt32Reverse(0);
            Out.WriteUInt32Reverse(0);
            client.SendTCP(Out);
        }
Esempio n. 11
0
 public int HandlePacket(BaseClient client, PacketIn packet)
 {
     LobbyClient cclient = (LobbyClient)client;
     byte FileId = packet.GetUint8();
     PacketOut Out = new PacketOut((UInt32)Opcodes.ANS_CONFIGFILE_LOAD);
     Out.WriteInt32Reverse((int)ResponseCodes.RC_SUCCESS);
     Out.WriteByte(FileId);
     byte[] Result = ZlibMgr.Compress(Program.FileMgr.GetFileByte((int)cclient.Account.Id, FileId, true, "", ""));
     cclient.Send(Out);
     return 0;
 }
Esempio n. 12
0
        public int HandlePacket(BaseClient client, PacketIn packet)
        {
            LobbyClient cclient = (LobbyClient)client;
            byte        FileId  = packet.GetUint8();

            PacketOut Out = new PacketOut((uint)Opcodes.ANS_CONFIGFILE_LOAD);

            Out.WriteInt32Reverse((int)ResponseCodes.RC_SUCCESS);
            Out.WriteByte(FileId);
            byte[] Result = ZlibMgr.Compress(Program.FileMgr.GetFileByte(cclient.Account.Index, FileId, true, "", ""));
            cclient.Send(Out);
            return(0);
        }
Esempio n. 13
0
        public int HandlePacket(BaseClient client, PacketIn packet)
        {
            WorldClient cclient   = (WorldClient)client;
            uint        accountId = packet.GetUint32Reversed();

            Log.Debug("AskWorldEnter", "New client! Account = " + accountId);
            cclient.Account   = Databases.AccountTable.SingleOrDefault(a => a.Index == accountId);
            cclient.Character = Databases.CharacterTable.SingleOrDefault(c => c.AccountIndex == accountId);
            lock (Program.expectingAccounts)
            {
                Program.expectingAccounts.TryGetValue(accountId, out cclient.account);
            }

            PacketOut Out = new PacketOut((uint)Opcodes.ANS_WORLD_ENTER);

            if (cclient.account == null)
            {
                Out.WriteInt32Reverse((int)ResponseCodes.RC_FAILED);
            }
            else
            {
                Out.WriteInt32Reverse((int)ResponseCodes.RC_SUCCESS);
                Out.WriteUInt32Reverse(cclient.account.Character);
                Out.WriteUInt32Reverse((uint)cclient.Account.RTW_Points);
                Out.WriteByte(cclient.Account.IsAdmin);
                Out.WriteInt64Reverse(TCPManager.GetTimeStamp());
                Out.WriteFloat(5.00f);
                Out.WriteByte(0);
                Out.WriteByte(0);
                Out.WriteInt32Reverse(Program.FileMgr.GetFileVersion((int)accountId, 1, false, Program.WorldName, cclient.account.Character.ToString()));
                Out.WriteInt32Reverse(Program.FileMgr.GetFileVersion((int)accountId, 2, false, Program.WorldName, cclient.account.Character.ToString()));
                Out.WriteInt32Reverse(Program.FileMgr.GetFileVersion((int)accountId, 3, false, Program.WorldName, cclient.account.Character.ToString()));
                Out.WriteInt32Reverse(Program.FileMgr.GetFileVersion((int)accountId, 4, false, Program.WorldName, cclient.account.Character.ToString()));
                Out.WriteInt32Reverse(Program.FileMgr.GetFileVersion((int)accountId, 5, false, Program.WorldName, cclient.account.Character.ToString()));
                Out.WriteByte(1);
                Out.WriteByte(cclient.Character.LFG);
            }
            cclient.Crypto = new Encryption(cclient.account.SessionId);
            cclient.Send(new DISTRICT_LIST());
            cclient.Send(Out);
            lock (Program.expectingAccounts)
            {
                foreach (KeyValuePair <uint, Acc> a in Program.expectingAccounts)
                {
                    if (a.Value == cclient.account)
                    {
                        Program.expectingAccounts.Remove(a.Key);
                        break;
                    }
                }
            }
            return(0);
        }
Esempio n. 14
0
        static public void Send(LobbyClient client)
        {
            PacketOut Out = new PacketOut((uint)Opcodes.ANS_LOGIN_SUCCESS);

            Out.WriteParsedString("Welcome to rebornAPB", 48);
            Out.WriteUInt32Reverse(client.Account.IsAdmin);
            Out.WriteInt64Reverse(TCPManager.GetTimeStamp());
            Out.WriteByte(0x13);
            Out.WriteByte(0x29);
            Out.WriteUInt16Reverse(0x12);
            Out.WriteByte(0x0E);
            Out.WriteByte(0x07);
            Out.WriteUInt16Reverse(9999);
            Out.WriteInt32Reverse(1450);
            Out.WriteUInt32Reverse((uint)client.Account.RTW_Points);
            for (int i = 1; i < 6; ++i)
            {
                Out.WriteInt32Reverse(Program.FileMgr.GetFileVersion(client.Account.Index, i, true, "", ""));
            }
            Out.WriteInt32Reverse(0);
            Out.WriteUInt16(0x957D);
            Out.WriteUInt16(0x0400);
            Out.WriteUInt16(0x5052);
            Out.WriteUInt16(0x4F45);
            Out.WriteUInt16(0x552E);
            Out.WriteUInt16(0x3232);
            Out.WriteUInt16(0x3738);
            Out.WriteUInt16(0x3031);
            Out.WriteUInt16(0);
            Out.WriteUInt16(0x0067);
            Out.WriteUInt64(0x526C624331313256);
            Out.WriteUInt64(0x486E314100000000);
            Out.WriteUInt16(0);
            Out.WriteStringBytes("");
            Out.WriteByte(0);
            client.Send(Out);
        }
Esempio n. 15
0
        public static void Send(LobbyClient cclient, int MessageID, int QueryID, int ReturnCode, int Param1, int Param2, int Param3, int Param4)
        {
            PacketOut Out = new PacketOut((uint)Opcodes.ERROR);

            Out.WriteInt32Reverse(MessageID);
            Out.WriteInt32Reverse(QueryID);
            Out.WriteInt32Reverse(ReturnCode);
            Out.WriteInt32Reverse(Param1);
            Out.WriteInt32Reverse(Param2);
            Out.WriteInt32Reverse(Param3);
            Out.WriteInt32Reverse(Param4);
            cclient.Send(Out);
        }
Esempio n. 16
0
        public int HandlePacket(BaseClient client, PacketIn packet)
        {
            LobbyClient cclient = (LobbyClient)client;
            byte        FileId  = packet.GetUint8();
            PacketOut   Out     = new PacketOut((uint)Opcodes.ANS_CONFIGFILE_LOAD);

            Out.WriteInt32Reverse((int)ResponseCodes.RC_SUCCESS);
            Out.WriteByte(FileId);
            if (FileId == 2)
            {
                byte[] Result = Encoding.ASCII.GetBytes("[AcceptDates]\nEULA = Hour = 1 Min = 57 Sec = 2 Day = 31 Month = 0 Year = 2017\nPatchNotes = Hour = 16 Min = 47 Sec = 22 Day = 23 Month = 2 Year = 2015\n\n[File]\nversion = 0");
                Out.Write(Result, 0, Result.Length);
            }
            cclient.Send(Out);
            return(0);
        }
Esempio n. 17
0
 public int HandlePacket(BaseClient client, PacketIn packet)
 {
     WorldClient cclient = (WorldClient)client;
     UInt32 accountId = packet.GetUint32Reversed();
     Log.Debug("AskWorldEnter", "New client! Account = " + accountId);
     cclient.Account = Databases.AccountTable.SingleOrDefault(a => a.Index == accountId);
     cclient.Character = Databases.CharacterTable.SingleOrDefault(c => c.AccountIndex == accountId);
     lock (Program.expectingAccounts)
     {
         Program.expectingAccounts.TryGetValue(accountId, out cclient.account);
     }
     PacketOut Out = new PacketOut((UInt32)Opcodes.ANS_WORLD_ENTER);
     if (cclient.account == null) Out.WriteInt32Reverse((int)ResponseCodes.RC_FAILED);
     else
     {
         Out.WriteInt32Reverse((int)ResponseCodes.RC_SUCCESS);
         Out.WriteUInt32Reverse(cclient.account.Character);
         Out.WriteUInt32Reverse((uint)cclient.Account.RTW_Points);
         Out.WriteByte(cclient.Account.IsAdmin);
         Out.WriteInt64Reverse(TCPManager.GetTimeStamp());
         Out.WriteFloat(5.00f);
         Out.WriteByte(0);
         Out.WriteByte(0);
         Out.WriteInt32Reverse(Program.FileMgr.GetFileVersion((int)accountId, 1, false, Program.WorldName, cclient.account.Character.ToString()));
         Out.WriteInt32Reverse(Program.FileMgr.GetFileVersion((int)accountId, 2, false, Program.WorldName, cclient.account.Character.ToString()));
         Out.WriteInt32Reverse(Program.FileMgr.GetFileVersion((int)accountId, 3, false, Program.WorldName, cclient.account.Character.ToString()));
         Out.WriteInt32Reverse(Program.FileMgr.GetFileVersion((int)accountId, 4, false, Program.WorldName, cclient.account.Character.ToString()));
         Out.WriteInt32Reverse(Program.FileMgr.GetFileVersion((int)accountId, 5, false, Program.WorldName, cclient.account.Character.ToString()));
         Out.WriteByte(1);
         Out.WriteByte(cclient.Character.LFG);
     }
     cclient.Crypto = new TCP.Encryption(cclient.account.SessionId);
     cclient.Send(new DISTRICT_LIST());
     cclient.Send(Out);
     lock (Program.expectingAccounts)
     {
         foreach (KeyValuePair<uint, Acc> a in Program.expectingAccounts)
         {
             if (a.Value == cclient.account)
             {
                 Program.expectingAccounts.Remove(a.Key);
                 break;
             }
         }
     }
     return 0;
 }
Esempio n. 18
0
 static public void Send(LobbyClient client)
 {
     PacketOut Out = new PacketOut((UInt32)Opcodes.WORLD_LIST);
     Out.WriteInt32Reverse((int)ResponseCodes.RC_SUCCESS);
     lock (Program.worldListener.Worlds)
     {
         Out.WriteUInt16Reverse((UInt16)Program.worldListener.Worlds.Count);
         foreach (KeyValuePair<UInt32, World.World> info in Program.worldListener.Worlds)
         {
             Out.WriteUInt32Reverse((UInt32)info.Key);
             Out.WriteParsedString(info.Value.Name, 32);
             Out.WriteByte(1);
             Out.WriteByte(info.Value.Population);
             Out.WriteByte(info.Value.EnforcerRecommended ? (Byte)1 : (Byte)0);
             Out.WriteByte(info.Value.CriminalRecommended ? (Byte)1 : (Byte)0);
         }
     }
     client.Send(Out);
 }
Esempio n. 19
0
        static public void Send(LobbyClient client)
        {
            PacketOut Out = new PacketOut((uint)Opcodes.ANS_LOGIN_SUCCESS);

            Out.WriteParsedString("Welcome to rebornAPB", 48);
            Out.WriteUInt32Reverse(1);
            Out.WriteInt64Reverse(TCPManager.GetTimeStamp());
            Out.WriteUInt32Reverse(client.Account.IsAdmin);
            Out.WriteInt32Reverse(0);
            Out.WriteInt32Reverse(0);
            Out.WriteInt32Reverse(0);
            Out.WriteInt32Reverse(0);
            Out.WriteInt32Reverse(0);
            Out.WriteString("");
            Out.WriteInt32(0);
            Out.WriteInt32(0);
            Out.WriteInt32Reverse(0);
            Out.WriteString("");
            Out.WriteInt32Reverse(0);
            client.Send(Out);
        }
Esempio n. 20
0
        public int HandlePacket(BaseClient client, PacketIn packet)
        {
            LobbyClient    cclient   = (LobbyClient)client;
            byte           slotId    = packet.GetUint8();
            CharacterEntry character = Databases.CharacterTable.SingleOrDefault(c => c.AccountIndex == cclient.Account.Index && c.Slot == slotId);

            if (character.Index < 1)
            {
                Log.Error(cclient.Account.Username, "Wrong slot specified!");
            }
            World.World info = null;
            lock (Program.worldListener.Worlds)
            {
                Program.worldListener.Worlds.TryGetValue((uint)character.World, out info);
            }

            PacketOut Out = new PacketOut((uint)Opcodes.ANS_WORLD_ENTER);

            if (info == null)
            {
                Out.WriteUInt32Reverse((uint)ResponseCodes.RC_FAILED);
            }
            else
            {
                info.Send(new AccountEnter((uint)cclient.Account.Index, (uint)character.Index, cclient.SessionId));
                Out.WriteInt32Reverse((int)ResponseCodes.RC_SUCCESS);
                Out.WriteByte(info.IP1);
                Out.WriteByte(info.IP2);
                Out.WriteByte(info.IP3);
                Out.WriteByte(info.IP4);
                Out.WriteUInt16Reverse((ushort)info.Port);
                Out.WriteInt64Reverse(TCPManager.GetTimeStamp());
            }
            cclient.Send(Out);
            return(0);
        }
Esempio n. 21
0
        static public void Send(LobbyClient client)
        {
            client.Characters = Databases.CharacterTable.Select(c => c.AccountIndex == client.Account.Index);
            PacketOut Out = new PacketOut((uint)Opcodes.CHARACTER_LIST);

            Out.WriteByte((byte)client.Characters.Count);
            Out.WriteInt32Reverse(8);
            Out.WriteByte(client.Account.Threat);
            lock (Program.worldListener.Worlds)
            {
                foreach (CharacterEntry chr in client.Characters)
                {
                    Out.WriteByte(chr.Slot);
                    Out.WriteByte(chr.Faction);
                    Out.WriteByte(1);
                    Out.WriteInt32Reverse(chr.World);
                    World.World info = null;
                    Program.worldListener.Worlds.TryGetValue((uint)chr.World, out info);
                    if (info != null)
                    {
                        Out.WriteParsedString(info.Name, 32);
                    }
                    else
                    {
                        Out.WriteParsedString("(unavailable)", 32);
                    }
                    Out.WriteParsedString(chr.Name, 32);
                    Out.WriteInt32Reverse(chr.Rank);
                    Out.WriteInt32Reverse(0);
                    Out.WriteByte(0);
                    Out.WriteByte(0);
                    Out.WriteByte(0);
                    Out.WriteByte(0);
                    Out.WriteInt32Reverse(0);
                    Out.WriteInt32Reverse(0);
                }
            }
            client.Send(Out);
            if (client.Characters.Count <= 0)
            {
                WORLD_LIST.Send(client);
            }
        }
Esempio n. 22
0
 static public void Send(LobbyClient client, int code)
 {
     PacketOut packet = new PacketOut((UInt32)Opcodes.ANS_LOGIN_FAILED);
     packet.WriteInt32Reverse(code);
     client.Send(packet);
 }
Esempio n. 23
0
        public int HandlePacket(BaseClient client, PacketIn packet)
        {
            WorldClient cclient = (WorldClient)client;
            UInt32 accountId = packet.GetUint32Reversed();
            cclient.AccountId = accountId;
            Log.Debug("AskWorldEnter", "New client! Account = " + accountId);
            Acc account = null;
            lock (Program.expectingAccounts) Program.expectingAccounts.TryGetValue(accountId, out account);

            #region Character stuff

            MySqlCommand cmd = new MySqlCommand("SELECT * FROM `characters` WHERE `id` = @id", WorldServer.Database.Connection.Instance);
            try
            {
                cmd.Prepare();
                cmd.Parameters.AddWithValue("@id", account.Character.ToString());
                cmd.ExecuteNonQuery();
                MySqlDataReader reader = cmd.ExecuteReader();
                try
                {
                    while (reader.Read())
                    {
                        cclient.CharacterId = getID(reader);
                        cclient.Name = getName(reader);
                        cclient.Faction = getFaction(reader);
                        cclient.Gender = getGender(reader);
                        cclient.Rank = getRank(reader);
                        cclient.Money = getMoney(reader);
                        cclient.Threat = getThreat(reader);
                        cclient.Playtime = getPlayTime(reader);
                        cclient.Clan = getClan(reader);
                        cclient.districtID = 0;
                        cclient.districtType = 0;
                        cclient.groupInvite = 0;
                        cclient.groupStatus = 0;
                        cclient.groupPublic = 0;
                    }
                }
                catch (MySqlException e) { Log.Error("MySQL", e.ToString()); }
                finally { reader.Dispose(); }
            }
            catch (MySqlException e) { Log.Error("MySQL", e.ToString()); }
            finally { cmd.Dispose(); }

            #endregion

            #region Account stuff
            MySqlCommand cmd2 = new MySqlCommand("SELECT * FROM `accounts` WHERE `id` = @id", WorldServer.Database.Connection.Instance);
            try
            {
                cmd2.Prepare();
                cmd2.Parameters.AddWithValue("@id", accountId.ToString());
                cmd2.ExecuteNonQuery();
                MySqlDataReader reader2 = cmd2.ExecuteReader();
                try
                {
                    while (reader2.Read())
                    {
                        cclient.Email = getEmail(reader2);
                        cclient.isGM = getGm(reader2);
                        cclient.isBanned = getBanned(reader2);
                        cclient.Points = getPoints(reader2);
                    }
                }
                catch (MySqlException e) { Log.Error("MySQL", e.ToString()); }
                finally { reader2.Dispose(); }
            }
            catch (MySqlException e) { Log.Error("MySQL", e.ToString()); }
            finally { cmd2.Dispose(); }
            #endregion

            #region Client status

            MySqlCommand cmd3 = new MySqlCommand("INSERT INTO `clientstatus` VALUES(@name, 0, 0, 1, 0, 0, 0, 0)", WorldServer.Database.Connection.Instance);
            try
            {
                cmd3.Prepare();
                cmd3.Parameters.AddWithValue("@name", cclient.Name);
                cmd3.ExecuteNonQuery();
            }
            catch (MySqlException e) { Log.Error("MySQL", e.ToString()); }
            finally { cmd3.Dispose(); }

            #endregion

            PacketOut Out = new PacketOut((UInt32)Opcodes.ANS_WORLD_ENTER);
            if (account == null) Out.WriteInt32Reverse((int)ResponseCodes.RC_FAILED);
            else
            {
                Out.WriteInt32Reverse((int)ResponseCodes.RC_SUCCESS);
                Out.WriteUInt32Reverse(account.Character);
                Out.WriteUInt32Reverse(cclient.Points);
                Out.WriteByte(cclient.isGM);
                Out.WriteInt64Reverse(TCPManager.GetTimeStamp());
                Out.WriteFloat(5.00f);
                Out.WriteByte(0);
                Out.WriteByte(0);
                Out.WriteInt32Reverse(Program.FileMgr.GetFileVersion((int)accountId, 1, false, Program.WorldName, account.Character.ToString()));
                Out.WriteInt32Reverse(Program.FileMgr.GetFileVersion((int)accountId, 2, false, Program.WorldName, account.Character.ToString()));
                Out.WriteInt32Reverse(Program.FileMgr.GetFileVersion((int)accountId, 3, false, Program.WorldName, account.Character.ToString()));
                Out.WriteInt32Reverse(Program.FileMgr.GetFileVersion((int)accountId, 4, false, Program.WorldName, account.Character.ToString()));
                Out.WriteInt32Reverse(Program.FileMgr.GetFileVersion((int)accountId, 5, false, Program.WorldName, account.Character.ToString()));
                Out.WriteByte(1);
                Out.WriteByte(cclient.LFG);
            }
            cclient.Crypto = new TCP.Encryption(account.SessionId);
            cclient.Send(new DISTRICT_LIST());
            cclient.Send(Out);
            return 0;
        }
Esempio n. 24
0
 public static void Send(LobbyClient client)
 {
     PacketOut Out = new PacketOut((UInt32)Opcodes.LOGIN_PUZZLE);
     if(Program.version == GameVersion.RTW_CB)
     {
         Out.WriteInt32Reverse(0);
         Out.WriteInt32Reverse(6);
         Out.WriteInt32Reverse(0);
         Out.WriteInt32Reverse(509927);
     }
     else if(Program.version == GameVersion.RTW_DVD)
     {
         Out.WriteInt32Reverse(1);
         Out.WriteInt32Reverse(1);
         Out.WriteInt32Reverse(0);
         Out.WriteInt32Reverse(534979);
     }
     else if (Program.version == GameVersion.RTW_LAST)
     {
         Out.WriteInt32Reverse(1);
         Out.WriteInt32Reverse(4);
         Out.WriteInt32Reverse(1);
         Out.WriteInt32Reverse(555239);
     }
     else if (Program.version == GameVersion.G1_LATEST)
     {
         Out.WriteInt32Reverse(1);
         Out.WriteInt32Reverse(19);
         Out.WriteInt32Reverse(4);
         Out.WriteInt32Reverse(766569);
     }
     else if (Program.version == GameVersion.G1_ENGUPD)
     {
         Out.WriteInt32Reverse(2);
         Out.WriteInt32Reverse(0);
         Out.WriteInt32Reverse(0);
         Out.WriteInt32Reverse(750394);
     }
     Out.WriteByte(0x05);
     for (int i = 0; i < client.ECrypt.Key.Length; i++) Out.WriteByte(client.ECrypt.Key[i]);
     Out.WriteUInt32Reverse(0);
     Out.WriteUInt32Reverse(0);
     Out.WriteUInt32Reverse(0);
     client.SendTCP(Out);
 }