Files
inventory-system-plugin/Source/ItemDatabase/Public/ItemAuxiliaryRows.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

130 lines
3.9 KiB
C

// Copyright ExByte Studios. Item Interaction Ecosystem.
#pragma once
#include "CoreMinimal.h"
#include "Engine/DataTable.h"
#include "GameplayTagContainer.h"
#include "ItemEnums.h"
#include "ItemAuxiliaryRows.generated.h"
/**
* DT_ItemProperties row (section 6.2): default runtime property for an item.
* Multiple rows share one ItemId, so the row name is arbitrary - the database
* indexes these by ItemId.
*/
USTRUCT(BlueprintType)
struct ITEMDATABASE_API FItemPropertyRow : public FTableRowBase
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Property")
FName ItemId;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Property")
FGameplayTag PropertyTag;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Property")
float DefaultValue = 0.f;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Property")
float Min = 0.f;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Property")
float Max = 1.f;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Property")
EItemPropertyReplicationPolicy ReplicationPolicy = EItemPropertyReplicationPolicy::OwnerOnly;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Property")
bool bSave = true;
};
/**
* DT_ItemFeatures row (section 6.3): one tunable parameter of a feature.
* e.g. raw_meat | Rotting | DecayRatePerHour | 0.08
* Value is stored as text so it can carry floats, ints or item ids uniformly.
*/
USTRUCT(BlueprintType)
struct ITEMDATABASE_API FItemFeatureRow : public FTableRowBase
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Feature")
FName ItemId;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Feature")
FGameplayTag Feature;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Feature")
FName Param;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Feature")
FString Value;
float GetFloat(float Fallback = 0.f) const
{
return Value.IsNumeric() ? FCString::Atof(*Value) : Fallback;
}
int32 GetInt(int32 Fallback = 0) const
{
return Value.IsNumeric() ? FCString::Atoi(*Value) : Fallback;
}
};
/**
* DT_ItemInteractions row (section 6.4): a data-driven interaction option.
* The interaction resolver turns matching rows into FInteractionOptions.
*/
USTRUCT(BlueprintType)
struct ITEMDATABASE_API FItemInteractionRow : public FTableRowBase
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Interaction")
FName ItemId;
/** Context filter, e.g. "World", "Inventory", "Held+Vehicle", "Held+Generator". */
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Interaction")
FName Context;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Interaction")
FGameplayTag ActionTag;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Interaction")
EItemInteractionMode InteractionMode = EItemInteractionMode::None;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Interaction")
int32 Priority = 0;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Interaction")
bool bRequiresHold = false;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Interaction")
float HoldDuration = 0.f;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Interaction")
float ActionDuration = 0.f;
/** Free-form requirement expression resolved by the requirement system (section 18). */
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Interaction")
FString Requirement;
/** Result verb, e.g. AddToInventory / HoldWorldItem / InstallIntoSlot / TransferFuel. */
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Interaction")
FName Result;
};
/** DT_ItemRedirects row (section 26.1): maps a retired ItemId to its replacement. */
USTRUCT(BlueprintType)
struct ITEMDATABASE_API FItemRedirectRow : public FTableRowBase
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Redirect")
FName OldItemId;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Redirect")
FName NewItemId;
};