Ad Code

Responsive Advertisement

COMO CRIAR UM SISTEMA DE PAYDAY EXP POR DIA SAMP

 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)
AVISO: VERIFIQUE SE VOCÊ TEM O SISTEMA DE REGISTRO / LOGIN E SALVANDO / CARREGANDO.
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ----------
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;
}
Agora, para verificar seu nível e exp .. aqui está um comando / stats ..
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;
}
Ok .. Se você já tem o LoadUser Data .. IGNORE ISSO ..
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);
		}
	}
}

Postar um comentário

0 Comentários

© 2022 PawnScript All Rights Reversed