PDA

Просмотр полной версии : [Вопрос] Как лучше всего реализовать загрузку домов?



Dima_Tushin
17.09.2019, 14:51
вопрос такой у меня на сервере например 2 дома я хочу сделать чтобы дома начинались с ID 1 но когда загружаю дома у меня выдает то что строк загружено 3 почему?



/****************************[ Недвижимость ] *********************************/
forward CallBackLoadHouse();
public CallBackLoadHouse()
{
new r, d, houseid = 1;
cache_get_data(r, d);
if(!r) return 1;
for(new i = 0; i < r; i++)
{
if(r)
{
HouseInfo[houseid][hID] = cache_get_field_content_int(i, "hID", MYSQL);
HouseInfo[houseid][hEntrancex] = cache_get_field_content_float(i, "hEntrancex", MYSQL);
HouseInfo[houseid][hEntrancey] = cache_get_field_content_float(i, "hEntrancey", MYSQL);
HouseInfo[houseid][hEntrancez] = cache_get_field_content_float(i, "hEntrancez", MYSQL);
HouseInfo[houseid][hExitx]= cache_get_field_content_float(i, "hExitx", MYSQL);
HouseInfo[houseid][hExity]= cache_get_field_content_float(i, "hExity", MYSQL);
HouseInfo[houseid][hExitz]= cache_get_field_content_float(i, "hExitz", MYSQL);
HouseInfo[houseid][hValue] = cache_get_field_content_int(i, "hValue", MYSQL);
HouseInfo[houseid][hHel] = cache_get_field_content_int(i, "hHel", MYSQL);
HouseInfo[houseid][hInt] = cache_get_field_content_int(i, "hInt", MYSQL);
HouseInfo[houseid][hLock] = cache_get_field_content_int(i, "hLock", MYSQL);
HouseInfo[houseid][hOwned] = cache_get_field_content_int(i, "hOwned", MYSQL);
HouseInfo[houseid][hTakings] = cache_get_field_content_int(i, "hTakings", MYSQL);
HouseInfo[houseid][hKlass] = cache_get_field_content_int(i, "hKlass", MYSQL);
HouseInfo[houseid][hCarx] = cache_get_field_content_float(i, "hCarx", MYSQL);
HouseInfo[houseid][hCary] = cache_get_field_content_float(i, "hCary", MYSQL);
HouseInfo[houseid][hCarz] = cache_get_field_content_float(i, "hCarz", MYSQL);
HouseInfo[houseid][hCarc] = cache_get_field_content_float(i, "hCarc", MYSQL);
cache_get_field_content(i, "hOwner", HouseInfo[houseid][hOwner], MYSQL, 32);

if(HouseInfo[houseid][hOwned] == 0)
{
HouseInfo[houseid][hPickup] = CreateDynamicPickup(1273, 23, HouseInfo[houseid][hEntrancex], HouseInfo[houseid][hEntrancey], HouseInfo[houseid][hEntrancez], -1);
HouseInfo[houseid][hMIcon] = CreateDynamicMapIcon(HouseInfo[houseid][hEntrancex], HouseInfo[houseid][hEntrancey], HouseInfo[houseid][hEntrancez], 31, COLOR_WHITE, 0, -1, -1, 90.0);
}
if(HouseInfo[houseid][hOwned] == 1)
{
HouseInfo[houseid][hPickup] = CreateDynamicPickup(1272, 23, HouseInfo[houseid][hEntrancex], HouseInfo[houseid][hEntrancey], HouseInfo[houseid][hEntrancez], -1);
HouseInfo[houseid][hMIcon] = CreateDynamicMapIcon(HouseInfo[houseid][hEntrancex], HouseInfo[houseid][hEntrancey], HouseInfo[houseid][hEntrancez], 32, COLOR_WHITE, 0, -1, -1, 90.0);
}
houseid++;
}
else printf("Ошибка Дом %i",i);
}
print("===============================");
print("Результат загрузки ДОМОВ:");
printf("Найдено строк в БД: [%i]", r);//пишит 2 (все правильно)
printf("ID началы массива: [%i]", HouseInfo[0][hID]);// 0
if(houseid == sizeof(HouseInfo)) printf("Загружены строк: [%i/%i] [ГОТОВО]", houseid, sizeof(HouseInfo));//3 / 3 почему 3 если домов 2?
else printf("Загружены строк: [%i/%i] [ОШИБКА]", houseid, sizeof(HouseInfo));
return true;
}

DeimoS
17.09.2019, 15:29
Потому что так работает постинкремент? При первой итерации у тебя значение houseid равно 1 и в конце меняется на 2. При второй итерации значение houseid равно 2 и в конце меняется на 3.

И да, так делать не стоит. Если так хочется, чтоб в игре ID домов начинался с 1, просто прибавляй к ID дома единицу всякий раз, когда отображаешь его в сообщении. Оставлять ради этого целую кучу ячеек пустовать - такая себе идея.

Dima_Tushin
17.09.2019, 19:32
хорошо спасибо за ответ уберу сделаю лучше чтобы 0 начальный был

DeimoS
17.09.2019, 23:29
хорошо спасибо за ответ уберу сделаю лучше чтобы 0 начальный был

Вообще гораздо проще и лучше завязывать подобные системы на итераторах.
То бишь, в базе данных делаешь 2 столбца с ID: "id" и "house_id".
"id" - AUTO_INCREMENT-столбец, который будет сугубо для удобства работы с таблицей из phpMyAdmin.
"house_id" - UNIQUE-столбец, в котором будет хранится индекс массива HouseInfo.

Далее просто создаёшь итератор
new Iterator:iHouses<MAX_HOUSES>;
При создании дома определяешь свободный ID
new h_id = Iter_Free(iHouses);
if(h_id == -1)
return /*Сообщение о том, что все слоты под дома заполнены*/;
HouseInfo[h_id][hEntrancex] = ...; // Записываешь информацию в ячейку, равную "h_id"
// Ну и в БД, в "house_id" записываешь значение "h_id"

При загрузке делаешь так:
for(new i, h_id; i < row_count; i++)
{
cache_get_value_name_int(i, "house_id", h_id);
if(!(0 <= h_id < MAX_HOUSES))
{
continue;// ID дома меньше 0 или больше MAX_HOUSES - пропускаем его
}
Iter_Add(Houses, h_id);// Добавляем ID в итератор
cache_get_value_name_flloat(i, "entrance_x", HouseInfo[h_id][hEntrancex]);//В качестве номера строки так же используем "i", а уже в качестве номера ячейки массива используем "h_id"
}

Ну и при удалении, помимо удаления самой строки из таблицы и обнуления массива, удаляешь так же и из итератора информацию:
Iter_Remove(Houses, /*ID дома*/);

Такой вариант упрощает работу с данными:
- Не нужно хранить ID дома отдельно и искать нужный ID циклом, а достаточно напрямую обратиться к конкретной ячейке (ибо ID дома = ячейка)
- Для работы с БД так же не нужно никакой дополнительной инфы, так как, опять же, номер ячейки массива = "house_id".

Dima_Tushin
18.09.2019, 10:11
я не когда не работал с итераторами, сейчас наделаю потом не разберу, мне пока рано :D

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

ну все равно я потом попробую сделать сохраню твой код попробую! Спасибо.

