} else if( !battle_check_range(src, target, range) )
return 0; // Arrow-path check failed.
Just change to that to:
} else if( !battle_check_range(src, target, range+1) )
return 0; // Arrow-path check failed.
For now.
At least then you only change it in that one specific case instead of changing a general range function that's used everywhere.
Yes, it's not safe, it gives hackers one more skill range than other players, but I can't look into a better fix because the bug doesn't appear for me locally and nobody else that has this bug could look into why it even gets to that code part.