[Ajuda] Mensagem de Kick nгo aparece para o kickado
#1

Olб pessoal, em um code de kick aqui, a mensagem de kick aparece para todos, menos para o kickado, para ele aparece direto Server Closed The Conection, deveria ficar assim para o kickado:

Quote:

Fulano foi kickado por ciclano, Motivo:[motivo]
Server Closed The Conection

Isso nгo pode acontecer, pois o kickado deve saber o motivo pelo qual foi kickado, pois ele poderia muito bem pensar que o server pode ter sido reiniciado ou que caiu a conexгo dele ou algo do tipo :/

code do /kick(kick destacado de vermelho):

Код:
if(strcmp(cmd, "/kick", true) == 0)
	{
	    if(IsPlayerConnected(playerid))
	    {
	    	tmp = strtok(cmdtext, idx);
			if(!strlen(tmp))
			{
				SendClientMessage(playerid, COLOR_GRAD2, "USE: /kick [id] [motivo]");
				return true;
			}
			giveplayerid = ReturnUser(tmp);
			if (PlayerInfo[playerid][pAdmin] >= 3)
			{
       			if(admtrampando[playerid] < 1 && PlayerInfo[playerid][pAdmin] != DONO)
				{
					SendClientMessage(playerid, COLOR_GRAD1, "Vocк nгo estб trabalhando! (/trabalhar)");
					return true;
				}
			    if(IsPlayerConnected(giveplayerid))
			    {
			        if(giveplayerid != INVALID_PLAYER_ID)
                    {
			        	if(PlayerInfo[giveplayerid][pAdmin] >= SUB_DONO && PlayerInfo[playerid][pAdmin] != DONO)
						{
							SendClientMessage(playerid, COLOR_GRAD1, "Vocк nгo pode kickar um Admin Dono !");
							return true;
						}
					    GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
						GetPlayerName(playerid, sendername, sizeof(sendername));
						new length = strlen(cmdtext);
						while ((idx < length) && (cmdtext[idx] <= ' '))
						{
							idx++;
						}
						new offset = idx;
						new result[64];
						while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
						{
							result[idx - offset] = cmdtext[idx];
							idx++;
						}
						result[idx - offset] = EOS;
						if(!strlen(result))
						{
							SendClientMessage(playerid, COLOR_GRAD2, "USE: /kick [id] [motivo]");
							return true;
						}
						getdate(year, month, day);
						if(admtrampando[playerid] == 1 && admhide[playerid] == 1)
						{
							format(string, sizeof(string), "AdmCmd: %s foi kickado por Homem_Aranha(Modo Cia), Motivo: %s (%d-%d-%d)", giveplayer,(result),day,month,year);
							KickLog(string);
							format(string, sizeof(string), "AdmCmd: %s foi kickado por Homem_Aranha, Motivo: %s", giveplayer,(result));
							SendClientMessageToAll(COLOR_LIGHTRED, string);
						}
						else
						{
							format(string, sizeof(string), "AdmCmd: %s foi kickado por %s, Motivo: %s (%d-%d-%d)", giveplayer, sendername, (result),day,month,year);
							KickLog(string);
							format(string, sizeof(string), "AdmCmd: %s foi kickado por %s, Motivo: %s", giveplayer, sendername, (result));
							SendClientMessageToAll(COLOR_LIGHTRED, string);
						}
						Kick(giveplayerid);
						return true;
					}
				}//not connected
			}
			else
			{
				SendClientMessage(playerid, COLOR_GRAD1, "   Esse nгo й um jogador ativo.");
			}
		}
		return true;
    }
Me ajudem por favor :/

Obs: Ja tentei no lugar do Kick(giveplayerid); , colocar isso:

Код:
Settimer("kikarplayer", 100, 0);
Код:
forward kikarplayer(giveplayerid);
public kikarplayer()
{
         Kick(giveplayerid);
}
Tambйm nessa callback kikarplayer ja tentei determinar o que й o giveplayerid, como ReturnUser(tmp), mas de todos os jeitos quem й kickado й quem usa o comando, e isso nгo deveria acontecer
Reply
#2

Й um bug do SAMP.. ponha isso no seu GM e mude seu Kick para KickEx

PHP код:

forward KickExx 
playerid );


public 
KickExx playerid )
{
    
Kick playerid ) ;
}

KickEx playerid )
{
    
SetTimerEx "KickExx" 500 false "i" playerid ) ;

Reply
#3

Код:
SetTimerEx("Kick", 100, 0, "i", playerid);
Код:
forward Kick(playerid);
public Kick(playerid)
{
         Kick(playerid);
         return 1;
}
Se quiser fazer com Timer faz assim...
Reply
#4

Quote:
Originally Posted by [THs]ShadoW
Посмотреть сообщение
Код:
SetTimerEx("Kick", 100, 0, "i", playerid);
Код:
forward Kick(playerid);
public Kick(playerid)
{
         Kick(playerid);
         return 1;
}
Se quiser fazer com Timer faz assim...
Isso nгo funciona... Isso iria redefinir a funзгo Kick e ia dar merda.. ou nгo compilava e caso compilasse pense na lуgica.. toda vez que aparecesse Kick ele ia chamar o timer que chamava Kick de novo... й um loop infinito!
Reply
#5

Foi manos, vlw sу que teve um detalhe, no lugar do playerid era giveplayerid xD.
Quote:

SetTimerEx ( "KickExx" , 500 , false , "i" , giveplayerid ) ;

Reply
#6

http://forum.sa-mp.com/showpost.php?...postcount=2486
Reply
#7

topo:
pawn Код:
#define Kick(%0) SetTimerEx("Kicka", 100, false, "i", %0)



//qualquer lugar do gm


forward Kicka(p); public Kicka(p) {
    #undef Kick
    Kick(p);
    #define Kick(%0) SetTimerEx("Kicka", 100, false, "i", %0)
    return 1;
}
Reply
#8

O SA-MP apуs da versгo "x", se nгo estou em erro, tкm um delay nas funзхes de kick e ban.
A ъnica maneira de resolver tal problema й de criar um timer[como os exemplos a cima] para kickar & banir.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)