Quote:
Originally Posted by Raayzeck
Olб pessoal.
Bom, a cada dia que passa adquirimos novos membros no fуrum sa-mp e com a simples intenзгo de criar um servidor RP/G, e bom, para evitarmos que fiquem simplesmente pegando um gamemode postado aqui, faзa uma simples ediзгo e lance o mesmo, eu estou criando alguns tutoriais bem simples porйm que pode ajudar alguns novatos.
O que й
Bom, o sistema de "pagamento" tambйm conhecido como sistema de "payday" й o salбrio que toda a hora exata (11:00, 12:00, 13:00, e assim sucessivamente) ele faz um pagamento do salбrio para o jogador.
O que й necessбrio
Bom, pode ser feito de vбrias maneiras, porйm, nesse tutorial estarei utilizando a include Foreach e a include ZCMD, ambas sгo fбceis de serem utilizadas.
Vamos comeзar entгo, primeiramente adicione no topo de seu gamemode
PHP код:
#include zcmd
#include foreach
Agora vamos comeзar o sistema de verdade.
Na public OnGameModeInit()
vamos adicionar o timer
PHP код:
SetTimer("Pagamento", 1000, true); // Pagamento й a callback que serб chamada
Agora, em um lugar junto com as suas outras publics vamos criar a public do pagamento.
PHP код:
forward Pagamento(); // Criarmos uma funзгo com public & forward й mais vantajoso, alem de poder ser chamada com CallRemote(Local)Function & SetTimer(Ex), tambйm й rбpida.
public Pagamento()
{
foreach(Player, i) // loop do foreach
{
new string[128]; // Vai formatar o "SendClientMessage"
new salario = 750 + random(1000); // Valor random do salбrio, minimo de 750 e mбximo de 1000
new Hour, Minute, Second; // Cria a variavel das horas
gettime(Hour, Minute, Second); // Pega o tempo
if(IsPlayerConnected(i)) // Verifica se o player estб conectado
{
if(Minute == 0 && Second == 0) // Verifica se o minuto estб em 00 e o segundo tambйm
{
format(string, sizeof(string), "ATENЗГO: AGORA SГO %d:00 HORAS!", Hour); // Diz que horas sгo com a variavel "Hour"
SendClientMessage(i, -1, string); // Formataзгo
SendClientMessage(i,-1, "|_____ PAGAMENTO _____|"); // SCM dizendo que й o pagamento, (caso queira mudar as cores, mude o "-1")
format(string, sizeof(string), "Salario: R$%d Imposto: -R$50", salarionormal); // Diz quanto o jogador ganhou do salбrio e diz o valor do imposto.
SendClientMessage(i, -1, string); // Formataзгo
format(string, sizeof(string), "Plano de saъde: -R$250"); // SCM dizendo valor do plano, sem funзгo, apenas diz o valor, igual ao imposto.
SendClientMessage(i, -1, string); // Formataзгo
GivePlayerMoney(playerid, salarionormal); // Adiciona o salбrio randomico que o jogador ganhou
GivePlayerMoney(playerid, -300); // Retira o valor do imposto + plano de saъde do jogador, 250+50 = 300
}
}
}
return 1; // Retorna ao valor
}
Agora vamos criar um pagamento manual, para os administradores poderem aplicar a hora que quiser. Vamos lб, iremos criar uma nova public agora, porйm, nгo teremos mais a funзгo das horas.
PHP код:
forward PagamentoManual(); // Criarmos uma funзгo com public & forward й mais vantajoso, alem de poder ser chamada com CallRemote(Local)Function & SetTimer(Ex), tambйm й rбpida.
public PagamentoManual()
{
foreach(Player, i) // loop do foreach
{
new string[128]; // Vai formatar o "SendClientMessage"
new salario = 750 + random(1000); // Valor random do salбrio, minimo de 750 e mбximo de 1000
if(IsPlayerConnected(i)) // Verifica se o player estб conectado
{
format(string, sizeof(string), "ATENЗГO: AGORA SГO %d:00 HORAS!", Hour); // Diz que horas sгo com a variavel "Hour"
SendClientMessage(i, -1, string); // Formataзгo
SendClientMessage(i,-1, "|_____ PAGAMENTO _____|"); // SCM dizendo que й o pagamento, (caso queira mudar as cores, mude o "-1")
format(string, sizeof(string), "Salario: R$%d Imposto: -R$50", salarionormal); // Diz quanto o jogador ganhou do salбrio e diz o valor do imposto.
SendClientMessage(i, -1, string); // Formataзгo
format(string, sizeof(string), "Plano de saъde: -R$250"); // SCM dizendo valor do plano, sem funзгo, apenas diz o valor, igual ao imposto.
SendClientMessage(i, -1, string); // Formataзгo
GivePlayerMoney(playerid, salarionormal); // Adiciona o salбrio randomico que o jogador ganhou
GivePlayerMoney(playerid, -300); // Retira o valor do imposto + plano de saъde do jogador, 250+50 = 300
}
}
return 1; // Retorna ao valor
}
Agora o comando
PHP код:
CMD:pagamentomanual(playerid, params[])
{
if (IsPlayerAdmin(playerid)) //Verifica se o jogador й um administrador logado na rcon
{
PagamentoManual(playerid); // Chama a public PagamentoManual(), fazendo com que ela seja ativa de imediato
SendClientMessageToAll(playerid, -1, "Um administrador vez um PaydayManual");
}
else // verifica se o player nгo й administrador
{
SendClientMessage(playerid, -1, "Vocк nгo pode usar este comando!"); // retorna a mensagem para o player se ele nгo estб logado na rcon
}
return true; // retorna ao valor
}
Bom, o tutorial й basicamente isso, eu nгo sei explicar muito bem porйm tentei deixar bem dinвmico e fбcil de entender, entгo й isso, atй a prуxima pessoal.
|
Vocк nem tentou compilar isso, nй?
Alguns erros e algumas dicas:
1. Como existe apenas um comando, que й bem simples, vocк poderia ensinar a fazк-lo em strcmp tambйm, visto que tem muita gente que ainda usa.
2. Aqui:
PHP код:
SetTimer("Pagamento", 1000, true);
Vocк nгo explicou o que й o
1000 e o que й o
true. Tem gente que nгo sabe.
3. Aqui:
PHP код:
new salario = 750 + random(1000); // Valor random do salбrio, minimo de 750 e mбximo de 1000
O mбximo й 1750 e nгo 1000.
4. Nesta parte:
PHP код:
GivePlayerMoney(playerid, salarionormal); // Adiciona o salбrio randomico que o jogador ganhou
GivePlayerMoney(playerid, -300); // Retira o valor do imposto + plano de saъde do jogador, 250+50 = 300
Quem й playerid? Nгo seria "i"?
5.
PHP код:
CMD:pagamentomanual(playerid, params[])
O comando nгo tem parвmetro, logo, nгo precisa de
params[]
6.
PHP код:
SendClientMessageToAll(playerid, -1, "Um administrador vez um PaydayManual");
Vocк jб viu "SendClientMessageToAll" usar "playerid"?
7.
Como vocк definiu:
PHP код:
forward PagamentoManual();
public PagamentoManual()
Como vocк chamou:
PHP код:
PagamentoManual(playerid);
8.
Atente-se a essa parte:
PHP код:
foreach(Player, i) // loop do foreach
{
new string[128]; // Vai formatar o "SendClientMessage"
new salario = 750 + random(1000); // Valor random do salбrio, minimo de 750 e mбximo de 1000
new Hour, Minute, Second; // Cria a variavel das horas
gettime(Hour, Minute, Second); // Pega o tempo
if(IsPlayerConnected(i)) // Verifica se o player estб conectado
{
if(Minute == 0 && Second == 0) // Verifica se o minuto estб em 00 e o segundo tambйm
{
Viu que vocк cria o loop e depois checa se й a hora de dar o PayDay?
A verificaзгo do minuto e do segundo deveria estar antes de tudo.
9. No pagamento manual:
PHP код:
public PagamentoManual()
{
foreach(Player, i) // loop do foreach
{
new string[128]; // Vai formatar o "SendClientMessage"
new salario = 750 + random(1000); // Valor random do salбrio, minimo de 750 e mбximo de 1000
if(IsPlayerConnected(i)) // Verifica se o player estб conectado
{
format(string, sizeof(string), "ATENЗГO: AGORA SГO %d:00 HORAS!", Hour); // Diz que horas sгo com a variavel "Hour"
Onde estб a variбvel Hour?
Se o admin pode dar /pagamentomanual qualquer hora, por que a mensagem garante que o minuto й "00"?
10.
PHP код:
format(string, sizeof(string), "Plano de saъde: -R$250"); // SCM dizendo valor do plano, sem funзгo, apenas diz o valor, igual ao imposto.
SendClientMessage(i, -1, string); // Formataзгo
Qual a necessidade de usar formataзгo nessa mensagem?
11. Nгo tinha necessidade de vocк criar duas callbacks para dar payday. Bastava vocк criar uma bool, setar ela como true no comando, verificar se ela й true na callback de Pagamento por Timer, executar o cуdigo de payday e, no fim, setar a variбvel como false de novo para nгo ficar dando payday de 1 em 1s.
Nгo me leve a mal... Mas й necessбrio aprender primeiro antes de querer ensinar, moзo.
Siga as dicas, refaзa o tutorial e tente compilar o cуdigo antes de postar!