If a player clicks buy and cancels during the purchase loading time, then they lose their V-Bucks and are told that the purchase was not validated.
Please select what you are reporting on:
Unreal Editor for Fortnite
What Type of Bug are you experiencing?
Other
Steps to Reproduce
Go to a map, for example in my example I’m using Escape Tsunami For The Brainrot.
Go to the purchase page, click “Buy” and confirm.
During the checkout process, click “Back”.
You lost your V-Bucks and received nothing because the if statement in verse code failed.
Expected Result
You do not receive the item and you do not lose your V-Bucks.
Observed Result
You do not receive the item and you lose your V-Bucks.
I’ve attached a video demonstrating the reproduction method and an image of the associated code verse.
This is not due to a lack of space in the player’s inventory or anything else related to our map, as we perform all checks beforehand.
It is because you are closing the dialog manually , making the BuyOffer return “false”, but the purchase itself is in fact correctly happening, you are just not handling it properly in the code…
The dialog was not closed due to offer success (returning true), was closed manually before that (returning false), and your code is not handling that.
(The purchase does in fact succeed correctly, but you are not acocunting for it since you are handling a single specific case but not all possibles - The description on the digests are misleading, probably should be changed to avoid confusion)
The product should still be correctly granted without issues, is just a problem due to the way you are listening for the purchase in your code. Here is a fix for you case:
Don’t wait the return of “BuyOffer()” checking the true/false return, it is related to the offer popup dialogue closing manually/automatically, and not exactly purchase success/failure state… (It can be closed manually, returning false, before the purchase is complete)"
Instead, use GetEntitlementsChangedEvent, it will always properly receive an signal when the purchase is completed, even when/if the offer popup dialogue is already closed manually before the purchase success.
Here, just for example, I changed the description to be more accurate to how it behaves (just for better understanding of it):
Also, if your map handles player storage properly (eg. checking owned entitlements during gameplay or when joining), just leaving and re-joining the map would “fix” it, even in that current state with the wrong purchase handling…
At the end, like I said, you should just use the GetEntitlementsChangedEvent to handle entitlement purchase/count changes, instead of relying on offer dialog popup display state… This way you will never face side-effects or weird edge-cases to cover due to partial or incorrect offer handling on the code…
Yes, indeed, but the documentation isn’t very clear. If false is also returned during cancellation, when the player clicks “cancel” during processing, it should also cancel the debiting of V-Bucks.