[PROBLEMA] Error con IDs de vehiculos
#1


Buenas! Tengo un problema con las id de los vehнculos de mi gm y me gustarнa que me echarais una mano.


Breve Introducciуn:

Bueno pues uso un gamemode con guardado mysql. El sistema de vehнculos no es dinбmico, por lo que los vehнculos estбn siempre spawneados.

El problema viene, en que digamos que tengo 3 vehнculos, y voy y vendo o borro el vehнculo 2. Aquн viene el problema porque el vehнculo se borra sн, pero la id del vehнculo se queda libre, y aunque crees otro vehнculo, ese 4 vehнculo sigue quedбndose como vehiculo 4 y no vehнculo 2.
Ahora, si reinicio el servidor para ver si se corren las id, efectivamente ocurre, segъn el /dl (comando por defecto de samp) la id del vehнculo 3 ahora es la id del vehнculo 2 y asн sucesivamente. Pero en los datos del gm, osea en /propiedades el vehнculo te sale como id 3 todavнa, aunque en el juego ya es id 2 al correrse.

Me gustaria que me ayuden a reparar esto, paso los codigos:

Comando Creacion Vehiculo
Код:
CMD:crearveh(playerid, params[])
{
    new aNombre[24];
    GetPlayerName(playerid,aNombre,24);
    if(!strcmp(aNombre, "Christian_Cano", true) || !strcmp(aNombre, "Christian_Cano", true) || !strcmp(aNombre, "Christian_Cano", true))
    {
        if(JugadorInfo[playerid][jAdmin] < 4) return SendClientMessage(playerid, ROJO_OSCURO, SIN_PERMISOS);
        new modelo = 3000, color1 = 3000, color2 = 3000;
        if(sscanf(params, "iii", modelo, color1, color2))
        {
            SendClientMessage(playerid, GRIS, "Uso: /crearveh [ID] [Color1] [Color2]");
            return 1;
        }
        if(modelo < 400 || modelo > 611) return SendClientMessage(playerid, ROJO_OSCURO, "* Debes introducir un modelo entre 400 y 600.");
        if(color1 < 0 || color1 > 256) return SendClientMessage(playerid, ROJO_OSCURO, "* El color debe estar entre 0 y 256.");
        if(color2 < 0 || color2 > 256) return SendClientMessage(playerid, ROJO_OSCURO, "* El color debe estar entre 0 y 256.");
        new Float:pos[3];
        GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
        AgregarVehiculo(playerid, modelo, pos[0], pos[1], pos[2], 0, 0, color1, color2, 998, 100, 0);
        return 1;
    }
    else
    {
        SendClientMessage(playerid, ROJO_OSCURO, "* Comando deshabilitado temporalmente, uso restringido a Christian Cano unicamente.");
    }
    return 1;
}

stock AgregarVehiculo

