View difference between Paste ID: QGu2hS6W and sexAmaXx
SHOW: | | - or go back to the newest paste.
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-
* Licença no final do arquivo, nas notas deixadas por mim.
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
*/