Просмотр полной версии : [Вопрос] Проблема с командой
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);
}
У меня в БД 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 ") останется чисто для вида.
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
скорее всего логичней использовать для запросов в бд, отдельную переменную, а для работы в коде, другую...
vasyok28
28.09.2015, 14:14
скорее всего логичней использовать для запросов в бд, отдельную переменную, а для работы в коде, другую...
Можно по подробней или простенький пример?
попробуй просто в коде из первого поста, поменять это
PlayerInfo[playerid][pHouseKey] = i;
на вот это:
PlayerInfo[playerid][pHouseKey] = HouseInfo[i][hID];
но предупреждаю сразу, в дальнейшем если ты будешь использовать pHouseKey для определения номера ячейки соответствующего дома из массива HouseInfo, то у тебя возникнут проблемы.
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot