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(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)) { KillTimer(ContagemCone[playerid]); ContagemCone[playerid] = SetTimerEx("ConeObjeto", 1000, true, "i", playerid); ApplyAnimation(playerid, "BOMBER", "BOM_Plant_Loop", 4.0, 1, 0, 0, 1, 0); RmvCone = true; SetPVarInt(playerid, "TempoConeObjeto", 1); 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) { RmvCone = false; RemovidoCone = true; ClearAnimations(playerid); DestroyDynamicObject(Cone1); Delete3DTextLabel(Cone1TEXT); KillTimer(ContagemCone[playerid]); SetPVarInt(playerid,"TempoConeObjeto",0); SetTimerEx("RefazerCone", 10000, false, "i", playerid);
format(string, sizeof(string), "%s removeu um cone.", getPName(playerid)); MensagemLocal(playerid, 0x96D742FF, string, 50); return 1; } 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]; RemovidoCone = false; 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);
format(string, sizeof(string), "%s o cone da DP foi recriado.", getPName(playerid)); MensagemLocal(playerid, 0x96D742FF, string, 50); 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(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)) { KillTimer(ContagemCone[playerid]); ContagemCone[playerid] = SetTimerEx("ConeObjeto", 1000, true, "i", playerid); ApplyAnimation(playerid, "BOMBER", "BOM_Plant_Loop", 4.0, 1, 0, 0, 1, 0); RmvCone = true; SetPVarInt(playerid, "TempoConeObjeto", 1); 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) { RmvCone = false; RemovidoCone = true; ClearAnimations(playerid); DestroyDynamicObject(Cone1); Delete3DTextLabel(Cone1TEXT); KillTimer(ContagemCone[playerid]); SetPVarInt(playerid,"TempoConeObjeto",0); SetTimerEx("RefazerCone", 10000, false, "i", playerid);
format(string, sizeof(string), "%s removeu um cone.", getPName(playerid)); MensagemLocal(playerid, 0x96D742FF, string, 50); return 1; } 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]; RemovidoCone = false; 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);
format(string, sizeof(string), "%s o cone da DP foi recriado.", getPName(playerid)); MensagemLocal(playerid, 0x96D742FF, string, 50); 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!!
|