Beiträge von Jeffry

    new max_tank[211];

    zu:
    new max_tank[212];


    Mit dem array müsste ich doch 211 mal max_tank[0], max_tank[1],.. listen, oder? Von der schreibarbeit her dachte ich, geht es schneller wenn ich die modellids 411 und xxx und xxx und xxx = 60 liter. Ist es performancetechnisch ein großer unterschied?

    Ja, du hättest alle 212 Indizes im Code stehen. Was wäre deine Methode mit "und xxx"?
    Du könntest es z.B. alternativ so machen:
    for(new i = 0; i < sizeof(max_tank); i++)
    {
    switch(i)
    {
    case 0, 15, 19: max_tank[i] = 60;
    case 1, 20, 99, 150: max_tank[i] = 70;
    //...
    }
    }
    Der Vorschlag von Madd92 ist aber am sinnvollsten.


    Dann bleibt mir nurnoc hdie frage wo ich am besten diemax_tank[x] = y; im script plaziere?

    OnGameModeInit.



    printf("Landstalker hat ein Tankvolumen von %d Litern.", max_tank[GetVehicleModel(vehicleid)-400]);

    Das kannst du bei OnVehicleSpawn so machen, ja.

    Da du mir zwei Nachrichten diesbezüglich geschrieben hast:
    Was @Madd92 schreibt ist korrekt.



    Da du das pTaxiDuty auf 1 setzt, wenn der Preis eingegeben wurde, muss die Abfrage auch funktionieren, wenn du erneut in das Taxi einsteigst.
    Dies klappt allerdings nicht, wenn du beim Aussteigen das pTaxiDuty auf 0 setzt. Suche danach und entferne den entsprechenden Code.


    Du kannst vor der Abfrage auch prüfen, welchen Wert das pTaxiDuty hat. Solange es dort 0 ist, wird der Dialog angezeigt.
    if(IsVehicleATaxi(vehicleid))
    {
    if(Spieler[playerid][pJob] != 17)
    {
    TextDrawShowForPlayer(playerid,InfoSign);
    PlayerTextDrawSetString(playerid,INFOdraw[playerid][2],"~r~Info:~w~~n~Du besitzt nicht den jeweiligen Job.");
    PlayerTextDrawShow(playerid,INFOdraw[playerid][2]);
    SetTimerEx("HideInfoBox",3000,0,"i",playerid);
    return RemovePlayerFromVehicle(playerid);
    }
    printf("pTaxiDuty: %d", Spieler[playerid][pTaxiDuty]);
    if(Spieler[playerid][pTaxiDuty] == 0)
    {
    ShowPlayerDialog(playerid, DIALOG_TAXIPICE, DIALOG_STYLE_INPUT, "{FFFF00}Taxi - Preis festlegen", "{FFFFFF}Lege den Preis für die Taxifahrt fest:", "Ok", "Abbrechen");
    }
    }


    Solange dir dort 0 angezeigt wird, siehst du den Dialog.
    Setze dir beim Setzen auf 1 bitte auch einen Print, zum prüfen, ob das dort auch auf 1 gesetzt wird. Wenn ja, dann musst du anschließend alle Stellen prüfen, an denen pTaxiDuty im Wert verändert wird (print setzen) und dann die Stelle im Code anpassen, welche den Wert wieder auf 0 setzt (das findest du durch die prints raus).


    Dann klappt es auch.

    Hast du eventuell die static Version für Linux am Start? Finde bei GitHub nur die normale Linux Version.

    Scheint jetzt wohl ausgelagert zu sein, in der "mysql-R41-2-Debian8-static.tar.gz"
    https://github.com/pBlueG/SA-MP-MySQL/releases/tag/R41-2



    Hätte da noch eine weitere Frage: Muss log-core.so auch geladen werden? Ist das ein Plugin was ins Plugins Ordner muss oder kommt das ins Hauptverzeichnis @Jeffry ?

    Ich habe kein Linux System auf dem ich das testen kann, ich gehe aber davon aus (weil es bei Windows auch so ist) dass die log-core.so in das Hauptverzeichnis des Servers muss.
    Wenn du es ausprobieren kannst, würde ich mich über eine Rückmeldung, ob dem wirklich so ist, freuen.

    Die Variable wird aber nur bei OnUserLogin auf true gesetzt, bei OnUserRegister wird sie nicht auf true gesetzt.
    OnUserLogin wird aber nachdem registrieren nicht aufgerufen, also würde sich eigentlich der Account nicht speicher, richtig?
    Habe ich etwas übersehen oder falsch verstanden? Wäre komisch wenn's wirklich nicht funktionieren würde und das bisher keinem aufgefallen ist..

    Du hast absolut Recht. Dem Code nach ist es so, dass die Statistiken, die zwischen Registration und dem ersten Verlassen des Servers liegen, nicht gespeichert werden, ich habe das gerade auch nochmal ausprobiert, ist tatsächlich so.
    Nachdem man sich per Login Funktion einloggt, gibt es keine Probleme, da speichert es normal wie es soll.
    Das ist mir beim Test des Tutorials gar nicht aufgefallen und interessanterweise auch sonst noch niemandem bisher aufgefallen.


    Das ist auf jeden Fall ein Fehler im Tutorial und auch im Beispielcode. Ich werde das morgen ausbessern.
    Vielen Dank für deinen Hinweis!




    =====================================================


    EDIT:


    Das Tutorial wurde für die Version R41-2 aktualisiert.
    Außerdem wurde der von JustMe.77 gemeldete Fehler behoben.
    Der Fehler kann wie folgt im eigenen Code ausgebessert werden:
    Es muss in OnUserRegister folgende Zeile eingefügt werden:
    PlayerInfo[playerid][pLoggedIn] = true;
    Es ist dringend empfohlen, diese Korrektur im Code vorzunehmen, sofern der Spieler sich nach der Registration nicht anmelden muss.



    Bei der Aktualisierung des Plugins auf R41-2 muss der Code, bis auf oben genannte Fehlerkorrektur, nicht angepasst werden.
    Es ist lediglich zu beachten, dass von dieser Version an die libmysql.dll durch die libmariadb.dll ersetzt wurde. Diese Datei muss nach dem Download des neuen Plugins im Hauptverzeichnis des Servers ausgetauscht werden.



    Fragen zur Aktualisierung dürfen gerne in diesem Thread über die Antworten-Funktion gestellt werden.


    Viele Grüße
    Jeffry 8)

    Vor allem damit ich mein Auto öfters aussaugen kann hab ich jetzt mal nachgerüstet.



    Kabeltrommel mit 50m Länge für 49,30€



    Und den passenden Staubsauger dazu: Einhell TC-VC 1812 S für 31,99€ (37,99€ mit 6€ Rabattgutschein).

    Hast du diesen stock im Code stehen? Füge den ganz unten in deinem Gamemode ein:
    stock MySQL_SetupConnection(ttl = 3)
    {
    print("[MySQL] Verbindungsaufbau...");
    //mysql_log(); //<- Kommentar vor mysql_log entfernen um den MySQL Debug-Modus zu aktivieren

    handle = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_DBSE);

    //Prüfen und gegebenenfalls wiederholen
    if(mysql_errno(handle) != 0)
    {
    //Fehler im Verbindungsaufbau, prüfe ob ein weiterer Versuch gestartet werden soll
    if(ttl > 1)
    {
    //Versuche erneut eine Verbindung aufzubauen
    print("[MySQL] Es konnte keine Verbindung zur Datenbank hergestellt werden.");
    printf("[MySQL] Starte neuen Verbindungsversuch (TTL: %d).", ttl-1);
    return MySQL_SetupConnection(ttl-1);
    }
    else
    {
    //Abbrechen und Server schließen
    print("[MySQL] Es konnte keine Verbindung zur Datenbank hergestellt werden.");
    print("[MySQL] Bitte prüfen Sie die Verbindungsdaten.");
    print("[MySQL] Der Server wird heruntergefahren.");
    return SendRconCommand("exit");
    }
    }
    printf("[MySQL] Die Verbindung zur Datenbank wurde erfolgreich hergestellt! Handle: %d", _:handle);
    return 1;
    }

    In deinem Code vom vorherigen Post in Zeile 10 die Problemzeile, oder?
    Daher:
    format(string,sizeof(string),"Linie %i\nNächster Halt: %s\nBusfahrer: %s\nKosten: %i$",buslinieninfo[playerid],buslinie2[BusCheckpointStatus1[playerid]][CheckPointText],SpielerName(playerid),MAX_BUS_PRICE);
    Hier kann dann nur BusCheckpointStatus1[playerid] den Wert -1 haben, da die playerid es nicht sein kann.


    Somit musst du es zu
    format(string,sizeof(string),"Linie %i\nNächster Halt: %s\nBusfahrer: %s\nKosten: %i$",buslinieninfo[playerid],buslinie2[0][CheckPointText],SpielerName(playerid),MAX_BUS_PRICE);
    ändern.


    Oder
    BusCheckpointStatus2[playerid] = 0;
    zu:
    BusCheckpointStatus1[playerid] = 0;
    BusCheckpointStatus2[playerid] = 0;
    ändern.

    Das ist der falsche Code, dort befindet sich nachfolgender Code nicht drin:

    format(string,sizeof(string),"Linie %i\nNächster Halt: %s\nBusfahrer: %s\nKosten: %i$",buslinieninfo[playerid],buslinie1[BusCheckpointStatus1[playerid]][CheckPointText],SpielerName(playerid),MAX_BUS_PRICE);
    UpdateDynamic3DTextLabelText(vFahrzeug[vehicleid][VehText], GELB, string);

    Das passt eigentlich.
    Ändere mal
    VehicleOnDuty[GetPlayerVehicleID(playerid)] = true;
    zu:
    VehicleOnDuty[vehicleid] = true;


    Vielleicht gibt das GetPlayerVehicleID zu dem Zeitpunkt INVALID_VEHICLE_ID zurück, was dann das Array sprengt.