SSGamers - 12 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

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

SSGamers - 12 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

SSGamers - 12 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] Descomplicando o ZCMD e SSCANF

    Weslley_Script
    Weslley_Script
    SS - Fundador
    SS - Fundador


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

    [Tutorial] Descomplicando o ZCMD e SSCANF Empty [Tutorial] Descomplicando o ZCMD e SSCANF

    Mensagem por Weslley_Script Sáb 3 Jun 2023 - 10:09

    Introdução
    O meu objetivo neste tutorial é ensinar do modo mais fácil para quem ainda não é conhecedor com o uso do ZCMD e SSCANF , que para muita gente é um bixo de sete cabeças. Antes de começar, certifique-se de obter as duas inclui.


    Para instalar é fácil, vá até a pasta onde o seu pawno está e coloque-os na pasta include.
    Ex: C:\Program Files (x86)\Rockstar Games\GTA San Andreas\pawno\include

    No caso do SSCANF, ele irá vir em um .rar já com as pastas confirmadas, então basta extrair na pasta onde o seu servidor está instalado , no meu caso, a pasta principal do jogo.
    Ex:C:\Program Files (x86)\Rockstar Games\GTA San Andreas\

    Como ele é um plugin, você também deve abrir o seu server.cfg e adicionar a seguinte linha:
    Код:


    Código:
    echo Executando Configuração do Servidor...
    modo LAN 0
    rcon_password xxx
    maxplayers 32
    porta 7777
    servidor de teste de nome de host
    gamemode0 grandlarc 1
    filterscripts gl_actions gl_property gl_realtime gl_mapicon ls_elevator test_cmds ls_mall attachments
    plugins sscanf
    anunciar 0
    consulta 1
    weburl www.sa-mp.com
    onfoot_rate 40
    incar_rate 40
    arma_taxa 40
    stream_distance 300,0
    stream_rate 1000
    maxnpc 10
    logtimeformat [%H:%M:%S]

    Entгo adicionado as includes no topo do gamemode:
    peão Код:

    Código:
    [size=14][size=13]#include <zcmd>
    #include <sscanf2>[/size][/size]


    [center][/center]

    Após feito isso, comece tudoá sem problemas.
    Estrutura
    Estamos prontos para fazer o nosso primeiro comando! Lembre-se de se certificar que seguiu todos os passos anteriores. Mas antes vamos dar uma sensação na estrutura básica dos comandos.

    Lembrando que o ZCMD NГO utiliza um callback OnPlayerCommandText, logo vocк poderб criar seus comandos abaixo, exemplo:
    peão Код:


    Código:
    public OnPlayerCommandText ( playerid, cmdtext [ ] )
    {
        return  0 ;
    }




    Código:
    CMD : meucomando ( playerid, params [ ] )
    {
        #pragma used params // <- É utilizado em comandos que não v o usar os parametros, ou retire o params []
        return  1 ;
    }

    Se você pretende criar um filterscript/gamemode completamente baseado no ZCMD, você deve fazer com que a OnPlayerCommandText retorne false , ou uma mensagem de comando inexistente . Vamos a explicação:
    Код:


    Código:
    CMD: meucomando ( playerid, params[] )
    {
     #pragma parâmetros não utilizados
     retornar 1;
    }

    CMD: ou COMMAND: - Função que irá criar nosso comando em ZCMD.
    meucomando - nome do comando, no nosso caso seria /meucomando.
    playerid, params[] - playerid irá retornar a id do player que executa o comando, params[] sгo os parвmetros, que nуs vamos analizar com o sscanf mais tarde.
    O primeiro comando
    Vamos começar criando um comando simples de definir a sua própria vida.
    peão Код:


    Código:
    CMD : setarvida ( playerid, params [ ] )
    {
        new  Float : vida, string [ 60 ] ;
        if ( sscanf ( params, "f" , vida ) )  return SendClientMessage ( playerid, - 1 , "Use /setarvida [1-100]." ) ;
       
        if ( vida <  1 || vida >  100 )  return SendClientMessage ( playerid,- 1 , "Escolha apenas valores entre 1 e 100." ) ;

        format ( string, sizeof ( string ) , "Você setou sua vida para %.f" , vida ) ;
        SendClientMessage ( playerid, -1 , string ) ;    
        SetPlayerHealth ( playerid, vida ) ;
        retornar  1 ;
    }

    Agora vamos explicar todas as partes do comando:

    new Float:vida, string[60]; - Criamos uma variável float para salvarmos a vida que o jogador colocará no comando, e uma string para mandar uma mensagem para o mesmo.

    Agora vamos entender como funciona o sscanf, com ele você poderá separar os termos do comando individualizado, por exemplo, se eu utilizar /criarveículo 411 0 0, com o sscanf você poderáá pegar os trê números e os separar. Tudo bem agora? Então vamos ver as definições básicas utilizadas no sscanf:

    As definições são os tipos de dados que iremos armazenar, ela fica presente entre as aspas, no campo central da função:

    if(sscanf(params, "ds" , id, mensagem))

    i ou d - inteiro
    Sвo usado para numeros INTEIROS , exemplo: 1, 2, 18791...

    f - Float
    Й usado para numeros DECIMAIS , exemplo: 0.1, 5.7, 249.998890220110...

    s - String
    Utilizado para letras, palavras, frases...

    Então vamos o que utilizamos:
    if(sscanf( params , "f" , vida ))

    params - Definimos que a string/variável que queremos analisar, são os parâmetros do comando.

    "f" - Como mostrei na tabela acima, por se tratar de valores relacionados a vida, nуs usaremos Float considerando que o valor poderб ser decimal.

    vida- string que iremos armazenar o resultado.

    Quando nуs utilizarmos /setarvida 95.5 por exemplo, o sscanf irб analizar os parвmetros ( params ) e armazenarб o primeiro valor (95.5) float na variбvel vida .

    * Lembrando que o SSCANF irá retornar 1 se o comando não estiver com todos os parâmetros necessários. Por isso fiz isso:
    if( sscanf(params, "f", vida) ) return SendClientMessage(playerid, -1, "Use /setarvida [1-100].");

    As outras partes do comando são auto-explicativas.
    Mais exemplos

    peão Код:


    Código:
    CMD : pm ( playerid, params [ ] )
    {
        new playerdestino, playerNome [ MAX_PLAYER_NAME ] , pdestinoNome [ MAX_PLAYER_NAME ] , mensagem [ 128 ] , string [ 128 ] ;
        if ( sscanf ( params, "ds" , playerdestino, mensagem ) )  return SendClientMessage ( playerid, - 1 , "Use /pm [ID] [mensagem]." ) ;
       
        if ( playerdestino == INVALID_PLAYER_ID )  return SendClientMessage ( playerid, - 1 , "ID inválida ou inexistente." ) ;
       
        if ( ! strlen ( mensagem ) )  return SendClientMessage ( playerid, - 1 , "Digite uma mensagem." ) ;

        GetPlayerName ( playerid, playerNome, MAX_PLAYER_NAME ) ;
        GetPlayerName ( playerdestino, pdestinoNome, MAX_PLAYER_NAME) ;
       
        format ( string, sizeof ( string ) , "* PM de %s (%d): %s" , playerNome, playerid, mensagem ) ;
        SendClientMessage ( playerdestino, 0xFFFF80AA, string ) ;
        format ( string, sizeof ( string ) , "* PM para %s(%d): %s" , pdestinoNome, playerdestino, mensagem ) ;
        SendClientMessage ( playerid, 0x6F6F00AA, string ) ;    
        retornar  1 ;
    }

    if(sscanf(params, "ds", playerdestino, mensagem))

    Salvamos a ID (nъmero inteiro, entгo й integer, por isso utilizamos "d") na variбvel playerdestino, e a mensagem (string, entгo colocamos o "s"). O sscanf irá seguir a ordem que colocamos, como colocado [id] [mensagem], od vem antes do s.

    if(playerdestino == INVALID_PLAYER_ID)

    Verificamos se a ID que o player digitou existe.

    if(!strlen(mensagem))

    Verificamos se algo foi digitado na mensagem, e entгo logo depois, criamos as strings e mandamos a mensagem para ambos os jogadores.
    peão Код:


    Código:
    CMD : criar veículo ( playerid,params [ ] )
    {
        new id,cor1,cor2,veh, Float : x, Float : y, Float : z, Float : a;
        if ( sscanf ( params, "ddd" ,id,cor1,cor2 ) )  return SendClientMessage ( playerid, - 1 , "Usar /criarveiculo [ID] [COR1] [COR2]" ) ;

        if ( id <  400 || id>  611 )  return SendClientMessage ( playerid, - 1 , "A ID do veículo deve ser entre 400 e 611." ) ;
        if ( c1 >  128 || c2 >  128 )  return SendClientMessage ( playerid, - 1 , "A ID das cores deve ser atÉ 128." ) ;
        if ( IsPlayerInAnyVehicle ( playerid ) ) DestroyVehicle ( GetPlayerVehicleID ( playerid )) ;

        GetPlayerPos ( playerid,x,y,z ) ;
        GetPlayerFacingAngle ( playerid,a ) ;
        veh = CriarVeículo ( id,x,y,z,a,c1,c2, - 1 ) ;
        PutPlayerInVehicle ( playerid, veh, 0 ) ;
        retornar  1 ;
    }

    if(sscanf(params," d ",id,cor1,cor2))

    /criarveiculo 411 0

    Iremos armazenar a id do veiculo (411 - Infernus) na variбvel id, a cor primбria na variбvel cor1 e cor secundбria na variбvel cor2. Verificamos se o jogador está em um veículo, se estiver o destruimos, então pegamos a posição dele e o ângulo no qual o corpo está virado, criamos o carro e colocamos dentro do mesmo.
    Conclusão
    Espero que este tutorial tenha ajudado você a compreender mais sobre como eles operam, e como é mais fácil criar comandos com vários parâmetros. Se ainda restar alguma dúvida sinta-se a vontade para postar no tópico, e vou responder assim que possível. Se eu esqueci de algo, sinta-se à vontade para comentar.

    * ESSE TUTORIAL Й DIRECIONADO AOS INICIANTES EM PEÃO.


    Creditos: Linow



    [Tutorial] Descomplicando o ZCMD e SSCANF D07Xwqb
    [Tutorial] Descomplicando o ZCMD e SSCANF Yjab9HN

      Data/hora atual: Qui 9 maio 2024 - 10:36