24.01.2013, 16:18
Hola, estoy haciendo un sistema de vehнculos en MySQL y me surgiу otro problema:
Tengo el siguiente comando:
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:
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:
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!
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;
}
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;
}
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);
}
No se que estarй haciendo mal, si no entienden lo que digo dнganme e intento expresarme mejor XD
Saludos y gracias por todo!