Verwende jQuery.
Beiträge von Campbell
-
-
-
-
Entweder hier konkret eine Frage stellen oder mich anschreiben.
-
Ich zeige derzeit ein paar Interessenten das Script und werde dann je nach Tendenzen ein Startgebot hier festlegen. Sollte in den nächsten zwei Tagen stattfinden - derzeit spinnt leider mein Win-PC.
-
Was heißt "überlagern"?
-
Ein Server ist vorhanden, ich möchte das Script aber einzeln vorführen, um auf alles einzugehen.
-
Ist aber veraltet. OnQueryFinish existiert, soweit ich weiß, in revision 34 garnicht mehr.
-
Das Jetzige ist uneffizient, du sendest viele Queries, obwohl du einen verwenden könntest:
mysql_format(handle, query, sizeof(query), "SELECT `Level`, `Adminlevel`, `Geld` FROM `accounts` WHERE `Name` = '%e'", sSpieler[playerid][Name]); // usw.
mysql_tquery(handle, query, "OnLoadPlayerData", "i", playerid);forward OnLoadPlayerData(playerid);
public OnLoadPlayerData(playerid) {
new rows,
fields;cache_get_data(rows, fields);
if(rows > 0) {
sSpieler[playerid][Level] = cache_get_row_int(0, 0);
sSpieler[playerid][Adminlevel] = cache_get_row_int(0, 1);
sSpieler[playerid][Geld] = cache_get_row_int(0, 2);
}
} -
Ja, musst eben cache_get_row bzw. cache_get_row_float verwenden statt cache_get_row_int.
Erster Teil kommt dort hin, wo du den Query ausführen musst.
playerid und 2 steht für die playerid in Autos[playerid] und die 2 für die 2 in Autos[playerid][2]. Ich übergebe sie als Parameter zum Callback. playerid ist playerid in Callback und 2 vehicleIndex.
0, 0 steht bei cache_get_row für rowID 0 und fieldID 0.
Wenn du mehrere Rows hast:
new intValue;
for(new i = 0; i < rows; i++) {
intValue = cache_get_row_int(i, 0);
}Die fieldID steht hierbei für:
-
new query[88];
mysql_format(handle, query, sizeof(query), "SELECT `Abgeschlossen` FROM `autosystem` WHERE `Besitzer` = '%e'", playerName);
mysql_tquery(handle, query, "OnSelectLockStatus", "ii", playerid, 2);
// Hier nun nichts mehr!forward OnSelectLockStatus(playerid, vehicleIdx);
public OnSelectLockStatus(playerid, vehicleIdx) {
new rows,
fields;cache_get_data(rows, fields);
if(rows > 0) {
Autos[playerid][vehicleIdx][Abgeschlossen] = cache_get_row_int(0, 0);
}// Hier Rest des Scripts.
} -
2 letzte Dinge, worüber du dir Gedanken machen sollst: KISS, Bad Practice
-
Ja, natürlich. mysql_format, SELECT, mysql_tquery, neuer Callback, dort weiterarbeiten.
-
Hier geht es nicht um eine Pluginversion, sondern darum etwas Umständliches einfacher zu gestalten.
-
Warum sollte man mysql_real_escape_string und mysql_format verwenden, wenn man nur mysql_format verwenden könnte?
-
%e ist nicht %s! %e wurde extra eingebaut um zu escapen. Verwende nicht diese Funktionen (mysql_GetInt, mysql_GetString, ...) - diese sind für die Tonne und das waren sie schon immer.
-
mysql_real_escape_string brauchst du nicht, verwende mysql_format mit %e! Und cache_get_row_float nimmt als Parameter die rowID und fieldID.
-
// mysql_real_escape_string = %e in mysql_format.mysql_format(handle, query, sizeof(query), "UPDATE `table` SET `field` = %i WHERE `field2` = '%e'", someInteger, someString);
// mysql_fetch_int = cache_get_row_int / mysql_fetch_float = cache_get_row_float
mysql_tquery(handle, "SELECT `integer`, `float` FROM `table` LIMIT 1", "OnSelectingInteger", "");
forward OnSelectingInteger();
public OnSelectingInteger() {
new rows,
fields;cache_get_data(rows, fields);
if(rows > 0) {
new intValue = cache_get_row_int(0, 0), // Row: 0, Field: 0 - Wir fangen wie immer bei 0 an zu zählen.
floatValue = cache_get_row_float(0, 1);// ...
}
}// mysql_ping, wurde entfernt, da es Server crash'te. Die normalen MySQL-Errors werden unter OnQueryError gehandhabt, daher ...
public OnQueryError(errorid, error[], callback[], query[], connectionHandle) {
// Hier MySQL-ErrorIDs handhaben (http://dev.mysql.com/doc/refman/5.1/en/error-messages-client.html bzw. http://dev.mysql.com/doc/refman/5.1/en/error-messages-server.html).
}// Alternative wäre mysql_errno().
-
Je nachdem, ob du die richtigen Lernquellen findest, kannst du normale Scripts bereits nach ein paar Monaten schreiben (3 - 4 Monate). Bis du jedoch ordentliche Datenstrukturen, Algorithmen bauen kannst und deinen Script gedanklich perfekt aufbauen und strukturieren kannst, brauchst du mehr als 3 - 4 Monate. Die Zeit kann dir dann niemand vorgeben, da dies von Lernfähigkeit und Ergeiz abhängt. Wenn du bereits Erfahrung aus anderen Programmiersprachen mitbringst (am besten C), dann schaffst du das in 1 - 2 Wochen, je nachdem wie schnell du Funktionsnamen auswendig lernen kannst und dich mit der Struktur vertraut machen kannst.
-
Du benötigst den extra Callback nur, wenn du etwas abfangen musst. Grund dafür ist, dass auf einem extra Thread der Query ausgeführt wird und dein eigentliches Script weitergeführt wird. Demnach wird im eigentlichen Script nicht auf die Verarbeitung des Queries gewartet, was Lag verhindert. Wenn du etwas updatest, inserts, ..., dann brauchst du keinen extra Callback.
Beispiel:
mysql_format(handle, query, sizeof(query), "UPDATE `table` SET `field` = %i WHERE `field2` = '%e'", someInteger, someString);
mysql_tquery(handle, query, "", "");
// Hier einfach ohne Callback weitermachen, da du kein Resultat des Queries abfangen musst.