Speaking boxes are the main interactivity in the game, they're used to tell key story points and give the player options on how much they want to learn about the game world by reading.
Literally the entire component section of this actor is a single box collision. The single box collision allows the player blueprint to detect when it's overlapping a speaking point, which will then allow the rest of the code to work.
The second the player collision capsule overlaps any other collision, it sets off an event.
In this case it would be the speaking box it overlaps.
This goes onto more things better explained in the character blueprint page, what's important is that it checks if the actor has particular tags so that it knows what it's dealing with. If it's not a door, then it will cast to the overlapped speaking box which leads into another branch.
The branch reads whether the actor has the tag "speakinginteraction" and if it does then the branch goes through the true pathway. The true branch then leads to another branch that checks if the speaking interaction has already happened. If it hasn't, then the Q to speak widget is created and added to the viewport to alert the player that they can interact with the speaking box.
This is actually a widget issue I fixed whilst logging this, the actual button the player presses is R to start the dialogue.
The R key will cast to the overlapped speaking box, check that the target hasn't been activated yet and will branch off based on this decision. If the dialogue hasn't been played then the branch goes through the false path and sets the variable in the speaking box to true. This stops the speaking box popping up for the player or being interactable with.
Finally, the widgets are all removed to make a clean slate for the dialogue to appear on. This then leads to a start event node which in this case is called Play Dialogue.
All the event does is create a widget based on the widget selected for the speaking box instance and add it to the blueprint with the player controller. This is then addept to the viewport.
The user widget variable is instance editable. This is seen through an open eye or a tick next to the instanc editable area. This means that the speaking box actor in the game world can be changed to have different information than the others. This one might have dialogue about the lights being off, another might have audio about the sofa being old.
This is just a lot more efficient than having each dialogue with a different actor to set it off. This saves me doing that as I can genuinely just click on the "Which Widget" section of the default area and change it to whatever widget I want.
(Shown throughout)