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>
This commit is contained in:
42
Source/ItemCore/Public/ItemLockData.h
Normal file
42
Source/ItemCore/Public/ItemLockData.h
Normal file
@ -0,0 +1,42 @@
|
||||
// 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;
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user