SSGamers - 13 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

Participe do fórum, é rápido e fácil

SSGamers - 13 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

SSGamers - 13 Anos online por você.

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Chegou o novo tema 6.5.5 - SSGamers - Servidores online de qualidade - Aproveite e entre para nossa comunidade, inscreva-se já! - Ouça nossa web radio - Veja nossas novidades - Participe dos nossos setores de jogos online - Parcerias aberta fale já com um administrador.

    [Tutorial] Jogadores dessincronizados e como lidar com eles

    Weslley_Script
    Weslley_Script
    SS - Fundador
    SS - Fundador


    Steam Steam : WeslleySSGames
    Zello : WeslleySSGames
    Mensagens : 11624
    Moedas : 1032875
    Data de inscrição : 06/10/2011
    Idade : 28
    Localização : Brasil

    [Tutorial] Jogadores dessincronizados e como lidar com eles Empty [Tutorial] Jogadores dessincronizados e como lidar com eles

    Mensagem por Weslley_Script Sex 17 Mar 2023 - 9:28

    Jogadores dessincronizados e como lidar com eles

    Vocк provavelmente jб lidou com jogadores dessincronizados antes e sabe o quгo problematico pode ser, especialmente por questгo de falsos-positivos em sistemas de anti-cheat.

    Vamos supor que seu anti-cheat expulsa jogadores se a arma nгo for dada pelo servidor. Se vocк fosse disarmar um jogador dessincronizado, suas armas nгo seriam removidas e o mesmo seria uma vнtima de falso-positivo, sendo expulso por algo que nгo fez.

    Em geral, vocк nгo pode "spawnar", mudar a vida/colete por funзхes, teleportar, dar/remover armas, mudar a muniзгo, etc desses jogadores. Isso ocorre por que jogadores dessincronizados nгo reagem a alguns RPCs (chamadas de procedimento remoto) mandados pelo servidor, porйm, client messages (SendClientMessage) e game texts ainda funcionam.
    A callback OnPlayerUpdate
    Esta callback ainda й executada. Isso por que esses jogadores ainda mandam pacotes de sincronizaзгo para o servidor, e esse й o motivo pelo qual vocк ainda pode vк-los movendo/disparando e interagindo com o servidor e possivelmente com outros jogadores.

    Jogadores dessincronizados nгo reagem a alguns RPCs, como previamente dito. Eles ainda podem andar por ai, mandar comandos para o servidor, conversar, matar outros jogadores, etc, porйm, eles tambйm notam problemas em seu fim. Existem dois RPCs para fazer o processo de stream in/out com veнculos e jogadores, e esses sгo alguns dos RPCs que nгo vгo ser processados no cliente do jogador dessincronizado, entгo, outros jogadores nгo vгo passar por esse processo, e isso significa que, jogadores que deveriam passar pelo processo de stream-out, nгo seram removidos do jogo, e aqueles que deveriam passar pelo processo de stream-in nгo vгo ser adicionados, nгo se tornando visнveis no jogo do jogador dessincronizado, isso por que seus player-peds ainda nгo foram criados e nгo vгo ser. Jogadores que deveriam ser removidos nгo teram seus player-peds destruidos e vгo permanecer, porйm, nгo serгo sincronizados com o jogador novamente, isso por que o servidor jб reconheзe que esses jogadores nгo estгo na sua area de stream-in, nгo enviando os pacotes de sincronizaзгo para o jogador, entгo esses outros jogadores sгo vistos como se estivessem AFK, o que nгo й a realidade.

    Os chamados de "laggers" ainda reagem a essas atualizaзхes, mas ambos os casos sгo diferentes e nгo devem ser confundidos. De qualquer forma, eles tambйm sгo vнtimas de falsos-positivos e tem grandes chances de serem dessincronizados em algum momento.
    Como detectar?
    Agora vem a parte interessante (Ou talvez nгo).

    Agora que vocк sabe que esses jogadores nгo reagem a alguns RPCs, existem algumas coisas que vocк poderia tentar. Eu pessoalmente gosto e uso esta forma para saber de jogadores possivelmente dessincronizados (Leve em consideraзгo que esta й apenas uma parte de meu sistema para que vocк tenha uma idйia de como funciona, nгo й algo pronto para vocк copiar e colar em seu script):

    Código:
    static 
        bool:IsPlayerSynced[MAX_PLAYERS char],
        PlayerAmmo[MAX_PLAYERS char],
        PlayerUpdateTick[MAX_PLAYERS];
        
    public OnPlayerUpdate(playerid)
    {
        if(gettime() > PlayerUpdateTick[playerid])
        {
            static current_weapon, current_ammo;
                
            PlayerUpdateTick[playerid] = gettime() + 2;
            GetPlayerWeaponData(playerid, 0, current_weapon, current_ammo);
            
            IsPlayerSynced{playerid} = (current_ammo != PlayerAmmo{playerid});
            SetPlayerAmmo(playerid, current_weapon, !current_ammo);
            
            PlayerAmmo{playerid} = current_ammo;
        }
        return 1;
    }
    //Utilizando IsPlayerSynced{playerid} em algum lugar... 
    Como isso funciona exatamente? Este pequeno sistema simplesmente muda a muniзгo na slot 0 (punhos/soco inglкs) entre 1 e 0 (antes que vocк me pergunte, a muniзгo de armas brancas nгo importa, entгo nгo podem ser removidas mudando sua muniзгo para 0), que nгo й notado pelos jogadores. Jб que jogadores dessincronizados nгo podem ter sua muniзгo mudada de alguma forma pelo servidor, ela continuara sendo a mesma, e й assim que funciona.

    Por que a callback OnPlayerUpdate? Como previamente dito, jogadores dessincronizados ainda mandam pacotes de sincronizaзгo para o servidor, entгo a callback continua sendo executada. Logo, fazer a verificaзгo ai й bom, especialmente por que jogadores AFK nгo seram "marcados" como dessincronizados, nгo interferindo com sua verificaзгo.
    O que fazer apуs confirmado?
    Vocк pode expulsar o jogador com um aviso dizendo para conectar novamente. Por que? Por que mesmo que seu servidor nгo se constitua de sistemas onde jogadores dessincronizados sгo potenciais vнtimas de falsos-positivos, isso sу resulta em confusгo e geralmente em denъncias falsas por parte de outros jogadores, especialmente pelo fato de que pessoas que deveriam passar pelo processo de stream-in, nгo vгo aparecer no jogo do jogador dessincronizado, sendo impossнvel causar dano, pois o mesmo nгo vк esses jogadores e nгo vai registrar o dano por sua parte em seu cliente.
    Creditos: BrunoBM23



    [Tutorial] Jogadores dessincronizados e como lidar com eles D07Xwqb
    [Tutorial] Jogadores dessincronizados e como lidar com eles Yjab9HN

      Data/hora atual: Ter 5 Nov 2024 - 9:30