the last thing to cover is the ball bp. the begin play here is much like the character’s setting a initial location variable then binding to the newRound dispatcher. the difference here lies in the bound event where we still set the actor location but before that we have to detach the ball from whatever actor its currently on. the other section of the script is a basic way of doing the switching possession of the ball. i used begin actor overlap, then casted to character so only other characters can take the ball, then attach to component to attach the ball to the character (i used a socket here to attach the ball to the characters hand). the rest including the branch, the set nodes, and the delay are there to control how quickly the ball can be transferred, basically so it cant go back and forth super quick (limited it to every 0.5 seconds).
thats basically everything you were looking to do. i didnt include the adding score part since im sure you can figure out how to do that with a timer and setting a reference to the player holding the ball. if you need more info on event dispatchers i would watch the video linked below. also i made this and tested with a third person project (4.17), some things may be different for you since your working in 2d. anyway that should be all the basics of what youll need to do. should be enough to get you started in the right direction at least.