Beiträge von Jeffry

    Nein, nicht das, das hat nichts mit dem Besitzername zu tun.
    Aber versuche es alternativ mal so:
    ocmd:carinfo(playerid,params[])
    {
    if(!params[0]) return SendClientMessage(playerid, 0xFF0000FF, "Benutze: /carinfo [id]");
    new carid = strval(params), string[145];
    if(carid < 1 || carid >= MAX_VEHICLES)return SendClientMessage(playerid, 0xFF0000FF, "Ungültige ID.");
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    for(new j = 0; j < MaxVeh; j++)
    {
    if(PlayerCar[i][j][CarId] == carid)
    {
    GetPlayerName(i, string, MAX_PLAYER_NAME);
    format(string,sizeof(string),"Besitzer: %s | Tankinhalt: %d",string,PlayerCar[i][j][Benzin]);
    return SendClientMessage(playerid,0xFFFFFFFF,string);
    }
    }
    }
    return SendClientMessage(playerid, 0xFF0000FF, "Error: Dieses Fahrzeug gehört keinem Spieler.");
    }

    Funktioniert es dann so wie du es möchtest?
    Wenn ja, dann sehe ich trotzdem noch einen Fehler, und zwar weist du der Variable "engine" in dem Befehl nie einen Wert zu, sprich du kannst den Motor nicht mehr ausschalten. Das musst du noch via GetVehicleParamsEx abfragen.

    Nicht ganz unten im Gamemode.
    Ganz unten in OnDialogResponse, so:
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    //Andere Dialoge...
    //...
    //...

    //Hier dein Dialog:
    if(dialogid == DIALOG_INVITE)
    {
    if(response) // If they clicked 'Yes' or pressed enter
    {
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "* Du hast die Einladung angenommen.");
    }
    else // Pressed ESC or clicked cancel
    {
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "* Du hast die Einladung abgelehnt!");
    }
    return 1; // We handled a dialog, so return 1. Just like OnPlayerCommandText.
    }

    //Bleibt stehen.
    return 0;
    }


    Oder auch ganz oben in OnDialogResponse, wie du willst. Oder, wenn du weißt wo, geht es auch irgendwo zwischen zwei Dialogen drin.

    [19:35:46] [ERROR] CMySQLQuery::Execute[] - (error #1452) Cannot add or update a child row: a foreign key constraint fails (`samp5662_prp`.`RM_account_banksafe`, CONSTRAINT `RM_account_banksafe_ibfk_1` FOREIGN KEY (`_id`) REFERENCES `RM_account_main` (`id`) ON DELETE CASCADE)

    Also der Fehler ist dieser hier.
    So wie es aussieht können die Datensätze auf Grund fehlender oder falscher Verbindungen nicht eingefügt werden.
    Da ich aber deine Datenbank-Struktur nicht kenne, kann ich dir auch nicht sagen, wie sie richtig aufgebaut sein muss, bzw. wie die Queries korrekt aussehen sollten.


    Am besten du wendest dich an den Ersteller des Codes (bietet er ja auch an) bzw. der Datenbank, der soll sich um das Problem kümmern, bzw. kennt es vielleicht schon, oder du schaust, ob du auch die korrekte Datenbank hast, die zum Code passt.

    Ah, stimmt, der Befehl war ja anders gemacht, da hab ich nicht drauf geschaut.


    Gut, da dein MaxVeh nur 5 ist, ändere im Befehl das MaxVeh bei der if Abfrage die die Nachricht ausgibt zu MAX_VEHICLES. Dann sollte es passen.

    Im oberen Teil greifst du mit der vehicleid (vID) auf den Index zu, das geht nicht.
    Im unteren Teil ist es genau andersherum, da greifst du mit dem Index auf Parameter zu, die die vehicleid (f_vID aus dem enum) verlangen.


    Versuche es so:
    ocmd:flock(playerid,params[])
    {
    if(!IsPlayerOnline(playerid))return SendClientMessage(playerid,Rot,NotOnlineMSG);
    if(!GetPlayerFrak(playerid))return SendClientMessage(playerid,Rot,"Error"#cWeiß": You ar not in any Fraction.");
    new engine,lights,alarm,doors,bonnet,boot,objective;
    if(IsPlayerInAnyVehicle(playerid))
    {
    new vID = GetPlayerVehicleID(playerid);
    GetVehicleParamsEx(vID,engine,lights,alarm,doors,bonnet,boot,objective);
    for(new i = 0; i < MAX_FRAC_VEHICLES; i++)
    {
    if(vID != FracVehicle[i][f_vID])continue;
    if(FracVehicle[i][f_fracID] == GetPlayerFrak(playerid))
    {
    if(!LockState[vID])
    {
    SetVehicleParamsEx(vID,engine,lights,alarm,VEHICLE_PARAMS_ON,bonnet,boot,objective);
    LockState[vID] = true;
    SendClientMessage(playerid,Weiß,"["#cGelb"SInfo"#cWeiß"] You have locked your Vehicle.");
    return 1;
    }
    else
    {
    SetVehicleParamsEx(vID,engine,lights,alarm,VEHICLE_PARAMS_OFF,bonnet,boot,objective);
    LockState[vID] = false;
    SendClientMessage(playerid,Weiß,"["#cGelb"SInfo"#cWeiß"] You have unlocked your Vehicle.");
    return 1;
    }
    }
    else return SendClientMessage(playerid,Rot,"Error"#cWeiß": This Car doesn't belong to your Fraction.");
    }
    return 1;
    }
    else
    {
    new Float:x,Float:y,Float:z;
    for(new f=0;f<MAX_FRAC_VEHICLES;f++)
    {
    GetVehiclePos(FracVehicle[f][f_vID],x,y,z);
    printf("1");
    printf("FracVehicleID = %i |PosX: %f |PosY: %f |PosZ: %f",FracVehicle[f][f_vID],x,y,z);
    if(!IsPlayerInRangeOfPoint(playerid,3.00,x,y,z))continue;
    if(FracVehicle[f][f_fracID] != GetPlayerFrak(playerid)) continue;
    new vID = FracVehicle[f][f_vID];
    if(!LockState[vID])
    {
    printf("5.1");
    SetVehicleParamsEx(vID,engine,lights,alarm,VEHICLE_PARAMS_ON,bonnet,boot,objective);
    LockState[vID] = true;
    SendClientMessage(playerid,Weiß,"["#cGelb"SInfo"#cWeiß"] You have locked your Vehicle.");
    return 1;
    }
    else
    {
    printf("5.2");
    SetVehicleParamsEx(vID,engine,lights,alarm,VEHICLE_PARAMS_OFF,bonnet,boot,objective);
    LockState[vID] = false;
    SendClientMessage(playerid,Weiß,"["#cGelb"SInfo"#cWeiß"] You have unlocked your Vehicle.");
    return 1;
    }
    }
    }
    return SendClientMessage(playerid,Rot,"Error"#cWeiß": You aren't close to any Fraction Vehicle.");
    }

    Zudem ist ein switch immer schneller als eine if-Abfrage..da per jumptable direkt an die Stelle gesprungen wird..

    Nein, nicht immer. Bei einer Abfrage ist die if-Variante - da korrigiere ich mich - zum Teil schneller, auch nicht immer. Es kommt drauf an, wie man die Abfrage macht. Interessanterweise, das ist mir grade aufgefallen, ist eine Abfrage if(x < 10) langsamer als if(x < 1).
    Hier aber zum Beispiel ist die if-Abfrage schneller:
    new a;
    a = 1;
    new t = GetTickCount();
    for(new i = 0; i < 10000000; i++)
    {
    if(a == 0) { }
    else { }
    }
    printf("if: %dms", GetTickCount()-t);
    t = GetTickCount();
    for(new i = 0; i < 10000000; i++)
    {
    switch(a)
    {
    case 0: { }
    default: { }
    }
    }
    printf("switch: %dms", GetTickCount()-t);


    Tatsächlich kommt es aber dann darauf an, wie viel Prozent Differenz er nimmt, ob es performanter ist oder nicht, daher würde ich sagen beide Varianten sind in Ordnung, wobei ich trotzdem die if-Variante bevorzuge, da sie schneller zu schreiben ist und der Performanceunterschied irrelevent gering ist.