yr
This commit is contained in:
@@ -197,71 +197,22 @@ public class Inventar : Component
|
||||
if ( item == null || !Items.Contains( item ) )
|
||||
return;
|
||||
|
||||
// Проверяем, является ли предмет одеждой
|
||||
if ( item.Definition is ClothingItemDefinition clothingDef )
|
||||
{
|
||||
// Для одежды создаем специальный физический объект
|
||||
DropClothingItem( item, position, clothingDef );
|
||||
}
|
||||
else
|
||||
{
|
||||
// Для остальных предметов используем стандартный префаб
|
||||
if ( item.Definition.Prefab != null )
|
||||
{
|
||||
GameObject gO = item.Definition.Prefab.Clone( position );
|
||||
GameObject gO = item.Definition.Prefab.Clone( position );
|
||||
|
||||
if ( gO.Components.TryGet<InventoryItem>( out var inventoryItem ) )
|
||||
{
|
||||
inventoryItem.Count = item.Count;
|
||||
inventoryItem.Definition = item.Definition;
|
||||
// Копируем патроны из оригинального предмета
|
||||
inventoryItem.MagazineAmmo = item.MagazineAmmo;
|
||||
}
|
||||
|
||||
gO.NetworkSpawn();
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.Warning( $"Префаб не найден для предмета: {item.Definition.Name}" );
|
||||
}
|
||||
if ( gO.Components.TryGet<InventoryItem>( out var inventoryItem ) )
|
||||
{
|
||||
inventoryItem.Count = item.Count;
|
||||
inventoryItem.Definition = item.Definition;
|
||||
// Копируем патроны из оригинального предмета
|
||||
inventoryItem.MagazineAmmo = item.MagazineAmmo;
|
||||
}
|
||||
|
||||
gO.NetworkSpawn();
|
||||
|
||||
// Удаляем весь предмет из инвентаря
|
||||
RemoveItem( item, item.Count );
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Выбрасывает предмет одежды как физический объект
|
||||
/// </summary>
|
||||
private void DropClothingItem( InventoryItem item, Vector3 position, ClothingItemDefinition clothingDef )
|
||||
{
|
||||
// Пытаемся найти подходящий префаб для одежды
|
||||
GameObject clothingPrefab = GameObject.GetPrefab( "prefabs/item_parcel.prefab" );
|
||||
GameObject clothingObject = null;
|
||||
|
||||
clothingObject = clothingPrefab.Clone( position );
|
||||
|
||||
// Добавляем компонент InventoryItem
|
||||
if ( clothingObject.Components.TryGet<InventoryItem>( out var inventoryItem ) )
|
||||
{
|
||||
inventoryItem.Count = item.Count;
|
||||
inventoryItem.Definition = item.Definition;
|
||||
}
|
||||
|
||||
// Добавляем компонент PickupItem для подбора
|
||||
if ( clothingObject.Components.TryGet<PickupItem>( out var pickupItem ) )
|
||||
{
|
||||
// Устанавливаем правильную метку для одежды
|
||||
var slotName = GetSlotDisplayName( clothingDef.Slot );
|
||||
pickupItem.Label = $"{clothingDef.Name} ({slotName})";
|
||||
}
|
||||
|
||||
clothingObject.NetworkSpawn();
|
||||
|
||||
Log.Info( $"Выброшена одежда: {clothingDef.Name} ({clothingDef.Slot})" );
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Получает отображаемое название слота
|
||||
/// </summary>
|
||||
@@ -320,19 +271,19 @@ public class Inventar : Component
|
||||
OnChanged?.Invoke();
|
||||
}
|
||||
|
||||
// Публичный метод для уведомления об изменениях извне класса
|
||||
// Публичный метод для уведомления об изменениях извне класса
|
||||
public void NotifyChanged()
|
||||
{
|
||||
OnChanged?.Invoke();
|
||||
}
|
||||
|
||||
// Публичный метод для уведомления о добавлении предмета извне класса
|
||||
// Публичный метод для уведомления о добавлении предмета извне класса
|
||||
public void NotifyItemAdded( InventoryItem item )
|
||||
{
|
||||
OnItemAdded?.Invoke( item );
|
||||
}
|
||||
|
||||
// Методы для получения информации о вместимости
|
||||
// Методы для получения информации о вместимости
|
||||
public int GetUsedSlots()
|
||||
{
|
||||
return Items.Count;
|
||||
@@ -423,19 +374,12 @@ public class Inventar : Component
|
||||
|
||||
int droppedCount = 0;
|
||||
|
||||
// Сначала снимаем все экипированные предметы и добавляем их в список для выбрасывания
|
||||
// Сначала снимаем все экипированные предметы
|
||||
foreach ( var equippedItem in equippedItemsToDrop )
|
||||
{
|
||||
if ( equippedItem != null )
|
||||
{
|
||||
// Снимаем предмет
|
||||
UnEquipItem( equippedItem );
|
||||
|
||||
// Добавляем в список для выбрасывания, если его там еще нет
|
||||
if ( !itemsToDrop.Contains( equippedItem ) )
|
||||
{
|
||||
itemsToDrop.Add( equippedItem );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -445,7 +389,7 @@ public class Inventar : Component
|
||||
if ( item != null && item.Count > 0 )
|
||||
{
|
||||
// Выбираем случайную позицию в радиусе разброса
|
||||
var scatteredPosition = dropPosition + Vector3.Random * scatterRadius + Vector3.Up * 10f;
|
||||
var scatteredPosition = dropPosition + Vector3.Random * scatterRadius + Vector3.Up * 100f;
|
||||
DropItem( item, scatteredPosition );
|
||||
droppedCount++;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user