using System.Threading.Tasks; public sealed partial class Dedugan { [Rpc.Broadcast] public void ReportHit( Vector3 dir, int boneIndex, int damage = 10 ) { Renderer.Set( "hit", true ); Renderer.Set( "hit_bone", boneIndex ); Renderer.Set( "hit_direction", dir ); Renderer.Set( "hit_offset", dir ); Renderer.Set( "hit_strength", 1 ); Health -= damage; if ( Health <= 0 ) { _ = RunReportHitAsync(); } } private async Task RunReportHitAsync() { await GameTask.DelaySeconds( 0.1f ); RagdollController.Enabled = true; // Выбрасываем все предметы при смерти DropAllItemsOnDeath(); } /// /// Выбрасывает все предметы из инвентаря при смерти игрока /// private void DropAllItemsOnDeath() { if ( Inventory == null || !Network.IsOwner ) return; Log.Info( $"Игрок {Name} умер. Выбрасываем все предметы..." ); // Используем метод из инвентаря для выбрасывания всех предметов int droppedCount = Inventory.DropAllItems( WorldPosition, 50f ); Log.Info( $"Выброшено {droppedCount} предметов при смерти игрока {Name}" ); } /// /// Публичный метод для принудительного выбрасывания всех предметов /// Можно вызывать из других мест (например, из команд или UI) /// /// Позиция для выбрасывания предметов (если null, используется позиция игрока) /// Радиус разброса предметов public void ForceDropAllItems( Vector3? dropPosition = null, float scatterRadius = 50f ) { if ( Inventory == null || !Network.IsOwner ) return; Log.Info( $"Принудительно выбрасываем все предметы игрока {Name}..." ); // Используем метод из инвентаря для выбрасывания всех предметов var finalDropPosition = dropPosition ?? WorldPosition; int droppedCount = Inventory.DropAllItems( finalDropPosition, scatterRadius ); Log.Info( $"Принудительно выброшено {droppedCount} предметов игрока {Name}" ); } }