PDA

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



StevenH
22.04.2017, 15:41
Доброго времени суток всем. Делаю система тюнинга (загрузку при входе), и тут возникла нейкая ошибка:



(113) : error 001: expected token: "}", but found "["
(5809) : error 001: expected token: ")", but found "["
(5809) : error 029: invalid expression, assumed zero
(5809) : warning 215: expression has no effect
(5809) : error 001: expected token: ";", but found "]"
(5809) : fatal error 107: too many error messages on one line


Код:


enum playercar
{
carModel[5],
carPercent[5],
carColor1[5],
carColor2[5],
carComponent[5][14] // 113
}
new CarPlayerInfo[MAX_PLAYERS][playercar];

Там где [5] это слоты для машин (0 - первая машина ... 4 - пятая машина)
Там где [14] в carComponent, это слоты для тюнинга



stock LoadTuning(playerid, vehicleid, slotcar)
{
for(new i; i < 14; i++)
{
if(CarPlayerInfo[playerid][carComponent][slotcar][i] != 0) // 5809
AddVehicleComponent(vehicleid, CarPlayerInfo[playerid][carComponent][slotcar][i]);
}
}

vasyok28
22.04.2017, 15:55
В энум нельзя засунуть двумерный массив

StevenH
22.04.2017, 16:01
В энум нельзя засунуть двумерный массив

Да, спасибо уже нашел на другом портале). Ладно, распишу так..

ziggi
22.04.2017, 17:41
Да, спасибо уже нашел на другом портале). Ладно, распишу так..

Лучше создать отдельный массив с компонентами, чем в одном enum писать carComponent1, carComponent2 и т.д..

DeimoS
22.04.2017, 18:11
Можно ещё создать Франкенштейна из двух enum


enum e_VEHICLE_COMPONENTS
{
Component_1[14],
Component_2[14],
Component_3[14],
Component_4[14],
Component_5[14]
};

enum playercar
{
carModel[5],
carPercent[5],
carColor1[5],
carColor2[5],
carComponent[e_VEHICLE_COMPONENTS] // 113
};

new CarPlayerInfo[MAX_PLAYERS][playercar];

И использовать так

CarPlayerInfo[0][carComponent][Component_1][1] = 5;
Но ко второму enum не получится обращаться через параметр функции. Придётся делать вот так:

stock LoadTuning(playerid, vehicleid, e_VEHICLE_COMPONENTS:slotcar)
{
switch(slotcar)
{
case Component_1:
{
for(new i; i < 14; i++)
{
if(CarPlayerInfo[playerid][carComponent][Component_1][i] != 0) // 5809
{}
}
}
case Component_2:
{
for(new i; i < 14; i++)
{
if(CarPlayerInfo[playerid][carComponent][Component_2][i] != 0) // 5809
{}
}
}
//...
}
}

StevenH
23.04.2017, 01:36
Можно ещё создать Франкенштейна из двух enum


enum e_VEHICLE_COMPONENTS
{
Component_1[14],
Component_2[14],
Component_3[14],
Component_4[14],
Component_5[14]
};

enum playercar
{
carModel[5],
carPercent[5],
carColor1[5],
carColor2[5],
carComponent[e_VEHICLE_COMPONENTS] // 113
};

new CarPlayerInfo[MAX_PLAYERS][playercar];

И использовать так

CarPlayerInfo[0][carComponent][Component_1][1] = 5;
Но ко второму enum не получится обращаться через параметр функции. Придётся делать вот так:

stock LoadTuning(playerid, vehicleid, e_VEHICLE_COMPONENTS:slotcar)
{
switch(slotcar)
{
case Component_1:
{
for(new i; i < 14; i++)
{
if(CarPlayerInfo[playerid][carComponent][Component_1][i] != 0) // 5809
{}
}
}
case Component_2:
{
for(new i; i < 14; i++)
{
if(CarPlayerInfo[playerid][carComponent][Component_2][i] != 0) // 5809
{}
}
}
//...
}
}

Спасибо за совет, так и сделал, но когда в LoadTuning передаю слот, ругается.. Делаю так:


LoadTuning(playerid, house_car[playerid][slotcar], slotcar);


Кидает ошибку:


warning 213: tag mismatch

DeimoS
23.04.2017, 01:59
Так вот я же писал про это, ну...




Но ко второму enum не получится обращаться через параметр функции. Придётся делать вот так:

stock LoadTuning(playerid, vehicleid, e_VEHICLE_COMPONENTS:slotcar)
{
switch(slotcar)
{
case Component_1:
{
for(new i; i < 14; i++)
{
if(CarPlayerInfo[playerid][carComponent][Component_1][i] != 0) // 5809
{}
}
}
case Component_2:
{
for(new i; i < 14; i++)
{
if(CarPlayerInfo[playerid][carComponent][Component_2][i] != 0) // 5809
{}
}
}
//...
}
}
Не получится обращаться к второму enum как-то, кроме имён констант из этого enum. Ну или я чего-то не знаю

StevenH
23.04.2017, 02:20
Так вот я же писал про это, ну...



Не получится обращаться к второму enum как-то, кроме имён констант из этого enum. Ну или я чего-то не знаю

Да, ты прав. Спасибо вдвойне. Заюзал твой вариант, проверил уже на сервере, все работает. Как минимум сократил этот "быдло" код:


enum player_car
{
...,
carComponent1[5],
carComponent2[5],
carComponent3[5],
carComponent4[5],
carComponent5[5],
carComponent6[5],
carComponent7[5],
carComponent8[5],
carComponent9[5],
carComponent10[5],
carComponent11[5],
carComponent12[5],
carComponent13[5],
carComponent14[5]
}


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

Тему можно закрыть