Введу в курс дела. Значит так, в базе есть запись с ID 51.
Вот я получаю нажатый listitem из диалога:
new idx = page * MAX_FURNITURE_ON_PAGE + listitem; SetPVarInt(playerid, "pVar__FurnitureListItem", idx);

Далее, я получаю index из массива, он = 0.
new idx = GetPVarInt(playerid, "pVar__FurnitureListItem"); new find_idx = g_player_furniture_list[playerid][page][PBL_INDEX][idx];

Я проитерировался по итератору, посмотрел все ID`ы в массиве. При получение ID из базы, он равен 51.
foreach(new i: iFurniture) { printf("%d", eFurniture[i][eID]); } printf("idx: %d", idx); printf("find_idx: %d", eFurniture[find_idx][eID]);

Вот сток списка:
stock ShowFurnitureListDialog(playerid) { if (!Iter_Count(iFurniture)) return SCM(playerid, -1, "На сервере нету мебели."); new count = 0; new dialog_string[47+(29+(11)+(20)+(MAX_PLAYER_NAME))*MAX_FURNITURE_ON_PAGE+1] = "{bcbcbc}ID Object:\t{bcbcbc}Количество:\n"; new page = GetPVarInt(playerid, "pVar__FurniturePage"); new start = page * MAX_FURNITURE_ON_PAGE; if (start > Iter_Count(iFurniture)) { page = -1; if (page < 0) return 0; SetPVarInt(playerid, "pVar__FurniturePage", page); start = page * MAX_FURNITURE_ON_PAGE; } new end = start+MAX_FURNITURE_ON_PAGE; if (end > Iter_Count(iFurniture)) { end = Iter_Count(iFurniture); } new idx = -1; new lastIdx = g_player_furniture_list[playerid][page][PBL_INDEX] - 1; foreach(new i: iFurniture) { if (strcmp(eFurniture[i][eFurniture_Owner], pName(playerid))) continue; SetPlayerFurnitureListIndex(playerid, page, ++ lastIdx, i); printf("page: %d, index: %d, value: %d", page, lastIdx, i); if (++idx < start) continue; if (idx >= end) break; count ++; format(dialog_string, sizeof(dialog_string), "%s{ffd966}%d\t{3d85c6}%d\n", dialog_string, eFurniture[i][eFurniture_OBJ], eFurniture[i][eFurniture_Count]); } if (!count) return SCM(playerid, -1, "Вы не имеете мебель в доме."); if (Iter_Count(iFurniture) > MAX_FURNITURE_ON_PAGE) { if(end < Iter_Count(iFurniture)) { strcat(dialog_string, "\n{93c47d}>>>\t\t"); } if(page) { strcat(dialog_string, "\n{f44336}<<<\t\t\n"); } } return SPD(playerid, dFurniture_ListMain, DIALOG_STYLE_TABLIST_HEADERS, "Список вашей мебели", dialog_string, "Выбрать", "Закрыть"); }

Загрузка мебели:
forward LoadFurniture(); public LoadFurniture() { new rows, count; cache_get_row_count(rows); if (rows) { for (new i; i < rows; i++) { count ++; cache_get_value_name_int(i, "id", eFurniture[i][eID]); cache_get_value_name_int(i, "house_id", eFurniture[i][eHouseID]); cache_get_value_name_int(i, "obj_id", eFurniture[i][eFurniture_OBJ]); cache_get_value_name_int(i, "obj_count", eFurniture[i][eFurniture_Count]); cache_get_value_name_int(i, "obj_virtual_world", eFurniture[i][eFurniture_vWorld]); cache_get_value_name_int(i, "obj_int_id", eFurniture[i][eFurniture_Interior]); cache_get_value_name(i, "owner", eFurniture[i][eFurniture_Owner]); cache_get_value_name_float(i, "x", eFurniture[i][eFurniture_X]); cache_get_value_name_float(i, "y", eFurniture[i][eFurniture_Y]); cache_get_value_name_float(i, "z", eFurniture[i][eFurniture_Z]); cache_get_value_name_float(i, "rx", eFurniture[i][eFurniture_RX]); cache_get_value_name_float(i, "ry", eFurniture[i][eFurniture_RY]); cache_get_value_name_float(i, "rz", eFurniture[i][eFurniture_RZ]); cache_get_value_name_bool(i, "place_object", eFurniture[i][eFurniture_PlaceObject]); Iter_Add(iFurniture, Iter_Free(iFurniture)); printf("id: %d", eFurniture[i][eID]); if (eFurniture[i][eFurniture_PlaceObject] == true) { eFurniture[i][eID] = CreateDynamicObject( eFurniture[i][eFurniture_OBJ], eFurniture[i][eFurniture_X], eFurniture[i][eFurniture_Y], eFurniture[i][eFurniture_Z], eFurniture[i][eFurniture_RX], eFurniture[i][eFurniture_RY], eFurniture[i][eFurniture_RZ], eFurniture[i][eHouseID], -1 ); } } } return printf("<МЕБЕЛИ ЗАГРУЖЕНО>: [%d]", count); }

Сообщение отредактировал DigitalOneThe: 24 мая 2023 - 21:21