Sistema de coches
#1

Muy buenas guapos y guapas. Estoy haciendo mi gamemode roleplay desde 0 y el sistema de vehнculos me tiene hasta los eggs.

El sistema que quiero hacer es como todos, guardar las coordenadas de los vehнculos para que al reiniciar se mantenga en la misma posiciуn, el gas, dueсo, etc. Pero sobre todo quiero centrarme en el tema de crear los vehнculos de facciуn y personales al iniciar el gamemode y luego guardarlos.

Con eso tengo un lio que no me veas, y por eso quiero preguntar como lo hacen ustedes, una explicaciуn detallada a poder ser por favor.


Yo lo he hecho de la siguiente manera (usando SQLite) (no hace falta que lo leas si no quieres, el objetivo que tengo con este post es saber como hacen el sistema):
  • Si no existe la tabla de los vehiculos la creo en el inicio del gamemode.
  • La tabla contiene las coordenadas X, Y, Z, ROT; dueсo, entre otros.
  • Una vez la tabla estй lista, creo los vehнculos de facciуn con AddStaticVehicleEx y almaceno los ID en arrays.

    pawn Код:
    FaccionCoches[SFPD][0] = AddStaticVehicleEx(597,-1574.5042000,738.6981000,-5.5417000,90.0000000,0,1,-1); //Police Car (SFPD)
    FaccionCoches[SFPD][1] = AddStaticVehicleEx(597,-1574.5300000,742.4588000,-5.5417000,90.0000000,0,1,-1); //Police Car (SFPD)

    FaccionCoches[GOBIERNO][0] = AddStaticVehicleEx(409,-1703.1450000,999.8968000,17.2798000,270.0000000,1,1,-1); //Stretch
  • Luego creo los vehнculos personales y de nuevo los almaceno en otro array
    pawn Код:
    CochesPersonales[0] = AddStaticVehicleEx(491,-1693.2782000,977.1132000,17.3421000,359.9698000,30,232,-1); //Virgo
        CochesPersonales[1] = AddStaticVehicleEx(546,-1696.9871000,977.0244000,17.3104000,359.8793000,190,23,-1); //Intruder
  • Despuйs con un bucle de mбximo MAX_VEHICLES cargo los datos de la base de datos.

    pawn Код:
    for (new i = 1; i<= MAX_VEHICLES; i++)
            CargarVehiculo(i);

    stock CargarVehiculo(vehicleid)
    {
        new Query[42], DBResult:Result;
        format(Query, sizeof(Query), "SELECT * FROM Vehiculos WHERE ID = %i", vehicleid);
        Result = db_query(Database, Query);

        if (db_num_rows(Result))
        {
            db_get_field_float(Result, "PosX", VehicleData[vehicleid][PosX]);
            db_get_field_float(Result, "PosY", VehicleData[vehicleid][PosY]);
            db_get_field_float(Result, "PosZ", VehicleData[vehicleid][PosZ]);
            db_get_field_float(Result, "PosROT", VehicleData[vehicleid][PosROT]);

            SetVehiclePos(vehicleid, VehicleData[vehicleid][PosX], VehicleData[vehicleid][PosY], VehicleData[vehicleid][PosZ]);
            SetVehicleZAngle(vehicleid, VehicleData[vehicleid][PosROT]);
        }
        db_free_result(Result);
    }

    Hasta aquн todos los vehнculos deberнan estar cargados, pero pueden presentar los siquientes problemas:
    • Tengo que aсadir filas cada vez que aсado un vehнculo (incуmodo)
    • Si aсado las 2000 filas de una vez, cuando cargo los vehнculos crashea el server al intentar cargar filas en blanco.
    • (!) Tengo que modificar el cуdigo cada vez que quiero aсadir un vehнculo
    • Varios mas que no recuerdo
    Luego para guardar los vehнculos hago lo siguiente:
  • Al cerrar el servidor hago un bucle con MAX_VEHICLES guardando todos los vehнculos

    pawn Код:
    for (new i = 1; i<= MAX_VEHICLES; i++)
            ActualizarVehiculo(i);

    stock ActualizarVehiculo(vehicleid)
    {
        GetVehiclePos(vehicleid, VehicleData[vehicleid][PosX], VehicleData[vehicleid][PosY], VehicleData[vehicleid][PosZ]);
        GetVehicleZAngle(vehicleid, VehicleData[vehicleid][PosROT]);

        new Query[500];
        format(Query, sizeof(Query), "UPDATE Vehiculos SET PosX = %f, PosY = %f, PosZ = %f, PosROT = %f WHERE ID = %i",
        VehicleData[vehicleid][PosX], VehicleData[vehicleid][PosY], VehicleData[vehicleid][PosZ], VehicleData[vehicleid][PosROT], vehicleid);
        db_query(Database, Query);
    }

Asн lo hago yo. La forma como la hecho funciona bien, pero me parece incуmoda y me da muchos problemas. Es por eso que quiero saber como lo hacen ustedes.

Gracias.
Reply
#2

Hay. Un FS que ha publicado el usuario Alexander11, el cual esta perfecto, puedes basarte en el FS, lo encontraras en la secciуn de aportes.
Saludos.
Reply
#3

Solucionado, con un db_next_row se me ha simplificado todo.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)