Войти или зарегистрироваться

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

  • Автор темы Автор темы arteZ
  • Дата начала Дата начала

arteZ

Старожил
Пользователь
Баллы
123
Имя в 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

Далее смотрим по видео, тут описывать долго и нудно :)
 
Кстати если бы ты весь свой гайд не писал,а все рассказал в видео было бы лучше и понятнее
 
Кстати если бы ты весь свой гайд не писал,а все рассказал в видео было бы лучше и понятнее
У меня с микро проблемы, только автоматическая настройка микро в скайпе помогает, а так фонит просто ужас, я бы заснял)
 
@arteZ, У меня вопрос, чем же этот лаунчер индивидуален? Тем, что у него есть система "Авторизации"?
 
Пересобрать под линуксом. Моно же
Багнутый. Я ему не доверяю) Собирайте сами, где желаете
@arteZ, У меня вопрос, чем же этот лаунчер индивидуален? Тем, что у него есть система "Авторизации"?
То, что он не будет похож на другие(Дизайн, месторасположение), свобода выбора!
 
Код:
  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("Неизвестная ошибка!");
}
 
Лаунчер на С# это конечно хорошо и красиво,но(!) заставлять пользователя качать Фреймворк ради того что бы поиграть...(PS:Только не надо говорить что у всех в наше время есть фреймворк,это не так :3)
 
  • Нравится
Реакции: Bars
Код похож таки на стандарт, ибо C# все таки родня яве)
(PS:Только не надо говорить что у всех в наше время есть фреймворк,это не так :3)

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


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

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


Код:
  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("Неизвестная ошибка!");
}
Других нету, проверял уже)
 
Назад
Верх