Files
inventory-system-plugin/Source/ItemCore/Public/ItemLockData.h
Bonchellon 7f7e043a88 Initial commit: Item Interaction Ecosystem plugin (UE5.7)
Server-authoritative, data-driven item/inventory/interaction/carry/equipment/
world-slot/placement/crafting framework. 8 modules, compiles against UE 5.7.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 20:49:56 +03:00

43 lines
1.1 KiB
C

// Copyright ExByte Studios. Item Interaction Ecosystem.
#pragma once
#include "CoreMinimal.h"
#include "GameplayTagContainer.h"
#include "ItemLockData.generated.h"
/**
* Server-side soft lock placed on an item while a transaction owns it (section 20).
* Prevents dupes / conflicts: a locked item cannot be moved, taken, dropped,
* crafted, deleted or stacked by anyone but the locking actor.
*/
USTRUCT(BlueprintType)
struct ITEMCORE_API FItemLockData
{
GENERATED_BODY()
UPROPERTY(BlueprintReadOnly, Category = "Item|Lock")
bool bLocked = false;
/** Lock.Carrying / Lock.Using / Lock.Transferring / ... */
UPROPERTY(BlueprintReadOnly, Category = "Item|Lock")
FGameplayTag LockReason;
UPROPERTY(BlueprintReadOnly, Category = "Item|Lock")
TWeakObjectPtr<AActor> LockedBy;
/** Server world time (seconds) at which the lock auto-expires; 0 = no expiry. */
UPROPERTY(BlueprintReadOnly, Category = "Item|Lock")
float LockExpireTime = 0.f;
bool IsLockedBy(const AActor* Actor) const { return bLocked && LockedBy.Get() == Actor; }
void Clear()
{
bLocked = false;
LockReason = FGameplayTag();
LockedBy = nullptr;
LockExpireTime = 0.f;
}
};