diff --git a/RageCoop.Client/Debug.cs b/RageCoop.Client/Debug.cs index 61e7531..78e7b34 100644 --- a/RageCoop.Client/Debug.cs +++ b/RageCoop.Client/Debug.cs @@ -43,7 +43,7 @@ namespace RageCoop.Client public static void ShowTimeStamps() { GTA.UI.Notification.Hide(_lastNfHandle); - _lastNfHandle = GTA.UI.Notification.Show(Debug.TimeStamps.Dump()); + _lastNfHandle = GTA.UI.Notification.PostTicker(TimeStamps.Dump(), false).Handle; } } diff --git a/RageCoop.Client/DevTools/DevTool.cs b/RageCoop.Client/DevTools/DevTool.cs index 6c2b48f..08eee83 100644 --- a/RageCoop.Client/DevTools/DevTool.cs +++ b/RageCoop.Client/DevTools/DevTool.cs @@ -162,7 +162,7 @@ namespace RageCoop.Client thread.SetApartmentState(ApartmentState.STA); thread.Start(); 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); } } diff --git a/RageCoop.Client/Main.cs b/RageCoop.Client/Main.cs index 1a8f1a9..7976186 100644 --- a/RageCoop.Client/Main.cs +++ b/RageCoop.Client/Main.cs @@ -53,7 +53,7 @@ namespace RageCoop.Client } 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(); Util.SaveSettings(); } @@ -79,7 +79,7 @@ namespace RageCoop.Client } 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; } }; @@ -117,7 +117,7 @@ namespace RageCoop.Client else if (!_gameLoaded && (_gameLoaded = true)) { #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 } @@ -304,7 +304,7 @@ namespace RageCoop.Client Function.Call(Hash.SET_ENABLE_VEHICLE_SLIPSTREAMING, true); CoopMenu.ConnectedMenuSetting(); MainChat.Init(); - GTA.UI.Notification.Show("~g~Connected!"); + GTA.UI.Notification.PostTicker("~g~Connected!", false); }); Logger.Info(">> Connected <<"); @@ -327,7 +327,7 @@ namespace RageCoop.Client Function.Call(Hash.SET_ENABLE_VEHICLE_SLIPSTREAMING, false); CoopMenu.DisconnectedMenuSetting(); if (reason != "Abort") - GTA.UI.Notification.Show("~r~Disconnected: " + reason); + GTA.UI.Notification.PostTicker("~r~Disconnected: " + reason, false); LocalPlayerID = default; }); Memory.RestorePatches(); diff --git a/RageCoop.Client/Menus/CoopMenu.cs b/RageCoop.Client/Menus/CoopMenu.cs index ceb1e72..40c6b79 100644 --- a/RageCoop.Client/Menus/CoopMenu.cs +++ b/RageCoop.Client/Menus/CoopMenu.cs @@ -99,7 +99,7 @@ namespace RageCoop.Client.Menus Game.DisableAllControlsThisFrame(); MenuPool.Process(); - var scaleform = new Scaleform("instructional_buttons"); + var scaleform = Scaleform.RequestMovie("instructional_buttons"); scaleform.CallFunction("CLEAR_ALL"); scaleform.CallFunction("TOGGLE_MOUSE_BUTTONS", 0); scaleform.CallFunction("CREATE_CONTAINER"); diff --git a/RageCoop.Client/Menus/Sub/ServersMenu.cs b/RageCoop.Client/Menus/Sub/ServersMenu.cs index fe5e3a3..a15f44d 100644 --- a/RageCoop.Client/Menus/Sub/ServersMenu.cs +++ b/RageCoop.Client/Menus/Sub/ServersMenu.cs @@ -85,7 +85,7 @@ namespace RageCoop.Client.Menus if (server.useZT) { 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) { throw new Exception("Failed to obtain ZeroTier network IP"); @@ -102,10 +102,10 @@ namespace RageCoop.Client.Menus } catch (Exception ex) { - Notification.Show($"~r~{ex.Message}"); + Notification.PostTicker($"~r~{ex.Message}", false); 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); } } }; diff --git a/RageCoop.Client/Networking/Chat.cs b/RageCoop.Client/Networking/Chat.cs index 6f25c6d..053eed7 100644 --- a/RageCoop.Client/Networking/Chat.cs +++ b/RageCoop.Client/Networking/Chat.cs @@ -57,7 +57,7 @@ namespace RageCoop.Client public Chat() { - MainScaleForm = new Scaleform("multiplayer_chat"); + MainScaleForm = Scaleform.RequestMovie("multiplayer_chat"); } public void Init() diff --git a/RageCoop.Client/Networking/Networking.cs b/RageCoop.Client/Networking/Networking.cs index 5b637c7..914ced7 100644 --- a/RageCoop.Client/Networking/Networking.cs +++ b/RageCoop.Client/Networking/Networking.cs @@ -34,7 +34,7 @@ namespace RageCoop.Client { _publicKeyReceived.Set(); IsConnecting = false; - Main.QueueAction(() => Notification.Show("Connection has been canceled")); + Main.QueueAction(() => Notification.PostTicker("Connection has been canceled", false)); Peer?.Shutdown("Bye"); } else if (IsOnServer) @@ -104,7 +104,7 @@ namespace RageCoop.Client #endif } }; - Main.QueueAction(() => { Notification.Show($"~y~Trying to connect..."); }); + Main.QueueAction(() => { Notification.PostTicker($"~y~Trying to connect...", false); }); Menus.CoopMenu._serverConnectItem.Enabled = false; Security.Regen(); if (publicKey == null) @@ -139,7 +139,7 @@ namespace RageCoop.Client catch (Exception 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; }); @@ -159,7 +159,7 @@ namespace RageCoop.Client Main.Logger.Debug($"player connected:{p.Username}"); 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) { @@ -169,7 +169,7 @@ namespace RageCoop.Client Main.QueueAction(() => { EntityPool.RemoveAllFromPlayer(packet.PedID); - GTA.UI.Notification.Show($"~h~{player.Username}~h~ left."); + Notification.PostTicker($"~h~{player.Username}~h~ left.", false); }); } diff --git a/RageCoop.Client/Networking/Send.cs b/RageCoop.Client/Networking/Send.cs index 48f807d..94ef5a9 100644 --- a/RageCoop.Client/Networking/Send.cs +++ b/RageCoop.Client/Networking/Send.cs @@ -126,7 +126,7 @@ namespace RageCoop.Client packet.Position = veh.ReadPosition(); packet.Velocity = veh.Velocity; packet.Quaternion = veh.ReadQuaternion(); - packet.RotationVelocity = veh.RotationVelocity; + packet.RotationVelocity = veh.LocalRotationVelocity; packet.ThrottlePower = veh.ThrottlePower; packet.BrakePower = veh.BrakePower; v.LastSentStopWatch.Restart(); diff --git a/RageCoop.Client/PlayerList.cs b/RageCoop.Client/PlayerList.cs index 598de09..45d8bf0 100644 --- a/RageCoop.Client/PlayerList.cs +++ b/RageCoop.Client/PlayerList.cs @@ -13,7 +13,7 @@ namespace RageCoop.Client { private const float LEFT_POSITION = 0.122f; 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(); public static ulong Pressed { get; set; } diff --git a/RageCoop.Client/Scripting/BaseScript.cs b/RageCoop.Client/Scripting/BaseScript.cs index e7f3a6a..3037300 100644 --- a/RageCoop.Client/Scripting/BaseScript.cs +++ b/RageCoop.Client/Scripting/BaseScript.cs @@ -31,7 +31,7 @@ namespace RageCoop.Client.Scripting API.RegisterCustomEventHandler(CustomEvents.UpdatePedBlip, UpdatePedBlip); API.RegisterCustomEventHandler(CustomEvents.IsHost, (e) => { _isHost = (bool)e.Args[0]; }); 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(() => { while (true) @@ -42,12 +42,11 @@ namespace RageCoop.Client.Scripting { unsafe { - var time = World.CurrentTimeOfDay; int weather1 = default(int); int weather2 = default(int); float percent2 = default(float); 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) { - 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]); } diff --git a/RageCoop.Client/Sync/Entities/Ped/SyncedPed.cs b/RageCoop.Client/Sync/Entities/Ped/SyncedPed.cs index b77a287..23ab4e8 100644 --- a/RageCoop.Client/Sync/Entities/Ped/SyncedPed.cs +++ b/RageCoop.Client/Sync/Entities/Ped/SyncedPed.cs @@ -29,7 +29,7 @@ namespace RageCoop.Client OwnerID = Main.LocalPlayerID; //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); } @@ -245,16 +245,15 @@ namespace RageCoop.Client Function.Call(Hash.SET_PED_IS_IGNORED_BY_AUTO_OPEN_DOORS, false); Function.Call(Hash.SET_PED_CAN_EVASIVE_DIVE, MainPed.Handle, false); - MainPed.SetConfigFlag((int)PedConfigFlags.CPED_CONFIG_FLAG_DrownsInWater, false); - MainPed.SetConfigFlag((int)PedConfigFlags.CPED_CONFIG_FLAG_DisableHurt, true); - MainPed.SetConfigFlag((int)PedConfigFlags.CPED_CONFIG_FLAG_DisableExplosionReactions, true); - MainPed.SetConfigFlag((int)PedConfigFlags.CPED_CONFIG_FLAG_AvoidTearGas, false); - MainPed.SetConfigFlag((int)PedConfigFlags.CPED_CONFIG_FLAG_IgnoreBeingOnFire, true); - MainPed.SetConfigFlag((int)PedConfigFlags.CPED_CONFIG_FLAG_DisableEvasiveDives, true); - MainPed.SetConfigFlag((int)PedConfigFlags.CPED_CONFIG_FLAG_DisablePanicInVehicle, true); - MainPed.SetConfigFlag((int)PedConfigFlags.CPED_CONFIG_FLAG_BlockNonTemporaryEvents, true); - MainPed.SetConfigFlag((int)PedConfigFlags.CPED_CONFIG_FLAG_DisableShockingEvents, true); - MainPed.SetConfigFlag((int)PedConfigFlags.CPED_CONFIG_FLAG_DisableHurt, true); + MainPed.SetConfigFlag(PedConfigFlagToggles.DrownsInWater, false); + MainPed.SetConfigFlag(PedConfigFlagToggles.DisableHurt, true); + MainPed.SetConfigFlag(PedConfigFlagToggles.DisableExplosionReactions, true); + MainPed.SetConfigFlag(PedConfigFlagToggles.AvoidTearGas, false); + MainPed.SetConfigFlag(PedConfigFlagToggles.IgnoreBeingOnFire, true); + MainPed.SetConfigFlag(PedConfigFlagToggles.DisableEvasiveDives, true); + MainPed.SetConfigFlag(PedConfigFlagToggles.DisablePanicInVehicle, true); + MainPed.SetConfigFlag(PedConfigFlagToggles.BlockNonTemporaryEvents, true); + MainPed.SetConfigFlag(PedConfigFlagToggles.DisableShockingEvents, true); SetClothes(); @@ -546,7 +545,7 @@ namespace RageCoop.Client { if (Velocity == default) { - MainPed.Task.AimAt(AimCoords, 1000); + MainPed.Task.AimGunAtPosition(AimCoords, 1000); } else { diff --git a/RageCoop.Client/Sync/Entities/Vehicle/SyncedVehicle.cs b/RageCoop.Client/Sync/Entities/Vehicle/SyncedVehicle.cs index 5cab0e0..fc1b059 100644 --- a/RageCoop.Client/Sync/Entities/Vehicle/SyncedVehicle.cs +++ b/RageCoop.Client/Sync/Entities/Vehicle/SyncedVehicle.cs @@ -142,7 +142,7 @@ namespace RageCoop.Client if (LightsOn != MainVehicle.AreLightsOn) { - MainVehicle.AreLightsOn = LightsOn; + MainVehicle.SetScriptedLightSetting(LightsOn ? ScriptedVehicleLightSetting.SetVehicleLightsOn : ScriptedVehicleLightSetting.SetVehicleLightsOff); } if (HighBeamsOn != MainVehicle.AreHighBeamsOn) @@ -285,10 +285,10 @@ namespace RageCoop.Client if (IsFlipped || (calirot = GetCalibrationRotation()).Length() > 50) { MainVehicle.Quaternion = Quaternion.Slerp(MainVehicle.ReadQuaternion(), Quaternion, 0.5f); - MainVehicle.RotationVelocity = RotationVelocity; + MainVehicle.LocalRotationVelocity = RotationVelocity; return; } - MainVehicle.RotationVelocity = RotationVelocity + calirot * 0.2f; + MainVehicle.LocalRotationVelocity = RotationVelocity + calirot * 0.2f; } private Vector3 GetCalibrationRotation() { diff --git a/RageCoop.Client/Sync/SyncEvents.cs b/RageCoop.Client/Sync/SyncEvents.cs index 07cda98..078c562 100644 --- a/RageCoop.Client/Sync/SyncEvents.cs +++ b/RageCoop.Client/Sync/SyncEvents.cs @@ -135,7 +135,7 @@ namespace RageCoop.Client _lastWeaponHash = weaponHash; } 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; if (((w = p.Weapons.CurrentWeaponObject) != null) && (p.VehicleWeapon == VehicleWeaponHash.Invalid)) { diff --git a/RageCoop.Client/Util/Memory.cs b/RageCoop.Client/Util/Memory.cs index 791969d..547110d 100644 --- a/RageCoop.Client/Util/Memory.cs +++ b/RageCoop.Client/Util/Memory.cs @@ -40,7 +40,7 @@ namespace RageCoop.Client { // Weapon/radio wheel slow-mo patch // 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"); } var address = result + 26; address = address + *(int*)address + 4u; @@ -91,7 +91,7 @@ namespace RageCoop.Client var foundOffsets = new List(100); 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) { foundOffsets.Add(i); diff --git a/RageCoop.Client/Util/Util.cs b/RageCoop.Client/Util/Util.cs index a386c5d..d023edc 100644 --- a/RageCoop.Client/Util/Util.cs +++ b/RageCoop.Client/Util/Util.cs @@ -201,7 +201,7 @@ namespace RageCoop.Client 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); } @@ -244,7 +244,7 @@ namespace RageCoop.Client } lineList.Add("ReloadKey=Insert"); 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); @@ -259,7 +259,7 @@ namespace RageCoop.Client } 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); diff --git a/libs/ScriptHookVDotNet.dll b/libs/ScriptHookVDotNet.dll index 50e4634..e692d55 100644 Binary files a/libs/ScriptHookVDotNet.dll and b/libs/ScriptHookVDotNet.dll differ diff --git a/libs/ScriptHookVDotNet3.dll b/libs/ScriptHookVDotNet3.dll index c54ed76..b90d481 100644 Binary files a/libs/ScriptHookVDotNet3.dll and b/libs/ScriptHookVDotNet3.dll differ