Система автологина
|
|
[CM]Fich |
Дата: Среда, 08.10.2014, 15:49 | Сообщение # 1
|
Бывалый
Сообщений: 401
Статус: Offline
|
Всем привет! Делал систему для своего мода. Система на MySQL.
Система работает по IP адресу
Внимание! Замените pRegIp и так далее на свое!
Начнем:
Удаляем/копируем свою старую регу и блокнот и вставим это в OnPlayerConnect: Код new Query[200]; format(Query, sizeof(Query), "SELECT `pNick` FROM `players` WHERE `pNick` = '%s' LIMIT 1", sendername(playerid)); mysql_query(Query); mysql_store_result(); if(mysql_num_rows() != 0) { mysql_free_result(); GetPlayerIp(playerid, PlayerInfo[playerid][pRegip], 18); format(Query, sizeof(Query), "SELECT * FROM `players` WHERE `pNick` = '%s' AND `pRegip` = '%s'", sendername(playerid), PlayerInfo[playerid][pRegip]); mysql_query(Query); mysql_store_result(); if(mysql_num_rows() != 0) { //Если ип совпал, загружаем его акк return true; } if(!mysql_num_rows()) { ///Если ип не совпал ему покажет окно входа } } else { ///Если аккаунта вообще нет в базе показываем ему окно регистрации } mysql_free_result();
|
|
|
|
Fake{yl] |
Дата: Среда, 08.10.2014, 18:10 | Сообщение # 2
|
Боец
Сообщений: 107
Статус: Offline
|
Проблема данной системы в том, что если у игроков один IP на город, то любой игрок из этого города знающий логин другого игрока, может беспрепятственно зайти и слить деньги и т.д. И именно по этому данной системы нету на успешных серверах) В таких случаях лучше добавить игроку выбор, делать автологин или нет. Максимум что нужно сделать, так это добавить переменную в базе данных, и, если в моде используется MySQL версии ниже R7 (R6, R5...), то еще одну переменную в моде (Возможно что и не нужно будет). Ах, вместо автологина можно дать возможность игроку добавить пин-код, который будет состоять всего из 4 цифр и об этом пин-коде будет знать только он. Это сократит время на логин игрока в случае если IP совпадает с reg IP или last IP =)
Что касается кода...
Код format(Query, sizeof(Query), "SELECT * FROM `players` WHERE `pNick` = '%s' AND `pRegip` = '%s'", sendername(playerid), PlayerInfo[playerid][pRegip]); Здесь sizeof(Query) будет несколько лишним. Есть проекты, которые используют более 4096 байт (Массив размером 1024) на такую переменную. И для такого запроса это будет слишком много.
В итоге получаем
Код format(Query, 101, "SELECT * FROM `players` WHERE `pNick` = '%s' AND `pRegip` = '%s'", sendername(playerid), PlayerInfo[playerid][pRegip]); Сравнить если с теми же проектами... 1024 и 101. Хмм, да это больше чем в 10 раз)
Ну, остальное вроди бы в порядке. Ай, кстати говоря, можно вообще уже из существующего запроса выдрать чертов pRegip и не париться с новым запросом. В итоге меньше нагрузки на MySQL сервер, да и возможно еще и на сервер с вашим игровым модом.
ушел, не вернусь <_<
|
|
|
|
[CM]Fich |
Дата: Среда, 08.10.2014, 18:59 | Сообщение # 3
|
Бывалый
Сообщений: 401
Статус: Offline
|
Fake{yl], Эта система подойдет для DM/Freeroam сервера только и спасибо за советы
|
|
|
|
[CM]Milo |
Дата: Воскресенье, 12.10.2014, 18:08 | Сообщение # 4
|
Боец
Сообщений: 104
Статус: Offline
|
Спасибо!
|
|
|
|
SeX-PrO-AdReNaLiN |
Дата: Воскресенье, 12.10.2014, 22:26 | Сообщение # 5
|
Авторитет
Сообщений: 1310
Статус: Offline
|
Все-таки с паролем безопаснее.
user N over 99999
|
|
|
|
SopranoV |
Дата: Среда, 15.10.2014, 14:38 | Сообщение # 6
|
Боец
Сообщений: 282
Статус: Offline
|
Система конечно очень хороша придумана,но есть один нюанс,под сети ип,темболее прокси могут быть одинаковы. За сообразительность в программирование очень понравилось.
Изучаю AHK программирование
|
|
|
|
[CM]Fich |
Дата: Среда, 15.10.2014, 15:05 | Сообщение # 7
|
Бывалый
Сообщений: 401
Статус: Offline
|
SopranoV, Редко такое бывает
|
|
|
|