コード例 #1
0
ファイル: Mugging.cs プロジェクト: alexguirre/LSPDFR-API
        /// <summary>
        /// Called before the callout is displayed. Do all spawning here, so that if spawning isn't successful, the player won't notice, as the callout won't be shown.
        /// </summary>
        /// <returns></returns>
        public override bool OnBeforeCalloutDisplayed()
        {
            //Get a valid spawnpoint for the callout, and spawn the Aggressor there
            spawnPoint = World.GetNextPositionOnStreet(Game.LocalPlayer.Character.Position.Around(300f));
            Aggressor = new Ped(spawnPoint);

            //Spawn the victim in front of the aggressor
            Victim = new Ped(Aggressor.GetOffsetPosition(new Vector3(0, 1.8f, 0)));

            //If for some reason, the spawning of either two peds failed, don't display the callout
            if(!Aggressor.Exists()) return false;
            if(!Victim.Exists()) return false;

            //If the peds are valid, display the area that the callout is in.
            this.ShowCalloutAreaBlipBeforeAccepting(spawnPoint, 15f);
            this.AddMinimumDistanceCheck(5f, spawnPoint);

            //Give the aggressor his weapon
            Aggressor.GiveNewWeapon("WEAPON_PISTOL", 500, true);

            //Set the callout message(displayed in the notification), and the position(also shown in the notification)
            this.CalloutMessage = "Mugging";
            this.CalloutPosition = spawnPoint;

            //Play the scanner audio.
            Functions.PlayScannerAudioUsingPosition("CITIZENS_REPORT_03 CRIME_POSSIBLE_MUGGING IN_OR_ON_POSITION", this.spawnPoint);

            return base.OnBeforeCalloutDisplayed();
        }
コード例 #2
0
ファイル: ChaseCallout.cs プロジェクト: alexguirre/LSPDFR-API
        private LHandle pursuit; // an API pursuit handle

        /// <summary>
        /// OnBeforeCalloutDisplayed is where we create a blip for the user to see where the pursuit is happening, we initiliaize any variables above and set
        /// the callout message and position for the API to display
        /// </summary>
        /// <returns></returns>
        public override bool OnBeforeCalloutDisplayed()
        {
            //Set our spawn point to be on a street around 300f (distance) away from the player.
            SpawnPoint = World.GetNextPositionOnStreet(Game.LocalPlayer.Character.Position.Around(300f));

            //Create our ped in the world
            myPed = new Ped("a_m_y_mexthug_01", SpawnPoint, 0f);

            //Create the vehicle for our ped
            myVehicle = new Vehicle("DUKES2", SpawnPoint);

            //Now we have spawned them, check they actually exist and if not return false (preventing the callout from being accepted and aborting it)
            if (!myPed.Exists()) return false;
            if (!myVehicle.Exists()) return false;

            //If we made it this far both exist so let's warp the ped into the driver seat
            myPed.WarpIntoVehicle(myVehicle, -1);

            // Show the user where the pursuit is about to happen and block very close peds.
            this.ShowCalloutAreaBlipBeforeAccepting(SpawnPoint, 15f);
            this.AddMinimumDistanceCheck(5f, myPed.Position);

            // Set up our callout message and location
            this.CalloutMessage = "Example Callout Message";
            this.CalloutPosition = SpawnPoint;

            //Play the police scanner audio for this callout (available as of the 0.2a API)
            Functions.PlayScannerAudioUsingPosition("CITIZENS_REPORT CRIME_RESIST_ARREST IN_OR_ON_POSITION", SpawnPoint);

            return base.OnBeforeCalloutDisplayed();
        }
コード例 #3
0
ファイル: StolenVehicle.cs プロジェクト: Albo1125/LSPDFR-API
        public override bool OnCalloutAccepted()
        {
            SuspectVehicle = new Vehicle("ZENTORNO", SpawnPoint);
            SuspectVehicle.IsPersistent = true;

            Suspect = SuspectVehicle.CreateRandomDriver();
            Suspect.IsPersistent = true;
            Suspect.BlockPermanentEvents = true;

            SuspectBlip = Suspect.AttachBlip();
            SuspectBlip.IsFriendly = false;

            Suspect.Tasks.CruiseWithVehicle(20f, VehicleDrivingFlags.Emergency);
            return base.OnCalloutAccepted();
        }
コード例 #4
0
        bool IsPedEnemyOrNeutral(Ped p)
        {
            Relationship rel = p.GetRelationshipWithPed(Game.Player.Character);

            return(rel == Relationship.Hate || rel == Relationship.Dislike || rel == Relationship.Neutral);
        }
コード例 #5
0
 public static void MakeMissionPed(this Ped ped)
 {
     ped.BlockPermanentEvents = true;
     ped.IsPersistent         = true;
 }
コード例 #6
0
 public static int GetPlayerIndex(Ped p)
 {
     return(Function.Call <int>(Hash.NETWORK_GET_PLAYER_INDEX, p.Handle));
 }
コード例 #7
0
        void KillPedWithExplosion(Ped ownerPed, Ped enemyPed, Vector3 posOffset, int explosionType, float radius, float cameraShake)
        {
            Vector3 position = enemyPed.Position + posOffset;

            Function.Call(Hash.ADD_OWNED_EXPLOSION, ownerPed, position.X, position.Y, position.Z, explosionType, radius, true, false, cameraShake);
        }
コード例 #8
0
 public virtual void SetPed(Ped veh)
 {
     _veh = veh;
 }
コード例 #9
0
ファイル: Particle.cs プロジェクト: DModder/ParticleLibrary
 /// <summary>
 /// ** Use the constructor for spawning looped particles **
 /// Spawn a particle effect with a Ped and the following parameters...
 /// </summary>
 /// <param name="ptfx">The type of particle you want</param>
 /// <param name="character">The Ped you want to spawn the particle effect on</param>
 /// <param name="scale">Sets the size of the particle effect</param>
 /// <param name="rotation">The rotating of the particle effect</param>
 public static void SpawnParticle(PTFXNonLoopedParticle ptfx, Ped character, float scale, Vector3 rotation)
 {
     SpawnParticle(ptfx, character, scale, rotation, Vector3.Zero);
 }
コード例 #10
0
        void makePanorama(int time)
        {
            string str = "panorama\\" + "x_" + Game.Player.Character.Position.X.ToString() + "_" + "y_" + Game.Player.Character.Position.Y.ToString() + "_" + "z_" + Game.Player.Character.Position.Z.ToString() + "_";

            if (!Directory.Exists(str))
            {
                Directory.CreateDirectory(str);
            }
            StreamWriter sw = new StreamWriter(str + "\\info.txt");

            {
                sw.WriteLine("Position of Player:");
                sw.WriteLine(Game.Player.Character.Position.ToString());
                sw.WriteLine("Rotation of Player: ");
                sw.WriteLine(Game.Player.Character.Rotation.ToString());
                sw.WriteLine("Forward vector of player: ");
                sw.WriteLine(Game.Player.Character.ForwardVector.ToString());
                sw.WriteLine("Position of player camera vector:");
                sw.WriteLine(GameplayCamera.Position.ToString());
                sw.WriteLine("Rotation of player camera vector:");
                sw.WriteLine(GameplayCamera.Rotation.ToString());
            }
            sw.Close();
            Game.TimeScale = 0.0f;
            Game.Player.Character.IsVisible = this.cPlayerVisible;

            Script.Wait(time);
            Ped     character = Game.Player.Character;
            Vector3 position  = (character).Position;
            Vector3 rotation  = (character).Rotation;

            Camera camera = World.CreateCamera(position, rotation, this.cFov);

            camera.Position       = position;
            camera.Rotation       = new Vector3((float)(rotation.X + 80.0), (float)rotation.Y, (float)rotation.Z);
            World.RenderingCamera = camera;
            //World.set_RenderingCamera(camera);
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p1.jpg"), ImageFormat.Jpeg);
            camera.Rotation    = new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0));
            camera.FieldOfView = 360;
            //camera.set_Rotation(new Vector3((float) camera.Rotation.X, (float) camera.Rotation.Y, (float) (camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p2.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p3.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p4.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p5.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p6.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p7.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p8.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p9.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p10.jpg"), ImageFormat.Jpeg);
            camera.Position       = position;
            camera.Rotation       = (new Vector3((float)(rotation.X + 40.0), (float)rotation.Y, (float)rotation.Z));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p11.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p12.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p13.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p14.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p15.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p16.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p17.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p18.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p19.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p20.jpg"), ImageFormat.Jpeg);
            camera.Position       = position;
            camera.Rotation       = (rotation);
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p21.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p22.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p23.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p24.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p25.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p26.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p27.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p28.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p29.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p30.jpg"), ImageFormat.Jpeg);
            camera.Position       = position;
            camera.Rotation       = (new Vector3((float)(rotation.X - 40.0), (float)rotation.Y, (float)rotation.Z));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p31.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p32.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p33.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p34.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p35.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p36.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p37.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p38.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p39.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p40.jpg"), ImageFormat.Jpeg);
            camera.Position       = position;
            camera.Rotation       = (new Vector3((float)(rotation.X - 80.0), (float)rotation.Y, (float)rotation.Z));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p41.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p42.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p43.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p44.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p45.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p46.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p47.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p48.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p49.jpg"), ImageFormat.Jpeg);
            camera.Rotation       = (new Vector3((float)camera.Rotation.X, (float)camera.Rotation.Y, (float)(camera.Rotation.Z + 35.0)));
            World.RenderingCamera = camera;
            Script.Wait(time);
            this.TakeScreenShot().Save(Path.Combine(str, "p50.jpg"), ImageFormat.Jpeg);
            World.DestroyAllCameras();
            World.RenderingCamera = (Camera)null;

            GTA.UI.Notification.Show("Screenshot saved.");

            Game.TimeScale = 1f;
            ((Entity)Game.Player.Character).IsVisible = !this.cPlayerVisible;
            hideHud = !this.cHideHud;
        }
コード例 #11
0
ファイル: ExtraTasks.cs プロジェクト: StrayDev/Stray.Common
 public static void TaskReactAndFleePed(Ped target, Ped fleeFrom)
 {
     NativeFunction.CallByName<uint>("TASK_REACT_AND_FLEE_PED", target, fleeFrom);
 }
コード例 #12
0
ファイル: Main.cs プロジェクト: sevtix/sevtixM
        public Main()
        {
            EventHandlers["playerSpawned"] += new Action(OnPlayerJoin);

            // COMMAND EXAMPLE

            /*RegisterCommand("command", new Action<int, List<object>, string>((source, arguments, raw) =>
             * {
             *  SendMessage("csharp", "Test Message", 0, 255, 0);
             * }), false);*/

            API.RegisterCommand("godmode", new Action <int, List <object>, string>((source, args, raw) =>
            {
                if (args.Count == 1)
                {
                    Ped ped = Game.PlayerPed;

                    switch (args[0])
                    {
                    case "on":
                        API.SetCurrentPedWeapon(ped.Handle, 2725352035, true);
                        API.SetEntityInvincible(ped.Handle, true);
                        //API.SetEnableHandcuffs(ped.Handle, true);
                        API.SetPedCanSwitchWeapon(ped.Handle, false);
                        API.SetPoliceIgnorePlayer(Game.Player.Handle, true);

                        SendMessage("sevtixM - Freeroam", "Du bist nun Unverwundbar", 0, 255, 0);
                        break;

                    case "off":
                        API.SetEntityInvincible(ped.Handle, false);
                        //API.SetEnableHandcuffs(ped.Handle, false);
                        API.SetPedCanSwitchWeapon(ped.Handle, true);
                        API.SetPoliceIgnorePlayer(Game.Player.Handle, false);
                        SendMessage("sevtixM - Freeroam", "Du bist nicht mehr Unverwundbar", 255, 0, 0);
                        break;
                    }
                }
                else
                {
                    SendMessage("sevtixM - Freeroam", "/godmode <on/off>", 255, 127, 0);
                }
            }), false);

            API.RegisterCommand("vehicle", new Action <int, List <object>, string>(async(source, args, raw) =>
            {
                Ped ped = Game.PlayerPed;
                if (args.Count == 1)
                {
                    Model model           = new Model(API.GetHashKey((string)args[0]));
                    Vehicle veh           = await World.CreateVehicle(model, Game.PlayerPed.Position);
                    veh.NeedsToBeHotwired = false;
                    API.SetPedIntoVehicle(ped.Handle, veh.Handle, -1);
                    SendMessage("sevtixM - Freeroam", (string)args[0] + " wurde gespawnt", 0, 255, 0);
                }
                else
                {
                    SendMessage("sevtixM - Freeroam", "/vehicle <fahrzeugname>", 255, 127, 0);
                }
            }), false);

            API.RegisterCommand("heal", new Action <int, List <object>, string>(async(source, args, raw) =>
            {
                Ped ped    = Game.PlayerPed;
                ped.Health = ped.MaxHealth;
            }), false);

            API.RegisterCommand("repair", new Action <int, List <object>, string>(async(source, args, raw) =>
            {
                Ped ped = Game.PlayerPed;
                if (Game.PlayerPed.IsInVehicle())
                {
                    Vehicle veh = Game.PlayerPed.CurrentVehicle;
                    veh.Repair();
                }
            }), false);

            API.RegisterCommand("windows", new Action <int, List <object>, string>(async(source, args, raw) =>
            {
                Ped ped = Game.PlayerPed;
                if (args.Count == 1)
                {
                    if (Game.PlayerPed.IsInVehicle())
                    {
                        Vehicle veh = Game.PlayerPed.CurrentVehicle;


                        if ((string)args[0] == "down")
                        {
                            API.RollDownWindows(veh.Handle);
                        }

                        if ((string)args[0] == "up")
                        {
                            API.RollUpWindow(veh.Handle, 0);
                            API.RollUpWindow(veh.Handle, 1);
                            API.RollUpWindow(veh.Handle, 2);
                            API.RollUpWindow(veh.Handle, 3);
                        }
                    }
                }
                else
                {
                    SendMessage("sevtixM - Freeroam", "/vehicle <fahrzeugname>", 255, 127, 0);
                }
            }), false);

            API.RegisterCommand("wanted", new Action <int, List <object>, string>(async(source, args, raw) =>
            {
                if (args.Count == 1)
                {
                    Game.Player.WantedLevel = Int32.Parse((string)args[0]);
                }
                else
                {
                    SendMessage("sevtixM - Freeroam", "/wanted <level>", 255, 127, 0);
                }
            }), false);
        }
