Neueste Beiträge

Seiten: [1] 2 3 ... 10
1
Anregungen und Vorschläge / Antw:Sammelthread Forschungen
« Letzter Beitrag von MadianOvidas am 17. Februar 2018, 18:37:20 »
@mobby denke aktuell sind die meisten noch mit der Phasenforschung beschäftigt, aber allgemein mal wieder ein großes Forschungsupdate wäre super :)
2
Anregungen und Vorschläge / Beschäfftigt-Anzeige
« Letzter Beitrag von Melismor am 16. Februar 2018, 20:55:40 »
Hallo,
ich fände es gut, wenn in der Beschäftigt-Meldung drinne steht womit man beschäftigt ist.
Was denkt ihr dazu, bzw. ist das technisch möglich?
Gruß Melismor
3
Anregungen und Vorschläge / Antw:Sammelthread Forschungen
« Letzter Beitrag von Mobby am 16. Februar 2018, 17:45:43 »
Könnte Xeri hier mal bitte Feedback geben, ob was in die Richtung neuer Forschungen geplant und/oder in Arbeit ist? Ideen gibt es ja reichlich. Auch die Qualität dieser ist gut. Meine eigenen sind nur lose, aber auch ich würde mir mehr Gedanken machen, wenn ich weiß, dass auch was kommen wird ;-)

Gibt sicher einige, die schon ein ganze Weile nichts mehr für die persönliche Forschung haben. Bei mir ist nichts mehr offen, was gehen würde.

Wenn ich einen Wunsch äußern dürfte, wprde dieser in Richtung Forschung für Gruka gehen :-)
4
Anregungen und Vorschläge / Antw:Manasäule und Massive Manasäule + Funkenfänger
« Letzter Beitrag von MadianOvidas am 16. Februar 2018, 11:28:20 »
evlt. noch eine Spiegelplatte bei der normalen und eine Fokuskugel gegen ein Spiegelplatte tauschen bei der Massiven. Finde Spiegel passen ganz gut um das einfangen zu symbolisieren (Licht und so).
5
Fehlermeldungen / Antw:wissenschaftliche Ausbildung
« Letzter Beitrag von Orge am 15. Februar 2018, 12:37:39 »
*push*
bis jetzt ist die Situation immer noch die gleiche, die Beschreibung des Bonus' der wissenschaftlichen Ausbildung stimmt nicht mit den tatsächlichen Auswirkungen überein.
6
Das Schwarze Brett / Das Gildenmonster
« Letzter Beitrag von Randjir am 08. Februar 2018, 10:22:20 »
Das Gildenmonster

