[problema] muteando -
MrNatrio - 27.09.2014
Buenas, quiero hacer un comando que sirva para mutear a la gente que mal usa el canal de preguntas.
Йsto es lo que hice:
pawn Код:
CMD:mut(playerid, params[])
{
if(PlayerInfo[playerid][AdminLevel] != 3) SendClientMessage(playerid,red,"Este comando no existe");
new Texto[500],string[700],name[16],id;
if(!IsPlayerConnected(id)) SendClientMessage(playerid,-1,"El jugador no estб conectado");
if(sscanf(params,"us[500]d",id,Texto,tiempomut)) return SendClientMessage(playerid,blue,"Uso: /mut (id) (razуn) (tiempo)");
{
GetPlayerName(id, name,sizeof(name));
format(string,sizeof(string),"%s ha sido muteado. Razуn: %s",name,Texto);
SendClientMessageToAll(red,string);
Muteado = 1;
muteado = SetTimerEx("muted",tiempomut,false,"d",playerid);
}
return 1;
}
y aquн hay la funcciуn del Timer:
pawn Код:
forward Muted(pid);
public Muted(pid)
{
if(Muteado == 1)
if(tiempomut == 0)
{
KillTimer(muteado);
Muteado = 0;
SendClientMessage(pid,blue,"Ya no estбs muteado. Esperamos que esto le haya servido de lecciуn");
}
return 1;
}
Bueno, lo que pasa es que si pongo por ejemplo:
/mut 0 Insultos 1000 entonces sale el mensaje de que estб muteado y si el jugador quiere hacer una pregunta le sale que estб muteado.
Luego lo que hice, es un comando para saber cuanto tiempo estб muteado:
pawn Код:
CMD:tiempo(playerid, params[])
{
new comprobar[10],string[100];
if(Muteado == 0) return SendClientMessage(playerid,-1,"No estбs muteado");
if(sscanf(params,"s[10]",comprobar)) return SendClientMessage(playerid,blue,"Uso: /tiempo muteado");
if(strcmp(comprobar,"muteado",true) == 0)
{
format(string,sizeof(string),"Te quedan %d ms. para que no estйs muteado",muteado);
SendClientMessage(playerid,red,string);
}
else
{
SendClientMessage(playerid,grey,"Ese comando no existe");
}
return 1;
}
Aquн es cuando empieza el problema, cuando pongo
/tiempo muteado, me sale todo el rato que estб muteado X milisegundos y no va bajando.
Quisiera saber como hacer para cuando miras el tiempo, te salga por ejemplo:
Estбs muteado 'x' tiempo hasta que que la 'x' estй a 0 y luego le vuelva dejar a hacer preguntas.
Espero que me puedan ayudar, gracias de antemano.
Respuesta: [problema] muteando -
[J]ulian - 27.09.2014
El mбs principal problema en tu cуdigo es que deberнas usar un array para que sea individual para cada jugador, tal cual lo tienes ahora es un mute global, a todos los conectados.
Para poder saber cuanto tiempo paso o cuanto tiempo queda tenes que guardar en una variable (tiempo actual + tiempo requerido) y luego para comprobarlo (valor guardado - tiempo actual) = tiempo restante. Si tiempo actual es mayor a valor guardado es que el tiempo ya se cumpliу.
Yo lo harнa de la siguiente manera:
pawn Код:
new Muted[MAX_PLAYERS];
public OnPlayerConnect(playerid)
{
Muted[playerid] = 0;
return 1;
}
public OnPlayerUpdate(playerid)
{
if(Muted[playerid] != 0 && Muted[playerid] < gettime())
{
Muted[playerid] = 0;
SendClientMessage(playerid, blue, "Ya no estбs muteado. Esperamos que esto le haya servido de lecciуn");
}
return 1;
}
CMD:mut(playerid, params[])
{
if(PlayerInfo[playerid][AdminLevel] >= 3)
{
new user, reason[128], time;
if(!sscanf(params, "uis[128]", user, time, reason))
{
new name[MAX_PLAYER_NAME], string[128];
GetPlayerName(user, name, MAX_PLAYER_NAME);
format(string, 128, "%s ha sido muteado. Razon: %s", name, reason);
SendClientMessageToAll(red, string);
Muted[user] = gettime()+time;
}
else SendClientMessage(playerid, blue, "Uso: /mut [id] [tiempo en segundos] [razon]");
}
else SendClientMessage(playerid, red, "Este comando no existe");
return 1;
}
CMD:tiempo(playerid, params[])
{
if(!Muted[playerid])
{
return SendClientMessage(playerid, -1, "No estбs muteado");
}
new comprobar[10];
if(!sscanf(params, "s[10]", comprobar))
{
if(!strcmp(comprobar, "muteado", true))
{
new string[128];
format(string, sizeof(string), "Te quedan %i segundos para que se termine tu muteo", Muted[playerid]-gettime());
SendClientMessage(playerid, red, string);
}
else SendClientMessage(playerid, grey, "Ese comando no existe");
}
else SendClientMessage(playerid, blue, "Uso: /tiempo muteado");
return 1;
}
Respuesta: [problema] muteando -
deflog - 27.09.2014
pawn Код:
CMD:mut(playerid, params[])
{
if(PlayerInfo[playerid][AdminLevel] < 3) return SendClientMessage(playerid,red,"Este comando no existe");
new Texto[78],string[128],name[MAX_PLAYER_NAME], id;
if(sscanf(params,"us[78]d",id,Texto,tiempomut)) return SendClientMessage(playerid,blue,"Uso: /mut (id) (razуn) (tiempo)");
{
if(!IsPlayerConnected(id)) return SendClientMessage(playerid,-1,"El jugador no estб conectado");
GetPlayerName(id, name,MAX_PLAYER_NAME);
format(string,sizeof(string),"%s ha sido muteado. Razуn: %s",name,Texto);
SendClientMessageToAll(red,string);
Muteado[id] = 1;
muteado[id] = SetTimerEx("muted",tiempomut,false,"d",playerid);
}
return 1;
}
pawn Код:
forward Muted(pid);
public Muted(pid)
{
if(Muteado[pid] == 1)
{
Muteado = 0;
SendClientMessage(pid,blue,"Ya no estбs muteado. Esperamos que esto le haya servido de lecciуn");
}
return 1;
}
pawn Код:
CMD:tiempo(playerid, params[])
{
new comprobar[10],string[100];
if(Muteado[playerid] == 0) return SendClientMessage(playerid,-1,"No estбs muteado");
if(sscanf(params,"s[10]",comprobar)) return SendClientMessage(playerid,blue,"Uso: /tiempo muteado");
if(strcmp(comprobar,"muteado",true) == 0)
{
format(string,sizeof(string),"Te quedan %d ms. para que no estйs muteado",muteado[playerid]-gettime());
SendClientMessage(playerid,red,string);
}
else
{
SendClientMessage(playerid,grey,"Ese comando no existe");
}
return 1;
}
Respuesta: [problema] muteando -
[J]ulian - 27.09.2014
deflog, ese comando tiempo no cumplirб su funciуn.
"SetTimerEx" devuelve el ID del timer, no el tiempo en el que termina.
Respuesta: [problema] muteando -
MrNatrio - 27.09.2014
Julian, me ha funcionadoo pero el tiempo baja hasta el -1 y luego me dice: ya no estбs muteado.
їCуmo hago para que cuando estй a 0s se pare y me envie el mensaje?
Respuesta: [problema] muteando -
[J]ulian - 27.09.2014
Cambia:
pawn Код:
Muted[playerid] < gettime()
por:
pawn Код:
Muted[playerid] <= gettime()
Respuesta: [problema] muteando -
MrNatrio - 27.09.2014
Gracias, ahora funciona bien