Das mit Sicherheit auch. Er möchte wahrscheinlich das Alter zwischen 16 und 90 eingrenzen und nicht die Länge des eingegebene Textes zwischen 16 und 90 zeichen (strval statt strlen).
Beiträge von Goldkiller
-
-
Du musst den Wert für speed viel niedriger setzen.
[wiki]MoveObject[/wiki]
ZitatFloat:SpeedThe speed at which to move the object (units per second).
Du bewegst es 0.0001 Units, machst aber 1 Unit pro Sekunde. Da muss es doch auf springen. -
if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return 1;
Du musst diese Abfrage machen, wenn der Spieler IM Fahrzeug ist. Aktuell hast du es so, dass die Abfrage kommt wenn er nicht im Fahrzeug ist. Wenn er nicht im Fahrzeug ist, ist er auch niemals der Fahrer. Daher ist die Abfrage immer wahr und die Funktion wird beendet.
Außerdem hast du die Klammer und das return komisch gesetzt. Das ist zum lesen verwirrent und ich bin mir ziemlich sicher, du möchtest nicht das,was da aktuell passiert.Kurz gesagt:
Die Abfrage muss über die Zeile 12 bzw vor vehicleid=GetPlayerVehicleID(playerid); im Block kommen. -
Deine Fehlerbeschreibung ist leider sehr knapp.
der aber nur das Abschließen im Fahrzeug möglich macht.
Bekommst du eine Meldung? Crasht der Server? Sonstiges?
Ich kann dir aber sagen, dass in Zeile 3 der Knackpunkt liegt. Da du in keinem Fahrzeug sitzt, ist die Abfrage falsch (false) und die Funktion beendetEine Fallunterscheidung würde Sinn machen.
a) Sitzt der Spieler im Fahrzeug
b) Sitzt der Spieler nicht im Fahrzeug. Den Teil a) hast du ja bereits schon.
Für Teil b) wären so Sachen interessant wie:
- Welches Fahrzeug befindet sich am nächsten zum Spieler (zB GetNearestVehicle)
- Ist der Spieler Mitglied der Fraktion,der das Fahrzeug in unmittelbarer nähe gehört -
Das ist aber quatsch. Du hast eventuell die Parameter killerid und reason vertauscht.
[wiki]OnPlayerDeath[/wiki]
Poste doch einfach mal wie du bei OnPlayerDeath die Werte (killerid etc) überprüfst bzw ausgibst. -
Das ist genau so falsch.
Du/Ihr solltet euch anschauen,wie random arbeitet:
Das Beispiel im Wiki zu random ist eigentlich ganz gut:
[wiki]Random[/wiki]Wie man es beispielsweise machen könnte:
Mit random einen zufälligen Index besorgen. Mit diesem zufälligem Index dann auf PilotPlaneFrachtZiele X,Y und Z (0,1,2) zugreifen.new randomFrachtZielIndex = random(sizeof(PilotPlaneFrachtZiele));
SetPlayerCheckpoint(playerid, PilotPlaneFrachtZiele[randomFrachtZielIndex][0],PilotPlaneFrachtZiele[randomFrachtZielIndex][1],PilotPlaneFrachtZiele[randomFrachtZielIndex][2],10);PilotPlaneFracht dem gleichem Prinzip entsprechend ausbessern.
-
Habe den Beitrag von dir (Shoxx) nicht mitbekommen, leanc hat dir darauf aber ja geantwortet. Mit der aktuellen Version sollte es einfacher sein, solche Abfragen vor dem öffnen durchzuführen. Im Beispiel Filterscript kannst du dir es ansehen:
COMMAND:gpm(playerid,params[]) { return gPM_Show(playerid);}
Habe den Befehl und das Öffnen etwas getrennt. Mit gPM_Show() kann das Postfach geöffnet werden, die Bedingung bzw das Öffnen selbst kannst du dann ja selbst nach deinem Wunsch ergänzen.
- - - - - - - - - - - - - - - -Download: gPM 1.3.3
Zitat* - Datenbank wird automatisch erzeugt und zur Weiterverwendung vorbereitet
* - Zwei potenzielle Speicherlücken geschlossen
* - SQL Kommandos etwas angepasst
* - Fehlermeldung überarbeitet bei *_FILTER, falls keine Nachrichten vorhanden
* - Crash behoben bei zu vielen Nachrichten im *_FILTER Ergebnis
* - ID Entfernt aus *_MSG_FILTER Überschrift
* - Nachrichten Robot angepasst
* - Fehlende Aktion bei "Zurück" im DIALOG_PM_USER_VERARBEITUNG hinzugefügt
* - MAX_QUERY_RESULTS auf 15 reduziert
* - Dialog Style für bessere Übersicht auf DIALOG_STYLE_TABLIST_HEADERS umgestellt
* - Code für den EDIT_MODE entfernt
* - Weitere Hilfen als Informationshinweis ergänzt
* - "User Übersicht" in "Benutzer Suche" umbenannt
* - Doppelte Nachricht aus gPM_SendMessageArray entfernt
* - Gültigkeitsbereich von Funktionen angepasst
* - Öffnen des Postfaches von COMMAND auf Funktion umgestellt
* - ZCMD Abhängigkeit entfernt
Ein paar Screenshots, die die aktualisierten Dialoge zeigen. Im wesentlichen wurde die Titelzeile um Informationen ergänzt. -
Da es nicht dein Projekt ist,ist hier zu.
-
Die Tabelle sollte:
- ID ( PK,AI)
- Zeitstempel (date)
- Benutzername (varchar 24 oder 32)
- Text (varchar 128)Speichern:
Na mit einem INSERT pro /chat. Vorher solltest du aber unbedingt den Text escapen.
Das \n würde ich nicht mit in der Datenbank speichern. Wenn du weisst, dass jede Nachricht damit getrennt werden soll, solltest du das auch so programmieren. Sprich im Code beim Anzeigen hinter jede Nachricht ein \n einfügen.Auslesen:
Ein SELECT, jedoch angepasst auf einer Sortierung nach dem Zeitstempel (alternativ ID) und limitert auf X Beiträge. Dich interessieren bestimmt nicht alle Beiträge (daher limit) und auch nur die aktuellsten (daher Sortierung nach Zeitstempel oder ID jeweils absteigend) Chatnachrichten. -
Steht da doch: "Bootstrap's JavaScript requires jQuery bootstrap.min.js".
Du musst jQuery vor Bootstrap laden (script-tag) in deiner Anwendung. -
Für sowas kann man auch wunderbar das Scheduling von MySQL selber nutzen.
https://dev.mysql.com/doc/refman/5.7/en/event-scheduler.html
http://www.j-breuer.de/blog/pr…-mysql-7-event-scheduler/
Mit Google findest du da super Beispiele, wie du eines der o.g. SQL Kommandos ausführen kannst.Man hat dann jedoch (
so wie übrigens bei den zuvor genannten Lösung auch,Simon2202's Lösung nicht) das Problem, dass die Statistik nur in der DB geändert wird. Befindet sich der Spieler zu dem Zeitpunkt auf dem Server, bringt das ganze nichts.//Edit: Link angepasst und Text angepasst. Besser :] ?
-
Keine gute Praxis nur weil es noch nicht so ist.
format(query,sizeof(query),"%s Owner='%s',",query,HouseInfo[h][h_owner]);
Da ist zB das Komma (,) am Ende des Strings falsch. -
Die Haus-ID mit dem Index gleich zu setzen ist keine gute Idee. Das wird zwar gerne als Lösung angeboten und von vielen Usern hier im Forum so gemacht, deswegen ist es aber noch lange nicht gut.
Ich würde die o.g. Änderung Jeffry wieder rückgängig machen und beim Speichern für die Spalte ID nicht h nehmen sondern die ID im h index.
format(query,sizeof(query),"%s WHERE id='%i'",query,HouseInfo[i][h_ID]);Wahrscheinlich passt es mit Index bzw Haus-ID an anderen Stellen in deinem Skript ebenfalls nicht. Du solltest aber lieber das korrigieren anstatt den Fehler weiter zu schleppen.
-
Hat nichts mit DINI oder MySQL zu tun. Die Fehler liegen in der Nutzung von return in der Schleife anstatt continue. In Zeile 10 und 16 muss das return durch continue ersetzt werden. Mit return beendest du die Funktion, mit continue den aktuellen Schleifendurchgang.
-
Wie du selbst sagt, nur ein Workaround und keine gute Lösung. Das ist eines der Beispiele, wo ein enum es deutlich erleichtert.
Code
Alles anzeigenenum e_VehicleAutos { VA_iModelID, VA_iKeineAhnung, VA_sKlasse[20], VA_iPreis } new VehicleAutos[][e_VehicleAutos] = { {400, 4, "Offroad", 10000}, {401, 2, "Standart", 10000}, {402, 2, "Sport", 10000}, {404, 4, "Kombi", 10000}, {405, 4, "Standart", 10000} };
Dann kannst du mit einer Schleife durch alle Einträge / Zeilen gehen und gezielt auf die einzelnen Attribute zugreifen.
So zum Beispiel VehicleAutos[2][VA_sKlasse] wäre "Sport".Bei deinem oben genanntem Beispiel wäre es dann:
CodePlayerTextDrawSetPreviewModel(playerid, Textdraw_VID[i][playerid], VehicleAutos[i][VA_iModelID]);
Finde gerade kein gutes deutsches Tutorial dazu, eventuell kommst du aber mit einem englischem klar.
http://forum.sa-mp.com/showthread.php?t=318307
http://wiki.sa-mp.com/wiki/Keywords:Initialisers#enumPS: Es heisst Standard
-
Die Abfrage ob $Benutzer_Name oder $code_post leer sind, sollte vor das SQL Kommando.
Die Eingabe des Benutzers filtern. Da findest du selbst hier im Forum genug Hinwese oder über Google.
MySQLi. Es gibt noch PDO, habe ich aber selbst noch nie verwendet. Daher kann ich dir dazu nichts sagen.
Zitatedit: hast du gesehen dass da die variable drin steht, also der eingegebene benutzername
//Edit:
Die form musst du auch noch schließen. Dann mach auch mal ein print_r($_POST) über Zeile 29. -
Die Abfrage ob $Benutzer_Name oder $code_post leer sind,solltest du auch NICHT in der Schleife machen. Überleg dir doch mal wie das SQL Kommando aussieht (Z.35), wenn $Benutzer_Name leer ist:
Du hast wahrscheinlich keinen Benutzer OHNE Namen (wäre zumindest besser ), hast somit 0 Ergebnisse. Die while-Bedingung (Z.37) wird daher NIE wahr und somit kommst du auch nie zu der Abfrage aus Z.39Edit:
Du bist mit dem o.g. Code übrigens sehr anfällig gegen SQL Injection. -
Kann ja nicht schaden auch mal irgendeinen Wert in $row abzulegen.
http://php.net/manual/de/function.mysql-fetch-row.php -
Lass dir mal bei der Funktion Register per print das SQL Kommando ausgeben und probiere das SQL Kommando manuell an der Datenbank aus.
Zusätzlich lass dir den Wert der hinter ADatenbank steckt ausgeben mit printf.
Die SQLite Datenbank kannst du zB mit folgendem Tool öffnen:
http://sqlitebrowser.org/ -
Download: gPM 1.3.2
ZitatChangelog:
* 1.3.2 :
* - gPM_GetNewMessages auf SQL Count umgeschrieben
* - Index out of bounce check für gPM_OnLogin
* - DB Funktionen auf Änderungen in SA-MP 0.3.7 angepasst
* - Debug Informationen entfernt bei DIALOG_PM_EINGANG_FILTER
* - Einige Dialoge auf DIALOG_STYLE_TABLIST umgestellt
* - Fehler behoben, der bei zu langen Texten trotz sizeof() bei db_get_field Variablen überschreibt
* - Fehler behoben, bei dem auf negativen Index zuzegriffen wird in *Filter DialogenAn der Installation hat sich nichts geändert. Das Skript benötigt jetzt eine Server Version von 0.3.7 oder höher.