public static VehicleDamageModel GetVehicleDamageModel(this Vehicle veh) { if (veh == null || !veh.Exists()) { return(new VehicleDamageModel()); } var mod = new VehicleDamageModel() { BrokenDoors = 0, BrokenWindows = 0 }; for (int i = 0; i < 8; i++) { if (veh.Doors[(VehicleDoorIndex)i].IsBroken) { mod.BrokenDoors |= (byte)(1 << i); } if (!veh.Windows[(VehicleWindowIndex)i].IsIntact) { mod.BrokenWindows |= (byte)(1 << i); } } /* * var memAdd = veh.MemoryAddress; * if (memAdd != IntPtr.Zero) * { * mod.BrokenLights = MemoryAccess.ReadInt(memAdd + 0x79C); // Old: 0x77C * } */ return(mod); }
public static void SetVehicleDamageModel(this Vehicle veh, VehicleDamageModel model, bool leavedoors = true) { if (veh == null || model == null || !veh.Exists()) { return; } bool isinvincible = veh.IsInvincible; veh.IsInvincible = false; // set doors for (int i = 0; i < 8; i++) { if ((model.BrokenDoors & (byte)(1 << i)) != 0) { veh.Doors[(VehicleDoorIndex)i].Break(leavedoors); } if ((model.BrokenWindows & (byte)(1 << i)) != 0) { veh.Windows[(VehicleWindowIndex)i].Smash(); } else if (!veh.Windows[(VehicleWindowIndex)i].IsIntact) { veh.Windows[(VehicleWindowIndex)i].Repair(); } } /* * var addr = veh.MemoryAddress; * if (addr != IntPtr.Zero) * { * MemoryAccess.WriteInt(addr + 0x79C, model.BrokenLights); // 0x784 ? * } */ veh.IsInvincible = isinvincible; }