The whole thing is database-driven. There is a table npc_types which defines the NPC, their level, race, strength, etc. And there is a table spawn2 that defines where, with what probability the NPCs from npc_types spawn.
With the following SQL query you can see how the tables are linked and how to query which NPC spawns in a zone.
	Code:
	SET @myZone = NULL;
SET @myNpcName = NULL;
SET @myNpcID = NULL; 
SET @myZone = 'misty';
SELECT   nt.id as npcID, nt.name, nt.level, nt.hp, s2.respawntime, 
         s2.spawngroupID as spawngorupID, s2.pathgrid, s2.zone, s2.x, s2.y, s2.z
FROM     npc_types nt 
         LEFT JOIN spawnentry se ON se.npcID = nt.id 
         LEFT JOIN spawngroup sg ON se.spawngroupID = sg.id 
         LEFT JOIN spawn2 s2 ON s2.spawngroupID = sg.id 
WHERE    (s2.zone = @myZone OR @myZone IS NULL)
         AND (nt.name LIKE @myNpcName OR @myNpcName IS NULL)
         AND (nt.id = @myNpcID OR @myNpcID IS NULL)        
GROUP BY name, level ,respawntime  
ORDER BY name, level, respawntime ASC
LIMIT    500;
 Because of your request: you probably want to shorten the respawn time of the spiders in Misty.
You can find all of the very extensive and complex C++ code at GitHub:
 
https://github.com/EQEmu/Server
The code which handles spawning can be found here:
https://github.com/EQEmu/Server/blob...one/spawn2.cpp
You can get even more information yourself from the project's GitBook. Everything is well documented there:
 
https://eqemu.gitbook.io/server/
Have fun in the wonderful (and incredibly complex) world of EQEmu 
