From a16c60227947566918844ffb63e50ad209a01eaf Mon Sep 17 00:00:00 2001 From: Paul R Date: Sun, 10 Mar 2019 01:51:53 +0000 Subject: [PATCH 1/4] added a key fob animation & sound! --- vMenu/menus/PersonalVehicle.cs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/vMenu/menus/PersonalVehicle.cs b/vMenu/menus/PersonalVehicle.cs index 52cb0e00..60869313 100644 --- a/vMenu/menus/PersonalVehicle.cs +++ b/vMenu/menus/PersonalVehicle.cs @@ -17,6 +17,7 @@ public class PersonalVehicle { // Variables private Menu menu; + private int KeyDelay = 1000; public bool EnableVehicleBlip { get; private set; } = UserDefaults.PVEnableVehicleBlip; // Empty constructor @@ -117,6 +118,7 @@ private void CreateMenu() if (item == toggleLights) { + PressKeyFob(Game.Player); if (itemIndex == 0) { SetVehicleLights(CurrentPersonalVehicle.Handle, 3); @@ -267,22 +269,26 @@ private void CreateMenu() if (item == toggleEngine) { + PressKeyFob(Game.Player); SetVehicleEngineOn(CurrentPersonalVehicle.Handle, !CurrentPersonalVehicle.IsEngineRunning, true, true); } else if (item == lockDoors || item == unlockDoors) { + PressKeyFob(Game.Player); bool _lock = item == lockDoors; LockOrUnlockDoors(CurrentPersonalVehicle, _lock); } else if (item == soundHorn) { + PressKeyFob(Game.Player); SoundHorn(CurrentPersonalVehicle); } else if (item == toggleAlarm) { + PressKeyFob(Game.Player); ToggleVehicleAlarm(CurrentPersonalVehicle); } } @@ -294,6 +300,30 @@ private void CreateMenu() }; } + private void PressKeyFob(Player player) + { + if(player != null && !player.IsDead && !player.Character.IsInVehicle()) + { + ClearPedTasks(player.Character.Handle); + if(player.Character.Weapons.Current.Hash != WeaponHash.Unarmed) + { + player.Character.Weapons.Give(WeaponHash.Unarmed, 1, true, true); + } + + if (!HasEntityClearLosToEntityInFront(player.Character.Handle, CurrentPersonalVehicle.Handle)) + { + TaskTurnPedToFaceEntity(player.Character.Handle, CurrentPersonalVehicle.Handle, 1000); + } + + RequestAnimDict("anim@mp_player_intmenu@key_fob@"); + while (!HasAnimDictLoaded("anim@mp_player_intmenu@key_fob@")) { + Delay(time: 0); + } + player.Character.Task.PlayAnimation("anim@mp_player_intmenu@key_fob@", "fob_click", 3f, 1000, AnimationFlags.UpperBodyOnly); + PlaySoundFromEntity(-1, "Remote_Control_Fob", player.Character.Handle, "PI_Menu_Sounds", true, 0); + } + } + private async void SoundHorn(Vehicle veh) { if (veh != null && veh.Exists()) From 3e1e3283f99abd1639aa0bc375c7add79c30ea4f Mon Sep 17 00:00:00 2001 From: Paul R Date: Sun, 10 Mar 2019 14:20:29 +0000 Subject: [PATCH 2/4] apparently the key fob froze the game? --- vMenu/menus/PersonalVehicle.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/vMenu/menus/PersonalVehicle.cs b/vMenu/menus/PersonalVehicle.cs index 60869313..91f2a12a 100644 --- a/vMenu/menus/PersonalVehicle.cs +++ b/vMenu/menus/PersonalVehicle.cs @@ -17,7 +17,6 @@ public class PersonalVehicle { // Variables private Menu menu; - private int KeyDelay = 1000; public bool EnableVehicleBlip { get; private set; } = UserDefaults.PVEnableVehicleBlip; // Empty constructor @@ -300,7 +299,7 @@ private void CreateMenu() }; } - private void PressKeyFob(Player player) + private async void PressKeyFob(Player player) { if(player != null && !player.IsDead && !player.Character.IsInVehicle()) { @@ -317,11 +316,13 @@ private void PressKeyFob(Player player) RequestAnimDict("anim@mp_player_intmenu@key_fob@"); while (!HasAnimDictLoaded("anim@mp_player_intmenu@key_fob@")) { - Delay(time: 0); + await Delay(0); } player.Character.Task.PlayAnimation("anim@mp_player_intmenu@key_fob@", "fob_click", 3f, 1000, AnimationFlags.UpperBodyOnly); PlaySoundFromEntity(-1, "Remote_Control_Fob", player.Character.Handle, "PI_Menu_Sounds", true, 0); } + + await Delay(0); } private async void SoundHorn(Vehicle veh) From eeb38153c4a98693358374b6c75aa8a847c9a381 Mon Sep 17 00:00:00 2001 From: Paul R Date: Tue, 12 Mar 2019 16:46:21 +0000 Subject: [PATCH 3/4] got the key fob object working, thanks @doxylamin --- vMenu/menus/PersonalVehicle.cs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/vMenu/menus/PersonalVehicle.cs b/vMenu/menus/PersonalVehicle.cs index 91f2a12a..d212a8e4 100644 --- a/vMenu/menus/PersonalVehicle.cs +++ b/vMenu/menus/PersonalVehicle.cs @@ -303,6 +303,16 @@ private async void PressKeyFob(Player player) { if(player != null && !player.IsDead && !player.Character.IsInVehicle()) { + uint KeyFobHashKey = (uint)GetHashKey("p_car_keys_01"); + RequestModel(KeyFobHashKey); + while(!HasModelLoaded(KeyFobHashKey)) + { + await Delay(0); + } + + int KeyFobObject = CreateObject((int)KeyFobHashKey, 0, 0, 0, true, true, true); + AttachEntityToEntity(KeyFobObject, player.Character.Handle, GetPedBoneIndex(player.Character.Handle, 57005), 0.09f, 0.03f, -0.02f, -76f, 13f, 28f, false, true, true, true, 0, true); + ClearPedTasks(player.Character.Handle); if(player.Character.Weapons.Current.Hash != WeaponHash.Unarmed) { @@ -320,6 +330,10 @@ private async void PressKeyFob(Player player) } player.Character.Task.PlayAnimation("anim@mp_player_intmenu@key_fob@", "fob_click", 3f, 1000, AnimationFlags.UpperBodyOnly); PlaySoundFromEntity(-1, "Remote_Control_Fob", player.Character.Handle, "PI_Menu_Sounds", true, 0); + + await Delay(1250); + DetachEntity(KeyFobObject, false, false); + DeleteObject(ref KeyFobObject); } await Delay(0); From 4148aeb44f889c7332d587d390e6252f497e62ca Mon Sep 17 00:00:00 2001 From: Tom <31419184+TomGrobbe@users.noreply.github.com> Date: Wed, 13 Mar 2019 10:32:17 +0100 Subject: [PATCH 4/4] Cleanup models and anims from memory after usage --- vMenu/menus/PersonalVehicle.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/vMenu/menus/PersonalVehicle.cs b/vMenu/menus/PersonalVehicle.cs index d212a8e4..139ed810 100644 --- a/vMenu/menus/PersonalVehicle.cs +++ b/vMenu/menus/PersonalVehicle.cs @@ -312,6 +312,7 @@ private async void PressKeyFob(Player player) int KeyFobObject = CreateObject((int)KeyFobHashKey, 0, 0, 0, true, true, true); AttachEntityToEntity(KeyFobObject, player.Character.Handle, GetPedBoneIndex(player.Character.Handle, 57005), 0.09f, 0.03f, -0.02f, -76f, 13f, 28f, false, true, true, true, 0, true); + SetModelAsNoLongerNeeded(KeyFobHashKey); // cleanup model from memory ClearPedTasks(player.Character.Handle); if(player.Character.Weapons.Current.Hash != WeaponHash.Unarmed) @@ -324,16 +325,19 @@ private async void PressKeyFob(Player player) TaskTurnPedToFaceEntity(player.Character.Handle, CurrentPersonalVehicle.Handle, 1000); } - RequestAnimDict("anim@mp_player_intmenu@key_fob@"); - while (!HasAnimDictLoaded("anim@mp_player_intmenu@key_fob@")) { + string animDict = "anim@mp_player_intmenu@key_fob@"; + RequestAnimDict(animDict); + while (!HasAnimDictLoaded(animDict)) { await Delay(0); } - player.Character.Task.PlayAnimation("anim@mp_player_intmenu@key_fob@", "fob_click", 3f, 1000, AnimationFlags.UpperBodyOnly); + player.Character.Task.PlayAnimation(animDict, "fob_click", 3f, 1000, AnimationFlags.UpperBodyOnly); PlaySoundFromEntity(-1, "Remote_Control_Fob", player.Character.Handle, "PI_Menu_Sounds", true, 0); + await Delay(1250); DetachEntity(KeyFobObject, false, false); DeleteObject(ref KeyFobObject); + RemoveAnimDict(animDict); // cleanup anim dict from memory } await Delay(0);