Example #1
0
        private void DoMagic()
        {
            Player player = Game.LocalPlayer;
            Ped    pc     = player.Character;

            if (CleanPlayer)
            {
                pc.ClearBlood();
            }
            if (FillHealth)
            {
                pc.Health = pc.MaxHealth;
            }
            if (FillArmour)
            {
                pc.Armor = 100;
            }

            if ((!OnlyRepairPoliceVehicles && pc.IsInAnyVehicle(false)) || (OnlyRepairPoliceVehicles && pc.IsInAnyPoliceVehicle))
            {
                if (RepairVehicle)
                {
                    pc.CurrentVehicle.Repair();
                }
                if (CleanVehicle)
                {
                    pc.CurrentVehicle.DirtLevel = 0f;
                }
            }

            // Add weapons

            pc.Inventory.Weapons.Clear();
            if (GiveFlashlight)
            {
                pc.Inventory.GiveFlashlight();
            }

            foreach (string s in WeaponPool.Split(','))
            {
                WeaponAsset wep        = new WeaponAsset();
                string[]    weaponData = s.Split('|');
                for (int x = 0; x < weaponData.Length; x++)
                {
                    string w = weaponData[x];

                    /*
                     * WEAPON_UNARMED WEAPON_ANIMAL WEAPON_COUGAR WEAPON_KNIFE WEAPON_NIGHTSTICK WEAPON_HAMMER WEAPON_BAT WEAPON_GOLFCLUB WEAPON_CROWBAR WEAPON_PISTOL WEAPON_COMBATPISTOL WEAPON_APPISTOL WEAPON_PISTOL50
                     * WEAPON_MICROSMG WEAPON_SMG WEAPON_ASSAULTSMG WEAPON_ASSAULTRIFLE WEAPON_CARBINERIFLE WEAPON_ADVANCEDRIFLE WEAPON_MG WEAPON_COMBATMG WEAPON_PUMPSHOTGUN WEAPON_SAWNOFFSHOTGUN WEAPON_ASSAULTSHOTGUN
                     * WEAPON_BULLPUPSHOTGUN WEAPON_STUNGUN WEAPON_SNIPERRIFLE WEAPON_HEAVYSNIPER WEAPON_REMOTESNIPER WEAPON_GRENADELAUNCHER WEAPON_GRENADELAUNCHER_SMOKE WEAPON_RPG WEAPON_PASSENGER_ROCKET
                     * WEAPON_AIRSTRIKE_ROCKET WEAPON_STINGER WEAPON_MINIGUN WEAPON_GRENADE WEAPON_STICKYBOMB WEAPON_SMOKEGRENADE WEAPON_BZGAS WEAPON_MOLOTOV WEAPON_FIREEXTINGUISHER WEAPON_PETROLCAN WEAPON_DIGISCANNER
                     * WEAPON_BRIEFCASE WEAPON_BRIEFCASE_02 WEAPON_BALL WEAPON_FLARE WEAPON_VEHICLE_ROCKET WEAPON_BARBED_WIRE WEAPON_DROWNING WEAPON_DROWNING_IN_VEHICLE WEAPON_BLEEDING WEAPON_ELECTRIC_FENCE
                     * WEAPON_EXPLOSION WEAPON_FALL WEAPON_EXHAUSTION WEAPON_HIT_BY_WATER_CANNON WEAPON_RAMMED_BY_CAR WEAPON_RUN_OVER_BY_CAR WEAPON_HELI_CRASH WEAPON_FIRE WEAPON_ANIMAL_RETRIEVER WEAPON_SMALL_DOG
                     * WEAPON_TIGER_SHARK WEAPON_HAMMERHEAD_SHARK WEAPON_KILLER_WHALE WEAPON_BOAR WEAPON_PIG WEAPON_COYOTE WEAPON_DEER WEAPON_HEN WEAPON_RABBIT WEAPON_CAT WEAPON_COW WEAPON_BIRD_CRAP
                     */
                    if (x == 0)
                    {
                        Game.Console.Print($"Attempting to add weapon {w} to player");
                        wep = new WeaponAsset(w);
#if DEBUG
                        Game.Console.Print($"{wep.Hash} // {wep.IsValid} // {wep.IsLoaded}");
#endif
                        if (!wep.IsValid)
                        {
                            continue;
                        }
                        if (!wep.IsLoaded)
                        {
                            wep.LoadAndWait();
                        }
                        WeaponDescriptor wd = new WeaponDescriptor(wep);
                        pc.Inventory.GiveNewWeapon(wep, (InfiniteAmmo ? short.MaxValue : /*(short)(wd.MagazineSize * (short)15)*/ AmmoCount), false);
                        continue;
                    }
                    Game.Console.Print($"Attempting to add component {w} to weapon");
                    pc.Inventory.AddComponentToWeapon(wep, w);
                }
            }

            Game.DisplayNotification("AlfredoRedux has completed tasks.");
        }
            private void watchCCTVCameraFootage(MurderInvestigation owner)
            {
                // set up
                isCCTVCameraFootageActive = true;
                Game.FadeScreenOut(1750, true);


                List <Entity> invisibleEntities = new List <Entity>();

                invisibleEntities.AddRange(World.GetEntities(scenario.VictimSpawnPoint.Position, 150.0f, GetEntitiesFlags.ConsiderAllVehicles | GetEntitiesFlags.ConsiderAllPeds));
                Vector3[] invisibleEntitiesInitialPositions = new Vector3[invisibleEntities.Count];
                for (int i = 0; i < invisibleEntities.Count; i++)
                {
                    if (invisibleEntities[i].Exists())
                    {
                        invisibleEntitiesInitialPositions[i] = invisibleEntities[i].Position;
                        if (invisibleEntities[i] != victimPed && invisibleEntities[i] != murdererPed)
                        {
                            invisibleEntities[i].SetPositionZ(invisibleEntities[i].Position.X + 50.0f);
                        }
                        invisibleEntities[i].IsPositionFrozen = true;
                        invisibleEntities[i].IsVisible        = false;
                        Ped asPed = invisibleEntities[i] as Ped;
                        if (asPed.Exists())
                        {
                            asPed.BlockPermanentEvents = true;
                        }
                    }
                }

                victimPedClone = victimPed.Clone(0.0f);

                NativeFunction.Natives.REVIVE_INJURED_PED(victimPedClone);
                NativeFunction.Natives.SET_ENTITY_HEALTH(victimPedClone, 200.0f);
                NativeFunction.Natives.RESURRECT_PED(victimPedClone);
                victimPedClone.Tasks.ClearImmediately();

                victimPedClone.Position = scenario.VictimFootageSpawnPoint.Position;
                victimPedClone.Heading  = scenario.VictimFootageSpawnPoint.Heading;
                victimPedClone.ClearBlood();
                victimPedClone.Tasks.ClearImmediately();
                victimPedClone.CanPlayAmbientAnimations = true;

                murdererPedClone          = murdererPed.Clone(0.0f);
                murdererPedClone.Position = scenario.MurdererFootageSpawnPoint.Position;
                murdererPedClone.Heading  = scenario.MurdererFootageSpawnPoint.Heading;


                Game.LocalPlayer.Character.IsPositionFrozen = true;
                cctvObject.IsVisible = false;

                footageCamera          = new Camera(true);
                footageCamera.FOV     -= 20;
                footageCamera.Position = cctvObject.Position;
                footageCamera.PointAtEntity(victimPed, Vector3.Zero, true);
                NativeFunction.Natives.SET_NOISEOVERIDE(true);
                NativeFunction.Natives.SET_NOISINESSOVERIDE(0.1f);

                victimPedClone.Health         = 170;
                murdererPedClone.IsInvincible = true;
                victimPedClone.IsInvincible   = false;

                DateTime initialTime = World.DateTime;

                World.DateTime = footageInitialDateTime;

                Logger.LogTrivial(cctvFootageVictimScenario.Item1 + "   " + cctvFootageVictimScenario.Item2);
                Scenario.StartInPlace(victimPedClone, cctvFootageVictimScenario.Item1, cctvFootageVictimScenario.Item2);

                GameFiber.StartNew(delegate
                {
                    while (isCCTVCameraFootageActive)
                    {
                        GameFiber.Yield();

                        NativeFunction.Natives.HIDE_HUD_AND_RADAR_THIS_FRAME();
                        new ResRectangle(new Point(0, 0), new Size(245, 195), Color.FromArgb(145, Color.Gray)).Draw();
                        new ResText("CCTV #" + cctvCameraNumber + "~n~" + DateTime.UtcNow.ToShortDateString() + "~n~" + DateTime.UtcNow.ToLongTimeString(), new Point(5, 5), 0.747f).Draw();
                    }
                });
                Game.FadeScreenIn(1750, true);

                // footage
                Task murdererMoveTask = murdererPedClone.Tasks.GoToOffsetFromEntity(victimPedClone, 1.1325f, 180.0f, 0.5f);

                NativeFunction.Natives.SET_PED_STEALTH_MOVEMENT(murdererPedClone, 1, 0);
                murdererMoveTask.WaitForCompletion();
                murdererPedClone.Inventory.GiveNewWeapon(WeaponHash.Knife, 1, true);
                victimPedClone.Tasks.Clear();
                murdererPedClone.Tasks.FightAgainst(victimPedClone, -1).WaitForCompletion();

                GameFiber.Sleep(1200);

                murdererPedClone.Inventory.Weapons.Remove(WeaponHash.Knife);
                murdererPedClone.Tasks.FollowNavigationMeshToPosition(scenario.MurdererSpawnPoint.Position, scenario.MurdererSpawnPoint.Heading, 2.0f, 5.0f, -1).WaitForCompletion();
                murdererPedClone.Tasks.Wander();
                GameFiber.Sleep(700);

                // clean up
                Game.FadeScreenOut(1750, true);
                NativeFunction.Natives.SET_NOISEOVERIDE(false);
                NativeFunction.Natives.SET_NOISINESSOVERIDE(0.0f);
                footageCamera.Delete();
                murdererPedClone.Delete();
                victimPedClone.Delete();
                Game.LocalPlayer.Character.IsPositionFrozen = false;
                cctvObject.IsVisible = true;
                for (int i = 0; i < invisibleEntities.Count; i++)
                {
                    if (invisibleEntities[i].Exists())
                    {
                        invisibleEntities[i].Position         = invisibleEntitiesInitialPositions[i];
                        invisibleEntities[i].IsPositionFrozen = false;
                        invisibleEntities[i].IsVisible        = true;
                        Ped asPed = invisibleEntities[i] as Ped;
                        if (asPed.Exists())
                        {
                            asPed.BlockPermanentEvents = false;
                        }
                    }
                }
                invisibleEntities.Clear();
                invisibleEntities = null;
                invisibleEntitiesInitialPositions = null;
                World.DateTime            = initialTime;
                isCCTVCameraFootageActive = false;
                if (!hasCCTVTextBeenAddedToReport)
                {
                    owner.Report.AddTextToReport(
                        @"[" + DateTime.UtcNow.ToShortDateString() + "  " + DateTime.UtcNow.ToLongTimeString() + @"]
CCTV Camera footage found.
Shows suspect attacking victim with a knife and fleeing the crime scene.
" + scenario.MurderDescription + "");
                    hasCCTVTextBeenAddedToReport = true;
                }
                Game.FadeScreenIn(2000, true);
            }