Portal SAMP
[Ajuda] [Sistema de VoterKick] SetTimerEx não está sendo chamado - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] [Sistema de VoterKick] SetTimerEx não está sendo chamado (/showthread.php?tid=1750)



[Sistema de VoterKick] SetTimerEx não está sendo chamado - Sysner - 20/10/2021

Saudação Sr. 
Eu estou programando uma sistema de votação de kick, como sabem... é preciso dá um tempo para os jogadores votarem, depois iniciar o codigo para calcular o resultado...

Estou fazendo essa parte com SetTimerEx, é por algum motivo que eu ainda não tenho ideia, a função não está sendo chamada.

Código:
// Sistema de VoteKick

new RspKick[MAX_PLAYERS] = 0, Usokick;


forward resultadoexpulso(playerid);

public resultadoexpulso(playerid){
       
    new VoteSim, VoteNao;
    
    for(new i = -1; i < MAX_PLAYERS; i++){
        if(RspKick[i] == 1){
            VoteSim += 1;
            RspKick[i] = 0;
        }
        if(RspKick[i] == 2){
            VoteNao += 1;
            RspKick[i] = 0;
        }
    }
    

    SendClientMessageToAll(-1, "Comando /voterkick foi liberado para uso");

    Usokick = 0;

    return 1;
}


CMD:voterkick(playerid, params[]){
    new IdPlayerKick, motivo[40];

    if(sscanf(params, "is[40]",IdPlayerKick,motivo))
        return SendClientMessage(playerid, -1, "/voterkick [Player-id] [Motivo]");

    if(!Usokick){

        new kickText[128];
        SendClientMessageToAll(-1, "--------------------------------------");
        format(kickText, sizeof(kickText), "%s iniciou uma votação para banir o jogador %s por 5 minutos",PlayerName(playerid), PlayerName(IdPlayerKick));
        SendClientMessageToAll(-1, kickText);
        
        format(kickText, sizeof(kickText), "Motivo: %s", motivo);
        SendClientMessageToAll(-1, kickText);
       
        format(kickText, sizeof(kickText), "Para votar, use os comandos: \"/sim\" ou \"/nao\" ",PlayerName(playerid), PlayerName(IdPlayerKick));
        SendClientMessageToAll(-1, kickText);
        SendClientMessageToAll(-1, "--------------------------------------");
        Usokick = 1;
        SetTimerEx("resultadoexpulso", 3000, false,"d",IdPlayerKick);
    }else
        return SendClientMessageToAll(-1, "Espere a votação atual acabar..");

    return 1;
}

CMD:sim(playerid, params[]){
    RspKick[playerid] = 1;
    return 1;
}

CMD:nao(playerid, params[]){
    RspKick[playerid] = 2;
    return 1;
}
 
Eu também já tentei, atribuindo o ID do SetTimerEx em uma Var, com um sistema de contagem regressiva que no final da KillTimer(), mas dá o mesmo...

Também com SetTimer(); normal

Obs: Ao compilar não retorna nenhum erro, tenho outros SetTimerEx em outras parte da GM e todas funcionar normalmente..


RE: [Sistema de VoterKick] SetTimerEx não está sendo chamado - Dr Editor - 20/10/2021

Na função resultadoexpulso você está usando o index iniciar -1.
Desta forma, você inicia um loop em uma matriz inválida, ocasionando um erro, ou neste caso, nem mesmo aviso.
Inicie o loop SEMPRE em 0, a menos que seja um caso isolado onde o valor pode ser negativo (considerando que não está a acessar uma array, caso contrário sempre haverá erro).

Vacilo de iniciante. Guarde na memória o que eu disse anteriormente.
No geral o sistema está bom.


RE: [Sistema de VoterKick] SetTimerEx não está sendo chamado - xbruno1000x - 20/10/2021

O Dr Editor já deu a letra de boa parte. Um problema que eu notei além do que ele já disse, é que o tempo do timer está em 3000 milisegundos. Cada 1000 milisegundos equivalem a 1 segundo, e logo a função resultadoexpulso será chamada em 3 segundos(que não são nada suficientes para a votação ser realizada).


RE: [Sistema de VoterKick] SetTimerEx não está sendo chamado - Sysner - 20/10/2021

(20/10/2021 09:09)Dr Editor Escreveu: Na função resultadoexpulso você está usando o index iniciar -1.
Desta forma, você inicia um loop em uma matriz inválida, ocasionando um erro, ou neste caso, nem mesmo aviso.
Inicie o loop SEMPRE em 0, a menos que seja um caso isolado onde o valor pode ser negativo (considerando que não está a acessar uma array, caso contrário sempre haverá erro).

Vacilo de iniciante. Guarde na memória o que eu disse anteriormente.
No geral o sistema está bom.

Caramba, valeu mesmo.

(20/10/2021 16:10)xbruno1000x Escreveu: O Dr Editor já deu a letra de boa parte. Um problema que eu notei além do que ele já disse, é que o tempo do timer está em 3000 milisegundos. Cada 1000 milisegundos equivalem a 1 segundo, e logo a função resultadoexpulso será chamada em 3 segundos(que não são nada suficientes para a votação ser realizada).

Eu coloquei assim porque estava verificando In Game