PDA

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



vasyok28
26.09.2015, 22:38
Написал команду покупки дома, сегодня заметил одну интересную проблема, долго уже мучаюсь и не могу понять в чем проблема.
У меня в БД 11 домов, 1,2,3,4,5,6,7,8,9,14,17
Если покупать дом с ID в бд в радиусе к примеру от 1 до 9 то все нормально. А если к примеру купить дом с ID 14, то присваивается в PlayerInfo[playerid][pHouseKey] = 9; А если купить с ID 17 присваивается в PlayerInfo[playerid][pHouseKey] = 14;

Пожалуйста помогите мне, буду очень благодарен, просто боюсь за свое здоровья могу сломать мозг))
Вот собственно и код:


for(new i = 0; i < sizeof(HouseInfo); i++)
{
if(PlayerInfo[playerid][pHouseKey] != -1) return SCM(playerid, -1, "Exist h!");
if(HouseInfo[i][hOwned]) return SCM(playerid, -1, "home no sell!");
if(GetPlayerCash(playerid) < HouseInfo[i][hPrice]) return SCM(playerid, -1, "no money!");
if(!IsPlayerInRangeOfPoint(playerid, 1.5, HouseInfo[i][hEnterX][0], HouseInfo[i][hEnterY][0], HouseInfo[i][hEnterZ][0]))continue;
GivePlayerCashMinus(playerid, HouseInfo[i][hPrice]);
HouseInfo[i][hOwned] = 1;
PlayerInfo[playerid][pHouseKey] = i;
strmid(HouseInfo[PlayerInfo[playerid][pHouseKey]][hOwener], PlayerInfo[playerid][pName], 0, 24, 24);
UpdateHouseInfo(playerid, i);
SaveHouseInfo(i);
SaveAccount(playerid);
}

#Vito
26.09.2015, 22:44
У меня в БД 11 домов, 1,2,3,4,5,6,7,8,9,14,17
Смените их ID в БД на 1,2,3,4,5,6,7,8,9,10,11.
Есть мысль, что загружаются в мод они по порядку.

Либо покажите загрузку домов.

vasyok28
26.09.2015, 22:50
Смените их ID в БД на 1,2,3,4,5,6,7,8,9,10,11.
Есть мысль, что загружаются в мод они по порядку.

Либо покажите загрузку домов.

Сменить ID в бд не вариант, вдруг в дальнейшем будет у меня 500 ID и понадобится удалить один дом, править весь БД? Загрузка могу показать, чем она поможет решить мою проблему?

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



publics OnHouseLoad()
{
new timeRun = GetTickCount();
new rows, fields;
cache_get_data(rows, fields, mysql_connect_ID);
if(rows)
{
for(new idx = 1; idx <= rows; idx++)
{
HouseInfo[idx][hID] = cache_get_field_content_int(idx-1, "id");
HouseInfo[idx][hOwned] = cache_get_field_content_int(idx-1, "home_active");
HouseInfo[idx][hClose] = cache_get_field_content_int(idx-1, "house_open");
cache_get_field_content(idx-1, "player_is_home", HouseInfo[idx][hOwener], mysql_connect_ID, 24);
HouseInfo[idx][hEnterX][0] = cache_get_field_content_float(idx-1, "EnterX");
HouseInfo[idx][hEnterY][0] = cache_get_field_content_float(idx-1, "EnterY");
HouseInfo[idx][hEnterZ][0] = cache_get_field_content_float(idx-1, "EnterZ");
HouseInfo[idx][hEnterX][1] = cache_get_field_content_float(idx-1, "ExitX");
HouseInfo[idx][hEnterY][1] = cache_get_field_content_float(idx-1, "ExitY");
HouseInfo[idx][hEnterZ][1] = cache_get_field_content_float(idx-1, "ExitZ");
HouseInfo[idx][hEnterZ][2] = cache_get_field_content_float(idx-1, "CarX");
HouseInfo[idx][hEnterX][2] = cache_get_field_content_float(idx-1, "CarY");
HouseInfo[idx][hEnterY][2] = cache_get_field_content_float(idx-1, "CarZ");
HouseInfo[idx][hCarA] = cache_get_field_content_float(idx-1, "CarA");
HouseInfo[idx][hPrice] = cache_get_field_content_int(idx-1, "housePrice");
HouseInfo[idx][hInt] = cache_get_field_content_int(idx-1, "HouseInter");
HouseInfo[idx][hClass] = cache_get_field_content_int(idx-1, "HouseClass");
switch(!HouseInfo[idx][hOwned])
{
case 0:
{
HouseInfo[idx][hPickupID] = CreatePickup(19522, 23, HouseInfo[idx][hEnterX][0], HouseInfo[idx][hEnterY][0], HouseInfo[idx][hEnterZ][0], -1);
HouseInfo[idx][hIconID] = CreateDynamicMapIcon(HouseInfo[idx][hEnterX][0], HouseInfo[idx][hEnterY][0], HouseInfo[idx][hEnterZ][0], 31, COLOR_WHITE, 0, -1, -1, 200.0);
}
case 1:
{
HouseInfo[idx][hPickupID] = CreatePickup(1273, 23, HouseInfo[idx][hEnterX][0], HouseInfo[idx][hEnterY][0], HouseInfo[idx][hEnterZ][0], -1);
HouseInfo[idx][hIconID] = CreateDynamicMapIcon(HouseInfo[idx][hEnterX][0], HouseInfo[idx][hEnterY][0], HouseInfo[idx][hEnterZ][0], 31, COLOR_WHITE, 0, -1, -1, 200.0);
}
}
TOTALHOUSES++;
}
}
else
{
}
}

Daniel_Cortez
26.09.2015, 22:59
Сменить ID в бд не вариант, вдруг в дальнейшем будет у меня 500 ID и понадобится удалить один дом, править весь БД?
Тогда нужно делать в таблице дополнительное поле под внутренний индекс дома, под которым этот дом будет храниться в БД, а номер (тот самый, который "9,14,17 ") останется чисто для вида.

#Vito
26.09.2015, 23:05
else
{
}
ЭТОШТО?!

А теперь по теме:

1. Не обязательно переписывать вручную, можно просто удалить столбик ID в БД, а потом создать заново, и они автоматически перечисляться.

2. Можно использовать цикл в покупке так:

for(new i = 0; i < TOTALHOUSE; i++)

3. Если я правильно понял твой код, то в PlayerInfo[playerid][pHouseKey] = i; должен записываться глобальный ID
То есть, попробуй так:

PlayerInfo[playerid][pHouseKey] = HouseInfo[i][hID];

vasyok28
27.09.2015, 01:38
Ничего не помогло

vasyok28
27.09.2015, 13:42
Тут скорей всего проблема в загрузке домов, сделал проверку Pickupid == HouseInfo[14][hID] только для одного дома, и срабатывает у дома с ид 17

wAx
27.09.2015, 21:45
скорее всего логичней использовать для запросов в бд, отдельную переменную, а для работы в коде, другую...

vasyok28
28.09.2015, 14:14
скорее всего логичней использовать для запросов в бд, отдельную переменную, а для работы в коде, другую...

Можно по подробней или простенький пример?

wAx
28.09.2015, 22:55
попробуй просто в коде из первого поста, поменять это

PlayerInfo[playerid][pHouseKey] = i;
на вот это:

PlayerInfo[playerid][pHouseKey] = HouseInfo[i][hID];
но предупреждаю сразу, в дальнейшем если ты будешь использовать pHouseKey для определения номера ячейки соответствующего дома из массива HouseInfo, то у тебя возникнут проблемы.