"Effect from duplicate item pickups does not delay expiration"

This refers to a node setup where picking up an item increases the player’s speed, and the effect ends after 5 seconds. However, if the same item is picked up again before the 5 seconds have passed, the timer does not get delayed or extended. Instead, the speed boost ends based on the expiration time of the first pickup.

For example, if the player picks up a speed boost item and then picks up another one 3 seconds later, the effect will still end 2 seconds after the second pickup—following the original 5-second timer—rather than being extended.

How can I make it so that picking up another item resets or extends the timer properly, so the effect lasts 5 seconds from the latest pickup?

You can achieve this via timers (with Set Timer By Event or Set Timer by Function Name for example). When you set the same timer again while it is already running, it resets from the beginning.

Not related to this issue but just general good practices: you should probably save the speed boost in a variable. That will make it easier to change the value later without having to find which node is doing what.
Also, not strictly needed, but you should probably save somewhere that your character is currently in ‘boost mode’. This gives you more freedom, for example if you want to cancel the boost from an external event, before the timer actually completes. Here is an example of what I mean, but this can be improved:

Finally, I strongly suggest you manage all the boost and pickup effects on your character blueprint (or somewhere else more persistent than the pickup actor), if this isn’t already the case. Do not do this in the pickup blueprint itself. If for some reason the pickup actor gets destroyed, then your timer will never finish and your character will be constantly boosted. But even then, the pickup effect is related to the character, not the pickup object, I think it just makes more sense to manage it on the character directly.
So, from the pickup actor point of view, this would look something like that:

And the actual boost logic is handled by the character. This also makes it easier to create different types of pickup blueprints.

On overlap check if you currently have a boost. If so get its remaining time and add it to the new boost time. Then call timer, with new duration.

1 Like

Thank you for creating nodes and providing detailed explanations. As you mentioned, creating the pickup in the character’s blueprint resolved the issue! I really appreciate your help.