Introdução
Bem, antes de mais nada, olá a todos, Este é um tutorial sobre como fazer um sistema de nível e exp com dias de pagamento, bom para servidores RP. Isso não é recomendado para iniciantes.
Em segundo lugar, este é meu PRIMEIRO TUTORIAL, então se houver algo errado, por favor, me diga.
Requisitos
Aqui está o que você precisa:
sscanf (os créditos vão para Y_Less.)
Zcmd (Vai para Zeex.)
Y_ini (Para Y_Less)
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ----------
Vamos começar
no início do script:
Código:
#include <a_samp> // Os créditos vão para a equipe SA-MP. #include <YSI \ y_ini> #include <sscanf2> #include <zcmd>
Agora .. Você precisará destas definições:
Código:
#define LIME 0x88AA62FF #define PATH "/Users/%s.ini" // o caminho onde os dados EXP e LEVEL serão armazenados.
Ok .. Vamos adicionar alguns encaminhamentos ..
Código:
avançar ScoreUpdate (); forward PayDay (playerid); avançar PlayerPlayMusic (playerid); para a frente StopMusic ();
Agora vamos criar alguns enums .. Se você não sabe o que é, aqui está um link para ele - Clique!
Código:
enum pInfo { Nível, Exp }; novo PlayerInfo [MAX_PLAYERS] [pInfo]; // // Criamos uma variável que armazena nossas informações de enumerador para cada jogador. novo ScoreOld; // Pontuação Antiga / Nível do jogador. novo levelexp = 1; // Define como 1.
A codificação real começa.
Agora .. Adicione isso em "Public OnGameModeInIt" - Espero que até agora você tenha entendido tudo isso.
Código:
SetTimer ("PayDay", 360000,1); // 360000 = 1 h .. você pode alterá-lo. SetTimer ("ScoreUpdate", 1000, 1); // Não mude isso.
Agora .. Adicione isso em "Public OnPlayerConnect (playerid)" Certifique-se de que você já tem o sistema de registro / login, pois não irei fazer o sistema de registro / login ..
Código:
PlayerInfo [playerid] [Level] = 1; // Assim que o jogador se conectar, seu nível será definido como 1. PlayerInfo [playerid] [Exp] = 0; // Exp para 0.
Antes de prosseguir .. Certifique-se de ter o sistema de registro / login já feito .. Estaremos usando Y_INI para salvar / carregar dados.
Ok .. vamos em frente .. Vá para OnPlayerDisconnect e adicione isso (se você já tiver, basta adicionar ambos exp, nível)
Código:
novo INI: Arquivo = INI_Open (UserPath (playerid)); INI_SetTag (Arquivo, "dados"); INI_WriteInt (Arquivo, "Nível", PlayerInfo [playerid] [Nível]); INI_WriteInt (Arquivo, "Exp", PlayerInfo [playerid] [Exp]); INI_Close (Arquivo);
Ok .. agora o comando levelup ..
Código:
COMANDO: levelup (playerid, params []) { nova string [30]; // Fragmento. if (IsPlayerConnected (playerid) == 1) // Verifica se o player está conectado. { novos pontos [248]; // Pontos. novo nxtlevel = PlayerInfo [playerid] [Level] +1; // Assim que for executado, adiciona +1 à sua pontuação. novo expamount = nxtlevel * levelexp; // Quantidade de experiência, é 2 ATUALMENTE, mas você pode aumentá-la adicionando + número após a expansão de nível if (PlayerInfo [playerid] [Exp] <expamount) // Verifica se o valor de exp do jogador está acima do exigido ou não. { format (points, sizeof (points), "Você precisa de [% d] Exp Points para subir de nível, você atualmente tem [% d]", expamount, PlayerInfo [playerid] [Exp]); // Formato, isso é bastante óbvio. SendClientMessage (playerid, LIME, pontos); // Envia a mensagem. return 1; } senão { PlayerInfo [playerid] [Exp] = 0; // Define a quantidade de EXP em 0 conforme você sobe de nível. PlayerInfo [playerid] [Level] ++; // Adiciona um nível. format (string, sizeof (string), "~ g ~ Seu nível agora: [% d]", PlayerInfo [playerid] [Nível]); // Format. GameTextForPlayer (playerid, string, 6000,1); // Envia um texto de jogo sobre seu novo aumento de nível. return 1; } } return 1; }
Código:
COMANDO: estatísticas (playerid, params []) { nova string2 [200]; novo nome [MAX_PLAYER_NAME]; GetPlayerName (playerid, nome, sizeof (nome)); formato (string2, sizeof (string2), "Nome:% s \ nNível:% d \ nExp:% d", nome, PlayerInfo [playerid] [Nível], PlayerInfo [playerid] [Exp]); ShowPlayerDialog (playerid, DIALOG_STATS, DIALOG_STYLE_MSGBOX, "Player Stats", string2, "Close", ""); return 1; }
Código:
encaminhar LoadUser_data (playerid, nome [], valor []); public LoadUser_data (playerid, nome [], valor []) { INI_Int ("Nível", PlayerInfo [playerid] [Nível]); INI_Int ("Exp", PlayerInfo [playerid] [Exp]); return 1; }
Um estoque que irá buscar os dados.
Código:
estoque UserPath (playerid) { nova string [128], nome de jogo [MAX_PLAYER_NAME]; GetPlayerName (playerid, playername, sizeof (playername)); formato (string, sizeof (string), PATH, playername); string de retorno; }
Agora .. os temporizadores!
Código:
public ScoreUpdate () { nova pontuação; novo nome [MAX_PLAYER_NAME]; // nova string [256]; para (novo i = 0; i <MAX_PLAYERS; i ++) { if (IsPlayerConnected (i)) { GetPlayerName (i, nome, sizeof (nome)); Pontuação = PlayerInfo [i] [Nível]; SetPlayerScore (i, Score); if (Score> ScoreOld) { ScoreOld = Pontuação; } } } } public PayDay (playerid) { para (novo i; i <MAX_PLAYERS; i ++) { if (IsPlayerConnected (i)) { new nxtlevel = PlayerInfo [playerid] [Level]; novo dia de pagamento = nxtlevel * 0; GivePlayerMoney (i, dia de pagamento); PlayerInfo [playerid] [Exp] ++; GameTextForPlayer (i, "~ p ~ PayDay", 6.500); PlayerPlayMusic (playerid); } } } public PlayerPlayMusic (playerid) { para (novo i = 0; i <MAX_PLAYERS; i ++) { if (IsPlayerConnected (i)) { SetTimer ("StopMusic", 5000, 0); PlayerPlaySound (i, 1068, 0,0, 0,0, 0,0); } } } public StopMusic () { para (novo i = 0; i <MAX_PLAYERS; i ++) { if (IsPlayerConnected (i)) { PlayerPlaySound (i, 1069, 0.0, 0.0, 0.0); } } }

0 Comentários