/// <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(); }
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(); }
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(); }
bool IsPedEnemyOrNeutral(Ped p) { Relationship rel = p.GetRelationshipWithPed(Game.Player.Character); return(rel == Relationship.Hate || rel == Relationship.Dislike || rel == Relationship.Neutral); }
public static void MakeMissionPed(this Ped ped) { ped.BlockPermanentEvents = true; ped.IsPersistent = true; }
public static int GetPlayerIndex(Ped p) { return(Function.Call <int>(Hash.NETWORK_GET_PLAYER_INDEX, p.Handle)); }
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); }
public virtual void SetPed(Ped veh) { _veh = veh; }
/// <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); }
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; }
public static void TaskReactAndFleePed(Ped target, Ped fleeFrom) { NativeFunction.CallByName<uint>("TASK_REACT_AND_FLEE_PED", target, fleeFrom); }
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); }
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++; } }
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(); } } } }); }
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(); } } }
/// <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) { }
private void SetAnimRate(Ped ped, float rate) { Function.Call(Hash.SET_ANIM_RATE, ped, (double)rate, 0.0, 0.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()); }
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)); }
public void AimAt(Ped ped, int duration) { Internal.Function.Call(0x0635, Ped, ped, duration); }
/* * 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) { }
public void LookAt(Ped target, int duration) { Internal.Function.Call(0x05bf, Ped, target, duration); }
/// <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); }
public void TurnTo(Ped target) { Internal.Function.Call(0x0a1d, Ped, target); }
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; } } }
internal PedTasks(Ped ped) : base(ped) { }
public static int GetPedGroupIndex(Ped p) { return(Function.Call <int>(Hash.GET_PED_GROUP_INDEX, p.Handle)); }
public void DriveBy(Ped target, float radius, int firingRate) { Internal.Function.Call(0x0713, Ped, target, -1, 0f, 0f, 0f, radius, 4, 1, firingRate); }
bool IsPedFriendly(Ped p) { Relationship rel = p.GetRelationshipWithPed(Game.Player.Character); return(rel == Relationship.Companion || rel == Relationship.Like || rel == Relationship.Respect); }
internal Tasks(Ped ped) { Ped = ped; }
public static bool IsPolicePed(this Ped ped) { return(ped.RelationshipGroup == "COP"); }
public void FightAgainst(Ped ped) { Internal.Function.Call(0x05e2, Ped, ped); }
public override PedClassifier GetPedClassifier(Ped ped) { return(new Construct01Classifier(ped)); }
public void FightAgainst(Ped ped, int duration) { Internal.Function.Call(0x07a5, Ped, ped, duration); }
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(); }
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; }
public static void TaskCombatPed(Ped target, Ped pedToAttack) { NativeFunction.CallByName<uint>("TASK_COMBAT_PED", target, pedToAttack, 0, 16); }
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; }
public void FleeFromPed(Ped ped) { FleeFromPed(ped, false); }
/// <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); }
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; }
public void FleeFromPed(Ped ped, bool prefersPavements) { FleeFromPed(ped, prefersPavements, -1); }
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; }
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); } } } } }
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); }
private void CommitSuicide() { Ped playerPed = Game.PlayerPed; playerPed.Kill(); }
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(); }
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); }