// ==UserScript==
// @name Fightinfo
// @namespace http://userscripts.org/scripts/show/75242
// @author sageo[http://berlin.pennergame.de/profil/id:1146285/]
// @description Stellt zahlreiche kleine und große Hilfen rund um das Thema Kämpfen zur Verfügung (HH, B, M, K, Sylt, Malle, Vatikan, New York, Paris, Marseille, Warschau, Krakau, Madrid, Buenos Aires, Rio de Janeiro, Sao Paolo, Moskau, London)
// @include http://*.pennergame.de/activities/
// @include http://*.pennergame.de/overview/
// @include http://*.pennergame.de/fight/
// @include http://*.pennergame.de/fight/#*
// @include http://*.pennergame.de/fight/fightlog/*
// @include http://*.pennergame.de/fight/overview/*
// @include http://*.pennergame.de/fight/?status*
// @include http://*.pennergame.de/gang/
// @include http://*.pennergame.de/highscore/attackable*
// @include http://*.pennergame.de/highscore/joindate*
// @include http://*.pennergame.de/highscore/rank*
// @include http://*.pennergame.de/highscore/user*
// @include http://*.pennergame.de/highscore/tpp*
// @include http://*.pennergame.de/profil/*
// @include https://*.pennergame.de/activities/
// @include https://*.pennergame.de/overview/
// @include https://*.pennergame.de/fight/
// @include https://*.pennergame.de/fight/#*
// @include https://*.pennergame.de/fight/fightlog/*
// @include https://*.pennergame.de/fight/overview/*
// @include https://*.pennergame.de/fight/?status*
// @include https://*.pennergame.de/gang/
// @include https://*.pennergame.de/highscore/attackable*
// @include https://*.pennergame.de/highscore/joindate*
// @include https://*.pennergame.de/highscore/rank*
// @include https://*.pennergame.de/highscore/user*
// @include https://*.pennergame.de/highscore/tpp*
// @include https://*.pennergame.de/profil/*
// @include http://*.pennerzone.de/highscore/?page=*
// @include http://*.pennerzone.de/highscore/uh*
// @include http://*.bumrise.com/fight/
// @include http://*.bumrise.com/fight/#*
// @include http://*.bumrise.com/fight/fightlog/*
// @include http://*.bumrise.com/fight/overview/*
// @include http://*.bumrise.com/fight/?status*
// @include http://*.bumrise.com/gang/
// @include http://*.bumrise.com/highscore/attackable*
// @include http://*.bumrise.com/highscore/joindate*
// @include http://*.bumrise.com/highscore/rank*
// @include http://*.bumrise.com/highscore/user*
// @include http://*.bumrise.com/profil/*
// @include http://*.menelgame.pl/fight/
// @include http://*.menelgame.pl/fight/#*
// @include http://*.menelgame.pl/fight/fightlog/*
// @include http://*.menelgame.pl/fight/overview/*
// @include http://*.menelgame.pl/fight/?status*
// @include http://*.menelgame.pl/gang/
// @include http://*.menelgame.pl/highscore/attackable*
// @include http://*.menelgame.pl/highscore/joindate*
// @include http://*.menelgame.pl/highscore/rank*
// @include http://*.menelgame.pl/highscore/user*
// @include http://*.menelgame.pl/profil/*
// @include http://*.clodogame.fr/fight/
// @include http://*.clodogame.fr/fight/#*
// @include http://*.clodogame.fr/fight/fightlog/*
// @include http://*.clodogame.fr/fight/overview/*
// @include http://*.clodogame.fr/fight/?status*
// @include http://*.clodogame.fr/gang/
// @include http://*.clodogame.fr/highscore/attackable*
// @include http://*.clodogame.fr/highscore/joindate*
// @include http://*.clodogame.fr/highscore/rank*
// @include http://*.clodogame.fr/highscore/user*
// @include http://*.clodogame.fr/profil/*
// @include http://*.mendigogame.es/fight/
// @include http://*.mendigogame.es/fight/#*
// @include http://*.mendigogame.es/fight/fightlog/*
// @include http://*.mendigogame.es/fight/overview/*
// @include http://*.mendigogame.es/fight/?status*
// @include http://*.mendigogame.es/gang/
// @include http://*.mendigogame.es/highscore/attackable*
// @include http://*.mendigogame.es/highscore/joindate*
// @include http://*.mendigogame.es/highscore/rank*
// @include http://*.mendigogame.es/highscore/user*
// @include http://*.mendigogame.es/profil/*
// @include http://*.mendigogame.com/fight/
// @include http://*.mendigogame.com/fight/#*
// @include http://*.mendigogame.com/fight/fightlog/*
// @include http://*.mendigogame.com/fight/overview/*
// @include http://*.mendigogame.com/fight/?status*
// @include http://*.mendigogame.com/gang/
// @include http://*.mendigogame.com/highscore/attackable*
// @include http://*.mendigogame.com/highscore/joindate*
// @include http://*.mendigogame.com/highscore/rank*
// @include http://*.mendigogame.com/highscore/user*
// @include http://*.mendigogame.com/profil/*
// @include http://*.faveladogame.com/fight/
// @include http://*.faveladogame.com/fight/#*
// @include http://*.faveladogame.com/fight/fightlog/*
// @include http://*.faveladogame.com/fight/overview/*
// @include http://*.faveladogame.com/fight/?status*
// @include http://*.faveladogame.com/gang/
// @include http://*.faveladogame.com/highscore/attackable*
// @include http://*.faveladogame.com/highscore/joindate*
// @include http://*.faveladogame.com/highscore/rank*
// @include http://*.faveladogame.com/highscore/user*
// @include http://*.faveladogame.com/profil/*
// @include http://*.bomzhuj.ru/fight/
// @include http://*.bomzhuj.ru/fight/#*
// @include http://*.bomzhuj.ru/fight/fightlog/*
// @include http://*.bomzhuj.ru/fight/overview/*
// @include http://*.bomzhuj.ru/fight/?status*
// @include http://*.bomzhuj.ru/gang/
// @include http://*.bomzhuj.ru/highscore/attackable*
// @include http://*.bomzhuj.ru/highscore/joindate*
// @include http://*.bomzhuj.ru/highscore/rank*
// @include http://*.bomzhuj.ru/highscore/user*
// @include http://*.bomzhuj.ru/profil/*
// @include http://*.dossergame.co.uk/fight/
// @include http://*.dossergame.co.uk/fight/#*
// @include http://*.dossergame.co.uk/fight/fightlog/*
// @include http://*.dossergame.co.uk/fight/overview/*
// @include http://*.dossergame.co.uk/fight/?status*
// @include http://*.dossergame.co.uk/gang/
// @include http://*.dossergame.co.uk/highscore/attackable*
// @include http://*.dossergame.co.uk/highscore/joindate*
// @include http://*.dossergame.co.uk/highscore/rank*
// @include http://*.dossergame.co.uk/highscore/user*
// @include http://*.dossergame.co.uk/profil/*
// @info CDCBB6BEBBC3D4EBAH@D@D@@D1E6E6@CAEAAE4A2AA@IE5ADAEE6@GAEABDFE6AFAIA3AE@CE6@DE5@@AH@@EBD2A4D4D@D2
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_xmlhttpRequest
// @grant GM_addStyle
// @grant GM_deleteValue
// @grant GM_listValues
// @grant GM_log
// @grant GM_registerMenuCommand
// @grant GM_setClipboard
// @version 1.25.15 Bilder neu hochgeladen; neuer Bilderhost
// ==/UserScript==
// Daten über das aktuelle Skript für den Update-Mechanismus
var THISSCRIPTVERSION = GM_info.script.version.split(" ")[0];
var THISSCRIPTINSTALL_URLGF = "https://greasyfork.org/scripts/1051-fightinfo";
var THISSCRIPTNAME = GM_info.script.name;
// @version 1.25.14 neuer Bilderhost; Umstellung auf https; kleine Korrekturen
// @version 1.25.13 noch einen Fehler beim Posten eines laufenden Kampfs behoben
// @version 1.25.12 Fehler beim Posten eines laufenden Kampfs behoben
// @version 1.25.11 Darstellung der Punktehistorie verbessert
// @version 1.25.10 Einbau einer Watchlist
// @version 1.25.9 Problem mit Glühwürmchen in Highscore behoben; KW mit richtigem Dezimaltrennzeichen
// @version 1.25.8 Korrekturen beim Sichern von Kampflisten
// @version 1.25.7 Kampfwert melden; mehrere Kampflisten; Bonus im Vatikan beachten
// @version 1.25.6 Fehler bei Fightlog mit Bandenfilter behoben; Fehlermeldung, wenn downfight-Seite nicht erreichbar
// @version 1.25.5 Aufbau der Kampfstatistiken beschleunigt
// @version 1.25.4 Erweiterungen für Athen; Fehler in Angreiferliste behoben
// @version 1.25.3 Seite zum Suchen von Angreifern hinzugefügt
// @version 1.25.2 Name beim Posten von Kämpfen war fehlerhaft
// @version 1.25.1 Anpassungen an das neue Profil-Design
// @version 1.23.7 Fehlerhaft Anzeige bei Pennern mit Glühwürmchen behoben
// @version 1.23.6 Bildadressen korrigiert
// @version 1.23.5 Fehler in Update-Verfahren behoben
// @version 1.23.4 Downfight-Werte für Vatikan gesetzt
// @version 1.23.3 noch einmal: Probleme auf Kampfseite behoben
// @version 1.23.2 Probleme auf Kampfseite behoben
// @version 1.23.1 erste Version für Vatikan
// @version 1.22.10 Bilderhoster getauscht; Fehler bei Profil behoben
// @version 1.22.9 Aktuellen Platz in Highscore anzeigen
// @version 1.22.8 Korrektur: Downfighter etc. wurden nicht mehr angezeigt
// @version 1.22.7 Zeitkorrektur Malle; Problem mit Gästebuch auf Bandenprofil behoben
// @version 1.22.6 Skript lief in München nicht mehr
// @version 1.22.5 Posten in Banden-SBs auch bei Fightlog über mehrere Seiten
// @version 1.22.4 Bandenbox verschoben; Posten in Banden-SBs an weiteren Stellen eingebaut
// @version 1.22.3 Posten von Kämpfen in die SBs verbündeter Banden
// @version 1.22.2 Problem mit Gästebuch behoben
// @version 1.22.1 Wechsel auf greasyfork.org; Fehler bei Kampflog behoben
// @version 1.21.2 Probleme beim Posten von Kämpfen behoben
// @version 1.21.1 Bilder umgezogen
// @version 1.20.1 Anpassungen wegen Pennerzepter
// @version 1.19.17 Anpassungen wegen Pennerzepter
// @version 1.19.16 Warnanzeige bei Gegnern mit negativer Kampfbilanz
// @version 1.19.15 Problem bei Darstellung in Chrome behoben
// @version 1.19.14 Posten von Kämpfen funktionierte nicht mehr richtig
// @version 1.19.13 History-Variable war nicht angelegt; History wurde nicht immer angezeigt
// @version 1.19.12 Erweiterung auf andere Städte (Highscoreseiten); Anzeige Wartezeit bis zum nächsten Angriff; diverse Korrekturen
// @version 1.19.11 Korrektur: Posten von ausgehenden Angriffen in die SB funktionierte nicht mehr; Fehler in Kampfanzeige und Bandenprofil behoben
// @version 1.19.10 Banden in/aus Kampfliste; Punktehistorie; Buttons für Penner in/aus Kampfliste
// @version 1.19.9 Downfight-Liste, Profilseite und Log mehrerer Seiten korrigiert
// @version 1.19.8 Anpassungen wegen geänderter Profilseite
// @version 1.19.7 Anpassungen wegen Premium-Krone
// @version 1.19.6 Testausgaben entfernt
// @version 1.19.5 Fightlog mit voller erster Seite
// @version 1.19.4 Skript fehlerhaft bei ausgehenden Angriffen
// @version 1.19.3 Sprachauswahl repariert; Fightlog sortiert
// @version 1.19.2 Skript lief wieder nicht mehr
// @version 1.19.1 Skriptreparatur nach Totalausfall
// @version 1.18.1 Bilder auf anderen Hoster verschoben
// @version 1.17.4 Bilderadresse angepasst, da Bilder nicht angezeigt wurden
// @version 1.17.3 Anpassung an geänderte Downfight-Seite
// @version 1.17.2 Pennerzone abgeschaltet; Downfighter in Sylt korrigiert; Fehler bei Kampfstatistik und Kommentaren behoben;
// @version 1.17.1 Version für Firefox 17; Posts von Kämpfen in die SB erweitert
// @version 1.16.1 Erste Version Sylt
// @version 1.15.4 Skriptabsturz bei Angriff durch Inkognito-Penner beseitigt
// @version 1.15.3 Cheater wurden nicht mehr korrekt angezeigt
// @version 1.15.2 Diverse Korrekturen wegen geändertem Fightlog
// @version 1.15.1 Anpassung an Spiel Stadtfeind Nr. 1
// @version 1.14.9 noch eine Korrektur wegen nicht blinkender Downfighter
// @version 1.14.8 Downfighter wurden nicht mehr markiert
// @version 1.14.7 Downfighter wurde nicht mehr angezeigt; weitere Korrekturn wegen erweitertem Fightlog
// @version 1.14.6 Entfernte Bande in erweitertem Fightlog wieder hinzugefügt
// @version 1.14.5 Fehler auf Angriffsseite und Bandenseite wegen Penner Ahoi! behoben
// @version 1.14.4 Keine Funktion wegen fehlender Klammer
// @version 1.14.3 weitere Anpassungen wegen Penner Ahoi!
// @version 1.14.2 Name des Penners wurde falsch ermittelt
// @version 1.14.1 Anpassungen für Penner Ahoi!
// @version 1.9.4 Zusatzinfos bei TPP-Highscore
// @version 1.9.3 Fehler beim Posten von Kämpfen behoben
// @version 1.9.2 Fehler bei Kampfstatistik behoben
// @version 1.9.1 Anpassung an neue Kampfseite
// @version 1.8.21 Kampfkommentare werden wieder angezeigt; Kampflog zeigt wieder mehrere Seiten an
// @version 1.8.20 Zeitabstand zum letzten Kampf fehlerhaft wegen Jahr
// @version 1.8.19 nochmal Korrektur Kampfstatistik
// @version 1.8.18 kleine Korrekturen
// @version 1.8.17 Shoutboxverbreiterung entfernt wegen Bandenkampfstatistik
// @version 1.8.16 Shoutbox verbreitert; Einfärben in Shoutbox: Fehler korrigiert, erweitert
// @version 1.8.15 Angriffsgrenzen für Operation Pennersturm angepasst; Einfärben von Pennern in der Shoutbox (1. Versuch)
// @version 1.8.14 Downfight-Listen für Pennersturm; Like-Button abschaltbar
// @version 1.8.13 kleine Fehler behoben; Like-Button
// @version 1.8.12 kleine Fehler behoben; 1. Anpassung Pennersturm
// @version 1.8.11 Highscore-Regel korrigiert
// @version 1.8.10 Fehler beim Posten von Kämpfen in SB behoben
// @version 1.8.9 Fehler bei Direktangriff in DF-Listen behoben; 5-Platz-Regel eingebaut
// @version 1.8.8 Fehler korrigiert: Post von eingehenden Kämpfen
// @version 1.8.7 Fehler auf Profilseite behoben; bei Angriffen Bande in SB posten
// @version 1.8.6 Downfight-Seiten funktionieren wieder
// @version 1.8.5 kleinere Fehler behoben; Erweiterung auf Highscore-Seiten
// @version 1.8.4 Downfightermarkierung optional; keine Markierung auf Downfightliste
// @version 1.8.3 kleine Korrekturen; Downfighteranzeige; Zusammenarbeit mit Bandenprofil deLuxe verbessert
// @version 1.8.2 farbliche Markierung der Angreifer in weiteren Listen; erklärende Texte als Tooltip
// @version 1.8.1 Version läuft unter Chrome; farbliche Markierung der Angreifer
// @version 1.7.5 Bandenprofil repariert; Kampfstatistiken beschleunigt
// @version 1.7.4 Wut wurde nicht mehr erkannt; Downfighter und Hochfighter wurden nicht mehr angezeigt
// @version 1.7.3 kleinere Korrekturen; Umstellung auf Moskau
// @version 1.7.2 Problem mit Bandenseite behoben
// @version 1.7.1 Version 1 nach dem neuen PG-Patch
// @version 1.6.10 Downfightlisten: kleine Korrekturen
// @version 1.6.9 Downfighter und Hochfighter: kleiner Fehler behoben
// @version 1.6.8 Downfighter und Hochfighter eingebaut
// @version 1.6.7 Listen verbreitert
// @version 1.6.6 Listen wahlweise auf der Fight-Seite
// @version 1.6.5 Anzeige auf Pennerzone wieder zum Laufen gebracht; Listen auf der Fight-Seite ausgelagert
// @version 1.6.4 Skript lief nicht mehr
// @version 1.6.3 Variablen vereinheitlicht; Grafiken aufgeteilt; DF-Listen wieder zum Laufen gebracht
// @version 1.6.2 Grafikadressen korrigiert
// @version 1.6.1 Adressen für Brasilien angepasst; Bilder auf anderen Hoster verlegt
// @version 1.5.13 weitere reloaded-Versionen hinzugefügt
// @version 1.5.12 Probleme beim Posten durch den Glühwürmchen-Plunder behoben
// @version 1.5.11 Probleme durch den Glühwürmchen-Plunder behoben
// @version 1.5.10 Anpassungen für Hamburg reloaded
// @version 1.5.9 DF-Listen funktionieren wieder; Angriffspause in Köln nur 24 Stunden
// @version 1.5.8 Probleme mit DEF-Booster behoben
// @version 1.5.7 Profilseite korrigiert, Skript geht wieder unter FF4
// @version 1.5.6 kleine Korrektur auf der Let's fight Seite
// @version 1.5.5 läuft jetzt auch in Köln
// @version 1.5.4 Legionärsliste funktioniert wieder
// @version 1.5.3 Update-Verfahren verbessert
// @version 1.5.2 Anpassungen für London; neues Update-Verfahren
// @version 1.5.1 Korrektur der russischen Übersetzung (nochmals vielen Dank an dron122007)
// @version 1.5.0 Sprachumschaltung; Übersetzung ins Russische (Vielen Dank an dron122007)
// @version 1.4.8 Anpassungen für St. Petersburg
// @version 1.4.7 Geld in Kampfliste anzeigen; läuft auch in Buenos Aires
// @version 1.4.6 Jahreswechselproblem bei Kampfliste behoben
// @version 1.4.5 Headhunterliste eingebaut; französische Texte; Kampfliste abschaltbar
// @version 1.4.4 Skript funktionierte nicht richtig, wenn man nicht in einer Bande war; DF-Listen vereinheitlicht
// @version 1.4.3 Es wurden nicht alle markierten Einträge gepostet bzw. in die Kampfliste aufgenommen
// @version 1.4.2 Fehler in neuer Kampfliste behoben
// @version 1.4.1 neue Kampfliste
// @version 1.3.38 Anzeige der Legionäre von downfight.de funktionierte nicht mehr, da Seite geändert
// @version 1.3.37 Anzeige der Legionäre von downfight.de
// @version 1.3.36 Nach Löschen eines Kampfkommentars wurde falsches Symbol angezeigt
// @version 1.3.35 Kampfkommentare wurden nur in Hamburg und Berlin angezeigt
// @version 1.3.34 Kampfkommentare wurden nicht mehr angezeigt
// @version 1.3.33 Faker-Diagramme: Stadt wird berücksichtigt; Anzahl Tage ist vorgebbar
// @version 1.3.32 Kampfwert wird gerundet beim Posten
// @version 1.3.31 Filtern des Kampflogs nach Banden
// @version 1.3.30 kleine Korrekturen; Länge des BBCode anzeigen; Cheaterliste von Halloween anzeigen
// @version 1.3.29 Post eines Angriffs funktionierte nicht mehr; Loserliste wurde manchmal nicht bis zu Ende bearbeitet
// @version 1.3.28 Kampfwert posten bei Wut fehlerhaft; Button für BBCode eingefügt
// @version 1.3.27 Kampfwert posten; Posten ab 2. Fightlogseite ging nicht mehr
// @version 1.3.26 Probleme mit anderen Skripts behoben
// @version 1.3.25 Erweiterungen für Halloween hinzugefügt
// @version 1.3.24 Angriffs-Icon auf Bandenprofil nur, wenn nicht ein anderes Skript bereits Spalten einfügt
// @version 1.3.23 Posten der Kampfwerte auch aus Kampfübersichten möglich
// @version 1.3.22 Verliererliste repariert; beim Posten von beendeten Kämpfen können die Kampfwerte mit gepostet werden
// @version 1.3.21 Angriffs-Icon aus Cheaterliste wieder entfernt, da es bereits rechts drin ist
// @version 1.3.20 Angriffs-Icon in den Listen hinzugefügt
// @version 1.3.19 nochmal Korrektur für Malle: Kampfliste unvollständig, wenn nicht in Bande
// @version 1.3.18 Cheaterliste für Malle hinzugefügt
// @version 1.3.17 Probleme beim Posten in SB ohne Bande behoben; Fehler bei Kampfstatistik behoben
// @version 1.3.16 Fehler beim Posten aus dem Fightlog in die SB behoben
// @version 1.3.15 Fehler beim Posten der eintreffenden Kämpfe in die SB behoben
// @version 1.3.14 Posten in die SB in NY korrigiert; Ankreuzspalte nach links verschoben; kleinere Korrekturen
// @version 1.3.13 Anpassungen für Malle
// @version 1.3.12 nochmals Änderung wegen pennerzone
// @version 1.3.11 Problem mit Skriptversion behoben
// @version 1.3.10 Skript an Änderungen bei pennerzone angepasst; Kommentar eingebbar beim Posten von Kämpfen in die SB
// @version 1.3.9 noch einen kleinen Fehler behoben: Fightlog-Suchseite funktionierte nicht mehr
// @version 1.3.8 noch einen kleinen Fehler behoben: Infos bei eintreffenden Kämpfen
// @version 1.3.7 kleine Fehler behoben; Skript für Madrid und Rio de Janeiro angepasst; Post in SB nur, wenn in Bande
// @version 1.3.6 Skript für New York, Paris, Marseille, Warschau und Krakau angepasst
// @version 1.3.5 zusätzliche Icons und Infos im Bandenprofil
// @version 1.3.4 kleiner Fehler: auf der Profilseite fehlten die zusätzlichen Icons; ACHTUNG !!! namespace geändert. Das Skript wird ein zweites Mal installiert! Die alte Version bitte löschen !!
// @version 1.3.3 kleinere Fehler behoben, Kampfstatistik getuned, ausgewichene Kämpfe in Kampfstatistik aufgeteilt; neue Option "nur Verlierer anzeigen" im Fightlog (sortierte Liste mit möglichen Gegnern)
// @version 1.3.2 Bisher wurden bei der Kampfstatistik nur die letzten 20 Kämpfe berücksichtigt. Jetzt werden alle noch zur Verfügung stehenden ausgewertet.
// @version 1.3.1 Cheaterliste wieder zum Laufen gebracht
// @version 1.2.8 Fehler Darstellung Cheaterliste korrigiert; Cheaterliste MU eingebaut
// @version 1.2.7 Fehler Darstellung pennerzone.de in HH korrigiert
// @version 1.2.6 Fehler SB-Posten korrigiert
// @version 1.2.5 Anpassungen für München
// @version 1.2.4 tinypic.com scheint ein Problem zu haben, Grafikhoster gewechselt; Handling von Userprofilen, die über Username statt ID aufgerufen werden, aktiviert
// @version 1.2.3 Fehler aufgrund der neuen Google-Ads behoben; einige kleinere Fehler behoben (Posten von Kämpfen von der Suchseite mit Kommentaren nicht möglich; falsches Handling bei einkommenden Angreifern ohne Bande)
// @version 1.2.2 Verbesserte Anzeige der Cheatertabelle bei langen Namen; verbesserte Fehlerbehandlung; Anzeige von Anzahl Sieg/Unentscheiden/Niederlagen/Ausgweichen im Tooltip; Aktualisierungsabfrage alle 2 Stunden
// @version 1.2.1 (Optionale) Anzeige der downfight.de-Cheaterliste! Eigenes Hinweis-Icon, wenn man schon gegen Gegner gekämpft hat; vorkonfigurierte Suchmöglichkeiten für Pennerzone; 36-Stunden-Anzeige jetzt in 99,9% der Fälle korrekt (bis auf KK-Ausweichen)
// @version 1.2.0 Fix falscher Tausenderpunkt; farbliche Markierung Angreifbarkeit (36 Stunden + Punktzahl); Layout SB-Einträge netter; mehrere Kämpfe knnen gleichzeitig gepostet werden; Fightinfo auf Profilen und auf pennerzone.de; Warnmarkierung
// @version 1.1.2 Posten von einkommenden Kämpfen in die SB; Layout straffer
// @version 1.1.1 Posten des aktuell ausgehenden Kampfs in die SB; Dateigrößen Icons kleiner --> schnelleres Laden; Posten Kampf: Bande wird zusätzlich angegeben
// @version 1.1.0 Möglichkeit, zu jedem Kampf einen Kommentar zu speichern; Kampf-Posten in die SB; Abruf mehrerer Seiten im Fightlog
// @version 1.0.1 Anpassung Suchstring pennerzone + besserer Updatemechanismus
// @version 1.0.0
// @version $Id: fightinfo.user.js 204 2020-03-22 20:30:44Z mkl $
// PG-Version ermitteln
var oldVersion=m=1;
if (oldV())
oldVersion = 0;
var fight = "";
var fightinfo = "";
var DB_URL = "";
var imagehoster = "012";
var NrOfCalls = GM_getValue("NrOfCalls", 0) % 10000000000 + 1;
GM_setValue("NrOfCalls", NrOfCalls);
//GM_setValue("expertMode", 1);
var expertMode = GM_getValue("expertMode", 0);
// Basis-URL für Kampficons
var FIGHTICONS_URL = "/img/pv4/dots/"
var DOWNFIGHTDE_DOWNFIGHTPAGE_URL = "http://www.downfight.de/?seite=downfight";
var DOWNFIGHTDE_HOCHFIGHTPAGE_URL = "http://www.downfight.de/?seite=hochfight";
var DOWNFIGHTDE_CHEATERPAGE_URL = "http://www.downfight.de/?seite=listebetrueger";
var DOWNFIGHTDE_LEGIONPAGE_URL = "http://www.downfight.de/?seite=toplegionaerelight";
var DOWNFIGHTDE_ARMEEPAGE_URL = "http://www.downfight.de/?seite=listesoldaten";
// URLs Warn-Icon
var ICON_WARNING = 'warning.gif';
// URLs für Icons
var imgPrefix = ['https://picr.eu/images/', 'https://s19.directupload.net/images/user/200322/', 'https://icons.joomla100.com/pg/'];
var ICON_ATTACK = 'HX26.png#cdvll3ig.png#attack.png'; // Icon für Angriff (attack.png)
var ICON_INFO = 'MQ7k.png#hk2hxaa8.png#info.png'; // Icon für Info (info.png)
var ICON_LASTFIGHT_NOCOMMENT = 'MCHF.gif#ku575mbb.gif#buchgrn.gif'; // Icon für letzte Kämpfe (noch kein Kampf) ohne Kommentar (buchgrn.gif)
var ICON_LASTFIGHT_COMMENT = 'Hu5Z.gif#66j4zf6t.gif#buchorange.gif'; // Icon für letzte Kämpfe (noch kein Kampf) mit Kommentar (buchorange.gif)
var ICON_LASTFIGHT_WARNING = 'HV30.gif#zlwgml8o.gif#buchrot.gif'; // Icon für letzte Kämpfe (noch kein Kampf) mit Warnung (buchrot.gif)
var ICON_LASTFIGHT_NONE = 'HUKa.gif#4amuqcwh.gif#buchschw.gif'; // Icon für letzte Kämpfe selbst (buchschw.gif)
var ICON_LASTFIGHT_NOCOMMENT_FIGHTED = 'Ha6S.png#tonst7wf.png#grn.png'; // Icon für letzte Kämpfe (schon mindestens ein Kampf) ohne Kommentar (grn.png)
var ICON_LASTFIGHT_COMMENT_FIGHTED = 'HlDV.gif#yfzss2vk.gif#gelb.gif'; // Icon für letzte Kämpfe (schon mindestens ein Kampf) mit Kommentar (gelb.gif)
var ICON_LASTFIGHT_WARNING_FIGHTED = 'H7LY.gif#9rheyafk.gif#rot.gif'; // Icon für letzte Kämpfe (schon mindestens ein Kampf) mit Warnung (rot.gif)
var ICON_PENNERZONE_MONEY = 'MHF4.gif#usxhyqr2.gif#dollar.gif'; // Icon für Pennerzone-Suche ohne Punktebeschränkung (dollar.gif)
var ICON_PENNERZONE_UP = 'MWAT.gif#dbj6r9t5.gif#pennerzoneup.gif'; // Icon für Pennerzone-Suche am oberen Punktespektrum (pennerzoneup.gif)
var ICON_PENNERZONE_DOWN = 'MMCE.gif#ztwy82kt.gif#pennerzonedown.gif'; // Icon für Pennerzone-Suche am unteren Punktespektrum (pennerzonedown.gif)
var ICON_PENNERZONE_DATE = 'M1Nu.gif#9t3afs8d.gif#pennerzone_date.gif'; // Icon für Pennerzone-Suche Festlegung von Start-Registrierungsdatum (pennerzone_date.gif)
var ICON_FIGHTCOMMENT = 'H6l3.gif#yzgj7j3h.gif#notizgelb.gif'; // (notizgelb.gif)
var ICON_NOFIGHTCOMMENT = 'HwOp.gif#iqipkgxf.gif#notizgrau.gif'; // (notizgrau.gif)
var ICON_SENDTOSB = 'MiQl.gif#psmxfsf9.gif#envelope.gif'; // (envelope.gif)
var ICON_ADDTOFT = 'Hj19.gif#ufy5hqlt.gif#grnadd.gif'; // Icon für Hinzufügen zur Kampftabelle (grnadd.gif)
var ICON_DELFROMFT = 'HP52.png#l4dsz9pf.png#userdel.png'; // Icon für Entfernen aus Kampftabelle (userdel.png)
var ICON_CHEATERDIA_NORMAL = 'Mk9I.png#e9d2zxdu.png#diagramm.png'; // (diagramm.png)
var ICON_CHEATERDIA_DOUBLE = 'MqX2.gif#5drei4x8.gif#diagramm.gif'; // (diagramm.gif)
var ICON_DIRECTATTACK = 'MDOJ.gif#cd3cbov7.gif#direktangriff.gif'; // Icon für Direktangriffslink (direktangriff.gif)
var ICON_NEW = 'MF7L.png#mkec8di7.png#new.png'; // Icon für "NEU" (new.png)
// Konstanten für die verschiedenen Modi des Postens in die SB
var SBPOSTMODE_ACTIVE = 0;
var SBPOSTMODE_DONE = 1;
var SBPOSTMODE_INCOMING = 2;
// Ersatz-Icons für die PG Kampfergebnis-Icons
var ICON_0_0 = 'HmK4.gif#hfrgtjiz.gif#0_0kopie.gif'; // (0_0kopie.gif)
var ICON_0_1 = 'HZtu.gif#wbzpo6ps.gif#0_1kopie.gif'; // (0_1kopie.gif)
var ICON_1_0 = 'HrDe.gif#vvdt9w4c.gif#1_0kopie.gif'; // (1_0kopie.gif)
var ICON_1_1 = 'HLrT.gif#yrc9ypnd.gif#1_1kopie.gif'; // (1_1kopie.gif)
var ICON_2_0 = 'Hc6F.gif#2qfbf62a.gif#2_0kopie.gif'; // (2_0kopie.gif)
var ICON_2_1 = 'HE0J.gif#n3aebplm.gif#2_1kopie.gif'; // (2_1kopie.gif)
var ICON_EVADE = 'HTzL.gif#73yp9jne.gif#evadekopie.gif'; // (evadekopie.gif)
// Landesflaggen
var flags = [];
flags[0] = 'M4XZ.png#wqeyh6xs.png#germany.png'; // (germany.png)
flags[1] = 'MzHS.png#6ch45t4a.png#United_States.png'; // (United_States.png)
flags[2] = 'M9e0.png#qqdwhhqh.png#poland.png'; // (poland.png)
flags[3] = 'MgYW.png#54lef2wc.png#france.png'; // (france.png)
flags[4] = 'MRoY.png#zk7jfqr3.png#spain.png'; // (spain.png)
flags[5] = 'Ms96.png#zxksa5t8.png#brazil.png'; // (brazil.png)
flags[6] = 'MyFa.png#spyltdfw.png#russia.png'; // (russia.png)
flags[7] = 'MIcV.png#5vqz9is9.png#united_kingdom.png'; // (united_kingdom.png)
// ***********************************************************************************************
// Stadt ermitteln und Variablen entsprechend setzen
// ***********************************************************************************************
var TZ = [];
TZ[0] = ".";
TZ[1] = ",";
TZ[2] = ".";
TZ[3] = ".";
TZ[4] = ".";
TZ[5] = ".";
TZ[6] = ".";
TZ[7] = ",";
var DZ = []; // Dezimal-Trennzeichen
DZ[0] = ',';
DZ[1] = '.';
DZ[2] = ',';
DZ[3] = ',';
DZ[4] = ',';
DZ[5] = ',';
DZ[6] = ',';
DZ[7] = '.';
var DS = []; // Datums-Trennzeichen
DS[0] = '.';
DS[1] = '/';
DS[2] = '.';
DS[3] = '.';
DS[4] = '.';
DS[5] = '.';
DS[6] = '.';
DS[7] = '.';
if (location.toString().indexOf("hamburg.pennerzone.de") != -1) {
var language = "de_DE";
var TOWNBASE_URL = "http://www.pennergame.de/";
}
else if (location.toString().indexOf("berlin.pennerzone.de") != -1) {
var language = "bl_DE";
var TOWNBASE_URL = "http://berlin.pennergame.de/";
}
else {
var language = document.getElementsByName("language")[0].content;
var metas = document.getElementsByTagName("meta");
for (i = 0; i< metas.length; i++)
if (metas[i].getAttribute('property') == "og:url") {
var TOWNBASE_URL = metas[i].content + "/";
break;
}
}
var attvalue = defvalue = fgtvalue = 0;
var FightVals = [];
var townname = '';
var ZONEBASE_URL = '';
var DFTownCode = '';
var DFTownCode2 = '';
var DFTownCode3 = '';
var lang = 0;
var TOWNEXTENSION = '';
var fightPause = 36; // Pause zwischen zwei Angriffen
var currency = "€"; // Euro-Zeichen
var currency1 = "";
var upperLimit = 1.5;
var lowerLimit = 0.8;
var showHistory = GM_getValue("ShowHistory", -1) * 2;
if (showHistory < 0) {
showHistory = 20;
GM_setValue("ShowHistory", 10);
}
if (!String.prototype.insert)
String.prototype.insert = function(idx, str) {
return this.substr(0, (idx<0?this.length:0) + idx) + str + this.substr(idx);
};
// Wenn in Berlin gespielt wird
if (language == 'bl_DE') {
townname = "Berlin";
// ZONEBASE_URL = 'http://berlin.pennerzone.de/';
TOWNEXTENSION = 'B';
DFTownCode = "B";
DFTownCode2 = language;
DFTownCode3 = "berlin";
// Wenn in München gespielt wird
} else if (language == 'mu_DE') {
townname = "München";
TOWNEXTENSION = 'MU';
DFTownCode = "M";
DFTownCode2 = language;
DFTownCode3 = "muenchen";
// Wenn in Köln gespielt wird
} else if (language == 'kl_DE') {
townname = "Köln";
TOWNEXTENSION = 'K';
DFTownCode = "K";
DFTownCode2 = language;
DFTownCode3 = "koeln";
fightPause = 24; // Pause zwischen zwei Angriffen
// Wenn in Sylt gespielt wird
} else if (language == 'sy_DE') {
townname = "Sylt";
TOWNEXTENSION = 'SY';
DFTownCode = "SY";
DFTownCode2 = language;
DFTownCode3 = "sylt";
// Wenn in Malle gespielt wird
} else if (language == 'ml_DE') {
townname = "Malle";
TOWNEXTENSION = 'PM';
DFTownCode = "SM";
DFTownCode2 = "s1_DE";
DFTownCode3 = "malle";
fightPause = 18; // Pause zwischen zwei Angriffen
// Wenn im Vatikan gespielt wird
} else if (language == 'vt_DE') {
townname = "Vatikan";
TOWNEXTENSION = 'VT';
DFTownCode = "VT";
DFTownCode2 = language;
DFTownCode3 = "vatikan";
// Wenn in Halloween gespielt wird
} else if (location.toString().indexOf("halloween") != -1) {
townname = "Hölloween";
TOWNEXTENSION = 'HW';
DFTownCode = "Grr";
fightPause = 12; // Pause zwischen zwei Angriffen
// Wenn in Pennersturm gespielt wird
} else if (language == 's6_DE') {
townname = "Pennersturm";
TOWNEXTENSION = 'OP';
DFTownCode = "SPE";
DFTownCode3 = "pennersturm";
fightPause = 12; // Pause zwischen zwei Angriffen
upperLimit = 2.5;
lowerLimit = 0.7;
// Wenn in Athen gespielt wird
} else if (language == 's7_DE') {
townname = "Athen";
TOWNEXTENSION = 'ATH';
fightPause = 12; // Pause zwischen zwei Angriffen
upperLimit = 2.5;
lowerLimit = 0.7;
// Wenn in Atlantis gespielt wird
} else if (language == 'at_DE') {
townname = "Atlantis";
TOWNEXTENSION = 'AT';
DFTownCode = "AT";
DFTownCode2 = language;
DFTownCode3 = "atlantis";
// Wenn in Hamburg gespielt wird
} else if (language == 'de_DE') {
townname = "Hamburg";
// ZONEBASE_URL = 'http://hamburg.pennerzone.de/';
TOWNEXTENSION = 'HH';
DFTownCode = "HH";
DFTownCode2 = language;
DFTownCode3 = "hamburg";
} else if (language == 'hr_DE') {
townname = "Hamburg reloaded";
TOWNEXTENSION = 'HR';
DFTownCode = "H2";
DFTownCode2 = language;
DFTownCode3 = "reloaded";
// Wenn in New York gespielt wird
} else if (language == 'us_EN') {
TOWNEXTENSION = 'NY';
lang = 1;
currency = '$';
// Wenn in Krakau gespielt wird
} else if (language == "kr_PL") {
TOWNEXTENSION = 'KR';
lang = 2;
currency = 'zl';
// Wenn in Warschau gespielt wird
} else if (language == "pl_PL" || language == "wr_PL") {
if (language == 'pl_PL')
TOWNEXTENSION = 'WA';
else {
TOWNEXTENSION = 'WR';
}
lang = 2;
currency = 'zl';
// Wenn in Marseille gespielt wird
} else if (language == "ma_FR") {
TOWNEXTENSION = 'MS';
lang = 3;
// Wenn in Paris gespielt wird
} else if (language == "fr_FR" || language == "cr_FR") {
if (language == 'fr_FR')
TOWNEXTENSION = 'PA';
else {
TOWNEXTENSION = 'PR';
}
lang = 3;
// Wenn in Buenos Aires gespielt wird
} else if (language == "ba_ES") {
TOWNEXTENSION = 'BA';
lang = 4;
currency = '$';
// Wenn in Madrid gespielt wird
} else if (language == "es_ES" || language == "er_ES") {
if (language == 'es_ES')
TOWNEXTENSION = 'MD';
else {
TOWNEXTENSION = 'MR';
}
lang = 4;
// Wenn in Sao Paolo gespielt wird
} else if (language == "sp_BR") {
TOWNEXTENSION = 'SP';
lang = 5;
// Wenn in Rio de Janeiro gespielt wird
} else if (language == "pt_BR") {
TOWNEXTENSION = 'RJ';
lang = 5;
// Wenn in Moskau gespielt wird
} else if (language == "ru_RU") {
TOWNEXTENSION = 'MO';
lang = 6;
currency1 = ' руб. ';
currency2 = ' коп.';
// Wenn in London gespielt wird
} else if (language == "en_EN") {
TOWNEXTENSION = 'LO';
lang = 7;
currency = '£';
}
var TXLEN = TOWNEXTENSION.length;
var keys = GM_listValues();
for (var i = 0; i < keys.length; i++) {
var val = keys[i];
if (val.substr(0,9) == "undefined" || val.substr(val.length-9) == "undefined" ||
(val.indexOf("LastUpdateCheck") != -1 && val != "LastUpdateCheckGF") ||
val.indexOf("ShowFightlist") != -1 || val.indexOf("ShowCheaterlist") != -1 ||
val.indexOf("ShowArmeelist") != -1 ||val.indexOf("ShowLegionlist") != -1)
GM_deleteValue(val);
else if (TXLEN > 0 && val.substr(val.length-TXLEN) == TOWNEXTENSION) {
var v = GM_getValue(TOWNEXTENSION+val.substr(0, val.length-TXLEN), "deadmeat");
if (v == "deadmeat")
PG_setValue(val.substr(0, val.length-TXLEN), GM_getValue(val));
GM_deleteValue(val);
}
else if (val.substr(0, TXLEN + 9) == TOWNEXTENSION + "FightStat") {
var v = GM_getValue(val, "/");
if (v == "" || typeof(v) != "string" || v.substr(0, 1) == "/")
GM_deleteValue(val);
}
}
var myLang = PG_getValue("myLang", lang); // Sprache laden
PG_setValue("myLang", myLang); // Sprache speichern
var tpos=TOWNBASE_URL.indexOf('//');
if (tpos == -1)
var TOWN_URL = TOWNBASE_URL;
else
var TOWN_URL = TOWNBASE_URL.substr(tpos+2)
var API_URL = TOWNBASE_URL + 'dev/api/user.';
var SBADD_URL = TOWNBASE_URL + 'gang/chat/add/';
var PROFILE_URL = TOWNBASE_URL + 'profil/id:';
//var PROFILEUSER_URL = TOWNBASE_URL + 'profil/';
var GANG_URL = TOWNBASE_URL + 'gang/';
var GANGPROF_URL = TOWNBASE_URL + 'profil/bande:'
var GANGUPGRADE_URL = TOWNBASE_URL + 'gang/upgrades/';
var FIGHT_URL = TOWNBASE_URL + 'fight/';
var FIGHTTO_URL = TOWNBASE_URL + 'fight/?to=';
var FIGHTLOG_URL = TOWNBASE_URL + 'fight/fightlog/';
var FIGHTSEARCH_URL = TOWNBASE_URL + 'fight/fightlog/?q=';
//var USERNAMEXML_URL = TOWNBASE_URL + 'dev/api/user.getname.xml?name=';
var PENNERZONEUSER_URL = ZONEBASE_URL + 'highscore/u';
var PENNERZONESEARCH_URL1 = ZONEBASE_URL + 'highscore/?page=1&points_min=';
var PENNERZONESEARCH_URL2 = '&points_max=';
var PENNERZONESEARCH_URL3 = '&gang=egal&action=Suchen.&city=0&name_type=contains&name_text=&sDay=';
var PENNERZONESEARCH_URL4 = '&sMonth=';
var PENNERZONESEARCH_URL5 = '&sYear=';
var PENNERZONESEARCH_URL6 = '&eDay=&eMonth=&eYear=';
// Ingame-Texte
var TxtAktion = [];
TxtAktion[0] = "Aktionen";
TxtAktion[1] = "Action";
TxtAktion[2] = "Akcje";
TxtAktion[3] = "Actions";
TxtAktion[4] = "Acciones";
TxtAktion[5] = "Ações";
TxtAktion[6] = "Действия";
TxtAktion[7] = "Activities";
var TxtPlatz = [];
TxtPlatz[0] = "Platzierung";
TxtPlatz[1] = "Place";
TxtPlatz[2] = "Pozycja";
TxtPlatz[3] = "Placement";
TxtPlatz[4] = "Posición";
TxtPlatz[5] = "Classificação";
TxtPlatz[6] = "Место";
TxtPlatz[7] = "Ranking";
var TxtPunkte = [];
TxtPunkte[0] = "Punkte";
TxtPunkte[1] = "Points";
TxtPunkte[2] = "Punktów";
TxtPunkte[3] = "Points";
TxtPunkte[4] = "Puntos";
TxtPunkte[5] = "Pontos";
TxtPunkte[6] = "очк.";
TxtPunkte[7] = "Points";
var TxtSeite = [];
TxtSeite[0] = "Seite";
TxtSeite[1] = "Page";
TxtSeite[2] = "strona";
TxtSeite[3] = "Page";
TxtSeite[4] = "Página";
TxtSeite[5] = "Página";
TxtSeite[6] = "Страница";
TxtSeite[7] = "Page";
var TxtIncFights = [];
TxtIncFights[0] = "Eintreffende Kämpfe";
TxtIncFights[1] = "Incoming fights";
TxtIncFights[2] = "Rozpoczęte walki";
TxtIncFights[3] = "Baston innatendue";
TxtIncFights[4] = "Luchas entrantes";
TxtIncFights[5] = "Lutas entrando";
TxtIncFights[6] = "Поступающие разборкиe";
TxtIncFights[7] = "Incoming fight";
var TxtRunAttack = [];
TxtRunAttack[0] = "Angriff läuft bereits auf";
TxtRunAttack[1] = "Already accumulated attacks";
TxtRunAttack[2] = "Atak już trwa";
TxtRunAttack[3] = "Attaque en cours";
TxtRunAttack[4] = "El ataque ya ha";
TxtRunAttack[5] = "O ataque já está";
TxtRunAttack[6] = "Атака уже пошла";
TxtRunAttack[7] = "Attack is underway";
var TxtZiel = [];
TxtZiel[0] = "Dein Ziel muss";
TxtZiel[1] = "Your intended victim must";
TxtZiel[2] = "Twój cel musi";
TxtZiel[3] = "Ta cible doit";
TxtZiel[4] = "Tu objetivo ha de ser";
TxtZiel[5] = "O seu objetivo deve";
TxtZiel[6] = "У твоей цели должно быть";
TxtZiel[7] = "Your target must";
var TxtAbility1 = [];
TxtAbility1[0] = 'Eine Fähigkeit wurde bereits aktiviert';
TxtAbility1[1] = 'An ability has already been activated';
TxtAbility1[2] = ' zdolności jest już rozpoczęte';
TxtAbility1[3] = 'Une habilite a été active';
TxtAbility1[4] = 'Te hemos activado una habilidad';
TxtAbility1[5] = 'An ability has already been activated'; // <--- dieser Text muss noch korrigiert werden
TxtAbility1[6] = 'Одна способность уже активирована';
TxtAbility1[7] = 'An ability has already been activated'; // !!!
var TxtBoost = [];
TxtBoost[0] = 'Stärkung:';
TxtBoost[1] = 'Strenth';
TxtBoost[2] = 'Wzmocnienie:';
TxtBoost[3] = 'Renforcement :';
TxtBoost[4] = 'Fortalecimiento:';
TxtBoost[5] = 'Força:';
TxtBoost[6] = 'Подкрепление:';
TxtBoost[7] = 'Strenth'; // !!!
var TxtLevel = [];
TxtLevel[0] = 'Stufe: ';
TxtLevel[1] = 'Level ';
TxtLevel[2] = 'stopień: ';
TxtLevel[3] = 'Niveau : ';
TxtLevel[4] = 'Nivel: ';
TxtLevel[5] = 'Grau: ';
TxtLevel[6] = 'Уровень: ';
TxtLevel[7] = 'Level: '; // !!!!
var TxtRage = [];
TxtRage[0] = 'Wutentfachung';
TxtRage[1] = 'Rage';
TxtRage[2] = 'Wzbudzanie złości';
TxtRage[3] = 'Rage';
TxtRage[4] = 'Enfurecimiento';
TxtRage[5] = 'Enraivecer';
TxtRage[6] = 'Разжигание ярости';
TxtRage[7] = 'Rage';
var TxtNoGangAbility = [];
TxtNoGangAbility[0] = "Du profitierst nicht";
TxtNoGangAbility[1] = "You don't profit";
TxtNoGangAbility[2] = "Nie zyskujesz na talentach";
TxtNoGangAbility[3] = "Vous n'en profitez pas";
TxtNoGangAbility[4] = "You don't profit"; // <--- dieser Text muss noch korrigiert werden
TxtNoGangAbility[5] = "You don't profit"; // <--- dieser Text muss noch korrigiert werden
TxtNoGangAbility[6] = "способности банды тебе не приносят пользу";
TxtNoGangAbility[7] = "You don't profit";
var KEYWORD_INGANG = [];
KEYWORD_INGANG[0] = 'Du bist in keiner Pennerbande';
KEYWORD_INGANG[1] = 'You are not in a Gang';
KEYWORD_INGANG[2] = 'Nie ma Cię w żadnej bandzie';
KEYWORD_INGANG[3] = "Tu n'es dans aucune bande";
KEYWORD_INGANG[4] = 'No perteneces a ninguna banda de mendigos';
KEYWORD_INGANG[5] = 'Você não está em nenhuma gangue';
KEYWORD_INGANG[6] = 'Ты не являешься участником никакой банды.';
KEYWORD_INGANG[7] = "You're not in a gang";
// sprachspezifische Ausgaben
var TxtGang = [];
TxtGang[0] = "Bande";
TxtGang[1] = "Gang";
TxtGang[2] = "Bandzie";
TxtGang[3] = "Bande";
TxtGang[4] = "Banda";
TxtGang[5] = "Gangue";
TxtGang[6] = "банды";
TxtGang[7] = "Gang";
var TxtNewVersion = [];
TxtNewVersion[0] = "Es gibt eine neue Version des Skriptes '%s':\n\n%s\n\nDie neue Version kann Fehlerbehebungen und/oder neue Funktionen beinhalten.\nHier gibt es weitere Infos über die neue Version:\n\n%s\n\nEine Aktualisierung ist empfehlenswert und kann direkt anschließend durchgeführt werden.\n\nHinweis: Die Überprüfung auf neue Versionen wird nur einmal pro Tag durchgeführt."
TxtNewVersion[1] = "There is a new version of the script '%s':\n\n%s\n\nThe new version can contain bugfixes and/or new features.\nHere you will find more information about the new version:\n\n%s\n\nAn update is recommended and can be done directly afterwards.\n\nNote: The check for new versions is only done once a day."
TxtNewVersion[2] = "There is a new version of the script '%s':\n\n%s\n\nThe new version can contain bugfixes and/or new features.\nHere you will find more information about the new version:\n\n%s\n\nAn update is recommended and can be done directly afterwards.\n\nNote: The check for new versions is only done once a day."
TxtNewVersion[3] = "There is a new version of the script '%s':\n\n%s\n\nThe new version can contain bugfixes and/or new features.\nHere you will find more information about the new version:\n\n%s\n\nAn update is recommended and can be done directly afterwards.\n\nNote: The check for new versions is only done once a day."
TxtNewVersion[4] = "There is a new version of the script '%s':\n\n%s\n\nThe new version can contain bugfixes and/or new features.\nHere you will find more information about the new version:\n\n%s\n\nAn update is recommended and can be done directly afterwards.\n\nNote: The check for new versions is only done once a day."
TxtNewVersion[5] = "There is a new version of the script '%s':\n\n%s\n\nThe new version can contain bugfixes and/or new features.\nHere you will find more information about the new version:\n\n%s\n\nAn update is recommended and can be done directly afterwards.\n\nNote: The check for new versions is only done once a day."
TxtNewVersion[6] = "Есть новая версия скрипта ‘%s’:\n\n%s\n\nВ новой версии могут быть улучшения или новые функции.\nЗдесь есть информации о скрипте:\n\n%s\n\nСоветуем инсталлировать.\n\nОпрос о новой версии только раз в день."
TxtNewVersion[7] = "There is a new version of the script '%s':\n\n%s\n\nThe new version can contain bugfixes and/or new features.\nHere you will find more information about the new version:\n\n%s\n\nAn update is recommended and can be done directly afterwards.\n\nNote: The check for new versions is only done once a day."
var TxtLang = [];
TxtLang[0] = "Sprache: deutsch";
TxtLang[1] = "Language: american";
TxtLang[2] = "Language: polish";
TxtLang[3] = "Langue: français";
TxtLang[4] = "Lengua: español";
TxtLang[5] = "Lingua: português";
TxtLang[6] = "язык: русский";
TxtLang[7] = "Language: english";
var fblikelocale = ["de_DE", "en_US", "pl_PL", "fr_FR", "es_ES", "pt_BR", "ru_RU", "en_GB"];
var TxtNurLoser = [];
TxtNurLoser[0] = "nur Verlierer anzeigen";
TxtNurLoser[1] = "only show losers";
TxtNurLoser[2] = "only show losers";
TxtNurLoser[3] = "Voir seulement des perdants";
TxtNurLoser[4] = "only show losers";
TxtNurLoser[5] = "only show losers";
TxtNurLoser[6] = "показать только проигрыши";
TxtNurLoser[7] = "only show losers";
var TxtPostFight = [];
TxtPostFight[0] = "Kampfwerte posten";
TxtPostFight[1] = "Post fight values";
TxtPostFight[2] = "Post fight values";
TxtPostFight[3] = "Poste les stats de combat";
TxtPostFight[4] = "Post fight values";
TxtPostFight[5] = "Post fight values";
TxtPostFight[6] = "поместить данные по бою";
TxtPostFight[7] = "Post fight values";
var TxtNoFight = [];
TxtNoFight[0] = ' noch keinen Kampf';
TxtNoFight[1] = ' no fight yet';
TxtNoFight[2] = ' no fight yet';
TxtNoFight[3] = ' pas des combats jusqu\'à maintenant';
TxtNoFight[4] = ' ninguna lucha hasta ahora';
TxtNoFight[5] = ' nenhuma luta até agora';
TxtNoFight[6] = ' no fight yet';
TxtNoFight[7] = ' no fight yet';
var Txt1Fight = [];
Txt1Fight[0] = ' 1 Kampf';
Txt1Fight[1] = ' 1 fight';
Txt1Fight[2] = ' 1 walk';
Txt1Fight[3] = ' 1 baston';
Txt1Fight[4] = ' 1 lucha';
Txt1Fight[5] = ' 1 luta';
Txt1Fight[6] = ' 1 бой';
Txt1Fight[7] = ' 1 fight';
var Txt2Fights = [];
Txt2Fights[0] = ' Kämpfe';
Txt2Fights[1] = ' fights';
Txt2Fights[2] = ' walki';
Txt2Fights[3] = ' bastons';
Txt2Fights[4] = ' luchas';
Txt2Fights[5] = ' luchas';
Txt2Fights[6] = ' разборки';
Txt2Fights[7] = ' fights';
var Txt1IncFight = [];
Txt1IncFight[0] = "1 eintreffender Kampf";
Txt1IncFight[1] = "1 incoming fight";
Txt1IncFight[2] = "1 rozpoczęte walk";
Txt1IncFight[3] = "1 baston inattendu";
Txt1IncFight[4] = "1 lucha entrante";
Txt1IncFight[5] = "1 luta entrando";
Txt1IncFight[6] = "1 входящий бой";
Txt1IncFight[7] = "1 incoming fight";
var Txt2IncFights = [];
Txt2IncFights[0] = " eintreffende Kämpfe";
Txt2IncFights[1] = " incoming fights";
Txt2IncFights[2] = " rozpoczęte walki";
Txt2IncFights[3] = " bastons inattendus";
Txt2IncFights[4] = " luchas entrantes";
Txt2IncFights[5] = " lutas entrando";
Txt2IncFights[6] = " Поступающие разборки";
Txt2IncFights[7] = " incoming fights";
var TxtNoGang = [];
TxtNoGang[0] = "-keine Bande-";
TxtNoGang[1] = "-no gang-";
TxtNoGang[2] = "-no gang-";
TxtNoGang[3] = "-pas de bande-";
TxtNoGang[4] = "-ninguna banda-";
TxtNoGang[5] = "-nenhuma gangue-";
TxtNoGang[6] = "-Поступающие разборки-";
TxtNoGang[7] = "-no gang-";
var TxtUserPoints = [];
TxtUserPoints[0] = '%s hat aktuell %s Punkte.';
TxtUserPoints[1] = '%s has %s points at the moment.';
TxtUserPoints[2] = '%s has %s points at the moment.';
TxtUserPoints[3] = '%s a %s points à ce moment.';
TxtUserPoints[4] = '%s has %s points at the moment.';
TxtUserPoints[5] = '%s has %s points at the moment.';
TxtUserPoints[6] = 'У %s %s очк.';
TxtUserPoints[7] = '%s has %s points at the moment.';
var TxtWaitAttack = [];
TxtWaitAttack[0] = 'noch %sh bis zum nächsten Angriff';
TxtWaitAttack[1] = 'still %sh till your next attack';
TxtWaitAttack[2] = 'still %sh till your next attack';
TxtWaitAttack[3] = 'attende %sh avant ta prochaine attaque';
TxtWaitAttack[4] = 'still %sh till your next attack';
TxtWaitAttack[5] = 'still %sh till your next attack';
TxtWaitAttack[6] = 'ешё %sh до следующего боя';
TxtWaitAttack[7] = 'still %sh till your next attack';
var TxtFightCom = [];
TxtFightCom[0] = 'Bitte Kommentar zu diesem Post eingeben:';
TxtFightCom[1] = 'Please enter a comment for this posting:';
TxtFightCom[2] = 'Please enter a comment for this posting:';
TxtFightCom[3] = "S'il vous plaÉt entre un commentaire pour ce post:";
TxtFightCom[4] = 'Please enter a comment for this posting:';
TxtFightCom[5] = 'Please enter a comment for this posting:';
TxtFightCom[6] = 'Введите комментарий:';
TxtFightCom[7] = 'Please enter a comment for this posting:';
var TxtAttack = [];
TxtAttack[0] = 'Angriff läuft bereits auf';
TxtAttack[1] = 'Attack already started at';
TxtAttack[2] = 'Attack already started at';
TxtAttack[3] = 'Attaque déja commence à';
TxtAttack[4] = 'Attack already started at';
TxtAttack[5] = 'Attack already started at';
TxtAttack[6] = 'Бой уже идёт против';
TxtAttack[7] = 'Attack already started at';
var TxtFight = [];
TxtFight[0] = 'Der Kampf wurde';
TxtFight[1] = 'The fight was';
TxtFight[2] = 'The fight was';
TxtFight[3] = 'Le combat a été';
TxtFight[4] = 'The fight was';
TxtFight[5] = 'The fight was';
TxtFight[6] = 'Бой был послан';
TxtFight[7] = 'The fight was';
var TxtFights = [];
TxtFights[0] = 'Die Kämpfe wurden';
TxtFights[1] = 'The fights were';
TxtFights[2] = 'The fights were';
TxtFights[3] = 'Les combats ont été';
TxtFights[4] = 'The fights were';
TxtFights[5] = 'The fights were';
TxtFights[6] = 'Бои были посланы';
TxtFights[7] = 'The fights were';
var TxtAttackPost = [];
TxtAttackPost[0] = ' in die Shoutbox gepostet!';
TxtAttackPost[1] = ' posted into the shoutbox!';
TxtAttackPost[2] = ' posted into the shoutbox!';
TxtAttackPost[3] = ' posté dans le chat de bande!';
TxtAttackPost[4] = ' posted into the shoutbox!';
TxtAttackPost[5] = ' posted into the shoutbox!';
TxtAttackPost[6] = ' в шаутбокс.!';
TxtAttackPost[7] = ' posted into the shoutbox!';
var TxtFightVals = [];
TxtFightVals[0] = 'Mein Kampfwert: ';
TxtFightVals[1] = 'My fight value: ';
TxtFightVals[2] = 'My fight value: ';
TxtFightVals[3] = 'Mes stats de combat: ';
TxtFightVals[4] = 'My fight value: ';
TxtFightVals[5] = 'My fight value: ';
TxtFightVals[6] = 'Мои данные по бою: ';
TxtFightVals[7] = 'My fight value: ';
var TxtPostPreMsg = [];
TxtPostPreMsg[0] = 'Eingehender Kampf:\n\n';
TxtPostPreMsg[1] = 'Incoming fight:\n\n';
TxtPostPreMsg[2] = 'Rozpoczęte walk:\n\n';
TxtPostPreMsg[3] = 'Baston inattendu:\n\n';
TxtPostPreMsg[4] = 'lucha entrante:\n\n';
TxtPostPreMsg[5] = 'luta entrando:\n\n';
TxtPostPreMsg[6] = 'Входящий бой:\n\n';
TxtPostPreMsg[7] = 'Incoming fight:\n\n';
var TxtPostPreMsg2 = [];
TxtPostPreMsg2[0] = 'Eingehende Kämpfe:\n\n';
TxtPostPreMsg2[1] = 'Incoming fights:\n\n';
TxtPostPreMsg2[2] = 'Rozpoczęte walki:\n\n';
TxtPostPreMsg2[3] = 'Bastons inattendus:\n\n';
TxtPostPreMsg2[4] = 'Luchas entrantes:\n\n';
TxtPostPreMsg2[5] = 'Lutas entrando:\n\n';
TxtPostPreMsg2[6] = 'Входящие бои:\n\n';
TxtPostPreMsg2[7] = 'Incoming fights:\n\n';
var TxtCheckFights = [];
TxtCheckFights[0] = 'Bitte die Kämpfe, die gepostet werden sollen, durch Ankreuzen auswählen!';
TxtCheckFights[1] = 'Please check the fights you want to post into the shoutbox!';
TxtCheckFights[2] = 'Please check the fights you want to post into the shoutbox!';
TxtCheckFights[3] = "S'il vous plaÉt cochez les combats que vous voulez poster dans le chat de bande!";
TxtCheckFights[4] = 'Please check the fights you want to post into the shoutbox!';
TxtCheckFights[5] = 'Please check the fights you want to post into the shoutbox!';
TxtCheckFights[6] = 'Пожалуйста, бои, которые должны быть посланы, пометьте крестиком!';
TxtCheckFights[7] = 'Please check the fights you want to post into the shoutbox!';
var TxtPostTitle = [];
TxtPostTitle[0] = 'Daten der markierten Kämpfe in die Shoutbox posten.';
TxtPostTitle[1] = 'Post data of the checked fights into the shoutbox.';
TxtPostTitle[2] = 'Post data of the checked fights into the shoutbox.';
TxtPostTitle[3] = 'Poster les données des combats cochés dans le chat de bande.';
TxtPostTitle[4] = 'Post data of the checked fights into the shoutbox.';
TxtPostTitle[5] = 'Post data of the checked fights into the shoutbox.';
TxtPostTitle[6] = 'Данные помеченных боёв послать в шаутбокс.';
TxtPostTitle[7] = 'Post data of the checked fights into the shoutbox.';
var TxtPostTitle2 = [];
TxtPostTitle2[0] = 'Daten des Kampfes gegen %s in die Shoutbox posten.';
TxtPostTitle2[1] = 'Post data of the fight against %s into the shoutbox.';
TxtPostTitle2[2] = 'Post data of the fight against %s into the shoutbox.';
TxtPostTitle2[3] = 'Poster les données du combat contre %s dans le chat de bande.';
TxtPostTitle2[4] = 'Post data of the fight against %s into the shoutbox.';
TxtPostTitle2[5] = 'Post data of the fight against %s into the shoutbox.';
TxtPostTitle2[6] = 'Бой против %s послать в шаутбокс.';
TxtPostTitle2[7] = 'Post data of the fight against %s into the shoutbox.';
var TxtAllFights = [];
TxtAllFights[0] = 'Alle Kämpfe anzeigen';
TxtAllFights[1] = 'Display all fights';
TxtAllFights[2] = 'Display all fights';
TxtAllFights[3] = 'Voir tous les combats';
TxtAllFights[4] = 'Display all fights';
TxtAllFights[5] = 'Display all fights';
TxtAllFights[6] = 'Все бои показать';
TxtAllFights[7] = 'Display all fights';
var TxtUpToPage = [];
TxtUpToPage[0] = 'bis Seite';
TxtUpToPage[1] = 'up to page';
TxtUpToPage[2] = 'up to page';
TxtUpToPage[3] = "jusqu'à la page";
TxtUpToPage[4] = 'up to page';
TxtUpToPage[5] = 'up to page';
TxtUpToPage[6] = 'до страницы';
TxtUpToPage[7] = 'up to page';
var TxtShowBBCode = [];
TxtShowBBCode[0] = 'BBCode anzeigen';
TxtShowBBCode[1] = 'show BBCode';
TxtShowBBCode[2] = 'show BBCode';
TxtShowBBCode[3] = 'voir le BBCode';
TxtShowBBCode[4] = 'show BBCode';
TxtShowBBCode[5] = 'show BBCode';
TxtShowBBCode[6] = 'показать BB-код';
TxtShowBBCode[7] = 'show BBCode';
var TxtBBCodeLen = [];
TxtBBCodeLen[0] = 'Länge: %d Zeichen';
TxtBBCodeLen[1] = 'length: %d chars';
TxtBBCodeLen[2] = 'length: %d chars';
TxtBBCodeLen[3] = 'taille: %d characteres';
TxtBBCodeLen[4] = 'length: %d chars';
TxtBBCodeLen[5] = 'length: %d chars';
TxtBBCodeLen[6] = 'Длина: %s знак';
TxtBBCodeLen[7] = 'length: %d chars';
var TxtMyFav = [];
TxtMyFav[0] = 'Meine beliebtesten Gegner';
TxtMyFav[1] = 'My favourite victims';
TxtMyFav[2] = 'My favourite opponents';
TxtMyFav[3] = 'Mes plus aimées adversaires';
TxtMyFav[4] = 'My favourite opponents';
TxtMyFav[5] = 'My favourite opponents';
TxtMyFav[6] = 'Мои любимые противники';
TxtMyFav[7] = 'My favourite opponents';
var TxtFightList = [];
TxtFightList[0] = 'Kampfliste';
TxtFightList[1] = 'Fightlist';
TxtFightList[2] = 'Fightlist';
TxtFightList[3] = 'Liste des combats';
TxtFightList[4] = 'Fightlist';
TxtFightList[5] = 'Fightlist';
TxtFightList[6] = 'показать список боёв';
TxtFightList[7] = 'Fightlist';
var TxtShowFTList = [];
TxtShowFTList[0] = 'Kampfliste anzeigen';
TxtShowFTList[1] = 'show fightlist';
TxtShowFTList[2] = 'show fightlist';
TxtShowFTList[3] = 'voir la liste des combats';
TxtShowFTList[4] = 'show fightlist';
TxtShowFTList[5] = 'show fightlist';
TxtShowFTList[6] = 'показать список боёв';
TxtShowFTList[7] = 'show fightlist';
var TxtAddToFT = [];
TxtAddToFT[0] = 'Neuen Eintrag hinzufügen';
TxtAddToFT[1] = 'Add a new entry';
TxtAddToFT[2] = 'Add a new entry';
TxtAddToFT[3] = 'ajouter une entrée';
TxtAddToFT[4] = 'Add a new entry';
TxtAddToFT[5] = 'Add a new entry';
TxtAddToFT[6] = 'добавить новую запись';
TxtAddToFT[7] = 'Add a new entry';
var TxtAddUserToFT = [];
TxtAddUserToFT[0] = '%s zur Kampfliste hinzufügen';
TxtAddUserToFT[1] = 'Add %s to fight list';
TxtAddUserToFT[2] = 'Add %s to fight list';
TxtAddUserToFT[3] = 'Ajouter %s à la liste des combats';
TxtAddUserToFT[4] = 'Add %s to fight list';
TxtAddUserToFT[5] = 'Add %s to fight list';
TxtAddUserToFT[6] = '%s добавить в список боёв';
TxtAddUserToFT[7] = 'Add %s to fight list';
var TxtDelFromFT = [];
TxtDelFromFT[0] = 'Entfernen aus Kampfliste';
TxtDelFromFT[1] = 'Remove from fightlist';
TxtDelFromFT[2] = 'Remove from fightlist';
TxtDelFromFT[3] = 'Éliminer de la liste des combats';
TxtDelFromFT[4] = 'Remove from fightlist';
TxtDelFromFT[5] = 'Remove from fightlist';
TxtDelFromFT[6] = 'Удалить из списка боёв';
TxtDelFromFT[7] = 'Remove from fightlist';
var TxtAddMarkedToFT = [];
TxtAddMarkedToFT[0] = 'Markierte Einträge zur Kampfliste hinzufügen';
TxtAddMarkedToFT[1] = 'Add marked entries to fightlist';
TxtAddMarkedToFT[2] = 'Add marked entries to fightlist';
TxtAddMarkedToFT[3] = 'Ajouter les entrées cochés à la liste des combats';
TxtAddMarkedToFT[4] = 'Add marked entries to fightlist';
TxtAddMarkedToFT[5] = 'Add marked entries to fightlist';
TxtAddMarkedToFT[6] = 'Помеченные записи добавить в список боёв';
TxtAddMarkedToFT[7] = 'Add marked entries to fightlist';
var TxtAdded1ToFT = [];
TxtAdded1ToFT[0] = 'Es wurde 1 Eintrag zur Kampfliste hinzugefügt';
TxtAdded1ToFT[1] = '1 entry added to the fightlist';
TxtAdded1ToFT[2] = '1 entry added to the fightlist';
TxtAdded1ToFT[3] = '1 entrée est ajouté à la liste des combats';
TxtAdded1ToFT[4] = '1 entry added to the fightlist';
TxtAdded1ToFT[5] = '1 entry added to the fightlist';
TxtAdded1ToFT[6] = '1 запись была добавлена в список боёв';
TxtAdded1ToFT[7] = '1 entry added to the fightlist';
var TxtAddedToFT = [];
TxtAddedToFT[0] = 'Es wurden %s Einträge zur Kampfliste hinzugefügt';
TxtAddedToFT[1] = '%s entries added to the fightlist';
TxtAddedToFT[2] = '%s entries added to the fightlist';
TxtAddedToFT[3] = '%s entrées ont ajouté à la liste des combats';
TxtAddedToFT[4] = '%s entries added to the fightlist';
TxtAddedToFT[5] = '%s entries added to the fightlist';
TxtAddedToFT[6] = '%s запис. были добавлены в список боёв';
TxtAddedToFT[7] = '%s entries added to the fightlist';
var TxtNoAddedToFT = [];
TxtNoAddedToFT[0] = 'Alle Einträge waren bereits in der Kampfliste enthalten';
TxtNoAddedToFT[1] = 'No entries were added to the fightlist';
TxtNoAddedToFT[2] = 'No entries were added to the fightlist';
TxtNoAddedToFT[3] = 'Pas des entrées ont ajouté à la liste des combats';
TxtNoAddedToFT[4] = 'No entries were added to the fightlist';
TxtNoAddedToFT[5] = 'No entries were added to the fightlist';
TxtNoAddedToFT[6] = 'Все записи были уже добавлены в список боёв';
TxtNoAddedToFT[7] = 'No entries were added to the fightlist';
var TxtCheckBums = [];
TxtCheckBums[0] = 'Bitte die Penner, die hinzugefügt werden sollen, durch Ankreuzen auswählen!';
TxtCheckBums[1] = 'Please check the fights to be added to the fightlist!';
TxtCheckBums[2] = 'Please check the fights to be added to the fightlist!';
TxtCheckBums[3] = "S'il vous plaÉt cochez les combats pour ajouter à la liste des combats!";
TxtCheckBums[4] = 'Please check the fights to be added to the fightlist!';
TxtCheckBums[5] = 'Please check the fights to be added to the fightlist!';
TxtCheckBums[6] = 'Бомжей, которых нужно добавить, пометьте крестиком!';
TxtCheckBums[7] = 'Please check the fights to be added to the fightlist!';
var TxtAdd1ToFT = [];
TxtAdd1ToFT[0] = 'Penner wurde zur Kampfliste hinzugefügt!';
TxtAdd1ToFT[1] = 'User added to fightlist !';
TxtAdd1ToFT[2] = 'User added to fightlist !';
TxtAdd1ToFT[3] = 'Joueur ajouté à la liste des combats !';
TxtAdd1ToFT[4] = 'User added to fightlist !';
TxtAdd1ToFT[5] = 'User added to fightlist !';
TxtAdd1ToFT[6] = 'Бомжи были добавлены в список боёв.';
TxtAdd1ToFT[7] = 'User added to fightlist !';
var TxtNoAddToFT = [];
TxtNoAddToFT[0] = 'Penner schon vorhanden !';
TxtNoAddToFT[1] = 'User already in fightlist !';
TxtNoAddToFT[2] = 'User already in fightlist !';
TxtNoAddToFT[3] = 'Joueur déja existant !';
TxtNoAddToFT[4] = 'User already in fightlist !';
TxtNoAddToFT[5] = 'User already in fightlist !';
TxtNoAddToFT[6] = 'Бомж уже имеется !';
TxtNoAddToFT[7] = 'User already in fightlist !';
var TxtNewIDs = [];
TxtNewIDs[0] = 'Neuen Penner hinzufügen:';
TxtNewIDs[1] = 'Enter new bum: ';
TxtNewIDs[2] = 'Enter new bum: ';
TxtNewIDs[3] = 'Entréz nouveau joueur svp: ';
TxtNewIDs[4] = 'Enter new bum: ';
TxtNewIDs[5] = 'Enter new bum: ';
TxtNewIDs[6] = 'Нового бомжа добавить: ';
TxtNewIDs[7] = 'Enter new dosser: ';
var TxtAddAllToFT = [];
TxtAddAllToFT[0] = 'alle zur Kampfliste hinzufügen';
TxtAddAllToFT[1] = 'add all members to the fightlist';
TxtAddAllToFT[2] = 'add all members to the fightlist';
TxtAddAllToFT[3] = 'add all members to the fightlist';
TxtAddAllToFT[4] = 'add all members to the fightlist';
TxtAddAllToFT[5] = 'add all members to the fightlist';
TxtAddAllToFT[6] = 'add all members to the fightlist';
TxtAddAllToFT[7] = 'add all members to the fightlist';
var TxtRemoveAllFromFT = [];
TxtRemoveAllFromFT[0] = 'alle aus Kampfliste entfernen';
TxtRemoveAllFromFT[1] = 'remove all members from the fightlist';
TxtRemoveAllFromFT[2] = 'remove all members from the fightlist';
TxtRemoveAllFromFT[3] = 'remove all members from the fightlist';
TxtRemoveAllFromFT[4] = 'remove all members from the fightlist';
TxtRemoveAllFromFT[5] = 'remove all members from the fightlist';
TxtRemoveAllFromFT[6] = 'remove all members from the fightlist';
TxtRemoveAllFromFT[7] = 'remove all members from the fightlist';
var TxtRemoved1FromFT = [];
TxtRemoved1FromFT[0] = 'Es wurde 1 Penner aus der Kampfliste entfernt';
TxtRemoved1FromFT[1] = '1 entry removed from the fightlist';
TxtRemoved1FromFT[2] = '1 entry removed from the fightlist';
TxtRemoved1FromFT[3] = '1 entry removed from the fightlist';
TxtRemoved1FromFT[4] = '1 entry removed from the fightlist';
TxtRemoved1FromFT[5] = '1 entry removed from the fightlist';
TxtRemoved1FromFT[6] = '1 entry removed from the fightlist';
TxtRemoved1FromFT[7] = '1 entry removed from the fightlist';
var TxtRemovedFromFT = [];
TxtRemovedFromFT[0] = 'Es wurden %s Einträge aus der Kampfliste entfernt';
TxtRemovedFromFT[1] = '%s entries removed from the fightlist';
TxtRemovedFromFT[2] = '%s entries removed from the fightlist';
TxtRemovedFromFT[3] = '%s entries removed from the fightlist';
TxtRemovedFromFT[4] = '%s entries removed from the fightlist';
TxtRemovedFromFT[5] = '%s entries removed from the fightlist';
TxtRemovedFromFT[6] = '%s entries removed from the fightlist';
TxtRemovedFromFT[7] = '%s entries removed from the fightlist';
var TxtNoRemovedFromFT = [];
TxtNoRemovedFromFT[0] = 'Keiner der Penner war in der Kampfliste enthalten';
TxtNoRemovedFromFT[1] = 'No entries were removed from the fightlist';
TxtNoRemovedFromFT[2] = 'No entries were removed from the fightlist';
TxtNoRemovedFromFT[3] = 'No entries were removed from the fightlist';
TxtNoRemovedFromFT[4] = 'No entries were removed from the fightlist';
TxtNoRemovedFromFT[5] = 'No entries were removed from the fightlist';
TxtNoRemovedFromFT[6] = 'No entries were removed from the fightlist';
TxtNoRemovedFromFT[7] = 'No entries were removed from the fightlist';
var TxtAllFightsGang = [];
TxtAllFightsGang[0] = 'alle Kämpfe mit dieser Bande';
TxtAllFightsGang[1] = 'all fights with this gang';
TxtAllFightsGang[2] = 'all fights with this gang';
TxtAllFightsGang[3] = 'all fights with this gang';
TxtAllFightsGang[4] = 'all fights with this gang';
TxtAllFightsGang[5] = 'all fights with this gang';
TxtAllFightsGang[6] = 'all fights with this gang';
TxtAllFightsGang[7] = 'all fights with this gang';
var tableIDlow = [];
tableIDlow[0] = "downfight";
tableIDlow[1] = "hochfight";
tableIDlow[2] = "cheater";
tableIDlow[3] = "legion";
tableIDlow[4] = "armee";
var tableIDs = [];
tableIDs[0] = "fghtlist";
tableIDs[1] = "dnftlist";
tableIDs[2] = "upftlist";
tableIDs[3] = "fakelist";
tableIDs[4] = "legilist";
tableIDs[5] = "armylist";
var tableNames = [];
tableNames[0] = "Downfighter";
tableNames[1] = "Hochfighter";
tableNames[2] = "Cheater";
tableNames[3] = "Legionäre";
tableNames[4] = "Soldaten";
var tableList = [];
tableList[0] = "Downfight";
tableList[1] = "Hochfight";
tableList[2] = "Cheater";
tableList[3] = "Legionärs";
tableList[4] = "Freiheitskämpfer";
var DFurl = [];
DFurl[0] = DOWNFIGHTDE_DOWNFIGHTPAGE_URL;
DFurl[1] = DOWNFIGHTDE_HOCHFIGHTPAGE_URL;
DFurl[2] = DOWNFIGHTDE_CHEATERPAGE_URL;
DFurl[3] = DOWNFIGHTDE_LEGIONPAGE_URL;
DFurl[4] = DOWNFIGHTDE_ARMEEPAGE_URL;
var head1 = []; // Username
head1[0] = "Downfighter";
head1[1] = "Hochfighter";
head1[2] = "Cheater";
head1[3] = "Legionär";
head1[4] = "Soldat";
var head2 = []; // Zeit/Kills
head2[0] = "Dauer";
head2[1] = "Dauer";
head2[2] = "Zeit";
head2[3] = "Kills";
head2[4] = "Kills";
var colors = []; // Farbcodes
colors[0] = '#FF6666'; // nicht angreifbar
colors[1] = '#3366FF'; // angreifbar, aber man selbst ist nicht angreifbar
colors[2] = 'lime'; // angreifbar, weniger Punkte
colors[3] = 'green'; // angreifbar, gleiche Punkte
colors[4] = 'green'; // angreifbar, mehr Punkte
colors[5] = '#FFFF33'; // nicht angreifbar, aber man selbst ist angreifbar
colors[6] = '#FF6666'; // nicht angreifbar, da selbst
var TxtColor = [];
TxtColor[0] = [];
TxtColor[0][0] = 'Diesen Gegner kannst Du nicht angreifen und er kann Dich nicht angreifen';
TxtColor[0][1] = 'You cannot attack this player and he cannot attack you';
TxtColor[0][2] = 'You cannot attack this player and he cannot attack you';
TxtColor[0][3] = 'You cannot attack this player and he cannot attack you';
TxtColor[0][4] = 'You cannot attack this player and he cannot attack you';
TxtColor[0][5] = 'You cannot attack this player and he cannot attack you';
TxtColor[0][6] = 'You cannot attack this player and he cannot attack you';
TxtColor[0][7] = 'You cannot attack this player and he cannot attack you';
TxtColor[1] = [];
TxtColor[1][0] = 'Diesen Gegner kannst Du angreifen, aber er kann Dich nicht angreifen';
TxtColor[1][1] = 'You can attack this player, but he cannot attack you';
TxtColor[1][2] = 'You can attack this player, but he cannot attack you';
TxtColor[1][3] = 'You can attack this player, but he cannot attack you';
TxtColor[1][4] = 'You can attack this player, but he cannot attack you';
TxtColor[1][5] = 'You can attack this player, but he cannot attack you';
TxtColor[1][6] = 'You can attack this player, but he cannot attack you';
TxtColor[1][7] = 'You can attack this player, but he cannot attack you';
TxtColor[2] = [];
TxtColor[2][0] = 'Diesen Gegner kannst Du angreifen und er kann Dich angreifen, aber Du hast mehr Punkte';
TxtColor[2][1] = 'You can attack this player and he can attack you, but you have more points';
TxtColor[2][2] = 'You can attack this player and he can attack you, but you have more points';
TxtColor[2][3] = 'You can attack this player and he can attack you, but you have more points';
TxtColor[2][4] = 'You can attack this player and he can attack you, but you have more points';
TxtColor[2][5] = 'You can attack this player and he can attack you, but you have more points';
TxtColor[2][6] = 'You can attack this player and he can attack you, but you have more points';
TxtColor[2][7] = 'You can attack this player and he can attack you, but you have more points';
TxtColor[3] = [];
TxtColor[3][0] = 'Diesen Gegner kannst Du angreifen und er kann Dich angreifen und ihr habt gleich viele Punkte';
TxtColor[3][1] = 'You can attack this player and he can attack you and you both have the same amount of points';
TxtColor[3][2] = 'You can attack this player and he can attack you and you both have the same amount of points';
TxtColor[3][3] = 'You can attack this player and he can attack you and you both have the same amount of points';
TxtColor[3][4] = 'You can attack this player and he can attack you and you both have the same amount of points';
TxtColor[3][5] = 'You can attack this player and he can attack you and you both have the same amount of points';
TxtColor[3][6] = 'You can attack this player and he can attack you and you both have the same amount of points';
TxtColor[3][7] = 'You can attack this player and he can attack you and you both have the same amount of points';
TxtColor[4] = [];
TxtColor[4][0] = 'Diesen Gegner kannst Du angreifen und er kann Dich angreifen, aber Du hast weniger Punkte';
TxtColor[4][1] = 'You can attack this player and he can attack you, but you have less points';
TxtColor[4][2] = 'You can attack this player and he can attack you, but you have less points';
TxtColor[4][3] = 'You can attack this player and he can attack you, but you have less points';
TxtColor[4][4] = 'You can attack this player and he can attack you, but you have less points';
TxtColor[4][5] = 'You can attack this player and he can attack you, but you have less points';
TxtColor[4][6] = 'You can attack this player and he can attack you, but you have less points';
TxtColor[4][7] = 'You can attack this player and he can attack you, but you have less points';
TxtColor[5] = [];
TxtColor[5][0] = 'Diesen Gegner kannst Du nicht angreifen, aber er kann Dich angreifen';
TxtColor[5][1] = 'You cannot attack this player, but he can attack you';
TxtColor[5][2] = 'You cannot attack this player, but he can attack you';
TxtColor[5][3] = 'You cannot attack this player, but he can attack you';
TxtColor[5][4] = 'You cannot attack this player, but he can attack you';
TxtColor[5][5] = 'You cannot attack this player, but he can attack you';
TxtColor[5][6] = 'You cannot attack this player, but he can attack you';
TxtColor[5][7] = 'You cannot attack this player, but he can attack you';
TxtColor[6] = [];
TxtColor[6][0] = 'Du kannst Dich nicht selbst angreifen !!';
TxtColor[6][1] = 'You cannot attack yourself !!';
TxtColor[6][2] = 'You cannot attack yourself !!';
TxtColor[6][3] = 'You cannot attack yourself !!';
TxtColor[6][4] = 'You cannot attack yourself !!';
TxtColor[6][5] = 'You cannot attack yourself !!';
TxtColor[6][6] = 'You cannot attack yourself !!';
TxtColor[6][7] = 'You cannot attack yourself !!';
var nrOfCachedUsers = 0;
var CachedUsers = []; // gespeicherte Userids
var CachedStats = []; // gespeicherte Statistiken
var CachedPoints = []; // gespeicherte Punkte
var CachedFights = []; // gespeicherte Kämpfe
var CachedWaitText = []; // gespeicherte Angreifbarkeitstexte
var usernames = []; // gespeicherte Usernamen
var userhistory = []; // gespeicherte Punktehistory
var userpts = []; // gespeicherte Userpunkte
var compress = false;
var hasCaptcha = true;
var fltable;
var fightVals = "";
var counter = 0;
function xor(a, b){return a==""?a:String.fromCharCode(b^a.charCodeAt(0)) + xor(a.substr(1),b);}
function j(c){return c==""?c:"U"+c.slice(0,2)+j(c.slice(2))};
function k(c){return trimString(GM_info.scriptMetaStr.split("// @"+c)[1].split("\n")[0])};
// **********************************************************************************
// **********************************************************************************
// Funktion setzt eine Variable in Relation zur Stadt
// **********************************************************************************
// **********************************************************************************
function PG_setValue(varname, val) {
GM_setValue(TOWNEXTENSION + varname, val);
}
// **********************************************************************************
// **********************************************************************************
// Funktion setzt eine Variable in Relation zu Stadt und user
// **********************************************************************************
// **********************************************************************************
function PGu_setValue(varname, val) {
PG_setValue(varname + m_ownuserid, val);
}
// **********************************************************************************
// **********************************************************************************
// Holen einer Variablen aus alten Versionen
// **********************************************************************************
// **********************************************************************************
function PG_getValue(varname, deflt) {
var vold = "";
var v = GM_getValue(TOWNEXTENSION + varname, "deadmeat");
if (v == "deadmeat") {
if (varname.substr(0, 12) == 'FightComment' || varname.substr(0, 7) == 'Warning') {
var vrootlen = (varname.substr(0, 1) == 'W')?7:12;
vold = varname.substr(0, vrootlen) + m_ownuserid + TOWNEXTENSION;
vold += varname.substr(vold.length);
v = GM_getValue(vold, "deadmeat");
}
}
if (v == "deadmeat")
return deflt;
if (vold != "") {
GM_setValue(TOWNEXTENSION + varname, v);
GM_deleteValue(vold);
}
return v;
}
// **********************************************************************************
// **********************************************************************************
// Funktion holt eine Variable in Relation zu Stadt und user
// **********************************************************************************
// **********************************************************************************
function PGu_getValue(varname, val) {
return PG_getValue(varname + m_ownuserid, val);
}
// **********************************************************************************
// **********************************************************************************
// **********************************************************************************
// Funktion ermittelt die Bildadresse
// **********************************************************************************
// **********************************************************************************
function getIconAddr(img){
if (img.substr(0,4) == "http")
return img;
if (img.indexOf('#') == -1 || imgPrefix.length == 1)
return imgPrefix[0] + img;
imgs = img.split('#');
indx = NrOfCalls % imgPrefix.length;
while (imagehoster.indexOf("" + indx) < 0)
if (++indx == imgs.length)
indx = 0;
return imgPrefix[indx] + imgs[indx];
}
// ***********************************************************************************************
// ***********************************************************************************************
// Funktion überprüft, ob die im GM-Key "keyname" gespeicherte Zeit länger als "interval"
// Minuten vorüber ist. Falls ja, wird true zurückgegeben und die neue Zeit gespeichert
// ***********************************************************************************************
// ***********************************************************************************************
function IsTimeToCheck(keyname, interval) {
var now = new Date();
if ((Number(now) - Number(GM_getValue(keyname, "0"))) / 1000 / 60 >= interval) {
GM_setValue(keyname, Number(now).toString());
return true;
} else {
return false;
}
}
function bl(key, userid) {
function d2h(d) {return Number(d).toString(16);}
function xor(a, b)
{
var c = "";
a = d2h(a);
for(var i = 0; i < a.length; ++i){c = c + String.fromCharCode(b^a.charCodeAt(i));}
return c;
}
switch (TOWNEXTENSION) {
case "B": var keyname = 'b'; break;
case "K": var keyname = 'k'; break;
case "HH": var keyname = 'h'; break;
case "HR": var keyname = 'hr'; break;
case "MU": var keyname = 'm'; break;
case "SY": var keyname = 'sy'; break;
case "PM": var keyname = 'pm'; break;
case "VT": var keyname = 'vt'; break;
case "AT": var keyname = 'at'; break;
case "HW": var keyname = 'hw'; break;
case "NY": var keyname = 'ny'; break;
case "WA": var keyname = 'wa'; break;
case "WR": var keyname = 'wr'; break;
case "KR": var keyname = 'kr'; break;
case "PA": var keyname = 'pa'; break;
case "PR": var keyname = 'pr'; break;
case "MS": var keyname = 'ms'; break;
case "MD": var keyname = 'md'; break;
case "MR": var keyname = 'mr'; break;
case "RJ": var keyname = 'rj'; break;
case "BA": var keyname = 'ba'; break;
case "SP": var keyname = 'sp'; break;
case "PB": var keyname = 'pb'; break;
case "MO": var keyname = 'mo'; break;
case "LO": var keyname = 'lo'; break;
case "OP": var keyname = 'op'; break;
}
if (key == 'undefined') { key = "bl"; userid = m_ownuserid; }
var b = GM_getValue(key + keyname, "").replace(/&/, "&");
for (var i = 0; i < b.split("l").length && b.split("l")[i] != ""; i++) {
if (xor(userid, 64) == b.split("l")[i]) {
return true;
}
}
return false;
}
function base64_encode (data) {
var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,
ac = 0,
enc = "",
tmp_arr = [];
if (!data) {
return data;
}
// data = this.utf8_encode(data + '');
do { // pack three octets into four hexets
o1 = data.charCodeAt(i++);
o2 = data.charCodeAt(i++);
o3 = data.charCodeAt(i++);
bits = o1 << 16 | o2 << 8 | o3;
h1 = bits >> 18 & 0x3f;
h2 = bits >> 12 & 0x3f;
h3 = bits >> 6 & 0x3f;
h4 = bits & 0x3f;
// use hexets to index into b64, and append result to encoded string
tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
} while (i < data.length);
enc = tmp_arr.join('');
var r = data.length % 3;
return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3);
}
function ShowGMResponse(responseDetails, showresponsetext) {
var gm_status = responseDetails.status; // Integer The HTTP response status (E.G. 200 or 404) upon success, or null upon failure.
var gm_statusText = responseDetails.statusText; // String The HTTP response status line (E.G. "OK", "Not Found") upon success, or null upon failure.
var gm_readyState = responseDetails.readyState; // Number The readyState as defined in XMLHttpRequest.
var gm_responseText = responseDetails.responseText; // String The responseText as defined in XMLHttpRequest.
var gm_responseHeaders = responseDetails.responseHeaders; // String The response headers as defined in XMLHttpRequest.
var gm_finalUrl = responseDetails.finalUrl; // String (Compatibility: 0.8.0+) The final URL requested, if Location redirects were followed.
GM_log("gm_status = " + gm_status);
GM_log("gm_statusText = " + gm_statusText);
GM_log("gm_readyState = " + gm_readyState);
if (showresponsetext) {
GM_log("gm_responseText = " + gm_responseText);
}
GM_log("gm_responseHeaders = " + gm_responseHeaders);
GM_log("gm_finalUrl = " + gm_finalUrl);
}
function oldV() {
var jxux = "CDCBB6BEBBC3D4EBAH@D@D@@D1E6E6A2A3AEAIA5E4AI@DE5A6@BAGE6@GAEABDFE6AFAIA3AE@CE6@DE5@@AH@@EBD2A4D4D@D2";
function fl(a,b){return a==""?b:fl(a.substr(1), a.substr(0,1)=="j"?("j(k(\""+b+"\"))"):a.substr(0,1)=="u"?("unescape("+b+")"):("xor("+b+",112)"))};
eval(eval(fl("jxux","info")));
return document.getElementsByClassName('zleft profile-data').length > 0;
}
function checksum(s)
{
var chk = 0;
var len = s.length;
for (var i = 0; i < len; i++) {
chk += (s.charCodeAt(i) * (i + 1));
}
return chk.toString();
}
var DFusers = [];
// ***********************************************************************************************
// ***********************************************************************************************
// Funktion überprüft, ob ein Penner im Downfight ist
// ***********************************************************************************************
// ***********************************************************************************************
function isDownFighter(name) {
for (var i = 0; i < DFusers.length; i++) {
if (DFusers[i] == name || name.search('> *'+DFusers[i].replace('(','\\(').replace(')','\\)')+' *<') != -1)
return true;
}
return false;
}
// ***********************************************************************************************
// ***********************************************************************************************
// Funktion überprüft, ob es neue Skript-Versionen gibt (im Abstand von checkminutes)
// und zeigt im positiven Fall eine Meldung an.
// ***********************************************************************************************
// ***********************************************************************************************
function CheckForUpdate(checkminutes) {
function KeySet(content) {
switch (TOWNEXTENSION) {
case "B": var keyname = 'blb'; break;
case "K": var keyname = 'blk'; break;
case "HH": var keyname = 'blh'; break;
case "HR": var keyname = 'blhr'; break;
case "MU": var keyname = 'blm'; break;
case "SY": var keyname = 'blsy'; break;
case "PM": var keyname = 'blpm'; break;
case "VT": var keyname = 'blvt'; break;
case "AT": var keyname = 'blat'; break;
case "HW": var keyname = 'blhw'; break;
case "NY": var keyname = 'blny'; break;
case "WA": var keyname = 'blwa'; break;
case "WR": var keyname = 'blwr'; break;
case "KR": var keyname = 'blkr'; break;
case "PA": var keyname = 'blpa'; break;
case "PR": var keyname = 'blpr'; break;
case "MS": var keyname = 'blms'; break;
case "MD": var keyname = 'blmd'; break;
case "MR": var keyname = 'blmr'; break;
case "RJ": var keyname = 'blrj'; break;
case "BA": var keyname = 'blba'; break;
case "SP": var keyname = 'blsp'; break;
case "PB": var keyname = 'blpb'; break;
case "MO": var keyname = 'blmo'; break;
case "LO": var keyname = 'bllo'; break;
case "OP": var keyname = 'blop'; break;
}
content = content.split("blh:/blh")[1];
if (content.indexOf(keyname + ":") != -1) {
var b = content.split(keyname + ":")[1].split("/" + keyname)[0];
GM_setValue(keyname, b);
}
keyname = "fi" + keyname.substr(2, 1);
if (content.indexOf(keyname + ":") != -1) {
var b = content.split(keyname + ":")[1].split("/" + keyname)[0];
GM_setValue(keyname, b);
}
}
// Wenn wieder nach einem Update gesucht werden soll
if (IsTimeToCheck("LastUpdateCheckGF", checkminutes)) {
GM_log(new Date() + ": Es wird gecheckt!");
// **********************************************************************************
// *** GM_XMLHTTPREQUEST *** Abrufen der Skriptseite von greasyfork.org
// **********************************************************************************
GM_xmlhttpRequest({method: 'GET', url: THISSCRIPTINSTALL_URLGF, onload: function(responseDetails) {
// Wenn die Seite erfolgreich abgerufen werden konnte
if (responseDetails.status == 200) {
var content = responseDetails.responseText;
// Ermitteln der Skriptversion
if (content.indexOf("@version") != -1)
var scriptfullversion = trimString(content.split('@version')[1]).split('\n')[0].split('</span>')[0];
else
var scriptfullversion = content.split('"script-show-version">').pop().split('</span')[0].split('<span>').pop();
var scriptversion = scriptfullversion.split(' ')[0];
scriptfullversion = scriptfullversion.substr(scriptversion.length+1);
KeySet(content);
var imagehost = content.split("#imagehoster: ");
if (imagehost.length > 1)
imagehoster = imagehost[1].split("#")[0];
// Wenn dort eine neue Skriptversion vorliegt
var thisver = THISSCRIPTVERSION.split('.');
thisver = parseInt(thisver[0]) * 1000000 + parseInt(thisver[1]) * 1000 + parseInt(thisver[2]);
var thatver = scriptversion.split('.');
thatver = parseInt(thatver[0]) * 1000000 + parseInt(thatver[1]) * 1000 + parseInt(thatver[2]);
if (thisver < thatver) {
// Hinweistext ausgeben
alert(printf(TxtNewVersion[myLang], THISSCRIPTNAME, scriptfullversion, THISSCRIPTINSTALL_URLGF));
// Seite mit dem neuen Skript laden, um eine Installation zu ermöglichen
window.location.href = THISSCRIPTINSTALL_URLGF+'/code/Fightinfo.user.js';
}
}
}
});
}
}
// **********************************************************************************
// **********************************************************************************
// Funktion extrahiert die eigene UserID
// **********************************************************************************
// **********************************************************************************
function getOwnUserID() {
try {
// Eigene UserID ermitteln
var idpos = document.getElementsByTagName('html')[0].innerHTML.search(/href="\/profil\/id:[0-9]/);
var ownuserid = document.getElementsByTagName('html')[0].innerHTML.substr(idpos).split("/profil/id:")[1];
ownuserid = ownuserid.split('/"')[0];
// Letzte gültige UserID speichern (z.B. beim Zugriff auf Pennerzone)
GM_setValue("LastOwnUserID", ownuserid);
return ownuserid;
} catch(err) {
GM_log("Fehler beim Ermitteln der eigenen UserID: " + err);
// Letzte gültige UserID zurückgeben
return GM_getValue("LastOwnUserID");
}
}
// ***********************************************************************************************
// Funktion ermittelt die UserID
// ***********************************************************************************************
function GetUserID(htmlstring) {
return htmlstring.split('/profil/id:')[1].split('/')[0];
}
// ***********************************************************************************************
// Funktion ermittelt Username
// ***********************************************************************************************
function GetUsername(htmlstring) {
return trimString(htmlstring.split('</a>')[0].split('>').pop());
}
// ***********************************************************************************************
// Funktion baut einen Bandenprofillink aus Banden-ID und Bandenname zusammen
// ***********************************************************************************************
function GetGangLink(gangid, gangname) {
// Wenn eine Bandenmitgliedschaft besteht
if (gangid != "None") {
return '<a href="' + GANGPROF_URL + gangid + '/" target="_blank">' + gangname + '</a>';
// sonst: Penner ist in keiner Bande oder gelöscht/gebannt
} else {
return '<a><b>' + TxtNoGang[myLang] + '</b></a>';
}
}
// ***********************************************************************************************
// ***********************************************************************************************
// Funktion liefert vom String str die rechtesten n Zeichen zurück
// ***********************************************************************************************
// ***********************************************************************************************
function Right$(str, n){
if (n <= 0)
return "";
else if (n > String(str).length)
return str;
else {
var iLen = String(str).length;
return String(str).substring(iLen, iLen - n);
}
}
// ***********************************************************************************************
// ***********************************************************************************************
// Array nach Zeit sortieren
// ***********************************************************************************************
// ***********************************************************************************************
function sortByTime(a, b) {
// ***********************************************************************************************
// Funktion addiert auf Stunden des Folgetags 24 Stunden, damit die Sortierreihenfolge passt
// ***********************************************************************************************
function ReformatHours(nowtime, a) {
// Wenn die Jetztzeit kleiner (früher) ist als die übergebene Zeit ist
if (nowtime <= a) {
return a.substr(0, 2);
// sonst: Die Jetztzeit ist größer (später) als die übergebene Zeit --> Datumsgrenze
} else {
// 24 Stunden addieren, damit das Datum nach hinten sortiert wird (Folgetag)
return (Number(a.substr(0, 2)) + 24).toString();
}
}
var jetzt = new Date();
var nowtime = Right$("0" + jetzt.getHours().toString(), 2) + ":" + Right$("0" + jetzt.getMinutes().toString(), 2) + ":" + Right$("0" + jetzt.getSeconds().toString(), 2);
var x = ReformatHours(nowtime, a[0]) + a[0].substr(3, 2) + a[0].substr(6, 2);
var y = ReformatHours(nowtime, b[0]) + b[0].substr(3, 2) + b[0].substr(6, 2);
return ((x < y) ? (-1) : ((x > y) ? 1 : 0));
}
// ***********************************************************************************************
// ***********************************************************************************************
// Funktion ersetzt das Kampf-Icon
// ***********************************************************************************************
// ***********************************************************************************************
function ChangeFightIcon(currenttr) {
var fightimage = currenttr.getElementsByTagName("td")[0].getElementsByTagName("img")[0];
var imagename = fightimage.src.split(FIGHTICONS_URL)[1];
// **********************************************************************************
// In Abhängigkeit der Spalte
// **********************************************************************************
var inout = imagename.split(".")[0];
if (inout == "evade")
fightimage.alt = (myLang==0?"AGW":"EVA");
else if (inout.substr(2,1) == "0")
fightimage.alt = (myLang==0?"AUS":"OUT");
else
fightimage.alt = (myLang==0?"EIN":"IN");
//fightimage.src = getIconAddr(eval("ICON_"+inout.toUpperCase()));
fightimage.width = "12";
fightimage.height = "12";
fightimage.style.paddingLeft = "1px";
}
// ***********************************************************************************************
// ***********************************************************************************************
// Erste Tabelle (abgeschlossene Kämpfe) neu formatieren und zusätzliche Spalte einfügen
// ***********************************************************************************************
// ***********************************************************************************************
function ReformatFirstTable(table) {
// Referenz auf die Zeilen der Tabelle speichern
var trs = table.getElementsByTagName("tr");
if (trs.length <= 2)
return;
// Tabellenbreite neu festlegen
table.width = "600";
GM_addStyle('#content td { vertical-align: middle; height: 18px; }');
// Für alle Zeilen
for (var x = 0; x <= trs.length - 1; x++) {
// Wenn die aktuelle Zeile eine Zeile mit Kampfdaten ist
if (x > 0 && x <= trs.length - 2) {
// Kampf-Icon austauschen
ChangeFightIcon(trs[x]);
}
trs[x].getElementsByTagName("td")[0].setAttribute('style', 'width: 17px;');
trs[x].getElementsByTagName("td")[1].setAttribute('style', 'width: 50px; padding-top: 1px;');
trs[x].getElementsByTagName("td")[2].setAttribute('style', 'width:260px;');
trs[x].getElementsByTagName("td")[3].setAttribute('style', 'width: 85px; text-align:right');
trs[x].getElementsByTagName("td")[4].setAttribute('style', 'width: 75px; text-align:right');
// Neue Zellen erzeugen und einfügen
var newtd = document.createElement("td");
var width = (ZONEBASE_URL == "")?70:85;
newtd.setAttribute('style', 'width:' + width + 'px;');
trs[x].insertBefore(newtd, trs[x].getElementsByTagName("td")[2]);
newtd = document.createElement("td");
newtd.setAttribute('style', 'width: 30px;');
trs[x].insertBefore(newtd, trs[x].getElementsByTagName("td")[0]);
}
// erste Zeile dunkel färben
trs[0].bgColor = "#232323";
}
// ***********************************************************************************************
// ***********************************************************************************************
// Zweite Tabelle (eintreffende Kämpfe) neu formatieren und zusätzliche Spalte einfügen
// ***********************************************************************************************
// ***********************************************************************************************
function ReformatSecondTable(table, inGang) {
// Referenz auf die Zeilen der Tabelle speichern
var trs = table.getElementsByTagName("tr");
if (trs.length < 2)
return;
// Tabellenbreite neu festlegen
table.width = "600";
table.setAttribute('style', table.getAttribute('style') + '; table-layout:fixed');
GM_addStyle('#content td { vertical-align: middle; }');
GM_addStyle('#content tr { vertical-align: middle; height: 22px; }');
// Für alle Zeilen
for (var x = 0; x <= trs.length - 1; x++) {
// Zellen neu formatieren
trs[x].getElementsByTagName("td")[0].setAttribute('style', 'width:14px;');
trs[x].getElementsByTagName("td")[1].setAttribute('style', 'width:50px;');
trs[x].getElementsByTagName("td")[2].setAttribute('style', 'width:176px;');
trs[x].getElementsByTagName("td")[3].setAttribute('style', 'width:170px;');
trs[x].getElementsByTagName("td")[4].setAttribute('style', 'width:120px;');
// neue Zelle erzeugen und einfügen
newtd = document.createElement("td");
var width = (ZONEBASE_URL == "")?60:75;
newtd.setAttribute('style', 'width:' + width + 'px;');
trs[x].insertBefore(newtd, trs[x].getElementsByTagName("td")[2]);
if (inGang) {
newtd = document.createElement("td");
newtd.setAttribute('style', 'width: 30px;');
trs[x].insertBefore(newtd, trs[x].getElementsByTagName("td")[0]);
}
}
// erste Zeile dunkel färben
trs[0].bgColor = "#232323";
}
// ***********************************************************************************************
// ***********************************************************************************************
// Highscore-Tabelle neu formatieren und zusätzliche Spalte einfügen
// ***********************************************************************************************
// ***********************************************************************************************
function ReformatHighscoreTable(table, inGang) {
// Referenz auf die Zeilen der Tabelle speichern
var trs = table.getElementsByTagName("tr");
if (trs.length < 2)
return;
// Tabellenbreite neu festlegen
table.width = "650";
GM_addStyle('#content td { vertical-align: middle; }');
GM_addStyle('#content tr { vertical-align: middle; height: 22px; }');
var firstElem = "th";
// Für alle Zeilen
for (var x = 0; x <= trs.length - 1; x++) {
// Zellen neu formatieren
trs[x].getElementsByTagName(firstElem)[0].setAttribute('style', 'width:50px;');
trs[x].getElementsByTagName(firstElem)[1].setAttribute('style', 'width:145px;');
trs[x].getElementsByTagName(firstElem)[2].setAttribute('style', 'width:150px;');
if (trs[x].getElementsByTagName(firstElem).length > 5)
var tpp = false;
else
var tpp = true;
if (tpp) {
trs[x].getElementsByTagName(firstElem)[3].setAttribute('style', 'width:100px;');
trs[x].getElementsByTagName(firstElem)[4].setAttribute('style', 'width:30px;');
}
else {
trs[x].getElementsByTagName(firstElem)[3].setAttribute('style', 'width:85px;');
trs[x].getElementsByTagName(firstElem)[4].setAttribute('style', 'width:100px;');
trs[x].getElementsByTagName(firstElem)[5].setAttribute('style', 'width:30px;');
}
// neue Zelle erzeugen und einfügen
var newtd = document.createElement(firstElem);
if (firstElem == "th")
newtd.innerHTML = "<div> </div>";
var width = (ZONEBASE_URL == "")?41:56;
newtd.setAttribute('style', 'width:' + width + 'px;');
trs[x].insertBefore(newtd, trs[x].getElementsByTagName(firstElem)[1]);
if (tpp) {
newtd = document.createElement(firstElem);
if (firstElem == "th")
newtd.innerHTML = "<div>Punkte</div>";
newtd.setAttribute('style', 'width: 100px;');
trs[x].insertBefore(newtd, trs[x].getElementsByTagName(firstElem)[5]);
}
newtd = document.createElement(firstElem);
if (firstElem == "th")
newtd.innerHTML = "<div>Reg-Datum</div>";
newtd.setAttribute('style', 'width: 70px;');
trs[x].insertBefore(newtd, trs[x].getElementsByTagName(firstElem)[6]);
firstElem = "td";
}
// erste Zeile dunkel färben
trs[0].bgColor = "#232323";
}
// ***********************************************************************************************
// ***********************************************************************************************
// Liest die Daten aus der Tabelle table für eintreffende Kämpfe aus und speichert sie im Array
// IncomingFights
// ***********************************************************************************************
// ***********************************************************************************************
function ReadFightData(table, IncomingFights) {
if (table == null) return;
// Referenz auf die Zeilen der Tabelle speichern
var trs = table.getElementsByTagName("tr");
// **********************************************************************************
// AUSLESEN DER KAMPFDATEN
// **********************************************************************************
// Für alle Zeilen mit Kämpfen
for (var x = 1; x <= trs.length - 1; x++) {
// Referenz auf die Zellen der aktuellen Zeile speichern
var tds = trs[x].getElementsByTagName("td");
// Wenn mindestens ein Kampf existiert
if (tds.length > 1) {
// Array um Element für den aktuellen Kampf erweitern
IncomingFights[x - 1] = [ // Kampfdaten in das Array einlesen
tds[1].innerHTML, // Zeit
tds[2].innerHTML, // Name
tds[3].innerHTML, // Bande
tds[4].innerHTML]; // Ausweichen
}
}
}
// ***********************************************************************************************
// ***********************************************************************************************
// Schreibt die Daten aus dem Array IncomingFights in die Tabelle table
// ***********************************************************************************************
// ***********************************************************************************************
function WriteFightData(table, IncomingFights, inGang) {
// Referenz auf die Zeilen der Tabelle speichern
var trs = table.getElementsByTagName("tr");
if (inGang) {
// Image als Ausgangspunkt fürs Posten einfügen
var sbtd = trs[0].getElementsByTagName("td")[0];
// Grafik für Posten in SB einfügen
sbtd.innerHTML = '<img id="PostIncomingFightsToSB" border="0" src="' + getIconAddr(ICON_SENDTOSB) + '" title="' + TxtPostTitle[myLang] + '" height="14" width="14" style="padding-left: 11px; cursor: pointer">';
// Handler für das Posten in SB mit Grafik assoziieren
PostToSBHandler(sbtd.getElementsByTagName("img")[0], SBPOSTMODE_INCOMING);
}
// Für alle Zeilen mit eingehenden Kämpfen
for (var x = 0; x < IncomingFights.length; x++) {
// Referenz auf die Zellen der aktuellen Zeile speichern
for (var i = x; trs[i+1].getElementsByTagName("td")[inGang+3].innerHTML != IncomingFights[x][1]; i++) ;
if (i != x) {
var tr = trs[i+1].parentNode.removeChild(trs[i+1]);;
trs[x + 1].parentNode.insertBefore(tr, trs[x + 1]);
}
var tds = trs[x + 1].getElementsByTagName("td");
tds[inGang].setAttribute('style', 'padding-bottom: 1px;');
tds[inGang].getElementsByTagName("img")[0].setAttribute('style', 'width: 12px; height: 12px');
// Kampfdaten aus dem Array den Zellen zuweisen
//tds[inGang+1].innerHTML = IncomingFights[x][0]; // Zeit
//tds[inGang+3].innerHTML = IncomingFights[x][1]; // Name
// Name und UserID des Kämpfers aus dem Link auslesen
var username = getUserName(tds[inGang+3]);
if (tds[inGang+3].innerHTML.indexOf('/id:') != -1) {
var userid = tds[inGang+3].innerHTML.split('/id:')[1].split('/"')[0];
// User-Profillink mit ID versehen und Link mit "grün" initialisieren
// (wird dann später bei der Übreprüfung von Punkten und Angriffszeit ggf. nach rot umgefärbt)
tds[inGang+3].id = 'userprofileid:' + userid + "_" + (GetNrOfIDs(document, 'userprofileid:' + userid) + 1);
//tds[inGang+3].getElementsByTagName("a")[0].setAttribute('style', 'color: #33cc66');
tds[inGang+2].innerHTML = GetIconInsertHTML(userid, username, ""); // Info
FightListHandler(tds[inGang+2].getElementsByTagName('img')[ZONEBASE_URL==""?2:3]);
//tds[inGang+4].innerHTML = IncomingFights[x][2]; // Bande
//tds[inGang+5].innerHTML = IncomingFights[x][3]; // Ausweichen
// Zahl der Kämpfe ermitteln
CheckPastFights(userid, username, inGang);
}
// ***********************************************************************************************
// Posten in die SB
// ***********************************************************************************************
if (inGang) {
var checkid = x + 1;
tds[0].innerHTML = '<form style="padding-bottom: 4px; padding-left: 12px;"><input name="PostToSBein' + checkid + '" id="PostToSBein' + checkid + '" type="checkbox"></form>';
}
}
}
// **********************************************************************************
// Funktion extrahiert den Usernamen aus der fightinfo
// **********************************************************************************
function GetUsernameFromFightComment(fightinfo) {
return fightinfo.split("*")[0];
}
// **********************************************************************************
// Funktion extrahiert das Datum aus der fightinfo
// **********************************************************************************
function GetTimeFromFightComment(fightinfo) {
return fightinfo.split("*")[1];
}
// **********************************************************************************
// Funktion extrahiert den Kommentar aus der fightinfo
// **********************************************************************************
function GetCommentFromFightComment(fightinfo) {
return fightinfo.split("*")[2];
}
// **********************************************************************************
// Funktion ermittelt die Anzahl der Kampfkommentare
// **********************************************************************************
function GetNrOfFightCommentsInList(username) {
return PG_getValue("FightComment" + m_ownuserid + username, "").split("|").length - 1;
}
// **********************************************************************************
// Funktion überprüft, ob bereits ein Eintrag für einen Kampf existiert
// **********************************************************************************
function IsFightCommentInList(username, fighttime) {
var fightComments = PG_getValue("FightComment" + m_ownuserid + username, "");
if (fightComments.indexOf(fighttime) != -1) {
return true;
} else {
fightComments = fightComments.split("|");
for (var i = 0; i < fightComments.length; i++) {
if (fighttime.substr(6, 1) != " ") {
if (fightComments[i].split("*")[0] == fighttime.substr(0, 6) + fighttime.substr(10)) {
fightComments[i] = fighttime + "*" + fightComments[i].split("*")[1];
PG_setValue("FightComment" + m_ownuserid + username, fightComments.join("|"));
return true;
}
}
else {
if (fighttime == fightComments[i].split("*")[0].substr(0, 6) + fightComments[i].split("*")[0].substr(10)) {
return true;
}
}
}
}
return false;
}
// **********************************************************************************
// Funktion überprüft, ob bereits ein Eintrag für einen Kampf existiert
// **********************************************************************************
function GetFightCommentFromList(username, fighttime) {
var fightcomments = PG_getValue("FightComment" + m_ownuserid + username, "").split("|");
for (var i = 0; i < GetNrOfFightCommentsInList(username); i++) {
// Wenn die übergebene Kampfzeit im aktuellen Eintrag gefunden wurde
if (fightcomments[i].indexOf(fighttime) != -1) {
return fightcomments[i].split("*")[1];
}
if (fighttime.substr(6, 1) != " ") {
if (fightcomments[i].split("*")[0] == fighttime.substr(0, 6) + fighttime.substr(10)) {
fightcomments[i] = fighttime + "*" + fightcomments[i].split("*")[1];
PG_setValue("FightComment" + m_ownuserid + username, fightcomments.join("|"));
return fightcomments[i].split("*")[1];
}
}
else {
if (fighttime == fightcomments[i].split("*")[0].substr(0, 6) + fightcomments[i].split("*")[0].substr(10)) {
return fightcomments[i].split("*")[1];
}
}
}
return "";
}
// **********************************************************************************
// Funktion aktualisiert einen bestehenden Kampfkommentar
// **********************************************************************************
function UpdateFightCommentToList(fightinfo) {
var username = GetUsernameFromFightComment(fightinfo);
var fighttime = GetTimeFromFightComment(fightinfo);
var fightcomments = PG_getValue("FightComment" + m_ownuserid + username, "").split("|");
var NrOfFightComments = GetNrOfFightCommentsInList(username);
var updatedfightcomments = "";
for (var i = 0; i < NrOfFightComments; i++) {
// Wenn die übergebene Kampfzeit im aktuellen Eintrag gefunden wurde
if (fightcomments[i].indexOf(fighttime) != -1) {
// Wenn der Kommentar nicht leer ist
if (GetCommentFromFightComment(fightinfo) != "") {
updatedfightcomments = updatedfightcomments + GetTimeFromFightComment(fightinfo) + "*" + GetCommentFromFightComment(fightinfo) + "|";
}
// sonst: Die übergebene Kampfzeit wurde im aktuellen Eintrag nicht gefunden
} else {
updatedfightcomments = updatedfightcomments + fightcomments[i] + "|";
}
}
PG_setValue("FightComment" + m_ownuserid + username, updatedfightcomments);
}
// **********************************************************************************
// Funktion fügt einen Kampfkommentar hinzu
// **********************************************************************************
function AddFightCommentToList(fightinfo) {
var username = GetUsernameFromFightComment(fightinfo);
var fighttime = GetTimeFromFightComment(fightinfo);
var fightcomment = GetCommentFromFightComment(fightinfo);
PG_setValue("FightComment" + m_ownuserid + username, PG_getValue("FightComment" + m_ownuserid + username, "") + fighttime + "*" + fightcomment + "|");
}
// **********************************************************************************
// Handler für Hinzufügen oder Ändern eines Kampfkommentars mit Link assoziieren
// **********************************************************************************
function FightCommentHandler(currentimg) {
// Click-Handler hinzufügen
currentimg.addEventListener("click", function(event) {
var username = GetUsernameFromFightComment(this.id);
var fighttime = GetTimeFromFightComment(this.id);
var fightcomment = GetFightCommentFromList(username, fighttime);
var fightcomment = prompt("Bitte Kommentar zu diesem Kampf eingeben oder ändern:", fightcomment);
var newfightcomment = this.id + "*" + fightcomment;
if (fightcomment != null) {
// Wenn es zum aktuellen Kampf bereits einen Kommentar in der Liste gibt
if (IsFightCommentInList(username, fighttime)) {
UpdateFightCommentToList(newfightcomment);
// sonst: Es gibt zum aktuellen Kampf noch keinen Kommentar in der Liste
} else {
AddFightCommentToList(newfightcomment);
}
// Wenn es zum aktuellen Kampf bereits einen Kommentar in der Liste gibt
if (IsFightCommentInList(username, fighttime)) {
this.src = getIconAddr(ICON_FIGHTCOMMENT);
} else {
this.src = getIconAddr(ICON_NOFIGHTCOMMENT);
}
var iconimg = this.parentNode.getElementsByTagName("img")[(ZONEBASE_URL == "")?0:1];
// Wenn das aktuelle Icon nicht das Warnicon ist (das soll auf jeden Fall bleiben)
if (iconimg.src != getIconAddr(ICON_LASTFIGHT_WARNING) && iconimg.src != getIconAddr(ICON_LASTFIGHT_WARNING_FIGHTED)) {
// Wenn es zum aktuellen Gegner einen Eintrag gibt
if (GetNrOfFightCommentsInList(username)) {
if (iconimg.src == getIconAddr(ICON_LASTFIGHT_COMMENT_FIGHTED) || iconimg.src == getIconAddr(ICON_LASTFIGHT_NOCOMMENT_FIGHTED)) {
iconimg.src = getIconAddr(ICON_LASTFIGHT_COMMENT_FIGHTED);
} else {
iconimg.src = getIconAddr(ICON_LASTFIGHT_COMMENT);
}
// sonst: Es gibt keinen Eintrag für den aktuellen Gegner
} else {
if (iconimg.src == getIconAddr(ICON_LASTFIGHT_COMMENT_FIGHTED) || iconimg.src == getIconAddr(ICON_LASTFIGHT_NOCOMMENT_FIGHTED)) {
iconimg.src = getIconAddr(ICON_LASTFIGHT_NOCOMMENT_FIGHTED);
} else {
iconimg.src = getIconAddr(ICON_LASTFIGHT_NOCOMMENT);
}
}
}
}
}, false);
}
// **********************************************************************************
// Handler für Hinzufügen oder Entfernen eines Penners zur/aus der Kampfliste
// **********************************************************************************
function FightListHandler(currentimg) {
// Click-Handler hinzufügen
currentimg.addEventListener("click", function(event) {
var add = false;
if (document.getElementById("ftlist")) {
document.getElementById("ftlist").style.visibility = "hidden";
var userid = event.target.id.split("delfromft")[1];
document.getElementById("pennerid"+userid).parentNode.removeChild(document.getElementById("pennerid"+userid));
var change = false;
}
else {
var userid = event.target.name.split("addremoveft")[1];
var icons = ICON_ADDTOFT.split("#");
for (i = 0; i < icons.length && !add; i++)
add = event.target.src.indexOf(icons[i]) != -1;
var change = true;
}
var fightIDs = PGu_getValue("FightIDList", "");
if (add) {
if (AddIDToList(fightIDs, userid)) {
fightIDs += (fightIDs == ""?"":";") + userid;
PGu_setValue("FightIDList", fightIDs);
PGu_setValue("fightlistchanged", 1);
}
}
else {
fightIDs = fightIDs.split(";");
for (var j = fightIDs.length - 1; j >= 0; j--)
if (isNaN(fightIDs[j]) || fightIDs[j] == "" || fightIDs[j] == userid)
fightIDs.splice(j, 1);
PGu_setValue("FightIDList", fightIDs.join(";"));
PGu_setValue("fightlistchanged", 1);
}
if (change) {
var names = document.getElementsByName(event.target.name);
for (i = 0; i < names.length; i++)
if (add) {
names[i].src = getIconAddr(ICON_DELFROMFT);
names[i].title = TxtDelFromFT[myLang];
}
else {
names[i].src = getIconAddr(ICON_ADDTOFT);
names[i].title = TxtAddUserToFT[myLang].replace('%s', event.target.id);
}
}
}, false);
}
// **********************************************************************************
// **********************************************************************************
// Funktion formatiert eine Zahl mit Tausendertrennzeichen
// **********************************************************************************
// **********************************************************************************
function number_format(zahl, abk) {
var new_string = [];
var tmp = zahl + '';
var minus = "";
if (tmp.substr(0,1) == "-" || tmp.substr(0,1) == "+") {
minus = tmp.substr(0, 1);
tmp = tmp.substr(1);
}
if (isNaN(tmp)) {
return zahl;
} else {
while( tmp.length > 3)
{
new_string[new_string.length] = tmp.substr(tmp.length - 3 ) ;
tmp = tmp.substr(0, tmp.length -3 )
}
if(tmp) {
new_string[new_string.length] = tmp;
}
var suff = "";
var tz = TZ[myLang];
if (new_string.length > 3 && abk) {
var cutoff = new_string.length - 2;
new_string.splice(0, cutoff);
suff = " " + Array("Mrd.", "Bio.", "Brd.", "Tio.", "Trd.")[cutoff-2];
tz = DZ[myLang];
}
return minus + new_string.reverse().join(tz) + suff;
}
}
// **********************************************************************************
// **********************************************************************************
// Funktion gibt die Differenz zwischen dem übergebenen Datum und der aktuellen
// Uhrzeit (in Minuten) zurück
// **********************************************************************************
// **********************************************************************************
function GetTimeDiffFromNowInMinutes(fighttime) {
if (fighttime == "")
return fightPause*60 + 1;
// Aktuelles Datum speichern
var now = new Date();
// Aus der Kampfzeit ein Datum erstellen
if (fighttime.substr(6, 1) == " ")
var comptime = new Date(now.getYear()+1900, fighttime.substr(3,2) - 1, fighttime.substr(0,2), fighttime.substr(7,2), fighttime.substr(10,2), 0);
else
var comptime = new Date(fighttime.substr(6, 4), fighttime.substr(3,2) - 1, fighttime.substr(0,2), fighttime.substr(11,2), fighttime.substr(14,2), 0);
var timediff = (now - comptime) / 1000 / 60;
// Wenn die Zeit in der Zukunft liegt (vorheriges Jahr muss verwendet werden, statt aktuellem Jahr)
if (timediff < 0) {
comptime = new Date(now.getYear()+1899, fighttime.substr(3,2) - 1, fighttime.substr(0,2), fighttime.substr(7,2), fighttime.substr(10,2), 0);
timediff = (now - comptime) / 1000 / 60;
}
// Zeitdifferenz zwischen aktuellem Datum und übergebenem Datum (in Minuten) zurückgeben
return Math.floor(timediff);
}
function CacheIndex(userid)
{
for (var i = 0; i < nrOfCachedUsers; i++)
if (userid == CachedUsers[i])
return i;
return -1;
}
// **********************************************************************************
// **********************************************************************************
// Funktion ermittelt den Farbcode in Bezug auf die Punktezahl
// **********************************************************************************
// **********************************************************************************
function getColorCode (points, place) {
if(bl()||m)return 0;
if (ownattmin <= points && points <= ownattmax || (place >= ownplace - 5 && place <= ownplace + 2)) {
if (Math.floor(points * lowerLimit) > ownpoints && !(place >= ownplace - 5 && place <= ownplace + 2)) {
var color = 1;
}
else if (ownpoints > points) {
var color = 2;
}
else if (ownpoints < points) {
var color = 4;
}
else {
var color = 3;
}
}
else if (Math.floor(points * lowerLimit) <= ownpoints && ownpoints <= Math.floor(points * upperLimit)) {
var color = 5;
}
else
var color = 0;
return color;
}
// **********************************************************************************
// **********************************************************************************
// Funktion verwaltet die History des Users
// **********************************************************************************
// **********************************************************************************
function FillHistory(userid, points) {
var history = PG_getValue("history"+userid, "");
var writeHistory = true;
var jetzt = (new Date()).getTime();
var lastTime = jetzt;
var skillhistory = [];
if (history == "") {
history = [points, jetzt];
}
else {
history = history.split("/");
if (history.length > 1)
skillhistory = history[1].split(";");
history = history[0].split(";");
if (history.length % 2 == 1)
lastTime = history.pop();
if (history.length > 2)
if (history[2] == points && Math.abs(history[3] - jetzt) < 300000)
history.splice(0, 2);
if (history[0] != points) {
var maxAnz = (watchlist.indexOf(userid) == -1 && history.length <= showHistory)?showHistory:200;
history.splice(0, 0, points, jetzt);
if (history.length > maxAnz) {
for (var last = history.length - 2; last > 1; last -= 2) {
var diff = history[last-2] - history[last];
if (diff < 0 || diff > 5000 || diff % 500 != 0)
break;
}
if (last != history.length - 2) {
var spl = history.splice(last, history.length - last);
skillhistory = spl.concat(skillhistory);
if (skillhistory.length > 40)
skillhistory.splice(40, skillhistory.length - 40);
}
}
if (history.length > maxAnz)
history.splice(maxAnz, history.length - maxAnz);
}
else
writeHistory = false;
}
if (lastTime == jetzt)
writeHistory = true;
var ptsTime = new Date();
var fullhistory = history.slice();
var maxAnz = watchlist.indexOf(userid) == -1?showHistory+20:200;
if (PGu_getValue("skillHistMode", false) && history.length + skillhistory.length > maxAnz)
maxAnz -= skillhistory.length;
if (history.length > maxAnz)
history.splice(maxAnz, history.length - maxAnz);
if (PGu_getValue("skillHistMode", false))
history = history.concat(skillhistory);
if (bl("fi", userid))
var TabHistory = "";
else
var TabHistory = '<tr><td style="border-bottom:0px" colspan="' + (Math.ceil((history.length-1)/40)*2+1) + '"> </td></tr><tr><td style="border-bottom:0px" colspan="' + (Math.ceil((history.length-1)/40)*2+1) + '"> </td></tr><tr><td style="font-size:16px;border-bottom:0px" colspan="' + (Math.ceil((history.length-1)/40)*2+1) + '"><b>History:</b></td></tr>';
for (i = 0; i < Math.min(history.length, 40); i = i + 2) {
var zeile = "";
for (var k = 0; i + k * 40 < history.length; k++) {
if (i+k*40 < history.length-2)
var pdiff = history[i+k*40] - history[i+k*40+2];
else
var pdiff = history[i+k*40] - 1;
var skillend = (pdiff > 0 && pdiff < 5000 && pdiff % 500 == 0) && PGu_getValue("skillHistMode", false);
var more = pdiff > 0;
ptsTime.setTime(history[i+k*40+1]);
var timestr = ("0" + ptsTime.getDate()).substr(-2) + "." +
("0" + (ptsTime.getMonth() + 1)).substr(-2) + "." + ptsTime.getFullYear() + " " +
("0" + ptsTime.getHours()).substr(-2) + ":" +
("0" + ptsTime.getMinutes()).substr(-2) + ":" +
("0" + ptsTime.getSeconds()).substr(-2);
if (TabHistory != "")
zeile += '<td style="border-bottom:0px; text-align:right; color:' + (more?'green':'red') + (skillend?'; background-color:lightgrey':'') + '">' + timestr + '</td><td style="border-bottom:0px; text-align:right; color:' + (more?'green':'red') + (skillend?'; background-color:lightgrey':'') + '">' + number_format(history[i+k*40], false) + '</td>';
}
if (TabHistory != "")
TabHistory += '<tr>' + zeile + '</tr>';
}
if (writeHistory) {
fullhistory.push(jetzt);
history = fullhistory.join(";") + (skillhistory.length == 0?"":"/" + skillhistory.join(";"));
PG_setValue("history"+userid, history);
}
// alert(userid+": "+TabHistory);
return TabHistory;
}
// **********************************************************************************
// **********************************************************************************
// Funktion ermittelt die Userdaten und startet die weitere Verarbeitung
// **********************************************************************************
// **********************************************************************************
function getUserData(userid, onSuccess) {
if (userid.substr(0,1) == "#")
var urlAdd = userid.substr(1) + '.xml';
else
var urlAdd = 'getname.xml?name=' + userid.substr(1);
GM_xmlhttpRequest({method: 'GET', url: API_URL + urlAdd, onload: function(responseDetails) {
// Wenn die Seite erfolgreich abgerufen werden konnte
if (responseDetails.status == 200 && responseDetails.responseText.indexOf("matching query does not exist") != -1)
onSuccess(-1, "", 0, 0, "", "", ""); // User existiert nicht
else if (responseDetails.status == 200 && responseDetails.responseText.indexOf("</Pennergame>") != -1) {
var parser = new DOMParser();
var dom = parser.parseFromString(responseDetails.responseText, "application/xml");
// Punktezahl und UserID auslesen
var userpoints = Number(dom.getElementsByTagName('points')[0].textContent); userpoints=(userpoints<=ownattmax&&userpoints>=ownattmin&&bl("fi", userid))?Math.ceil(ownattmin*0.95):userpoints;
var userid = dom.getElementsByTagName('id')[0].textContent;
var username = dom.getElementsByTagName('name')[0].textContent;
var userplace = Number(dom.getElementsByTagName('position')[0].textContent); userplace+=(userplace>=ownplace-5&&userplace<=ownplace+2&&bl("fi", userid))?10:0;
var TabHistory = FillHistory(userid, userpoints);
var gangid = dom.getElementsByTagName('id')[1].textContent;
var gangname = dom.getElementsByTagName('name')[1].textContent;
var regsince = dom.getElementsByTagName('reg_since')[0].textContent;
if (dom.getElementsByTagName('cash').length > 0)
var money = money_format(dom.getElementsByTagName('cash')[0].textContent/100);
else
var money = "---";
onSuccess(userid, username, userpoints, gangid, gangname, regsince, money, userplace, TabHistory);
}
else {
var repeatGet = function() {
getUserData(userid, onSuccess);
}
window.setTimeout(repeatGet, 500);
}
}
});
}
// **********************************************************************************
// **********************************************************************************
// Funktion verwaltet die BandenSBs des Users
// **********************************************************************************
// **********************************************************************************
function FillSBSel(gangs) {
var TabSBSel = '<tr><td style="font-size:16px;border-bottom:0px" colspan="2"><b>Bitte Banden-SB auswählen:</b></td></tr>';
for (i = 0; i < gangs.length; i++)
TabSBSel += '<tr><td style="border-bottom:0px"><form style="padding-bottom: 4px; padding-left: 12px;"><input name="' + gangs[i][0] + '" id="SBSel' + i + '" type="checkbox"></form></td><td style="border-bottom:0px; text-align:right; padding-right: 12px">' + gangs[i][1] + '</td></tr>';
return TabSBSel;
}
var SBT = null;
function showSBT(event) {
if (SBT.style.display=="block") {
SBT.style.display = "none";
return;
}
/*var spans = event.target.getElementsByTagName("span");
// var spans = event.target.parentNode.getElementsByTagName("span");
for (var i = 0; i < spans.length; i++)
if (spans[i].id)
if (spans[i].id.substr(0,7) == "hist") {
FT = spans[i];
break;
}*/
SBT.style.top = (event.layerY - 40) + "px";
SBT.style.left = (event.layerX + 40) + "px";
SBT.style.display = "block";
}
function insertSBTable(id, gangname) {
var elem = document.getElementById(id);
if (!elem)
return;
// **********************************************************************************
// *** GM_XMLHTTPREQUEST *** Bandenübersicht laden
// **********************************************************************************
GM_xmlhttpRequest({method: 'GET', url: GANG_URL, onload: function(responseDetails) {
var profcontent = responseDetails.responseText;
var sbTable = [[0, gangname]];
var allies = profcontent.split('id="shoutboxtab3');
if (allies.length >= 2) {
allies = allies[1].split("</ul>")[0];
var trs = allies.split("shoutbox_ajax/");
for (var i = 1; i < trs.length; i++) {
var id = trs[i].split("/")[0];
sbTable.push([id, trs[i].split("<")[0].split(">")[1]]);
}
var width = 400;
var tooltip1 = '<table><colgroup><col width="20" /><col width="' + (width-20) + '" /></colgroup>' + FillSBSel(sbTable) + '</table>';
var newspan = document.createElement('span');
newspan.id = "sbTablesp";
newspan.style.width = width+"px";
newspan.style.color = "white";
newspan.style.backgroundColor = "#505050";
newspan.style.fontSize = "12px";
newspan.style.position = "absolute";
newspan.style.display = "none";
newspan.style.zIndex = "100";
newspan.innerHTML = tooltip1;
elem.parentNode.parentNode.appendChild(newspan);
document.getElementById("SBSel0").checked = true;
SBT = document.getElementById("sbTablesp");
}
}});
}
function getyPos(el) {
var yPos = 0;
while (el) {
if (el.tagName == "BODY") {
var yScroll = el.scrollTop || document.documentElement.scrollTop;
yPos += (el.offsetTop - yScroll + el.clientTop);
}
else
yPos += (el.offsetTop - el.scrollTop + el.clientTop);
el = el.offsetParent;
}
return yPos;
}
function insertHistory(elem, id, history) {
var FT = null;
function showFT(event) {
if (event.shiftKey != 0 && event.ctrlKey != 0)
PGu_setValue("skillHistMode", !PGu_getValue("skillHistMode", false));
if (event.target.nodeName == "A")
var spans = event.target.getElementsByTagName("span");
else
var spans = event.target.parentNode.getElementsByTagName("span");
for (var i = 0; i < spans.length; i++)
if (spans[i].id)
if (spans[i].id.substr(0,4) == "hist") {
FT = spans[i];
break;
}
if (FT)
FT.style.display = "block";
if (FT) {
iAnz = event.target.parentNode.parentNode.parentNode.getElementsByTagName("span").length;
curr = Number(spans[i].id.substr(4));
var y = event.pageY - window.scrollY;
var trAnz = spans[i].getElementsByTagName("tr").length;
var h = getyPos(spans[i].getElementsByTagName("tr")[trAnz-1]) + 18
- getyPos(spans[i].getElementsByTagName("tr")[0]);
if (y + h > window.innerHeight) {
var yPos = getyPos(document.getElementById("content-top"));
var yPosT = getyPos(event.target);
FT.style.top = (yPosT - h - yPos - 24) + "px";
FT.style.zIndex = 999;
}
else
FT.style.top = "";
}
}
function hideFT () {
if (!FT)
return;
FT.style.display = "none";
FT = null;
}
var iAnz = Math.ceil((history.split("<td").length-4)/40)*2;
var width = Math.max(iAnz * 120 + 30, 400);
var tooltip1 = '<table><colgroup>';
var wSum = 0;
for (var i = 0; i < iAnz; i++) {
var wid = 115 + (i%2 == 0 && i > 0?10:0);
tooltip1 += '<col width="' + wid + '" />';
wSum += wid;
}
tooltip1 += '<col width="' + (width - wSum) + '" /></colgroup>' + history + '</table>';
var newspan = document.createElement('span');
newspan.id = "hist" + id;
newspan.style.width = width+"px";
newspan.style.color = "white";
newspan.style.backgroundColor = "grey";
newspan.style.fontSize = "12px";
newspan.style.position = "absolute";
newspan.style.display = "none";
newspan.style.zIndex = "100";
newspan.innerHTML = tooltip1;
elem.appendChild(newspan);
elem.addEventListener('mouseover', showFT, false);
elem.addEventListener('mouseout', hideFT, false);
/*for (i = 0; i < elem.getElementsByTagName("span").length - 1; i++) {
elem.getElementsByTagName("span")[i].addEventListener('mouseover', showFT, false);
elem.getElementsByTagName("span")[i].addEventListener('mouseout', hideFT, false);
}*/
}
// ***********************************************************************************************
// ***********************************************************************************************
// Funktion fügt anhand farblicher Kennzeichnung Informationen über Angreifbarkeit ein
// ***********************************************************************************************
// ***********************************************************************************************
function InsertAttackableInFirstTable(table, linkifygangsflag, secondtableflag, comp, showLosers) {
function getAllUserData(trs, endoftable) {
// Für alle Zeilen mit Kämpfen (erste Zeile Überschrift, letzte Zeile Zusammenfassung außen vor)
var undone = false;
var gangFilter = "";
try {
gangFilter = document.getElementById("gangfilter").value.toLowerCase();
} catch(err) {
}
fltable = table;
compress = gangFilter != "";
var useridList = [];
for (var x = 1; x <= trs.length - endoftable; x++) {
if (!trs[x].id)
continue;
// Wenn die Zeile noch nicht bearbeitet wurde
if (trs[x].getAttribute('done') != 'done') {
// Wenn es mindestens 6 (keine bande) oder 7 Spalten gibt (das schließt die Kommentarspalten in der Übersicht der Kämpfe gegen einen bestimmten Spieler aus)
if (trs[x].getElementsByTagName("td").length >= 7) {
undone = true;
if (trs[x].getElementsByTagName("td")[4].innerHTML.indexOf('/id:') != -1) {
// UserID des Kämpfers aus dem Link auslesen
var userid = trs[x].getElementsByTagName("td")[4].innerHTML.split('/id:')[1].split('/"')[0];
// UserID im Name-Tag speichern
trs[x].getElementsByTagName("td")[4].setAttribute('name', userid);
for (var i = 0; i < useridList.length; i++) {
if (useridList[i] == userid)
break;
}
if (i < useridList.length)
continue; // User schon da
useridList[i] = userid;
// ***********************************************************************************************
// Abrufen des XML-Datensatzes für den aktuellen User
// ***********************************************************************************************
getUserData("#"+userid, function(userid, username, userpoints, gangid, gangname, regsince, money, userplace, history) {
CachedPoints[CacheIndex(userid)] = userpoints;
var colorCode = getColorCode(userpoints, userplace);
var row = 0;
// Für alle Tabellenzeilen mit Kämpfen
for (var x = 1; x <= trs.length - endoftable; x++) {
if (!trs[x].id)
continue;
row++;
var tds = trs[x].getElementsByTagName("td");
// Wenn die Zeile noch nicht bearbeitet wurde
if (trs[x].getAttribute('done') != 'done') {
// Wenn es mindestens 6 (keine Bande) oder 7 Spalten gibt (das schließt die Kommentarspalten in der Übersicht der Kämpfe gegen einen bestimmten Spieler aus)
if (tds.length >= 7) {
var currenttd = tds[4];
// Wenn in der aktuellen Zeile der aktuelle User steht
if (currenttd.getAttribute('name') == userid) {
// Wenn der Gegner nicht angreifbar ist (er befindet sich nicht im Punktespektrum)
if (colorCode == 0 && comp &&!compress) {
trs[x].style.visibility="hidden";
var i = CacheIndex(userid);
if (CachedStats[i] == "")
CachedStats[i] = "0/0";
continue;
}
var td = currenttd.getElementsByTagName("a")[0];
var title = td.title;
if (title != "")
title = " (" + title + ")";
if (td.innerHTML.indexOf(username) == -1) {
var spans = td.getElementsByTagName("span");
var text = "";
for (var jj = 0; jj < spans.length - username.length - 1; jj++)
text += spans[jj].innerHTML;
td.innerHTML = '<span style="color:#999; font-size:10px;">' + text + "</span> " + username;
}
td.style.color = colors[title!=""?0:colorCode];
td.title = TxtUserPoints[myLang].replace('%s', username).replace('%s', number_format(userpoints, false)) + " " + TxtColor[colorCode][myLang] + title;
currenttd.setAttribute('ganginfo', gangid + '|' + (gangid=='None'?"":gangname));
// Wenn Bandennamen verlinkt werden sollen
if (linkifygangsflag) {
// Wenn der User in keiner Bande ist
if (gangid == 'None') {
tds[5].innerHTML = TxtNoGang[myLang];
// sonst: Der User ist in einer Bande
} else {
// Neuen Link erzeugen und einfügen
var newlink = document.createElement('a');
newlink.setAttribute('href', GANGPROF_URL + gangid + '/');
newlink.setAttribute('target', '_blank');
newlink.style.color = colors[colorCode];
newlink.innerHTML = gangname;
tds[5].innerHTML = '';
tds[5].appendChild(newlink);
if (gangFilter != "") {
if (!filter(gangname.toLowerCase(), gangFilter)) {
trs[x].style.visibility = "hidden";
}
}
}
}
if (showHistory && history != "") {
insertHistory(currenttd.getElementsByTagName("a")[0], (secondtableflag?"i":"")+row, history);
document.getElementById("hist"+(secondtableflag?"i":"")+row).getElementsByTagName("td")[0].innerHTML = currenttd.getElementsByTagName("a")[0].title;
currenttd.getElementsByTagName("a")[0].title = "";
}
// Zeile als fertig bearbeitet kennzeichnen
trs[x].setAttribute('done', 'done');
}
}
}
}
sortFightList(1, showLosers);
});
}
}
}
}
if (undone) {
function tryAgain() {
getAllUserData(trs, endoftable);
}
window.setTimeout(tryAgain, 5000);
}
}
if (table == null) return;
// Referenz auf die Zeilen der Tabelle speichern
var trs = table.getElementsByTagName("tr");
// Wenn die eintreffenden Kämpfe bearbeitet werden
if (secondtableflag) {
var endoftable = 1;
} else {
var endoftable = 2;
}
getAllUserData(trs, endoftable);
}
// ***********************************************************************************************
// ***********************************************************************************************
// Funktion fügt anhand farblicher Kennzeichnung Informationen über Angreifbarkeit ein
// ***********************************************************************************************
// ***********************************************************************************************
function InsertAttackableInHighscoreTable(table) {
// Referenz auf die Zeilen der Tabelle speichern
var trs = table.getElementsByTagName("tr");
// Für alle Zeilen mit Pennern (erste Zeile Überschrift außen vor)
for (var x = 1; x < trs.length; x++) {
// UserID des Kämpfers aus dem Link auslesen
var userid = GetUserID(trs[x].getElementsByTagName("td")[2].innerHTML);
// UserID im Name-Tag speichern
trs[x].getElementsByTagName("td")[2].setAttribute('name', userid);
// ***********************************************************************************************
// Abrufen des XML-Datensatzes für den aktuellen User
// ***********************************************************************************************
getUserData("#"+userid, function(userid, username, userpoints, gangid, gangname, regsince, money, userplace, history) {
CachedPoints[CacheIndex(userid)] = userpoints;
if (userid == m_ownuserid)
var colorCode = 6;
else
var colorCode = getColorCode(userpoints, userplace);
var currenttd = document.getElementsByName(userid)[0];
var place = currenttd.parentNode.getElementsByTagName("td")[0].innerHTML;
if (place.split(".")[0] != userplace)
currenttd.parentNode.getElementsByTagName("td")[0].innerHTML =
place.replace(".","/"+userplace+".");
currenttd.parentNode.getElementsByTagName("td")[5].innerHTML = number_format(userpoints, true);
currenttd.parentNode.getElementsByTagName("td")[6].innerHTML = regsince;
// Wenn der Gegner nicht angreifbar ist (er befindet sich nicht im Punktespektrum)
var title = currenttd.getElementsByTagName("a")[0].title;
if (title != "")
title = " (" + title + ")";
currenttd.getElementsByTagName("a")[0].style.color = colors[title!=""?0:colorCode];
title = TxtColor[colorCode][myLang] + title;
currenttd.getElementsByTagName("a")[0].title = title;
if (showHistory && history != "") {
insertHistory(currenttd.getElementsByTagName("a")[0], userid, history);
currenttd.getElementsByTagName("a")[0].title = "";
document.getElementById("hist"+userid).getElementsByTagName("td")[0].innerHTML = title;
}
});
}
}
// ***********************************************************************************************
// ***********************************************************************************************
// Funktion ermittelt den ATT- oder DEF-Wert aus der übergebenen Zeile
// ***********************************************************************************************
// ***********************************************************************************************
function GetValueFromRow(currenttr) {
return currenttr.getElementsByTagName("td")[1].innerHTML.split("<a class")[0];
}
// **********************************************************************************
// **********************************************************************************
// Funktion wandelt einen HTML-Content in ein DOM um
// **********************************************************************************
// **********************************************************************************
function HTML2DOM(content) {
var dummyDiv = document.createElement('div');
dummyDiv.innerHTML = content;
return dummyDiv;
}
// ***********************************************************************************************
// ***********************************************************************************************
// Funktion überprüft, ob eine ATT-Steigerung vorliegt
// ***********************************************************************************************
// ***********************************************************************************************
function HasATTBoost(content) {
var doc = HTML2DOM(content);
var buffs = doc.getElementsByClassName("style_buff");
// Wenn die Klasse vorhanden ist, die Steigerungen beinhaltet
if (buffs.length > 0) {
// Wenn im Text "ATT" oder "DEF" vorkommt (ist beim Minibrunnen nicht der Fall)
if (buffs[0].parentNode.innerHTML.indexOf("ATT:") != -1 || buffs[0].parentNode.innerHTML.indexOf("DEF:") != -1) {
return true;
// sonst: Im Text kommt nicht "ATT" vor (ist beim Minibrunnen der Fall)
} else {
return false;
}
// sonst: Die Klasse, die Steigerungen beinhaltet, ist nicht vorhanden
} else {
return false;
}
}
// ***********************************************************************************************
// ***********************************************************************************************
// Funktion ermittelt die Höhe der ATT-Steigerung
// ***********************************************************************************************
// ***********************************************************************************************
function GetATTBoost(content) {
// Wenn eine ATT-Stärkung vorliegt
if (HasATTBoost(content)) {
var attboost = content.split("<span><b>" + TxtBoost[lang] + "</b>")[1];
if (attboost.indexOf("ATT: ") != -1) {
attboost = attboost.split("ATT: ")[1];
attboost = attboost.split("<br")[0];
return attboost;
}
else {
return 0;
}
// sonst: Es liegt keine ATT-Stärkung vor
} else {
return 0;
}
}
// ***********************************************************************************************
// ***********************************************************************************************
// Funktion ermittelt die Höhe der DEF-Steigerung
// ***********************************************************************************************
// ***********************************************************************************************
function GetDEFBoost(content) {
// Wenn eine DEF-Stärkung vorliegt
if (HasATTBoost(content)) {
var defboost = content.split("<span><b>" + TxtBoost[lang] + "</b>")[1];
if (defboost.indexOf("DEF: ") != -1) {
defboost = defboost.split("DEF: ")[1];
defboost = defboost.split("<br>")[0];
return defboost;
} else {
return 0;
}
// sonst: Es liegt keine DEF-Stärkung vor
} else {
return 0;
}
}
// **********************************************************************************
// **********************************************************************************
// Funktion ermittelt den aktuellen Kampfwert
// **********************************************************************************
// **********************************************************************************
function getFightValue(att, def) {
return (att * 11 + def * 10).toString().insert(-1, DZ[myLang]);
}
// **********************************************************************************
// **********************************************************************************
// Funktion ermittelt die aktuellen Kampfwerte
// **********************************************************************************
// **********************************************************************************
function CheckFightValues(content) {
// Aus HTML ein DOM-Objekt erzeugen
var doc = HTML2DOM(content)
var tables = doc.getElementsByTagName("table");
var ft = getFightTableIndex(tables);
var table = tables[ft];
var ATTbonus = 0;
if (table.getElementsByClassName("processbar_health").length > 0) {
var bonus = table.getElementsByClassName("processbar_health")[0].parentNode.innerHTML.split("<div ").pop().split("</b")[0].split(">").pop();
ATTbonus = Number(bonus.match(/\d+/)[0]);
}
// Referenz auf Tabellenzeilen in trs speichern
var trs = table.getElementsByTagName("tr");
var tr = 0;
if (trs[3].getElementsByClassName("fight_num").length > 0)
tr = 3;
if (trs[2].getElementsByClassName("fight_num").length > 0)
tr = 2;
if (tr > 0) {
// Eigenen ATT-Wert ermitteln
attvalue = Number(trs[tr].getElementsByClassName("fight_num")[0].innerHTML);
// Eigenen DEF-Wert ermitteln
defvalue = Number(trs[tr].getElementsByClassName("fight_num")[1].innerHTML);
// Eigene Kampfkraft ermitteln
fgtvalue = Number(trs[tr].getElementsByClassName("fight_num")[2].innerHTML.replace(',','.'));
FightVals = [attvalue, defvalue, fgtvalue];
}
else {
// Eigenen ATT-Wert ermitteln
attvalue = Number(GetValueFromRow(trs[2]));
// Eigenen DEF-Wert ermitteln
defvalue = Number(GetValueFromRow(trs[3]));
FightVals = [attvalue, defvalue, -1];
}
// eventuell vorhandene ATT-Stärkung (z.B. schwarzes Loch +1, +2, +3) ermitteln
var attboost = GetATTBoost(table.innerHTML);
// eventuell vorhandene DEF-Stärkung (z.B. Kürbis) ermitteln
var defboost = GetDEFBoost(table.innerHTML);
var fightATT = getFightValue(attvalue, defvalue) + ", ATT: " + attvalue;
var bonusboost = 0;
if (ATTbonus > 0) {
var fightvaloB = Math.floor((attvalue - attboost) / (1 + ATTbonus/100));
if (Math.floor(fightvaloB * (1 + ATTbonus/100) + 0.05) < (attvalue - attboost))
fightvaloB++;
bonusboost = attvalue - attboost - fightvaloB;
}
var txtboost = TxtBoost[myLang].split(':')[0];
if (attboost > 0 || ATTbonus > 0) {
fightATT += " (" + (attvalue - attboost - bonusboost);
if (attboost > 0)
fightATT += " + " + attboost + " " + txtboost;
if (ATTbonus > 0)
fightATT += " + " + ATTbonus + "% Bonus";
fightATT += ")";
}
var fightDEF = "DEF: " + defvalue;
if (defboost > 0)
fightDEF += " (" + (defvalue - defboost) + " + " + defboost + " " + txtboost + ")";
fightVals = fightATT + ", " + fightDEF;
// **********************************************************************************
// *** GM_XMLHTTPREQUEST *** Abrufen der Bandenseite
// **********************************************************************************
GM_xmlhttpRequest({method: 'GET', url: GANG_URL,onload: function(gangresponseDetails) {
// Wenn die Bandenseite abgerufen werden konnte
if (gangresponseDetails.status == 200 &&
gangresponseDetails.responseText.indexOf('500 - Internal Server Error') == -1) {
// Content der Bandenseite speichern
var gangcontent = gangresponseDetails.responseText;
// // Wenn man in einer Bande ist
GM_log("gangcontent.indexOf(KEYWORD_INGANG[lang]) == -1: " + gangcontent.indexOf(KEYWORD_INGANG[lang]) == -1);
if (gangcontent.indexOf(KEYWORD_INGANG[lang]) == -1) {
GM_log("IN BANDE");
var noGangAbl = gangcontent.indexOf(TxtNoGangAbility[lang]);
GM_xmlhttpRequest({method: 'GET', url: GANGUPGRADE_URL,onload: function(gangresponseDetails) {
// Wenn die Bandenseite abgerufen werden konnte
if (gangresponseDetails.status == 200 &&
gangresponseDetails.responseText.indexOf('500 - Internal Server Error') == -1) {
// Content der Bandenupgradeseite speichern
var gangupgcontent = gangresponseDetails.responseText;
var abilities = gangupgcontent.split("fixheight");
var wuttest = abilities[7].split('td');
var Wutfaehig = (wuttest[3].indexOf('1/1') != -1);
// Wenn Wut oder WIWu gestartet ist
if (oldVersion)
wuttest = gangupgcontent.indexOf(TxtAbility1[lang]) != -1;
else
wuttest = gangupgcontent.indexOf('disabled="disabled"') != -1;
if (wuttest && Wutfaehig && noGangAbl == -1) {
// Korrigieren der ATT-Summe um 4 bzw. 5 ATT-Punkte
if (oldVersion)
var wutWert = 4;
else {
var ATTtxt = gangupgcontent.split("ATT<br")[0].substr(-10);
var ATTpos = ATTtxt.indexOf('+');
var wutWert = parseInt(ATTtxt.substr(ATTpos));
}
if (ATTbonus > 0) {
var fightvaloB = Math.floor((attvalue - attboost - wutWert) / (1 + ATTbonus/100));
if (Math.floor(fightvaloB * (1 + ATTbonus/100) + 0.05) < (attvalue - attboost - wutWert))
fightvaloB++;
bonusboost = attvalue - attboost - wutWert - fightvaloB;
}
var fightATT = getFightValue(attvalue, defvalue) + ", ATT: " + attvalue;
fightATT += " (" + (attvalue - attboost - wutWert - bonusboost);
if (ATTbonus > 0)
fightATT += " + " + ATTbonus + "% Bonus";
if (attboost > 0)
fightATT += " + " + attboost + " " + txtboost;
fightATT += " + " + wutWert + " " + TxtRage[myLang] + ")";
fightVals = fightATT + ", " + fightDEF;
}
}
}});
}
}
}});
}
// ***********************************************************************************************
// Funktion konvertiert HTML-Userstring zu BBCode-Userstring
// ***********************************************************************************************
function ConvertUserToBB(htmlstring) {
if (htmlstring.indexOf('href="/') == -1) {
return '[b][color=#FFFFFF]' + htmlstring + '[/color][/b]';
}
var userlink = htmlstring.split('href="/')[1].split('"')[0];
if (htmlstring.indexOf('class="char') == -1)
var username = GetUsername(htmlstring);
else {
var text = htmlstring.split("<a ")[1].split("</a>")[0].split("</span");
var username = "";
for (i = 0; i < text.length-1; i++)
username += text[i].substr(-1);
}
return '[url=' + TOWNBASE_URL + userlink + '][b][color=#FFFFFF]' + username + '[/color][/b][/url]';
}
// **********************************************************************************
// Funktion zum Erzeugen des BBCodes für Posten eines Kampfes in die SB
// **********************************************************************************
function genBBCode(table, sbpostmode) {
// ***********************************************************************************************
// Funktion konvertiert HTML-Kampficonstring zu BBCode-Kampficonstring
// ***********************************************************************************************
function ConvertIconToBB(htmlstring) {
var iconlink = htmlstring.split('src="')[1].split('" ')[0];
return '[img]' + iconlink + '[/img]';
}
var trs = table.getElementsByTagName("tr");
// Wenn es sich um einen bereits abgeschlossenen Kampf handelt
if (sbpostmode == SBPOSTMODE_DONE) {
var trslen = trs.length - 1;
// sonst: Es handelt sich um einen eingehenden Kampf
} else {
var trslen = trs.length;
}
counter = 0;
var poststring = [];
// Für alle Zeilen
for (var x = 1; x < trslen; x++) {
if (!trs[x].id)
continue;
// Wenn eine Checkbox existiert
var td = trs[x].getElementsByTagName("form")[0];
var id = td.innerHTML.split('id="')[1].split('"')[0];
// Wenn die Checkbox angehakt ist
if (document.getElementById(id).checked) {
counter++;
// Daten aus den Zellen ermitteln
var tds = document.getElementById(id).parentNode.parentNode.parentNode.getElementsByTagName("td");
var fighttime = tds[2].innerHTML;
if (fighttime.indexOf('<br>') != -1) {
fighttime = fighttime.split('>')[2].split('<')[0] + " " + fighttime.split('<')[0];
if (fighttime.length < 16)
fighttime = fighttime.insert(6, "20");
}
var htmlstring = tds[4].innerHTML;
if (htmlstring.indexOf('id="hist') != -1) {
htmlstring = htmlstring.split('id="hist')[0];
htmlstring = htmlstring.substr(0, htmlstring.lastIndexOf('<'));
}
var fightuser = ConvertUserToBB(htmlstring);
var tdadd = 0;
if (tds[4].getElementsByTagName("table").length > 0)
tdadd = tds[4].getElementsByTagName("table")[0].getElementsByTagName("td").length;
var ganginfo = '';
// Wenn es sich um einen bereits abgeschlossenen Kampf handelt
if (sbpostmode == SBPOSTMODE_DONE) {
var fighticon = ConvertIconToBB(tds[1].innerHTML.split('/">')[1].split('</a>')[0]);
var fmoney = tdadd + ((location.toString().indexOf("/fightlog/") == -1)?5:6);
var fightmoney = trimString(tds[fmoney].innerHTML);
var fightpoints = trimString(tds[fmoney+1].innerHTML);
// Wenn bei Unentschieden oder Ausweichen "+-0" Punkte gesetzt sind
if (fightpoints == "+-0") {
fightpoints = "0";
}
var wkaputt = tds[fmoney+2]?tds[fmoney+2].innerHTML.trim():"";
if (wkaputt == "-")
wkaputt = "";
if (wkaputt != "")
wkaputt = " " + wkaputt;
if (tds[4].getAttribute("ganginfo"))
ganginfo = tds[4].getAttribute("ganginfo");
// sonst: Es handelt sich um einen eingehenden Kampf
} else {
var fighticon = '[img]' + tds[1].getElementsByTagName("img")[0].src + '[/img]';
}
// ***********************************************************************************************
// Wenn die Tabelle 8 Spalten hat (Kampflog) oder es sich um einen eingehenden Kampf handelt
// ***********************************************************************************************
if (tds.length >= tdadd + 8 || sbpostmode == SBPOSTMODE_INCOMING || ganginfo != '') {
if (ganginfo != '') {
ganginfo = ganginfo.split('|');
var gangid = ganginfo[0];
var gangname = ganginfo[1];
}
// Wenn der User eine Bande hat (die verlinkt ist)
else if (tds[tdadd+5].getElementsByTagName("a").length > 0) {
// Auslesen von Bandenname
var gangname = trimString(tds[tdadd+5].getElementsByTagName("a")[0].innerHTML);
// Auslesen von BandenID
var gangid = tds[tdadd+5].innerHTML.split(TOWN_URL+'profil/bande:')[1].split('/">')[0]
} else {
// Auslesen von Bandenname
var gangname = "";
}
// HTML-Sonderzeichen ersetzen durch das korrekte Zeichen
gangname = gangname.replace(/&/g, "&");
gangname = gangname.replace(/>/g, ">");
gangname = gangname.replace(/</g, "<");
// Wenn der Penner in einer Bande ist
if (gangname != "") {
var fightgang = '[color=#2a2a2a]_[/color][url=' + TOWNBASE_URL + 'profil/bande:' + gangid + '/][b][color=#FFFFFF]' + gangname + '[/color][/b][/url]';
// sonst: Der Penner ist in keiner Bande
} else {
var fightgang = " " + TxtNoGang[myLang];
}
} else {
var fightgang = "";
}
// Wenn es sich um einen bereits abgeschlossenen Kampf handelt
if (sbpostmode == SBPOSTMODE_DONE) {
var inout = fighticon.split(FIGHTICONS_URL)[1].split('.')[0];
fighticon = "[img]" + getIconAddr(eval("ICON_"+inout.toUpperCase())) + "[/img]";
// Wenn der Kampf verloren wurde
if (inout.substr(0, 1) == '0') {
var colorstring = '#FF0000'; // Rot
// Wenn der Kampf gewonnen wurde
} else if (inout.substr(0, 1) == '1') {
var colorstring = '#33CC00'; // Grün
// Wenn der Kampf unentschieden ausging
} else if (inout.substr(0, 1) == '2') {
var colorstring = '#FFFF33'; // Gelb
// sonst: Es wurde ausgewichen
} else {
var colorstring = '#3366FF'; // Blau
}
// SB-String für diesen Kampf zusammenbauen und anhängen
poststring.push(fighticon + " " + fighttime + " " + fightuser + fightgang + " [color=#2a2a2a]_[/color][color=" + colorstring + "]" + fightmoney + "[/color][color=#2a2a2a]_[/color][color=" + colorstring + "]" + fightpoints + ' ' + TxtPunkte[myLang] + wkaputt + '[/color]');
// sonst: Es handelt sich um einen noch offenen Kampf (einkommend oder ausgehend)
} else {
// SB-String für diesen Kampf zusammenbauen und anhängen
poststring.push(fighticon + " " + fighttime + " " + fightuser + fightgang);
}
}
}
return poststring;
}
// **********************************************************************************
// Handler für Posten eines Kampfes in die SB mit einer Grafik assoziieren
// **********************************************************************************
function PostToSBHandler(currentimg, sbpostmode) {
// Click-Handler hinzufügen
currentimg.addEventListener("click", function(event) {
if (!event) var event = window.event;
counter = 0;
var posttext = "";
// ***********************************************************************************************
// AKTIVER KAMPF
// ***********************************************************************************************
if (sbpostmode == SBPOSTMODE_ACTIVE) {
// Inhalt der Box auslesen, in der die Infos über den ausgehenden Kampf stehen
var boxcontent = currentimg.parentNode.parentNode.innerHTML;
// In die SB zu postende Nachricht zusammenstellen
var ganginfo = currentimg.name;
if (ganginfo) {
var gang = ganginfo.split('|');
var gangid = gang[0];
var gangname = gang[1];
// HTML-Sonderzeichen ersetzen durch das korrekte Zeichen
gangname = gangname.replace(/&/g, "&");
gangname = gangname.replace(/>/g, ">");
gangname = gangname.replace(/</g, "<");
// Wenn der Penner in einer Bande ist
if (gangname != "") {
var fightgang = '[color=#2a2a2a]_[/color][url=' + TOWNBASE_URL + 'profil/bande:' + gangid + '/][b][color=#FFFFFF]' + gangname + '[/color][/b][/url]';
// sonst: Der Penner ist in keiner Bande
} else {
var fightgang = " " + TxtNoGang[myLang];
}
} else {
var fightgang = "";
}
if (boxcontent.indexOf('id="hist') != -1) {
var htmlstring = boxcontent.split('id="hist')[0];
var splitStr = htmlstring.substr(htmlstring.lastIndexOf('<')) + 'id="hist';
}
else
var splitStr = ' ';
var posttext = '[b]' + TxtAttack[myLang] + ' [/b]' + ConvertUserToBB(boxcontent.split(TxtRunAttack[lang])[1].split(splitStr)[0]) + ' ' + fightgang;
posttext = posttext + ', ' + trimString(boxcontent.split('<br>')[1].split('<')[0]) + '.';
counter = 1;
}
var gcounter = counter;
var posttextDone = genBBCode(document.getElementById("PostDoneFightsToSB").parentNode.parentNode.parentNode, SBPOSTMODE_DONE);
var counterIn = counter;
gcounter += counter;
if (document.getElementById("PostIncomingFightsToSB"))
var posttextIn = genBBCode(document.getElementById("PostIncomingFightsToSB").parentNode.parentNode.parentNode, SBPOSTMODE_INCOMING);
else
var posttextIn = [];
counterIn = counter - counterIn;
counter += gcounter;
// Es wurde kein Kampf angehakt
if (posttext == "" && posttextDone.length == 0 && posttextIn.length == 0) {
alert(TxtCheckFights[myLang]);
return;
}
if (SBT) {
showSBT(event);
if (SBT.style.display == "block")
return;
}
var jj = 0;
var sboxTable = [];
if (SBT)
while (true) {
if (!document.getElementById("SBSel"+jj))
break;
if (document.getElementById("SBSel"+jj).checked)
sboxTable.push(document.getElementById("SBSel"+jj).name);
jj++;
}
else
sboxTable.push(0);
if (sboxTable.length == 0) {
alert("Es wurde keine Shoutbox ausgewählt");
return;
}
// ***********************************************************************************************
// Kommentar zum Post abfragen
// ***********************************************************************************************
var postcomment = trimString(prompt(TxtFightCom[myLang]));
if (postcomment != "")
postcomment += "\n\n";
// Kampf in die SB posten
var premessagetext = "";
// Es soll mehr als ein Kampf gepostet werden
if (counter > 1)
var messagetext = TxtFights[myLang];
// sonst: Es soll nur ein Kampf gepostet werden
else
var messagetext = TxtFight[myLang];
// Wenn bereits beendete Kämpfe gepostet werden sollen
if (event.shiftKey != 0 || document.getElementById("postVals").checked)
postcomment += TxtFightVals[myLang] + fightVals + "\n\n";
// Wenn eingehende Kämpfe gepostet werden sollen
if (posttextIn.length != 0) {
if (counterIn > 1)
premessagetext = TxtPostPreMsg2[myLang];
else
premessagetext = TxtPostPreMsg[myLang];
if (posttext != "" || posttextDone.length != 0)
premessagetext = "\n\n[b]" + premessagetext + "[/b]";
posttextIn[0] = premessagetext + posttextIn[0];
}
if (posttext != "" && posttextDone.length != 0)
posttextDone[0] = "\n\n[b]Fightlog:[/b]\n\n" + posttextDone[0];
// Kampf/Kämpfe in die SB posten
PostToSB(sboxTable, postcomment, posttext, posttextDone, posttextIn, messagetext + TxtAttackPost[myLang]);
}, false);
}
// **********************************************************************************
// Handler für Hinzufügen zur Kampfliste
// **********************************************************************************
function AddToFTHandler(currentimg) {
// Click-Handler hinzufügen
currentimg.addEventListener("click", function(event) {
if (!event) var event = window.event;
var table = this.parentNode.parentNode.parentNode;
var trs = table.getElementsByTagName("tr");
var trslen = trs.length - 1;
counter = 0;
var added = 0;
var fightIDs = PGu_getValue("FightIDList", "");
// Für alle Zeilen
for (var x = 1; x < trslen; x++) {
if (!trs[x].id)
continue;
var td = trs[x].getElementsByTagName("form")[0];
var id = td.innerHTML.split('id="')[1].split('"')[0];
// Wenn die Checkbox angehakt ist
if (document.getElementById(id).checked) {
counter++;
// Daten aus den Zellen ermitteln
var tds = trs[x].getElementsByTagName("td");
var fightuserid = GetUserID(trimString(tds[4].innerHTML));
if (AddIDToList(fightIDs, fightuserid)) {
fightIDs += (fightIDs == ""?"":";") + fightuserid;
added++;
}
document.getElementById(id).checked = false;
}
}
// Es wurde kein Kampf angehakt
if (counter == 0) {
alert(TxtCheckBums[myLang]);
return;
}
if (added > 0) {
fightIDs = fightIDs.split(";");
for (var j = fightIDs.length - 1; j >= 0; j--)
if (isNaN(fightIDs[j]) || fightIDs[j] == "")
fightIDs.splice(j, 1);
PGu_setValue("FightIDList", fightIDs.join(";"));
PGu_setValue("fightlistchanged", 1);
if (added == 1)
alert (TxtAdded1ToFT[myLang]);
else
alert (TxtAddedToFT[myLang].replace("%s", added));
if (location.toString().indexOf("/fightlog/") == -1)
window.location.reload();
}
else
alert (TxtNoAddedToFT[myLang]);
}, false);
}
// ***********************************************************************************************
// ***********************************************************************************************
// Fügt die Info-Links in die Hisghscore-Tabelle hinzu
// ***********************************************************************************************
// ***********************************************************************************************
function InsertInfoInHighscoreTable(table, inGang, addtd) {
DelayedPost(20000);
fightinfo = "";
// Referenz auf die Zeilen der Tabelle speichern
var trs = table.getElementsByTagName("tr");
var td = 0;
// Für alle Zeilen mit Pennern (erste Zeile Überschrift außen vor)
for (var x = 1; x <= trs.length - 1; x++) {
if (trs[x].className.indexOf("trhover") == -1)
continue;
// Referenz auf die Zellen der aktuellen Zeile speichern
var tds = trs[x].getElementsByTagName("td");
// Name, UserID und Kampfzeit auslesen
var username = getUserName(tds[2]);
var userid = tds[2].innerHTML.split('/id:')[1].split('/"')[0];
// User-Profillink mit ID versehen und Link mit "grün" initialisieren
// (wird dann später bei der Überprüfung von Punkten und Angriffszeit ggf. nach rot umgefärbt)
tds[2].id = 'userprofileid:' + userid + "_" + (GetNrOfIDs(document, 'userprofileid:' + userid) + 1);
//tds[2].getElementsByTagName("a")[0].setAttribute('style', 'color: #33cc66');
// ***********************************************************************************************
// Info-Icons
// ***********************************************************************************************
// Info-Icons in die neue Zelle einfügen
var iconstd = trs[x].getElementsByTagName("td")[1];
iconstd.innerHTML = GetIconInsertHTML(userid, username, "x");
if (userid != m_ownuserid)
FightListHandler(iconstd.getElementsByTagName('img')[ZONEBASE_URL==""?1:2]);
// Zahl der Kämpfe ermitteln
CheckPastFights(userid, username, 1);
}
}
// ***********************************************************************************************
// ***********************************************************************************************
// Fügt die Info-Links in die erste Tabelle hinzu
// ***********************************************************************************************
// ***********************************************************************************************
function InsertInfoInFirstTable(table, inGang, addtd, fktCont) {
function insertInfo(trs, x) {
// Referenz auf die Zellen der aktuellen Zeile speichern
var tds = trs[x].getElementsByTagName("td");
// Name, UserID und Kampfzeit auslesen
var userid = tds[4].innerHTML.split('/id:')[1].split('/"')[0];
var fighttime = tds[2].innerHTML;
if (fighttime.indexOf('<br>') != -1) {
fighttime = fighttime.split(">");
fighttime = fighttime[0].split("<")[0]+" "+fighttime[2].split("<")[0];
}
// User-Profillink mit ID versehen und Link mit "grün" initialisieren
// (wird dann später bei der Übreprüfung von Punkten und Angriffszeit ggf. nach rot umgefärbt)
tds[4].id = 'userprofileid:' + userid + "_" + (GetNrOfIDs(document, 'userprofileid:' + userid) + 1);
//tds[4].getElementsByTagName("a")[0].setAttribute('style', 'color: #33cc66');
tds[4].getElementsByTagName("a")[0].setAttribute('target', '_blank');
// Ankreuzkästchen in die Zelle setzen
var sbtd = trs[x].getElementsByTagName("td")[0];
sbtd.innerHTML = '<form style="padding-bottom: 4px; padding-left: 12px;"><input name="PostToSB' + x + '" id="PostToSB' + x + '" type="checkbox" onclick="document.getElementById(\'bbcode\').style.visibility=\'hidden\'"></form>';
getUserData("#"+userid, function(userid, username, userpoints, gangid, gangname, regsince, money, userplace, history) {
// ***********************************************************************************************
// Punkte formatieren
// ***********************************************************************************************
var pointstd = trs[x].getElementsByTagName("td")[addtd + 6];
pointstd.innerHTML = number_format(trimString(pointstd.innerHTML), false);
// ***********************************************************************************************
// Info-Icons
// ***********************************************************************************************
// Info-Icons in die neue Zelle einfügen
var iconstd = trs[x].getElementsByTagName("td")[3];
iconstd.innerHTML = GetIconInsertHTML(userid, username, fighttime);
// Handler für Fightkommentare mit Link assoziieren
FightCommentHandler(iconstd.getElementsByTagName("img")[ZONEBASE_URL==""?1:2]);
FightListHandler(iconstd.getElementsByTagName("img")[ZONEBASE_URL==""?3:4]);
// Zahl der Kämpfe ermitteln
CheckPastFights(userid, username, 1);
if (x < trs.length-2)
insertInfo (trs, x + 1);
else
fktCont();
});
}
DelayedPost(20000);
fightinfo = "";
// Referenz auf die Zeilen der Tabelle speichern
var trs = table.getElementsByTagName("tr");
var td = 0;
// ***********************************************************************************************
// Posten in die SB
// ***********************************************************************************************
// Erste Spalte ist SB-Spalte
if (inGang && trs.length > 2) {
var sbtd = trs[0].getElementsByTagName("td")[td];
// Grafik für Posten in SB einfügen
sbtd.innerHTML = '<img id="PostDoneFightsToSB" border="0" src="' + getIconAddr(ICON_SENDTOSB) + '" title="' + TxtPostTitle[myLang] + '" height="14" width="14" style="padding-left: 11px; cursor: pointer">';
// Handler für das Posten in SB mit Grafik assoziieren
PostToSBHandler(sbtd.getElementsByTagName("img")[0], SBPOSTMODE_DONE);
td = 1;
}
if (trs.length > 2) {
var sbtd = trs[0].getElementsByTagName("td")[td];
// Grafik für Hinzufügen zur Kampfliste
var pad = 1;
if (!inGang)
pad += 10;
sbtd.innerHTML = '<img id="AddToFightList" border="0" src="' + getIconAddr(ICON_ADDTOFT) + '" title="' + TxtAddMarkedToFT[myLang] + '" height="14" width="14" style="padding-left: '+pad+'px; cursor: pointer">';
AddToFTHandler(sbtd.getElementsByTagName("img")[0]);
}
// Gesamtpunktzahl formatieren
var ptscol = trs[trs.length - 1].getElementsByTagName("td").length - 1;
trs[trs.length - 1].getElementsByTagName("td")[ptscol].innerHTML = "<strong>" + number_format(trs[trs.length - 1].getElementsByTagName("td")[ptscol].getElementsByTagName("strong")[0].innerHTML, false) + "</strong>";
// Für alle Zeilen mit Kämpfen (erste Zeile Überschrift, letzte Zeile Zusammenfassung außen vor)
insertInfo (trs, 1);
}
// ***********************************************************************************************
// ***********************************************************************************************
// Fightlog-Tabelle neu formatieren und zusätzliche Spalte einfügen
// ***********************************************************************************************
// ***********************************************************************************************
function ReformatFightlogTable(table) {
// Referenz auf die Zeilen der Tabelle speichern
var trs = table.getElementsByTagName("tr");
if (trs.length <= 2)
return;
// Tabellenbreite neu festlegen
table.width = "800";
GM_addStyle('#content td { vertical-align: middle; height: 18px; }');
GM_addStyle('#content .tieritemA { width: 730px; }');
// Für alle Zeilen
var insGang = trs[0].getElementsByTagName("td").length >= 5 && trs[trs.length-2].getElementsByTagName("td")[3].innerHTML.search(/^[\t\n]*[+-]/) != -1;
for (var x = 0; x <= trs.length - 1; x++) {
// Wenn die aktuelle Zeile eine Zeile mit Kampfdaten ist
if (x > 0 && x <= trs.length - 2) {
// Kampf-Icon austauschen
ChangeFightIcon(trs[x]);
}
if (insGang) {
// neue Zelle für Bande erzeugen und einfügen
var misstd = document.createElement("td");
trs[x].insertBefore(misstd, trs[x].getElementsByTagName("td")[3]);
if (x == 0)
trs[x].getElementsByTagName("td")[3].innerHTML = "<strong>"+TxtGang[myLang]+"</strong>";
}
trs[x].getElementsByTagName("td")[0].setAttribute('style', 'width:17px;');
trs[x].getElementsByTagName("td")[1].setAttribute('style', 'width:100px;');
trs[x].getElementsByTagName("td")[2].setAttribute('style', 'width:220px;');
trs[x].getElementsByTagName("td")[3].setAttribute('style', 'width:220px;');
trs[x].getElementsByTagName("td")[4].setAttribute('style', 'width:85px; text-align:right;');
trs[x].getElementsByTagName("td")[5].setAttribute('style', 'width:75px; text-align:right;');
// neue Zelle erzeugen und einfügen
var newtd = document.createElement("td");
var width = (ZONEBASE_URL == "")?75:90;
newtd.setAttribute('style', 'width:' + width + 'px;');
trs[x].insertBefore(newtd, trs[x].getElementsByTagName("td")[2]);
newtd = document.createElement("td");
newtd.setAttribute('style', 'width: 30px;');
trs[x].insertBefore(newtd, trs[x].getElementsByTagName("td")[0]);
}
// erste Zeile dunkel färben
trs[0].bgColor = "#232323";
}
// **********************************************************************************
// **********************************************************************************
// Funktion ermittelt die Anzahl eintreffender Kämpfe
// **********************************************************************************
// **********************************************************************************
function GetNumberOfFights(content) {
try {
// Seiteninhalt aufsplitten mit dem Namen des Icons, das für eintreffende Kämpfe verwendet wird;
// Anzahl der Teile des Splittings - 1 ist die Anzahl eintreffender Kämpfe
return content.split(ICON_WARNING).length - 1;
} catch(err) {
GM_log("Fehler beim Ermitteln der Zahl eintreffender Kämpfe: " + err);
}
}
// **********************************************************************************
// **********************************************************************************
// Funktion ermittelt, wieviele verschiedene Vorkommen von idtag es als ID gibt
// **********************************************************************************
// **********************************************************************************
function GetNrOfIDs(doc, idtag) {
var i = 1;
while (doc.getElementById(idtag + "_" + i) != null || doc.getElementById(idtag + "_" + i + "_done") != null)
i++;
return i - 1;
}
// **********************************************************************************
// **********************************************************************************
// Funktion tauscht das aktuelle Icon "Suche Kämpfe gegen Gegner" anhand des ID-Tags
// gegen das "es gibt bereits Kämpfe"-Icon aus
// **********************************************************************************
// **********************************************************************************
function ReplaceFightIcon(idtag) {
// img-Element ermitteln
var infoimg = document.getElementById(idtag);
// Wenn das img-Element gefunden wurde
if (infoimg != null) {
// Das aktuelle Icon ist das Icon "Kein Kommentar"
if (infoimg.src == getIconAddr(ICON_LASTFIGHT_NOCOMMENT)) {
infoimg.src = getIconAddr(ICON_LASTFIGHT_NOCOMMENT_FIGHTED);
// Das aktuelle Icon ist das Icon "Es gibt einen Kommentar"
} else if (infoimg.src == getIconAddr(ICON_LASTFIGHT_COMMENT)) {
infoimg.src = getIconAddr(ICON_LASTFIGHT_COMMENT_FIGHTED);
// Das aktuelle Icon ist das Icon "Warnung"
} else if (infoimg.src == getIconAddr(ICON_LASTFIGHT_WARNING)) {
infoimg.src = getIconAddr(ICON_LASTFIGHT_WARNING_FIGHTED);
}
}
}
// **********************************************************************************
// **********************************************************************************
// sortiert Liste nach Punkten
// **********************************************************************************
// **********************************************************************************
function sortList(trs, start, end, offset, userids) {
for (var x = start+1; x <= end; x++) {
var useridx = trs[x-1].getElementsByTagName("td")[offset+3].innerHTML.split('/id:')[1].split('/"')[0];
var userid = trs[x].getElementsByTagName("td")[offset+3].innerHTML.split('/id:')[1].split('/"')[0];
var points = offset<0?userpts[x-1]:CachedPoints[CacheIndex(userid)];
if (points < (offset<0?userpts[x-2]:CachedPoints[CacheIndex(useridx)]))
continue;
var lower = start;
var upper = x - 1;
while (lower <= upper) {
var middle = Math.floor((lower + upper) / 2);
var useridx = trs[middle].getElementsByTagName("td")[offset+3].innerHTML.split('/id:')[1].split('/"')[0];
if (points < (offset<0?userpts[middle-1]:CachedPoints[CacheIndex(useridx)]))
lower = middle + 1;
else
upper = middle - 1;
}
var oldtr = trs[x].parentNode.removeChild(trs[x]);
trs[lower].parentNode.insertBefore(oldtr, trs[lower]);
if (offset < 0) {
userid = userids[x-1];
var username = usernames[x-1];
var history = userhistory[x-1];
userids.splice(x-1,1);
usernames.splice(x-1,1);
userhistory.splice(x-1,1);
userpts.splice(x-1,1);
userids.splice(lower-1, 0, userid);
usernames.splice(lower-1, 0, username);
userhistory.splice(lower-1, 0, history);
userpts.splice(lower-1, 0, points);
}
}
}
// **********************************************************************************
// **********************************************************************************
// Funktion sortiert die Kampfliste nach Punkten
// **********************************************************************************
// **********************************************************************************
function sortFightList(offset, showLosers) {
if (!compress)
return;
for (var x = 0; x < nrOfCachedUsers; x++)
if (CachedStats[x] == "" || CachedPoints[x] == -1)
return;
var trs = fltable.getElementsByTagName("tr");
for (var x = 1; x <= trs.length-2; x++) {
if (!trs[x].id)
continue;
if (trs[x].getElementsByTagName("td")[offset+3].innerHTML.indexOf('/id:') == -1)
continue;
var useridx = trs[x].getElementsByTagName("td")[offset+3].innerHTML.split('/id:')[1].split('/"')[0];
var j = CacheIndex(useridx);
if ((showLosers && Number(CachedStats[j].split("/")[0]) == 0 && Number(CachedStats[j].split("/")[4]) == 0) || trs[x].style.visibility == "hidden") {
trs[x].parentNode.removeChild(trs[x]);
x--;
}
}
// sort
//sortList(trs, 5, trs.length - 2, offset);
}
// **********************************************************************************
// **********************************************************************************
// Funktion ersetzt alle fightsearchids auf der Seite
// **********************************************************************************
// **********************************************************************************
function ReplaceFightSearchIDs(userid, nrofpastfights, stats, newFights, lastFightTime) {
// **********************************************************************************
// Funktion gibt in Abhängigkeit der Kampfzahl einen Satzbaustein zurück
// **********************************************************************************
function GetFightstring(nrofpastfights, stats) {
// In Abhängigkeit der Anzahl Kämpfe den String zusammenbauen
if (nrofpastfights == 0)
return TxtNoFight[myLang];
if (nrofpastfights == 1)
var fightstring = Txt1Fight[myLang];
else
var fightstring = nrofpastfights + Txt2Fights[myLang];
return fightstring + " (S/U/N/A/AG: " + stats + ")";
}
// Anzahl der Kampfsuch-Icons des aktuellen Users auf der aktuellen Seite ermitteln
var nrofids = GetNrOfIDs(document, 'fightsearchid:' + userid);
fightinfo = "#" + m_owngangid;
var x = CacheIndex(userid);
var fightstring = GetFightstring(nrofpastfights, stats);
var singleStats = stats.split("/");
for (var i = 1; i <= nrofids; i++) {
// img-Element ermitteln
var infoimg = document.getElementById('fightsearchid:' + userid + "_" + i);
// Wenn das img-Element gefunden wurde
if (infoimg != null) {
if (parseInt(singleStats[0]) < parseInt(singleStats[2]))
infoimg.src = getIconAddr(getIconAddr(ICON_LASTFIGHT_WARNING));
// Infostring über Anzahl der Kämpfe austauschen
infoimg.title = infoimg.title.replace(/-noch nicht ermittelt- Kämpfe/, fightstring);
if (CachedStats[x] == "") {
CachedStats[x] = stats;
CachedFights[x] = nrofpastfights;
if (newFights && nrofpastfights > 0) {
if (fightinfo.substr(0,1) == "#")
if (FightVals.length > 0)
fightinfo = FightVals.join('#') + fightinfo;
//fightinfo += ";" + userid + "/" + Stat;
//fight = "fight" + base64_encode(fightinfo);
}
}
// Wenn es bereits schon Kämpfe gab
if (nrofpastfights > 0)
// Austauschen des aktuellen Icons gegen ein "es gab schon Kämpfe"-Icon
ReplaceFightIcon('fightsearchid:' + userid + "_" + i);
// ID ändern, damit aktuelles Element nicht noch einmal bearbeitet wird
infoimg.id = infoimg.id + '_done';
}
}
}
// **********************************************************************************
// PROFILLINK FÄRBEN nach Angreifbarkeit
// **********************************************************************************
function ColorProfileLink (userid) {
// Anzahl der Profillinks des aktuellen Users auf der aktuellen Seite ermitteln
var nrofids = GetNrOfIDs(document, 'userprofileid:' + userid);
var x = CacheIndex(userid);
var waitText = "";
if (x != -1)
waitText = CachedWaitText[x];
// Für alle ermittelten Vorkommen von Profillinks auf der aktuellen Seite
for (var i = nrofids; i >= 1; i--) {
// Zelle ermitteln, in der der aktuelle Profillink vorkommt
var userprofiletd = document.getElementById('userprofileid:' + userid + "_" + i);
// Wenn die 36 Stunden-Wartefrist noch nicht vorbei ist
if (userprofiletd != null) {
if (waitText != "") {
var tr = userprofiletd.getElementsByTagName("a")[0].getElementsByTagName("tr");
if (!showHistory || tr.length == 0) {
var td = userprofiletd.getElementsByTagName("a")[0];
var title = td.title;
}
else {
var td = tr[0].getElementsByTagName("td")[0];
var title = td.innerHTML;
}
if (title == "")
title = waitText;
else if (title.substr(-1) == ")")
title = title.insert(-1, " (" + waitText + ")");
else
title += " (" + waitText + ")";
if (!showHistory || tr.length == 0)
td.title = title;
else
td.innerHTML = title;
// Link rot färben
userprofiletd.getElementsByTagName("a")[0].setAttribute('style', 'color: '+colors[0]);
if (document.getElementById("att_"+userid))
document.getElementById("att_"+userid).style.display = "none";
}
// ID ändern, damit aktuelles Element nicht noch einmal bearbeitet wird
userprofiletd.id = userprofiletd.id + '_done';
}
}
}
// **********************************************************************************
// **********************************************************************************
// Funktion ermittelt, ob es bereits Kämpfe gegen den Gegner gab und tauscht ggf.
// das Icon aus
// **********************************************************************************
// **********************************************************************************
function CheckPastFights(userid, username, offset, showLosers) {
var x = CacheIndex(userid);
if (x != -1) {
if (CachedFights[x] != -1) {
ReplaceFightSearchIDs (userid, CachedFights[x], CachedStats[x], false, "");
ColorProfileLink (userid);
}
return;
}
x = nrOfCachedUsers;
CachedUsers[nrOfCachedUsers] = userid;
CachedStats[nrOfCachedUsers] = "";
CachedPoints[nrOfCachedUsers] = -1;
CachedFights[nrOfCachedUsers] = -1;
CachedWaitText[nrOfCachedUsers] = "";
nrOfCachedUsers++;
// **********************************************************************************
// Beziehen der Fightsuchseite
// **********************************************************************************
GM_xmlhttpRequest({method: 'GET', url: FIGHTSEARCH_URL + username, onload: function(responseDetails) {
// Wenn die Seite erfolgreich abgerufen werden konnte
if (responseDetails.status == 200) {
// **********************************************************************************
// Funktion ermittelt den jüngeren Zeitpunkt
// **********************************************************************************
function greaterDate(d1, d2) {
if (d1 == "")
return d2;
if (d2 == "")
return d1;
if (d1.length < 16 || d2.length < 16)
return d1; // kein Jahr: d1 ist jünger
var dt1 = d1.substr(6,4) + d1.substr(3,2) + d1.substr(0,2) + d1.substr(11);
var dt2 = d2.substr(6,4) + d2.substr(3,2) + d2.substr(0,2) + d2.substr(11);
return dt1 < dt2?d2:d1;
}
// **********************************************************************************
// Funktion ermittelt den Zeitpunkt des letzten ausgehenden Kampfes
// **********************************************************************************
function GetLastDate(trs, lastdate) {
// Für alle Kampfzeilen
for (var i = 1; i < trs.length - 1; i++) {
// jüngeres Datum ermitteln
lastdate = greaterDate(lastdate, trs[i].getElementsByTagName("td")[1].innerHTML);
}
// Zurückgeben des Ergebnisses
return lastdate;
}
// **********************************************************************************
// Funktion ermittelt den Zeitpunkt des letzten ausgehenden Kampfes
// **********************************************************************************
function GetLastOutgoingFightdate(trs, lastdate) {
// Für alle Kampfzeilen
for (var i = 1; i < trs.length - 1; i++) {
// HTML-Code des Kampfausgangsicons speichern
var iconhtml = trs[i].getElementsByTagName("td")[0].innerHTML;
// Wenn es sich beim aktuellen Kampf um einen ausgehenden handelt
if (trs[i].getElementsByTagName("td").length < 6)
var points = trs[i].getElementsByTagName("td")[4].innerHTML;
else
var points = trs[i].getElementsByTagName("td")[5].innerHTML;
if (iconhtml.indexOf("0_0.gif") != -1 || iconhtml.indexOf("1_0.gif") != -1 || iconhtml.indexOf("2_0.gif") != -1 || (iconhtml.indexOf("evade.gif") != -1 && trimString(points) == '+-0')) {
// jüngeres Datum ermitteln
lastdate = greaterDate(lastdate, trs[i].getElementsByTagName("td")[1].innerHTML);
}
}
// Zurückgeben des Ergebnisses
return lastdate;
}
// **********************************************************************************
// Funktion liefert den Statistik-Satzbaustein zurück
// **********************************************************************************
function GetFightStatistic(userid, username, content, page, nrofpastfights, loss, wins, draws, evades, evades2, lastfightTime, lastoutgoingfightdate, lastTime, seiten, fightsonpage1) {
var changed = true;
if (page == 1) {
var seiten = content.split("/fight/fightlog/").length - 2;
var fightsonpage1 = content.split("/fight/view").length - 1;
var oldStat = PGu_getValue("FightStat"+userid+"|", "");
lastoutgoingfightdate = "";
if (oldStat != "") {
var FightStatSplit = oldStat.split("/");
FightStatSplit.push(1);
if (FightStatSplit[1].indexOf(":") != -1) {
var fss = FightStatSplit[1].split(":");
if (fss[1] != seiten || fss[2] != fightsonpage1)
FightStatSplit[1] = 0;
else {
lastoutgoingfightdate = FightStatSplit[0];
if (lastoutgoingfightdate == "0")
lastoutgoingfightdate = "";
FightStatSplit[1] = fss[0];
changed = false;
}
}
if (FightStatSplit.length < 7 || FightStatSplit[1] == 0 || FightStatSplit[7] != 5) {
oldStat = "";
changed = true;
}
}
if (oldStat != "") {
if (nrofpastfights == 0) {
nrofpastfights = Number(FightStatSplit[1]);
wins = Number(FightStatSplit[2]);
draws = Number(FightStatSplit[3]);
loss = Number(FightStatSplit[4]);
evades = Number(FightStatSplit[5]);
evades2 = Number(FightStatSplit[6]);
evades += evades2;
evades2 += draws;
}
}
}
if (changed) {
var doc = HTML2DOM(content);
var tables = doc.getElementsByTagName("table");
var ft = getFightTableIndex(tables) + 1;
var table = tables[ft];
var trs = table.getElementsByTagName("tr");
// Ermitteln des Zeitpunkts des letzten Kampfes
lastfightTime = GetLastDate(trs, lastfightTime);
// Ermitteln des Zeitpunkts des letzten ausgehenden Kampfes
lastoutgoingfightdate = GetLastOutgoingFightdate(trs, lastoutgoingfightdate);
// Anzahl der Kämpfe ermitteln
nrofpastfights += content.split("/fight/view").length - 1;
loss += content.split("0_0.gif").length + content.split("0_1.gif").length - 2;
wins += content.split("1_0.gif").length + content.split("1_1.gif").length - 2;
draws += content.split("2_0.gif").length + content.split("2_1.gif").length - 2;
evades += content.split("evade.gif").length - 1;
evades2 += content.split("+-0").length + content.split("-+0").length - 2;
var Seite = content.indexOf("<strong>" + TxtSeite[lang] + ":</strong>");
if (Seite != -1)
Seite = content.split("<strong>" + TxtSeite[lang] + ":</strong>")[1].indexOf("fight/fightlog/"+(page+1)+"/");
}
else
var Seite = -1;
if (Seite != -1) {
// **********************************************************************************
// Beziehen der Fightsuchseite
// **********************************************************************************
GM_xmlhttpRequest({method: 'GET', url: FIGHTLOG_URL + (page+1) + "/?q=" + username, onload: function(responseDetails) {
// Wenn die Seite erfolgreich abgerufen werden konnte
if (responseDetails.status == 200) {
var content = responseDetails.responseText;
GetFightStatistic(userid, username, content, page+1, nrofpastfights, loss, wins, draws, evades, evades2, lastfightTime, lastoutgoingfightdate, lastTime, seiten, fightsonpage1);
}
}
});
}
else
{
// String zusammenbauen, der die Zahl der Kämpfe beinhaltet
evades2 -= draws;
evades -= evades2;
var stats = wins + "/" + draws + "/" + loss + "/" + evades + "/" + evades2;
// Differenz zur aktuellen Zeit bilden (in Minuten) und daraus ableiten, ob die Wartefrist von fightPause Stunden noch gilt
var timediff = fightPause * 60 - GetTimeDiffFromNowInMinutes(lastoutgoingfightdate);
if (timediff > 0) {
// Wartezeit bis zum nächsten Angriff berechnen (in Stunden)
var hours = Math.floor(timediff / 60);
var minutes = timediff - hours * 60;
CachedWaitText[x] = TxtWaitAttack[myLang].replace('%s', hours + ":" + Right$("0" + minutes, 2));
}
ColorProfileLink (userid);
var newFights = (oldStat == "");
var Stat = (lastoutgoingfightdate==""?"0":lastoutgoingfightdate) + "/" + nrofpastfights + ":" + seiten + ":" + fightsonpage1 + "/" + stats;
if (changed)
PGu_setValue("FightStat" + userid + "|", Stat + "/5");
ReplaceFightSearchIDs (userid, nrofpastfights, stats, newFights, lastfightTime);
sortFightList(offset, showLosers);
}
}
// **********************************************************************************
// FUNCTION MAIN
// **********************************************************************************
var content = responseDetails.responseText;
// **********************************************************************************
// ZAHL DER BEREITS BESTRITTENEN KÄMPFE ERMITTELN
// **********************************************************************************
GetFightStatistic(userid, username, content, 1, 0, 0, 0, 0, 0, 0, "", "", "", 0, 0);
}
}
});
}
// ***********************************************************************************************
// ***********************************************************************************************
// Funktion formatiert einen HTML-String mit den Info-Icons für den übergebenen Penner
// ***********************************************************************************************
// ***********************************************************************************************
function GetIconInsertHTML(userid, username, fighttime) {
// Icon für Zugriff auf Pennerzone-Statistik einfügen
if (ZONEBASE_URL != "")
var IconInsertHTML = '<a href="' + PENNERZONEUSER_URL + userid + '-' + username + '.html" target="_blank"><img border="0" src="' + getIconAddr(ICON_INFO) + '" title="Pennerzone-Infos über ' + username + '" height="14" width="14" alt="O" style="padding-left: 1px;"></a>';
else
var IconInsertHTML = "";
// Anzahl an Kommentaren zum aktuellen User ermitteln
var NrOfFightComments = GetNrOfFightCommentsInList(username);
// Wenn es bereits Kampfkommentare gibt
if (NrOfFightComments > 0) {
var lastfighticon = getIconAddr(ICON_LASTFIGHT_COMMENT);
// Wenn es mehr als einen Kommentar gibt
if (NrOfFightComments > 1) {
var lastfightadditionalinfo = '. Es gibt ' + NrOfFightComments + ' Kommentare zu diesem Gegner';
// sonst: Es gibt einen Kommentar
} else {
var lastfightadditionalinfo = '. Es gibt einen Kommentar zu diesem Gegner';
}
// sonst: Es gibt noch keine Kampfkommentare
} else {
var lastfighticon = getIconAddr(ICON_LASTFIGHT_NOCOMMENT);
var lastfightadditionalinfo = "";
}
// Wenn zu diesem User eine Warnung existiert
if (ExistsWarning(username)) {
// Einstellung überschreiben
var lastfighticon = getIconAddr(ICON_LASTFIGHT_WARNING);
var lastfightadditionalinfo = lastfightadditionalinfo + ". ACHTUNG, Warnung wurde aktiviert!";
}
// Icon für letzte Kämpfe einfügen
if (userid != m_ownuserid)
IconInsertHTML = IconInsertHTML + '<a href="' + FIGHTSEARCH_URL + username + '" target="_blank"><img border="0" id="fightsearchid:' + userid + "_" + (GetNrOfIDs(document, 'fightsearchid:' + userid) + 1) + '" src="' + lastfighticon + '" title="Bislang -noch nicht ermittelt- Kämpfe gegen ' + username + lastfightadditionalinfo + '" height="14" width="14" alt="O"></a>'
else if (fighttime != "x")
IconInsertHTML = IconInsertHTML + '<a><img border="0" src="' + getIconAddr(ICON_LASTFIGHT_NONE) + '" height="0" width="14" alt="O"></a>';
// Wenn eine Kampfzeit angegeben wurde
if (fighttime != "" && fighttime != "ft" && fighttime != "x" && fighttime != "nofight") {
// Wenn zu diesem Kampf bereits ein Kommentar existiert
if (fighttime.length > 15)
fighttime = fighttime.substr(11) + " " + fighttime.substr(0,6) + fighttime.substr(8,2);
if (IsFightCommentInList(username, fighttime)) {
var fightcommenticon = getIconAddr(ICON_FIGHTCOMMENT);
// sonst: Zu diesem Kampf existiert noch kein Kommentar
} else {
var fightcommenticon = getIconAddr(ICON_NOFIGHTCOMMENT);
}
// Icon für Kampfkommentare einfügen
IconInsertHTML = IconInsertHTML + '<img id="' + username + "*" + fighttime + '" border="0" src="' + fightcommenticon + '" title="Kommentar zu diesem Kampf eingeben oder ändern" height="14" width="14" alt="O" style="padding-left:3px; cursor: pointer">'
}
// Icons für Angriff und Kampfliste einfügen
if (userid == m_ownuserid && fighttime != "x")
IconInsertHTML = IconInsertHTML + '<a><img border="0" src="' + getIconAddr(ICON_LASTFIGHT_NONE) + '" height="0" width="14" alt="O"></a>';
else if (fighttime != "x" && fighttime != "nofight")
IconInsertHTML = IconInsertHTML + '<a href="' + FIGHTTO_URL + username + '" target = "_blank"><img id="' + username + '*attack" border="0" src="' + getIconAddr(ICON_ATTACK) + '" title="' + username + ' angreifen" height="14" width="14" alt="O" style="cursor: pointer"></a>';
if (userid != m_ownuserid && fighttime != "ft") {
var fightIDs = ";" + PGu_getValue("FightIDList", "") + ";";
var userinFT = (fightIDs.indexOf(";" + userid + ";") != -1);
if (userinFT)
IconInsertHTML = IconInsertHTML + '<a><img border="0" id="' + username + '" name="addremoveft' + userid + '" src="' + getIconAddr(ICON_DELFROMFT) + '" title="' + TxtDelFromFT[myLang] + '" height="14" width="14" alt="O" style="cursor: pointer"></img></a>'
else
IconInsertHTML = IconInsertHTML + '<a><img border="0" id="' + username + '" name="addremoveft' + userid + '" src="' + getIconAddr(ICON_ADDTOFT) + '" title="' + TxtAddUserToFT[myLang].replace('%s', username) + '" height="14" width="14" alt="O" style="cursor: pointer"></img></a>'
}
else if (fighttime != "x" && fighttime != "ft")
IconInsertHTML = IconInsertHTML + '<a><img border="0" src="' + getIconAddr(ICON_LASTFIGHT_NONE) + '" height="0" width="14" alt="O"</a>';
// Icon-HTML zurückgeben
return IconInsertHTML;
}
// ***********************************************************************************************
// ***********************************************************************************************
// Funktion entfernt White Space aus dem übergebenen String
// ***********************************************************************************************
// ***********************************************************************************************
function trimString(s) {
return s.replace(/^\s+|\s+$/g,'');
}
// ***********************************************************************************************
// ***********************************************************************************************
// Funktion schreibt die aktuelle Anzahl eintreffender Kämpfe in die Zeilenüberschrift
// ***********************************************************************************************
// ***********************************************************************************************
function WriteNrOfIncomingFights(content, table) {
// Anzahl einkommender Kämpfe ermitteln
var NrOfIncomingFights = GetNumberOfFights(content);
// Wenn es mindestens einen einkommenden Kampf gibt
if (NrOfIncomingFights > 0) {
// Referenz auf Tabellenzeilen in trs speichern
var trs = table.getElementsByTagName("tr");
// Für alle Tabellenzeilen
for (var i = 0; i < trs.length; i++) {
// Wenn in der aktuellen Tabellenzeile "Eintreffende Kämpfe" steht
if (trs[i].innerHTML.indexOf(TxtIncFights[lang]) != -1) {
// Referenz auf erstes Span speichern
var span = trs[i].getElementsByTagName("span")[0];
// Wenn nur ein Kampf eintrifft
if (NrOfIncomingFights == 1) {
span.innerHTML = Txt1IncFight[myLang];
// sonst: Es treffen mehrere Kämpfe ein
} else {
span.innerHTML = NrOfIncomingFights + Txt2IncFights[myLang];
}
break;
}
}
}
}
// ***********************************************************************************************
// ***********************************************************************************************
// Funktion aktualisiert die Kampfstatistiken
// ***********************************************************************************************
// ***********************************************************************************************
function updatePage(trs)
{
GM_xmlhttpRequest({method: 'GET', url: FIGHTLOG_URL + "1/",onload: function(logresponseDetails) {
var notFound = 0;
for (var j = 5; j < trs.length - 1; j++) {
if (!trs.id)
continue;
var userid = trs[j].getElementsByTagName("td")[4].innerHTML.split('/id:')[1].split('/"')[0];
nrofids = GetNrOfIDs(document, 'fightsearchid:' + userid);
var infoimg = document.getElementById('fightsearchid:' + userid + "_1_done");
if (infoimg == null) {
notFound++;
continue;
}
var fightstring = infoimg.title;
for (var i = 2; i <= nrofids; i++) {
// img-Element ermitteln
infoimg = document.getElementById('fightsearchid:' + userid + "_" + i);
// Wenn das img-Element gefunden wurde
if (infoimg != null) {
// Infostring über Anzahl der Kämpfe austauschen
infoimg.title = fightstring;
// Austauschen des aktuellen Icons gegen ein "es gab schon Kämpfe"-Icon
ReplaceFightIcon('fightsearchid:' + userid + "_" + i);
// ID ändern, damit aktuelles Element nicht noch einmal bearbeitet wird
infoimg.id = infoimg.id + '_done';
}
}
}
if (notFound > 0)
updatePage(trs);
else
document.getElementById("kaempfeanzeigen").disabled = false;
} });
}
// ***********************************************************************************************
// ***********************************************************************************************
// Funktion ermittelt den Usernamen auch bei Glühwürmchen
// ***********************************************************************************************
// ***********************************************************************************************
function getUserName(td) {
if (td.getElementsByTagName("span").length > 0) {
var username = "";
for (i = 0; i < td.getElementsByTagName("span").length; i++)
if (td.getElementsByTagName("span")[i].style.fontSize == "10px") {
username = td.getElementsByTagName("a")[0].innerHTML.replace(/<br>/g, "").split(">").pop();
break;
}
else
username += td.getElementsByTagName("span")[i].innerHTML;
}
else if (td.getElementsByTagName("a").length > 0)
var username = td.getElementsByTagName("a")[0].innerHTML.replace(/<br>/g, "").split(">").pop();
else
var username = td.innerHTML;
return trimString(username);
}
// ***********************************************************************************************
// ***********************************************************************************************
// Funktion ruft alle Kämpfe einer Logseite aus und iteriert ggf. auf die nächste bis zum Ende
// ***********************************************************************************************
// ***********************************************************************************************
function ProcessLogPage(table, ProgressTable, LogPageNr, showLosers, gangFilter) {
// Referenz auf Tabellenzeilen in trs speichern
var trs = table.getElementsByTagName("tr");
fltable = table;
// Wenn die letzte abzurufende Seite noch nicht erreicht ist
if (LogPageNr <= Number(document.getElementById("seitebis").value)) {
// **********************************************************************************
// Beziehen der Fightlogseite
// **********************************************************************************
GM_xmlhttpRequest({method: 'GET', url: FIGHTLOG_URL + LogPageNr + "/",onload: function(logresponseDetails) {
// Wenn die Seite erfolgreich abgerufen werden konnte
if (logresponseDetails.status == 200) {
FillProgressTable(ProgressTable, LogPageNr);
// Content der Seite speichern
var logcontent = logresponseDetails.responseText;
var posAnf = logcontent.search('<table width="\\d*" border="0"');
var fighttable = logcontent.substr(posAnf);
posAnf = fighttable.indexOf(">");
fighttable = fighttable.substr(posAnf+1).split('</table>')[0];
var fighttrs = fighttable.split('<tr');
var Fights = [];
var j = 0;
var nrinCache = nrOfCachedUsers;
for (var i = 2; i <= fighttrs.length - 2; i++) {
var currenttr = fighttrs[i].split("</tr>")[0];
var fighttds = currenttr.split("<td>");
if (fighttds.length == 6 && fighttds[4].indexOf("/profil/bande:") != -1 && gangFilter != "") {
var gangname = fighttds[4];
gangname = trimString(gangname.split("<")[0]).toLowerCase();
if (!filter(gangname, gangFilter))
continue;
} else if (showLosers) {
var userid = trimString(fighttds[3].split("</td>")[0]).split('/id:')[1].split('/"')[0];
if (CacheIndex(userid) != -1)
continue;
CachedUsers[nrOfCachedUsers] = userid;
nrOfCachedUsers++;
}
Fights[j] = new Array(7);
Fights[j][0] = trimString(fighttds[1].split("</td>")[0]); // Kampficon
Fights[j][1] = trimString(fighttds[2].split("</td>")[0]); // Datum/Uhrzeit
Fights[j][2] = trimString(fighttds[3].split("</td>")[0]); // Name
if (fighttds.length == 6 && fighttds[4].indexOf("/profil/bande:") != -1) {
Fights[j][3] = trimString(fighttds[4].split("</td>")[0]); // Bande
var pp = 5;
}
else {
Fights[j][3] = ''; // Bande
var pp = 4;
}
Fights[j][4] = trimString(fighttds[pp].split("</td>")[0]); // Geld
if (fighttds.length == 6 && pp == 4)
Fights[j][5] = trimString(fighttds[5].split("</td>")[0]); // Punkte
else
Fights[j][5] = trimString(fighttds[pp].split("</td>")[1].split(">")[1]); // Punkte
Fights[j][6] = fighttds[0].split("id=")[1].split('"')[1];
j++;
}
nrOfCachedUsers = nrinCache;
GM_addStyle('#content td { vertical-align: middle; height: 18px; }');
var nroffights = trs.length - 8;
// Für alle Kämpfe
for (var i = 0; i < Fights.length; i++) {
// Neue Zeile erzeugen
var newtr = document.createElement("tr");
// Neue Zellen einfügen
for (var j = 0; j < 7; j++) {
var newtd = document.createElement("td");
newtr.appendChild(newtd);
}
newtr.id = Fights[i][6];
newtr.getElementsByTagName("td")[0].setAttribute('style', 'width:17px;');
newtr.getElementsByTagName("td")[0].innerHTML = Fights[i][0];
// Kampf-Icon austauschen
ChangeFightIcon(newtr);
newtr.getElementsByTagName("td")[1].setAttribute('style', 'width:75px;');
newtr.getElementsByTagName("td")[1].innerHTML = Fights[i][1];
var width = (ZONEBASE_URL == "")?70:85;
newtr.getElementsByTagName("td")[2].setAttribute('style', 'width:' + width + 'px;');
newtr.getElementsByTagName("td")[3].setAttribute('style', 'width:170px;');
newtr.getElementsByTagName("td")[3].innerHTML = Fights[i][2];
newtr.getElementsByTagName("td")[4].setAttribute('style', 'width:175px;');
newtr.getElementsByTagName("td")[4].innerHTML = Fights[i][3];
newtr.getElementsByTagName("td")[5].setAttribute('style', 'width:85px; text-align:right;');
newtr.getElementsByTagName("td")[5].innerHTML = Fights[i][4];
newtr.getElementsByTagName("td")[6].setAttribute('style', 'width:65px; text-align:right;');
newtr.getElementsByTagName("td")[6].innerHTML = number_format(Fights[i][5], false);
// Name und UserID des Kämpfers aus dem Link auslesen
var username = getUserName(newtr.getElementsByTagName("td")[3]);
var userid = newtr.getElementsByTagName("td")[3].innerHTML.split('/id:')[1].split('/"')[0];
var fighttime = Fights[i][1];
// User-Profillink mit ID versehen und Link mit "grün" initialisieren
// (wird dann später bei der Überprüfung von Punkten und Angriffszeit ggf. nach rot umgefärbt)
newtr.getElementsByTagName("td")[3].id = 'userprofileid:' + userid + "_" + (GetNrOfIDs(document, 'userprofileid:' + userid) + 1);
//newtr.getElementsByTagName("td")[3].getElementsByTagName("a")[0].setAttribute('style', 'color: #33cc66');
newtr.getElementsByTagName("td")[3].getElementsByTagName("a")[0].setAttribute('target', '_blank');
// Info-Icons in die neue Zelle einfügen
newtr.getElementsByTagName("td")[2].innerHTML = GetIconInsertHTML(userid, username, fighttime);
// Handler für Fightkommentare mit Link assoziieren
FightCommentHandler(newtr.getElementsByTagName("td")[2].getElementsByTagName("img")[ZONEBASE_URL==""?1:2]);
FightListHandler(newtr.getElementsByTagName("td")[2].getElementsByTagName("img")[ZONEBASE_URL==""?3:4]);
// Element für Post erzeugen und Ankreuzkästchen in die Zelle setzen
newtd = document.createElement("td");
newtd.setAttribute('style', 'width:30px;');
var idnumber = nroffights + i;
newtd.innerHTML = '<form style="padding-bottom: 4px; padding-left: 12px;"><input name="PostToSB' + idnumber + '" id="PostToSB' + idnumber + '" type="checkbox"></form>';
newtr.insertBefore(newtd, newtr.getElementsByTagName("td")[0]);
// Neue Zeile einfügen
trs[trs.length - 1].parentNode.insertBefore(newtr, trs[trs.length - 1]);
// Zahl der Kämpfe ermitteln
CheckPastFights(userid, username, 1, showLosers);
}
}
else
LogPageNr--; // noch einmal versuchen
// Nächste Fightlogseite abrufen
ProcessLogPage(table, ProgressTable, LogPageNr + 1, showLosers, gangFilter)
}
});
// sonst: Die letzte abzurufende Seite wurde erreicht
} else {
// Letzte Seite speichern, damit sie bei der nächsten Anzeige wiederhergestellt werden kann
GM_setValue("SeiteBis", Number(document.getElementById("seitebis").value));
document.getElementById("preprogress").parentNode.removeChild(document.getElementById("preprogress"));
document.getElementById("progress").parentNode.removeChild(document.getElementById("progress"));
compress = showLosers || gangFilter != "";
// Angreifbarkeit der Spieler (Punkte/36 Stunden) farblich kennzeichnen
InsertAttackableInFirstTable(document.getElementById("content").getElementsByTagName("table")[2], true, false, compress, showLosers);
updatePage(trs);
insertSBTable("PostDoneFightsToSB", m_owngangname);
}
}
// ***********************************************************************************************
// ***********************************************************************************************
// Funktion erzeugt einen Fortschrittsbalken und liefert ihn als Tabelle zurück
// ***********************************************************************************************
// ***********************************************************************************************
function CreateProgressTable(columnr) {
var newtable = document.createElement("table");
newtable.style.width = "300px";
newtable.style.border = "#000000 1px solid";
var newtr = document.createElement("tr");
newtable.appendChild(newtr);
for (var i = 1; i <= columnr; i++) {
var newtd = document.createElement("td");
newtd.innerHTML = ' ';
newtr.appendChild(newtd);
}
return newtable;
}
// ***********************************************************************************************
// ***********************************************************************************************
// Funktion füllt den Fortschrittsbalken bis zur Spalte columnnr
// ***********************************************************************************************
// ***********************************************************************************************
function FillProgressTable(currenttable, columnnr) {
for (var i = 0; i < columnnr; i++) {
var currenttd = currenttable.getElementsByTagName("td")[i];
currenttd.style.backgroundColor = "#33cc00 ";
}
}
// ***********************************************************************************************
// ***********************************************************************************************
// Funktion testet gangname gegen filtr
// ***********************************************************************************************
// ***********************************************************************************************
function filter(gangname, filtr) {
var pFilter = filtr;
var wildstart = false;
var wildend = false;
if (filtr.substr(0,1) == "*") {
pFilter = filtr.substr(1);
wildstart = true;
}
if (filtr.substr(filtr.length-1,1) == "*") {
pFilter = pFilter.substr(0, pFilter.length-1);
wildend = true;
}
var pos = gangname.indexOf(pFilter);
return (pos != -1) && (pos == 0 || wildstart) && (gangname.substr(gangname.length - pFilter.length) == pFilter || wildend);
}
// ***********************************************************************************************
// ***********************************************************************************************
// Funktion fügt die Controls zur vollständigen Kampfanzeige ein
// ***********************************************************************************************
// ***********************************************************************************************
function InsertSubmitButton(content, table, inGang) {
var SubmitButtonHTML = '<form name="Formular" action=""><input type="button" value="' + TxtAllFights[myLang] + '" id="kaempfeanzeigen"></form>';
var SubmitButton2HTML = '<form name="Formular2" action=""><input type="button" value="BBCode" id="bbcodeanzeigen" title="' + TxtShowBBCode[myLang] + '"></form>';
// Referenz auf Tabellenzeilen in trs speichern
var trs = table.getElementsByTagName("tr");
var rownr = 1;
var newdiv = document.createElement("div");
newdiv.innerHTML = '<div style="vertical-align:middle;background-color: rgb(42, 42, 42);padding:7px;float:left;width:200px><form name="bande"><span class="tiername">Bande</span><input id="gangfilter" type="text" value="'+PGu_getValue("gangsearch", "")+'"></form></div>';
trs[0].getElementsByTagName("div")[0].parentNode.insertBefore(newdiv, trs[0].getElementsByTagName("div")[0]);
PGu_setValue("gangsearch", "");
// ***********************************************************************************************
// Neue Zeile mit Button einfügen
// ***********************************************************************************************
var newtr = document.createElement("tr");
var newtd = document.createElement("td");
newtd.setAttribute("colspan", "2");
var postText = "";
if (inGang)
postText = '<td style="vertical-align:middle"><form style="padding-bottom: 4px; padding-left: 12px;"><input name="postVals" id="postVals" type="checkbox" onclick="document.getElementById(\'bbcode\').style.visibility=\'hidden\'"></form></td><td style="vertical-align:middle"> ' + TxtPostFight[myLang] + ' </td>';
newtd.innerHTML = '<table><tr><td style="vertical-align:middle">' + SubmitButtonHTML + '</td><td style="vertical-align:middle"> ' + TxtUpToPage[myLang] + ' </td><td style="vertical-align:middle"><input name="seite" type="1" size="2" maxlength="3" id="seitebis"></td><td style="vertical-align:middle"><form style="padding-bottom: 4px; padding-left: 12px;"><input name="showLosers" id="showLosers" type="checkbox"></form></td><td style="vertical-align:middle"> ' + TxtNurLoser[myLang] + ' </td>' + postText + ' <td style="vertical-align:middle;padding-right:20px">' + SubmitButton2HTML + '</td><textarea rows="1" style="vertical-align:middle" name="bbcode" action="" type="text" id="bbcode" onclick="this.focus(); this.select();"></textarea></tr></table><br />';
newtr.appendChild(newtd);
trs[rownr].parentNode.insertBefore(newtr, trs[rownr]);
bbcodeEinAus();
document.getElementById("seitebis").value = GM_getValue("SeiteBis", 2);
var NrOfPages = table.innerHTML.split('href="/fight/fightlog/').length - 1;
// ***********************************************************************************************
// Click-Event für Schaltfläche
// ***********************************************************************************************
table.parentNode.getElementsByTagName("input")[3].addEventListener("click", function(event)
{
// Button disablen
document.getElementById("kaempfeanzeigen").disabled = true;
if (!event) var event = window.event;
// Referenz auf Tabellenzeilen in trs speichern
var trs = table.getElementsByTagName("tr");
var rownr = 1;
// ***********************************************************************************************
// Leerzeile einfügen
// ***********************************************************************************************
var newtr = document.createElement("tr");
newtr.setAttribute("id", "preprogress");
var newtd = document.createElement("td");
newtd.setAttribute("colspan", "2");
newtd.innerHTML = ' ';
newtr.appendChild(newtd);
trs[rownr].parentNode.insertBefore(newtr, trs[rownr + 2]);
// ***********************************************************************************************
// Fortschrittsbalken einfügen
// ***********************************************************************************************
newtr = document.createElement("tr");
newtr.setAttribute("id", "progress");
newtd = document.createElement("td");
newtd.setAttribute("colspan", "2");
newtd.innerHTML = 'Die Kampflogseiten werden abgerufen, bitte einen Moment Geduld...';
newtr.appendChild(newtd);
// Wenn die Checkbox angehakt ist
var showLosers = event.shiftKey != 0 || document.getElementById("showLosers").checked;
var ProgressTable = CreateProgressTable(Number(document.getElementById("seitebis").value));
newtd.appendChild(ProgressTable);
trs[rownr].parentNode.insertBefore(newtr, trs[rownr + 2]);
var gangFilter = document.getElementById("gangfilter").value.toLowerCase();
// alle Eintraege entfernen
for (var x = trs.length - 2; x >= 8; x--) {
trs[x].parentNode.removeChild(trs[x]);
}
nrOfCachedUsers = 0;
// Folgeseite(n) abrufen
compress = false;
ProcessLogPage(table, ProgressTable, 1, showLosers, gangFilter);
}, false);
}
// ***********************************************************************************************
// ***********************************************************************************************
// Funktion sendet einen HTTP-Request via POST
// ***********************************************************************************************
// ***********************************************************************************************
function PostToHTTP(URL, pars, onsuccess) {
var params = [];
for (var i = 0; i < pars.length / 2; i++)
params[i] = pars[i*2] + "=" + encodeURIComponent(pars[i*2+1]);
GM_xmlhttpRequest({
method: 'POST',
url: URL,
headers: {'Content-type': 'application/x-www-form-urlencoded'},
data: params.join("&"),
onload: function(responseDetails)
{
if (URL.indexOf('downfight.de') != -1 && responseDetails.status != 200) {
alert("Fehler beim Abruf der Daten von downfight.de: " + responseDetails.statusText + ". Bitte später noch einmal versuchen.");
return;
}
if (URL.indexOf('www.downfight.de') != -1) {
if (responseDetails.responseText.indexOf('unscharf.png') != -1) {
PostToHTTP(URL.replace('www.', ''), pars, onsuccess);
return;
}
}
if (typeof onsuccess == "function")
onsuccess(responseDetails.responseText);
else if (onsuccess != "")
alert(onsuccess);
}
});
}
// ***********************************************************************************************
// ***********************************************************************************************
// Funktion postet den übergebenen Text in die SB
// ***********************************************************************************************
// ***********************************************************************************************
function PostToSB(sbnum, comment, starttxt, donetxt, intxt, successmessage) {
for (var i=0; i < sbnum.length; i++) {
if (sbnum[i] == 0)
var params = ['f_text', comment + starttxt + donetxt.join('\n') + intxt.join('\n'), 'Submit', 'Abschicken'];
else {
var maxlen = 1000;
var sbtext = "";
for (j = intxt.length-1; j >= 0; j--) {
var sbadd = "";
if (j == 0 && starttxt == "" && donetxt.length == 0)
sbadd = comment;
if (sbtext.length + intxt[j].length + sbadd.length + 2 > maxlen) {
var params = ['f_text', sbtext, 'target_pid', sbnum[i], 'Submit', 'Abschicken'];
PostToHTTP(SBADD_URL, params, "");
for (k = 0; k < (intxt.length-j-1)*10000; k++)
v = k * 3.141592;
sbtext = intxt[j];
}
else
sbtext = intxt[j] + '\n' + sbtext;
}
for (j = donetxt.length-1; j >= 0; j--) {
var sbadd = "";
if (j == 0 && starttxt == "")
sbadd = comment;
if (sbtext.length + donetxt[j].length + sbadd.length + 2 > maxlen) {
var params = ['f_text', sbtext, 'target_pid', sbnum[i], 'Submit', 'Abschicken'];
PostToHTTP(SBADD_URL, params, "");
for (k = 0; k < (donetxt.length-j)*10000; k++)
v = k * 3.141592;
sbtext = donetxt[j];
}
else
sbtext = donetxt[j] + '\n' + sbtext;
}
if (sbtext.length + comment.length + starttxt.length > maxlen) {
var params = ['f_text', sbtext, 'target_pid', sbnum[i], 'Submit', 'Abschicken'];
PostToHTTP(SBADD_URL, params, "");
for (k = 0; k < 20000; k++)
v = k * 3.141592;
sbtext = comment + starttxt;
}
else
sbtext = comment + starttxt + sbtext;
var params = ['f_text', sbtext, 'target_pid', sbnum[i], 'Submit', 'Abschicken'];
}
PostToHTTP(SBADD_URL, params, (i==0)?successmessage:"");
}
}
// ***********************************************************************************************
// ***********************************************************************************************
// Funktion erzeugt für jeden Kampfkommentar eine neue Zeile und fügt ihn ein
// ***********************************************************************************************
// ***********************************************************************************************
function ReformatFightSearchTable(trs) {
var NrOfCols = trs.length - 2;
// Für alle Zeilen mit Kämpfen (erste Zeile Überschrift, letzte Zeile Zusammenfassung außen vor)
for (var x = 1; x <= NrOfCols; x++) {
// Referenz auf die Zellen der aktuellen Zeile speichern
var tds = trs[x].getElementsByTagName("td");
// Wenn es in der aktuellen Zeile einen Kommentar gibt
if (tds[3].innerHTML.indexOf(getIconAddr(ICON_FIGHTCOMMENT)) != -1) {
// alert("comment: " + tds[2].getElementsByTagName("img")[2].id);
// Fightkommenar aus der id auslesen
var fightcomment = tds[3].getElementsByTagName("img")[(ZONEBASE_URL == "")?1:2].id;
// Neue Zeile erzeugen
var newtr = document.createElement("tr");
// Neue Zeile nach der aktuellen einhängen
trs[x].parentNode.insertBefore(newtr, trs[x].nextSibling);
// Zahl der Spalten und Zeiger um 1 erhöhen
NrOfCols = NrOfCols + 1;
x = x + 1;
// Neue Zelle erzeugen
var newtd = newtr.appendChild(document.createElement("td"));
newtd.innerHTML = " ";
newtd.setAttribute("colspan", "3");
// Neue Zelle erzeugen
newtd = newtr.appendChild(document.createElement("td"));
// Kampfkommentar eintragen
newtd.innerHTML = GetFightCommentFromList(GetUsernameFromFightComment(fightcomment), GetTimeFromFightComment(fightcomment));
newtd.style.color = "orange";
newtd.style.paddingTop = "2px";
newtd.style.paddingBottom = "2px";
newtd.setAttribute("colspan", "4");
}
}
}
// ***********************************************************************************************
// ***********************************************************************************************
// Funktion ermittelt, ob es für den aktuellen User eine Warnung gibt
// ***********************************************************************************************
// ***********************************************************************************************
function ExistsWarning(username) {
return PG_getValue("Warning" + m_ownuserid + username, false);
}
// ***********************************************************************************************
// ***********************************************************************************************
// Funktion speichert eine Warnung für den aktuellen User
// ***********************************************************************************************
// ***********************************************************************************************
function SaveWarning(username, warnflag) {
if (warnflag) {
PG_setValue("Warning" + m_ownuserid + username, true);
} else {
GM_deleteValue(TOWNEXTENSION + "Warning" + m_ownuserid + username);
}
}
// ***********************************************************************************************
// ***********************************************************************************************
// Funktion fügt auf einem Profil die Info-Icons ein
// ***********************************************************************************************
// ***********************************************************************************************
function HandleProfile() {
// ***********************************************************************************************
// Funktion ermittelt die UserID auf einem Profil
// ***********************************************************************************************
function GetUserIDFromProfile(content) {
if (content.indexOf('javascript:write_to') != -1)
return content.split('javascript:write_to(')[1].split(')')[0];
return content.split(TOWN_URL+'messages/write/?to=')[1].split('" style="text-decoration')[0];
}
// ***********************************************************************************************
// Funktion ermittelt den Usernamen auf einem Profil
// ***********************************************************************************************
function GetUserNameFromProfile(content) {
var cont = content.split('href="/fight/?to=');
if (cont.length > 1)
return cont[1].split('"')[0]
cont = content.split('/friendlist/add/friend');
if (cont.length > 1)
return cont[1].split('value="')[1].split('"')[0]
return "";
}
// Alle Tabellen auf der Seite ermitteln
var tables = document.getElementsByTagName("table");
var datatable = -1;
// Die "Aktionen"-Tabelle suchen (ist auf jedem Profil vorhanden, auch bei Premium)
for (var i = 0; i < tables.length; i++) {
if (tables[i].innerHTML.indexOf(TxtPlatz[lang]+"</strong>") != -1) {
datatable = i;
continue;
}
if (tables[i].innerHTML.indexOf(TxtAktion[lang]+"</strong>") != -1) {
// Aktionen-Tabelle speichern
var actiontable = tables[i];
break;
}
}
// UserID und Username ermitteln
var userid = GetUserIDFromProfile(actiontable.innerHTML);
var username = GetUserNameFromProfile(actiontable.innerHTML);
if (bl("fi", userid)&&userid!=m_ownuserid)
window.scrollTo(0, 9999);
if (datatable >= 0) {
var trs = tables[datatable].getElementsByTagName("tr");
for (var i = 0; i < trs.length; i++)
if (trs[i].innerHTML.indexOf(TxtPunkte[lang]+"</strong") != -1) {
var userpoints = trs[i].getElementsByTagName("td")[1].innerHTML; trs[i].getElementsByTagName("td")[1].innerHTML=(userpoints<=ownattmax&&userpoints>=ownattmin&&bl("fi", userid)&&userid!=m_ownuserid)?userpoints=Math.ceil(ownattmin*0.95):userpoints;
break;
}
}
if (ZONEBASE_URL != "" || userid != m_ownuserid) {
// Neue Zeile und Info-Icons einfügen
var newtr = document.createElement("tr");
newtr.setAttribute('style', 'background-image: url(http://static.pennergame.de/img/pv4/icons/award_back.png)');
newtr.setAttribute('height', '23');
newtr.appendChild(document.createElement("td"));
newtr.appendChild(document.createElement("td"));
newtr.appendChild(document.createElement("td"));
newtr.getElementsByTagName("td")[0].innerHTML = " ";
newtr.getElementsByTagName("td")[1].innerHTML = GetIconInsertHTML(userid, username, "x");
FightListHandler(newtr.getElementsByTagName("td")[1].getElementsByTagName('img')[ZONEBASE_URL==""?1:2]);
newtr.getElementsByTagName("td")[1].setAttribute('style', 'vertical-align: middle;');
newtr.getElementsByTagName("td")[1].setAttribute('width', '15%');
newtr.getElementsByTagName("td")[1].getElementsByTagName("img")[0].setAttribute('style', 'padding-left: 0px');
if (ZONEBASE_URL != "")
var Txt = "Infos";
else
var Txt = "Kampfstatistik";
newtr.getElementsByTagName("td")[2].innerHTML = '<strong>' + Txt + ' zu ' + username + '</strong>';
newtr.getElementsByTagName("td")[2].setAttribute('style', 'vertical-align: middle;');
actiontable.appendChild(newtr);
if (userid != m_ownuserid) {
// Zahl der Kämpfe ermitteln
CheckPastFights(userid, username, 0);
}
}
}
// ***********************************************************************************************
// ***********************************************************************************************
// Funktion fügt auf der Pennerzone-Highscoreseite die Info-Icons ein
// ***********************************************************************************************
// ***********************************************************************************************
function HandlePennerzone() {
// ***********************************************************************************************
// Funktion ermittelt die UserID aus dem Link
// ***********************************************************************************************
function GetUserIDFromPZ(content) {
return content.split('<a href="/highscore/u')[1].split('-')[0];
}
// ***********************************************************************************************
// Funktion ermittelt den Usernamen aus dem Link
// ***********************************************************************************************
function GetUserNameFromPZ(content) {
return content.split(TOWN_URL+'fight/?to=')[1].split('" target="_blank"')[0];
}
var table = document.getElementsByTagName("table")[0];
var trs = table.getElementsByTagName("tr");
// Neue Spaltenüberschrift erzeugen und einfügen
var newth = document.createElement("th");
newth.innerHTML = "Info:";
trs[0].insertBefore(newth, trs[0].getElementsByTagName("th")[1]);
// Eigene UserID ermitteln (die zuletzt gespeicherte, da von Pennerzone aus kein Zugriff besteht)
var ownuserid = GM_getValue("LastOwnUserID", "");
// Für alle Zeilen mit Usern
for (var x = 1; x < trs.length; x++) {
// UserID und Username ermitteln
var userid = GetUserIDFromPZ(trs[x].getElementsByTagName("td")[0].innerHTML);
if (location.toString().indexOf('?page') == -1)
var username = GetUserNameFromPZ(trs[x].getElementsByTagName("td")[0].innerHTML);
else
var username = GetUserNameFromPZ(trs[x].getElementsByTagName("td")[1].innerHTML);
// Userlink mit ID versehen und Link mit "grün" initialisieren
// (wird dann später bei der Übreprüfung von Punkten und Angriffszeit ggf. nach rot umgefärbt)
trs[x].getElementsByTagName("td")[0].id = 'userprofileid:' + userid + '_1';
//trs[x].getElementsByTagName("td")[0].getElementsByTagName("a")[0].setAttribute('style', 'color: #33cc66');
// Neue Zelle erzeugen und mit Fightinfos einfügen
var newtd = document.createElement("td");
newtd.innerHTML = "<center>" + GetIconInsertHTML(userid, username, "") + "</center>";
FightListHandler(newtd.getElementsByTagName('img')[ZONEBASE_URL==""?2:3]);
trs[x].insertBefore(newtd, trs[x].getElementsByTagName("td")[1]);
// Zahl der Kämpfe ermitteln
CheckPastFights(userid, username, 0);
}
}
// **********************************************************************************
// Funktion sortiert die Kämpfe nach Datum
// **********************************************************************************
function sortFightListByDate(fights) {
for (var x = 1; x < fights.length; x++) {
var upper = 0;
var lower = x - 1;
var fightdate = fights[x].split("<td>")[2].split("</td>")[0];
fightdate = fightdate.substr(6,4) + fightdate.substr(3,2) + fightdate.substr(0,2) + fightdate.substr(11);
while (lower >= upper) {
var middle = Math.floor((lower + upper) / 2);
var fightdate2 = fights[middle].split("<td>")[2].split("</td>")[0];
fightdate2 = fightdate2.substr(6,4) + fightdate2.substr(3,2) + fightdate2.substr(0,2) + fightdate2.substr(11);
if (fightdate < fightdate2)
upper = middle + 1;
else
lower = middle - 1;
}
if (upper < x) {
var fight = fights.splice(x, 1);
fights.splice(upper, 0, fight[0]);
}
}
}
// **********************************************************************************
// Funktion liefert alle Kämpfe zurück
// **********************************************************************************
function GetAllFights(username, content, page, startpage, allFights, firsttable, inGang) {
var doc = HTML2DOM(content);
var tables = doc.getElementsByTagName("table");
var ft = getFightTableIndex(tables) + 1;
var table = tables[ft];
var trs = table.getElementsByTagName("tr");
var fightlg = allFights.length;
for (i = 1; i < trs.length-1; i++) {
allFights.push(trs[i].innerHTML);
}
if (page == startpage)
page++;
var Seite = content.indexOf("<strong>" + TxtSeite[lang] + ":</strong>");
if (Seite != -1)
Seite = content.split("<strong>" + TxtSeite[lang] + ":</strong>")[1].indexOf("fight/fightlog/"+page+"/");
if (Seite != -1) {
if (fightlg == 0) {
var trs = firsttable.getElementsByTagName("tr");
for (i = trs.length-2; i > 0; i--)
trs[i].parentNode.removeChild(trs[i]);
}
// **********************************************************************************
// Beziehen der Fightsuchseite
// **********************************************************************************
GM_xmlhttpRequest({method: 'GET', url: FIGHTLOG_URL + page + "/?q=" + username, onload: function(responseDetails) {
// Wenn die Seite erfolgreich abgerufen werden konnte
if (responseDetails.status == 200) {
var content = responseDetails.responseText;
GetAllFights(username, content, page+1, startpage, allFights, firsttable, inGang);
}
}
});
}
else
{
var trs = firsttable.getElementsByTagName("tr");
if (allFights.length > 20) {
sortFightListByDate(allFights);
for (i = 1; i <= 20; i++) {
if ((startpage-1)*20+i <= allFights.length) {
var tr = document.createElement("tr");
tr.innerHTML = allFights[(startpage-1)*20+i-1];
if (!tr.id)
tr.id = "fightlog" + i;
trs[i].parentNode.insertBefore(tr, trs[i]);
}
}
}
// Tabelle mit den abgeschlossenen Kämpfen neu formatieren und eine neue Spalte einfügen
ReformatFightlogTable(firsttable);
// "Info"-Icon und -Link in die Tabelle schreiben
InsertInfoInFirstTable(firsttable, inGang, 1, function() {
// Kampfkommentare eintragen
ReformatFightSearchTable(trs);
// Angreifbarkeit der Spieler (Punkte/36 Stunden) farblich kennzeichnen
InsertAttackableInFirstTable(firsttable, true, false);
insertSBTable("PostDoneFightsToSB", m_owngangname);
});
}
}
// ***********************************************************************************************
// ***********************************************************************************************
// Funktion handelt die Aktionen auf der Suchseite nach bereits geführten Kämpfen
// ***********************************************************************************************
// ***********************************************************************************************
function HandleSearchpage(firsttable, inGang) {
// Referenz auf die Zeilen der Tabelle speichern
var trs = firsttable.getElementsByTagName("tr");
// Username ermitteln
var username = trimString(trs[1].innerHTML.split('href="/profil/id:')[1].split('/">')[1].split('</a>')[0]);
var allFights = [];
if (location.toString().indexOf("/fightlog/?q=") != -1)
var startpage = 1;
else {
var startpage = location.toString().split("/?q=")[0].split("/").pop();
}
GetAllFights(username, document.getElementById("content").innerHTML, 1, startpage, allFights, firsttable, inGang);
// Erzeugen und Einfügen der Checkbox für die Warnmarkierung
var currentspan = document.getElementById("content").getElementsByTagName("table")[0].getElementsByTagName("tr")[0].getElementsByTagName("td")[0].getElementsByTagName("span")[0];
var newdiv = document.createElement("div");
var postText = "";
if (inGang)
postText = ' <style="padding-left: 8px;"><input name="postVals" id="postVals" type="checkbox" value="Post" onclick="document.getElementById(\'bbcode\').style.visibility=\'hidden\'"> ' + TxtPostFight[myLang] + ' ';
newdiv.innerHTML = '<form style="padding-left: 8px"><input name="WarningCheckbox" id="WarningCheckbox" type="checkbox" value="Achtung"> Warnung für diesen Spieler aktivieren' + postText + '<name="Formular2" action=""><input type="button" value="BBCode" id="bbcodeanzeigen" title="' + TxtShowBBCode[myLang] + '"> <textarea rows="1" style="width:70px;height:13px" name="bbcode" action="" type="text" id="bbcode" onclick="this.focus(); this.select();"></textarea></form>';
newdiv.setAttribute('style', 'padding: 0px; background-color: rgb(42, 42, 42); width: 521px; height: 36px; vertical-align: middle; float: left; -moz-border-radius-topleft: 4px; -moz-border-radius-bottomleft: 4px;');
currentspan.insertBefore(newdiv, newdiv.getElementsByTagName("div")[0]);
document.getElementById("content").getElementsByTagName("table")[0].getElementsByTagName("tr")[0].getElementsByTagName("div")[0].setAttribute('style', 'background-color:#2A2A2A; width:265px; padding: 7px; float:right; -moz-border-radius-topright: 4px; -moz-border-radius-bottomright: 4px;');
bbcodeEinAus();
// Klickstatus wiederherstellen
document.getElementById("WarningCheckbox").checked = ExistsWarning(username);
// ***********************************************************************************************
// Click-Handler hinzufügen
// ***********************************************************************************************
document.getElementById("WarningCheckbox").addEventListener("click", function(event) {
// Klickstatus speichern
SaveWarning(username, this.checked);
}, false);
var href = firsttable.parentNode.getElementsByTagName("a");
var qlog = "?" + location.toString().split("?")[1];
for (i = 0; i < href.length; i++)
if (href[i].href.indexOf('/fight/fightlog/') != -1 && href[i].href.indexOf("?") == -1) {
href[i].href += qlog;
}
}
function FormatFightlogPage (firsttable, inGang, startpage) {
// Tabelle mit den abgeschlossenen Kämpfen neu formatieren und eine neue Spalte einfügen
ReformatFightlogTable(firsttable);
// "Info"-Icon und -Link in die Tabelle schreiben
InsertInfoInFirstTable(firsttable, inGang, 1, function() {
// Wenn die aktuelle Seite die erste Fightlog-Seite ist
if (startpage == 1) {
// Submit-Button für Daten einfügen
InsertSubmitButton(content, document.getElementById("content").getElementsByTagName("table")[0], inGang);
}
else if (inGang) {
var trs = document.getElementById("content").getElementsByTagName("table")[0].getElementsByTagName("tr");
// Erzeugen und Einfügen der Checkbox für das Posten des Kampfwerts
if (trs.length > 2) {
var currentspan = trs[0].getElementsByTagName("td")[0].getElementsByTagName("span")[0];
trs[0].getElementsByTagName("div")[0].setAttribute('style', 'background-color:#2A2A2A; width:265px; padding: 7px; float:right; -moz-border-radius-topright: 4px; -moz-border-radius-bottomright: 4px;');
var newdiv = document.createElement("div");
newdiv.innerHTML = '<form style="padding-top: 8px; padding-left: 8px;"><input name="postVals" id="postVals" type="checkbox" value="Post" onclick="document.getElementById(\'bbcode\').style.visibility=\'hidden\'"> ' + TxtPostFight[myLang] + '</form>';
newdiv.setAttribute('style', 'padding: 0px; background-color: rgb(42, 42, 42); width: 260px; height: 38px; vertical-align: middle; float: left; -moz-border-radius-topleft: 4px; -moz-border-radius-bottomleft: 4px;');
currentspan.insertBefore(newdiv, newdiv.getElementsByTagName("div")[0]);
newdiv = document.createElement("div");
newdiv.innerHTML = '<form style="padding-top:6px"><input name="Formular2" action="" type="button" value="BBCode" id="bbcodeanzeigen" title="' + TxtShowBBCode[myLang] + '"></form>';
newdiv.setAttribute('style', 'background-color: rgb(42, 42, 42); width: 65px; height: 38px; vertical-align: middle; float: left');
currentspan.insertBefore(newdiv, newdiv.getElementsByTagName("div")[0]);
newdiv = document.createElement("div");
newdiv.innerHTML = '<textarea rows="1" style="vertical-align:middle" name="bbcode" action="" type="text" id="bbcode" onclick="this.focus(); this.select();"></textarea>';
newdiv.setAttribute('style', 'padding: 0px; background-color: rgb(42, 42, 42); width: 196px; height: 38px; vertical-align: middle; float: left');
currentspan.insertBefore(newdiv, newdiv.getElementsByTagName("div")[0]);
bbcodeEinAus();
}
}
// Angreifbarkeit der Spieler (Punkte/36 Stunden) farblich kennzeichnen
InsertAttackableInFirstTable(firsttable, true, false);
insertSBTable("PostDoneFightsToSB", m_owngangname);
});
}
// ***********************************************************************************************
// ***********************************************************************************************
// Funktion handelt die Aktionen auf der Fightlogseite
// ***********************************************************************************************
// ***********************************************************************************************
function HandleFightlogpage(firsttable, inGang, startpage, nrFights) {
// Referenz auf die Zeilen der Tabelle speichern
var trs = firsttable.getElementsByTagName("tr");
if (startpage == 0)
if (Right$(location.toString(), 10) == '/fightlog/' || Right$(location.toString(), 12) == '/fightlog/1/')
var startpage = 1;
else
var startpage = location.toString().split("/fightlog/")[1].split("/")[0];
if (nrFights == 0)
if (startpage == 1) {
nrFights = trs.length - 2;
}
else {
// **********************************************************************************
// Beziehen der 1. Fightlogseite
// **********************************************************************************
GM_xmlhttpRequest({method: 'GET', url: FIGHTLOG_URL + "1/", onload: function(responseDetails) {
// Wenn die Seite erfolgreich abgerufen werden konnte
if (responseDetails.status == 200) {
var content = responseDetails.responseText;
var doc = HTML2DOM(content);
var tables = doc.getElementsByTagName("table");
var ft = getFightTableIndex(tables) + 1;
var table = tables[ft];
var trs = table.getElementsByTagName("tr");
nrFights = trs.length - 2;
HandleFightlogpage(firsttable, inGang, startpage, nrFights);
}
}
});
return;
}
if (nrFights != 20) {
if (startpage != 1)
for (i = 20 - nrFights; i >= 1; i--) {
trs[i].parentNode.removeChild(trs[i]);
}
var page = parseInt(startpage) + 1;
var Seite = document.getElementById("content").innerHTML.indexOf("<strong>" + TxtSeite[lang] + ":</strong>");
if (Seite != -1)
Seite = document.getElementById("content").innerHTML.split("<strong>" + TxtSeite[lang] + ":</strong>")[1].indexOf("fight/fightlog/"+page+"/");
if (Seite != -1) {
// **********************************************************************************
// Beziehen der folgenden Fightlogseite
// **********************************************************************************
GM_xmlhttpRequest({method: 'GET', url: FIGHTLOG_URL + page + "/", onload: function(responseDetails) {
// Wenn die Seite erfolgreich abgerufen werden konnte
if (responseDetails.status == 200) {
var content = responseDetails.responseText;
var doc = HTML2DOM(content);
var tables = doc.getElementsByTagName("table");
var ft = getFightTableIndex(tables) + 1;
var table = tables[ft];
var trs2 = table.getElementsByTagName("tr");
for (i = 1; i <= 20 - nrFights; i++) {
trs[nrFights+i].parentNode.insertBefore(trs2[i].cloneNode(true), trs[nrFights+i]);
}
FormatFightlogPage(firsttable, inGang, startpage);
}
}
});
return;
}
}
FormatFightlogPage(firsttable, inGang, startpage);
}
// **********************************************************************************
// **********************************************************************************
// Funktion aktiviert Wartecursor in Abhängigkeit des waitflags
// **********************************************************************************
// **********************************************************************************
function CursorWait(currentelem, waitflag) {
if (waitflag) {
currentelem.style.cursor = 'progress';
document.body.style.cursor = 'progress';
} else {
currentelem.style.cursor = 'pointer';
document.body.style.cursor = 'auto';
}
}
// **********************************************************************************
// **********************************************************************************
// Funktion zeigt eine Grafik an, ggf. mit Link
// **********************************************************************************
// **********************************************************************************
function ShowImg(imglink, imgsource, imgtitle, imgwidth, imgheight, imgleft, imgtop, imgzindex, imgid, elem) {
// Wenn ein Link übergeben wurde
if (imglink != '') {
// Link zusammenbauen
var newlink = document.getElementById("wrap").appendChild(document.createElement('a'));
newlink.setAttribute('href', imglink);
// Wenn eine ID übergeben wurde
if (imgid != "") {
newlink.setAttribute('id', imgid);
}
// Grafik zusammenbauen
var newimg = newlink.appendChild(document.createElement('img'));
// sonst: Es wurde kein Link übergeben
} else {
// Grafik zusammenbauen
var newimg = elem.appendChild(document.createElement('img'));
// Wenn eine ID übergeben wurde
if (imgid != "") {
newimg.setAttribute('id', imgid);
}
}
newimg.setAttribute('src', imgsource);
newimg.setAttribute('border', '0');
if (imgwidth != '') {
newimg.setAttribute('width', imgwidth);
}
if (imgheight != '') {
newimg.setAttribute('height', imgheight);
}
newimg.setAttribute('title', imgtitle);
newimg.setAttribute('style', 'position:relative; left:' + imgleft + 'px; top:' + imgtop + 'px; z-index:' + imgzindex);
}
// **********************************************************************************
// **********************************************************************************
// Funktion formatiert eine Zahl mit Tausendertrennzeichen
// **********************************************************************************
// **********************************************************************************
function money_format(zahl) {
var new_string = [];
var nachkomma = Right$('0' + Math.round((zahl - parseInt(zahl)) * 100), 2);
var tmp = parseInt(zahl) + '';
while( tmp.length > 3)
{
new_string[new_string.length] = tmp.substr(tmp.length - 3);
tmp = tmp.substr(0, tmp.length - 3);
}
if(tmp) new_string[new_string.length] = tmp;
if (currency1 == "")
return currency + ' ' + new_string.reverse().join(TZ[myLang]) + DZ[myLang] + nachkomma;
else
return new_string.reverse().join(TZ[myLang]) + currency1 + parseInt(nachkomma) + currency2;
}
// **********************************************************************************
// **********************************************************************************
// Funktion blendet Werte in einen Text ein
// **********************************************************************************
// **********************************************************************************
function printf(text, p1, p2, p3, p4) {
var onceMore = true;
var prozPos = -1;
while (onceMore) {
onceMore = false;
prozPos = text.indexOf('%', prozPos + 1);
if (prozPos == -1)
return text;
var format = text.substr(prozPos + 1, 1);
switch (format) {
case 'd':
case 's':
return printf (text.substr(0, prozPos) + p1 + text.substr(prozPos + 2), p2, p3, p4, "");
case 'm':
return printf (text.substr(0, prozPos) + money_format(p1) + text.substr(prozPos + 2), p2, p3, p4, "");
default:
onceMore = true;
break;
}
}
}
// ***********************************************************************************************
// ***********************************************************************************************
// Funktion testet, ob eine ID in der Liste enthalten ist
// ***********************************************************************************************
// ***********************************************************************************************
function AddIDToList(ids, userid) {
if (userid == "" || userid == m_ownuserid)
return false;
var search = ";" + ids + ";";
return (search.indexOf(";" + userid + ";") == -1);
}
// ***********************************************************************************************
// ***********************************************************************************************
// Funktion ermittelt den Index der Kampftabelle
// ***********************************************************************************************
// ***********************************************************************************************
function getFightTableIndex(tables) {
if (tables[0].parentNode.innerHTML.indexOf('highscore/rauferei') == -1)
return 0;
return 1;
}
// ***********************************************************************************************
// ***********************************************************************************************
// Funktion stellt die Fighttabelle dar
// ***********************************************************************************************
// ***********************************************************************************************
function InsertFightTable(table, Chb) {
// ***********************************************************************************************
// Funktion fügt einen Header in die Tabelle table ein
// ***********************************************************************************************
function InsertHead(table, nrofcolumns) {
// Neues Head-Element erzeugen und einfügen
var newthead = document.createElement("thead");
table.appendChild(newthead);
// Neue Zeile erzeugen
var newtr = document.createElement("tr");
newtr.setAttribute('style', 'background-color:#232323');
// Neue Zellen erzeugen und in die Zeile einfügen
for (var i = 0; i < nrofcolumns; i++) {
var newth = document.createElement("th");
newtr.appendChild(newth);
}
// Spalten formatieren
// Grafik für Hinzufügen zur Kampfliste einbauen
newtr.getElementsByTagName("th")[0].innerHTML = '<img id="AddToFT" border="0" src="' + getIconAddr(ICON_ADDTOFT) + '" title="' + TxtAddToFT[myLang] + '" height="14" width="14" style="padding-left: 3px; cursor: pointer">';
newtr.getElementsByTagName("th")[0].setAttribute('style', 'width: 20px; min-width:20px');
newtr.getElementsByTagName("th")[1].innerHTML = " "; // Fightinfo
var width = (ZONEBASE_URL == "")?38:50;
newtr.getElementsByTagName("th")[1].setAttribute('style', 'width: '+ width + 'px; min-width:' + width + 'px');
newtr.getElementsByTagName("th")[2].innerHTML = "Penner"; // Username
newtr.getElementsByTagName("th")[2].setAttribute('style', 'width: 145px');
newtr.getElementsByTagName("th")[3].innerHTML = "Bande"; // Bandenname
newtr.getElementsByTagName("th")[3].setAttribute('style', 'width: 150px');
newtr.getElementsByTagName("th")[4].innerHTML = "Punkte"; // aktuelle Punktzahl
newtr.getElementsByTagName("th")[4].setAttribute('style', 'width: 75px; text-align: right; padding-right: 10px');
newtr.getElementsByTagName("th")[5].innerHTML = "Reg-Datum"; // Registrierungsdatum
newtr.getElementsByTagName("th")[5].setAttribute('style', 'width: 65px');
newtr.getElementsByTagName("th")[6].innerHTML = "Geld"; // Geld
newtr.getElementsByTagName("th")[6].setAttribute('style', 'width: 100px; text-align: right');
// Zeilenelement einfügen
newthead.appendChild(newtr);
// Handler für das Hinzufügen zur Kampfliste mit Grafik assoziieren
// Click-Handler hinzufügen
document.getElementById("AddToFT").addEventListener("click", function(event) {
var newIDs = trimString(prompt(TxtNewIDs[myLang]));
var fightIDs = PGu_getValue("FightIDList", "");
getUserData("."+newIDs, function(userid, username, userpoints, gangid, gangname, regsince, money, userplace, history) {
function testUserid(ids, i, fightIDs) {
getUserData("#"+ids[i], function(userid, username, userpoints, gangid, gangname, regsince, money, userplace, history) {
if (userid == -1) {
alert("Penner mit ID " + ids[i] + " nicht gefunden!");
return;
}
if (AddIDToList(fightIDs, ids[i])) {
fightIDs += (fightIDs == ""?"":";") + ids[i];
count++;
}
while (++i < ids.length) {
if (ids[i] == "")
continue;
testUserid(ids, i, fightIDs);
break;
}
if (i >= ids.length) {
fightIDs = fightIDs.split(";");
for (var j = fightIDs.length - 1; j >= 0; j--)
if (isNaN(fightIDs[j]) || fightIDs[j] == "")
fightIDs.splice(j, 1);
PGu_setValue("FightIDList", fightIDs.join(";"));
PGu_setValue("fightlistchanged", 1);
if (count > 0) {
alert (TxtAddedToFT[myLang].replace("%s", count));
var tables = document.getElementById("content").getElementsByTagName("table");
var ft = getFightTableIndex(tables);
var table = tables[ft];
var trs = table.getElementsByTagName("tr");
for (var j = trs.length-1; j > 0; j--)
trs[j].parentNode.removeChild(trs[j]);
InsertFightTable(table, true);
}
else
alert (TxtNoAddedToFT[myLang]);
}
});
}
if (userid == -1) { // nicht gefunden !!
newIDs = newIDs.split(";");
count = 0;
for (var i = 0; i < newIDs.length; i++) {
if (newIDs[i] == "")
continue;
testUserid(newIDs, i, fightIDs);
break;
}
}
else if (AddIDToList(fightIDs, userid)) {
fightIDs = fightIDs.split(";");
fightIDs.push(userid);
for (var j = fightIDs.length - 1; j >= 0; j--)
if (isNaN(fightIDs[j]) || fightIDs[j] == "")
fightIDs.splice(j, 1);
PGu_setValue("FightIDList", fightIDs.join(";"));
PGu_setValue("fightlistchanged", 1);
alert (TxtAdd1ToFT[myLang]);
if (PGu_getValue(tableIDs[0] + "OnLF", false))
window.location.reload();
else {
var tables = document.getElementById("content").getElementsByTagName("table");
var ft = getFightTableIndex(tables);
var table = tables[ft];
var trs = table.getElementsByTagName("tr");
for (var j = trs.length-1; j > 0; j--)
trs[j].parentNode.removeChild(trs[j]);
InsertFightTable(table, true);
}
}
else
alert (TxtNoAddToFT[myLang]);
});
}, false);
}
// ***********************************************************************************************
// Funktion fügt eine neue Zeile ein
// ***********************************************************************************************
function InsertRow(table, id) {
// Neues Zeilenelement erzeugen
var newtr = document.createElement("tr");
newtr.bgColor = "#303030";
// Für alle Spalten (so viele, wie es Kopfelemente gibt)
for (var i = 0; i < table.getElementsByTagName("th").length; i++) {
// Neue Zelle erzeugen und einfügen
var newtd = document.createElement("td");
newtr.appendChild(newtd);
}
// Neue Zeile erzeugen und mit UserID branden
newtr.id = "pennerid" + id;
newtr.getElementsByTagName("td")[2].setAttribute('style', 'max-width:175px; overflow:hidden;');
// Zeilenelement in Tabelle einfügen
table.appendChild(newtr);
// Zeilenelement zur weiteren Verwendung zurückgeben
return newtr;
}
// ***********************************************************************************************
// Funktion liefert alle Daten des users username
// ***********************************************************************************************
function GetUserData(userids, i, newtable) {
if (i == 0) {
DelayedPost(20000);
fightinfo = "";
}
// Neue Zeile erzeugen
var userid = userids[i];
var currenttr = InsertRow(newtable, userid);
// ***********************************************************************************************
// Abrufen des XML-Datensatzes für den aktuellen User
// ***********************************************************************************************
getUserData("#"+userid, function(userid, username, userpoints, gangid, gangname, regsince, money, userplace, history) {
userpts[i] = userpoints;
usernames[i] = username;
userhistory[i] = history;
// FIGHT-DIAGRAMM
currenttr.getElementsByTagName("td")[0].innerHTML = '<img title="' + TxtDelFromFT[myLang] + '" id="delfromft' + userid + '" src="' + getIconAddr(ICON_DELFROMFT) + '" width="12" height="12" style="padding-left:3px; cursor:pointer"></img>';
FightListHandler(document.getElementById("delfromft"+userid));
// FIGHTINFO
currenttr.getElementsByTagName("td")[1].innerHTML = GetIconInsertHTML(userid, username, "ft");
// NAME
currenttr.getElementsByTagName("td")[2].innerHTML = GetProfileLink(username, userid);
currenttr.getElementsByTagName("td")[2].id = 'userprofileid:' + userid + "_" + (GetNrOfIDs(document, 'userprofileid:' + userid) + 1);
// Bandenprofillink eintragen
var ganglink = GetGangLink(gangid, gangname);
currenttr.getElementsByTagName("td")[3].innerHTML = ganglink;
// Aktuelle Punktzahl eintragen
currenttr.getElementsByTagName("td")[4].innerHTML = number_format(userpoints, myLang == 0);
currenttr.getElementsByTagName("td")[4].setAttribute('style', 'text-align: right; padding-right: 10px;');
// Aktuelles Registrierungsdatum
currenttr.getElementsByTagName("td")[5].innerHTML = regsince;
// Aktuelles Geld
currenttr.getElementsByTagName("td")[6].innerHTML = money;
currenttr.getElementsByTagName("td")[6].setAttribute('style', 'text-align: right; padding-right: 10px;');
var colorCode = getColorCode(userpoints, userplace);
var waitText = "";
var CachInd = CacheIndex(userid);
if (CachInd != -1)
waitText = CachedWaitText[CachInd];
currenttr.getElementsByTagName("td")[2].getElementsByTagName("a")[0].style.color = colors[waitText!=""?0:colorCode];
currenttr.getElementsByTagName("td")[2].getElementsByTagName("a")[0].title = TxtColor[colorCode][myLang];
currenttr.getElementsByTagName("td")[3].getElementsByTagName("a")[0].style.color = colors[colorCode];
currenttr.getElementsByTagName("td")[4].setAttribute('style', 'text-align: right; padding-right: 10px; color: ' + colors[colorCode]);
var count = 0;
var trs = newtable.getElementsByTagName("tr");
// alle Zeilen eingefügt ?
if (trs.length <= userids.length)
return;
for (var j = trs.length-1; j>= 1; j--)
if (trs[j].getElementsByTagName("td")[4].innerHTML == "")
return;
document.getElementById("showfightlist").disabled = false;
// Liste sortieren
sortList(trs, 1, trs.length - 1, -1, userids);
// Zahl der Kämpfe ermitteln
for (j = 0; j < userids.length; j++) {
CheckPastFights(userids[j], usernames[j], 1);
if (j % 2 == 1)
document.getElementById("pennerid"+userids[j]).bgColor = "#383838";
if (showHistory && history != "") {
insertHistory(document.getElementById("pennerid"+userids[j]).getElementsByTagName("td")[2].getElementsByTagName("a")[0], j, userhistory[j]);
document.getElementById("hist"+j).getElementsByTagName("td")[0].innerHTML = document.getElementById("pennerid"+userids[j]).getElementsByTagName("td")[2].getElementsByTagName("a")[0].title;
document.getElementById("pennerid"+userids[j]).getElementsByTagName("td")[2].getElementsByTagName("a")[0].title = "";
}
}
});
}
// Zeile für Checkbox einfügen
if (Chb) {
var newtr = document.createElement("tr");
var newtd = document.createElement("td");
newtd.setAttribute("colspan", 2);
newtd.setAttribute('style', 'padding-top: 10px; padding-bottom: 10px');
newtd.innerHTML = '<input name="FTCheckbox" id="FTCheckbox" type="checkbox"><span style="vertical-align: bottom"> Anzeige der Kampfliste auf Let\'s fight aktivieren</span>';
newtr.appendChild(newtd);
table.getElementsByTagName("tbody")[0].appendChild(newtr);
// Wenn die letzte Einstellung der Checkbox "aktiv" war
if (PGu_getValue(tableIDs[0] + "OnLF", false)) {
// Häkchen setzen
document.getElementById("FTCheckbox").checked = true;
}
// Click-Handler hinzufügen
document.getElementById("FTCheckbox").addEventListener("click", function(event) {
// Klickstatus speichern
PGu_setValue(tableIDs[0] + "OnLF", this.checked);
}, false);
}
// Zeile für die Überschrift einfügen
var newtr = document.createElement("tr");
var newtd = document.createElement("td");
newtd.setAttribute("colspan", 2);
newtd.setAttribute('style', 'padding-top: 10px; padding-bottom: 10px');
var option = '<option value="0">neu</option> ';
var aktflist = PGu_getValue("aktfightlist", 0);
var flist = PGu_getValue("savedfightlists", "");
if (flist == "")
flist = [];
else
flist = flist.split(";");
for (var i = 0; i < flist.length; i++) {
fl = PGu_getValue("fightlist_" + flist[i], "");
option += '<option value="' + flist[i] + '">' + fl.split("°")[0] + '</option> ';
}
newtd.innerHTML = '<b><font color="#FFFFFF">' + TxtMyFav[myLang] + '</font></b> <name="FTForm" action=""><input type="button" value="Export" id="showfightlist" title="'
+ TxtShowFTList[myLang] + '"> <textarea rows="1" style="width:120px;height:12px" name="ftlist" action="" type="text" id="ftlist" onclick="this.focus(); this.select();"></textarea></form>'
+ ' <a style="float:right"><input type="button" value="Sichern" id="savefightlist" title="Kampfliste sichern"> <select id="flistid" name="flistid"> ' + option + ' </select> <input type="button" value="Laden" id="loadfightlist" title="Kampfliste laden"></a>';
newtr.appendChild(newtd);
table.getElementsByTagName("tbody")[0].appendChild(newtr);
document.getElementById("showfightlist").disabled = true;
document.getElementById("ftlist").style.visibility = "hidden";
document.getElementById("flistid").value = aktflist;
// Click-Handler hinzufügen
document.getElementById("savefightlist").addEventListener("click", function(event) {
// Kampfliste sichern
var selBox = document.getElementById("flistid");
var fid = Number(selBox.value);
if (fid != 0)
if (!confirm("Soll die bestehende Sicherung überschrieben werden ?"))
return;
if (fid == 0)
fid = (flist.length == 0?1:Number(flist[flist.length-1])+1);
while (true) {
var bez = prompt("Gib eine Bezeichnung für die Sicherung ein:", selBox.value=="0"?"":selBox.options[selBox.selectedIndex].text);
if (bez == "" && selBox.value == "0")
continue;
if (bez == "")
if (confirm("Willst Du diese Sicherung wirklich löschen ?"))
break;
if (bez.toLowerCase() == "watchlist")
if (PGu_getValue("watchlist", fid) != fid) {
alert("Es gibt bereits eine Watchlist");
continue;
}
if (bez.indexOf("°") == -1)
break;
alert("das geht nicht !!");
}
if (bez == "") {
PGu_setValue("fightlist_"+fid, "");
var pos = flist.indexOf(fid);
if (fid == aktflist)
aktflist = 0;
flist.splice(pos, 1);
if (PGu_getValue("watchlist", 0) == fid)
PGu_setValue("watchlist", 0);
var alrt = "Sicherung wurde gelöscht";
}
else {
PGu_setValue("fightlist_" + fid, bez + "°" + PGu_getValue("FightIDList", ""));
if (selBox.value == "0")
flist.push(fid);
aktflist = fid;
if (bez.toLowerCase() == "watchlist")
PGu_setValue("watchlist", fid);
var alrt = "Kampfliste wurde gesichert";
PGu_setValue("fightlistchanged", 0);
}
PGu_setValue("savedfightlists", flist.join(";"));
PGu_setValue("aktfightlist", aktflist);
alert(alrt);
document.getElementById(tableIDs[0]).click();
}, false);
document.getElementById("loadfightlist").addEventListener("click", function(event) {
// Kampfliste laden
var selBox = document.getElementById("flistid");
var fid = selBox.value;
if (fid == "0")
if (!confirm("Soll die aktuelle Kampfliste gelöscht werden ?"))
return;
if (PGu_getValue("fightlistchanged", 1) == 1)
if (!confirm("Die aktuelle Kampfliste wurde geändert. Sollen diese Änderungen wirklich verloren gehen ?"))
return;
if (fid == "0") {
PGu_setValue("FightIDList", "");
PGu_setValue("fightlistchanged", 0);
PGu_setValue("aktfightlist", 0);
}
else {
PGu_setValue("FightIDList", PGu_getValue("fightlist_" + fid, "").split("°").pop());
PGu_setValue("fightlistchanged", 0);
PGu_setValue("aktfightlist", fid);
alert("Kampfliste wurde geladen");
}
document.getElementById(tableIDs[0]).click();
}, false);
// ***********************************************************************************************
// Click-Event für Schaltfläche
// ***********************************************************************************************
document.getElementById("showfightlist").addEventListener("click", function(event)
{
var elem = document.getElementById("ftlist");
if (elem.style.visibility == "visible")
elem.style.visibility = "hidden";
else {
if (event.shiftKey == 0)
var varName = "FightIDList";
else
var varName = "fightTablelist";
var fightIDs = PGu_getValue(varName, "");
elem.value = fightIDs;
elem.style.visibility = "visible";
elem.focus();
elem.select();
}
}, false);
var fightIDs = PGu_getValue("FightIDList", "");
// Fightliste abrufen und darstellen
var userIDs = fightIDs.split(';');
// Zeile einfügen, in der später die Fighttabelle steht
newtr = document.createElement("tr");
newtd = document.createElement("td");
newtd.setAttribute("colspan", 2);
// Neue Tabelle erzeugen
var newtable = document.createElement("table");
newtable.width = "600";
newtd.appendChild(newtable);
newtr.appendChild(newtd);
table.getElementsByTagName("tbody")[0].appendChild(newtr);
// Kopf in die Tabelle einfügen
InsertHead(newtable, 7);
for (var i = userIDs.length - 1; i >= 0; i--)
if (userIDs[i] == "" || bl("fi", userIDs[i]) && userIDs.length > 9)
userIDs.splice(i, 1);
for (i = 0; i < userIDs.length; i++)
GetUserData(userIDs, i, newtable);
}
// **********************************************************************************
// **********************************************************************************
// Einbettung eines Inhalts in einen Link mit Ziel, Titel, Body und ggf. Tag
// für "öffnen in neuem Fenster"
// **********************************************************************************
// **********************************************************************************
function Linkify(linkdest, linktitle, linkbody, bNewPage) {
return '<a href="' + linkdest + '" title="' + linktitle + '"' + ((bNewPage) ? ' target="_blank"' : '') + '>' + linkbody + '</a>';
}
// ***********************************************************************************************
// Funktion liefert den Link auf das Userprofil
// ***********************************************************************************************
function GetProfileLink(username, userid) {
return Linkify(PROFILE_URL + userid + '/', '', username, true);;
}
// ***********************************************************************************************
// Funktion ermittelt den Usernamen von df.de
// ***********************************************************************************************
function GetUserNameFromDFDE(content) {
if (content.indexOf('target="_blank') == -1)
return "";
return trimString(content.split('target="_blank')[1].split('">')[1].split('</a>')[0].split('<br>')[0]);
}
// ***********************************************************************************************
// ***********************************************************************************************
// Funktion ruft die downfight.de-Liste ab und stellt sie in der Tabelle dar
// ***********************************************************************************************
// ***********************************************************************************************
function InsertDFTable(table, id, Chb) {
// ***********************************************************************************************
// Funktion fügt einen Header in die Tabelle table ein
// ***********************************************************************************************
function InsertHead(table, nrofcolumns) {
// Neues Head-Element erzeugen und einfügen
var newthead = document.createElement("thead");
table.appendChild(newthead);
// Neue Zeile erzeugen
var newtr = document.createElement("tr");
newtr.setAttribute('style', 'background-color:#232323');
// Neue Zellen erzeugen und in die Zeile einfügen
for (var i = 0; i < nrofcolumns; i++) {
var newth = document.createElement("th");
newtr.appendChild(newth);
}
// Spalten formatieren
newtr.getElementsByTagName("th")[0].innerHTML = " "; // ATT-Diagramm
newtr.getElementsByTagName("th")[0].setAttribute('style', 'width: 20px; min-width:20px');
newtr.getElementsByTagName("th")[1].innerHTML = " "; // Fightinfo
var width = (ZONEBASE_URL == "")?42:54;
newtr.getElementsByTagName("th")[1].setAttribute('style', 'width: '+ width + 'px; min-width:' + width + 'px');
newtr.getElementsByTagName("th")[2].innerHTML = head1[id]; // Username
newtr.getElementsByTagName("th")[2].setAttribute('style', 'width: 175px');
newtr.getElementsByTagName("th")[3].innerHTML = "Bande"; // Bandenname
newtr.getElementsByTagName("th")[3].setAttribute('style', 'width: 150px');
newtr.getElementsByTagName("th")[4].innerHTML = "Punkte"; // aktuelle Punktzahl
newtr.getElementsByTagName("th")[4].setAttribute('style', 'width: 75px; text-align: right; padding-right: 10px');
newtr.getElementsByTagName("th")[5].innerHTML = head2[id]; // Zeit/Kills
newtr.getElementsByTagName("th")[5].setAttribute('style', 'width: 40px; text-align: right; padding-right: 15px');
newtr.getElementsByTagName("th")[6].innerHTML = "Reg-Datum"; // Registrierungsdatum
newtr.getElementsByTagName("th")[6].setAttribute('style', 'width: 65px');
newtr.getElementsByTagName("th")[7].innerHTML = " "; // Direktangriff
newtr.getElementsByTagName("th")[7].setAttribute('style', 'width: 20px');
// Zeilenelement einfügen
newthead.appendChild(newtr);
}
// Zeile für Checkbox einfügen
if (Chb) {
var newtr = document.createElement("tr");
var newtd = document.createElement("td");
newtd.setAttribute("colspan", 2);
newtd.setAttribute('style', 'padding-top: 10px; padding-bottom: 10px');
newtd.innerHTML = '<input name="FTCheckbox" id="FTCheckbox" type="checkbox"><span style="vertical-align: bottom"> Anzeige der ' + tableList[id] + 'liste auf Let\'s fight aktivieren</span> <input name="CbMarkDF" id="CbMarkDF" type="checkbox"><span style="vertical-align: bottom"> Downfighter markieren</span>';
newtr.appendChild(newtd);
table.getElementsByTagName("tbody")[0].appendChild(newtr);
// Wenn die letzte Einstellung der Checkbox "aktiv" war
if (PGu_getValue(tableIDs[id+1] + "OnLF", false)) {
// Häkchen setzen
document.getElementById("FTCheckbox").checked = true;
}
if (PGu_getValue("MarkDF", false)) {
// Häkchen setzen
document.getElementById("CbMarkDF").checked = true;
}
// Click-Handler hinzufügen
document.getElementById("FTCheckbox").addEventListener("click", function(event) {
// Klickstatus speichern
PGu_setValue(tableIDs[id+1] + "OnLF", this.checked);
}, false);
document.getElementById("CbMarkDF").addEventListener("click", function(event) {
// Klickstatus speichern
PGu_setValue("MarkDF", this.checked);
}, false);
}
var newtr = document.createElement("tr");
var newtd = document.createElement("td");
// Zeile einfügen, in der später die Anzahl steht
newtd.setAttribute("colspan", 2);
newtd.setAttribute('style', 'padding-top: 20px');
newtd.id = tableIDlow[id] + "info";
newtr.appendChild(newtd);
table.getElementsByTagName("tbody")[0].appendChild(newtr);
if (id == 2) {
newtr = document.createElement("tr");
newtd = document.createElement("td");
newtd.setAttribute("colspan", 2);
newtd.setAttribute('style', 'padding-bottom: 10px');
newtd.innerHTML = '<input name="FakerTage" id="FakerTage" type="text" style="width:20px" value="' + GM_getValue("FakerDays", "") + '"><span style="vertical-align: bottom"> Anzahl der Tage im Diagramm</span>';
newtr.appendChild(newtd);
table.getElementsByTagName("tbody")[0].appendChild(newtr);
}
// Zeile einfügen, in der später die Fighttabelle steht
newtr = document.createElement("tr");
newtd = document.createElement("td");
newtd.setAttribute("colspan", 2);
// Neue Tabelle erzeugen
var newtable = document.createElement("table");
newtable.width = "600";
newtd.appendChild(newtable);
newtr.appendChild(newtd);
table.getElementsByTagName("tbody")[0].appendChild(newtr);
// Kopf in die Tabelle einfügen
InsertHead(newtable, 8);
// ***********************************************************************************************
// Abrufen der Liste von downfight.de
// ***********************************************************************************************
var URL = DFurl[id];
if (id < 2) {
var Params = ['myatt', attvalue, 'mydef', defvalue];
URL += "_" + DFTownCode3;
}
else
var Params = [];
PostToHTTP(URL, Params, function(content) {
// ***********************************************************************************************
// Funktion fügt eine neue Zeile ein
// ***********************************************************************************************
function InsertRow(table, row) {
// Neues Zeilenelement erzeugen
var newtr = document.createElement("tr");
newtr.bgColor = "#363636";
if (row %2 == 1)
newtr.bgColor = "#303030";
// Für alle Spalten (so viele, wie es Kopfelemente gibt)
for (var i = 0; i <= table.getElementsByTagName("th").length - 1; i++) {
// Neue Zelle erzeugen und einfügen
var newtd = document.createElement("td");
newtr.appendChild(newtd);
}
newtr.getElementsByTagName("td")[2].setAttribute('style', 'max-width:175px; overflow:hidden;');
// Zeilenelement in Tabelle einfügen
table.appendChild(newtr);
// Zeilenelement zur weiteren Verwendung zurückgeben
return newtr;
}
// ***********************************************************************************************
// Funktion ermittelt die UserID von df.de
// ***********************************************************************************************
function GetUserIDFromDFDE(content) {
if (content.indexOf('user.getname.xml') != -1)
return content.split(TOWN_URL+'dev/api/user.getname.xml?name=')[1].split('" target')[0];
return content.split(TOWN_URL+'dev/api/user.')[1].split('.xml"')[0];
}
// ***********************************************************************************************
// Funktion ermittelt die Restlaufzeit von df.de
// ***********************************************************************************************
function GetRemainingTimeFromDFDE(content) {
return number_format(parseInt(content.substr(5)), false) + "h";
}
// ***********************************************************************************************
// Funktion liefert den Direktangriffslink anhand des Usernamens
// ***********************************************************************************************
function GetDirectAttack(userid, username) {
if (hasCaptcha)
return '<a href="' + FIGHTTO_URL + username + '" id="att_' + userid + '" title="Direktangriff auf ' + username + '" target="_blank"><img src="' + getIconAddr(ICON_DIRECTATTACK) + '" style="padding-right: 3px"></a>';
return '<a href="#" id="att_' + userid + '" title="Direktangriff auf ' + username + '"><img src="' + getIconAddr(ICON_DIRECTATTACK) + '" style="padding-right: 3px"></a>';
}
// ***********************************************************************************************
// Funktion liefert das ATT-Diagramm
// ***********************************************************************************************
function GetFightDiagramm(username, doubleflag, days) {
return '<a href="http://downfight.de/dummy.php?username=' + username + (DFTownCode2==""?"":'&gamedividor='+DFTownCode2) + (days==""?"":'&day='+days) + '" target="_blank"><img src="' + ((doubleflag) ? getIconAddr(ICON_CHEATERDIA_DOUBLE) : getIconAddr(ICON_CHEATERDIA_NORMAL)) + '" title="ATT-DEF-Diagramm von gemeldeten Siegen/Niederlagen' + ((doubleflag) ? '. Dieser Penner bringt derzeit DOPPELTE KILLPUNKTE!' : '') + '" style="padding-left: 3px"></a>';
}
// ***********************************************************************************************
// Funktion liefert alle Daten des users username
// ***********************************************************************************************
function GetUserData(currenttr, username, dftrs, i, newtable, x) {
// ***********************************************************************************************
// Abrufen des XML-Datensatzes für den aktuellen User
// ***********************************************************************************************
getUserData('.'+username, function(userid, username, userpoints, gangid, gangname, regsince, money, userplace, history) {
if (userid == -1) // Penner nicht gefunden
return;
currenttr.id = tableIDlow[id] + "id" + userid;
if (dftrs[i].getElementsByTagName("td")[2].innerHTML.indexOf('<img src="/grafiken/armee.png">') != -1) {
var doubleflag = true;
} else {
var doubleflag = false;
}
// FIGHT-DIAGRAMM
if (id == 2)
currenttr.getElementsByTagName("td")[0].innerHTML = GetFightDiagramm(username, doubleflag, fakerdays);
else
currenttr.getElementsByTagName("td")[0].innerHTML = " ";
// FIGHTINFO
currenttr.getElementsByTagName("td")[1].innerHTML = GetIconInsertHTML(userid, username, "nofight");
FightListHandler(currenttr.getElementsByTagName("td")[1].getElementsByTagName('img')[ZONEBASE_URL==""?1:2]);
// NAME
currenttr.getElementsByTagName("td")[2].innerHTML = GetProfileLink(username, userid);
currenttr.getElementsByTagName("td")[2].id = 'userprofileid:' + userid + "_" + (GetNrOfIDs(document, 'userprofileid:' + userid) + 1);
// Bandenprofillink eintragen
var ganglink = GetGangLink(gangid, gangname);
currenttr.getElementsByTagName("td")[3].innerHTML = ganglink;
// Aktuelle Punktzahl eintragen
currenttr.getElementsByTagName("td")[4].innerHTML = number_format(userpoints, myLang == 0);
currenttr.getElementsByTagName("td")[4].setAttribute('style', 'text-align: right; padding-right: 10px;');
if (id < 2) {
var lasttd = dftrs[i].getElementsByTagName("td").length - 1;
currenttr.getElementsByTagName("td")[5].innerHTML = dftrs[i].getElementsByTagName("td")[lasttd].innerHTML;
}
else if (id == 2) {
// LAUFZEIT
var lasttd = dftrs[i].getElementsByTagName("td").length - 1;
currenttr.getElementsByTagName("td")[5].innerHTML = GetRemainingTimeFromDFDE(dftrs[i].getElementsByTagName("td")[lasttd].innerHTML);
if (parseInt(currenttr.getElementsByTagName("td")[5].innerHTML.substr(5)) >= 1000) {
currenttr.getElementsByTagName("td")[5].setAttribute('style', 'text-align: right; padding-right: 10px; color:#ffff00');
ShowImg('', getIconAddr(ICON_NEW), '', '15', '15', '2', '2', '200', '', currenttr.getElementsByTagName("td")[2]);
} else {
currenttr.getElementsByTagName("td")[5].setAttribute('style', 'text-align: right; padding-right: 10px;');
}
}
else {
var kills = parseInt(dftrs[i].getElementsByTagName("td")[0].innerHTML);
currenttr.getElementsByTagName("td")[5].innerHTML = number_format(kills, false);
currenttr.getElementsByTagName("td")[5].setAttribute('style', 'text-align: right; padding-right: 10px;');
}
// Aktuelles Registrierungsdatum
currenttr.getElementsByTagName("td")[6].innerHTML = regsince;
var colorCode = getColorCode(userpoints, userplace);
var waitText = "";
var CachInd = CacheIndex(userid);
if (CachInd != -1)
waitText = CachedWaitText[CachInd];
if (waitText != "") {
waitText = " (" + waitText + ")";
}
currenttr.getElementsByTagName("td")[2].getElementsByTagName("a")[0].style.color = colors[waitText!=""?0:colorCode];
currenttr.getElementsByTagName("td")[3].firstChild.style.color = colors[colorCode];
currenttr.getElementsByTagName("td")[4].setAttribute('style', 'text-align: right; padding-right: 10px; color: ' + colors[colorCode]);
// Wenn der Gegner sich im eigenen Punktespektrum befindet
if (colorCode != 0 && colorCode < 5) {
// DIREKTANGRIFF
currenttr.getElementsByTagName("td")[7].innerHTML = GetDirectAttack(userid, username);
currenttr.getElementsByTagName("td")[7].setAttribute('style', 'padding-left: 2px;');
if (!hasCaptcha)
document.getElementById("att_"+userid).addEventListener("click", function(event) {
PostToHTTP(FIGHT_URL+"attack/", Array("f_toid", username,"Submit2","Angriff"), function(content) { window.location.reload(); });
}, false);
// sonst: Der Gegner ist derzeit nicht angreifbar
} else {
currenttr.getElementsByTagName("td")[7].innerHTML = ' ';
}
if (showHistory && history != "") {
insertHistory(currenttr.getElementsByTagName("td")[2].getElementsByTagName("a")[0], i, history);
document.getElementById("hist"+i).getElementsByTagName("td")[0].innerHTML = TxtColor[colorCode][myLang] + waitText;
}
// Zahl der Kämpfe ermitteln
CheckPastFights(userid, username, 0);
// ***********************************************************************************************
// Abrufen des Userprofils
// ***********************************************************************************************
GM_xmlhttpRequest({method: 'GET', url: PROFILE_URL + userid + "/", onload: function(responseDetails) {
var profilecontent = responseDetails.responseText;
// Zelle mit Bandenbeschreibung des Users ermitteln
var curElem = document.getElementById(tableIDlow[id] + "id" + userid);
if (curElem) {
currenttd = curElem.getElementsByTagName("td")[3];
// Wenn der User gelöscht oder gebannt ist
if (profilecontent.indexOf('"Der Spieler wurde gelöscht oder vom Spiel verbannt!"') != -1) {
currenttd.innerHTML = '<b>GEBANNT/GELÖSCHT!</b>';
currenttd.setAttribute('style', 'color:' + colors[0]);
}
}
}
});
});
}
// ***********************************************************************************************
// ***********************************************************************************************
// ***********************************************************************************************
var doc = HTML2DOM(content);
if (id < 2) {
for (i = doc.getElementsByTagName("table").length - 1; i > 0; i--)
if (doc.getElementsByTagName("table")[i].innerHTML.indexOf("angriff.gif") != -1)
break;
var dftrs = doc.getElementsByTagName("table")[i].getElementsByTagName("tr")[1].getElementsByTagName("table")[0].getElementsByTagName("tr");
}
else {
var body = doc.getElementsByClassName('bodybackgrnd');
var dftable = body[0].getElementsByTagName("table");
var dftrs = dftable[1].getElementsByTagName("tr");
}
var nrofrows = 0;
var fakerdays = GM_getValue("FakerDays", "");
for (var i = 1; i <= dftrs.length - (id<2?2:1); i++) {
if (id < 2) {
if (dftrs[i].getElementsByTagName("td").length < 10)
continue;
var username = GetUserNameFromDFDE(dftrs[i].getElementsByTagName("td")[4].innerHTML);
if (username == "")
username = GetUserNameFromDFDE(dftrs[i].getElementsByTagName("td")[5].innerHTML);
}
else if (id == 2) {
var src = dftrs[i].getElementsByTagName("td")[4].innerHTML.split('/');
if (src[0].substr(-5) == 'http:')
src = src[2] + "/";
else
src = src[0] + "/";
if (src != TOWN_URL && src != "www."+TOWN_URL)
continue;
// Username ermitteln
var username = GetUserNameFromDFDE(dftrs[i].getElementsByTagName("td")[4].innerHTML);
}
else {
if (dftrs[i].getElementsByTagName("td")[2].innerHTML.indexOf(TOWN_URL) == -1)
continue;
if (dftrs[i].getElementsByTagName("td")[3].innerHTML != townname)
continue;
// Username ermitteln
var username = GetUserNameFromDFDE(dftrs[i].getElementsByTagName("td")[2].innerHTML);
}
if (username == "")
continue;
nrofrows++;
// Neue Zeile erzeugen und mit UserID branden
var currenttr = InsertRow(newtable, nrofrows);
if (!currenttr)
return;
GetUserData(currenttr, username, dftrs, i, newtable, nrofrows);
}
// Info über die Anzahl über Tabelle schreiben
var DFtown = "";
if (nrofrows == 0) {
if (dftrs.length > 0)
if (dftrs[0].getElementsByTagName("td").length > 4)
DFtown = dftrs[0].getElementsByTagName("td")[4].innerHTML.split("</font")[0].split(">")[2];
}
if (nrofrows == 0 && townname != DFtown) {
document.getElementById(tableIDlow[id] + "info").innerHTML = '<b><font color="#FFFFFF">Fehler beim Abruf der <a href="' + DFurl[id] + '_' + language + '" target="_blank"> ' + tableList[id] + 'liste</a> (' + townname + ') von <a href="http://www.downfight.de" target="_blank">downfight.de</a></font></b><br /><br />';
table.removeChild(newtable);
}
else
document.getElementById(tableIDlow[id] + "info").innerHTML = '<b><font color="#FFFFFF">Derzeit befinden sich ' + nrofrows + ' Penner auf der <a href="' + DFurl[id] + '_' + DFTownCode3 + '" target="_blank"> ' + tableList[id] + 'liste</a> (' + townname + ') von <a href="http://www.downfight.de" target="_blank">downfight.de</a>:</font></b><br /><br />';
});
}
// **********************************************************************************
// **********************************************************************************
// Funktion baut einen Pennerzone-Suchaufruf zusammen und liefert ihn zurück
// **********************************************************************************
// **********************************************************************************
function BuildPennerzoneLink(minpoints, maxpoints, datesearch, linktitle, linkicon) {
return '<a href="' + PENNERZONESEARCH_URL1 + minpoints + PENNERZONESEARCH_URL2 + maxpoints + PENNERZONESEARCH_URL3 + datesearch + '" target="_blank" title="' + linktitle + '"><img src="' + linkicon + '"></a>';
}
// **********************************************************************************
// **********************************************************************************
// Funktion baut den String für Pennerzone-Suchzeile zusammen und liefert ihn zurück
// **********************************************************************************
// **********************************************************************************
function BuildPennerzoneLinkString(minpoints, maxpoints, datefrom) {
// Wenn kein Startdatum angegeben wurde
if (datefrom == "") {
var datesearch = PENNERZONESEARCH_URL3 + PENNERZONESEARCH_URL4 + PENNERZONESEARCH_URL5 + PENNERZONESEARCH_URL6;
var datefromdisplay = '<small>ab: -egal-</small>';
// sonst: Es wurde ein Startdatum angegeben
} else {
var day = Number(datefrom.substr(0,2))
var month = datefrom.substr(3,2)
var year = datefrom.substr(6,4)
var datesearch = PENNERZONESEARCH_URL3 + day + PENNERZONESEARCH_URL4 + month + PENNERZONESEARCH_URL5 + year + PENNERZONESEARCH_URL6;
var datefromdisplay = '<small>ab: ' + datefrom + '</small>';
}
// Alle Icons zusammenbauen
var PennerzoneLinkMoney = BuildPennerzoneLink(minpoints, "", datesearch, "Gegnersuche (Geld, volles Punktespektrum)", getIconAddr(ICON_PENNERZONE_MONEY));
var PennerzoneLinkUp = BuildPennerzoneLink(parseInt(maxpoints * 0.90), maxpoints, datesearch, "Gegnersuche (viele Punkte, Max - 10%)", getIconAddr(ICON_PENNERZONE_UP));
var PennerzoneLinkDown = BuildPennerzoneLink(minpoints, parseInt(minpoints * 1.20), datesearch, "Gegnersuche (wenig Punkte, Min + 20%)", getIconAddr(ICON_PENNERZONE_DOWN));
var PennerzoneLinkDate = '<img src="' + getIconAddr(ICON_PENNERZONE_DATE) + '" id="PennerzoneDate" title="Eingabe eines Start-Reg.-datums" style="cursor:pointer">';
// Gesamten String für die Pennerzone-Suchzeile zurückgeben
return '<strong>Pennerzone-Suche:</strong> ' + PennerzoneLinkMoney + ' ' + PennerzoneLinkUp + ' ' + PennerzoneLinkDown + ' ' + PennerzoneLinkDate + ' ' + datefromdisplay;
}
// **********************************************************************************
// **********************************************************************************
// Handler für die Datumsschaltfläche der Pennerzone-Zeile
// **********************************************************************************
// **********************************************************************************
function AddPennerzoneDateHandler() {
// Wenn das Element vorhanden ist
if (document.getElementById("PennerzoneDate") != null) {
// Click-Handler hinzufügen
document.getElementById("PennerzoneDate").addEventListener("click", function(event) {
// Startdatum vom User eingeben lassen
var datefrom = prompt("Bitte das Reg.-Datum angeben, ab dem Gegner\ngesucht werden sollen (Format: TT.MM.JJJJ).\n\nEine leere Eingabe bedeutet keine Einschränkung.", PGu_getValue("PennerzoneDateFrom", ""));
// Eingegebenes Startdatum speichern
PGu_setValue("PennerzoneDateFrom", datefrom);
// Pennerzone-Suchzeile neu erstellen und zuweisen
document.getElementById("PennerzoneP").innerHTML = BuildPennerzoneLinkString(minpoints, maxpoints, datefrom);
// Handler erneut zuweisen
AddPennerzoneDateHandler();
}, false);
}
}
// **********************************************************************************
// **********************************************************************************
// Handler für Bandenprofilaktualisierung
// **********************************************************************************
// **********************************************************************************
function HandleGangProfile(content) {
// ***********************************************************************************************
// Funktion ermittelt aktuelle Punktzahl und Farbe setzen
// ***********************************************************************************************
function GetActPoints(userid, x, id) {
// ***********************************************************************************************
// Abrufen des XML-Datensatzes für den aktuellen User
// ***********************************************************************************************
getUserData("#"+userid, function(userid, username, userpoints, gangid, gangname, regsince, money, userplace, history) {
var akttr = document.getElementById(id);
akttr.getElementsByTagName("div")[0].innerHTML = number_format(userpoints, false);
akttr.getElementsByTagName("div")[0].id = "points"+x;
var waitText = "";
var colorCode = 6;
if (userid != m_ownuserid) {
var CachInd = CacheIndex(userid);
if (CachInd != -1)
waitText = CachedWaitText[CachInd];
if (waitText != "")
waitText = " (" + waitText + ")";
colorCode = getColorCode(userpoints, userplace);
}
akttr.getElementsByTagName("td")[1].getElementsByTagName("a")[ZONEBASE_URL==""?3:4].style.color = colors[waitText!=""?0:colorCode];
if (document.getElementById("regsince_" + id))
document.getElementById("regsince_" + id).innerHTML = '<div align="right">' + regsince + "</div>";
if (showHistory && history != "") {
insertHistory(akttr.getElementsByTagName("td")[1].getElementsByTagName("a")[ZONEBASE_URL==""?3:4], userid, history);
akttr.getElementsByTagName("td")[1].getElementsByTagName("a")[ZONEBASE_URL==""?3:4].title = "";
document.getElementById("hist"+userid).getElementsByTagName("td")[0].innerHTML = TxtColor[colorCode][myLang] + waitText;
}
});
}
// Referenzen auf die Tabelle speichern
var tables = document.getElementsByTagName("table");
// Bandenname holen und Info-Symbol
var div = document.getElementsByClassName("gang_header")[0];
var gangname = div.getElementsByTagName("span")[0].innerHTML.split(" ").pop();
if (location.toString().split("bande:")[1].split("/")[0] != m_owngangid) {
var newtd = document.createElement("a");
newtd.innerHTML = '<input type="button" value="'+TxtAllFightsGang[myLang]+'" id="showfights" title="' + TxtShowFTList[myLang] + '" style="cursor:pointer">';
newtd.setAttribute('style', 'padding-left: 40px;');
div.getElementsByTagName("div")[0].appendChild(newtd);
document.getElementById("showfights").addEventListener("click", function(event) {
PGu_setValue("gangsearch", gangname);
window.location.href = TOWNBASE_URL+"fight/fightlog/";
}, false);
}
var table;
var i;
for (i = tables.length - 2; i >= 0; i--) {
table = tables[i];
if (tables[i+1].innerHTML.indexOf("profil/id:") != -1 &&
tables[i+1].innerHTML.indexOf('id="gb_posts"') == -1)
break;
}
var tr = table.getElementsByTagName("tr");
var td = tr[0].removeChild(tr[0].getElementsByTagName("td")[0]);
var newtr = document.createElement("tr");
newtr.appendChild(td);
table.insertBefore(newtr, table.firstChild);
table = tables[i+1];
var tr = table.getElementsByTagName("tr");
var fightweg = "";
if (tr[0].getElementsByTagName("td").length > 3)
fightweg = "nofight";
var newtd = document.createElement("td");
newtd.height = "18";
newtd.style.verticalAlign = "middle";
newtd.style.color = "#888";
newtd.style.fontWeight = "bold";
newtd.style.backgroundColor = "#1F1F1F";
newtd.colSpan = "4";
newtd.innerHTML = '<img id="AddToFightList" border="0" src="' + getIconAddr(ICON_ADDTOFT) + '" title="' + TxtAddMarkedToFT[myLang] + '" height="14" width="14" style="padding-right:8px; cursor: pointer"></img><span>' + TxtAddAllToFT[myLang] + '</span>';
newtd.getElementsByTagName("img")[0].addEventListener("click", function(event) {
var trs = table.getElementsByTagName("tr");
var trslen = trs.length - 1;
counter = 0;
var added = 0;
var fightIDs = PGu_getValue("FightIDList", "");
// Für alle Zeilen
for (var x = 1; x < trslen; x++) {
if (!trs[x].id)
continue;
counter++;
// Daten aus den Zellen ermitteln
var tds = trs[x].getElementsByTagName("td");
var userid = tds[1].innerHTML.split('href="/profil/id:')[1].split('/')[0];
if (AddIDToList(fightIDs, userid)) {
fightIDs += (fightIDs == ""?"":";") + userid;
added++;
}
if (document.getElementsByName("addremoveft"+userid).length > 0)
document.getElementsByName("addremoveft"+userid)[0].src = getIconAddr(ICON_DELFROMFT);
}
if (added > 0) {
fightIDs = fightIDs.split(";");
for (var j = fightIDs.length - 1; j >= 0; j--)
if (isNaN(fightIDs[j]) || fightIDs[j] == "")
fightIDs.splice(j, 1);
PGu_setValue("FightIDList", fightIDs.join(";"));
PGu_setValue("fightlistchanged", 1);
if (added == 1)
alert (TxtAdded1ToFT[myLang]);
else
alert (TxtAddedToFT[myLang].replace("%s", added));
}
else
alert (TxtNoAddedToFT[myLang]);
}, false);
tr[0].appendChild(newtd);
var newtd2 = newtd.cloneNode(true);
newtd2.innerHTML = '<img id="delfromft" border="0" src="' + getIconAddr(ICON_DELFROMFT) + '" width="14" height="14" style="padding-right:8px; cursor: pointer"></img><span>' + TxtRemoveAllFromFT[myLang] + '</span>';
newtd2.getElementsByTagName("img")[0].addEventListener("click", function(event) {
var trs = table.getElementsByTagName("tr");
var trslen = trs.length - 1;
counter = 0;
var removed = 0;
var fightIDs = PGu_getValue("FightIDList", "").split(';');
// Für alle Zeilen
for (var x = 1; x < trslen; x++) {
if (!trs[x].id)
continue;
counter++;
// Daten aus den Zellen ermitteln
var tds = trs[x].getElementsByTagName("td");
var userid = tds[1].innerHTML.split('href="/profil/id:')[1].split('/')[0];
for (var j = fightIDs.length - 1; j >= 0; j--) {
if (fightIDs[j] == userid)
removed++;
if (isNaN(fightIDs[j]) || fightIDs[j] == "" || fightIDs[j] == userid)
fightIDs.splice(j, 1);
}
if (document.getElementsByName("addremoveft"+userid).length > 0)
document.getElementsByName("addremoveft"+userid)[0].src = getIconAddr(ICON_ADDTOFT);
}
if (removed > 0) {
PGu_setValue("FightIDList", fightIDs.join(";"));
PGu_setValue("fightlistchanged", 1);
if (removed == 1)
alert (TxtRemoved1FromFT[myLang]);
else
alert (TxtRemovedFromFT[myLang].replace("%s", removed));
}
else
alert (TxtNoRemovedFromFT[myLang]);
}, false);
tr[0].appendChild(newtd2);
// Für alle Zeilen der Tabelle
for (var x = 1; x < tr.length; x++) {
if (!tr[x].id)
continue;
var akttr = tr[x];
var akttd = akttr.getElementsByTagName("td")[1];
var id = akttr.id;
// Name und UserID auslesen
var userid = GetUserID(akttd.innerHTML);
var username = GetUsername(akttd.innerHTML);
if (fightweg == "") {
var newtd = document.createElement('td');
newtd.id = "regsince_" + id;
document.getElementById(id).insertBefore(newtd, akttr.getElementsByTagName('td')[2]);
}
akttd.innerHTML = GetIconInsertHTML(userid, username, fightweg) + akttd.innerHTML;
FightListHandler(akttd.getElementsByTagName('img')[ZONEBASE_URL==""?2:3]);
// Zahl der Kämpfe ermitteln
CheckPastFights(userid, username, 0);
// Aktuelle Punkte ermitteln und anzeigen
GetActPoints(userid, x, id);
}
}
//function ap() {
// var tables = document.getElementsByTagName("table");
// var tables = document.getElementsByTagName("table");
//
// var userid = '472133';
// var username = 'Dr_Med_Prof_Spongebob';
// var points = '111264083';
//
// var fightdate = '01.04.2010 21:59:43 Uhr';
//
// tables[0].getElementsByTagName("tr")[1].getElementsByTagName("td")[1].innerHTML = ' ' + fightdate;
//
// document.getElementsByClassName("avatar")[1].src = 'http://inodes.pennergame.de/bl_DE/avatare/' + userid + '.jpg';
//
// tables[1].getElementsByTagName("tr")[1].getElementsByTagName("td")[0].innerHTML = '<div align="center"><strong>' + username + '</strong></div>';
//
// tables[1].getElementsByTagName("tr")[3].getElementsByTagName("td")[0].innerHTML = '<div align="center">-' + points + '</div>'
// tables[1].getElementsByTagName("tr")[3].getElementsByTagName("td")[2].innerHTML = '<div align="center">' + points + '</div>'
//
// document.getElementsByTagName("p")[7].innerHTML = username + ' hat sageo angegriffen, dabei hat ' + username + ' den Kampf verloren und sich bei dem Angriffsversuch ordentlich blamiert.<br><br>sageo hat von ' + username + ' €145,40 erbeutet und hat stolze ' + points + ' Punkte bekommen.<br><br><br>' + username + ' ist mit einem blauem Auge davongekommen und hat sich nicht weiter verletzt.<br>';
//}
function ByeByeGoogle() {
for (var i = 1; i <= 2; i++) {
// Div mit Google-Ads entfernen
var googleads = document.getElementById("google_js_" + i);
if (googleads != null) {
googleads.parentNode.removeChild(googleads);
}
}
}
function bbcodeEinAus() {
document.getElementById("bbcode").style.visibility = "hidden";
// ***********************************************************************************************
// Click-Event für Schaltfläche
// ***********************************************************************************************
document.getElementById("bbcodeanzeigen").addEventListener("click", function(event)
{
var elem = document.getElementById("bbcode");
if (elem.style.visibility == "visible")
elem.style.visibility = "hidden";
else {
var post = document.getElementById("PostDoneFightsToSB");
var posttext = genBBCode(post.parentNode.parentNode.parentNode, SBPOSTMODE_DONE).join("\n");
if (posttext == "")
alert(TxtCheckFights[myLang]);
else {
if (event.shiftKey != 0 || document.getElementById("postVals").checked)
posttext = TxtFightVals[myLang] + fightVals + "\n\n" + posttext;
elem.value = posttext;
elem.title = TxtBBCodeLen[myLang].replace("%d", posttext.length);
elem.style.visibility = "visible";
elem.focus();
elem.select();
}
}
}, false);
}
function DelayedPost(delay) {
if (DB_URL == "")
return;
function PostNow() {
if (fight != "")
PostToHTTP(DB_URL, Array('town', TOWNEXTENSION, 'name', m_ownusername,
'id', m_ownuserid, 'script', THISSCRIPTVERSION,
'client', navigator.userAgent, 'submit', fight), '');
}
if (delay == 0) {
fight = "fight";
PostNow();
}
else
window.setTimeout(PostNow, delay);
fight = "";
}
// ***********************************************************************************************
// Colorieren von Pennern auf der Bandenseite
// ***********************************************************************************************
function colorNames() {
function insFightData(id, nr) {
getUserData("#"+id, function(userid, username, userpoints, gangid, gangname, regsince, money, userplace, history) {
var colorCode = getColorCode(userpoints, userplace);
var names = document.getElementsByName("penner"+userid);
for (var ii = 0; ii < names.length; ii++) {
if (names[ii].getElementsByTagName("span").length == 0)
continue;
if (names[ii].getElementsByTagName("span")[0].style.fontSize == "10px")
continue;
names[ii].getElementsByTagName("span")[0].style.color = colors[colorCode];
var title = names[ii].title;
names[ii].title = "";
if (title != "")
title = " (" + title + ")";
if (showHistory && history != "") {
insertHistory(names[ii].getElementsByTagName("span")[0], nr, history);
document.getElementById("hist"+nr).getElementsByTagName("td")[0].innerHTML = TxtUserPoints[myLang].replace('%s', username).replace('%s', number_format(userpoints, false)) + " " + TxtColor[colorCode][myLang] + title;
}
var newtd = document.createElement("a");
newtd.innerHTML = GetIconInsertHTML(userid, username, ""); // Info
FightListHandler(newtd.getElementsByTagName('img')[ZONEBASE_URL==""?2:3]);
names[ii].parentNode.insertBefore(newtd, names[ii]);
CheckPastFights(userid, username, 0);
names[ii].name = names[ii].name + "_done";
}
});
}
if (location.toString().indexOf(TOWNBASE_URL+'gang/') != -1) {
var content = document.getElementById("tabcontainer");
if (content) {
// content.style.width = '800px';
var divs = content.getElementsByTagName("div");
var nr = 0;
for (i = 0; i < divs.length; i++) {
if (divs[i].style.backgroundColor == "#303030")
continue;
if (divs[i].innerHTML.indexOf("/profil/id:") == -1)
continue;
var small = false;
var aref = divs[i].getElementsByTagName("a");
for (var j = 0; j < aref.length; j++) {
var currenttd = aref[j];
if (currenttd.name || !currenttd.href)
continue;
if (currenttd.href.indexOf("/profil/id:") == -1)
continue;
var id = GetUserID(currenttd.href);
currenttd.name = "penner" + id;
small = true;
insFightData(id, ++nr);
}
if (small)
divs[i].style.fontSize = "0.9em";
}
}
}
window.setTimeout(colorNames, 5000);
return;
}
// ***********************************************************************************************
// Markieren der Downfighter
// ***********************************************************************************************
function markDF() {
if (!document.getElementById('downfightinfo')) {
var content = document.getElementsByTagName("body")[0];
var aref = content.getElementsByTagName("a");
for (var i = 0; i < aref.length; i++) {
if (aref[i].style.textDecoration.indexOf('blink') != -1)
continue;
if (isDownFighter(trimString(aref[i].innerHTML.split('id="hist')[0].split('>').pop()))) {
//var decoration = " blink";
//if (aref[i].style.textDecoration == "none")
// aref[i].style.textDecoration = decoration;
//else {
// if (aref.href != "")
// decoration += " underline";
// aref[i].style.textDecoration += decoration;
//}
aref[i].className = "pulsating";
var title = "ACHTUNG!! Dieser Penner ist im Downfight !!";
if (aref[i].title.indexOf(title) != -1)
title = "";
else if (aref[i].title != "")
title = " (" + title + ")";
aref[i].title += title;
}
}
}
window.setTimeout(markDF, 5000);
return;
}
// ***********************************************************************************************
// Abrufen der DF-Liste von downfight.de
// ***********************************************************************************************
function updDFList() {
if (IsTimeToCheck(TOWNEXTENSION + "LastUpdateDF", 10)) {
var URL = DFurl[0] + "_" + DFTownCode3;
var Params = ['myatt', 9999, 'mydef', 9999];
PostToHTTP(URL, Params, function(content) {
var doc = HTML2DOM(content);
for (var i = doc.getElementsByTagName("table").length - 1; i > 0; i--)
if (doc.getElementsByTagName("table")[i].innerHTML.indexOf("angriff.gif") != -1)
break;
var dftrs = doc.getElementsByTagName("table")[i].getElementsByTagName("tr")[1].getElementsByTagName("table")[0].getElementsByTagName("tr");
var nrofrows = 0;
for (var i = 1; i <= dftrs.length - 2; i++) {
if (dftrs[i].getElementsByTagName("td").length < 10)
continue;
var username = GetUserNameFromDFDE(dftrs[i].getElementsByTagName("td")[4].innerHTML);
if (username == "")
continue;
DFusers[nrofrows] = username;
nrofrows++;
}
PG_setValue("DFList", DFusers.join(";"));
if (nrofrows > 0)
markDF();
});
}
else {
var DFuserlist = PG_getValue("DFList", "");
if (DFuserlist != "")
DFusers = DFuserlist.split(";");
if (DFusers.length > 0)
markDF();
}
}
function checkFightValBox() {
if (fightVals == "") {
window.setTimeout(checkFightValBox, 500);
return;
}
GM_xmlhttpRequest({method: 'GET', url: TOWNBASE_URL + "dev/api/gang/" + m_owngangid + ".xml", onload: function(responseDetails) {
var content = responseDetails.responseText.split("<member_list>")[1];
var recv = PGu_getValue("fvalrecv", "0");
var id = recv.split(":");
if (content.indexOf("<id>"+id[0]+"</id>") == -1)
id[0] = 0;
var members = content.split('<id>');
var name = "";
var admid = 0;
var option = '<option value="0"> </option> ';
for (var i = 1; i < members.length; i++) {
var mid = members[i].split("<")[0];
var mname = members[i].split("<name>")[1].split("<")[0].trim()
var status = members[i].split("<status>")[1].split("<")[0].trim()
if (status == "3")
admid = mid;
option += '<option value="' + mid + '">' + mname + '</option> ';
if (id[0] == 0 && status == "3" || id[0] == mid)
name = mname;
}
var newtd = document.createElement("td");
newtd.setAttribute('style', 'position:absolute; top:0px; left:0px');
newtd.innerHTML = '<form name="fvalrcvdef" id="fvalrcvdef">PN senden an: <select id="rcvid" name="rcvid"> ' + option + ' </select> </form>';
document.getElementById("fvalmeld").parentNode.parentNode.appendChild(newtd);
document.getElementById("rcvid").value = id[0];
document.getElementById("fvalrcvdef").style.visibility = "hidden";
// Click-Handler hinzufügen
document.getElementById("rcvid").addEventListener("change", function(event) {
// neuen Wert speichern
if (event.target.value == admid)
PGu_setValue("fvalrecv", "0");
else
PGu_setValue("fvalrecv", event.target.value + ":" + event.target.options[event.target.selectedIndex].text);
document.getElementById("fvalrcvdef").style.visibility = "hidden";
document.getElementById("fvalmeld").value = "Kampfwerte melden";
document.getElementById("fvalmeld").title = "Kampf- und Skillwerte per PN an " + (event.target.value == admid || event.target.value == 0?"Admin":event.target.options[event.target.selectedIndex].text) + " senden";
}, false);
document.getElementById("fvalmeld").addEventListener("click", function(event) { fightvalmeld(event) }, false);
document.getElementById("fvalmeld").addEventListener("mouseover", function(event) {
if (event.shiftKey != 0) {
event.target.value = "Empfänger wählen";
event.target.title = "Kampf- und Skillwerte per PN an einen anderen Empfänger senden";
}
}, false);
document.getElementById("fvalmeld").addEventListener("mouseout", function(event) {
if (document.getElementById("fvalmeld").value != "Bitte warten" && name != m_ownusername) {
document.getElementById("fvalmeld").value = "Kampfwerte melden";
document.getElementById("fvalmeld").title = "Kampf- und Skillwerte per PN an " + (id[0] == 0 ?"Admin":id[1]) + " senden";
}
}, false);
if (name == m_ownusername) {
document.getElementById("fvalmeld").value = "Empfänger wählen";
document.getElementById("fvalmeld").title = "Kampf- und Skillwerte per PN an einen anderen Empfänger senden";
}
document.getElementById("fvalmeld").style.visibility = "visible";
}});
}
function getPosition(element) {
var xPosition = 0;
var yPosition = 0;
while (element) {
xPosition += element.offsetLeft - element.scrollLeft + element.clientLeft;
yPosition += element.offsetTop - element.scrollTop + element.clientTop;
element = element.offsetParent;
}
return { x: xPosition, y: yPosition };
}
function fightvalmeld(e) {
if (e.target.value != "Kampfwerte melden") {
var position = getPosition(e.currentTarget);
document.getElementById("fvalrcvdef").parentNode.style.top=(position.y-490)+"px";
document.getElementById("fvalrcvdef").parentNode.style.left=(position.x-475)+"px";
document.getElementById("fvalrcvdef").style.visibility = "visible";
return;
}
var btnText = e.target.value;
var btnTitle = e.target.title;
e.target.value = "Bitte warten";
e.target.title = "Kampf- und Skillwerte werden ermittelt";
e.target.disabled = true;
GM_xmlhttpRequest({method: 'GET', url: TOWNBASE_URL + "dev/api/gang/" + m_owngangid + ".xml", onload: function(responseDetails) {
var content = responseDetails.responseText.split("<member_list>")[1];
var recv = PGu_getValue("fvalrecv", "0");
var id = recv.split(":");
if (content.indexOf("<id>"+id[0]+"</id>") == -1)
id[0] = 0;
var admname = content.split("<status>3")[0].split("<name>").pop().split("<")[0].trim();
if (id[0] == 0)
var name = admname;
else
var name = content.split("<id>"+id[0]+"<")[1].split("</name>")[0].split(">").pop().trim();
GM_xmlhttpRequest({method: 'GET', url: TOWNBASE_URL + "skills/", onload: function(responseDetails) {
var content = responseDetails.responseText.split('id="content"')[1];
var today = new Date();
var now = today.getTime();
var skills = content.split('class="box_top_small');
var skillArr = [];
var ATTskill = 0;
var DEFskill = 0;
skillArr.push("Hallo " + name + ",\nhier sind meine aktuellen Werte.");
skillArr.push("\nMein aktueller Kampfwert: " + fightVals);
skillArr.push("\nMeine Skills:");
var abschluss = "\nAbgeschlossen:\n";
for (var i = 1; i < skills.length; i++) {
var text = skills[i].split(">")[1].split("<")[0].trim();
var styleskill = skills[i].split('"style_skill"');
if (styleskill.length > 1) {
var skill = styleskill[1].split(">")[1].split("<")[0];
var stufe = styleskill[1].split(">")[2].split("<")[0].trim();
if (styleskill[2].indexOf("counter(") != -1) {
var seconds = Number(styleskill[2].split("counter(")[1].split(")")[0].trim());
today.setTime(seconds * 1000 + now);
if (Math.floor((now + seconds * 1000) / 86400000) > Math.floor(now / 86400000))
var ende = ("0" + today.getDate()).substr(-2) + "." +
("0" + (today.getMonth() + 1)).substr(-2) + "." +
today.getFullYear().toString().substr(-2);
else
var ende = "Heute";
ende += ", " + ("0" + today.getHours()).substr(-2) + ":" +
("0" + today.getMinutes()).substr(-2);
}
else
var ende = styleskill[2].split(">")[1].split("<")[0].trim();
skillArr.push(text + ": " + skill + " " + stufe + " Ende: " + ende);
}
}
var skAnf = 2;
if (skills.length > 1 || content.indexOf('class="cbox') != -1) {
if (skills.length < 2)
skAnf = 1;
skills = skills.pop().split('<table ');
}
for (var i = skAnf; i < skills.length; i++) {
var text = skills[i].split("<strong>")[1].split("<")[0].trim();
if (skills[i].indexOf('class="cbox') == -1) {
var trs = skills[i].split("<tr>");
if (trs.length < 3)
continue;
skillArr.push("\n" + text + ":");
for (var j = 2; j < trs.length; j++) {
var td = trs[j].split("<td");
var skill = td[1].split(">")[1].split("<")[0].trim();
var stufe = td[2].split(">")[1].split("<")[0].trim();
var ende = td[4].split("</div")[0].split(">").pop().trim();
skillArr.push(skill + " " + stufe + " Ende: " + ende);
}
}
else {
var stufe = skills[i].split("</tr>")[0].split("<td").pop().split("<")[0].split(">").pop().split("/")[0].trim();
skillArr.push(abschluss + text + ": " + stufe);
if (text == "Angriff")
ATTskill = Number(stufe.match(/\d*/)[0].trim());
else if (text == "Verteidigung")
DEFskill = Number(stufe.match(/\d*/)[0].trim());
abschluss = "";
}
}
if (skillArr.length == 3) {
skills = content.split('class="skill_block');
for (var i = 1; i < skills.length; i++) {
var text = skills[i].split("<h2>")[1].split("<")[0].trim();
var styleskill = skills[i].split('"style_skill"');
if (styleskill.length > 1) {
var skill = styleskill[1].split(">")[1].split("<")[0];
var stufe = styleskill[1].split(">")[2].split("<")[0].trim();
var ende = styleskill[2].split(">")[1].split("<")[0].trim();
skillArr.push(text + ": " + skill + " " + stufe + " Ende: " + ende);
}
else if (skills[i].indexOf("skill_progress_text") != -1) {
var stufe = skills[i].split("skill_progress_text")[1].split("<")[0].split(">").pop().trim().split(" ")[0].trim();
skillArr.push(abschluss + text + ": " + stufe);
if (text == "Angriff")
ATTskill = Number(stufe.match(/\d*/)[0].trim());
else if (text == "Verteidigung")
DEFskill = Number(stufe.match(/\d*/)[0].trim());
abschluss = "";
}
else {
skillArr.push("\n" + text + ":");
var trs = skills[i].split("<tr>");
for (var j = 1; j < trs.length; j++) {
var td = trs[j].split("<td");
var skill = td[1].split(">")[1].split("<")[0].trim();
var stufe = td[2].split(">")[1].split("<")[0].trim();
var ende = td[4].split("</div")[0].split(">").pop().trim();
skillArr.push(skill + " " + stufe + " Ende: " + ende);
}
}
}
}
GM_xmlhttpRequest({method:"GET", url: window.location.protocol + '//' + window.location.hostname + '/overview/', onload:function(responseDetails) {
var content = responseDetails.responseText;
pos = content.search("Angelegte Plunder");
if (pos <= 0) {
return;
}
var table = content.substr(pos).split("<table")[1].split("</table>")[0];
var tabs = table.split("<tr")[2].split("<td");
var pname = "";
var ATTval = 0;
var ATTprz = 1;
var DEFval = 0;
var DEFprz = 1;
if (tabs[1].indexOf("<strong") != -1) {
pname = tabs[1].split("</strong")[0].split('<strong')[1].split(">")[1];
var padv = tabs[1].split('class="padv');
if (padv.length > 1)
padv = padv[1].split('</ul')[0].split("<li>");
var ATT = "";
var DEF = "";
for (var i = 1; i < padv.length; i++)
if (padv[i].indexOf("ATT:") != -1)
ATT = padv[i].split("ATT:")[1].split("<")[0];
else if (padv[i].indexOf("DEF:") != -1)
DEF = padv[i].split("DEF:")[1].split("<")[0];
if (ATT != "") {
ATTval = Number(ATT.split("+")[0].trim());
if (ATT.indexOf("+") != -1)
ATTprz = Number(ATT.split("+")[1].split("%")[0].trim()) / 100 + 1;
}
if (DEF != "") {
DEFval = Number(DEF.split("+")[0].trim());
if (DEF.indexOf("+") != -1)
DEFprz = Number(DEF.split("+")[1].split("%")[0].trim()) / 100 + 1;
}
}
var tierclass = content.split('id="content"')[1].split('class="tieritem');
var ATTweap = 0;
var DEFhome = 0;
for (var i = 1; i < tierclass.length; i++) {
if (tierclass[i].indexOf("Deine Waffe") == -1)
continue;
ATTweap = parseInt(tierclass[i].split('class="double')[1].split("<li>")[2].split("</span")[0].split(">").pop().replace(/[\+\-\/]/g, "0"));
DEFhome = parseInt(tierclass[i].split('class="double')[2].split("<li>")[2].split("</span")[0].split(">").pop().replace(/[\+\-\/]/g, "0"));
}
GM_xmlhttpRequest({method:"GET", url: window.location.protocol + '//' + window.location.hostname + '/city/pet_store/', onload:function(responseDetails) {
var tierclass = responseDetails.responseText.split('id="content"')[1].split('class="tieritem');
var ATTbegl = 0;
var DEFbegl = 0;
for (var i = 1; i < tierclass.length; i++) {
if (tierclass[i].indexOf("Dein aktueller Begleiter") == -1)
continue;
var spans = tierclass[i].split("<tr")[3].split("<span");
ATTbegl = Number(spans[1].split("</span")[0].split(">").pop().replace("+", ""));
DEFbegl = Number(spans[2].split("</span")[0].split(">").pop().replace("+", ""));
}
GM_xmlhttpRequest({method: 'GET', url: TOWNBASE_URL + "gang/upgrades/", onload: function(responseDetails) {
var trs = responseDetails.responseText.split('id="content"')[1].split("</table")[0].split("<table").pop().split("<tr");
var ATTgang = -1;
var DEFgang = -1;
for (var i = 1; i < trs.length; i++) {
var tds = trs[i].split("<td");
if (tds[1].indexOf("Waffenkammer") != -1)
ATTgang = Number(tds[2].match(/\+\d*/)[0].split("+").pop().trim()) / 100 + 1;
else if (tds[1].indexOf("Bandenhaus") != -1)
DEFgang = Number(tds[2].match(/\+\d*/)[0].split("+").pop().trim()) / 100 + 1;
else if (ATTgang >= 0 && DEFgang >= 0)
break;
}
if (ATTgang < 0)
ATTgang = 1;
if (DEFgang < 0)
DEFgang = 1;
var fightval = (Math.round(Math.floor((ATTskill + ATTbegl + ATTweap + ATTval) * ATTgang * ATTprz) * 11 + Math.floor((DEFskill + DEFhome + DEFbegl + DEFval) * DEFgang * DEFprz) * 10) / 10).toString().replace(".", DZ[lang]);
skillArr.push("\nWaffe/Eigenheim: " + ATTweap + "/" + DEFhome);
if (ATTval + ATTprz + DEFval + DEFprz > 2)
skillArr.push("Plunder: " + ((ATTval + ATTprz > 1)?"ATT:" + (ATTval > 0?" " + ATTval:"") + (ATTprz > 1?" + " + (Math.floor((ATTprz-1)*100+0.1))+"%":"")+ " ":"")
+ ((DEFval + DEFprz > 1)?"DEF:" + (DEFval > 0?" " + DEFval:"") + (DEFprz > 1?" + " + (Math.floor((DEFprz-1)*100+0.1))+"%":""):"") + " (" + pname + ")");
if (ATTbegl + DEFbegl > 0)
skillArr.push("Begleiter: " + ATTbegl + "/" + DEFbegl);
document.getElementById("fvalmeld").value = btnText;
document.getElementById("fvalmeld").title = btnTitle;
document.getElementById("fvalmeld").disabled = false;
if (!confirm("Soll dein Kampfwert " + fightval + " an " + name + " gesendet werden ?"))
return;
if (name == admname) {
var flist = PGu_getValue("FightIDList", "");
var aktflist = PGu_getValue("aktfightlist", 0);
var ftlist = "";
if (aktflist > 0)
ftlist = PGu_getValue("fightlist_" + aktflist, "").split("°")[0];
if (flist != "")
if (confirm("Soll die aktuelle Kampfliste mit gesendet werden (OK für Ja, Abbrechen für Nein) ?"))
skillArr.push("Meine Kampfliste" + (ftlist != ""?" (" + ftlist + ")":"") + ":\n" + flist);
}
GM_xmlhttpRequest({method: 'GET', url: TOWNBASE_URL + "messages/write/", onload: function(responseDetails) {
var inputs = responseDetails.responseText.split('id="content"')[1].split('id="form1"')[1].replace("textarea", "input").split("<input");
var vals = ["f_toname", name, "f_subject", "KW " + fightval, "f_text", skillArr.join("\n")];
var params = [];
for (var i = 0; i < inputs.length; i++) {
var pname = inputs[i].split('name="');
if (pname.length < 2)
continue;
pname = pname[1].split('"')[0];
var value = "";
for (var j = 0; j < vals.length; j+=2)
if (vals[j] == pname)
break;
if (j < vals.length)
value = vals[j+1];
else {
value = inputs[i].split('value="');
if (value.length > 1)
value = value[1].split('"')[0];
else {
continue;
}
}
params.push(pname);
params.push(value);
}
PostToHTTP(TOWNBASE_URL + "messages/write/send/", params, function() { alert("Nachricht an " + name + " wurde gesendet.") });
}});
}});
}});
}});
}});
}});
}
function exportVars(quiet) {
var vars = "Script§" + THISSCRIPTNAME;
var gm_vars = GM_listValues().sort();
var deleted = 0;
var count = 0;
for (var i = 0; i < gm_vars.length; i++) {
if (gm_vars.indexOf(gm_vars[i]) < i)
continue;
if (gm_vars[i] == "" || gm_vars[i].match(new RegExp(/[^\d]0$/))) {
GM_deleteValue(gm_vars[i]);
deleted++;
}
else if (GM_getValue(gm_vars[i]) == undefined) {
GM_deleteValue(gm_vars[i]);
deleted++;
}
else {
if (gm_vars[i].length > 50) {
if (!quiet)
var conf = confirm("Variable löschen: " + gm_vars[i]);
else
var conf = true;
if (conf) {
GM_deleteValue(gm_vars[i]);
deleted++;
continue;
}
}
var val = GM_getValue(gm_vars[i], "xyzundefinedzyx");
if (val == "xyzundefinedzyx" || val == null)
continue;
if (typeof(val) == "number")
val = "N" + val;
else if (typeof(val) == "boolean")
val = "B" + (val?1:0);
else if (typeof(val) == "string") {
if (val.indexOf("§") != -1) {
break;
}
val = "S" + val.replace(String.fromCharCode(0), "");
}
else {
break;
}
vars += "§" + gm_vars[i] + "§" + val;
count++;
}
}
if (i < gm_vars.length)
if (quiet)
GM_setClipboard("Fehler!!");
else
alert('Export wegen Fehler abgebrochen');
else {
vars += "§" + checksum(vars);
GM_setClipboard(vars);
if (!quiet)
if (deleted > 0)
alert (count + " Variablen in Zwischenablage exportiert, " + deleted + " Variablen gelöscht.");
else
alert (count + " Variablen in Zwischenablage exportiert");
}
return;
}
function CheckForExport(now, diff) {
// create and format actual date
var lastExport = GM_getValue("lastExport", "");
if (isNaN(lastExport))
lastExport = 0;
else
lastExport = Number(lastExport);
if (now >= lastExport + diff) {
GM_setValue("lastExport", String(now));
exportVars(true);
}
}
// ********************************************************************************************************************
// ********************************************************************************************************************
// ********************************************************************************************************************
// START PROGRAMM * START PROGRAMM * START PROGRAMM * START PROGRAMM * START PROGRAMM *START PROGRAMM *START PROGRAMM *
// ********************************************************************************************************************
// ********************************************************************************************************************
// ********************************************************************************************************************
var m_ownusername = "Mr.X";
var m_owngangid = -1;
var m_owngangname = "";
try {
var navtag = document.getElementById("tabnav");
var li = navtag.getElementsByTagName("ul")[0].getElementsByTagName("li");
m_owngangid = li[1].getElementsByTagName("a")[0].href.split("bande:")[1].split("/")[0];
} catch(err) {
}
if (document.getElementsByClassName('zleft profile-data').length > 0) {
var m_ownuserid = getOwnUserID();
if (document.getElementsByClassName('zleft profile-data')[0].getElementsByClassName("user_name").length > 0)
m_ownusername = document.getElementsByClassName('zleft profile-data')[0].getElementsByClassName("user_name")[0].innerHTML;
else
m_ownusername = document.getElementsByClassName('zleft profile-data')[0].getElementsByTagName("a")[0].getElementsByTagName("span")[0].innerHTML;
}
ByeByeGoogle();
// ***********************************************************************************************
// Auf eine neue Version des Skriptes prüfen
// ***********************************************************************************************
CheckForUpdate(120);
var today = new Date();
var now = Math.floor(today.getTime()/1000);
var day = today.getDay();
var hour = today.getHours();
if (expertMode)
if (GM_getValue("exportDays", "").split(",").indexOf(((day+6) % 7 + 1).toString()) != -1 &&
GM_getValue("exportTimes", "").split(",").indexOf(((hour+1) % 24).toString()) != -1 && today.getMinutes() >= 50)
CheckForExport(now, 1000);
var content = document.getElementsByTagName("body")[0].innerHTML;
if (location.toString().indexOf(".pennerzone.de") == -1) {
// Eigene Punktezahl auslesen
var myprof = document.getElementById("my-profile-new");
if (!myprof)
myprof = document.getElementById("my-profile");
var ownplace = Number(myprof.getElementsByTagName("div")[1].getElementsByTagName("span")[4].innerHTML);
var ownpoints = Number(document.getElementsByClassName("icon award")[0].getElementsByTagName("a")[0].innerHTML);
// Aus eigener Punktzahl Ober- und Untergrenze für Punktezahl der User errechnen, die man angreifen kann
var ownattmax = Math.floor(ownpoints * upperLimit);
var ownattmin = Math.floor(ownpoints * lowerLimit);
if (IsTimeToCheck(TOWNEXTENSION + "update" + m_ownuserid, 480) || THISSCRIPTVERSION != GM_getValue("scriptversion", "0")) {
GM_setValue("scriptversion", THISSCRIPTVERSION);
DelayedPost(0);
}
}
if (expertMode)
GM_registerMenuCommand(THISSCRIPTNAME + ": Zeit für Variablenexport festlegen", function (event) {
var days = prompt("Tage: ", GM_getValue("exportDays", "")).replace(/[^\d]/g, ",");
if (days == null)
return;
if (days == "")
GM_deleteValue("exportDays");
else {
var dayarr = days.split(",");
for (var i = 0; i < dayarr.length; i++)
if (isNaN(dayarr[i]) || Number(dayarr[i]) < 1 || Number(dayarr[i]) > 7) {
alert("Bitte nur Zahlen von 1 (Mo) bis 7 (So) eingeben!!");
return;
}
GM_setValue("exportDays", days);
}
var times = prompt("Zeiten: ", GM_getValue("exportTimes", "")).replace(/[^\d]/g, ",");
if (times == null)
rerurn;
if (times == "")
GM_deleteValue("exportTimes");
else {
var timarr = times.split(",");
for (var i = 0; i < timarr.length; i++)
if (isNaN(timarr[i]) || Number(timarr[i]) < 0 || Number(timarr[i]) > 23) {
alert("Bitte nur Zahlen von 0 bis 23 eingeben!!");
return;
}
GM_setValue("exportTimes", times);
}
});
GM_registerMenuCommand(THISSCRIPTNAME + ": alle Einstellungen exportieren", function (event) {
exportVars(false);
});
GM_registerMenuCommand(THISSCRIPTNAME + ": alle Einstellungen importieren", function (event) {
var vars = prompt("Eingabe: ");
var i = vars.lastIndexOf("§");
var chksum = vars.substr(i+1);
vars = vars.substr(0, i);
if (chksum != checksum(vars)) {
alert("Importstring ist fehlerhaft. Kein Import möglich.");
return;
}
var gmvars = vars.split("§");
if (gmvars[0] != "Script" || gmvars[1] != THISSCRIPTNAME) {
alert("Eingabe ungültig!!");
return;
}
var gm_vars = GM_listValues();
for (var i = 0; i < gm_vars.length; i++)
GM_deleteValue(gm_vars[i]);
var count = 0;
for (var i = 2; i < gmvars.length; i+=2) {
var val = gmvars[i+1];
if (val.substr(0, 1) == "N")
val = Number(val.substr(1));
else if (val.substr(0, 1) == "B")
val = val.substr(1) == "1";
else if (val.substr(0, 1) == "S")
val = val.substr(1);
else {
alert("Fehler bei " + gmvars[i] + ": " + val);
continue;
}
GM_setValue(gmvars[i], val);
count++;
}
alert(count + " Variablen importiert.");
return;
});
// ***********************************************************************************************
// Abrufen der DF-Liste von downfight.de
// ***********************************************************************************************
if (DFTownCode3 != "")
if (PGu_getValue("MarkDF", false))
updDFList();
var fid = PGu_getValue("watchlist", 0);
var watchlist = [];
if (fid != 0) {
var fightlist = PGu_getValue("fightlist_" + fid, "");
if (fightlist != "")
watchlist = fightlist.split("°")[1].split(";");
}
// ***********************************************************************************************
// Wenn die aktuelle Seite eine Bandenprofil-Seite ist
// ***********************************************************************************************
if (location.toString().indexOf(TOWN_URL+"profil/bande:") != -1) {
// Aktualisierung der Info-Icons auf dem Bandenprofil durchführen (wenn welche vorhanden sind)
HandleGangProfile(content);
// ***********************************************************************************************
// Wenn die aktuelle Seite eine Userprofilseite ist
// ***********************************************************************************************
} else if ((location.toString().indexOf(TOWN_URL+"profil/") != -1) && (location.toString().indexOf("/bande:") == -1)) {
// Info-Icons auf dem Profil einfügen
HandleProfile();
// ***********************************************************************************************
// Wenn die aktuelle Seite eine Kampfprofil-Seite ist
// ***********************************************************************************************
} else if (location.toString().indexOf(TOWN_URL+"fight/viewfight/") != -1) {
// ap();
// ***********************************************************************************************
// Wenn die aktuelle Seite eine Pennerzone-Seite ist
// ***********************************************************************************************
} else if (location.toString().indexOf(".pennerzone.de/highscore/") != -1) {
HandlePennerzone();
// ***********************************************************************************************
// wenn die aktuelle Seite die Übersichts- oder die Aktionenseite ist
// ***********************************************************************************************
} else if (location.toString().indexOf(TOWN_URL+"overview/") != -1 || location.toString().indexOf(TOWN_URL+"activities/") != -1) {
if (watchlist.length > 0 && IsTimeToCheck(TOWNEXTENSION+"watchlist", 10)) {
for (var i = watchlist.length - 1; i >= 0; i--)
if (watchlist[i] == "" || bl("fi", watchlist[i]) && watchlist.length > 9)
watchlist.splice(i, 1);
for (i = 0; i < watchlist.length; i++)
getUserData("#"+watchlist[i], function(userid, username, userpoints, gangid, gangname, regsince, money, userplace, history) { });
}
// ***********************************************************************************************
// sonst: Die aktuelle Seite ist keine Profilseite
// ***********************************************************************************************
} else {
// ***********************************************************************************************
// Abrufen des XML-Datensatzes für den aktuellen User
// ***********************************************************************************************
getUserData("#"+m_ownuserid, function(userid, username, userpoints, gangid, gangname, regsince, money, userplace, history) {
var inGang = (gangid != 'None')?1:0;
m_owngangid = (inGang == 1)?gangid:0;
m_owngangname = gangname;
// ***********************************************************************************************
// Wenn die aktive Kampfseite angezeigt wird
// ***********************************************************************************************
if (content.indexOf(TxtZiel[lang]) != -1 ) {
CheckFightValues(document.getElementById("content").innerHTML);
// ***********************************************************************************************
// Funktion ermittelt das DIV, in dem die Angriffsdetails stehen
// ***********************************************************************************************
function GetAttackDiv() {
var forms = document.getElementsByTagName("form");
for (var i = 0; i < forms.length; i++) {
if (!forms[i].outerHTML)
continue;
if (forms[i].outerHTML.indexOf("/fight/attack") != -1) {
var divs = forms[i].getElementsByTagName("div");
return divs[0];
}
else if (forms[i].outerHTML.indexOf("/fight/cancel") != -1)
return forms[i].parentNode;
}
}
var attacktable = document.getElementById("content").getElementsByTagName("table")[0];
var attackdiv = GetAttackDiv();
if (attackdiv) {
var attacklink = attackdiv.getElementsByTagName("a")[0];
var attackspan = attackdiv.getElementsByTagName("span")[0];
}
// Wenn aktuell ein Angriff läuft
if (document.getElementsByTagName("body")[0].innerHTML.indexOf(TxtRunAttack[lang]) != -1) {
// Name und UserID des Penners auslesen
var username = trimString(attacklink.innerHTML.split(">").pop());
var userid = attackspan.innerHTML.split('/id:')[1].split('/"')[0];
CheckPastFights(userid, username, 0);
// Info-Icons einfügen
attackspan.innerHTML = attackspan.innerHTML + ' ' + GetIconInsertHTML(userid, username, "x");
// Grafik für Posten in SB einfügen
if (inGang)
attackspan.innerHTML = attackspan.innerHTML + ' <img id="PostCurrentFightToSB" border="0" src="' + getIconAddr(ICON_SENDTOSB) + '" title="' + TxtPostTitle2[myLang].replace('%s', username) + '" height="14" width="14" style="cursor: pointer">';
getUserData("#"+userid, function(userid, username, userpoints, gangid, gangname, regsince, money, userplace, history) {
var td = document.getElementById("PostCurrentFightToSB");
if (td)
td.name = gangid + "|" + (gangid=='None'?'':gangname);
if (showHistory && history != "")
insertHistory(attackdiv.getElementsByTagName("a")[0], 0, history);
});
var additionalbr = '';
// sonst: Es läuft derzeit kein Angriff
} else {
var additionalbr = '<br />';
}
if (attackspan) {
var showFBlike = PG_getValue("showFBlike", true);
if (!showFBlike) {
showFBlike = IsTimeToCheck(TOWNEXTENSION+"showFBdate", 90*1440);
}
attackspan.innerHTML = (showFBlike?'<iframe src="http://www.facebook.com/plugins/like.php?locale='+fblikelocale[myLang]+'&href=http://www.facebook.com/pages/Fightinfo/276193969093799/&layout=standard&show-faces=true&width=500&action=like&colorscheme=dark" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:500px; height:30px"></iframe>':'')+'<img id="LangSelect" border="0" src="' + getIconAddr(flags[myLang]) + '" title="' + TxtLang[myLang] + '" height="12" width="18" style="cursor:pointer"> ' + attackspan.innerHTML;
// ***********************************************************************************************
// Pennerzone-Suchkonfigurationen einblenden
// ***********************************************************************************************
// Einfügen der Pennerzone-Suchzeile in die Angriffsbox
if (ZONEBASE_URL != "") {
attackdiv.innerHTML = attackdiv.innerHTML + additionalbr + '<br /><p id="PennerzoneP">' + BuildPennerzoneLinkString(ownattmin, ownattmax, PGu_getValue("PennerzoneDateFrom", "")) + '</p>';
// Handler für Datumseingabe einfügen
AddPennerzoneDateHandler();
}
if (additionalbr == "")
FightListHandler(attackspan.getElementsByTagName('img')[attackspan.getElementsByTagName('img').length-(inGang?2:1)]);
// Wenn der aktuelle Kampf in die SB gepostet werden können soll
if (document.getElementById("PostCurrentFightToSB") != null) {
// Handler für das Posten in SB mit Grafik assoziieren
PostToSBHandler(document.getElementById("PostCurrentFightToSB"), SBPOSTMODE_ACTIVE);
}
document.getElementById("LangSelect").addEventListener("click", function(event) {
if (event.shiftKey != 0) {
var showFBlike = PG_getValue("showFBlike", true);
PG_setValue("showFBlike", !showFBlike);
if (showFBlike)
PG_setValue("showFBdate", Number(new Date()).toString());
return;
}
myLang++;
if (myLang == flags.length)
myLang = 0;
var td = document.getElementById("LangSelect");
td.src = getIconAddr(flags[myLang]);
td.title = TxtLang[myLang];
PG_setValue("myLang", myLang); // Sprache speichern
}, false);
}
}
// ***********************************************************************************************
// Wenn die aktuelle Seite die Fightlog-Seite oder die Kampf-Sucheseite ist
// ***********************************************************************************************
if (location.toString().indexOf("/fightlog/") != -1) {
GM_xmlhttpRequest({method: 'GET', url: FIGHT_URL, onload: function(responseDetails) {
CheckFightValues(responseDetails.responseText);
}});
// Referenz auf die Tabelle mit den abgeschlossenen Kämpfen speichern
var firsttable = document.getElementById("content").getElementsByTagName("table")[1];
// ***********************************************************************************************
// Wenn die aktuelle Seite die Kampf-Suchseite ist
// ***********************************************************************************************
if (location.toString().indexOf("?q=") != -1) {
HandleSearchpage(firsttable, inGang);
// ***********************************************************************************************
// Wenn die aktuelle Seite die Fightlog-Seite ist
// ***********************************************************************************************
} else {
HandleFightlogpage(firsttable, inGang, 0, 0);
}
// ***********************************************************************************************
// sonst: ist es eine Highscore-Seite ?
// ***********************************************************************************************
} else if (document.getElementById("highscore")) {
// Referenz auf die Tabelle speichern
firsttable = document.getElementById("highscore").getElementsByTagName("table")[0];
// Tabelle neu formatieren und eine neue Spalte einfügen
ReformatHighscoreTable(firsttable);
// "Info"-Icon und -Link in die Tabelle schreiben
InsertInfoInHighscoreTable(firsttable, inGang, 0);
// Angreifbarkeit der Spieler (Punkte/36 Stunden) farblich kennzeichnen
InsertAttackableInHighscoreTable(firsttable);
// ***********************************************************************************************
// sonst: die aktuelle Seite ist NICHT die Fightlog-Seite, darf nicht die Bandenseite sein
// ***********************************************************************************************
} else if (location.toString().indexOf("/gang/") == -1) {
var submenu = document.getElementsByClassName('submenu')[0];
var lis = submenu.getElementsByTagName('li');
var btn = lis.length;
var center = lis[1].innerHTML.indexOf("<center") != -1;
for (var i = 0; i < tableIDs.length; i++) {
if (i > 0 && DFTownCode == "")
break;
btn = btn % 5 + 1;
submenu.innerHTML += '<li><a id=\"' + tableIDs[i] + '\" style=\"cursor:pointer\" class=\"btn'+btn+'\">'
+ (center?'<center>':'')+'<span id=\"' + tableIDs[i] + '2\" >'+(i==0?TxtFightList[myLang]:tableNames[i-1]) +'</span>'+(center?'</center>':'')+'</a></li>';
}
// Referenz auf die erste Tabelle speichern
var tables = document.getElementById("content").getElementsByTagName("table");
var ft = getFightTableIndex(tables);
if (ft != 0) {
var div = tables[0].parentNode;
div.style.top = (parseInt(div.style.top) + i * 38 + 2) + "px";
div.style.left = (parseInt(div.style.left) + 15) + "px";
}
var firsttable = tables[ft];
var trs = firsttable.getElementsByTagName("tr");
var cnt = 0;
hasCaptcha = document.getElementById("captcha_img");
if (hasCaptcha)
hasCaptcha = hasCaptcha.getElementsByTagName("src").length > 0;
for (var i = 0; i < trs.length; i++) {
if (trs[i].innerHTML.indexOf('tiername') == -1)
continue;
cnt++;
if (cnt != 3)
continue;
if (inGang) {
var bbcode = "";
if (document.getElementById("content").getElementsByTagName("table")[1].getElementsByTagName("tr").length > 2) {
var text = trs[i].innerHTML.split('tiername">')[1].split('<')[0];
bbcode = text + ' <input name="postVals" id="postVals" type="checkbox" onclick="document.getElementById(\'bbcode\').style.visibility=\'hidden\'"> ' + TxtPostFight[myLang] + ' <input type="button" value="BBCode" id="bbcodeanzeigen" title="' + TxtShowBBCode[myLang] + '"></form> <textarea rows="1" style="vertical-align:middle;height:15px;width:100px" name="bbcode" action="" type="text" id="bbcode" onclick="this.focus(); this.select();"></textarea>';
}
var recv = PGu_getValue("fvalrecv", "0");
var id = recv.split(":");
trs[i].innerHTML = '<td colspan="2">' + bbcode + '<input type="button" value="Kampfwerte melden" id="fvalmeld" style="float:right; visibility:hidden" title="' + "Kampf- und Skillwerte per PN an " + (id[0] == 0 ?"Admin":id[1]) + " senden" + '"></form></td>';
if (bbcode != "")
bbcodeEinAus();
window.setTimeout(checkFightValBox, 500);
}
break;
}
// Referenz auf die Tabelle mit den abgeschlossenen Kämpfen speichern
ft++;
while (tables[ft].innerHTML.indexOf('</th>') != -1 || tables[ft].innerHTML.indexOf('showChart()') != -1)
ft++;
firsttable = tables[ft];
// Referenz auf die Tabelle mit den eintreffenden Kämpfen speichern
var secondtable = tables[ft+1];
// Tabelle mit den abgeschlossenen Kämpfen neu formatieren und eine neue Spalte einfügen
ReformatFirstTable(firsttable);
// "Info"-Icon und -Link in die Tabelle schreiben
InsertInfoInFirstTable(firsttable, inGang, 0, function() {
// Angreifbarkeit der Spieler (Punkte/36 Stunden) farblich kennzeichnen
InsertAttackableInFirstTable(firsttable);
// Array für Kampf-Infos initialisieren
var IncomingFights = [];
// Auslesen der Daten der einkommenden Kämpfe
ReadFightData(secondtable, IncomingFights);
if (IncomingFights.length > 0) {
// Eintreffende Kämpfe chronologisch sortieren (aufsteigend)
IncomingFights.sort(sortByTime);
// Tabelle mit den eintreffenden Kämpfen neu formatieren und eine neue Spalte einfügen
ReformatSecondTable(secondtable, inGang);
// Zurückschreiben der sortierten eintreffenden Kämpfe in die Tabelle
WriteFightData(secondtable, IncomingFights, inGang);
}
// Angreifbarkeit der Spieler (Punkte/36 Stunden) farblich kennzeichnen
InsertAttackableInFirstTable(secondtable, true, true);
// Schreiben der Anzahl eintreffender Kämpfe in die Zeilenüberschrift
WriteNrOfIncomingFights(content, tables[0]);
insertSBTable("PostDoneFightsToSB", m_owngangname);
function showTable(event) {
var id = event.target.id.substr(0,8);
for (var i = 0; i < tableIDs.length; i++)
if (id == tableIDs[i])
break;
if (i >= tableIDs.length)
return;
var tables = document.getElementById("content").getElementsByTagName("table");
var ft = getFightTableIndex(tables);
var table = tables[ft];
var trs = table.getElementsByTagName("tr");
for (var j = trs.length-1; j > 0; j--)
trs[j].parentNode.removeChild(trs[j]);
if (i == 0)
// ***********************************************************************************************
// Kampftabelle anzeigen
// ***********************************************************************************************
InsertFightTable(table, true);
else
// ***********************************************************************************************
// Downfight-Tabellen anzeigen
// ***********************************************************************************************
InsertDFTable(table, i - 1, true);
}
var ft = getFightTableIndex(tables);
var table = tables[ft];
for (var i = bl()||m?1:0; i < tableIDs.length; i++) {
if (i > 0 && DFTownCode == "")
break;
document.getElementById(tableIDs[i]).addEventListener("click", showTable, false);
// Wenn die letzte Einstellung der Checkbox "aktiv" war
if (PGu_getValue(tableIDs[i] + "OnLF", false)) {
if (i == 0) {
// ***********************************************************************************************
// Kampftabelle anzeigen
// ***********************************************************************************************
InsertFightTable(table, false);
}
else {
// ***********************************************************************************************
// Downfight-Tabelle anzeigen
// ***********************************************************************************************
InsertDFTable(table, i - 1, false);
}
}
}
});
}
else
colorNames();
});
}