コード例 #1
0
 /// <summary>
 ///     Trigger player crawling animation
 /// </summary>
 /// <param name="movementDirection">fwd or bwd movement</param>
 /// <param name="proneState">on front or on back prone state</param>
 private async void Crawl(Movements movementDirection, ProneStates proneState)
 {
     try
     {
         var    proneStateStr = proneState == ProneStates.OnFront ? "onfront" : "onback";
         string movementStr;
         if (proneState == ProneStates.OnFront)
         {
             movementStr = movementDirection == Movements.Forward ? "fwd" : "bwd";
         }
         else
         {
             movementStr = movementDirection == Movements.Forward ? "bwd" : "fwd";
         }
         var animStr = string.Concat(proneStateStr, "_", movementStr);
         Game.PlayerPed.Task.ClearAnimation("move_crawl", animStr);
         await Game.PlayerPed.Task.PlayAnimation("move_crawl", animStr, 8f, -8f, -1,
                                                 (AnimationFlags)2, 0);
     }
     catch (Exception ex)
     {
         Log.Error(ex);
     }
     await Task.FromResult(0);
 }
コード例 #2
0
        /// <summary>
        ///     Trigger player prone animation
        /// </summary>
        /// <param name="proneState">on front or on back prone state</param>
        private void GoProne(ProneStates proneState)
        {
            try
            {
                var playerPed = Game.PlayerPed;
                if (_proneState != _prevProneState)
                {
                    playerPed.Heading = playerPed.Heading + 180f;
                    _prevProneState   = _proneState;
                }

                var         animName      = proneState == ProneStates.OnFront ? "onfront_fwd" : "onback_fwd";
                var         position      = Game.PlayerPed.Position;
                var         rotation      = Game.PlayerPed.Rotation;
                const float animStartTime = 1000f;
                const int   animFlags     = (int)AnimationFlags.StayInEndFrame;
                API.TaskPlayAnimAdvanced(playerPed.Handle, "move_crawl", animName,
                                         position.X, position.Y, position.Z, rotation.X, rotation.Y, rotation.Z, 8f, -8f, -1, animFlags,
                                         animStartTime, 2,
                                         0);
            }
            catch (Exception ex)
            {
                Log.Error(ex);
            }
        }
コード例 #3
0
        /// <summary>
        ///     Transition to prone state
        /// </summary>
        private async Task TransitionToProneState()
        {
            try
            {
                var playerPed = Game.PlayerPed;
                State           = StanceStates.Prone;
                _proneAimActive = false;
                _proneState     = ProneStates.OnFront;
                _prevProneState = ProneStates.OnFront;
                _prevWeapon     = Game.PlayerPed.Weapons.Current.Hash;
                if (playerPed.IsRunning || playerPed.IsSprinting)
                {
                    playerPed.Task.ClearAll();
                    _diveActive = true;
                    await playerPed.Task.PlayAnimation("move_jump", "dive_start_run", 8f, -8f, -1,
                                                       AnimationFlags.RagdollOnCollision, 0);

                    //This is the ideal delay to make animation look good.  Do not change.
                    await BaseScript.Delay(1100);

                    _diveActive = false;
                }
                if (playerPed.IsRagdoll)
                {
                    State = StanceStates.Idle;
                }
                else
                {
                    if (API.IsPedArmed(playerPed.Handle, 4))
                    {
                        API.TaskAimGunScripted(playerPed.Handle,
                                               (uint)API.GetHashKey("SCRIPTED_GUN_TASK_PLANE_WING"), true, true);
                    }
                    else
                    {
                        await playerPed.Task.PlayAnimation("move_crawl", "onfront_fwd", 8f, -8f, -1,
                                                           (AnimationFlags)2, 0);
                    }
                }
                await Task.FromResult(0);
            }
            catch (Exception ex)
            {
                Log.Error(ex);
            }
        }
コード例 #4
0
        /// <summary>
        ///     Handle prone front/back toggle
        /// </summary>
        private static void HandleProneStateToggle()
        {
            try {
                if (!Game.IsControlJustPressed(0, ProneFrontBackControl))
                {
                    return;
                }

                if (_lastBodyFlip >= Game.GameTime - 1000)
                {
                    return;
                }

                _lastBodyFlip = Game.GameTime;

                _proneState = _proneState == ProneStates.OnFront ? ProneStates.OnBack : ProneStates.OnFront;
                GoProne(_proneState);
            }
            catch (Exception ex) {
                Log.Error(ex);
            }
        }