I'm writing a game where deliveries are made to specific people. These people act in different ways depending on what the delivery is. At times one character might ask the player to make a delivery to a difference character.
I'm having a hard time figuring out a healthy architecture for this. Currently I have a story manager singleton class, a quest class (which has subclasses like letter, package etc) which keeps track of the character sending/receiving the delivery and its' contents, and a character class that handles the behavior upon receiving a quest.
This works for the small version of the game that I'm working on at the moment since the order of interactions is fairly simple, so if x gets a package from y we have a switch statement handling this in y, but it doesn't feel scalable whatsoever - what if x sends y multiple packages throughout the story? Also, this mean I would have to manually mark the quest as complete from the character class and it feels wrong.
Of course I could give each quest an ID but it also doesn't feel great to do, since many IDs are difficult to read and expand upon. I don't necessarily want to end up with a giant switch statement that's just numbers (or enum), especially since that would have to be done for each character and it sounds like a nightmare.
Are there any design patterns applicable here? Do you have any advice? I'm working in gdscript at the moment but it doesn't seem like a language-specific problem.