コード例 #13
0
        private static void PedData(Ped player)
        {
            bool aiming   = player.IsSubtaskActive(ESubtask.AIMED_SHOOTING_ON_FOOT) || player.IsSubtaskActive(ESubtask.AIMING_THROWABLE); // Game.IsControlPressed(GTA.Control.Aim);
            bool shooting = Function.Call <bool>(Hash.IS_PED_SHOOTING, player.Handle);

            GTA.Math.Vector3 aimCoord = new Vector3();
            if (aiming || shooting)
            {
                aimCoord = Main.RaycastEverything(new Vector2(0, 0));
            }

            Weapon currentWeapon = player.Weapons.Current;

            var obj = new PedData
            {
                AimCoords    = aimCoord.ToLVector(),
                Position     = player.Position.ToLVector(),
                Quaternion   = player.Rotation.ToLVector(),
                PedArmor     = (byte)player.Armor,
                PedModelHash = player.Model.Hash,
                WeaponHash   = (int)currentWeapon.Hash,
                WeaponAmmo   = currentWeapon.Ammo,
                PlayerHealth = (byte)Util.Util.Clamp(0, player.Health, 255),
                Velocity     = player.Velocity.ToLVector(),
                Flag         = 0
            };


            if (player.IsRagdoll)
            {
                obj.Flag |= (int)PedDataFlags.Ragdoll;
            }
            if (Function.Call <int>(Hash.GET_PED_PARACHUTE_STATE, player.Handle) == 0 &&
                player.IsInAir)
            {
                obj.Flag |= (int)PedDataFlags.InFreefall;
            }
            if (player.IsInMeleeCombat)
            {
                obj.Flag |= (int)PedDataFlags.InMeleeCombat;
            }
            if (aiming || shooting)
            {
                obj.Flag |= (int)PedDataFlags.Aiming;
            }
            if ((player.IsInMeleeCombat && Game.IsControlJustPressed(Control.Attack)))
            {
                obj.Flag |= (int)PedDataFlags.Shooting;
            }
            if (Function.Call <bool>(Hash.IS_PED_JUMPING, player.Handle))
            {
                obj.Flag |= (int)PedDataFlags.Jumping;
            }
            if (Function.Call <int>(Hash.GET_PED_PARACHUTE_STATE, player.Handle) == 2)
            {
                obj.Flag |= (int)PedDataFlags.ParachuteOpen;
            }
            if (player.IsInCover())
            {
                obj.Flag |= (int)PedDataFlags.IsInCover;
            }
            if (!Function.Call <bool>((Hash)0x6A03BF943D767C93, player))
            {
                obj.Flag |= (int)PedDataFlags.IsInLowerCover;
            }
            if (player.IsInCoverFacingLeft)
            {
                obj.Flag |= (int)PedDataFlags.IsInCoverFacingLeft;
            }
            if (player.IsReloading)
            {
                obj.Flag |= (int)PedDataFlags.IsReloading;
            }
            if (ForceAimData)
            {
                obj.Flag |= (int)PedDataFlags.HasAimData;
            }
            if (player.IsSubtaskActive(ESubtask.USING_LADDER))
            {
                obj.Flag |= (int)PedDataFlags.IsOnLadder;
            }
            if (Function.Call <bool>(Hash.IS_PED_CLIMBING, player) && !player.IsSubtaskActive(ESubtask.USING_LADDER))
            {
                obj.Flag |= (int)PedDataFlags.IsVaulting;
            }
            if (Function.Call <bool>(Hash.IS_ENTITY_ON_FIRE, player))
            {
                obj.Flag |= (int)PedDataFlags.OnFire;
            }
            if (player.IsDead)
            {
                obj.Flag |= (int)PedDataFlags.PlayerDead;
            }

            if (player.IsSubtaskActive(168))
            {
                obj.Flag |= (int)PedDataFlags.ClosingVehicleDoor;
            }

            if (player.IsSubtaskActive(161) || player.IsSubtaskActive(162) || player.IsSubtaskActive(163) ||
                player.IsSubtaskActive(164))
            {
                obj.Flag |= (int)PedDataFlags.EnteringVehicle;

                obj.VehicleTryingToEnter =
                    Main.NetEntityHandler.EntityToNet(Function.Call <int>(Hash.GET_VEHICLE_PED_IS_TRYING_TO_ENTER,
                                                                          player));

                obj.SeatTryingToEnter = (sbyte)
                                        Function.Call <int>(Hash.GET_SEAT_PED_IS_TRYING_TO_ENTER,
                                                            player);
            }

            obj.Speed = Main.GetPedWalkingSpeed(player);

            lock (Lock)
            {
                LastSyncPacket = obj;
            }

            bool sendShootingPacket;

            if (obj.WeaponHash != null && !WeaponDataProvider.IsWeaponAutomatic(unchecked ((GTANetworkShared.WeaponHash)obj.WeaponHash.Value)))
            {
                sendShootingPacket = (shooting && !player.IsSubtaskActive(ESubtask.AIMING_PREVENTED_BY_OBSTACLE) && !player.IsSubtaskActive(ESubtask.MELEE_COMBAT));
            }
            else
            {
                if (!_lastShooting && !player.IsSubtaskActive(ESubtask.MELEE_COMBAT))
                {
                    sendShootingPacket = (shooting && !player.IsSubtaskActive(ESubtask.AIMING_PREVENTED_BY_OBSTACLE) &&
                                          !player.IsSubtaskActive(ESubtask.MELEE_COMBAT)) ||
                                         ((player.IsInMeleeCombat || player.IsSubtaskActive(ESubtask.MELEE_COMBAT)) &&
                                          Game.IsEnabledControlPressed(Control.Attack));
                }
                else
                {
                    sendShootingPacket = (!player.IsSubtaskActive(ESubtask.AIMING_PREVENTED_BY_OBSTACLE) &&
                                          !player.IsSubtaskActive(ESubtask.MELEE_COMBAT) &&
                                          !player.IsReloading &&
                                          player.Weapons.Current.AmmoInClip > 0 &&
                                          Game.IsEnabledControlPressed(Control.Attack)) ||
                                         ((player.IsInMeleeCombat || player.IsSubtaskActive(ESubtask.MELEE_COMBAT)) &&
                                          Game.IsEnabledControlPressed(Control.Attack));
                }

                if (!sendShootingPacket && _lastShooting && !_lastBullet)
                {
                    _lastBullet   = true;
                    _lastShooting = false;
                    return;
                }
            }

            _lastBullet = false;

            if (player.IsRagdoll)
            {
                sendShootingPacket = false;
            }

            if (!player.IsSubtaskActive(ESubtask.MELEE_COMBAT) && player.Weapons.Current.Ammo == 0)
            {
                sendShootingPacket = false;
            }

            if (sendShootingPacket && !_lastShooting && DateTime.Now.Subtract(_lastShot).TotalMilliseconds > 50)
            {
                //Util.Util.SafeNotify("Sending BPacket " + DateTime.Now.Millisecond);
                _sent         = false;
                _lastShooting = true;
                _lastShot     = DateTime.Now;

                var    msg = Main.Client.CreateMessage();
                byte[] bin;

                var syncPlayer = Main.GetPedWeHaveDamaged();

                if (syncPlayer != null)
                {
                    bin = PacketOptimization.WriteBulletSync(0, true, syncPlayer.RemoteHandle);
                    msg.Write((byte)PacketType.BulletPlayerSync);
                }
                else
                {
                    bin = PacketOptimization.WriteBulletSync(0, true, aimCoord.ToLVector());
                    msg.Write((byte)PacketType.BulletSync);
                }

                msg.Write(bin.Length);
                msg.Write(bin);
                Main.Client.SendMessage(msg, NetDeliveryMethod.ReliableOrdered, (int)ConnectionChannel.BulletSync);
                Main.BytesSent += bin.Length;
                Main.MessagesSent++;
            }
            else if (!sendShootingPacket && !_sent && DateTime.Now.Subtract(_lastShot).TotalMilliseconds > 50)
            {
                //Util.Util.SafeNotify("Sending NPacket " + DateTime.Now.Millisecond);
                _sent         = true;
                _lastShooting = false;
                _lastShot     = DateTime.Now;

                var msg = Main.Client.CreateMessage();

                byte[] bin = PacketOptimization.WriteBulletSync(0, false, aimCoord.ToLVector());
                msg.Write((byte)PacketType.BulletSync);

                msg.Write(bin.Length);
                msg.Write(bin);
                Main.Client.SendMessage(msg, NetDeliveryMethod.ReliableOrdered, (int)ConnectionChannel.BulletSync);
                Main.BytesSent += bin.Length;
                Main.MessagesSent++;
            }
        }
コード例 #14
0
        public void handleCoroner()
        {
            GameFiber.StartNew(delegate
            {
                try
                {
                    float Heading;
                    bool UseSpecialID = true;
                    Vector3 SpawnPoint;
                    float travelDistance;
                    int waitCount = 0;
                    while (true)
                    {
                        SceneManager.GetSpawnPoint(destination, out SpawnPoint, out Heading, UseSpecialID);
                        travelDistance = Rage.Native.NativeFunction.Natives.CALCULATE_TRAVEL_DISTANCE_BETWEEN_POINTS <float>(SpawnPoint.X, SpawnPoint.Y, SpawnPoint.Z, destination.X, destination.Y, destination.Z);
                        waitCount++;
                        if (Vector3.Distance(destination, SpawnPoint) > EntryPoint.SceneManagementSpawnDistance - 15f)
                        {
                            if (travelDistance < (EntryPoint.SceneManagementSpawnDistance * 4.5f))
                            {
                                Vector3 directionFromVehicleToPed1 = (destination - SpawnPoint);
                                directionFromVehicleToPed1.Normalize();

                                float HeadingToPlayer = MathHelper.ConvertDirectionToHeading(directionFromVehicleToPed1);

                                if (Math.Abs(MathHelper.NormalizeHeading(Heading) - MathHelper.NormalizeHeading(HeadingToPlayer)) < 150f)
                                {
                                    break;
                                }
                            }
                        }
                        if (waitCount >= 400)
                        {
                            UseSpecialID = false;
                        }
                        if (waitCount == 600)
                        {
                            Game.DisplayNotification("Press ~b~Y ~s~to force a spawn in the ~g~wilderness.");
                        }
                        if ((waitCount >= 600) && Albo1125.Common.CommonLibrary.ExtensionMethods.IsKeyDownComputerCheck(Keys.Y))
                        {
                            SpawnPoint = destination.Around(15f);
                            break;
                        }
                        GameFiber.Yield();
                    }
                    coronerVeh = new Vehicle(coronerVehicleModel, SpawnPoint, Heading);
                    coronerVeh.IsPersistent = true;
                    if (coronerVeh.HasSiren)
                    {
                        coronerVeh.IsSirenOn = true;
                    }
                    coronerBlip       = coronerVeh.AttachBlip();
                    coronerBlip.Color = System.Drawing.Color.Black;
                    coronerBlip.Flash(1000, 30000);
                    driver = new Ped(coronerModel, Vector3.Zero, 0);
                    driver.MakeMissionPed();
                    driver.IsInvincible = true;
                    driver.WarpIntoVehicle(coronerVeh, -1);

                    passenger = new Ped(coronerModel, Vector3.Zero, 0);
                    passenger.MakeMissionPed();
                    passenger.IsInvincible = true;
                    passenger.WarpIntoVehicle(coronerVeh, 0);
                    Game.DisplayNotification("~s~A ~b~coroner ~s~is en route to your location.");
                    if (anims)
                    {
                        Game.LocalPlayer.Character.Tasks.PlayAnimation("random@arrests", "generic_radio_chatter", 1.5f, AnimationFlags.UpperBodyOnly | AnimationFlags.SecondaryTask);
                        GameFiber.Wait(1000);
                        SceneManager.bleepPlayer.Play();
                    }
                    driveToPosition(driver, coronerVeh, destination);
                    coronerBlip.Delete();
                    while (deadBodies.Count > 0)
                    {
                        deadBodies.OrderBy(x => x.DistanceTo(driver.Position));
                        foreach (Ped body in deadBodies.ToArray())
                        {
                            if (body.Exists() && !bodiesBeingHandled.Contains(body))
                            {
                                dealWithBody(body);
                            }
                            else
                            {
                                deadBodies.Remove(body);
                            }
                        }
                        deadBodies.AddRange(getNearbyDeadPeds(driver.Position));
                    }
                    LeaveScene();
                }
                catch (Exception e)
                {
                    Game.LogTrivial(e.ToString());
                    if (driver.Exists())
                    {
                        driver.Delete();
                    }
                    if (passenger.Exists())
                    {
                        passenger.Delete();
                    }
                    if (coronerVeh.Exists())
                    {
                        coronerVeh.Delete();
                    }
                    foreach (Entity ent in deadBodies)
                    {
                        if (ent.Exists())
                        {
                            ent.Delete();
                        }
                    }
                    deadBodies.Clear();
                    foreach (Entity ent in bodyBags)
                    {
                        if (ent.Exists())
                        {
                            ent.Delete();
                        }
                    }
                }
            });
        }
コード例 #15
0
        private static void Main()
        {
            while (Game.IsLoading)
                GameFiber.Sleep(250);
            
            while (true)
            {
                GameFiber.Yield();

                GameTime = Game.GameTime;
                playerPed = Game.LocalPlayer.Character;
                playerPos = playerPed.Position;

                if (Settings.AIEnabled)
                {
                    if ((DateTime.UtcNow - lastVehiclesCheckTime).TotalSeconds > 1.5)
                    {
                        Entity[] vehs = World.GetEntities(playerPos, ActionRadius, GetEntitiesFlags.ConsiderAllVehicles);

                        for (int i = 0; i < vehs.Length; i++)
                        {
                            Vehicle v = (Vehicle)vehs[i];
                            if (CanBeStrobedVehicle(v))
                            {
                                StrobedVehicles.Add(new StrobedVehicle(v, Settings.Patterns[Random.Next(Settings.Patterns.Length)]));
                            }
                        }
                        lastVehiclesCheckTime = DateTime.UtcNow;
                    }

                    
                    for (int i = StrobedVehicles.Count - 1; i >= 0; i--)
                    {
                        StrobedVehicle v = StrobedVehicles[i];
                        if (v == null || !v.Vehicle || v.Vehicle == playerPed.CurrentVehicle || Vector3.DistanceSquared(v.Vehicle.Position, playerPos) > ActionRadiusSqr)
                        {
                            if (v != null)
                                v.Dispose();
                            StrobedVehicles.RemoveAt(i);
                            continue;
                        }

                        v.Update();
                    }
                }


                if (Settings.PlayerEnabled)
                {
                    if (PlayerStrobedVehicle == null)
                    {
                        TryCreatePlayerStrobedVehicle();
                    }
                    else if (!PlayerStrobedVehicle.Vehicle)
                    {
                        PlayerStrobedVehicle.Dispose();
                        PlayerStrobedVehicle = null;
                    }
                    else if (playerPed.IsInAnyVehicle(false) && PlayerStrobedVehicle.Vehicle != playerPed.CurrentVehicle)
                    {
                        PlayerStrobedVehicle.Dispose();
                        PlayerStrobedVehicle = null;
                        TryCreatePlayerStrobedVehicle();
                    }

                    PlayerStrobedVehicle?.Update();
                }
            }
        }
コード例 #16
0
ファイル: Particle.cs プロジェクト: DModder/ParticleLibrary
 /// <summary>
 /// ** Use the static method "SpawnParticle" for spawn non looped particles **
 /// Spawn a particle effect with a Ped and the following parameters...
 /// </summary>
 /// <param name="ptfx">The type of non particle you want</param>
 /// <param name="character">The Ped you want to spawn the particle effect on</param>
 /// <param name="offset">The offset from the Ped</param>
 /// <param name="rotation">The rotating of the particle effect</param>
 /// <param name="scale">Sets the size of the particle effect</param>
 public Particle(PTFXLoopedParticle ptfx, Ped character, float scale, Vector3 rotation, Vector3 offset)
     : this(PTFXLoopedDictionaries[(int)ptfx].Keys.ToArray<string>()[0],
            PTFXLoopedDictionaries[(int)ptfx].Values.ToArray<string>()[0],
            character, scale, offset, rotation)
 {
 }
コード例 #17
0
 private void SetAnimRate(Ped ped, float rate)
 {
     Function.Call(Hash.SET_ANIM_RATE, ped, (double)rate, 0.0, 0.0);
 }
