PDA

Просмотр полной версии : [Вопрос] Загрузка домов.



BadPawn
11.02.2016, 14:15
Всем привет.

Пишу систему домов, и меня мучает данная ошибка с mysql.log:

[21:08:13] [WARNING] cache_get_data - no active cache

Собственно сам код:

fpublic LoadHouse()
{
LoadAllHouse = 0;
new
rows,
fields,
time = GetTickCount();
cache_get_data(rows, fields, mysql_connBD);
if(rows)
{
for(new h = 1; h < rows; h++)
{
hInfo[h][hID] = cache_get_field_content_int(h, "ID", mysql_connBD);
hInfo[h][hOwner] = cache_get_field_content_int(h, "OWNER", mysql_connBD);
hInfo[h][hSell] = cache_get_field_content_int(h, "SELL", mysql_connBD);
hInfo[h][hEnterX] = cache_get_field_content_float(h, "ENTERX", mysql_connBD);
hInfo[h][hEnterY] = cache_get_field_content_float(h, "ENTERY", mysql_connBD);
hInfo[h][hEnterZ] = cache_get_field_content_float(h, "ENTERZ", mysql_connBD);
hInfo[h][hExitX] = cache_get_field_content_float(h, "EXITX", mysql_connBD);
hInfo[h][hExitY] = cache_get_field_content_float(h, "EXITY", mysql_connBD);
hInfo[h][hExitZ] = cache_get_field_content_float(h, "EXITZ", mysql_connBD);
hInfo[h][hInterier] = cache_get_field_content_int(h, "INTERIER", mysql_connBD);
hInfo[h][hPrice] = cache_get_field_content_int(h, "PRICE", mysql_connBD);
hInfo[h][hClass] = cache_get_field_content_int(h, "CLASS", mysql_connBD);
hInfo[h][hLock] = cache_get_field_content_int(h, "LOCK", mysql_connBD);

LoadAllHouse++;

if(hInfo[h][hSell] == 0)
{
static const h_null[] = "Номер дома: %d\nКласс дома: %s\nСтоимость: %d";
new h_buff[sizeof(h_null) + ((3-2) + (10-2) + (20-2))];
format(h_buff, sizeof(h_buff), h_null, hInfo[h][hID], house_class[hInfo[h][hClass]], hInfo[h][hPrice]);

hInfo[h][hPickup] = CreatePickup(19471, 1, hInfo[h][hEnterX], hInfo[h][hEnterY], hInfo[h][hEnterZ], -1);
hInfo[h][hText] = Create3DTextLabel(h_buff, 0xFFFFFF, hInfo[h][hEnterX], hInfo[h][hEnterY], hInfo[h][hEnterZ], 10.0, 0);
}
else
{
static const h_null[] = "Номер дома: %d\nВладелец: %s\n";
new h_buff[sizeof(h_null) + ((3-2) + (MAX_PLAYER_NAME-2))];
format(h_buff, sizeof(h_buff), h_null, hInfo[h][hID], hInfo[h][hOwner]);

hInfo[h][hPickup] = CreatePickup(1272, 1, hInfo[h][hEnterX], hInfo[h][hEnterY], hInfo[h][hEnterZ], -1);
hInfo[h][hText] = Create3DTextLabel(h_buff, 0xFFFFFF, hInfo[h][hEnterX], hInfo[h][hEnterY], hInfo[h][hEnterZ], 10.0, 0);
}
}
printf("[LOADING HOUSES]: <%d>. [TIME LOADING]: <%d>", LoadAllHouse, GetTickCount()-time);
}
return true;
}

wea
11.02.2016, 14:19
в этой строке
cache_get_data(rows, fields, mysql_connBD);
лишний mysql_connBD
наверно :D
cache_get_data(rows, fields);

DeimoS
11.02.2016, 14:29
в этой строке
cache_get_data(rows, fields, mysql_connBD);
лишний mysql_connBD
наверно :D
cache_get_data(rows, fields);

RTFM!!! (http://wiki.sa-mp.com/wiki/MySQL/R33#cache_get_data)


Ошибка говорит, что ты либо не отправляешь запрос, но пытаешься работать с данными (которых нет), либо в запросе есть ошибка. Покажи код запроса

BadPawn
11.02.2016, 15:05
Их действительно нет. о-о
БД пустая, поля созданы.

запроса нет.

есть паблик загрузки, и сток сохранения домов.

DeimoS
11.02.2016, 15:19
Так напиши этот запрос, с помощью которого БД поймёт, что её нужно отослать данные серверу.
Ну или, если не знаешь как, покажи структуру БД

BadPawn
11.02.2016, 15:25
честно сказать, еще нет достаточных знаний, поэтому не понимаю с чего начать.

если сравнить с игроками, удалю например все аккаунты, ошибки ведь нет.
чет срастить не могу.

DeimoS
11.02.2016, 15:36
Эмм, как-то так

mysql_function_query(mysql_connBD, "SELECT * FROM `имя_бд`", true, "LoadHouse","");

BadPawn
11.02.2016, 15:42
допер. сделал запрос))

