Portal SAMP
[Ajuda] Flood em objeto removido - 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] Flood em objeto removido (/showthread.php?tid=2543)



Flood em objeto removido - Seck - 03/07/2022

Galera, criei um sisteminha de remover um objeto do mapa, e depois de um tempo ele é recriado automaticamente.
Está praticamente tudo funcionando perfeitamente. O objeto (cone) começa no mapa, e se algum player encostar nele e digitar /removercone, começa a contagem até 60 e vai mostrando na tela, e qnd termina o objeto é destruido, aparece a mensagem: "%s removeu um cone.", dps de um tempo ele automaticamente é recriado e avisa que foi recriado: "%s o cone da DP foi recriado.".
porém quando ele é recriado, se o player for novamente fazer a remoção, assim que ele é removido começa a floodar a mensagem: "%s removeu um cone." e além do flood, ele fica removendo varias vezes o objeto e não permite que o objeto seja recriado novamente.
Alguém pode ajudar a perceber onde está o erro? 



Código:
dcmd_removerbrc(playerid, params[])
{
    #pragma unused params

    if(RmvCone == true) return SendClientMessage(playerid,0xF23C3CFF, "ERRO: {FFFFFF}Esse cone já está sendo removido.");
    if(RemovidoCone == true) return SendClientMessage(playerid,0xF23C3CFF, "ERRO: {FFFFFF}Esse cone já foi removido.");

    if(PlayerToPoint(0.7, playerid, 849.29999,-928.79999,55.9))
    {
        ContagemCone[playerid] = SetTimerEx("ConeObjeto", 1000,1, "i", playerid);
        ApplyAnimation(playerid, "BOMBER", "BOM_Plant_Loop", 4.0, 1, 0, 0, 1, 0);
        RmvCone = true;

        new string[128];
        format(string, sizeof(string), "%s está removendo um cone.", getPName(playerid));
        MensagemLocal(playerid, 0xF23C3CFF, string, 50);

    }
    else SendClientMessage(playerid, 0xF23C3CFF, "ERRO: {FFFFFF}Você não está próximo a um cone!");

    return 1;
}

forward ConeObjeto(playerid);
public ConeObjeto(playerid)
{
    new string[128];
    if(GetPVarInt(playerid,"TempoConeObjeto") == 60)
    {
        format(string, sizeof(string), "%s removeu um cone.", getPName(playerid));
        MensagemLocal(playerid, 0x96D742FF, string, 50);

        RmvCone = false;
        RemovidoCone = true;
        ClearAnimations(playerid);
        DestroyDynamicObject(Cone1);
        Delete3DTextLabel(Cone1TEXT);
        KillTimer(ContagemCone[GetPVarInt(playerid,"Cone")]);
        ContagemCone[GetPVarInt(playerid,"Cone")] = 0;
        SetPVarInt(playerid,"Cone",-1);
        SetPVarInt(playerid,"TempoConeObjeto",0);

        SetTimerEx("RefazerCone", 10000, 0, "i", playerid);
        return 1;
    }
    else
    {
          SetPVarInt(playerid,"TempoConeObjeto",GetPVarInt(playerid,"TempoConeObjeto")+1);
         format(string,sizeof(string),"~w~%i / ~r~60", GetPVarInt(playerid,"TempoConeObjeto"));
          GameTextForPlayer(playerid, string, 2500, 3);
      }
       return 1;
}

forward RefazerCone(playerid);
public RefazerCone(playerid)
{
    new string[128];
    format(string, sizeof(string), "%s o cone da DP foi recriado.", getPName(playerid));
    MensagemLocal(playerid, 0x96D742FF, string, 50);

    Cone1 = CreateDynamicObject(2960, 849.29999, -928.79999, 55.9, 0, 98.994, 307.987);
    Cone1TEXT = Create3DTextLabel("Para remover este cone\nuse '/removercone'",0xE3E3E3FF,849.29999, -928.79999, 56.9,25.0,0);

    RemovidoCone = false;
       return 1;
}



RE: Flood em objeto removido - k2bi_YT - 03/07/2022

Vi que tinha umas variaveis sem nexo, pelo codigo que você publicou, entao apaguei e formatei o que tinha nas funções de errado, faz o teste

Código PHP:
dcmd_removerbrc(playeridparams[])
{
    #pragma unused params

    if(RmvCone == true) return SendClientMessage(playerid,0xF23C3CFF"ERRO: {FFFFFF}Esse cone já está sendo removido.");
    if(RemovidoCone == true) return SendClientMessage(playerid,0xF23C3CFF"ERRO: {FFFFFF}Esse cone já foi removido.");
    if(PlayerToPoint(0.7playerid849.29999,-928.79999,55.9))
    {
        KillTimer(ContagemCone[playerid]);
        ContagemCone[playerid] = SetTimerEx("ConeObjeto"1000true"i"playerid);
        ApplyAnimation(playerid"BOMBER""BOM_Plant_Loop"4.010010);
        RmvCone true;
        SetPVarInt(playerid"TempoConeObjeto"1);
        new string[128];
        format(stringsizeof(string), "%s está removendo um cone."getPName(playerid));
        MensagemLocal(playerid0xF23C3CFFstring50);
    }
    else SendClientMessage(playerid0xF23C3CFF"ERRO: {FFFFFF}Você não está próximo a um cone!");

    return 1;
}

