79 {
80 Object tgObject = action_data.m_Target.GetObject();
81
82 string damageZone = RepairCarPartActionData.Cast(action_data).m_DamageZone;
85
86 if (tgObject)
87 {
88 CarDoor carDoor = CarDoor.Cast(tgObject);
89 if (carDoor)
90 {
91 int newDmgLevel = Math.Clamp(carDoor.GetHealthLevel(damageZone) - 1, GameConstants.STATE_WORN, GameConstants.STATE_RUINED);
92 float zoneMax = carDoor.GetMaxHealth("", "");
93 float randomValue = Math.RandomFloatInclusive(zoneMax * 0.05, zoneMax * 0.15);
94
95 switch (newDmgLevel)
96 {
97 case GameConstants.STATE_BADLY_DAMAGED:
98 carDoor.SetHealth("", "", (zoneMax * GameConstants.DAMAGE_RUINED_VALUE) + randomValue);
99 break;
100
101 case GameConstants.STATE_DAMAGED:
102 carDoor.SetHealth("", "", (zoneMax * GameConstants.DAMAGE_BADLY_DAMAGED_VALUE) + randomValue);
103 break;
104
105 case GameConstants.STATE_WORN:
106 carDoor.SetHealth("", "", (zoneMax * GameConstants.DAMAGE_DAMAGED_VALUE) + randomValue);
107 break;
108
109 default:
110 break;
111 }
112
113 if (action_data.m_MainItem.HasQuantity())
114 {
115 if (action_data.m_MainItem.GetQuantity() > 1)
116 {
117 int qnt = action_data.m_MainItem.GetQuantity();
118 qnt -= action_data.m_MainItem.GetQuantityMax() * 0.25;
119 action_data.m_MainItem.SetQuantity(qnt);
120 }
121 else
122 action_data.m_MainItem.Delete();
123 }
124 }
125 }
126 }
string m_CurrentDamageZone
proto native CGame GetGame()