Aldeia RPG

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Suporte ao desenvolvimento de jogos


    [EO 2.0] Limitando SpeedHack

    Kotol
    Kotol
    Moderador Local
    Moderador Local


    Mensagens : 77
    Créditos : 16

    [EO 2.0] Limitando SpeedHack Empty [EO 2.0] Limitando SpeedHack

    Mensagem por Kotol Seg Mar 27, 2023 10:50 pm

    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:

    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 encoste o pc )


    Até onde Testei, tudo certinho, qualquer erro, dúvida ou sugestão, exponha aí! Valeu!  Very Happy

    Valentine e Nando Moura gostam desta mensagem


      Data/hora atual: Qua maio 29, 2024 11:53 am