[problema] muteando
#1

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.
Reply
#2

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;
}
Reply
#3

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;
}
Reply
#4

deflog, ese comando tiempo no cumplirб su funciуn.

"SetTimerEx" devuelve el ID del timer, no el tiempo en el que termina.
Reply
#5

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?
Reply
#6

Cambia:

pawn Код:
Muted[playerid] < gettime()
por:

pawn Код:
Muted[playerid] <= gettime()
Reply
#7

Gracias, ahora funciona bien
Reply


Forum Jump:


Users browsing this thread: 4 Guest(s)