Beiträge von Goldkiller

    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 beendet


    Eine 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



    Ein paar Screenshots, die die aktualisierten Dialoge zeigen. Im wesentlichen wurde die Titelzeile um Informationen ergänzt.

    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.

    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 :] ?

    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.



    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:

    Code
    PlayerTextDrawSetPreviewModel(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#enum


    PS: 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.


    Zitat

    edit: hast du gesehen dass da die variable drin steht, also der eingegebene benutzername


    Überleg dir doch mal wie das SQL Kommando aussieht (Z.35), wenn $Benutzer_Name leer ist:

    SQL
    SELECT * FROM User WHERE Benutzername = '' -- $Benutzer_Name ist leer!


    //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:

    SQL
    SELECT * FROM User WHERE Benutzername = ''


    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.39


    Edit:
    Du bist mit dem o.g. Code übrigens sehr anfällig gegen SQL Injection.

    Download: gPM 1.3.2


    An der Installation hat sich nichts geändert. Das Skript benötigt jetzt eine Server Version von 0.3.7 oder höher.