[Ajuda] Problema no comando
#1

Estou com o problema no meu comando . Eu digito ele e espero o tempo do timer , e ele funcionar normal . Agora se eu digitar o comando em seguida ele de novo sem esperar o time, apenas o ultimo comando digitado funciona.

PHP код:
CMD:arvore1(playeridparams[])
{
    if(
PlayerDados[playerid][SLaranja] >= 1)
    {
        new    
FloatX,
        
FloatY,
        
FloatZ;
        
GetPlayerPos(playeridXYZ);
        
SendClientMessage(playeridAMARELO"Бrvore de laranja plantada");
        
PPequeno CreateObject(728XYZ00050);
        
SetTimer("PLARANJA"5000false);
    }
    return 
1;

@OFF
Moderaзгo, porquк diabos estгo apagando meu tуpicos ? Nгo hб nada de errado com eles :@
Reply
#2

Se a funзгo PLARANJA usa a variбvel global PPequeno para manipular um objeto pelo ID que a variбvel armazena, saiba que deve ser esse o motivo do problema.



Ao executar o comando duas vezes seguidas, a variбvel PPequeno armazenaria no final o ID do objeto do segundo comando, fazendo com que o timer do primeiro atuasse no objeto do segundo e com que o objeto do primeiro nгo fosse afetado .



Uma soluзгo para isso seria criar uma array que armazenasse os IDs dos objetos e um timer exclusivo para cada objeto a ser manipulado. Para que nгo tivesse que fazer uma funзгo para cada timer, uma referкncia a cada objeto poderia ser passada a uma funзгo ъnica, sendo que seria um sistema com SetTimerEx.



Espero ter ajudado .
Reply
#3

Quote:
Originally Posted by rjjj
Посмотреть сообщение
Se a funзгo PLARANJA usa a variбvel global PPequeno para manipular um objeto pelo ID que a variбvel armazena, saiba que deve ser esse o motivo do problema.



Ao executar o comando duas vezes seguidas, a variбvel PPequeno armazenaria no final o ID do objeto do segundo comando, fazendo com que o timer do primeiro atuasse no objeto do segundo e com que o objeto do primeiro nгo fosse afetado .



Uma soluзгo para isso seria criar uma array que armazenasse os IDs dos objetos e um timer exclusivo para cada objeto a ser manipulado. Para que nгo tivesse que fazer uma funзгo para cada timer, uma referкncia a cada objeto poderia ser passada a uma funзгo ъnica, sendo que seria um sistema com SetTimerEx.



Espero ter ajudado .
Sim , estou usando DestroyObject . De que forma eu poderia criar essa array ?
Reply
#4

Topo do GM:
Код:
new PlantandoLaranja[MAX_PLAYERS];
Novo Comando
Код:
CMD:arvore1(playerid, params[])
{

    if(PlayerDados[playerid][SLaranja] >= 1)
    {

        if(PlantandoLaranja[playerid] >= 1) return SendClientMessage(playerid, -1, "Vocк jб estб plantando um pй de laranja.");
        new    Float: X,
        Float: Y,
        Float: Z;
        GetPlayerPos(playerid, X, Y, Z);
        SendClientMessage(playerid, AMARELO, "Бrvore de laranja plantada");
        PPequeno = CreateObject(728, X, Y, Z, 0, 0, 0, 50);
        PlantandoLaranja[playerid] = 1;
        SetTimer("PLARANJA", 5000, false);
    }

    return 1;
}
Coloque isso na funзгo do timer do "PLARANJA" :
Код:
PlantandoLaranja[playerid] = 0;
Reply
#5

Quote:
Originally Posted by GuilhermeH
Посмотреть сообщение
Topo do GM:
Код:
new PlantandoLaranja[MAX_PLAYERS];
Novo Comando
Код:
CMD:arvore1(playerid, params[])
{

    if(PlayerDados[playerid][SLaranja] >= 1)
    {

        if(PlantandoLaranja[playerid] >= 1) return SendClientMessage(playerid, -1, "Vocк jб estб plantando um pй de laranja.");
        new    Float: X,
        Float: Y,
        Float: Z;
        GetPlayerPos(playerid, X, Y, Z);
        SendClientMessage(playerid, AMARELO, "Бrvore de laranja plantada");
        PPequeno = CreateObject(728, X, Y, Z, 0, 0, 0, 50);
        PlantandoLaranja[playerid] = 1;
        SetTimer("PLARANJA", 5000, false);
    }

    return 1;
}
Coloque isso na funзгo do timer do "PLARANJA" :
Код:
PlantandoLaranja[playerid] = 0;
Na verdade, nгo й isso que eu quero, mas obrigado.
Quero que qualquer um pode plantar quantas quiserem sem ocorrer o erro que eu citei logo acima .
Reply
#6

Eu acho que vocк deveria usar uma variбvel para impedir o uso do comando antes do Timer
Reply
#7

Quote:
Originally Posted by FallweN
Посмотреть сообщение
Eu acho que vocк deveria usar uma variбvel para impedir o uso do comando antes do Timer
Nгo, porquк eu quero que plantem, ou seja, plante quantos quiser .
Reply
#8

UP

Algum filho de Deus pode me ajudar ? D:
Reply
#9

Como o RJJ falou, use SetTimerEx filho. Ele estб GLOBAL, ou seja, se um player digitar ele, servirб para todos.

pawn Код:
SetTimerEx("PLARANJA",  5000, false, "i", playerid);
Qualquer coisa, poste a callback PLARANJA.
Reply
#10

Quote:
Originally Posted by JonathanFeitosa
Посмотреть сообщение
Como o RJJ falou, use SetTimerEx filho. Ele estб GLOBAL, ou seja, se um player digitar ele, servirб para todos.


Topo
PHP код:
new PPequeno
pawn Код:
SetTimerEx("PLARANJA",  5000, false, "i", playerid);
Qualquer coisa, poste a callback PLARANJA.
Nгo resolveu
PHP код:
forward PLARANJA(playerid);
public 
PLARANJA(playerid)
{
    new 
Float:x,Float:y,Float:z,Float:PposA;
    
GetPlayerFacingAngle(playeridPposA);
    
x+= (floatsin(-PposAdegrees));
    
+= (floatcos(-PposAdegrees));
    
CreatePLaranja(x,y,z);
    
DestroyObject(PPequeno);
    return 
1;

PHP код:
stock CreatePLaranja(Float:x,Float:y,Float:z)
{
    for(new 
0sizeof(Proxycords); i++)
    {
        if(
Proxycords[i][Proxyarvore] == 0)
        {
            
GetObjectPos(PPequenoz);
            
Proxycords[i][Proxyarvore]=1;
            
Proxycords[i][ArvX]=x;
            
Proxycords[i][ArvY]=y;
            
Proxycords[i][ArvZ]=z;
            
Proxycords[i][ArvObject] = CreateObject(717xyz-1.0,0,0,0,50);
            return 
1;
        }
    }
    return 
0;

O cуdigo do PLARANJA sу й carregado apуs o tempo do settimer, mas se eu digitar duas vezes seguida apenas o ultimo comando digitado que funciona . O primeiro comando fica criado o objeto 728.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)