Die Sonne versank langsam am Horizont und färbte den Himmel in leuchtendes Orange. Er hatte keine Eile. Vor Einbruch der Dunkelheit würde er das Gildenhaus erreichen, womit er einer der ersten sein würde, die sich dort heute Abend zum Gildenmob trafen. Es war sein erster, und bisher wusste er nicht viel über den Ablauf. Ein Monster würde beschworen werden, nur um es anschliessend zu bekämpfen und in seine Dimension zurückzuschicken, was ihm etwas sinnlos erschien. Aber das war auch schon alles, was er wusste. Deswegen wollte er frühzeitig dort sein, um noch einige Informationen zu sammeln, damit er sich nachher nicht blamierte.
Er bog um eine Ecke und näherte sich nun seinem Ziel. Von weitem leuchteten ihm Vanderons Augen entgegen – inzwischen hatte er sich daran gewöhnt, dass sie ihm hier auf jeden Tritt folgten, aber es war ihm immer noch schleierhaft, wie dieser Effekt hervorgerufen wurde. Wie schon bei seinen letzten Besuchen blieb er kurz vor der überdimensionierten Tür stehen und betrachtete sie eingehend, konnte aber nicht erkennen, welchen Kniff der Künstler angewandt hatte, um den Augen diesen weitreichenden, wandernden Blick zu geben.
Nachdem er seinen Blick von dem Vanderons losgerissen hatte, trat er auf die Tür zu, die sich wie von Zauberhand öffnete und ihm Eintritt gewährte. Im schlecht beleuchteten Eingangsbereich erkannte er drei Stäbe an der Wand lehnen. Also war sein Plan aufgegangen, und er war einer der ersten Kämpfer. Der frühe Vogel fängt den Wurm… Zufrieden stellte auch er seinen Stab ab, und während sich die Eingangstür hinter ihm immer noch geräuschvoll schloss, strebte er der grossen Halle entgegen. Irgendetwas stimmte nicht. Irritiert näherte er sich dem Lichtschein. Erst als er über die Schwelle trat und sah, wer sich hier bereits versammelt hatte, erkannte er seinen Fehler: Rund um den grossen Gildentisch standen in kleinen Gruppen verteilt an die 20 Magier und unterhielten sich angeregt. Dieses an sein Ohr getragene Murmeln war es gewesen, was sein Unterbewusstsein hatte stutzen lassen. Dass er anscheinend eher zu spät als zu früh eingetroffen war, störte ihn in dem Moment nicht, aber er hatte seinen Stab nicht bei sich, und wie sollte man ein Monster ohne Waffe bekämpfen? Randjir, der auf einen Blick als blutiger Anfänger zu erkennen ist… Hastig machte er auf der Stelle kehrt, um seinen Fehler zu korrigieren.
Frisch bewaffnet kehrte er zurück und suchte die Versammlung nach bekannten Gesichtern ab. In den letzten Tagen war er einigen weiteren Gildenmitgliedern begegnet oder vorgestellt worden, erkannte aber auf Anhieb keinen von ihnen. Marcus sass auf seinem Stammplatz und hob gerade seinen riesigen Weinpokal an die Lippen, war somit augenscheinlich wach und noch nicht am Ende seiner täglichen Weinprobe angelangt. Mantai stand umringt von einer Gruppe Magier und sprach eindringlich in die Runde. Und etwas abseits erblickte er Klara und Grünbart. Er entschied sich für diese zwei, da er immer noch keinen blassen Schimmer hatte, was in der folgenden Stunde passieren würde, und da er sich von Klara die besten Informationen erwartete. Er liess seinen Blick noch einmal über die Versammelten schweifen und erstarrte mitten in der Bewegung. Ganz Elteran hatte er abgesucht, sich an alle möglichen und unmöglichen Orte begeben, und nun stand sie plötzlich hier. Waren sie am Ende in derselben Gilde? Seine Augen sogen ihren Anblick auf, wie sie dort lässig auf ihren Stab gestützt stand, den sie mit ihren zartgliedrigen Händen umfasst vor sich abgesetzt hatte. Sie sprach, anscheinend bestens unterhalten, mit einem jungen Zauberer - den er eigentlich bereits kannte, dessen Namen ihm aber momentan entfallen war - denn nun entlockte ihr eine Aussage ihres Gesprächspartners ein Lachen. Dabei hob sie leicht den Kopf in den Nacken, ihre Lippen öffneten sich, ihre Mundwinkel wanderten nach oben, ihre Augen verbreiterten sich, wobei sie sich gleichzeitig leicht schlossen, und es hatte den Anschein, als würde sich ihre kleine spitze Nase leicht im Rhythmus ihres Lachens bewegen. Bei diesem Anblick spürte er in seiner Brust, wie etwas einen kleinen Sprung machte, aber sein Blick verdüsterte sich sogleich. Wie gerne wäre er der Grund für dieses Lachen, würde dort stehen und sie in seinen Bann ziehen.
„Hallo Randjir! Wie schön, dass du auch Zeit gefunden hast.“ Unbemerkt hatte sich Karla genähert. „Ich hätte eigentlich erwartet, dass du bei deinem ersten Gildenmonster etwas früher auftauchst“, sagte sie lächelnd. Legte sie mit Absicht ihre Finger in die Wunde? „Ich war so in meine Studien vertieft, dass ich darüber ein wenig die Zeit aus den Augen verloren habe.“ Gute Ausrede… „Ja, das kann ich verstehen.“ An ihrem Lächeln war nicht abzulesen, inwieweit sie seine Ausrede durchschaute. „Wie dem auch sei, es ist nicht mehr viel Zeit – die ersten werden ungeduldig. Darum will ich dir noch schnell ein paar Dinge erklären. Folge mir!“
„Eine schöne neue Robe hast du dir zugelegt. Das silbrige Grau steht dir“, sagte sie, während sie dem Tisch zustrebte. „Danke. Ich habe sie einem Orkkrieger abgenommen – was auch immer der damit wollte.“ Der Ork musste sie von einem anderen Zauberer erbeutet haben, sonst war nicht zu erklären, wie er zu diesem edlen Stück aus Seide gekommen war. Von Orks war jedenfalls nicht bekannt, dass sie zur Seide eine besondere Affinität hatten. Vielleicht hatte es sich ja um einen weiblichen Ork gehandelt, was auf den ersten Blick nicht zu erkennen war, und eine eingehendere Untersuchung der Leiche hatte er sich aus verständlichen Gründen erspart. „Bevor wir nachher gemeinsam in den Keller gehen“, unterbrach sie seinen Gedankengang, “trinken alle, die das Monster bekämpfen werden einen starken Tairantrank“, sie deutete auf eine Ansammlung durchsichtiger Flaschen mit einer giftgrünen Flüssigkeit, „und wirken den Zauberspruch Starke Regeneration auf sich. Wenn du nicht im Besitz einer entsprechenden Spruchrolle bist, kannst du dich hier bedienen.“ Er nahm sich eine Rolle vom Stapel und überflog sie kurz. „Wenn alle vorbereitet sind, gehen wir geführt von Grünbart hinunter. Er wird heute das Monster beschwören. Die Kämpfer stellen sich im Kreis um den Beschwörungszirkel auf, und sobald es sich materialisiert hat, ist es zum Abschuss freigegeben. Sollten wider Erwarten der Trank und die gewirkte Regeneration nicht ausreichen und einem Kämpfer die Kraft ausgehen, stehe ich als Heiler zur Verfügung. Heb einfach deinen Stab über den Kopf. Das ist dann für mich das Zeichen, dass du Hilfe brauchst.“
Sie überlegte kurz. „Ich glaube, das ist alles. Haben wir das Monster zurück in seine Dimension geschickt, wird Grünbart schauen, ob es etwas Brauchbares zurückgelassen hat. Ab dem Moment kann jeder gehen, wohin er will. Einige bleiben in der Regel noch ein wenig hier in der Gildenhalle und belohnen sich mit dem ein oder anderen Schluck von Marcus‘ Selbstgewinzerten.“ Sie blickte hinüber zu dem erwähnten und murmelte: „Wenn er es nicht wieder vergessen hat.“
Sie drehte sich um, klatschte in die Hände. „Es geht los! Macht euch parat!“, rief sie, um das allgemeine Gemurmel zu übertönen.
Schnell schnappte er sich eine Flasche Tairantrank und drückte sich durch die zum Vorrat drängenden Magier hindurch. Als er beide Arme bewegen konnte, ohne Gefahr zu laufen, mit jemandem zusammenzustossen, entkorkte er vorsichtig das Gefäss und hob es an seine Nase. Bisher hatte er noch nie einen starken Tairantrank in den Fingern gehabt, und er war gespannt. Der Duft, der ihm in die Nase stieg, war angenehm: Leicht süsslich mit einem harzigen Unterton, nicht unähnlich dem seiner Tairanzigaretten. Beherzt setzte er an und trank den gesamten Inhalt in einem Zug. Augenblicklich stellte sich der erwartete Effekt ein: Er fühlte sich fokussierter, sein Blick war geschärft, und selbst Bewegungen am Rande seines Sichtfeldes nahm er gestochen scharf wahr. Als nächstes entrollte er die Spruchrolle und überflog sie ein zweites Mal, bevor er die abgebildeten Runen vor sich hin murmelte. Er spürte nichts, aber der Zauber musste gewirkt haben, denn die Rolle zerfiel beim Entziffern der letzten Rune in seinen Händen zu Staub, der langsam dem Boden entgegen rieselte.
Die meisten übrigen Zauberer taten es ihm gleich, ausgenommen Mantai, Marcus und Grünbart. Mantai stand demonstrativ ein paar Schritte abseits, die Szenerie uninteressiert betrachtend. Marcus klebte weiterhin in seinem Stuhl und gab nicht den Anschein, dass er überhaupt bemerkte, was um ihn herum geschah. Und Grünbart hatte sich in Richtung Untergeschoss auf den Weg gemacht. Die ersten Zauberer machten sich daran, Grünbart zu folgen. Er wartete einen Moment, liess das Gros von ihnen den Vortritt und bildete schliesslich mit Mantai und Karla den Abschluss dieser aufgekratzten Prozession, die Treppe hinunter. Dort angekommen ging es links in den Hauptgang, an zwei geschlossenen Türen vorbei, bevor auf der rechten Seite eine Tür offen stand. Sie war mit einem blutroten Pentagramm bemalt, das wahrscheinlich von einem künstlerisch minderbegabten Zauberer der Gilde aufgebracht worden war, jedenfalls sah es weder besonders magisch aus, noch waren seine fünf Spitzen alle gleich gross. Bei seinen bisherigen Gängen durch die Unterwelt der Gilde war diese Tür immer verschlossen gewesen. Wahrscheinlich hatte Grünbart sie nun geöffnet, denn er stand neben ihr und wartete darauf, dass alle eingetreten waren.
Der Raum, der sich ihm beim Eintreten zeigte, war nicht besonders eindrucksvoll: Er war perfekt in seiner kubischen Form, mir einer Seitenlänge von ungefähr 10 Schritten, und Wände, Boden und Decke waren eintönig sandsteinfarben und vollkommen glatt. Der Raum war schmucklos bis auf ein weiteres Pentagramm in seinem Zentrum. Dieses war ebenfalls blutrot, allerdings schien es nicht von menschlicher Hand aufgemalt, vielmehr war es Teil des Bodens, seine Linien fügten sich naht- und fugenlos ein.
Die Zauberer verteilten sich in einem Kreis um das Pentagramm, und er fand einen Platz neben Mantai. Auch Grünbart reihte sich ein, nur Karla begab sich in eine Ecke, von der aus sie alles überblicken konnte. Nachdem Ruhe eingekehrt war, begann die Beschwörung. Grünbart schloss die Augen und hielt seine Arme ausgestreckt vor sich, während er mit fester Stimme in einer alten Sprache Worte formulierte, für die der menschliche Sprechapparat irgendwie nicht ausgelegt war. Zu hören war eine wechselnde Folge aus tiefen gutturalen Lauten und hohen Kopftönen, die fliessend ineinander übergingen, so dass eine Art seltsamer Singsang entstand. Die Lautstärke dieses Singsangs steigerte sich, und mit ihr begann die Luft über dem Pentagramm zu verschwimmen und veränderte zusehends seine Konsistenz, wurde erst zähflüssiger und ging dann langsam in einen immer festeren Zustand über. Gleichzeitig verlor sie ihre Durchsichtigkeit, wurde erst milchig weiss, bekam Schattierungen und bildete schlussendlich einzelne Farben heraus. Jetzt war auch eine Form erkennbar: Sie war kubisch, nicht grösser als ein Mensch und schwebte in Armeslänge über dem Boden. Als der Singsang Grünbarts in seiner Lautstärke und Intensität beinahe nicht mehr aushaltbar wurde, brach er ab und trat rückwärts aus dem Kreis der Zauberer hinaus. Das Würfelmonster materialisierte nun von alleine weiter. Inzwischen waren seine Konturen klar zu erkennen, genauso wie weisse Energieblitze, die über seine Oberfläche zuckten und die Luft um ihn herum knacken und knistern liessen. Das Monster schwebte auf der Stelle, wobei es langsam hin und her wiegte, wie ein Boot auf einem kleinen See.
Er zuckte zusammen, als neben ihm ein markerschütternder Schrei erklang. Anscheinend war es Mantais Kampfschrei, und sofort begannen die Kämpfer den schwebenden Würfel mit Zaubern einzudecken: Es zuckten Flammen und Lichtblitze, Steine erschienen aus dem Nichts und krachten auf das Opfer, Wasserfontänen schossen heran, und dunkle Energie ballte sich zusammen und stürzte auf den Würfel ein. Das Monster wehrte sich. Jeden Angriff konterte es mit Lichtblitzen, die es auf seinen Angreifer schoss und die alle ihr Ziel fanden, egal auf welcher Seite es sich auch befand. Allerdings schienen diese Treffer nicht besonders wirkungsvoll zu sein. Nur hin und wieder zuckte einer der getroffenen zusammen, holte kurz Luft und griff dann erneut an. Ein harmloser schwebender Würfel – und deswegen dieser ganze Aufwand? Selbstsicher murmelte er seinen bevorzugten Angriffszauber, und der Würfel konterte mit einem Energieblitz…
Der Schmerz kam unerwartet, stechend und intensiv. Jeder seiner Muskeln schien kurzzeitig von heissem Feuer durchflossen, in seinem Gehirn explodierte eine kleine weisse Sonne, und sein ganzer Körper zuckte ruckartig, wobei jede Gliedmasse in eine andere Richtung strebte. Der kurzzeitige Verlust sämtlicher Körperkontrolle hatte zur Folge, dass ihm sein Stab aus der Hand flog. „AU!“ Als ihn das unerwartete Geschoss an der Schläfe traf, stiess Mantai einen Schmerzensschrei aus, der beinahe so laut wie sein Kampfschrei war. Treffer… Nachdem er gegen dies menschliche Hindernis geprallt war, änderte der Stab seine Richtung und nahm Kurs auf das Monster. Dieses zeigte keine Reaktion, als es getroffen wurde, der Stab fiel nutzlos zu Boden und rollte zu allem Überfluss am Ende auch noch ein Stück unter den schwebenden Kubus.
Damit war der Kampf wohl für ihn beendet. Er war sicher nicht verrückt genug, in das Pentagramm zu steigen und seinen Stab zurückzuholen, solange das Monster dort waberte und von allen Seiten beschossen wurde. Er seufzte und zuckte mit den Schultern. So hatte er sich das Aufeinandertreffen mit seinem ersten Gildenmonster nicht vorgestellt. Sein Versagen eingestehend wollte er gerade den Kreis verlassen, da sah er einen Zauberer auf der gegenüberliegenden Seite ihm zunicken. Er hatte keine Ahnung wieso, nickte aber zurück. Darauf schoss der Zauberer gekonnt einen Blitz in die Richtung seines verlorenen Stabes, der dadurch in seine Richtung katapultiert wurde. Reflexartig schoss sein Arm dem Stab entgegen, und durch seine gesteigerten Sinnesfähigkeiten erwischte er ihn genau in der Mitte. Seine Finger schlossen sich dankbar, während sich verspätet der dumpfe Schmerz des Aufpralls in seinem Kopf meldete.
Mit einer verstauchten Hand nahm er den Kampf wieder auf. Jetzt wusste er, was ihn erwartete, und so war der Schmerz zwar nicht geringer, wenn ihn einer der Blitze traf, aber er war auszuhalten, und der Regenerationsspruch zeigte seine Wirkung und hielt ihn kampffähig. Immer noch prasselten die unterschiedlichsten Kampfzauber auf das Monster ein, aber langsam war zu erkennen, dass sie Wirkung zeigten: Immer weniger der Energiefäden zogen über seine Oberfläche, und es schien, als habe das Wanken an Intensität zugelegt. Kurz darauf schien der Würfel zu erlöschen, und er löste sich genauso wieder auf, wie er erschienen war. Die Luft war heiss, rauchig und roch leicht nach Ozon. Dort, wo eben noch der Würfel geschwebt hatte, fielen nun ein paar Gegenstände klappernd auf die Erde, woraufhin Grünbart in das Pentagramm trat, um sie zu inspizieren. Sollte man nach seinem unveränderten Gesichtsausdruck urteilen, war die Beute nicht besonders beeindruckend.
Er wendete sich zur Seite und wollte sich bei Mantai für sein Ungeschick entschuldigen, aber der war bereits verschwunden. Auch die übrigen Anwesenden machten sich langsam auf den Rückweg, einige nahmen ihr Gespräch von vorher wieder auf, niemand schien den vorangegangenen Kampf zu kommentieren, nur vereinzelt sah er ein Grinsen, wenn jemand an ihm vorbei ging. Er wartete auf Karla, die inzwischen zu Grünbart getreten war. Er wollte mit ihr über die Idee reden, die er mit Martimus ausgeheckt hatte. Er hoffte, dass das nicht zu lange dauern würde, denn er musste unbedingt so schnell wie möglich zurück in die Gildenhalle, um die Gelegenheit zu haben, einem bestimmten Gildenmitglied etwas näher zu kommen.
„Na, am Ende war das ein ganz ansehnlicher erster Gildenmob“, sagte sie feixend, als sie auf ihn zutrat. In den Händen hielt sie einen Teil der Beute, anscheinend einen Stapel Farbtafeln und einige Spruchrollen.
„Das nächste Mal weiss ich, was mich erwartet“, entgegnete er. „Die Ausbeute scheint nicht gerade toll gewesen zu sein?“
„Irgendeine Beute ist besser als gar keine. Aber du hast Recht: Der Würfel hat nichts Besonderes zurückgelassen, nur Dinge, die sich in unserem Lager sowieso schon türmen.“
Das war sein Stichwort. „Karla, genau deswegen wollte ich noch mit dir sprechen. Ich habe bemerkt, dass du alleine für das Lager verantwortlich bist. Wie schaffst du es da, den Überblick zu behalten? Ich meine, es ist riesig, und du hast ja noch andere Aufgaben, die dich in Anspruch nehmen. Da ist es doch ein Ding der Unmöglichkeit, dass du von jeder einzelnen eingelagerten Sache weisst, wo sie verstaut ist, und wieviel von ihr gerade vorrätig ist.“
„Das stimmt. Eigentlich habe ich nur die gewöhnlichen Dinge genau im Blick, das was häufig nachgefragt wird. Anderes staubt ja schon seit Jahrzehnten vor sich hin“, seufzte sie.
„Und da würde ich mich gerne ins Spiel bringen“, setzte er ein, „wie wäre es, wenn ich für dich das ganze Lager durchginge und mal aufschriebe, was gerade alles in unserem Besitz ist? Wenn ich alles erfasst habe, könnte man beginnen, Ein- und Auslagerungen zu erfassen. Dann wärst du immer im Bilde, wie es gerade um unser Lager bestellt ist.“ Dazu setzte er sein vertrauenerweckendstes Lächeln auf.
Karla zog eine Augenbraue hoch, doch dann antwortete sie: „Das klingt gar nicht so verkehrt. Aber ich muss erstmal etwas über deinen Vorschlag nachdenken. Ich werde dir Bescheid geben.“
„Das ist in Ordnung. Ich sehe einfach, wie viel du für die Gilde tust – da würde ich dir gerne einen Teil der Last abnehmen. Und jetzt will ich dich nicht mehr aufhalten. Vielleicht sehen wir uns gleich noch oben.“
Ohne eine Antwort abzuwarten, drehte er sich zur Tür und machte sich eiligst auf den Weg zurück in die Gildenhalle. Dort angekommen sah er, dass Marcus seine Aufgabe nicht vergessen hatte. Ein Grossteil der Kämpfer war geblieben und tat sich am versprochenen Wein gütlich. Schnell überflog er die Menge, Gesicht für Gesicht. Er entdeckte Martimus, der sich dazu gesellt hatte, und ebenfalls den Zauberer, der ihn vorhin aus seiner misslichen Lage befreit hatte. Aber sie, sie fand er nicht. Er überlegte kurz, ob er hinaus stürzen sollte, weit konnte sie ja noch nicht sein, entschied sich dann aber dagegen und ging in Richtung Tisch. Er musste sich noch bei seinem Retter bedanken. Und neugierig auf Marcus‘ Wein war er natürlich auch.
7
Fehlermeldungen / Antw:Sammlung: Rechtschreibfehler
« Letzter Beitrag von shona am 07. Februar 2018, 12:48:47 »
Togs Training (9)

