Сегодня решил опубликовать кусочек тюнинг-системы, которую писал для своего проекта, может кому-то поможет. В общем, все знают, что есть проблемы со слотами компонентов тюнинга при использовании функции GetVehicleComponentInSlot. Ну а кто не знает - посмотрите на нашей Wiki.
Здесь:
* Починен CARMODTYPE_STEREO
* CARMODTYPE_FRONT_BUMPER и CARMODTYPE_REAR_BUMPER записывают именно бампера
* CARMODTYPE_SIDESKIRT был поделен на _L и _R
* Добавлены слоты: CARMODTYPE_FRONT_BULLBAR, CARMODTYPE_REAR_BULLBAR для кенгурятников
* Добавлен слот CARMODTYPE_STERN для неиспользуемых в игре эмблем на капот (stern - звезда на немецком, название пошло с накапотных шильдиков Мерседеса).
Добавим наши дефайны (используем стандартные и доработанные)
В enum должен быть массив с компонентами
При загрузке мода или скрипта (у меня был скрипт):
Использование стандартных тюнинг-мастерских
Автор: OKStyle
P.S. Проверьте, у кого БД подключена, работает или нет, я не тестировал.
Здесь:
* Починен CARMODTYPE_STEREO
* CARMODTYPE_FRONT_BUMPER и CARMODTYPE_REAR_BUMPER записывают именно бампера
* CARMODTYPE_SIDESKIRT был поделен на _L и _R
* Добавлены слоты: CARMODTYPE_FRONT_BULLBAR, CARMODTYPE_REAR_BULLBAR для кенгурятников
* Добавлен слот CARMODTYPE_STERN для неиспользуемых в игре эмблем на капот (stern - звезда на немецком, название пошло с накапотных шильдиков Мерседеса).
Добавим наши дефайны (используем стандартные и доработанные)
PHP:
// Vehicle Components
#define CARMODTYPE_SPOILER 0
#define CARMODTYPE_HOOD 1
#define CARMODTYPE_ROOF 2
#define CARMODTYPE_SIDESKIRT_L 3
#define CARMODTYPE_LAMPS 4
#define CARMODTYPE_NITRO 5
#define CARMODTYPE_EXHAUST 6
#define CARMODTYPE_WHEELS 7
#define CARMODTYPE_STEREO 8
#define CARMODTYPE_HYDRAULICS 9
#define CARMODTYPE_FRONT_BUMPER 10
#define CARMODTYPE_REAR_BUMPER 11
#define CARMODTYPE_VENT_RIGHT 12
#define CARMODTYPE_VENT_LEFT 13
#define CARMODTYPE_SIDESKIRT_R 14
#define CARMODTYPE_FRONT_BULLBAR 15
#define CARMODTYPE_REAR_BULLBAR 16
#define CARMODTYPE_STERN 17
#define CARMODTYPE_MAXIMUM 18
PHP:
enum vData
{
vTuning[CARMODTYPE_MAXIMUM]
};
new Data_Vehicle[MAX_VEHICLES][vData];
PHP:
public OnFilterScriptInit()
{
// Тут создание всего транспорта (детали тюнинга запрашивать не будем, поделим запрос) из БД
for(new i; i < MAX_VEHICLES; i++)
{
for(new j; j < CARMODTYPE_MAXIMUM; j++)
{
Data_Vehicle[i][vTuning][j] = -1;
// Запрос в БД о сохранённом тюнинге
if(Data_Vehicle[i][vTuning][j] != -1) AddVehicleComponent(i, Data_Vehicle[i][vTuning][j]);
}
}
return 1;
}
PHP:
public OnVehicleMod(playerid, vehicleid, componentid)
{
new componenttype = -1;
switch(componentid)
{
case 1017, 1027, 1030, 1039, 1040, 1051, 1052, 1062, 1063, 1071, 1072, 1094, 1099, 1101, 1102, 1107, 1120, 1121, 1124, 1137: componenttype = CARMODTYPE_SIDESKIRT_L;
case 1086: componenttype = CARMODTYPE_STEREO;
case 1117, 1152, 1153, 1155, 1157, 1160, 1165, 1166, 1169..1175, 1179, 1181, 1182, 1185, 1188..1191: componenttype = CARMODTYPE_FRONT_BUMPER;
case 1140, 1141, 1148..1151, 1154, 1156, 1159, 1161, 1167, 1168, 1176..1178, 1180, 1183, 1184, 1186, 1187, 1192, 1193: componenttype = CARMODTYPE_REAR_BUMPER;
case 1007, 1026, 1031, 1036, 1041, 1042, 1047, 1048, 1056, 1057, 1069, 1070, 1090, 1093, 1095, 1106, 1108, 1118, 1119, 1122, 1133, 1134: componenttype = CARMODTYPE_SIDESKIRT_R;
case 1100, 1115, 1116, 1123, 1125: componenttype = CARMODTYPE_FRONT_BULLBAR;
case 1109, 1110: componenttype = CARMODTYPE_REAR_BULLBAR;
case 1111, 1112: componenttype = CARMODTYPE_STERN; // на данном этапе недоступны в гаражах тюнинга
default: GetVehicleComponentType(componentid);
}
if(componenttype == -1) return SendClientMessage(playerid, -1, !"Invalid component type!");
Data_Vehicle[vehicleid][vTuning][componenttype] = componentid;
// Запрос в БД на сохранение тюнинга
return 1;
}
P.S. Проверьте, у кого БД подключена, работает или нет, я не тестировал.