1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Туториал Пишем свой лаунчер на C#

Тема в разделе "Руководства, инструкции, утилиты", создана пользователем arteZ, 12 ноя 2012.

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

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

    Баллы:
    123
    Skype:
    theartez
    Имя в Minecraft:
    TheArtez
    Вообщем, буду вас учить зарабатывать денюжки, или юзать СВОЙ лаунчер на Своём сервере)
    А внизу будут сорцы лаунчера авторизацией и запуском :)

    Топик я разобью по частям:
    1. Авторизация
    2. Запуск Minecraft
    3. Остальное(Потом допишем :) )

    Видео-уроки(Болело горло, извиняйте):




    Начнём с 1 части...

    1 ЧАСТЬ:
    Код авторизации:
    Код:
    string username = Login.Text;
                string pattern = @"\d*:\w*:\w*:\w*";
                Regex regex = new Regex(pattern);
                WebRequest request = WebRequest.Create([COLOR=#ff0000]"http://clannr.org/scripts/login/auth.php"[/COLOR]);
                request.Method = "POST";
                string postData = [COLOR=#ff0000]"user=" + Login.Text + "&password=" + Password.Text + "&version=13"[/COLOR];
                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();
                string s = sr.ReadToEnd();
    P.S Я тут своё юзал, так что не обижайтесь, если что-то не подходит именно вам...

    string username = Login.Text; - Login.Text - textBox называется Login
    string pattern = @"\d*:\w*:\w*:\w*"; - Строка, проверка ответа с сервера, пока не нужна
    2 строка(тут мне было лень копировать каждую строку) -
    3 строка - регекс и тд - Тот же самый паттерн(использование)
    4 строка - Создание запроса(Заканчивается аж на... 15 строчке(код до конца)

    Теперь рассмотрим строчку WebRequest request =... :

    Что туда писать? Ссылку на авторизацию...

    Далее, строка string postData = "user="... :
    Строка, отвечающая за аргументы запроса, т.е ник, пароль, версия лаунчера.

    Далее, я думаю, разъяснять не нужно, потому что вы и так читать не любите :DD

    Запрос авторизации готов! Что теперь? Теперь нужно проверить ответ с сервера!:
    Код:
                if (responseFromServer.Contains(" Bad login"))
                {
                    MessageBox.Show("Неправильный логин/пароль!");
                }
                else if (responseFromServer.Contains(" Old version"))
                {
                    MessageBox.Show("Обновите лаунчер!(Скачайте новую версию с сайта clanNr.org)");
                }
    Смотрим...

    if - переводится как ЕСЛИ, т.е перевод скриптового языка: если ответ с сервера равен " Bad Login", то показывает окно с текстом, неправильный логин или пароль

    else if - ИНАЧЕ ЕСЛИ, т.е перевод: Иначе если 1 ЕСЛИ не равняется, то проверка: ответ с сервера равен " Old Version" то выскакивает окошко.... ну дальше понятно...

    Авторизация готова!

    ЧАСТЬ 2
    Запуск Minecraft после успешной авторизации с парсингом сессии

    После авторизации, прямо сразу же пишем:
    Код:
    else if (match.Success)
    {
    string input = responseFromServer;
                            string[] split = input.Split(':');
                            string final = split[3];
                            ProcessStartInfo mcStartInfo = new ProcessStartInfo("javaw", "-Xms1G -Xmx1G -cp \"" + appData + "\\.ClanNR\\bin\\minecraft1.jar;" + appData + "\\.ClanNR\\bin\\jinput.jar;" + appData + "\\.ClanNR\\bin\\lwjgl.jar;" + appData + "\\.ClanNR\\bin\\lwjgl_util.jar \" -Djava.library.path=\"" + appData + "\\.ClanNR\\bin\\natives\" net.minecraft.client.Minecraft" + " " + username;
                            Process.Start(mcStartInfo);
                            this.Close();
                            reader.Close();
                            dataStream.Close();
                            response.Close();
    }
    Разбираем:
    string[] split =... - проверка сессии, так же, как и 2 строка
    ProcessStartInfo... - Аргументы запуска. Изменяйте как пожелаете
    Process.Start... - Запуск Minecraft

    Остальные строчки закрывают запрос (Не позволяют запрос оставаться даже после успешного входа)

    Вход готов! Тестируйте!

    Оказывается, тут нашёлся ещё 1 C#-дев, вот вам строка, ускоряющая процесс POST-запроса(Авторизации)(Спасибо Raptor2108):
    Код:
    request.Proxy = new WebProxy();


    ДОПОЛНЯЖЖКИ:
    Делаем показ скина:

    1. Изменяем кнопку с текстом Старт! на "Вход!"
    2. Добавляем точно такую же(копию) кнопку, и размещаем её точно так же, как и кнопка входа
    3. Добавим свойства(в свойствах формы, т.е. в граф. редакторе):
    Кнопка Старт! - Visible = False
    Кнопка Вход! - Visible = True

    Далее смотрим по видео, тут описывать долго и нудно :)
     
    MrAnanasik, twixi007, FelixCoder и 47 другим нравится это.
  2. tipson

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

    Баллы:
    153
    Skype:
    T-oleg98
    Имя в Minecraft:
    Tipson
    Кстати если бы ты весь свой гайд не писал,а все рассказал в видео было бы лучше и понятнее
     
    дягтерев нравится это.
  3. Автор темы
    arteZ

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

    Баллы:
    123
    Skype:
    theartez
    Имя в Minecraft:
    TheArtez
    У меня с микро проблемы, только автоматическая настройка микро в скайпе помогает, а так фонит просто ужас, я бы заснял)
     
  4. tipson

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

    Баллы:
    153
    Skype:
    T-oleg98
    Имя в Minecraft:
    Tipson
    Эх микро,микро проблема людей 21 века
     
    MrAnanasik, blogger2, ufes и ещё 1-му нравится это.
  5. Автор темы
    arteZ

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

    Баллы:
    123
    Skype:
    theartez
    Имя в Minecraft:
    TheArtez
    Раньше нормально работал, сейчас - хоть выкидывай
     
  6. tipson

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

    Баллы:
    153
    Skype:
    T-oleg98
    Имя в Minecraft:
    Tipson
    вот вот такая же проблема пришлось наушники с микрофоном покупать
     
    zuma2 и ВремяПриключений нравится это.
  7. dark32

    dark32 А где твой ТЗ? Пользователь

    Баллы:
    123
    Будут ли разработки на C++ QT?
    C# - хорошо, но страдает кросплатформенность.
     
  8. Jers

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

    Баллы:
    153
    Да, думаю я выложу как нибудь, скоро.
     
  9. LeftMyHouse

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

    Баллы:
    78
     
  10. Dr.Death

    Dr.Death Старожил Пользователь

    Баллы:
    153
    Skype:
    asn008
    Имя в Minecraft:
    DrDeath
    Пересобрать под линуксом. Моно же
     
    LeftMyHouse нравится это.
  11. hame

    hame Активный участник Пользователь

    Баллы:
    88
    Skype:
    ssshamesss
    Имя в Minecraft:
    hame
    @arteZ, У меня вопрос, чем же этот лаунчер индивидуален? Тем, что у него есть система "Авторизации"?
     
  12. Автор темы
    arteZ

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

    Баллы:
    123
    Skype:
    theartez
    Имя в Minecraft:
    TheArtez
    Багнутый. Я ему не доверяю) Собирайте сами, где желаете
    То, что он не будет похож на другие(Дизайн, месторасположение), свобода выбора!
     
  13. Автор темы
    arteZ

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

    Баллы:
    123
    Skype:
    theartez
    Имя в Minecraft:
    TheArtez
    Вы вообще должны радоваться такому...
     
  14. hame

    hame Активный участник Пользователь

    Баллы:
    88
    Skype:
    ssshamesss
    Имя в Minecraft:
    hame
    Я конечно рад...
     
  15. Jers

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

    Баллы:
    153
    Код:
      if (responseFromServer.Contains(" Bad login"))
     
                {
     
                    MessageBox.Show("Неправильный логин/пароль!");
     
                }
     
                else if (responseFromServer.Contains(" Old version"))
     
                {
     
                    MessageBox.Show("Обновите лаунчер!(Скачайте новую версию с сайта clanNr.org)");
     
                }
    А если какая другая ошибка? Ничего не покажет и пользователь будет сидеть сто раз набирать данные!

    Код:
    if (responseFromServer.Contains(" Bad login"))
                {
                    MessageBox.Show("Неправильный логин/пароль!");
                }
                else if (responseFromServer.Contains(" Old version"))
                {
     
                    MessageBox.Show("Обновите лаунчер!(Скачайте новую версию с сайта clanNr.org)");
     
                }else{
    MessageBox.Show("Неизвестная ошибка!");
    }
     
    slavik123123123 и LeftMyHouse нравится это.
  16. OveRKinG

    OveRKinG Активный участник Пользователь

    Баллы:
    68
    Имя в Minecraft:
    _OveRKinG
    Лаунчер на С# это конечно хорошо и красиво,но(!) заставлять пользователя качать Фреймворк ради того что бы поиграть...(PS:Только не надо говорить что у всех в наше время есть фреймворк,это не так :3)
     
    Bars нравится это.
  17. Fourgotten

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

    Баллы:
    103
    Код похож таки на стандарт, ибо C# все таки родня яве)
    А чтобы поиграть в Minecraft, нам нужна Java.
    C#, как и Java больше относится к интерпретируемым языкам, для работы которых нужно нечто внешнее. Хотя и оба этих языка назвать полностью ни компилируемыми, ни интерпретируемыми нельзя. Компилируется в них байт код — нечто промежуточное между машинным кодом и синтаксисом языка. А вот байт код уже интерпретируется в виртуальной машине.
     
    Сникерсни и arteZ нравится это.
  18. Автор темы
    arteZ

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

    Баллы:
    123
    Skype:
    theartez
    Имя в Minecraft:
    TheArtez
    Согласен...

    А вообще, фреймворк нужен для работы некоторых игр, приложений... Даже MMO-игр(Пример: PW, но у них там по-моему автоматическая установка)


    Других нету, проверял уже)
     
  19. Автор темы
    arteZ

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

    Баллы:
    123
    Skype:
    theartez
    Имя в Minecraft:
    TheArtez
    Пишу видео :)
     
  20. tipson

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

    Баллы:
    153
    Skype:
    T-oleg98
    Имя в Minecraft:
    Tipson
    Микрофон купил?
     

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