private static async Task <int> SpawnInFrontOfPed(int ped, uint model) { var pedModel = (uint)API.GetEntityModel(ped); var pos = API.GetEntityCoords(ped, true); var heading = API.GetEntityHeading(ped); var headingRad = (Math.PI / 180) * heading; await Common.RequestModel(model); var prop = API.CreateObject((int)model, pos.X - (float)Math.Sin(headingRad), pos.Y + (float)Math.Cos(headingRad), pos.Z - 1.0f, true, false, true); _props.Add(prop); API.SetEntityHeading(prop, -heading); API.SetEntityCollision(prop, true, true); API.ActivatePhysics(prop); API.DecorSetBool(prop, PropDecor, true); return(prop); }
private static async Task <int> SpawnOnEntity(int entity, uint model) { var subentity = API.GetEntityAttachedTo(entity); if (subentity > 0) { return(await SpawnOnEntity(subentity, model)); } var pos = API.GetEntityCoords(entity, API.IsEntityAPed(entity)); var entityModel = (uint)API.GetEntityModel(entity); Vector3 entityMin = Vector3.Zero; Vector3 entityMax = Vector3.Zero; API.GetModelDimensions(entityModel, ref entityMin, ref entityMax); Vector3 propMin = Vector3.Zero; Vector3 propMax = Vector3.Zero; API.GetModelDimensions(model, ref propMin, ref propMax); await Common.RequestModel(model); var prop = API.CreateObject((int)model, pos.X, pos.Y, pos.Z + entityMax.Z - propMin.Z, true, false, true); _props.Add(prop); if (!API.DoesEntityHavePhysics(prop) || propMax.Z - propMin.Z > 3.0f) // large objects glitch too much { API.AttachEntityToEntity(prop, entity, 0, 0.0f, 0.0f, -propMin.Z, 0.0f, 0.0f, 0.0f, false, false, false, false, 0, true); } else { API.AttachEntityToEntityPhysically(prop, entity, 0, 0, 0.0f, 0.0f, entityMax.Z, 0.0f, 0.0f, propMin.Z, 0.0f, 0.0f, 0.0f, 100.0f, true, false, true, true, 2); } API.ActivatePhysics(prop); API.DecorSetBool(prop, PropDecor, true); return(prop); }
public void ActivatePhysics() { API.ActivatePhysics(Handle); }