3 Commits

Author SHA1 Message Date
85706518fe Update to SHVDN nightly (#70) 2024-06-30 16:17:35 +08:00
49208371d1 Allow keyboard layout change in chat 2023-12-12 11:52:20 -03:00
761156a574 Avoid vehicle door break and repair loop 2023-11-27 10:24:35 -03:00
19 changed files with 58 additions and 49 deletions

View File

@ -43,7 +43,7 @@ namespace RageCoop.Client
public static void ShowTimeStamps() public static void ShowTimeStamps()
{ {
GTA.UI.Notification.Hide(_lastNfHandle); GTA.UI.Notification.Hide(_lastNfHandle);
_lastNfHandle = GTA.UI.Notification.Show(Debug.TimeStamps.Dump()); _lastNfHandle = GTA.UI.Notification.PostTicker(TimeStamps.Dump(), false).Handle;
} }
} }

View File

@ -162,7 +162,7 @@ namespace RageCoop.Client
thread.SetApartmentState(ApartmentState.STA); thread.SetApartmentState(ApartmentState.STA);
thread.Start(); thread.Start();
thread.Join(); thread.Join();
GTA.UI.Notification.Show("Copied to clipboard, please paste it on the GitHub issue page!"); GTA.UI.Notification.PostTicker("Copied to clipboard, please paste it on the GitHub issue page!", false);
} }
} }

View File

@ -53,7 +53,7 @@ namespace RageCoop.Client
} }
catch catch
{ {
GTA.UI.Notification.Show("Malformed configuration, overwriting with default values..."); GTA.UI.Notification.PostTicker("Malformed configuration, overwriting with default values...", false);
Settings = new Settings(); Settings = new Settings();
Util.SaveSettings(); Util.SaveSettings();
} }
@ -79,7 +79,7 @@ namespace RageCoop.Client
} }
if (!_gameLoaded) if (!_gameLoaded)
{ {
GTA.UI.Notification.Show("~r~Please update your GTA5 to v1.0.1290 or newer!", true); GTA.UI.Notification.PostTicker("~r~Please update your GTA5 to v1.0.1290 or newer!", true);
_gameLoaded = true; _gameLoaded = true;
} }
}; };
@ -117,7 +117,7 @@ namespace RageCoop.Client
else if (!_gameLoaded && (_gameLoaded = true)) else if (!_gameLoaded && (_gameLoaded = true))
{ {
#if !NON_INTERACTIVE #if !NON_INTERACTIVE
GTA.UI.Notification.Show(GTA.UI.NotificationIcon.AllPlayersConf, "RAGECOOP", "Welcome!", $"Press ~g~{Main.Settings.MenuKey}~s~ to open the menu."); GTA.UI.Notification.PostMessageText($"Press ~g~{Settings.MenuKey}~s~ to open the menu.", new GTA.Graphics.TextureAsset("CHAR_ALL_PLAYERS_CONF", "CHAR_ALL_PLAYERS_CONF"), false, GTA.UI.FeedTextIcon.Message, "RAGECOOP", "Welcome!");
#endif #endif
} }
@ -304,7 +304,7 @@ namespace RageCoop.Client
Function.Call(Hash.SET_ENABLE_VEHICLE_SLIPSTREAMING, true); Function.Call(Hash.SET_ENABLE_VEHICLE_SLIPSTREAMING, true);
CoopMenu.ConnectedMenuSetting(); CoopMenu.ConnectedMenuSetting();
MainChat.Init(); MainChat.Init();
GTA.UI.Notification.Show("~g~Connected!"); GTA.UI.Notification.PostTicker("~g~Connected!", false);
}); });
Logger.Info(">> Connected <<"); Logger.Info(">> Connected <<");
@ -327,7 +327,7 @@ namespace RageCoop.Client
Function.Call(Hash.SET_ENABLE_VEHICLE_SLIPSTREAMING, false); Function.Call(Hash.SET_ENABLE_VEHICLE_SLIPSTREAMING, false);
CoopMenu.DisconnectedMenuSetting(); CoopMenu.DisconnectedMenuSetting();
if (reason != "Abort") if (reason != "Abort")
GTA.UI.Notification.Show("~r~Disconnected: " + reason); GTA.UI.Notification.PostTicker("~r~Disconnected: " + reason, false);
LocalPlayerID = default; LocalPlayerID = default;
}); });
Memory.RestorePatches(); Memory.RestorePatches();