Код:
stock AgregarVehiculo(playerid, modelo, Float:coord_x, Float:coord_y, Float:coord_z, Float:angulo, inter, color_1, color_2, fac_id, gas, job, owner[]="Admin")
{
    if(fac_id == 8888)
    {
        if(JugadorInfo[playerid][jCoches][0] != NOEXISTE && JugadorInfo[playerid][jCoches][1] != NOEXISTE && JugadorInfo[playerid][jCoches][2] != NOEXISTE)
        {
            SendClientMessage(playerid, ROJO_OSCURO, "* No te quedan slots de coches disponibles.");
            return 1;
        }
    }

    new ret = CreateVehicle(modelo, coord_x, coord_y, coord_z, angulo, color_1, color_2, 3000000);
    LinkVehicleToInterior(ret, inter);

    new panels,doors,lights,tires;
    GetVehicleDamageStatus(ret,panels,doors,lights,tires);
    //printf("Panels: %d | Doors: %d | Lights: %d | Tires: %d", panels, doors, lights, tires);
    new query[512];
    format(query, 512, "INSERT INTO vehiculos (Modelo, X, Y, Z, Angle, Color1, Color2, FaccionID, Interior, Vida, panels, doors, lights, tires, Gasolina, Job, Paintjob, Componentes, Dueno, Roto) VALUES (%d, %f, %f, %f, %f, %d, %d, %d, %d, %f, %d, %d, %d, %d, %d, %d, -1, '', '%s', 0)", modelo, coord_x, coord_y, coord_z, angulo, color_1, color_2, fac_id, inter, 1000.0, panels, doors, lights, tires, gas, job, owner);
    mysql_query(database, query, true);

    AutoInfo[ret][aID] = cache_insert_id(); // Aquн es donde le asigna la ID segun el gm, que se usara en /propiedades o todos los demas comandos
    AutoInfo[ret][aModelo] = modelo;
    AutoInfo[ret][ax] = coord_x;
    AutoInfo[ret][ay] = coord_y;
    AutoInfo[ret][az] = coord_z;
    AutoInfo[ret][aa] = angulo;
    AutoInfo[ret][aColor1] = color_1;
    AutoInfo[ret][aColor2] = color_2;
    AutoInfo[ret][aFaccionID] = fac_id;
// No Pongo mas datos de esto porque lo importante creo que es lo que indiquй
Funcion Spawnear vehiculo

Код:
public OnVehicleSpawn(vehicleid)
{
    if(GetVehicleModel(vehicleid) == 528) //FBI TRUCK UNOE
    {
        SetVehicleHealthEx(vehicleid, 2000);
    }
    CargaDelCamion[vehicleid] = 0;
    luzlanewestado[vehicleid] = 0;
    luzlanews1[vehicleid] = 0;
    luzlanews2[vehicleid] = 0;
    luzlanews3[vehicleid] = 0;
    luzlanews4[vehicleid] = 0;
    DestroyObject(luzlanews1[vehicleid]);
    DestroyObject(luzlanews2[vehicleid]);
    DestroyObject(luzlanews3[vehicleid]);
    DestroyObject(luzlanews4[vehicleid]);
    DestroyDynamicObject(LuzSS[0][vehicleid]);
    DestroyDynamicObject(LuzSS[1][vehicleid]);
    DestroyDynamicObject(LuzSS[2][vehicleid]);
    DestroyDynamicObject(LuzSS[3][vehicleid]);
    SinSonido[vehicleid] = 0;
    VehAlquilado[vehicleid] = 0;
    AutoInfo[vehicleid][aMotor] = 0;

    if(VehExploto[vehicleid] == 1)
    {
        SetVehicleHealthEx(vehicleid, 350.0);
        AutoInfo[vehicleid][aRoto] = 1;
        UpdateVehicleDamageStatus(vehicleid, 3565161, 33554946, 4, 0);
    }
    SetVehiclePos(vehicleid, AutoInfo[vehicleid][ax], AutoInfo[vehicleid][ay], AutoInfo[vehicleid][az]);
    SetVehicleZAngle(vehicleid, AutoInfo[vehicleid][aa]);
    LinkVehicleToInterior(vehicleid, AutoInfo[vehicleid][aInteriorID]);
    new matricula[40];
    format(matricula, sizeof(matricula), "LS-%d", AutoInfo[vehicleid][aID]);
    SetVehicleNumberPlate(vehicleid, matricula);
    return 1;
}

Parte del comando que se encarga de borrar

Код:
else if(strcmp(opcion, "eliminar", true) == 0)
    {
        DestroyVehicle(vehicleid);
        EliminarVehiculo(vehicleid);
        format(string, sizeof(string), "Administraciуn: %s eliminу el vehнculo %d.",  NombreJugador(playerid), AutoInfo[vehicleid][aID]);
        ABroadCast(ROJO, string, 1);
        return 1;
    }
Funciуn Eliminar Vehiculo

Код:
stock EliminarVehiculo(vehicleid)
{
    new query[128];
    format(query, 128, "DELETE FROM vehiculos WHERE ID = %d", AutoInfo[vehicleid][aID]);
    mysql_query(database, query, false);
}
Reply
#2

Crea una nueva columna llamada Llaves_ID y la usas para guardar las ID de los vehнculos y no uses la columna SQL_ID con Auto increment
Reply
#3

https://sampwiki.blast.hk/wiki/MySQL/R33#cache_insert_id

En cortas palabras esta mal usado, por eso no da la ID bien.
Reply
#4

Quote:
Originally Posted by matias770
Посмотреть сообщение
https://sampwiki.blast.hk/wiki/MySQL/R33#cache_insert_id

En cortas palabras esta mal usado, por eso no da la ID bien.
De acuerdo, pero como lo arreglo?
Reply
#5

Por lo visto ese es mi gamemode.

Eso no es un problema, las ID del vehнculo con /dl nunca las tuve en cuenta a la hora de desarrollar el sistema y el servidor como verбs, en la cuenta de los usuarios trabaja con ID's propias (las llaves).

La ID del coche se almacena en el servidor en la variable aID, la ID del coche es la que estб en la placa y como verбs en comandos como /traerveh pide la matrнcula/llaves no la ID del coche que se obtiene con /dl.

Si no ves la matrнcula de un coche estб el comando /vermatricula que te dice la ID del coche mбs cercano.

Si quieres trabajar con la ID de los coches usa la variable aID y no las funciones nativas de SAMP que te dan la variable de /dl, saludos.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)