Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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;
        }