Всем доброго времени суток! Проблема такая, когда я пытаюсь отремантировать двери или бампера с помощью этой функции (которая в названии темы), то реакции нет. Причём нет именно тогда, когда сломоно что-то ещё. Если же к примеру сломана одна дверь или 2 двери на одной стороне, то они ремонтируются. Идея заключается в том что бы каждая деталь автомобиля востонавливалась отдельно. Исключая конечно же задние двери, так как их состояние нельзя определить. |
stock RepairVehicleElement(vehicleid, type_element, element, newstate)
{
new p, d, l, t;
new door_bonnet, door_boot, door_driver, door_passenger;
new front_left_panel, front_right_panel, rear_left_panel, rear_right_panel, windshield, front_bumper, rear_bumper;
new rear_right_tire, front_right_tire, rear_left_tire, front_left_tire;
GetVehicleDamageStatus(vehicleid, p, d, l, t);
if(type_element == 1)
{
decode_panels(p, front_left_panel, front_right_panel, rear_left_panel, rear_right_panel, windshield, front_bumper, rear_bumper);
if(element == 1) { p = encode_panels(newstate, front_right_panel, rear_left_panel, rear_right_panel, windshield, front_bumper, rear_bumper); }
else if(element == 2) { p = encode_panels(front_left_panel, newstate, rear_left_panel, rear_right_panel, windshield, front_bumper, rear_bumper); }
else if(element == 3) { p = encode_panels(front_left_panel, front_right_panel, newstate, rear_right_panel, windshield, front_bumper, rear_bumper); }
else if(element == 4) { p = encode_panels(front_left_panel, front_right_panel, rear_left_panel, newstate, windshield, front_bumper, rear_bumper); }
else if(element == 5) { p = encode_panels(front_left_panel, front_right_panel, rear_left_panel, rear_right_panel, newstate, front_bumper, rear_bumper); }
else if(element == 6) { p = encode_panels(front_left_panel, front_right_panel, rear_left_panel, rear_right_panel, windshield, newstate, rear_bumper); l = encode_lights(0, 0, 0, 0); }
else if(element == 7) { p = encode_panels(front_left_panel, front_right_panel, rear_left_panel, rear_right_panel, windshield, front_bumper, newstate); }
}
else if(type_element == 2)
{
decode_doors(d, door_bonnet, door_boot, door_driver, door_passenger);
if(element == 1) { d = encode_doors(newstate, door_boot, door_driver, door_passenger, 0, 0); }
else if(element == 2) { d = encode_doors(door_bonnet, newstate, door_driver, door_passenger, 0, 0); }
else if(element == 3) { d = encode_doors(door_bonnet, door_boot, newstate, door_passenger, 0, 0); }
else if(element == 4) { d = encode_doors(door_bonnet, door_boot, door_driver, newstate, 0, 0); }
}
else if(type_element == 3)
{
decode_tires(t, rear_right_tire, front_right_tire, rear_left_tire, front_left_tire);
if(element == 1) { t = encode_tires(newstate, front_right_tire, rear_left_tire, front_left_tire); }
else if(element == 2) { t = encode_tires(rear_right_tire, newstate, rear_left_tire, front_left_tire); }
else if(element == 3) { t = encode_tires(rear_right_tire, front_right_tire, newstate, front_left_tire); }
else if(element == 4) { t = encode_tires(rear_right_tire, front_right_tire, rear_left_tire, newstate); }
}
UpdateVehicleDamageStatus(vehicleid, p, d, l, t);
return 1;
}
encode_doors(xebonnet, xeboot, driver_door, passenger_door, behind_driver_door, behind_passenger_door)
{
#pragma unused behind_driver_door
#pragma unused behind_passenger_door
return xebonnet | (xeboot << 8) | (driver_door << 16) | (passenger_door << 24);
}
encode_panels(flp, frp, rlp, rrp, windshield, front_bumper, rear_bumper)
{
return flp | (frp << 4) | (rlp << 8) | (rrp << 12) | (windshield << 16) | (front_bumper << 20) | (rear_bumper << 24);
}
encode_tires(tire1, tire2, tire3, tire4) return tire1 | (tire2 << 1) | (tire3 << 2) | (tire4 << 3);