Ayuda con comando "comprar vehiculo"
#1

Hola, estoy haciendo un sistema de vehнculos en MySQL y me surgiу otro problema:

Tengo el siguiente comando:
pawn Код:
CMD:vcomprar(playerid, params[])
{
    new vid = GetPlayerVehicleID(playerid);
    if(vid < 1 || vid >= MAXIMO_VEHICULOS) return SendClientMessage(playerid, -1, "Vehнculo invalido!");
    else if(VScope[vid][vcomprable] == 0) return SendClientMessage(playerid, COLOR_ROJO, "{FF0000}Error: Este vehнculo no es comprable.");
    else if(VScope[vid][vpropietario] != 0) return SendClientMessage(playerid, COLOR_ROJO, "{FF0000}Error: Este vehнculo no esta en venta.");
    else if(VScope[vid][vprecio] < GetPlayerMoney(playerid))
        {
        if(JugadorInfo[playerid][jNivelVIP] >= 1) {
            if(JugadorInfo[playerid][jVehiculos] >= VEHICULOS_VIP) return SendClientMessage(playerid, COLOR_ROJO, "{FF0000}Error: Solo puedes tener "#VEHICULOS_VIP" vehнculos.");
        } else {
            if(JugadorInfo[playerid][jVehiculos] >= VEHICULOS_JUGADOR) return SendClientMessage(playerid, COLOR_ROJO, "{FF0000}Error: Solo puedes tener "#VEHICULOS_JUGADOR" vehнculos.");
        }
            VScope[vid][vpropietario] = strval(pName(playerid));
        new query[300];
                format(query, sizeof(query), "UPDATE vehiculos SET propietario='%s' WHERE id='%i'",pName(playerid),vid);
                mysql_query(query);
        JugadorInfo[playerid][jVehiculos]++;
        GivePlayerMoney(playerid,-VScope[vid][vprecio]);
        SendClientMessage(playerid, -1, "{FFFFFF}Servidor: Has comprado este vehнculo.");
        } else return SendClientMessage(playerid, COLOR_ROJO, "{FF0000}Error: Dinero insuficiente.");
    return 1;
}
Lo que quiero que haga es que se guarde el propietario del vehнculo en la base de datos (eso lo hace bien) y que tambiйn en la variable VScope[vid][vpropietario].

Pero creo que no se guarda bien en la variable, porque en OnPlayerStateChange tengo:
pawn Код:
public OnPlayerStateChange(playerid, newstate, oldstate)
{
    if(newstate == PLAYER_STATE_DRIVER)
    {
        new vid = GetPlayerVehicleID(playerid);
        new mensaje[128];
        if(VScope[vid][vcomprable] == 1)
            {
            if(VScope[vid][vpropietario] == 0)
                {
                    format(mensaje, sizeof(mensaje), "{FFFFFF}Precio: {27BD02}$%i\n{FFFFFF}Usa {FFFF00}/vcomprar {FFFFFF}para comprarlo.", VScope[vid][vprecio]);
                    ShowPlayerDialog(playerid,INFO_TEXT, DIALOG_STYLE_MSGBOX, "{FF0000}Vehнculo en Venta:", mensaje, "Salir", "");
                }
                else
                   {
                   format(mensaje, sizeof(mensaje), "~r~Este vehнculo pertenece a %s", VScope[vid][vpropietario]);
                   GameTextForPlayer(playerid, mensaje, 3000, 4);
                   }
            }
    }
    return 1;
}
Eso para que si el vehнculo esta en venta salga un dialog, y de lo contrario un gametext, la cosa es que sigue saliendo un dialog aun que lo aya comprado.

Y si recargo los vehнculos con:
pawn Код:
stock VScopeCargar()
{
    new query[300], string[128];
    for(new i=1; i < MAXIMO_VEHICULOS; i++)
    {
    format(query, sizeof(query), "SELECT * FROM vehiculos WHERE id='%i'", i);
    mysql_query(query);
    mysql_store_result();
    while(mysql_fetch_row_format(query,"|"))
    {
    mysql_fetch_field_row(string, "modelo"); VScope[i][vmodelo] = strval(string);
    mysql_fetch_field_row(string, "x"); VScope[i][vx] = strval(string);
    mysql_fetch_field_row(string, "y"); VScope[i][vy] = strval(string);
    mysql_fetch_field_row(string, "z"); VScope[i][vz] = strval(string);
    mysql_fetch_field_row(string, "a"); VScope[i][va] = strval(string);
    mysql_fetch_field_row(string, "color1"); VScope[i][vcolor1] = strval(string);
    mysql_fetch_field_row(string, "color2"); VScope[i][vcolor2] = strval(string);
    mysql_fetch_field_row(string, "propietario"); VScope[i][vpropietario] = strval(string);
    mysql_fetch_field_row(string, "precio"); VScope[i][vprecio] = strval(string);
    mysql_fetch_field_row(string, "comprable"); VScope[i][vcomprable] = strval(string);
    CreateVehicle(VScope[i][vmodelo], VScope[i][vx], VScope[i][vy], VScope[i][vz], VScope[i][va], VScope[i][vcolor1], VScope[i][vcolor2], TIEMPO_RESPAWN);
    Vehiculos++;
    }
    }
    printf("VScope: %i vehiculos cargados.", Vehiculos);
}
Tampoco se carga bien el propietario en la variable VScope[i][vpropietario].

No se que estarй haciendo mal, si no entienden lo que digo dнganme e intento expresarme mejor XD

Saludos y gracias por todo!
Reply
#2

Te hago refeccionar o ver si yo estoy errado porque colocas VScope[vid][vpropietario] == 0 cuando le estas asignando un nombre a la variable ??
Reply
#3

Quote:
Originally Posted by cesar_******
Посмотреть сообщение
Te hago refeccionar o ver si yo estoy errado porque colocas VScope[vid][vpropietario] == 0 cuando le estas asignando un nombre a la variable ??
Porque cuando un vehнculo no tiene dueсo la columna propietario queda en 0. en cambio si es diferente a 0 tiene dueсo.
Reply
#4

Me parece que no setiaste vcomprable a 0 cuando lo logra comprar, y no estoy seguro de si se puede o no ponerle default 0 a vpropietario ya que es una string
Reply
#5

Quote:
Originally Posted by ValenRatti
Посмотреть сообщение
Me parece que no setiaste vcomprable a 0 cuando lo logra comprar, y no estoy seguro de si se puede o no ponerle default 0 a vpropietario ya que es una string
Se le llama variable y puede tener nъmeros, y lo de setear vcomprable a 0 no tiene nada que ver, ya que en el sistema de vehнculos utilizo el vcomprable para crear autos a la venta y otros que solo se pueden usar.
Reply
#6

їAlguien sabe cual es mi problema? :S Si no soluciono esto no puedo avanzar con lo demбs xD
Reply
#7

LoooooooooooooooooooooooooooooooooooooL.

pawn Код:
VScope[vid][vpropietario] = strval(pName(playerid)); // QUE FLASHAS?
al final no entiendo si queres que se guarde un nъmero o el nombre del jugador?
Reply
#8

Quote:
Originally Posted by GROVE22
Посмотреть сообщение
LoooooooooooooooooooooooooooooooooooooL.

pawn Код:
VScope[vid][vpropietario] = strval(pName(playerid)); // QUE FLASHAS?
al final no entiendo si queres que se guarde un nъmero o el nombre del jugador?
El nombre del jugador xD
Reply
#9

Quote:
Originally Posted by The_Scope
Посмотреть сообщение
El nombre del jugador xD
strval es para enteros(numeros)

el correcto -->strlen
Reply
#10

Quote:
Originally Posted by bytytus
Посмотреть сообщение
strval es para enteros(numeros)

el correcto -->strlen
Ah con razуn jaja, muchisimas gracias!
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)