[Include] Funзгo por Sequencia de Tempo (Loop Timer) - Dinвmico ?
#1

Bem, minha primeira Include que acredito que preste...
Para mim funcionou perfeitamente, estб Include cria sequencia de Timer's, que vocк define a quantidade de vezes que este Timer serб repetido (loop), tirando necessidade de criar uma variбvel para cada tempo e usar o "true".

Ele possui 3 comandos por macros:


LoopTimerCreate("FuncName", {Float,_}:...)
- Usado para criar a funзгo que serб usada na Sequencia do LoopTimerStart

Exemplo:
pawn Код:
LoopTimerCreate("Perseguir", playerid, giveid)
{
    new Float:Pos[3];
    GetPlayerPos(giveid, Pos[0], Pos[1], Pos[2]);
    SetPlayerCheckpoint(playerid, Pos[0], Pos[1], Pos[2], 3.0);
    return 1;
}
LoopTimerEnd("FuncName", {Float,_}:...)
- Й chamada quando a "FuncName" й finalizada (quando a Sequкncia acaba, o loop)

Exemplo:
pawn Код:
LoopTimerEnd("Perseguir", playerid, giveid)
{
    DisablePlayerCheckpoint(playerid);
    printf("Loop Timer Finished");
    return 1;
}
LoopTimerStart("FuncName", tempo, repeticoes, "Const Format", {Float,_}:...);
- Inicia a Sequencia de acordo com o Tempo e suas Repetiзхes e etc

Exemplo:
pawn Код:
LoopTimerStart("Perseguir", 1000, time, "ii", playerid, giveid);


EXEMPLO FINAL:
pawn Код:
#include a_samp
#include zcmd
#include sscanf
#include looptimer

LoopTimerCreate("Perseguir", playerid, giveid)
{
    new Float:Pos[3];
    GetPlayerPos(giveid, Pos[0], Pos[1], Pos[2]);
    SetPlayerCheckpoint(playerid, Pos[0], Pos[1], Pos[2], 3.0);
    return 1;
}

LoopTimerEnd("Perseguir", playerid, giveid)
{
    DisablePlayerCheckpoint(playerid);
    printf("Loop Timer Finished");
    return 1;
}

CMD:perseguir(playerid, params[])
{
    new giveid, time;
    if(sscanf(params, "dd", giveid, time)) return SendClientMessage(playerid, -1, "USE: /seguir [ID] [TEMPO EM SEGUNDOS]");
    LoopTimerStart("Perseguir", 1000, time, "ii", playerid, giveid);
    return 1;
}


INCLUDE:
pawn Код:
#include a_samp

#if defined tabsize
#undef tabsize
#endif
#pragma tabsize 0

#define LoopTimerCreate("%0",%1) \
forward Func_%0(%1); \
forward End_%0(%1); \
public Func_%0(%1)

#define LoopTimerStart(%0,%1,%2,%3,%4); \
for(new c, f[36]; c < %2; c++) \
{ \
    format(f, sizeof(f), "%s", %0); \
    if(c == %2 - 1) \
    { \
        strins(f, "End_", 0); \
        SetTimerEx(f, %1*c, false, "%3", %4); \
    } \
    else \
    { \
        strins(f, "Func_", 0); \
        SetTimerEx(f, %1*c, false, "%3", %4); \
    } \
}

#define LoopTimerEnd("%0",%1) \
public End_%0(%1)
Espero que gostem, comentem !


ATUALIZADO POR FINAL
VELOCIDADE - 0.2x MAIS LENTO (CONSEGUI)
OTIMIZAЗГO - 0.5 A MAIS OTIMIZADO EM COMPARAЗГO TAMANHO DO .AMX
SIMPLICIDADE - 2/3x MAIS SIMPLES


DOWNLOAD DE PROVAS/CODES DOS TESTES/INCLUDE:
Reply


Messages In This Thread

Forum Jump:


Users browsing this thread: 1 Guest(s)