Wie sieht dein Code denn unter OnDialogResponse aus? ![]()
Beiträge von Kaliber
-
-
Dann setze mal prints und schau, wo er sich aufhängt :o
Und aktivier evtl mal den Mysql Log//Edit:
Habe es mal bei mir lokal getestet und es funzt einwandfrei.
Bekomme keine Fehler oder dergleichen und habe exakt deine Datenstruktur gewählt.Das war der Code, den ich verwendet habe:
C
Alles anzeigenocmd:pp(playerid, params[]) { if(pInfo[playerid][pAdmin] < 6)return 1; if(IsNull(params))return SCM(playerid, COLOR_GREY, "Befehl: /pp [Name]"); SetPVarString(playerid,"ProtocolName",params); ShowPlayerProtocol(playerid,0); return 1; } case PLAYER_QUERY_PPROTOCOL: { if(!rows) return SCM(playerid, COLOR_LESSRED, "Es wurde kein Eintrag gefunden."); new str[1024] = "Datum\tUhrzeit\tInhalt\n"; 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); } ShowPlayerDialog(playerid, D_PP, DIALOG_STYLE_TABLIST_HEADERS, "Spielerprotokoll", str, "Schließen", ((rows%10 == 0)?("Weiter"):(""))); } case D_PP: { new end = GetPVarInt(playerid,"ProtocolEnd"); DeletePVar(playerid,"ProtocolEnd"); if(response) return 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); } stock ShowPlayerProtocol(playerid,start) { new query[64 + MAX_PLAYER_NAME]; GetPVarString(playerid,"ProtocolName",query,MAX_PLAYER_NAME); mysql_format(handle, query, sizeof query, "SELECT * FROM playerprotocol WHERE Name='%e' LIMIT %d,10", query,start), mysql_pquery(handle, query, "PlayerQuery", "d", PLAYER_QUERY_PPROTOCOL); return SetPVarInt(playerid, "ProtocolEnd", start),1; }Aber mir ist schleierhaft wie du die playerid an das PlayerQuery übergibst (Zeile 36)
und wie fragst du die rows ab?
Ich kenne halt nicht all deinen Code.
An dem Stück Code liegt der Fehler zumindest nicht

-
Hmmm, dann schreib es mal so:
C
Alles anzeigencase PLAYER_QUERY_PPROTOCOL: { if(!rows) return SCM(playerid, COLOR_LESSRED, "Es wurde kein Eintrag gefunden."); SetPVarInt(playerid,"ProtocolRows",rows); new str[2000] = "Datum\tUhrzeit\tInhalt\n"; for(new i,date[11],time[9],data[512]; 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); } ShowPlayerDialog(playerid, D_PP, DIALOG_STYLE_TABLIST_HEADERS, "Spielerprotokoll", str, "Schließen", ((rows%10 == 0)?("Weiter"):(""))); }Ich bin mir ziemlich sicher, dass es ein Größen Problem ist.
-
Mach mal das else eine Zeile drunter.
Der Fehler ist es darf zwischen einem if und einem else kein Statement stehen.
Sprich:
C//Das okay if(a) {...bla} else {...bla} //Das nicht okay if(a) {...bla} Funktion(); else {...bla} //Weil worauf bezieht sich jetzt das else?!
Also so schreiben:C
Alles anzeigenpublic OnGameModeInit() { SetGameModeText("The new Generation of Roleplay!"); mysql_log(LOG_ALL); Handle=mysql_connect(mysql_host, mysql_user, mysql_data, mysql_pass); if(mysql_errno() < 1) print(">> [MYSQL]: Die Verbindung zur Datenbank wurde erfolgreich hergestellt."); else print(">> [MYSQL]: Die Verbindung zur Datenbank konnte NICHT erfolreich hergestellt werden. Der Server wird nun heruntergefahren."), SendRconCommand("exit"); return 1; } -
Ahhh du speicherst die Sekunden

