Beiträge von Goldkiller

    Habe mich oben wohl vertan,man kann doch nur 128 Zeichen in den den Dialoginput schreiben.War mir sicher,dass es mehr war. Wurde das vielleicht seit 0.3c wieder geändert?


    Habe mal eine Testversion hochgeladen, falls Jemand die neuen Funktionen testen möchte. Die Funktionen, den Posteingang / Postausgang nach Namen zu filtern habe ich allerdings vorerst gesperrt. Man kann jetzt 5 * 128 Zeichen als Nachrichten versenden, also Insgesamt 640 Zeichen. Die Datenbank im Download muss verwendet werden, da die alte damit nicht funktionieren wird. Zum einen ist der Tabelleneintrag Text größer als vorher, zum Anderen ist der Tabelleneintrag Status verändert worden.


    Testversion: gPM_Preview011 ( AMX + Datenbank )

    Das hast du wohl etwas falsch verstanden, oder ich hab es nicht deutlich genug geschrieben. Ich habe es bereits eingefügt, ja. Zusammen mit den Sachen wie im Post Gestern hab ich das erledigt. Wie du siehst,hab ich es aber noch nicht hochgeladen. Deswegen findest du es auch nicht. Möchte vorher noch Einiges einfügen / verbessern, bevor ich es neu hochlade.

    @Master18,
    Natürlich, wieso sollte es denn nicht möglich sein. Dazu müsstest du aber selber erstmal eine SQL Abfrage schreiben
    und ausführen lassen. Find die Idee aber gar nicht schlecht, vielleicht mach ich dazu noch etwas. Wäre eigentlich schnell umsetzbar, nur


    DurtyFree,
    Wieso denn unbedingt MySQL ? Im IRC haben wir vor paar Tagen noch darüber gequatscht,wieso viele Leute unbedingt
    MySQL wollen. Sehe aber ehrlich gesagt keine Schwierigkeit darin,es auf irgendein MySQL Plugin umzuschreiben.
    Die Funktionsnamen sind mehr oder weniger identisch,die SQL Abfragen ebenfalls.



    Hab noch einige Sachen verbessert / hinzugefügt.
    Es werden jetzt alle Nachricht im Posteingang und Postausgang angezeigt.Werden weiterhin
    nach Aktualität sortiert. Man kann dabei durch Seiten blättern, um sich alle Nachrichten anzeigen zu lassen ( Siehe Bilder ).
    Pro Seite werden 20 Nachrichten angezeigt ( Lässt sich leicht ändern ).
    Man kann jetzt in der Theorie auch Nachrichten in unbegrenzter Länge versenden.
    Zur Zeit hab ich es auf 4 * 196 , also 784 Zeichen beschränkt ( Ebenfalls leicht änderbar ). Denke
    mehr sollte und wird wohl kaum eine Nachricht haben , ist aber theoretisch unbegrenzt. Man wird aber irgendwann
    wohl dennoch an Grenzen stoßen ( Limit der Query länge ? Limit an Zeichen für ShowDialog ? )
    Über die User Übersicht kann man auch direkt in eine User Verarbeitung übergehen, wodurch man direkt an
    den User eine Nachricht senden kann, aber auch alle Nachrichten Eingänge bzw Ausgänge mit diesem User verfolgen kann.


    Genug geschrieben, hier zwei Bilder:


    Ist natürlich möglich.Wieso sollte es auch nicht gehen :P ?


    Du musst einen Speicher anlegen für jeden Spieler, wieviele eigene Streams er anlegen kann.Sind dann natürlich Strings/Arrays.Angenommen du willst 10 eigene Streams erlauben:
    new g_sPlaylist[ MAX_PLAYERS ][ 10 ][ 64 ];


    Bei der Inputverarbeitung kannst du prüfen, ob ein String noch leer ist. Eine Variable die immer um 1 erhöht wird,ist wahrscheinlich leichter für dich.
    new g_iPlaylist[ MAX_PLAYERS ];
    // Bei der input Verarbeitung
    g_sPlaylist[ playerid ][ g_iPlaylist[ playerid ]++ ] = input; // nimm strcat oder auch format hier


    Wenn die individuelle Playlist geöffnet wird, eine Schleife durch alle g_sPlaylist[ playerid ][ ] ( 0 bis g_iPlaylist[ playerid ] ) Einträge und daraus eine Liste erstellen.
    Beim klick in der Liste kannst du per listitem direkt ablesen, welcher Link letztendlich geklickt wurde und diesen Stream öffnen.

    Überleg doch einfach was für Funktionen du brauchst bzw den Ablauf:



    • Variable ob zur Zeit /ORTEN benutzt wird
    • Variable, wen der Spieler per /ORTEN sucht ( Kann man auch auf eine beschrenken pro Spieler für ob /ORTEN benutzt und wen )
    • Eingabe des Spielers in eine SpielerID ableiten
    • GetPlayerPos von SpielerID der geortet werden soll
    • SetPlayerCheckpoint an die Position setzen
      ** In einen Timer einfügen


    • Bei Abbruch Variablen zurücksetzen
    • DisablePlayerCheckpoint


    Zitat

    aber der Checkpoint soll immer an der gleichen Stelle bleiben auch wenn der Spieler sich bewegt also z. B. :
    Der Verbrecher bewegt sich und der Marker geht mit ihm,
    also das der Marker und der Verbrecher sozusagen an einander geklebt sind.
    Und wenn man /ortenabbrechen macht das dann der Marker verschwindet.


    Da ist eindeutig in widerspruch drin.

    Das mit dem Zeichenlimit habe ich mir auch schon überlegt. Mir ist aber keine einfache Lösung für den Benutzer eingefallen, um das Zeichenlimit von 196 zu überbrücken. Vielleicht fällt da Jemanden ja noch eine Gute Idee zu ein.


    Die Userliste wird bereits gefiltert. Hatte dazu auch ein Bild im ersten Post:
    http://s7.directupload.net/file/u/13285/asxr9zpy_png.htm
    Dort wird als Filter "killer" benutzt. Der Titel des Dialoges ist wohl nicht so gut gewählt, hätte man dazu schreiben können.


    Mal das Query beim Filtern dazu:
    format( g_sQuery , sizeof( g_sQuery ) , "SELECT * FROM `USER` WHERE `Name` LIKE '%%%s%%' ORDER BY `Name` ASC" , username_filter );
    Im Bild ist nicht Aufsteigend sortiert sondern Absteigend


    Füg mal das Filterscript an erster Stelle bei filterscripts in der server.cfg ein. Ich bezweifel nämlich, dass sich die DIALOGID's überschneiden. Kannst ja zum testen auch mal alle Anderen Filterscript entfernen und einen einfachen Gamemode laden ( wie z.B. lvdm ).


    Wie geht das Skript mit sehr langen Nachrichten bzw Titeln um ?
    Und in der Userübersicht, wer wird da alles aufgelistet ?


    Sehr lange Nachrichten, der Input der Dialoge geht nur bis 196 Zeichen. Damit gibt es keine Probleme. Die Titel enthalten keinen Text aus den Nachrichten.
    In der Userübersicht werden die Spieler aufgelistet, die die Datenbank kennt. Sprich, alle Spieler, die schon mal auf dem Server waren.

    Das wird dir Ingame beim ersten betreten angezeigt, habs aber nochmal oben dazugeschrieben.


    Zitat

    - Mit dem Befehl /gpm öffnet ihr Ingame das Menu.


    //Edit:
    Neue Version hochgeladen. Habe bemerkt,dass die Strings zu klein sind für den Posteingang und Postausgang. Falls es wer schon benutzt, bitte die neue Version verwenden.

    Hab es in den ersten Post mal hinzugefügt, dachte eigentlich es ist selbsterklärend.


    Zitat

    Installation:
    - gPM_FS.AMX in den filterscripts Ordner einfügen
    - gPM_FS in die filterscript - Zeile eurer server.cfg eintragn
    - gPM.s3db aus dem Archiv ( scriptfiles/ ) in euren scriptfiles/ Ordner einfügen. Es entählt die Tabellen und Spalten die notwendig für das Script sind. Die Tabellen werden nämlich nicht automatisch angelegt. ( Wichtig )

    gPM Nachrichtenverwaltung


    gPM ist ein kleines Script um Textnachrichten Ingame zu verwalten.
    In einem Dialoggesteuertem Menu, lassen sich die Funktionen Posteingang,Postausgang,Neue Nachricht und
    User Übericht auswählen.
    Im Posteingang und Postausgang werden euch Nachrichten nach ihrer Aktualität sortiert angezeigt.Dabei
    wird auf den ersten Blick sichtbar, ob die Nachricht bereits gelesen wurde oder nicht. Um den Dialog bei langen Nachrichten
    nicht in die Breite zu ziehen, werden die Nachrichten automatisch formatiert falls nötig.
    Ihr könnt durch alle eure Nachrichten im Posteingang blättern, pro Seite werden euch dabei 20 Nachrichten angezeigt.Wird eine Nachricht
    nicht mehr benötigt,lässt sie sich löschen.


    Mit der Funktion Neue Nachricht, könnt ihr Textnachrichten an eure Mitspieler versenden. Ob sie Online sind oder nicht,
    ist dabei egal. Sind die Spieler online, erhalten sie direkt eine Benachrichtung über eine eingegangene Nachricht.
    Sind die Spieler offline, so werden sie benachrichtig, sobald sie wieder den Server betreten.
    Ein Highlight ist die Möglichkeit, Textnachrichten in extremer länge zu versenden.Ihr könnt bis zu 768 Zeichen pro
    Nachricht an eure Mitspieler versenden. Wie das geht,seht ihr bei den Bilder untern den 1.1 Features.
    Die User Übericht gibt euch die Möglichkeit, nach Spielern zu suchen. Wisst ihr nicht den exakten Spielernamen
    eines Mitspielers, so könnt ihr euch hier eine Liste über alle Spieler nach einem Kriterium anzeigen lassen.
    Habt ihr den Spieler gefunden,geht es in die direkte User Verarbeitung. Hier könnt ihr direkt
    in eine Neue Nachricht übergehen, oder aber auch euren Posteingang und Postausgang im Zusammenhang
    mit diesem Spieler anzeigen lassen.


    Das Script verwendet SQLite, was in SA:MP bereits integriert ist. Es werden also keine zusätzlichen Plugins benötigt.
    Es ist nur ein kleines Projekt,um SQLite bzw SQL mal auszuprobieren in einer Umgebung, wo sich die Ergebnisse schnell darstellen lassen.
    Ich werde es noch erweitern, dass ist nur eine kleine Vorab-Version, die Jeder haben kann. Die wichtigsten Funktionen sind dabei schon enthalten.
    Wichtig ist noch die Anmerkung, dass es keinen Schutz gibt.Bedeutet, die Anmeldung erfolgt automatisch durch den Usernamen,
    es gibt keine Passwortkontrolle, bevor ihr in die Nachrichtenübersicht geht. Daher solltet ihr es am besten
    mit einem bereits vorhandenem Usersystem verwenden.



    Bilder:
    V 1.3.3


    V 1.3

    V 1.1


    V 1.0





    Quellcode ( pastebin ):
    pastebin gPM 1.3.3
    Aktuelle Version:


    Alte Version


    pastebin gPM 1.3.2
    pastebin gPM 1.3.1
    pastebin gPM 1.3
    pastebin gPM 1.2
    pastebin gPM 1.1
    pastebin gPM 1.0.1
    pastebin gPM 1.0



    Download:


    Aktuelle Version (1.3.3):
    gPM 1.3.3 (Benötigt SA:MP Version 0.3.7 >= )


    Alte Version, 1.3
    gPM 1.3.2
    gPM 1.3.1
    gPM 1.3
    Alte Version, 1.2
    gPM 1.2
    Alte Version, 1.1 ***
    gPM11.zip - 0.04MB
    http://www.file-upload.net/download-4021262/gPM11.zip.html


    Alte Version, 1.0
    http://www.file-upload.net/download-3963681/gPM.zip.html
    http://www.file-upload.net/download-3963144/gPM.zip.html



    Installation

    • gPM_FS.AMX in den filterscripts Ordner einfügen
    • gPM_FS in die filterscript - Zeile eurer server.cfg eintragen
    • Um die Postfächer mit einem Userprofil zu verknüpfen,muss die Funktion gPM_OnLogin per CallRemoteFunction aufgerufen werden:


      CallRemoteFunction( "gPM_OnLogin" , "d" , playerid );

      Am besten wird dieser Funktionaufruf durchgeführt, nachdem sich ein Spieler bei euch einloggt.
      Prinzipiell kann dieser Aufruf aber überall durchgeführt werden. Dieser gibt gPM das Zeichen, dass das Postfach
      für den Benutzer freigeschaltet wird.
      Diese Funktion MUSS aufgerufen werden, sonst klappt das Öffnen des Postfaches mit /gpm nicht.

    • Mit dem Befehl /gpm öffnet ihr Ingame das Menu.
      ACHTUNG:
      * gPM: Du wurdest mit dem Usernamen '<Dein Name>' nicht zertifiziert!

      - Kommt dieser Hinweis, wurde Punkt (5) nicht beachtet.







    *** - Achtung, die Datenbank von Version 1.1 ist nicht kompatibel zu der Datenbank von Version 1.0


    Viel Spaß damit, Goldkiller


    //Edit:

    Spoiler anzeigen

    Änderungen bzgl Release Version 1.3.3
    Links auf Version 1.3.2 aktualisiert
    Pastebin zur Version 1.3.1 aktualisiert
    Update zur Version 1.3.1 hinzugefügt
    Falscher Link bei gPM 1.3
    Links aktualisiert auf gPM 1.2
    Links aktualisiert;
    Installations hinzugefügt;
    Formatierung;
    Text hinzugefügt;
    Link Updates;
    Update auf 1.1;
    Ergänzung;
    Dateianhang ausgetauscht;
    Neuer file-upload Link;
    zshare link hinzugefügt;
    Neue Downloadlinks ( Fehler behoben );
    Update für Version 1.3
    Zusätzlicher Hinweis für Installation

    Dann musst du den Timer auf eine Minute stellen.Hier mal eine grobe Übersicht,wie man es machen könnte.



    //Beim einsperren
    JailTime[ playerid ] = 6;



    public Entsperren() {
    // Schleife durch alle Spieler
    JailTime[i]--;
    if( JailTime[i] == 0 ) { } // usw.
    return 1;
    }

    Kommt darauf an, was du benutzt.
    Mit SQL könntest du einfach eine Spalte in einer Tabelle per AUTO_INCREMENT erhöhen, sodass jeder Spieler eine eigene ID bekommt.
    Verwendest du es nicht, müsstest du irgendwo in einer Datei ablegen, was zur Zeit die höchste ID ist "HIGHEST_ID" ( Beim Scriptstart auslesen, beim Scriptschließen abspeichern ). Wird ein neuer Spieler angelegt, erhöhst du den Wert der "HIGHEST_ID" um 1 und gibst diese ID dem Spieler. Abspeichern kannst du diese ID / Zahl dann im Benutzerprofil oder auch in einer Textdatei, die alle Username = ID festlegt.


    //Edit:
    Diese ID ist natürlich nicht gleichzusetzen, mit der "playerid", die automatisch vom Server zugewiesen wird,

    So viele Posts und doch so oft falsch :/.


    else if(skinID == cskin[12]) // Error Zeile
    Das würde nur prüfen, ob der Skin in Index 12 die eingetragene SkinID ist. Du musst eine Schleife benutzen, um alle Einträge von cskin durchzugehen. Eine Funktion wäre dafür wohl am einfachsten zu benutzen:


    stock IsPoliceSkin( skinid ) {
    new cskin[]={
    285,
    280,
    281,
    282,
    283,
    288,
    284,
    165,
    286,
    287,
    63,
    164
    };
    for(new i = 0 ; i < sizeof( cskin ) ; i++) {
    if( cskin[i] == skinid ) return 1;
    }
    return 0;
    }