Mal eine doofe Frage, aber hast du mal crashdetect geladen? ![]()
Beiträge von Kaliber
-
-
das man mir gesagt hat ich soll mein Router neu starten sonst kam da halt immer diese Meldung das man gebannt ist.
Nein, dann hatten die die Funktion [wiki]Ban[/wiki] verwendet. Diese sorgt dafür, dass deine IP gebannt wird und durch einen Router restart, bekommst du eine andere IP.
Hier verwendet er aber nur Kick und prüft ob der Account gebannt ist.
-
sizeof(rows)
...das ist kein String, sondern ein int. Musst hier nur rows verwenden.
Nachricht und das wars
Wie sollen wir dir jetzt helfen?

Musst halt mal alles printen..unter OnPlayerConnect usw...
Irgendwo bleibt er hängen, wahrscheinlich bei deiner Abfrage, ob der Spieler gebannt ist oder nicht und dann wird er wieder gekickt..
-
Mal kurze Anmerkungen:
if(strlen(Reason) > 128)
Das ist unmöglich..wenn Reason nur 128 Cells hat, können da nicht plötzlich mehr rein

DB_Escape
Das musst du nicht nutzen, das ist doppel gemoppel, %e macht das schon.
Du hast viele Funktionen noch, die wir nicht sehen und kennen, wie z.B. SendBan...
Aber ich vermute mal, es tritt ein Fehler auf, hast du mal crashdetect geladen?

-
aber geht tut es nicht
Ja...was geht denn nicht?!
Du musst DOOR_DRIVER und DOOR_PASSENGER checken, wenn du die Türen abfragen magst.
-
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:
C
Alles anzeigenpublic 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; }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:
C
Alles anzeigenstock 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; }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:
C
Alles anzeigen//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.54Also 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);