View File

@ -99,7 +99,7 @@ namespace RageCoop.Client.Menus
Game.DisableAllControlsThisFrame(); Game.DisableAllControlsThisFrame();
MenuPool.Process(); MenuPool.Process();
var scaleform = new Scaleform("instructional_buttons"); var scaleform = Scaleform.RequestMovie("instructional_buttons");
scaleform.CallFunction("CLEAR_ALL"); scaleform.CallFunction("CLEAR_ALL");
scaleform.CallFunction("TOGGLE_MOUSE_BUTTONS", 0); scaleform.CallFunction("TOGGLE_MOUSE_BUTTONS", 0);
scaleform.CallFunction("CREATE_CONTAINER"); scaleform.CallFunction("CREATE_CONTAINER");

View File

@ -85,7 +85,7 @@ namespace RageCoop.Client.Menus
if (server.useZT) if (server.useZT)
{ {
address = $"{server.ztAddress}:{server.port}"; address = $"{server.ztAddress}:{server.port}";
Notification.Show($"~y~Joining ZeroTier network... {server.ztID}"); Notification.PostTicker($"~y~Joining ZeroTier network... {server.ztID}", false);
if (ZeroTierHelper.Join(server.ztID) == null) if (ZeroTierHelper.Join(server.ztID) == null)
{ {
throw new Exception("Failed to obtain ZeroTier network IP"); throw new Exception("Failed to obtain ZeroTier network IP");
@ -102,10 +102,10 @@ namespace RageCoop.Client.Menus
} }
catch (Exception ex) catch (Exception ex)
{ {
Notification.Show($"~r~{ex.Message}"); Notification.PostTicker($"~r~{ex.Message}", false);
if (server.useZT) if (server.useZT)
{ {
Notification.Show($"Make sure ZeroTier is correctly installed, download it from https://www.zerotier.com/"); Notification.PostTicker($"Make sure ZeroTier is correctly installed, download it from https://www.zerotier.com/", false);
} }
} }
}; };

View File

@ -31,6 +31,7 @@ namespace RageCoop.Client
} }
private ulong LastMessageTime { get; set; } private ulong LastMessageTime { get; set; }
private Keys LastKey { get; set; }
private bool CurrentHidden { get; set; } private bool CurrentHidden { get; set; }
private bool Hidden private bool Hidden
@ -56,7 +57,7 @@ namespace RageCoop.Client
public Chat() public Chat()
{ {
MainScaleForm = new Scaleform("multiplayer_chat"); MainScaleForm = Scaleform.RequestMovie("multiplayer_chat");
} }
public void Init() public void Init()
@ -115,6 +116,10 @@ namespace RageCoop.Client
MainScaleForm.CallFunction("PAGE_DOWN"); MainScaleForm.CallFunction("PAGE_DOWN");
} }
if (key == Keys.Menu && LastKey == Keys.ShiftKey)
ActivateKeyboardLayout(1, 0);
LastKey = key;
string keyChar = GetCharFromKey(key, Game.IsKeyPressed(Keys.ShiftKey), false); string keyChar = GetCharFromKey(key, Game.IsKeyPressed(Keys.ShiftKey), false);
if (keyChar.Length == 0) if (keyChar.Length == 0)
@ -174,5 +179,8 @@ namespace RageCoop.Client
ToUnicodeEx((uint)key, 0, keyboardState, buf, 256, 0, InputLanguage.CurrentInputLanguage.Handle); ToUnicodeEx((uint)key, 0, keyboardState, buf, 256, 0, InputLanguage.CurrentInputLanguage.Handle);
return buf.ToString(); return buf.ToString();
} }
[DllImport("user32.dll")]
public static extern int ActivateKeyboardLayout(int hkl, uint flags);
} }
} }

