[Scriptwunsch umgesetzt] Icon wird gelb wenn es eine Chatnachricht gibt

  • Hallo,


    ich weiss nicht ob das möglich ist, aber ich habe auch nirgendswo gelesen, das es nicht möglich ist.


    Auf dem Handy hat man am unterem Rand 5 Icons. Karte, Gebäude,... und den Chat. Jetzt zu meinem Wunsch: Wenn es eine neue Nachricht im Chat gibt, soll das Chat-Icon andersfarbig werden. Welche Farbe ist mir dabei egal.


    Spieler222

    Mein Verband: Norddeutschland - MV

  • Button einfärben bekomme ich gerade nicht hin, da das kein Richtiger Button ist. Aber Text einfärben und 3 Ausrufezeichen dahinter setzen geht.

    Darum einfach zum Installieren hier klicken


    Technische Erklärung: Das Script schreibt, wenn der Chat geöffnet wird den Zeitstemper der letzten Empfangenen Nachricht in den LocalStorage. Alle 10 Sekunden vergleich das Script dann den Wert im Speicher, mit der letzten empfangenen Nachricht. Sollte dieser Wert nicht gleich sein, wird der Text im Button "Chat" grün eingefärbt, Fett gemacht und 3 Ausrufezeichen dahinter gesetzt (Satzzeichen sind keine Rudeltiere, aber sie treffen sich ab und zu zum Skat Spielen).


    Für verwunderte Scripter: Mit einem Observer habe ich es gerade nicht hinbekommen, darum die Lösung mit Nutzung des LS. ;)

    Mecker nicht Rum, mach's besser! Kannst du nicht? Dann halt den Ball flach!8o


    Mein Verband "Sachsen, Dresden und Osterzgebirge"

    "Und Du wünschst dieser Welt

    Dass endlich Hirn vom Himmel fällt

    Es wär' schön, wenn sie verstehen

    Zum Homosapiens gehört nicht nur aufrecht gehen"

    Einmal editiert, zuletzt von Sobol ()

  • Technische Erklärung: Das Script schreibt, wenn der Chat geöffnet wird den Zeitstemper der letzten Empfangenen Nachricht in den LocalStorage. Alle 10 Sekunden vergleich das Script dann den Wert im Speicher, mit der letzten empfangenen Nachricht. Sollte dieser Wert nicht gleich sein, wird der Text im Button "Chat" grün eingefärbt, Fett gemacht und 3 Ausrufezeichen dahinter gesetzt.


    Für verwunderte Scripter: Mit einem Observer habe ich es gerade nicht hinbekommen, darum die Lösung mit Nutzung des LS. ;)

    Na dann möchte ich dich hiermit in eine Technik, die weder Observer, noch Polling (Alle Zeiteinheit X nachschauen) verwendet, einweihen:

    Wir haken uns einfach in die Spielinterne Funktion ein!


    Unter https://raw.githubusercontent.…SSD/master/application.js findest du immer die aktuellste JS-Datei des Spiels (application-[alphanumerischer String].js), aber einmal durch einen Beautifier gehauen, damit mans ein bisschen besser lesen kann.

    Dort findet sich die schöne Funktion allianceChat. Diese wird immer aufgerufen, wenn eine Chatnachricht reinkommt. Es gab mal das Projekt "Type-Definitions", welches die Parameter der Funktionen entschlüsselt und erklärt. Das ist leider aufgrund von Zeit und Motivation eingeschlafen, aber für den Chat haben wir das schon mal gemacht: https://github.com/LSS-Manager…plication/types/chat.d.ts (Müsste glaub ich sogar aktuell sein, aber keine Garantie. Wenn dann, hat sich nicht viel geändert).


    Nun zum eigentlichen Teil: Howto einhak in a Spielinterne Funktion 8)

    1. Die eigentliche Funktion "kopieren"

    2. Die eigentliche Funktion neu definieren und darin die Kopie aufrufen.


    Prinzipiell funktioniert das dann wie folgt:

    JavaScript
    const allianceChatOrig = window.allianceChat; // Funktion kopieren. Orig steht für "original"
    window.allianceChat = param => {
        const result = allianceChatOrig(param);
        
        // hier eigene lustige Dinge tun
        return result;
    }

    Das returnen des results ist nicht zwingend notwendig, aber soll zeigen, dass es manchmal ggf. notwendig sein könnte. Das Format param => {} oder (param) => {} ist eine sog. "Arrow-Function", quasi eine neuere Schreibweise von Funktionen. Es gibt kleinere Unterschiede zu normalen Funktionen, wenn man this verwenden möchte, aber das ist hier selten der Fall. Weitere Infos über Arrow-Functions gibts unter https://developer.mozilla.org/…Functions/Arrow_functions.


    CAVE: ggf. kommt es bei Scripts zu Problemen bei der Nutzung von window, in dem Fall muss auf unsafeWindow zurückgegriffen werden: https://www.tampermonkey.net/d…ext=dhdg#api:unsafeWindow


    Genug gequatscht, hier noch eine allgemeinere Form, wenn du es nicht weißt oder nicht wissen willst, wie viele Parameter die Original-Funktion bekommt (sorg für eine potentiell längere Kompatibilität des Scripts, da eine spielseitige Änderung der Parameterzahl keinen Einfluss hat), dann kannst du dir die Spread-Syntax (...) zu nutze machen:

    JavaScript
    const allianceChatOrig = window.allianceChat; // Funktion kopieren. Orig steht für "original"
    window.allianceChat = (...args) => {
    const result = allianceChatOrig(...args);
    // hier eigene lustige Dinge tun
    return result;
    }

    In Zeile 2 heißt ...args einfach "Speichere die restlichen Parameter in einem Array namens args, wobei jeder Parameter ein Element der Liste ist."

    In Zeile 3 wird das dann andersrum gemacht: "Verwende jedes Element im Array args als einen Parameter beim Aufrufen der Funktion".


    Das wars auch mit der kleinen Scripting-Stunde bzgl. effizienteren Methoden, ich hoffe es hilft langfristig weiter :)



    Bezüglich der Knopf-Farbe möchte ich dir auch noch einen kleinen Tipp mit auf den Weg geben:

    Das Spiel nutzt Bootstrap 3.3, das heißt du kannst die Klassen davon verwenden. Die Doku dazu findest du unter https://getbootstrap.com/docs/3.3/. Dort gibt es unter anderem Klassen für Knopf-Farben. Wenn du einem Knopf zusätzlich die Klasse btn-warning gibst, wird er gelb, bei btn-danger rot. Vorsicht: Andere Farb-Klassen sollten entfernt werden, dazu zählt auch btn-default. :)

  • Na dann möchte ich dich hiermit in eine Technik, die weder Observer, noch Polling (Alle Zeiteinheit X nachschauen) verwendet, einweihen:

    Wir haken uns einfach in die Spielinterne Funktion ein!

    [...]

    Das wars auch mit der kleinen Scripting-Stunde bzgl. effizienteren Methoden, ich hoffe es hilft langfristig weiter :)

    Uff, da hast du mir ja wieder was zum lesen und probieren gegeben. ;) Dankeschön. :* Da muss ich mich später mal ausführlich mit befassen. Beim ersten drüberfliegen muss ich feststellen: Schick, damit hätte ich einiges vereinfachen können. Aber egal. ;)


    Das Spiel nutzt Bootstrap 3.3, das heißt du kannst die Klassen davon verwenden. Die Doku dazu findest du unter https://getbootstrap.com/docs/3.3/. Dort gibt es unter anderem Klassen für Knopf-Farben. Wenn du einem Knopf zusätzlich die Klasse btn-warning gibst, wird er gelb, bei btn-danger rot. Vorsicht: Andere Farb-Klassen sollten entfernt werden, dazu zählt auch btn-default.

    Aha! Ich wusste doch, dass ich nur was nicht weis. :D Wieder was gelernt. Wobei mir persönlich die lösung mit Textfarbe und ausrufezeichen tatächlich besser gefällt. Ist so schon alles verdammt bunt. =O Aber für die Zukunft... :*

    Mecker nicht Rum, mach's besser! Kannst du nicht? Dann halt den Ball flach!8o


    Mein Verband "Sachsen, Dresden und Osterzgebirge"

    "Und Du wünschst dieser Welt

    Dass endlich Hirn vom Himmel fällt

    Es wär' schön, wenn sie verstehen

    Zum Homosapiens gehört nicht nur aufrecht gehen"

  • Danke Sobol,


    für dein Script :)

    Mein Verband: Norddeutschland - MV

  • Also muss ich wenn ich ins Spiel gehe erstmal in den Chat gehen, und wenn ich dann auf die Karte zurückgehe und eine Nachricht geschrieben wird, dann wird es erst so angezeigt?

    Mein Verband: Norddeutschland - MV

  • Also muss ich wenn ich ins Spiel gehe erstmal in den Chat gehen, und wenn ich dann auf die Karte zurückgehe und eine Nachricht geschrieben wird, dann wird es erst so angezeigt?

    Nö. Eigentlich sollte die Überwachung starten, ohne dass du den Chat aufrufst. Der Wert fliegt aus dem LS nicht raus. Es dauert halt mindestens 10 Sekunden, bis das Script zum ersten Mal überprüft.

    Mecker nicht Rum, mach's besser! Kannst du nicht? Dann halt den Ball flach!8o


    Mein Verband "Sachsen, Dresden und Osterzgebirge"

    "Und Du wünschst dieser Welt

    Dass endlich Hirn vom Himmel fällt

    Es wär' schön, wenn sie verstehen

    Zum Homosapiens gehört nicht nur aufrecht gehen"

  • Nö. Eigentlich sollte die Überwachung starten, ohne dass du den Chat aufrufst. Der Wert fliegt aus dem LS nicht raus. Es dauert halt mindestens 10 Sekunden, bis das Script zum ersten Mal überprüft.

    Denn kann es sein, dass ich zu schnell auf den Chat geklickt habe als ich LSS geöffnet habe.

    Mein Verband: Norddeutschland - MV

  • Spieler222

    Hat den Titel des Themas von „[Scriptwunsch] Icon wird gelb wenn es eine Chatnachricht gibt“ zu „[Scriptwunsch umgesetzt] Icon wird gelb wenn es eine Chatnachricht gibt“ geändert.