Сообщение от
VVWVV
Реализация хорошая. Но, тем не менее, можно сделать проверку на существование т/с в игре.
- Некорректное название функции (OnVehicleEngineStarts подходит для события (запуск двигателя), которое уже произошло).
- Некорректные возвращаемые значения (всё вперемешку, 1, SendClientMessage, SetVehicleParamsEx).
- Разный стиль в одной функции (смысла запихивать проверку в return нет, ерунда с отступами).
- Непонятно с какой целью скомкан код.
- 1 вместо VEHICLE_PARAM_ON.
- Может быть лишний вызов GetVehicleParamsEx, ибо условие random(100) > percent расположено ниже.
Сообщение от
Geebrox
Добавил
Это делается не так.
Более адекватная версия:
PHP код:
forward TryToStartVehicleEngine(vehicleid, playerid);
public TryToStartVehicleEngine(vehicleid, playerid)
{
new Float:health;
if (!GetVehicleHealth(vehicleid, health)) {
return 0;
}
new percent = floatround(health)/10;
if (percent <= 25) {
SendClientMessage(playerid, -1,
!"{CD0000}Двигатель вышел из строя, вызовите механика!");
return 0;
}
if (percent < random(100)) {
SendClientMessage(playerid, -1,
!"{CD0000}Не удалось завести двигатель, повторите попытку!");
return 0;
}
new g_en_lights, g_en_alarm, g_en_doors, g_en_bonnet, g_en_boot,
g_en_objective;
GetVehicleParamsEx(vehicleid, g_en_lights, g_en_lights,
g_en_alarm, g_en_doors, g_en_bonnet, g_en_boot, g_en_objective);
SetVehicleParamsEx(vehicleid, VEHICLE_PARAMS_ON, g_en_lights,
g_en_alarm, g_en_doors, g_en_bonnet, g_en_boot, g_en_objective);
return 1;
}
Но, на самом деле, в программировании принято разделять логику и представление, это значит, что SendClientMessage лучше вынести в команду и возвращать код ошибки.