Combat is resolved on the server and streamed to you over a live connection. The client shows you the fight; it never decides it.
That split is why the same engine can serve a fight against an enemy and a fight against another player without either side being able to lie about the outcome.
