PDA

Просмотр полной версии : [Вопрос] Запутался в ID | Прибыль с бизнеса.



Skyline
05.09.2018, 23:43
Здравствуйте. Сделал бизнесы, но сам же запутался с ID, т.е. сделал один бизнес - ID 1 у него.(Нефтебаза). С каждой заправки, идет прибыль игроку владеющим данным бизнесом, но на практике, не получается это сделать.

if(End_Fuel[i] == true)
{
new cena = GetPVarInt(i, "FUELCENA");
DeletePVar(i,"FUELCENA");

End_Fuel[i] = false;
pInfo[i][pMoney] -= cena;
GivePlayerMoney(i, -cena);
SBizInfo[1][sbProfit] += cena;
Fuel[GetPlayerVehicleID(i)] = 101;
}
Где SBizInfo[1][sbProfit] += cena; - 1 Указал как 1 ID бизнеса.
Как объявлено все:

enum e_sbiz_information
{
sbID,
sbName[30],
sbOwner[MAX_PLAYER_NAME],
sbOwned,
Float:sbenter_pos_x,
Float:sbenter_pos_y,
Float:sbenter_pos_z,
sbPrice,
Text3D: sbText,
sbPickup,
sbMapicon,
sbLevel,
sbProfit
};
new SBizInfo[100][e_sbiz_information];
new TOTALSBIZ;
Подскажите, что могу делать не так...

DeimoS
07.09.2018, 15:44
Ты путаешь ID бизнеса и ячейку массива?

Skyline
08.09.2018, 00:45
Да я в принципе запутался, что я сделал не так.. вроде указываю массив с ID 1 - то бишь 1 ID бизнеса, при логировании всегда 0.. чтобы не делал.

DeimoS
08.09.2018, 11:27
А с чего ты взял, что под первой ячейкой массива обязательно будет скрываться первый бизнес? Чтоб было так, нужно соответствующим образом написать загрузку данных, сначала получая ID бизнеса в отдельную переменную, а потом уже значение этой переменной использовать в качестве индекса массива для выгрузки всех остальных данных.

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

Skyline
08.09.2018, 12:43
Ну вот моя загрузка на данный момент:

forward LoadSBiznes();
public LoadSBiznes()
{
new rows;
cache_get_row_count(rows);
if(rows)
{
static const h_null[] = "{FFDEAD}[ID: {FFFFFF}%d{FFDEAD}]\n%s\n{FFDEAD}Владелец: {FFFFFF}Нет\n{FFDEAD}Стоимость: {FFFFFF}%d\n{FFDEAD}Уровень: {FFFFFF}%d";
static const h_not_null[] = "{FFDEAD}[ID: {FFFFFF}%d{FFDEAD}]\n%s\n{FFDEAD}Владелец: {FFFFFF}%s";

new h_buff[sizeof(h_null) + ((3-2) + (24-2) + (30-2) + (20-2) + (5-2))];

for(new b = 0; b < rows; b++)
{
cache_get_value_name(b,"name_sbiz",SBizInfo[b][sbName], 30);
cache_get_value_name_int(b,"id",SBizInfo[b][sbID]);
cache_get_value_name(b,"owner",SBizInfo[b][sbOwner],MAX_PLAYER_NAME);
cache_get_value_name_int(b, "owned", SBizInfo[b][sbOwned]);
cache_get_value_name_float(b, "enter_pos_x", SBizInfo[b][sbenter_pos_x]);
cache_get_value_name_float(b, "enter_pos_y", SBizInfo[b][sbenter_pos_y]);
cache_get_value_name_float(b, "enter_pos_z", SBizInfo[b][sbenter_pos_z]);
cache_get_value_name_int(b, "price", SBizInfo[b][sbPrice]);
cache_get_value_name_int(b, "level", SBizInfo[b][sbLevel]);
cache_get_value_name_int(b, "profit", SBizInfo[b][sbProfit]);

TOTALSBIZ++;
if(!SBizInfo[b][sbOwned])
{
format(h_buff, sizeof(h_buff), h_null, SBizInfo[b][sbID], SBizInfo[b][sbName], SBizInfo[b][sbPrice],SBizInfo[b][sbLevel]);
SBizInfo[b][sbPickup] = CreatePickup(1239, 1, SBizInfo[b][sbenter_pos_x], SBizInfo[b][sbenter_pos_y], SBizInfo[b][sbenter_pos_z], -1);
SBizInfo[b][sbText] = Create3DTextLabel(h_buff, 0x008080FF, SBizInfo[b][sbenter_pos_x], SBizInfo[b][sbenter_pos_y], SBizInfo[b][sbenter_pos_z], 7, 0);
}
else
{
format(h_buff, sizeof(h_buff), h_not_null, SBizInfo[b][sbID], SBizInfo[b][sbName], SBizInfo[b][sbOwner]);
SBizInfo[b][sbPickup] = CreatePickup(1239, 1, SBizInfo[b][sbenter_pos_x], SBizInfo[b][sbenter_pos_y], SBizInfo[b][sbenter_pos_z], -1);
SBizInfo[b][sbText] = Create3DTextLabel(h_buff, 0xFFFFFF, SBizInfo[b][sbenter_pos_x], SBizInfo[b][sbenter_pos_y], SBizInfo[b][sbenter_pos_z], 7.0, 0);
}
}
}
printf("[ЗАГРУЖЕНО CБИЗНЕСОВ]: <%d>.", TOTALSBIZ);
return 1;
}

