#1

Buenas, mi gamemode posee un sistema de radares mapeados, los cuales detectan si un jugador en vehнculo sobrepasa X velocidad, y lo multa, restбndole dinero..

Ahora, querнa saber como hacer para aсadirle excepciones a eso. їA quй me refiero? Bien, me referнa a que a las variables "[jLider] == 1" y "[jMiembro] == 1" que son de la facciуn de policнas, no les cobren las multas.

pawn Код:
public OnPlayerExceedSpeedLimit(playerid, maxvel, currentvel)
{
    if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
    {
        new str[256], coche, ZoneName[128], lider, miembro;
        GetPlayer2DZone(playerid, ZoneName, 128);
        coche = GetPlayerVehicleID(playerid);
        miembro = JugadorInfo[playerid][jMiembro];
        lider = JugadorInfo[playerid][jLider];
        if(miembro == 17 && EnServicio[playerid] == 1 || lider == 17 && EnServicio[playerid] == 1 || lider == 1 && EnServicio[playerid] == 1 || miembro == 1 && EnServicio[playerid] == 1 || miembro == 2 && EnServicio[playerid] == 1  || lider == 2 && EnServicio[playerid] == 1)
        {
        }
        else
        {
            format(str, sizeof(str), "** Comisarнa: Se ha detectado el vehнculo %s con matrнcula LA-%d excediendo la velocidad en la zona de %s. **", NombreCoche(coche), coche, ZoneName);
            MensajeDeFaccion(1, AZUL, str);
            format(str, sizeof(str), "** Comisarнa: Conducнa a %d Km/h en una carretera donde el mбximo es %d Km/h. **", currentvel, maxvel);
            MensajeDeFaccion(1, AZUL, str);
            format(str, sizeof(str), "* Se nota un destello en el flash del radar. [RADAR]");
            MandarMensajeCercano(20.0, playerid, str,AMARILLO,AMARILLO,AMARILLO,AMARILLO,AMARILLO);
            TextDrawShowForPlayer(playerid,flash[playerid]);
            SetTimerEx("RadarTimer", 6000, false, "i", playerid);
            SetTimerEx("QuitarFalshRadar", 100, false, "i", playerid);
        }
    }
}
Reply
#2

if(miembro == 17 && EnServicio[playerid] == 1 || lider == 17 && EnServicio[playerid] == 1 || lider == 1 && EnServicio[playerid] == 1 || miembro == 1 && EnServicio[playerid] == 1 || miembro == 2 && EnServicio[playerid] == 1 || lider == 2 && EnServicio[playerid] == 1)

Esta linea compruebas mas de lo necesario.. mejor asн:
if(EnServicio[playerid] == 1 && (miembro == 1 || miembro == 17 || miembro == 2))

Eso ya es asumiendo que "miembro" y "lider" lуgicamente sea lo mismo, no tiene sentido ser lider de 2 pero miembro de 1. Ademбs es suficiente con revisar si "EnServicio" una vez, y usar los parйntesis en condiciones de esa forma para que sea mas convencional.
Reply
#3

Agrйgale un 'return 1;' y creo que deberнa solucionar tu problema. O un 'continue'. Aun no entiendo muy bien cuando usar cada cosa.
Reply
#4

Quote:
Originally Posted by Bu11Sh0t
Посмотреть сообщение
Agrйgale un 'return 1;' y creo que deberнa solucionar tu problema. O un 'continue'. Aun no entiendo muy bien cuando usar cada cosa.
'continue' es para detener el script de un bucle for y volver a empezar.. similar a break que detiene la loop por completo, en contrario a continue que solo lo detiene una vez y vuelve a hacer.

pawn Код:
for(int i = 0; i < 10; i++){
    if(i == 0) continue; // si ponemos break, "Funcion" nunca sera ejecutado, porque la loop se detiene cuando i = 0
    Funcion(i);
}
Si "i" es 0 entonces Funcion(i) no se llama, pero se continua el loop.

"return 1;" no es necesario aquн ya que es una funciуn que no deberнa retornar ningъn valor, pero si se desea parar el cуdigo completamente usa "return;" o "return 0;". Solo lo aclaro, que ambas formas (la primera siendo return; y la segunda es usar un "if" y luego un "else", ambas funcionan.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)