Dima_Tushin
18.09.2019, 11:12
что то я инклуд не могу подключить:(

C:\Users\Администратор\Desktop\Taurus\gamemodes\Taurus.pwn(11) : fatal error 100: cannot read from file: "YSI\y_iterate"

Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


1 Error.

DeimoS
18.09.2019, 11:22
Так подключи foreach (https://github.com/Open-GTO/foreach). Я приводил примеры именно для него.

Dima_Tushin
18.09.2019, 11:25
Все исправил сейчас попробую запустить и создать пару домов

Dima_Tushin
18.09.2019, 12:04
вот я сделал пример просто первые работаю вот сделал но что то все дома с ID 0 :D я хз как сделать можешь помочь?


if(strcmp(cmd, "/addhouse", true) == 0)
{
new h_id = Iter_Free(HOUSEIDS);
if(h_id == sizeof(HouseInfo))
return SendClientMessage(playerid, COLOR_WHITE, "Сообщение о том, что все слоты под дома заполнены");
// Ну и в БД, в "house_id" записываешь значение "h_id"
new klass[50];
klass = strtok(cmdtext, idx);
if(!strlen(klass))
return SendClientMessage(playerid, COLOR_WHITE, "Введите: /addhouse [класс]");
TotalHouse++;
if(!strcmp(klass, "A", true))
{
new cenadomovA[] = {5000000,5100000,5200000,5230000,5400000,5500000,5600000,5700000,5800000,5900000,6000000,6100000,6200000,6300000,6400000,6500000,6600000,6700000,6800000,6900000,7000000,7100000,7200000,7300000};
new rand4 = random(sizeof(cenadomovA));//minimum 10000 max 200000
HouseInfo[h_id][hValue] = cenadomovA[rand4];
HouseInfo[h_id][hTakings] = 50;
HouseInfo[h_id][hKlass] = 4;
HouseInfo[h_id][hInt] = 6;
HouseInfo[h_id][hExitx] = 234.4820;
HouseInfo[h_id][hExity] = 1066.0961;
HouseInfo[h_id][hExitz] = 1084.2087;
}
else if(!strcmp(klass, "B", true))
{
new cenadomovB[] = {2000000,2100000,2200000,2300000,2400000,2500000,2600000,2700000,2800000,2900000,3000000,3100000,3200000,3300000,3400000,3500000,3600000,3700000,3800000,3900000,4000000};
new rand3 = random(sizeof(cenadomovB));//minimum 10000 max 200000
HouseInfo[h_id][hValue] = cenadomovB[rand3];
HouseInfo[h_id][hKlass] = 3;
HouseInfo[h_id][hTakings] = 100;
HouseInfo[h_id][hInt] = 9;
HouseInfo[h_id][hExitx] = 82.9786;
HouseInfo[h_id][hExity] = 1323.7134;
HouseInfo[h_id][hExitz] = 1083.8594;
SendClientMessage(playerid, COLOR_WHITE, "Класс B успешно поставлен");
}
else if(!strcmp(klass, "C", true))
{
new cenadomovC[] = {800000,810000,820000,830000,840000,850000,860000,870000,880000,890000,900000,910000,920000,930000,940000,950000,960000,970000,980000,990000,1200000,1300000,1400000,1500000,1550000,1600000,1650000,1700000,1750000,1800000,1850000,1900000,1950000,2000000};
new rand2 = random(sizeof(cenadomovC));//minimum 10000 max 200000
HouseInfo[h_id][hValue] = cenadomovC[rand2];
HouseInfo[h_id][hKlass] = 2;
HouseInfo[h_id][hTakings] = 150;
HouseInfo[h_id][hInt] = 5;
HouseInfo[h_id][hExitx] = 1387.1808;
HouseInfo[h_id][hExity] = -38.7697;
HouseInfo[h_id][hExitz] = 1079.1609;
SendClientMessage(playerid, COLOR_WHITE, "Класс C успешно поставлен");
}
else if(!strcmp(klass, "D", true))
{
new cenadomovD[] = {200000,210000,220000,230000,250000,260000,270000,280000,290000,300000,310000,320000,330000,350000,360000,370000,380000,390000,400000,410000,420000,440000,450000,460000,470000,480000,490000,500000};
new rand1 = random(sizeof(cenadomovD));//minimum 10000 max 200000
HouseInfo[h_id][hValue] = cenadomovD[rand1];
HouseInfo[h_id][hKlass] = 1;
HouseInfo[h_id][hTakings] = 100;
HouseInfo[h_id][hInt] = 2;
HouseInfo[h_id][hExitx] = 225.9761;
HouseInfo[h_id][hExity] = 1239.9126;
HouseInfo[h_id][hExitz] =1082.1406;
SendClientMessage(playerid, COLOR_WHITE, "Класс D успешно поставлен");
}
else if(!strcmp(klass, "N", true))
{
new cenadomovnope[] = {100000,110000,120000,130000,140000,150000,160000,170000,180000,190000,200000};
new rand = random(sizeof(cenadomovnope));//minimum 10000 max 200000
HouseInfo[h_id][hValue] = cenadomovnope[rand];
HouseInfo[h_id][hKlass] = 0;
HouseInfo[h_id][hTakings] = 50;
HouseInfo[h_id][hInt] = 11;
HouseInfo[h_id][hExitx] = 2282.7886;
HouseInfo[h_id][hExity] = -1139.1351;
HouseInfo[h_id][hExitz] = 1050.8984;
SendClientMessage(playerid, COLOR_WHITE, "Класс N успешно поставлен");
}
else return SendClientMessage(playerid, COLOR_WHITE, "[Ошибка]: Вы ввели не правильный класс [A,B,C,D,N]");
new Float: x, Float: y, Float: z;
GetPlayerPos(playerid, x, y, z);
HouseInfo[h_id][hID] = h_id;
HouseInfo[h_id][hEntrancex] = x;
HouseInfo[h_id][hEntrancey] = y;
HouseInfo[h_id][hEntrancez] = z;
strmid(HouseInfo[h_id][hOwner], "None", 0, strlen("None"), 5);
SendClientMessage(playerid, COLOR_WHITE, "Дом успешно добавлен!");
new string_mysql[1000];
format(string_mysql, sizeof(string_mysql),
"INSERT INTO `house` (`hID`, `hKlass`, `hInt`, `hEntrancex`, `hEntrancey`, \
`hEntrancez`, `hValue`, `hOwner`, `hExitx`, `hExity`, `hExitz`) \
VALUES ('%d','%d','%d','%f','%f','%f','%d','%s','%f','%f','%f')",
HouseInfo[h_id][hID], HouseInfo[h_id][hKlass], HouseInfo[h_id][hInt], x, y, z, HouseInfo[h_id][hValue], HouseInfo[h_id][hOwner],
HouseInfo[h_id][hExitx], HouseInfo[h_id][hExity], HouseInfo[h_id][hExitz]);
mysql_query(MYSQL, string_mysql);
HouseInfo[h_id][hPickup] = CreateDynamicPickup(1273, 23, x, y, z);
HouseInfo[h_id][hMIcon] = CreateDynamicMapIcon(x, y, z, 31, COLOR_WHITE, 0, -1, -1, 90.0);
Iter_Remove(HOUSEIDS, h_id);
return 1;
}
Загрузка

forward CallBackLoadHouse();
public CallBackLoadHouse()
{
new r, d, time = GetTickCount();
cache_get_data(r, d);
if(!r) return 1;
for(new i, h_id; i < r; i++)
{
cache_get_field_content_int(i, "hID", h_id);
if(!(0 <= h_id < 1000))
{
continue;// ID дома меньше 0 или больше MAX_HOUSES - пропускаем его
}
Iter_Add(HOUSEIDS, h_id);// Добавляем ID в итератор
HouseInfo[h_id][hEntrancex] = cache_get_field_content_float(i, "hEntrancex", MYSQL);
HouseInfo[h_id][hEntrancey] = cache_get_field_content_float(i, "hEntrancey", MYSQL);
HouseInfo[h_id][hEntrancez] = cache_get_field_content_float(i, "hEntrancez", MYSQL);
HouseInfo[h_id][hExitx] = cache_get_field_content_float(i, "hExitx", MYSQL);
HouseInfo[h_id][hExity] = cache_get_field_content_float(i, "hExity", MYSQL);
HouseInfo[h_id][hExitz] = cache_get_field_content_float(i, "hExitz", MYSQL);
HouseInfo[h_id][hValue] = cache_get_field_content_int(i, "hValue", MYSQL);
HouseInfo[h_id][hHel] = cache_get_field_content_int(i, "hHel", MYSQL);
HouseInfo[h_id][hInt] = cache_get_field_content_int(i, "hInt", MYSQL);
HouseInfo[h_id][hLock] = cache_get_field_content_int(i, "hLock", MYSQL);
HouseInfo[h_id][hOwned] = cache_get_field_content_int(i, "hOwned", MYSQL);
HouseInfo[h_id][hTakings] = cache_get_field_content_int(i, "hTakings", MYSQL);
HouseInfo[h_id][hKlass] = cache_get_field_content_int(i, "hKlass", MYSQL);
HouseInfo[h_id][hCarx] = cache_get_field_content_float(i, "hCarx", MYSQL);
HouseInfo[h_id][hCary] = cache_get_field_content_float(i, "hCary", MYSQL);
HouseInfo[h_id][hCarz] = cache_get_field_content_float(i, "hCarz", MYSQL);
HouseInfo[h_id][hCarc] = cache_get_field_content_float(i, "hCarc", MYSQL);
cache_get_field_content(h_id, "hOwner", HouseInfo[i][hOwner], MYSQL, 32);
if(HouseInfo[h_id][hOwned] == 0)
{
HouseInfo[h_id][hPickup] = CreateDynamicPickup(1273, 23, HouseInfo[i][hEntrancex], HouseInfo[i][hEntrancey], HouseInfo[i][hEntrancez], -1);
HouseInfo[h_id][hMIcon] = CreateDynamicMapIcon(HouseInfo[i][hEntrancex], HouseInfo[i][hEntrancey], HouseInfo[i][hEntrancez], 31, COLOR_WHITE, 0, -1, -1, 90.0);
}
if(HouseInfo[h_id][hOwned] == 1)
{
HouseInfo[h_id][hPickup] = CreateDynamicPickup(1272, 23, HouseInfo[h_id][hEntrancex], HouseInfo[h_id][hEntrancey], HouseInfo[h_id][hEntrancez], -1);
HouseInfo[h_id][hMIcon] = CreateDynamicMapIcon(HouseInfo[h_id][hEntrancex], HouseInfo[h_id][hEntrancey], HouseInfo[h_id][hEntrancez], 32, COLOR_WHITE, 0, -1, -1, 90.0);
}
HouseInfo[h_id][hLabel] = CreateDynamic3DTextLabel("Выход из дома\nВведите: ''/exit''", -1, HouseInfo[h_id][hExitx], HouseInfo[h_id][hExity],
HouseInfo[h_id][hExitz]+1, 9.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, HouseInfo[h_id][hInt], h_id);
}
print("=============================================================");
print("Результат загрузки ДОМОВ:");
printf("Найдено строк в БД: [%i]", r);
printf("ID начала массива: [%i]", HouseInfo[0][hID]);
if(TotalHouse == 1000) printf("Загружены строк: [%i/%i] [ГОТОВО]", TotalHouse, 1000);
else printf("Загружены строк: [%i/%i] [ОШИБКА]",TotalHouse, 1000);
printf("[Загрузка...]: Дома успешно загружены | Время потрачено: %i <ms>", GetTickCount() - time);
print("=============================================================");
return true;
}

DeimoS
18.09.2019, 12:20
При создании дома не Iter_Remove, а Iter_Add

http://pro-pawn.ru/showthread.php?15081-%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%8B-%D0%B2-Pawn

Dima_Tushin
18.09.2019, 14:22
а какую роль играет

"id" - AUTO_INCREMENT-столбец, который будет сугубо для удобства работы с таблицей из phpMyAdmin.

DeimoS
18.09.2019, 15:28
Столбец с AUTO_INCREMENT нужен для правильного функционирования таблицы, грубо говоря.

Dima_Tushin
18.09.2019, 15:55
удалено

DeimoS
18.09.2019, 16:06
Эмм, нет, не игнорируем. Дома создаются с 0 ID и выше.

Что именно не получается?

Dima_Tushin
18.09.2019, 16:21
сейчас я сделал на сервер 5 домов

forward CallBackLoadHouse();
public CallBackLoadHouse()
{
new r, d, time = GetTickCount(), idx;
cache_get_data(r, d);
if(!r) return 1;
for(new i = 0, h_id; i < r; i++)
{
if(!(0 <= h_id < MAX_HOUSE))
{
continue;// ID дома меньше 0 или больше MAX_HOUSES - пропускаем его
}
Iter_Add(HOUSEIDS, h_id);// Добавляем ID в итератор
HouseInfo[h_id][hID] = cache_get_field_content_int(i, "house_id", MYSQL);
HouseInfo[h_id][hEntrancex] = cache_get_field_content_float(i, "hEntrancex", MYSQL);
HouseInfo[h_id][hEntrancey] = cache_get_field_content_float(i, "hEntrancey", MYSQL);
HouseInfo[h_id][hEntrancez] = cache_get_field_content_float(i, "hEntrancez", MYSQL);
HouseInfo[h_id][hExitx] = cache_get_field_content_float(i, "hExitx", MYSQL);
HouseInfo[h_id][hExity] = cache_get_field_content_float(i, "hExity", MYSQL);
HouseInfo[h_id][hExitz] = cache_get_field_content_float(i, "hExitz", MYSQL);
HouseInfo[h_id][hValue] = cache_get_field_content_int(i, "hValue", MYSQL);
HouseInfo[h_id][hHel] = cache_get_field_content_int(i, "hHel", MYSQL);
HouseInfo[h_id][hInt] = cache_get_field_content_int(i, "hInt", MYSQL);
HouseInfo[h_id][hLock] = cache_get_field_content_int(i, "hLock", MYSQL);
HouseInfo[h_id][hOwned] = cache_get_field_content_int(i, "hOwned", MYSQL);
HouseInfo[h_id][hTakings] = cache_get_field_content_int(i, "hTakings", MYSQL);
HouseInfo[h_id][hKlass] = cache_get_field_content_int(i, "hKlass", MYSQL);
HouseInfo[h_id][hCarx] = cache_get_field_content_float(i, "hCarx", MYSQL);
HouseInfo[h_id][hCary] = cache_get_field_content_float(i, "hCary", MYSQL);
HouseInfo[h_id][hCarz] = cache_get_field_content_float(i, "hCarz", MYSQL);
HouseInfo[h_id][hCarc] = cache_get_field_content_float(i, "hCarc", MYSQL);
cache_get_field_content(h_id, "hOwner", HouseInfo[i][hOwner], MYSQL, 32);
if(HouseInfo[h_id][hOwned] == 0)
{
HouseInfo[h_id][hPickup] = CreateDynamicPickup(1273, 23, HouseInfo[h_id][hEntrancex], HouseInfo[h_id][hEntrancey], HouseInfo[h_id][hEntrancez], -1);
HouseInfo[h_id][hMIcon] = CreateDynamicMapIcon(HouseInfo[h_id][hEntrancex], HouseInfo[h_id][hEntrancey], HouseInfo[h_id][hEntrancez], 31, COLOR_WHITE, 0, -1, -1, 90.0);
}
if(HouseInfo[h_id][hOwned] == 1)
{
HouseInfo[h_id][hPickup] = CreateDynamicPickup(1272, 23, HouseInfo[h_id][hEntrancex], HouseInfo[h_id][hEntrancey], HouseInfo[h_id][hEntrancez], -1);
HouseInfo[h_id][hMIcon] = CreateDynamicMapIcon(HouseInfo[h_id][hEntrancex], HouseInfo[h_id][hEntrancey], HouseInfo[h_id][hEntrancez], 32, COLOR_WHITE, 0, -1, -1, 90.0);
}
HouseInfo[h_id][hLabel] = CreateDynamic3DTextLabel("Выход из дома\nВведите: ''/exit''", -1, HouseInfo[h_id][hExitx], HouseInfo[h_id][hExity],
HouseInfo[h_id][hExitz]+1, 9.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, HouseInfo[h_id][hInt], h_id);
idx++;
}
print("=============================================================");
print("Результат загрузки ДОМОВ:");
printf("Найдено строк в БД: [%i]", r);//5 домов
printf("ID начала массива: [%i]", HouseInfo[0][hID]);//ID 4 при запуске
if(idx == MAX_HOUSE) printf("Загружены строк: [%i/%i] [ГОТОВО]", idx, MAX_HOUSE);
else printf("Загружены строк: [%i/%i] [ОШИБКА]", idx, MAX_HOUSE);//при загрузке 5
printf("[Загрузка...]: Дома успешно загружены | Время потрачено: %i <ms>", GetTickCount() - time);
print("=============================================================");
return true;
}
и все дома кроме 4 не работают что делать?
команда создания домов

if(strcmp(cmd, "/addhouse", true) == 0)
{
new h_id = Iter_Free(HOUSEIDS);
if(h_id == MAX_HOUSE)
return SendClientMessage(playerid, COLOR_WHITE, "Сообщение о том, что все слоты под дома заполнены");
new klass[50];
klass = strtok(cmdtext, idx);
if(!strlen(klass))
return SendClientMessage(playerid, COLOR_WHITE, "Введите: /addhouse [класс]");
if(!strcmp(klass, "A", true))
{
new cenadomovA[] = {5000000,5100000,5200000,5230000,5400000,5500000,5600000,5700000,5800000,5900000,6000000,6100000,6200000,6300000,6400000,6500000,6600000,6700000,6800000,6900000,7000000,7100000,7200000,7300000};
new rand4 = random(sizeof(cenadomovA));//minimum 10000 max 200000
HouseInfo[h_id][hValue] = cenadomovA[rand4];
HouseInfo[h_id][hTakings] = 50;
HouseInfo[h_id][hKlass] = 4;
HouseInfo[h_id][hInt] = 6;
HouseInfo[h_id][hExitx] = 234.4820;
HouseInfo[h_id][hExity] = 1066.0961;
HouseInfo[h_id][hExitz] = 1084.2087;
}
else if(!strcmp(klass, "B", true))
{
new cenadomovB[] = {2000000,2100000,2200000,2300000,2400000,2500000,2600000,2700000,2800000,2900000,3000000,3100000,3200000,3300000,3400000,3500000,3600000,3700000,3800000,3900000,4000000};
new rand3 = random(sizeof(cenadomovB));//minimum 10000 max 200000
HouseInfo[h_id][hValue] = cenadomovB[rand3];
HouseInfo[h_id][hKlass] = 3;
HouseInfo[h_id][hTakings] = 100;
HouseInfo[h_id][hInt] = 9;
HouseInfo[h_id][hExitx] = 82.9786;
HouseInfo[h_id][hExity] = 1323.7134;
HouseInfo[h_id][hExitz] = 1083.8594;
SendClientMessage(playerid, COLOR_WHITE, "Класс B успешно поставлен");
}
else if(!strcmp(klass, "C", true))
{
new cenadomovC[] = {800000,810000,820000,830000,840000,850000,860000,870000,880000,890000,900000,910000,920000,930000,940000,950000,960000,970000,980000,990000,1200000,1300000,1400000,1500000,1550000,1600000,1650000,1700000,1750000,1800000,1850000,1900000,1950000,2000000};
new rand2 = random(sizeof(cenadomovC));//minimum 10000 max 200000
HouseInfo[h_id][hValue] = cenadomovC[rand2];
HouseInfo[h_id][hKlass] = 2;
HouseInfo[h_id][hTakings] = 150;
HouseInfo[h_id][hInt] = 5;
HouseInfo[h_id][hExitx] = 1387.1808;
HouseInfo[h_id][hExity] = -38.7697;
HouseInfo[h_id][hExitz] = 1079.1609;
SendClientMessage(playerid, COLOR_WHITE, "Класс C успешно поставлен");
}
else if(!strcmp(klass, "D", true))
{
new cenadomovD[] = {200000,210000,220000,230000,250000,260000,270000,280000,290000,300000,310000,320000,330000,350000,360000,370000,380000,390000,400000,410000,420000,440000,450000,460000,470000,480000,490000,500000};
new rand1 = random(sizeof(cenadomovD));//minimum 10000 max 200000
HouseInfo[h_id][hValue] = cenadomovD[rand1];
HouseInfo[h_id][hKlass] = 1;
HouseInfo[h_id][hTakings] = 100;
HouseInfo[h_id][hInt] = 2;
HouseInfo[h_id][hExitx] = 225.9761;
HouseInfo[h_id][hExity] = 1239.9126;
HouseInfo[h_id][hExitz] =1082.1406;
SendClientMessage(playerid, COLOR_WHITE, "Класс D успешно поставлен");
}
else if(!strcmp(klass, "N", true))
{
new cenadomovnope[] = {100000,110000,120000,130000,140000,150000,160000,170000,180000,190000,200000};
new rand = random(sizeof(cenadomovnope));//minimum 10000 max 200000
HouseInfo[h_id][hValue] = cenadomovnope[rand];
HouseInfo[h_id][hKlass] = 0;
HouseInfo[h_id][hTakings] = 50;
HouseInfo[h_id][hInt] = 11;
HouseInfo[h_id][hExitx] = 2282.7886;
HouseInfo[h_id][hExity] = -1139.1351;
HouseInfo[h_id][hExitz] = 1050.8984;
SendClientMessage(playerid, COLOR_WHITE, "Класс N успешно поставлен");
}
else return SendClientMessage(playerid, COLOR_WHITE, "[Ошибка]: Вы ввели не правильный класс [A,B,C,D,N]");
new Float: x, Float: y, Float: z;
GetPlayerPos(playerid, x, y, z);
HouseInfo[h_id][hID] = h_id;
HouseInfo[h_id][hEntrancex] = x;
HouseInfo[h_id][hEntrancey] = y;
HouseInfo[h_id][hEntrancez] = z;
strmid(HouseInfo[h_id][hOwner], "None", 0, strlen("None"), 5);
SendClientMessage(playerid, COLOR_WHITE, "Дом успешно добавлен!");
new string_mysql[1000];
format(string_mysql, sizeof(string_mysql),
"INSERT INTO `house` (`house_id`, `hKlass`, `hInt`, `hEntrancex`, `hEntrancey`, \
`hEntrancez`, `hValue`, `hOwner`, `hExitx`, `hExity`, `hExitz`) \
VALUES ('%d','%d','%d','%f','%f','%f','%d','%s','%f','%f','%f')",
h_id, HouseInfo[h_id][hKlass], HouseInfo[h_id][hInt], x, y, z, HouseInfo[h_id][hValue], HouseInfo[h_id][hOwner],
HouseInfo[h_id][hExitx], HouseInfo[h_id][hExity], HouseInfo[h_id][hExitz]);
mysql_query(MYSQL, string_mysql);
HouseInfo[h_id][hPickup] = CreateDynamicPickup(1273, 23, x, y, z);
HouseInfo[h_id][hMIcon] = CreateDynamicMapIcon(x, y, z, 31, COLOR_WHITE, 0, -1, -1, 90.0);
Iter_Add(HOUSEIDS, h_id);
return 1;
}

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


Столбец с AUTO_INCREMENT нужен для правильного функционирования таблицы, грубо говоря.

а как добавить то AUTO_INCREMENT в базу?

DeimoS
18.09.2019, 17:19
сейчас я сделал на сервер 5 домов

forward CallBackLoadHouse();
public CallBackLoadHouse()
{
new r, d, time = GetTickCount(), idx;
cache_get_data(r, d);
if(!r) return 1;
for(new i = 0, h_id; i < r; i++)
{
if(!(0 <= h_id < MAX_HOUSE))
{
continue;// ID дома меньше 0 или больше MAX_HOUSES - пропускаем его
}
Iter_Add(HOUSEIDS, h_id);// Добавляем ID в итератор
HouseInfo[h_id][hID] = cache_get_field_content_int(i, "house_id", MYSQL);
HouseInfo[h_id][hEntrancex] = cache_get_field_content_float(i, "hEntrancex", MYSQL);
HouseInfo[h_id][hEntrancey] = cache_get_field_content_float(i, "hEntrancey", MYSQL);
HouseInfo[h_id][hEntrancez] = cache_get_field_content_float(i, "hEntrancez", MYSQL);
HouseInfo[h_id][hExitx] = cache_get_field_content_float(i, "hExitx", MYSQL);
HouseInfo[h_id][hExity] = cache_get_field_content_float(i, "hExity", MYSQL);
HouseInfo[h_id][hExitz] = cache_get_field_content_float(i, "hExitz", MYSQL);
HouseInfo[h_id][hValue] = cache_get_field_content_int(i, "hValue", MYSQL);
HouseInfo[h_id][hHel] = cache_get_field_content_int(i, "hHel", MYSQL);
HouseInfo[h_id][hInt] = cache_get_field_content_int(i, "hInt", MYSQL);
HouseInfo[h_id][hLock] = cache_get_field_content_int(i, "hLock", MYSQL);
HouseInfo[h_id][hOwned] = cache_get_field_content_int(i, "hOwned", MYSQL);
HouseInfo[h_id][hTakings] = cache_get_field_content_int(i, "hTakings", MYSQL);
HouseInfo[h_id][hKlass] = cache_get_field_content_int(i, "hKlass", MYSQL);
HouseInfo[h_id][hCarx] = cache_get_field_content_float(i, "hCarx", MYSQL);
HouseInfo[h_id][hCary] = cache_get_field_content_float(i, "hCary", MYSQL);
HouseInfo[h_id][hCarz] = cache_get_field_content_float(i, "hCarz", MYSQL);
HouseInfo[h_id][hCarc] = cache_get_field_content_float(i, "hCarc", MYSQL);
cache_get_field_content(h_id, "hOwner", HouseInfo[i][hOwner], MYSQL, 32);
if(HouseInfo[h_id][hOwned] == 0)
{
HouseInfo[h_id][hPickup] = CreateDynamicPickup(1273, 23, HouseInfo[h_id][hEntrancex], HouseInfo[h_id][hEntrancey], HouseInfo[h_id][hEntrancez], -1);
HouseInfo[h_id][hMIcon] = CreateDynamicMapIcon(HouseInfo[h_id][hEntrancex], HouseInfo[h_id][hEntrancey], HouseInfo[h_id][hEntrancez], 31, COLOR_WHITE, 0, -1, -1, 90.0);
}
if(HouseInfo[h_id][hOwned] == 1)
{
HouseInfo[h_id][hPickup] = CreateDynamicPickup(1272, 23, HouseInfo[h_id][hEntrancex], HouseInfo[h_id][hEntrancey], HouseInfo[h_id][hEntrancez], -1);
HouseInfo[h_id][hMIcon] = CreateDynamicMapIcon(HouseInfo[h_id][hEntrancex], HouseInfo[h_id][hEntrancey], HouseInfo[h_id][hEntrancez], 32, COLOR_WHITE, 0, -1, -1, 90.0);
}
HouseInfo[h_id][hLabel] = CreateDynamic3DTextLabel("Выход из дома\nВведите: ''/exit''", -1, HouseInfo[h_id][hExitx], HouseInfo[h_id][hExity],
HouseInfo[h_id][hExitz]+1, 9.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, HouseInfo[h_id][hInt], h_id);
idx++;
}
print("=============================================================");
print("Результат загрузки ДОМОВ:");
printf("Найдено строк в БД: [%i]", r);//5 домов
printf("ID начала массива: [%i]", HouseInfo[0][hID]);//ID 4 при запуске
if(idx == MAX_HOUSE) printf("Загружены строк: [%i/%i] [ГОТОВО]", idx, MAX_HOUSE);
else printf("Загружены строк: [%i/%i] [ОШИБКА]", idx, MAX_HOUSE);//при загрузке 5
printf("[Загрузка...]: Дома успешно загружены | Время потрачено: %i <ms>", GetTickCount() - time);
print("=============================================================");
return true;
}
и все дома кроме 4 не работают что делать?
команда создания домов

if(strcmp(cmd, "/addhouse", true) == 0)
{
new h_id = Iter_Free(HOUSEIDS);
if(h_id == MAX_HOUSE)
return SendClientMessage(playerid, COLOR_WHITE, "Сообщение о том, что все слоты под дома заполнены");
new klass[50];
klass = strtok(cmdtext, idx);
if(!strlen(klass))
return SendClientMessage(playerid, COLOR_WHITE, "Введите: /addhouse [класс]");
if(!strcmp(klass, "A", true))
{
new cenadomovA[] = {5000000,5100000,5200000,5230000,5400000,5500000,5600000,5700000,5800000,5900000,6000000,6100000,6200000,6300000,6400000,6500000,6600000,6700000,6800000,6900000,7000000,7100000,7200000,7300000};
new rand4 = random(sizeof(cenadomovA));//minimum 10000 max 200000
HouseInfo[h_id][hValue] = cenadomovA[rand4];
HouseInfo[h_id][hTakings] = 50;
HouseInfo[h_id][hKlass] = 4;
HouseInfo[h_id][hInt] = 6;
HouseInfo[h_id][hExitx] = 234.4820;
HouseInfo[h_id][hExity] = 1066.0961;
HouseInfo[h_id][hExitz] = 1084.2087;
}
else if(!strcmp(klass, "B", true))
{
new cenadomovB[] = {2000000,2100000,2200000,2300000,2400000,2500000,2600000,2700000,2800000,2900000,3000000,3100000,3200000,3300000,3400000,3500000,3600000,3700000,3800000,3900000,4000000};
new rand3 = random(sizeof(cenadomovB));//minimum 10000 max 200000
HouseInfo[h_id][hValue] = cenadomovB[rand3];
HouseInfo[h_id][hKlass] = 3;
HouseInfo[h_id][hTakings] = 100;
HouseInfo[h_id][hInt] = 9;
HouseInfo[h_id][hExitx] = 82.9786;
HouseInfo[h_id][hExity] = 1323.7134;
HouseInfo[h_id][hExitz] = 1083.8594;
SendClientMessage(playerid, COLOR_WHITE, "Класс B успешно поставлен");
}
else if(!strcmp(klass, "C", true))
{
new cenadomovC[] = {800000,810000,820000,830000,840000,850000,860000,870000,880000,890000,900000,910000,920000,930000,940000,950000,960000,970000,980000,990000,1200000,1300000,1400000,1500000,1550000,1600000,1650000,1700000,1750000,1800000,1850000,1900000,1950000,2000000};
new rand2 = random(sizeof(cenadomovC));//minimum 10000 max 200000
HouseInfo[h_id][hValue] = cenadomovC[rand2];
HouseInfo[h_id][hKlass] = 2;
HouseInfo[h_id][hTakings] = 150;
HouseInfo[h_id][hInt] = 5;
HouseInfo[h_id][hExitx] = 1387.1808;
HouseInfo[h_id][hExity] = -38.7697;
HouseInfo[h_id][hExitz] = 1079.1609;
SendClientMessage(playerid, COLOR_WHITE, "Класс C успешно поставлен");
}
else if(!strcmp(klass, "D", true))
{
new cenadomovD[] = {200000,210000,220000,230000,250000,260000,270000,280000,290000,300000,310000,320000,330000,350000,360000,370000,380000,390000,400000,410000,420000,440000,450000,460000,470000,480000,490000,500000};
new rand1 = random(sizeof(cenadomovD));//minimum 10000 max 200000
HouseInfo[h_id][hValue] = cenadomovD[rand1];
HouseInfo[h_id][hKlass] = 1;
HouseInfo[h_id][hTakings] = 100;
HouseInfo[h_id][hInt] = 2;
HouseInfo[h_id][hExitx] = 225.9761;
HouseInfo[h_id][hExity] = 1239.9126;
HouseInfo[h_id][hExitz] =1082.1406;
SendClientMessage(playerid, COLOR_WHITE, "Класс D успешно поставлен");
}
else if(!strcmp(klass, "N", true))
{
new cenadomovnope[] = {100000,110000,120000,130000,140000,150000,160000,170000,180000,190000,200000};
new rand = random(sizeof(cenadomovnope));//minimum 10000 max 200000
HouseInfo[h_id][hValue] = cenadomovnope[rand];
HouseInfo[h_id][hKlass] = 0;
HouseInfo[h_id][hTakings] = 50;
HouseInfo[h_id][hInt] = 11;
HouseInfo[h_id][hExitx] = 2282.7886;
HouseInfo[h_id][hExity] = -1139.1351;
HouseInfo[h_id][hExitz] = 1050.8984;
SendClientMessage(playerid, COLOR_WHITE, "Класс N успешно поставлен");
}
else return SendClientMessage(playerid, COLOR_WHITE, "[Ошибка]: Вы ввели не правильный класс [A,B,C,D,N]");
new Float: x, Float: y, Float: z;
GetPlayerPos(playerid, x, y, z);
HouseInfo[h_id][hID] = h_id;
HouseInfo[h_id][hEntrancex] = x;
HouseInfo[h_id][hEntrancey] = y;
HouseInfo[h_id][hEntrancez] = z;
strmid(HouseInfo[h_id][hOwner], "None", 0, strlen("None"), 5);
SendClientMessage(playerid, COLOR_WHITE, "Дом успешно добавлен!");
new string_mysql[1000];
format(string_mysql, sizeof(string_mysql),
"INSERT INTO `house` (`house_id`, `hKlass`, `hInt`, `hEntrancex`, `hEntrancey`, \
`hEntrancez`, `hValue`, `hOwner`, `hExitx`, `hExity`, `hExitz`) \
VALUES ('%d','%d','%d','%f','%f','%f','%d','%s','%f','%f','%f')",
h_id, HouseInfo[h_id][hKlass], HouseInfo[h_id][hInt], x, y, z, HouseInfo[h_id][hValue], HouseInfo[h_id][hOwner],
HouseInfo[h_id][hExitx], HouseInfo[h_id][hExity], HouseInfo[h_id][hExitz]);
mysql_query(MYSQL, string_mysql);
HouseInfo[h_id][hPickup] = CreateDynamicPickup(1273, 23, x, y, z);
HouseInfo[h_id][hMIcon] = CreateDynamicMapIcon(x, y, z, 31, COLOR_WHITE, 0, -1, -1, 90.0);
Iter_Add(HOUSEIDS, h_id);
return 1;
}

В каком смысле "не работают"? =\


а как добавить то AUTO_INCREMENT в базу?

http://pro-pawn.ru/showthread.php?10548-%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B-%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D0%B8-%D0%BD%D0%B0-%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B5-%D0%BF%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%D0%B0-MySQL-R39-R40&p=90300&viewfull=1#post90300

Dima_Tushin
18.09.2019, 17:30
на сервере 5 домов подходишь 4 не реагирует диалог покупки дома потом подходишь к 5 последнему вылазит диалог и что удивительно что ID 5 дома равен 0 ?

может в коде что то не то?

if(strcmp(cmd, "/addhouse", true) == 0)
{
new h_id = Iter_Free(HOUSEIDS);
if(h_id == MAX_HOUSE)
return SendClientMessage(playerid, COLOR_WHITE, "Сообщение о том, что все слоты под дома заполнены");
new klass[50];
klass = strtok(cmdtext, idx);
if(!strlen(klass))
return SendClientMessage(playerid, COLOR_WHITE, "Введите: /addhouse [класс]");
if(!strcmp(klass, "A", true))
{
new cenadomovA[] = {5000000,5100000,5200000,5230000,5400000,5500000,5600000,5700000,5800000,5900000,6000000,6100000,6200000,6300000,6400000,6500000,6600000,6700000,6800000,6900000,7000000,7100000,7200000,7300000};
new rand4 = random(sizeof(cenadomovA));//minimum 10000 max 200000
HouseInfo[h_id][hValue] = cenadomovA[rand4];
HouseInfo[h_id][hTakings] = 50;
HouseInfo[h_id][hKlass] = 4;
HouseInfo[h_id][hInt] = 6;
HouseInfo[h_id][hExitx] = 234.4820;
HouseInfo[h_id][hExity] = 1066.0961;
HouseInfo[h_id][hExitz] = 1084.2087;
}
else if(!strcmp(klass, "B", true))
{
new cenadomovB[] = {2000000,2100000,2200000,2300000,2400000,2500000,2600000,2700000,2800000,2900000,3000000,3100000,3200000,3300000,3400000,3500000,3600000,3700000,3800000,3900000,4000000};
new rand3 = random(sizeof(cenadomovB));//minimum 10000 max 200000
HouseInfo[h_id][hValue] = cenadomovB[rand3];
HouseInfo[h_id][hKlass] = 3;
HouseInfo[h_id][hTakings] = 100;
HouseInfo[h_id][hInt] = 9;
HouseInfo[h_id][hExitx] = 82.9786;
HouseInfo[h_id][hExity] = 1323.7134;
HouseInfo[h_id][hExitz] = 1083.8594;
SendClientMessage(playerid, COLOR_WHITE, "Класс B успешно поставлен");
}
else if(!strcmp(klass, "C", true))
{
new cenadomovC[] = {800000,810000,820000,830000,840000,850000,860000,870000,880000,890000,900000,910000,920000,930000,940000,950000,960000,970000,980000,990000,1200000,1300000,1400000,1500000,1550000,1600000,1650000,1700000,1750000,1800000,1850000,1900000,1950000,2000000};
new rand2 = random(sizeof(cenadomovC));//minimum 10000 max 200000
HouseInfo[h_id][hValue] = cenadomovC[rand2];
HouseInfo[h_id][hKlass] = 2;
HouseInfo[h_id][hTakings] = 150;
HouseInfo[h_id][hInt] = 5;
HouseInfo[h_id][hExitx] = 1387.1808;
HouseInfo[h_id][hExity] = -38.7697;
HouseInfo[h_id][hExitz] = 1079.1609;
SendClientMessage(playerid, COLOR_WHITE, "Класс C успешно поставлен");
}
else if(!strcmp(klass, "D", true))
{
new cenadomovD[] = {200000,210000,220000,230000,250000,260000,270000,280000,290000,300000,310000,320000,330000,350000,360000,370000,380000,390000,400000,410000,420000,440000,450000,460000,470000,480000,490000,500000};
new rand1 = random(sizeof(cenadomovD));//minimum 10000 max 200000
HouseInfo[h_id][hValue] = cenadomovD[rand1];
HouseInfo[h_id][hKlass] = 1;
HouseInfo[h_id][hTakings] = 100;
HouseInfo[h_id][hInt] = 2;
HouseInfo[h_id][hExitx] = 225.9761;
HouseInfo[h_id][hExity] = 1239.9126;
HouseInfo[h_id][hExitz] =1082.1406;
SendClientMessage(playerid, COLOR_WHITE, "Класс D успешно поставлен");
}
else if(!strcmp(klass, "N", true))
{
new cenadomovnope[] = {100000,110000,120000,130000,140000,150000,160000,170000,180000,190000,200000};
new rand = random(sizeof(cenadomovnope));//minimum 10000 max 200000
HouseInfo[h_id][hValue] = cenadomovnope[rand];
HouseInfo[h_id][hKlass] = 0;
HouseInfo[h_id][hTakings] = 50;
HouseInfo[h_id][hInt] = 11;
HouseInfo[h_id][hExitx] = 2282.7886;
HouseInfo[h_id][hExity] = -1139.1351;
HouseInfo[h_id][hExitz] = 1050.8984;
SendClientMessage(playerid, COLOR_WHITE, "Класс N успешно поставлен");
}
else return SendClientMessage(playerid, COLOR_WHITE, "[Ошибка]: Вы ввели не правильный класс [A,B,C,D,N]");
new Float: x, Float: y, Float: z;
GetPlayerPos(playerid, x, y, z);
Iter_Add(HOUSEIDS, h_id);// Добавляем ID в итератор
HouseInfo[h_id][hID] = h_id;
HouseInfo[h_id][hEntrancex] = x;
HouseInfo[h_id][hEntrancey] = y;
HouseInfo[h_id][hEntrancez] = z;
strmid(HouseInfo[h_id][hOwner], "None", 0, strlen("None"), 5);
SendClientMessage(playerid, COLOR_WHITE, "Дом успешно добавлен!");
new string_mysql[1000];
format(string_mysql, sizeof(string_mysql),
"INSERT INTO `house` (`house_id`, `hKlass`, `hInt`, `hEntrancex`, `hEntrancey`, \
`hEntrancez`, `hValue`, `hOwner`, `hExitx`, `hExity`, `hExitz`) \
VALUES ('%d','%d','%d','%f','%f','%f','%d','%s','%f','%f','%f')",
h_id, HouseInfo[h_id][hKlass], HouseInfo[h_id][hInt], x, y, z, HouseInfo[h_id][hValue], HouseInfo[h_id][hOwner],
HouseInfo[h_id][hExitx], HouseInfo[h_id][hExity], HouseInfo[h_id][hExitz]);
mysql_query(MYSQL, string_mysql);
HouseInfo[h_id][hPickup] = CreateDynamicPickup(1273, 23, x, y, z);
HouseInfo[h_id][hMIcon] = CreateDynamicMapIcon(x, y, z, 31, COLOR_WHITE, 0, -1, -1, 90.0);
return 1;
}

forward CallBackLoadHouse();
public CallBackLoadHouse()
{
new r, d, time = GetTickCount(), idx;
cache_get_data(r, d);
if(!r) return 1;
for(new i, h_id; i < r; i++)
{
cache_get_field_content_int(i, "house_id", MYSQL);
if(!(0 <= h_id < MAX_HOUSE))
{
continue;// ID дома меньше 0 или больше MAX_HOUSES - пропускаем его
}
HouseInfo[h_id][hEntrancex] = cache_get_field_content_float(i, "hEntrancex", MYSQL);
HouseInfo[h_id][hEntrancey] = cache_get_field_content_float(i, "hEntrancey", MYSQL);
HouseInfo[h_id][hEntrancez] = cache_get_field_content_float(i, "hEntrancez", MYSQL);
HouseInfo[h_id][hExitx] = cache_get_field_content_float(i, "hExitx", MYSQL);
HouseInfo[h_id][hExity] = cache_get_field_content_float(i, "hExity", MYSQL);
HouseInfo[h_id][hExitz] = cache_get_field_content_float(i, "hExitz", MYSQL);
HouseInfo[h_id][hValue] = cache_get_field_content_int(i, "hValue", MYSQL);
HouseInfo[h_id][hHel] = cache_get_field_content_int(i, "hHel", MYSQL);
HouseInfo[h_id][hInt] = cache_get_field_content_int(i, "hInt", MYSQL);
HouseInfo[h_id][hLock] = cache_get_field_content_int(i, "hLock", MYSQL);
HouseInfo[h_id][hOwned] = cache_get_field_content_int(i, "hOwned", MYSQL);
HouseInfo[h_id][hTakings] = cache_get_field_content_int(i, "hTakings", MYSQL);
HouseInfo[h_id][hKlass] = cache_get_field_content_int(i, "hKlass", MYSQL);
HouseInfo[h_id][hCarx] = cache_get_field_content_float(i, "hCarx", MYSQL);
HouseInfo[h_id][hCary] = cache_get_field_content_float(i, "hCary", MYSQL);
HouseInfo[h_id][hCarz] = cache_get_field_content_float(i, "hCarz", MYSQL);
HouseInfo[h_id][hCarc] = cache_get_field_content_float(i, "hCarc", MYSQL);
cache_get_field_content(h_id, "hOwner", HouseInfo[i][hOwner], MYSQL, 32);
if(HouseInfo[h_id][hOwned] == 0)
{
HouseInfo[h_id][hPickup] = CreateDynamicPickup(1273, 23, HouseInfo[h_id][hEntrancex], HouseInfo[h_id][hEntrancey], HouseInfo[h_id][hEntrancez], -1);
HouseInfo[h_id][hMIcon] = CreateDynamicMapIcon(HouseInfo[h_id][hEntrancex], HouseInfo[h_id][hEntrancey], HouseInfo[h_id][hEntrancez], 31, COLOR_WHITE, 0, -1, -1, 90.0);
}
if(HouseInfo[h_id][hOwned] == 1)
{
HouseInfo[h_id][hPickup] = CreateDynamicPickup(1272, 23, HouseInfo[h_id][hEntrancex], HouseInfo[h_id][hEntrancey], HouseInfo[h_id][hEntrancez], -1);
HouseInfo[h_id][hMIcon] = CreateDynamicMapIcon(HouseInfo[h_id][hEntrancex], HouseInfo[h_id][hEntrancey], HouseInfo[h_id][hEntrancez], 32, COLOR_WHITE, 0, -1, -1, 90.0);
}
HouseInfo[h_id][hLabel] = CreateDynamic3DTextLabel("Выход из дома\nВведите: ''/exit''", -1, HouseInfo[h_id][hExitx], HouseInfo[h_id][hExity],
HouseInfo[h_id][hExitz]+1, 9.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, HouseInfo[h_id][hInt], h_id);
idx++;
}
print("=============================================================");
print("Результат загрузки ДОМОВ:");
printf("Найдено строк в БД: [%i]", r);
printf("ID начала массива: [%i]", HouseInfo[0][hID]);
if(idx == MAX_HOUSE) printf("Загружены строк: [%i/%i] [ГОТОВО]", idx, MAX_HOUSE);
else printf("Загружены строк: [%i/%i] [ОШИБКА]", idx, MAX_HOUSE);
printf("[Загрузка...]: Дома успешно загружены | Время потрачено: %i <ms>", GetTickCount() - time);
print("=============================================================");
return true;
}

на сервере 5 домов подходишь 4 не реагирует диалог покупки дома потом подходишь к 5 последнему вылазит диалог и что удивительно что ID 5 дома равен 0 ?


public OnPlayerPickUpDynamicPickup(playerid, pickupid) //
{
for(new h = 0; h < MAX_HOUSE; h++)
{
new string[90];
if(pickupid == HouseInfo[h][hPickup])
{
SetPVarInt(playerid, "HousePickID", h);
switch(HouseInfo[h][hOwned])
{
case 0:
{
switch(HouseInfo[h][hKlass])
{
case 0: format(string, sizeof(string), "{ffffff}Цена: %d\nКласс: Nope\nНомер дома: %d", HouseInfo[h][hValue], HouseInfo[h][hID]);
case 1: format(string, sizeof(string), "{ffffff}Цена: %d\nКласс: D\nНомер дома: %d", HouseInfo[h][hValue], HouseInfo[h][hID]);
case 2: format(string, sizeof(string), "{ffffff}Цена: %d\nКласс: C\nНомер дома: %d", HouseInfo[h][hValue], HouseInfo[h][hID]);
case 3: format(string, sizeof(string), "{ffffff}Цена: %d\nКласс: B\nНомер дома: %d", HouseInfo[h][hValue], HouseInfo[h][hID]);
default: format(string, sizeof(string), "{ffffff}Цена: %d\nКласс: A\nНомер дома: %d", HouseInfo[h][hValue], HouseInfo[h][hID]);
}
ShowPlayerDialog(playerid, 10075, DIALOG_STYLE_MSGBOX, "Продаётся", string, "Войти", "Отмена");//Диалог домов
}
case 1:
{
new ttextt[32];
if(IsPlayerConnected(GetPlayerID(HouseInfo[h][hOwner]))) { ttextt = "[{3caa3c}Online{ffffff}]"; }
else if(!IsPlayerConnected(GetPlayerID(HouseInfo[h][hOwner]))) { ttextt = "[{ff2400}Offline{ffffff}]"; }
switch(HouseInfo[h][hKlass])
{
case 0: format(string, sizeof(string), "{ffffff}Владелец: %s %s\nКласс: Nope\nНомер дома: %d",HouseInfo[h][hOwner], ttextt, HouseInfo[h][hID]);
case 1: format(string, sizeof(string), "{ffffff}Владелец: %s %s\nКласс: D\nНомер дома: %d",HouseInfo[h][hOwner], ttextt, HouseInfo[h][hID]);
case 2: format(string, sizeof(string), "{ffffff}Владелец: %s %s\nКласс: C\nНомер дома: %d",HouseInfo[h][hOwner], ttextt, HouseInfo[h][hID]);
case 3: format(string, sizeof(string), "{ffffff}Владелец: %s %s\nКласс: B\nНомер дома: %d",HouseInfo[h][hOwner], ttextt, HouseInfo[h][hID]);
default: format(string, sizeof(string), "{ffffff} Владелец:%s %s\nКласс: A\nНомер дома: %d",HouseInfo[h][hOwner], ttextt, HouseInfo[h][hID]);
}
ShowPlayerDialog(playerid, 10075, DIALOG_STYLE_MSGBOX, "Дом занят", string, "Войти", "Отмена");
}
}
return 1;
}
}
return 1;
}

тут подхожу самому первому дому с ID 0
https://hkar.ru/ZBMn
потом подхожу самому последнему ID 4 это 5 дом итог
https://hkar.ru/ZBMo

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


В каком смысле "не работают"? =\



http://pro-pawn.ru/showthread.php?10548-%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B-%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D0%B8-%D0%BD%D0%B0-%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B5-%D0%BF%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%D0%B0-MySQL-R39-R40&p=90300&viewfull=1#post90300

сделал

DeimoS
18.09.2019, 17:53
Во-первых, не
for(new h = 0; h < MAX_HOUSE; h++)
А
foreach(new h: HOUSEIDS)

Во-вторых, скрин содержимого таблицы домов покажи

Dima_Tushin
18.09.2019, 17:55
Во-первых, не
for(new h = 0; h < MAX_HOUSE; h++)
А
foreach(new h: HOUSEIDS)

Во-вторых, скрин содержимого таблицы домов покажи

сейчас

https://hkar.ru/ZBMN

поменял я не чего не изменилось так же все

DeimoS
18.09.2019, 23:55
Так ты в загрузке домов не записываешь значение house_id в h_id, а просто вызываешь cache_get_field_content_int. Вот у тебя все дома и записываются в нулевую ячейку

Dima_Tushin
19.09.2019, 08:53
HouseInfo[h_id][hID] = cache_get_field_content_int(i, "id", MYSQL); так? ну все равно не работает

сделал потом так

HouseInfo[h_id][hID] = cache_get_field_content_int(i, "house_id", MYSQL);

Ввожу команду /house 0 телепортируется но потом как ввожу 1 под текстуры падаю возле фермы все равно все под 0 записываются

DeimoS
19.09.2019, 11:55
А теперь перечитай то, что я тебе писал изначально.

Dima_Tushin
19.09.2019, 13:17
ну получается же вот код загрузки hID в h_id так же ведь

HouseInfo[h_id][hID] = cache_get_field_content_int(i, "house_id", MYSQL);

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

сделал вот так все дома прогрузились хорошо

/****************************[ Недвижимость ] *********************************/
forward CallBackLoadHouse();
public CallBackLoadHouse()
{
new r, d, time = GetTickCount(), idx;
cache_get_data(r, d);
if(!r) return 1;
for(new i, h_id; i < r; i++)
{
HouseInfo[h_id][hID] = cache_get_field_content_int(i, "house_id", MYSQL);
HouseInfo[h_id][hEntrancex] = cache_get_field_content_float(i, "hEntrancex", MYSQL);
HouseInfo[h_id][hEntrancey] = cache_get_field_content_float(i, "hEntrancey", MYSQL);
HouseInfo[h_id][hEntrancez] = cache_get_field_content_float(i, "hEntrancez", MYSQL);
HouseInfo[h_id][hExitx] = cache_get_field_content_float(i, "hExitx", MYSQL);
HouseInfo[h_id][hExity] = cache_get_field_content_float(i, "hExity", MYSQL);
HouseInfo[h_id][hExitz] = cache_get_field_content_float(i, "hExitz", MYSQL);
HouseInfo[h_id][hValue] = cache_get_field_content_int(i, "hValue", MYSQL);
HouseInfo[h_id][hHel] = cache_get_field_content_int(i, "hHel", MYSQL);
HouseInfo[h_id][hInt] = cache_get_field_content_int(i, "hInt", MYSQL);
HouseInfo[h_id][hLock] = cache_get_field_content_int(i, "hLock", MYSQL);
HouseInfo[h_id][hOwned] = cache_get_field_content_int(i, "hOwned", MYSQL);
HouseInfo[h_id][hTakings] = cache_get_field_content_int(i, "hTakings", MYSQL);
HouseInfo[h_id][hKlass] = cache_get_field_content_int(i, "hKlass", MYSQL);
HouseInfo[h_id][hCarx] = cache_get_field_content_float(i, "hCarx", MYSQL);
HouseInfo[h_id][hCary] = cache_get_field_content_float(i, "hCary", MYSQL);
HouseInfo[h_id][hCarz] = cache_get_field_content_float(i, "hCarz", MYSQL);
HouseInfo[h_id][hCarc] = cache_get_field_content_float(i, "hCarc", MYSQL);
cache_get_field_content(i, "hOwner", HouseInfo[h_id][hOwner], MYSQL, 32);
if(!(0 <= h_id < MAX_HOUSE))
{
continue;// ID дома меньше 0 или больше MAX_HOUSES - пропускаем его
}
if(HouseInfo[h_id][hOwned] == 0)
{
HouseInfo[h_id][hPickup] = CreateDynamicPickup(1273, 23, HouseInfo[h_id][hEntrancex], HouseInfo[h_id][hEntrancey], HouseInfo[h_id][hEntrancez], -1);
HouseInfo[h_id][hMIcon] = CreateDynamicMapIcon(HouseInfo[h_id][hEntrancex], HouseInfo[h_id][hEntrancey], HouseInfo[h_id][hEntrancez], 31, COLOR_WHITE, 0, -1, -1, 90.0);
}
if(HouseInfo[h_id][hOwned] == 1)
{
HouseInfo[h_id][hPickup] = CreateDynamicPickup(1272, 23, HouseInfo[h_id][hEntrancex], HouseInfo[h_id][hEntrancey], HouseInfo[h_id][hEntrancez], -1);
HouseInfo[h_id][hMIcon] = CreateDynamicMapIcon(HouseInfo[h_id][hEntrancex], HouseInfo[h_id][hEntrancey], HouseInfo[h_id][hEntrancez], 32, COLOR_WHITE, 0, -1, -1, 90.0);
}
HouseInfo[h_id][hLabel] = CreateDynamic3DTextLabel("Выход из дома\nВведите: ''/exit''", -1, HouseInfo[h_id][hExitx], HouseInfo[h_id][hExity],
HouseInfo[h_id][hExitz]+1, 9.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, HouseInfo[h_id][hInt], h_id);
idx++;
h_id++;
}
print("=============================================================");
print("Результат загрузки ДОМОВ:");
printf("Найдено строк в БД: [%i]", r);
printf("ID начала массива: [%i]", HouseInfo[0][hID]);
if(idx == MAX_HOUSE) printf("Загружены строк: [%i/%i] [ГОТОВО]", idx, MAX_HOUSE);
else printf("Загружены строк: [%i/%i] [ОШИБКА]", idx, MAX_HOUSE);
printf("[Загрузка...]: Дома успешно загружены | Время потрачено: %i <ms>", GetTickCount() - time);
print("=============================================================");
return true;
}
теперь проблема с этим когда наступаешь на пикап не вызывается диалог

public OnPlayerPickUpDynamicPickup(playerid, pickupid) //
{
foreach(new h: HOUSEIDS)
{
new string[90];
if(pickupid == HouseInfo[h][hPickup])
{
SetPVarInt(playerid, "HousePickID", h);
switch(HouseInfo[h][hOwned])
{
case 0:
{
switch(HouseInfo[h][hKlass])
{
case 0: format(string, sizeof(string), "{ffffff}Цена: %d\nКласс: Nope\nНомер дома: %d", HouseInfo[h][hValue], HouseInfo[h][hID]);
case 1: format(string, sizeof(string), "{ffffff}Цена: %d\nКласс: D\nНомер дома: %d", HouseInfo[h][hValue], HouseInfo[h][hID]);
case 2: format(string, sizeof(string), "{ffffff}Цена: %d\nКласс: C\nНомер дома: %d", HouseInfo[h][hValue], HouseInfo[h][hID]);
case 3: format(string, sizeof(string), "{ffffff}Цена: %d\nКласс: B\nНомер дома: %d", HouseInfo[h][hValue], HouseInfo[h][hID]);
default: format(string, sizeof(string), "{ffffff}Цена: %d\nКласс: A\nНомер дома: %d", HouseInfo[h][hValue], HouseInfo[h][hID]);
}
ShowPlayerDialog(playerid, 10075, DIALOG_STYLE_MSGBOX, "Продаётся", string, "Войти", "Отмена");//Диалог домов
}
case 1:
{
new ttextt[32];
if(IsPlayerConnected(GetPlayerID(HouseInfo[h][hOwner]))) { ttextt = "[{3caa3c}Online{ffffff}]"; }
else if(!IsPlayerConnected(GetPlayerID(HouseInfo[h][hOwner]))) { ttextt = "[{ff2400}Offline{ffffff}]"; }
switch(HouseInfo[h][hKlass])
{
case 0: format(string, sizeof(string), "{ffffff}Владелец: %s %s\nКласс: Nope\nНомер дома: %d",HouseInfo[h][hOwner], ttextt, HouseInfo[h][hID]);
case 1: format(string, sizeof(string), "{ffffff}Владелец: %s %s\nКласс: D\nНомер дома: %d",HouseInfo[h][hOwner], ttextt, HouseInfo[h][hID]);
case 2: format(string, sizeof(string), "{ffffff}Владелец: %s %s\nКласс: C\nНомер дома: %d",HouseInfo[h][hOwner], ttextt, HouseInfo[h][hID]);
case 3: format(string, sizeof(string), "{ffffff}Владелец: %s %s\nКласс: B\nНомер дома: %d",HouseInfo[h][hOwner], ttextt, HouseInfo[h][hID]);
default: format(string, sizeof(string), "{ffffff} Владелец:%s %s\nКласс: A\nНомер дома: %d",HouseInfo[h][hOwner], ttextt, HouseInfo[h][hID]);
}
ShowPlayerDialog(playerid, 10075, DIALOG_STYLE_MSGBOX, "Дом занят", string, "Войти", "Отмена");
}
}
return 1;
}
}
return 1;
}

DeimoS
19.09.2019, 13:36
...
Для кого я писал пример того, как должна выглядеть загрузка?
Повторяю ещё раз:
for(new i, h_id; i < row_count; i++)
{
h_id = cache_get_field_content_int(i, "house_id", MYSQL);
if(!(0 <= h_id < MAX_HOUSES))
{
continue;
}
Iter_Add(Houses, h_id);
HouseInfo[h_id][hEntrancex] = cache_get_field_content_float(i, "hEntrancex", MYSQL);
// Остальной код
}

И твоя переменная idx будет хранить то же значение, что и переменная "r", так что непонятно зачем ты её вообще создал.

Dima_Tushin
19.09.2019, 13:39
Решено добавил в загрузку

h_id++;
и все заработало

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


...
Для кого я писал пример того, как должна выглядеть загрузка?
Повторяю ещё раз:
for(new i, h_id; i < row_count; i++)
{
h_id = cache_get_field_content_int(i, "house_id", MYSQL);
if(!(0 <= h_id < MAX_HOUSES))
{
continue;
}
Iter_Add(Houses, h_id);
HouseInfo[h_id][hEntrancex] = cache_get_field_content_float(i, "hEntrancex", MYSQL);
// Остальной код
}

И твоя переменная idx будет хранить то же значение, что и переменная "r", так что непонятно зачем ты её вообще создал.

сделал как у тебя тоже заработало спасибо за помощь теперь буду дальше делать спасибо можно закрывать!

DeimoS
19.09.2019, 13:56
Решено добавил в загрузку

h_id++;
и все заработало

Только такой вариант лишает всякого смысла все те изменения, о которых я писал выше, ибо ты опять пришёл к первоначальному варианту.
Закрыто.