PDA

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



Vasya_Pupkin
07.07.2016, 15:08
Всем привет
У меня такая проблема когда покупаешь холодильник он появляется и все работает хорошо
но после рестарта холодильник появляется(но не работает) пишет типа вы не возле холодильник и 3d текс тоже не появляется
вот код загрузки

publics: LoadFreezs()
{
new stringer[128];
new i=0;
if(cache_num_rows() > 0)
{
for(new he = 0;he < cache_num_rows(); he++)
{
FreezHome[he][FreezX] = cache_get_field_content_int(he, "fX");
FreezHome[he][FreezY] = cache_get_field_content_float(he, "fY");
FreezHome[he][FreezZ] = cache_get_field_content_float(he, "fZ");
FreezHome[he][FreezRX] = cache_get_field_content_float(he, "frX");
FreezHome[he][FreezRY] = cache_get_field_content_float(he, "frY");
FreezHome[he][FreezRZ] = cache_get_field_content_float(he, "frZ");
i++;
if(FreezHome[he][FreezX] != 0 && FreezHome[he][FreezY] != 0 && FreezHome[he][FreezZ] != 0)
{
FreezHome[he][FreezObject] = CreateObject(2141, FreezHome[he][FreezX], FreezHome[he][FreezY], FreezHome[he][FreezZ], FreezHome[he][FreezRX], FreezHome[he][FreezRY], FreezHome[he][FreezRZ], he);
format(stringer, sizeof(stringer), "{FFFFFF}'Õîëîäèëüíèê'\nÂâåäèòå {FF0000}/freez");
FreezHome[he][FreezText] = CreateDynamic3DTextLabel(stringer, -1, FreezHome[he][FreezX], FreezHome[he][FreezY], FreezHome[he][FreezZ]+0.8,9.0,INVALID_PLAYER_ID, INVALID_VEHICLE_ID,0,he+50);
}
}
printf("[Çàãðóçêa]: LoadFreezs | Çàãðóæåíî %d",i);
}
else printf("[Çàãðóçêa]: Õîëîäèëüíèêè íå çàãðóæåíû.");
return true;
}

А вот команда:

CMD:freez(playerid, params[])
{
new house = pTemp[playerid][PlayerHouse];
if(HouseInfo[house][hHolod] == 0) return SendClientMessage(playerid, COLOR_GRAD1, "Â äîìå íåòó õîëîäèëüíèêà. Êóïèòü åãî ìîæíî â ãëàâíîì ìåíþ äîìà.");
if(!PlayerToPoint(5.0,playerid,FreezHome[house][FreezX], FreezHome[house][FreezY], FreezHome[house][FreezZ])) return SCM(playerid, -1, "Âû äîëæíû íàõîäèòñÿ îêîëî õîëîäèëüíèêà");
for(new x; x < 9; x++) TextDrawShowForPlayer(playerid, Holod[x]);
SelectTextDraw(playerid, 0xFFFFFF50);
DeletePVar(playerid, "timeclick"); //Óäàëåíèå
SetTimerEx("unclick", 1000, 0, "d", playerid);
return true;
}

DeimoS
07.07.2016, 18:42
Проверяй данные через printf:
1) Во время покупки выведи ячейку, в которую записались данные в массивы и сами значения выведи
2) При сохранении (если оно есть) сделай всё то же самое
3) При загрузке (опять ID ячейки и сами данные)

Где-то у тебя они явно, либо не в те ячейки записываются, либо как-то ещё портятся

Vasya_Pupkin
09.07.2016, 19:36
Вот как сохраняю:

new id = pTemp[playerid][PlayerHouse];
if(PlayerInfo[playerid][pCash] < 500000) return SCM(playerid, COLOR_GREY, "Ошибка: У Вас не достаточно средств");
PlayerInfo[playerid][pCash] -= 500000;
HouseInfo[pTemp[playerid][PlayerHouse]][hHolod] = 1;

SendClientMessage(playerid,COLOR_GREY,""gbAccess"Вы установили холодильник в свой дом!");

