SO in a random loot generator, each refresh resets the loot boxes, but can I make it so that if a loot has been ‘pinned’ or marked by the player, if will remain after refresh?
Yes, absolutely. You can preserve pinned or marked loot through a refresh by storing that data outside the random generation system and reinjecting it afterward.
Here’s the core idea:
—
### 🔁 Refresh With Pinned Items Logic
1. **Before Refresh:**
– Identify all “pinned” items (could be by index, ID, or object reference).
– Store them in a separate array or map.
2. **During Refresh:**
– Clear all non-pinned items.
– Run your random loot generation logic for the rest of the slots.
3. **After Refresh:**
– Reinsert pinned items into their designated spots—or just merge them back into the new loot table, depending on your design.
—
### 🧠 Implementation Options
– **Blueprint** (UE):
– Have a boolean `IsPinned` variable in your loot struct.
– Before refresh, loop and add all pinned items to a temporary array.
– After refresh, append them to the loot pool or replace empty spots.
– **C++**:
“`cpp
TArray LootPool;
TArray PinnedItems;
// Step 1: Extract pinned items
for (const FLootItem& Item : LootPool)
{
if (Item.bIsPinned)
PinnedItems.Add(Item);
}
// Step 2: Generate new loot
LootPool = GenerateRandomLoot();
// Step 3: Merge pinned items back in
LootPool.Append(PinnedItems);
“`
—
### 🧩 Advanced Option
If you want more control:
– Reserve pinned slots: treat pinned items like “reserved seats” that the generator must skip.
– Use a map with slot index → item to keep layout predictable.
—
Let me know what kind of loot structure you’re using (array, map, object list), and I can tailor this into an exact Blueprint or C++ snippet.