I fixed this before in eAthena by scripting every MVPs spawn timer into global variables. It would only respawn them if the global variable was up. It's not hard to script, just takes a while to do each of them.
Some pseudo code:
- script MVPSpawner -1,{OnTimer60000: if ( $maya < gettimetick(2) && .maya != 1) { monster "anthell02",0,0,"Maya",1147,1,"MVPSpawner::OnMayaDeath"; set .maya,1; } if ( $doppel < gettimetick(2) && .doppel != 1) { monster "gef_dun02",0,0,"Doppelganger",1046,1,"MVPSpawner::OnDoppelDeath"; set .doppel,1; } stopnpctimer; setnpctimer 0; startnpctimer; end; OnMayaDeath: set $maya,gettimetick(2) + 7200 + rand(0,600); set .maya,0; end;OnDoppelDeath: set $doppel,gettimetick(2) + 7200 + rand(0,600); set .doppel,0; end;OnInit: initnpctimer; setnpctimer 0; startnpctimer; end;}
There's obviously more to it than this. You need to track if it's currently alive (this will just keep spawning Mayas forever until someone kills one), start and reset the timer, etc. But this would preserve the monsters dead/alive state even through server restarts.
Ok I wrote some more code, it should work but I did not test it. You'll need to add the rest of the MVPs as well.