Wait Gameplay event to actor not receieving events.

The wait gameplay event to actor is not receiving the events, I am following a tutorial and did everything but the event is not being received. My GasPlayerBase.h already include public IAbilitySystemInterface. The send event is also being called before the wait event. What could the possible solutions be?

This is a timing problem, not an interface problem. Your screenshots already show it.

GiveAbility on BP_GasPlayer sends Event.Abilities.Changed immediately after granting. The widget starts WaitGameplayEventToActor on Event Construct. Construct runs after the pawn’s init, so the event has already been sent and dropped. WaitGameplayEventToActor does not replay missed events.

IAbilitySystemInterface on GasPlayerBase is fine. Tags match. Target actor is the pawn that owns the ASC. That’s not the bug.

Do this instead:

  1. On Event Construct, fill the bar immediately from the ASC (granted specs / whatever Fill Abilities Bar already reads). Don’t wait for the first event.
  2. Then start WaitGameplayEventToActor for later grants.
  3. If GiveAbility can run again later, those sends will hit the wait.

Even better for UI: drop the gameplay event. Add an Event Dispatcher on BP_GasPlayer (OnAbilitiesChanged) and bind the widget to that after construct. Gameplay events are for abilities/notifies, not HUD refresh.

Small extras:

  • Event Construct on a widget can fire more than once (remove/re-add, viewport change). The latent wait dies with the old widget. Re-bind, and always do the immediate fill first.
  • Get Owning Player Pawn on Construct can be none if the HUD is created before possess. Your Is Valid on the ASC already covers that — if it fails, delay a tick and retry rather than starting the wait on a bad target.

^This, or alternatively, just don’t run the give ability function on begin play or whatever until after the ability bar is created. If you’re trying to grant GA_Dash on begin play, set a short timer near the end of begin play event that delegates an event which calls GiveAbility if ability widget is valid. Loop said timer if widget loads slow for some reason, then clear and invalidate timer after calling Give Ability. May want to double check if the return from the GAS give ability node worked first before killing timer tho.