I posted this on the community chat when you ask, but perhaps you didn't see it. In any case, I have had/have this problem a lot in my past and present. In my situations, my character will stay in the "casting" motion, but it won't have any of the casting effects like the bubbles or the sparkles. I can't cast any magic until I move my character. It only happens with White Magic, and it happens sporadically. Is your friend using any third party programs like windower and ashita, and if so, which? I don't know if it's the same problem, but it sounds similar to mine, although it's never been a huge issue for me.
Known issue with midaction() if you use it to cancel spells, a 10 second timer was added to stop this causing action packet issues where game thought you were casting magic but you were not because you midcast prior.
As such it sends a packet to the GS but GS only thinks you are finished casting when server sends a packet back saying casting done, because you never actually casted - no return packet means - every action/spell you cast is cancelled.
Moving simply probably waited the 10 second timer built into GS (since the issue was flagged a week ago).
If you use Midaction() for a cancel rule, take it out:3