View File

@ -34,7 +34,7 @@ namespace RageCoop.Client
{ {
_publicKeyReceived.Set(); _publicKeyReceived.Set();
IsConnecting = false; IsConnecting = false;
Main.QueueAction(() => Notification.Show("Connection has been canceled")); Main.QueueAction(() => Notification.PostTicker("Connection has been canceled", false));
Peer?.Shutdown("Bye"); Peer?.Shutdown("Bye");
} }
else if (IsOnServer) else if (IsOnServer)
@ -104,7 +104,7 @@ namespace RageCoop.Client
#endif #endif
} }
}; };
Main.QueueAction(() => { Notification.Show($"~y~Trying to connect..."); }); Main.QueueAction(() => { Notification.PostTicker($"~y~Trying to connect...", false); });
Menus.CoopMenu._serverConnectItem.Enabled = false; Menus.CoopMenu._serverConnectItem.Enabled = false;
Security.Regen(); Security.Regen();
if (publicKey == null) if (publicKey == null)
@ -139,7 +139,7 @@ namespace RageCoop.Client
catch (Exception ex) catch (Exception ex)
{ {
Main.Logger.Error("Cannot connect to server: ", ex); Main.Logger.Error("Cannot connect to server: ", ex);
Main.QueueAction(() => Notification.Show("Cannot connect to server: " + ex.Message)); Main.QueueAction(() => Notification.PostTicker("Cannot connect to server: " + ex.Message, false));
} }
IsConnecting = false; IsConnecting = false;
}); });
@ -159,7 +159,7 @@ namespace RageCoop.Client
Main.Logger.Debug($"player connected:{p.Username}"); Main.Logger.Debug($"player connected:{p.Username}");
Main.QueueAction(() => Main.QueueAction(() =>
GTA.UI.Notification.Show($"~h~{p.Username}~h~ connected.")); Notification.PostTicker($"~h~{p.Username}~h~ connected.", false));
} }
private static void PlayerDisconnect(Packets.PlayerDisconnect packet) private static void PlayerDisconnect(Packets.PlayerDisconnect packet)
{ {
@ -169,7 +169,7 @@ namespace RageCoop.Client
Main.QueueAction(() => Main.QueueAction(() =>
{ {
EntityPool.RemoveAllFromPlayer(packet.PedID); EntityPool.RemoveAllFromPlayer(packet.PedID);
GTA.UI.Notification.Show($"~h~{player.Username}~h~ left."); Notification.PostTicker($"~h~{player.Username}~h~ left.", false);
}); });
} }

View File

