Se você tem dúvidas tão básicas, você tem certeza que quer implementar um RPG massivo? Por que não começa com algo mais simples, como multiplayer para 3 ou 4 jogadores, em rede, e deixa a parte massiva, via internet, para o futuro?
Vou te falar, você está tentando construir um foguete, quando mal sabe andar de bicicleta. Pode ser menos frustrante começar por um projeto mais simples.
Só comentando o seu problema específico. Nenhuma das soluções que você apontou é correta. Como um MMO roda via internet, você deverá usar uma técnica conhecida como dead-reckoning, ou o lag será imediatamente perceptível. Isso funciona da seguinte maneira. Quando o player apertar para andar, o char dele começará a andar imediatamente, e só então enviar essa informação para o servidor. O mesmo vale para o uso de skills.
O servidor receberá essa informação com atraso, e tentará formar uma versão “válida” do mundo com a informação que está recebendo. O problema é que o jogador envia para você o comando em T. O servidor já recebeu essa ação, e vai processa-la em T+1, portanto, o mundo válido dele já terá atraso. O segundo jogador, vai descobrir que o primeiro realizou a ação em T+2, após receber essa informação do servidor.
Como se não bastasse, considere que jogadores diferentes podem ter atrasos diferentes. Isto é, um pode estar rodando numa linha discada, enquanto outro num ADSL praticamente ao lado do seu server. E um jogador não deve impactar no outro, pelo menos não em grande escala.
Algumas coisas podem atenuar esse problema. Entre elas, não ter ações instantâneas no seu MMO. Por isso, faça com que as skills tenham efeitos e torne os danos imprevisíveis. Isso permite que a navegação trafegue entre os jogadores enquanto a animação dos poderes ainda está rodando. E também permite que algumas ações sejam suprimidas (por exemplo, dois tiros de um arqueiro poderiam virar 1 tiro só, com muito dano).
Por isso eu digo. Geralmente é interessante começar com um jogo em rede normal, fora da internet. Nela, o atraso é muito pequeno, e você pode pensar num servidor que use “pulsos” e num programa que seja tão síncrono como você originalmente imaginou.
Você também pode procurar por algum framework próprio para aplicações desse tipo, como o projeto DarkStar:
http://projectdarkstar.com/