Skip to content

12 — Довідник API

🇬🇧 English | 🇺🇦 Українська

Повний перелік публічного API. Розгорнуті пояснення з прикладами — у підказках (tooltips) прямо в редакторі: наведіть курсор на будь-яке поле чи вузол.

Майже все перелічене тут викликається і з Blueprint, і з C++. Винятки позначені (лише C++) і їх лише два: GetEntriesView на обох контейнерах, який віддає масив без копії, та інтерфейс IISInventoryInterface. Жодної можливості плагіна вони не додають — обидва мають блюпринтові відповідники (GetAllEntries і пошук компонента через UISInventoryBlueprintLibrary).


UISInventoryBlueprintLibrary — скорочення

Найкоротший шлях до типових дій. Ці функції самі знаходять потрібний компонент, тож шукати його вручну не треба.

Функція Опис
GetInventoryFor(Actor) знайти інвентар — на акторі, його PlayerState чи пешці
GetEquipmentFor(Actor) те саме для спорядження
HasInventory(Actor) чи є інвентар узагалі
GiveItemTo(Actor, Def, Count) видати; повертає, скільки реально влізло
TakeItemFrom(Actor, Def, Count, bAllowPartial) забрати; типово «все або нічого»
GetItemCountFor(Actor, Def) скільки має
HasItemCount(Actor, Def, Count) чи вистачає
MoveItemBetweenActors(From, To, Slot) перекласти у правильному напрямку
GetItemsWithTag(Actor, Tag) усі предмети з тегом
GetCarriedWeight(Actor) сумарна вага
GetItemDisplayText(Instance) «Меч» або «Стріла x12»
GetUseResultText(Result) текст результату використання

UISInventoryComponent

Налаштування

Поле Опис
MaxSlots кількість слотів; 0 = необмежено. Реплікується
MaxWeight ліміт ваги; 0 = вага не враховується. Реплікується
AllowedItemTags якщо задано — приймаються лише предмети з одним із цих тегів
BlockedItemTags предмети з цими тегами відхиляються (перевіряється першим)
SlotRestrictions правила для діапазонів слотів
StartingItems предмети, що видаються при старті (на сервері)

Дії — викликаються звідусіль

Метод Опис
TryAddItem(Def, Count, OutRemainder) додати копії; OutRemainder — скільки не влізло
TryAddItemInstance(Instance, PreferredSlot) додати наявний об'єкт зі збереженням стану (сервер)
TryRemoveItemFromSlot(Slot, Count) вилучити з конкретного слота
TryRemoveItem(Def, Count, OutRemainder) вилучити за типом, охоплюючи кілька стеків
TryTransferTo(Target, FromSlot, ToSlot, Count) віддати в інший інвентар
TryTransferFrom(Source, FromSlot, ToSlot, Count) забрати з іншого інвентаря
TryCollect(Collectible) підібрати предмет зі світу — викликати на інвентарі гравця, не на пікапі
TryQuickMoveTo(Target, FromSlot) «shift-click»: ціль сама обирає місце
TrySplitStack(Slot, SplitCount) поділити стек
TrySwapSlots(A, B) поміняти місцями або об'єднати
TryMoveToSlot(From, To) те саме, іншими словами
TryUseItem(Slot, Instigator) використати; повертає EISItemUseResult
TryClearInventory() спорожнити
SortInventory(Mode) впорядкувати й ущільнити від слота 0
CompactStacks() об'єднати неповні стеки, не переставляючи решту

Запити — безпечні на клієнті

