Aqui vamos limitar um pouco melhor principalmente quem abusa de SpeedHack no eclipse origins. Já existe um tutorial aqui quem mexe no 'IncomingData", mas mesmo que sutil, ainda dá para o jogador mexer no cliente e fazer um MovementSpeed maior que o permitido.
A parte boa é que ainda "buga a posição" do jogador caso ele ande mais que o permitido (ou seja, adiciona timer e só relogando ou esperando parado no mesmo lugar por mais tempo).
Se tiver aquela dúvida: "Ahh mas e se o server der lag?", bem, se você seguiu o primeiro tutorial do fórum de "IncomingData" que inclusive protege seu servidor de um flood, se der "Lag" o Incoming vai fazer o trabalho. O melhor é que não tenha Lag, senão vai acontecer igual um EEB, excesso de pacotes, é melhor o jogador cair que o servidor inteiro.
Sem mais delongas, abra seu "Server.Vbp" e em "ModTypes" , procure pelo tipo "TempPlayerRec" e descendo, logo antes do PRIMEIRO:
Adicione acima isto:
Agora, em "ModHandleData" , procure pela "Sub HandlePlayerMove" e abaixo de:
Adicione isto:
Agora, no final de "ModConstants" declare isso:
Agora é bem simples, tudo que você prcisa se atentar é:
Walk_Speed e Run_Speed que você deseja no cliente, coloque o mesmo no servidor para que ele faça a checagem correta.
Caso você não sincronize, não crasha seu servidor nem nada, mas impede o jogador de andar em efeitos visuais do "SendXY" mais feios como se o jogador estivesse bugado.
Caso você queira que o jogador que for pego no "vá de base" , só adicionar um "Call AlertMsg" que ele é kickado com uma mensagem que você seleciona.
(Talvez mais tarde eu poste a correção do movimento do cliente em mudanças de FPS(<32) fazendo que ele sempre encoste no Running do server. Na E02.0 ele encosta, na corrigida ele faz certinho -> 1~240 FPS, apesar que 1 de FPSencoste o pc )
Até onde Testei, tudo certinho, qualquer erro, dúvida ou sugestão, exponha aí! Valeu!
A parte boa é que ainda "buga a posição" do jogador caso ele ande mais que o permitido (ou seja, adiciona timer e só relogando ou esperando parado no mesmo lugar por mais tempo).
Se tiver aquela dúvida: "Ahh mas e se o server der lag?", bem, se você seguiu o primeiro tutorial do fórum de "IncomingData" que inclusive protege seu servidor de um flood, se der "Lag" o Incoming vai fazer o trabalho. O melhor é que não tenha Lag, senão vai acontecer igual um EEB, excesso de pacotes, é melhor o jogador cair que o servidor inteiro.
Sem mais delongas, abra seu "Server.Vbp" e em "ModTypes" , procure pelo tipo "TempPlayerRec" e descendo, logo antes do PRIMEIRO:
- Código:
End Type
Adicione acima isto:
- Código:
MovingTimer As Long
Agora, em "ModHandleData" , procure pela "Sub HandlePlayerMove" e abaixo de:
- Código:
' Prevent hacking
If Movement < 1 Or Movement > 2 Then
Exit Sub
End If
Adicione isto:
- Código:
'Check for excessive movement requeriment
If Movement = 1 Then 'Moving walking
If TempPlayer(Index).movingTimer + WALK_SPEED * 32 > GetTickCount Then
SendPlayerXY Index
Exit Sub
End If
ElseIf Movement = 2 Then 'Moving Running
If TempPlayer(Index).movingTimer + RUN_SPEED * 32 > GetTickCount Then
SendPlayerXY Index
Exit Sub
End If
End If
'Set Timer
TempPlayer(Index).movingTimer = GetTickCount
Agora, no final de "ModConstants" declare isso:
- Código:
' Speed moving vars
Public Const WALK_SPEED As Byte = 4
Public Const RUN_SPEED As Byte = 6
Agora é bem simples, tudo que você prcisa se atentar é:
Walk_Speed e Run_Speed que você deseja no cliente, coloque o mesmo no servidor para que ele faça a checagem correta.
Caso você não sincronize, não crasha seu servidor nem nada, mas impede o jogador de andar em efeitos visuais do "SendXY" mais feios como se o jogador estivesse bugado.
Caso você queira que o jogador que for pego no "vá de base" , só adicionar um "Call AlertMsg" que ele é kickado com uma mensagem que você seleciona.
(Talvez mais tarde eu poste a correção do movimento do cliente em mudanças de FPS(<32) fazendo que ele sempre encoste no Running do server. Na E02.0 ele encosta, na corrigida ele faz certinho -> 1~240 FPS, apesar que 1 de FPS
Até onde Testei, tudo certinho, qualquer erro, dúvida ou sugestão, exponha aí! Valeu!