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>
43 lines
1.1 KiB
C
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;
|
|
}
|
|
};
|