PDA

Просмотр полной версии : [Вопрос] Правильно ли подсчитан размер массивов



DmitriyVasilev
08.03.2019, 13:47
Здравствуйте.

1) правильно ли здесь все сделано?
мб попроще можно?
new fmt_str[23 + ( -2 + 11 ) + 1];
new fmt_strland[25 + ( -2 + 11 ) + 1];
format(fmt_str, sizeof(fmt_str),"Баланс бизнеса: %i вирт", BizzInfo[i][bTill]);
SendClientMessage(playerid,-1,fmt_str);
format(fmt_strland,sizeof(fmt_strland),"Баланс 'LandTax': %i вирт",BizzInfo[i][bLandTax]);
SendClientMessage(playerid,-1,fmt_strland);
ShowPlayerDialog(playerid, 1846, 2, "Бизнес", "[0] Продать бизнес\n[1] Пополнить счет\n[2] Снять деньги\n[3] Баланс\n[4] Цена за товар\n[5] Цена за вход\n[6] Информация", "Выбрать", "Отмена");


2) Подскажите как в данном случае подсчитывать ячейки
stock GetFracName(i)
{
new ttext[32];
switch(i)
{
case 1: ttext = "Police LS";
case 2: ttext = "FBI";
case 3: ttext = "Army SF";
case 4: ttext = "Ìåäèêè";
case 5: ttext = "La Cosa Nostra";
case 6: ttext = "Yakuza";
case 7: ttext = "Ìýðèÿ";
case 8: ttext = "Casino";
case 9: ttext = "News SF";
case 10: ttext = "Police SF";
case 11: ttext = "Àâòîøêîëà";
case 12: ttext = "Ballas Gang";
case 13: ttext = "Vagos Gang";
case 14: ttext = "Ðóññêàÿ Ìàôèÿ";
case 15: ttext = "Grove Street";
case 16: ttext = "News LS";
case 17: ttext = "Aztecas Gang";
case 18: ttext = "Rifa Gang";
case 19: ttext = "Army LV";
case 20: ttext = "News LV";
case 21: ttext = "Police LV";
case 24: ttext = "Hell's Angels MC";
case 26: ttext = "Warlocks MC";
case 29: ttext = "Pagans MC";
case 33: ttext = "Medics LV";
case 22: ttext = "Medics LS";
default: ttext = "-";
}
return ttext;
}

DeimoS
08.03.2019, 21:28
1) А почему всё в один массив не записать? У тебя ведь в массив не записываются данные, которые нужны в нескольких местах без изменений. Все вызовы массивов идут поочерёдно. Поэтому разумнее создать один массив, указав в нём длину наибольшей строки, и записывать данные в него.

2) Вообще - так же, как и в первом случае: находишь наибольшую строку и указываешь её размер. Но в твоём случае лучше вообще записать всё в сегмент данных, а не терзать стек лишними перезаписями данных.

#define MAX_FRACT_NAME 17
stock GetFracName(frac_id)
{
static const frack_name_list[][MAX_FRACT_NAME] =
{
"-",
"Police LS",
"FBI",
"Army SF",
"Медики",
"La Cosa Nostra",
"Yakuza",
"Мэрия",
"Casino",
"News SF",
"Police SF",
"Автошкола",
"Ballas Gang",
"Vagos Gang",
"Русская Мафия",
"Grove Street",
"News LS",
"Aztecas Gang",
"Rifa Gang",
"Army LV",
"News LV",
"Police LV",
"Hell's Angels MC",
"Warlocks MC",
"Pagans MC",
"Medics LV",
"Medics LS"
};
new idx;
switch(frac_id)
{
case 1: idx = 1;
case 2: idx = 2;
case 3: idx = 3;
case 4: idx = 4;
case 5: idx = 5;
case 6: idx = 6;
case 7: idx = 7;
case 8: idx = 8;
case 9: idx = 9;
case 10: idx = 10;
case 11: idx = 11;
case 12: idx = 12;
case 13: idx = 13;
case 14: idx = 14;
case 15: idx = 15;
case 16: idx = 16;
case 17: idx = 17;
case 18: idx = 18;
case 19: idx = 19;
case 20: idx = 20;
case 21: idx = 21;
case 24: idx = 24;
case 26: idx = 26;
case 29: idx = 29;
case 33: idx = 33;
case 22: idx = 22;
}
return frack_name_list[idx];
}
#define MAX_FRACT_NAME 17
stock GetFracName(frac_id)
{
static const frack_name_list[][MAX_FRACT_NAME] =
{
"-",
"Police LS",
"FBI",
"Army SF",
"Медики",
"La Cosa Nostra",
"Yakuza",
"Мэрия",
"Casino",
"News SF",
"Police SF",
"Автошкола",
"Ballas Gang",
"Vagos Gang",
"Русская Мафия",
"Grove Street",
"News LS",
"Aztecas Gang",
"Rifa Gang",
"Army LV",
"News LV",
"Police LV",
"Hell's Angels MC",
"Warlocks MC",
"Pagans MC",
"Medics LV",
"Medics LS"
};
new idx;
switch(frac_id)
{
case 1..22: idx = i;
case 24: idx = 24;
case 26: idx = 26;
case 29: idx = 29;
case 33: idx = 33;
}
return frack_name_list[idx];
}

Хотя ещё лучше сделать ID фракций по порядку, поместить этот массив в начало мода и во всех случаях, когда нужно получить имя фракции, обращаться к массиву напрямую.


И не забывай про тему Короткие вопросы [Вопрос:Ответ] (http://pro-pawn.ru/showthread.php?13466-%D0%9A%D0%BE%D1%80%D0%BE%D1%82%D0%BA%D0%B8%D0%B5-%D0%B2%D0%BE%D0%BF%D1%80%D0%BE%D1%81%D1%8B-%D0%92%D0%BE%D0%BF%D1%80%D0%BE%D1%81-%D0%9E%D1%82%D0%B2%D0%B5%D1%82). Пока что объединю две последние темы в одну