Понедельник, 25 Ноября 2024, 13:22

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Урок №3.Система авторизации. (39dll)
DeswingДата: Воскресенье, 26 Декабря 2010, 19:32 | Сообщение # 1
заслуженный участник
Сейчас нет на сайте
Привет всем! Как дела? Читаете мои статьи? Молодцы! Учитесь вместе со мной! Ведь я вам показываю всегда то, что совсем недавно освоил smile
Кое-что взял из проекта "Калидон онлайн". Пользователь Артём разрешил)
Сегодня мы попробуем сделать регистрацию через 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 smile
в 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
Quote
check=0

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
Quote
check=0

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, как всегда отлично thumb Мне очень нравится твои статьи, надеюсь когда закончишь с ммо не бросишь писать статьи по GM. С нетерпением жду продолжения.
    P.S. Когда закончишь с ммо, надо будет объединить всё в одно место, чтобы было проще искать, но это только моё мнение.



    Люблю получать +
    DeswingДата: Воскресенье, 26 Декабря 2010, 19:58 | Сообщение # 3
    заслуженный участник
    Сейчас нет на сайте
    Gefre, ну, скажем так, статья-то моя... Но некоторые куски кода не мои =\
    Не забью... Я когда пишу статьи - открываю что-то для себя новое, лезу за переводчиком, справкой... Да что там говорить о Wiki! happy
    но здесь я запутался конкретно... "Помозгую" немного и допишу... Просто надо состыковать наши доработки с новым кодом
    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)
    ---------------------------------------------
    а ты когда статью дописывать буш

    67boyДата: Среда, 29 Декабря 2010, 23:07 | Сообщение # 9
    заслуженный участник
    Сейчас нет на сайте
    Deswing, Я тебе советую после каждого урока выкладывать исходник!!!
    Так для всех понятнее будет и + побольше biggrin biggrin


    МорриартеДата: Четверг, 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?
    • Страница 1 из 2
    • 1
    • 2
    • »
    Поиск:

    Все права сохранены. GcUp.ru © 2008-2024 Рейтинг