Метод Опис
GetItemAtSlot(Slot) предмет у слоті або null
GetItemCount(Def) скільки копій усього
HasItem(Def, Count) чи є принаймні стільки
GetAllItems() усі предмети
GetAllEntries() усі зайняті слоти разом з індексами
GetEntriesView() те саме, без копії масиву (лише C++)
FindItemSlot(Def) перший слот із таким типом
FindAllItemSlots(Def) усі слоти з таким типом
FindSlotOfInstance(Instance) де саме лежить цей об'єкт
GetTotalItemCount() сума всіх стеків
GetOccupiedSlotCount() / GetFreeSlotCount() зайнято / вільно
GetCurrentWeight() поточна вага
IsFull() / IsEmpty() стан
IsValidSlot(Slot) / IsSlotOccupied(Slot) перевірки слота
CanAcceptItem(Def) чи приймається такий тип узагалі
CanAcceptItemCount(Def, Desired) скільки реально влізе зараз
CanSlotAcceptItem(Slot, Def) чи прийме конкретний слот
HasContainerAuthority() чи має ця сторона владу (спільний для інвентаря й спорядження)
CanAcceptRequestFrom(Requester) чи дозволено цьому акторові змінювати контейнер

Збереження

ExportState()FISInventorySaveData · ImportState(State) (сервер)

Події

Подія Коли
OnInventoryChanged будь-яка зміна (з типом зміни)
OnItemAdded слот отримав предмет
OnItemRemoved слот спорожнів
OnItemChanged предмет той самий, дані змінилися
OnAddRejected додавання відхилено, з текстом причини

UISEquipmentComponent

Налаштування

Поле Опис
AvailableSlots схема тіла — які слоти взагалі існують
LinkedInventory рюкзак, з якого беруть і куди повертають
bAutoLinkInventoryOnSameActor знайти інвентар на тому ж акторі (типово увімкнено)

Дії

Метод Опис
TryEquipFromInventorySlot(Index) вдягнути те, що в слоті інвентаря
TryEquipItem(Item, Slot, bRemoveFromInventory) вдягнути конкретний предмет
TryUnequipSlot(Slot, bReturnToInventory) зняти
TrySwapSlots(A, B) поміняти місцями (потребує AlternativeSlots у предметів)
TryUnequipAll(bReturnToInventory) зняти все
TryUseEquippedItem(Slot, Instigator) використати вдягнене

Запити

Метод Опис
GetEquippedItem(Slot) предмет у слоті або null
GetEquippedActor(Slot) візуальний актор слота
IsSlotEquipped(Slot) / HasSlot(Slot) стан і наявність слота
GetAllEquippedItems() / GetOccupiedSlots() / GetAllEntries() обхід
GetEntriesView() обхід без копії масиву (лише C++)
CanEquipToSlot(Item, Slot) чи можна вдягнути сюди
GetDesiredSlotForItem(Item) куди предмет проситься
GetTotalStatValue(StatTag) сумарна статистика по всьому вдягненому
GetLinkedInventory() зв'язаний рюкзак; якщо кеш порожній — шукає на акторі
HasContainerAuthority() чи має ця сторона владу (спільний для інвентаря й спорядження)

Збереження та події

ExportState() / ImportState(State)

Подія Коли
OnItemEquipped слот став зайнятим — саме вдягання, а не будь-яка зміна
OnItemUnequipped слот звільнився
OnEquippedItemChanged предмет той самий, його дані змінилися (міцність, заряди)
OnEquipmentActorSpawned візуальний актор слота створено й прикріплено

Три перші події — рівно та сама трійка, що й в інвентаря (OnItemAdded / OnItemRemoved / OnItemChanged). Звук вдягання прив'язуйте до OnItemEquipped: він не спрацює вдруге від того, що меч втратив одиницю міцності.


UISItemDefinition — тип предмета

Поле / метод Опис
DisplayName, Description, Icon, PickupMesh подання
ItemTags класифікація
Fragments здатності
FindFragmentByClass / HasFragment / GetAllFragments доступ до фрагментів
HasAnyTags / HasAllTags перевірка тегів
GetMaxStackSize() розмір стеку (ланцюжком крізь фрагменти)
GetUnitWeight() вага одиниці
IsUsable() чи має сенс «використати»

UISItemInstance — конкретна копія

