Gibt dir der MySQL Log etwas aus?
Beiträge von Jeffry
-
-
Das id darf dort nicht sein.
Grundsätzlich kannst du es so etwas kompakter schreiben:
forward HausUpdate();
public HausUpdate()
{
mysql_pquery(handle, "SELECT * FROM haus WHERE update = 1", "HausUpdat","");
return 1;
} -
Was war denn der Fehler?
Kannst du den ausgebesserten Code bitte posten? -
Das könnte von einem ähnlichen Problem verursacht werden. Eventuell werden die Fahrzeuge gelöscht und deren Neon dazu aber nicht, oder die Variablen nicht zurück gesetzt.
Wenn du das alles sauber zurück setzt, dann dürfte der Fehler nicht auftreten.
-
Ja, aber nicht im enum, sondern in einer Schleife bei OnGameModeInit:
for(new i = 0; i < sizeof(array); i++) array[i][label] = Text3D:INVALID_3D_TEXTID;Und zusätzlich dort, wo das Label gelöscht wird:
if(array[i][label] != Text3D:INVALID_3D_TEXTID) Delete3DTextLabel(array[i][label]);
array[i][label] = Text3D:INVALID_3D_TEXTID; -
Das passt, da dürfte kein Fehler auftreten. Kannst du bitte versuchen den Fehler nachzustellen?
Eventuell hat es sich durch deine Änderung bereits erledigt.Zu dem neuen Fehler:
Prüfe bitte alle im Code angegebenen Spalten der Tabelle und die Bezeichner, ob dies alles mit der Datenbank übereinstimmt. -
Der Error bezieht sich auf ein mysql_tquery, die Zeile ist ein mysql_pquery, hast du das geändert?
Falls ja, wie sieht die HausUpdat Funktion jetzt aus?Tritt der Error im Log weiterhin auf?
-
Welche Zeile ist die 2926, die den Error erzeugt?
-
@Jeffry Im MySQL Log steht auch nichts großartiges
Setze vor das mysql_format bitte mal einen Print, und dann einen Print in OnPlayerLoginDialog.
Wie sieht die zeitliche Differenz hier aus?Eventuell liegt es ja gar nicht an MySQL selbst.
Tritt diese starke Verzögerung auch auf, wenn du das Absenden des Queries auskommentierst? Den Dialog siehst du dann nicht mehr, aber vielleicht kannst du es an etwas anderem erkennen.
-
Kann irgendwas passieren wenn man per DestroyDynamicObject das "INVALID_OBJECT_ID" löscht?
Oder kann dadurch kein Bug auftreten?Nein, eigentlich nicht.
Allerdings kannst du, um ganz sicher zu gehen, zuvor eine if Abfrage einbauen, ob die Variable den invaliden Wert hat.
-
Hast du das jetzt nicht so gemacht, wie Shyim und ich es dir erklärt haben?
Dann wird das Haus nur neu erstellt, wenn auch ein Update stattgefunden hat, und das dürfte ja recht selten der Fall sein. -
Was meinst du? Das Pickup?
Das sollte eigentlich direkt wieder erstellt werden. -
Versuche es so:
mysql_format(myCon, string, sizeof(string), "SELECT * FROM `script_accounts` WHERE `Admin` > 0 ORDER BY `Admin` DESC");Füge eventuell das Query so mal in das SQL Feld deiner Datenbank ein, und schaue, was dort ausgegeben wird.
-
sind die Coordinaten die selben? Oder sind das andere bei dem Objekt?
Das können andere sein.
Am besten du nutzt für Attached Objects einen Editor wie diesen:
http://forum.sa-mp.com/showthread.php?t=416138Dann kannst du die Koordinaten für jedes Objekt selbst herausfinden.
-
Du darfst keine neue ID suchen, sondern musst die aktuelle Index-ID finden:
forward HausUpdat();
public HausUpdat()
{
new num_rows, hid, tmp_name[MAX_PLAYER_NAME], id;
cache_get_row_count(num_rows);
if(!num_rows)return 1;
for(new i=0; i<num_rows; i++)
{
cache_get_value_name_int(i, "id", hid);
id=getHausID(hid);
if(id == -1) continue; //Haus existiert nicht
cache_get_value_name_float(i, "h_x", hInfo[id][h_x]); //Float
cache_get_value_name_float(i, "h_y", hInfo[id][h_y]); //Float
cache_get_value_name_float(i, "h_z", hInfo[id][h_z]); //Float
cache_get_value_name_float(i, "ih_x", hInfo[id][ih_x]); //Float
cache_get_value_name_float(i, "ih_y", hInfo[id][ih_y]); //Float
cache_get_value_name_float(i, "ih_z", hInfo[id][ih_z]); //Float
cache_get_value_name_int(i, "h_interior", hInfo[id][h_interior]); //Float
cache_get_value_name(i, "besitzer", hInfo[id][h_besitzer]); //Float
strmid(hInfo[id][h_besitzer], tmp_name, 0, sizeof(tmp_name), sizeof(tmp_name));
cache_get_value_name_int(i, "h_preis",hInfo[id][h_preis]); //Float
updateHaus(id);
}
return 1;
}Mit:
stock getHausID(hid)
{
for(new i = 0; i < sizeof(hInfo); i++)
{
if(hInfo[i][h_id] == hid) return i;
}
return -1;
} -
An was kann es liegen ? Dem Plugin, dem Code oder am Windows Server ?
Liegt der Server und die Datenbank auf dem gleichen Server?
Was genau verstehst du unter "sehr lange"? Wie macht sich das bemerkbar?
Hast du eventuell einen Log dazu, der die Zeitstempel enthält? -
Dort befindet sich keine Code der den Cache ausliest.
Der Fehler liegt woanders im Code. -
In 2884 fehlt id als letzter Parameter nach dem i.
Im anderen public fehlt id ebenfalls als letzter Parameter im format.
Außerdem musst du das Query noch abschicken. -
Macht es nicht mehr Sinn in der Datenbank ein Feld zu habe wie lastupdate und dort steht immer ein Timestamp drin, der sich aktualisiert wenn sich der Datensatz anpasst.
Auf jeden Fall.
Entweder per Timestamp oder über ein einfaches Flag (Spalte die auf 1 gesetzt wird, wenn ein Update ansteht). Über das Flag können dem Panel auch Informationen übergeben werden (1 = Update steht an / 0 = Update erfolgt / 2 = Fehler ... ?).
Vom Vorgehen:
1.
Das Update im Panel setzt die Spalte "update" auf 1.2.
Im PAWN Code läuft ein Timer, der alle 10 Sekunden folgendes Query absendet:
3.
Das wird per mysql_pquery an ein Callback weitergegeben und der Cache wird dann dort ausgelesen.4.
Anhand der ID lässt sich dann bestimmen, welches Haus aktualisiert werden soll.5.
Daten aus dem Cache auslesen und updateHaus für diese ID aufrufen.6.
Query zurücksenden: -