Алгоритм фиксирования HP автомобиля
Друзья, мне необходимо составить наиболее эффективный и наименее затратный алгоритм фиксирования HP автомобиля.
Наверняка многие из вас играли на Role Play серверах и там при повреждении автомобиля до определенного уровня HP, он якобы ломался.
Я сделал подобную систему через OnVehicleDamageStatusUpdate, но изначально было понятно что она не будет работать как нужно. Так как в колбэке имеются возвращаемые vehicleid and playerid мы сможем узнавать HP автомобиля, но к сожалению не сможем получать урон при ударе об стену (конечно можно использовать глобальную переменную и создать некую формулу).
Даже если вопрос с уроном решить костыльным (на мой взгляд) способом, то колбэк OnVehicleDamageStatusUpdate кажется не срабатывает когда по автомобилю наносят урон с оружия (но это не точно) следовательно необходимо получать и записывать HP автомобиля в таймере, но опять же возникает следующая проблема, а именно то что когда автомобиль якобы сломался и далее по нему нанесли еще какой-то урон, то автомобиль снова якобы сломается (видно будет на примере мою мысль), то есть он никогда не взорвется, хотя по моей идее он должен уже загореться и взорваться, это можно исправить используя переменную с булевым значением (но это опять костыль...).
То бишь подведем итог: мне необходимо сделать так, чтобы когда HP автомобиля достигала менее 300 единиц, то автомобиль ломался, а если уже по поломанному автомобилю нанесли еще урон - он взрывался.
То что было сделано мною ранее:
Код:
vehicle_OnVehicleDamageStatusUp(vehicleid, playerid)
{
new Float:carhp, engine,lights,alarm,doors,bonnet,boot,objective;
GetVehicleHealth(vehicleid, carhp);
if(carhp > 0 && carhp < 300)
{
GameTextForPlayer(playerid,"~r~ENGINE DAMAGED", 3000, 3);
GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
SetVehicleParamsEx(vehicleid,false,false,alarm,doors,bonnet,boot,objective);
SetVehicleHealth(vehicleid, 300.0);
}
return 1;
}