в OnGameModeInit()

mysql_function_query(mysql_connBD, "SELECT * FROM `house`", true, "LoadHouse","");

- - - Добавлено - - -

спасибо DemioS)))

- - - Добавлено - - -

Кхм.. После запроса, нужно же ниже вызывать паблик с загрузкой домов или же он по запросу дойдет? загрузка не происходит. домов 0, но до этого момента писало, мол загружено домов: 0

Это скорее всего из-за проверки. if(rows)

DeimoS
11.02.2016, 15:45
И ещё, я бы сделал так:

fpublic LoadHouse()
{
new h,
time = GetTickCount();
cache_get_data(LoadAllHouse, h, mysql_connBD);
if(!rows) return print("LOADING HOUSES] Ошибка: База данных с домами пуста");

static const h_null[] = "Номер дома: %d\nКласс дома: %s\nСтоимость: %d";
static const h_not_null[] = "Номер дома: %d\nВладелец: %s\n";
new h_buff[sizeof(h_null) + ((3-2) + (10-2) + (20-2))];
for(h = 1; h < LoadAllHouse; h++)
{
hInfo[h][hID] = cache_get_field_content_int(h, "ID", mysql_connBD);
hInfo[h][hOwner] = cache_get_field_content_int(h, "OWNER", mysql_connBD);
hInfo[h][hSell] = cache_get_field_content_int(h, "SELL", mysql_connBD);
hInfo[h][hEnterX] = cache_get_field_content_float(h, "ENTERX", mysql_connBD);
hInfo[h][hEnterY] = cache_get_field_content_float(h, "ENTERY", mysql_connBD);
hInfo[h][hEnterZ] = cache_get_field_content_float(h, "ENTERZ", mysql_connBD);
hInfo[h][hExitX] = cache_get_field_content_float(h, "EXITX", mysql_connBD);
hInfo[h][hExitY] = cache_get_field_content_float(h, "EXITY", mysql_connBD);
hInfo[h][hExitZ] = cache_get_field_content_float(h, "EXITZ", mysql_connBD);
hInfo[h][hInterier] = cache_get_field_content_int(h, "INTERIER", mysql_connBD);
hInfo[h][hPrice] = cache_get_field_content_int(h, "PRICE", mysql_connBD);
hInfo[h][hClass] = cache_get_field_content_int(h, "CLASS", mysql_connBD);
hInfo[h][hLock] = cache_get_field_content_int(h, "LOCK", mysql_connBD);

if(hInfo[h][hSell] == 0)
{
format(h_buff, sizeof(h_buff), h_null, hInfo[h][hID], house_class[hInfo[h][hClass]], hInfo[h][hPrice]);

hInfo[h][hPickup] = CreatePickup(19471, 1, hInfo[h][hEnterX], hInfo[h][hEnterY], hInfo[h][hEnterZ], -1);
hInfo[h][hText] = Create3DTextLabel(h_buff, 0xFFFFFF, hInfo[h][hEnterX], hInfo[h][hEnterY], hInfo[h][hEnterZ], 10.0, 0);
}
else
{
format(h_buff, sizeof(h_buff), h_not_null, hInfo[h][hID], hInfo[h][hOwner]);

hInfo[h][hPickup] = CreatePickup(1272, 1, hInfo[h][hEnterX], hInfo[h][hEnterY], hInfo[h][hEnterZ], -1);
hInfo[h][hText] = Create3DTextLabel(h_buff, 0xFFFFFF, hInfo[h][hEnterX], hInfo[h][hEnterY], hInfo[h][hEnterZ], 10.0, 0);
}
}
printf("[LOADING HOUSES]: <%d>. [TIME LOADING]: <%d>", LoadAllHouse, GetTickCount()-time);
return true;
}
Так ты чуть меньше будешь насиловать стэк при вызове этого паблика

- - - Добавлено - - -



Кхм.. После запроса, нужно же ниже вызывать паблик с загрузкой домов или же он по запросу дойдет? загрузка не происходит. домов 0, но до этого момента писало, мол загружено домов: 0

Паблик вызывается сам.

mysql_function_query(mysql_connBD, "SELECT * FROM `имя_бд`", true, "LoadHouse","");
В том участке, что я выделил красным, ты указываешь на то, какой паблик будет вызван, а с помощью "true" ты указываешь то, нужно ли кэшировать запрос (нужно ли, чтоб БД отправляло какие-то данные обратно на сервер или нет). Если кэширование не нужно, то и паблик указывать так же не нужно

BadPawn
11.02.2016, 15:55
DeimoS, у тебя просто блестящие знания. Спасибо огромное. Сейчас буду сравнивать и анализировать, что не так сделал.
Спасибо.