void IMyDestroyableObject.DoDamage(float damage, MyDamageType damageType, bool sync, MyHitInfo?hitInfo) { if (MarkedToExplode || (!MySession.Static.DestructibleBlocks)) { return; } //if (!IsFunctional) // return false; if (sync) { if (Sync.IsServer) { MySyncHelper.DoDamageSynced(this, damage, damageType); } } else { m_damageType = damageType; if (damage > 0) { OnDestroy(); } } return; }
public void DoDamage(float damage, MyDamageType damageType, bool sync) { if (sync) { if (Sync.IsServer) { MySyncHelper.DoDamageSynced(this, damage, damageType); } } else { Explode(); } }
void IMyDestroyableObject.DoDamage(float damage, MyStringHash damageType, bool sync, MyHitInfo?hitInfo, long attackerId) { if (MarkedToExplode || (!MySession.Static.DestructibleBlocks)) { return; } //if (!IsFunctional) // return false; if (sync) { if (Sync.IsServer) { MySyncHelper.DoDamageSynced(this, damage, damageType, attackerId); } } else { MyDamageInformation damageInfo = new MyDamageInformation(false, damage, damageType, attackerId); if (UseDamageSystem) { MyDamageSystem.Static.RaiseBeforeDamageApplied(this, ref damageInfo); } m_damageType = damageType; if (damageInfo.Amount > 0) { if (UseDamageSystem) { MyDamageSystem.Static.RaiseAfterDamageApplied(this, damageInfo); } OnDestroy(); if (UseDamageSystem) { MyDamageSystem.Static.RaiseDestroyed(this, damageInfo); } } } return; }
public void DoDamage(float damage, MyStringHash damageType, bool sync, long attackerId) { if (sync) { if (Sync.IsServer) { MySyncHelper.DoDamageSynced(this, damage, damageType, attackerId); } } else { if (UseDamageSystem) { MyDamageSystem.Static.RaiseDestroyed(this, new MyDamageInformation(false, damage, damageType, attackerId)); } Explode(); } }
public void DoDamage(float damage, MyDamageType damageType, bool sync, MyHitInfo?hitInfo) { if (sync) { if (Sync.IsServer) { MySyncHelper.DoDamageSynced(Entity, damage, damageType); } } else { m_integrity -= damage; if (m_integrity <= 0) { m_closeAfterSimulation = true; return; } } return; }
public void DoDamage(float damage, MyStringHash damageType, bool sync, MyHitInfo?hitInfo, long attackerId) { if (sync) { if (Sync.IsServer) { MySyncHelper.DoDamageSynced(Entity, damage, damageType, attackerId); } } else { MyDamageInformation info = new MyDamageInformation(false, damage, damageType, attackerId); if (Entity.UseDamageSystem) { MyDamageSystem.Static.RaiseBeforeDamageApplied(Entity, ref info); } m_integrity -= info.Amount; if (Entity.UseDamageSystem) { MyDamageSystem.Static.RaiseAfterDamageApplied(Entity, info); } if (m_integrity <= 0 && Sync.IsServer) { m_closeAfterSimulation = Sync.IsServer; if (Entity.UseDamageSystem) { MyDamageSystem.Static.RaiseDestroyed(Entity, info); } return; } } return; }
public void DoDamage(float damage, MyStringHash damageType, bool sync, long attackerId) { if (MarkedForClose) { return; } if (sync) { if (!Sync.IsServer) { return; } else { MySyncHelper.DoDamageSynced(this, damage, damageType, attackerId); return; } } MyDamageInformation damageinfo = new MyDamageInformation(false, damage, damageType, attackerId); if (UseDamageSystem) { MyDamageSystem.Static.RaiseBeforeDamageApplied(this, ref damageinfo); } var typeId = Item.Content.TypeId; if (typeId == typeof(MyObjectBuilder_Ore) || typeId == typeof(MyObjectBuilder_Ingot)) { if (Item.Amount < 1) { //TODO: SYNC particle MyParticleEffect effect; if (MyParticlesManager.TryCreateParticleEffect((int)MyParticleEffectsIDEnum.Smoke_Construction, out effect)) { effect.WorldMatrix = WorldMatrix; effect.UserScale = 0.4f; } MyFloatingObjects.RemoveFloatingObject(this); } else { if (Sync.IsServer) { MyFloatingObjects.RemoveFloatingObject(this, (MyFixedPoint)damageinfo.Amount); } } } else { m_health -= (10 + 90 * DamageMultiplier) * damageinfo.Amount; if (UseDamageSystem) { MyDamageSystem.Static.RaiseAfterDamageApplied(this, damageinfo); } if (m_health < 0) { //TODO: SYNC particle MyParticleEffect effect; if (MyParticlesManager.TryCreateParticleEffect((int)MyParticleEffectsIDEnum.Smoke_Construction, out effect)) { effect.WorldMatrix = WorldMatrix; effect.UserScale = 0.4f; } if (Sync.IsServer) { MyFloatingObjects.RemoveFloatingObject(this); } //TODO: dont compare to string? if (Item.Content.SubtypeId == m_explosives && Sync.IsServer) { var expSphere = new BoundingSphere(WorldMatrix.Translation, (float)Item.Amount * 0.01f + 0.5f);// MathHelper.Clamp((float)Item.Amount, 0, 300) * 0.5f); MyExplosionInfo info = new MyExplosionInfo() { PlayerDamage = 0, Damage = 800, ExplosionType = MyExplosionTypeEnum.WARHEAD_EXPLOSION_15, ExplosionSphere = expSphere, LifespanMiliseconds = MyExplosionsConstants.EXPLOSION_LIFESPAN, CascadeLevel = 0, HitEntity = this, ParticleScale = 1, OwnerEntity = this, Direction = WorldMatrix.Forward, VoxelExplosionCenter = expSphere.Center, ExplosionFlags = MyExplosionFlags.AFFECT_VOXELS | MyExplosionFlags.APPLY_FORCE_AND_DAMAGE | MyExplosionFlags.CREATE_DEBRIS | MyExplosionFlags.CREATE_DECALS | MyExplosionFlags.CREATE_PARTICLE_EFFECT | MyExplosionFlags.CREATE_SHRAPNELS | MyExplosionFlags.APPLY_DEFORMATION, VoxelCutoutScale = 0.5f, PlaySound = true, ApplyForceAndDamage = true, ObjectsRemoveDelayInMiliseconds = 40 }; MyExplosions.AddExplosion(ref info); } if (MyFakes.ENABLE_SCRAP && Sync.IsServer) { if (Item.Content.SubtypeId == ScrapBuilder.SubtypeId) { return; } var contentDefinitionId = Item.Content.GetId(); if (contentDefinitionId.TypeId == typeof(MyObjectBuilder_Component)) { var definition = MyDefinitionManager.Static.GetComponentDefinition((Item.Content as MyObjectBuilder_Component).GetId()); if (MyRandom.Instance.NextFloat() < definition.DropProbability) { MyFloatingObjects.Spawn(new MyPhysicalInventoryItem(Item.Amount * 0.8f, ScrapBuilder), PositionComp.GetPosition(), WorldMatrix.Forward, WorldMatrix.Up); } } } if (UseDamageSystem) { MyDamageSystem.Static.RaiseDestroyed(this, damageinfo); } } } return; }