I don't know what was wrong with the old code. My guess is that the NPC respawn code uses NPC location data loaded at initialization, so the NPC was respawning at the same location even though its location in the database was being changed correctly.
What I did was: I replaced the code for the HandleNpcMoveCommand on CreatureCommand.cpp with one call for HandleNpcAddCommand and one call for HandleNpcDeleteCommand. I also modified HandleNpcAddCommand to add a copy of the NPC you're targeting in case you don't provide an input argument. This way a copy of the NPC gets added, th