GetPlayerPos(playerid, FreezHome[id][FreezX], FreezHome[id][FreezY], FreezHome[id][FreezZ]);
new Float:dist = 2.0,Float:angle;
GetPlayerFacingAngle(playerid,angle);

FreezHome[id][FreezX] = FreezHome[id][FreezX] + dist * - floatsin(angle,degrees);
FreezHome[id][FreezY] = FreezHome[id][FreezY] + dist * floatcos(angle,degrees);

new Float: f_X = FreezHome[id][FreezX], Float: f_Y = FreezHome[id][FreezY], Float: f_Z = FreezHome[id][FreezZ];
new Float: f_rX = FreezHome[id][FreezRX], Float: f_rY = FreezHome[id][FreezRY], Float: f_rZ = FreezHome[id][FreezRZ];

FreezHome[id][FreezObject] = CreateObject(2141, f_X, f_Y, f_Z, f_rX, f_rY, f_rZ, H::[id][hID]);

EditObject(playerid, FreezHome[id][FreezObject]);

new query[128];
mysql_format(database, query, sizeof(query), "INSERT INTO homefreez (fID) VALUES (%d)", id);
mysql_function_query(database, query, true, "", "d", playerid);

Тут то же сохроняю когда сдвинул куда нужно его:

if(objectid == FreezHome[id][FreezObject])
{
SetObjectPos(objectid, fX, fY, fZ);
SetObjectRot(objectid, fRotX, fRotY, fRotZ);
FreezHome[id][FreezX] = fX;
FreezHome[id][FreezY] = fY;
FreezHome[id][FreezZ] = fZ;
FreezHome[id][FreezRX] = fRotX;
FreezHome[id][FreezRY] = fRotY;
FreezHome[id][FreezRZ] = fRotZ;
format(stringer, sizeof(stringer), "{FFFFFF}'Холодильник'\nВведите {FF0000}/freez");
FreezHome[id][FreezText] = CreateDynamic3DTextLabel(stringer, -1, FreezHome[id][FreezX], FreezHome[id][FreezY], FreezHome[id][FreezZ]+0.8,9.0,INVALID_PLAYER_ID, INVALID_VEHICLE_ID,0,id+50);
new query[200];
mysql_format(database, query, sizeof(query), "UPDATE homefreez SET fX= %f, fY = %f, fZ = %f, frX = %f, frY = %f, frZ = %f WHERE fID = %d", fX, fY, fZ, fRotX, fRotY, fRotZ, id);
mysql_function_query(database, query, true, "", "");
}

В загрузке где he+50 где he там должен был быть ид дом которому мы прибавляем +50 но тут у него всегда 50 виртуальный мир не чего не прибавляет (
Хотя в таблицу все записывает как нужно но работать не хочет . . .

DeimoS
09.07.2016, 20:52
Так что с логами? Залогируй и поймёшь в каком моменте данные портятся. Смысл перерывать весь код, когда можно конкретно посмотреть загрузку/сохранение и исправить?

Vasya_Pupkin
12.07.2016, 15:17
Вот возможно не правильно: но я попытался и вроде как дело в загрузке
Проверял так:

printf("id: %i | x: %f | y: %f | z: %f | id: %i", he, FreezHome[he][FreezX], FreezHome[he][FreezY], FreezHome[he][FreezZ],he+50);

DeimoS
12.07.2016, 17:04
Во-первых, скажу по секрету, что число загруженных домов (или что там у тебя) будет равно числу возвращённых из БД строк. А число возвращённых из БД строк будет хранится в переменной "rows". Поэтому переменная "i" и всё, что ты с ней пытаешься делать, не нужно ну вообще никак. Инфа о загруженных строках легко может выглядеть так

printf("[Загрузкa]: LoadFreezs | Загружено %d",rows);

Во-вторых, всё же покажи логи и покажи как ты логировал, дабы можно было всё и нам понять. И скрины с данными таблицы не забудь.
Ну или жди того, кто вникнет в твой код без логов и поможет:dntknw:

Vasya_Pupkin
12.07.2016, 21:55
Все сделал тему можно закрыть спс за быстрые ответы )