17:49
ОбновитьСмайлыУправление мини-чатом
МИНИ-ЧАТ
Главная страница!

 



 
          





Рекомендуем:





Последние Файлы GTA 4 Последние Файлы GTA-MP Реклама
Скрипт GTA 4 элементы Watch... 07.09.2014
Ferrari 360 Spider [EPM con... 13.12.2013
Porsche Cayenne Turbo 2012 ... 13.12.2013
Shelby Terlingua Mustang v1... 13.12.2013
Hamann Lamborghini Gallardo... 27.10.2013
[GM] The Big PEN1:LS v2.00 ... 04.12.2017
Dgun (AvnanceRP,SampRP,Dimo... 19.03.2016
SAMP скрипт SX Events (MySQ... 03.03.2016
Карта ASL мэрия для SAMP се... 03.03.2016
AIM для SA-MP 0.3.7 22.02.2016
  • Страница 1 из 1
  • 1
Модератор форума: AXE, Weddew  
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"...



生き死に
  • Страница 1 из 1
  • 1
Поиск:





 


 


 
Хостинг от uCoz samp.at.ua