Daran habe ich nicht gedacht, schreibe mal den Mittleren Teil so:
C
Alles anzeigencase PLAYER_QUERY_PPROTOCOL: { if(!rows) return SCM(playerid, COLOR_LESSRED, "Es wurde kein Eintrag gefunden."); SetPVarInt(playerid,"ProtocolRows",rows); new str[(128+11+9)*10] = "Datum\tUhrzeit\tInhalt\n"; 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); } ShowPlayerDialog(playerid, D_PP, DIALOG_STYLE_TABLIST_HEADERS, "Spielerprotokoll", str, "Schließen", ((rows%10 == 0)?("Weiter"):(""))); } -
Pack mal crashdetect rein und zeig mal deine Tabellen Struktur

Und hast du mal Beispieldaten? Also mich interessiert die Länge der einzelnen Felder...
//Edit:
PS: Zeile 21 mal so schreiben:
ShowPlayerDialog(playerid, D_PP, DIALOG_STYLE_TABLIST_HEADERS, "Spielerprotokoll", str, "Schließen", ((rows%10 == 0)?("Weiter"):("")));
-
Geht sowas noch ?
Die Frage ist doch eher, sollte es so gemacht werden?
Und die Antwort ist ganz klar nein.
Das hat seine Gründe, wieso diese Asynchronität eingeführt wurde.
Natürlich muss man jetzt etwas umdenken, weil man es davor gewohnt war synchron zu arbeiten.
Du brauchst den Wert nicht, du kannst einfach den Code, der danach kommt in den Callback packen und ihn da weiter ausführen lassen.
Und dort quasi den Wert verarbeiten lassen.
C
Alles anzeigen//Code von Kasakow new query[41 + MAX_PLAYER_NAME]; mysql_format(handle, query, sizeof(query), "SELECT `ID` FROM `Accounts` WHERE `Name` = '%e'", Name), mysql_pquery(handle, query, "Callback", "d", playerid); forward Callback(playerid); //Kann beliebig umbenannt werden public Callback(playerid) { new rows; cache_get_row_count(rows); if(rows == 0) { //Hier der Code Weiter, wenn nicht } else { //Hier der Code Weiter wenn doch :D } } -
Danke aber hast du vielleicht noch ein paar Tipps, wo ich mehr darüber lernen kann, etc.
Auch wenn es blöd klingt aber irgendwie finde ich nicht viel dazu.Hmmmm...learning by doing

Einfach leicht anfangen, mit ein paar Keras Beispielen, etwas abändern und spielen, schauen was was macht.
Vllt fällt dir auch TensorFlow JS leichter? Gibt glaube ich auch gute Tutorials von "The Coding Train"

-
@Talykos Jetzt übertreiben wir mal nicht, zumal new query[MAX_PLAYERS_NAME+1]; das auch nicht geht, da der Rest des Querys ja noch drum rum muss.
ProtocolRead[P_MAX][600][3]
Das frisst deine Ressourcen.
Lösche es, du kannst das alles schöner schreiben.Versuche es mal so:
C
Alles anzeigenocmd:pp(playerid, params[]) { if(pInfo[playerid][pAdmin] < 6)return 1; if(IsNull(params))return SCM(playerid, COLOR_GREY, "Befehl: /pp [Name]"); SetPVarString(playerid,"ProtocolName",params); ShowPlayerProtocol(playerid,0); return 1; } case PLAYER_QUERY_PPROTOCOL: { if(!rows) return SCM(playerid, COLOR_LESSRED, "Es wurde kein Eintrag gefunden."); SetPVarInt(playerid,"ProtocolRows",rows); new str[(128+11+6)*10] = "Datum\tUhrzeit\tInhalt\n"; for(new i,date[11],time[6],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); } ShowPlayerDialog(playerid, D_PP, DIALOG_STYLE_TABLIST_HEADERS, "Spielerprotokoll", str, "Schließen", ""); } case D_PP: { new step = GetPVarInt(playerid, "ProtocolRows"), end = GetPVarInt(playerid,"ProtocolEnd"); DeletePVar(playerid,"ProtocolRows"),DeletePVar(playerid,"ProtocolEnd"); if(!response || listitem || step%10 != 0) { DeletePVar(playerid,"ProtocolName"); return SCM(playerid, COLOR_GREY, "Du hast entweder das Fenster geschlossen oder es sind keine weiteren Einträge vorhanden!"); } ShowPlayerProtocol(playerid,end+10); } stock ShowPlayerProtocol(playerid,start) { new query[64 + MAX_PLAYER_NAME]; GetPVarString(playerid,"ProtocolName",query,MAX_PLAYER_NAME); mysql_format(handle, query, sizeof query, "SELECT * FROM playerprotocol WHERE Name='%e' LIMIT %d,10", query,start), mysql_pquery(handle, query, "PlayerQuery", "d", PLAYER_QUERY_PPROTOCOL); return SetPVarInt(playerid, "ProtocolEnd", start),1; }Das scheint mir ein eleganter Weg zu sein!

