库存组件:UltimateInventoryComponent
库存组件需要添加到玩家或建筑物、怪物上
库存分为背包、蓝图、快捷栏、装备栏,其中蓝图为固定蓝图,不可进行移动,仅可通过系统添加,用于玩家制作物品
库存组件中仅可操作客户端控制角色的库存,无法操作他人库存,如需操作请使用UltimateControllerComponent进行操作
库存移动物品或使用物品需要先获得许可,每个玩家一次只能操作一个库存,并且打开库存才会进行物品同步
变量 | 说明 |
---|---|
RemoteViewingInventoryPlayerControllers(保护) | 获得许可的玩家控制器列表 |
UseColdDowns(保护) | 使用冷却列表 |
DroppedClass(设置) | 从该库存系统丢弃物品生成的实体类型,APrimalDropped |
DroppedBackpackClass(设置) | 从该库存系统一键丢弃所有物品和死亡后生成的包裹实体类型,APrimalDroppedBackpack |
MaxAllowViewDistance(设置) | 最大允许打开库存系统的距离 |
InteractionColdDownTime(设置) | 交互冷却时间,防止作弊玩家用库存系统占用服务器资源 |
DecayMultiplication(设置) | 腐坏倍率,用于冰箱等延缓腐化时间的变量 |
bDisableDropAllItem(设置) | 禁止一键丢弃所有物品,一键丢弃的物品包裹库存组件开启此选项并且开启bEnableTransferRestriction防止玩家传送物品到包裹中 |
bEnableTransferRestriction(设置) | 开启物品转移限制,例:武器柜仅可放置武器类物品 |
AllowItemType(设置) | 允许转移的物品类型,需开启bEnableTransferRestriction |
InventoryItems | 背包物品 |
BlueprintItems | 蓝图物品,由系统下发基础蓝图,玩家无法丢弃或移动,仅可进行制作 |
QuickItems | 快速栏物品 |
EquippedItems | 装备栏物品 |
MaxItemCount | 最大物品数量 |
EquipSlotSetting(设置) | 装备栏插槽数组设置 |
Table | 制作平台,例如工作台、机床 |
CraftQueueEntries | 制作队列 ItemUID 物品UID Quantity 数量 bIsRepair 是否为修复 |
CraftQueueMaxCount | 制作队列最大数量 |
CraftEntiie | 当前正在制作的物品信息 |
bCraftEntriesValid | 是否正在制作物品 |
CraftQueueHande | 制作队列的定时器句柄 |
CraftStartTime | 制作起始时间 |
CraftRequestTime | 制作所需时间 |
MaxCraftQuantity | 最大制作数量,例如最多一次制作100个地基 |
bAllowCrafFromOtherPlayer(设置) | 允许其他玩家在此进行制作,防止玩家在另外一个玩家身上利用其蓝图制作物品 |
函数 | 说明 |
---|---|
GiveItemToInventory(UPrimalItemBasic* ItemClass, EInventorySite InventorySite, int32 Quantity, bool bIsBlueprint,bool bShowHUDNotification) | 给予物品,服务器专用 |
ClientStartReceivingItems/ClientEndReceivingItems | 客户端开始/停止同步物品 |
FindItem(FItemUID ItemUID, EInventorySite InventorySite) | 寻找物品 |
FindItemDetail(FItemUID ItemUID, EInventorySite InventorySite, int32& ItemIndex, UPrimalItem*& ResultItem, EInventorySite& InSite) | 寻找物品,返回详细信息 |
FindItemsByClass(UPrimalItemBasic* ItemBasic, EInventorySite InventorySite) | 按类型寻找物品 |
GetIsInventoryHasEmpty | 库存是否有足够空位 |
GetStackableQuantity(UPrimalItemBasic* ItemClass, EInventorySite InventorySite) | 获取库存中可进行指定物品类型堆叠的数量 |
GetItemQuantityByClass(UPrimalItemBasic* ItemClass, EInventorySite InventorySite, bool bIncludeBlurprint) | 获取库存中该物品类型的总数量 |
IsEqualInventory(UPrimalItem* Item1, UPrimalItem* Item2) | 物品与物品是否在同一库存组件中 |
GetQuickSlotItem(int32 Index) | 获取快捷栏物品 |
GetEquipSlotItem(EItemEquipSlot SlotType,int32 Number) | 获取装备栏物品 |
GetIsEquipSlotEmpty(EItemEquipSlot SlotType) | 获取装备栏是否有空插槽 |
GetItemsFromEquip(EItemEquipSlot SlotType) | 获取装备栏物品数组 |
GetItemsByPanel(EItemPanel Panel) | 获取物品分页的物品数组,UI使用,用于分类 |
GetUseColdDown(FName ColdDownGroup) | 获得冷却CD,UI使用,显示物品使用的冷却CD |
服务器专用函数 | |
DropAllItem(bool bIncludeEquip, bool bShowHUDNotification) | 丢弃所有物品,服务器调用 bIncludeEquip 包含装备与快捷栏,死亡时为true,主动丢弃时为false,避免玩家将身上装备一键丢弃 |
RemoveItem(UPrimalItem* Item, bool bDropped = false, bool bShowHUDNotification) | 移除物品,服务器调用 bDropped 是否为丢弃物品,true则会在丢弃时生成物品实体可供玩家捡起 |
SetupItemQuantity(UPrimalItem* Item, int32 Quantity, bool bShowHUDNotification) | 设置物品数量,服务器调用,设置0则会移除该物品 |
AddItemToInventoryItemStack(UPrimalItemBasic* ItemClass, int32 Quantity, EInventorySite InventorySite, bool bShowHUDNotification) | 添加物品到库存堆叠,返回未堆叠的物品数量,服务器调用 |
AddItem(FItemBuildInfo BuildInfo, EInventorySite InventorySite, bool bShowHUDNotification, bool bUseStack) | 添加物品到库存,服务器调用 |
UseItem(UPrimalItem* Item) | 使用物品,服务器调用 |
UseItemWithItem(UPrimalItem* Item1, UPrimalItem* Item2) | 使用物品到另外一个物品,拖拽时使用,用于给武器调整弹药类型或堆叠物品等,,服务器调用 |
ApplyColdDown(FName ColdDownGroup, double ColdDown) | 应用冷却CD |
TransferToInventorySlot(UPrimalItem* Item, bool bUseStack) | 传送到物品背包,服务器调用 |
TransferToQuickSlot(UPrimalItem* Item, int32 SlotIndex) | 传送到快捷栏,服务器调用 |
TransferToEquipSlot(UPrimalItem* Item, int32 Index) | 传送到装备栏,服务器调用 |
SwapInventorySlotItem(UPrimalItem* Item1, UPrimalItem* Item2) | 交换物品位置,服务器调用 |
SwapQuickSlotItem(UPrimalItem* Item, int32 SlotIndex) | 交换快捷栏位置,服务器调用 |
SplitItemStack(UPrimalItem* Item, int32 AmountToSplit) | 拆分堆叠,服务器调用 |
StackItemToItem(UPrimalItem* Item1, UPrimalItem* Item2) | 堆叠物品,服务器调用 |
SplitItemStackToItem(UPrimalItem* Item1, UPrimalItem* Item2, int32 AmountToSplit, bool bShowHUDNotification) | 拆分并堆叠物品到另外一个物品上,服务器调用 |
TransferItemFromDrop(UPrimalItem* Item) | 从丢弃的物品中传送到背包中,用于捡起地面物品,服务器调用 |
TransferItemToInventory(UUltimateInventoryComponent* Inventory, UPrimalItem* Item) | 从将物品传送到另外一个库存组件中,服务器调用 |
TransferItemFromInventory(UUltimateInventoryComponent* Inventory, UPrimalItem* Item) | 从另一个库存组件中移动物品到这个库存组件中,服务器调用 |
GetRemotePlayerControllers(bool bIncludeNetCullDistanceSquared) | 获取同步所用的玩家控制器, bIncludeNetCullDistanceSquared 是否包含剔除距离内的玩家,用于玩家装备同步,但不进行同步背包物品 |
RemoveQuantityFromItem(UPrimalItem* Item, int32 Quantity) | 从物品中移除数量 |
RemoveQuantityFromInventory(UPrimalItemBasic* ItemClass, int32 Quantity) | 从背包中移除指定物品类型的物品 |
SpawnDroppedItem(UPrimalItem* Item) | 生成掉落物品实体 |
SpawnDroppedItems(const TArray<UPrimalItem*>& Items) | 生成物品包裹实体 |
判断材料函数 | 说明 |
MeetResourcesRequirement(TArray<FItemResource> Resources, int32 Amount) | 背包中是否拥有材料 |
MeetEnhanceRequirements(UPrimalItem* Item) | 背包中是否拥有强化所需材料 |
MeetRepairRequirements(UPrimalItem* Item) | 背包中是否拥有修理所需材料 |
MeetBlueprintCraftingRequirements(UPrimalItem* Item, int32 CraftAmount) | 背包中是否拥有制作所需材料 |
GetBlueprintCanCraftQuantity(UPrimalItem* Item) | 获取背包中物品材料可制作多少个指定蓝图的物品数量 |
网络同步 | 说明 |
NotifyClientsItemCommand(UPrimalItem* Item1, UPrimalItem* Item2, bool bShowHUDNotification, EClientItemNotifyType NotifyType) | 通知客户端物品命令,用于同步客户端物品位置、添加物品、制作队列更新 |
NotifyClientsItemMutableAttribute(UPrimalItem* Item, UItemMutableAttribute* MutableAttribute) | 通知客户端物品可变属性变更,内含可变属性序列化 |
NotifyClientsColdDown(FName ColdDownGroup, double DeleteTime) | 通知客户端物品使用冷却时间变更 |
玩家交互使用函数(无论是否联网都使用此函数进行交互) | 说明 |
ServerDropItem(FItemUID ItemUID) | 丢弃物品 |
ServerDropAllItems() | 丢弃背包所有物品 |
ServerDropMultiItems(const TArray<FItemUID>& ItemUIDs) | 丢弃多个物品 |
ServerSwapItem(FItemUID ItemUID, FItemUID TargetItemUID) | 交换物品位置 |
ServerUseItemWithItem(FItemUID ItemUID, FItemUID TargetItemUID) | 物品拖拽后使用,用于堆叠到另外一个物品上或设置武器弹药类型 |
ServerSplitItemStack(FItemUID ItemUID, FItemUID TargetItemUID,int32 AmountToSplit) | 拆分物品堆叠,TargetItemUID填写空则拆分到背包末尾,如不为空则进行物品堆叠 |
ServerSplitItemAllStack(FItemUID ItemUID) | 拆分物品堆叠,将物品拆分成一个一个的物品,拆分后UID会更改,变为一个新物品,耐久等属性则会继承 |
ServerAddToQuick(FItemUID ItemUID, int32 SlotIndex) | 将物品装备到快捷栏中 |
ServerRemoveToQuick(int32 SlotIndex) | 从快捷栏中移除物品到背包中 |
ServerSwapQuickItem(int32 SlotIndex, int32 TargetSlotIndex) | 交换快捷栏物品位置 |
ServerUseItem(FItemUID ItemUID) | 使用物品 |
ServerEquipItem(FItemUID ItemUID,int32 Index) | 装备物品 |
ServerUnequipItem(FItemUID ItemUID) | 取消装备物品 |
ServerRepairItem(FItemUID ItemUID, APlayerController* PC) | 修理物品 |
ServerCraftItem(FItemUID ItemUID, int32 AmountToCraft, APlayerController* PC) | 制作物品 |
ServerRemoveCraftQueue(int32 QueueIndex, APlayerController* PC) | 移除制作队列 |
ServerEnhanceItem(FItemUID ItemUID, int32 AppointIndex) | 强化物品 |
需要重载的函数,用于播放音效等操作
重载函数 | 说明 |
---|---|
OnItemAddedNotify | 物品添加通知,用于显示物品获得通知 |
OnItemEquipNotify | 物品装备通知,在此替换角色的装备部件网格体 |
OnItemUseNotify | 物品使用通知,用于播放音效与动画 |
OnItemMutableAttributeUpdated | 物品可变属性更新通知 |
OnNotifyClientsItemStatus | 物品变更通知,包含物品移动,新增等,用于UI同步背包更新 |
OnAddWeight | 重量增加通知,用于过重减少玩家移动速度等 |