Поле / метод Опис
Definition, StackCount, StatValues стан
GetStatValue / SetStatValue / ModifyStatValue статистики
HasStat / ClearStatValue наявність і видалення
CanStackWith(Other) чи можна об'єднати
GetMaxStackSize / IsStackFull / GetAvailableStackSpace стек
GetDisplayName / GetDescription подання
GetStackWeight() / IsUsable() похідні
DuplicateInstance(Outer) копія зі збереженням стану
GetOwningContainer() хто тримає — інвентар або спорядження
GetOwningInventory() інвентар, якщо це він; null, коли предмет вдягнений
ConsumeFromContainer(Count) попросити того, хто тримає, витратити копії

Фрагменти — власні помічники

Поля кожного фрагмента описані в 04 — Фрагменти. Крім полів, деякі фрагменти дають функції, які можна викликати напряму:

Фрагмент Функція Опис
UISFragment_Durability GetCurrentDurability(Instance) поточна міцність копії
GetDurabilityPercent(Instance) 0–1, готове для прогрес-бара
IsBroken(Instance) чи впала міцність до нуля
Repair(Instance, Amount) полагодити; від'ємне значення — повністю (сервер)
UISFragment_Consumable GetRemainingCharges(Instance) скільки зарядів лишилося
UISFragment_Equippable AcceptsSlot(Slot) чи згоден предмет жити в цьому слоті

Усі дванадцять хуків, які перевизначає власний фрагмент, — теж публічний API: OnInstanceCreated, OnAddedToInventory, OnRemovedFromInventory, CanBeAddedTo, CanStackWith, CanBeUsed, IsUsable, OnUsed, OnEquipped, OnUnequipped, ModifyMaxStackSize, ModifyUnitWeight.


UISInventoryQueryLibrary — пошук за описом

Коли питання складніше за «скільки в мене цього»: «уся зброя, що зношена», «усе, що можна продати», «перший стек стріл, де більше десяти».

Функція Опис
QueryInventory(Inv, Query) усі предмети, що підходять
QueryInventoryFirst(Inv, Query) перший збіг або null
QueryInventoryCount(Inv, Query) сумарна кількість копій у всіх збігах
QueryInventorySlots(Inv, Query) індекси слотів усіх збігів, за зростанням
MakeTagQuery(Tag) скорочення: усе з одним тегом
MakeDefinitionQuery(Def) скорочення: рівно один тип предмета

Поля FISInventoryQuery (порожній запит підходить усьому, поля комбінуються через І):

Поле Опис
RequiredTags предмет має нести всі ці теги
AnyOfTags предмет має нести хоч один із цих тегів
ExcludedTags предмет із будь-яким із цих тегів виключається
RequiredFragment предмет має мати фрагмент цього класу (підкласи теж)
MinStackCount / MaxStackCount межі розміру стеку
SpecificDefinition рівно цей тип предмета

Інтерфейси — точки інтеграції

Інтерфейс Навіщо
IISCollectibleInterface зробити своїм актором те, що вміє підбирати UISInventoryComponent::TryCollect. AISItemPickup уже його реалізує; свій — лише якщо ваш «підбирний» об'єкт не є його нащадком. Метод один: TryGiveContents(Collector), викликається вже на сервері
IISInventoryInterface сказати, який із кількох інвентарів на акторі головний — GetInventoryComponent, GetEquipmentComponent, GetAllInventoryComponents. Потрібен рідко: GetInventoryFor і сам знаходить єдиний. (лише C++)

Об'єкти світу (InventorySystemWorld)

AISLootContainer

Член Опис
ContainerInventory вміст
LootTable, bGenerateLootOnSpawn наповнення
bUseWeightedLoot, WeightedDropCount режим «рівно N предметів»
bSingleUse одноразова скриня
Open(Opener) / Close(Closer) взаємодія — лише на сервері, самі себе не пересилають
CanOpen() / IsEmpty() стан
ResetContainer(bClear) дозволити наповнитися знову
BP_OnOpened / BP_OnClosed / BP_OnLooted / BP_OnLootGenerated хуки візуалу

AISItemPickup

