/// <summary> /// Causes this ped to start performing the specified <see cref="SynchronizedScene"/> /// </summary> /// <param name="ped">The target ped</param> /// <param name="duration">in second</param> /// <param name="flag">can be 0 or 16</param> /// <returns></returns> public static Rage.Task StartSynchronizedScene(this Ped ped, SynchronizedScene synchronizedScene, AnimationDictionary animDictionary, string animationName, float speed, float speedMultiplier, int duration, int flag, float playbackRate) { animDictionary.LoadAndWait(); uint handle = synchronizedScene.Handle; NativeWrappers.TaskSynchronizedScene(ped, handle, animDictionary, animationName, speed, speedMultiplier, duration, flag, playbackRate, 0); return(Rage.Task.GetTask(ped, "TASK_SYNCHRONIZED_SCENE")); }
public static void PlayEntityAnimation(this Entity entity, AnimationDictionary dict, string anim, bool loop = false, bool stayInEndFrame = true, float blend = 8f, bool onlyIfNotPlaying = true) { dict.LoadAndWait(); if (entity && (!onlyIfNotPlaying || !IsPlayingAnim(entity, dict, anim))) { NativeFunction.Natives.PLAY_ENTITY_ANIM(entity, anim, dict.Name, blend, loop, stayInEndFrame, 0, 0f, 0); } }
public static void SetEntityAnimCurrentTime(Entity entity, AnimationDictionary animDict, string animName, float value) { animDict.LoadAndWait(); NativeFunction.CallByName <uint>("SET_ENTITY_ANIM_CURRENT_TIME", entity, animDict.Name, animName, value); }
public static float GetEntityAnimCurrentTime(Entity entity, AnimationDictionary animDict, string animName) { animDict.LoadAndWait(); return(NativeFunction.CallByName <float>("GET_ENTITY_ANIM_CURRENT_TIME", entity, animDict.Name, animName)); }
public static bool IsEntityPlayingAnim(Entity entity, AnimationDictionary animDict, string animName) { animDict.LoadAndWait(); return(NativeFunction.CallByName <bool>("IS_ENTITY_PLAYING_ANIM", entity, animDict.Name, animName, 3)); }
public static void PlayEntityAnim(Entity entity, AnimationDictionary animDict, string animName, bool loop, AnimationFlags flags = AnimationFlags.None) { animDict.LoadAndWait(); NativeFunction.CallByName <uint>("PLAY_ENTITY_ANIM", entity, animName, animDict.Name, 1000f, loop, 1, 0, 0f, (uint)flags); }
public static void StopEntityAnim(Entity entity, AnimationDictionary animDict, string animName) { animDict.LoadAndWait(); NativeFunction.CallByName <uint>("STOP_ENTITY_ANIM", entity, animName, animDict.Name, -1000f); }
public static void SetEntityAnimSpeed(Entity entity, AnimationDictionary animDict, string animName, float speedMultiplier) { animDict.LoadAndWait(); NativeFunction.CallByName <uint>("SET_ENTITY_ANIM_SPEED", entity, animDict.Name, animName, speedMultiplier); }
static Stinger() { P_ld_stinger_s.LoadAndWait(); NativeFunction.CallByName <uint>("REQUEST_SCRIPT_AUDIO_BANK", "BIG_SCORE_HIJACK_01", false); }
public static void Command_SynchronizedSceneTest() { if (BenchThreadActivated) { return; } GameFiber.StartNew(delegate { BenchThreadActivated = true; SynchronizedScene syncScene = null; List <uint> benchHash = new List <uint>() { 0x6ba514ac, //prop_bench_01a 0x7977b051, //prop_bench_01b 0xb78a2c75, //prop_bench_01c 0xda867f80, //prop_bench_02 0xc0a6cbcd, //prop_bench_03 0xd2786f70, //prop_bench_04 0x9ec80810, //prop_bench_05 0xb17ead7d, //prop_bench_06 0xfbbe41fb, //prop_bench_07 0xe7ed1a59, //prop_bench_08 0xfa11bea2, //prop_bench_09 0x1a117fd1, //prop_bench_10 0x4cece57b, //prop_bench_11 0xfbca504f, //prop_fib_3b_bench 0x723e2ae0, //prop_ld_bench01 0x0ff3a92b, //prop_wait_bench_01 0x5515a05a, //v_res_fh_benchlong 0x883cb2e8, //v_res_fh_benchshort 0xbac3f7a8, //v_ind_rc_bench 0x90aa8a87, //hei_heist_stn_benchshort }; Rage.Object bench = null; int benchStatus = 0; Vector3 benchInitialPos = Vector3.Zero; Vector3 sitPos = Vector3.Zero; Rage.Task closeTask = null; string sitStr = Game.GetLocalizedString("MPTV_WALK"); //Press ~INPUT_CONTEXT~ to sit down. string standUpStr = Game.GetLocalizedString("MPOFSEAT_PCEXIT"); string[] benchIdles = { "idle_a", "idle_b", "idle_c" }; AnimationDictionary seating = Game.LocalPlayer.Character.IsMale ? "anim@amb@office@seating@male@var_a@base@" : "anim@amb@office@seating@female@var_d@base@"; seating.LoadAndWait(); while (true) { GameFiber.Yield(); if (Game.LocalPlayer.Character.IsInAnyVehicle(false) || Game.LocalPlayer.Character.IsDead || Game.IsPaused || Game.Console.IsOpen || Game.IsScreenFadingOut) { continue; } switch (benchStatus) { case 0: Entity[] objs = World.GetEntities(Game.LocalPlayer.Character.Position, 2f, GetEntitiesFlags.ConsiderAllObjects).ToArray(); bench = (Rage.Object)objs.Where(x => x && benchHash.Contains(x.Model.Hash)).OrderBy(x => Vector3.DistanceSquared(x.Position, Game.LocalPlayer.Character)).FirstOrDefault(); if (!bench) { break; } Game.DisplayHelp(sitStr, 100); if (Game.IsControlPressed(2, GameControl.Context)) { benchStatus = 1; } break; case 1: sitPos = bench.Position + bench.RightVector * 0.85f; benchInitialPos = sitPos + bench.ForwardVector * -1; closeTask = Game.LocalPlayer.Character.Tasks.FollowNavigationMeshToPosition(benchInitialPos, bench.Heading - 180, 1f, 10000); benchStatus = 2; break; case 2: if (closeTask.Status == TaskStatus.InProgress) { break; } syncScene = new SynchronizedScene(sitPos, bench.Rotation); synchronizedScenes.Add(syncScene); syncScene.TaskToPed(Game.LocalPlayer.Character, seating, "enter", 13); benchStatus = 3; break; case 3: if (syncScene.Phase != 1f) { break; } syncScene = new SynchronizedScene(sitPos, bench.Rotation); synchronizedScenes.Add(syncScene); syncScene.TaskToPed(Game.LocalPlayer.Character, seating, "base", 13, playbackRate: 1148846080); benchStatus = 4; break; case 4: Game.DisplayHelp(standUpStr, 100); if (Game.IsControlPressed(2, GameControl.ScriptRRight)) { benchStatus = 5; } if (syncScene.Phase != 1f) { break; } syncScene = new SynchronizedScene(sitPos, bench.Rotation); synchronizedScenes.Add(syncScene); syncScene.TaskToPed(Game.LocalPlayer.Character, seating, benchIdles.GetRandomElement(), 13, playbackRate: 1148846080); benchStatus = 3; break; case 5: syncScene = new SynchronizedScene(sitPos, bench.Rotation); synchronizedScenes.Add(syncScene); syncScene.TaskToPed(Game.LocalPlayer.Character, seating, "exit", 13, playbackRate: 1000f); benchStatus = 6; break; case 6: if (syncScene.Phase != 1f) { break; } Game.LocalPlayer.Character.Tasks.Clear(); synchronizedScenes.ForEach(x => { if (x.IsValid()) { x.Delete(); } }); synchronizedScenes = new List <SynchronizedScene>(); benchStatus = 0; break; } } }); }