[Ajuda] SetTimerEx - string como argumento
#1

Olб meus queridos, fiz um delay de comandos aqui da seguinte forma:
comando:
pawn Код:
CMD:consertar(playerid, params[])
{
    if(GetPVarInt(playerid, "CMDconsertar") == 1)
        return SendClientMessage(playerid, COLOR_RED, "[ x ] Vocк ainda nгo pode usar este comando.");
    //SetVehicleHealth(GetPlayerVehicleID(playerid), 1000.0);
    RepairVehicle(GetPlayerVehicleID(playerid));
    SendClientMessage(playerid, -1, "[>>>] Veнculo consertado!");

    SetPVarInt(playerid, "CMDconsertar", 1);
    printf("Nome var: CMDconsertar, Valor: %i", GetPVarInt(playerid, "CMDconsertar"));
    SetTimerEx("DelayComandos", 30000, false, "ds", playerid, "CMDconsertar");

    return 1;
}
funзгo:
pawn Код:
forward DelayComandos(playerid, nomevar[]);
public DelayComandos(playerid, nomevar[])
{
    printf("Entrou funcao");
    printf("Valor %s: %i", nomevar, GetPVarInt(playerid, nomevar));
    DeletePVar(playerid, nomevar);
    printf("Deletou %s, valor: %i", nomevar, GetPVarInt(playerid, nomevar));
    new str[64];
    format(str, sizeof str, "[>>>] Vocк jб pode usar o comando %s novamente.", nomevar);
    SendClientMessage(playerid, -1, str);
           
    return 1;
}
O que acontece й que quando entra na funзгo DelayComandos, o GetPVarInt(playerid, "CMDconsertar") tem valor 0.
como mostra a imagem

Alguem sabe o que estб acontecendo ?
Reply
#2

Vocк estб deletando a VAR estando em 0
Reply
#3

E nгo funciona ?
Reply
#4

Quote:
Originally Posted by Murilo_sousa
Посмотреть сообщение
Vocк estб deletando a VAR estando em 0
Eu sei que estou deletando. Mas o problema й que ela jб entra como 0 mesmo antes de deletar como mostra a imagem do console do servidor.
Quote:
Originally Posted by DouglasRodrigues
Посмотреть сообщение
E nгo funciona ?
Nгo, acontece o problema que citei :/
Reply
#5

Jб ouvi falar que nгo й possнvel "passar" strings por SetTimerEx, mas creio que se nгo fosse possнvel nгo ia ler a string em "printf("Valor %s: %i", nomevar, GetPVarInt(playerid, nomevar));".
Ou estou errado ?
Reply
#6

Coloquei isso no comeзo da funзгo para verificar os valores que entram:
pawn Код:
printf("Valor 1: %i", GetPVarInt(pid, nomevar));
    printf("Valor 2: %i", GetPVarInt(pid, "CMDconsertar"));
e fica Valor 1: 0
Valor 2: 1

aff....
Reply
#7

PHP код:
CMD:consertar(playeridparams[])
{
    if(!
IsPlayerInAnyVehicle(playerid)) return 0;
    static 
timer;
    if(
timer gettime()) return SendClientMessage(playeridCOLOR_RED"[ x ] Vocк ainda nгo pode usar este comando.");
    
//SetVehicleHealth(GetPlayerVehicleID(playerid), 1000.0);
    
    
RepairVehicle(GetPlayerVehicleID(playerid));
    
    
SendClientMessage(playerid, -1"[>>>] Veнculo consertado!");
    
    
timer gettime() + 30;
    
    
//SetTimerEx("DelayComandos", 0, false, "ds", playerid, "CMDconsertar");
    
    
DelayComandos(playerid,"CMDconsertar");
    return 
1;
}
forward DelayComandos(playeridnomevar[]);
public 
DelayComandos(playeridnomevar[])
{
    
printf(nomevar);
    
    new 
string[145];
    
    
format(stringsizeof string"[>>>] Vocк jб pode usar o comando %s novamente."nomevar);
    
    
SendClientMessage(playerid, -1string);
    
    return 
1;

Desse jeito й bem mais simples e otimizado. Pois nгo usa Pvar e nem pхe o settimer em sleep atй chegar sua vez.
Reply
#8

Quote:
Originally Posted by leonardo1434
Посмотреть сообщение
PHP код:
CMD:consertar(playeridparams[])
{
    if(!
IsPlayerInAnyVehicle(playerid)) return 0;
    static 
timer;
    if(
timer gettime()) return SendClientMessage(playeridCOLOR_RED"[ x ] Vocк ainda nгo pode usar este comando.");
    
//SetVehicleHealth(GetPlayerVehicleID(playerid), 1000.0);
    
    
RepairVehicle(GetPlayerVehicleID(playerid));
    
    
SendClientMessage(playerid, -1"[>>>] Veнculo consertado!");
    
    
timer gettime() + 30;
    
    
//SetTimerEx("DelayComandos", 0, false, "ds", playerid, "CMDconsertar");
    
    
DelayComandos(playerid,"CMDconsertar");
    return 
1;
}
forward DelayComandos(playeridnomevar[]);
public 
DelayComandos(playeridnomevar[])
{
    
printf(nomevar);
    
    new 
string[145];
    
    
format(stringsizeof string"[>>>] Vocк jб pode usar o comando %s novamente."nomevar);
    
    
SendClientMessage(playerid, -1string);
    
    return 
1;

Desse jeito й bem mais simples e otimizado. Pois nгo usa Pvar e nem pхe o settimer em sleep atй chegar sua vez.
Olб leonardo.
Vocк pode me explicar o jeito que vocк usou o gettime() e a var timer ?

e de qualquer jeito nгo vou ter que usar o SetTimer para nгo executar a funзгo logo apуs executar o comando ?
Reply
#9

https://sampforum.blast.hk/showthread.php?tid=254915
https://sampwiki.blast.hk/wiki/Keywords:Initialisers#static

Tais partes em amarelo/comentadas, sгo partes que nгo sгo necessбrias, pois jб foram supridas as necessidades da funзгo em si.
Reply
#10

Quote:
https://sampforum.blast.hk/showthread.php?tid=254915
https://sampwiki.blast.hk/wiki/Keywords:Initialisers#static

Tais partes em amarelo/comentadas, sгo partes que nгo sгo necessбrias, pois jб foram supridas as necessidades da funзгo em si.
__________________
Minha ajuda nгo й obrigatуria, apenas meu hobby. Nгo exija,pois serб negada.

Entendo. Mas logo quando uso o comando a funзгo DelayComandos й executada e jб diz: "[>>>] Vocк jб pode usar o comando %s novamente.".
O correto seria depois de, neste caso, 30 segundos executar a funзгo DelayComandos.
Reply


Forum Jump:


Users browsing this thread: 4 Guest(s)