 |
|
 |
|
|
|
Последние Файлы GTA 4 |
Последние Файлы GTA-MP |
Реклама |
|
|
|
|
|
MySQL r7. Опять непонятки.
| |
| Крендель | Дата: Воскресенье, 10.02.2013, 12:28 | Сообщение # 1 |
|
Уверенный в себе
Группа:
Продвинутые
Сообщений: 216
Награды: 0
Город: :дороГ
Репутация: -8
Замечания: 20%
Статус: 
| Имеется код Код GetAccountID(playerid) { new query[128]; format(query, sizeof(query),"SELECT `ID` FROM `Accounts` WHERE `Name` = '%s' LIMIT 0,1", PlayerInfo[playerid][pName]); mysql_function_query(ConnectToDB, query, true, "RegCheck", "d", playerid); return PlayerInfo[playerid][pID]; }
forward RegCheck(playerid); public RegCheck(playerid) { new rows, fields; cache_get_data(rows, fields); if(rows == 1) { new var[11]; cache_get_field_content(0, "ID", PlayerInfo[playerid][pID]); return PlayerInfo[playerid][pID]; } else return 0; }
Проблема в том, что при выполнении "mysql_function_query" сервер не переходит сразу к паблику и только после этого к "return PlayerInfo[playerid][pID];" в "GetAccountID", а выполняет весь код в "GetAccountID" и только после этого лезет в паблик "RegCheck". В чем тут дело и почему код выполняется не последовательно, а через *опу? Спасибо.Добавлено (10.02.2013, 12:28) --------------------------------------------- хм..попробовал сделать вот так: Код new query[128]; format(query, sizeof(query),"SELECT `ID` FROM `Accounts` WHERE `Name` = '%s' LIMIT 0,1", PlayerInfo[playerid][pName]); mysql_function_query(ConnectToDB, query,true,"",""); new rows, fields; cache_get_data(rows, fields); if(rows == 1) { new var[11]; cache_get_field_content(0, "ID", PlayerInfo[playerid][pID]); return PlayerInfo[playerid][pID]; } но результат запроса количества столбцов и строк равен нулям. Почему так? Вроде же все правильно.
生き死に
|
| |
|
|
| Borog | Дата: Воскресенье, 10.02.2013, 13:04 | Сообщение # 2 |
|
Долгожитель
Группа:
I'm V.I.P.
Сообщений: 1362
Награды: 43
Город: Москва
Репутация: 1249
Замечания: 20%
Статус: 
| Крендель, Скинь инфо по функции mysql_function_query() За что отвечает и какие параметры.
А вообще почему бы в ручную не переходить к необходимому паблику? Например, делаешь запрос, переходишь к паблику и возвращаешь значение
Silver Break http://s-break.ru/ http://vk.com/sbreak
|
| |
|
|
| ZiGGi | Дата: Воскресенье, 10.02.2013, 13:15 | Сообщение # 3 |
|
Мастер джэдай
Группа:
Продвинутые
Сообщений: 2652
Награды: 34
Город: St. Petersburg
Репутация: 2102
Замечания: 20%
Статус: 
| Крендель, плагин R7 многопоточный. Функция вызывает RegCheck тогда, когда запрос выполнен.
Бложе [indent]Мой блог Уроки по Pawn[/indent]
Open-GTO [indent]Блог разработчиков GitHub: https://github.com/Open-GTO/Open-GTO Сборки мода с сервером тут[/indent]
|
| |
|
|
| Крендель | Дата: Воскресенье, 10.02.2013, 14:14 | Сообщение # 4 |
|
Уверенный в себе
Группа:
Продвинутые
Сообщений: 216
Награды: 0
Город: :дороГ
Репутация: -8
Замечания: 20%
Статус: 
| Цитата (ZiGGi) плагин R7 многопоточный. Функция вызывает RegCheck тогда, когда запрос выполнен. ок. понял. А что можете сказать по поводу получения кол-ва строк без использования паблика?
生き死に
|
| |
|
|
| ZiGGi | Дата: Воскресенье, 10.02.2013, 16:51 | Сообщение # 5 |
|
Мастер джэдай
Группа:
Продвинутые
Сообщений: 2652
Награды: 34
Город: St. Petersburg
Репутация: 2102
Замечания: 20%
Статус: 
| Крендель, выполни функцию RegCheck в функции логина [pwn] stock GetAccountID(playerid) { return PlayerInfo[playerid][pID]; } [/pwn]
Бложе [indent]Мой блог Уроки по Pawn[/indent]
Open-GTO [indent]Блог разработчиков GitHub: https://github.com/Open-GTO/Open-GTO Сборки мода с сервером тут[/indent]
|
| |
|
|
| Крендель | Дата: Суббота, 16.02.2013, 11:59 | Сообщение # 6 |
|
Уверенный в себе
Группа:
Продвинутые
Сообщений: 216
Награды: 0
Город: :дороГ
Репутация: -8
Замечания: 20%
Статус: 
| Что-то не получается. Сейчас опишу полностью что и как выполняется.
Код public OnPlayerConnect(playerid) { GetPlayerName(playerid, PlayerInfo[playerid][pName], MAX_PLAYER_NAME); // Получаем ник GetAccountID(playerid); // Получаем ид аккаунта. if(PlayerInfo[playerid][pID]) // Проверяем существует ли игрок с таким ником. { new dialog[128+MAX_PLAYER_NAME]; format(dialog, sizeof(dialog), "Добро пожаловать на сервер Oasis Role Play!\n\ Этот аккаунт зарегистрирован.\n\n\ Логин: %s\n\ Введите пароль:", PlayerInfo[playerid][pName]); ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Авторизация.", dialog, "Войти", "Отмена"); } }
Код GetAccountID(playerid) { new query[128]; format(query, sizeof(query),"SELECT `ID` FROM `Accounts` WHERE `Name` = '%s' LIMIT 0,1", PlayerInfo[playerid][pName]); mysql_function_query(ConnectToDB, query,true,"OnPlayerDataLoad","d", playerid); }
forward OnPlayerDataLoad(playerid); public OnPlayerDataLoad(playerid) { new rows, fields; cache_get_data(rows, fields); if(rows) cache_get_field_content(0, "ID", PlayerInfo[playerid][pID]); // Получаем значение из нулевой строки столбца ID в переменную pID. }
Порядок выполнения по нормальному: 1 - GetAccountID 2 - В GetAccountID отправляем запрос к бд на получение количества записей с указанным ником. 3 - В OnPlayerDataLoad получаем количество строк и столбцов. Если количество строк > 0, то получаем значение из нулевой строки столбца ID в переменную pID. 4 - Далее срабатывает условие if(PlayerInfo[playerid][pID]) в паблике OnPlayerConnect.
Порядок выполнения непонять как: 1 - GetAccountID 2 - В GetAccountID отправляем запрос к бд на получение количества записей с указанным ником. 3 - Далее выходим из GetAccountID и двигаемся дальше по паблику OnPlayerConnect в направлении к условию if(PlayerInfo[playerid][pID]), которое не срабатывает из-за того, что еще не сработал OnPlayerDataLoad.
OnPlayerDataLoad, как я понял, срабатывает после выхода из OnPlayerConnect?
Как сделать так, чтобы он сработал до проверки условия if(PlayerInfo[playerid][pID])?Добавлено (16.02.2013, 11:59) --------------------------------------------- Как вообще без многопоточности избавится, а то из-за нее все хреново работает...
生き死に
|
| |
|
|
| ZiGGi | Дата: Суббота, 16.02.2013, 13:39 | Сообщение # 7 |
|
Мастер джэдай
Группа:
Продвинутые
Сообщений: 2652
Награды: 34
Город: St. Petersburg
Репутация: 2102
Замечания: 20%
Статус: 
| Цитата (Крендель) Как вообще без многопоточности избавится, а то из-за нее все хреново работает... Это не из-за неё всё хреново работает, а из-за тебя, так как ты не можешь разобраться с простейшими функциями... Без многопоточности существуют большие проблемы с производительностью.
Код public OnPlayerConnect(playerid) { GetPlayerName(playerid, PlayerInfo[playerid][pName], MAX_PLAYER_NAME); format(query, sizeof(query),"SELECT `ID` FROM `Accounts` WHERE `Name` = '%s' LIMIT 0,1", PlayerInfo[playerid][pName]); mysql_query_callback(playerid, query, "show_enter_dialog", -1, g_ConnectionHandle); return 1; }
forward show_enter_dialog(query[], playerid, extraid, connectionHandle); public show_enter_dialog(query[], playerid, extraid, connectionHandle) { mysql_store_result(); if (mysql_num_rows() == 1) { // диалог входа } else { // диалог регистрации } return 1; }
Советую изучить мою систему регистрации: http://pastebin.com/WbsTiGvH
Бложе [indent]Мой блог Уроки по Pawn[/indent]
Open-GTO [indent]Блог разработчиков GitHub: https://github.com/Open-GTO/Open-GTO Сборки мода с сервером тут[/indent]
Сообщение отредактировал ZiGGi - Суббота, 16.02.2013, 13:42 |
| |
|
|
| Крендель | Дата: Суббота, 16.02.2013, 14:37 | Сообщение # 8 |
|
Уверенный в себе
Группа:
Продвинутые
Сообщений: 216
Награды: 0
Город: :дороГ
Репутация: -8
Замечания: 20%
Статус: 
| Цитата (ZiGGi) Советую изучить мою систему она даже не для r7...что я в ней нового увижу еще повторю проблема не во мне, а в многопоточности.. из-за нее в pID значение записывается хрен знает когда...
生き死に
|
| |
|
|
| ZiGGi | Дата: Суббота, 16.02.2013, 14:51 | Сообщение # 9 |
|
Мастер джэдай
Группа:
Продвинутые
Сообщений: 2652
Награды: 34
Город: St. Petersburg
Репутация: 2102
Замечания: 20%
Статус: 
| Цитата (Крендель) она даже не для r7 Она для R7.
Цитата (Крендель) что я в ней нового увижу Как нужно правильно использовать плагин.
Цитата (Крендель) еще повторю проблема не во мне, а в многопоточности.. из-за нее в pID значение записывается хрен знает когда... Проблема в тебе, я уже тебе написал решение выше.
Бложе [indent]Мой блог Уроки по Pawn[/indent]
Open-GTO [indent]Блог разработчиков GitHub: https://github.com/Open-GTO/Open-GTO Сборки мода с сервером тут[/indent]
|
| |
|
|
| Крендель | Дата: Понедельник, 18.02.2013, 11:58 | Сообщение # 10 |
|
Уверенный в себе
Группа:
Продвинутые
Сообщений: 216
Награды: 0
Город: :дороГ
Репутация: -8
Замечания: 20%
Статус: 
| Цитата (ZiGGi) решение выше. использовал я это решение...все как было так и осталось.. "show_enter_dialog" срабатывает только после обработки "OnPlayerConnect"...
生き死に
|
| |
|
|
|
 |
|
 | |
| |
|