コード例 #18
0
        /// <summary>
        /// OnBeforeCalloutDisplayed is where we create a blip for the user to see where the pursuit is happening, we initiliaize any variables above and set
        /// the callout message and position for the API to display
        /// </summary>
        /// <returns></returns>
        public override bool OnBeforeCalloutDisplayed()
        {
            //Set our spawn point to be on a street around 300f (distance) away from the player.
            spawnPoint = World.GetNextPositionOnStreet(Game.LocalPlayer.Character.Position.AroundPosition(230.0f));
            while (spawnPoint.DistanceTo(Game.LocalPlayer.Character.Position) < 30.0f)
            {
                spawnPoint = World.GetNextPositionOnStreet(Game.LocalPlayer.Character.Position.AroundPosition(230.0f)).GetSafeCoordinatesForPed();
                GameFiber.Yield();
            }
            if (spawnPoint == Vector3.Zero)
            {
                spawnPoint = World.GetNextPositionOnStreet(Game.LocalPlayer.Character.Position.AroundPosition(195.0f));
            }

            //Create our ped in the world
            if (scenario == 3 || scenario == 7)
            {
                ped = new Ped(acultModels.GetRandomElement(true), spawnPoint, MathHelper.GetRandomSingle(0.0f, 360.0f));
                if (ped.Model == new Model("a_m_m_acult_01") && Globals.Random.Next(1, 4) == 1)
                {
                    ped.SetVariation(9, 0, 0);
                    ped.SetVariation(2, 0, Globals.Random.Next(0, 3));
                }
            }
            else if (scenario == 2 && Globals.Random.Next(0, 20) < 1)
            {
                ped = new Ped("u_m_m_griff_01", spawnPoint, MathHelper.GetRandomSingle(0.0f, 360.0f));
            }
            else if (scenario == 5 || scenario == 11)
            {
                ped = new Ped(toplessModels, spawnPoint, 0.0f);
                if (ped.Exists())
                {
                    ped.SetVariation(8, 1, 1);
                }
            }
            else if (scenario == 6)
            {
                ped = new Ped(sunbatheModels.GetRandomElement(true), spawnPoint, MathHelper.GetRandomSingle(0.0f, 360.0f));
            }
            else if (scenario == 8)
            {
                ped = new Ped(epsilonModels.GetRandomElement(true), spawnPoint, MathHelper.GetRandomSingle(0.0f, 360.0f));
            }
            else if (scenario == 9)
            {
                ped = new Ped(trampModels.GetRandomElement(true), spawnPoint, MathHelper.GetRandomSingle(0.0f, 360.0f));
            }
            else if (scenario == 12)
            {
                ped = new Ped(pushupsModels.GetRandomElement(true), spawnPoint, MathHelper.GetRandomSingle(0.0f, 360.0f));
            }
            else
            {
                ped = new Ped(spawnPoint);
            }

            /*
             * Rage.Object test = new Rage.Object(protestSignModel, Vector3.Zero);
             * Rage.Object test2 = new Rage.Object(guitarModel, Vector3.Zero);
             * test.Delete();
             * test2.Delete();
             */
            //Now we have spawned them, check they actually exist and if not return false (preventing the callout from being accepted and aborting it)
            if (!ped.Exists())
            {
                return(false);
            }


            // Show the user where the pursuit is about to happen and block very close peds.
            this.ShowCalloutAreaBlipBeforeAccepting(spawnPoint, 17.5f);
            this.AddMinimumDistanceCheck(15.0f, ped.Position);

            // Set up our callout message and location
            this.CalloutMessage  = "Public disturbance";
            this.CalloutPosition = spawnPoint;

            //Play the police scanner audio for this callout (available as of the 0.2a API)
            Functions.PlayScannerAudioUsingPosition("CITIZENS_REPORT CRIME_DISTURBANCE IN_OR_ON_POSITION UNITS_RESPOND_CODE_02", spawnPoint);

            return(base.OnBeforeCalloutDisplayed());
        }
コード例 #19
0
 public static int StartPTFXOnPedBone(string asset, string fxname, Ped ped, Vector3 posOffset, Vector3 rot, int boneindex, float fxScale)
 {
     Function.Call(Hash._SET_PTFX_ASSET_NEXT_CALL, asset);
     return(Function.Call <int>(Hash.START_PARTICLE_FX_NON_LOOPED_ON_PED_BONE, fxname, ped, posOffset.X, posOffset.Y, posOffset.Z, rot.X, rot.Y, rot.Z, boneindex, fxScale, false, false, false));
 }
コード例 #20
0
 public void AimAt(Ped ped, int duration)
 {
     Internal.Function.Call(0x0635, Ped, ped, duration);
 }
コード例 #21
0
ファイル: Particle.cs プロジェクト: DModder/ParticleLibrary
 /*
  * MARK: - Constructors for a Ped
  */
 /// <summary>
 /// ** Use the static method "SpawnParticle" for spawn non looped particles **
 /// Spawn a particle effect with a Ped and the following parameters...
 /// </summary>
 /// <param name="ptfx">The type of non particle you want</param>
 /// <param name="character">The Ped you want to spawn the particle effect on</param>
 /// <param name="scale">Sets the size of the particle effect</param>
 public Particle(PTFXLoopedParticle ptfx, Ped character, float scale)
     : this(PTFXLoopedDictionaries[(int)ptfx].Keys.ToArray<string>()[0],
            PTFXLoopedDictionaries[(int)ptfx].Values.ToArray<string>()[0],
            character, scale, Vector3.Zero, Vector3.Zero)
 {
 }
コード例 #22
0
 public void LookAt(Ped target, int duration)
 {
     Internal.Function.Call(0x05bf, Ped, target, duration);
 }
コード例 #23
0
ファイル: Particle.cs プロジェクト: DModder/ParticleLibrary
 /// <summary>
 /// ** Use the constructor for spawning looped particles **
 /// Spawn a particle effect with a Ped and the following parameters...
 /// </summary>
 /// <param name="ptfx">The type of particle you want</param>
 /// <param name="character">The Ped you want to spawn the particle effect on</param>
 /// <param name="scale">Sets the size of the particle effect</param>
 /// <param name="rotation">The rotating of the particle effect</param>
 /// <param name="offset">The offset of the particle effect from the ped</param>
 public static void SpawnParticle(PTFXNonLoopedParticle ptfx, Ped character, float scale, Vector3 rotation, Vector3 offset)
 {
     SpawnParticle(PTFXNonLoopedDictionaries[(int)ptfx].Keys.ToArray<string>()[0],
                   PTFXNonLoopedDictionaries[(int)ptfx].Values.ToArray<string>()[0],
                   character, scale, rotation, offset);
 }
コード例 #24
0
 public void TurnTo(Ped target)
 {
     Internal.Function.Call(0x0a1d, Ped, target);
 }
