Esse gamemode é uma base da base, para quem quer aprender YSI, algo bem simples mesm.
Ele salva "XP e level", sendo que você ganha XP a cada jogador que você mata, e a cada 5 pontos de experiência, você ganha um level. É algo simples, somente para vocês verem como funciona.
Tutorial
Esse é o básico de qualquer script escrito em Pawn. Ele inclui a livraria do SA:MP no script.
PP_YSI é o método de criptografia da senha do usuário. PP_YSI é a padrão, além dela existem outras 2.
MD5_Hash - Criptografa a senha usando MD5.
PP_WP ou PP_WHIRLPOOL - Utiliza Whirlpool para criptografia.
A include y_users precisa saber qual gamemode os usuários estão sendo referidos, então ele precisa que você declare o nome do gamemode que está na pasta gamemodes.
Aqui eu estou definindo os IDs dos dialogs.
Aqui eu declarei que as variáveis plr_lvl e plr_exp estão dentro do enumerator E_DATA.
O uvar precisa de um enumerator para trabalhar salvando todas as alterações que são feitas nas variáveis do jogador, e então não precisar de includes de salvamento.
OBS.: y_users e y_uvar trabalham juntas, assim como y_text, y_colors e y_lang.
Esse é o básico de qualquer gamemode, eu não costumo escrever nada dentro do main e ele também é o causador de muitos problemas na inicialização do servidor. TODO e qualquer gamemode deve conter o main.
Aqui estou declarando que o servidor irá utilizar a língua portuguesa, você pode adicionar várias línguas ao mesmo tempo. Essa função é usada no y_languages e você pode saber mais sobre ela aqui.
Eu estou checando se o jogador está registrado , caso negativo, eu mostro para o jogador o dialog para efetuar o registro, caso contrário, o de login.
OBS.: A função:
É nativa da y_users, não precisa ser declarada.
Caso o jogador responda o dialog de registro, o y_users vai tentar registra-lo, caso não consiga, ele irá retornar o erro que ocorreu ao usuário. A mesma coisa para o login, a diferença é que o sistema vai tentar loga-lo e não registra-lo.
Caso o usuário não responda o dialog, ele será fechado (recomendo expulsar o jogador do servidor).
Quando um jogador é assassinado, eu mostrarei a mensagem acima ao assassino (killerid), e aumentarei um valor na variável plr_exp. Lembre-se que y_uvar salva as variáveis assim que são alteradas.
Essa é a parte mais complicada do código eu acho, então preferi fazer por comentários.
OBS.: A variável plr_exp representa a experiência do jogador, já a plr_lvl, representa o level.
Creditos:
Lós - GameMode.
Y_Less - Include.
Ele salva "XP e level", sendo que você ganha XP a cada jogador que você mata, e a cada 5 pontos de experiência, você ganha um level. É algo simples, somente para vocês verem como funciona.
Tutorial
pawn Code:
#include <a_samp>
pawn Code:
#define PP_YSI
MD5_Hash - Criptografa a senha usando MD5.
PP_WP ou PP_WHIRLPOOL - Utiliza Whirlpool para criptografia.
pawn Code:
#define MODE_NAME y_users
pawn Code:
#define Register 1
#define Login 2
pawn Code:
enum E_DATA
{
plr_lvl,
plr_exp
}
pawn Code:
uvar player_data[MAX_PLAYERS][E_DATA];
OBS.: y_users e y_uvar trabalham juntas, assim como y_text, y_colors e y_lang.
pawn Code:
main ( ) { }
pawn Code:
Langs_AddLanguage ( "PT", "Português" );
pawn Code:
if ( !Player_IsRegistered ( playerid ) )
return ShowPlayerDialog ( playerid, Register, DIALOG_STYLE_PASSWORD, "Registro", \
"Digite uma senha para criar uma nova conta", \
"Registrar", "Sair" );
else
return ShowPlayerDialog ( playerid, Login, DIALOG_STYLE_PASSWORD, "Login", \
"Digite sua senha para logar.", \
"Logar", "Sair" );
OBS.: A função:
pawn Code:
Player_IsRegistered ( playerid )
pawn Code:
case Register:
{
if ( !response )
return 1;
Player_TryRegister ( playerid, inputtext );
return 1;
}
case Login:
{
if ( !response )
return 1;
Player_TryLogin ( playerid, inputtext );
return 1;
}
Caso o usuário não responda o dialog, ele será fechado (recomendo expulsar o jogador do servidor).
pawn Code:
SendClientMessage ( killerid, -1, "Você ganhou 1xp por matar 1 jogador" );
player_data [ killerid ] [ plr_exp ] ++;
pawn Code:
if ( player_data [ killerid ] [ plr_exp ] == 5 )//Estou checando se o valor da variável plr_exp é igual a 5.
{
player_data [ killerid ] [ plr_lvl ]++;//Caso for, eu aumento um valor na variável plr_lvl
player_data [ killerid ] [ plr_exp ] = 0;//E zero a variável plr_exp.
SendClientMessage ( killerid, -1, "Parabéns, você evoluiu 1 level." );//E então envio uma mensagem ao jogador assassino, avisando que ele aumentou um level.
return 1;
}
OBS.: A variável plr_exp representa a experiência do jogador, já a plr_lvl, representa o level.
É basicamente isto, caso tenha dúvidas é só postar.
Creditos:
Lós - GameMode.
Y_Less - Include.
Downloads
0 comentários:
Postar um comentário