forward ConeObjeto(playerid);
public 
ConeObjeto(playerid)
{
    new string[128];
    if(GetPVarInt(playerid,"TempoConeObjeto") >= 60)
    {
        RmvCone false;
        RemovidoCone true;
        ClearAnimations(playerid);
        DestroyDynamicObject(Cone1);
        Delete3DTextLabel(Cone1TEXT);
        KillTimer(ContagemCone[playerid]);
        SetPVarInt(playerid,"TempoConeObjeto",0);
        SetTimerEx("RefazerCone"10000false"i"playerid);

        format(stringsizeof(string), "%s removeu um cone."getPName(playerid));
        MensagemLocal(playerid0x96D742FFstring50);
        return 1;
    }
    SetPVarInt(playerid,"TempoConeObjeto", (GetPVarInt(playerid,"TempoConeObjeto")+1));
    format(string,sizeof(string),"~w~%i / ~r~60"GetPVarInt(playerid,"TempoConeObjeto"));
    GameTextForPlayer(playeridstring25003);
    return 1;
}

forward RefazerCone(playerid);
public 
RefazerCone(playerid)
{
    new string[128];
    RemovidoCone false;
    Cone1 CreateDynamicObject(2960849.29999, -928.7999955.9098.994307.987);
    Cone1TEXT Create3DTextLabel("Para remover este cone\nuse '/removercone'",0xE3E3E3FF,849.29999, -928.7999956.9,25.0,0);

    format(stringsizeof(string), "%s o cone da DP foi recriado."getPName(playerid));
    MensagemLocal(playerid0x96D742FFstring50);
    return 1;




RE: Flood em objeto removido - Seck - 03/07/2022

(03/07/2022 15:49)k2bi_YT Escreveu: Vi que tinha umas variaveis sem nexo, pelo codigo que você publicou, entao apaguei e formatei o que tinha nas funções de errado, faz o teste

Código PHP:
dcmd_removerbrc(playeridparams[])
{
    #pragma unused params

    if(RmvCone == true) return SendClientMessage(playerid,0xF23C3CFF"ERRO: {FFFFFF}Esse cone já está sendo removido.");
    if(RemovidoCone == true) return SendClientMessage(playerid,0xF23C3CFF"ERRO: {FFFFFF}Esse cone já foi removido.");
    if(PlayerToPoint(0.7playerid849.29999,-928.79999,55.9))
    {
        KillTimer(ContagemCone[playerid]);
        ContagemCone[playerid] = SetTimerEx("ConeObjeto"1000true"i"playerid);
        ApplyAnimation(playerid"BOMBER""BOM_Plant_Loop"4.010010);
        RmvCone true;
        SetPVarInt(playerid"TempoConeObjeto"1);
        new string[128];
        format(stringsizeof(string), "%s está removendo um cone."getPName(playerid));
        MensagemLocal(playerid0xF23C3CFFstring50);
    }
    else SendClientMessage(playerid0xF23C3CFF"ERRO: {FFFFFF}Você não está próximo a um cone!");

    return 1;
}

forward ConeObjeto(playerid);
public 
ConeObjeto(playerid)
{
    new string[128];
    if(GetPVarInt(playerid,"TempoConeObjeto") >= 60)
    {
        RmvCone false;
        RemovidoCone true;
        ClearAnimations(playerid);
        DestroyDynamicObject(Cone1);
        Delete3DTextLabel(Cone1TEXT);
        KillTimer(ContagemCone[playerid]);
        SetPVarInt(playerid,"TempoConeObjeto",0);
        SetTimerEx("RefazerCone"10000false"i"playerid);

        format(stringsizeof(string), "%s removeu um cone."getPName(playerid));
        MensagemLocal(playerid0x96D742FFstring50);
        return 1;
    }
    SetPVarInt(playerid,"TempoConeObjeto", (GetPVarInt(playerid,"TempoConeObjeto")+1));
    format(string,sizeof(string),"~w~%i / ~r~60"GetPVarInt(playerid,"TempoConeObjeto"));
    GameTextForPlayer(playeridstring25003);
    return 1;
}

forward RefazerCone(playerid);
public 
RefazerCone(playerid)
{
    new string[128];
    RemovidoCone false;
    Cone1 CreateDynamicObject(2960849.29999, -928.7999955.9098.994307.987);
    Cone1TEXT Create3DTextLabel("Para remover este cone\nuse '/removercone'",0xE3E3E3FF,849.29999, -928.7999956.9,25.0,0);

    format(stringsizeof(string), "%s o cone da DP foi recriado."getPName(playerid));
    MensagemLocal(playerid0x96D742FFstring50);
    return 1;

Muito obrigado mano! Deu certo!!!
Se não for muito incomodo, poderia me ajudar a criar o comando pra colocar o cone novamente? 
Por exemplo, já tem o comando de retirar, e  um tempo depois ele é criado automaticamente. mas quero criar um comando pra quem não quiser esperar o tempo, poder criar o cone... seria a mesma coisa, o mesmo tempo de contagem (60), etc. 

Mas desde já te agradeço, obrigado!!