private void createAndAddObjectives() { #region Objectives GoToPosition goToFirstSongObjective = new GoToPosition(firstSongPosition); goToFirstSongObjective.Checkpoint = new Checkpoint(); goToFirstSongObjective.Checkpoint.addEntity(Joe.bike, bikePositionAtHome, 0); goToFirstSongObjective.Checkpoint.PlayerPosition = joeHomePosition; goToFirstSongObjective.Checkpoint.setClockHour(10); goToFirstSongObjective.Checkpoint.Health = 300; goToFirstSongObjective.Checkpoint.Armor = 100; goToFirstSongObjective.Checkpoint.Weather = Weather.ExtraSunny; goToFirstSongObjective.Checkpoint.WantedLevel = 0; goToFirstSongObjective.Checkpoint.Heading = 35; goToFirstSongObjective.OnStarted += (sender) => { Ped player = Game.Player.Character; if (!this.loadingCheckpoint) { bikeRegen = false; playerDown = true; playerWalked = false; playerMoved = false; introEnded = false; Tools.TeleportPlayer(joeStart, false); introPed = Function.Call<Ped>(Hash.CLONE_PED, player, Function.Call<int>(Hash.GET_ENTITY_HEADING, Function.Call<int>(Hash.PLAYER_PED_ID)), false, true); Tools.TeleportPlayer(joeHomePosition); player.IsVisible = false; player.Task.StandStill(-1); introPed.Task.PlayAnimation("amb@world_human_picnic@male@base", "base", 8f, -1, true, -1f); Vector3 largeShotPosition = new Vector3(2213.186f, 2510.148f, 82.73711f); Vector3 firstShotPosition = new Vector3(2361.558f, 2527.512f, 46.66772f); Vector3 secondShotPosition = new Vector3(2351.906f, 2530.494f, 48f); List<CameraShot> cameraShots = new List<CameraShot>(); float time_split = AudioManager.Instance.getLength("dialogue0") / 3; CameraShot cameraShot = new CameraShot(time_split, largeShotPosition); cameraShot.lookAt(introPed); cameraShots.Add(cameraShot); cameraShot = new CameraTraveling(time_split, firstShotPosition, secondShotPosition); cameraShot.lookAt(introPed); cameraShots.Add(cameraShot); cameraShot = new CameraTraveling(time_split, secondShotPosition, bikePositionAtHome); cameraShot.lookAt(introPed); cameraShots.Add(cameraShot); CameraShotsList.Instance.initialize(cameraShots, AudioManager.Instance.getLength("dialogue0")); AudioManager.Instance.startSound("dialogue0"); } foreach (Ped spectator in firstSongSpectatorsPeds) { spectator.Task.ClearAllImmediately(); spectator.Task.WanderAround(spectator.Position, 100); } }; AbstractObjective firstSongObjectives = new PlayInstrument(InstrumentHash.Guitar, "ronAlternates"); firstSongObjectives.Checkpoint = new Checkpoint(); firstSongObjectives.Checkpoint.Activable = true; firstSongObjectives.Checkpoint.addEntity(Joe.bike, bikePositionAtHome, 0); firstSongObjectives.Checkpoint.PlayerPosition = firstSongPosition; firstSongObjectives.Checkpoint.setClockHour(11); firstSongObjectives.Checkpoint.WantedLevel = 0; firstSongObjectives.OnStarted += (sender) => { Vector3 firstCameraPosition = new Vector3(firstSongPosition.X + 4, firstSongPosition.Y + 4, firstSongPosition.Z + 2); Vector3 secondCameraPosition = firstCameraPosition; secondCameraPosition.X -= 8; Vector3 thirdCameraPosition = new Vector3(2321, 2555.7f, firstSongPosition.Z); Vector3 fourthCameraPosition = new Vector3(2336, 2548.5f, firstSongPosition.Z); Vector3 fifthCameraPosition = new Vector3(firstSongPosition.X + 1, firstSongPosition.Y, firstSongPosition.Z - 1); Vector3 sixthCameraPosition = fifthCameraPosition; sixthCameraPosition.Z += 2; Vector3 seventhCameraPosition = new Vector3(2213, 2510, 83); Vector3 eighthCameraPosition = new Vector3(2336.9f, 2550.8f, 47); float shotTime = AudioManager.Instance.getLength("ronAlternates") / 6; List<CameraShot> cameraShots = new List<CameraShot>(); cameraShots.Add(new CameraTraveling(shotTime, firstCameraPosition, secondCameraPosition, true)); cameraShots.Add(new CameraShot(shotTime, thirdCameraPosition, true)); cameraShots.Add(new CameraShot(shotTime, fourthCameraPosition, true)); cameraShots.Add(new CameraTraveling(shotTime, fifthCameraPosition, sixthCameraPosition, true)); cameraShots.Add(new CameraShot(shotTime, seventhCameraPosition, true)); cameraShots.Add(new CameraShot(shotTime, eighthCameraPosition, true)); CameraShotsList.Instance.initialize(cameraShots); Ped player = Game.Player.Character; foreach (Ped spectator in firstSongSpectatorsPeds) { Vector3 positionsDifference = firstSongPosition - spectator.Position; positionsDifference *= 0.8f; Vector3 newPosition = spectator.Position + positionsDifference; spectator.Task.ClearAllImmediately(); TaskSequence angrySpectator = new TaskSequence(); angrySpectator.AddTask.GoTo(newPosition); angrySpectator.AddTask.TurnTo(player); angrySpectator.AddTask.LookAt(player); angrySpectator.AddTask.UseMobilePhone(random.Next(5000, 30000)); angrySpectator.AddTask.TurnTo(player); angrySpectator.AddTask.LookAt(player); angrySpectator.AddTask.PlayAnimation("gestures@m@standing@casual", "gesture_what_hard", 8f, random.Next(5000, 30000), false, -1f); angrySpectator.AddTask.TurnTo(player); angrySpectator.AddTask.LookAt(player); angrySpectator.AddTask.PlayAnimation("gestures@m@standing@casual", "gesture_nod_yes_soft", 0.1f, random.Next(5000, 30000), false, -1f); angrySpectator.AddTask.TurnTo(player); angrySpectator.AddTask.LookAt(player); angrySpectator.AddTask.PlayAnimation("gestures@m@standing@casual", "gesture_you_soft", 8f, random.Next(5000, 30000), false, -1f); angrySpectator.AddTask.TurnTo(player); angrySpectator.AddTask.LookAt(player); angrySpectator.AddTask.PlayAnimation("gestures@m@standing@casual", "gesture_nod_no_hard", 8f, random.Next(5000, 30000), true, -1f); angrySpectator.Close(); spectator.Task.PerformSequence(angrySpectator); } }; firstSongObjectives.OnAccomplished += (sender, elapsedTime) => { foreach (Ped spectator in firstSongSpectatorsPeds) { if (spectator.Position.DistanceTo(firstSongPosition) > 30) { Vector3 positionsDifference = firstSongPosition - spectator.Position; positionsDifference *= 0.8f; spectator.Position += positionsDifference; } spectator.Task.ClearAllImmediately(); if (random.Next(0, 2) == 0) { spectator.Task.FightAgainst(Game.Player.Character); } else { TaskSequence spectatorsCallPoliceAndFlee = new TaskSequence(); spectatorsCallPoliceAndFlee.AddTask.UseMobilePhone(random.Next(3000, 8000)); spectatorsCallPoliceAndFlee.AddTask.ReactAndFlee(Game.Player.Character); spectatorsCallPoliceAndFlee.Close(); spectator.Task.PerformSequence(spectatorsCallPoliceAndFlee); } } }; GoToPositionInVehicle goToPoliceWithBikeObjective = new GoToPositionInVehicle(roadFaceToPoliceStationPosition); goToPoliceWithBikeObjective.setVehicle(Joe.bike); goToPoliceWithBikeObjective.Checkpoint = new Checkpoint(); goToPoliceWithBikeObjective.Checkpoint.SongsNames = new string[] { "flics1", "dialogue1", "dialogue2", "dialogue3" }; goToPoliceWithBikeObjective.Checkpoint.addEntity(Joe.bike, bikePositionAtHome, 0); goToPoliceWithBikeObjective.Checkpoint.setClockHour(14); goToPoliceWithBikeObjective.Checkpoint.Health = 300; goToPoliceWithBikeObjective.Checkpoint.Armor = 100; goToPoliceWithBikeObjective.Checkpoint.Weather = Weather.Clouds; goToPoliceWithBikeObjective.Checkpoint.WantedLevel = 2; GoToPosition goToSecondSongObjective = new GoToPosition(secondSongPosition); goToSecondSongObjective.Checkpoint = new Checkpoint(); goToSecondSongObjective.Checkpoint.addEntity(Joe.bike, roadFaceToPoliceStationPosition, 0); goToSecondSongObjective.OnStarted += (sender) => { foreach (Ped spectator in firstSongSpectatorsPeds) { spectator.MarkAsNoLongerNeeded(); } List<PedHash> spectatorsHashesSecondSong = new List<PedHash> { PedHash.Cop01SFY, PedHash.Cop01SMY, PedHash.Cop01SFY, PedHash.Cop01SMY }; foreach (PedHash hash in spectatorsHashesSecondSong) { Ped ped = World.CreatePed(hash, secondSongPosition.Around(2)); if (ped != null && ped.Exists()) { ped.Task.WanderAround(secondSongPosition, 5); secondSongCopsPeds.Add(ped); } } }; AbstractObjective secondSongObjectives = new PlayInstrument(InstrumentHash.Guitar, "lesFlics", 74770); secondSongObjectives.Checkpoint = new Checkpoint(); secondSongObjectives.Checkpoint.Activable = true; secondSongObjectives.Checkpoint.addEntity(Joe.bike, roadFaceToPoliceStationPosition, 0); secondSongObjectives.Checkpoint.PlayerPosition = secondSongPosition; secondSongObjectives.Checkpoint.setClockHour(16); secondSongObjectives.Checkpoint.Weather = Weather.Clouds; secondSongObjectives.Checkpoint.WantedLevel = 0; secondSongObjectives.OnStarted += (sender) => { #region Cinematic Ped player = Game.Player.Character; player.Heading = 90; foreach (Ped spectator in World.GetNearbyPeds(player, 15)) { if (spectator != null && spectator.Exists()) { spectator.Task.ClearAllImmediately(); Function.Call(Hash.TASK_TURN_PED_TO_FACE_ENTITY, spectator.Handle, player.Handle); spectator.Task.LookAt(Game.Player.Character); } } foreach (Ped spectator in secondSongCopsPeds) { if (spectator != null && spectator.Exists()) { spectator.Task.ClearAllImmediately(); TaskSequence policeSurrounding = new TaskSequence(); policeSurrounding.AddTask.TurnTo(player); policeSurrounding.AddTask.StandStill(10000); policeSurrounding.AddTask.GoTo(player.Position.Around(2).Around(1)); policeSurrounding.AddTask.TurnTo(player); policeSurrounding.AddTask.LookAt(player); policeSurrounding.Close(); spectator.Task.PerformSequence(policeSurrounding); } } Vector3 firstCameraPosition = new Vector3(secondSongPosition.X + 4, secondSongPosition.Y, secondSongPosition.Z + 2); Vector3 secondCameraPosition = new Vector3(firstCameraPosition.X - 4, firstCameraPosition.Y + 4, firstCameraPosition.Z - 1); Vector3 thirdCameraPosition = new Vector3(firstCameraPosition.X - 4, firstCameraPosition.Y - 4, secondCameraPosition.Z); Vector3 fourthCameraPosition = new Vector3(firstCameraPosition.X + 4, firstCameraPosition.Y + 4, secondCameraPosition.Z); Vector3 fifthCameraPosition = new Vector3(441, -988, 30.5f); Vector3 sixthCameraPosition = new Vector3(441f, -981.2f, 31.5f); Vector3 seventhCameraPosition = new Vector3(435, -986, 32.5f); Vector3 eighthCameraPosition = new Vector3(440.5f, -983.7f, 30.7f); float shotTime = AudioManager.Instance.getLength("lesFlics") / 6; List<CameraShot> cameraShots = new List<CameraShot>(); cameraShots.Add(new CameraTraveling(shotTime, firstCameraPosition, secondCameraPosition, true)); cameraShots.Add(new CameraShot(shotTime, fifthCameraPosition, true)); cameraShots.Add(new CameraShot(shotTime, sixthCameraPosition)); cameraShots.Add(new CameraTraveling(shotTime, secondCameraPosition, thirdCameraPosition, true)); cameraShots.Add(new CameraTraveling(shotTime, thirdCameraPosition, fourthCameraPosition, true)); cameraShots.Add(new CameraShot(shotTime, seventhCameraPosition, true)); cameraShots.Add(new CameraShot(shotTime, eighthCameraPosition, true)); CameraShotsList.Instance.initialize(cameraShots); #endregion }; GoToPositionInVehicle goToTheaterWithBikeObjective = new GoToPositionInVehicle(thirdSongBikePosition); goToTheaterWithBikeObjective.setVehicle(Joe.bike); goToTheaterWithBikeObjective.Checkpoint = new Checkpoint(); goToTheaterWithBikeObjective.Checkpoint.SongsNames = new string[] { "laissezmoi", "flics2", "flics3", "flics4", "dialogue4", "dialogue5", "dialogue6" }; goToTheaterWithBikeObjective.Checkpoint.addEntity(Joe.bike, roadFaceToPoliceStationPosition, 0); goToTheaterWithBikeObjective.Checkpoint.PlayerPosition = secondSongPosition; goToTheaterWithBikeObjective.Checkpoint.Health = 300; goToTheaterWithBikeObjective.Checkpoint.Armor = 100; goToTheaterWithBikeObjective.Checkpoint.WantedLevel = 1; goToTheaterWithBikeObjective.Checkpoint.Weather = Weather.Clearing; goToTheaterWithBikeObjective.Checkpoint.setClockHour(18, 40000); goToTheaterWithBikeObjective.OnStarted += (sender) => { List<PedHash> spectatorsHashesThirdSong = new List<PedHash>(); spectatorsHashesThirdSong.Add(PedHash.Beach01AFM); spectatorsHashesThirdSong.Add(PedHash.MovAlien01); spectatorsHashesThirdSong.Add(PedHash.Jesus01); spectatorsHashesThirdSong.Add(PedHash.Zombie01); for (int num = 0; num < 120; num++) { Ped ped = World.CreatePed(spectatorsHashesThirdSong.ElementAt<PedHash>(random.Next(spectatorsHashesThirdSong.Count)), thirdSongPublicPosition1 + (float)random.NextDouble() * thirdSongPublicPosition2 + (float)random.NextDouble() * thirdSongPublicPosition3); if (ped != null && ped.Exists()) { if (ped.Model == PedHash.MovAlien01) { Function.Call(Hash.SET_PED_COMPONENT_VARIATION, ped.Handle, 0, 0, 0, 2); Function.Call(Hash.SET_PED_COMPONENT_VARIATION, ped.Handle, 3, 0, 0, 2); Function.Call(Hash.SET_PED_COMPONENT_VARIATION, ped.Handle, 4, 1, 0, 2); } thirdSongSpectatorsPeds.Add(ped); } } while (nadineMorano == null || !nadineMorano.Exists()) { nadineMorano = World.CreatePed(PedHash.Business02AFM, thirdSongPosition); } nadineMorano.Task.TurnTo( thirdSongSpectatorsPeds[0] ); Function.Call(Hash.SET_PED_COMPONENT_VARIATION, nadineMorano.Handle, 2, 1, 2, 2); }; goToTheaterWithBikeObjective.OnFirstTimeOnVehicle += (sender, vehicle) => { Game.Player.WantedLevel = 3; foreach (Ped ped in secondSongCopsPeds) { if (ped != null && ped.Exists()) { ped.Task.ClearAllImmediately(); ped.Task.FightAgainst(Game.Player.Character); ped.Weapons.Give(WeaponHash.Pistol, 1, true, true); ped.MarkAsNoLongerNeeded(); } } }; goToTheaterWithBikeObjective.OnAccomplished += (sender, elapsedTime) => { foreach (Ped ped in secondSongCopsPeds) { if (ped != null && ped.Exists()) { ped.MarkAsNoLongerNeeded(); } } }; GoToPosition goToThirdSongPosition = new GoToPosition(thirdSongPosition); goToThirdSongPosition.Checkpoint = new Checkpoint(); goToThirdSongPosition.Checkpoint.addEntity(Joe.bike, thirdSongBikePosition, -90); goToThirdSongPosition.Checkpoint.PlayerPosition = thirdSongBikePosition; Timer chansonHoo2 = null; AbstractObjective thirdSongObjectives = new PlayInstrument(InstrumentHash.Guitar, "degueulasse"); thirdSongObjectives.Checkpoint = new Checkpoint(); thirdSongObjectives.Checkpoint.Activable = true; thirdSongObjectives.Checkpoint.addEntity(Joe.bike, thirdSongBikePosition, -90); thirdSongObjectives.Checkpoint.PlayerPosition = thirdSongPosition; thirdSongObjectives.Checkpoint.Weather = Weather.Raining; thirdSongObjectives.Checkpoint.WantedLevel = 0; thirdSongObjectives.Checkpoint.setClockHour(20); thirdSongObjectives.Checkpoint.Heading = 180; thirdSongObjectives.OnStarted += (sender) => { Ped player = Game.Player.Character; #region Cinematic if (nadineMorano != null && nadineMorano.Position.DistanceTo(player.Position) < 10) { nadineMorano.Task.FleeFrom(player); AudioManager.Instance.startIndependantSound("nadine"); } AudioManager.Instance.startIndependantSound("degueulasseHoo"); chansonHoo2 = new Timer(AudioManager.Instance.getLength("degueulasse") - 19000); chansonHoo2.OnTimerStop += (timerSender) => { AudioManager.Instance.startIndependantSound("degueulasseHoo2"); player = Game.Player.Character; foreach (Ped spectator in thirdSongSpectatorsPeds) { spectator.Task.ClearAllImmediately(); spectator.Task.ClearLookAt(); spectator.Task.ClearAll(); TaskSequence angrySpectator = new TaskSequence(); angrySpectator.AddTask.TurnTo(player); angrySpectator.AddTask.LookAt(player); angrySpectator.AddTask.TurnTo(player); angrySpectator.AddTask.LookAt(player); angrySpectator.AddTask.PlayAnimation("gestures@m@standing@casual", "gesture_what_hard", 8f, random.Next(2000, 5000), false, -1f); angrySpectator.AddTask.TurnTo(player); angrySpectator.AddTask.LookAt(player); angrySpectator.AddTask.PlayAnimation("gestures@m@standing@casual", "gesture_nod_yes_soft", 0.1f, random.Next(2000, 5000), false, -1f); angrySpectator.AddTask.TurnTo(player); angrySpectator.AddTask.LookAt(player); angrySpectator.AddTask.PlayAnimation("gestures@m@standing@casual", "gesture_you_soft", 8f, random.Next(2000, 5000), false, -1f); angrySpectator.AddTask.TurnTo(player); angrySpectator.AddTask.LookAt(player); angrySpectator.AddTask.PlayAnimation("gestures@m@standing@casual", "gesture_nod_no_hard", 8f, random.Next(2000, 5000), true, -1f); angrySpectator.Close(); spectator.Task.PerformSequence(angrySpectator); Tools.log("spectator perform sequence"); } }; foreach (Ped spectator in thirdSongSpectatorsPeds) { spectator.Task.ClearAllImmediately(); TaskSequence angrySpectator = new TaskSequence(); angrySpectator.AddTask.TurnTo(player); angrySpectator.AddTask.LookAt(player); angrySpectator.AddTask.TurnTo(player); angrySpectator.AddTask.LookAt(player); angrySpectator.AddTask.PlayAnimation("gestures@m@standing@casual", "gesture_what_hard", 8f, random.Next(5000, 30000), false, -1f); angrySpectator.AddTask.TurnTo(player); angrySpectator.AddTask.LookAt(player); angrySpectator.AddTask.PlayAnimation("gestures@m@standing@casual", "gesture_nod_yes_soft", 0.1f, random.Next(5000, 30000), false, -1f); angrySpectator.AddTask.TurnTo(player); angrySpectator.AddTask.LookAt(player); angrySpectator.AddTask.PlayAnimation("gestures@m@standing@casual", "gesture_you_soft", 8f, random.Next(5000, 30000), false, -1f); angrySpectator.AddTask.TurnTo(player); angrySpectator.AddTask.LookAt(player); angrySpectator.AddTask.PlayAnimation("gestures@m@standing@casual", "gesture_nod_no_hard", 8f, random.Next(5000, 30000), true, -1f); angrySpectator.Close(); spectator.Task.PerformSequence(angrySpectator); Tools.log("spectator perform sequence"); } Vector3 firstCameraPosition = new Vector3(thirdSongPosition.X + 8, thirdSongPosition.Y, thirdSongPosition.Z + 2); Vector3 secondCameraPosition = new Vector3(firstCameraPosition.X - 8, firstCameraPosition.Y + 8, firstCameraPosition.Z); Vector3 thirdCameraPosition = new Vector3(firstCameraPosition.X - 8, firstCameraPosition.Y - 8, firstCameraPosition.Z); Vector3 fourthCameraPosition = new Vector3(firstCameraPosition.X + 5, firstCameraPosition.Y + 5, firstCameraPosition.Z); Vector3 fifthCameraPosition = new Vector3(679, 554, 131); Vector3 sixthCameraPosition = new Vector3(664, 457, 145); Vector3 seventhCameraPosition = new Vector3(680, 575, 130); Vector3 eighthCameraPosition = new Vector3(689, 589, 131); float shotTime = AudioManager.Instance.getLength("degueulasse") / 6; List<CameraShot> cameraShots = new List<CameraShot>(); cameraShots.Add(new CameraTraveling(shotTime, firstCameraPosition, secondCameraPosition, true)); cameraShots.Add(new CameraShot(shotTime, fifthCameraPosition, true)); cameraShots.Add(new CameraShot(shotTime, sixthCameraPosition)); cameraShots.Add(new CameraShot(shotTime, seventhCameraPosition, true)); cameraShots.Add(new CameraTraveling(shotTime, fourthCameraPosition, thirdCameraPosition, true)); cameraShots.Add(new CameraTraveling(shotTime, thirdCameraPosition, secondCameraPosition, true)); cameraShots.Add(new CameraShot(shotTime, eighthCameraPosition, true)); CameraShotsList.Instance.initialize(cameraShots); #endregion }; thirdSongObjectives.OnEnded += (sender) => { if (chansonHoo2 != null) chansonHoo2.interrupt(); }; thirdSongObjectives.OnAccomplished += (sender, elapsedTime) => { int number = 0; foreach (Ped ped in thirdSongSpectatorsPeds) { if (ped != null && ped.Exists() && ped != Game.Player.Character) { ped.Task.ClearAllImmediately(); if (number < 10) { ped.Task.FightAgainst(Game.Player.Character); } else { if (number < 55) { ped.Task.ReactAndFlee(Game.Player.Character); } else { ped.Task.FleeFrom(Game.Player.Character); } } number++; } } }; GoToPositionInVehicle goToHome = new GoToPositionInVehicle(joeHomePosition); goToHome.setVehicle(Joe.bike); goToHome.Checkpoint = new Checkpoint(); goToHome.Checkpoint.SongsNames = new string[] { "flics5", "dialogue8", "dialogue9" }; goToHome.Checkpoint.addEntity(Joe.bike, thirdSongBikePosition, -90); goToHome.Checkpoint.PlayerPosition = thirdSongPosition; goToHome.Checkpoint.Health = 300; goToHome.Checkpoint.Armor = 100; goToHome.Checkpoint.WantedLevel = 4; goToHome.Checkpoint.Weather = Weather.ThunderStorm; goToHome.Checkpoint.setClockHour(23, 60000); goToHome.OnStarted += (sender) => { bikeRegen = true; }; goToHome.OnFirstTimeOnVehicle += (sender, vehicle) => { goToHome.AdviceText = "Evite les routes pour éviter les voitures de police"; }; /* //TODO : Necessaire ? goToHome.OnAccomplished += (sender, elapsedTime) => { AudioManager.Instance.startSound("dialogue10"); }; */ addObjective(goToFirstSongObjective); addObjective(firstSongObjectives); addObjective(goToPoliceWithBikeObjective); addObjective(goToSecondSongObjective); addObjective(secondSongObjectives); addObjective(goToTheaterWithBikeObjective); addObjective(goToThirdSongPosition); addObjective(thirdSongObjectives); addObjective(goToHome); #endregion }
private void createAndAddObjectives() { #region Objectives GoToPosition goToFirstSongObjective = new GoToPosition(firstSongPosition); goToFirstSongObjective.Checkpoint = new Checkpoint(); goToFirstSongObjective.Checkpoint.addEntity(Joe.bike, bikePositionAtHome, 0); goToFirstSongObjective.Checkpoint.PlayerPosition = joeHomePosition; goToFirstSongObjective.Checkpoint.setClockHour(10); goToFirstSongObjective.Checkpoint.Health = 300; goToFirstSongObjective.Checkpoint.Armor = 100; goToFirstSongObjective.Checkpoint.Weather = Weather.ExtraSunny; goToFirstSongObjective.Checkpoint.WantedLevel = 0; goToFirstSongObjective.Checkpoint.Heading = 35; goToFirstSongObjective.OnStarted += (sender) => { Ped player = Game.Player.Character; if (!this.loadingCheckpoint) { bikeRegen = false; playerDown = true; playerWalked = false; playerMoved = false; introEnded = false; Tools.TeleportPlayer(joeStart, false); introPed = Function.Call <Ped>(Hash.CLONE_PED, player, Function.Call <int>(Hash.GET_ENTITY_HEADING, Function.Call <int>(Hash.PLAYER_PED_ID)), false, true); Tools.TeleportPlayer(joeHomePosition); player.IsVisible = false; player.Task.StandStill(-1); introPed.Task.PlayAnimation("amb@world_human_picnic@male@base", "base", 8f, -1, true, -1f); Vector3 largeShotPosition = new Vector3(2213.186f, 2510.148f, 82.73711f); Vector3 firstShotPosition = new Vector3(2361.558f, 2527.512f, 46.66772f); Vector3 secondShotPosition = new Vector3(2351.906f, 2530.494f, 48f); List <CameraShot> cameraShots = new List <CameraShot>(); float time_split = AudioManager.Instance.getLength("dialogue0") / 3; CameraShot cameraShot = new CameraShot(time_split, largeShotPosition); cameraShot.lookAt(introPed); cameraShots.Add(cameraShot); cameraShot = new CameraTraveling(time_split, firstShotPosition, secondShotPosition); cameraShot.lookAt(introPed); cameraShots.Add(cameraShot); cameraShot = new CameraTraveling(time_split, secondShotPosition, bikePositionAtHome); cameraShot.lookAt(introPed); cameraShots.Add(cameraShot); CameraShotsList.Instance.initialize(cameraShots, AudioManager.Instance.getLength("dialogue0")); AudioManager.Instance.startSound("dialogue0"); } foreach (Ped spectator in firstSongSpectatorsPeds) { spectator.Task.ClearAllImmediately(); spectator.Task.WanderAround(spectator.Position, 100); } }; AbstractObjective firstSongObjectives = new PlayInstrument(InstrumentHash.Guitar, "ronAlternates"); firstSongObjectives.Checkpoint = new Checkpoint(); firstSongObjectives.Checkpoint.Activable = true; firstSongObjectives.Checkpoint.addEntity(Joe.bike, bikePositionAtHome, 0); firstSongObjectives.Checkpoint.PlayerPosition = firstSongPosition; firstSongObjectives.Checkpoint.setClockHour(11); firstSongObjectives.Checkpoint.WantedLevel = 0; firstSongObjectives.OnStarted += (sender) => { Vector3 firstCameraPosition = new Vector3(firstSongPosition.X + 4, firstSongPosition.Y + 4, firstSongPosition.Z + 2); Vector3 secondCameraPosition = firstCameraPosition; secondCameraPosition.X -= 8; Vector3 thirdCameraPosition = new Vector3(2321, 2555.7f, firstSongPosition.Z); Vector3 fourthCameraPosition = new Vector3(2336, 2548.5f, firstSongPosition.Z); Vector3 fifthCameraPosition = new Vector3(firstSongPosition.X + 1, firstSongPosition.Y, firstSongPosition.Z - 1); Vector3 sixthCameraPosition = fifthCameraPosition; sixthCameraPosition.Z += 2; Vector3 seventhCameraPosition = new Vector3(2213, 2510, 83); Vector3 eighthCameraPosition = new Vector3(2336.9f, 2550.8f, 47); float shotTime = AudioManager.Instance.getLength("ronAlternates") / 6; List <CameraShot> cameraShots = new List <CameraShot>(); cameraShots.Add(new CameraTraveling(shotTime, firstCameraPosition, secondCameraPosition, true)); cameraShots.Add(new CameraShot(shotTime, thirdCameraPosition, true)); cameraShots.Add(new CameraShot(shotTime, fourthCameraPosition, true)); cameraShots.Add(new CameraTraveling(shotTime, fifthCameraPosition, sixthCameraPosition, true)); cameraShots.Add(new CameraShot(shotTime, seventhCameraPosition, true)); cameraShots.Add(new CameraShot(shotTime, eighthCameraPosition, true)); CameraShotsList.Instance.initialize(cameraShots); Ped player = Game.Player.Character; foreach (Ped spectator in firstSongSpectatorsPeds) { Vector3 positionsDifference = firstSongPosition - spectator.Position; positionsDifference *= 0.8f; Vector3 newPosition = spectator.Position + positionsDifference; spectator.Task.ClearAllImmediately(); TaskSequence angrySpectator = new TaskSequence(); angrySpectator.AddTask.GoTo(newPosition); angrySpectator.AddTask.TurnTo(player); angrySpectator.AddTask.LookAt(player); angrySpectator.AddTask.UseMobilePhone(random.Next(5000, 30000)); angrySpectator.AddTask.TurnTo(player); angrySpectator.AddTask.LookAt(player); angrySpectator.AddTask.PlayAnimation("gestures@m@standing@casual", "gesture_what_hard", 8f, random.Next(5000, 30000), false, -1f); angrySpectator.AddTask.TurnTo(player); angrySpectator.AddTask.LookAt(player); angrySpectator.AddTask.PlayAnimation("gestures@m@standing@casual", "gesture_nod_yes_soft", 0.1f, random.Next(5000, 30000), false, -1f); angrySpectator.AddTask.TurnTo(player); angrySpectator.AddTask.LookAt(player); angrySpectator.AddTask.PlayAnimation("gestures@m@standing@casual", "gesture_you_soft", 8f, random.Next(5000, 30000), false, -1f); angrySpectator.AddTask.TurnTo(player); angrySpectator.AddTask.LookAt(player); angrySpectator.AddTask.PlayAnimation("gestures@m@standing@casual", "gesture_nod_no_hard", 8f, random.Next(5000, 30000), true, -1f); angrySpectator.Close(); spectator.Task.PerformSequence(angrySpectator); } }; firstSongObjectives.OnAccomplished += (sender, elapsedTime) => { foreach (Ped spectator in firstSongSpectatorsPeds) { if (spectator.Position.DistanceTo(firstSongPosition) > 30) { Vector3 positionsDifference = firstSongPosition - spectator.Position; positionsDifference *= 0.8f; spectator.Position += positionsDifference; } spectator.Task.ClearAllImmediately(); if (random.Next(0, 2) == 0) { spectator.Task.FightAgainst(Game.Player.Character); } else { TaskSequence spectatorsCallPoliceAndFlee = new TaskSequence(); spectatorsCallPoliceAndFlee.AddTask.UseMobilePhone(random.Next(3000, 8000)); spectatorsCallPoliceAndFlee.AddTask.ReactAndFlee(Game.Player.Character); spectatorsCallPoliceAndFlee.Close(); spectator.Task.PerformSequence(spectatorsCallPoliceAndFlee); } } }; GoToPositionInVehicle goToPoliceWithBikeObjective = new GoToPositionInVehicle(roadFaceToPoliceStationPosition); goToPoliceWithBikeObjective.setVehicle(Joe.bike); goToPoliceWithBikeObjective.Checkpoint = new Checkpoint(); goToPoliceWithBikeObjective.Checkpoint.SongsNames = new string[] { "flics1", "dialogue1", "dialogue2", "dialogue3" }; goToPoliceWithBikeObjective.Checkpoint.addEntity(Joe.bike, bikePositionAtHome, 0); goToPoliceWithBikeObjective.Checkpoint.setClockHour(14); goToPoliceWithBikeObjective.Checkpoint.Health = 300; goToPoliceWithBikeObjective.Checkpoint.Armor = 100; goToPoliceWithBikeObjective.Checkpoint.Weather = Weather.Clouds; goToPoliceWithBikeObjective.Checkpoint.WantedLevel = 2; GoToPosition goToSecondSongObjective = new GoToPosition(secondSongPosition); goToSecondSongObjective.Checkpoint = new Checkpoint(); goToSecondSongObjective.Checkpoint.addEntity(Joe.bike, roadFaceToPoliceStationPosition, 0); goToSecondSongObjective.OnStarted += (sender) => { foreach (Ped spectator in firstSongSpectatorsPeds) { spectator.MarkAsNoLongerNeeded(); } List <PedHash> spectatorsHashesSecondSong = new List <PedHash> { PedHash.Cop01SFY, PedHash.Cop01SMY, PedHash.Cop01SFY, PedHash.Cop01SMY }; foreach (PedHash hash in spectatorsHashesSecondSong) { Ped ped = World.CreatePed(hash, secondSongPosition.Around(2)); if (ped != null && ped.Exists()) { ped.Task.WanderAround(secondSongPosition, 5); secondSongCopsPeds.Add(ped); } } }; AbstractObjective secondSongObjectives = new PlayInstrument(InstrumentHash.Guitar, "lesFlics", 74770); secondSongObjectives.Checkpoint = new Checkpoint(); secondSongObjectives.Checkpoint.Activable = true; secondSongObjectives.Checkpoint.addEntity(Joe.bike, roadFaceToPoliceStationPosition, 0); secondSongObjectives.Checkpoint.PlayerPosition = secondSongPosition; secondSongObjectives.Checkpoint.setClockHour(16); secondSongObjectives.Checkpoint.Weather = Weather.Clouds; secondSongObjectives.Checkpoint.WantedLevel = 0; secondSongObjectives.OnStarted += (sender) => { #region Cinematic Ped player = Game.Player.Character; player.Heading = 90; foreach (Ped spectator in World.GetNearbyPeds(player, 15)) { if (spectator != null && spectator.Exists()) { spectator.Task.ClearAllImmediately(); Function.Call(Hash.TASK_TURN_PED_TO_FACE_ENTITY, spectator.Handle, player.Handle); spectator.Task.LookAt(Game.Player.Character); } } foreach (Ped spectator in secondSongCopsPeds) { if (spectator != null && spectator.Exists()) { spectator.Task.ClearAllImmediately(); TaskSequence policeSurrounding = new TaskSequence(); policeSurrounding.AddTask.TurnTo(player); policeSurrounding.AddTask.StandStill(10000); policeSurrounding.AddTask.GoTo(player.Position.Around(2).Around(1)); policeSurrounding.AddTask.TurnTo(player); policeSurrounding.AddTask.LookAt(player); policeSurrounding.Close(); spectator.Task.PerformSequence(policeSurrounding); } } Vector3 firstCameraPosition = new Vector3(secondSongPosition.X + 4, secondSongPosition.Y, secondSongPosition.Z + 2); Vector3 secondCameraPosition = new Vector3(firstCameraPosition.X - 4, firstCameraPosition.Y + 4, firstCameraPosition.Z - 1); Vector3 thirdCameraPosition = new Vector3(firstCameraPosition.X - 4, firstCameraPosition.Y - 4, secondCameraPosition.Z); Vector3 fourthCameraPosition = new Vector3(firstCameraPosition.X + 4, firstCameraPosition.Y + 4, secondCameraPosition.Z); Vector3 fifthCameraPosition = new Vector3(441, -988, 30.5f); Vector3 sixthCameraPosition = new Vector3(441f, -981.2f, 31.5f); Vector3 seventhCameraPosition = new Vector3(435, -986, 32.5f); Vector3 eighthCameraPosition = new Vector3(440.5f, -983.7f, 30.7f); float shotTime = AudioManager.Instance.getLength("lesFlics") / 6; List <CameraShot> cameraShots = new List <CameraShot>(); cameraShots.Add(new CameraTraveling(shotTime, firstCameraPosition, secondCameraPosition, true)); cameraShots.Add(new CameraShot(shotTime, fifthCameraPosition, true)); cameraShots.Add(new CameraShot(shotTime, sixthCameraPosition)); cameraShots.Add(new CameraTraveling(shotTime, secondCameraPosition, thirdCameraPosition, true)); cameraShots.Add(new CameraTraveling(shotTime, thirdCameraPosition, fourthCameraPosition, true)); cameraShots.Add(new CameraShot(shotTime, seventhCameraPosition, true)); cameraShots.Add(new CameraShot(shotTime, eighthCameraPosition, true)); CameraShotsList.Instance.initialize(cameraShots); #endregion }; GoToPositionInVehicle goToTheaterWithBikeObjective = new GoToPositionInVehicle(thirdSongBikePosition); goToTheaterWithBikeObjective.setVehicle(Joe.bike); goToTheaterWithBikeObjective.Checkpoint = new Checkpoint(); goToTheaterWithBikeObjective.Checkpoint.SongsNames = new string[] { "laissezmoi", "flics2", "flics3", "flics4", "dialogue4", "dialogue5", "dialogue6" }; goToTheaterWithBikeObjective.Checkpoint.addEntity(Joe.bike, roadFaceToPoliceStationPosition, 0); goToTheaterWithBikeObjective.Checkpoint.PlayerPosition = secondSongPosition; goToTheaterWithBikeObjective.Checkpoint.Health = 300; goToTheaterWithBikeObjective.Checkpoint.Armor = 100; goToTheaterWithBikeObjective.Checkpoint.WantedLevel = 1; goToTheaterWithBikeObjective.Checkpoint.Weather = Weather.Clearing; goToTheaterWithBikeObjective.Checkpoint.setClockHour(18, 40000); goToTheaterWithBikeObjective.OnStarted += (sender) => { List <PedHash> spectatorsHashesThirdSong = new List <PedHash>(); spectatorsHashesThirdSong.Add(PedHash.Beach01AFM); spectatorsHashesThirdSong.Add(PedHash.MovAlien01); spectatorsHashesThirdSong.Add(PedHash.Jesus01); spectatorsHashesThirdSong.Add(PedHash.Zombie01); for (int num = 0; num < 120; num++) { Ped ped = World.CreatePed(spectatorsHashesThirdSong.ElementAt <PedHash>(random.Next(spectatorsHashesThirdSong.Count)), thirdSongPublicPosition1 + (float)random.NextDouble() * thirdSongPublicPosition2 + (float)random.NextDouble() * thirdSongPublicPosition3); if (ped != null && ped.Exists()) { if (ped.Model == PedHash.MovAlien01) { Function.Call(Hash.SET_PED_COMPONENT_VARIATION, ped.Handle, 0, 0, 0, 2); Function.Call(Hash.SET_PED_COMPONENT_VARIATION, ped.Handle, 3, 0, 0, 2); Function.Call(Hash.SET_PED_COMPONENT_VARIATION, ped.Handle, 4, 1, 0, 2); } thirdSongSpectatorsPeds.Add(ped); } } while (nadineMorano == null || !nadineMorano.Exists()) { nadineMorano = World.CreatePed(PedHash.Business02AFM, thirdSongPosition); } nadineMorano.Task.TurnTo(thirdSongSpectatorsPeds[0]); Function.Call(Hash.SET_PED_COMPONENT_VARIATION, nadineMorano.Handle, 2, 1, 2, 2); }; goToTheaterWithBikeObjective.OnFirstTimeOnVehicle += (sender, vehicle) => { Game.Player.WantedLevel = 3; foreach (Ped ped in secondSongCopsPeds) { if (ped != null && ped.Exists()) { ped.Task.ClearAllImmediately(); ped.Task.FightAgainst(Game.Player.Character); ped.Weapons.Give(WeaponHash.Pistol, 1, true, true); ped.MarkAsNoLongerNeeded(); } } }; goToTheaterWithBikeObjective.OnAccomplished += (sender, elapsedTime) => { foreach (Ped ped in secondSongCopsPeds) { if (ped != null && ped.Exists()) { ped.MarkAsNoLongerNeeded(); } } }; GoToPosition goToThirdSongPosition = new GoToPosition(thirdSongPosition); goToThirdSongPosition.Checkpoint = new Checkpoint(); goToThirdSongPosition.Checkpoint.addEntity(Joe.bike, thirdSongBikePosition, -90); goToThirdSongPosition.Checkpoint.PlayerPosition = thirdSongBikePosition; Timer chansonHoo2 = null; AbstractObjective thirdSongObjectives = new PlayInstrument(InstrumentHash.Guitar, "degueulasse"); thirdSongObjectives.Checkpoint = new Checkpoint(); thirdSongObjectives.Checkpoint.Activable = true; thirdSongObjectives.Checkpoint.addEntity(Joe.bike, thirdSongBikePosition, -90); thirdSongObjectives.Checkpoint.PlayerPosition = thirdSongPosition; thirdSongObjectives.Checkpoint.Weather = Weather.Raining; thirdSongObjectives.Checkpoint.WantedLevel = 0; thirdSongObjectives.Checkpoint.setClockHour(20); thirdSongObjectives.Checkpoint.Heading = 180; thirdSongObjectives.OnStarted += (sender) => { Ped player = Game.Player.Character; #region Cinematic if (nadineMorano != null && nadineMorano.Position.DistanceTo(player.Position) < 10) { nadineMorano.Task.FleeFrom(player); AudioManager.Instance.startIndependantSound("nadine"); } AudioManager.Instance.startIndependantSound("degueulasseHoo"); chansonHoo2 = new Timer(AudioManager.Instance.getLength("degueulasse") - 19000); chansonHoo2.OnTimerStop += (timerSender) => { AudioManager.Instance.startIndependantSound("degueulasseHoo2"); player = Game.Player.Character; foreach (Ped spectator in thirdSongSpectatorsPeds) { spectator.Task.ClearAllImmediately(); spectator.Task.ClearLookAt(); spectator.Task.ClearAll(); TaskSequence angrySpectator = new TaskSequence(); angrySpectator.AddTask.TurnTo(player); angrySpectator.AddTask.LookAt(player); angrySpectator.AddTask.TurnTo(player); angrySpectator.AddTask.LookAt(player); angrySpectator.AddTask.PlayAnimation("gestures@m@standing@casual", "gesture_what_hard", 8f, random.Next(2000, 5000), false, -1f); angrySpectator.AddTask.TurnTo(player); angrySpectator.AddTask.LookAt(player); angrySpectator.AddTask.PlayAnimation("gestures@m@standing@casual", "gesture_nod_yes_soft", 0.1f, random.Next(2000, 5000), false, -1f); angrySpectator.AddTask.TurnTo(player); angrySpectator.AddTask.LookAt(player); angrySpectator.AddTask.PlayAnimation("gestures@m@standing@casual", "gesture_you_soft", 8f, random.Next(2000, 5000), false, -1f); angrySpectator.AddTask.TurnTo(player); angrySpectator.AddTask.LookAt(player); angrySpectator.AddTask.PlayAnimation("gestures@m@standing@casual", "gesture_nod_no_hard", 8f, random.Next(2000, 5000), true, -1f); angrySpectator.Close(); spectator.Task.PerformSequence(angrySpectator); Tools.log("spectator perform sequence"); } }; foreach (Ped spectator in thirdSongSpectatorsPeds) { spectator.Task.ClearAllImmediately(); TaskSequence angrySpectator = new TaskSequence(); angrySpectator.AddTask.TurnTo(player); angrySpectator.AddTask.LookAt(player); angrySpectator.AddTask.TurnTo(player); angrySpectator.AddTask.LookAt(player); angrySpectator.AddTask.PlayAnimation("gestures@m@standing@casual", "gesture_what_hard", 8f, random.Next(5000, 30000), false, -1f); angrySpectator.AddTask.TurnTo(player); angrySpectator.AddTask.LookAt(player); angrySpectator.AddTask.PlayAnimation("gestures@m@standing@casual", "gesture_nod_yes_soft", 0.1f, random.Next(5000, 30000), false, -1f); angrySpectator.AddTask.TurnTo(player); angrySpectator.AddTask.LookAt(player); angrySpectator.AddTask.PlayAnimation("gestures@m@standing@casual", "gesture_you_soft", 8f, random.Next(5000, 30000), false, -1f); angrySpectator.AddTask.TurnTo(player); angrySpectator.AddTask.LookAt(player); angrySpectator.AddTask.PlayAnimation("gestures@m@standing@casual", "gesture_nod_no_hard", 8f, random.Next(5000, 30000), true, -1f); angrySpectator.Close(); spectator.Task.PerformSequence(angrySpectator); Tools.log("spectator perform sequence"); } Vector3 firstCameraPosition = new Vector3(thirdSongPosition.X + 8, thirdSongPosition.Y, thirdSongPosition.Z + 2); Vector3 secondCameraPosition = new Vector3(firstCameraPosition.X - 8, firstCameraPosition.Y + 8, firstCameraPosition.Z); Vector3 thirdCameraPosition = new Vector3(firstCameraPosition.X - 8, firstCameraPosition.Y - 8, firstCameraPosition.Z); Vector3 fourthCameraPosition = new Vector3(firstCameraPosition.X + 5, firstCameraPosition.Y + 5, firstCameraPosition.Z); Vector3 fifthCameraPosition = new Vector3(679, 554, 131); Vector3 sixthCameraPosition = new Vector3(664, 457, 145); Vector3 seventhCameraPosition = new Vector3(680, 575, 130); Vector3 eighthCameraPosition = new Vector3(689, 589, 131); float shotTime = AudioManager.Instance.getLength("degueulasse") / 6; List <CameraShot> cameraShots = new List <CameraShot>(); cameraShots.Add(new CameraTraveling(shotTime, firstCameraPosition, secondCameraPosition, true)); cameraShots.Add(new CameraShot(shotTime, fifthCameraPosition, true)); cameraShots.Add(new CameraShot(shotTime, sixthCameraPosition)); cameraShots.Add(new CameraShot(shotTime, seventhCameraPosition, true)); cameraShots.Add(new CameraTraveling(shotTime, fourthCameraPosition, thirdCameraPosition, true)); cameraShots.Add(new CameraTraveling(shotTime, thirdCameraPosition, secondCameraPosition, true)); cameraShots.Add(new CameraShot(shotTime, eighthCameraPosition, true)); CameraShotsList.Instance.initialize(cameraShots); #endregion }; thirdSongObjectives.OnEnded += (sender) => { if (chansonHoo2 != null) { chansonHoo2.interrupt(); } }; thirdSongObjectives.OnAccomplished += (sender, elapsedTime) => { int number = 0; foreach (Ped ped in thirdSongSpectatorsPeds) { if (ped != null && ped.Exists() && ped != Game.Player.Character) { ped.Task.ClearAllImmediately(); if (number < 10) { ped.Task.FightAgainst(Game.Player.Character); } else { if (number < 55) { ped.Task.ReactAndFlee(Game.Player.Character); } else { ped.Task.FleeFrom(Game.Player.Character); } } number++; } } }; GoToPositionInVehicle goToHome = new GoToPositionInVehicle(joeHomePosition); goToHome.setVehicle(Joe.bike); goToHome.Checkpoint = new Checkpoint(); goToHome.Checkpoint.SongsNames = new string[] { "flics5", "dialogue8", "dialogue9" }; goToHome.Checkpoint.addEntity(Joe.bike, thirdSongBikePosition, -90); goToHome.Checkpoint.PlayerPosition = thirdSongPosition; goToHome.Checkpoint.Health = 300; goToHome.Checkpoint.Armor = 100; goToHome.Checkpoint.WantedLevel = 4; goToHome.Checkpoint.Weather = Weather.ThunderStorm; goToHome.Checkpoint.setClockHour(23, 60000); goToHome.OnStarted += (sender) => { bikeRegen = true; }; goToHome.OnFirstTimeOnVehicle += (sender, vehicle) => { goToHome.AdviceText = "Evite les routes pour éviter les voitures de police"; }; /* * //TODO : Necessaire ? * goToHome.OnAccomplished += (sender, elapsedTime) => { * AudioManager.Instance.startSound("dialogue10"); * }; */ addObjective(goToFirstSongObjective); addObjective(firstSongObjectives); addObjective(goToPoliceWithBikeObjective); addObjective(goToSecondSongObjective); addObjective(secondSongObjectives); addObjective(goToTheaterWithBikeObjective); addObjective(goToThirdSongPosition); addObjective(thirdSongObjectives); addObjective(goToHome); #endregion }