okay, so these are two different concerns.
NPC's: there's a Time FSM that does a wait for 1 second, then updates the clock. Every 15 minutes, it send a process to a big "scheduler" fsm that iterates through all 1000 npcs in my game and sets a new navmesh agent destination on all of them, based on a SQL query from a tables managed by SimpleSQL.
Is it more efficient to do it this way, or would it be better to put a "schedule checker" fsm template on each NPC game object that runs this object for each npc as needed (like if one NPC's hunger gets low, their own fsm can change their nav destination.)?
The second concern is things like doors, windows, and other set pieces. Currently I have a single FSM called "Door Manager". Any time a character or NPC interacts with a door game object, it sends that door go through this script and determines how to open it, if it's locked, etc. based on the names of children the door has. having a "locked" child would prevent it from opening.
Is that efficient, or would it be better to have a "door" fsm on each relevant game object?
Does having a lot of scripts (4 thousand) that do nothing until triggered, create lag or anything? If I did that for each go, should those scripts be "deactivated" or something when not in use to save memory?