Beiträge von Jeffry

    Das enum mit Deklaration muss dann so aussehen:

    Man könnte den Besitzer auch weg lassen, da du ja über die playerid auf den Besitzer-Name kommst. Das kannst du aber halten wie du willst.
    Die 2 steht für die Anzahl der Fahrzeuge pro Spieler.
    Die modelid habe ich hinzugefügt.
    Die db_id habe ich außerdem hinzugefügt. Da muss die AUTO_INCREMENT id aus der Datenbank rein, damit du das Fahrzeug auch wieder speichern kannst.
    Füge beide bitte auch in deiner Tabelle hinzu, falls du das noch nicht hast.


    Dann dort wo die Fahrzeuge laden sollen:

    C
    mysql_format(db_handle,query,sizeof(query),"SELECT * FROM usercars WHERE besitzer = '%s'",GPlayerName(playerid));
    mysql_tquery(db_handle,query,"LoadPlayerCars","i",playerid);


    Und dann die Lade-Funktion so:

    Wie gesagt, du musst die Spaltennamen gegebenenfalls anpassen, wie sie bei dir heißen.


    Das Speichern würde dann so aussehen:


    Die Zuweisung (Besitzer?) wäre dann so:

    C
    format(pCar[playerid][i][besitzer], MAX_PLAYER_NAME, GPlayerName(playerid));

    Wobei i eben die Fahrzeugnummer ist, also das erste (0) oder zweite (1) Fahrzeug des Spielers. Ich weiß nicht ob du das über Keys (Schlüssel) machst, oder automatisch.
    Über Keys:

    C
    new i = carKey[playerid];
    format(pCar[playerid][i][besitzer], MAX_PLAYER_NAME, GPlayerName(playerid));


    Über automatische freie Suche:

    C
    new i = getFreeCarID(playerid);
    if(i == -1) return SendClientMessage(playerid, 0xFF0000FF, "Error: Du hast bereits die maximale Anzahl an Fahrzeugen.");
    format(pCar[playerid][i][besitzer], MAX_PLAYER_NAME, GPlayerName(playerid));

    Dazu dann dieser stock:

    C
    stock getFreeCarID(playerid)
    {
        for(new i=0; i<sizeof(pCar[]); i++)
        {
            if(pCar[playerid][i][pc_vID] == 0) return i;
        }
        return -1;
    }


    Der IsPlayerOwnerOfCar-stock sieht dann so aus:



    Weitere Funktionen, wie zum Beispiel das Entfernen der Fahrzeuge beim Disconnect kannst du analog zur SavePlayerCars Funktion machen. Die Schleife mit der Abfrage darin stehen jeweils für alle existierenden Fahrzeuge des Spielers.
    Schau mal ob du damit klar kommst. Bei Fragen kannst du natürlich gerne nachfragen.


    Ist jetzt etwas viel geworden, aber ich dachte mir bevor ich dir das als Pseudo-Code oder Lückentext gebe, schreibe ich es lieber gleich vollständig kurz zusammen, dann hilft es vielleicht auch dem einen oder anderen, der auf diesen Thread stößt, weiter. Daher ist es auch gut, dass du einen eigenen Thread erstellt hast (was sich eigentlich meistens empfielt).

    Du sprichst von "die Autos". Wie viele Fahrzeuge kann ein Spieler besitzen?
    Davon ist der Code nämlich sehr stark abhängig (eins oder mehrere).
    Außerdem gehe ich davon aus, dass die Fahrzeuge (bzw. das Fahrzeug) entfernt werden, wenn der Spieler den Server verlässt, oder?


    Auch dein Stock ist davon abhängig. Wenn du jetzt angenommen nur ein Fahrzeug pro Spieler erlaubst, dann würde die Prüfung so aussehen, unter obiger Annahme:

    C
    stock IsPlayerOwnerOfCar(playerid,vID)
    {
        if(IsPlayerConnected(playerid))
        {
            if(pCar[playerid][pc_vID] == vID) return 1;
        }
        return 0;
    }


    Zu dem Error den du im Code hast:

    C
    pCar[playerid][besitzer] = GPlayerName(playerid);

    Das ist nicht erlaubt, da man mehrdimensionalen Arrays keinen Wert direkt zuweisen kann/darf.
    Du musst entweder strcat oder format nutzen. Ich schlage immer format vor, da sich die meisten mehr darunter vorstellen können.

    C
    format(pCar[playerid][besitzer], MAX_PLAYER_NAME, GPlayerName(playerid));

    Du musst den alten Wert von "str" wieder mitnehmen.
    Versuche es so:

    Das liegt daran, dass der String "str" zu lang wird. SendClientMessage kann nur 144 + 1 (EOS) Zeichen ausgeben.
    Setze "str" auf 145 bei der Deklaration, dann siehst du bis wohin der Text ausgegeben werden kann.

    Dann wird OnPlayerSpawn wahrscheinlich zwei mal aufgerufen.
    Versuche es so:

    Bei "new ahCars" musst du die 2 noch zu einer 3 ändern, oder einfach ganz entfernen, das geht auch, einfach nur [].

    C
    Update3DTextLabelText(C4verkeaufertext, 0xFFFFFFFF, "{FFFF00}%s Nehme mal mir mit '{00FF00}/c4abnehmen{FFFF00}' das c4 ab \nda ich noch weiter ziehen muss und nicht Tage lang Zeit habe");


    zu:

    C
    new str[180];
    GetPlayerName(playerid, str, MAX_PLAYER_NAME);
    format(str, sizeof(str), "{FFFF00}%s Nehme mal mir mit '{00FF00}/c4abnehmen{FFFF00}' das c4 ab \nda ich noch weiter ziehen muss und nicht Tage lang Zeit habe", str);
    Update3DTextLabelText(C4verkeaufertext, 0xFFFFFFFF, str);

    Kannst du den String des MD5 Wertes aus der Datenbank bitte mal posten? Gebe als Passwort bei der Registrierung Test oder Passwort ein.



    Der Download-Button funktioniert anscheinend nicht mehr.

    Du kannst die Daten aus dem Anhang herunterladen. Der Button verweist nur dahin, ist aber durch die Umstellung der Domain nicht mehr aktuell. Ich werde das am Wochenende in allen meinen Threads anpassen.

    Definiere "korrekt erstellt".

    Existiert es, wenn du an die Position gehst, an der es erstellt wird? Und ist das in der gleichen virtuellen Welt, in der der NPC ist?


    Setze zudem mal noch vor oder nach dem PutPlayerInVehicle(playerid, TAXI_TUT_CAR, 0); einen printf("Aufgerufen."); hin, um zu sehen, ob der Code überhaupt ausgeführt wird. Steht der Print dann im Server Log?