PDA

Просмотр полной версии : [Вопрос] Создание/Сохранение аккаунта



kushichka
06.03.2016, 02:44
Написал систему регистрации по такому принципу:
- при конекте, если не зареган, игроку показывает регистрацию.
- после ввода пароля идет перевод в сток создания игрока, где записывается в бд его ник и пароль, что бы если он выйдет, не регался опять. Пол, скин он может получить после следующего захода, когда будет логиниться. Но если он, все же, продолжает регистрироваться, то
- даем выбрать пол и скин(рандомный пока что), и эти данные тут же записываются в бд, по причине, описанной выше.
- дальше показываем ему авторизацию
- спавним

Вопрос: где в этой системе будет лучше вставлять дополнительные данные типа стартовых денег, уровня, лицензии и прочее?
Экспериментировал с разными вариантами, но как-то коряво все получается, может кто подскажет хороший вариант...

*если нужен код, могу предоставить, не вставлял, потому что много вставлять пришлось бы.

DeimoS
06.03.2016, 06:58
Во время этого:

- после ввода пароля идет перевод в сток создания игрока, где записывается в бд его ник и пароль, что бы если он выйдет, не регался опять. Пол, скин он может получить после следующего захода, когда будет логиниться. Но если он, все же, продолжает регистрироваться, то


А вообще в БД имеется такая замечательная функция, как установка значения по умолчанию. Эта опция так и называется - "По умолчанию" и значение её можно указать при редактировании нужного столбца. Там есть три параметра: "Как определено:", "NULL" и "CURRENT_TIMESTAMP".
"Как определено:" - собственно, из названия понятно, что значение столбца будет такое, каким его указать в данном параметре.
"NULL" - Пустое поле
"CURRENT_TIMESTAMP" - вернёт время, указанное на сервере, на котором установлен MySQL (подойдёт для записи даты регистрации).

В твоём случае нужен первый параметр "Как определено:". Указываешь для каждого из полей, значение которых тебе известно уже сейчас (которые не зависят от выбора игрока: стартовые деньги, уровень и т.п.), нужные значения и при регистрации в БД передаёшь только те значения, которые тебе неизвестны (ник, пароль, скин и т.п.), а известные значения не трогаешь и БД сама их создаст. И теперь, когда создаёшь аккаунт, сделай присвоение этих данных к нужным переменным, дабы не только БД знала эти значения, но и сервер.
Так получится, что ты не передаёшь ненужные данные в запросе и, при этом, все значения у тебя сохраняются, сохраняясь, при этом асинхронно (на сервере отдельно и в БД отдельно).
Как-то так

kushichka
06.03.2016, 13:47
Во время этого:



А вообще в БД имеется такая замечательная функция, как установка значения по умолчанию. Эта опция так и называется - "По умолчанию" и значение её можно указать при редактировании нужного столбца. Там есть три параметра: "Как определено:", "NULL" и "CURRENT_TIMESTAMP".
"Как определено:" - собственно, из названия понятно, что значение столбца будет такое, каким его указать в данном параметре.
"NULL" - Пустое поле
"CURRENT_TIMESTAMP" - вернёт время, указанное на сервере, на котором установлен MySQL (подойдёт для записи даты регистрации).

В твоём случае нужен первый параметр "Как определено:". Указываешь для каждого из полей, значение которых тебе известно уже сейчас (которые не зависят от выбора игрока: стартовые деньги, уровень и т.п.), нужные значения и при регистрации в БД передаёшь только те значения, которые тебе неизвестны (ник, пароль, скин и т.п.), а известные значения не трогаешь и БД сама их создаст. И теперь, когда создаёшь аккаунт, сделай присвоение этих данных к нужным переменным, дабы не только БД знала эти значения, но и сервер.
Так получится, что ты не передаёшь ненужные данные в запросе и, при этом, все значения у тебя сохраняются, сохраняясь, при этом асинхронно (на сервере отдельно и в БД отдельно).
Как-то так

Это я понимаю, дело в том что я не знаю где именно задать эти значения в этой системе, куда их впихнуть...

DeimoS
06.03.2016, 13:50
Это я понимаю, дело в том что я не знаю где именно задать эти значения в этой системе, куда их впихнуть...

Ну так я же сказал, значение переменным присваивай при создании аккаунта и больше к БД за данными не обращайся

kushichka
06.03.2016, 14:19
Ну так я же сказал, значение переменным присваивай при создании аккаунта и больше к БД за данными не обращайся

То есть там где я записываю логин и пароль в бд, а что бы записать все данные, нужно что бы игрок полностью прошел регистрацию, то есть если он ливнет во время регистрации, то после захода ему придется опять регистрироваться.

DeimoS
06.03.2016, 14:44
То есть там где я записываю логин и пароль в бд, а что бы записать все данные, нужно что бы игрок полностью прошел регистрацию, то есть если он ливнет во время регистрации, то после захода ему придется опять регистрироваться.

