Урок №3.Система авторизации. (39dll)
| |
Deswing | Дата: Воскресенье, 26 Декабря 2010, 19:32 | Сообщение # 1 |
заслуженный участник
Сейчас нет на сайте
| Привет всем! Как дела? Читаете мои статьи? Молодцы! Учитесь вместе со мной! Ведь я вам показываю всегда то, что совсем недавно освоил Кое-что взял из проекта "Калидон онлайн". Пользователь Артём разрешил) Сегодня мы попробуем сделать регистрацию через ini файлы! GML сам по себе умеет работать с ini, и это огромный плюс! Ладно, начнем урок! Откройте свои наработки по mmo (Урок 1 - Урок 2 Итак, мы открыли свои наработки! Пока у нас есть движение и поворот персонажа... Теперь удалите комнату (если таковая имеется) и создайте новую! В этом окне мы сможем зарегистрироваться или войти под своим логином. Размер комнаты я установил вот такой - 235х350 и убрал fullscreen режим:) Перед написанием кода нам надо создать поля для ввода логина и пароля, две кнопки (вход, регистрация) и галочку "Запомнить?". Для удобства я сделал спрайты: Поле для ввода (Надписи через draw напишем) Кнопка (В драв, как и выше) Галочка (разделите в редакторе или нарисуйте свою) Так... Загрузили спрайты... Создали комнаты... Теперь надо создать саму "систему" авторизации! Для этого создадим обьект oReg и в событии create напишем вот такой небольшой, красивый код: Code dllinit(0, true, true) //Включаем о великий 39dll *_* global.socket=-1 ini_open('config.ini') //Открываем конфиг.ини, которого мы ещё не создали хд obj_nickname.text=ini_read_string('History','Login','') //Обьекту obj_nickname, который создадим позже (это поле логина), присваиваем переменную text со значением Login. Тоесть если в конфиге будет Login=ololo, то text=ololo >D obj_password.text=ini_read_string('History,'Password','') //Тоже самое ini_close() //Перестаём читать ини пока мало чего понятно... Но вы сами ф-ции освойте, далее будет всё просто! STEP (данный код не является моим, но автор одобрил использование этого кода в моих целях) Code if(global.socket=-1) //Если сокет будет равен -1 exit //Выходим из игры
while(1) //Бессконечный цикл { size = receivemessage(global.socket); if(size < 0)break; if(size == 0) { instance_destroy(); break; } mid = readbyte(); switch(mid) { case 100: show_message('Персонаж с таким именем уже есть!') closesocket(global.socket) //Закрываем socket (global.socket) obj_nickname.text='' //Переменная обьекта obj_nickname под названием text обнулится ('') obj_password.text='' //... break;
case 101: show_message('Регистрация завершена!') //Выводим сообщение global.nick=obj_nickname.text //Наш ник будет равен переменной text из обьекта obj_nickname global.needread=0 if(galo4ka.check) //Сохраняем логин и пароль, если галочка поставлена { ini_open('config.ini') ini_write_string('Save','Login',obj_nickname.text) ini_write_string('Save','Password',obj_password.t ext) ini_close() } room_goto_next() break;
case 102: show_message('Зашли!') //Сообщение global.nick=obj_nickname.text global.needread=1 if(galo4ka.check) //Сохраняем логин и пароль, если галочка поставлена { ini_open('config.ini') ini_write_string('Save','Login',obj_nickname.text) ini_write_string('Save','Password',obj_password.t ext) ini_close() } room_goto_next() break;
case 103: show_message('Неверный логин или пароль!') closesocket(global.socket) //Закрываем сокет obj_nickname.text='' //обнуляем всё obj_password.text='' break;
case 104: show_message('Заблокированы!') closesocket(global.socket) obj_nickname.text='' obj_password.text='' break; } } oReg написали, теперь сами поля для ввода логина и пароля) Создадим обьекты obj_nickname и obj_password. Обьектам назначим соответствубщий спрайт. Поработаем над obj_nickname в create Code text='' //Это текст, иными словами логин, который введем log='Введите логин' //Если мы ничего не введем то будет гореть это сообщение) check=0 STEP Quote if(check) //если check будет равен 1 text=string_lettersdigits(keyboard_string) //То все символы буду записываться в text Left button Quote check=1 //Чек=1, а значит можем набирать текст! log='' keyboard_string='' Global Left pressed Draw Quote draw_set_font(md2) draw_sprite(sprite_index,image_index,x,y) draw_set_color(c_black) if(check) draw_text(x+30,y+15,text+'|') else draw _text(x+30,y+15,text) if text='' {draw_text(x+30,y+15,log)} Почти тоже самое с obj_password) Create Quote text='' pass='Введите пароль' check=0 STEP Quote if(check) text=string_lettersdigits(keyboard_string) Left button Quote check=1 pass='' keyboard_string='' global left button draw Quote draw_set_font(md2) draw_sprite(sprite_index,image_index,x,y) draw_set_color(c_black) if(check) draw_text(x+30,y+15,text+'|') else draw _text(x+30,y+15,text) if text='' {draw_text(x+30,y+15,переменная с "Введите пароль >D") сделали... Теперь создадим обьект галочки- galo4ka Create Code image_speed=0 check=0 Left Button Quote check=!check //check=1 image_index=check //Индекс изображения=1 DRAW Quote draw_sprite(sprite_index,image_index,x,y) draw_set_font(font1) //назначаем шрифт font1, который вы должны создать) draw_set_color(c_blue) draw_text(x+24,y,'Сохранить логин и пароль') Фух... Сделали галочку! Теперь надо кнопки "Регистрация" и "Вход" сделать)) Делаем обьект входа (кнпоку) и назначаем спрайт! У меня будет называться "obj_reg" Left pressed Code if(obj_nickname.text='' or obj_password.text='') { show_message('Логин или пароль не введены') exit; //Выход }
global.ip = get_string("Enter address to connect to", "127.0.0.1") //Айпи сервера
global.socket = tcpconnect(global.ip,14704, 1) //Айпи серва
if(!global.socket) { show_message('Не удалось зайти') game_end() //выходим } room_goto_next() Накрутил очень много... Чуть позже допишу
|
|
| |
Gefre | Дата: Воскресенье, 26 Декабря 2010, 19:47 | Сообщение # 2 |
Любитель ретро игр
Сейчас нет на сайте
| Deswing, как всегда отлично Мне очень нравится твои статьи, надеюсь когда закончишь с ммо не бросишь писать статьи по GM. С нетерпением жду продолжения. P.S. Когда закончишь с ммо, надо будет объединить всё в одно место, чтобы было проще искать, но это только моё мнение.
Люблю получать +
|
|
| |
Deswing | Дата: Воскресенье, 26 Декабря 2010, 19:58 | Сообщение # 3 |
заслуженный участник
Сейчас нет на сайте
| Gefre, ну, скажем так, статья-то моя... Но некоторые куски кода не мои =\ Не забью... Я когда пишу статьи - открываю что-то для себя новое, лезу за переводчиком, справкой... Да что там говорить о Wiki! но здесь я запутался конкретно... "Помозгую" немного и допишу... Просто надо состыковать наши доработки с новым кодом
|
|
| |
Gefre | Дата: Воскресенье, 26 Декабря 2010, 20:05 | Сообщение # 4 |
Любитель ретро игр
Сейчас нет на сайте
| Quote (Deswing) Но некоторые куски кода не мои Не важно, что код не твой.Важно твое понимание кода и передача знаний о нём другим пользователям.
Люблю получать +
|
|
| |
Deswing | Дата: Воскресенье, 26 Декабря 2010, 20:07 | Сообщение # 5 |
заслуженный участник
Сейчас нет на сайте
| Gefre, ну тогда всё нормально, раз ты так считаешь)
|
|
| |
zik13 | Дата: Воскресенье, 26 Декабря 2010, 23:11 | Сообщение # 6 |
Dark wolf
Сейчас нет на сайте
| ERROR in action number 1 of Mouse Event for Left Pressed for object objReg: In script tcpconnect: Error in code at line 11: connected*/return external_call(global._SokA, argument0, argument1, argument2); ^ at position 29: Unknown variable _SokA
|
|
| |
Deswing | Дата: Воскресенье, 26 Декабря 2010, 23:15 | Сообщение # 7 |
заслуженный участник
Сейчас нет на сайте
| zik13, Quote (Deswing) Накрутил очень много... Чуть позже допишу
|
|
| |
zik13 | Дата: Понедельник, 27 Декабря 2010, 13:08 | Сообщение # 8 |
Dark wolf
Сейчас нет на сайте
| ERROR in action number 1 of Mouse Event for Left Pressed for object objReg: In script tcpconnect: Error in code at line 11: connected*/return external_call(global._SokA, argument0, argument1, argument2); ^ at position 29: Unknown variable _SokA Добавлено (27.12.2010, 13:08) --------------------------------------------- а ты когда статью дописывать буш
|
|
| | |
Морриарте | Дата: Четверг, 30 Декабря 2010, 11:23 | Сообщение # 10 |
LINUX ФАНАТ
Сейчас нет на сайте
| Quote (67boy) Так для всех понятнее будет и + побольше +1. Статьи самое то, но нужно их писать по грамотнее.
|
|
| |
67boy | Дата: Четверг, 30 Декабря 2010, 14:52 | Сообщение # 11 |
заслуженный участник
Сейчас нет на сайте
| Buran, Возможно, просты пишешь почти не на начальном уровне. И некоторым непонятно!!! Deswing, Советую выкладывай исходники после каждого урока!
|
|
| |
Deswing | Дата: Четверг, 30 Декабря 2010, 15:24 | Сообщение # 12 |
заслуженный участник
Сейчас нет на сайте
| Quote (67boy) Советую выкладывай исходники после каждого урока! нет.) Так вы тупо запустите проект и измените спрайты)
|
|
| |
zik13 | Дата: Четверг, 30 Декабря 2010, 15:38 | Сообщение # 13 |
Dark wolf
Сейчас нет на сайте
| ты когда допишешь статью ??
|
|
| |
Deswing | Дата: Четверг, 30 Декабря 2010, 19:02 | Сообщение # 14 |
заслуженный участник
Сейчас нет на сайте
| zik13, у меня некие проблемы на личном фронте + я пишу ммо... Урок этот довольно-таки сложный, если хочешь - могу что-то другое написать (систему боя, например)
|
|
| |
zik13 | Дата: Четверг, 30 Декабря 2010, 19:06 | Сообщение # 15 |
Dark wolf
Сейчас нет на сайте
| пиши статьи как опыта наберешся или время будет до пишешь эту
|
|
| |
Deswing | Дата: Четверг, 30 Декабря 2010, 19:10 | Сообщение # 16 |
заслуженный участник
Сейчас нет на сайте
| zik13, просто вырвать кусочек кода чуть-чуть не получилось, весь сервер прийдется переписывать...Могу дописать статью до 5-го января, или написать ещё 6-ть статей. Времени просто очень мало... Движок пишу...
|
|
| |
zik13 | Дата: Четверг, 30 Декабря 2010, 19:17 | Сообщение # 17 |
Dark wolf
Сейчас нет на сайте
| давай лучше 6 статей )
|
|
| |
Deswing | Дата: Четверг, 30 Декабря 2010, 19:25 | Сообщение # 18 |
заслуженный участник
Сейчас нет на сайте
| zik13, чего хотел бы реализовать?
|
|
| |
zik13 | Дата: Четверг, 30 Декабря 2010, 19:27 | Сообщение # 19 |
Dark wolf
Сейчас нет на сайте
| ну даже не знаю ) . напиши статейки по рпг
|
|
| |
Deswing | Дата: Четверг, 30 Декабря 2010, 19:43 | Сообщение # 20 |
заслуженный участник
Сейчас нет на сайте
| zik13, что именно? Online\Offline?
|
|
| |
|