Tog: „Der Treffer von geben Tog geben blauen Fleck bei Magier, hahaha! Magier können froh sein, dass Tog nur leicht schlagen. Nochmal!“
8
Anregungen und Vorschläge / Antw:Sammelthread Forschungen
« Letzter Beitrag von MadianOvidas am 07. Februar 2018, 10:37:48 »
Gärtner:
Voraussetzung: Druidenkunst
Kosten:
1x Gartenharke
25x Tierdung

Wirkung:
Verringert die Zeit für die Ernte um 3 Stunden (auch die Minimalzeit auf 15/14) und erhöht die Ausbeute an Kräutern um je 2/4. (seltene +2, Juroga/sorage/gujak +4)





9
Sonstiges / Antw:Neues Chat Tool
« Letzter Beitrag von TheLightPrince am 06. Februar 2018, 13:57:47 »
hi bankaifan,

das ist nicht die neuste version des tools, was hier noch online ist, also es kann sich etwas verändert haben.

wenn das geht schick mir die veränderte datei doch per email zu, dann füge ich die fixes insofern noch nicht verändert ein und lade es als neuste version auf den Server :)

Lg TLP
10
Sonstiges / Antw:Neues Chat Tool
« Letzter Beitrag von Bankaifan am 05. Februar 2018, 11:06:53 »
Teil 2 - da Text zu lang

