I've been poking around the code and it looks like the input spam can be avoided with set_process_input(false) as soon as possible after the first input is received, then set_process_input(true) the next time player input is needed. That seems to be working for me in Godot 4.6 at least. If you're using a different version or engine then that exact syntax might not be right, but something along those lines seems to do the trick.
About the monster and town trigger issues, I think that's caused by a mixture of a code error in the raycast detection function and an issue where towns and monsters aren't properly aligned with the tile grid. Also, the enemy hitboxes were just rushed and poorly designed overall so I'll remake them from scratch.
Once the voting is over I think I'll release a patch and we can see how well my fixes work. It's always really helpful to get specific comments like this, it makes the debugging process much faster.