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); }