void OnKeyUp(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.H && group_members.Count < max_companions) { Ped player = Game.Player.Character; GTA.Math.Vector3 spawnLoc = player.Position + (player.ForwardVector * 5); List <string> model_names = new List <string>(); model_names.Add("a_c_husky"); model_names.Add("a_c_retriever"); model_names.Add("a_c_rottweiler"); model_names.Add("a_c_shepherd"); Random rnd = new Random(); Ped companion = GTA.World.CreatePed(model_names[rnd.Next(0, model_names.Count - 1)], spawnLoc); group_members.Add(companion); int player_group = GTA.Native.Function.Call <int>(GTA.Native.Hash.GET_PED_GROUP_INDEX, player.Handle); GTA.Native.Function.Call(GTA.Native.Hash.SET_PED_AS_GROUP_MEMBER, companion.Handle, player_group); companion.Task.ClearAllImmediately(); GTA.Native.Function.Call(GTA.Native.Hash.TASK_COMBAT_HATED_TARGETS_IN_AREA, companion, 50000, 0); GTA.Native.Function.Call(GTA.Native.Hash.SET_PED_KEEP_TASK, companion, true); } if (e.KeyCode == Keys.J) { group_members[group_members.Count - 1].Kill(); group_members.RemoveAt(group_members.Count - 1); } }
public Vector3 Nearest_Location(Dictionary <int, Vector3> dictionary, GTA.Math.Vector3 Target_Position) { //Import_Details.instance.Locations_List.Clear(); if (dictionary.Count == 0) { GTA.UI.Notification.Show("No nearest location found"); return(Vector3.Zero); } float lastreading = 9999f, currentreading = 0f; int final_key = 0; foreach (var item in dictionary) { currentreading = GTA.World.GetDistance(Target_Position, item.Value); if (currentreading < lastreading) { lastreading = currentreading; final_key = item.Key; } //Import_Details.instance.Locations_List.Add(item.Value); } GTA.UI.Notification.Show("Nearest Location is " + lastreading.ToString("0.##") + " meters away"); return(dictionary[final_key]); }
public static Vector3 RaycastEverything(Vector2 screenCoord, Vector3 camPos, Vector3 camRot) { const float raycastToDist = 100.0f; const float raycastFromDist = 1f; var target3D = ScreenRelToWorld(camPos, camRot, screenCoord); var source3D = camPos; Ped PlayerChar = Game.Player.Character; Entity ignoreEntity = PlayerChar; if (PlayerChar.IsInVehicle()) { ignoreEntity = PlayerChar.CurrentVehicle; } var dir = (target3D - source3D); dir.Normalize(); var raycastResults = World.Raycast(source3D + dir * raycastFromDist, source3D + dir * raycastToDist, (IntersectOptions)(1 | 16 | 256 | 2 | 4 | 8)// | peds + vehicles , ignoreEntity); if (raycastResults.DidHit) { return(raycastResults.HitPosition); } return(camPos + dir * raycastToDist); }
void Spawn(MenuButton sender, KeyValuePair <VehicleHash, int> vehicles) { { GTA.Math.Vector3 spawn_vehicle = player.Position + (player.ForwardVector * 10); World.CreateVehicle(vehicles.Key, spawn_vehicle); UI.Notify("Vehicle Spawned!", true); } }
public static Vector3 LerpVector(Vector3 start, Vector3 end, float speed) { return(new Vector3() { X = start.X + (end.X - start.X) * speed, Y = start.Y + (end.Y - start.Y) * speed, Z = start.Z + (end.Z - start.Z) * speed, }); }
public static Vector3 LinearVectorLerp(Vector3 start, Vector3 end, long currentTime, long duration) { return(new Vector3() { X = LinearFloatLerp(start.X, end.X, currentTime, duration), Y = LinearFloatLerp(start.Y, end.Y, currentTime, duration), Z = LinearFloatLerp(start.Z, end.Z, currentTime, duration), }); }
public static CherryMPShared.Vector3 ToLVector(this GTA.Math.Vector3 vec) { return(new CherryMPShared.Vector3() { X = vec.X, Y = vec.Y, Z = vec.Z, }); }
public static PointF WorldToScreen(Vector3 worldCoords) { var num1 = new OutputArgument(); var num2 = new OutputArgument(); if (!Function.Call <bool>(Hash.GET_SCREEN_COORD_FROM_WORLD_COORD, worldCoords.X, worldCoords.Y, worldCoords.Z, num1, num2)) { return(new PointF()); } return(new PointF(num1.GetResult <float>(), num2.GetResult <float>())); }
private bool DisplayVehicleDriveBy() { if (!IsShooting || CurrentWeapon == 0 || VehicleSeat != -1 || !WeaponDataProvider.DoesVehicleSeatHaveMountedGuns((VehicleHash)VehicleHash)) { return(false); } var isRocket = WeaponDataProvider.IsVehicleWeaponRocket(CurrentWeapon); if (isRocket) { if (DateTime.Now.Subtract(_lastRocketshot).TotalMilliseconds < 1500) { return(true); } _lastRocketshot = DateTime.Now; } var isParallel = WeaponDataProvider.DoesVehicleHaveParallelWeapon(unchecked ((VehicleHash)VehicleHash), isRocket); var muzzle = WeaponDataProvider.GetVehicleWeaponMuzzle(unchecked ((VehicleHash)VehicleHash), isRocket); if (isParallel && _leftSide) { muzzle = new Vector3(muzzle.X * -1f, muzzle.Y, muzzle.Z); } _leftSide = !_leftSide; var start = MainVehicle.GetOffsetInWorldCoords(muzzle); var end = start + Main.RotationToDirection(VehicleRotation) * 100f; var hash = CurrentWeapon; var speed = 0xbf800000; if (isRocket) { speed = 0xbf800000; } else if ((VehicleHash)VehicleHash == GTA.VehicleHash.Savage || (VehicleHash)VehicleHash == GTA.VehicleHash.Hydra || (VehicleHash)VehicleHash == GTA.VehicleHash.Lazer) { hash = unchecked ((int)WeaponHash.Railgun); } else { hash = unchecked ((int)WeaponHash.CombatPDW); } var damage = IsFriend() ? 0 : 75; Function.Call(Hash.SHOOT_SINGLE_BULLET_BETWEEN_COORDS, start.X, start.Y, start.Z, end.X, end.Y, end.Z, damage, true, hash, Character, true, false, speed); return(false); }
public static GTA.Math.Vector3 SmoothStep(GTA.Math.Vector3 start, GTA.Math.Vector3 end, float amount) { GTA.Math.Vector3 vector; amount = (amount > 1.0f) ? 1.0f : ((amount < 0.0f) ? 0.0f : amount); amount = (amount * amount) * (3.0f - (2.0f * amount)); vector.X = start.X + ((end.X - start.X) * amount); vector.Y = start.Y + ((end.Y - start.Y) * amount); vector.Z = start.Z + ((end.Z - start.Z) * amount); return(vector); }
public static Vector3 RotationToDirection(Vector3 rotation) { var z = DegToRad(rotation.Z); var x = DegToRad(rotation.X); var num = Math.Abs(Math.Cos(x)); return(new Vector3 { X = (float)(-Math.Sin(z) * num), Y = (float)(Math.Cos(z) * num), Z = (float)Math.Sin(x) }); }
public static bool WorldToScreenRel(Vector3 worldCoords, out Vector2 screenCoords) { var num1 = new OutputArgument(); var num2 = new OutputArgument(); if (!Function.Call <bool>(Hash.GET_SCREEN_COORD_FROM_WORLD_COORD, worldCoords.X, worldCoords.Y, worldCoords.Z, num1, num2)) { screenCoords = new Vector2(); return(false); } screenCoords = new Vector2((num1.GetResult <float>() - 0.5f) * 2, (num2.GetResult <float>() - 0.5f) * 2); return(true); }
public static void TeleportToWaypoint() { Blip wpBlip = new Blip(Function.Call <int>(Hash.GET_FIRST_BLIP_INFO_ID, 8)); if (Function.Call <bool>(Hash.IS_WAYPOINT_ACTIVE)) { GTA.Math.Vector3 wpVec = Function.Call <GTA.Math.Vector3>(Hash.GET_BLIP_COORDS, wpBlip); Game.Player.Character.Position = wpVec; } else { UI.ShowSubtitle("Waypoint not active."); } }
void GetGameData() { //GPS & Coords mapDestination = World.GetWaypointPosition(); //https://github.com/Ric4o/GTAV-EnhancedNativeTrainer/blob/master/EnhancedNativeTrainer/src/features/teleportation.cpp mapDestination.Z = World.GetGroundHeight(mapDestination); Function.Call(Hash.GENERATE_DIRECTIONS_TO_COORD, mapDestination.X, mapDestination.Y, mapDestination.Z, 1, direction, vehicleOut, distance); speed = vehicle.Speed; heading = vehicle.Heading; rot = vehicle.Rotation; coordinates = vehicle.Position; onRoad = Function.Call <bool>(Hash.IS_POINT_ON_ROAD, coordinates.X, coordinates.Y, coordinates.Z, vehicle); }
public static Vector3 ToEuler(this Quaternion q) { var pitchYawRoll = new Vector3(); double sqw = q.W * q.W; double sqx = q.X * q.X; double sqy = q.Y * q.Y; double sqz = q.Z * q.Z; pitchYawRoll.Y = (float)Math.Atan2(2f * q.X * q.W + 2f * q.Y * q.Z, 1 - 2f * (sqz + sqw)); // Yaw pitchYawRoll.X = (float)Math.Asin(2f * (q.X * q.Z - q.W * q.Y)); // Pitch pitchYawRoll.Z = (float)Math.Atan2(2f * q.X * q.Y + 2f * q.Z * q.W, 1 - 2f * (sqy + sqz)); return(pitchYawRoll); }
public static Vector3 DirectionToRotation(GTA.Math.Vector3 direction) { direction.Normalize(); var x = Math.Atan2(direction.Z, Math.Sqrt(direction.Y * direction.Y + direction.X * direction.X)); var y = 0; var z = -Math.Atan2(direction.X, direction.Y); return(new Vector3 { X = (float)RadToDeg(x), Y = (float)RadToDeg(y), Z = (float)RadToDeg(z) }); }
}//Default constructor ends here private void Set_Destination_Marker_Map() { if (Game.IsWaypointActive) { //var waypoint = World.GetWaypointPosition(); Blip wpBlip = new Blip(Function.Call <int>(Hash.GET_FIRST_BLIP_INFO_ID, 8)); if (Function.Call <bool>(Hash.IS_WAYPOINT_ACTIVE)) { GTA.Math.Vector3 wpVec = Function.Call <GTA.Math.Vector3>(Hash.GET_BLIP_COORDS, wpBlip); Destionation = World.GetNextPositionOnStreet(wpVec.Around(10f)); GTA.UI.Notify("Destination Set"); } } else { GTA.UI.Notify("Destination not found, driver will now cruise around"); } }
public static Vector3 ScreenRelToWorld(Vector3 camPos, Vector3 camRot, Vector2 coord) { var camForward = RotationToDirection(camRot); var rotUp = camRot + new Vector3(10, 0, 0); var rotDown = camRot + new Vector3(-10, 0, 0); var rotLeft = camRot + new Vector3(0, 0, -10); var rotRight = camRot + new Vector3(0, 0, 10); var camRight = RotationToDirection(rotRight) - RotationToDirection(rotLeft); var camUp = RotationToDirection(rotUp) - RotationToDirection(rotDown); var rollRad = -DegToRad(camRot.Y); var camRightRoll = camRight * (float)Math.Cos(rollRad) - camUp * (float)Math.Sin(rollRad); var camUpRoll = camRight * (float)Math.Sin(rollRad) + camUp * (float)Math.Cos(rollRad); var point3D = camPos + camForward * 10.0f + camRightRoll + camUpRoll; Vector2 point2D; if (!WorldToScreenRel(point3D, out point2D)) { return(camPos + camForward * 10.0f); } var point3DZero = camPos + camForward * 10.0f; Vector2 point2DZero; if (!WorldToScreenRel(point3DZero, out point2DZero)) { return(camPos + camForward * 10.0f); } const double eps = 0.001; if (Math.Abs(point2D.X - point2DZero.X) < eps || Math.Abs(point2D.Y - point2DZero.Y) < eps) { return(camPos + camForward * 10.0f); } var scaleX = (coord.X - point2DZero.X) / (point2D.X - point2DZero.X); var scaleY = (coord.Y - point2DZero.Y) / (point2D.Y - point2DZero.Y); var point3Dret = camPos + camForward * 10.0f + camRightRoll * scaleX + camUpRoll * scaleY; return(point3Dret); }
//Use this for cathing the KeyUp Event void OnKeyUp(object sender, KeyEventArgs e) { //Set SpawnPos for Team A if (e.KeyCode == Keys.H) { //A Reference to the Player Ped player = Game.Player.Character; //Use this for one meter in front of the player //spawnLoc = player.Position + (player.ForwardVector * 1); //Define the playerpos as the spawnpos for the team spawnLocA = player.Position; //notice that location is defined IsSpawnLocADefined = true; //A Blip for the spawn pos Blip blip = World.CreateBlip(spawnLocA, 1.5f); blip.Color = BlipColor.Red; blip.Scale = 5f; UI.Notify("Point A is ready"); } //Set SpawnPos for Team B if (e.KeyCode == Keys.J) { //for code comments see a few lines up Ped player = Game.Player.Character; spawnLocB = player.Position; IsSpawnLocBDefined = true; Blip blip = World.CreateBlip(spawnLocB, 1.5f); blip.Color = BlipColor.Yellow; blip.Scale = 5f; //feedback UI.Notify("Point B is ready"); } }
public static int GetPedSpeed(Vector3 firstVector, Vector3 secondVector) { float speed = (firstVector - secondVector).Length(); if (speed < 0.02f) { return(0); } else if (speed >= 0.02f && speed < 0.05f) { return(1); } else if (speed >= 0.05f && speed < 0.12f) { return(2); } else if (speed >= 0.12f) { return(3); } return(0); }
//Executes on releasing the key void OnKeyUp(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.H && maxSpawnedModels < 5) { Ped player = Game.Player.Character; GTA.Math.Vector3 spawnLocation = player.Position + (player.ForwardVector * 5); //The list of dog models List <string> dogList = new List <string>(); dogList.Add("a_c_chop"); dogList.Add("a_c_retriever"); dogList.Add("a_c_shepherd"); dogList.Add("a_c_rottweiler"); dogList.Add("a_c_husky"); //string modelName = "a_c_rottweiler"; Random rnd = new Random(); Ped spawned = GTA.World.CreatePed(dogList[rnd.Next(0, dogList.Count)], spawnLocation); spawnedModels.Add(spawned); int playerGroup = GTA.Native.Function.Call <int>(GTA.Native.Hash.GET_PED_GROUP_INDEX, player.Handle); GTA.Native.Function.Call(GTA.Native.Hash.SET_PED_AS_GROUP_MEMBER, spawned.Handle, playerGroup); spawned.Task.ClearAllImmediately(); GTA.Native.Function.Call(GTA.Native.Hash.TASK_COMBAT_HATED_TARGETS_IN_AREA, spawned, 50000, 0); GTA.Native.Function.Call(GTA.Native.Hash.SET_PED_KEEP_TASK, spawned, true); } //When the J key is pressed if (e.KeyCode == Keys.J) { spawnedModels[spawnedModels.Count - 1].Kill(); spawnedModels.RemoveAt(spawnedModels.Count - 1); } }
public GTAVector(Vector3 v) { X = v.X; Y = v.Y; Z = v.Z; }
private void UpdateVehicleMountedWeapon() { if (WeaponDataProvider.DoesVehicleSeatHaveGunPosition((VehicleHash)VehicleHash, VehicleSeat)) { var delay = 30; //if ((VehicleHash) VehicleHash == GTA.Native.VehicleHash.Rhino) delay = 300; if (Game.GameTime - _lastVehicleAimUpdate > delay) { Function.Call(Hash.TASK_VEHICLE_AIM_AT_COORD, Character, AimCoords.X, AimCoords.Y, AimCoords.Z); _lastVehicleAimUpdate = Game.GameTime; } if (IsShooting) { if (((VehicleHash)VehicleHash == GTA.VehicleHash.Rhino && DateTime.Now.Subtract(_lastRocketshot).TotalMilliseconds > 1000) || ((VehicleHash)VehicleHash != GTA.VehicleHash.Rhino)) { _lastRocketshot = DateTime.Now; var baseTurretPos = MainVehicle.GetOffsetInWorldCoords( WeaponDataProvider.GetVehicleWeaponMuzzle((VehicleHash)VehicleHash, false)); var doesBaseTurretDiffer = WeaponDataProvider.DoesVehiclesMuzzleDifferFromVehicleGunPos( (VehicleHash)VehicleHash); var barrellLength = WeaponDataProvider.GetVehicleTurretLength((VehicleHash)VehicleHash); var speed = 0xbf800000; var hash = WeaponHash.CombatPDW; if ((VehicleHash)VehicleHash == GTA.VehicleHash.Rhino) { hash = (WeaponHash)1945616459; } Vector3 tPos = baseTurretPos; if ( WeaponDataProvider.DoesVehicleHaveParallelWeapon((VehicleHash)VehicleHash, false) && VehicleSeat == 1) { var muzzle = WeaponDataProvider.GetVehicleWeaponMuzzle((VehicleHash)VehicleHash, false); tPos = MainVehicle.GetOffsetInWorldCoords(new Vector3(muzzle.X * -1f, muzzle.Y, muzzle.Z)); } if (doesBaseTurretDiffer) { var kekDir = (AimCoords - tPos); kekDir.Normalize(); var rot = Main.DirectionToRotation(kekDir); var newDir = Main.RotationToDirection(new Vector3(0, 0, rot.Z)); newDir.Normalize(); tPos = tPos + newDir * WeaponDataProvider.GetVehicleWeaponMuzzle((VehicleHash)VehicleHash, true) .Length(); } var turretDir = (AimCoords - tPos); turretDir.Normalize(); var start = tPos + turretDir * barrellLength; var end = start + turretDir * 100f; _lastStart = start; _lastEnd = end; var damage = WeaponDataProvider.GetWeaponDamage(WeaponHash.Minigun); if ((VehicleHash)VehicleHash == GTA.VehicleHash.Rhino) { damage = 210; } if (IsFriend()) { damage = 0; } Function.Call(Hash.SHOOT_SINGLE_BULLET_BETWEEN_COORDS, start.X, start.Y, start.Z, end.X, end.Y, end.Z, damage, true, (int)hash, Character, true, false, speed); } } } else if (!WeaponDataProvider.DoesVehicleSeatHaveMountedGuns((VehicleHash)VehicleHash) || VehicleSeat != -1) { if (Character.Weapons.Current.Hash != (WeaponHash)CurrentWeapon) { //Function.Call(Hash.GIVE_WEAPON_TO_PED, Character, CurrentWeapon, 999, true, true); //Function.Call(Hash.SET_CURRENT_PED_WEAPON, Character, CurrentWeapon, true); //Character.Weapons.Give((WeaponHash)CurrentWeapon, -1, true, true); //Character.Weapons.Select((WeaponHash) CurrentWeapon); Character.Weapons.RemoveAll(); Character.Weapons.Give((WeaponHash)CurrentWeapon, -1, true, true); } if (IsShooting || IsAiming) { if (!_lastDrivebyShooting) { Function.Call(Hash.SET_PED_CURRENT_WEAPON_VISIBLE, Character, false, false, false, false); Function.Call(Hash.TASK_DRIVE_BY, Character, 0, 0, AimCoords.X, AimCoords.Y, AimCoords.Z, 0, 0, 0, unchecked ((int)FiringPattern.SingleShot)); } else { Function.Call(Hash.SET_PED_CURRENT_WEAPON_VISIBLE, Character, true, false, false, false); Function.Call(Hash.SET_DRIVEBY_TASK_TARGET, Character, 0, 0, AimCoords.X, AimCoords.Y, AimCoords.Z); } var rightSide = (VehicleSeat + 2) % 2 == 0; if (WeaponDataProvider.NeedsFakeBullets(CurrentWeapon)) { const string rightDict = "veh@driveby@first_person@passenger_right_handed@throw"; const string leftDict = "veh@driveby@first_person@driver@throw"; string drivebyDict = rightSide ? rightDict : leftDict; Function.Call(Hash.TASK_PLAY_ANIM_ADVANCED, Character, Util.Util.LoadDict(drivebyDict), "sweep_low", Character.Position.X, Character.Position.Y, Character.Position.Z, Character.Rotation.X, Character.Rotation.Y, Character.Rotation.Z, -8f, -8f, -1, 0, rightSide ? 0.6f : 0.3f, 0, 0); } if (IsShooting) { Function.Call(Hash.SET_PED_INFINITE_AMMO_CLIP, Character, true); Function.Call(Hash.SET_PED_AMMO, Character, CurrentWeapon, 10); if (AimPlayer != null && AimPlayer.Position != null) { AimCoords = AimPlayer.Position; AimPlayer = null; } if (!WeaponDataProvider.NeedsFakeBullets(CurrentWeapon)) { Function.Call(Hash.SET_PED_SHOOTS_AT_COORD, Character, AimCoords.X, AimCoords.Y, AimCoords.Z, true); } else if (DateTime.Now.Subtract(_lastRocketshot).TotalMilliseconds > 500) { _lastRocketshot = DateTime.Now; var damage = WeaponDataProvider.GetWeaponDamage((WeaponHash)CurrentWeapon); var speed = 0xbf800000; var weaponH = (WeaponHash)CurrentWeapon; if (IsFriend()) { damage = 0; } var start = Character.GetBoneCoord(rightSide ? Bone.SKEL_R_Hand : Bone.SKEL_L_Hand); var end = AimCoords; Function.Call(Hash.SHOOT_SINGLE_BULLET_BETWEEN_COORDS, start.X, start.Y, start.Z, end.X, end.Y, end.Z, damage, true, (int)weaponH, Character, false, true, speed); } } _lastVehicleAimUpdate = Game.GameTime; _lastDrivebyShooting = IsShooting || IsAiming; Ped PlayerChar = Game.Player.Character; if (Function.Call <bool>(Hash.HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY, PlayerChar, Character, true)) { int boneHit = -1; var boneHitArg = new OutputArgument(); if (Function.Call <bool>(Hash.GET_PED_LAST_DAMAGE_BONE, PlayerChar, boneHitArg)) { boneHit = boneHitArg.GetResult <int>(); } LocalHandle them = new LocalHandle(Character.Handle, HandleType.GameHandle); JavascriptHook.InvokeCustomEvent(api => api.invokeonLocalPlayerDamaged(them, CurrentWeapon, boneHit /*, playerHealth, playerArmor*/)); } Function.Call(Hash.CLEAR_ENTITY_LAST_DAMAGE_ENTITY, Character); Function.Call(Hash.CLEAR_ENTITY_LAST_DAMAGE_ENTITY, PlayerChar); } if (!IsShooting && !IsAiming && _lastDrivebyShooting && Game.GameTime - _lastVehicleAimUpdate > 200) { Tasks task = Character.Task; task.ClearAll(); task.ClearSecondary(); Function.Call(Hash.CLEAR_DRIVEBY_TASK_UNDERNEATH_DRIVING_TASK, Character); //Function.Call(Hash.TASK_DRIVE_BY, Character, 0, 0, 0, 0, 0, 0, 0, 0, 0); //Function.Call(Hash.SET_DRIVEBY_TASK_TARGET, Character, 0, 0, 0, 0, 0); task.ClearLookAt(); //GTA.UI.Screen.ShowNotification("Done shooting"); //GTA.UI.Screen.ShowSubtitle("Done Shooting1", 300); _lastDrivebyShooting = false; } } }
//Use this for cathing the KeyUp Event void OnKeyUp(object sender, KeyEventArgs e) { //Set SpawnPos for Team A if (e.KeyCode == Keys.H) { //A Reference to the Player Ped player = Game.Player.Character; //Use this for one meter in front of the player //spawnLoc = player.Position + (player.ForwardVector * 1); //Define the playerpos as the spawnpos for the team spawnLocA = player.Position; //NO WANTED LEVEL, since you're on the COPS team GTA.Native.Function.Call(GTA.Native.Hash.SET_PLAYER_WANTED_LEVEL, player, 0, false); //notice that location is defined IsSpawnLocADefined = true; //A Blip for the spawn pos Blip blip = World.CreateBlip(spawnLocA, 1.5f); blip.Color = BlipColor.Red; blip.Scale = 5f; UI.Notify("Point A (Enemies) is ready"); } //Set SpawnPos for Team B if (e.KeyCode == Keys.J) { //for code comments see a few lines up Ped player = Game.Player.Character; spawnLocB = player.Position; IsSpawnLocBDefined = true; Blip blip = World.CreateBlip(spawnLocB, 1.5f); blip.Color = BlipColor.Yellow; blip.Scale = 5f; //feedback UI.Notify("Point B (Allies) is ready"); } //Activate & deactivate ped spawning on both teams /* simple script = 2 keys * if (e.KeyCode == Keys.K) { * activar = true; * UI.Notify("Peds will spawn"); * } * if (e.KeyCode == Keys.L) { * activar = false; * UI.Notify("Peds won't spawn"); * } */ if (e.KeyCode == Keys.K) //change the K key to other key you want { activar = !activar; //mod activated=true or false on each K key pulse (toggling) //debugging messages when it's activated or not if (activar) { UI.Notify("Peds will spawn"); //debugging messages when it's activated or not } else { UI.Notify("Peds won't spawn"); } } }
public static GTABoundingBox2 ComputeBoundingBox(Entity e, Vector3 offset, float scale = 0.5f) { var m = e.Model; var rv = new GTABoundingBox2 { Min = new GTAVector2(float.PositiveInfinity, float.PositiveInfinity), Max = new GTAVector2(float.NegativeInfinity, float.NegativeInfinity) }; Vector3 gmin; Vector3 gmax; m.GetDimensions(out gmin, out gmax); var bbox = new SharpDX.BoundingBox((SharpDX.Vector3) new GTAVector(gmin), (SharpDX.Vector3) new GTAVector(gmax)); //Console.WriteLine(bbox.GetCorners()[0]); /* * for (int i = 0; i < bbox.GetCorners().Length; ++i) { * for (int j = 0; j < bbox.GetCorners().Length; ++j) { * if (j == i) continue; * var c1 = bbox.GetCorners()[i]; * var c2 = bbox.GetCorners()[j]; * HashFunctions.Draw3DLine(e.GetOffsetInWorldCoords(new Vector3(c1.X, c1.Y, c1.Z)), e.GetOffsetInWorldCoords(new Vector3(c2.X, c2.Y, c2.Z)), 0,0); * } * } */ /* * for (int i = 0; i < bbox.GetCorners().Length; ++i) * { * var corner = bbox.GetCorners()[i]; * var cornerinworld = e.GetOffsetInWorldCoords(new Vector3(corner.X, corner.Y, corner.Z)); * * * }*/ //UI.Notify(e.HeightAboveGround.ToString()); var sp = HashFunctions.Convert3dTo2d(e.GetOffsetInWorldCoords(e.Position)); foreach (var corner in bbox.GetCorners()) { var c = new Vector3(corner.X, corner.Y, corner.Z); c = e.GetOffsetInWorldCoords(c); var s = HashFunctions.Convert3dTo2d(c); if (s.X == -1f || s.Y == -1f) { rv.Min.X = float.PositiveInfinity; rv.Max.X = float.NegativeInfinity; rv.Min.Y = float.PositiveInfinity; rv.Max.Y = float.NegativeInfinity; return(rv); } /* * if(s.X == -1) { * if (sp.X < 0.5) s.X = 0f; * if (sp.X >= 0.5) s.X = 1f; * } * if(s.Y == -1) { * if (sp.Y < 0.5) s.Y = 0f; * if (sp.Y >= 0.5) s.Y = 1f; * } */ rv.Min.X = Math.Min(rv.Min.X, s.X); rv.Min.Y = Math.Min(rv.Min.Y, s.Y); rv.Max.X = Math.Max(rv.Max.X, s.X); rv.Max.Y = Math.Max(rv.Max.Y, s.Y); } // int width = 1280; // int height = 960; // int x = (int)(rv.Min.X * width); // int y = (int)(rv.Min.Y * height); // int x2 = (int)(rv.Max.X * width); // int y2 = (int)(rv.Max.Y * height); // float w = rv.Max.X - rv.Min.X; // float h = rv.Max.Y - rv.Min.Y; // HashFunctions.DrawRect(rv.Min.X + w/2, rv.Min.Y + h/2, rv.Max.X - rv.Min.X, rv.Max.Y - rv.Min.Y, 255, 255, 255, 100); // new UIRectangle(new Point((int)(rv.Min.X * 1920), (int)(rv.Min.Y * 1080)), rv.) return(rv); }
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++; } }
private void onKeyDown(object sender, KeyEventArgs e) { // if (e.KeyCode == Keys.H) { /* ||||||||||||||||| Begin Software 4 Artists ||||||||||||||||| */ Ped player = Game.Player.Character; GTA.Math.Vector3 spawn_location = player.Position + (player.ForwardVector * 5f); //string model_name = "a_m_y_business_02"; string model_name = "dumbcop"; Ped ped1 = GTA.World.CreatePed(model_name, spawn_location); ped1.Weapons.Give(WeaponHash.Bat, 999, true, true); model_name = "dumbcop"; Ped ped2 = GTA.World.CreatePed(model_name, player.Position + (player.ForwardVector * 6f)); ped2.Weapons.Give(WeaponHash.Bat, 999, true, true); // make them fight! ped1.Task.ClearAllImmediately(); ped2.Task.ClearAllImmediately(); ped1.Task.FightAgainst(ped2); ped2.Task.FightAgainst(ped1); /* |||||||||||||||||| End Software 4 Artists ||||||||||||||||| */ // experiment 1 //GTA.UI.Screen.ShowSubtitle("creating a cop"); //Ped player = Game.Player.Character; //GTA.Math.Vector3 spawnLoc = player.Position + (player.ForwardVector * 5f); //string model_name = "s_m_y_cop_01"; //Ped cop1 = GTA.World.CreatePed(model_name, spawnLoc); //cop1.Weapons.Give(WeaponHash.Bat, 999, true, true); //cop1.Task.FightAgainst(player); // experiment 2 //GTA.UI.Screen.ShowSubtitle("creating a cop & neutral ped"); //Ped player = Game.Player.Character; //string model_name = "s_m_y_cop_01"; //Ped cop1 = GTA.World.CreatePed(model_name, player.Position + (player.ForwardVector * 5f)); //cop1.Weapons.Give(WeaponHash.Bat, 999, true, true); //model_name = "a_m_y_business_02"; //Ped civilian1 = GTA.World.CreatePed(model_name, player.Position + (player.ForwardVector * 6f)); //cop1.Task.FightAgainst(civilian1); // experiment 3 //GTA.UI.Screen.ShowSubtitle("creating two cops to fight each other"); //Ped player = Game.Player.Character; //string model_name = "s_m_y_cop_01"; //Ped cop1 = GTA.World.CreatePed(model_name, player.Position + (player.ForwardVector * 5f)); //cop1.Weapons.Give(WeaponHash.Bat, 999, true, true); //model_name = "s_m_y_cop_01"; //Ped cop2 = GTA.World.CreatePed(model_name, player.Position + (player.ForwardVector * 6f)); //// create a new relationship group //RelationshipGroup newGroup1 = World.AddRelationshipGroup("newgroup1"); //cop1.RelationshipGroup = newGroup1; //RelationshipGroup newGroup2 = World.AddRelationshipGroup("newgroup2"); //cop1.RelationshipGroup = newGroup2; //newGroup1.SetRelationshipBetweenGroups(newGroup2, Relationship.Hate); //newGroup2.SetRelationshipBetweenGroups(newGroup1, Relationship.Hate); //GTA.UI.Notification.Show(cop1.RelationshipGroup.ToString() + ", " + cop2.RelationshipGroup.ToString()); //// things i've tried that do not work //cop1.Task.FightAgainst(cop2); //cop1.AlwaysKeepTask = true; //// 46 is the "fight to the death" attribute //Function.Call(Hash.SET_PED_COMBAT_ATTRIBUTES, cop1, 46, true); //Function.Call(Hash.SET_PED_FLEE_ATTRIBUTES, cop1, 0, 0); // experiment 4 -- sanity check //GTA.UI.Screen.ShowSubtitle("sanity check, exact same code w different models"); //Ped player = Game.Player.Character; //string model_name = "s_m_y_cop_01"; //Ped cop1 = GTA.World.CreatePed(model_name, player.Position + (player.ForwardVector * 5f)); //cop1.Weapons.Give(WeaponHash.Bat, 999, true, true); //model_name = "a_m_y_business_02"; //Ped cop2 = GTA.World.CreatePed(model_name, player.Position + (player.ForwardVector * 6f)); //// create a new relationship group //RelationshipGroup newGroup1 = World.AddRelationshipGroup("newgroup1"); //cop1.RelationshipGroup = newGroup1; //RelationshipGroup newGroup2 = World.AddRelationshipGroup("newgroup2"); //cop1.RelationshipGroup = newGroup2; //newGroup1.SetRelationshipBetweenGroups(newGroup2, Relationship.Hate); //newGroup2.SetRelationshipBetweenGroups(newGroup1, Relationship.Hate); //GTA.UI.Notification.Show(cop1.RelationshipGroup.ToString() + ", " + cop2.RelationshipGroup.ToString()); //// things i've tried that do not work //cop1.Task.FightAgainst(cop2); //cop1.AlwaysKeepTask = true; //// 46 is the "fight to the death" attribute //Function.Call(Hash.SET_PED_COMBAT_ATTRIBUTES, cop1, 46, true); //Function.Call(Hash.SET_PED_FLEE_ATTRIBUTES, cop1, 0, 0); //// experiment 5 -- adding cop to player group //GTA.UI.Screen.ShowSubtitle("experiment 5: "); //Ped player = Game.Player.Character; //RelationshipGroup playerGroup = player.RelationshipGroup; //string model_name = "s_m_y_cop_01"; //Ped cop1 = GTA.World.CreatePed(model_name, player.Position + (player.ForwardVector * 5f)); //cop1.Weapons.Give(WeaponHash.Bat, 999, true, true); //cop1.RelationshipGroup = playerGroup; // experiment 6 ... //Ped player = Game.Player.Character; //GTA.Math.Vector3 spawnLoc = player.Position + (player.ForwardVector * 5f); //string model_name = "a_m_y_business_02"; ////string model_name = "s_m_y_cop_01"; //Ped ped1 = GTA.World.CreatePed(model_name, spawnLoc); //ped1.Weapons.Give(WeaponHash.Bat, 999, true, true); //model_name = "s_m_y_cop_01"; //Ped ped2 = GTA.World.CreatePed(model_name, player.Position + (player.ForwardVector * 5f)); //ped2.Weapons.Give(WeaponHash.Bat, 999, true, true); //ped1.Task.ClearAllImmediately(); //ped2.Task.ClearAllImmediately(); //ped1.Task.FightAgainst(ped2); //ped2.Task.FightAgainst(ped1); } if (e.KeyCode == Keys.J) { Game.Player.WantedLevel = 0; Function.Call(Hash.SET_POLICE_IGNORE_PLAYER, Game.Player, true); Ped player = Game.Player.Character; GTA.Math.Vector3 playerpos = player.Position; Ped[] allpeds = GTA.World.GetNearbyPeds(playerpos, 50); foreach (Ped p in allpeds) { if (p != player) { p.Task.FightAgainstHatedTargets(100); //World.SetRelationshipBetweenGroups((Relationship)5, Game.get_Player().get_Character().get_RelationshipGroup(), num); //World.SetRelationshipBetweenGroups((Relationship)5, num, Game.get_Player().get_Character().get_RelationshipGroup()); } } foreach (Ped p in allpeds) { foreach (Ped q in allpeds) { if (p.Handle != q.Handle) { p.Task.FightAgainst(q); } } } } }
internal void OnTick(object sender, EventArgs e) { if (!Main.IsOnServer()) { return; } var player = Game.Player.Character; if (player.IsInVehicle()) { var veh = player.CurrentVehicle; var horn = Game.Player.IsPressingHorn; var siren = veh.SirenActive; var vehdead = veh.IsDead; var obj = new VehicleData(); obj.Position = veh.Position.ToLVector(); obj.VehicleHandle = Main.NetEntityHandler.EntityToNet(player.CurrentVehicle.Handle); obj.Quaternion = veh.Rotation.ToLVector(); obj.PedModelHash = player.Model.Hash; obj.PlayerHealth = (byte)Util.Util.Clamp(0, player.Health, 255); obj.VehicleHealth = veh.EngineHealth; obj.Velocity = veh.Velocity.ToLVector(); obj.PedArmor = (byte)player.Armor; obj.RPM = veh.CurrentRPM; obj.VehicleSeat = (short)Util.Util.GetPedSeat(player); obj.Flag = 0; obj.Steering = veh.SteeringAngle; if (horn) { obj.Flag |= (byte)VehicleDataFlags.PressingHorn; } if (siren) { obj.Flag |= (byte)VehicleDataFlags.SirenActive; } if (vehdead) { obj.Flag |= (byte)VehicleDataFlags.VehicleDead; } if (player.IsDead) { obj.Flag |= (short)VehicleDataFlags.PlayerDead; } if (Util.Util.GetResponsiblePed(veh).Handle == player.Handle) { obj.Flag |= (byte)VehicleDataFlags.Driver; } if (veh.IsInBurnout) { obj.Flag |= (byte)VehicleDataFlags.BurnOut; } if (ForceAimData) { obj.Flag |= (byte)VehicleDataFlags.HasAimData; } if (player.IsSubtaskActive(167) || player.IsSubtaskActive(168)) { obj.Flag |= (short)VehicleDataFlags.ExitingVehicle; } if (!WeaponDataProvider.DoesVehicleSeatHaveGunPosition((VehicleHash)veh.Model.Hash, Util.Util.GetPedSeat(Game.Player.Character)) && WeaponDataProvider.DoesVehicleSeatHaveMountedGuns((VehicleHash)veh.Model.Hash) && Util.Util.GetPedSeat(Game.Player.Character) == -1) { obj.Flag |= (byte)VehicleDataFlags.HasAimData; obj.AimCoords = new GTANetworkShared.Vector3(0, 0, 0); obj.WeaponHash = Main.GetCurrentVehicleWeaponHash(Game.Player.Character); if (Game.IsEnabledControlPressed(0, Control.VehicleFlyAttack)) { obj.Flag |= (byte)VehicleDataFlags.Shooting; } } else if (WeaponDataProvider.DoesVehicleSeatHaveGunPosition((VehicleHash)veh.Model.Hash, Util.Util.GetPedSeat(Game.Player.Character))) { obj.Flag |= (byte)VehicleDataFlags.HasAimData; obj.WeaponHash = 0; obj.AimCoords = Main.RaycastEverything(new Vector2(0, 0)).ToLVector(); if (Game.IsEnabledControlPressed(0, Control.VehicleAttack)) { obj.Flag |= (byte)VehicleDataFlags.Shooting; } } else { if ((player.IsSubtaskActive(200) || player.IsSubtaskActive(190)) && Game.IsEnabledControlPressed(0, Control.Attack) && Game.Player.Character.Weapons.Current?.AmmoInClip != 0) { obj.Flag |= (byte)VehicleDataFlags.Shooting; obj.Flag |= (byte)VehicleDataFlags.HasAimData; } if (((player.IsSubtaskActive(200) || player.IsSubtaskActive(190)) && Game.Player.Character.Weapons.Current?.AmmoInClip != 0) || (Game.Player.Character.Weapons.Current?.Hash == WeaponHash.Unarmed && player.IsSubtaskActive(200))) { obj.Flag |= (byte)VehicleDataFlags.Aiming; obj.Flag |= (byte)VehicleDataFlags.HasAimData; } var outputArg = new OutputArgument(); Function.Call(Hash.GET_CURRENT_PED_WEAPON, Game.Player.Character, outputArg, true); obj.WeaponHash = outputArg.GetResult <int>(); lock (Lock) { if (LastSyncPacket != null && LastSyncPacket is VehicleData && WeaponDataProvider.NeedsFakeBullets(obj.WeaponHash.Value) && (((VehicleData)LastSyncPacket).Flag & (byte)VehicleDataFlags.Shooting) != 0) { obj.Flag |= (byte)VehicleDataFlags.Shooting; obj.Flag |= (byte)VehicleDataFlags.HasAimData; } } obj.AimCoords = Main.RaycastEverything(new Vector2(0, 0)).ToLVector(); } Vehicle trailer; if ((VehicleHash)veh.Model.Hash == VehicleHash.TowTruck || (VehicleHash)veh.Model.Hash == VehicleHash.TowTruck2) { trailer = veh.TowedVehicle; } else if ((VehicleHash)veh.Model.Hash == VehicleHash.Cargobob || (VehicleHash)veh.Model.Hash == VehicleHash.Cargobob2 || (VehicleHash)veh.Model.Hash == VehicleHash.Cargobob3 || (VehicleHash)veh.Model.Hash == VehicleHash.Cargobob4) { trailer = SyncEventWatcher.GetVehicleCargobobVehicle(veh); } else { trailer = SyncEventWatcher.GetVehicleTrailerVehicle(veh); } if (trailer != null && trailer.Exists()) { obj.Trailer = trailer.Position.ToLVector(); } if (Util.Util.GetResponsiblePed(veh) == player) { obj.DamageModel = veh.GetVehicleDamageModel(); } lock (Lock) { LastSyncPacket = obj; } } else { bool aiming = player.IsSubtaskActive(ESubtask.AIMED_SHOOTING_ON_FOOT) || player.IsSubtaskActive(ESubtask.AIMING_THROWABLE); // Game.IsControlPressed(0, 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)); } var obj = new PedData(); obj.AimCoords = aimCoord.ToLVector(); obj.Position = player.Position.ToLVector(); obj.Quaternion = player.Rotation.ToLVector(); obj.PedArmor = (byte)player.Armor; obj.PedModelHash = player.Model.Hash; obj.WeaponHash = (int)player.Weapons.Current.Hash; obj.WeaponAmmo = player.Weapons.Current.Ammo; obj.PlayerHealth = (byte)Util.Util.Clamp(0, player.Health, 255); obj.Velocity = player.Velocity.ToLVector(); obj.Flag = 0; if (player.IsRagdoll) { obj.Flag |= (int)PedDataFlags.Ragdoll; } if (Function.Call <int>(Hash.GET_PED_PARACHUTE_STATE, Game.Player.Character.Handle) == 0 && Game.Player.Character.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(0, 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, Game.Player.Character.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, Game.Player.Character)); obj.SeatTryingToEnter = (sbyte) Function.Call <int>(Hash.GET_SEAT_PED_IS_TRYING_TO_ENTER, Game.Player.Character); } obj.Speed = Main.GetPedWalkingSpeed(player); lock (Lock) { LastSyncPacket = obj; } bool sendShootingPacket; if (!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(0, 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(0, Control.Attack)) || ((player.IsInMeleeCombat || player.IsSubtaskActive(ESubtask.MELEE_COMBAT)) && Game.IsEnabledControlPressed(0, Control.Attack)); } if (!sendShootingPacket && _lastShooting && !_lastBullet) { _lastBullet = true; return; } } _lastBullet = false; if (Game.Player.Character.IsRagdoll) { sendShootingPacket = false; } if (!player.IsSubtaskActive(ESubtask.MELEE_COMBAT) && player.Weapons.Current.Ammo == 0) { sendShootingPacket = false; } if (sendShootingPacket && !_lastShooting) { _lastShooting = true; _lastShot = DateTime.Now; var msg = Main.Client.CreateMessage(); byte[] bin = null; SyncPed syncPlayer = null; if (Main.OnShootingLagCompensation) { syncPlayer = Main.GetPedDamagedByPlayer(); } 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 && _lastShooting && DateTime.Now.Subtract(_lastShot).TotalMilliseconds > 50) { _lastShooting = false; var msg = Main.Client.CreateMessage(); byte[] bin = null; SyncPed syncPlayer = null; if (Main.OnShootingLagCompensation) { syncPlayer = Main.GetPedDamagedByPlayer(); } if (syncPlayer != null) { bin = PacketOptimization.WriteBulletSync(0, false, syncPlayer.RemoteHandle); msg.Write((byte)PacketType.BulletPlayerSync); } else { 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 static GTABoundingBox2 ComputeBoundingBox(Entity e, Vector3 offset, float scale = 0.5f) { var m = e.Model; var rv = new GTABoundingBox2 { Min = new GTAVector2(float.PositiveInfinity, float.PositiveInfinity), Max = new GTAVector2(float.NegativeInfinity, float.NegativeInfinity) }; Vector3 gmin; Vector3 gmax; m.GetDimensions(out gmin, out gmax); var bbox = new SharpDX.BoundingBox((SharpDX.Vector3) new GTAVector(gmin), (SharpDX.Vector3) new GTAVector(gmax)); //Console.WriteLine(bbox.GetCorners()[0]); /* * for (int i = 0; i < bbox.GetCorners().Length; ++i) { * for (int j = 0; j < bbox.GetCorners().Length; ++j) { * if (j == i) continue; * var c1 = bbox.GetCorners()[i]; * var c2 = bbox.GetCorners()[j]; * HashFunctions.Draw3DLine(e.GetOffsetInWorldCoords(new Vector3(c1.X, c1.Y, c1.Z)), e.GetOffsetInWorldCoords(new Vector3(c2.X, c2.Y, c2.Z)), 0,0); * } * } */ /* * for (int i = 0; i < bbox.GetCorners().Length; ++i) * { * var corner = bbox.GetCorners()[i]; * var cornerinworld = e.GetOffsetInWorldCoords(new Vector3(corner.X, corner.Y, corner.Z)); * * * }*/ //UI.Notify(e.HeightAboveGround.ToString()); var sp = HashFunctions.Convert3dTo2d(e.GetOffsetInWorldCoords(e.Position)); foreach (var corner in bbox.GetCorners()) { var c = new Vector3(corner.X, corner.Y, corner.Z); c = e.GetOffsetInWorldCoords(c); var s = HashFunctions.Convert3dTo2d(c); if (s.X == -1f || s.Y == -1f) { rv.Min.X = float.PositiveInfinity; rv.Max.X = float.NegativeInfinity; rv.Min.Y = float.PositiveInfinity; rv.Max.Y = float.NegativeInfinity; return(rv); } /* * if(s.X == -1) { * if (sp.X < 0.5) s.X = 0f; * if (sp.X >= 0.5) s.X = 1f; * } * if(s.Y == -1) { * if (sp.Y < 0.5) s.Y = 0f; * if (sp.Y >= 0.5) s.Y = 1f; * } */ rv.Min.X = Math.Min(rv.Min.X, s.X); rv.Min.Y = Math.Min(rv.Min.Y, s.Y); rv.Max.X = Math.Max(rv.Max.X, s.X); rv.Max.Y = Math.Max(rv.Max.Y, s.Y); } float w = rv.Max.X - rv.Min.X; float h = rv.Max.Y - rv.Min.Y; // just for debug purposes, show visible and not visible entities in other color // if (CheckVisible(e)) // { // HashFunctions.DrawRect(rv.Min.X + w / 2, rv.Min.Y + h / 2, rv.Max.X - rv.Min.X, rv.Max.Y - rv.Min.Y, // Color.White, 100); // } // else // { // HashFunctions.DrawRect(rv.Min.X + w / 2, rv.Min.Y + h / 2, rv.Max.X - rv.Min.X, rv.Max.Y - rv.Min.Y, // Color.Red, 100); // } // HashFunctions.DrawRect(rv.Min.X + w/2, rv.Min.Y + h/2, rv.Max.X - rv.Min.X, rv.Max.Y - rv.Min.Y, 255, 255, 255, 100); return(rv); }