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}" );
}
}