Problema de bucle en OnPlayerPickupPickup
#1

Buenas, el problema que tengo en la callback OnPlayerPickupPickup, es que sуlo se ejecuta un bucle y el otro no se ejecuta, llegue a pensar que era error de algъn if, pero los intercambie de lugar y ambos andan a la perfecciуn, el problema es que se coloco el de garajes primero no ejecuta el de las casa y viceversa.
PHP код:
public OnPlayerPickUpPickup(playeridpickupid)
{
    new 
string[256];
    if (
InfoUsuario[playerid][uPickup] != pickupid){
        for (new 
0<= MAX_GARAJESg++)
        {
            if (
GarajesE0[g] == pickupid || GarajesE1[g] == pickupid || GarajesS1[g] == pickupid || GarajesS2[g] == pickupid){
                new 
Float:XFloat:YFloat:Z;
                
GetPlayerPos(playerid,X,Y,Z);
                   
TextDrawShowForPlayer(playeridInfoPickup[3]);
                
TextDrawShowForPlayer(playeridInfoPickup[1]);
                 
TextDrawShowForPlayer(playeridInfoPickup[2]);
                if (
InfoGaraje[g][gPuerta] == 0){
                       
format(stringsizeof(string), "~W~Lugar: ~B~Garaje~N~~W~Puerta: ~R~Cerrada ~N~");
                   }
                   if (
InfoGaraje[g][gPuerta] == 1){
                    
format(stringsizeof(string), "~W~Lugar: ~B~Garaje~N~~W~Puerta: ~G~Abierta ~N~");
                }
                 
TextDrawSetString(InfoPickup[2], string);
                
InfoUsuario[playerid][uPickup] = pickupid;
                
InfoUsuario[playerid][uPickup_X] = X;
                
InfoUsuario[playerid][uPickup_Y] = Y;
                
InfoUsuario[playerid][uPickup_Z] = Z;
                return 
1;
            }
        }
        for (new 
0<= MAX_CASASi++){
            if (
CasasP[i] == pickupid || CasasZ[i] == pickupid){
                new 
Float:XFloat:YFloat:Z;
                
GetPlayerPos(playerid,X,Y,Z);
                if (
InfoCasa[i][cComprada] == 0){
                    
TextDrawShowForPlayer(playeridInfoPickup[0]);
                    
TextDrawShowForPlayer(playeridInfoPickup[1]);
                    
TextDrawShowForPlayer(playeridInfoPickup[2]);
                    if (
InfoCasa[i][cCerrada] == 0){
                        
format(stringsizeof(string), "~W~Lugar: ~B~Casa~N~~W~Direccion: ~B~%s ~N~~W~Tipo: ~B~%s ~N~~W~Puerta: ~R~Cerrada ~N~~W~Precio: ~G~$%d~N~~W~Use: ~R~/Comprar Casa",
                        
InfoCasa[i][cDireccion],
                        
InfoCasa[i][cTipo],
                           
InfoCasa[i][cPrecio]);
                       }
                       else if (
InfoCasa[i][cCerrada] == 1){
                           
format(stringsizeof(string), "~W~Lugar: ~B~Casa~N~~W~Direccion: ~B~%s ~N~~W~Tipo: ~B~%s ~N~~W~Puerta: ~G~Abierta ~N~~W~Precio: ~G~$%d~N~~W~Use: ~R~/Comprar Casa",
                           
InfoCasa[i][cDireccion],
                           
InfoCasa[i][cTipo],
                           
InfoCasa[i][cPrecio]);
                       }
                    
TextDrawSetString(InfoPickup[2], string);
                    
InfoUsuario[playerid][uPickup] = pickupid;
                    
InfoUsuario[playerid][uPickup_X] = X;
                    
InfoUsuario[playerid][uPickup_Y] = Y;
                    
InfoUsuario[playerid][uPickup_Z] = Z;
                      return 
1;
                }
                else if (
InfoCasa[i][cComprada] == 1){
                    
TextDrawShowForPlayer(playeridInfoPickup[0]);
                       
TextDrawShowForPlayer(playeridInfoPickup[1]);
                    
TextDrawShowForPlayer(playeridInfoPickup[2]);
                    if (
InfoCasa[i][cCerrada] == 0){
                        
format(stringsizeof(string), "~W~Lugar: ~B~Casa~N~~W~Descripcion: ~B~%s ~N~~W~Direccion: ~B~%s ~N~~W~Tipo: ~B~%s ~N~~W~Puerta: ~R~Cerrada ~N~",
                        
InfoCasa[i][cTitulo],
                        
InfoCasa[i][cDireccion],
                        
InfoCasa[i][cTipo]);
                    }
                     else if (
InfoCasa[i][cCerrada] == 1){
                        
format(stringsizeof(string), "~W~Lugar: ~B~Casa~N~~W~Descripcion: ~B~%s ~N~~W~Direccion: ~B~%s ~N~~W~Tipo: ~B~%s ~N~~W~Puerta: ~G~Abierta ~N~",
                        
InfoCasa[i][cTitulo],
                        
InfoCasa[i][cDireccion],
                        
InfoCasa[i][cTipo]);
                      }
                    
TextDrawSetString(InfoPickup[2], string);
                    
InfoUsuario[playerid][uPickup] = pickupid;
                    
InfoUsuario[playerid][uPickup_X] = X;
                    
InfoUsuario[playerid][uPickup_Y] = Y;
                    
InfoUsuario[playerid][uPickup_Z] = Z;
                    return 
1;
                   }
                return 
1;
             }
        }
    }
    return 
1;

Reply
#2

Yo te recomiendo que te metas el dedo en el culo , si te sale caca en el dedo tu problema se solucionara solo
Reply
#3

Prueba ahн amigo, es que si el primer bucle se cumple entonces no llega al otro porque pusiste un return 1;
pawn Код:
public OnPlayerPickUpPickup(playerid, pickupid)
{
    new string[256];
    if (InfoUsuario[playerid][uPickup] != pickupid){
        for (new g = 0; g <= MAX_GARAJES; g++)
        {
            if (GarajesE0[g] == pickupid || GarajesE1[g] == pickupid || GarajesS1[g] == pickupid || GarajesS2[g] == pickupid){
                new Float:X, Float:Y, Float:Z;
                GetPlayerPos(playerid,X,Y,Z);
                   TextDrawShowForPlayer(playerid, InfoPickup[3]);
                TextDrawShowForPlayer(playerid, InfoPickup[1]);
                 TextDrawShowForPlayer(playerid, InfoPickup[2]);
                if (InfoGaraje[g][gPuerta] == 0){
                       format(string, sizeof(string), "~W~Lugar: ~B~Garaje~N~~W~Puerta: ~R~Cerrada ~N~");
                   }
                   if (InfoGaraje[g][gPuerta] == 1){
                    format(string, sizeof(string), "~W~Lugar: ~B~Garaje~N~~W~Puerta: ~G~Abierta ~N~");
                }
                 TextDrawSetString(InfoPickup[2], string);
                InfoUsuario[playerid][uPickup] = pickupid;
                InfoUsuario[playerid][uPickup_X] = X;
                InfoUsuario[playerid][uPickup_Y] = Y;
                InfoUsuario[playerid][uPickup_Z] = Z;

            }
        }
        for (new i = 0; i <= MAX_CASAS; i++){
            if (CasasP[i] == pickupid || CasasZ[i] == pickupid){
                new Float:X, Float:Y, Float:Z;
                GetPlayerPos(playerid,X,Y,Z);
                if (InfoCasa[i][cComprada] == 0){
                    TextDrawShowForPlayer(playerid, InfoPickup[0]);
                    TextDrawShowForPlayer(playerid, InfoPickup[1]);
                    TextDrawShowForPlayer(playerid, InfoPickup[2]);
                    if (InfoCasa[i][cCerrada] == 0){
                        format(string, sizeof(string), "~W~Lugar: ~B~Casa~N~~W~Direccion: ~B~%s ~N~~W~Tipo: ~B~%s ~N~~W~Puerta: ~R~Cerrada ~N~~W~Precio: ~G~$%d~N~~W~Use: ~R~/Comprar Casa",
                        InfoCasa[i][cDireccion],
                        InfoCasa[i][cTipo],
                           InfoCasa[i][cPrecio]);
                       }
                       else if (InfoCasa[i][cCerrada] == 1){
                           format(string, sizeof(string), "~W~Lugar: ~B~Casa~N~~W~Direccion: ~B~%s ~N~~W~Tipo: ~B~%s ~N~~W~Puerta: ~G~Abierta ~N~~W~Precio: ~G~$%d~N~~W~Use: ~R~/Comprar Casa",
                           InfoCasa[i][cDireccion],
                           InfoCasa[i][cTipo],
                           InfoCasa[i][cPrecio]);
                       }
                    TextDrawSetString(InfoPickup[2], string);
                    InfoUsuario[playerid][uPickup] = pickupid;
                    InfoUsuario[playerid][uPickup_X] = X;
                    InfoUsuario[playerid][uPickup_Y] = Y;
                    InfoUsuario[playerid][uPickup_Z] = Z;

                }
                else if (InfoCasa[i][cComprada] == 1){
                    TextDrawShowForPlayer(playerid, InfoPickup[0]);
                       TextDrawShowForPlayer(playerid, InfoPickup[1]);
                    TextDrawShowForPlayer(playerid, InfoPickup[2]);
                    if (InfoCasa[i][cCerrada] == 0){
                        format(string, sizeof(string), "~W~Lugar: ~B~Casa~N~~W~Descripcion: ~B~%s ~N~~W~Direccion: ~B~%s ~N~~W~Tipo: ~B~%s ~N~~W~Puerta: ~R~Cerrada ~N~",
                        InfoCasa[i][cTitulo],
                        InfoCasa[i][cDireccion],
                        InfoCasa[i][cTipo]);
                    }
                     else if (InfoCasa[i][cCerrada] == 1){
                        format(string, sizeof(string), "~W~Lugar: ~B~Casa~N~~W~Descripcion: ~B~%s ~N~~W~Direccion: ~B~%s ~N~~W~Tipo: ~B~%s ~N~~W~Puerta: ~G~Abierta ~N~",
                        InfoCasa[i][cTitulo],
                        InfoCasa[i][cDireccion],
                        InfoCasa[i][cTipo]);
                      }
                    TextDrawSetString(InfoPickup[2], string);
                    InfoUsuario[playerid][uPickup] = pickupid;
                    InfoUsuario[playerid][uPickup_X] = X;
                    InfoUsuario[playerid][uPickup_Y] = Y;
                    InfoUsuario[playerid][uPickup_Z] = Z;
                   }

             }
        }
    }
    return 1;
}
Reply
#4

Eso le iba a decir jeje vi muchos return 1; pero no estaba seguro
Reply
#5

Los return estбn especificados correctamente ya que si cumple el if que si esta en tal pickup no necesita abrir el otro bucle ya que esta en el pickup del garaje no en el de la casa, sin embargo quite los return y probй y sigue igual.
Intente colocando mensajes al inicio del otro bucle y al final de toda la funciуn:
PHP код:
public OnPlayerPickUpPickup(playeridpickupid)
{
    new 
string[256];
    if (
InfoUsuario[playerid][uPickup] != pickupid){
        for (new 
0<= MAX_GARAJESg++)
        {
            if (
GarajesE0[g] == pickupid || GarajesE1[g] == pickupid || GarajesS1[g] == pickupid || GarajesS2[g] == pickupid){
                new 
Float:XFloat:YFloat:Z;
                
GetPlayerPos(playerid,X,Y,Z);
                   
TextDrawShowForPlayer(playeridInfoPickup[3]);
                
TextDrawShowForPlayer(playeridInfoPickup[1]);
                 
TextDrawShowForPlayer(playeridInfoPickup[2]);
                if (
InfoGaraje[g][gPuerta] == 0){
                       
format(stringsizeof(string), "~W~Lugar: ~B~Garaje~N~~W~Puerta: ~R~Cerrada ~N~");
                   }
                   if (
InfoGaraje[g][gPuerta] == 1){
                    
format(stringsizeof(string), "~W~Lugar: ~B~Garaje~N~~W~Puerta: ~G~Abierta ~N~");
                }
                 
TextDrawSetString(InfoPickup[2], string);
                
InfoUsuario[playerid][uPickup] = pickupid;
                
InfoUsuario[playerid][uPickup_X] = X;
                
InfoUsuario[playerid][uPickup_Y] = Y;
                
InfoUsuario[playerid][uPickup_Z] = Z;
            }
        }
        
Mensaje(playerid, -1"2"); ----------------------------------> cuando va iniciar el 2 bucle
        
for (new 0<= MAX_CASASi++){
            
Mensaje(playerid, -1"3"); -------------------------> al inicio del bucle
            
if (CasasP[i] == pickupid || CasasZ[i] == pickupid){
                new 
Float:XFloat:YFloat:Z;
                
GetPlayerPos(playerid,X,Y,Z);
                if (
InfoCasa[i][cComprada] == 0){
                    
TextDrawShowForPlayer(playeridInfoPickup[0]);
                    
TextDrawShowForPlayer(playeridInfoPickup[1]);
                    
TextDrawShowForPlayer(playeridInfoPickup[2]);
                    if (
InfoCasa[i][cCerrada] == 0){
                        
format(stringsizeof(string), "~W~Lugar: ~B~Casa~N~~W~Direccion: ~B~%s ~N~~W~Tipo: ~B~%s ~N~~W~Puerta: ~R~Cerrada ~N~~W~Precio: ~G~$%d~N~~W~Use: ~R~/Comprar Casa",
                        
InfoCasa[i][cDireccion],
                        
InfoCasa[i][cTipo],
                           
InfoCasa[i][cPrecio]);
                       }
                       else if (
InfoCasa[i][cCerrada] == 1){
                           
format(stringsizeof(string), "~W~Lugar: ~B~Casa~N~~W~Direccion: ~B~%s ~N~~W~Tipo: ~B~%s ~N~~W~Puerta: ~G~Abierta ~N~~W~Precio: ~G~$%d~N~~W~Use: ~R~/Comprar Casa",
                           
InfoCasa[i][cDireccion],
                           
InfoCasa[i][cTipo],
                           
InfoCasa[i][cPrecio]);
                       }
                    
TextDrawSetString(InfoPickup[2], string);
                    
InfoUsuario[playerid][uPickup] = pickupid;
                    
InfoUsuario[playerid][uPickup_X] = X;
                    
InfoUsuario[playerid][uPickup_Y] = Y;
                    
InfoUsuario[playerid][uPickup_Z] = Z;
                }
                else if (
InfoCasa[i][cComprada] == 1){
                    
TextDrawShowForPlayer(playeridInfoPickup[0]);
                       
TextDrawShowForPlayer(playeridInfoPickup[1]);
                    
TextDrawShowForPlayer(playeridInfoPickup[2]);
                    if (
InfoCasa[i][cCerrada] == 0){
                        
format(stringsizeof(string), "~W~Lugar: ~B~Casa~N~~W~Descripcion: ~B~%s ~N~~W~Direccion: ~B~%s ~N~~W~Tipo: ~B~%s ~N~~W~Puerta: ~R~Cerrada ~N~",
                        
InfoCasa[i][cTitulo],
                        
InfoCasa[i][cDireccion],
                        
InfoCasa[i][cTipo]);
                    }
                     else if (
InfoCasa[i][cCerrada] == 1){
                        
format(stringsizeof(string), "~W~Lugar: ~B~Casa~N~~W~Descripcion: ~B~%s ~N~~W~Direccion: ~B~%s ~N~~W~Tipo: ~B~%s ~N~~W~Puerta: ~G~Abierta ~N~",
                        
InfoCasa[i][cTitulo],
                        
InfoCasa[i][cDireccion],
                        
InfoCasa[i][cTipo]);
                      }
                    
TextDrawSetString(InfoPickup[2], string);
                    
InfoUsuario[playerid][uPickup] = pickupid;
                    
InfoUsuario[playerid][uPickup_X] = X;
                    
InfoUsuario[playerid][uPickup_Y] = Y;
                    
InfoUsuario[playerid][uPickup_Z] = Z;
                   }
             }
        }
        
Mensaje(playerid, -1"4"); -------------------------> cuando sale del bucle 1 y 2
    
}
    
Mensaje(playerid, -1"5");-------------------------------> cuando sale de toda la funcion 
    
return 1;

Entonces me paro en un pickup del primer bucle y sуlo aparece el textdrawn correspondiente y el mensaje 5, y cuando me paro en el de una casa que es el segundo bucle no manda ni textdrawn ni mensaje.
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)