Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Как реализовать проверку клиента на C# WPF

Тема в разделе "[Архив] Помощь", создана пользователем Husqvarna, 15 ноя 2012.

  1. Автор темы
    Husqvarna

    Husqvarna Активный участник

    Баллы:
    68
    Дружище пишет лаунчер, уже есть логин/регистрация по системе byxar'а. Не можем придумать способа проверки килента а точнее md5 проверки, нужен сам пхп-скрипт md5.php как в лаунчере (недописанном) mops1k. И еще вопросец - как изменить версию клиента и сервера?
    UPD
    Столкнулись с проблемой, клиент можно запустить без лаунчера! Что нужно сделать дабы избежать запуска клиента без лаунчера?

    И еще вопрос не по теме - как все же сделать систему скинов? скрипт загрузки уже есть, нужно что бы клиент брал скин по нику. Я не знаю просто как эта система работает

    Даблпостинг фиксед © CyberMan
     
  2. Хостинг MineCraft
    <
  3. Автор темы
    Husqvarna

    Husqvarna Активный участник

    Баллы:
    68
    ну UP!!!! Люди нужна помощь срочно!!!
     
  4. Raptor2108

    Raptor2108 Старожил Пользователь

    Баллы:
    173
    Skype:
    Raptor210818
    Имя в Minecraft:
    Raptor2108
    Скрипт вообщем то пустяковый, в php есть функция md5_file()

    Можно как то так:

    Код:
    $md5Launcher = $_POST['md5']; //передаем пост запросом из лаунчера мд5 файла.
    $md5Server = md5_file("/client/minecraft.jar"); // считаем мд5 файла на серве.
    if ($md5Launcher === $md5Server)
    echo "Ok"; //возвращаем ответ в зависимости от их равенства.
    else
    echo "No";

    За синтаксис не ручаюсь с php мало дел имел.
     
    Husqvarna и kaban1997 нравится это.
  5. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    1)Со скриптом просто
    <?
    $md5 = $_GET["md5"];
    $realmd5 = md5(file_get_contents("minecraft.jar"));
    if($md5 == $realmd5) { echo ("OK"); } else { echo ("ERROR"); }
    ?>
    2) Запущенный клиент без лаунчера не получит сессию и не сможет зайти на сервер!
    На счет скинов у вебчасти лаунчера империя хороший скрипт выводит простые и HD скины
     
    Husqvarna и kaban1997 нравится это.
  6. Raptor2108

    Raptor2108 Старожил Пользователь

    Баллы:
    173
    Skype:
    Raptor210818
    Имя в Minecraft:
    Raptor2108
    Есть такой файлик skin2d.php, я не помню откуда его тут брал, вот ему передаешь GET запросом ник ?user. И он возвращает путь до картинки, в c# можно взять Image box или его аналог для WPF и в строчке путь до файла указать путь до файла skin2d.php + указать get запросом нужный тебе ник.
     
    Husqvarna и kaban1997 нравится это.
  7. Автор темы
    Husqvarna

    Husqvarna Активный участник

    Баллы:
    68
    А как же быть с запуском клиента "левым" лаунчером? Ведь на сервере не будет стоять AuthMe, следовательно и ник можно любой указать и войти под ним на сервер без проблем! :( Как получить сессию? Какой php'шник отвечает за нее? У бухара нету вроде бы этого скрипта... а может я и ошибаюсь
     
  8. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    joinserver.php и checkserver.php не?
    Многие юзают бухара :)
     
    Goldenix нравится это.
  9. Raptor2108

    Raptor2108 Старожил Пользователь

    Баллы:
    173
    Skype:
    Raptor210818
    Имя в Minecraft:
    Raptor2108
    используй бухаровскую систему авторизации.
     
    Husqvarna нравится это.
  10. Автор темы
    Husqvarna

    Husqvarna Активный участник

    Баллы:
    68
    Я ее и юзаю.

    Изменил файл arw.class под свой checkserver.php, изменил и в баките ThreadLoginVerifier.class. При заходе конекте с сервером выдает ошибку Bad login! Может я не все файлы отредактировал?
     
    Vedroyder нравится это.
  11. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Бухара не юзал ну разве там для клиента не joinserver.php ?
     
    Vedroyder нравится это.
  12. Автор темы
    Husqvarna

    Husqvarna Активный участник

    Баллы:
    68
    По какому принципу работает передача сессии на сервер? При конекте пишет Bad Login. И кстати как реализовать конект к серверу сразу после нажатия кнопки "Играть"?
     
    ПриветОтМиднайта нравится это.
  13. Автор темы
    Husqvarna

    Husqvarna Активный участник

    Баллы:
    68
    Код:
    string mc = string.Format("{0}\\{1}", Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), ".minecraft\\bin\\minecraft.jar");
                    string login_info = MC.GetPOSTInfo(auth_addr, "user=" + Login.Text + "&password=" + Password.Password/* + "&version=" + version*/);
                    //string md5 = MC.GetPOSTInfo(md5_addr, "md5=" + MC.ComputeMD5Checksum(mc));
                    string pattern = @"\d*:\w*:\w*:\w*";
                    Regex regex = new Regex(pattern);
                    Match match = regex.Match(login_info);
                    if (match.Success)
                    {
                        if (File.Exists(mc))// && (md5 == "ok"))
                        {
                            System.Diagnostics.Process pr_st = new System.Diagnostics.Process();
                            pr_st = Process.Start("javaw", string.Format("-Xmx1G -Djava.library.path=\"{0}/.minecraft/bin/natives\" -cp " +
                                                                                        "\"{0}/.minecraft/bin/minecraft.jar\";" +
                                                                                        "\"{0}/.minecraft/bin/jinput.jar\";" +
                                                                                        "\"{0}/.minecraft/bin/lwjgl.jar\";" +
                                                                                        "\"{0}/.minecraft/bin/lwjgl_util.jar\" net.minecraft.client.Minecraft \"{1}\"",
                            Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), Login.Text));
                            while(!pr_st.HasExited)
                            {
                           
                                WindowState = System.Windows.WindowState.Minimized;
                            }
                            WindowState = System.Windows.WindowState.Normal;
                        }
                        }
                        else
                        {
                            MessageBox.Show(login_info, "Ошибка авторизации!");
                        }
    Это код процедуры входа после нажатия кнопки Играть. Кстати сессию скрипт php спокойно записывает в БД. Я в C# ничего не понимаю, пишу от лица друга. Как передать клиенту команду о том что он должен сразу подключиться к серверу после нажатия кнопки?
     
  14. Автор темы
    Husqvarna

    Husqvarna Активный участник

    Баллы:
    68
    На 0:21 ошибка...
     
  15. Alastar

    Alastar Старожил Пользователь

    Баллы:
    173
    Ня, выдирай, код от Artez:
    Код:
            private void button1_Click(object sender, EventArgs e)
            {
     
                string username = TextBox1.Text;
                string pattern = @"\d*:\w*:\w*:\w*";
                Regex regex = new Regex(pattern);
                WebRequest request = WebRequest.Create("http://сайт/auth.php");
                request.Proxy = new WebProxy();
                request.Method = "POST";
                string postData = "user=" + username + "&password=" + TextBox2.Text + "&version=13";
                byte[] byteArray = Encoding.UTF8.GetBytes(postData);
                request.ContentType = "application/x-www-form-urlencoded";
                request.ContentLength = byteArray.Length;
                Stream dataStream = request.GetRequestStream();
                dataStream.Write(byteArray, 0, byteArray.Length);
                dataStream.Close();
                WebResponse response = request.GetResponse();
                Console.WriteLine(((HttpWebResponse)response).StatusDescription);
                dataStream = response.GetResponseStream();
                StreamReader reader = new StreamReader(dataStream);
                string responseFromServer = reader.ReadToEnd();
     
                Match match = regex.Match(responseFromServer);
                //string input = responseFromServer;
                //string[] split = input.Split(':');
                //string final = split[3];
                if (responseFromServer.Contains("Bad login"))
                {
                  label1.Text = "Неправильный логин/пароль!";
                }
                else if (responseFromServer.Contains("Old version"))
                {
                  label1.Text = "Старый лаунчер";
                }
                else if (match.Success)
                {
                    string input = responseFromServer;
                    string appData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
                    string[] split = input.Split(':');
                    string session = split[3];
                    ProcessStartInfo mcStartInfo = new ProcessStartInfo("javaw", "-Xms1G -Xmx1G -cp \"" + appData + "\\.minecraft\\bin\\minecraft.jar;" + appData + "\\.(UOgames.ru)\\bin\\jinput.jar;" + appData + "\\.minecraft\\bin\\lwjgl.jar;" + appData + "\\.minecraft\\bin\\lwjgl_util.jar \" -Djava.library.path=\"" + appData + "\\.minecraft\\bin\\natives\" net.minecraft.client.Minecraft" + " " + username + " " + session);
                    Process.Start(mcStartInfo);
                    this.Close();
                }
                else
                {
                    label1.Text = "Неизвестная ошибка";
                }
          }
     
  16. mihanikf2a

    mihanikf2a Активный участник

    Баллы:
    63
    на данный момент проблема состоит в том что при нажатии кнопки играть в лаунчере запускается игра, а как сделать чтобы запускался сервер? что помимио сессии и ника надо передать в игру подскажите?
     
    Husqvarna нравится это.
  17. kaban1997

    kaban1997 Старожил Переводчик Пользователь

    Баллы:
    173
    :eek:Запускать сервер? В лаунчере ?:eek:

    Ты имеешь ввиду, чтобы автоподключение к серву было?
     
  18. mihanikf2a

    mihanikf2a Активный участник

    Баллы:
    63
    да
     
    Husqvarna нравится это.
  19. kaban1997

    kaban1997 Старожил Переводчик Пользователь

    Баллы:
    173
    Мне тоже интересно
     
  20. programmeraxel

    programmeraxel Старожил

    Баллы:
    103
    он наверное имеет ввиду что клиент будет конектится сразу к серверу
     
    nvidia_hl2 нравится это.
  21. Автор темы
    Husqvarna

    Husqvarna Активный участник

    Баллы:
    68
    Да, он так и имел ввиду
     

Поделиться этой страницей