Вообще тебе надо надо будет или кто за это возьмется дописать пряма целый редактор, да и что самое главное редактор как в том же 3д редакторах.
Игра ЗБС, жду беты.
Google.ru тебе гайдав по установке много найдет.
Я же сказал берешь пандору бокс и вперед смотреть алгоритм да и пакеты в придачу там уже хоть и парочку но разобраны.
Во во. В емуле и то меньше роботы дак и емуль очень сложно закончить а тут целый клиент.
Кароче, берешь Pandora's Box и настраиваешь, потом включаешь и заходишь на оффу ну хотя бы просто зайди до выбора и посмотри трафик что куда сылкаеца какие пакеты куда если сможешь реализовать вход на акк с выбором персонажей на андроид стукни в личку дальше помогу с разборкой пакетов(Хотя половину из них уже давно есть).
Мне вот интересно что первым накроется от трафика руоффы телефон или приложение???
Старо как мир.
Ну коль кто линивый такой пусть качает, а кому хочется свое тот сам сделает(если умеет) Не ну я все понимаю да даже фордж уже для ленивых сделал что надо только в папку mods закинуть и все дак вам ище и программу копирования в папку подавай?
Щас на дворе 1.4.6-1.4.7 :mellow:
Какая это версия?
C# S-C 0x01 - ServerInfo C-S 0x03 - LogginAnnounce S-C 0x02/0x05 - SMKey/ServerError Как только мы подключимся к серверу, он вышлет нам пакет 0x01 В этом пакете будет храниться ключ для генерации хеша, который мы передадим серверу в пакете 0x03 Затем сервер вышлет нам пакет 0x02 или же 0x05 0x02 - Связка верна 0x05 - Связка неверна Для начала создадим класс PWAuth.cs, в котором будут следующие переменный: string IP; int Port; public bool Result { get; private set; }// Результат авторизации(связка(логин+пароль) верна/не верна) public bool Connected { get; private set; }// Результат подключения к серверу(подключиться удалось/не удалось) Так же мы должны подключить следующие библиотеки: using System.Net.Sockets; using System.Security.Cryptography; Удобнее будет передавать IP и Порт классу при его создании, для этого создадим пару методов public PWAuth(string ip) : this(ip, 29000) { } public PWAuth(string ip, int port) { IP = ip; Port = port; } При формировании пакета 0x03(LogginAnnounce) нам понадобится генерация хеша md5 (логин+пароля) в обертке HMACMD5 Для этого мы будем использовать следующий метод: private byte[] GetHash(byte[] key, string login, string pass) { byte[] logwithpass = Encoding.ASCII.GetBytes(login + pass); MD5 md5 = MD5.Create(); return new HMACMD5(md5.ComputeHash(logwithpass)).ComputeHash(key); } Мы закончили подготавливать класс и начнем писать основной код в методе Check, которому мы передадим логин и пароль: public bool Check(string login, string pass) Этот метод будет возвращать результат(Result) Чтобы не было путаницы, в самом начале метода сделаем следующее Result = false; Connected = false; Далее приступим к созданию сокета: TcpClient tcp = new TcpClient(); try { tcp.Connect(IP, Port); } catch { return false; } Socket skt = tcp.Client; Connected = skt.Connected; Я обернул метод tcp.Connect(IP, Port); в блок try затем, чтобы при неудачном подключении не вылетал Exception Если же мы подключились к серверу, то можно начинать чтение пакета, который вышлет нам сервер(причему все следующие действия мы будем проводить в цикле while (skt.Connected)) Все полученные данные мы запишем в массив байт byte[] buf = new byte[0xFF]; skt.Receive(buf); buf[0] - Тип пакета buf[1] - Длина пакета Все остальное - пакет Если тип пакета равен 0x01(if (buf[0] == 0x01)), то нам нужно сформировать пакет 0x03 и отправить его серверу if (buf[0] == 0x01) { List<byte> Send = new List<byte>(); byte[] key = new byte[0x10]; for (int i = 0; i < 0x10; i++) key[i] = buf[i + 3]; byte[] loginbt = Encoding.GetEncoding(1251).GetBytes(login); byte[] hash = GetHash(key, login, pass); Send.Add((byte)loginbt.Length); Send.AddRange(loginbt); Send.Add((byte)hash.Length); Send.AddRange(hash); Send.Add(0x00); Send.Insert(0,(byte)Send.Count); Send.Insert(0, 0x03); skt.Send(Send.ToArray()); continue; } Оператор continue В коде чуть выше мы проделали следующие действия: Вычитали ключ из данных, которые прислал нам сервер Перевели логин в байт Сгенерировали хеш Записали длину логина и логин в массиве байт Записали длину хеша и сам хеш Записали длину пакета в начало массива Записали тип пакета(0x03) в начало массива Отправили пакет Следующий пакет, который отправит нам сервер, будет для нас результатом авторизации и если тип пакета не равен 0x01, то будет выполнен код после условия выше: Result = buf[0] == 0x02; break; Оператор break; И под конец метода мы закроем сокет и вернем результат: skt.Close(); return Result; В итоге у нас должен получиться следующий класс: using System.Collections.Generic; using System.Net.Sockets; using System.Security.Cryptography; using System.Text; namespace PWCheckAccount { class PWAuth { string IP; int Port; public bool Result { get; private set; }// Результат авторизации(связка(логин+пароль) верна/не верна) public bool Connected { get; private set; }// Результат подключения к серверу(подключиться удалось/не удалось) public PWAuth(string ip) : this(ip, 29000) { } public PWAuth(string ip, int port) { IP = ip; Port = port; } public bool Check(string login, string pass) { Result = false; Connected = false; TcpClient tcp = new TcpClient(); try { tcp.Connect(IP, Port); } catch { return false; } Socket skt = tcp.Client; Connected = skt.Connected; while (skt.Connected) { byte[] buf = new byte[0xFF]; skt.Receive(buf); if (buf[0] == 0x01) { List<byte> Send = new List<byte>(); byte[] key = new byte[0x10]; for (int i = 0; i < 0x10; i++) key[i] = buf[i + 3]; byte[] loginbt = Encoding.GetEncoding(1251).GetBytes(login); byte[] hash = GetHash(key, login, pass); Send.Add((byte)loginbt.Length); Send.AddRange(loginbt); Send.Add((byte)hash.Length); Send.AddRange(hash); Send.Add(0x00); Send.Insert(0,(byte)Send.Count); Send.Insert(0, 0x03); skt.Send(Send.ToArray()); continue; } Result = buf[0] == 0x02; break; } skt.Close(); return Result; } private byte[] GetHash(byte[] key, string login, string pass) { byte[] logwithpass = Encoding.ASCII.GetBytes(login + pass); MD5 md5 = MD5.Create(); return new HMACMD5(md5.ComputeHash(logwithpass)).ComputeHash( key); } } } Пример работы с классом: PWAuth auth = new PWAuth(tbIP.Text, (int)updPort.Value); auth.Check(tbLogin.Text, tbPass.Text); if (!auth.Connected) { MessageBox.Show("Ошибка при подключении"); return; } MessageBox.Show(auth.Result ? "Успешная авторизация" : "Логин или пароль не верны");
А где айполиси? и что ты редактируешь в gdeliveryd, воздух?
Даже в лс не дам народ не благодарный.
Не еще надо асамб код переписывать но фикс почти все тоже что и в 144.
Для 1.4.5 уже написал вот только смысла не вижу вылаживать.
Tiberium согласен то что у тебя нету редакторов (Даже под 2.2.8 и ходишь просишь у моего чилавека отредактировать). Но знаешь у нас уже есть редакторы, в 3.0.1 много листов не добавили.
Ах да чуть не забыл клиент 328 версии над пви.
Сервер нормальный. А вот руки кривые у некоторых.
Для тех кто в танке ауз который был в сборке на MsSQL с MySQL не подружите. Идем в сборку 2.2.8 и берем ауз от туда... Качаем выше конфиг для деливеруда и радуемся.
Имена участников (разделяйте запятой).