PDA

Просмотр полной версии : [Вопрос] mysql_function_query



somebodies
21.02.2017, 00:07
Всем привет!
Делаю динамическую систему домов,и решил начать с загрузки.
Поменял все под свой код,но возникла такая проблема.
При попытке загрузки имеющихся данных из БД ничего не происходит.
В OnGameModeInit(); стоит функция: mysql_function_query(handle, "SELECT * FROM houses", true, "OnHousesLoad","");
Но загрузка паблика "OnHousesLoad" не происходит. Даже для теста вставил в него пару кусков print'ов ,их также не выводит. Мне кажется,что я как-то не так вызываю загрузку домов. Паблик без аргументов каких- либо,если что.
прошу помочь. mySQL v39-2

Web
21.02.2017, 00:25
OnHousesLoad в студию.

somebodies
21.02.2017, 00:38
public OnHousesLoad() // Коллбэк загрузки
{
print("[debug] #1");
new time = GetTickCount();
new string[128],klass[2];
new temp[32],rows,fields;
cache_get_data(rows,fields,connectionHandle);
print("[debug] #1");
if(rows)
{
for(new idx = 1; idx <= rows; idx++)
{
cache_get_field_content(idx-1,"hID",temp,connectionHandle), HouseInfo[idx][hID] = strval(temp);
cache_get_field_content(idx-1,"hOwned",temp,connectionHandle), HouseInfo[idx][hOwned] = strval(temp);
cache_get_field_content(idx-1,"hOwner",HouseInfo[idx][hOwner]
,connectionHandle,24);
cache_get_field_content(idx-1,"hEnterX",temp,connectionHandle), HouseInfo[idx][hEnterX] = floatstr(temp);
cache_get_field_content(idx-1,"hEnterY",temp,connectionHandle), HouseInfo[idx][hEnterY] = floatstr(temp);
cache_get_field_content(idx-1,"hEnterZ",temp,connectionHandle), HouseInfo[idx][hEnterZ] = floatstr(temp);
cache_get_field_content(idx-1,"hExitX",temp,connectionHandle), HouseInfo[idx][hExitX] = floatstr(temp);
cache_get_field_content(idx-1,"hExitY",temp,connectionHandle), HouseInfo[idx][hExitY] = floatstr(temp);
cache_get_field_content(idx-1,"hExitZ",temp,connectionHandle), HouseInfo[idx][hExitZ] = floatstr(temp);
cache_get_field_content(idx-1,"hLevel",temp,connectionHandle), HouseInfo[idx][hLevel] = strval(temp);
cache_get_field_content(idx-1,"hPrice",temp,connectionHandle), HouseInfo[idx][hPrice] = strval(temp);
cache_get_field_content(idx-1,"hLock",temp,connectionHandle), HouseInfo[idx][hLock] = strval(temp);
cache_get_field_content(idx-1,"hTakings",temp,connectionHandle), HouseInfo[idx][hTakings] = strval(temp);
cache_get_field_content(idx-1,"hInt",temp,connectionHandle), HouseInfo[idx][hInt] = strval(temp);
cache_get_field_content(idx-1,"hHel",temp,connectionHandle), HouseInfo[idx][hHel] = strval(temp);
cache_get_field_content(idx-1,"hClass",temp,connectionHandle), HouseInfo[idx][hClass] = strval(temp);
TOTALHOUSES++;
if(HouseInfo[idx][hOwned] == 0)
{
HouseInfo[idx][hPickupID] = CreatePickupAC(1273, 23, HouseInfo[idx][hEnterX], HouseInfo[idx][hEnterY], HouseInfo[idx][hEnterZ],-1);
HouseInfo[idx][hIconID] = CreateDynamicMapIcon(HouseInfo[idx][hEnterX], HouseInfo[idx][hEnterY], HouseInfo[idx][hEnterZ], 31, COLOR_WHITE, 0, -1, -1, 200.0);
switch(HouseInfo[idx][hClass])
{
case 0: klass = "E";
case 1: klass = "D";
case 2: klass = "C";
case 3: klass = "B";
case 4: klass = "A";
case 5: klass = "S";
}
format(string,256,"Номер дома: %i\nЦена: %i долларов\nКласс: %s",idx,HouseInfo[idx][hPrice],klass);
HouseInfo[idx][hTextID] = Create3DTextLabel(string,COLOR_YELLOW,HouseInfo[idx][hEnterX], HouseInfo[idx][hEnterY], HouseInfo[idx][hEnterZ],20.0,0,1);
}
else
{
HouseInfo[idx][hPickupID] = CreatePickupAC(1272, 23, HouseInfo[idx][hEnterX], HouseInfo[idx][hEnterY], HouseInfo[idx][hEnterZ],-1);
HouseInfo[idx][hIconID] = CreateDynamicMapIcon(HouseInfo[idx][hEnterX], HouseInfo[idx][hEnterY], HouseInfo[idx][hEnterZ], 32, COLOR_WHITE, 0, -1, -1, 200.0);
switch(HouseInfo[idx][hClass])
{
case 0: klass = "E";
case 1: klass = "D";
case 2: klass = "C";
case 3: klass = "B";
case 4: klass = "A";
case 5: klass = "S";
}
format(string,256,"Номер дома: %i\nВладелец: %s\nКласс: %s",idx,HouseInfo[idx][hOwner],klass);
HouseInfo[idx][hTextID] = Create3DTextLabel(string,COLOR_LIGHTRED,HouseInfo[idx][hEnterX], HouseInfo[idx][hEnterY], HouseInfo[idx][hEnterZ],20.0,0,1);
}
}
}
printf("[Загружено домов]: <%i>. Времени затрачено: <%i мс>",TOTALHOUSES,GetTickCount()-time);
return true;
}


Но никаких print'ов я не вижу в консоли сервера. Вероятно,я неправильно вызываю загрузку этого паблика,раз так.

DeimoS
21.02.2017, 01:20
А подключение к БД точно проходит? mysql_log покажи

somebodies
21.02.2017, 01:51
Все другие данные (по крайней мере,игроков) сохраняются, в mySQL логе никаких ошибок нет.

Web
21.02.2017, 03:44
cache_get_data(rows,fields,connectionHandle);

а если убрать connectionHandle ?

somebodies
21.02.2017, 19:10
В других функциях cache_get_data работает именно с 3 аргументами.
Да и вообще,дело то не в паблике,а в его вызове.

Pa4enka
21.02.2017, 19:20
mysql_function_query(handle, "SELECT * FROM `houses`", true, "OnHousesLoad","");

Web
21.02.2017, 19:22
И все же, убери.

somebodies
21.02.2017, 19:36
Проблему решил сам. Нужно было создать stock в котором делать вызов функции mysql_function_query(...); ,а далее stock вызывать в OnGameModeInit();

DeimoS
21.02.2017, 22:48
Проблему решил сам. Нужно было создать stock в котором делать вызов функции mysql_function_query(...); ,а далее stock вызывать в OnGameModeInit();

Эмм, странное решение. Может ты до этого просто отправлял запрос до подключения к БД?

somebodies
21.02.2017, 23:23
неа. Подключение к БД было ДО этого кода. Даже ради интереса поставил этот stock на то же самое место прошлой функции - все также работает.