コード例 #25
0
        private void onReceive(IAsyncResult iar)
        {
            lock (client)
            {
                try
                {
                    client.client.Client.EndReceive(iar);
                    var bpr = new BinaryPacketReader(buffer);
                    while (bpr.canRead())
                    {
                        Commands command = bpr.readCommand();
                        if (command == Commands.Invalid)
                        {
                            break;
                        }
                        try
                        {
                            switch (command)
                            {
                            case Commands.Client_enableUDPTunnel:
                            {
                                int port = bpr.readInt32();
                                client.udpTunnel = new ClientUDPTunnel(port);
                            }
                            break;

                            case Commands.Client_ping:
                            {
                                Int64 timestamp = bpr.readInt64();
                                write(new BinaryPacketFormatter(Commands.Client_ping, timestamp).getBytes());
                            }
                            break;

                            case Commands.Player_setModel:
                            {
                                string model = MIVSDK.ModelDictionary.getPedModelById(bpr.readUInt32());
                                client.enqueueAction(new Action(delegate
                                    {
                                        client.getPlayer().Model = new Model(model);
                                    }));
                            }
                            break;

                            case Commands.Player_setHeading:
                            {
                                var g = bpr.readSingle();
                                client.enqueueAction(new Action(delegate
                                    {
                                        client.getPlayerPed().Heading = g;
                                    }));
                            }
                            break;


                            case Commands.Player_setVirtualWorld:
                            {
                                uint id     = bpr.readUInt32();
                                uint vworld = bpr.readUInt32();
                                if (client.pedController.Exists(id))
                                {
                                    var instance = client.pedController.GetInstance(id);
                                    instance.VirtualWorld = vworld;
                                }
                            }
                            break;

                            case Commands.Game_setGameTime:
                            {
                                var g = bpr.readInt64();
                                client.enqueueAction(new Action(delegate
                                    {
                                        World.CurrentDayTime = new TimeSpan(g);
                                    }));
                            }
                            break;

                            case Commands.Game_setWeather:
                            {
                                var g = bpr.readByte();
                                client.enqueueAction(new Action(delegate
                                    {
                                        World.Weather = (Weather)(int)g;
                                        GTA.Native.Function.Call("FORCE_WEATHER_NOW", (int)g);
                                    }));
                            }
                            break;

                            case Commands.Game_fadeScreenIn:
                            {
                                var data = bpr.readInt32();
                                client.enqueueAction(new Action(delegate
                                    {
                                        Game.FadeScreenIn(data);
                                    }));
                            }
                            break;

                            case Commands.Game_fadeScreenOut:
                            {
                                var data = bpr.readInt32();
                                client.enqueueAction(new Action(delegate
                                    {
                                        Game.FadeScreenOut(data);
                                    }));
                            }
                            break;

                            case Commands.Game_showLoadingScreen:
                            {
                                var data = bpr.readInt32();
                                client.enqueueAction(new Action(delegate
                                    {
                                        GTA.Native.Function.Call("FORCE_LOADING_SCREEN");
                                    }));
                            }
                            break;

                            case Commands.Game_hideLoadingScreen:
                            {
                                var data = bpr.readInt32();
                                client.enqueueAction(new Action(delegate
                                    {
                                        GTA.Native.Function.Call("DONT_DISPLAY_LOADING_ON_FADE_THIS_FRAME");
                                        Game.FadeScreenIn(1);
                                    }));
                            }
                            break;

                            case Commands.Game_setGravity:
                            {
                                var data = bpr.readSingle();
                                client.enqueueAction(new Action(delegate
                                    {
                                        client.getPlayerPed().GravityMultiplier = data;
                                    }));
                            }
                            break;

                            case Commands.Client_setVirtualWorld:
                            {
                                client.CurrentVirtualWorld = bpr.readUInt32();
                            }
                            break;

                            case Commands.Client_pauseBroadcast:
                            {
                                client.BroadcastingPaused = true;
                            }
                            break;

                            case Commands.Client_resumeBroadcast:
                            {
                                client.BroadcastingPaused = false;
                            }
                            break;

                            case Commands.Client_JSEval:
                            {
                                string script = bpr.readString();
                                client.enqueueAction(new Action(delegate
                                    {
                                        client.jsEngine.Execute(script);
                                    }));
                            }
                            break;

                            case Commands.Vehicle_removePeds:
                            {
                                uint id     = bpr.readUInt32();
                                uint vworld = bpr.readUInt32();
                                if (client.vehicleController.Exists(id))
                                {
                                    var instance = client.vehicleController.GetInstance(id);
                                    if (instance.StreamedIn)
                                    {
                                        instance.gameReference.EveryoneLeaveVehicle();
                                    }
                                }
                            }
                            break;

                            case Commands.Vehicle_repaint:
                            {
                                uint   id    = bpr.readUInt32();
                                ushort color = bpr.readUInt16();
                                if (client.vehicleController.Exists(id))
                                {
                                    var instance = client.vehicleController.GetInstance(id);
                                    if (instance.StreamedIn)
                                    {
                                        instance.gameReference.Color = (ColorIndex)color;
                                    }
                                }
                            }
                            break;

                            case Commands.Vehicle_repair:
                            {
                                uint id = bpr.readUInt32();
                                if (client.vehicleController.Exists(id))
                                {
                                    var instance = client.vehicleController.GetInstance(id);
                                    //instance.health = 100;
                                    if (instance.StreamedIn)
                                    {
                                        instance.gameReference.Repair();
                                    }
                                }
                            }
                            break;

                            case Commands.Vehicle_setModel:
                            {
                                uint   id    = bpr.readUInt32();
                                string model = MIVSDK.ModelDictionary.getVehicleById(bpr.readUInt32());
                                if (client.vehicleController.Exists(id))
                                {
                                    var instance = client.vehicleController.GetInstance(id);
                                    instance.model = model;
                                    if (instance.StreamedIn)
                                    {
                                        instance.gameReference.Delete();
                                    }
                                }
                            }
                            break;

                            case Commands.Vehicle_setOrientation:
                            {
                                uint       id   = bpr.readUInt32();
                                Quaternion quat = fromSharpDX(bpr.readQuaternion());
                                if (client.vehicleController.Exists(id))
                                {
                                    var instance = client.vehicleController.GetInstance(id);
                                    instance.orientation = quat;
                                    if (instance.StreamedIn)
                                    {
                                        instance.gameReference.RotationQuaternion = quat;
                                    }
                                }
                            }
                            break;

                            case Commands.Vehicle_setPosition:
                            {
                                uint    id       = bpr.readUInt32();
                                Vector3 position = fromSharpDX(bpr.readVector3());
                                if (client.vehicleController.Exists(id))
                                {
                                    var instance = client.vehicleController.GetInstance(id);
                                    instance.position = position;
                                    if (instance.StreamedIn)
                                    {
                                        instance.gameReference.Position = position;
                                    }
                                }
                            }
                            break;

                            case Commands.Vehicle_setVelocity:
                            {
                                uint    id       = bpr.readUInt32();
                                Vector3 velocity = fromSharpDX(bpr.readVector3());
                                if (client.vehicleController.Exists(id))
                                {
                                    var instance = client.vehicleController.GetInstance(id);
                                    if (instance.StreamedIn)
                                    {
                                        instance.gameReference.Velocity = velocity;
                                    }
                                }
                            }
                            break;

                            case Commands.Vehicle_setVirtualWorld:
                            {
                                uint id     = bpr.readUInt32();
                                uint vworld = bpr.readUInt32();
                                if (client.vehicleController.Exists(id))
                                {
                                    var instance = client.vehicleController.GetInstance(id);
                                    instance.VirtualWorld = vworld;
                                }
                            }
                            break;

                            case Commands.NPC_setVirtualWorld:
                            {
                                uint id     = bpr.readUInt32();
                                uint vworld = bpr.readUInt32();
                                if (client.npcPedController.Exists(id))
                                {
                                    var instance = client.npcPedController.GetInstance(id);
                                    instance.VirtualWorld = vworld;
                                }
                            }
                            break;

                            case Commands.Player_setHealth:
                            {
                                int h = bpr.readInt32();
                                //client.chatController.writeChat("setting healtcz " + h.ToString());
                                client.enqueueAction(new Action(delegate
                                    {
                                        client.getPlayerPed().Health = h;
                                    }));
                            }
                            break;

                            case Commands.Player_setVehicleHealth:
                            {
                                int h = bpr.readInt32();
                                //client.chatController.writeChat("setting healtcz " + h.ToString());
                                client.enqueueAction(new Action(delegate
                                    {
                                        if (client.getPlayerPed().isInVehicle())
                                        {
                                            if (h <= 0)
                                            {
                                                client.getPlayerPed().CurrentVehicle.Explode();
                                            }
                                            else
                                            {
                                                client.getPlayerPed().CurrentVehicle.Health = h;
                                            }
                                        }
                                    }));
                            }
                            break;

                            case Commands.Chat_writeLine:
                            {
                                client.chatController.writeChat(bpr.readString());
                            }
                            break;

                            case Commands.Player_setPosition:
                            {
                                Vector3 vec = fromSharpDX(bpr.readVector3());
                                //client.chatController.writeChat("OasK");
                                client.enqueueAction(new Action(delegate
                                    {
                                        client.getPlayer().TeleportTo(vec);
                                    }));
                            }
                            break;

                            case Commands.Player_setVelocity:
                            {
                                Vector3 vec = fromSharpDX(bpr.readVector3());
                                client.enqueueAction(new Action(delegate
                                    {
                                        client.getPlayerPed().Velocity = vec;
                                    }));
                            }
                            break;

                            case Commands.InternalClient_finishSpawn:
                            {
                                client.enqueueAction(new Action(delegate
                                    {
                                        client.finishSpawn();
                                    }));
                            }
                            break;

                            case Commands.Camera_setPosition:
                            {
                                var data = fromSharpDX(bpr.readVector3());
                                client.enqueueAction(new Action(delegate
                                    {
                                        client.cameraController.Position = data;
                                    }));
                            }
                            break;

                            case Commands.Camera_setDirection:
                            {
                                var data = fromSharpDX(bpr.readVector3());
                                client.enqueueAction(new Action(delegate
                                    {
                                        client.cameraController.Direction = data;
                                    }));
                            }
                            break;

                            case Commands.Camera_setOrientation:
                            {
                                var data = fromSharpDX(bpr.readVector3());
                                client.enqueueAction(new Action(delegate
                                    {
                                        client.cameraController.Rotation = data;
                                    }));
                            }
                            break;

                            case Commands.Camera_setFOV:
                            {
                                var data = bpr.readSingle();
                                client.enqueueAction(new Action(delegate
                                    {
                                        client.cameraController.FOV = data;
                                    }));
                            }
                            break;

                            case Commands.Camera_lookAt:
                            {
                                var data = fromSharpDX(bpr.readVector3());
                                client.enqueueAction(new Action(delegate
                                    {
                                        client.cameraController.LookAt(data);
                                    }));
                            }
                            break;

                            case Commands.Camera_reset:
                            {
                                client.enqueueAction(new Action(delegate
                                    {
                                        client.cameraController.Reset();
                                    }));
                            }
                            break;

                            case Commands.Player_freeze:
                            {
                                client.enqueueAction(new Action(delegate
                                    {
                                        client.getPlayer().CanControlCharacter = false;
                                    }));
                            }
                            break;

                            case Commands.Player_unfreeze:
                            {
                                client.enqueueAction(new Action(delegate
                                    {
                                        client.getPlayer().CanControlCharacter = true;
                                    }));
                            }
                            break;

                            case Commands.Player_giveWeapon:
                            {
                                Weapon weapon = (Weapon)bpr.readInt32();
                                int    ammo   = bpr.readInt32();
                                client.enqueueAction(new Action(delegate
                                    {
                                        client.getPlayerPed().Weapons.FromType(weapon).Ammo = ammo;
                                    }));
                            }
                            break;

                            case Commands.Global_setPlayerPedText:
                            {
                                uint   playerid = bpr.readUInt32();
                                string text     = bpr.readString();
                                if (client.pedController.Exists(playerid))
                                {
                                    StreamedPed ped = client.pedController.GetInstance(playerid);
                                    ped.CurrentChatMessage = text;
                                }
                            }
                            break;

                            case Commands.Global_setPlayerModel:
                            {
                                uint   playerid = bpr.readUInt32();
                                string model    = MIVSDK.ModelDictionary.getPedModelById(bpr.readUInt32());
                                if (client.playerModels.ContainsKey(playerid))
                                {
                                    client.playerModels[playerid] = model;
                                }
                                else
                                {
                                    client.playerModels.Add(playerid, model);
                                }
                                if (client.pedController.Exists(playerid))
                                {
                                    var player = client.pedController.GetInstance(playerid);
                                    if (player.IsStreamedIn())
                                    {
                                        player.gameReference.Delete();
                                    }
                                }
                            }
                            break;

                            case Commands.Global_setPlayerName:
                            {
                                uint   playerid = bpr.readUInt32();
                                string name     = bpr.readString();
                                if (client.playerNames.ContainsKey(playerid))
                                {
                                    client.playerNames[playerid] = name;
                                }
                                else
                                {
                                    client.playerNames.Add(playerid, name);
                                }
                                if (client.pedController.Exists(playerid))
                                {
                                    var player = client.pedController.GetInstance(playerid);
                                    if (player.IsStreamedIn())
                                    {
                                        player.gameReference.Delete();
                                    }
                                }
                            }
                            break;

                            case Commands.Global_createPlayer:
                            {
                                uint   playerid = bpr.readUInt32();
                                string model    = MIVSDK.ModelDictionary.getPedModelById(bpr.readUInt32());
                                string name     = bpr.readString();

                                if (client.playerNames.ContainsKey(playerid))
                                {
                                    client.playerNames[playerid] = name;
                                }
                                else
                                {
                                    client.playerNames.Add(playerid, name);
                                }

                                if (client.playerModels.ContainsKey(playerid))
                                {
                                    client.playerModels[playerid] = model;
                                }
                                else
                                {
                                    client.playerModels.Add(playerid, model);
                                }

                                client.pedController.Add(playerid, new StreamedPed(client.pedStreamer, model, name, Vector3.Zero, 0, (BlipColor)(playerid % 13)));
                            }
                            break;

                            case Commands.Request_getSelectedPlayer:
                            {
                                uint requestid = bpr.readUInt32();
                                client.enqueueAction(new Action(delegate
                                    {
                                        var peds        = World.GetPeds(client.getPlayerPed().Position, 80.0f);
                                        Ped selectedPed = null;
                                        foreach (var ped in peds)
                                        {
                                            var projected = (Vector2)World.WorldToScreenProject(ped.Position);
                                            if (Math.Abs((projected - new Vector2(Game.Resolution.Width / 2, Game.Resolution.Height / 2)).Length()) < 30.0)
                                            {
                                                selectedPed = ped;
                                                break;
                                            }
                                        }
                                        var bpf = new BinaryPacketFormatter(Commands.Request_getSelectedPlayer);
                                        bpf.Add(requestid);
                                        if (selectedPed != null)
                                        {
                                            bpf.Add(client.pedController.dict.Count(a => a.Value.IsStreamedIn() && a.Value.gameReference == selectedPed) > 0 ? client.pedController.dict.First(a => a.Value.IsStreamedIn() && a.Value.gameReference == selectedPed).Key : 0);
                                        }
                                        else
                                        {
                                            bpf.Add(0);
                                        }
                                        client.serverConnection.write(bpf.getBytes());
                                    }));
                            }
                            break;

                            case Commands.Request_getCameraPosition:
                            {
                                uint requestid = bpr.readUInt32();
                                client.enqueueAction(new Action(delegate
                                    {
                                        var bpf = new BinaryPacketFormatter(Commands.Request_getCameraPosition);
                                        bpf.Add(requestid);
                                        bpf.Add(new SharpDX.Vector3(Game.CurrentCamera.Position.X, Game.CurrentCamera.Position.Y, Game.CurrentCamera.Position.Z));
                                        client.serverConnection.write(bpf.getBytes());
                                    }));
                            }
                            break;

                            case Commands.Request_worldToScreen:
                            {
                                uint requestid = bpr.readUInt32();
                                var  world     = bpr.readVector3();
                                client.enqueueAction(new Action(delegate
                                    {
                                        var bpf = new BinaryPacketFormatter(Commands.Request_worldToScreen);
                                        bpf.Add(requestid);
                                        var screen = (Vector2)World.WorldToScreenProject(new Vector3(world.X, world.Y, world.Z));
                                        bpf.Add(screen.X);
                                        bpf.Add(screen.Y);
                                        client.serverConnection.write(bpf.getBytes());
                                    }));
                            }
                            break;

                            case Commands.Request_isObjectVisible:
                            {
                                uint requestid = bpr.readUInt32();
                                var  position  = bpr.readVector3();
                                client.enqueueAction(new Action(delegate
                                    {
                                        var bpf = new BinaryPacketFormatter(Commands.Request_isObjectVisible);
                                        bpf.Add(requestid);
                                        bpf.Add(new byte[1] {
                                            (byte)(Game.CurrentCamera.isSphereVisible(new Vector3(position.X, position.Y, position.Z), 1.0f) ? 1 : 0)
                                        });
                                        client.serverConnection.write(bpf.getBytes());
                                    }));
                            }
                            break;

                            case Commands.Vehicle_create:
                            {
                                uint       id    = bpr.readUInt32();
                                Vector3    pos   = fromSharpDX(bpr.readVector3());
                                Quaternion rot   = fromSharpDX(bpr.readQuaternion());
                                string     model = MIVSDK.ModelDictionary.getVehicleById(bpr.readUInt32());
                                client.enqueueAction(new Action(delegate
                                    {
                                        client.vehicleController.Add(id, new StreamedVehicle(client.vehicleStreamer, model, pos, rot));
                                    }));
                            }
                            break;

                            case Commands.NPC_create:
                            {
                                //int count = bpr.readInt32();
                                uint    id      = bpr.readUInt32();
                                Vector3 pos     = fromSharpDX(bpr.readVector3());
                                float   heading = bpr.readSingle();
                                string  model   = MIVSDK.ModelDictionary.getPedModelById(bpr.readUInt32());

                                string str = bpr.readString();
                                client.enqueueAction(new Action(delegate
                                    {
                                        client.npcPedController.Add(id, new StreamedPed(client.pedStreamer, model, str, pos, heading, BlipColor.Grey));
                                    }));
                            }
                            break;

                            case Commands.NPC_update:
                            {
                                //int count = bpr.readInt32();
                                uint    id      = bpr.readUInt32();
                                Vector3 pos     = fromSharpDX(bpr.readVector3());
                                float   heading = bpr.readSingle();
                                string  model   = MIVSDK.ModelDictionary.getPedModelById(bpr.readUInt32());

                                string str = bpr.readString();
                                client.enqueueAction(new Action(delegate
                                    {
                                        var ped         = client.npcPedController.GetInstance(id);
                                        ped.position    = pos;
                                        ped.heading     = heading;
                                        ped.model       = model;
                                        ped.networkname = str;
                                    }));
                            }
                            break;

                            case Commands.NPC_setPosition:
                            {
                                uint id = bpr.readUInt32();

                                Vector3 pos = fromSharpDX(bpr.readVector3());

                                client.enqueueAction(new Action(delegate
                                    {
                                        var ped      = client.npcPedController.GetInstance(id);
                                        ped.position = pos;
                                        if (ped.IsStreamedIn())
                                        {
                                            ped.gameReference.Position = pos;
                                        }
                                    }));
                            }
                            break;

                            case Commands.NPC_setHeading:
                            {
                                uint id = bpr.readUInt32();

                                float heading = bpr.readSingle();

                                client.enqueueAction(new Action(delegate
                                    {
                                        var ped     = client.npcPedController.GetInstance(id);
                                        ped.heading = heading;
                                        if (ped.IsStreamedIn())
                                        {
                                            ped.gameReference.Heading = heading;
                                        }
                                    }));
                            }
                            break;

                            case Commands.NPC_runTo:
                            {
                                uint id = bpr.readUInt32();

                                Vector3 pos = fromSharpDX(bpr.readVector3());

                                client.enqueueAction(new Action(delegate
                                    {
                                        var ped      = client.npcPedController.GetInstance(id);
                                        ped.position = pos;
                                        if (ped.IsStreamedIn())
                                        {
                                            ped.animator.refreshAnimationForce();
                                            ped.animator.playAnimation(PedAnimations.RunTo, pos);
                                        }
                                    }));
                            }
                            break;

                            case Commands.NPC_walkTo:
                            {
                                uint id = bpr.readUInt32();

                                Vector3 pos = fromSharpDX(bpr.readVector3());

                                client.enqueueAction(new Action(delegate
                                    {
                                        var ped      = client.npcPedController.GetInstance(id);
                                        ped.position = pos;
                                        if (ped.IsStreamedIn())
                                        {
                                            ped.animator.refreshAnimationForce();
                                            ped.animator.playAnimation(PedAnimations.WalkTo, pos);
                                        }
                                    }));
                            }
                            break;

                            case Commands.NPC_enterVehicle:
                            {
                                uint id = bpr.readUInt32();

                                uint vid = bpr.readUInt32();

                                client.enqueueAction(new Action(delegate
                                    {
                                        var ped        = client.npcPedController.GetInstance(id);
                                        ped.vehicle_id = vid;
                                        var veh        = client.vehicleController.GetInstance(vid);
                                        if (ped.IsStreamedIn() && veh.IsStreamedIn())
                                        {
                                            ped.gameReference.WarpIntoVehicle(veh.gameReference, VehicleSeat.Driver);
                                        }
                                    }));
                            }
                            break;

                            case Commands.NPC_driveTo:
                            {
                                uint id = bpr.readUInt32();

                                Vector3 pos = fromSharpDX(bpr.readVector3());

                                client.enqueueAction(new Action(delegate
                                    {
                                        var ped = client.npcPedController.GetInstance(id);
                                        if (ped.vehicle_id > 0)
                                        {
                                            var veh = client.vehicleController.GetInstance(ped.vehicle_id);
                                            if (ped.IsStreamedIn() && veh.IsStreamedIn())
                                            {
                                                ped.gameReference.Task.DriveTo(veh.gameReference, pos, 999.0f, false, true);
                                            }
                                        }
                                    }));
                            }
                            break;

                            case Commands.NPC_leaveVehicle:
                            {
                                uint id = bpr.readUInt32();

                                client.enqueueAction(new Action(delegate
                                    {
                                        var ped        = client.npcPedController.GetInstance(id);
                                        ped.vehicle_id = 0;
                                        if (ped.IsStreamedIn())
                                        {
                                            ped.gameReference.LeaveVehicle();
                                        }
                                    }));
                            }
                            break;

                            case Commands.NPC_setModel:
                            {
                                uint   id    = bpr.readUInt32();
                                string model = MIVSDK.ModelDictionary.getPedModelById(bpr.readUInt32());

                                client.enqueueAction(new Action(delegate
                                    {
                                        var ped   = client.npcPedController.GetInstance(id);
                                        ped.model = model;
                                        if (ped.IsStreamedIn())
                                        {
                                            ped.gameReference.Delete();
                                        }
                                    }));
                            }
                            break;

                            case Commands.NPC_setImmortal:
                            {
                                uint id     = bpr.readUInt32();
                                byte option = bpr.readByte();

                                client.enqueueAction(new Action(delegate
                                    {
                                        var ped      = client.npcPedController.GetInstance(id);
                                        ped.immortal = option == 1;
                                        if (ped.IsStreamedIn())
                                        {
                                            ped.gameReference.Invincible = option == 1;
                                        }
                                    }));
                            }
                            break;

                            case Commands.NPCDialog_show:
                            {
                                uint     id          = bpr.readUInt32();
                                string   captiontext = bpr.readString();
                                string   texttext    = bpr.readString();
                                string   str         = bpr.readString();
                                string[] split       = str.Split('\x01');
                                client.enqueueAction(new Action(delegate
                                    {
                                        GTA.Forms.Form form = new GTA.Forms.Form();

                                        GTA.Forms.Label caption = new GTA.Forms.Label();
                                        caption.Location        = new System.Drawing.Point(10, 10);
                                        caption.Text            = captiontext;

                                        GTA.Forms.Label text = new GTA.Forms.Label();
                                        text.Location        = new System.Drawing.Point(10, 40);
                                        text.Text            = texttext;

                                        form.Controls.Add(caption);
                                        form.Controls.Add(text);

                                        for (int i = 0; i < split.Length; i++)
                                        {
                                            GTA.Forms.Button button = new GTA.Forms.Button();
                                            button.Location         = new System.Drawing.Point(10, 40 + i * 20);
                                            button.Text             = split[i];

                                            button.MouseDown += (s, o) =>
                                            {
                                                var bpf = new BinaryPacketFormatter(Commands.NPCDialog_sendResponse);
                                                bpf.Add(id);
                                                bpf.Add(new byte[1] {
                                                    (byte)(i - 2)
                                                });
                                                write(bpf.getBytes());

                                                form.Close();
                                            };

                                            form.Controls.Add(button);
                                        }
                                        form.Show();
                                    }));
                            }
                            break;
                            }
                        }
                        catch (Exception e)
                        {
                            Client.log("Failed dispatching command " + command.ToString() + " with " + e.Message + " " + e.StackTrace);
                            client.chatController.writeChat("Failed dispatching command " + command.ToString() + " with " + e.Message + " " + e.StackTrace);
                            client.chatController.writeChat("Disconnected abnormally from server");
                            client.currentState = ClientState.Disconnected;
                        }
                    }

                    client.client.Client.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, onReceive, null);
                    //}
                }
                catch (Exception e)
                {
                    Client.log("Failed receive with message " + e.Message + " " + e.StackTrace);
                    client.chatController.writeChat("Failed receive with message " + e.Message + " " + e.StackTrace);
                    client.chatController.writeChat("Disconnected abnormally from server");
                    client.currentState = ClientState.Disconnected;
                    //throw e;
                }
            }
        }
コード例 #26
0
 internal PedTasks(Ped ped) : base(ped)
 {
 }
コード例 #27
0
 public static int GetPedGroupIndex(Ped p)
 {
     return(Function.Call <int>(Hash.GET_PED_GROUP_INDEX, p.Handle));
 }
コード例 #28
0
 public void DriveBy(Ped target, float radius, int firingRate)
 {
     Internal.Function.Call(0x0713, Ped, target, -1, 0f, 0f, 0f, radius, 4, 1, firingRate);
 }
