Chat


Conhecimento geral


    
Olá. Estou Cueball (muitas vezes alias em IRC como "Pokeball [NOT_AFK] ', ou algo similar (qualquer coisa com' [NOT_AFK] 'em que é me:))) e este guia vai lhe ensinar como fazer uma administração simples filterscript que trabalhar com todas as versões do SA: MP v0.2 (IE: 0.2 .*).Vou começar este tutorial, afirmando que será necessário ter algum conhecimento e experiência anterior com SAMP scripting peão. Este guia será muito em profundidade, com o objectivo de ter você a entender todas as funções utilizadas, e como esse espelho filterscript administração se com apenas um olhar descontraído sobre o meu trabalho. Recomendo a leitura do seguinte, pois sem estes, você provavelmente irá perder de vista o nosso objetivo, e se tornar muito confuso: Avançados controles de servidor Noções básicas de scripts Funções Scripting Callbacks Scripting

        
Estes são uma neccessity absoluto se quiser ter alguma esperança de entendimento deste guia. Eu serei reffering a eles, muitas vezes, por isso, se você ainda não tiver lê-los, faça isso agora! [Editar] Ficando Penhorado

        
Ok, vamos começar esse script ao abrir um novo documento no PAWNO. O local padrão para isso é: 

C: \ Program Files \ Rockstar Games \ GTA San Andreas \ SAMP \ 
        Esta será a que me refiro quando digo o "local do servidor ', então se isso não é correto no seu caso, basta substituir o meu local de servidor para o seu.
        
Olhar para dentro da pasta chamada 'PAWNO "e abra" pawno.exe ". O programa chamado "PAWNO 'vai aparecer, e você terá uma página em branco com algumas funções em uma barra de rolagem para a direita. Este ainda não é um script, como documentos ativos não estão abertas. Para abrir uma, basta clicar em 'Arquivo' botão, e depois em 'New Ctrl + N' opção. (Ou, basta clicar no botão "nova página" que se parece com um pouco de papel em branco).
        
Sua página em branco agora tem um monte de escrever sobre ele, e pode ser um pouco confuso. Depois de ler as páginas listadas acima, você saberá que aqueles que, como 'OnFilterScriptInit pública () "são callbacks, e também que aqueles que, como' SetGameModeText (" Script em branco ")," são funções. Você pode começar por eliminar tudo na página fazendo "Right Click> Selecionar tudo 'e depois pressionando a tecla' backspace 'chave.
        
Ok, temos agora começou o script, então vamos continuar.
        
Em primeiro lugar adicione as seguintes linhas para o topo do seu script: 
# Include <a_samp> # Include <dini> # Include <dutils> 
        Estes informam o script para incluir "a_samp.inc" e "dini.inc", que estão localizados dentro da pasta do servidor a sua localização "PAWNO ', e depois dentro' include 'pasta. Clicando no 'compilar' botão (Método 1: Build> Compile Método 2:.. Pressionando a tecla 'F5') irá agora pedir-lhe para salvar seu script admin novo. Eu recomendo chamando-o de algo sob cerca de 7 caracteres, para evitar erros e problemas renomear irritante que pode ocorrer mais tarde. Chamei meu novo script "admin", e salvo em sua pasta local do servidor "filterscripts".
        
Ok, com o script salvo, uma caixa aparecerá. Este é o compilador, e verifica o roteiro de erros e avisos desagradáveis ​​que vai impedir o nosso roteiro de trabalho. Você deve receber o seguinte erro dentro do compilador: 
C: \ Program Files \ Rockstar Games \ GTA San Andreas \ SAMP \ filterscripts \ admin.pwn (2): 100 erro fatal: não é possível ler do arquivo: "dini"   Aborted.Pawn compilação compilador 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase     Um erro. 
        Isso significa que temos um problema já, e que o compilador não poderia ler o arquivo "dini.inc" que está dentro da pasta 'PAWNO \ include'.Isto é provavelmente devido ao fato de que você não tem o arquivo. Para corrigir isso, basta fazer o download desses arquivos a partir daqui e colocá-los dentro de seu servidor de localização de 'PAWNO \ include' pasta: Dini Dutils
        
Agora que eles estão lá, compilar mais uma vez, e você deve obter esta dentro do seu compilador: 
Compilador Pawn 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase 
        Parabéns, seu script tem apenas compilado corretamente, e tiver concluído o primeiro passo para o nosso grande, mas muito simples, a administração filterscript. [Editar] O início Script

        
Agora, vamos definir um até algumas coisas que fará com que nosso script muito mais fácil de usar e entender. Vamos começar por definir algumas coisas.
        
Adicione o seguinte define debaixo de seu "# include" linhas: 
# Define filterscript # If filterscript definido # Define dcmd (1%, 2%, 3%) if ((strcmp ((3%) [1], # 1%, é verdade, (2%)) == 0) & & ((((% 3) [ (2%) + 1] == 0) & & (dcmd_ 1% (playerid, "")))||(((% 3) [(2%) + 1] == 32) & & (dcmd_ 1% ( playerid, (3%) [(2%) + 2 ]))))) um retorno # Define COLOUR_GREEN 0x33AA33AA # Define 0xAA3333AA COLOUR_RED # Define COLOUR_YELLOW 0xFFFF00AA # Define COLOUR_LIGHTBLUE 0x33CCFFAA # Define COLOUR_ORANGE 0xFF9900AA   # Define PlayerFile "AdminScript / Users /% s.ini" # Define SettingFile "AdminScript / Configurações / MainSettings.ini" # Define arquivodecomandos "AdminScript / Configurações / Commands.ini" 
        Estes, basicamente, definir o nosso roteiro nova administração para ser um filterscript, que afeta a maneira como as coisas funcionam. O "# if defined filterscript" verifica se a linha de script é um filterscript e se assim for, faz todo o código até encontrar um "# endif". Definem também possivelmente a parte mais importante do nosso script, "dcmd", que irá nos ajudar com nossos comandos que ainda estão a ser escrito.
        
Explicando o conceito de "dcmd 'para um novo scripter com pouco conhecimento de SAMP scripting peão é inútil, por isso basta ter a minha palavra sobre isso, que essa linha é muito útil e muito necessária para o nosso script de administração.
        
As outras linhas depois de apenas definir 5 cores em formato hexadecimal, o que fará exibição de mensagens para os jogadores em diferentes cores muito mais fácil.
        
A final 3 linhas definir locais nosso arquivo. Alterar estas para atender o servidor, mas você precisa ter essas pastas dentro da pasta do servidor a sua localização "scriptfiles ': 
"AdminScript / Users" "AdminScript / Settings" 
        Se você não fizer isso, seu servidor irá falhar, e que seria ruim, então eu recomendo deixá-las como elas são, e de criar as pastas agora.
        
Compile seu script agora e você deve começar este em seu compilador: 
C: \ Program Files \ Rockstar Games \ GTA San Andreas \ SAMP \ filterscripts \ admin.pwn (19): error 001: token esperado: "# endif", mas achou "o fim-de-arquivo" Compilador Pawn 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase     Um erro. 
        Como mencionado antes, usando o "# if" requer uma "# endif" declaração, mas não podemos acrescentar que para o nosso script no momento.
        
Em vez disso, usando o nosso conhecimento de callbacks, podemos usar o seguinte: "public OnFilterScriptInit ()". Isto significa que quando o filterscript administrador é executado em nosso servidor, este pedaço de código será executado. Adicione as seguintes linhas ao seu script: 
OnFilterScriptInit pública () 
    {
 

  print ("\ n ****************************************"); print ("* * filterscript Administração pelo seu nome aqui"); imprimir ("**************************************** \ n ");  return 1;
    

        
        Obviamente, substitua "seu nome aqui" com seu nome real / SAMP, e clique em compile. Você deve obter isso em seu compilador mais uma vez.
Compilador Pawn 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase 
        NOTA: O "# endif" declaração foi usado, e isso retirou o erro anterior sobre não encontrar o "# endif".
        
Além disso, o script de administração serão impressas no console do servidor (usando a função print () nós aprendemos sobre o antes) uma mensagem pouco amigável dizendo "filterscript Administração por Cueball ~ ~" cercado por asteriks (substitua "~ Cueball ~" com o seu nome) Agora temos um script de administração de trabalho, que tanto compila sem erros, e trabalha com o console do servidor em si. No entanto, o script é inútil, pois não fiz nada que afetará o usuário. [Editar] Enumeração

        
Vamos começar o progresso de codificação. Muitos dos tutoriais sobre como fazer um trabalho com nível de script de administração como o principal objectivo da sua escrita, mas o nosso será muito melhor, e tem muito mais opções, e não apenas mostrar-lhe como definir o nível de um jogador.
        
Vamos agora usar o recurso de enumeração que é codificado em peão em si. De ler sobre ele em Scripting Basics, sabemos que o uso de enumeração nos permite armazenar grandes quantidades de dados dentro de uma célula de um array, ao invés de muitos separados matriz. Comece por adicionar este debaixo "# endif" linha: enum 



{PLAYER_MAIN 
PLAYER_NAME [MAX_PLAYER_NAME], PLAYER_IP [16], PLAYER_REGGED, PLAYER_PASS, PLAYER_LOGGED, PLAYER_LEVEL, PLAYER_WIRED, PLAYER_JAILED 
        A enumeração que acabamos de fazer armazena 8 bits de dados diferentes dentro de uma peça, chamada "PLAYER_MAIN '. Você pode ver que agora temos uma célula para armazenar o nome do jogador (que é muito mais fácil do que criar constantemente variável e usando GetPlayerName () após cada callback / comando). Temos também um lugar para armazenar o endereço IP do jogador, se eles são registrados, login, sua senha, seu nível, e se eles são com fio (sem som) e preso. Desta forma, podemos acompanhar o progresso de todos, basta verificar que dentro do seu pedaço de código.
        
Mas espere um segundo, como isso foi apenas uma enumeração, nenhuma nova variável foi criado ainda para incluí-lo. Nós podemos consertar isso adicionando esta linha abaixo nossa última linha: nova gPlayerInfo [MAX_PLAYERS] [PLAYER_MAIN];
        
Ok, que acabamos de fazer um array, com 500 (do tamanho de 'MAX_PLAYERS') diferentes células e cada célula armazenar a enumeração que fizemos. Isso significa que para cada jogador em seu servidor, podemos dizer o seu nível, nome, IP, etc, marcando-a com a variável 'gPlayerInfo'.
        
Compile o script e você não deve ter erros, mas um aviso dizendo isto:
C: \ PROGRA ~ 1 \ ROCKST ~ 1 \ GTASAN ~ 1 \ Samp \ FILTRO ~ 1 \ admin.pwn (42): Aviso 203: símbolo nunca é usado: "gPlayerInfo" Compilador Pawn 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase 
 
  
Um aviso.
        
Ignore isso por enquanto, já que é apenas a dizer-nos que a nossa matriz não tem sido usado ainda. Isso vai mudar assim que começar a acessar e armazenar dados dentro dele. [Editar] Acessando nossa matriz

        
Com o acima concluída, estamos prontos para começar a armazenar dados dentro de nosso novo array. Adicione as seguintes linhas sob nossa variável enumerados: OnPlayerConnect pública (playerid) 
 novo arquivo [100] Nome, [MAX_PLAYER_NAME], IP [16];
        
        GetPlayerName (playerid, nome, sizeof (nome));
        
        GetPlayerIp (playerid, Ip, sizeof (Ip));
        
        formato (arquivo, sizeof (arquivo), PlayerFile, Nome);
  

if (! dini_Exists (arquivo))         dini_Create (arquivo); dini_Set (arquivo, "Nome", nome); dini_Set (arquivo, "IP", Ip); dini_IntSet (arquivo, "registrados", -1); dini_IntSet (arquivo, "Password", 0); dini_IntSet (arquivo, "Level", 0); dini_IntSet (arquivo, "Wired", 0); dini_IntSet (arquivo, "Preso", 0); SendClientMessage (playerid, COLOUR_ORANGE, "Seu nome de usuário não é reconhecido neste servidor por favor / registar-se para continuar.."); strcat (gPlayerInfo [playerid] [PLAYER_NAME], dini_Get (arquivo, "Nome"));strcat (gPlayerInfo [playerid] [PLAYER_IP], dini_Get (arquivo, "IP")); gPlayerInfo [playerid] [PLAYER_REGGED] = dini_Int (arquivo, "Registrado"); gPlayerInfo [playerid] [PLAYER_PASS] = dini_Int (arquivo, "Senha"); gPlayerInfo [playerid] [PLAYER_LEVEL] = dini_Int (arquivo, "Level"); gPlayerInfo [playerid] [PLAYER_WIRED] = dini_Int (arquivo, "Wired"); gPlayerInfo [playerid] [PLAYER_JAILED] = dini_Int (arquivo, "preso"); if (gPlayerInfo [playerid] [PLAYER_REGGED] == 0) SendClientMessage (playerid, COLOUR_ORANGE: "Você é nome de usuário é reconhecido no servidor, mas ainda não se inscreveu por favor / registar-se para continuar.."); else if (gPlayerInfo [playerid] [PLAYER_REGGED] == 1) SendClientMessage (playerid, COLOUR_ORANGE: "Você é nome de usuário é reconhecido no servidor Por favor / login para continuar..");         gPlayerInfo [playerid] [PLAYER_REGGED] = 0; return 1; 
        Que é um grande pedaço de código para digerir, por isso vou tentar explicá-lo da melhor forma que posso: Quando um jogador se conecta, o servidor retreives seu nome e endereço ip, e armazena o seu nome em uma string chamado 'arquivo'. Então, se o arquivo não existir, ou seja: ele nunca foi em seu servidor (lembre-se que o arquivo está dentro da pasta "Usuários" do "AdminScript 'pasta dentro da pasta a sua localização do servidor" scriptfiles'), o servidor cria- usando nossas funções * dini_, e escreve as informações necessáriaspara ele. Ele também recebe uma mensagem em laranja (graças à COLOUR_ORANGE definir fizemos anteriormente) dizendo-lhe para "/ register". Você vai notar que a linha "registrados" está ajustado para escrevê-lo como '-1'. Isso é para que ele não vê duas mensagens, quando ele se conecta. Isso vai ser explicado em alguns momentos. Em seguida, usamos o strcat () função para armazenar seu nome em nossa matriz "gPlayerInfo ', e nós recebemos o seu nome de arquivo do jogador. Fazemos o mesmo com seu endereço IP, mais uma vez, recebendo-a de seu arquivo. As próximas linhas são apenas números, não strings, portanto podemos apenas use um sinal de igual (=) para armazenar os dados do arquivo em várias células (Ele é registrado? Sua senha, etc.) Usando este método, se o jogador foi preso pela última vez ele estava em seu servidor, ele vai continuar a sê-lo quando ele gera (este será roteirizado em breve). As próximas 3 linhas antes da última cinta curly verificar se ele tem conectado antes (comparando com a nossa "gPlayerInfo ' variável) ou se tem registado a sua conta (será roteirizado mais tarde) e envia a mensagem correspondente a ele. Então, nós temos certeza que quando ele se conecta ao lado (e ele não foi registrado até o momento), ele vai desencadear esta se a linha: if (gPlayerInfo [playerid] [PLAYER_REGGED] == 0) SendClientMessage (playerid, COLOUR_ORANGE: "Você é nome de usuário é reconhecido no servidor, mas ainda não se inscreveu por favor / registar-se para continuar.."); Finalmente, "return 1; 'para dizer o script eo servidor que aquele pedaço de código é mais.
        
Compile seu script e você deve receber nenhum erro ou aviso.Parabéns, estamos um passo mais perto para a nossa muito grande, mas simples script de administração. [Editar] O problema seria-Be

        
Agora, já temos um problema invisível. Se um jogador faz login com o mesmo id como, por exemplo, um administrador que acabou de sair, o seu nível seria o mesmo, como com sua senha, etc A forma como criámos o nosso script para ler e armazenar em nossa matriz remove essa problema, mas, é uma boa prática para entrar, uma vez que evita a ocorrência de outros problemas. Adicione as seguintes linhas abaixo da cinta curly última: pública OnPlayerDisconnect (playerid, razão) novo arquivo [100];
        
formato (arquivo, sizeof (arquivo), PlayerFile, gPlayerInfo [playerid] [PLAYER_NAME]); dini_Set (arquivo, "Nome", gPlayerInfo [playerid] [PLAYER_NAME]); dini_Set (arquivo, "IP", gPlayerInfo [playerid] [PLAYER_IP]); dini_IntSet (arquivo, "registrados", gPlayerInfo [playerid] [PLAYER_REGGED]); dini_IntSet (arquivo, "Password", gPlayerInfo [playerid] [PLAYER_PASS]); dini_IntSet (arquivo, "Level", gPlayerInfo [playerid] [PLAYER_LEVEL]); dini_IntSet (arquivo, "Wired", gPlayerInfo [playerid] [PLAYER_WIRED]); dini_IntSet (arquivo, "Preso", gPlayerInfo [playerid] [PLAYER_JAILED]); gPlayerInfo [playerid] [PLAYER_NAME] = 0; gPlayerInfo [playerid] [PLAYER_IP] = 0; gPlayerInfo [playerid] [PLAYER_REGGED] = 0; gPlayerInfo [playerid] [PLAYER_LOGGED] = 0; gPlayerInfo [playerid] [PLAYER_PASS] = 0; gPlayerInfo [playerid] [PLAYER_LEVEL] = 0; gPlayerInfo [playerid] [PLAYER_WIRED] = 0; gPlayerInfo [playerid] [PLAYER_JAILED] = 0;
    
return 1; }
        
A primeira linha faz o mesmo que em OnPlayerConnect (), mas sem a necessidade de usar GetPlayerName (), como já chegado a este, e guardou dentro de nosso array (fazendo as coisas mais fáceis, e muito mais eficiente). Os próximos sete linhas armazenar as informações de nossa matriz em um arquivo.
        
Os próximos nove linhas de células do nosso conjunto de matriz de volta a 0, que como dito antes, é uma boa prática para entrar, uma vez que evita a ocorrência de erros, e também é muito útil. Em seguida, "return 1; 'para dizer o script que aquele pedaço de código é mais.
        
Compilar o script, e você deve receber nenhum erro ou aviso. Temos agora os requisitos para o nosso script de administração, e ter um sistema de trabalho para verificar, o acesso, remover e confiar, que vai cuidar de si mesmo. [Editar] O início Comandos

        
Ok, agora a parte do script que eu tenho certeza que você tem esperado, por isso, se você leu todas as seções anteriores, parabéns por terem chegado tão longe. Se não, faça isso agora!
        
Adicione as seguintes linhas debaixo de seu script: pública OnPlayerCommandText (playerid, cmdtext []) {
    
dcmd (registo, 8, cmdtext);
    
dcmd (login, 5, cmdtext);
    
dcmd (logout, 6, cmdtext);
    
dcmd (senha, 8, cmdtext);
 
    
return 0; }
        
Basicamente, este callback é chamado sempre que um jogador tipos de uma mensagem, e é o primeiro caractere '/' (ou seja: um comando). Eu não estarei explicando como dcmd () funciona, mas estes são os princípios básicos do mesmo: O primeiro parâmetro é o nome do comando. O segundo parâmetro é o comprimento do comando (número de caracteres exclusing o'/'). O parâmetro final é a string para comparar com.
        
Como dito, não vou estar explicando em grande detalhe como dcmd () funciona, mas você deve ler sobre ele em fóruns SA-MP é.
        
O "return 0;" envia o 'SERVER: Comando desconhecido "mensagem para todos os comandos e espontânea. Você deve sempre retornar 0 em todas as chamadas OnPlayerCommandText você escreve, ou então você pode muitas vezes causam comandos quebrado. [Editar] Gestão de Contas
        
Aqui nós temos os nossos quatro comandos para registro e gerenciamento de contas: [Editar] Registrar
        
Copie o seguinte em nosso script, embaixo do nosso última linha: dcmd_register (playerid, params []) {
    
if (gPlayerInfo [playerid] [PLAYER_REGGED] == 1) retorno SendClientMessage (playerid, COLOUR_ORANGE, "ERRO: Você já registrados!");
    
else if (! params [0]) retorno SendClientMessage (playerid, COLOUR_ORANGE, "Uso: / register [password]");
    
/ * Else if (strlen (params) <gSettings [PASS_MIN] | | strlen (params)> gSettings [PASS_MAX])
    
nova string [128];
        
format (string, sizeof (string), "ERRO: A senha deve estar entre% d% d caracteres e longo", gSettings [PASS_MIN], gSettings [PASS_MAX]); retorno SendClientMessage (playerid, COLOUR_ORANGE, string);
    
} * /
    
outro
    
nova password = num_hash (params); gPlayerInfo [playerid] [PLAYER_PASS] password =; gPlayerInfo [playerid] [PLAYER_REGGED] = 1;
        
gPlayerInfo [playerid] [PLAYER_LOGGED] = 1; GetPlayerIp (playerid, gPlayerInfo [playerid] [PLAYER_IP], 16); new string [128]; format (string, sizeof (string), "Você se registrou com sucesso a sua conta com a senha \ '% s \' Você foi automaticamente fez.", params); retorno SendClientMessage (playerid, COLOUR_LIGHTBLUE, string);
    
}
        
Agora, vamos passar por esse comando: Primeiro vamos verificar se o jogador já registrou, comparando com o nosso array 'gPlayerInfo'. Se ele tem, enviamos-lhe uma mensagem de erro, e porque usamos 'return SendClientMessage', duas coisas acontecem: O comando termina nesse ponto. Ele não recebe o "SERVER: Comando desconhecido" mensagem. Em seguida, verifique se ele não fornecer uma senha, usando '! Params [0]'. params [0] é o primeiro caractere da senha, por isso, se ele não tem (daí o '!') deu o primeiro caractere da senha, enviamos-lhe uma mensagem dizendo-lhe como usar o comando corretamente. Mais uma vez, 'return SendClientMessage' para que ele não receber o 'SERVER: Comando desconhecido "mensagem. Você vai notar a '/ *' e '* /' antes e depois da próxima 'else if'. Isto significa que temos comentado que a seção. O script / server ignora todas as linhas comentadas, para que possamos escrever o código que irá causar problemas sem ter que se preocupar. Tenho comentado nesta seção porque não fizemos o nosso 'gSettings' array ainda. Quando fazemos criá-lo, vou aconselhá-lo a descomente esta seção. Se você não entendeu isso ainda, não se preocupe, pois tudo será explicado logo que fazemos a nossa disposição "gSettings '. Como esta seção seguinte é a última peça e final para este comando para uso, nós utilizamos a declaração 'else' aqui, ao contrário de 'else if'. Para esta seção para ser disparado, o jogador não deve ser registrada, bem como ter fornecido uma senha. Vamos verificar o que fazer a seguir: Criamos uma nova variável (inteiro) chamada 'password' e atribuí-la a função 'num_hash ()' que podemos encontrar em nosso arquivo dutils.inc. Vamos definir o 'PLAYER_PASS' célula do nosso 'gPlayerInfo [playerid]' array de 'password'. A função 'num_hash ()' simplesmente converte a string informada (neste caso, nossa senha), para um valor numerival, com o qual em seguida, coloque-se ao nosso célula matriz. Vamos definir o celular "PLAYER_REGGED 'do nosso' gPlayerInfo [playerid] 'array para 1. Isso é para que se "/ register [password]", ele tipos novamente, ele irá acionar esta linha: if (gPlayerInfo [playerid] [PLAYER_REGGED] == 1) retorno SendClientMessage (playerid, COLOUR_ORANGE, "ERRO: Você já registrados!"); Vamos definir o celular "PLAYER_LOGGED 'do nosso' gPlayerInfo [playerid] 'array para 1, assim, registrá-las, e permitindo-lhes utilizar os nossos comandos que estão ainda a ser programado. Vamos também verificar essa variável quando nós roteiro nosso '/ login "e" / logout "comandos, usando uma verificação semelhante como acontece com este comando. Em seguida, obter o endereço ip do jogador usando o GetPlayerIp () função, e armazená-lo dentro de células nossa 'PLAYER_IP' de 'gPlayerInfo [playerid]' array. Vamos verificar isso mais tarde, por isso é necessário para armazenar esta informação agora. Agora vamos fazer três coisas novas: Criamos uma nova seqüência chamada 'string', e declará-la a ter um tamanho máximo (caracteres no máximo que podemos usar no mesmo) de 128. Em seguida, formato de nossa string usando o formato () função. Note que temos usado um caractere de escape para os nossos personagens aspas simples, e temos também usou um formato de seqüência especificador ('% s') o que significa que estamos indo para substituir essa peça com uma string que será o próximo parâmetro do formato () função. Leia sobre eles no format () página. O que estamos inserindo os personagens é que o jogador digitou após "/ register". Finalmente, "retorno SendClientMessage ', significando que esta é a parte final do código, e também enviá-lo a string recém-formatado em azul claro (graças à nossa" COLOUR_LIGHTBLUE' define).
        
Que era um monte de código de digerir, por isso, se você não entender, leia-o novamente agora! [Editar] Login
        
Copie esse próximo comando embaixo do nosso comando registrar recém-scripted: dcmd_login (playerid, params []) {
    
if (gPlayerInfo [playerid] [PLAYER_REGGED]! = 1) retorno SendClientMessage (playerid, COLOUR_ORANGE, "ERRO:. Você deve registrar primeiro a fazer isso Use / register [senha] para registrar e login");
    
else if (gPlayerInfo [playerid] [PLAYER_LOGGED] == 1) retorno SendClientMessage (playerid, COLOUR_ORANGE, "ERRO:. Você já está logado");
    
else if (! params [0]) retorno SendClientMessage (playerid, COLOUR_ORANGE, "Uso: / login [password]");
    
outro
    
nova password = num_hash (params); if (gPlayerInfo [playerid] [PLAYER_PASS] == senha) gPlayerInfo [playerid] [PLAYER_LOGGED] = 1;
            
GetPlayerIp (playerid, gPlayerInfo [playerid] [PLAYER_IP], 16); retorno SendClientMessage (playerid, COLOUR_LIGHTBLUE: "Você tem sucesso conectado à sua conta."); outro retorno SendClientMessage (playerid, COLOUR_ORANGE, "ERRO:. senha incorreta");
    
Agora, mais uma vez, vou guiá-lo através do processo de codificação, para explicar o que acabamos de fazer: Usando o mesmo método como acima (no nosso comando register), vamos verificar se o jogador não foi registrado. Se isso for verdade, mais uma vez 'return SendClientMessage', e deixá-lo saber que ele deve se registrar primeiro. Em seguida, verificar se o jogador já fez Se isso for verdade, mais uma vez 'return SendClientMessage', e deixá-lo saber que ele já fez Em seguida, vamos verificar se ele forneceu uma senha usando a mesma verificação que fizemos para o comando registo. Se ele não fez nada do tipo após '/ register ", ela irá desencadear esta mensagem, e irá parar o comando e dizer-lhe como usar corretamente o comando. Se nenhuma das seções acima foram desencadeadas, nos movemos para a seção final do código usando a nossa declaração de 'else'. Dentro dele, acontece o seguinte: Ficamos com a criptografar a senha que o jogador digitou, utilizando o nosso 'num_hash ()' função (assim como fizemos no nosso comando register) e atribuí-lo à recém-criada variável 'password'. Nós verificamos 'password' a variável contra a nossa 'PLAYER_PASS' célula do nosso 'gPlayerInfo [playerid]', e se eles são os mesmos, nós fazemos o seguinte: Vamos definir o celular "PLAYER_LOGGED 'do nosso' gPlayerInfo [playerid] 'array para 1, assim logging-los dentro Em seguida, obter o endereço ip do jogador usando o GetPlayerIp () função, e armazená-lo dentro de células nossa 'PLAYER_IP' de 'gPlayerInfo [playerid]' array. Vamos verificar isso mais tarde, por isso é necessário para armazenar esta informação agora. Finalmente dizer ao jogador que se identificou com o nosso "retorno SendClientMessage" método (terminando assim o comando). Utilizando a instrução 'else', esta seção do código é acionado se o acima 'if' não era válido. Para acionar esta seção, a senha não deve ser correto, por isso usamos o bom e velho 'return SendClientMessage "método para finalizar o comando, e dizer ao jogador que sua senha especificada está incorreta.
        
Mais uma vez, uma explicação importante para algo relativamente simples. Esperamos que você tenha entendido tudo até agora, então se você tem, vá buscar algo para comer, e ter uma pequena pausa, pois as chances são, você vai precisar dele. Além disso, se você não entendeu este comando, lê-lo novamente! [Editar] Sair dcmd_logout (playerid, params []) # Pragma params não utilizados
    
if (gPlayerInfo [playerid] [PLAYER_REGGED]! = 1) retorno SendClientMessage (playerid, COLOUR_ORANGE, "ERRO: Você deve se registrar primeiro a fazer isso Use / register [senha] para se registrar!.");
    
else if (gPlayerInfo [playerid] [PLAYER_LOGGED] == 0) retorno SendClientMessage (playerid, COLOUR_ORANGE, "ERRO:. Você já está autenticado-out");
    
outro
    
gPlayerInfo [playerid] [PLAYER_LOGGED] = 0; retorno SendClientMessage (playerid, COLOUR_LIGHTBLUE: "Você tem sucesso desconectado de sua conta.");
    
}
        
Este comando é muito mais curto e mais fácil de entender, de modo que este explanantion não será tão grande. Nós não vamos estar usando a variável 'params' neste comando, de modo a impedir um "aviso 203: símbolo nunca é usado:" params "'aviso, usamos' # pragma unused 'sobre a variável params. A seguir, verifique se o jogador não foi registrado. Se assim for, nós "retorno SendClientMessage 'mais uma vez, e deixá-lo saber que ele deve se registrar primeiro. A seguir, verifique se o jogador não fez o acesso Se for verdade, nós usamos o método "retorno SendClientMessage 'e dizer-lhe que ele já desconectado. A seção final deste comando significa que podemos usar a instrução 'else'.Para chegar a este ponto, o jogador deve ter: Registrados. Fez o Vamos definir o celular "PLAYER_LOGGED 'do nosso' gPlayerInfo [playerid] 'array a 0, assim, registrá-las para fora. Nós 'return SendClientMessage' o jogador, deixando-o saber que foi registado com sucesso.
        
Relativamente fácil de entender, mas se você não fez, lê-lo novamente![Editar] Senha dcmd_password (playerid, params []) {
    
if (gPlayerInfo [playerid] [PLAYER_REGGED]! = 1)
        
retorno SendClientMessage (playerid, COLOUR_ORANGE, "ERRO:. Você deve registrar primeiro a fazer isso Use / register [senha] para registrar e login");
    
else if (gPlayerInfo [playerid] [PLAYER_LOGGED] == 0) retorno SendClientMessage (playerid, COLOUR_ORANGE, "ERRO:. Você deve estar logado para fazer isso Use / login [senha] para entrar");
    
outro
    
tmp novo [30], tmp2 [30], índice; tmp = strtok (params, index); if (! strlen (tmp))
            
retorno SendClientMessage (playerid, COLOUR_ORANGE, "Uso: / password [senha] [nova senha]"); tmp2 = strtok (params, index); if (! strlen (tmp2)) retorno SendClientMessage (playerid, COLOUR_ORANGE, "Uso: / password [senha] [nova senha]");
        
nova oldpassword = num_hash (tmp), newpassword = num_hash (tmp2); if (gPlayerInfo [playerid] [PLAYER_PASS] == oldpassword) if (oldpassword == newpassword) retorno SendClientMessage (playerid, COLOUR_ORANGE, "ERRO: Sua senha antiga não pode ser o mesmo que sua nova senha.");
            
/ * Else if (strlen (tmp2) <gSettings [PASS_MIN] | | strlen (tmp2)> gSettings [PASS_MAX])
            
{
                
new string [100]; format (string, sizeof (string), "ERRO: Sua nova senha deve estar entre% d% d caracteres e longo", gSettings [PASS_MIN], gSettings [PASS_MAX]);
                
retorno SendClientMessage (playerid, COLOUR_ORANGE, string);
            
} * / gPlayerInfo [playerid] [PLAYER_PASS] = newpassword; new string [128]; format (string, sizeof (string), "Você tem alterado com sucesso sua senha de \"% s \ 'para \'% s \ '. "tmp, tmp2); retorno SendClientMessage (playerid, COLOUR_LIGHTBLUE, string); outro retorno SendClientMessage (playerid, COLOUR_ORANGE, "ERRO:. senha incorreta");
    
}
        
De longe o mais difícil de comando ainda, então essa explicação vai ser grande. Primeiro vamos verificar se o jogador não foi registrado. Usando a estrutura "e não" de controle, podemos enviar a mensagem com o nosso método confiável 'return SendClientMessage', avisando-o que ele deve primeiro registrar. Então, vamos verificar se o jogador entrou no jogo ou não, e se for o último, enviamos-lhe uma mensagem dizendo-lhe para fazê-lo. Como este é o caminho final para o comando a tomar, usamos a declaração de 'else': Criamos três novas variáveis, duas das quais são strings, eo terceiro é um inteiro. As cordas têm um tamanho máximo de 30 caracteres, e estes serão usados ​​para armazenar o que o jogador depois de tipos '/ password'.Como o nosso comando é configurado com dois pedaços de informação para agarrar ('password / [senha] [nova senha]'), nós estaremos usando strtok (). Usamos a função strtok () para atribuir a [password] parte do comando para 'tmp' nossa string. Em seguida, verifique se o tamanho da string é 0 (usando o 'não' estrutura de controle), e se for 0 (ou seja: ele não forneceu sua senha atual), podemos dizer-lhe o uso correto do comando. Em seguida, fazer a mesma coisa com a [nova senha] parte do comando.Depois de atribuí-la a nosso 'tmp2' string, vamos verificar o comprimento e, como antes, se for 0, mais uma vez dizer-lhe o uso correto do comando. Agora fazemos duas novas variáveis, ambos inteiros, e fazer cada um o número hash de nossas informações ([senha] e [nova senha]), utilizando o num_hash () de comando que foi incluído com a nossa dutils.inc incluir. Comando Agora vamos verificar se a senha jogadores atuais (usando nosso array 'gPlayerInfo') é o mesmo que o que ele digitou no jogo. Se for, nós executamos o seguinte: Vamos verificar se a nova senha que ele digitou é exatamente o mesmo (porque eles são ambos inteiros agora, não precisamos usar strcmp () para compará-los). Se eles são os mesmos (isto é: ele digitou este por exemplo: '/ Cueball Cueball password'), dizemos que ele não pode mudar sua senha para o mesmo que era antes. A próxima peça é comentada, e isso vai ficar assim até que nós criamos o nosso "gSettings 'array. Esta peça comentou garante que sua nova senha não é muito curto ou muito longo, mas deixá-lo descomentada para agora.Vou aconselhá-lo a fazê-lo quando nós criamos o array. Nós conjunto de células "PLAYER_PASS" os jogadores do array 'gPlayerInfo' para a nova senha. Vamos agora criar uma nova seqüência e formatá-lo. Esta é uma função muito útil que vai ajudar a tornar a nossa cadeia de mostrar o seu leitor de senha antiga, bem como a sua nova senha. Neste tutorial não vou explicar como usar format (), mas vou dar-lhe estes links: format () Pastebin Y_Less de Finalmente 'return SendClientMessage' e enviar a string (após a formatação-lo com senhas ambos os seus antigos e novos), em azul claro (graças à "COLOUR_LIGHTBLUE 'define). Se a senha que ele digitou na [senha] pedaço de o comando não é o mesmo que a sua senha atual (ou seja: sua senha atual é 'Cueball' e ele 'Violino' tipos), dizemos que ele use sua senha correta.
        
Outro comando feito (sem dúvida o mais difícil até agora, e possivelmente durante todo o tutorial todo), eu sugiro que você lê-lo novamente caso ele não fazia nenhum sentido. Você vai precisar ler sobre format (), pois é uma função essencial, e será usado em quase todos os scripts que você faz / uso. Bem feito em vir até aqui. [Editar] Criar e armazenar nossas configurações

        
Agora é o momento para criar espaço de armazenamento para nosso meio. Isto será feito utilizando os arquivos e arrays, no exatamente da mesma maneira que criamos nossos arquivos de jogador e enumerações. 

Comentários