Пример #1
0
        /// <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"));
        }
Пример #2
0
 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);
     }
 }
Пример #3
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);
 }
Пример #4
0
 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));
 }
Пример #5
0
 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));
 }
Пример #6
0
 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);
 }
Пример #7
0
 public static void StopEntityAnim(Entity entity, AnimationDictionary animDict, string animName)
 {
     animDict.LoadAndWait();
     NativeFunction.CallByName <uint>("STOP_ENTITY_ANIM", entity, animName, animDict.Name, -1000f);
 }
Пример #8
0
 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);
 }
Пример #9
0
 static Stinger()
 {
     P_ld_stinger_s.LoadAndWait();
     NativeFunction.CallByName <uint>("REQUEST_SCRIPT_AUDIO_BANK", "BIG_SCORE_HIJACK_01", false);
 }
Пример #10
0
        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;
                    }
                }
            });
        }