їMejorar esto?
#1

Buenas, tengo el siguiente codigo que funciona a la perfeccion pero hay un pequeсo problema o bien dicho varios.

pawn Код:
public OnPlayerUpdate(playerid)
{
    if(gIsPlayerLoggedIn[playerid])
    {
        new string[126], zone[126];
        GetPlayer2DZone(playerid, zone, MAX_ZONE_NAME);
        format(string, sizeof(string), "%s", zone);
        TextDrawSetString(Locationtext[playerid], string);
        if(PlayerData[playerid][AdminLevel] < 3)
        {
            if(IsPlayerInAnyVehicle(playerid))
            {
                    if(GetPlayerSpeed(playerid, true) > 200)
                        {
                            format(string, sizeof(string), "{FFFFFF} %s (%d) esta manejando a %d kmh (speedhack).", GetPlayersName(playerid), playerid, GetPlayerSpeed(playerid, true));
                            SendAdministratorMessage(string);
                        }
            }
            if(GetPlayerSpeed(playerid, true) > 50)
                        {
                            format(string, sizeof(string), "{FFFFFF} %s (%d) esta corriendo a %d kmh (posible cheat de vuelo).", GetPlayersName(playerid), playerid, GetPlayerSpeed(playerid, true));
                            SendAdministratorMessage(string);
                        }
        }
    }
   
   
    return 1;
}
El codigo funciona bien, pero si hay un "cheater" manejando a mas de 200km/h (speedhack) al administrador le floodea todo y me gustaria saber la forma de hacer que envie un mensaje cada 5 minutos u algo asi (configurable).

Otra cosa tambien es si alguien va arriba de un coche y este va a mas de 50km/h es reconocido como cheat, їcomo se podria mejorar eso?

Saludos y gracias
Reply
#2

Quote:
Originally Posted by benjas09
Посмотреть сообщение
Buenas, tengo el siguiente codigo que funciona a la perfeccion pero hay un pequeсo problema o bien dicho varios.

pawn Код:
public OnPlayerUpdate(playerid)
{
    if(gIsPlayerLoggedIn[playerid])
    {
        new string[126], zone[126];
        GetPlayer2DZone(playerid, zone, MAX_ZONE_NAME);
        format(string, sizeof(string), "%s", zone);
        TextDrawSetString(Locationtext[playerid], string);
        if(PlayerData[playerid][AdminLevel] < 3)
        {
            if(IsPlayerInAnyVehicle(playerid))
            {
                    if(GetPlayerSpeed(playerid, true) > 200)
                        {
                            format(string, sizeof(string), "{FFFFFF} %s (%d) esta manejando a %d kmh (speedhack).", GetPlayersName(playerid), playerid, GetPlayerSpeed(playerid, true));
                            SendAdministratorMessage(string);
                        }
            }
            if(GetPlayerSpeed(playerid, true) > 50)
                        {
                            format(string, sizeof(string), "{FFFFFF} %s (%d) esta corriendo a %d kmh (posible cheat de vuelo).", GetPlayersName(playerid), playerid, GetPlayerSpeed(playerid, true));
                            SendAdministratorMessage(string);
                        }
        }
    }
   
   
    return 1;
}
El codigo funciona bien, pero si hay un "cheater" manejando a mas de 200km/h (speedhack) al administrador le floodea todo y me gustaria saber la forma de hacer que envie un mensaje cada 5 minutos u algo asi (configurable).

Otra cosa tambien es si alguien va arriba de un coche y este va a mas de 50km/h es reconocido como cheat, їcomo se podria mejorar eso?

