Alguien sabe por que sucede esto?
#1

Hola a todos, bueno verбn, tengo un gran problema y aъn no lo he podido solucionar, me parece muy raro, por que desde mi punto de vista el cуdigo esta bien, no se por que sucede, es demasiado raro, demasiado... explicarй un poco sobre el sistema y luego darй el error;
Es un sistema de peajes que estoy realizando, al poner /peaje detecta si estoy en un peaje, si no estoy allн pues aparecerб el mensaje de que no me encuentro en un lugar para pagar el peaje, funciona correctamente, he puesto un comando el cual es /getpeaje, obtiene la id del peaje en el que estoy, y la obtiene bien, si me hago en la primera posiciуn que asigne dirб que es el ID 1, y si me pongo en el otro peaje dirб que es el id 2, pero al poner el comando /peaje , se paga correctamente el id 1, pero al ponerme en el peaje id 2 no se cumple, y tira error de comando invalido, me parece algo extraсo, a continuaciуn dejo todo el cуdigo que he realizado hasta ahora, gracias.

pawn Код:
enum PeajeInfo //Puntos de peajes
{
    Float:peaX,
    Float:peaY,
    Float:peaZ,
}
new Peajes[2][PeajeInfo] = {
    {
        1643.764526, -9.333080, 36.254623},
    {
        1625.108276, -2.850519, 36.381938}
};

stock GetPlayerPeaje(playerid) //Detecta cercanнa a un peaje
{
    new Peaje;
    for(new i = 0; i < 2; i ++)
    {
        if(IsPlayerInRangeOfPoint(playerid, 2.0, Peajes[i][peaX], Peajes[i][peaY], Peajes[i][peaZ]))
        {
            Peaje = i+1;
        }
    }
    return Peaje;
}
CMD:peaje(playerid,params[])
{
    new i = GetPlayerPeaje(playerid);
    if(i < 0) return SendClientMessage(playerid, COLOR_GREY, "ЎNo estas en un peaje!");
    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,COLOR_GREY,"ЎNo estas en un auto!");
    if(GetPlayerMoney(playerid) < 10) return SendClientMessage(playerid,COLOR_GREY,"ЎNo tienes suficiente dinero!");
    if(PeajeAbierto[i] == 1) return SendClientMessage(playerid,COLOR_GREY,"ЎEste peaje ya esta abierto!");
    GivePlayerMoneyAC(playerid, -10);
    InfoDineroGob[0][gDinero] += 5;
    PeajeAbierto[i] = 1;
    Savegob();
    SendClientMessage(playerid,COLOR_GREY,"ЎHas pagado el peaje! tienes 5 segundos para pasar!");
    i = -1; // lo he puesto en 0 y tampoco funciona.
    return 1;
}
Desde ya muchas gracias y espero que me ayuden a encontrar soluciуn para este pequeсo error, gracias y saludos cordiales.

Actualizo:

Solo sucede cuando estбn estas 2 cosas.
pawn Код:
PeajeAbierto[i] = 1;
y
if(PeajeAbierto[i] == 1) return SendClientMessage(playerid,COLOR_GREY,"ЎEste peaje ya esta abierto!");
Alguien sabe por que solo sucede con esas 2 cosas?
Reply
#2

es por el GetPlayerPeaje, intenta asi

PHP код:
enum PeajeInfo //Puntos de peajes
{
    
Float:peaX,
    
Float:peaY,
    
Float:peaZ,
    
peaLock
}
new 
Peajes[2][PeajeInfo] = {
    {
1643.764526, -9.33308036.2546230},
    {
1625.108276, -2.85051936.3819380}
};
stock GetPlayerPeaje(playerid
{
    for(new 
0sizeof(Peajes); ++)
    {
        if(!
IsPlayerInRangeOfPoint(playerid2.0Peajes[i][peaX], Peajes[i][peaY], Peajes[i][peaZ]))
            continue;
            
           return 
i;
    }
    return -
1;
}
CMD:peaje(playerid,params[])
{
    new
        
id;
    
    if((
id GetPlayerPeaje(playerid)) == -1)
        return 
SendClientMessage(playeridCOLOR_GREY"ЎNo estas en un peaje!");
        
    if(!
IsPlayerInAnyVehicle(playerid))
        return 
SendClientMessage(playerid,COLOR_GREY,"ЎNo estas en un auto!");
        
    if(
GetPlayerMoney(playerid) < 10)
        return 
SendClientMessage(playerid,COLOR_GREY,"ЎNo tienes suficiente dinero!");
        
    if(
Peajes[id][peaLock] == 1)
        return 
SendClientMessage(playerid,COLOR_GREY,"ЎEste peaje ya esta abierto!");
        
    
GivePlayerMoneyAC(playerid, -10);
    
InfoDineroGob[0][gDinero] += 5;
    
Peajes[id][peaLock] = 1;
    
    
Savegob();
    
SendClientMessage(playerid,COLOR_GREY,"ЎHas pagado el peaje! tienes 5 segundos para pasar!");
    return 
1;

Reply
#3

Quote:
Originally Posted by _Zume
Посмотреть сообщение
es por el GetPlayerPeaje, intenta asi

PHP код:
enum PeajeInfo //Puntos de peajes
{
    
Float:peaX,
    
Float:peaY,
    
Float:peaZ,
    
peaLock
}
new 
Peajes[2][PeajeInfo] = {
    {
1643.764526, -9.33308036.2546230},
    {
1625.108276, -2.85051936.3819380}
};
stock GetPlayerPeaje(playerid
{
    for(new 
0sizeof(Peajes); ++)
    {
        if(!
IsPlayerInRangeOfPoint(playerid2.0Peajes[i][peaX], Peajes[i][peaY], Peajes[i][peaZ]))
            continue;
            
           return 
i;
    }
    return -
1;
}
CMD:peaje(playerid,params[])
{
    new
        
id;
    
    if((
id GetPlayerPeaje(playerid)) == -1)
        return 
SendClientMessage(playeridCOLOR_GREY"ЎNo estas en un peaje!");
        
    if(!
IsPlayerInAnyVehicle(playerid))
        return 
SendClientMessage(playerid,COLOR_GREY,"ЎNo estas en un auto!");
        
    if(
GetPlayerMoney(playerid) < 10)
        return 
SendClientMessage(playerid,COLOR_GREY,"ЎNo tienes suficiente dinero!");
        
    if(
Peajes[id][peaLock] == 1)
        return 
SendClientMessage(playerid,COLOR_GREY,"ЎEste peaje ya esta abierto!");
        
    
GivePlayerMoneyAC(playerid, -10);
    
InfoDineroGob[0][gDinero] += 5;
    
Peajes[id][peaLock] = 1;
    
    
Savegob();
    
SendClientMessage(playerid,COLOR_GREY,"ЎHas pagado el peaje! tienes 5 segundos para pasar!");
    return 
1;

Hola, gracias lo intentarй, y por cierto gracias por recordarme sobre PeajeAbierto, era una tonterнa, osea no era necesario esa variable, no se realmente para que la cree, cuando la pude poner en la misma array, gracias.

EDIT:
Muchas gracias zume, me ha funcionado a la perfecciуn, saludos.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)