I'd say the usual way is to create a script that can be used for all characters that should have the same properties and functions.
Create a new scene and chose the type you need for your character. I chose CharacterBody 2D.
Attach a script to it:
class_name Character extends CharacterBody2D
@export var character_name : String
var talked_with_hero := false
var invited_to_party := false
var party_invite_accepted := false
#Other built-in functions for characterbody2d and your functions
Use @export annotation for the variables you like to set in the inspector.
class_name Character is optional, but is helpful for code completion.
Save the scene. Now you can rightclick in the filesystem and select new inherited scene and create more characters and change their properties etc. Or manually create a new scene and attach the script to it to create new characters.
So each character keeps track on its own.
If you plan to have a party, you might create another script that handles the party.
You could use an array and put all characters into it, that have joined the party, or remove the ones that left the party.
Well, that's what came to my mind from what I've assumed from your text. 🙂