Das Ding ist halt, wenn ich eine oder mehrere Seiten zurück gehe, schließt er und sagt dass nichts mehr sei.
Ich habe keine Ahnung, was du meinst.
Aber dir ist klar, es gibt nur 2 Buttons.
Entweder Schließen oder Weiter. Es gibt kein zurück
Das Ding ist halt, wenn ich eine oder mehrere Seiten zurück gehe, schließt er und sagt dass nichts mehr sei.
Ich habe keine Ahnung, was du meinst.
Aber dir ist klar, es gibt nur 2 Buttons.
Entweder Schließen oder Weiter. Es gibt kein zurück
Naja, man es kann aber sicherlich einrichten, das sobald einmal auf Weiter geklickt wurde, der Schließen Button als Zurück benutzt werden kann.
Ich habe keine Ahnung, was du meinst.
Wenn ich auf Seite 2 gehe, weil von meinem Account aus, sind mehrer MySQL Seiten vorhanden, dann sagt er beim "!response Button", das nichts mehr vorhanden sei.
//EDIT
Einigermaßen geht das jetzt auch.. aber bei der ersten Seite gibt er mir dann aus das nicht mehr da sei & dass kein Eintrag gefunden wurde.
Gerne kann ich dir es auch mit Bildern verdeutlichen @Kaliber.
case D_PP:
{
new end = GetPVarInt(playerid,"ProtocolEnd");
DeletePVar(playerid,"ProtocolEnd");
if(!response)
{
if(end%10==0)
{
ShowPlayerProtocol(playerid,end-10);
return 1;
}
DeletePVar(playerid,"ProtocolName"), SCM(playerid, COLOR_GREY, "Du hast entweder das Fenster geschlossen oder es sind keine weiteren Einträge vorhanden!");
}
ShowPlayerProtocol(playerid,end+10);
}
Naja, man es kann aber sicherlich einrichten, das sobald einmal auf Weiter geklickt wurde, der Schließen Button als Zurück benutzt werden kann.
Natürlich, ich wollte dich lediglich darauf hinweisen, dass das bei diesem System (deinem Grundsystem) nicht vorhanden war/ist.
Probiere es mal so (nicht getestet):
case PLAYER_QUERY_PPROTOCOL:
{
if(!rows) return SCM(playerid, COLOR_LESSRED, "Es wurde kein Eintrag gefunden.");
new str[1024] = "Datum\tUhrzeit\tInhalt\n",end = GetPVarInt(playerid,"ProtocolEnd"),btnA[32] = "Schließen",btnB[32]="";
for(new i,date[11],time[9],data[128]; i<rows; i++)
{
cache_get_value_name(i, "Datum", date, sizeof(date)),
cache_get_value_name(i, "Uhrzeit", time, sizeof(time)),
cache_get_value_name(i, "Inhalt", data, sizeof(data));
if(data[0] != EOS) format(str, sizeof str, "%s%s\t%s\t%s\n", str, date, time, data);
}
if(end != 0) btnA = "Zurück",SetPVarInt(playerid,"ProtocolBtnA",1);
if(rows%10 == 0) btnB = "Weiter",SetPVarInt(playerid,"ProtocolBtnB",1);
else if(end != 0) btnB = "Schließen",SetPVarInt(playerid,"ProtocolBtnB",2);
ShowPlayerDialog(playerid, D_PP, DIALOG_STYLE_TABLIST_HEADERS, "Spielerprotokoll", str, btnA, btnB);
}
case D_PP:
{
new end = GetPVarInt(playerid,"ProtocolEnd"),btnA = GetPVarInt(playerid,"ProtocolBtnA"),btnB = GetPVarInt(playerid,"ProtocolBtnB");
DeletePVar(playerid,"ProtocolEnd"),DeletePVar(playerid,"ProtocolBtnA"),DeletePVar(playerid,"ProtocolBtnB");
if(response) //Left Button
{
switch(btnA)
{
case 0: DeletePVar(playerid,"ProtocolName"),SCM(playerid,COLOR_GREY,"Fenster geschlossen.");
case 1: ShowPlayerProtocol(playerid,end-10);
}
}
else
{
switch(btnB)
{
case 1: ShowPlayerProtocol(playerid,end+10);
case 2: DeletePVar(playerid,"ProtocolName"),SCM(playerid,COLOR_GREY,"Fenster geschlossen.");
}
}
}
Alles anzeigen
Vielen Dank Kaliber, es funktioniert nun wie gegossen.
Da ich es aber nicht mag, Copy & Paste zu betreiben & dann bestimmte Sektoren des Codes, nicht zu verstehen, hab ich noch die ein oder andere Frage.
EOS? End of String?
Inwiefern lässt sich das irgendwo noch einsetzen.
Ich meine, könnte ich z.B anstatt if(!strlen(string)) auch if(string[0] == EOS) einsetzen? Und inwiefern macht das dann auch Sinn? Dann könnte ich ja auch if(!string[0]) einsetzen oder nicht?
Wo lässt sich EOS wo verwenden?
if(rows%10 == 0) btnB = "Weiter",SetPVarInt(playerid,"ProtocolBtnB",1);
Damit frage ich ab ob der PVar Zahlenwert kleiner als 10 ist oder wie? So habe ich meinen Code noch nicht gestaltet.
Auch wenn ich nicht müsste, möchte ich noch was hinzufügen.
Ich hatte über 1.5 Jahre Pause beim Skripten und bin ein bisschen raus, ich bin gewiss kein Volldepp aber ich muss wieder reinkommen, auch was das ordentliche Arbeiten angeht.-
Ich werde mal mit nem Zeichenzähler durch meine Strings gehen und schauen wie viel Speicher ich überhaupt benötige.
Das % heißt Modulo und gibt den Rest der Division von zwei Zahlen zurück. Also in diesem Falle rows/10 und der Restwert ist das Ergebnis. Damit kommt dann nur der Weiter Button wenn auch mindestens 10 weitere Einträge vorhanden sind.
Inwiefern lässt sich das irgendwo noch einsetzen.
Ich meine, könnte ich z.B anstatt if(!strlen(string)) auch if(string[0] == EOS) einsetzen? Und inwiefern macht das dann auch Sinn? Dann könnte ich ja auch if(!string[0]) einsetzen oder nicht?
Wo lässt sich EOS wo verwenden?
Alles korrekt.
Das prüft quasi nur, ob das erste Zeichen im String das NULL Zeichen ist und wenn dem so ist, dann ist der String leer. Das ist einfach nur etwas schneller und performanter, als strlen zu nutzen
Ein krass ausführliches Tutorial zu Strings gibt es hier: https://forum.sa-mp.com/showthread.php?t=654471
Wie LeonMrBonnie schon korrekt erklärt hat ist das % Zeichen der Modulo Operator: https://de.wikipedia.org/wiki/Division_mit_Rest
Ich lese mich da mal durch:) Danke!
Hätte schon früher aufhören müssen, die Fläche nur oberflächlich zu betrachten, sonder mich auch für das zu interessieren, hinter der Kulisse steckt