SA-MP Forums Archive
[Tutorial] Sistema de Profissхes/Emprego Dinвmico - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Português/Portuguese (https://sampforum.blast.hk/forumdisplay.php?fid=34)
+----- Forum: Lançamentos/Releases (https://sampforum.blast.hk/forumdisplay.php?fid=56)
+----- Thread: [Tutorial] Sistema de Profissхes/Emprego Dinвmico (/showthread.php?tid=617051)



Sistema de Profissхes/Emprego Dinвmico - JPedro - 14.09.2016

Fui ajudar um amigo a colocar umas novas profissхes no gamemode e vi que ele usava um jeito, digamos que chato de adicionar novas profissхes, ou seja, fica aquele sobe e desce para adicionar cor, salбrio, nome da profissгo etc....

Maioria dos gamemodes que encontro para download na comunidade sempre fazem suas profissхes mais ou menos deste jeito:

PHP код:
#define PROF_TAXISTA (0) // Definir o ID da profissao
#define COR_TAXISTA 0x000000FF // Definir a Cor
enum PlayerInfo
{
    
pProfissao// Variavel do emprego
};
new 
pInfo[MAX_PLAYERS][PlayerInfo];
stock PayDay(playerid)
{
    switch(
pInfo[playerid][pProfissao]) 
    {
        case 
PROF_TAXISTA// Adicionar o Salбrio
        
{
            
SendClientMessage(playerid, -1"vc й um taxista e recebeu 5mil de salбrio");
            
GivePlayerMoney(playerid5000);
        }
        ......
    }
    return 
1;

Isto й um jeito chato pois toda hora que vocк for adicionar uma nova profissгo terб que adicionar o Salбrio, Cor, Nome da Profissao, id da profissao e outros.


Deste jeito que eu vou trazer neste tutorial ficarб um pouco dinвmico na hora que for adicionar novos empregos a sua gamemode

PHP код:
enum PlayerInfo
{
    
pProfissao// Variavel do emprego
};
new 
pInfo[MAX_PLAYERS][PlayerInfo];
// =====================================================================
enum EmpregoInfo // criaremos este enumerador e adicionamos as variaveis a baixo
{
    
eName[24], // Variavel do Nome da Profissao/Emprego
    
eSalario// Variavel do Salбrio
    
eCor// e a da cor
};
// Aqui estб a array com as informaзхes de cada profissao, o primeiro parametro deixaremos sem valor pois sempre que adicionamos uma nova linha 
// Nгo precisaremos alterar o valor a cada vez que acrescentar uma nova profissao
new eInfo[][EmpregoInfo] =
{
    {
"Taxista"50000x000000FF}, // Coloque as informaзхes do emprego na ordem do enumador, primeiro o nome, depois o salбrio e a cor.
    
{"Motoboy"40000x090580FF},
    {
"Carteiro"20000x19558AFF}
};
// OBS: o ID do emprego serб de acordo na ordem da array, Ex: o ID do Carteiro й 2 e o Taxista й 0 (A Lista sempre comeзa do 0), e o Motoboy й 1
// quando definir o valor da variavel do emprego pInfo[playerid][pProfissao] vocк usarб o numero no qual a profissao se encontra na lista, no caso
// queremos setar o jogador para a profissao de motoboy usaremos: pInfo[playerid][pProfissao] = 1;
// lembrando, que vocк pode usar macros para definir o id de cada profissгo, #define motoboy 1
// ai vocк nгo se confunde quando setar alguma profissгo, ao inves de usar pInfo[playerid[pProfissao] = 1;
// vocк pode usar pInfo[playerid][pProfissao] = motoboy; para setar a profisssгo
// Feito isso poderemos fazer o sistema de pagamento sem precisar ficar checando profissao por profissao
stock PayDay(playerid)
{
    new 
profissaoid pInfo[playerid][pProfissao]; // para ficar mais simples, irei criar uma variavel chamada profissaoid e setarei o valor dela com o valor da variavel do emprego
    
    
printf("Voce й um %s e recebeu: %i de salбrio"eInfo[profissaoid][eName], eInfo[profissaoid][eSalario]);
    
GivePlayerMoney(playerideInfo[profissaoid][eSalario]); // aqui iremos dar o dinheiro ao jogador, o valor dele serб pego na array e o parametro profissaoid й o id ou ordem que ele fica na lista
    
return 1;
}
public 
OnPlayerSpawn(playerid)
{
    
SetPlayerColor(playerideInfo[pInfo[playerid][pProfissao]][eCor]); 
    
// Setamos a cor do jogador OBS: ao inves de criar uma variavel e setaro valor dela com o valor da variavel de emprego
    // eu jб coloquei a variavel do id do emprego direto no parametro da variavel de cor
    
return 1;

Espero que o tutorial tenha sido de boa ъtilidade, caso tenha alguma sugestгo ou critica etc... sу deixar abaixo , espero que eu tenha ajudado e tentei explicar o maximo que eu pude, se estiver algo de errado por favor me avisar
@Edit

Agradecimentos ao FIN4L por me avisar sobre os macros


Respuesta: Sistema de Profissхes/Emprego Dinвmico - SammyJ - 14.09.2016

Bacana mano, ira ajudar muitos novato a ter uma base! +REP


Re: Sistema de Profissхes/Emprego Dinвmico - pWesley - 14.09.2016

Muito bom. Alйm de dinвmico, й bastante eficiente.


Re: Sistema de Profissхes/Emprego Dinвmico - ipsLuan - 15.09.2016

Isso й o sinal de um recomeзo?


Re: Sistema de Profissхes/Emprego Dinвmico - JPedro - 15.09.2016

Quote:
Originally Posted by Glederson_dom
Посмотреть сообщение
Bacana mano, ira ajudar muitos novato a ter uma base! +REP
Quote:
Originally Posted by pWesley
Посмотреть сообщение
Muito bom. Alйm de dinвmico, й bastante eficiente.
Valeu

Quote:
Originally Posted by ipsLuan
Посмотреть сообщение
Isso й o sinal de um recomeзo?
Recomeзo?


Re: Sistema de Profissхes/Emprego Dinвmico - Carlos001 - 15.09.2016

Bacana, irar ajudar Muitas pessoas que quiserem criar um gm de RPG.


Re: Sistema de Profissхes/Emprego Dinвmico - TheBob - 15.09.2016

Muito bom, exemplo уtimo. Parabйns


Re: Sistema de Profissхes/Emprego Dinвmico - lucas_mdr1235 - 15.09.2016

Parabйns vocк teve o mesmo intuito que o Juniiro3 em Usando matrizes para agilizar o desenvolvimento


Re: Sistema de Profissхes/Emprego Dinвmico - F1N4L - 15.09.2016

Interessante, porйm o PayDay deveria ser em uma callback com timer, pois assim vocк dб dinheiro de tempos em tempos...


Re: Sistema de Profissхes/Emprego Dinвmico - PeterLinkson - 15.09.2016

mt bom


Re: Sistema de Profissхes/Emprego Dinвmico - JPedro - 15.09.2016

Quote:
Originally Posted by Carlos001
Посмотреть сообщение
Bacana, irar ajudar Muitas pessoas que quiserem criar um gm de RPG.
Quote:
Originally Posted by TheBob
Посмотреть сообщение
Muito bom, exemplo уtimo. Parabйns
Quote:
Originally Posted by lucas_mdr1235
Посмотреть сообщение
Parabйns vocк teve o mesmo intuito que o Juniiro3 em Usando matrizes para agilizar o desenvolvimento
exatamente

__________________________________________________ ___________________________________

Obrigado a todos , espero que o tutorial seja de utilidade a todos que estгo comeзando a desenvolver seu gamemode

Quote:
Originally Posted by F1N4L
Посмотреть сообщение
Interessante, porйm o PayDay deveria ser em uma callback com timer, pois assim vocк dб dinheiro de tempos em tempos...
Quote:
Originally Posted by RockstarL
Посмотреть сообщение
Jб que й um sistema de empregos, um RPG, o PAYDAY tinha que rodar por dias trabalhados, quem derб se eu ficasse com uma profissгo sem fazer nada, e continuar recebendo meu salбrio, um sonho.
A base estб interessante..Parabйns
a stock do payday sу fiz como exemplo, o meu intuito foi mostrar como que se organizar e fazer um sistema de profissхes dinвmico, jб o resto й por conta do desenvolvedor da gamemode


Re: Sistema de Profissхes/Emprego Dinвmico - PeterLinkson - 15.09.2016

Serб que poderia me dar um exemplo de uso ?
sei la por exemplo ..
um comando que ao ser usado, transforma o player na profissгo


Re: Sistema de Profissхes/Emprego Dinвmico - F1N4L - 15.09.2016

Quote:
Originally Posted by PeterLinkson
Посмотреть сообщение
Serб que poderia me dar um exemplo de uso ?
sei la por exemplo ..
um comando que ao ser usado, transforma o player na profissгo
Код:
enum Prof
{
	bool:Gari,
	bool:Pedreiro,
	bool:Prefeito,
	bool:Taxista
}
new pInfo[MAX_PLAYERS][Prof];

CMD:queroser(playerid, params[])
{
	if(isnull(params)) return SendClientMessage(playerid, -1, "/queroser <profissao>");
	
	if(strcmp(params, "Gari", true) == 0)
	{
		pInfo[playerid][Gari] = true;
		
		SendClientMessage(playerid, -1, "Agora vocк й um Gari.");
	}
	else if(strcmp(params, "Pedreiro", true) == 0)
	{
		pInfo[playerid][Pedreiro] = true;
		
		SendClientMessage(playerid, -1, "Agora vocк й um Pedreiro.");
	}
	else if(strcmp(params, "Prefeito", true) == 0)
	{
		pInfo[playerid][Prefeito] = true;
		
		SendClientMessage(playerid, -1, "Agora vocк й um Prefeito.");
	}
	else if(strcmp(params, "Taxista", true) == 0)
	{
		pInfo[playerid][Taxista] = true;
		
		SendClientMessage(playerid, -1, "Agora vocк й um Taxista.");
	}
	
	return 1;
}



Re: Sistema de Profissхes/Emprego Dinвmico - JPedro - 15.09.2016

Quote:
Originally Posted by PeterLinkson
Посмотреть сообщение
mt bom
Quote:
Originally Posted by PeterLinkson
Посмотреть сообщение
Serб que poderia me dar um exemplo de uso ?
sei la por exemplo ..
um comando que ao ser usado, transforma o player na profissгo
setando uma variavel com o valor do emprego

Ex: 0 = Desempregado, 1 = Taxista, 2 = Motoboy
para setar o emprego do jogador basta apenas trocar o valor da variavel do emprego
no caso eu utilizo a pInfo[playerid][pProfissao]

ai para setar o emprego vocк pode usar um dialog, menu ou atй comando para setar a profissao desejada

pInfo[playerid][pProfissao] = 1; // setei o jogador para Taxista
pInfo[playerid][pProfissao] = 2; // setei o jogador para Motoboy

dai por diante vocк vai setando as profissхes, lembrando que os numeros vгo de acordo da ordem onde vocк colocou o emprego na Array eInfo


Re: Sistema de Profissхes/Emprego Dinвmico - F1N4L - 15.09.2016

Quote:
Originally Posted by JPedro
Посмотреть сообщение
setando uma variavel com o valor do emprego

Ex: 0 = Desempregado, 1 = Taxista, 2 = Motoboy
para setar o emprego do jogador basta apenas trocar o valor da variavel do emprego
no caso eu utilizo a pInfo[playerid][pProfissao]

ai para setar o emprego vocк pode usar um dialog, menu ou atй comando para setar a profissao desejada

pInfo[playerid][pProfissao] = 1; // setei o jogador para Taxista
pInfo[playerid][pProfissao] = 2; // setei o jogador para Motoboy

dai por diante vocк vai setando as profissхes, lembrando que os numeros vгo de acordo da ordem onde vocк colocou o emprego na Array eInfo
Sу pra reforзar essa questгo de definir profissгo por nъmeros e nгo por constante, й interessante usar os macros para este caso, assim fica mais fбcil de trabalhar com as profissхes:

Код:
#define Taxista 1
#define Motoboy 2

pInfo[playerid][pProfissao] = Taxista; // setei o jogador para Taxista
pInfo[playerid][pProfissao] = Motoboy; // setei o jogador para Motoboy



Re: Sistema de Profissхes/Emprego Dinвmico - JPedro - 15.09.2016

Quote:
Originally Posted by F1N4L
Посмотреть сообщение
Sу pra reforзar essa questгo de definir profissгo por nъmeros e nгo por constante, й interessante usar os macros para este caso, assim fica mais fбcil de trabalhar com as profissхes:

Код:
#define Taxista 1
#define Motoboy 2

pInfo[playerid][pProfissao] = Taxista; // setei o jogador para Taxista
pInfo[playerid][pProfissao] = Motoboy; // setei o jogador para Motoboy
sim, isso ajudarб o desenvolvedor a nгo confundir os id's, mas pra quem jб conheзe o seu prуprio gamemode nгo terб problemas na hora de setar alguma profissгo, mas mesmo assim obrigado por reforзar isso, irei adicionar ao tуpico


Re: Sistema de Profissхes/Emprego Dinвmico - PT - 16.09.2016

Estб de parabйns por este seu tуpico. Sem duvida necessбrio.

Sу sugeria vocк adicionar alguns exemplos no topico principal para a galera com menos experiкncia pegar mais fбcil o jeito de usar isto.

+rep


Re: Sistema de Profissхes/Emprego Dinвmico - TheM4st3r - 17.09.2016

E tipo como faзo pra um comando funcionar so pra determinada profissгo?


Re: Sistema de Profissхes/Emprego Dinвmico - Carlos001 - 17.09.2016

Quote:
Originally Posted by TheM4st3r
Посмотреть сообщение
E tipo como faзo pra um comando funcionar so pra determinada profissгo?
Код:
CMD:Comando(playerid)
{
	if(pInfo[playerid][pProfissao] == Taxista) //em Taxista coloque a Profissгo.
 	{
	// Codigo
	}
	else
	    return 0;
	return 1;
}