Fahrzeuge aus der SQL-DB Laden

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Ich stehe nach meinem Umdenken sowie Umbau immer mal wieder vor diesem einem Problem.
    Ich habe das Fahrzeug System unter ein Array verallgemeinert, egal ob es sich um das CopCar System dreht oder um das GlobalCar System.. irgendein Fahrzeug aus der Kette spawnt nicht, das gilt für beide Systeme.
    Ich nutze als Index (der Wert in der Mitte) die VehicleID selbst, ich finde so spare unnötig viele Schleifen.


    Quellcode:

    enum E_VEHICLE
    {
    //Int werde
    vSQL,
    vVehicle,
    vType,
    vModel,
    vColor1,
    vColor2,
    vRDelay,
    vSiren,
    vSkill,

    //Float werte
    Float:vTankvol,
    Float:vX,
    Float:vY,
    Float:vZ,
    Float:vR,

    //boolean werte
    bool:vTanktive,
    vEngine,
    };


    enum
    {
    VTYPE_COP,
    VTYPE_ADMIN,
    VTYPE_GLOBAL,
    };


    public QueryFinish(QUERY)
    {
    switch(QUERY)
    {
    case QUERY_LOADCOPVEH:
    {
    for(new i, cachedVehicle, cachedVehSQL, cachedModel, cachedSkill, Float:chX, Float:chY, Float:chZ, Float:chR;i<rows;i++)
    {
    if(Vehicle[i][vVehicle])continue;
    cache_get_value_name_int(i, "id", cachedVehSQL),
    cache_get_value_name_int(i, "Model", cachedModel),
    cache_get_value_name_int(i, "Skill", cachedSkill),
    cache_get_value_name_float(i, "X", chX),
    cache_get_value_name_float(i, "Y", chY),
    cache_get_value_name_float(i, "Z", chZ),
    cache_get_value_name_float(i, "R", chR),
    cachedVehicle = CreateVehicleEx(cachedModel, chX, chY, chZ, chR, -1, -1, -1, 1);


    Vehicle[cachedVehicle][vVehicle] = cachedVehicle,
    Vehicle[cachedVehicle][vSQL] = cachedVehSQL,
    Vehicle[cachedVehicle][vModel]= cachedModel,
    Vehicle[cachedVehicle][vSkill] = cachedSkill,
    Vehicle[cachedVehicle][vX] = chX,
    Vehicle[cachedVehicle][vY] = chY,
    Vehicle[cachedVehicle][vZ] = chZ,
    Vehicle[cachedVehicle][vR] = chR,
    Vehicle[cachedVehicle][vType] = VTYPE_COP,
    Vehicle[cachedVehicle][vTankvol] = 100.0,
    Vehicle[cachedVehicle][vTanktive] = true,


    printf("LOADCV: Type: %d, SQL: %d, Model: %d, Skill: %d, Pos: %f,%f,%f,%f, IVehID: %d", Vehicle[cachedVehicle][vType], cachedVehSQL, cachedModel, cachedSkill, chX, chY, chZ, chR, cachedVehicle);
    }
    }
    case QUERY_LOADGLOBALVEH:
    {
    for(new i, cachedVehicle, cachedVehSQL, cachedModel, cachedColOne, cachedColSecond, Float:chX, Float:chY, Float:chZ, Float:chR;i<rows;i++)
    {
    if(Vehicle[i][vVehicle])continue;
    cache_get_value_name_int(i, "DatabaseID", cachedVehSQL),
    cache_get_value_name_int(i, "Model", cachedModel),
    cache_get_value_name_int(i, "Color1", cachedColOne),
    cache_get_value_name_int(i, "Color2", cachedColSecond),
    cache_get_value_name_float(i, "X", chX),
    cache_get_value_name_float(i, "Y", chY),
    cache_get_value_name_float(i, "Z", chZ),
    cache_get_value_name_float(i, "R", chR),
    cachedVehicle = CreateVehicleEx(cachedModel, chX, chY, chZ, chR, cachedColOne, cachedColSecond, -1, 0);


    Vehicle[cachedVehicle][vVehicle] = cachedVehicle,
    Vehicle[cachedVehicle][vSQL] = cachedVehSQL,
    Vehicle[cachedVehicle][vModel]= cachedModel,
    Vehicle[cachedVehicle][vX] = chX,
    Vehicle[cachedVehicle][vY] = chY,
    Vehicle[cachedVehicle][vZ] = chZ,
    Vehicle[cachedVehicle][vR] = chR,
    Vehicle[cachedVehicle][vColor1] = cachedColOne,
    Vehicle[cachedVehicle][vColor2] = cachedColSecond,
    Vehicle[cachedVehicle][vType] = VTYPE_GLOBAL,
    Vehicle[cachedVehicle][vTankvol] = 100.0,
    Vehicle[cachedVehicle][vTanktive] = true;


    printf("LOADGLOBALCAR: Type: %d, SQL: %d, Model: %d, Pos: %f,%f,%f,%f, IVehID: %d", Vehicle[cachedVehicle][vType], cachedVehSQL, cachedModel, chX, chY, chZ, chR, cachedVehicle);
    }
    }
    }
    }

  • Vehicle[cachedVehicle][vVehicle] = cachedVehicle,

    Das ist ganz schönes Doppelgemoppel.


    Wenn der index schon die vehicleid ist, wieso nochmal den Wert speichern, denn um an den Wert zu kommen, brauchst du ja den index :D


    if(Vehicle[i][vVehicle])continue;


    Diese Zeile ist falsch. Weil, wieso denn i?


    Macht keinen Sinn, es kann kein Index doppelt indexiert werden, da das Fahrzeug einen eindeutigen Rückgabewert liefert, also lösch diese Zeile in beiden Schleifen :)

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Die VehicleID im VehicleIndex muss ich aber trotzdem zwischenspeichern für Funktionen aus einem bestimmten Radius^^

    Zeig mal deine Funktion, dann kann ich dir zeigen, wie man es ohne macht ^^

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Für diese Sache brauche ich es.



    ocmd:destroycopcar(playerid, params[])
    {
    if(getAdmin(playerid) <6)return 1;
    new str[64];
    if(!sscanf(params, "s", str))
    {
    if(!strcmp(str, "radius", true))
    {
    new vID = GetClosestCopCar(playerid, 3.5);
    if(vID == INVALID_VEHICLE_ID)return SCM(playerid, COLOR_RED, "Es ist kein Polizei Fahrzeug in deiner Nähe.");
    SetPVarInt(playerid, "delRadCopCar", vID),
    format(str, sizeof str, "Möchtest du wirklich das Polizei Fahrzeug '%s' entfernen?", GetVehicleName(Vehicle[vID][vVehicle])),
    ShowPlayerDialog(playerid, D_DELCOPCAR, DIALOG_STYLE_MSGBOX, "Polizeifahrzeug Entfernen.", str, "Bestätigen", "Abbrechen");
    return 1;
    }
    }
    if(!IsACopCar(PlayerVehicle(playerid)))return SCM(playerid, COLOR_GREY, "Du sitzt in keinem Polizei Fahrzeug!");
    new CarIndex = PlayerVehicle(playerid);
    AdminLog(playerid, "delcopcar", "entfernt ein Polizei Fahrzeug. [VehID: %d, CarIndex: %d, SQL: %d]", Vehicle[CarIndex][vModel], CarIndex, Vehicle[CarIndex][vSQL]);
    DestroyCopCar(CarIndex),
    SCM(playerid, COLOR_LIGHTBLUE, "Du hast das Polizei Fahrzeug erfolgreich entfernt.");
    return 1;
    }


    stock DestroyCopCar(carindex)
    {
    new query[64];
    mysql_format(handle, query, sizeof query, "DELETE FROM copcar WHERE id = %d", Vehicle[carindex][vSQL]),
    mysql_pquery(handle, query);
    DestroyVehicleEx(Vehicle[carindex][vVehicle], true);
    return 1;
    }


    //Ondialogresponse
    case D_DELCOPCAR:
    {
    if(!response)return DeletePVar(playerid, "delRadCopCar");
    new idx = GetPVarInt(playerid, "delRadCopCar");
    AdminLog(playerid, "delcopcar", "entfernt ein Polizei Fahrzeug. [VehID: %d, CarIndex: %d, SQL: %d]", GetVehicleModel(Vehicle[idx][vVehicle]), idx, Vehicle[idx][vSQL]);
    DestroyCopCar(idx),
    SCM(playerid, COLOR_LIGHTBLUE, "Du hast das Polizei Fahrzeug erfolgreich entfernt.");
    }

  • Den unteren Teil kannst du so schreiben:



    C
    //Ondialogresponse
    case D_DELCOPCAR:
    {
        new vID = GetPVarInt(playerid, "delRadCopCar");
        DeletePVar(playerid, "delRadCopCar");
        if(!response) return 1;
        AdminLog(playerid, "delcopcar", "entfernt ein Polizei Fahrzeug. [VehID: %d, CarIndex: %d, SQL: %d]", GetVehicleModel(vID), vID, Vehicle[vID][vSQL]);
        DestroyCopCar(vID),
        SCM(playerid, COLOR_LIGHTBLUE, "Du hast das Polizei Fahrzeug erfolgreich entfernt.");
    }

    Das ist doch die VehicleID und nicht nur ein index ;)

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S