Saludos y gracias
pawn Код:
static bool:Avisado[MAX_PLAYERS] = false;
static RenewTime[MAX_PLAYERS];
public OnPlayerUpdate(playerid)
{
    if(gIsPlayerLoggedIn[playerid])
    {
        new string[126], zone[126];
        GetPlayer2DZone(playerid, zone, MAX_ZONE_NAME);
        format(string, sizeof(string), "%s", zone);
        TextDrawSetString(Locationtext[playerid], string);
        if(Avisado[playerid] && gettime() > RenewTime[playerid])
        {
            Avisado[playerid] = false;
            RenewTime[playerid] = 0;
        }
        if(PlayerData[playerid][AdminLevel] < 3)
        {
            if(IsPlayerInAnyVehicle(playerid))
            {
                if(GetPlayerSpeed(playerid, true) > 200 && !Avisado[playerid])
                {
                    format(string, sizeof(string), "{FFFFFF} %s (%d) esta manejando a %d kmh (speedhack).", GetPlayersName(playerid), playerid, GetPlayerSpeed(playerid, true));
                    SendAdministratorMessage(string);
                    Avisado[playerid] = true;
                    RenewTime[playerid] = gettime() + (60*5);
                }
            }
            if(GetPlayerSpeed(playerid, true) > 50 && !Avisado[playerid] && GetPlayerSurfingVehicleID(playerid) == INVALID_VEHICLE_ID)
            {
                format(string, sizeof(string), "{FFFFFF} %s (%d) esta corriendo a %d kmh (posible cheat de vuelo).", GetPlayersName(playerid), playerid, GetPlayerSpeed(playerid, true));
                SendAdministratorMessage(string);
                Avisado[playerid] = true;
                RenewTime[playerid] = gettime() + (60*5);
            }
        }
    }
    return 1;
}
Eso deberia funcionar
Reply
#3

Hace un timer de un minuto, el cual se ejecute repetidamente. Entonces cuando el timer sea ejecutado y detecte la funciуn enviarнa el mensaje a los administradores, si el jugador sigue corriendo a mas de 200 y el timer detecta nuevamente la funciуn, enviarнa otro mensaje, asн suscesivamente cada un minuto.
Primero podrнas hacer la condiciуn que si el jugador no estб en un vehнculo y luego si estб en йl.

pawn Код:
SetTimer("TimerDeUnMinuto",60000,true);//En OnGameModeInit
pawn Код:
forward TimerDeUnMinuto();
public TimerDeUnMinuto()
{
foreach(new i:Player)
{
if(PlayerData[i][AdminLevel] < 3)
{
     if(IsPlayerInAnyVehicle(i))
    {
       if(GetPlayerSpeed(i, true) > 200)
       {
           format(string, sizeof(string), "{FFFFFF} %s (%d) esta manejando a %d kmh (speedhack).",                 GetPlayersName(i), i, GetPlayerSpeed(i, true));
           SendAdministratorMessage(string);
        }
   }  
   else
   {
      if(GetPlayerSpeed(i, true) > 50)
      {
          format(string, sizeof(string), "{FFFFFF} %s (%d) esta corriendo a %d kmh (posible cheat de vuelo).",   GetPlayersName(i), i, GetPlayerSpeed(i, true));
          SendAdministratorMessage(string);
      }
  }
}
}
}
Pude haberme equivocado en algo.
Reply
#4

Juance, eso no funcionarнa muy bien. Solo verificaria si va a mas velocidad de lo normal, cada un minuto. їY si lo ocupa justo antes y justo despues de que el timer funcione?

JustBored, ahн es cuando debes ocupar static para no declarar una variable fuera.
Reply
#5

Quote:
Originally Posted by DesingMyCry
Посмотреть сообщение
Juance, eso no funcionarнa muy bien. Solo verificaria si va a mas velocidad de lo normal, cada un minuto. їY si lo ocupa justo antes y justo despues de que el timer funcione?

JustBored, ahн es cuando debes ocupar static para no declarar una variable fuera.
Tenes razуn ahн editй.
Reply
#6

Pero el hack de velocidad no lo usarian 30 segundos, quizбs que el timer se ejecute cada 10 segundos їo estarнa mal?
Reply
#7

No probe el codigo todavia, pero tiene buena pinta.

Ahora mi duda es la siguiente como verifico quien conduce el vehiculo? porque si vas de acompaсante tambien te reconoce como cheater
Reply
#8

Obteniendo el estado del jugador.

pawn Код:
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)