Schlaf schön

-
Mal 2 ganz blöde Fragen.
- Nutzt du ProtocolRead nur in diesen Codes?
- Wie hast du das deklariert?
- Mal ein paar Hinweise generell wegen der Performanz.
- Nutze LIMIT in deinen SQL Abfragen. Das ist hier auch der Schlüssel, wie du das elegant hier alles lösen kannst. Dann brauchst du keine komischen if-Abfragen wie in Zeile 22. (Wenn du schon sowas nutzt, dann auch ein break, sonst läuft die Schleife ja sinnlos weiter xD)
- Deine String-größen sind nicht wirklich optimal gewählt...allein bei deinem CMD kannst du 64, statt 256 verwenden.
-
habe diesen Kurs gefunden
"gefunden" du meinst wohl, du wurdest bei jedem YouTube Video mit dieser dummen Werbung belästigt.
Also ich rate dir davon ab.
Das Andere sieht doch ganz gut aus, der erklärt viel, wenn du es etwas peppiger haben magst empfehle ich dir Siraj Raval

Ansonsten ist das schon mal ein guter Einstieg in die Thematik

-
format(string, sizeof(string), "{2C140F}LyD {050E2B}- %d", Vehicle[pTaxifahrer[i]][vehID]);
Ich rate einfach mal ins Blaue @Kasakow hat da schon ganz recht mit seiner Aussage.
Schreib es mal so:
format(string, sizeof(string), "{2C140F}LyD {050E2B}- %d", pTaxifahrer[i]);
-
Ehhh offensichtlich gibt es keine Variable LSFlugzeuge?

Vllt n Tippfehler oder so

-
Das break ist falsch gesetzt.
Das solltest du so schreiben:
C
Alles anzeigenforeach(Vehicle vehicle in NAPI.Pools.GetAllVehicles()) { if (vehicle.Position.DistanceTo2D(client.Position) <= 7) { if (vehicle.Locked = !vehicle.Locked) { was_vehicle_found = true; client.SendChatMessage(" **Du hast das Auto geschlossen !** "); } else { was_vehicle_found = true; client.SendChatMessage(" **Du hast das Auto geöffnet !** "); } break; } } -
for(new i;i<GetVehiclePoolSize();i++)
Schreibe es:
for(new i=GetVehiclePoolSize(); i!=0; i--)
Autos starten bei 1 und enden bei der letzten ID.
Ergo wäre nur folgendes richtig:
for(new i=1;i<=GetVehiclePoolSize();i++)
Allerdings ist das nicht so performant, wie mein erstes Beispiel (da jeden Durchgang die Funktion aufgerufen werden würde)!

-
Hast du das gelesen (https://support.globalsign.com…he---enable-ocsp-stapling) und das SSLCACertificateFile hinzugefügt?
Hier nochmal eine andere Info, auch für NGINX: https://www.digitalocean.com/c…pling-on-apache-and-nginx
-
diese nervige Zivinote rausgenommen
Keine Ahnung, was das ist.
Aber poste evtl mal eine Fehlerzeile dazu

-
Meine Idee war es mit dem Callback OnPlayerWeaponShot zu arbeiten.
Yes:
https://forum.sa-mp.com/showthread.php?t=534341
oder
-
Sorry, mein Herz schlägt für SA:MP

-
Achso, mein Fehler du redest von Vita Village dem MTA Skript...
Ich dachte du redest von einem SA:MP Skript, sry, habe nicht auf die Ordnerstruktur geachtet, boah, das echt nervig.
Mein Fehler, sry.