Член Опис
ItemDefinition, ItemCount вміст для розміщених у рівні
HeldItem справжній об'єкт зі станом
bDestroyOnCollected, LifeSpanSeconds поведінка
TryCollect(Collector) підібрати — лише на сервері; з клієнта викликайте UISInventoryComponent::TryCollect
HasContents() / GetPickupText() стан і підпис
SpawnForItem(World, Item, Location, Class) викинути наявний предмет у світ (сервер)

Який TryCollect викликати. Той, що на інвентарі гравця. Пікап не має мережевого з'єднання, тож сам переслати запит на сервер не може — а інвентар гравця може. Це та сама причина, з якої з контейнера беруть через TryTransferFrom, а не через методи самого контейнера.

UISLootTable

Метод Опис
GenerateLoot() кидок кожного запису окремо за DropChance
GenerateWeightedLoot(Count) рівно N записів за Weight
PopulateInventory(Inv, bWeighted, Count) згенерувати й одразу покласти

UISInventoryWorldSubsystem — стан рівня світу

Усе, що спільне для гри, але не для процесу: підписки та таймери, які мають зникати разом зі світом. Отримати — UISInventoryWorldSubsystem::Get(WorldContext).

Член Опис
GetPlayerInventory(PlayerState) знайти інвентар гравця, хоч на PlayerState, хоч на пішаку
GetPlayerEquipment(PlayerState) те саме для спорядження
OnConsumableUsed подія використання витратного предмета — предмет, хто використав, EffectTags
GetFragmentCooldownRemaining(Fragment) скільки секунд лишилося на спільному кулдауні фрагмента
StartFragmentCooldown(Fragment, Seconds) запустити його

Чому не статик на класі фрагмента: фрагмент спільний для всієї гри, а статик на ньому був би спільним ще й для всіх світів у процесі. У PIE серверний і клієнтський світи чули б використання один одного, а підписки з попередньої сесії лишалися б живими в наступній.

Кулдаун ключується фрагментом, тож він один на всіх гравців світу. Це свідомо простий інструмент — кулдауни на гравця будуйте поверх OnConsumableUsed.


Відлагодження (InventorySystemDebug)

Функція Опис
ToggleInventoryDebugOverlay(PC) відкрити / закрити інспектор
IsInventoryDebugOverlayOpen(PC) чи відкритий зараз

Обидві не роблять нічого у Shipping. Консольні команди — 13 — Відлагодження.


Перелічення

Тип Значення
EISItemUseResult Success, NoItem, NotUsable, Blocked
EISInventoryChangeType ItemAdded, ItemRemoved, ItemChanged, SlotSwapped
EISSortMode ByName, ByStackCount, ByType, ByWeight
EISInventoryHost PlayerState, Pawn

Структури

Тип Опис
FISItemStatEntry одне значення в екземплярі: тег + число
FISSlotRestriction правило для діапазону слотів
FISInventoryEntry зайнятий слот: індекс + предмет
FISEquipmentEntry зайнятий слот спорядження: тег + предмет + актор
FISLootTableEntry запис таблиці луту: предмет, діапазон кількості, шанс і вага
FISLootDrop результат кидка: предмет + точна кількість
FISInventoryQuery опис того, що шукаємо в інвентарі
FISItemSaveData / FISInventorySaveData / FISEquipmentSaveData збереження

Налаштування проєкту

UISInventorySettingsProject Settings → Game → Inventory System. Усе вимкнено або нейтральне за замовчуванням; докладно в 02 — Підключення.

Поле Опис
bAutoCreatePlayerInventory видавати інвентар кожному гравцеві автоматично
bAutoCreatePlayerEquipment і спорядження разом із ним
AutoInventoryHost де він живе: PlayerState (переживає смерть) чи Pawn
DefaultInventorySlots скільки слотів отримує автоматичний інвентар
DefaultEquipmentSlots схема тіла для автоматичного спорядження
InventoryComponentClass / EquipmentComponentClass ваші підкласи замість стандартних
MaxInteractionDistance серверна межа дальності запитів; 0 — не перевіряти
bValidateItemsOnStartup перевіряти ассети предметів при старті редактора
bVerboseLogging докладний лог кожної зміни інвентаря