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

 



 
        
[SA-MP] Hosted Tab (128)
JasonGordon 21.10.2017 10:43
[MAP+FS] Тюрьма (15)
SubjectKalcor 09.10.2017 07:59
 





Рекомендуем:
Добавить IP: 95.172.59.51:7777





Последние Файлы 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
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
Скачать GTA SAMP 0.3.7 - Кл... 20.07.2015
Страница 1 из 11
Модератор форума: AXE, Weddew 
Форум SAMP о мультиплеерах для GTA. » SAMP скачивание и обсуждение » Вопросы и Проблемы » MySQL r7. Опять непонятки.
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
Мастер джэдай
Группа: Продвинутые
Сообщений: 2651
Награды: 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
Мастер джэдай
Группа: Продвинутые
Сообщений: 2651
Награды: 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
Мастер джэдай
Группа: Продвинутые
Сообщений: 2651
Награды: 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
Мастер джэдай
Группа: Продвинутые
Сообщений: 2651
Награды: 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"...



生き死に
Форум SAMP о мультиплеерах для GTA. » SAMP скачивание и обсуждение » Вопросы и Проблемы » MySQL r7. Опять непонятки.
Страница 1 из 11
Поиск:





 


 


 
Хостинг от uCoz SAMP-RUS.COM