 |
|
 |
|
|
|
Последние Файлы GTA 4 |
Последние Файлы GTA-MP |
Реклама |
|
|
|
|
|
Запись в переменные
| |
| Edward_Armstrong | Дата: Вторник, 19.06.2012, 13:48 | Сообщение # 1 |
|
Новенький
Группа:
Продвинутые
Сообщений: 31
Награды: 0
Город: Пятигорск
Репутация: 29
Замечания: 0%
Статус: 
| Вообщем написал код, который парсит данные из MySQL при помощи sscanf в переменные Вот он сам: Code stock LAccount(playerid) { format(qwery,sizeof(qwery), "SELECT * FROM `accounts` WHERE name = '%s' LIMIT 1",login); mysql_query(qwery); mysql_store_result(); mysql_fetch_row(qwery); sscanf(qwery, "p<|>s[128]s[32]iiiis[128]iii", PlayerInfo[playerid][pLogin], PlayerInfo[playerid][pPassword], PlayerInfo[playerid][pSex], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pLvl], PlayerInfo[playerid][pAdmin], PlayerInfo[playerid][pEmail], PlayerInfo[playerid][pTeam], PlayerInfo[playerid][pRank], PlayerInfo[playerid][pSkin] ); mysql_free_result();
Проблема в том, что логин, пароль, email он парсит, а остальное или пишет null, или какой-то бред. Один раз даже смайлики парсило вместо 5.
|
| |
|
|
| Desert | Дата: Вторник, 19.06.2012, 15:04 | Сообщение # 2 |
|
Местный
Группа:
I'm V.I.P.
Сообщений: 669
Награды: 57
Город: Москва
Репутация: 1082
Замечания: 0%
Статус: 
| Code stock LAccount(playerid) { format(qwery,sizeof(qwery), "SELECT * FROM `accounts` WHERE name = '%s' LIMIT 1",login); mysql_query(qwery); mysql_store_result(); if(mysql_fetch_row(query) == 1) { sscanf(qwery, "p<|>s[128]s[32]iiiis[128]iii", PlayerInfo[playerid][pLogin], PlayerInfo[playerid][pPassword], PlayerInfo[playerid][pSex], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pLvl], PlayerInfo[playerid][pAdmin], PlayerInfo[playerid][pEmail], PlayerInfo[playerid][pTeam], PlayerInfo[playerid][pRank], PlayerInfo[playerid][pSkin]); mysql_free_result(); }
Сообщение отредактировал Desert - Вторник, 19.06.2012, 15:05 |
| |
|
|
| Edward_Armstrong | Дата: Вторник, 19.06.2012, 20:40 | Сообщение # 3 |
|
Новенький
Группа:
Продвинутые
Сообщений: 31
Награды: 0
Город: Пятигорск
Репутация: 29
Замечания: 0%
Статус: 
| Теперь все значения null.
|
| |
|
|
| pesnike1 | Дата: Вторник, 19.06.2012, 22:25 | Сообщение # 4 |
|
Новенький
Группа:
Пользователи
Сообщений: 27
Награды: 0
Город: Ростов-На-Дону
Репутация: 5
Замечания: 20%
Статус: 
| Ну я вот такое написал для своего мода. Очень удобно. Code stock DbGet(base[], text[], rettext[], Name[]) { new string[128], result[128], str[55]; format(string, sizeof(string),"SELECT `%s` FROM `%s` WHERE `Name` = '%s'",text,base,Name); mysql_query(string); mysql_store_result(); mysql_fetch_row_format(result, "|"); sscanf(result, "p<|>s[55]",str); strmid(rettext,str,0,strlen(str),255); mysql_free_result(); } stock DbGetInt(base[], text[], &rettext, Name[]) { new string[128], result[128]; format(string, sizeof(string),"SELECT `%s` FROM `%s` WHERE `Name` = '%s'",text,base,Name); mysql_query(string); mysql_store_result(); mysql_fetch_row_format(result, "|"); sscanf(result, "p<|>d",rettext); mysql_free_result(); } Использовать например так: DbGetInt("accounts","Level",PlayerInfo[playerid][pLevel],sendername); DbGet для считывания строк.
|
| |
|
|
| s3ap | Дата: Среда, 20.06.2012, 02:00 | Сообщение # 5 |
|
Местный
Группа:
Продвинутые
Сообщений: 570
Награды: 7
Город: Саратов
Репутация: 382
Замечания: 80%
Статус: 
| На каждую переменную по одному запросу? И что же ты будешь делать, когда онлайн будет 10+ человек?
Сообщение отредактировал s3ap - Среда, 20.06.2012, 02:00 |
| |
|
|
| pesnike1 | Дата: Среда, 20.06.2012, 09:13 | Сообщение # 6 |
|
Новенький
Группа:
Пользователи
Сообщений: 27
Награды: 0
Город: Ростов-На-Дону
Репутация: 5
Замечания: 20%
Статус: 
| Запрашивать. Это ведь нужно делать 1 раз, когда игрок логинится.
|
| |
|
|
| Alcoholik | Дата: Среда, 20.06.2012, 09:49 | Сообщение # 7 |
|
Мастер джэдай
Группа:
Администратор
Сообщений: 8299
Награды: 111
Город: Санкт-Петербург
Репутация: 6085
Статус: 
| Ну вот запустишь ты сервак, зайдёт к тебе 50 человек и одновременно будут логиниться. Допустим раздер массива игрока 50, 50*50 = 2500 запросов, сервак может и не ляжет, но лаг поймает хороший.
if(isset($beer)&&isset($girl)) { drink($beer);fuck($girl); }else die(); Мониторинг sa:mp серверов Приватно никого не консультирую, моды также не пишу, ни так, ни за деньги. Моя ICQ 675715, пишу только с неё. Все остальные Роачи фейки, ничего я не продаю и продавать не буду, вас разводят.
|
| |
|
|
| pesnike1 | Дата: Среда, 20.06.2012, 10:34 | Сообщение # 8 |
|
Новенький
Группа:
Пользователи
Сообщений: 27
Награды: 0
Город: Ростов-На-Дону
Репутация: 5
Замечания: 20%
Статус: 
| Они же идут последовательно. Поэтому одновременно запустятся только 50 запросов. И к тому же, если будет такой онлайн, то и хостинг будет хороший, который это всё потянет. Добавлено (20.06.2012, 10:34) --------------------------------------------- Или можно сделать не большую проверку, чтобы данная проблема, несмотря на то, что она теоретическая, никогда не появилась. Создать глобальную переменную. В OnPlayerLogin перед первым запросом Code do { } while ( log >= 10 ); log++; После того как все данные считаны: То есть, при запуске паблик будет проверять, сколько игроков считывают данные с MySQL, если их более 10 он будет ждать пока их количество уменьшится (это меньше секунды). При таком раскладе лаг сервер не поймает.
|
| |
|
|
| ZiGGi | Дата: Среда, 20.06.2012, 11:48 | Сообщение # 9 |
|
Мастер джэдай
Группа:
Продвинутые
Сообщений: 2652
Награды: 34
Город: St. Petersburg
Репутация: 2102
Замечания: 20%
Статус: 
| Quote (pesnike1) В OnPlayerLogin перед первым запросом Code do { } while ( log >= 10 ); log++; Это повесит сервер>_<
Бложе [indent]Мой блог Уроки по Pawn[/indent]
Open-GTO [indent]Блог разработчиков GitHub: https://github.com/Open-GTO/Open-GTO Сборки мода с сервером тут[/indent]
|
| |
|
|
| Edward_Armstrong | Дата: Среда, 20.06.2012, 12:11 | Сообщение # 10 |
|
Новенький
Группа:
Продвинутые
Сообщений: 31
Награды: 0
Город: Пятигорск
Репутация: 29
Замечания: 0%
Статус: 
| pesnike1, Может это и удобно, но мне это тоже кажется не правильным. Но за помощь спасибо. Я в моде другом нашел такую-же функцию, но у него без ошибок почему-то, хотя код идентичный абсолютно. Проблема осталась, и хочется ее поскорее исправить.
|
| |
|
|
| pesnike1 | Дата: Среда, 20.06.2012, 12:59 | Сообщение # 11 |
|
Новенький
Группа:
Пользователи
Сообщений: 27
Награды: 0
Город: Ростов-На-Дону
Репутация: 5
Замечания: 20%
Статус: 
| Quote (ZiGGi) Это повесит сервер>_< Это лишь зациклит. А когда кто-либо залогинится сразу же даст возможность залогинится. Там ведь всего доли секунды.
|
| |
|
|
| ZiGGi | Дата: Среда, 20.06.2012, 13:14 | Сообщение # 12 |
|
Мастер джэдай
Группа:
Продвинутые
Сообщений: 2652
Награды: 34
Город: St. Petersburg
Репутация: 2102
Замечания: 20%
Статус: 
| Quote (pesnike1) Это лишь зациклит. А когда кто-либо залогинится сразу же даст возможность залогинится. Там ведь всего доли секунды. Ну повесит, т.е. сервер будет недоступен. Сервер работает в 1 потоке, поэтому он не развиснет.
Бложе [indent]Мой блог Уроки по Pawn[/indent]
Open-GTO [indent]Блог разработчиков GitHub: https://github.com/Open-GTO/Open-GTO Сборки мода с сервером тут[/indent]
|
| |
|
|
| pesnike1 | Дата: Среда, 20.06.2012, 13:30 | Сообщение # 13 |
|
Новенький
Группа:
Пользователи
Сообщений: 27
Награды: 0
Город: Ростов-На-Дону
Репутация: 5
Замечания: 20%
Статус: 
| Ну как же в одном потоке. Он выполняет задачи для каждого клиента отдельно. Если бы он выполнял их в одном потоке, то есть по очереди, то тогда не было бы и той проблемы. А так, пока сервер будет выдавать данные одному человеку из БД, другой будет в цикле ожидать. Как только выдал, переменная уменьшилась - заходит другой игрок.
|
| |
|
|
| Edward_Armstrong | Дата: Среда, 20.06.2012, 13:30 | Сообщение # 14 |
|
Новенький
Группа:
Продвинутые
Сообщений: 31
Награды: 0
Город: Пятигорск
Репутация: 29
Замечания: 0%
Статус: 
| Ребят, хватит флуда. ZiGGi, помогите пожалуйста.
|
| |
|
|
| Desert | Дата: Среда, 20.06.2012, 15:41 | Сообщение # 15 |
|
Местный
Группа:
I'm V.I.P.
Сообщений: 669
Награды: 57
Город: Москва
Репутация: 1082
Замечания: 0%
Статус: 
| pesnike1, Не спорь с Зигой
|
| |
|
|
|
 |
|
 | |
| |
|