light:'data:image/png;base64,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'
        }
    };

    // Chrome hack
    setTimeout(function() {
        unsafeWindow.startChat = function() {
            if(typeof oldHijack != 'function') return;
            oldHijack();
            loadChatpartnerList();
            loadInterface();
            chatExistsNow();
        };
        unsafeWindow.startChat();
    },0);
    function loadChatpartnerList(/* optional */xml) {
        loadFromLocalStorage();
        var $xml = $(unsafeWindow.chatXML);
        $xml.find('m').each(xmlEntryToPartnerListEntry);
        if(xml) {
            var $xmlStr = $((new XMLSerializer()).serializeToString(xml));
            $xmlStr.find('m').each(xmlEntryToPartnerListEntry);
        }
        partnerList = partnerList.filter(checkChatPartnerOutOfTime);
        saveToLocalStorage();
    }
    function checkChatPartnerOutOfTime(vO) {
        if(vO.pinned) return true;
        var d = parseInt(Date.now()/1000,10);
        var keep = vO.lastAction+2*86400 > d;
        if(!keep && (idx = filterNames.findIndex(function(el) { return el==vO.name;})) > -1) {
            filterNames.splice(idx, 1);
            saveToLocalStorage();
        }
        return keep;
    }
    function xmlEntryToPartnerListEntry() {
        var obj = {
            name:       unsafeWindow.charID == parseInt($(this).attr('m'),10) ? $(this).attr('a') : $(this).attr('r'),
            lastAction: parseInt($(this).attr('t'), 10),
            pinned:     false
        };
        if(obj.name == 'Wirt') return;
        if(obj.name == 'Juwel der Erfahrung') return;
        if(obj.name == 'System') return;
        if($(this).attr('c') == 'pn' && !checkIfPartnerIsAlreadyInList(obj.name)) {
            partnerList.push(obj);
        } else if(checkIfPartnerIsAlreadyInList(obj.name)) {
            var o = partnerList.filter(function(el) { return el.name==obj.name; })[0];
            o.lastAction = Math.max(obj.lastAction, o.lastAction);
        }
    }
    function loadInterface() {
        $interface = $('<div><ul></ul></div>').css({
            width:'100%',
            position:'relative'
        }).children('ul').css({'list-style': 'none', 'padding':'0px', 'margin':'0px'}).end();
        $('#chatmessage').after($interface);
        $('<style type="text/css"></style>').text('p.ch1, p.ch1 > a { color:black !important; } h4{ text-decoration:underline; } .chatPartner { -moz-user-select: none; -khtml-user-select: none; -webkit-user-select: none; -ms-user-select: none; user-select: none; } .selected { opacity:0.9; font-weight:bold; } .hovered { text-decoration:underline;}').appendTo('head');
    }
    function updateList() {
        partnerList.sort(function(a, b) {
            if(a.lastAction == b.lastAction) return 0;
            return a.lastAction < b.lastAction ? 1 : -1;
        });
        $interface.children('ul').children('li').remove();
        $.each(partnerList, function(k, v) {
            $interface.children('ul').append(createListItem(v, v.name==chat.config.PN));
        });
        if(!$('div:contains([?])').length) {
            var marginTop = cpos==1?0:-600;
            var width = cpos==1?700:1000;
            var $infoDiv = $('<div style="overflow-y:scroll;display:none;position:absolute;margin-top:20px;padding:20px;background-color:white;color:black;width:0;height:0;z-index:1000;"></div>').mouseenter(function(evt) {
                $infoDiv.css({
                    top:evt.pageY,
                    right:$('body').width()-parseInt(evt.pageX,10)
                });
                $(this).stop().animate({
                    width:width,
                    height:'600px',
                    opacity:1.0,
                    display:'block',
                    marginTop:marginTop
                },500);
            }).mouseleave(function() {
                $(this).stop().animate({
                    width:0,
                    height:0,
                    opacity:0.0,
                    display:'none',
                    marginTop:0
                },500);
            }).html('<h3>Kurz Anleitung</h3><h4>Im chat</h4>- [Shift] + Linksklick auf einen Namen: SpielerIn ins Tool aufnehmen<h4>Im Tool</h4>- Klick: Flüstermodus mit der Person starten<br>- [Ctrl] + Klick: Aus Tool entfernen (geht nur, falls kein aktives Gespräch mit der Person stattfindet)<br>- Doppelklick: Chat nach Nachrichten dieser Person filtern<br>- [Ctrl] + Doppelklick: Nachrichten dieser Person aus dem Chat filtern<h4>Im Tool - Fokus im Eingabefeld</h4>- [Tab]: Wechsel des Flüstermodus zu anderer Person<br>- [Ctrl] + A: Wechsel zum Alle-Chat<br>- [Ctrl] + G: Wechsel zum Gilde-Chat<br>- [Ctrl] + F: Wechsel zum Fraktion-Chat<br>- [Ctrl] + P: Wechsel zum PN-Chat<br>- [Ctrl] + R: Wechsel zum RP-Chat<br>- [Ctrl] + M: Wechsel zum Mod-Chat<br>- [Ctrl] + N: Aufheben des Flüstermodus (Alternative zum Klick auf das Briefsymbol)<br><br>- Klick auf das Pin-Icon: Pinned einen Spieler / eine Spielerin fest (verschwindet nicht nach 48 Stunden)<br>- Hover über das Pin-Icon: Ansicht, wann der Spieler / die Spielerin aus der Liste verschwindet<br>- Hover über einen Namen: Im Chat werden die PN-Nachrichten(!!) hervorgehoben und alles andere etwas blasser<br><br><input type="checkbox" name="coloring" '+(coloring?'checked="checked"':'')+'> Chatpartnern verschiedene Farben zuweisen<br><input type="checkbox" name="hoveringOverName" '+(hoveringOverName?'checked="checked"':'')+'> Schaltet das Highlighting beim Tippen an und aus, sowie beim Überfahren von Namen').children('input:checkbox[name=coloring]').click(function() {
    coloring = $(this).is(':checked');
    updateList();
    chat.printMessages('#chat');
    saveToLocalStorage();
}).end().children('input:checkbox[name=hoveringOverName]').click(function() {
    hoveringOverName = $(this).is(':checked');
    updateList();
    $('#chatmessage').keyup();
    saveToLocalStorage();
}).end();

            var $infoDivIcon = $('<div>[?]</div>').css({'font-weight':'bold','cursor':'pointer','position':'absolute',top:0,right:0}).mouseover(function(evt) {
                $infoDiv.css({
                    top:evt.pageY,
                    right:$('body').width()-parseInt(evt.pageX,10)
                });
                $infoDiv.stop().animate({
                    width:width,
                    height:'600px',
                    opacity:1.0,
                    display:'block',
                    marginTop:marginTop
                },500);
            }).mouseout(function() {
                $infoDiv.stop().animate({
                    width:0,
                    height:0,
                    opacity:0.0,
                    display:'none',
                    marginTop:0
                },500);
            });
            $interface.append($infoDivIcon);
            $('body').append($infoDiv);
        }
    }
    function chatExistsNow() {
        chat = unsafeWindow.chat;
        $('#cresd').bind('click',function(event) { chat.resizeT(-1,event);});
        var hijacks = [chat.update, chat.filter, chat.resPN, chat.printMessages];
        chat.printMessages = function() {
            hijacks[3].apply(chat, arguments);
            var $ps = $('#chat');
            if(coloring) {
                $interface.find('li').each(function() {
                    $('p.ch1:has(a:starts-with('+$(this).children('span').text()+'))', $ps).css('background-color', $(this).data('color'));
                });
            }
            if(hoveringOverName) {
                if(hoverOverName) {
                    $('#chat').children('p').css('opacity', 0.5);
                    $('#chat').children('p:has(a:starts-with('+hoverOverName+'))').css('opacity', 1);
                }
            }
        };
        chat.update = function(xml) {
            hijacks[0].apply(chat, arguments);
            lastReceivedXMLData = (new XMLSerializer()).serializeToString(xml);
            loadChatpartnerList(xml);
            chat.printMessages('#chat');
            updateList();
        };
        chat.filter = function(msgID) {
            var parts = [
                hijacks[1].apply(chat, arguments),
                (
                    filterNames.length && !(filterNames.indexOf(this.messages[msgID].aN) > -1 || filterNames.indexOf(this.messages[msgID].toN) > -1) && filterNames.filter(function(el) { return el.substring(0,1)!='!'; }).length
                ),
                (
                    filterNames.length && (filterNames.indexOf('!'+this.messages[msgID].aN) > -1 || filterNames.indexOf('!'+this.messages[msgID].toN) > -1)
                )
            ];
            return parts.reduce(function(c, i) { return c || i; }, false);
        };
        chat.resPN = function() {
            hijacks[2].apply(chat, arguments);
            updateList();
        };
        $('#chat a[href*="p=showprofile&i="]').live('click', function(e) {
            if(e.shiftKey) {
                e.preventDefault();
                var obj = {
                    name:       $.trim($(this).text()),
                    lastAction: parseInt(Date.now()/1000,10),
                    pinned:     false
                };
                if(!checkIfPartnerIsAlreadyInList(obj.name)) {
                    partnerList.push(obj);
                } else {
                    var o = partnerList.filter(function(el) { return el.name==obj.name; })[0];
                    o.lastAction = Math.max(obj.lastAction, o.lastAction);
                }
                saveToLocalStorage();
                updateList();
            }
        });
        $('#chatmessage').keydown(function(e) {
            if(e.keyCode==9) { // [TAB]
                e.preventDefault();
                if(tabCounterStatus.lA+750 < Date.now()) {
                    tabCounterStatus.val = 0;
                } else {
                    tabCounterStatus.val = (tabCounterStatus.val+1) % $('li.chatPartner').size();
                }
                $('li.chatPartner').removeClass('hovered');
                if(tabCounterStatus.handle)
                    clearTimeout(tabCounterStatus.handle);
                if(!$('li.chatPartner').eq(tabCounterStatus.val).hasClass('selected')) {
                    $('li.chatPartner').eq(tabCounterStatus.val).addClass('hovered');
                    tabCounterStatus.handle = setTimeout(function() {
                        $('li.chatPartner').removeClass('hovered');
                        $('li.chatPartner').eq(tabCounterStatus.val).click();
                    }, 800);
                }
                tabCounterStatus.lA = Date.now();
            }
            if(e.ctrlKey && (cchan = ['A'.charCodeAt(), 'G'.charCodeAt(), 'F'.charCodeAt(), 'P'.charCodeAt(), 'R'.charCodeAt(), 'M'.charCodeAt(), 'N'.charCodeAt()].indexOf(e.keyCode)) > -1 ) {
                e.preventDefault();
                if(cchan < 6)
                    chat.changeChannel(cchan);
                else
                    chat.resPN();
            }
        }).keyup(function(e) {
            if(!hoveringOverName) return;
            if(this.value.length == 0 || e.keyCode == 13) {
                hoverOverName = null;
                $('#chat').children('p').css('opacity', 1);
                return;
            } else if(['@', '/'].indexOf(this.value.substr(0,1)) == -1 && chat.config.PN) {
                hoverOverName = chat.config.PN;
            } else if(['@'].indexOf(this.value.substr(0,1)) > -1) {
                hoverOverName = this.value.substring(1, this.value.indexOf(' ')==-1?this.value.length:this.value.indexOf(' '));
            } else if(['/'].indexOf(this.value.substr(0,1)) > -1) {
                hoverOverName = null;
                $('#chat').children('p').css('opacity', 1);
                return;
            }
            $('#chat').children('p').css('opacity', 0.5);
            $('#chat').children('p:has(a:starts-with('+hoverOverName+'))').css('opacity', 1);
        });
        $('li.chatPartner').live('click', function(e) {
            $(this).data('doubleClicked', false);
            var self = this;
            setTimeout(function() {
                if($(self).data('doubleClicked')) return;
                var name = $(self).data('name');
                if(!name) return;
                if(e.ctrlKey) {
                    if((idx1 = filterNames.indexOf(name)) > -1 || (idx2 = filterNames.indexOf('!'+name)) > -1)
                        removeFilter(idx1>-1?idx1:idx2);
                    var idx = partnerList.findIndex(function(el) { return el.name==name; });
                    partnerList.splice(idx,1);
                } else {
                    chat.setPN(name);
                    partnerList.filter(function(el) { return el.name==name; })[0].lastAction = parseInt(Date.now()/1000,10);
                }
                saveToLocalStorage();
                $('#chatmessage').focus();
                updateList();
            }, 200);
        });
        $('li.chatPartner').live('dblclick', function(e) {
            e.preventDefault();
            $(this).data('doubleClicked', true);
            toggleFilter((e.ctrlKey?'!':'')+$(this).text());
        });
        updateList();
        chat.printMessages('#chat');
    }
    function toggleFilter(name) {
        var pureName = name.substring(0,1)=='!'?name.substring(1):name;
        var idx = filterNames.findIndex(function(el) { return (el.substring(0,1)=='!'?el.substring(1):el)==pureName; });
        var nameFromArray = idx>-1?filterNames[idx]:null;
        if(idx==-1) {
            filterNames.push(name);
            $('li.chatPartner:contains('+pureName+')').css('border-color', pureName==name?'green':'red');
            chat.printMessages('#chat');
        } else {
            if(name==nameFromArray) {
                removeFilter(idx);
            } else {
                filterNames[idx] = name;
                $('li.chatPartner:contains('+pureName+')').css('border-color', pureName==name?'green':'red');
                chat.printMessages('#chat');
            }
        }
        saveToLocalStorage();
    }
    function removeFilter(idx) {
        var name = filterNames[idx];
        var pureName = name.substring(0,1)=='!'?name.substring(1):name;
        filterNames.splice(idx,1);
        saveToLocalStorage();
        $('li.chatPartner:contains('+pureName+')').css('border-color', borderColor);
        chat.printMessages('#chat');
    }

    function checkIfPartnerIsAlreadyInList(value) {
        return partnerList.filter(function(v) { return v.name==value; }).length?true:false;
    }
    function createListItem(obj, selected) {
        // design dependend scheme
        var idx = filterNames.findIndex(function(el) { return (el.substring(0,1)=='!'?el.substring(1):el)==obj.name; });
        var correctBorderColor = idx==-1?borderColor:(filterNames[idx].substring(0,1)=='!'?'red':'green');
        var secondsLeft = parseInt(Date.now()/1000,10)-obj.lastAction;
        partnerListSorted = partnerList.slice();
        partnerListSorted.sort(function(a, b) {
            return a.name > b.name;
        });
        var idxInDom = partnerListSorted.findIndex(function(el) { return el.name==obj.name; });
        var $pin =  $('<img />').css({'width': '13px', margin:'0px 5px 1px 0', verticalAlign:'middle'}).attr('src', obj.pinned?images.pinned[imageColor]:images.unpinned[imageColor]).click(function() {
            obj.pinned = !obj.pinned;
            obj.lastAction = parseInt(Date.now()/1000,10);
            saveToLocalStorage();
            updateList();
        }).attr('title', obj.pinned?'Pinned!':'Verschwindet in '+secToCountdown(secondsLeft)).css('background-color', coloring?colors[idxInDom%colors.length]:'transparent');
        var $span = $('<span />').text(obj.name);
        var $li = $('<li></li>').css({
            border:'1px solid '+borderColor,
            backgroundImage:backgroundImage,
            padding:'2px 5px',
            margin:'1px 2px',
            display:'inline-block',
            opacity:1,
            cursor:'pointer',
            borderColor:correctBorderColor,
            opacity:obj.pinned?1:(1-((secondsLeft)/(2*24*60*60)))*0.8+0.2 // berechne einen opacity-wert zwischen 0.2 und 1
        }).data('name', obj.name).addClass('chatPartner').append($pin).append($span);
        $li.data('color', colors[idxInDom%colors.length]);
        if(hoveringOverName) {
            $li.hover(function() {
                hoverOverName = $(this).children('span').text();
                $('#chat').children('p').css('opacity', 0.5);
                $('#chat').children('p:has(a:contains('+hoverOverName+'))').css('opacity', 1);
            }, function() {
                $('#chat').children('p').css('opacity', 1);
                hoverOverName = null;
            });
        }
        if(selected)
            $li.addClass('selected');
        return $li;
    }
    function saveToLocalStorage() {
        localStorage.chatpartnerList = JSON.stringify(partnerList);
        localStorage.filterNames = JSON.stringify(filterNames);
        localStorage.coloring = JSON.stringify(coloring);
        localStorage.hoveringOverName = JSON.stringify(hoveringOverName);
    }
    function loadFromLocalStorage() {
        partnerList = JSON.parse(localStorage.chatpartnerList || '[]');
        filterNames = JSON.parse(localStorage.filterNames || '[]');
        coloring = JSON.parse(localStorage.coloring || true);
        hoveringOverName = JSON.parse(localStorage.hoveringOverName || true);
    }

    function secToCountdown(seconds) {
        seconds = 2*86400 - seconds;
        var days = parseInt(seconds/86400,10);
        var hours= parseInt((seconds%86400)/3600,10);
        var mins = parseInt((seconds%3600)/60,10);
        var secs = seconds%60;
        hours= ('0'+hours).substr(-2);
        mins = ('0'+mins).substr(-2);
        secs = ('0'+secs).substr(-2);

        return (days>0?days+' Tag ':'')+hours+':'+mins+':'+secs;
    }
})();
Seiten: [1] 2 3 ... 10