コード例 #29
0
        bool IsPedFriendly(Ped p)
        {
            Relationship rel = p.GetRelationshipWithPed(Game.Player.Character);

            return(rel == Relationship.Companion || rel == Relationship.Like || rel == Relationship.Respect);
        }
コード例 #30
0
 internal Tasks(Ped ped)
 {
     Ped = ped;
 }
コード例 #31
0
 public static bool IsPolicePed(this Ped ped)
 {
     return(ped.RelationshipGroup == "COP");
 }
コード例 #32
0
 public void FightAgainst(Ped ped)
 {
     Internal.Function.Call(0x05e2, Ped, ped);
 }
コード例 #33
0
ファイル: Construct01.cs プロジェクト: enricomeloni/GTA5_Mods
 public override PedClassifier GetPedClassifier(Ped ped)
 {
     return(new Construct01Classifier(ped));
 }
コード例 #34
0
 public void FightAgainst(Ped ped, int duration)
 {
     Internal.Function.Call(0x07a5, Ped, ped, duration);
 }
コード例 #35
0
        private async Task SearchPlayer()
        {
            if (this.action == ACTION.Search)
            {
                Main.ShowNotification(Main.settings.dict["alreadySearching"]);
                return;
            }

            Ped player = await this.GetClosestPed();

            if (player == null || !player.IsPlayer)
            {
                Main.ShowNotification(Main.settings.dict["noPlayerFound"]);
                return;
            }

            this.action = ACTION.Search;

            Main.ShowNotification($"~y~[ETF]*{Main.settings.dict["search"]}*");

            Vector3 plySideR = player.GetOffsetPosition(new Vector3(1.3f, 0.0f, 0.0f));

            Vector3 plyRear = player.GetOffsetPosition(new Vector3(0.0f, -1.3f, 0.0f));

            Vector3 plySideL = player.GetOffsetPosition(new Vector3(-1.3f, 0.0f, 0.0f));

            // Get Inventory
            bool found = false;

            if (Main.settings.standalone == false)
            {
                Main.ESX.TriggerServerCallback(
                    "esx_inventoryhud:getPlayerInventory",
                    new Action <dynamic>(
                        (inventory) =>
                {
                    bool isIllegal = Main.ContainsIllegal(inventory, true);
                    if (isIllegal)
                    {
                        found = true;
                    }
                }), GetPlayerServerId(NetworkGetPlayerIndexFromPed(player.Handle)));
            }


            this.dog.Task.RunTo(plySideR, true);

            this.dog.Task.AchieveHeading(player.Heading - 90, -1);

            await Delay(2000);

            this.dog.Task.RunTo(plyRear, true);

            this.dog.Task.AchieveHeading(player.Heading, -1);

            await Delay(2000);

            this.dog.Task.RunTo(plySideL, true);

            this.dog.Task.AchieveHeading(player.Heading - 270, -1);

            if (found)
            {
                Main.ShowNotification(Main.settings.dict["dogDetects"]);
            }
            else
            {
                Main.ShowNotification(Main.settings.dict["dogDoesntDetect"]);
            }

            // For people that want to use the search function in their own ways
            TriggerEvent("K9:Export:SearchPlayer", GetPlayerServerId(NetworkGetPlayerIndexFromPed(player.Handle)));
            TriggerServerEvent("K9:Export:SearchPlayer", GetPlayerServerId(NetworkGetPlayerIndexFromPed(player.Handle)));

            await this.Stay();
        }
コード例 #36
0
ファイル: Editor.cs プロジェクト: LordRevan2/MissionCreator
        public SerializableActorObjective CreatePedObjective(Model model, Vector3 pos, float heading)
        {
            var tmpPed = new Ped(model, pos, heading);
            tmpPed.IsPositionFrozen = false;
            tmpPed.BlockPermanentEvents = true;

            var blip = tmpPed.AttachBlip();
            blip.Color = Color.Red;
            blip.Scale = 0.7f;
            _blips.Add(blip);

            var tmpObj = new SerializableActorObjective();
            tmpObj.SetPed(tmpPed);
            tmpObj.SpawnAfter = 0;
            tmpObj.ActivateAfter = 0;
            tmpObj.Behaviour = 2;
            tmpObj.RelationshipGroup = 5;
            tmpObj.WeaponAmmo = 9999;
            tmpObj.WeaponHash = 0;
            tmpObj.Health = 200;
            tmpObj.Accuracy = 50;
            tmpObj.Armor = 0;
            tmpObj.SpawnInVehicle = false;
            tmpObj.Waypoints = new List<SerializableWaypoint>();
            CurrentMission.Objectives.Add(tmpObj);
            return tmpObj;
        }
コード例 #37
0
ファイル: ExtraTasks.cs プロジェクト: StrayDev/Stray.Common
 public static void TaskCombatPed(Ped target, Ped pedToAttack)
 {
     NativeFunction.CallByName<uint>("TASK_COMBAT_PED", target, pedToAttack, 0, 16);
 }
コード例 #38
0
ファイル: Editor.cs プロジェクト: LordRevan2/MissionCreator
        public SerializableSpawnpoint CreateSpawnpoint(Model model, Vector3 pos, float heading)
        {
            var tmpPed = new Ped(model, pos, heading);
            tmpPed.IsPositionFrozen = true;
            tmpPed.BlockPermanentEvents = true;

            var blip = tmpPed.AttachBlip();
            blip.Color = Color.White;
            _blips.Add(blip);

            var tmpObj = new SerializableSpawnpoint();
            tmpObj.SetEntity(tmpPed);
            tmpObj.SpawnAfter = 0;
            tmpObj.RemoveAfter = 0;
            tmpObj.WeaponAmmo = 9999;
            tmpObj.WeaponHash = 0;
            tmpObj.Health = 200;
            tmpObj.Armor = 0;
            tmpObj.SpawnInVehicle = false;
            CurrentMission.Spawnpoints.Add(tmpObj);
            return tmpObj;
        }
コード例 #39
0
 public void FleeFromPed(Ped ped)
 {
     FleeFromPed(ped, false);
 }
コード例 #40
0
ファイル: Particle.cs プロジェクト: DModder/ParticleLibrary
        /// <summary>
        /// ** Use the constructor for spawning looped particles **
        /// Spawn a particle effect with a Ped and the following parameters...
        /// </summary>
        /// <param name="ptfxAssetName">For all other assets/effects than the ones included</param>
        /// <param name="ptfxParticleName">For all other assets/effects than the ones included</param>
        /// <param name="character">The Ped you want to spawn the particle effect on</param>
        /// <param name="offset">The offset from the Ped</param>
        /// <param name="rotation">The rotating of the particle effect</param>
        /// <param name="scale">Sets the size of the particle effect</param>
        public static void SpawnParticle(string ptfxAssetName, string ptfxParticleName, Ped character, float scale, Vector3 rotation, Vector3 offset)
        {
            //Preparing the Asset...
            if (!SPreparingAsset(ptfxAssetName)) { return; }

            //Everything went OK. Procceding...
            //Set the PTFX asset to ready, and spawn the particle
            //NativeFunction.CallByHash((ulong)Hashes._SET_PTFX_ASSET_NEXT_CALL, null, ptfxAssetName);
            NativeFunction.Natives.x6C38AF3693A69A91(ptfxAssetName);
            NativeFunction.Natives.x0D53A3B8DA0809D2<bool>(ptfxParticleName, Game.LocalPlayer.Character, offset.X, offset.Y, offset.Z, rotation.X, rotation.Y, rotation.Z, scale, false, false);
        }
コード例 #41
0
ファイル: Editor.cs プロジェクト: LordRevan2/MissionCreator
        public SerializableActorObjective CreatePedObjective(SerializableActorObjective orig)
        {
            var tmpPed = new Ped(orig.GetPed().Model, orig.GetPed().Position - new Vector3(0,0,1), orig.GetPed().Rotation.Yaw);
            tmpPed.IsPositionFrozen = false;
            tmpPed.BlockPermanentEvents = true;

            var blip = tmpPed.AttachBlip();
            blip.Color = Color.Red;
            blip.Scale = 0.7f;
            _blips.Add(blip);

            var tmpObj = (SerializableActorObjective)orig.Clone();
            tmpObj.SetPed(tmpPed);
            CurrentMission.Objectives.Add(tmpObj);
            return tmpObj;
        }
コード例 #42
0
 public void FleeFromPed(Ped ped, bool prefersPavements)
 {
     FleeFromPed(ped, prefersPavements, -1);
 }
コード例 #43
0
ファイル: Editor.cs プロジェクト: LordRevan2/MissionCreator
        public SerializableSpawnpoint CreateSpawnpoint(SerializableSpawnpoint orig)
        {
            var tmpPed = new Ped(orig.GetEntity().Model, orig.GetEntity().Position, orig.GetEntity().Heading);
            tmpPed.IsPositionFrozen = true;
            tmpPed.BlockPermanentEvents = true;

            var blip = tmpPed.AttachBlip();
            blip.Color = Color.White;
            _blips.Add(blip);

            var tmpObj = (SerializableSpawnpoint)orig.Clone();
            tmpObj.SetEntity(tmpPed);
            CurrentMission.Spawnpoints.Add(tmpObj);
            return tmpObj;
        }
コード例 #44
0
ファイル: MainScript.cs プロジェクト: LfxB/ParticleFxPlayer
        private void FXMenu_OnItemSelect(UIMenu sender, UIMenuItem selectedItem, int index)
        {
            if (selectedItem == ItemRemoveNearbyFx)
            {
                ForceRemoveSurroundingFX(Game.Player.Character);
            }

            if (selectedItem == ItemSearch)
            {
                searchString = Game.GetUserInput(25);
                if (searchString == null || searchString == "")
                {
                    FXMenu.IsVisible = false; SearchMenu.IsVisible = true; return;
                }
                SearchMenu.ResetIndexPosition();
                SearchMenu.SelectedItem = null;
                if (SearchMenu.UIMenuItemList.Count > 0)
                {
                    SearchMenu.UIMenuItemList.Clear();
                }
                FXMenu.IsVisible = false; SearchMenu.IsVisible = true;

                doSearch      = true;
                allowMenuDraw = false;
            }

            if (selectedItem == ItemMoveTask)
            {
                if (PlayerIsTaskedToMove)
                {
                    Game.Player.Character.Task.ClearAll();
                    PlayerIsTaskedToMove = false;
                }
                else
                {
                    if (Game.Player.Character.IsInVehicle())
                    {
                        Game.Player.Character.Task.CruiseWithVehicle(Game.Player.Character.CurrentVehicle, 50f, 6); //gtaforums.com/topic/822314-guide-driving-styles/
                    }
                    else
                    {
                        Game.Player.Character.Task.WanderAround();
                    }
                    PlayerIsTaskedToMove = true;
                }
            }

            if (selectedItem == ItemColourR || selectedItem == ItemColourG || selectedItem == ItemColourB || selectedItem == ItemFxSize || selectedItem == ItemRange)
            {
                if (lastAsset != null && lastFXName != null)
                {
                    PTFXHelper.RemovePTFX(fxHandle);

                    Ped player = Game.Player.Character;

                    PlayLoopOrNonLoopedFX(player.IsInVehicle() ? player.CurrentVehicle : (Entity)player, lastAsset, lastFXName, lastFXName.EvolutionList.Count > 0 ? true : false);

                    if (PTFXHelper.DoesPTFXLoopedExist(fxHandle))
                    {
                        if (selectedItem == ItemColourR || selectedItem == ItemColourG || selectedItem == ItemColourB)
                        {
                            PTFXHelper.SetColour(fxHandle, colourR, colourG, colourB);
                        }
                        else if (selectedItem == ItemRange)
                        {
                            PTFXHelper.SetColour(fxHandle, colourR, colourG, colourB);
                            PTFXHelper.SetRange(fxHandle, rangeFx);
                        }
                    }
                }
            }
        }
コード例 #45
0
        public SpawnedGangMember SpawnGangMember(Gang ownerGang, Vector3 spawnPos, SuccessfulMemberSpawnDelegate onSuccessfulMemberSpawn = null)
        {
            if (livingMembersCount >= ModOptions.instance.spawnedMemberLimit || spawnPos == Vector3.Zero || ownerGang.memberVariations == null)
            {
                //don't start spawning, we're on the limit already or we failed to find a good spawn point or we haven't started up our data properly yet
                return(null);
            }
            if (ownerGang.memberVariations.Count > 0)
            {
                Logger.Log("spawn member: begin", 4);
                PotentialGangMember chosenMember =
                    RandoMath.GetRandomElementFromList(ownerGang.memberVariations);
                Ped newPed = World.CreatePed(chosenMember.modelHash, spawnPos);
                if (newPed != null)
                {
                    chosenMember.SetPedAppearance(newPed);

                    newPed.Accuracy  = ownerGang.memberAccuracyLevel;
                    newPed.MaxHealth = ownerGang.memberHealth;
                    newPed.Health    = ownerGang.memberHealth;
                    newPed.Armor     = ownerGang.memberArmor;

                    newPed.Money = RandoMath.CachedRandom.Next(60);

                    //set the blip, if enabled
                    if (ModOptions.instance.showGangMemberBlips)
                    {
                        newPed.AddBlip();
                        newPed.CurrentBlip.IsShortRange = true;
                        newPed.CurrentBlip.Scale        = 0.65f;
                        Function.Call(Hash.SET_BLIP_COLOUR, newPed.CurrentBlip, ownerGang.blipColor);

                        //set blip name - got to use native, the c# blip.name returns error ingame
                        Function.Call(Hash.BEGIN_TEXT_COMMAND_SET_BLIP_NAME, "STRING");
                        Function.Call(Hash._ADD_TEXT_COMPONENT_STRING, ownerGang.name + " member");
                        Function.Call(Hash.END_TEXT_COMMAND_SET_BLIP_NAME, newPed.CurrentBlip);
                    }


                    bool hasDriveByGun = false;                     //used for when the member has to decide between staying inside a vehicle or not

                    //give a weapon
                    if (ownerGang.gangWeaponHashes.Count > 0)
                    {
                        //get one weap from each type... if possible AND we're not forcing melee only
                        newPed.Weapons.Give(ownerGang.GetListedGunFromOwnedGuns(ModOptions.instance.meleeWeapons), 1000, false, true);
                        if (!ModOptions.instance.membersSpawnWithMeleeOnly)
                        {
                            WeaponHash driveByGun = ownerGang.GetListedGunFromOwnedGuns(ModOptions.instance.driveByWeapons);
                            hasDriveByGun = driveByGun != WeaponHash.Unarmed;
                            newPed.Weapons.Give(driveByGun, 1000, false, true);
                            newPed.Weapons.Give(ownerGang.GetListedGunFromOwnedGuns(ModOptions.instance.primaryWeapons), 1000, false, true);

                            //and one extra
                            newPed.Weapons.Give(RandoMath.GetRandomElementFromList(ownerGang.gangWeaponHashes), 1000, false, true);
                        }
                    }

                    //set the relationship group
                    newPed.RelationshipGroup = ownerGang.relationGroupIndex;

                    newPed.NeverLeavesGroup = true;

                    //newPed.BlockPermanentEvents = true;
                    //newPed.StaysInVehicleWhenJacked = true;

                    Function.Call(Hash.SET_CAN_ATTACK_FRIENDLY, newPed, false, false);           //cannot attack friendlies
                    Function.Call(Hash.SET_PED_COMBAT_ABILITY, newPed, 100);                     //average combat ability
                    //Function.Call(Hash.SET_PED_FLEE_ATTRIBUTES, newPed, 0, 0); //clears the flee attributes?

                    Function.Call(Hash.SET_PED_COMBAT_ATTRIBUTES, newPed, 46, true);         // alwaysFight = true and canFightArmedWhenNotArmed. which one is which is unknown
                    Function.Call(Hash.SET_PED_COMBAT_ATTRIBUTES, newPed, 5, true);
                    Function.Call(Hash.SET_PED_COMBAT_RANGE, newPed, 2);                     //combatRange = far

                    newPed.CanSwitchWeapons = true;
                    newPed.CanWrithe        = false;              //no early dying

                    //enlist this new gang member in the spawned list!
                    SpawnedGangMember newMemberAI = null;

                    bool couldEnlistWithoutAdding = false;
                    for (int i = 0; i < livingMembers.Count; i++)
                    {
                        if (livingMembers[i].watchedPed == null)
                        {
                            livingMembers[i].AttachData(newPed, ownerGang, hasDriveByGun);
                            newMemberAI = livingMembers[i];
                            couldEnlistWithoutAdding = true;
                            break;
                        }
                    }
                    if (!couldEnlistWithoutAdding)
                    {
                        if (livingMembers.Count < ModOptions.instance.spawnedMemberLimit)
                        {
                            newMemberAI = new SpawnedGangMember(newPed, ownerGang, hasDriveByGun);
                            livingMembers.Add(newMemberAI);
                        }
                    }

                    livingMembersCount++;
                    onSuccessfulMemberSpawn?.Invoke();
                    Logger.Log("spawn member: end (success). livingMembers list size = " + livingMembers.Count, 4);
                    return(newMemberAI);
                }
                else
                {
                    Logger.Log("spawn member: end with fail (world createped returned null)", 4);
                    return(null);
                }
            }
            return(null);
        }
