[Ajuda] Criando um timer simples
#1

Criei um timer simples sem ler tutorial algum, e na hora de compilar teve erros. Sei que ta tudo errado e sou novato, mas eu acho que a tentativa foi boa ._.

Primeiro criei uma forward para definir a public no topo do GM.

pawn Код:
forward PayDay();
Depois eu criei a public com as funзхes:

pawn Код:
public PayDay()
{
  GivePlayerMoney(playerid, 5000);
  SendClientMessageToAll(playerid, COLOR_DGREEN, "Payday! Salбrio: 5000");
}
E setei o timer em OnGameModeInit:

pawn Код:
SetTimer("PayDay", 600000, true);
E deu erros:

pawn Код:
C:\Documents and Settings\Samuel\Desktop\Projeto Samp\gamemodes\lvdm.pwn(634) : error 017: undefined symbol "playerid"
C:\Documents and Settings\Samuel\Desktop\Projeto Samp\gamemodes\lvdm.pwn(635) : error 017: undefined symbol "playerid"
As linhas que deram errados sao as funзхes de giveplayermoney e de senclientmessagetoall
Reply
#2

faзa assim:
pawn Код:
public PayDay(playerid)
{
  GivePlayerMoney(playerid, 5000);
  SendClientMessageToAll(playerid, COLOR_DGREEN, "Payday! Salбrio: 5000");
}
Reply
#3

Se vocк quiser enviar para todos a public faзa isso.

pawn Код:
public PayDay()
{
  do
  {
   i++;
   GivePlayerMoney(playerid, 5000);
   SendClientMessageToAll(playerid, COLOR_DGREEN, "Payday! Salбrio: 5000");
  }
  while(i<MAX_PLAYERS);
}
Obs.: Meu primeiro cуdigo com do e while. ^^
Reply
#4

Quote:
Originally Posted by Shickcard
Посмотреть сообщение
Se vocк quiser enviar para todos a public faзa isso.

pawn Код:
public PayDay()
{
  do
  {
   i++;
   GivePlayerMoney(playerid, 5000);
   SendClientMessageToAll(playerid, COLOR_DGREEN, "Payday! Salбrio: 5000");
  }
  while(i<MAX_PLAYERS);
}
Obs.: Meu primeiro cуdigo com do e while. ^^
nem, ele sу repetirб 500 veses no xat.
se quiser usar o do...while:
pawn Код:
new i = 0xFFFFFF;
    do
    {
        if(IsPlayerConnected(i))
        {
            GivePlayerMoney(i, 5000);
            SendClientMessageToAll(i, COLOR_DGREEN, "Payday! Salбrio: 5000");
        }
        ++i;
    }
    while(i <= MAX_PLAYERS);
a sintax й igual do loop.

pawn Код:
SendClientMessageToAll(50, COLOR_DGREEN, "Payday! Salбrio: 5000");
/\ sу mandarб a mensagem para o id 50.


pawn Код:
SendClientMessageToAll(250, COLOR_DGREEN, "Payday! Salбrio: 5000");
/\ sу mandarб a mensagem para o id 250.

entende?

Atenciosamente falcon -qq
Reply
#5

@Shickcard, pelo que sei vocк precisa declarar a variбvel i antes do while atravйs do new i; senгo nгo terб como aumentб-la muito menos usar em um while.

@arakuta Sugiro que sete timers ao player conectar, usando SetTimerEx e mudando PayDay() para PayDay(playerid), assim nгo darб indefined symbol e nгo terб lag. Se quiser continuar usando do jeito que estб, adicione um loop no PayDay(), desta forma:

