MySQL - получение данных (путает)
#1

Здравствуйте, столкнулся с такой проблемой что у игроков в инвентарях стали появляться вещи которые не принадлежат им.

Запрос:
pawn Код:
format(STR,128,"SELECT * FROM `"TABLE_INV"` WHERE `ID`='%d' LIMIT 1",GetGVarInt("p_id",p));
mysql_function_query(1,STR,true,"LoadPlayerItems2","i",p);
Загрузка:

pawn Код:
new gad[5];
for(new i;i!=MAX_PLAYER_ITEMS;i++)
{
format(SQL,10,"Item%d",i);
cache_get_field_content(0,SQL,gad),PlayerInfo[p][pItem][i]=strval(gad);
format(SQL,10,"PItem%d",i);
cache_get_field_content(0,SQL,gad),PlayerInfo[p][pPItem][i]=strval(gad);
}
В чем может быть проблема? (такое не у всех, из 100 человек такое может быть только у 5). Заранее благодарю за помощь.
Reply
#2

Может дело в том, что данные инвентаря не обнуляются при регистрации. И остаются от предыдущего залогиневшегося?
Reply
#3

Я проверяю, если не найден то обнуляю и далее уже создаю запись в базе данных. Обнуление:
pawn Код:
for(new i=0;i!=MAX_PLAYER_ITEMS;i++)PlayerInfo[p][pItem][i]=-1,PlayerInfo[p][pPItem][i]=0;
Reply
#4

Quote:
Originally Posted by Ted67
Посмотреть сообщение
Я проверяю, если не найден то обнуляю и далее уже создаю запись в базе данных. Обнуление:
pawn Код:
for(new i=0;i!=MAX_PLAYER_ITEMS;i++)PlayerInfo[p][pItem][i]=-1,PlayerInfo[p][pPItem][i]=0;
а зачем ты присваеваешь 2 раза? сначала -1, потом 0?
Reply
#5

Quote:
Originally Posted by CamperGTA
Посмотреть сообщение
а зачем ты присваеваешь 2 раза? сначала -1, потом 0?
Это 2 разные переменные. (pItem и pPItem)
Reply
#6

Quote:
Originally Posted by Ted67
Посмотреть сообщение
Это 2 разные переменные. (pItem и pPItem)
Тоже сначала не уловил разницы.
Reply
#7

Так в чем может быть дело? Изначально идет проверка на наличие в таблице записи, если запись есть, просто гружу:

pawn Код:
new gad[5];
for(new i;i!=MAX_PLAYER_ITEMS;i++)
{
format(SQL,10,"Item%d",i);
cache_get_field_content(0,SQL,gad),PlayerInfo[p][pItem][i]=strval(gad);
format(SQL,10,"PItem%d",i);
cache_get_field_content(0,SQL,gad),PlayerInfo[p][pPItem][i]=strval(gad);
}
иначе обнуляю переменные и после создаю запись:

pawn Код:
for(new i=0;i!=MAX_PLAYER_ITEMS;i++)PlayerInfo[p][pItem][i]=-1,PlayerInfo[p][pPItem][i]=0;
// тут создание
Все вроде как отлично работает, только иногда, очень редко, как будто путает, вновь зарегистрировавшийся игрок жалуется что в инвентаре у него левые вещи.
Reply
#8

Ну если он их видит, то, наверное, они остаются от других игроков, когда те выходят. Может и ошибаюсь.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)