Timer zieht ja ordentlich oder?
Naja, das kommt darauf an, wie der Code in deinem Timer ist.
Grundsätzlich solltest du dich aber eher danach richten, wie es gut aussieht, also probier doch einfach mal rum ![]()
Timer zieht ja ordentlich oder?
Naja, das kommt darauf an, wie der Code in deinem Timer ist.
Grundsätzlich solltest du dich aber eher danach richten, wie es gut aussieht, also probier doch einfach mal rum ![]()
He?!
mysql_tquery gehört zu der neuen Version...
Ein einfaches mysql_query(connection, query); hätte vollkommen gereicht.
Wenn du die neue Version verwendest, kannst dir das ganze mysql_real_escape_string schenken und einfach %e anstatt %s im mysql_format verwenden.
PS: Das Wiki zu nutzen ist ganz unabhängig von der Erfahrung mit irgendeiner Funktion. Eigentlich sollte da die Tendenz sogar stärker sein, erstmal das wiki zu nutzen.
//E:
Sag mal..ist das jetzt dein Ernst? ![]()
Seit wie vielen Jahren bitte skriptest du schon und dann kommst du immer noch nicht auf die Idee mal ganz kurz ins Wiki zu schauen, sondern fragst hier, damit jemand für dich ins Wiki schaut oder das weiß?!?!?!
https://wiki.sa-mp.com/wiki/MySQL/R33#mysql_query
Wie du siehst, muss der 1. Parameter dein connection handle sein, also die Variable, die du erhälst, wenn du mysql_connect verwendest...
Was geht denn nicht?
Dass dir das doppelt angezeigt wird liegt nur daran, dass das immer alles einzeln geladen wird.
Solltest das so schreiben:
public loadBizzes(){
new rows;
cache_get_row_count(rows);
if(rows == 0) return 1;
new tank_counter;
for(new i,query[200]; i < rows; i++){
cache_get_value_name_int(i, "id", bInfo[i][db_id]);
cache_get_value_name_int(i, "biz_typ", bInfo[i][biz_typ]);
cache_get_value_name(i, "biz_name", bInfo[i][biz_name], 128);
cache_get_value_name_int(i, "biz_owner", bInfo[i][biz_owner]);
cache_get_value_name_int(i, "biz_sowner", bInfo[i][biz_sowner]);
cache_get_value_name_int(i, "biz_level", bInfo[i][biz_level]);
cache_get_value_name_int(i, "int_id", bInfo[i][int_id]);
cache_get_value_name_float(i, "bizkosten", bInfo[i][biz_kosten]);
cache_get_value_name_float(i, "bizkasse", bInfo[i][biz_kasse]);
cache_get_value_name_float(i, "enter_x", bInfo[i][enter_x]);
cache_get_value_name_float(i, "enter_y", bInfo[i][enter_y]);
cache_get_value_name_float(i, "enter_z", bInfo[i][enter_z]);
cache_get_value_name_float(i, "int_x", bInfo[i][int_x]);
cache_get_value_name_float(i, "int_y", bInfo[i][int_y]);
cache_get_value_name_float(i, "int_z", bInfo[i][int_z]);
cache_get_value_name_float(i, "i_x", bInfo[i][i_x]);
cache_get_value_name_float(i, "i_y", bInfo[i][i_y]);
cache_get_value_name_float(i, "i_z", bInfo[i][i_z]);
bInfo[i][id_x] = bInfo[i][db_id];
if(bInfo[i][biz_typ] == 1){
tank_counter++;
mysql_format(handle, query, sizeof(query), "SELECT * FROM new_tankstellen WHERE id = '%i'", bInfo[i][db_id]);
mysql_pquery(handle, query, "loadTanke", "i", i);
}
}
print("|__________Tankstellen wurden geladen__________|");
printf("Es wurden %i Tankstellen geladen", tank_counter);
return 1;
}
public loadTanke(dbid){
new rows;
cache_get_row_count(rows);
if(rows == 0) return 1;
new string[128];
cache_get_value_name_int(0, "id", tankInfo[dbid][db_id]);
cache_get_value_name_int(0, "t_typ", tankInfo[dbid][t_typ]);
cache_get_value_name_float(0, "t_x", tankInfo[dbid][t_x]);
cache_get_value_name_float(0, "t_y", tankInfo[dbid][t_y]);
cache_get_value_name_float(0, "t_z", tankInfo[dbid][t_z]);
cache_get_value_name_int(0, "t_range", tankInfo[dbid][t_range]);
cache_get_value_name_float(0, "benzin_vol", tankInfo[dbid][benzin_vol]);
cache_get_value_name_float(0, "diesel_vol", tankInfo[dbid][diesel_vol]);
cache_get_value_name_float(0, "gas_vol", tankInfo[dbid][gas_vol]);
cache_get_value_name_float(0, "kerosin_vol", tankInfo[dbid][kerosin_vol]);
cache_get_value_name_float(0, "benzin_preis", tankInfo[dbid][benzin_preis]);
cache_get_value_name_float(0, "diesel_preis", tankInfo[dbid][diesel_preis]);
cache_get_value_name_float(0, "gas_preis", tankInfo[dbid][gas_preis]);
cache_get_value_name_float(0, "kerosin_preis", tankInfo[dbid][kerosin_preis]);
tankInfo[dbid][id_x] = tankInfo[dbid][db_id];
printf("Tankstelle: %s | X: %f | Y: %f | Z: %f | ID: %i geladen", bInfo[dbid][biz_name], bInfo[dbid][enter_x], bInfo[dbid][enter_y], bInfo[dbid][enter_z], tankInfo[dbid][id_x]);
format(string, sizeof(string), "%s", bInfo[dbid][biz_name]);
tankLabel[bInfo[dbid][id_x]] = Create3DTextLabel(string, COLOR_WHITE, bInfo[dbid][enter_x], bInfo[dbid][enter_y], bInfo[dbid][enter_z], 15, 0, 1);
return 1;
}
Alles anzeigen
Das Problem das ich hier sehe ist Array-Verschwendung.
Also man kann es so lösen, aber das ist nicht gerade elegant, da wenn du z.B. 100 Unternehmen hast und davon ist index 30 und index 98 eine Tankstelle.
Dann steht in tankInfo[30] etwas und in tankInfo[98] etwas.
Der ganze Rest ist leer.
Bräuchtest also eigentlich auch nur tankInfo[0] und tankInfo[1], sprich 2 Cells, wohingegen du hier 100 reservierst.
Aber gut...das nur mal als Anmerkung.
Und in Zeile 56 von meinem Code, da wolltest du doch bInfo[dbid][id_x] schreiben, oder? ![]()
Des weiteren wäre das effizienter nicht für jede Tankstelle einen Query auszuführen, sondern einfach einen JOIN zu benutzen und dann alle Tankstellen auf einmal zu laden.
Kennt jemand zufällig das Rageban Include?
Da gibt es nicht "das Include" es gibt sehr viele.
Und das ist auch sehr einfach selbst zu schreiben, musst ja nur die Ip splitten und dann in der Datenbank speichern, fertig.
https://forum.sa-mp.com/showthread.php?t=295759
https://forum.sa-mp.com/showthread.php?t=446692
https://forum.sa-mp.com/showthread.php?t=608273
1x suchen, wird man in ein paar Threads fündig, wo man sich inspirieren lassen kann ![]()
mysql_real_escape_string(Table, Table); //3080
Wieso verwendest du das älteste MySQL Plugin? ![]()
Ich meine, heute gibt es so schöne so gute Alternativen...
Naja, das klappt nicht, weil die Größe von dem Array nicht der Funktion übergeben wird.
Musst da sowas machen:
stock mysql_SetInt(Table[], Field[], To, Where[], Where2[])
{
new t[32],f[32],w1[32],w2[32];
mysql_real_escape_string(Table, t);
mysql_real_escape_string(Field, f);
mysql_real_escape_string(Where, w1);
mysql_real_escape_string(Where2, w2);
format(query, 128, "UPDATE %s SET %s = '%d' WHERE %s = '%s'", t, f, To, w1, w2);
mysql_query(query);
return true;
}
Alles anzeigen
und query sollteste auch lokal deklarieren ![]()
Du kannst nicht die playerid verwenden, da die sich doch jedes mal ändert und wenn der Spieler offline ist schon gar nicht existiert.
Du musst einfach nur den Namen von dem Spieler verwenden, das ist der eindeutige Key und nicht die playerid ![]()
Lies bitte noch mal meinen Beitrag. Ich rede eigentlich nirgends von listitem.
welche Datenbank ID der Player hat den ich ausgewählt habe.
Habe doch exakt erklärt was du dann tun kannst. Du hast den Namen des Spielers, dieser ist ein eindeutiger Key für deine MySQL Tabelle.
Jetzt kannst du sowas machen:
So kannst du dann dem Spieler z.B. sein Adminlevel entziehen.
Mit [wiki]SetPVarString[/wiki] kannst du inputtext natürlich auch ganz einfach zwischenspeichern ![]()
Ja, ist irgendwie komisch, manche Funktionen buggen und werden nicht angezeigt.
Da hilft ein schneller Blick ins Wiki: [wiki]GetPVarFloat[/wiki] und du weißt, ahh ja die Funktion existiert ![]()
Und natürlich, kannst du das damit zwischenspeichern ![]()
new Float:literCount = floatstr(inputtext);
Ja, schreib mal hier:
new Float:literCount = floatstr(inputtext)+FLOAT_ERROR;
Eigentlich sollte dies funktionieren.
Wenn nicht, gib die Zahlen mal durch ![]()
Und mach im format mal aus dem %0.2f ein %.02f.
Unter [wiki]OnDialogResponse[/wiki], hast du ja einmal listitem, aber auch inputtext.
In diesem Fall bei DIALOG_STYLE_TABLIST_HEADERS entspricht inputtext exakt dem ersten Eintrag, also dem Namen von dem listitem.
Sagen wir dein Dialog sieht so aus:
Klickt man jetzt auf listitem 1, entspricht inputtext = "Kaliber" und klickt man auf 2, entspricht inputtext "reaL."
Das bedeutet, wenn du dann etwas ändern willst, hast du direkt den Namen und kannst über SQL direkt etwas ändern und natürlich auch mit ReturnUser die playerid von dem Spieler herausfinden, falls dieser online ist und diesen bearbeiten ![]()
//Edit: Hier mal eine detaillierte Liste: http://wiki.sa-mp.com/wiki/Dialog_Styles
Hmm, also da du das nur auf die 2. Stelle genau haben willst, funktioniert das eigentlich perfekt:
//Test-Code:
printf("1.04 == %.02f",floatstr("1.04")+FLOAT_ERROR);
printf("1.50 == %.02f",floatstr("1.5")+FLOAT_ERROR);
printf("1.49 == %.02f",floatstr("1.49")+FLOAT_ERROR);
printf("1.54 == %.02f",floatstr("1.54")+FLOAT_ERROR);
//Output:
1.04 == 1.04
1.50 == 1.50
1.49 == 1.49
1.54 == 1.54
Alles anzeigen
Also bei mir funktioniert das alles perfekt.
Kann es sein, dass du bei der Zuweisung einen Fehler gemacht hast oder so? ![]()
Darf ich mal fragen, wie deine weiteren Abfragen aussehen und wofür du das brauchst?
Denn es tritt immer bei Floating Operationen ein Fehler auf.
Wenn ich als Beispiel: 1.05 eingebe, erkennt er es als 1.04 ... muss ich also den Wert Manuell erhöhen ?
Ja, da entsteht ein kleiner Rundungsfehler.
So kannst du es lösen:
new Float:literCount = strval(inputtext);
new Float:literCount = floatstr(inputtext);
Ne 16 ist die String-Länge.
Kannst beide Array Klammern einfach leer lassen ![]()
Und ja kannst auch mehrere defines machen mit anderem Namen, die den Wert 0 haben.
Sollte also klappen.
#Handy
if(strcmp(mInfo[vModel][fuelTyp], kraftstoff))
Schau ins Wiki: [wiki]strcmp[/wiki]
Die Funktion gibt 0 zurück, wenn die Strings übereinstimmen.
Somit musst du auch das abfragen:
if(strcmp(mInfo[vModel][fuelTyp], kraftstoff) == 0)
oder kurz:
if(!strcmp(mInfo[vModel][fuelTyp], kraftstoff))
Entweder:
if(strlen(inputtext) == 0)
oder besser:
if(!inputtext[0])
Und kann mein Tor sogar vom Dach oder 100 Meter weit weg aufmachen ..
Da fehlt das !.
Also:
if(!IsPlayerInRangeOfPoint(playerid,5.0,1106.0683,-1691.4707,12.9108))
3 Dinge zu dem Code:
if(strcmp(cmdtext,"/towopen", true) == 0)
{
if(!PlayerToPoint(5,playerid,1106.0683,-1691.4707,12.9108)) return SendClientMessage(playerid,-1,"Du befindest dich nicht in der Nähe!");
DestroyObject(OamtTor);
OamtTor2=CreateObject(968, 1106.07, -1691.47, 12.91, 0.00, -4.00, -90.00);
SendClientMessage(playerid,0x00C5FFFF,"Das Tor schließt in 5 Sekunden.");
SetTimerEx("oamtzu",5000,0,"i",playerid);
return 1;
}