pawn Код:
for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(playerid)) { //teu cуdigo }
Use o IsPlayerConnected para sу aplicar a aзгo em quem estб conectado, evitarб perda de desempenho

@Garfield: ao mesmo tempo ^^
Vocк nгo precisa definir que i й igual a 0 no comeзo, mesmo que seja em hexadecimal, pois quando uma variбvel й criada, ela automaticamente tem seu valor igual a zero.
Reply
#6

Com o cуdigo do @Transferencia eu obtive outros erros:

pawn Код:
C:\Documents and Settings\Samuel\Desktop\Projeto Samp\gamemodes\lvdm.pwn(631) : error 025: function heading differs from prototype
C:\Documents and Settings\Samuel\Desktop\Projeto Samp\gamemodes\lvdm.pwn(634) : error 035: argument type mismatch (argument 2)
4 erros com o cуdigo do @Shikcard.

pawn Код:
C:\Documents and Settings\Samuel\Desktop\Projeto Samp\gamemodes\lvdm.pwn(636) : error 017: undefined symbol "i"
C:\Documents and Settings\Samuel\Desktop\Projeto Samp\gamemodes\lvdm.pwn(636) : warning 215: expression has no effect
C:\Documents and Settings\Samuel\Desktop\Projeto Samp\gamemodes\lvdm.pwn(637) : error 017: undefined symbol "playerid"
C:\Documents and Settings\Samuel\Desktop\Projeto Samp\gamemodes\lvdm.pwn(638) : error 017: undefined symbol "playerid"
C:\Documents and Settings\Samuel\Desktop\Projeto Samp\gamemodes\lvdm.pwn(640) : error 017: undefined symbol "i"
EDIT

Com o post do garfield eu deixei assim:
pawn Код:
public PayDay()
{
new i = 0xFFFFFF;
    do
    {
        if(IsPlayerConnected(i))
        {
            GivePlayerMoney(i, 5000);
            SendClientMessageToAll(i, COLOR_DGREEN, "Payday! Salбrio: 5000");
        }
        ++i;
    }
    while(i <= MAX_PLAYERS);
}
Com o erro:

[pawn]C:\Documents and Settings\Samuel\Desktop\Projeto Samp\gamemodes\lvdm.pwn(640) : error 035: argument type mismatch (argument 2)[/pawn
Reply
#7

Sim Acer, й meu primeiro cуdigo com essas funзхes x). Estou tentando aprender.
Obrigado por ajudarem :*

pawn Код:
forward PayDay(playerid);
pawn Код:
public PayDay(playerid)
{
  for(new i; i<MAX_PLAYERS; i++)
  {
   GivePlayerMoney(playerid, 5000);
   SendClientMessageToAll(playerid, COLOR_DGREEN, "Payday! Salбrio: 5000");
  }
 return 1;
}
Reply
#8

@arakuta Estб dando erros no do Shickcard porque vocк nгo declarou a variбvel i (faзa-a atravйs de new i e playerid (PayDay deveria ter o argumento playerid, mas no caso vocк precisaria de um SetTimerEx no OnPlayerConnect ou no OnPlayerSpawn).

@Shickcard hehe й sу lembrar que nгo dб pra mudar uma coisa que nгo existe

Vamos acabar de vez com isso, nгo adianta querer usar do e while quando se pode usar for, й mais fбcil para ele. Ficaria:

pawn Код:
public PayDay()
{
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
        {
            GivePlayerMoney(i, 5000);
            SendClientMessage(i, COLOR_DGREEN, "Payday! Salбrio: 5000");
        }
    }
}
@Garfield: SendClientMessageToAll nгo tem o parвmetro playerid, como vocк tinha feito (SendClientMessageToAll(i, ..)) pois manda a mensagem para todos. Para especificar playerid, use SendClientMessage.
Reply
#9

[BEP]AcerPilot

Deu erro no seu cуdigo tambйm. o mesmo que deu com o do garfield.

pawn Код:
error 035: argument type mismatch (argument 2)
na linha do GivePlayerMoney

Edit:

AcerPilot, se eu colocar settimer no onplayerspawn ele sу daria o payday se o jogador ficar vivo atй o fim do timer. Em on player connect dando payday a 10 minutos de cada player conectado, ou seja, ia virar bagunзa . Colocando no OnGameModeInit ele da o payday pra todos num tempo fixo.
Reply
#10

Quote:
Originally Posted by [BEP]AcerPilot
Посмотреть сообщение
@Garfield: ao mesmo tempo ^^
Vocк nгo precisa definir que i й igual a 0 no comeзo, mesmo que seja em hexadecimal, pois quando uma variбvel й criada, ela automaticamente tem seu valor igual a zero.
o certo й defini-la como 0.
porque alguns casos pode bugar.
nos casos de bug a variбvel i nгo terб o valor 0.
este й o motivo de eu ter definida.

Quote:
Originally Posted by [BEP]AcerPilot
Посмотреть сообщение
@arakuta Estб dando erros no do Shickcard porque vocк nгo declarou a variбvel i (faзa-a atravйs de new i e playerid (PayDay deveria ter o argumento playerid, mas no caso vocк precisaria de um SetTimerEx no OnPlayerConnect ou no OnPlayerSpawn).

@Shickcard hehe й sу lembrar que nгo dб pra mudar uma coisa que nгo existe

pawn Код:
new i = 0xFFFFFF;
    do
    {
        GivePlayerMoney(i, 5000);
        SendClientMessage(i, -1, "Payday! Salбrio: 5000");
        ++i;
    }
    while(IsPlayerConnected(i) <= MAX_PLAYERS);
meu mesmo cуdigo funcionando, com menas linha e otimizado.
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)