dMessage - Simple Funktion - Server Messages

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hallo Leute!


    Es gibt Leute die viele Ingame-Messages mit unendlich vielen "SendClientMessage" senden.
    Ich hab Heute wieder mit Pawn angefangen und muss sagen nachdem ich C++ erlernt hab das Pawn eine sehr sehr einfache Script-Sprache ist.
    Nun hab ich gleich versucht Funktionen zu Strukturieren und viele Sachen die auch in C++ möglich sind umgesetzt.
    Es gibt halt viele Leute in der SA-MP Scene die zwar gut Scripten können aber bei denen es an mehr wissen fehlt was man an den Source's mitbekommt.
    Da es halt auch Leute gibt denen, ich nenne es mal "Objekt Orientiert", total nicht Interessiert.


    Hier eine kleine Funktion die es ermöglicht eine Server-Nachricht ohne z.B immer ein Prefix zu schreiben sendet.
    Man kann sie Dynamisch verwenden und auch einfach ausbauen, die Funktion ist auch gut für Anfänger, um draus zu Lernen.


    forward ServerMessage(const message[], select);
    public ServerMessage(const message[], select)
    {
    new Temp[144];
    switch(select)
    {
    case 0:
    {
    strins(Temp, "{FF4644}SERVER:{FFFFFF} ", 0);
    }
    case 1:
    {
    strins(Temp, "{FFFF00}WARNING:{FFFFFF} ", 0);
    }
    case 2:
    {
    strins(Temp, "{9DFF00}INFORMATION:{FFFFFF} ", 0);
    }
    default:
    {
    strins(Temp, "{FFFFFF}Default:{FFFFFF} ", 0);
    }
    }


    strcat(Temp, message);

    return SendClientMessageToAll(-1, Temp);
    }


    Anwenden kann man die Funktion ganz einfach.


    ServerMessage(message[], select);


    //Example
    ServerMessage("{FF0000}Meine Nachricht ist nun Rot!, 2); //Information



    Danke fürs lesen!

    3 Mal editiert, zuletzt von L3uX ()

  • 0/10, dafür gibt es auch schon SendClientMessageToAll, das ist keine Funktion, sondern nur eine Kopie mit 4 Änderungen.


    Sollte keine Bewertung sein.
    Mir fehlt es an Verstand ob Leute auch den Text über den Source lesen.


    Eigentlich ist es nur eine kleine Hilfestellung.


    SCMTA("SERVER: I'm gay!");
    und der Code hilft z.B damit das man nicht immer "SERVER" schreiben muss...
    SM(I'm gay!, 0);



    //Edit:
    Sorry, aber mit deinem Donator-Status bist du auch nix.

  • Ich hab Heute wieder mit Pawn angefangen und muss sagen nachdem ich C++ erlernt hab das Pawn eine sehr sehr einfache Script-Sprache ist.


    Das ist ja schoön und gut, aber gut Coden hast du dabei nicht wirklich gelernt.


    1. Warum ist Temp 256 groß?
    Du brauchst nicht mal ansatzweise soviele Zeichen


    2. Warum ist Server 512 groß?
    SendClientMessage kann höchstens 144 Zeichen fassen, nehmen wir die Farben dazu kommen wir auf 154 (144 + 10)
    Farben werden nicht als Zeichen gezählt müssen aber im Format mit angegeben werden.+


    3. Warum benutzt du 2x format?
    Einmal reicht vollkommen aus Dann braucht man auch nur ein String


    4. Man kann auch die Farbe als Variable setzen und sie dann in SendClientMessage(ToAll) benutzen, spart definitv Zeichen

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski


  • Zu 1 / 2:
    http://wiki.sa-mp.com/wiki/Limits
    Hab mich mit den größen von den SAMP nicht beschäftigt.
    Für mich war z.B 256-Bytes immer eine Standart größe in C++.


    Zu 3:
    Klar könnte man einen format verwenden, jedoch seh ich kein Problem auch 2 zu verwenden.
    Wenn du es magst eine format zu verwenden dann hab Spaß dabei.


    Zu 4:
    Kann man, tu ich aber nicht oder? :)



    //Edit:
    Nachgeschaut wegen der größe der Strings.
    const message[] Die Nachricht, die gesendet werden soll. Maximale Zeichenanzahl: 144


    Right, kriegstn Daumen.


  • Für mich war z.B 256-Bytes immer eine Standart größe.


    Du nutzt in PAWN aber keine Bytes pro Array, sondern 4 Bytes.
    Das ist schon ein recht großer Unterschied :P


    Wenn man bei 256 auch 256 Bytes nutzen möchte, muss man den Array in einen char-Array verwandeln.
    Macht auf der lokalen Ebene aber keinen Sinn :D

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski


  • Du nutzt in PAWN aber keine Bytes pro Array, sondern 4 Bytes.
    Das ist schon ein recht großer Unterschied :P


    Wenn man bei 256 auch 256 Bytes nutzen möchte, muss man den Array in einen char-Array verwandeln.
    Macht auf der lokalen Ebene aber keinen Sinn :D


    Danke, wird gemerkt!
    Wusste doch das noch was gutes bei dir Rauskommt. :D

  • Zusätzlich wäre noch zu ergänzen das es auch strcat gibt oder memcpy für längere strings ist wesentlich schneller als format
    genau wie deine zwei deklarierten strings da reicht auch einer bzw keiner da dies auch möglich ist


    format (message, sizeof (message),"blbla %s", message);


    ich glaub du unterschätzt Pawn ein wenig es kann durchaus auch komplex sein.

  • Zusätzlich wäre noch zu ergänzen das es auch strcat gibt oder memcpy für längere strings ist wesentlich schneller als format
    genau wie deine zwei deklarierten strings da reicht auch einer bzw keiner da dies auch möglich ist


    format (message, sizeof (message),"blbla %s", message);


    ich glaub du unterschätzt Pawn ein wenig es kann durchaus auch komplex sein.


    Unterschätzen mag sein, jedoch find ich es mit mit String übersichtlicher.
    Jedoch müsste ich bei strcat trozdem die Strings zusammen Formatieren.


    Weil,
    string = Hello!
    strcat(string, " Wello!")
    Hello World!


    soweit ich weiß ist es nicht möglich einen Definierten string einfach so eine Leertaste reinzuhauen.
    Also muss man trozdem ein Format benutzen.

  • Ist eine kleine Sache, aber trotzdem hast du etwas großes für mitsicherheit einen getan. :love:
    Ansonsten sind die Funktionen ok, gut gemacht.

  • Das auch noch die guten unter euch glücklich sind.


    public ServerMessage(const message[], select)
    {
    new Temp[144];
    switch(select)
    {
    case 0:
    {
    strins(Temp, "{FF4644}SERVER:{FFFFFF} ", 0);
    }
    case 1:
    {
    strins(Temp, "{FFFF00}WARNING:{FFFFFF} ", 0);
    }
    case 2:
    {
    strins(Temp, "{9DFF00}INFORMATION:{FFFFFF} ", 0);
    }
    default:
    {
    strins(Temp, "{FFFFFF}Default:{FFFFFF} ", 0);
    }
    }


    strcat(Temp, message);

    return SendClientMessageToAll(-1, Temp);
    }