Actually I found a major bug i think nobody has pointed out (call me out if I am wrong), but it's with The Old One's Army: Requiring the player to sit next to the portal for enemies to spawn (but only at the respective portal the player stands next to) and they despawn when there is a distance between the enemies/portal and the player. This is the same situation for Betsy during the event.
here is the log:
System.IndexOutOfRangeException: Index was outside the bounds of the array.
at RavelMod.NPCs.RavelGlobalNPC.AI(NPC npc) in RavelMod\NPCs\RavelGlobalNPC.cs:line 43
at Terraria.ModLoader.NPCLoader.AI(NPC npc)
at Terraria.ModLoader.NPCLoader.NPCAI(NPC npc)
at Terraria.NPC.UpdateNPC(Int32 i)
at Terraria.Main.DoUpdate(GameTime gameTime)
at Terraria.Main.Update(GameTime gameTime)
at Microsoft.Xna.Framework.Game.Tick()
at Microsoft.Xna.Framework.Game.HostIdle(Object sender, EventArgs e)
at Microsoft.Xna.Framework.GameHost.OnIdle()
at Microsoft.Xna.Framework.WindowsGameHost.RunOneFrame()
at Microsoft.Xna.Framework.WindowsGameHost.ApplicationIdle(Object sender, EventArgs e)
at System.Windows.Forms.Application.ThreadContext.System.Windows.Forms.UnsafeNativeMethods.IMsoComponent.FDoIdle(Int32 grfidlef)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at Microsoft.Xna.Framework.WindowsGameHost.Run()
at Microsoft.Xna.Framework.Game.RunGame(Boolean useBlockingRun)
at Terraria.Program.LaunchGame_()
at Terraria.Program.LaunchGame(String[] args, Boolean monoArgs)
at Terraria.WindowsLaunch.Main(String[] args)