コード例 #46
0
        private void CommitSuicide()
        {
            Ped playerPed = Game.PlayerPed;

            playerPed.Kill();
        }
コード例 #47
0
ファイル: PlacementMenu.cs プロジェクト: Guad/MissionCreator
        public void Display(MissionData data)
        {
            Clear();

            #region Player
            {
                var item = new UIMenuItem("Player");

                var dict = StaticData.PedData.Database.ToDictionary(k => k.Key, k => k.Value.Select(x => x.Item1).ToArray());
                var menu = new CategorySelectionMenu(dict, "Player Skin", "PLACE SPAWNPOINT");
                menu.Build("Main Characters");
                Children.Add(menu);
                AddItem(item);
                BindMenuToItem(menu, item);

                item.Activated += (men, itm) =>
                {
                    Editor.PlayerSpawnOpen = true;
                    Editor.RingData.Color = Color.MediumPurple;
                    Editor.RingData.Type = RingType.HorizontalSplitArrowCircle;
                    Editor.MarkerData.Display = true;
                    Editor.MarkerData.MarkerType = "prop_mp_placement";
                    GameFiber.StartNew(delegate
                    {
                        var hash =
                            StaticData.PedData.Database[menu.CurrentSelectedCategory].First(
                                tuple => tuple.Item1 == menu.CurrentSelectedItem).Item2;
                        var veh = new Ped(Util.RequestModel(hash), Game.LocalPlayer.Character.Position, 0f);

                        veh.IsPositionFrozen = true;
                        Editor.MarkerData.RepresentedBy = veh;
                        NativeFunction.CallByName<uint>("SET_ENTITY_COLLISION", veh.Handle.Value, false, 0);
                    });
                };

                menu.OnMenuClose += (men) =>
                {
                    if (Editor.MarkerData.RepresentedBy != null && Editor.MarkerData.RepresentedBy.IsValid())
                        Editor.MarkerData.RepresentedBy.Delete();

                    Editor.MarkerData.RepresentedBy = null;
                    Editor.MarkerData.MarkerType = null;
                    Editor.MarkerData.Display = false;
                    Editor.MarkerData.HeightOffset = 0f;
                    Editor.RingData.HeightOffset = 0f;
                    Editor.RingData.Color = Color.Gray;
                    Editor.RingData.Type = RingType.HorizontalCircleSkinny;
                    Editor.PlayerSpawnOpen = false;
                };

                menu.SelectionChanged += (sender, eventargs) =>
                {
                    GameFiber.StartNew(delegate
                    {
                        menu.ResetKey(Common.MenuControls.Right);
                        menu.ResetKey(Common.MenuControls.Left);
                        var heading = 0f;
                        if (Editor.MarkerData.RepresentedBy != null && Editor.MarkerData.RepresentedBy.IsValid())
                        {
                            heading = Editor.MarkerData.RepresentedBy.Heading;
                            Editor.MarkerData.RepresentedBy.Model.Dismiss();
                            Editor.MarkerData.RepresentedBy.Delete();
                        }

                        var hash =
                            StaticData.PedData.Database[menu.CurrentSelectedCategory].First(
                                tuple => tuple.Item1 == menu.CurrentSelectedItem).Item2;
                        var veh = new Ped(Util.RequestModel(hash), Game.LocalPlayer.Character.Position, 0f);
                        veh.Heading = heading;
                        veh.IsPositionFrozen = true;
                        Editor.MarkerData.RepresentedBy = veh;
                        NativeFunction.CallByName<uint>("SET_ENTITY_COLLISION", veh.Handle.Value, false, 0);

                        //var dims = Util.GetModelDimensions(veh.Model);
                        //Editor.RingData.HeightOffset = 1f;
                        //Editor.MarkerData.HeightOffset = 1f;
                        menu.SetKey(Common.MenuControls.Left, GameControl.CellphoneLeft, 0);
                        menu.SetKey(Common.MenuControls.Right, GameControl.CellphoneRight, 0);
                    });
                };

            }
            #endregion

            #region Objectives
            {
                var item = new UIMenuItem("Objectives");
                var newMenu = new ObjectivePlacementMenu(data);
                Editor.Children.Add(newMenu);
                BindMenuToItem(newMenu, item);
                AddItem(item);
            }
            #endregion

            #region Actors
            {
                var item = new UIMenuItem("Actors");

                var dict = StaticData.PedData.Database.ToDictionary(k => k.Key, k => k.Value.Select(x => x.Item1).ToArray());
                var menu = new CategorySelectionMenu(dict, "Actor");
                menu.Build("Cops and Army");
                Children.Add(menu);
                AddItem(item);
                BindMenuToItem(menu, item);

                item.Activated += (men, itm) =>
                {
                    Editor.RingData.Color = Color.MediumPurple;
                    Editor.RingData.Type = RingType.HorizontalSplitArrowCircle;
                    Editor.MarkerData.Display = true;
                    Editor.MarkerData.MarkerType = "prop_mp_placement";
                    GameFiber.StartNew(delegate
                    {
                        var hash =
                            StaticData.PedData.Database[menu.CurrentSelectedCategory].First(
                                tuple => tuple.Item1 == menu.CurrentSelectedItem).Item2;
                        var veh = new Ped(Util.RequestModel(hash), Game.LocalPlayer.Character.Position, 0f);

                        veh.IsPositionFrozen = true;
                        Editor.MarkerData.RepresentedBy = veh;
                        NativeFunction.CallByName<uint>("SET_ENTITY_COLLISION", veh.Handle.Value, false, 0);
                    });
                };

                menu.OnMenuClose += (men) =>
                {
                    if (Editor.MarkerData.RepresentedBy != null && Editor.MarkerData.RepresentedBy.IsValid())
                        Editor.MarkerData.RepresentedBy.Delete();

                    Editor.MarkerData.RepresentedBy = null;
                    Editor.MarkerData.MarkerType = null;
                    Editor.MarkerData.Display = false;
                    Editor.MarkerData.HeightOffset = 0f;
                    Editor.RingData.HeightOffset = 0f;
                    Editor.RingData.Color = Color.Gray;
                    Editor.RingData.Type = RingType.HorizontalCircleSkinny;
                };

                menu.SelectionChanged += (sender, eventargs) =>
                {
                    GameFiber.StartNew(delegate
                    {
                        menu.ResetKey(Common.MenuControls.Right);
                        menu.ResetKey(Common.MenuControls.Left);
                        var heading = 0f;
                        if (Editor.MarkerData.RepresentedBy != null && Editor.MarkerData.RepresentedBy.IsValid())
                        {
                            heading = Editor.MarkerData.RepresentedBy.Heading;
                            Editor.MarkerData.RepresentedBy.Model.Dismiss();
                            Editor.MarkerData.RepresentedBy.Delete();
                        }

                        var hash =
                            StaticData.PedData.Database[menu.CurrentSelectedCategory].First(
                                tuple => tuple.Item1 == menu.CurrentSelectedItem).Item2;
                        var veh = new Ped(Util.RequestModel(hash), Game.LocalPlayer.Character.Position, 0f);
                        veh.Heading = heading;
                        veh.IsPositionFrozen = true;
                        Editor.MarkerData.RepresentedBy = veh;
                        NativeFunction.CallByName<uint>("SET_ENTITY_COLLISION", veh.Handle.Value, false, 0);
                        //var dims = Util.GetModelDimensions(veh.Model);
                        //Editor.RingData.HeightOffset = 1f;
                        //Editor.MarkerData.HeightOffset = 1f;
                        menu.SetKey(Common.MenuControls.Left, GameControl.CellphoneLeft, 0);
                        menu.SetKey(Common.MenuControls.Right, GameControl.CellphoneRight, 0);
                    });
                };

            }

            #endregion

            #region Cars
            {
                var item = new UIMenuItem("Cars");
                var dict = StaticData.VehicleData.Database.ToDictionary(k => k.Key, k => k.Value.Select(x => x.Item1).ToArray());
                var menu = new CategorySelectionMenu(dict, "Vehicle");
                menu.Build("Muscle");
                Children.Add(menu);
                AddItem(item);
                BindMenuToItem(menu, item);

                item.Activated += (men, itm) =>
                {
                    Editor.RingData.Color = Color.MediumPurple;
                    Editor.RingData.Type = RingType.HorizontalSplitArrowCircle;
                    Editor.MarkerData.Display = true;
                    Editor.MarkerData.MarkerType = "prop_mp_placement";
                    Editor.RingData.HeightOffset = 1f;
                    Editor.MarkerData.HeightOffset = 1f;
                    GameFiber.StartNew(delegate
                    {
                        var hash =
                            StaticData.VehicleData.Database[menu.CurrentSelectedCategory].First(
                                tuple => tuple.Item1 == menu.CurrentSelectedItem).Item2;
                        var veh = new Vehicle(Util.RequestModel(hash), Game.LocalPlayer.Character.Position);

                        veh.IsPositionFrozen = true;
                        Editor.MarkerData.RepresentedBy = veh;
                        NativeFunction.CallByName<uint>("SET_ENTITY_COLLISION", veh.Handle.Value, false, 0);
                    });
                };

                menu.OnMenuClose += (men) =>
                {
                    if(Editor.MarkerData.RepresentedBy != null && Editor.MarkerData.RepresentedBy.IsValid())
                        Editor.MarkerData.RepresentedBy.Delete();

                    Editor.MarkerData.RepresentedBy = null;
                    Editor.MarkerData.MarkerType = null;
                    Editor.MarkerData.Display = false;
                    Editor.MarkerData.HeightOffset = 0f;
                    Editor.RingData.HeightOffset = 0f;
                    Editor.RingData.Color = Color.Gray;
                    Editor.RingData.Type = RingType.HorizontalCircleSkinny;
                };

                menu.SelectionChanged += (sender, eventargs) =>
                {
                    GameFiber.StartNew(delegate
                    {
                        menu.ResetKey(Common.MenuControls.Right);
                        menu.ResetKey(Common.MenuControls.Left);
                        var heading = 0f;
                        if (Editor.MarkerData.RepresentedBy != null && Editor.MarkerData.RepresentedBy.IsValid())
                        {
                            heading = Editor.MarkerData.RepresentedBy.Heading;
                            Editor.MarkerData.RepresentedBy.Model.Dismiss();
                            Editor.MarkerData.RepresentedBy.Delete();
                        }

                        var hash =
                            StaticData.VehicleData.Database[menu.CurrentSelectedCategory].First(
                                tuple => tuple.Item1 == menu.CurrentSelectedItem).Item2;
                        var veh = new Vehicle(Util.RequestModel(hash), Game.LocalPlayer.Character.Position);
                        veh.Heading = heading;
                        veh.IsPositionFrozen = true;
                        Editor.MarkerData.RepresentedBy = veh;
                        NativeFunction.CallByName<uint>("SET_ENTITY_COLLISION", veh.Handle.Value, false, 0);

                        Vector3 max;
                        Vector3 min;
                        Util.GetModelDimensions(veh.Model, out max, out min);
                        Editor.RingData.HeightOffset = min.Z - max.Z + 0.2f;
                        Editor.MarkerData.HeightOffset = min.Z - max.Z + 0.2f;
                        menu.SetKey(Common.MenuControls.Left, GameControl.CellphoneLeft, 0);
                        menu.SetKey(Common.MenuControls.Right, GameControl.CellphoneRight, 0);
                    });
                };
            }
            #endregion

            #region Pickups
            {
                var item = new UIMenuItem("Pickups");
                var dict = StaticData.PickupData.Database.ToDictionary(k => k.Key, k => k.Value.Select(x => x.Item1).ToArray());
                var menu = new CategorySelectionMenu(dict, "Weapon");

                menu.Build("Pistols");
                Children.Add(menu);
                AddItem(item);
                BindMenuToItem(menu, item);

                item.Activated += (men, itm) =>
                {
                    Editor.RingData.Color = Color.MediumPurple;
                    Editor.RingData.Type = RingType.HorizontalSplitArrowCircle;
                    Editor.MarkerData.Display = false;
                    Editor.MarkerData.RepresentationHeightOffset = 1f;
                    GameFiber.StartNew(delegate
                    {
                        var hash =
                            StaticData.PickupData.Database[menu.CurrentSelectedCategory].First(
                                tuple => tuple.Item1 == menu.CurrentSelectedItem).Item2;

                        var pos = Game.LocalPlayer.Character.Position;
                        var veh = new Rage.Object(Util.RequestModel("prop_mp_repair"), pos);
                        Editor.PlacedWeaponHash = hash;
                        veh.IsPositionFrozen = true;
                        Editor.MarkerData.RepresentedBy = veh;
                        NativeFunction.CallByName<uint>("SET_ENTITY_COLLISION", veh.Handle.Value, false, 0);
                    });
                };

                menu.OnMenuClose += (men) =>
                {
                    if (Editor.MarkerData.RepresentedBy != null && Editor.MarkerData.RepresentedBy.IsValid())
                        Editor.MarkerData.RepresentedBy.Delete();

                    Editor.MarkerData.RepresentedBy = null;
                    Editor.MarkerData.MarkerType = null;
                    Editor.MarkerData.Display = false;
                    Editor.MarkerData.HeightOffset = 0f;
                    Editor.MarkerData.RepresentationHeightOffset = 0f;
                    Editor.RingData.HeightOffset = 0f;
                    Editor.RingData.Color = Color.Gray;
                    Editor.RingData.Type = RingType.HorizontalCircleSkinny;
                    Editor.PlacedWeaponHash = 0;
                };

                menu.SelectionChanged += (sender, eventargs) =>
                {
                    GameFiber.StartNew(delegate
                    {
                        var hash =
                            StaticData.PickupData.Database[menu.CurrentSelectedCategory].First(
                                tuple => tuple.Item1 == menu.CurrentSelectedItem).Item2;

                        Editor.PlacedWeaponHash = hash;

                        //var dims = Util.GetModelDimensions(veh.Model);
                        //Editor.RingData.HeightOffset = 1f;
                        //Editor.MarkerData.HeightOffset = 1f;
                    });
                };
            }
            #endregion

            #region Objects
            {
                {
                    var item = new UIMenuItem("Objects");
                    var dict = StaticData.ObjectData.Database.ToDictionary(k => k.Key, k => k.Value.Select(x => x.Item1).ToArray());
                    var menu = new CategorySelectionMenu(dict, "Model");

                    menu.Build("Ramps");
                    Children.Add(menu);
                    AddItem(item);
                    BindMenuToItem(menu, item);

                    item.Activated += (men, itm) =>
                    {
                        Editor.RingData.Color = Color.MediumPurple;
                        Editor.RingData.Type = RingType.HorizontalSplitArrowCircle;
                        Editor.MarkerData.Display = true;
                        Editor.MarkerData.MarkerType = "prop_mp_placement";
                        Editor.MarkerData.RepresentationHeightOffset = 1f;
                        GameFiber.StartNew(delegate
                        {
                            var hash =
                                StaticData.ObjectData.Database[menu.CurrentSelectedCategory].First(
                                    tuple => tuple.Item1 == menu.CurrentSelectedItem).Item2;

                            var pos = Game.LocalPlayer.Character.Position;
                            var veh = new Rage.Object(Util.RequestModel(hash), pos);
                            veh.IsPositionFrozen = true;
                            Editor.MarkerData.RepresentedBy = veh;
                            NativeFunction.CallByName<uint>("SET_ENTITY_COLLISION", veh.Handle.Value, false, 0);
                        });
                    };

                    menu.OnMenuClose += (men) =>
                    {
                        if (Editor.MarkerData.RepresentedBy != null && Editor.MarkerData.RepresentedBy.IsValid())
                            Editor.MarkerData.RepresentedBy.Delete();

                        Editor.MarkerData.RepresentedBy = null;
                        Editor.MarkerData.MarkerType = null;
                        Editor.MarkerData.Display = false;
                        Editor.MarkerData.HeightOffset = 0f;
                        Editor.MarkerData.RepresentationHeightOffset = 0f;
                        Editor.RingData.HeightOffset = 0f;
                        Editor.RingData.Color = Color.Gray;
                        Editor.RingData.Type = RingType.HorizontalCircleSkinny;
                    };

                    menu.SelectionChanged += (sender, eventargs) =>
                    {
                        GameFiber.StartNew(delegate
                        {
                            menu.ResetKey(Common.MenuControls.Right);
                            menu.ResetKey(Common.MenuControls.Left);
                            var heading = 0f;
                            if (Editor.MarkerData.RepresentedBy != null && Editor.MarkerData.RepresentedBy.IsValid())
                            {
                                heading = Editor.MarkerData.RepresentedBy.Heading;
                                Editor.MarkerData.RepresentedBy.Model.Dismiss();
                                Editor.MarkerData.RepresentedBy.Delete();
                            }

                            var hash =
                                StaticData.ObjectData.Database[menu.CurrentSelectedCategory].First(
                                    tuple => tuple.Item1 == menu.CurrentSelectedItem).Item2;

                            var pos = Game.LocalPlayer.Character.Position;
                            var veh = new Rage.Object(Util.RequestModel(hash), pos);

                            veh.Heading = heading;
                            veh.IsPositionFrozen = true;
                            Editor.MarkerData.RepresentedBy = veh;
                            NativeFunction.CallByName<uint>("SET_ENTITY_COLLISION", veh.Handle.Value, false, 0);
                            //var dims = Util.GetModelDimensions(veh.Model);
                            //Editor.RingData.HeightOffset = 1f;
                            //Editor.MarkerData.HeightOffset = 1f;
                            menu.SetKey(Common.MenuControls.Left, GameControl.CellphoneLeft, 0);
                            menu.SetKey(Common.MenuControls.Right, GameControl.CellphoneRight, 0);
                        });
                    };
                }
            }
            #endregion

            RefreshIndex();
        }