Ну что тебе нужно для того, чтоб создать аккаунт игрока? Узнать его логин и пароль. Когда он их предоставляет, создавай аккаунт и присваивай переменным с уровнем/деньгами и т.п. значения по умолчанию (в БД они установятся столбцам автоматически, так что и сохранять ничего не нужно).
Теперь отправляем игрока на выбор пола и скина. Если выбрал - обновляем нужные столбцы в БД и пропускаем на сервер. Если вышел - при следующем заходе, когда игрок ввёл данные от аккаунта, проверяем значение переменной с скином или полом (какую-то из них в БД сделай по умолчанию равной, например, "-1" и проверяй на это значение). Ну и далее, если в прошлый раз он регистрацию не закончил - показываем нужные диалоги. Всё.

То есть, схема такова:
Вход -> Ввод пароля -> Создание аккаунта и присвоение значения переменным -> Выбор скина -> Игра

kushichka
06.03.2016, 16:43
Ну что тебе нужно для того, чтоб создать аккаунт игрока? Узнать его логин и пароль. Когда он их предоставляет, создавай аккаунт и присваивай переменным с уровнем/деньгами и т.п. значения по умолчанию (в БД они установятся столбцам автоматически, так что и сохранять ничего не нужно).
Теперь отправляем игрока на выбор пола и скина. Если выбрал - обновляем нужные столбцы в БД и пропускаем на сервер. Если вышел - при следующем заходе, когда игрок ввёл данные от аккаунта, проверяем значение переменной с скином или полом (какую-то из них в БД сделай по умолчанию равной, например, "-1" и проверяй на это значение). Ну и далее, если в прошлый раз он регистрацию не закончил - показываем нужные диалоги. Всё.

То есть, схема такова:
Вход -> Ввод пароля -> Создание аккаунта и присвоение значения переменным -> Выбор скина -> Игра

Понял, буду пробовать.

StevenH
07.03.2016, 15:37
Во время этого:



А вообще в БД имеется такая замечательная функция, как установка значения по умолчанию. Эта опция так и называется - "По умолчанию" и значение её можно указать при редактировании нужного столбца. Там есть три параметра: "Как определено:", "NULL" и "CURRENT_TIMESTAMP".
"Как определено:" - собственно, из названия понятно, что значение столбца будет такое, каким его указать в данном параметре.
"NULL" - Пустое поле
"CURRENT_TIMESTAMP" - вернёт время, указанное на сервере, на котором установлен MySQL (подойдёт для записи даты регистрации).

В твоём случае нужен первый параметр "Как определено:". Указываешь для каждого из полей, значение которых тебе известно уже сейчас (которые не зависят от выбора игрока: стартовые деньги, уровень и т.п.), нужные значения и при регистрации в БД передаёшь только те значения, которые тебе неизвестны (ник, пароль, скин и т.п.), а известные значения не трогаешь и БД сама их создаст. И теперь, когда создаёшь аккаунт, сделай присвоение этих данных к нужным переменным, дабы не только БД знала эти значения, но и сервер.
Так получится, что ты не передаёшь ненужные данные в запросе и, при этом, все значения у тебя сохраняются, сохраняясь, при этом асинхронно (на сервере отдельно и в БД отдельно).
Как-то так

ммм, большое спасибо)). Я только сейчас допетрил, что, если установить значения по дефолту, то после регистрации можно просто загрузить аккаунт (как у меня сейчас и есть), и не нужно устанавливать при регистрации всякие данные и ещё сохранять в БД. :)

kushichka
07.03.2016, 21:22
Во время этого:



А вообще в БД имеется такая замечательная функция, как установка значения по умолчанию. Эта опция так и называется - "По умолчанию" и значение её можно указать при редактировании нужного столбца. Там есть три параметра: "Как определено:", "NULL" и "CURRENT_TIMESTAMP".
"Как определено:" - собственно, из названия понятно, что значение столбца будет такое, каким его указать в данном параметре.
"NULL" - Пустое поле
"CURRENT_TIMESTAMP" - вернёт время, указанное на сервере, на котором установлен MySQL (подойдёт для записи даты регистрации).

В твоём случае нужен первый параметр "Как определено:". Указываешь для каждого из полей, значение которых тебе известно уже сейчас (которые не зависят от выбора игрока: стартовые деньги, уровень и т.п.), нужные значения и при регистрации в БД передаёшь только те значения, которые тебе неизвестны (ник, пароль, скин и т.п.), а известные значения не трогаешь и БД сама их создаст. И теперь, когда создаёшь аккаунт, сделай присвоение этих данных к нужным переменным, дабы не только БД знала эти значения, но и сервер.
Так получится, что ты не передаёшь ненужные данные в запросе и, при этом, все значения у тебя сохраняются, сохраняясь, при этом асинхронно (на сервере отдельно и в БД отдельно).
Как-то так

Еще такой вопрос: если я выставляю в графе "по умолчанию" определенное значение, при создании таблицы, можно ли его как-то изменить через мод, запрос? Допустим, я захочу изменить начальный уровень, или стартовые деньги, мне нужно будет в самой таблице менять значение по умолчанию и все?
http://s017.radikal.ru/i436/1603/a5/2a3b375d110c.png

DeimoS
07.03.2016, 21:43
Можно и запросом.
Для числа:

ALTER TABLE `имя_таблицы` ALTER `имя_столбца` SET DEFAULT новое_значение
Или же, в случае со строкой, так:

ALTER TABLE `имя_таблицы` ALTER `имя_столбца` SET DEFAULT 'новое_значение'