@ -307,7 +307,8 @@ namespace RageCoop.Client
if (c == null) if (c == null)
{ {
if (EntityPool.PedsByID.Count(x => x.Value.OwnerID == packet.OwnerID) < Main.Settings.WorldPedSoftLimit / PlayerList.Players.Count || if (EntityPool.PedsByID.Count(x => x.Value.OwnerID == packet.OwnerID) < Main.Settings.WorldPedSoftLimit / PlayerList.Players.Count ||
EntityPool.VehiclesByID.Any(x => x.Value.Position.DistanceTo(packet.Position) < 2) || packet.ID == packet.OwnerID) /*EntityPool.VehiclesByID.Any(x => x.Value.Position.DistanceTo(packet.Position) < 2) ||*/ // allows players to exceed the peds limit
packet.ID == packet.OwnerID)
{ {
// Main.Logger.Debug($"Creating character for incoming sync:{packet.ID}"); // Main.Logger.Debug($"Creating character for incoming sync:{packet.ID}");
EntityPool.ThreadSafe.Add(c = new SyncedPed(packet.ID)); EntityPool.ThreadSafe.Add(c = new SyncedPed(packet.ID));

View File

@ -126,7 +126,7 @@ namespace RageCoop.Client
packet.Position = veh.ReadPosition(); packet.Position = veh.ReadPosition();
packet.Velocity = veh.Velocity; packet.Velocity = veh.Velocity;
packet.Quaternion = veh.ReadQuaternion(); packet.Quaternion = veh.ReadQuaternion();
packet.RotationVelocity = veh.RotationVelocity; packet.RotationVelocity = veh.LocalRotationVelocity;
packet.ThrottlePower = veh.ThrottlePower; packet.ThrottlePower = veh.ThrottlePower;
packet.BrakePower = veh.BrakePower; packet.BrakePower = veh.BrakePower;
v.LastSentStopWatch.Restart(); v.LastSentStopWatch.Restart();

View File

@ -13,7 +13,7 @@ namespace RageCoop.Client
{ {
private const float LEFT_POSITION = 0.122f; private const float LEFT_POSITION = 0.122f;
private const float RIGHT_POSITION = 0.9f; private const float RIGHT_POSITION = 0.9f;
private static readonly Scaleform _mainScaleform = new Scaleform("mp_mm_card_freemode"); private static readonly Scaleform _mainScaleform = Scaleform.RequestMovie("mp_mm_card_freemode");
private static ulong _lastUpdate = Util.GetTickCount64(); private static ulong _lastUpdate = Util.GetTickCount64();
public static ulong Pressed { get; set; } public static ulong Pressed { get; set; }

View File

@ -31,7 +31,7 @@ namespace RageCoop.Client.Scripting
API.RegisterCustomEventHandler(CustomEvents.UpdatePedBlip, UpdatePedBlip); API.RegisterCustomEventHandler(CustomEvents.UpdatePedBlip, UpdatePedBlip);
API.RegisterCustomEventHandler(CustomEvents.IsHost, (e) => { _isHost = (bool)e.Args[0]; }); API.RegisterCustomEventHandler(CustomEvents.IsHost, (e) => { _isHost = (bool)e.Args[0]; });
API.RegisterCustomEventHandler(CustomEvents.WeatherTimeSync, WeatherTimeSync); API.RegisterCustomEventHandler(CustomEvents.WeatherTimeSync, WeatherTimeSync);
API.RegisterCustomEventHandler(CustomEvents.OnPlayerDied, (e) => { GTA.UI.Notification.Show((string)e.Args[0]); }); API.RegisterCustomEventHandler(CustomEvents.OnPlayerDied, (e) => { GTA.UI.Notification.PostTicker((string)e.Args[0], false); });
Task.Run(() => Task.Run(() =>
{ {
while (true) while (true)
@ -42,12 +42,11 @@ namespace RageCoop.Client.Scripting
{ {
unsafe unsafe
{ {
var time = World.CurrentTimeOfDay;
int weather1 = default(int); int weather1 = default(int);
int weather2 = default(int); int weather2 = default(int);
float percent2 = default(float); float percent2 = default(float);
Function.Call(Hash.GET_CURR_WEATHER_STATE, &weather1, &weather2, &percent2); Function.Call(Hash.GET_CURR_WEATHER_STATE, &weather1, &weather2, &percent2);
API.SendCustomEvent(CustomEvents.WeatherTimeSync, time.Hours, time.Minutes, time.Seconds, weather1, weather2, percent2); API.SendCustomEvent(CustomEvents.WeatherTimeSync, GTA.Chrono.GameClock.Hour, GTA.Chrono.GameClock.Minute, GTA.Chrono.GameClock.Second, weather1, weather2, percent2);
} }
}); });
} }
@ -59,7 +58,9 @@ namespace RageCoop.Client.Scripting
private void WeatherTimeSync(CustomEventReceivedArgs e) private void WeatherTimeSync(CustomEventReceivedArgs e)
{ {
World.CurrentTimeOfDay = new TimeSpan((int)e.Args[0], (int)e.Args[1], (int)e.Args[2]); GTA.Chrono.GameClock.Hour = (int)e.Args[0];
GTA.Chrono.GameClock.Minute = (int)e.Args[1];
GTA.Chrono.GameClock.Second = (int)e.Args[2];
Function.Call(Hash.SET_CURR_WEATHER_STATE, (int)e.Args[3], (int)e.Args[4], (float)e.Args[5]); Function.Call(Hash.SET_CURR_WEATHER_STATE, (int)e.Args[3], (int)e.Args[4], (float)e.Args[5]);
} }

View File

@ -29,7 +29,7 @@ namespace RageCoop.Client
OwnerID = Main.LocalPlayerID; OwnerID = Main.LocalPlayerID;
//Function.Call(Hash.SET_PED_IS_IGNORED_BY_AUTO_OPEN_DOORS, false); //Function.Call(Hash.SET_PED_IS_IGNORED_BY_AUTO_OPEN_DOORS, false);
MainPed.SetConfigFlag((int)PedConfigFlags.CPED_CONFIG_FLAG_DisableHurt, true); MainPed.SetConfigFlag(PedConfigFlagToggles.DisableHurt, true);
// MainPed.SetConfigFlag((int)PedConfigFlags.CPED_CONFIG_FLAG_DisableMelee, true); // MainPed.SetConfigFlag((int)PedConfigFlags.CPED_CONFIG_FLAG_DisableMelee, true);
} }
@ -245,16 +245,15 @@ namespace RageCoop.Client
Function.Call(Hash.SET_PED_IS_IGNORED_BY_AUTO_OPEN_DOORS, false); Function.Call(Hash.SET_PED_IS_IGNORED_BY_AUTO_OPEN_DOORS, false);
Function.Call(Hash.SET_PED_CAN_EVASIVE_DIVE, MainPed.Handle, false); Function.Call(Hash.SET_PED_CAN_EVASIVE_DIVE, MainPed.Handle, false);
MainPed.SetConfigFlag((int)PedConfigFlags.CPED_CONFIG_FLAG_DrownsInWater, false); MainPed.SetConfigFlag(PedConfigFlagToggles.DrownsInWater, false);
MainPed.SetConfigFlag((int)PedConfigFlags.CPED_CONFIG_FLAG_DisableHurt, true); MainPed.SetConfigFlag(PedConfigFlagToggles.DisableHurt, true);
MainPed.SetConfigFlag((int)PedConfigFlags.CPED_CONFIG_FLAG_DisableExplosionReactions, true); MainPed.SetConfigFlag(PedConfigFlagToggles.DisableExplosionReactions, true);
MainPed.SetConfigFlag((int)PedConfigFlags.CPED_CONFIG_FLAG_AvoidTearGas, false); MainPed.SetConfigFlag(PedConfigFlagToggles.AvoidTearGas, false);
MainPed.SetConfigFlag((int)PedConfigFlags.CPED_CONFIG_FLAG_IgnoreBeingOnFire, true); MainPed.SetConfigFlag(PedConfigFlagToggles.IgnoreBeingOnFire, true);
MainPed.SetConfigFlag((int)PedConfigFlags.CPED_CONFIG_FLAG_DisableEvasiveDives, true); MainPed.SetConfigFlag(PedConfigFlagToggles.DisableEvasiveDives, true);
MainPed.SetConfigFlag((int)PedConfigFlags.CPED_CONFIG_FLAG_DisablePanicInVehicle, true); MainPed.SetConfigFlag(PedConfigFlagToggles.DisablePanicInVehicle, true);
MainPed.SetConfigFlag((int)PedConfigFlags.CPED_CONFIG_FLAG_BlockNonTemporaryEvents, true); MainPed.SetConfigFlag(PedConfigFlagToggles.BlockNonTemporaryEvents, true);
MainPed.SetConfigFlag((int)PedConfigFlags.CPED_CONFIG_FLAG_DisableShockingEvents, true); MainPed.SetConfigFlag(PedConfigFlagToggles.DisableShockingEvents, true);
MainPed.SetConfigFlag((int)PedConfigFlags.CPED_CONFIG_FLAG_DisableHurt, true);
SetClothes(); SetClothes();
@ -546,7 +545,7 @@ namespace RageCoop.Client
{ {
if (Velocity == default) if (Velocity == default)
{ {
MainPed.Task.AimAt(AimCoords, 1000); MainPed.Task.AimGunAtPosition(AimCoords, 1000);
} }
else else
{ {

View File

@ -142,7 +142,7 @@ namespace RageCoop.Client
if (LightsOn != MainVehicle.AreLightsOn) if (LightsOn != MainVehicle.AreLightsOn)
{ {
MainVehicle.AreLightsOn = LightsOn; MainVehicle.SetScriptedLightSetting(LightsOn ? ScriptedVehicleLightSetting.SetVehicleLightsOn : ScriptedVehicleLightSetting.SetVehicleLightsOff);
} }
if (HighBeamsOn != MainVehicle.AreHighBeamsOn) if (HighBeamsOn != MainVehicle.AreHighBeamsOn)
@ -285,10 +285,10 @@ namespace RageCoop.Client
if (IsFlipped || (calirot = GetCalibrationRotation()).Length() > 50) if (IsFlipped || (calirot = GetCalibrationRotation()).Length() > 50)
{ {
MainVehicle.Quaternion = Quaternion.Slerp(MainVehicle.ReadQuaternion(), Quaternion, 0.5f); MainVehicle.Quaternion = Quaternion.Slerp(MainVehicle.ReadQuaternion(), Quaternion, 0.5f);
MainVehicle.RotationVelocity = RotationVelocity; MainVehicle.LocalRotationVelocity = RotationVelocity;
return; return;
} }
MainVehicle.RotationVelocity = RotationVelocity + calirot * 0.2f; MainVehicle.LocalRotationVelocity = RotationVelocity + calirot * 0.2f;
} }
private Vector3 GetCalibrationRotation() private Vector3 GetCalibrationRotation()
{ {

View File

@ -135,7 +135,7 @@ namespace RageCoop.Client
_lastWeaponHash = weaponHash; _lastWeaponHash = weaponHash;
} }
if (!_weaponAsset.IsLoaded) { _weaponAsset.Request(); } if (!_weaponAsset.IsLoaded) { _weaponAsset.Request(); }
World.ShootBullet(start, end, p, _weaponAsset, (int)p.GetWeaponDamage(weaponHash)); World.ShootSingleBullet(start, end, (int)p.GetWeaponDamage(weaponHash), _weaponAsset, p);
Prop w; Prop w;
if (((w = p.Weapons.CurrentWeaponObject) != null) && (p.VehicleWeapon == VehicleWeaponHash.Invalid)) if (((w = p.Weapons.CurrentWeaponObject) != null) && (p.VehicleWeapon == VehicleWeaponHash.Invalid))
{ {

View File

@ -40,7 +40,7 @@ namespace RageCoop.Client
{ {
// Weapon/radio wheel slow-mo patch // Weapon/radio wheel slow-mo patch
// Thanks @CamxxCore, https://github.com/CamxxCore/GTAVWeaponWheelMod // Thanks @CamxxCore, https://github.com/CamxxCore/GTAVWeaponWheelMod
var result = NativeMemory.FindPattern("\x38\x51\x64\x74\x19", "xxxxx"); var result = MemScanner.FindPatternBmh("\x38\x51\x64\x74\x19", "xxxxx");
if (result == null) { throw new NotSupportedException("Can't find memory pattern to patch weapon/radio slow-mo"); } if (result == null) { throw new NotSupportedException("Can't find memory pattern to patch weapon/radio slow-mo"); }
var address = result + 26; var address = result + 26;
address = address + *(int*)address + 4u; address = address + *(int*)address + 4u;
@ -91,7 +91,7 @@ namespace RageCoop.Client
var foundOffsets = new List<int>(100); var foundOffsets = new List<int>(100);
for (int i = 0; i <= range; i++) for (int i = 0; i <= range; i++)
{ {
var val = NativeMemory.ReadFloat(start + i); var val = MemDataMarshal.ReadFloat(start + i);
if (Math.Abs(val - toSearch) < tolerance) if (Math.Abs(val - toSearch) < tolerance)
{ {
foundOffsets.Add(i); foundOffsets.Add(i);

View File

@ -201,7 +201,7 @@ namespace RageCoop.Client
return v; return v;
} }
public static void ApplyForce(this Entity e, int boneIndex, Vector3 direction, Vector3 rotation = default(Vector3), ForceType forceType = ForceType.MaxForceRot2) public static void ApplyForce(this Entity e, int boneIndex, Vector3 direction, Vector3 rotation = default(Vector3), ForceType forceType = ForceType.ExternalImpulse)
{ {
Function.Call(Hash.APPLY_FORCE_TO_ENTITY, e.Handle, forceType, direction.X, direction.Y, direction.Z, rotation.X, rotation.Y, rotation.Z, boneIndex, false, true, true, false, true); Function.Call(Hash.APPLY_FORCE_TO_ENTITY, e.Handle, forceType, direction.X, direction.Y, direction.Z, rotation.X, rotation.Y, rotation.Z, boneIndex, false, true, true, false, true);
} }
@ -244,7 +244,7 @@ namespace RageCoop.Client
} }
lineList.Add("ReloadKey=Insert"); lineList.Add("ReloadKey=Insert");
File.WriteAllLines("ScriptHookVDotNet.ini", lineList.ToArray()); File.WriteAllLines("ScriptHookVDotNet.ini", lineList.ToArray());
GTA.UI.Notification.Show("Reload cannot be performed automatically, please type \"Reload()\" manually in the SHVDN console."); GTA.UI.Notification.PostTicker("Reload cannot be performed automatically, please type \"Reload()\" manually in the SHVDN console.", false);
} }
Keys key = (Keys)Enum.Parse(typeof(Keys), reloadKey, true); Keys key = (Keys)Enum.Parse(typeof(Keys), reloadKey, true);
@ -259,7 +259,7 @@ namespace RageCoop.Client
} }
catch (Exception ex) catch (Exception ex)
{ {
GTA.UI.Notification.Show(ex.Message); GTA.UI.Notification.PostTicker(ex.Message, false);
} }
PostMessage(System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle, WM_KEYDOWN, (int)key, 0); PostMessage(System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle, WM_KEYDOWN, (int)key, 0);

View File

@ -174,12 +174,12 @@ namespace RageCoop.Client
} }
continue; continue;
} }
else if (door.IsBroken) /*else if (door.IsBroken) // causes break/repair loop in some situations
{ {
// The vehicle can only fix a door if the vehicle was completely fixed // The vehicle can only fix a door if the vehicle was completely fixed
veh.Repair(); veh.Repair();
return; return;
} }*/
if ((model.OpenedDoors & (byte)(1 << i)) != 0) if ((model.OpenedDoors & (byte)(1 << i)) != 0)
{ {
if ((!door.IsOpen) && (!door.IsBroken)) if ((!door.IsOpen) && (!door.IsBroken))
@ -196,10 +196,10 @@ namespace RageCoop.Client
{ {
veh.Windows[(VehicleWindowIndex)i].Smash(); veh.Windows[(VehicleWindowIndex)i].Smash();
} }
else if (!veh.Windows[(VehicleWindowIndex)i].IsIntact) /*else if (!veh.Windows[(VehicleWindowIndex)i].IsIntact) // causes smash/repair loop in some situations
{ {
veh.Windows[(VehicleWindowIndex)i].Repair(); veh.Windows[(VehicleWindowIndex)i].Repair();
} }*/
} }
foreach (VehicleWheel wheel in veh.Wheels) foreach (VehicleWheel wheel in veh.Wheels)

Binary file not shown.

Binary file not shown.