PDA

Просмотр полной версии : [Вопрос] По массиву с рангами



BadPawn
02.02.2016, 13:52
Всем привет ребят.

Как распределить скины по фракам в одном массиве, чтоб не создавать массивы равное их кол-ву.


static const fraction_ranks[1+MAX_RANK*MAX_FRACTION][MAX_RANK_NAME] =
{
//Гражданский
{ "No-one" },
//Groove Street Gang
{ "[1] Новенький" },
{ "[2] -" },
{ "[3] -" },
{ "[4] -" },
{ "[5] -" },
{ "[6] -" },
{ "[7] -" },
{ "[8] -" },
{ "[9] -" },
{ "[10] Лидер" },
//
{ "[1] Новенький" },
{ "[2] -" },
{ "[3] -" },
{ "[4] -" },
{ "[5] -" },
{ "[6] -" },
{ "[7] -" },
{ "[8] -" },
{ "[9] -" },
{ "[10] Лидер" }
};

Daniel_Cortez
02.02.2016, 14:49
enum e_FACTION_INFO
{
fRankSkin,
fRankName[MAX_RANK_NAME]
};


new const faction_ranks[MAX_RANK * MAX_FRACTION + 1][e_FACTION_INFO] =
{
//Гражданский
{ 7, {"No-one"} },
//Grove Street Gang
{ 105, {"[1] Новенький"} },
{ 105, {"[2] -"} },
{ 105, {"[3] -"} },
{ 105, {"[4] -"} },
{ 106, {"[5] -"} },
{ 106, {"[6] -"} },
{ 106, {"[7] -"} },
{ 106, {"[8] -"} },
{ 107, {"[9] -"} },
{ 107, {"[10] Лидер"} },
//Ballas Gang
{ 103, {"[1] Новенький"} },
{ 103, {"[2] -"} },
{ 103, {"[3] -"} },
{ 103, {"[4] -"} },
{ 102, {"[5] -"} },
{ 102, {"[6] -"} },
{ 102, {"[7] -"} },
{ 102, {"[8] -"} },
{ 104, {"[9] -"} },
{ 104, {"[10] Лидер"} },
// ...
{ /*...*/ }
};

BadPawn
02.02.2016, 18:37
#define MAX_RANK_NAME 21
enum e_FACTION_INFO
{
fRankName[MAX_RANK_NAME]
}


new const
#define MAX_FRACTION 3
#define MAX_FRACTION_NAME 19
fraction_name[MAX_FRACTION][MAX_FRACTION_NAME] =
{
{ "Гражданский" },
{ "Groove Street Gang" },
{ "The Vagos Gang" }
},
#define MAX_RANK 22
fraction_ranks[1+MAX_RANK*MAX_FRACTION][e_FACTION_INFO] =
{
//Гражданский
{ "No-one" },
//Groove Street Gang
{ "[1] Groove Новенький" },
{ "[2] -" },
{ "[3] -" },
{ "[4] -" },
{ "[5] -" },
{ "[6] -" },
{ "[7] -" },
{ "[8] -" },
{ "[9] -" },
{ "[10] Groove Лидер" },
//Vagos
{ "[1] Vagos стажер" },
{ "[2] -" },
{ "[3] -" },
{ "[4] -" },
{ "[5] -" },
{ "[6] -" },
{ "[7] -" },
{ "[8] -" },
{ "[9] -" },
{ "[10] Vagos Лидер" }
}; // 188 строка(на эту строчку указывает компилятор)
// ниже ничего нет


error 052: multi-dimensional arrays must be fully initialized

Совсем не могу вкурить что происходит.

Daniel_Cortez
02.02.2016, 18:47
Совсем не могу вкурить что происходит.
А происходит то, что вы невнимательно скопировали код. В fraction_ranks должны быть не только названия рангов, но и ID скинов.

BadPawn
02.02.2016, 19:55
Убрал скины сам. )

Скопировал код, который выше точь в точь, и все-равно такая же история.

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

У меня на данный момент создано 2 банды + гражданские, а задефайнил 3 + 1. клево)

Починил.

Daniel_Cortez, имеются еще варианты, как разбить ранги по фракам? дело в чем, скины во внимание не беру, ибо упор на них будет в другом варианте.

BadPawn
02.02.2016, 20:40
Затупил! Чисто не осознанно!

Как распределить РАНГИ по фракциям.

Боже мой. О чем думал, когда печатал..

BadPawn
03.02.2016, 10:09
stock GetRankIdx(playerid)
{
new family = PlayerInfo[playerid][pMember];
if(family == 0)
family = PlayerInfo[playerid][pLeader];
if(!(1<=family<=MAX_FAMILIES))
return 0;
return (family-1)*(MAX_RANK)+PlayerInfo[playerid][pRank];
}// by Daniel_Cortez

не совсем понимаю строчку одну.


if(!(1<=family<=MAX_FAMILIES))
return 0;
Что это означает? Типа: если 1 не меньше либо не равно переменной фракции и переменная фракции не меньше или не равна максимальному кол-ву организаций, то останавливаем действие кода?

Daniel_Cortez
03.02.2016, 11:01
stock GetRankIdx(playerid)
{
new family = PlayerInfo[playerid][pMember];
if(family == 0)
family = PlayerInfo[playerid][pLeader];
if(!(1<=family<=MAX_FAMILIES))
return 0;
return (family-1)*(MAX_RANK)+PlayerInfo[playerid][pRank];
}// by Daniel_Cortez

не совсем понимаю строчку одну.


if(!(1<=family<=MAX_FAMILIES))
return 0;
Что это означает? Типа: если 1 не меньше либо не равно переменной фракции и переменная фракции не меньше или не равна максимальному кол-ву организаций, то останавливаем действие кода?
Проверка значения family на принадлежность диапазону от 1 до MAX_FAMILIES.

BadPawn
03.02.2016, 11:02
спс, понял. стырил)



if(1 < pInfo[playerid][pMember] < MAX_FRACTION) return false;

сделал так. просто и понятно, а главное работает. )))

Daniel_Cortez
03.02.2016, 12:01
спс, понял. стырил)



if(1 < pInfo[playerid][pMember] < MAX_FRACTION) return false;

сделал так. просто и понятно, а главное работает. )))
Сделайте тогда уже сразу return 0, без всяких if, прямо в самом начале функции, а всё остальное из неё уберите.
Правильно, неправильно - да какая разница? Главное, что работает.

ok google: операторы сравнения в Pawn, C и C++ (https://www.google.ru/search?btnG=1&pws=0&q=операторы+сравнения+в+Pawn,+C+и+C%2B%2B)

BadPawn
03.02.2016, 12:21
понял. )

if(!(1 <= pInfo[playerid][pMember] <= MAX_FRACTION)) return false;