X!X
08.09.2018, 13:09
SBizInfo[1-1][sbProfit] += cena;:blush2:

DeimoS
08.09.2018, 23:07
Делать, как показали выше, не стоит, ибо если решишь однажды изменить порядок бизнесов - всё сломается. И даже если ты думаешь, что не будешь менять порядок, всё равно не стоит так делать.

У тебя ID бизнеса в таблице - это не одно и то же, что и индекс массива. Перед тем, как что-то делать с бизнесом, тебе сначала нужно запустить цикл на все бизнесы и начать проверять значение SBizInfo[b][sbID] с тем значением, которое записано у игрока в переменную с ID бизнеса. Собственно, та итерация, на которой сработает условие, и будет нужным индексом.

Paradox
09.09.2018, 23:34
Может потому что бизнес в бд под 1 идом, а а на сервере под нулевым? нет?

Kovshevoy
10.09.2018, 08:38
Может потому что бизнес в бд под 1 идом, а а на сервере под нулевым? нет?

Я когда-то так забросил заниматься одним модом, потому что была такая же проблема, надо делать правильную формулу подсчета, коя у меня не особо хорошо получилась.

И да, скорей всего, у него такая проблема и есть)

Skyline
10.09.2018, 09:51
Я когда-то так забросил заниматься одним модом, потому что была такая же проблема, надо делать правильную формулу подсчета, коя у меня не особо хорошо получилась.

И да, скорей всего, у него такая проблема и есть)

Да проблема такая и есть, потому что бизнесы начинаются не с 0 ID

DeimoS
10.09.2018, 10:35
Да господи, повторяю во второй раз: нужно переписать систему бизнесов и всё будет хорошо.

Загрузку нужно переписать так, чтоб сначала ID бизнеса выгружался в обычную локальную переменную, после чего значение этой переменной сверялось с sizeof(SBizInfo) и уже после эту переменную можно использовать в качестве индекса для записи:
"cache_get_value_name_int(b, "price", SBizInfo[вот тут эта переменная][sbPrice]);". Это и позволит тебе обращаться к бизнесам по их ID из базы.
Но, соответственно, чтоб всё правильно работало, нужно остальные уже написанные участки переписать под новый принцип работы с данными.

Сделаешь это и проблем не будет. Для чего по 100 раз писать, что у тебя есть проблема? Надеешься, что она сама исчезнет?

Skyline
10.09.2018, 16:28
Да господи, повторяю во второй раз: нужно переписать систему бизнесов и всё будет хорошо.

Загрузку нужно переписать так, чтоб сначала ID бизнеса выгружался в обычную локальную переменную, после чего значение этой переменной сверялось с sizeof(SBizInfo) и уже после эту переменную можно использовать в качестве индекса для записи:
"cache_get_value_name_int(b, "price", SBizInfo[вот тут эта переменная][sbPrice]);". Это и позволит тебе обращаться к бизнесам по их ID из базы.
Но, соответственно, чтоб всё правильно работало, нужно остальные уже написанные участки переписать под новый принцип работы с данными.

Сделаешь это и проблем не будет. Для чего по 100 раз писать, что у тебя есть проблема? Надеешься, что она сама исчезнет?

Нет, не надеюсь, просто выше постами предположили что и как, просто и сказал. Тему закройте. Всем спасибо.

DeimoS
10.09.2018, 20:24
Если вдруг появятся проблемы или будут вопросы на тему реализации загрузки - напиши в личку и открою тему.