64 lines
2.4 KiB
C#
64 lines
2.4 KiB
C#
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();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Выбрасывает все предметы из инвентаря при смерти игрока
|
|
/// </summary>
|
|
private void DropAllItemsOnDeath()
|
|
{
|
|
if ( Inventory == null || !Network.IsOwner ) return;
|
|
|
|
Log.Info( $"Игрок {Name} умер. Выбрасываем все предметы..." );
|
|
|
|
// Используем метод из инвентаря для выбрасывания всех предметов
|
|
int droppedCount = Inventory.DropAllItems( WorldPosition, 50f );
|
|
|
|
Log.Info( $"Выброшено {droppedCount} предметов при смерти игрока {Name}" );
|
|
}
|
|
|
|
/// <summary>
|
|
/// Публичный метод для принудительного выбрасывания всех предметов
|
|
/// Можно вызывать из других мест (например, из команд или UI)
|
|
/// </summary>
|
|
/// <param name="dropPosition">Позиция для выбрасывания предметов (если null, используется позиция игрока)</param>
|
|
/// <param name="scatterRadius">Радиус разброса предметов</param>
|
|
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}" );
|
|
}
|
|
}
|