cailir

Salvar armas do player - Comentado

Sep 1st, 2021 (edited)
312
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2. * Créditos:
  3. * Post Oficial em SSGamers - https://scriptsamp.forumeiros.com/t15975-sistema-de-salvar-armas-do-player-automatico
  4. * Código criado por zGabriel ( https://scriptsamp.forumeiros.com/u10020 )
  5. * Código comentado por cailir ( https://scriptsamp.forumeiros.com/u8995 ) - Para SSGamers ( https://scriptsamp.forumeiros.com )
  6. * Não redistribua este trabalho sem incluir estes créditos!
  7. * Várias informações sobre os comentários encontram-se no final do arquivo, junto com links de referência.
  8. *
  9. * Os valores entre colchetes ("[" e "]") são utilizados na referência, encontrada no final do arquivo.
  10. */
  11.  
  12. /*
  13. * Não é necessário manter as notas e nem esta mensagem de licença. Apenas mantenha o primeiro bloco de comentários.
  14. * Licença no final do arquivo, nas notas deixadas por cailir ( https://scriptsamp.forumeiros.com/u8995 ).
  15. */
  16.  
  17.  
  18. public OnPlayerSpawn(playerid) //A funcão OnPlayerSpawn é chamada sempre que o player nasce, ou seja, após morrer e o jogador aparecer novamente ou após conectar no servidor [1]
  19. {
  20.     new query[50], tquery[50]; //Criamos 2 variáveis para armazenar os valores
  21.     for (new i = 0; i <= 12; i++) //Utilizamos o for para pegar todas as armas dos jogadores, iniciando em 0 e indo até 12 (são 13 slots de armas no total) [2]
  22.     {
  23.         format(query, sizeof(query), "Arma%d", i), format(tquery, sizeof(tquery), "Municao%d", i); //Formatamos as variável query e tquery criadas acima como Arma%d e Municao%d, respectivamente ("%" indica que iremos utilizar uma variável neste local e "d" indica que iremos substituir por um inteiro) [3]
  24.         GivePlayerWeapon(playerid, DOF2_GetInt(GetPlayerAccount(playerid), query), DOF2_GetInt(GetPlayerAccount(playerid), tquery));//Entregamos a arma ao jogador de id "playerid" (o jogador que está spawnando), pegando os inteiros (ID da arma e valores de munição) com DOF2_GetInt [3] da pasta dos jogadores, que é obtida através da função GetPlayerAccount [4].
  25.     }
  26.     return 1; //Toda função padrão deve retornar 1 (true)
  27. }
  28.  
  29. public OnPlayerDisconnect(playerid, reason) //A função OnPlayerDisconnect irá ser chamada sempre que um jogador sair do servidor, sendo reason o motivo que o jogador desconectou [3]
  30. {
  31.     new weapons[13][2], query[50]; //Criamos 2 variáveis para armazenar os valores
  32.     for (new i = 0; i <= 12; i++) //Utilizamos o for para pegar todas as armas dos jogadores, iniciando em 0 e indo até 12 (são 13 slots de armas no total)
  33. {
  34.         GetPlayerWeaponData(playerid, i, weapons[i][0], weapons[i][1]); //A função GetPlayerWeaponData é utilizada para pegar a munição e o ID da arma no slot [5]
  35.  
  36.         format(query, sizeof(query), "Arma%d", i); //Formatamos as variável query criada acima como Arma%d ("%" indica que iremos utilizar uma variável neste local e "d" indica que iremos substituir por um inteiro) [3]
  37.         DOF2_SetInt(GetPlayerAccount(playerid), query, weapons[i][0]); // Utilizamos a função DOF2_SetInt para definir um valor em nosso arquivo, passando os parametros (Caminho do Arquivo), (Nome da variável), (Valor da variável). [6] [7]
  38.  
  39.         format(query, sizeof(query), "Municao%d", i); //Formatamos as variável query criada acima como Municao%d ("%" indica que iremos utilizar uma variável neste local e "d" indica que iremos substituir por um inteiro) [3]
  40.         DOF2_SetInt(GetPlayerAccount(playerid), query, weapons[i][1]); // Utilizamos a função DOF2_SetInt para definir um valor em nosso arquivo, passando os parametros (Caminho do Arquivo), (Nome da variável), (Valor da variável). [6] [7]
  41.         DOF2_SaveFile(); //Utilizamos a função DOF2_SaveFile para escrever o arquivo. [8]
  42.     }
  43.     return 1;
  44. }
  45.  
  46. stock GetPlayerAccount(playerid) //Uma stock é uma outra forma de definir funções [4]
  47. {
  48.     new file[128]; //Criamos a variável file para armazenar o nome do arquivo
  49.     format(file, sizeof(file), Pasta_Contas, PlayerName(playerid)); //Mudar a "Pasta_Contas" para pasta de contas do seu servidor! //Formatamos a variável file criada acima como Pasta_Contas [3] [7] [9]
  50.     return file; //Retornamos o caminho do arquivo [8]
  51. }
  52.  
  53. //Código abaixo adicionado por cailir ( https://scriptsamp.forumeiros.com/u8995 ) como correção do código base - Verifique se sua gamemode não possui esta função definida, já que é bem comum seu uso.
  54. forward PlayerName(playerid); //Uma forward é uma outra forma de definir funções [4.1]
  55. public PlayerName(playerid) { //Uma forward é uma outra forma de definir funções [4.1] [9]
  56.     new pname[MAX_PLAYER_NAME+1]; //Criamos a variável "pname" para armazenar o nome do jogador
  57.     GetPlayerName(playerid, pname, sizeof(pname)); //A função GetPlayerName é utilizada para pegar o nome do jogador [10]
  58.     return pname; //Retornamos o valor da variável "pname"
  59. }
  60.  
  61. /*
  62. * Anotações:
  63. * [1] - A função OnPlayerSpawn é padrão do sa-mp - Link Útil: https://team.sa-mp.com/wiki/OnPlayerSpawn_PT.html
  64.  
  65. * [2] - A função for é utilizado para loops, ao utilizar em seus parenteses, por exemplo:
  66. ** (new i = 0; i <= 12; i++)
  67. **      |        |       |-> Aumentamos a variável "i" em 1 a cada vez que rodar;
  68. **      |        |---------> Se a variável "i" for menor ou igual a 12 (O "12" pode ser qualquer número ou variavel que represente número);
  69. **      |------------------> Iniciamos a variável "i" com valor inicial 0;
  70.  
  71. * [3] - A função format é utilizada para inserar valores não-estaticos em variáveis, no formato de text (string), por exemplo:
  72. ** (textoPrincipal, sizeof(textoPrincipal), "String %s estatica", valor)
  73. **       |                   |                      |               |---> A variável que queremos definir no campo %s, pode-se utilizar mais de uma separando os valores por virgulas. [3.1];
  74. **       |                   |                      |-------------------> O texto base que será utilizado na substituição - Link Útil: https://team.sa-mp.com/wiki/Format_PT.html#Especificadores_de_formato [3.2];
  75. **       |                   |------------------------------------------> A função sizeof é utilizada para pegar o tamanho da variável que foi indicada - Link Útil: https://team.sa-mp.com/wiki/Keywords_Operators.html#sizeof (Disponível somente em inglês);
  76. **       |--------------------------------------------------------------> Este parametro é utilizado para indicar a variável que deve ter seu valor alterado pelo format - Link Útil: https://team.sa-mp.com/wiki/Format_PT.html ;
  77. **
  78. ** [3.1] - O uso de vários valores é indicado com vários %, conforme nos exemplos abaixo:
  79. *** [Ex] (textoPrincipal, sizeof(textoPrincipal), "String %s %s", valor, valorDois)
  80. *** No exemplo acima, os paramêtros no formato acima irão incluir um espaço entre os valores das váriaveis;
  81. *** [Ex] (textoPrincipal, sizeof(textoPrincipal), "String %s%s", valor, valorDois)
  82. *** No exemplo acima, os paramêtros no formato acima não irão incluir espaço entre os valores das váriaveis, colocando-as lado a lado;
  83. **
  84. ** [3.2] - Se um especificador de formato for utilizado de forma incorreta, não irá apresentar erros, e o valor será transformado para o tipo correto, por exemplo:
  85. *** [Ex] (textoPrincipal, sizeof(textoPrincipal), "String %s", variavelQueContemUmNumero)
  86. *** No exemplo acima, o valor da variável "variavelQueContemUmNumero" será transformado para string (%s), porém terá seu valor mostrado de forma incorreta;
  87.  
  88. * [4] - Uma stock é uma forma de definir funções, porém existem diferenças:
  89. ** [4.1] - A stock não retorna avisos de função não utilizada, e pode ser compilada contendo erros em sua sintaxe. Link Útil: ** AVISO: WIKI NÃO OFICIAL ** https://sampwiki.blast.hk/wiki/Function#Stock (Disponível somente em inglês);
  90. ** [4.2] - Uma function deve ser declarada antes, ou seja, é necessário utilizar a função "forward" ou "native" (no caso de funções definidas por plugins ou as padrões) antes de se tornarem válidas, e compilem sem erros. Link Útil: https://team.sa-mp.com/wiki/Public_functions.html#Forwarding (Disponível somente em inglês);
  91.  
  92. * [5] - A função GetPlayerWeaponData é utilizada para pegar as informações da arma do jogador (munição e ID da arma) [5.1] - Link Útil https://open.mp/docs/scripting/functions/GetPlayerWeaponData (Disponível somente em inglês);
  93. ** [5.1] - Armas antigas, ou seja, sem munição também são retornadas, caso o jogador não tenha pego outra arma no mesmo slot;
  94.  
  95. * [6] - A função DOF2_SetInt é uma função definida pela include DOF2, criada pela própria equipe do SA-MP[!!];
  96. ** O DOF2 é uma substituição para o dini, o método antigo de salvamento de arquivos no sa-mp. O DOF2 foi implementado por ser mais eficiente e rápido em sua função;
  97. ** As informações definidas pelo DOF2 ficam salvas na memória até serem aplicadas pelas funções DOF2_WriteFile ou DOF2_SaveFile (ambas desempenham a mesma ação, DOF2_SaveFile é um macro para DOF2_WriteFile).
  98.  
  99. * [7] - O valor de Pasta_Contas deve ser definido em uma #define, como no exemplo abaixo:
  100. ** #define Pasta_Contas "salvamento/contas"
  101. ** [7.1] - #define não deve incluir um ";" no final, necessitando ser definido um por linha;
  102. *** [7.1.1] - A função define não possui documentação oficial: (Mini-Documentação abaixo)
  103. **** [7.1.1.1] Esta mini-documentação foi criada com proposito de auxilidar desenvolvedores iniciantes e foi criada por cailir ( https://scriptsamp.forumeiros.com/u8995 ) para SSGamers ( https://scriptsamp.forumeiros.com )
  104. ****  O #define pode ser chamado de macro, por apenas substituir um conteúdo por outro, e, permitir a redução de seu código, caso seja utilizado muitas vezes. O #define apenas substitui o primeiro paramêtro pelos restantes, podendo incluir espaços e inclusive multiplas linhas, se utilizado "\" ao final de uma linha;
  105. **** [7.1.1.3] Exemplos de usos:
  106. ***** [Ex] #define CALLBACK::%0(%1) forward %0(%1);public %0(%1)
  107. ****** O exemplo acima está definindo "CALLBACK::" como um macro para definir uma função pública;
  108. ***** [Ex] #define DOF2_SetInt_NEW(%0) DOF2_SetInt(%0);DOF2_SaveFile()
  109. ****** O exemplo acima está definindo a função "DOF2_SetInt_NEW" para ter seus parametros utilizados em "DOF2_SetInt" e, em seguida, salvar o arquivo que foi editado;
  110. ***** [Ex] #define SetInt(%0) DOF2_SetInt(%0)
  111. ****** O exemplo acima está definindo "SetInt" como a mesma função de "DOF2_SetInt", permitindo que os mesmo parametros sejam utilizados;
  112.  
  113. * [8] - A função DOF2_WriteFile é utilizada para salvar o arquivo editado. Ao definir valores utilizando o DOF2, como no DOF2_SetInt, esses valores ficam salvos na memória do servidor até ser utilizado uma função de salvamento;
  114. ** [8.1] - A função DOF2_SaveFile realiza a mesma função de DOF2_WriteFile, sendo utilizado um macro para defini-la;
  115.  
  116. * [9] - A função PlayerName é uma função popularmente utilizada para pegar o nome do jogador, em vez de substituir uma variável, como na GetPlayerName [10]. Está função deve ser definida em sua gamemode e por ser muito popular, pode ser que existam variações de seu código e nome.
  117.  
  118. * [10] - A função GetPlayerName é utilizada para pegar o nome do jogador e salva-la em uma variável. Retorna o tamanho do nome do jogador, e, caso não exista, retornará 0. O valor substituído é o do primeiro paramêtro. Link Útil: https://team.sa-mp.com/wiki/GetPlayerName_PT.html ;
  119.  
  120. * [!!] - Informações marcadas com 2 exclamações não foram confirmadas por motivos diversos, podendo estar incorretas.
  121.  
  122. * *********************************************************************************************************************************** *
  123. * Nota do cailir ( https://scriptsamp.forumeiros.com/u8995 ) para todos os usuários da SSGamers ( https://scriptsamp.forumeiros.com ) *
  124. * *********************************************************************************************************************************** *
  125. * Agradeço ao zGabriel ( https://scriptsamp.forumeiros.com/u10020 ) pelo código criado e postado no fórum. Deixo o uso e modificação  *
  126. * deste código livre, apenas peço que mantenha os créditos, pois não foi fácil comentar e acredito que não tenha sido fácil criar o   *
  127. * mesmo, então apenas gostaria de pedir isso. Agradeço ao Weslley Script, fundador da SSGamers pelo ótimo fórum.                      *
  128. * *********************************************************************************************************************************** *
  129.  
  130. */
Add Comment
Please, Sign In to add comment