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

 



 
        
[SA-MP] Hosted Tab (120)
DieSeL 24.09.2017 20:30
GTA IV Mod Installer (5)
jasper2 23.09.2017 02:50
 





Рекомендуем:
Добавить 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 из 212»
Модератор форума: AXE, Weddew 
Форум SAMP о мультиплеерах для GTA. » SAMP скачивание и обсуждение » Вопросы и Проблемы » Запись в переменные
Запись в переменные
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
Группа: Администратор
Сообщений: 8287
Награды: 111
Город: Санкт-Петербург
Репутация: 5945
Статус:
Ну вот запустишь ты сервак, зайдёт к тебе 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)
---------------------------------------------
Или можно сделать не большую проверку, чтобы данная проблема, несмотря на то, что она теоретическая, никогда не появилась.
Создать глобальную переменную.

Code
new log;

В OnPlayerLogin перед первым запросом
Code
do {
} while ( log >= 10 );
log++;

После того как все данные считаны:
Code
log--;

То есть, при запуске паблик будет проверять, сколько игроков считывают данные с MySQL, если их более 10 он будет ждать пока их количество уменьшится (это меньше секунды). При таком раскладе лаг сервер не поймает.

ZiGGiДата: Среда, 20.06.2012, 11:48 | Сообщение # 9
Мастер джэдай
Группа: Продвинутые
Сообщений: 2651
Награды: 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
Мастер джэдай
Группа: Продвинутые
Сообщений: 2651
Награды: 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,
Не спорь с Зигой

Форум SAMP о мультиплеерах для GTA. » SAMP скачивание и обсуждение » Вопросы и Проблемы » Запись в переменные
Страница 1 из 212»
Поиск:





 


 


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