コード例 #48
0
        private void AdvanceStage()
        {
            TimerBars = new TimerBars();
            CurrentStage++;
            CurrentObjectives.Clear();


            foreach (var veh in CurrentMission.Vehicles.Where(v => v.SpawnAfter == CurrentStage))
            {
                var newv = new Vehicle(Util.RequestModel(veh.ModelHash), veh.Position)
                {
                    PrimaryColor = Color.FromArgb((int)veh.PrimaryColor.X, (int)veh.PrimaryColor.Y,
                    (int)veh.PrimaryColor.Z),
                    SecondaryColor = Color.FromArgb((int)veh.SecondaryColor.X, (int)veh.SecondaryColor.Y,
                    (int)veh.SecondaryColor.Z),
                };
                newv.Health = veh.Health;
                newv.Rotation = veh.Rotation;
                GameFiber.StartNew(delegate
                {
                    while (IsMissionPlaying && (veh.RemoveAfter == 0 || veh.RemoveAfter > CurrentStage))
                    {
                        if (veh.FailMissionOnDeath && newv.IsDead)
                        {
                            FailMission(reason: "The vehicle has been destroyed.");
                        }
                        GameFiber.Yield();
                    }

                    if(newv.IsValid())
                        newv.Delete();
                });
            }

            foreach (var veh in CurrentMission.Objectives.OfType<SerializableVehicleObjective>().Where(v => v.SpawnAfter == CurrentStage))
            {
                
                var newv = new Vehicle(Util.RequestModel(veh.ModelHash), veh.Position)
                {
                    PrimaryColor = Color.FromArgb((int)veh.PrimaryColor.X, (int)veh.PrimaryColor.Y,
                    (int)veh.PrimaryColor.Z),
                    SecondaryColor = Color.FromArgb((int)veh.SecondaryColor.X, (int)veh.SecondaryColor.Y,
                    (int)veh.SecondaryColor.Z),
                };
                newv.Health = veh.Health;
                newv.Rotation = veh.Rotation;

                var hasActivated = false;

                if (veh.ActivateAfter == CurrentStage)
                {
                    CurrentObjectives.Add(veh);
                    hasActivated = true;
                }

                GameFiber.StartNew(delegate
                {
                    if(!hasActivated)
                    {
                        while (CurrentStage != veh.ActivateAfter && IsMissionPlaying)
                        {
                            GameFiber.Yield();
                        }
                        CurrentObjectives.Add(veh);
                    }


                    var blip = newv.AttachBlip();
                    

                    if(veh.ObjectiveType == 0)
                    {
                        blip.Color = Color.DarkRed;
                        while (!newv.IsDead && IsMissionPlaying)
                        {
                            if (veh.ShowHealthBar)
                            {
                                TimerBars.UpdateValue(newv.Handle.Value.ToString(), veh.Name, true, (100f*newv.Health / veh.Health).ToString("###") + "%");
                            }
                            GameFiber.Yield();
                        }
                        TimerBars.UpdateValue(newv.Handle.Value.ToString(), veh.Name, true, "0%");
                    }

                    if (veh.ObjectiveType == 1)
                    {
                        blip.Color = Color.CornflowerBlue;
                        while (!Game.LocalPlayer.Character.IsInVehicle(newv, false) && IsMissionPlaying)
                        {
                            GameFiber.Yield();
                        }
                    }


                    CurrentObjectives.Remove(veh);

                    if(blip.IsValid())
                        blip.Delete();

                    while (IsMissionPlaying)
                        GameFiber.Yield();


                    if (newv.IsValid())
                        newv.Delete();

                });
            }

            if (CurrentMission.Spawnpoints.Any(s => s.SpawnAfter == CurrentStage))
            {
                var sp = CurrentMission.Spawnpoints.First(s => s.SpawnAfter == CurrentStage);
                Game.FadeScreenOut(100, true);
                Game.LocalPlayer.Character.Position = sp.Position - new Vector3(0,0,1);
                Game.LocalPlayer.Character.Rotation = sp.Rotation;
                Game.LocalPlayer.Model = Util.RequestModel(sp.ModelHash);

                if (sp.WeaponHash != 0)
                    Game.LocalPlayer.Character.GiveNewWeapon(sp.WeaponHash, sp.WeaponAmmo, true);

                Game.LocalPlayer.Character.Health = sp.Health;
                Game.LocalPlayer.Character.Armor = sp.Armor;
                    
                if (sp.SpawnInVehicle)
                {
                    var vehList = Game.LocalPlayer.Character.GetNearbyVehicles(15).OrderBy(v => (Game.LocalPlayer.Character.Position - v.Position).Length());
                    Game.LocalPlayer.Character.WarpIntoVehicle(vehList.ToList()[0], sp.VehicleSeat);
                }
                    
                Game.FadeScreenIn(500, false);
            }

            foreach (var actor in CurrentMission.Actors.Where(v => v.SpawnAfter == CurrentStage))
            {
                GameFiber.StartNew(delegate
                {
                    var ped = new Ped(Util.RequestModel(actor.ModelHash), actor.Position - new Vector3(0,0,1f), actor.Rotation.Yaw);
                    
                    ped.Rotation = actor.Rotation;
                    ped.Accuracy = actor.Accuracy;

                    var blip = ped.AttachBlip();
                    blip.Scale = 0.6f;

                    if (actor.WeaponHash != 0)
                        ped.GiveNewWeapon(actor.WeaponHash, actor.WeaponAmmo, true);

                    ped.Health = actor.Health;
                    ped.Armor = actor.Armor;

                    if (actor.RelationshipGroup == 0)
                    {
                        ped.RelationshipGroup = StaticData.RelationshipGroups.Groups[1];
                        blip.Color = Color.DodgerBlue;

                        NativeFunction.CallByName<uint>("REMOVE_PED_FROM_GROUP", ped.Handle.Value);
                        NativeFunction.CallByName<uint>("SET_PED_AS_GROUP_MEMBER", ped.Handle.Value, NativeFunction.CallByName<int>("GET_PED_GROUP_INDEX", Game.LocalPlayer.Character.Handle.Value));
                    }
                    else
                    {
                        ped.RelationshipGroup = StaticData.RelationshipGroups.Groups[actor.RelationshipGroup];
                        if(actor.RelationshipGroup == 4 || actor.RelationshipGroup == 5)
                            blip.Color = Color.DarkRed;
                    }

                    if (actor.SpawnInVehicle)
                    {
                        var vehList = ped.GetNearbyVehicles(15).OrderBy(v => (ped.Position - v.Position).Length());
                        ped.WarpIntoVehicle(vehList.ToList()[0], actor.VehicleSeat);
                    }

                    ped.BlockPermanentEvents = false;
                    NativeFunction.CallByName<uint>("SET_PED_FIRING_PATTERN", ped.Handle.Value, 0xC6EE6B4C);

                    if (actor.Behaviour == 3)
                        ped.Tasks.FightAgainstClosestHatedTarget(100f);
                    else if (actor.Behaviour == 2)
                        NativeFunction.CallByName<uint>("TASK_GUARD_CURRENT_POSITION", ped.Handle.Value, 15f, 10f, true);
                    else if (actor.Behaviour == 0)
                        ped.Tasks.Clear();
                    else if (actor.Behaviour == 4)
                    {
                        GameFiber.StartNew(delegate
                        {
                            var wpyList = new List<SerializableWaypoint>(actor.Waypoints);
                            SerializableWaypoint currentWaypoint;
                            if (wpyList.Count > 0)
                                currentWaypoint = wpyList[0];

                            while (ped.IsValid() && ped.Exists() && ped.IsAlive && IsMissionPlaying && wpyList.Count > 0)
                            {
                                if (wpyList.Count == 0) break;
                                currentWaypoint = wpyList[0];
                                Task pedTask = null;
                                switch (currentWaypoint.Type)
                                {
                                    case WaypointTypes.Drive:
                                        if (ped.IsInAnyVehicle(true))
                                        {
                                            pedTask = ped.Tasks.DriveToPosition(currentWaypoint.Position,
                                                currentWaypoint.VehicleSpeed, (DriveToPositionFlags)currentWaypoint.DrivingStyle);
                                        }
                                        break;
                                    case WaypointTypes.Run:
                                        {
                                            var heading = 0f;
                                            if (wpyList.Count >= 2)
                                            {
                                                heading =
                                                    Util.DirectionToRotation(wpyList[1].Position - currentWaypoint.Position)
                                                        .Z;
                                            }

                                            pedTask = ped.Tasks.FollowNavigationMeshToPosition(currentWaypoint.Position,
                                                heading, 2f, 0.3f, currentWaypoint.Duration == 0 ? -1 : (int)currentWaypoint.Duration);

                                        }
                                        break;
                                    case WaypointTypes.Walk:
                                        {
                                            var heading = 0f;
                                            if (wpyList.Count >= 2)
                                            {
                                                heading =
                                                    Util.DirectionToRotation(wpyList[1].Position - currentWaypoint.Position)
                                                        .Z;
                                            }

                                            pedTask = ped.Tasks.FollowNavigationMeshToPosition(currentWaypoint.Position,
                                                heading, 1f, 0.3f, currentWaypoint.Duration == 0 ? -1 : (int)currentWaypoint.Duration);

                                        }
                                        break;
                                    case WaypointTypes.ExitVehicle:
                                        if (ped.IsInAnyVehicle(true))
                                            pedTask = ped.Tasks.LeaveVehicle(LeaveVehicleFlags.None);
                                        break;
                                    case WaypointTypes.EnterVehicle:
                                        Vehicle[] vehs = World.GetAllVehicles().Where(v =>
                                        {
                                            if (v != null && v.IsValid())
                                                return v.Model.Hash == currentWaypoint.VehicleTargetModel;
                                            return false;
                                        }).OrderBy(v => (v.Position - ped.Position).Length()).ToArray();

                                        if (vehs.Any())
                                        {
                                            if ((vehs[0].Position - ped.Position).Length() > 10f)
                                            {
                                                pedTask = ped.Tasks.FollowNavigationMeshToPosition(vehs[0].Position, 0f,
                                                    3f,
                                                    5f);
                                                pedTask.WaitForCompletion(10000);
                                            }
                                            var seat = vehs[0].GetFreeSeatIndex();
                                            if (seat.HasValue)
                                                pedTask = ped.Tasks.EnterVehicle(vehs[0], seat.Value);
                                        }
                                        break;
                                    case WaypointTypes.Wait:
                                        pedTask = ped.Tasks.StandStill(currentWaypoint.Duration);
                                        break;
                                    case WaypointTypes.Wander:
                                        pedTask = ped.Tasks.Wander();
                                        break;
                                    case WaypointTypes.Shoot:
                                        pedTask = null;
                                        NativeFunction.CallByName<uint>("TASK_SHOOT_AT_COORD", ped.Handle.Value,
                                            currentWaypoint.Position.X, currentWaypoint.Position.Y,
                                            currentWaypoint.Position.Z, currentWaypoint.Duration, 0xC6EE6B4C);
                                        GameFiber.Sleep(currentWaypoint.Duration);
                                        break;
                                    case WaypointTypes.Animation:
                                        pedTask = ped.Tasks.PlayAnimation(currentWaypoint.AnimDict,
                                            currentWaypoint.AnimName, 8f, AnimationFlags.None);
                                        break;
                                }
                                pedTask?.WaitForCompletion(currentWaypoint.Duration == 0 ? -1 : currentWaypoint.Duration);
                                if (wpyList.Count > 0)
                                    wpyList.RemoveAt(0);
                                GameFiber.Yield();
                            }
                        });
                    }

                    while (IsMissionPlaying && (actor.RemoveAfter == 0 || actor.RemoveAfter > CurrentStage) && !ped.IsDead)
                    {
                        GameFiber.Yield();
                    }

                    if (actor.FailMissionOnDeath && ped.IsDead)
                    {
                        FailMission(reason: "An ally has died.");
                    }

                    if (blip.IsValid())
                        blip.Delete();

                    while(IsMissionPlaying && (actor.RemoveAfter == 0 || actor.RemoveAfter > CurrentStage))
                        GameFiber.Yield();

                    if(ped.IsValid())
                        ped.Delete();
                });
            }

            foreach (var o in CurrentMission.Objects.Where(v => v.SpawnAfter == CurrentStage))
            {
                GameFiber.StartNew(delegate
                {
                    var prop = new Rage.Object(Util.RequestModel(o.ModelHash), o.Position);
                    prop.Position = o.Position;
                    prop.Rotation = o.Rotation;

                    while (IsMissionPlaying && (o.RemoveAfter == 0 || o.RemoveAfter > CurrentStage))
                    {
                        GameFiber.Yield();
                    }

                    if(prop.IsValid())
                        prop.Delete();
                });
            }

            foreach (var pickup in CurrentMission.Pickups.Where(v => v.SpawnAfter == CurrentStage))
            {
                GameFiber.StartNew(delegate
                {
                    var obj = NativeFunction.CallByName<uint>("CREATE_PICKUP_ROTATE", pickup.PickupHash, pickup.Position.X,
                        pickup.Position.Y, pickup.Position.Z, pickup.Rotation.Pitch, pickup.Rotation.Roll, pickup.Rotation.Yaw,
                        1, pickup.Ammo, 2, 1, 0);

                    int counter = 0;
                    while (IsMissionPlaying && (pickup.RemoveAfter == 0 || pickup.RemoveAfter > CurrentStage))
                    {
                        var alpha = 40 * (Math.Sin(Util.DegToRad(counter % 180)));
                        Util.DrawMarker(28, pickup.Position, new Vector3(), new Vector3(0.75f, 0.75f, 0.75f), Color.FromArgb((int)alpha, 10, 10, 230));
                        counter += 5;
                        if (counter >= 360)
                            counter = 0;

                        if ((pickup.Position - Game.LocalPlayer.Character.Position).Length() < 1f && pickup.Respawn)
                        {
                            NativeFunction.CallByName<uint>("REMOVE_PICKUP", obj);
                            while((pickup.Position - Game.LocalPlayer.Character.Position).Length() < 3f)
                            { GameFiber.Yield();}
                            obj = NativeFunction.CallByName<uint>("CREATE_PICKUP_ROTATE", pickup.PickupHash, pickup.Position.X,
                            pickup.Position.Y, pickup.Position.Z, pickup.Rotation.Pitch, pickup.Rotation.Roll, pickup.Rotation.Yaw,
                            1, pickup.Ammo, 2, 1, 0);
                        }
                        else if ((pickup.Position - Game.LocalPlayer.Character.Position).Length() < 1f && !pickup.Respawn)
                            break;
                        GameFiber.Yield();
                    }
                    NativeFunction.CallByName<uint>("REMOVE_PICKUP", obj);
                });
            }

            foreach (var actor in CurrentMission.Objectives.OfType<SerializableActorObjective>().Where(v => v.SpawnAfter == CurrentStage))
            {
                var ped = new Ped(Util.RequestModel(actor.ModelHash), actor.Position - new Vector3(0, 0, 1f), actor.Rotation.Yaw);

                ped.Rotation = actor.Rotation;
                ped.Accuracy = actor.Accuracy;

                
                if (actor.WeaponHash != 0)
                    ped.GiveNewWeapon(actor.WeaponHash, actor.WeaponAmmo, true);

                NativeFunction.CallByName<uint>("SET_PED_FIRING_PATTERN", ped.Handle.Value, 0xC6EE6B4C);

                ped.Health = actor.Health;
                ped.MaxHealth = actor.Health;
                ped.Armor = actor.Armor;

                if (actor.RelationshipGroup == 0)
                {
                    NativeFunction.CallByName<uint>("REMOVE_PED_FROM_GROUP", ped.Handle.Value);
                    NativeFunction.CallByName<uint>("SET_PED_AS_GROUP_MEMBER", ped.Handle.Value, NativeFunction.CallByName<int>("GET_PED_GROUP_INDEX", Game.LocalPlayer.Character.Handle.Value));
                    ped.RelationshipGroup = StaticData.RelationshipGroups.Groups[1];
                }
                else
                {
                    ped.RelationshipGroup = StaticData.RelationshipGroups.Groups[actor.RelationshipGroup];
                }

                if (actor.SpawnInVehicle)
                {
                    var vehList = ped.GetNearbyVehicles(15).OrderBy(v => (ped.Position - v.Position).Length());
                    ped.WarpIntoVehicle(vehList.ToList()[0], actor.VehicleSeat);
                }

                var hasActivated = false;

                if (actor.ActivateAfter == CurrentStage)
                {
                    CurrentObjectives.Add(actor);
                    hasActivated = true;
                }

                GameFiber.StartNew(delegate
                {
                    
                    if(!hasActivated)
                    {
                        while (CurrentStage != actor.ActivateAfter && IsMissionPlaying)
                        {
                            GameFiber.Yield();
                        }

                        CurrentObjectives.Add(actor);
                    }

                    var blip = ped.AttachBlip();
                    blip.Scale = 0.6f;
                    blip.Color = Color.DarkRed;

                    ped.BlockPermanentEvents = false;

                    if (actor.Behaviour == 3)
                        ped.Tasks.FightAgainstClosestHatedTarget(100f);
                    else if (actor.Behaviour == 2)
                        NativeFunction.CallByName<uint>("TASK_GUARD_CURRENT_POSITION", ped.Handle.Value, 15f, 10f, true);
                    else if(actor.Behaviour == 0)
                        ped.Tasks.Clear();
                    else if (actor.Behaviour == 4)
                    {
                        GameFiber.StartNew(delegate
                        {
                            var wpyList = new List<SerializableWaypoint>(actor.Waypoints);
                            SerializableWaypoint currentWaypoint;
                            if(wpyList.Count > 0)
                                currentWaypoint = wpyList[0];

                            while (ped.IsValid() && ped.Exists() && ped.IsAlive && IsMissionPlaying && wpyList.Count > 0)
                            {
                                if (wpyList.Count == 0) break;
                                currentWaypoint = wpyList[0];
                                Task pedTask = null;
                                switch (currentWaypoint.Type)
                                {
                                    case WaypointTypes.Drive:
                                        if (ped.IsInAnyVehicle(true))
                                        {
                                            pedTask = ped.Tasks.DriveToPosition(currentWaypoint.Position,
                                                currentWaypoint.VehicleSpeed, (DriveToPositionFlags)currentWaypoint.DrivingStyle);
                                        }
                                        break;
                                    case WaypointTypes.Run:
                                        {
                                            var heading = 0f;
                                            if (wpyList.Count >= 2)
                                            {
                                                heading =
                                                    Util.DirectionToRotation(wpyList[1].Position - currentWaypoint.Position)
                                                        .Z;
                                            }

                                            pedTask = ped.Tasks.FollowNavigationMeshToPosition(currentWaypoint.Position,
                                                heading, 2f, 0.3f, currentWaypoint.Duration == 0 ? -1 : (int)currentWaypoint.Duration);

                                        }
                                        break;
                                    case WaypointTypes.Walk:
                                        {
                                            var heading = 0f;
                                            if (wpyList.Count >= 2)
                                            {
                                                heading =
                                                    Util.DirectionToRotation(wpyList[1].Position - currentWaypoint.Position)
                                                        .Z;
                                            }

                                            pedTask = ped.Tasks.FollowNavigationMeshToPosition(currentWaypoint.Position,
                                                heading, 1f, 0.3f, currentWaypoint.Duration == 0 ? -1 : (int)currentWaypoint.Duration);

                                        }
                                        break;
                                    case WaypointTypes.ExitVehicle:
                                        if (ped.IsInAnyVehicle(true))
                                            pedTask = ped.Tasks.LeaveVehicle(LeaveVehicleFlags.None);
                                        break;
                                    case WaypointTypes.EnterVehicle:
                                        Vehicle[] vehs = World.GetAllVehicles().Where(v =>
                                        {
                                            if (v != null && v.IsValid())
                                                return v.Model.Hash == currentWaypoint.VehicleTargetModel;
                                            return false;
                                        }).OrderBy(v => (v.Position - ped.Position).Length()).ToArray();

                                        if (vehs.Any())
                                        {
                                            if ((vehs[0].Position - ped.Position).Length() > 10f)
                                            {
                                                pedTask = ped.Tasks.FollowNavigationMeshToPosition(vehs[0].Position, 0f,
                                                    3f,
                                                    5f);
                                                pedTask.WaitForCompletion(10000);
                                            }
                                            var seat = vehs[0].GetFreeSeatIndex();
                                            if (seat.HasValue)
                                                pedTask = ped.Tasks.EnterVehicle(vehs[0], seat.Value);
                                        }
                                        break;
                                    case WaypointTypes.Wait:
                                        pedTask = ped.Tasks.StandStill(currentWaypoint.Duration);
                                        break;
                                    case WaypointTypes.Wander:
                                        pedTask = ped.Tasks.Wander();
                                        break;
                                    case WaypointTypes.Shoot:
                                        pedTask = null;
                                        NativeFunction.CallByName<uint>("TASK_SHOOT_AT_COORD", ped.Handle.Value,
                                            currentWaypoint.Position.X, currentWaypoint.Position.Y,
                                            currentWaypoint.Position.Z, currentWaypoint.Duration, 0xC6EE6B4C);
                                        GameFiber.Sleep(currentWaypoint.Duration);
                                        break;
                                    case WaypointTypes.Animation:
                                        pedTask = ped.Tasks.PlayAnimation(currentWaypoint.AnimDict,
                                            currentWaypoint.AnimName, 8f, AnimationFlags.None);
                                        break;
                                }
                                pedTask?.WaitForCompletion(currentWaypoint.Duration == 0 ? -1 : currentWaypoint.Duration);
                                if(wpyList.Count > 0)
                                    wpyList.RemoveAt(0);
                                GameFiber.Yield();
                            }
                        });
                    }

                    while (!ped.IsDead && IsMissionPlaying)
                    {
                        if (actor.ShowHealthBar)
                        {
                            TimerBars.UpdateValue(ped.Handle.Value.ToString(), actor.Name, true, (100f*ped.Health/actor.Health).ToString("###") + "%");
                        }
                        GameFiber.Yield();
                    }

                    if (actor.ShowHealthBar)
                    {
                        TimerBars.UpdateValue(ped.Handle.Value.ToString(), actor.Name, true, "0%");
                    }

                    CurrentObjectives.Remove(actor);
                    if(blip.IsValid())
                        blip.Delete();

                    while(IsMissionPlaying)
                        GameFiber.Yield();
                        

                    if (ped.IsValid())
                        ped.Delete();
                });
            }

            foreach (var pickup in CurrentMission.Objectives.OfType<SerializablePickupObjective>().Where(v => v.ActivateAfter == CurrentStage))
            {
                CurrentObjectives.Add(pickup);
                GameFiber.StartNew(delegate
                {
                    var obj = NativeFunction.CallByName<uint>("CREATE_PICKUP_ROTATE", pickup.PickupHash, pickup.Position.X,
                        pickup.Position.Y, pickup.Position.Z, pickup.Rotation.Pitch, pickup.Rotation.Roll, pickup.Rotation.Yaw,
                        1, pickup.Ammo, 2, 1, 0);

                    var blip = new Blip(pickup.Position);
                    blip.Scale = 0.7f;
                    blip.Color = Color.DodgerBlue;

                    var counter = 0;
                    while ((pickup.Position - Game.LocalPlayer.Character.Position).Length() > 1f && IsMissionPlaying)
                    {
                        var alpha = 40 * (Math.Sin(Util.DegToRad(counter % 180)));
                        Util.DrawMarker(28, pickup.Position, new Vector3(), new Vector3(0.75f, 0.75f, 0.75f), Color.FromArgb((int)alpha, 230, 10, 10));
                        counter += 5;
                        if (counter >= 360)
                            counter = 0;
                        GameFiber.Yield();
                    }

                    if(blip != null && blip.IsValid())
                        blip.Delete();
                    
                    NativeFunction.CallByName<uint>("REMOVE_PICKUP", obj);
                    CurrentObjectives.Remove(pickup);
                });
            }

            foreach (var mark in CurrentMission.Objectives.OfType<SerializableMarker>().Where(v => v.ActivateAfter == CurrentStage))
            {
                CurrentObjectives.Add(mark);
                GameFiber.StartNew(delegate
                {
                    var bColor = Color.FromArgb(mark.Alpha, (int) mark.Color.X, (int) mark.Color.Y, (int) mark.Color.Z);
                    var blip = new Blip(mark.Position);
                    blip.Color = bColor;
                    blip.EnableRoute(bColor);
                    while ((mark.Position - Game.LocalPlayer.Character.Position).Length() > 1.5f && IsMissionPlaying)
                    {
                        Util.DrawMarker(mark.Type, mark.Position, new Vector3(mark.Rotation.Pitch, mark.Rotation.Roll, mark.Rotation.Yaw), mark.Scale,
                        bColor);

                        GameFiber.Yield();
                    }
                    if(blip.IsValid())
                        blip.Delete();
                    CurrentObjectives.Remove(mark);
                });
            }


            if (CurrentMission.Cutscenes.Any(c => c.PlayAt == CurrentStage))
            {
                var origPos = Game.LocalPlayer.Character.Position;
                var origRot = Game.LocalPlayer.Character.Rotation;

                Game.FadeScreenIn(100, true);

                Game.LocalPlayer.Character.Opacity = 0f;
                Game.LocalPlayer.Character.IsPositionFrozen = true;

                var cutscene = CurrentMission.Cutscenes.First(c => c.PlayAt == CurrentStage);
                var camLeft = new List<SerializableCamera>(cutscene.Cameras);
                var subLeft = new List<SerializableSubtitle>(cutscene.Subtitles);

                var startTime = Game.GameTime;
                Camera mainCam = null;

                SerializableCamera currentCam = null;
                uint lerpStart = 0;


                while ((Game.GameTime - startTime) < cutscene.Length)
                {
                    var ct = (Game.GameTime - startTime);

                    if (camLeft.Any())
                    {
                        if (camLeft[0].PositionInTime <= ct)
                        {
                            if (mainCam == null || !mainCam.IsValid())
                            {
                                Camera.DeleteAllCameras();
                                mainCam = new Camera(true);
                            }

                            Game.LocalPlayer.HasControl = false;
                            mainCam.Position = cutscene.Cameras[0].Position;
                            mainCam.Rotation = cutscene.Cameras[0].Rotation;
                            currentCam = camLeft[0];
                            camLeft.RemoveAt(0);
                            lerpStart = Game.GameTime;
                            Game.LocalPlayer.Character.Position = mainCam.Position;
                        }
                        else if (currentCam != null)
                        {
                            // Advance cam pos
                            if (currentCam.InterpolationStyle == InterpolationStyle.Linear)
                            {
                                mainCam.Position = Util.LerpVector(currentCam.Position, camLeft[0].Position,
                                    Util.LinearLerp, Game.GameTime - lerpStart,
                                    camLeft[0].PositionInTime - currentCam.PositionInTime);

                                mainCam.Rotation =
                                    Util.LerpVector(currentCam.Rotation.ToVector(), camLeft[0].Rotation.ToVector(),
                                        Util.LinearLerp, Game.GameTime - lerpStart,
                                        camLeft[0].PositionInTime - currentCam.PositionInTime).ToRotator();
                                Game.LocalPlayer.Character.Position = mainCam.Position;
                            }
                            else if (currentCam.InterpolationStyle == InterpolationStyle.Smooth)
                            {
                                mainCam.Position = Util.LerpVector(currentCam.Position, camLeft[0].Position,
                                    Util.QuadraticLerp, Game.GameTime - lerpStart,
                                    camLeft[0].PositionInTime - currentCam.PositionInTime);

                                mainCam.Rotation =
                                    Util.LerpVector(currentCam.Rotation.ToVector(), camLeft[0].Rotation.ToVector(),
                                        Util.QuadraticLerp, Game.GameTime - lerpStart,
                                        camLeft[0].PositionInTime - currentCam.PositionInTime).ToRotator();
                                Game.LocalPlayer.Character.Position = mainCam.Position;
                            }
                        }
                    }
                    else if(currentCam != null && mainCam != null)
                    {
                        mainCam.Position = currentCam.Position;
                        mainCam.Rotation = currentCam.Rotation;
                        Game.LocalPlayer.Character.Position = mainCam.Position;
                    }

                    if (subLeft.Any())
                    {
                        if (subLeft[0].PositionInTime <= ct)
                        {
                            Game.DisplaySubtitle(subLeft[0].Content, subLeft[0].DurationInMs);
                            subLeft.RemoveAt(0);
                        }
                    }
                    GameFiber.Yield();
                }

                mainCam.Active = false;
                Game.LocalPlayer.HasControl = true;
                Game.LocalPlayer.Character.IsPositionFrozen = false;
                Game.LocalPlayer.Character.Position = origPos;
                Game.LocalPlayer.Character.Rotation = origRot;
                Game.LocalPlayer.Character.Opacity = 1f;
                Game.FadeScreenOut(100);
            }


            if (!string.IsNullOrEmpty(CurrentMission.ObjectiveNames[CurrentStage]))
            {
                Game.DisplaySubtitle(CurrentMission.ObjectiveNames[CurrentStage], 10000);
            }

            Game.FadeScreenIn(1);
        }