Fightinfo

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)

  1. // ==UserScript==
  2. // @name Fightinfo
  3. // @namespace http://userscripts.org/scripts/show/75242
  4. // @author sageo[http://berlin.pennergame.de/profil/id:1146285/]
  5. // @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)
  6. // @include http://*.pennergame.de/activities/
  7. // @include http://*.pennergame.de/overview/
  8. // @include http://*.pennergame.de/fight/
  9. // @include http://*.pennergame.de/fight/#*
  10. // @include http://*.pennergame.de/fight/fightlog/*
  11. // @include http://*.pennergame.de/fight/overview/*
  12. // @include http://*.pennergame.de/fight/?status*
  13. // @include http://*.pennergame.de/gang/
  14. // @include http://*.pennergame.de/highscore/attackable*
  15. // @include http://*.pennergame.de/highscore/joindate*
  16. // @include http://*.pennergame.de/highscore/rank*
  17. // @include http://*.pennergame.de/highscore/user*
  18. // @include http://*.pennergame.de/highscore/tpp*
  19. // @include http://*.pennergame.de/profil/*
  20. // @include https://*.pennergame.de/activities/
  21. // @include https://*.pennergame.de/overview/
  22. // @include https://*.pennergame.de/fight/
  23. // @include https://*.pennergame.de/fight/#*
  24. // @include https://*.pennergame.de/fight/fightlog/*
  25. // @include https://*.pennergame.de/fight/overview/*
  26. // @include https://*.pennergame.de/fight/?status*
  27. // @include https://*.pennergame.de/gang/
  28. // @include https://*.pennergame.de/highscore/attackable*
  29. // @include https://*.pennergame.de/highscore/joindate*
  30. // @include https://*.pennergame.de/highscore/rank*
  31. // @include https://*.pennergame.de/highscore/user*
  32. // @include https://*.pennergame.de/highscore/tpp*
  33. // @include https://*.pennergame.de/profil/*
  34. // @include http://*.pennerzone.de/highscore/?page=*
  35. // @include http://*.pennerzone.de/highscore/uh*
  36. // @include http://*.bumrise.com/fight/
  37. // @include http://*.bumrise.com/fight/#*
  38. // @include http://*.bumrise.com/fight/fightlog/*
  39. // @include http://*.bumrise.com/fight/overview/*
  40. // @include http://*.bumrise.com/fight/?status*
  41. // @include http://*.bumrise.com/gang/
  42. // @include http://*.bumrise.com/highscore/attackable*
  43. // @include http://*.bumrise.com/highscore/joindate*
  44. // @include http://*.bumrise.com/highscore/rank*
  45. // @include http://*.bumrise.com/highscore/user*
  46. // @include http://*.bumrise.com/profil/*
  47. // @include http://*.menelgame.pl/fight/
  48. // @include http://*.menelgame.pl/fight/#*
  49. // @include http://*.menelgame.pl/fight/fightlog/*
  50. // @include http://*.menelgame.pl/fight/overview/*
  51. // @include http://*.menelgame.pl/fight/?status*
  52. // @include http://*.menelgame.pl/gang/
  53. // @include http://*.menelgame.pl/highscore/attackable*
  54. // @include http://*.menelgame.pl/highscore/joindate*
  55. // @include http://*.menelgame.pl/highscore/rank*
  56. // @include http://*.menelgame.pl/highscore/user*
  57. // @include http://*.menelgame.pl/profil/*
  58. // @include http://*.clodogame.fr/fight/
  59. // @include http://*.clodogame.fr/fight/#*
  60. // @include http://*.clodogame.fr/fight/fightlog/*
  61. // @include http://*.clodogame.fr/fight/overview/*
  62. // @include http://*.clodogame.fr/fight/?status*
  63. // @include http://*.clodogame.fr/gang/
  64. // @include http://*.clodogame.fr/highscore/attackable*
  65. // @include http://*.clodogame.fr/highscore/joindate*
  66. // @include http://*.clodogame.fr/highscore/rank*
  67. // @include http://*.clodogame.fr/highscore/user*
  68. // @include http://*.clodogame.fr/profil/*
  69. // @include http://*.mendigogame.es/fight/
  70. // @include http://*.mendigogame.es/fight/#*
  71. // @include http://*.mendigogame.es/fight/fightlog/*
  72. // @include http://*.mendigogame.es/fight/overview/*
  73. // @include http://*.mendigogame.es/fight/?status*
  74. // @include http://*.mendigogame.es/gang/
  75. // @include http://*.mendigogame.es/highscore/attackable*
  76. // @include http://*.mendigogame.es/highscore/joindate*
  77. // @include http://*.mendigogame.es/highscore/rank*
  78. // @include http://*.mendigogame.es/highscore/user*
  79. // @include http://*.mendigogame.es/profil/*
  80. // @include http://*.mendigogame.com/fight/
  81. // @include http://*.mendigogame.com/fight/#*
  82. // @include http://*.mendigogame.com/fight/fightlog/*
  83. // @include http://*.mendigogame.com/fight/overview/*
  84. // @include http://*.mendigogame.com/fight/?status*
  85. // @include http://*.mendigogame.com/gang/
  86. // @include http://*.mendigogame.com/highscore/attackable*
  87. // @include http://*.mendigogame.com/highscore/joindate*
  88. // @include http://*.mendigogame.com/highscore/rank*
  89. // @include http://*.mendigogame.com/highscore/user*
  90. // @include http://*.mendigogame.com/profil/*
  91. // @include http://*.faveladogame.com/fight/
  92. // @include http://*.faveladogame.com/fight/#*
  93. // @include http://*.faveladogame.com/fight/fightlog/*
  94. // @include http://*.faveladogame.com/fight/overview/*
  95. // @include http://*.faveladogame.com/fight/?status*
  96. // @include http://*.faveladogame.com/gang/
  97. // @include http://*.faveladogame.com/highscore/attackable*
  98. // @include http://*.faveladogame.com/highscore/joindate*
  99. // @include http://*.faveladogame.com/highscore/rank*
  100. // @include http://*.faveladogame.com/highscore/user*
  101. // @include http://*.faveladogame.com/profil/*
  102. // @include http://*.bomzhuj.ru/fight/
  103. // @include http://*.bomzhuj.ru/fight/#*
  104. // @include http://*.bomzhuj.ru/fight/fightlog/*
  105. // @include http://*.bomzhuj.ru/fight/overview/*
  106. // @include http://*.bomzhuj.ru/fight/?status*
  107. // @include http://*.bomzhuj.ru/gang/
  108. // @include http://*.bomzhuj.ru/highscore/attackable*
  109. // @include http://*.bomzhuj.ru/highscore/joindate*
  110. // @include http://*.bomzhuj.ru/highscore/rank*
  111. // @include http://*.bomzhuj.ru/highscore/user*
  112. // @include http://*.bomzhuj.ru/profil/*
  113. // @include http://*.dossergame.co.uk/fight/
  114. // @include http://*.dossergame.co.uk/fight/#*
  115. // @include http://*.dossergame.co.uk/fight/fightlog/*
  116. // @include http://*.dossergame.co.uk/fight/overview/*
  117. // @include http://*.dossergame.co.uk/fight/?status*
  118. // @include http://*.dossergame.co.uk/gang/
  119. // @include http://*.dossergame.co.uk/highscore/attackable*
  120. // @include http://*.dossergame.co.uk/highscore/joindate*
  121. // @include http://*.dossergame.co.uk/highscore/rank*
  122. // @include http://*.dossergame.co.uk/highscore/user*
  123. // @include http://*.dossergame.co.uk/profil/*
  124. // @info CDCBB6BEBBC3D4EBAH@D@D@@D1E6E6@CAEAAE4A2AA@IE5ADAEE6@GAEABDFE6AFAIA3AE@CE6@DE5@@AH@@EBD2A4D4D@D2
  125. // @grant GM_getValue
  126. // @grant GM_setValue
  127. // @grant GM_xmlhttpRequest
  128. // @grant GM_addStyle
  129. // @grant GM_deleteValue
  130. // @grant GM_listValues
  131. // @grant GM_log
  132. // @grant GM_registerMenuCommand
  133. // @grant GM_setClipboard
  134. // @version 1.25.15 Bilder neu hochgeladen; neuer Bilderhost
  135. // ==/UserScript==
  136.  
  137. // Daten über das aktuelle Skript für den Update-Mechanismus
  138. var THISSCRIPTVERSION = GM_info.script.version.split(" ")[0];
  139. var THISSCRIPTINSTALL_URLGF = "https://greasyfork.org/scripts/1051-fightinfo";
  140. var THISSCRIPTNAME = GM_info.script.name;
  141. // @version 1.25.14 neuer Bilderhost; Umstellung auf https; kleine Korrekturen
  142. // @version 1.25.13 noch einen Fehler beim Posten eines laufenden Kampfs behoben
  143. // @version 1.25.12 Fehler beim Posten eines laufenden Kampfs behoben
  144. // @version 1.25.11 Darstellung der Punktehistorie verbessert
  145. // @version 1.25.10 Einbau einer Watchlist
  146. // @version 1.25.9 Problem mit Glühwürmchen in Highscore behoben; KW mit richtigem Dezimaltrennzeichen
  147. // @version 1.25.8 Korrekturen beim Sichern von Kampflisten
  148. // @version 1.25.7 Kampfwert melden; mehrere Kampflisten; Bonus im Vatikan beachten
  149. // @version 1.25.6 Fehler bei Fightlog mit Bandenfilter behoben; Fehlermeldung, wenn downfight-Seite nicht erreichbar
  150. // @version 1.25.5 Aufbau der Kampfstatistiken beschleunigt
  151. // @version 1.25.4 Erweiterungen für Athen; Fehler in Angreiferliste behoben
  152. // @version 1.25.3 Seite zum Suchen von Angreifern hinzugefügt
  153. // @version 1.25.2 Name beim Posten von Kämpfen war fehlerhaft
  154. // @version 1.25.1 Anpassungen an das neue Profil-Design
  155. // @version 1.23.7 Fehlerhaft Anzeige bei Pennern mit Glühwürmchen behoben
  156. // @version 1.23.6 Bildadressen korrigiert
  157. // @version 1.23.5 Fehler in Update-Verfahren behoben
  158. // @version 1.23.4 Downfight-Werte für Vatikan gesetzt
  159. // @version 1.23.3 noch einmal: Probleme auf Kampfseite behoben
  160. // @version 1.23.2 Probleme auf Kampfseite behoben
  161. // @version 1.23.1 erste Version für Vatikan
  162. // @version 1.22.10 Bilderhoster getauscht; Fehler bei Profil behoben
  163. // @version 1.22.9 Aktuellen Platz in Highscore anzeigen
  164. // @version 1.22.8 Korrektur: Downfighter etc. wurden nicht mehr angezeigt
  165. // @version 1.22.7 Zeitkorrektur Malle; Problem mit Gästebuch auf Bandenprofil behoben
  166. // @version 1.22.6 Skript lief in München nicht mehr
  167. // @version 1.22.5 Posten in Banden-SBs auch bei Fightlog über mehrere Seiten
  168. // @version 1.22.4 Bandenbox verschoben; Posten in Banden-SBs an weiteren Stellen eingebaut
  169. // @version 1.22.3 Posten von Kämpfen in die SBs verbündeter Banden
  170. // @version 1.22.2 Problem mit Gästebuch behoben
  171. // @version 1.22.1 Wechsel auf greasyfork.org; Fehler bei Kampflog behoben
  172. // @version 1.21.2 Probleme beim Posten von Kämpfen behoben
  173. // @version 1.21.1 Bilder umgezogen
  174. // @version 1.20.1 Anpassungen wegen Pennerzepter
  175. // @version 1.19.17 Anpassungen wegen Pennerzepter
  176. // @version 1.19.16 Warnanzeige bei Gegnern mit negativer Kampfbilanz
  177. // @version 1.19.15 Problem bei Darstellung in Chrome behoben
  178. // @version 1.19.14 Posten von Kämpfen funktionierte nicht mehr richtig
  179. // @version 1.19.13 History-Variable war nicht angelegt; History wurde nicht immer angezeigt
  180. // @version 1.19.12 Erweiterung auf andere Städte (Highscoreseiten); Anzeige Wartezeit bis zum nächsten Angriff; diverse Korrekturen
  181. // @version 1.19.11 Korrektur: Posten von ausgehenden Angriffen in die SB funktionierte nicht mehr; Fehler in Kampfanzeige und Bandenprofil behoben
  182. // @version 1.19.10 Banden in/aus Kampfliste; Punktehistorie; Buttons für Penner in/aus Kampfliste
  183. // @version 1.19.9 Downfight-Liste, Profilseite und Log mehrerer Seiten korrigiert
  184. // @version 1.19.8 Anpassungen wegen geänderter Profilseite
  185. // @version 1.19.7 Anpassungen wegen Premium-Krone
  186. // @version 1.19.6 Testausgaben entfernt
  187. // @version 1.19.5 Fightlog mit voller erster Seite
  188. // @version 1.19.4 Skript fehlerhaft bei ausgehenden Angriffen
  189. // @version 1.19.3 Sprachauswahl repariert; Fightlog sortiert
  190. // @version 1.19.2 Skript lief wieder nicht mehr
  191. // @version 1.19.1 Skriptreparatur nach Totalausfall
  192. // @version 1.18.1 Bilder auf anderen Hoster verschoben
  193. // @version 1.17.4 Bilderadresse angepasst, da Bilder nicht angezeigt wurden
  194. // @version 1.17.3 Anpassung an geänderte Downfight-Seite
  195. // @version 1.17.2 Pennerzone abgeschaltet; Downfighter in Sylt korrigiert; Fehler bei Kampfstatistik und Kommentaren behoben;
  196. // @version 1.17.1 Version für Firefox 17; Posts von Kämpfen in die SB erweitert
  197. // @version 1.16.1 Erste Version Sylt
  198. // @version 1.15.4 Skriptabsturz bei Angriff durch Inkognito-Penner beseitigt
  199. // @version 1.15.3 Cheater wurden nicht mehr korrekt angezeigt
  200. // @version 1.15.2 Diverse Korrekturen wegen geändertem Fightlog
  201. // @version 1.15.1 Anpassung an Spiel Stadtfeind Nr. 1
  202. // @version 1.14.9 noch eine Korrektur wegen nicht blinkender Downfighter
  203. // @version 1.14.8 Downfighter wurden nicht mehr markiert
  204. // @version 1.14.7 Downfighter wurde nicht mehr angezeigt; weitere Korrekturn wegen erweitertem Fightlog
  205. // @version 1.14.6 Entfernte Bande in erweitertem Fightlog wieder hinzugefügt
  206. // @version 1.14.5 Fehler auf Angriffsseite und Bandenseite wegen Penner Ahoi! behoben
  207. // @version 1.14.4 Keine Funktion wegen fehlender Klammer
  208. // @version 1.14.3 weitere Anpassungen wegen Penner Ahoi!
  209. // @version 1.14.2 Name des Penners wurde falsch ermittelt
  210. // @version 1.14.1 Anpassungen für Penner Ahoi!
  211. // @version 1.9.4 Zusatzinfos bei TPP-Highscore
  212. // @version 1.9.3 Fehler beim Posten von Kämpfen behoben
  213. // @version 1.9.2 Fehler bei Kampfstatistik behoben
  214. // @version 1.9.1 Anpassung an neue Kampfseite
  215. // @version 1.8.21 Kampfkommentare werden wieder angezeigt; Kampflog zeigt wieder mehrere Seiten an
  216. // @version 1.8.20 Zeitabstand zum letzten Kampf fehlerhaft wegen Jahr
  217. // @version 1.8.19 nochmal Korrektur Kampfstatistik
  218. // @version 1.8.18 kleine Korrekturen
  219. // @version 1.8.17 Shoutboxverbreiterung entfernt wegen Bandenkampfstatistik
  220. // @version 1.8.16 Shoutbox verbreitert; Einfärben in Shoutbox: Fehler korrigiert, erweitert
  221. // @version 1.8.15 Angriffsgrenzen für Operation Pennersturm angepasst; Einfärben von Pennern in der Shoutbox (1. Versuch)
  222. // @version 1.8.14 Downfight-Listen für Pennersturm; Like-Button abschaltbar
  223. // @version 1.8.13 kleine Fehler behoben; Like-Button
  224. // @version 1.8.12 kleine Fehler behoben; 1. Anpassung Pennersturm
  225. // @version 1.8.11 Highscore-Regel korrigiert
  226. // @version 1.8.10 Fehler beim Posten von Kämpfen in SB behoben
  227. // @version 1.8.9 Fehler bei Direktangriff in DF-Listen behoben; 5-Platz-Regel eingebaut
  228. // @version 1.8.8 Fehler korrigiert: Post von eingehenden Kämpfen
  229. // @version 1.8.7 Fehler auf Profilseite behoben; bei Angriffen Bande in SB posten
  230. // @version 1.8.6 Downfight-Seiten funktionieren wieder
  231. // @version 1.8.5 kleinere Fehler behoben; Erweiterung auf Highscore-Seiten
  232. // @version 1.8.4 Downfightermarkierung optional; keine Markierung auf Downfightliste
  233. // @version 1.8.3 kleine Korrekturen; Downfighteranzeige; Zusammenarbeit mit Bandenprofil deLuxe verbessert
  234. // @version 1.8.2 farbliche Markierung der Angreifer in weiteren Listen; erklärende Texte als Tooltip
  235. // @version 1.8.1 Version läuft unter Chrome; farbliche Markierung der Angreifer
  236. // @version 1.7.5 Bandenprofil repariert; Kampfstatistiken beschleunigt
  237. // @version 1.7.4 Wut wurde nicht mehr erkannt; Downfighter und Hochfighter wurden nicht mehr angezeigt
  238. // @version 1.7.3 kleinere Korrekturen; Umstellung auf Moskau
  239. // @version 1.7.2 Problem mit Bandenseite behoben
  240. // @version 1.7.1 Version 1 nach dem neuen PG-Patch
  241. // @version 1.6.10 Downfightlisten: kleine Korrekturen
  242. // @version 1.6.9 Downfighter und Hochfighter: kleiner Fehler behoben
  243. // @version 1.6.8 Downfighter und Hochfighter eingebaut
  244. // @version 1.6.7 Listen verbreitert
  245. // @version 1.6.6 Listen wahlweise auf der Fight-Seite
  246. // @version 1.6.5 Anzeige auf Pennerzone wieder zum Laufen gebracht; Listen auf der Fight-Seite ausgelagert
  247. // @version 1.6.4 Skript lief nicht mehr
  248. // @version 1.6.3 Variablen vereinheitlicht; Grafiken aufgeteilt; DF-Listen wieder zum Laufen gebracht
  249. // @version 1.6.2 Grafikadressen korrigiert
  250. // @version 1.6.1 Adressen für Brasilien angepasst; Bilder auf anderen Hoster verlegt
  251. // @version 1.5.13 weitere reloaded-Versionen hinzugefügt
  252. // @version 1.5.12 Probleme beim Posten durch den Glühwürmchen-Plunder behoben
  253. // @version 1.5.11 Probleme durch den Glühwürmchen-Plunder behoben
  254. // @version 1.5.10 Anpassungen für Hamburg reloaded
  255. // @version 1.5.9 DF-Listen funktionieren wieder; Angriffspause in Köln nur 24 Stunden
  256. // @version 1.5.8 Probleme mit DEF-Booster behoben
  257. // @version 1.5.7 Profilseite korrigiert, Skript geht wieder unter FF4
  258. // @version 1.5.6 kleine Korrektur auf der Let's fight Seite
  259. // @version 1.5.5 läuft jetzt auch in Köln
  260. // @version 1.5.4 Legionärsliste funktioniert wieder
  261. // @version 1.5.3 Update-Verfahren verbessert
  262. // @version 1.5.2 Anpassungen für London; neues Update-Verfahren
  263. // @version 1.5.1 Korrektur der russischen Übersetzung (nochmals vielen Dank an dron122007)
  264. // @version 1.5.0 Sprachumschaltung; Übersetzung ins Russische (Vielen Dank an dron122007)
  265. // @version 1.4.8 Anpassungen für St. Petersburg
  266. // @version 1.4.7 Geld in Kampfliste anzeigen; läuft auch in Buenos Aires
  267. // @version 1.4.6 Jahreswechselproblem bei Kampfliste behoben
  268. // @version 1.4.5 Headhunterliste eingebaut; französische Texte; Kampfliste abschaltbar
  269. // @version 1.4.4 Skript funktionierte nicht richtig, wenn man nicht in einer Bande war; DF-Listen vereinheitlicht
  270. // @version 1.4.3 Es wurden nicht alle markierten Einträge gepostet bzw. in die Kampfliste aufgenommen
  271. // @version 1.4.2 Fehler in neuer Kampfliste behoben
  272. // @version 1.4.1 neue Kampfliste
  273. // @version 1.3.38 Anzeige der Legionäre von downfight.de funktionierte nicht mehr, da Seite geändert
  274. // @version 1.3.37 Anzeige der Legionäre von downfight.de
  275. // @version 1.3.36 Nach Löschen eines Kampfkommentars wurde falsches Symbol angezeigt
  276. // @version 1.3.35 Kampfkommentare wurden nur in Hamburg und Berlin angezeigt
  277. // @version 1.3.34 Kampfkommentare wurden nicht mehr angezeigt
  278. // @version 1.3.33 Faker-Diagramme: Stadt wird berücksichtigt; Anzahl Tage ist vorgebbar
  279. // @version 1.3.32 Kampfwert wird gerundet beim Posten
  280. // @version 1.3.31 Filtern des Kampflogs nach Banden
  281. // @version 1.3.30 kleine Korrekturen; Länge des BBCode anzeigen; Cheaterliste von Halloween anzeigen
  282. // @version 1.3.29 Post eines Angriffs funktionierte nicht mehr; Loserliste wurde manchmal nicht bis zu Ende bearbeitet
  283. // @version 1.3.28 Kampfwert posten bei Wut fehlerhaft; Button für BBCode eingefügt
  284. // @version 1.3.27 Kampfwert posten; Posten ab 2. Fightlogseite ging nicht mehr
  285. // @version 1.3.26 Probleme mit anderen Skripts behoben
  286. // @version 1.3.25 Erweiterungen für Halloween hinzugefügt
  287. // @version 1.3.24 Angriffs-Icon auf Bandenprofil nur, wenn nicht ein anderes Skript bereits Spalten einfügt
  288. // @version 1.3.23 Posten der Kampfwerte auch aus Kampfübersichten möglich
  289. // @version 1.3.22 Verliererliste repariert; beim Posten von beendeten Kämpfen können die Kampfwerte mit gepostet werden
  290. // @version 1.3.21 Angriffs-Icon aus Cheaterliste wieder entfernt, da es bereits rechts drin ist
  291. // @version 1.3.20 Angriffs-Icon in den Listen hinzugefügt
  292. // @version 1.3.19 nochmal Korrektur für Malle: Kampfliste unvollständig, wenn nicht in Bande
  293. // @version 1.3.18 Cheaterliste für Malle hinzugefügt
  294. // @version 1.3.17 Probleme beim Posten in SB ohne Bande behoben; Fehler bei Kampfstatistik behoben
  295. // @version 1.3.16 Fehler beim Posten aus dem Fightlog in die SB behoben
  296. // @version 1.3.15 Fehler beim Posten der eintreffenden Kämpfe in die SB behoben
  297. // @version 1.3.14 Posten in die SB in NY korrigiert; Ankreuzspalte nach links verschoben; kleinere Korrekturen
  298. // @version 1.3.13 Anpassungen für Malle
  299. // @version 1.3.12 nochmals Änderung wegen pennerzone
  300. // @version 1.3.11 Problem mit Skriptversion behoben
  301. // @version 1.3.10 Skript an Änderungen bei pennerzone angepasst; Kommentar eingebbar beim Posten von Kämpfen in die SB
  302. // @version 1.3.9 noch einen kleinen Fehler behoben: Fightlog-Suchseite funktionierte nicht mehr
  303. // @version 1.3.8 noch einen kleinen Fehler behoben: Infos bei eintreffenden Kämpfen
  304. // @version 1.3.7 kleine Fehler behoben; Skript für Madrid und Rio de Janeiro angepasst; Post in SB nur, wenn in Bande
  305. // @version 1.3.6 Skript für New York, Paris, Marseille, Warschau und Krakau angepasst
  306. // @version 1.3.5 zusätzliche Icons und Infos im Bandenprofil
  307. // @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 !!
  308. // @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)
  309. // @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.
  310. // @version 1.3.1 Cheaterliste wieder zum Laufen gebracht
  311. // @version 1.2.8 Fehler Darstellung Cheaterliste korrigiert; Cheaterliste MU eingebaut
  312. // @version 1.2.7 Fehler Darstellung pennerzone.de in HH korrigiert
  313. // @version 1.2.6 Fehler SB-Posten korrigiert
  314. // @version 1.2.5 Anpassungen für München
  315. // @version 1.2.4 tinypic.com scheint ein Problem zu haben, Grafikhoster gewechselt; Handling von Userprofilen, die über Username statt ID aufgerufen werden, aktiviert
  316. // @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)
  317. // @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
  318. // @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)
  319. // @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
  320. // @version 1.1.2 Posten von einkommenden Kämpfen in die SB; Layout straffer
  321. // @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
  322. // @version 1.1.0 Möglichkeit, zu jedem Kampf einen Kommentar zu speichern; Kampf-Posten in die SB; Abruf mehrerer Seiten im Fightlog
  323. // @version 1.0.1 Anpassung Suchstring pennerzone + besserer Updatemechanismus
  324. // @version 1.0.0
  325. // @version $Id: fightinfo.user.js 204 2020-03-22 20:30:44Z mkl $
  326.  
  327. // PG-Version ermitteln
  328. var oldVersion=m=1;
  329. if (oldV())
  330. oldVersion = 0;
  331. var fight = "";
  332. var fightinfo = "";
  333. var DB_URL = "";
  334. var imagehoster = "012";
  335. var NrOfCalls = GM_getValue("NrOfCalls", 0) % 10000000000 + 1;
  336. GM_setValue("NrOfCalls", NrOfCalls);
  337. //GM_setValue("expertMode", 1);
  338. var expertMode = GM_getValue("expertMode", 0);
  339.  
  340. // Basis-URL für Kampficons
  341. var FIGHTICONS_URL = "/img/pv4/dots/"
  342.  
  343. var DOWNFIGHTDE_DOWNFIGHTPAGE_URL = "http://www.downfight.de/?seite=downfight";
  344. var DOWNFIGHTDE_HOCHFIGHTPAGE_URL = "http://www.downfight.de/?seite=hochfight";
  345. var DOWNFIGHTDE_CHEATERPAGE_URL = "http://www.downfight.de/?seite=listebetrueger";
  346. var DOWNFIGHTDE_LEGIONPAGE_URL = "http://www.downfight.de/?seite=toplegionaerelight";
  347. var DOWNFIGHTDE_ARMEEPAGE_URL = "http://www.downfight.de/?seite=listesoldaten";
  348.  
  349. // URLs Warn-Icon
  350. var ICON_WARNING = 'warning.gif';
  351.  
  352. // URLs für Icons
  353. var imgPrefix = ['https://picr.eu/images/', 'https://s19.directupload.net/images/user/200322/', 'https://icons.joomla100.com/pg/'];
  354. var ICON_ATTACK = 'HX26.png#cdvll3ig.png#attack.png'; // Icon für Angriff (attack.png)
  355. var ICON_INFO = 'MQ7k.png#hk2hxaa8.png#info.png'; // Icon für Info (info.png)
  356. var ICON_LASTFIGHT_NOCOMMENT = 'MCHF.gif#ku575mbb.gif#buchgrn.gif'; // Icon für letzte Kämpfe (noch kein Kampf) ohne Kommentar (buchgrn.gif)
  357. var ICON_LASTFIGHT_COMMENT = 'Hu5Z.gif#66j4zf6t.gif#buchorange.gif'; // Icon für letzte Kämpfe (noch kein Kampf) mit Kommentar (buchorange.gif)
  358. var ICON_LASTFIGHT_WARNING = 'HV30.gif#zlwgml8o.gif#buchrot.gif'; // Icon für letzte Kämpfe (noch kein Kampf) mit Warnung (buchrot.gif)
  359. var ICON_LASTFIGHT_NONE = 'HUKa.gif#4amuqcwh.gif#buchschw.gif'; // Icon für letzte Kämpfe selbst (buchschw.gif)
  360. 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)
  361. 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)
  362. 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)
  363.  
  364. var ICON_PENNERZONE_MONEY = 'MHF4.gif#usxhyqr2.gif#dollar.gif'; // Icon für Pennerzone-Suche ohne Punktebeschränkung (dollar.gif)
  365. var ICON_PENNERZONE_UP = 'MWAT.gif#dbj6r9t5.gif#pennerzoneup.gif'; // Icon für Pennerzone-Suche am oberen Punktespektrum (pennerzoneup.gif)
  366. var ICON_PENNERZONE_DOWN = 'MMCE.gif#ztwy82kt.gif#pennerzonedown.gif'; // Icon für Pennerzone-Suche am unteren Punktespektrum (pennerzonedown.gif)
  367. var ICON_PENNERZONE_DATE = 'M1Nu.gif#9t3afs8d.gif#pennerzone_date.gif'; // Icon für Pennerzone-Suche Festlegung von Start-Registrierungsdatum (pennerzone_date.gif)
  368.  
  369. var ICON_FIGHTCOMMENT = 'H6l3.gif#yzgj7j3h.gif#notizgelb.gif'; // (notizgelb.gif)
  370. var ICON_NOFIGHTCOMMENT = 'HwOp.gif#iqipkgxf.gif#notizgrau.gif'; // (notizgrau.gif)
  371. var ICON_SENDTOSB = 'MiQl.gif#psmxfsf9.gif#envelope.gif'; // (envelope.gif)
  372. var ICON_ADDTOFT = 'Hj19.gif#ufy5hqlt.gif#grnadd.gif'; // Icon für Hinzufügen zur Kampftabelle (grnadd.gif)
  373. var ICON_DELFROMFT = 'HP52.png#l4dsz9pf.png#userdel.png'; // Icon für Entfernen aus Kampftabelle (userdel.png)
  374. var ICON_CHEATERDIA_NORMAL = 'Mk9I.png#e9d2zxdu.png#diagramm.png'; // (diagramm.png)
  375. var ICON_CHEATERDIA_DOUBLE = 'MqX2.gif#5drei4x8.gif#diagramm.gif'; // (diagramm.gif)
  376. var ICON_DIRECTATTACK = 'MDOJ.gif#cd3cbov7.gif#direktangriff.gif'; // Icon für Direktangriffslink (direktangriff.gif)
  377. var ICON_NEW = 'MF7L.png#mkec8di7.png#new.png'; // Icon für "NEU" (new.png)
  378.  
  379. // Konstanten für die verschiedenen Modi des Postens in die SB
  380. var SBPOSTMODE_ACTIVE = 0;
  381. var SBPOSTMODE_DONE = 1;
  382. var SBPOSTMODE_INCOMING = 2;
  383.  
  384. // Ersatz-Icons für die PG Kampfergebnis-Icons
  385. var ICON_0_0 = 'HmK4.gif#hfrgtjiz.gif#0_0kopie.gif'; // (0_0kopie.gif)
  386. var ICON_0_1 = 'HZtu.gif#wbzpo6ps.gif#0_1kopie.gif'; // (0_1kopie.gif)
  387. var ICON_1_0 = 'HrDe.gif#vvdt9w4c.gif#1_0kopie.gif'; // (1_0kopie.gif)
  388. var ICON_1_1 = 'HLrT.gif#yrc9ypnd.gif#1_1kopie.gif'; // (1_1kopie.gif)
  389. var ICON_2_0 = 'Hc6F.gif#2qfbf62a.gif#2_0kopie.gif'; // (2_0kopie.gif)
  390. var ICON_2_1 = 'HE0J.gif#n3aebplm.gif#2_1kopie.gif'; // (2_1kopie.gif)
  391. var ICON_EVADE = 'HTzL.gif#73yp9jne.gif#evadekopie.gif'; // (evadekopie.gif)
  392.  
  393. // Landesflaggen
  394. var flags = [];
  395. flags[0] = 'M4XZ.png#wqeyh6xs.png#germany.png'; // (germany.png)
  396. flags[1] = 'MzHS.png#6ch45t4a.png#United_States.png'; // (United_States.png)
  397. flags[2] = 'M9e0.png#qqdwhhqh.png#poland.png'; // (poland.png)
  398. flags[3] = 'MgYW.png#54lef2wc.png#france.png'; // (france.png)
  399. flags[4] = 'MRoY.png#zk7jfqr3.png#spain.png'; // (spain.png)
  400. flags[5] = 'Ms96.png#zxksa5t8.png#brazil.png'; // (brazil.png)
  401. flags[6] = 'MyFa.png#spyltdfw.png#russia.png'; // (russia.png)
  402. flags[7] = 'MIcV.png#5vqz9is9.png#united_kingdom.png'; // (united_kingdom.png)
  403.  
  404. // ***********************************************************************************************
  405. // Stadt ermitteln und Variablen entsprechend setzen
  406. // ***********************************************************************************************
  407. var TZ = [];
  408. TZ[0] = ".";
  409. TZ[1] = ",";
  410. TZ[2] = ".";
  411. TZ[3] = ".";
  412. TZ[4] = ".";
  413. TZ[5] = ".";
  414. TZ[6] = ".";
  415. TZ[7] = ",";
  416.  
  417. var DZ = []; // Dezimal-Trennzeichen
  418. DZ[0] = ',';
  419. DZ[1] = '.';
  420. DZ[2] = ',';
  421. DZ[3] = ',';
  422. DZ[4] = ',';
  423. DZ[5] = ',';
  424. DZ[6] = ',';
  425. DZ[7] = '.';
  426. var DS = []; // Datums-Trennzeichen
  427. DS[0] = '.';
  428. DS[1] = '/';
  429. DS[2] = '.';
  430. DS[3] = '.';
  431. DS[4] = '.';
  432. DS[5] = '.';
  433. DS[6] = '.';
  434. DS[7] = '.';
  435. if (location.toString().indexOf("hamburg.pennerzone.de") != -1) {
  436. var language = "de_DE";
  437. var TOWNBASE_URL = "http://www.pennergame.de/";
  438. }
  439. else if (location.toString().indexOf("berlin.pennerzone.de") != -1) {
  440. var language = "bl_DE";
  441. var TOWNBASE_URL = "http://berlin.pennergame.de/";
  442. }
  443. else {
  444. var language = document.getElementsByName("language")[0].content;
  445. var metas = document.getElementsByTagName("meta");
  446. for (i = 0; i< metas.length; i++)
  447. if (metas[i].getAttribute('property') == "og:url") {
  448. var TOWNBASE_URL = metas[i].content + "/";
  449. break;
  450. }
  451. }
  452. var attvalue = defvalue = fgtvalue = 0;
  453. var FightVals = [];
  454. var townname = '';
  455. var ZONEBASE_URL = '';
  456. var DFTownCode = '';
  457. var DFTownCode2 = '';
  458. var DFTownCode3 = '';
  459. var lang = 0;
  460. var TOWNEXTENSION = '';
  461. var fightPause = 36; // Pause zwischen zwei Angriffen
  462. var currency = "€"; // Euro-Zeichen
  463. var currency1 = "";
  464. var upperLimit = 1.5;
  465. var lowerLimit = 0.8;
  466. var showHistory = GM_getValue("ShowHistory", -1) * 2;
  467. if (showHistory < 0) {
  468. showHistory = 20;
  469. GM_setValue("ShowHistory", 10);
  470. }
  471.  
  472. if (!String.prototype.insert)
  473. String.prototype.insert = function(idx, str) {
  474. return this.substr(0, (idx<0?this.length:0) + idx) + str + this.substr(idx);
  475. };
  476.  
  477. // Wenn in Berlin gespielt wird
  478. if (language == 'bl_DE') {
  479. townname = "Berlin";
  480. // ZONEBASE_URL = 'http://berlin.pennerzone.de/';
  481. TOWNEXTENSION = 'B';
  482. DFTownCode = "B";
  483. DFTownCode2 = language;
  484. DFTownCode3 = "berlin";
  485. // Wenn in München gespielt wird
  486. } else if (language == 'mu_DE') {
  487. townname = "München";
  488. TOWNEXTENSION = 'MU';
  489. DFTownCode = "M";
  490. DFTownCode2 = language;
  491. DFTownCode3 = "muenchen";
  492. // Wenn in Köln gespielt wird
  493. } else if (language == 'kl_DE') {
  494. townname = "Köln";
  495. TOWNEXTENSION = 'K';
  496. DFTownCode = "K";
  497. DFTownCode2 = language;
  498. DFTownCode3 = "koeln";
  499. fightPause = 24; // Pause zwischen zwei Angriffen
  500. // Wenn in Sylt gespielt wird
  501. } else if (language == 'sy_DE') {
  502. townname = "Sylt";
  503. TOWNEXTENSION = 'SY';
  504. DFTownCode = "SY";
  505. DFTownCode2 = language;
  506. DFTownCode3 = "sylt";
  507. // Wenn in Malle gespielt wird
  508. } else if (language == 'ml_DE') {
  509. townname = "Malle";
  510. TOWNEXTENSION = 'PM';
  511. DFTownCode = "SM";
  512. DFTownCode2 = "s1_DE";
  513. DFTownCode3 = "malle";
  514. fightPause = 18; // Pause zwischen zwei Angriffen
  515. // Wenn im Vatikan gespielt wird
  516. } else if (language == 'vt_DE') {
  517. townname = "Vatikan";
  518. TOWNEXTENSION = 'VT';
  519. DFTownCode = "VT";
  520. DFTownCode2 = language;
  521. DFTownCode3 = "vatikan";
  522. // Wenn in Halloween gespielt wird
  523. } else if (location.toString().indexOf("halloween") != -1) {
  524. townname = "Hölloween";
  525. TOWNEXTENSION = 'HW';
  526. DFTownCode = "Grr";
  527. fightPause = 12; // Pause zwischen zwei Angriffen
  528. // Wenn in Pennersturm gespielt wird
  529. } else if (language == 's6_DE') {
  530. townname = "Pennersturm";
  531. TOWNEXTENSION = 'OP';
  532. DFTownCode = "SPE";
  533. DFTownCode3 = "pennersturm";
  534. fightPause = 12; // Pause zwischen zwei Angriffen
  535. upperLimit = 2.5;
  536. lowerLimit = 0.7;
  537. // Wenn in Athen gespielt wird
  538. } else if (language == 's7_DE') {
  539. townname = "Athen";
  540. TOWNEXTENSION = 'ATH';
  541. fightPause = 12; // Pause zwischen zwei Angriffen
  542. upperLimit = 2.5;
  543. lowerLimit = 0.7;
  544. // Wenn in Atlantis gespielt wird
  545. } else if (language == 'at_DE') {
  546. townname = "Atlantis";
  547. TOWNEXTENSION = 'AT';
  548. DFTownCode = "AT";
  549. DFTownCode2 = language;
  550. DFTownCode3 = "atlantis";
  551. // Wenn in Hamburg gespielt wird
  552. } else if (language == 'de_DE') {
  553. townname = "Hamburg";
  554. // ZONEBASE_URL = 'http://hamburg.pennerzone.de/';
  555. TOWNEXTENSION = 'HH';
  556. DFTownCode = "HH";
  557. DFTownCode2 = language;
  558. DFTownCode3 = "hamburg";
  559. } else if (language == 'hr_DE') {
  560. townname = "Hamburg reloaded";
  561. TOWNEXTENSION = 'HR';
  562. DFTownCode = "H2";
  563. DFTownCode2 = language;
  564. DFTownCode3 = "reloaded";
  565. // Wenn in New York gespielt wird
  566. } else if (language == 'us_EN') {
  567. TOWNEXTENSION = 'NY';
  568. lang = 1;
  569. currency = '$';
  570. // Wenn in Krakau gespielt wird
  571. } else if (language == "kr_PL") {
  572. TOWNEXTENSION = 'KR';
  573. lang = 2;
  574. currency = 'zl';
  575. // Wenn in Warschau gespielt wird
  576. } else if (language == "pl_PL" || language == "wr_PL") {
  577. if (language == 'pl_PL')
  578. TOWNEXTENSION = 'WA';
  579. else {
  580. TOWNEXTENSION = 'WR';
  581. }
  582. lang = 2;
  583. currency = 'zl';
  584. // Wenn in Marseille gespielt wird
  585. } else if (language == "ma_FR") {
  586. TOWNEXTENSION = 'MS';
  587. lang = 3;
  588. // Wenn in Paris gespielt wird
  589. } else if (language == "fr_FR" || language == "cr_FR") {
  590. if (language == 'fr_FR')
  591. TOWNEXTENSION = 'PA';
  592. else {
  593. TOWNEXTENSION = 'PR';
  594. }
  595. lang = 3;
  596. // Wenn in Buenos Aires gespielt wird
  597. } else if (language == "ba_ES") {
  598. TOWNEXTENSION = 'BA';
  599. lang = 4;
  600. currency = '$';
  601. // Wenn in Madrid gespielt wird
  602. } else if (language == "es_ES" || language == "er_ES") {
  603. if (language == 'es_ES')
  604. TOWNEXTENSION = 'MD';
  605. else {
  606. TOWNEXTENSION = 'MR';
  607. }
  608. lang = 4;
  609. // Wenn in Sao Paolo gespielt wird
  610. } else if (language == "sp_BR") {
  611. TOWNEXTENSION = 'SP';
  612. lang = 5;
  613. // Wenn in Rio de Janeiro gespielt wird
  614. } else if (language == "pt_BR") {
  615. TOWNEXTENSION = 'RJ';
  616. lang = 5;
  617. // Wenn in Moskau gespielt wird
  618. } else if (language == "ru_RU") {
  619. TOWNEXTENSION = 'MO';
  620. lang = 6;
  621. currency1 = ' руб. ';
  622. currency2 = ' коп.';
  623. // Wenn in London gespielt wird
  624. } else if (language == "en_EN") {
  625. TOWNEXTENSION = 'LO';
  626. lang = 7;
  627. currency = '£';
  628. }
  629.  
  630. var TXLEN = TOWNEXTENSION.length;
  631. var keys = GM_listValues();
  632. for (var i = 0; i < keys.length; i++) {
  633. var val = keys[i];
  634. if (val.substr(0,9) == "undefined" || val.substr(val.length-9) == "undefined" ||
  635. (val.indexOf("LastUpdateCheck") != -1 && val != "LastUpdateCheckGF") ||
  636. val.indexOf("ShowFightlist") != -1 || val.indexOf("ShowCheaterlist") != -1 ||
  637. val.indexOf("ShowArmeelist") != -1 ||val.indexOf("ShowLegionlist") != -1)
  638. GM_deleteValue(val);
  639. else if (TXLEN > 0 && val.substr(val.length-TXLEN) == TOWNEXTENSION) {
  640. var v = GM_getValue(TOWNEXTENSION+val.substr(0, val.length-TXLEN), "deadmeat");
  641. if (v == "deadmeat")
  642. PG_setValue(val.substr(0, val.length-TXLEN), GM_getValue(val));
  643. GM_deleteValue(val);
  644. }
  645. else if (val.substr(0, TXLEN + 9) == TOWNEXTENSION + "FightStat") {
  646. var v = GM_getValue(val, "/");
  647. if (v == "" || typeof(v) != "string" || v.substr(0, 1) == "/")
  648. GM_deleteValue(val);
  649. }
  650. }
  651.  
  652. var myLang = PG_getValue("myLang", lang); // Sprache laden
  653. PG_setValue("myLang", myLang); // Sprache speichern
  654. var tpos=TOWNBASE_URL.indexOf('//');
  655. if (tpos == -1)
  656. var TOWN_URL = TOWNBASE_URL;
  657. else
  658. var TOWN_URL = TOWNBASE_URL.substr(tpos+2)
  659.  
  660. var API_URL = TOWNBASE_URL + 'dev/api/user.';
  661. var SBADD_URL = TOWNBASE_URL + 'gang/chat/add/';
  662. var PROFILE_URL = TOWNBASE_URL + 'profil/id:';
  663. //var PROFILEUSER_URL = TOWNBASE_URL + 'profil/';
  664. var GANG_URL = TOWNBASE_URL + 'gang/';
  665. var GANGPROF_URL = TOWNBASE_URL + 'profil/bande:'
  666. var GANGUPGRADE_URL = TOWNBASE_URL + 'gang/upgrades/';
  667. var FIGHT_URL = TOWNBASE_URL + 'fight/';
  668. var FIGHTTO_URL = TOWNBASE_URL + 'fight/?to=';
  669. var FIGHTLOG_URL = TOWNBASE_URL + 'fight/fightlog/';
  670. var FIGHTSEARCH_URL = TOWNBASE_URL + 'fight/fightlog/?q=';
  671. //var USERNAMEXML_URL = TOWNBASE_URL + 'dev/api/user.getname.xml?name=';
  672.  
  673. var PENNERZONEUSER_URL = ZONEBASE_URL + 'highscore/u';
  674. var PENNERZONESEARCH_URL1 = ZONEBASE_URL + 'highscore/?page=1&points_min=';
  675.  
  676. var PENNERZONESEARCH_URL2 = '&points_max=';
  677. var PENNERZONESEARCH_URL3 = '&gang=egal&action=Suchen.&city=0&name_type=contains&name_text=&sDay=';
  678. var PENNERZONESEARCH_URL4 = '&sMonth=';
  679. var PENNERZONESEARCH_URL5 = '&sYear=';
  680. var PENNERZONESEARCH_URL6 = '&eDay=&eMonth=&eYear=';
  681.  
  682. // Ingame-Texte
  683. var TxtAktion = [];
  684. TxtAktion[0] = "Aktionen";
  685. TxtAktion[1] = "Action";
  686. TxtAktion[2] = "Akcje";
  687. TxtAktion[3] = "Actions";
  688. TxtAktion[4] = "Acciones";
  689. TxtAktion[5] = "Ações";
  690. TxtAktion[6] = "Действия";
  691. TxtAktion[7] = "Activities";
  692.  
  693. var TxtPlatz = [];
  694. TxtPlatz[0] = "Platzierung";
  695. TxtPlatz[1] = "Place";
  696. TxtPlatz[2] = "Pozycja";
  697. TxtPlatz[3] = "Placement";
  698. TxtPlatz[4] = "Posición";
  699. TxtPlatz[5] = "Classificação";
  700. TxtPlatz[6] = "Место";
  701. TxtPlatz[7] = "Ranking";
  702.  
  703. var TxtPunkte = [];
  704. TxtPunkte[0] = "Punkte";
  705. TxtPunkte[1] = "Points";
  706. TxtPunkte[2] = "Punktów";
  707. TxtPunkte[3] = "Points";
  708. TxtPunkte[4] = "Puntos";
  709. TxtPunkte[5] = "Pontos";
  710. TxtPunkte[6] = "очк.";
  711. TxtPunkte[7] = "Points";
  712.  
  713. var TxtSeite = [];
  714. TxtSeite[0] = "Seite";
  715. TxtSeite[1] = "Page";
  716. TxtSeite[2] = "strona";
  717. TxtSeite[3] = "Page";
  718. TxtSeite[4] = "Página";
  719. TxtSeite[5] = "Página";
  720. TxtSeite[6] = "Страница";
  721. TxtSeite[7] = "Page";
  722.  
  723. var TxtIncFights = [];
  724. TxtIncFights[0] = "Eintreffende Kämpfe";
  725. TxtIncFights[1] = "Incoming fights";
  726. TxtIncFights[2] = "Rozpoczęte walki";
  727. TxtIncFights[3] = "Baston innatendue";
  728. TxtIncFights[4] = "Luchas entrantes";
  729. TxtIncFights[5] = "Lutas entrando";
  730. TxtIncFights[6] = "Поступающие разборкиe";
  731. TxtIncFights[7] = "Incoming fight";
  732.  
  733. var TxtRunAttack = [];
  734. TxtRunAttack[0] = "Angriff läuft bereits auf";
  735. TxtRunAttack[1] = "Already accumulated attacks";
  736. TxtRunAttack[2] = "Atak już trwa";
  737. TxtRunAttack[3] = "Attaque en cours";
  738. TxtRunAttack[4] = "El ataque ya ha";
  739. TxtRunAttack[5] = "O ataque já está";
  740. TxtRunAttack[6] = "Атака уже пошла";
  741. TxtRunAttack[7] = "Attack is underway";
  742.  
  743. var TxtZiel = [];
  744. TxtZiel[0] = "Dein Ziel muss";
  745. TxtZiel[1] = "Your intended victim must";
  746. TxtZiel[2] = "Twój cel musi";
  747. TxtZiel[3] = "Ta cible doit";
  748. TxtZiel[4] = "Tu objetivo ha de ser";
  749. TxtZiel[5] = "O seu objetivo deve";
  750. TxtZiel[6] = "У твоей цели должно быть";
  751. TxtZiel[7] = "Your target must";
  752.  
  753. var TxtAbility1 = [];
  754. TxtAbility1[0] = 'Eine F&auml;higkeit wurde bereits aktiviert';
  755. TxtAbility1[1] = 'An ability has already been activated';
  756. TxtAbility1[2] = ' zdolności jest już rozpoczęte';
  757. TxtAbility1[3] = 'Une habilite a été active';
  758. TxtAbility1[4] = 'Te hemos activado una habilidad';
  759. TxtAbility1[5] = 'An ability has already been activated'; // <--- dieser Text muss noch korrigiert werden
  760. TxtAbility1[6] = 'Одна способность уже активирована';
  761. TxtAbility1[7] = 'An ability has already been activated'; // !!!
  762.  
  763. var TxtBoost = [];
  764. TxtBoost[0] = 'Stärkung:';
  765. TxtBoost[1] = 'Strenth';
  766. TxtBoost[2] = 'Wzmocnienie:';
  767. TxtBoost[3] = 'Renforcement :';
  768. TxtBoost[4] = 'Fortalecimiento:';
  769. TxtBoost[5] = 'Força:';
  770. TxtBoost[6] = 'Подкрепление:';
  771. TxtBoost[7] = 'Strenth'; // !!!
  772.  
  773. var TxtLevel = [];
  774. TxtLevel[0] = 'Stufe: ';
  775. TxtLevel[1] = 'Level ';
  776. TxtLevel[2] = 'stopień: ';
  777. TxtLevel[3] = 'Niveau : ';
  778. TxtLevel[4] = 'Nivel: ';
  779. TxtLevel[5] = 'Grau: ';
  780. TxtLevel[6] = 'Уровень: ';
  781. TxtLevel[7] = 'Level: '; // !!!!
  782.  
  783. var TxtRage = [];
  784. TxtRage[0] = 'Wutentfachung';
  785. TxtRage[1] = 'Rage';
  786. TxtRage[2] = 'Wzbudzanie złości';
  787. TxtRage[3] = 'Rage';
  788. TxtRage[4] = 'Enfurecimiento';
  789. TxtRage[5] = 'Enraivecer';
  790. TxtRage[6] = 'Разжигание ярости';
  791. TxtRage[7] = 'Rage';
  792.  
  793. var TxtNoGangAbility = [];
  794. TxtNoGangAbility[0] = "Du profitierst nicht";
  795. TxtNoGangAbility[1] = "You don't profit";
  796. TxtNoGangAbility[2] = "Nie zyskujesz na talentach";
  797. TxtNoGangAbility[3] = "Vous n'en profitez pas";
  798. TxtNoGangAbility[4] = "You don't profit"; // <--- dieser Text muss noch korrigiert werden
  799. TxtNoGangAbility[5] = "You don't profit"; // <--- dieser Text muss noch korrigiert werden
  800. TxtNoGangAbility[6] = "способности банды тебе не приносят пользу";
  801. TxtNoGangAbility[7] = "You don't profit";
  802.  
  803. var KEYWORD_INGANG = [];
  804. KEYWORD_INGANG[0] = 'Du bist in keiner Pennerbande';
  805. KEYWORD_INGANG[1] = 'You are not in a Gang';
  806. KEYWORD_INGANG[2] = 'Nie ma Cię w żadnej bandzie';
  807. KEYWORD_INGANG[3] = "Tu n'es dans aucune bande";
  808. KEYWORD_INGANG[4] = 'No perteneces a ninguna banda de mendigos';
  809. KEYWORD_INGANG[5] = 'Você não está em nenhuma gangue';
  810. KEYWORD_INGANG[6] = 'Ты не являешься участником никакой банды.';
  811. KEYWORD_INGANG[7] = "You're not in a gang";
  812.  
  813. // sprachspezifische Ausgaben
  814. var TxtGang = [];
  815. TxtGang[0] = "Bande";
  816. TxtGang[1] = "Gang";
  817. TxtGang[2] = "Bandzie";
  818. TxtGang[3] = "Bande";
  819. TxtGang[4] = "Banda";
  820. TxtGang[5] = "Gangue";
  821. TxtGang[6] = "банды";
  822. TxtGang[7] = "Gang";
  823. var TxtNewVersion = [];
  824. 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."
  825. 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."
  826. 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."
  827. 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."
  828. 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."
  829. 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."
  830. TxtNewVersion[6] = "Есть новая версия скрипта ‘%s’:\n\n%s\n\nВ новой версии могут быть улучшения или новые функции.\nЗдесь есть информации о скрипте:\n\n%s\n\nСоветуем инсталлировать.\n\nОпрос о новой версии только раз в день."
  831. 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."
  832.  
  833. var TxtLang = [];
  834. TxtLang[0] = "Sprache: deutsch";
  835. TxtLang[1] = "Language: american";
  836. TxtLang[2] = "Language: polish";
  837. TxtLang[3] = "Langue: français";
  838. TxtLang[4] = "Lengua: español";
  839. TxtLang[5] = "Lingua: português";
  840. TxtLang[6] = "язык: русский";
  841. TxtLang[7] = "Language: english";
  842.  
  843. var fblikelocale = ["de_DE", "en_US", "pl_PL", "fr_FR", "es_ES", "pt_BR", "ru_RU", "en_GB"];
  844.  
  845. var TxtNurLoser = [];
  846. TxtNurLoser[0] = "nur Verlierer anzeigen";
  847. TxtNurLoser[1] = "only show losers";
  848. TxtNurLoser[2] = "only show losers";
  849. TxtNurLoser[3] = "Voir seulement des perdants";
  850. TxtNurLoser[4] = "only show losers";
  851. TxtNurLoser[5] = "only show losers";
  852. TxtNurLoser[6] = "показать только проигрыши";
  853. TxtNurLoser[7] = "only show losers";
  854.  
  855. var TxtPostFight = [];
  856. TxtPostFight[0] = "Kampfwerte posten";
  857. TxtPostFight[1] = "Post fight values";
  858. TxtPostFight[2] = "Post fight values";
  859. TxtPostFight[3] = "Poste les stats de combat";
  860. TxtPostFight[4] = "Post fight values";
  861. TxtPostFight[5] = "Post fight values";
  862. TxtPostFight[6] = "поместить данные по бою";
  863. TxtPostFight[7] = "Post fight values";
  864.  
  865. var TxtNoFight = [];
  866. TxtNoFight[0] = ' noch keinen Kampf';
  867. TxtNoFight[1] = ' no fight yet';
  868. TxtNoFight[2] = ' no fight yet';
  869. TxtNoFight[3] = ' pas des combats jusqu\'à maintenant';
  870. TxtNoFight[4] = ' ninguna lucha hasta ahora';
  871. TxtNoFight[5] = ' nenhuma luta até agora';
  872. TxtNoFight[6] = ' no fight yet';
  873. TxtNoFight[7] = ' no fight yet';
  874.  
  875. var Txt1Fight = [];
  876. Txt1Fight[0] = ' 1 Kampf';
  877. Txt1Fight[1] = ' 1 fight';
  878. Txt1Fight[2] = ' 1 walk';
  879. Txt1Fight[3] = ' 1 baston';
  880. Txt1Fight[4] = ' 1 lucha';
  881. Txt1Fight[5] = ' 1 luta';
  882. Txt1Fight[6] = ' 1 бой';
  883. Txt1Fight[7] = ' 1 fight';
  884.  
  885. var Txt2Fights = [];
  886. Txt2Fights[0] = ' Kämpfe';
  887. Txt2Fights[1] = ' fights';
  888. Txt2Fights[2] = ' walki';
  889. Txt2Fights[3] = ' bastons';
  890. Txt2Fights[4] = ' luchas';
  891. Txt2Fights[5] = ' luchas';
  892. Txt2Fights[6] = ' разборки';
  893. Txt2Fights[7] = ' fights';
  894.  
  895. var Txt1IncFight = [];
  896. Txt1IncFight[0] = "1 eintreffender Kampf";
  897. Txt1IncFight[1] = "1 incoming fight";
  898. Txt1IncFight[2] = "1 rozpoczęte walk";
  899. Txt1IncFight[3] = "1 baston inattendu";
  900. Txt1IncFight[4] = "1 lucha entrante";
  901. Txt1IncFight[5] = "1 luta entrando";
  902. Txt1IncFight[6] = "1 входящий бой";
  903. Txt1IncFight[7] = "1 incoming fight";
  904.  
  905. var Txt2IncFights = [];
  906. Txt2IncFights[0] = " eintreffende Kämpfe";
  907. Txt2IncFights[1] = " incoming fights";
  908. Txt2IncFights[2] = " rozpoczęte walki";
  909. Txt2IncFights[3] = " bastons inattendus";
  910. Txt2IncFights[4] = " luchas entrantes";
  911. Txt2IncFights[5] = " lutas entrando";
  912. Txt2IncFights[6] = " Поступающие разборки";
  913. Txt2IncFights[7] = " incoming fights";
  914.  
  915. var TxtNoGang = [];
  916. TxtNoGang[0] = "-keine Bande-";
  917. TxtNoGang[1] = "-no gang-";
  918. TxtNoGang[2] = "-no gang-";
  919. TxtNoGang[3] = "-pas de bande-";
  920. TxtNoGang[4] = "-ninguna banda-";
  921. TxtNoGang[5] = "-nenhuma gangue-";
  922. TxtNoGang[6] = "-Поступающие разборки-";
  923. TxtNoGang[7] = "-no gang-";
  924.  
  925. var TxtUserPoints = [];
  926. TxtUserPoints[0] = '%s hat aktuell %s Punkte.';
  927. TxtUserPoints[1] = '%s has %s points at the moment.';
  928. TxtUserPoints[2] = '%s has %s points at the moment.';
  929. TxtUserPoints[3] = '%s a %s points à ce moment.';
  930. TxtUserPoints[4] = '%s has %s points at the moment.';
  931. TxtUserPoints[5] = '%s has %s points at the moment.';
  932. TxtUserPoints[6] = 'У %s %s очк.';
  933. TxtUserPoints[7] = '%s has %s points at the moment.';
  934.  
  935. var TxtWaitAttack = [];
  936. TxtWaitAttack[0] = 'noch %sh bis zum nächsten Angriff';
  937. TxtWaitAttack[1] = 'still %sh till your next attack';
  938. TxtWaitAttack[2] = 'still %sh till your next attack';
  939. TxtWaitAttack[3] = 'attende %sh avant ta prochaine attaque';
  940. TxtWaitAttack[4] = 'still %sh till your next attack';
  941. TxtWaitAttack[5] = 'still %sh till your next attack';
  942. TxtWaitAttack[6] = 'ешё %sh до следующего боя';
  943. TxtWaitAttack[7] = 'still %sh till your next attack';
  944.  
  945. var TxtFightCom = [];
  946. TxtFightCom[0] = 'Bitte Kommentar zu diesem Post eingeben:';
  947. TxtFightCom[1] = 'Please enter a comment for this posting:';
  948. TxtFightCom[2] = 'Please enter a comment for this posting:';
  949. TxtFightCom[3] = "S'il vous plaÉt entre un commentaire pour ce post:";
  950. TxtFightCom[4] = 'Please enter a comment for this posting:';
  951. TxtFightCom[5] = 'Please enter a comment for this posting:';
  952. TxtFightCom[6] = 'Введите комментарий:';
  953. TxtFightCom[7] = 'Please enter a comment for this posting:';
  954.  
  955. var TxtAttack = [];
  956. TxtAttack[0] = 'Angriff läuft bereits auf';
  957. TxtAttack[1] = 'Attack already started at';
  958. TxtAttack[2] = 'Attack already started at';
  959. TxtAttack[3] = 'Attaque déja commence à';
  960. TxtAttack[4] = 'Attack already started at';
  961. TxtAttack[5] = 'Attack already started at';
  962. TxtAttack[6] = 'Бой уже идёт против';
  963. TxtAttack[7] = 'Attack already started at';
  964.  
  965. var TxtFight = [];
  966. TxtFight[0] = 'Der Kampf wurde';
  967. TxtFight[1] = 'The fight was';
  968. TxtFight[2] = 'The fight was';
  969. TxtFight[3] = 'Le combat a été';
  970. TxtFight[4] = 'The fight was';
  971. TxtFight[5] = 'The fight was';
  972. TxtFight[6] = 'Бой был послан';
  973. TxtFight[7] = 'The fight was';
  974.  
  975. var TxtFights = [];
  976. TxtFights[0] = 'Die Kämpfe wurden';
  977. TxtFights[1] = 'The fights were';
  978. TxtFights[2] = 'The fights were';
  979. TxtFights[3] = 'Les combats ont été';
  980. TxtFights[4] = 'The fights were';
  981. TxtFights[5] = 'The fights were';
  982. TxtFights[6] = 'Бои были посланы';
  983. TxtFights[7] = 'The fights were';
  984.  
  985. var TxtAttackPost = [];
  986. TxtAttackPost[0] = ' in die Shoutbox gepostet!';
  987. TxtAttackPost[1] = ' posted into the shoutbox!';
  988. TxtAttackPost[2] = ' posted into the shoutbox!';
  989. TxtAttackPost[3] = ' posté dans le chat de bande!';
  990. TxtAttackPost[4] = ' posted into the shoutbox!';
  991. TxtAttackPost[5] = ' posted into the shoutbox!';
  992. TxtAttackPost[6] = ' в шаутбокс.!';
  993. TxtAttackPost[7] = ' posted into the shoutbox!';
  994.  
  995. var TxtFightVals = [];
  996. TxtFightVals[0] = 'Mein Kampfwert: ';
  997. TxtFightVals[1] = 'My fight value: ';
  998. TxtFightVals[2] = 'My fight value: ';
  999. TxtFightVals[3] = 'Mes stats de combat: ';
  1000. TxtFightVals[4] = 'My fight value: ';
  1001. TxtFightVals[5] = 'My fight value: ';
  1002. TxtFightVals[6] = 'Мои данные по бою: ';
  1003. TxtFightVals[7] = 'My fight value: ';
  1004.  
  1005. var TxtPostPreMsg = [];
  1006. TxtPostPreMsg[0] = 'Eingehender Kampf:\n\n';
  1007. TxtPostPreMsg[1] = 'Incoming fight:\n\n';
  1008. TxtPostPreMsg[2] = 'Rozpoczęte walk:\n\n';
  1009. TxtPostPreMsg[3] = 'Baston inattendu:\n\n';
  1010. TxtPostPreMsg[4] = 'lucha entrante:\n\n';
  1011. TxtPostPreMsg[5] = 'luta entrando:\n\n';
  1012. TxtPostPreMsg[6] = 'Входящий бой:\n\n';
  1013. TxtPostPreMsg[7] = 'Incoming fight:\n\n';
  1014.  
  1015. var TxtPostPreMsg2 = [];
  1016. TxtPostPreMsg2[0] = 'Eingehende Kämpfe:\n\n';
  1017. TxtPostPreMsg2[1] = 'Incoming fights:\n\n';
  1018. TxtPostPreMsg2[2] = 'Rozpoczęte walki:\n\n';
  1019. TxtPostPreMsg2[3] = 'Bastons inattendus:\n\n';
  1020. TxtPostPreMsg2[4] = 'Luchas entrantes:\n\n';
  1021. TxtPostPreMsg2[5] = 'Lutas entrando:\n\n';
  1022. TxtPostPreMsg2[6] = 'Входящие бои:\n\n';
  1023. TxtPostPreMsg2[7] = 'Incoming fights:\n\n';
  1024.  
  1025. var TxtCheckFights = [];
  1026. TxtCheckFights[0] = 'Bitte die Kämpfe, die gepostet werden sollen, durch Ankreuzen auswählen!';
  1027. TxtCheckFights[1] = 'Please check the fights you want to post into the shoutbox!';
  1028. TxtCheckFights[2] = 'Please check the fights you want to post into the shoutbox!';
  1029. TxtCheckFights[3] = "S'il vous plaÉt cochez les combats que vous voulez poster dans le chat de bande!";
  1030. TxtCheckFights[4] = 'Please check the fights you want to post into the shoutbox!';
  1031. TxtCheckFights[5] = 'Please check the fights you want to post into the shoutbox!';
  1032. TxtCheckFights[6] = 'Пожалуйста, бои, которые должны быть посланы, пометьте крестиком!';
  1033. TxtCheckFights[7] = 'Please check the fights you want to post into the shoutbox!';
  1034.  
  1035. var TxtPostTitle = [];
  1036. TxtPostTitle[0] = 'Daten der markierten Kämpfe in die Shoutbox posten.';
  1037. TxtPostTitle[1] = 'Post data of the checked fights into the shoutbox.';
  1038. TxtPostTitle[2] = 'Post data of the checked fights into the shoutbox.';
  1039. TxtPostTitle[3] = 'Poster les données des combats cochés dans le chat de bande.';
  1040. TxtPostTitle[4] = 'Post data of the checked fights into the shoutbox.';
  1041. TxtPostTitle[5] = 'Post data of the checked fights into the shoutbox.';
  1042. TxtPostTitle[6] = 'Данные помеченных боёв послать в шаутбокс.';
  1043. TxtPostTitle[7] = 'Post data of the checked fights into the shoutbox.';
  1044.  
  1045. var TxtPostTitle2 = [];
  1046. TxtPostTitle2[0] = 'Daten des Kampfes gegen %s in die Shoutbox posten.';
  1047. TxtPostTitle2[1] = 'Post data of the fight against %s into the shoutbox.';
  1048. TxtPostTitle2[2] = 'Post data of the fight against %s into the shoutbox.';
  1049. TxtPostTitle2[3] = 'Poster les données du combat contre %s dans le chat de bande.';
  1050. TxtPostTitle2[4] = 'Post data of the fight against %s into the shoutbox.';
  1051. TxtPostTitle2[5] = 'Post data of the fight against %s into the shoutbox.';
  1052. TxtPostTitle2[6] = 'Бой против %s послать в шаутбокс.';
  1053. TxtPostTitle2[7] = 'Post data of the fight against %s into the shoutbox.';
  1054.  
  1055. var TxtAllFights = [];
  1056. TxtAllFights[0] = 'Alle K&auml;mpfe anzeigen';
  1057. TxtAllFights[1] = 'Display all fights';
  1058. TxtAllFights[2] = 'Display all fights';
  1059. TxtAllFights[3] = 'Voir tous les combats';
  1060. TxtAllFights[4] = 'Display all fights';
  1061. TxtAllFights[5] = 'Display all fights';
  1062. TxtAllFights[6] = 'Все бои показать';
  1063. TxtAllFights[7] = 'Display all fights';
  1064.  
  1065. var TxtUpToPage = [];
  1066. TxtUpToPage[0] = 'bis Seite';
  1067. TxtUpToPage[1] = 'up to page';
  1068. TxtUpToPage[2] = 'up to page';
  1069. TxtUpToPage[3] = "jusqu'à la page";
  1070. TxtUpToPage[4] = 'up to page';
  1071. TxtUpToPage[5] = 'up to page';
  1072. TxtUpToPage[6] = 'до страницы';
  1073. TxtUpToPage[7] = 'up to page';
  1074.  
  1075. var TxtShowBBCode = [];
  1076. TxtShowBBCode[0] = 'BBCode anzeigen';
  1077. TxtShowBBCode[1] = 'show BBCode';
  1078. TxtShowBBCode[2] = 'show BBCode';
  1079. TxtShowBBCode[3] = 'voir le BBCode';
  1080. TxtShowBBCode[4] = 'show BBCode';
  1081. TxtShowBBCode[5] = 'show BBCode';
  1082. TxtShowBBCode[6] = 'показать BB-код';
  1083. TxtShowBBCode[7] = 'show BBCode';
  1084.  
  1085. var TxtBBCodeLen = [];
  1086. TxtBBCodeLen[0] = 'Länge: %d Zeichen';
  1087. TxtBBCodeLen[1] = 'length: %d chars';
  1088. TxtBBCodeLen[2] = 'length: %d chars';
  1089. TxtBBCodeLen[3] = 'taille: %d characteres';
  1090. TxtBBCodeLen[4] = 'length: %d chars';
  1091. TxtBBCodeLen[5] = 'length: %d chars';
  1092. TxtBBCodeLen[6] = 'Длина: %s знак';
  1093. TxtBBCodeLen[7] = 'length: %d chars';
  1094.  
  1095. var TxtMyFav = [];
  1096. TxtMyFav[0] = 'Meine beliebtesten Gegner';
  1097. TxtMyFav[1] = 'My favourite victims';
  1098. TxtMyFav[2] = 'My favourite opponents';
  1099. TxtMyFav[3] = 'Mes plus aimées adversaires';
  1100. TxtMyFav[4] = 'My favourite opponents';
  1101. TxtMyFav[5] = 'My favourite opponents';
  1102. TxtMyFav[6] = 'Мои любимые противники';
  1103. TxtMyFav[7] = 'My favourite opponents';
  1104.  
  1105. var TxtFightList = [];
  1106. TxtFightList[0] = 'Kampfliste';
  1107. TxtFightList[1] = 'Fightlist';
  1108. TxtFightList[2] = 'Fightlist';
  1109. TxtFightList[3] = 'Liste des combats';
  1110. TxtFightList[4] = 'Fightlist';
  1111. TxtFightList[5] = 'Fightlist';
  1112. TxtFightList[6] = 'показать список боёв';
  1113. TxtFightList[7] = 'Fightlist';
  1114.  
  1115. var TxtShowFTList = [];
  1116. TxtShowFTList[0] = 'Kampfliste anzeigen';
  1117. TxtShowFTList[1] = 'show fightlist';
  1118. TxtShowFTList[2] = 'show fightlist';
  1119. TxtShowFTList[3] = 'voir la liste des combats';
  1120. TxtShowFTList[4] = 'show fightlist';
  1121. TxtShowFTList[5] = 'show fightlist';
  1122. TxtShowFTList[6] = 'показать список боёв';
  1123. TxtShowFTList[7] = 'show fightlist';
  1124.  
  1125. var TxtAddToFT = [];
  1126. TxtAddToFT[0] = 'Neuen Eintrag hinzufügen';
  1127. TxtAddToFT[1] = 'Add a new entry';
  1128. TxtAddToFT[2] = 'Add a new entry';
  1129. TxtAddToFT[3] = 'ajouter une entrée';
  1130. TxtAddToFT[4] = 'Add a new entry';
  1131. TxtAddToFT[5] = 'Add a new entry';
  1132. TxtAddToFT[6] = 'добавить новую запись';
  1133. TxtAddToFT[7] = 'Add a new entry';
  1134.  
  1135. var TxtAddUserToFT = [];
  1136. TxtAddUserToFT[0] = '%s zur Kampfliste hinzufügen';
  1137. TxtAddUserToFT[1] = 'Add %s to fight list';
  1138. TxtAddUserToFT[2] = 'Add %s to fight list';
  1139. TxtAddUserToFT[3] = 'Ajouter %s à la liste des combats';
  1140. TxtAddUserToFT[4] = 'Add %s to fight list';
  1141. TxtAddUserToFT[5] = 'Add %s to fight list';
  1142. TxtAddUserToFT[6] = '%s добавить в список боёв';
  1143. TxtAddUserToFT[7] = 'Add %s to fight list';
  1144.  
  1145. var TxtDelFromFT = [];
  1146. TxtDelFromFT[0] = 'Entfernen aus Kampfliste';
  1147. TxtDelFromFT[1] = 'Remove from fightlist';
  1148. TxtDelFromFT[2] = 'Remove from fightlist';
  1149. TxtDelFromFT[3] = 'Éliminer de la liste des combats';
  1150. TxtDelFromFT[4] = 'Remove from fightlist';
  1151. TxtDelFromFT[5] = 'Remove from fightlist';
  1152. TxtDelFromFT[6] = 'Удалить из списка боёв';
  1153. TxtDelFromFT[7] = 'Remove from fightlist';
  1154.  
  1155. var TxtAddMarkedToFT = [];
  1156. TxtAddMarkedToFT[0] = 'Markierte Einträge zur Kampfliste hinzufügen';
  1157. TxtAddMarkedToFT[1] = 'Add marked entries to fightlist';
  1158. TxtAddMarkedToFT[2] = 'Add marked entries to fightlist';
  1159. TxtAddMarkedToFT[3] = 'Ajouter les entrées cochés à la liste des combats';
  1160. TxtAddMarkedToFT[4] = 'Add marked entries to fightlist';
  1161. TxtAddMarkedToFT[5] = 'Add marked entries to fightlist';
  1162. TxtAddMarkedToFT[6] = 'Помеченные записи добавить в список боёв';
  1163. TxtAddMarkedToFT[7] = 'Add marked entries to fightlist';
  1164.  
  1165. var TxtAdded1ToFT = [];
  1166. TxtAdded1ToFT[0] = 'Es wurde 1 Eintrag zur Kampfliste hinzugefügt';
  1167. TxtAdded1ToFT[1] = '1 entry added to the fightlist';
  1168. TxtAdded1ToFT[2] = '1 entry added to the fightlist';
  1169. TxtAdded1ToFT[3] = '1 entrée est ajouté à la liste des combats';
  1170. TxtAdded1ToFT[4] = '1 entry added to the fightlist';
  1171. TxtAdded1ToFT[5] = '1 entry added to the fightlist';
  1172. TxtAdded1ToFT[6] = '1 запись была добавлена в список боёв';
  1173. TxtAdded1ToFT[7] = '1 entry added to the fightlist';
  1174.  
  1175. var TxtAddedToFT = [];
  1176. TxtAddedToFT[0] = 'Es wurden %s Einträge zur Kampfliste hinzugefügt';
  1177. TxtAddedToFT[1] = '%s entries added to the fightlist';
  1178. TxtAddedToFT[2] = '%s entries added to the fightlist';
  1179. TxtAddedToFT[3] = '%s entrées ont ajouté à la liste des combats';
  1180. TxtAddedToFT[4] = '%s entries added to the fightlist';
  1181. TxtAddedToFT[5] = '%s entries added to the fightlist';
  1182. TxtAddedToFT[6] = '%s запис. были добавлены в список боёв';
  1183. TxtAddedToFT[7] = '%s entries added to the fightlist';
  1184.  
  1185. var TxtNoAddedToFT = [];
  1186. TxtNoAddedToFT[0] = 'Alle Einträge waren bereits in der Kampfliste enthalten';
  1187. TxtNoAddedToFT[1] = 'No entries were added to the fightlist';
  1188. TxtNoAddedToFT[2] = 'No entries were added to the fightlist';
  1189. TxtNoAddedToFT[3] = 'Pas des entrées ont ajouté à la liste des combats';
  1190. TxtNoAddedToFT[4] = 'No entries were added to the fightlist';
  1191. TxtNoAddedToFT[5] = 'No entries were added to the fightlist';
  1192. TxtNoAddedToFT[6] = 'Все записи были уже добавлены в список боёв';
  1193. TxtNoAddedToFT[7] = 'No entries were added to the fightlist';
  1194.  
  1195. var TxtCheckBums = [];
  1196. TxtCheckBums[0] = 'Bitte die Penner, die hinzugefügt werden sollen, durch Ankreuzen auswählen!';
  1197. TxtCheckBums[1] = 'Please check the fights to be added to the fightlist!';
  1198. TxtCheckBums[2] = 'Please check the fights to be added to the fightlist!';
  1199. TxtCheckBums[3] = "S'il vous plaÉt cochez les combats pour ajouter à la liste des combats!";
  1200. TxtCheckBums[4] = 'Please check the fights to be added to the fightlist!';
  1201. TxtCheckBums[5] = 'Please check the fights to be added to the fightlist!';
  1202. TxtCheckBums[6] = 'Бомжей, которых нужно добавить, пометьте крестиком!';
  1203. TxtCheckBums[7] = 'Please check the fights to be added to the fightlist!';
  1204.  
  1205. var TxtAdd1ToFT = [];
  1206. TxtAdd1ToFT[0] = 'Penner wurde zur Kampfliste hinzugefügt!';
  1207. TxtAdd1ToFT[1] = 'User added to fightlist !';
  1208. TxtAdd1ToFT[2] = 'User added to fightlist !';
  1209. TxtAdd1ToFT[3] = 'Joueur ajouté à la liste des combats !';
  1210. TxtAdd1ToFT[4] = 'User added to fightlist !';
  1211. TxtAdd1ToFT[5] = 'User added to fightlist !';
  1212. TxtAdd1ToFT[6] = 'Бомжи были добавлены в список боёв.';
  1213. TxtAdd1ToFT[7] = 'User added to fightlist !';
  1214.  
  1215. var TxtNoAddToFT = [];
  1216. TxtNoAddToFT[0] = 'Penner schon vorhanden !';
  1217. TxtNoAddToFT[1] = 'User already in fightlist !';
  1218. TxtNoAddToFT[2] = 'User already in fightlist !';
  1219. TxtNoAddToFT[3] = 'Joueur déja existant !';
  1220. TxtNoAddToFT[4] = 'User already in fightlist !';
  1221. TxtNoAddToFT[5] = 'User already in fightlist !';
  1222. TxtNoAddToFT[6] = 'Бомж уже имеется !';
  1223. TxtNoAddToFT[7] = 'User already in fightlist !';
  1224.  
  1225. var TxtNewIDs = [];
  1226. TxtNewIDs[0] = 'Neuen Penner hinzufügen:';
  1227. TxtNewIDs[1] = 'Enter new bum: ';
  1228. TxtNewIDs[2] = 'Enter new bum: ';
  1229. TxtNewIDs[3] = 'Entréz nouveau joueur svp: ';
  1230. TxtNewIDs[4] = 'Enter new bum: ';
  1231. TxtNewIDs[5] = 'Enter new bum: ';
  1232. TxtNewIDs[6] = 'Нового бомжа добавить: ';
  1233. TxtNewIDs[7] = 'Enter new dosser: ';
  1234.  
  1235. var TxtAddAllToFT = [];
  1236. TxtAddAllToFT[0] = 'alle zur Kampfliste hinzufügen';
  1237. TxtAddAllToFT[1] = 'add all members to the fightlist';
  1238. TxtAddAllToFT[2] = 'add all members to the fightlist';
  1239. TxtAddAllToFT[3] = 'add all members to the fightlist';
  1240. TxtAddAllToFT[4] = 'add all members to the fightlist';
  1241. TxtAddAllToFT[5] = 'add all members to the fightlist';
  1242. TxtAddAllToFT[6] = 'add all members to the fightlist';
  1243. TxtAddAllToFT[7] = 'add all members to the fightlist';
  1244.  
  1245. var TxtRemoveAllFromFT = [];
  1246. TxtRemoveAllFromFT[0] = 'alle aus Kampfliste entfernen';
  1247. TxtRemoveAllFromFT[1] = 'remove all members from the fightlist';
  1248. TxtRemoveAllFromFT[2] = 'remove all members from the fightlist';
  1249. TxtRemoveAllFromFT[3] = 'remove all members from the fightlist';
  1250. TxtRemoveAllFromFT[4] = 'remove all members from the fightlist';
  1251. TxtRemoveAllFromFT[5] = 'remove all members from the fightlist';
  1252. TxtRemoveAllFromFT[6] = 'remove all members from the fightlist';
  1253. TxtRemoveAllFromFT[7] = 'remove all members from the fightlist';
  1254.  
  1255. var TxtRemoved1FromFT = [];
  1256. TxtRemoved1FromFT[0] = 'Es wurde 1 Penner aus der Kampfliste entfernt';
  1257. TxtRemoved1FromFT[1] = '1 entry removed from the fightlist';
  1258. TxtRemoved1FromFT[2] = '1 entry removed from the fightlist';
  1259. TxtRemoved1FromFT[3] = '1 entry removed from the fightlist';
  1260. TxtRemoved1FromFT[4] = '1 entry removed from the fightlist';
  1261. TxtRemoved1FromFT[5] = '1 entry removed from the fightlist';
  1262. TxtRemoved1FromFT[6] = '1 entry removed from the fightlist';
  1263. TxtRemoved1FromFT[7] = '1 entry removed from the fightlist';
  1264.  
  1265. var TxtRemovedFromFT = [];
  1266. TxtRemovedFromFT[0] = 'Es wurden %s Einträge aus der Kampfliste entfernt';
  1267. TxtRemovedFromFT[1] = '%s entries removed from the fightlist';
  1268. TxtRemovedFromFT[2] = '%s entries removed from the fightlist';
  1269. TxtRemovedFromFT[3] = '%s entries removed from the fightlist';
  1270. TxtRemovedFromFT[4] = '%s entries removed from the fightlist';
  1271. TxtRemovedFromFT[5] = '%s entries removed from the fightlist';
  1272. TxtRemovedFromFT[6] = '%s entries removed from the fightlist';
  1273. TxtRemovedFromFT[7] = '%s entries removed from the fightlist';
  1274.  
  1275. var TxtNoRemovedFromFT = [];
  1276. TxtNoRemovedFromFT[0] = 'Keiner der Penner war in der Kampfliste enthalten';
  1277. TxtNoRemovedFromFT[1] = 'No entries were removed from the fightlist';
  1278. TxtNoRemovedFromFT[2] = 'No entries were removed from the fightlist';
  1279. TxtNoRemovedFromFT[3] = 'No entries were removed from the fightlist';
  1280. TxtNoRemovedFromFT[4] = 'No entries were removed from the fightlist';
  1281. TxtNoRemovedFromFT[5] = 'No entries were removed from the fightlist';
  1282. TxtNoRemovedFromFT[6] = 'No entries were removed from the fightlist';
  1283. TxtNoRemovedFromFT[7] = 'No entries were removed from the fightlist';
  1284.  
  1285. var TxtAllFightsGang = [];
  1286. TxtAllFightsGang[0] = 'alle K&auml;mpfe mit dieser Bande';
  1287. TxtAllFightsGang[1] = 'all fights with this gang';
  1288. TxtAllFightsGang[2] = 'all fights with this gang';
  1289. TxtAllFightsGang[3] = 'all fights with this gang';
  1290. TxtAllFightsGang[4] = 'all fights with this gang';
  1291. TxtAllFightsGang[5] = 'all fights with this gang';
  1292. TxtAllFightsGang[6] = 'all fights with this gang';
  1293. TxtAllFightsGang[7] = 'all fights with this gang';
  1294.  
  1295. var tableIDlow = [];
  1296. tableIDlow[0] = "downfight";
  1297. tableIDlow[1] = "hochfight";
  1298. tableIDlow[2] = "cheater";
  1299. tableIDlow[3] = "legion";
  1300. tableIDlow[4] = "armee";
  1301.  
  1302. var tableIDs = [];
  1303. tableIDs[0] = "fghtlist";
  1304. tableIDs[1] = "dnftlist";
  1305. tableIDs[2] = "upftlist";
  1306. tableIDs[3] = "fakelist";
  1307. tableIDs[4] = "legilist";
  1308. tableIDs[5] = "armylist";
  1309.  
  1310. var tableNames = [];
  1311. tableNames[0] = "Downfighter";
  1312. tableNames[1] = "Hochfighter";
  1313. tableNames[2] = "Cheater";
  1314. tableNames[3] = "Legionäre";
  1315. tableNames[4] = "Soldaten";
  1316.  
  1317. var tableList = [];
  1318. tableList[0] = "Downfight";
  1319. tableList[1] = "Hochfight";
  1320. tableList[2] = "Cheater";
  1321. tableList[3] = "Legionärs";
  1322. tableList[4] = "Freiheitskämpfer";
  1323.  
  1324. var DFurl = [];
  1325. DFurl[0] = DOWNFIGHTDE_DOWNFIGHTPAGE_URL;
  1326. DFurl[1] = DOWNFIGHTDE_HOCHFIGHTPAGE_URL;
  1327. DFurl[2] = DOWNFIGHTDE_CHEATERPAGE_URL;
  1328. DFurl[3] = DOWNFIGHTDE_LEGIONPAGE_URL;
  1329. DFurl[4] = DOWNFIGHTDE_ARMEEPAGE_URL;
  1330.  
  1331. var head1 = []; // Username
  1332. head1[0] = "Downfighter";
  1333. head1[1] = "Hochfighter";
  1334. head1[2] = "Cheater";
  1335. head1[3] = "Legionär";
  1336. head1[4] = "Soldat";
  1337.  
  1338. var head2 = []; // Zeit/Kills
  1339. head2[0] = "Dauer";
  1340. head2[1] = "Dauer";
  1341. head2[2] = "Zeit";
  1342. head2[3] = "Kills";
  1343. head2[4] = "Kills";
  1344.  
  1345. var colors = []; // Farbcodes
  1346. colors[0] = '#FF6666'; // nicht angreifbar
  1347. colors[1] = '#3366FF'; // angreifbar, aber man selbst ist nicht angreifbar
  1348. colors[2] = 'lime'; // angreifbar, weniger Punkte
  1349. colors[3] = 'green'; // angreifbar, gleiche Punkte
  1350. colors[4] = 'green'; // angreifbar, mehr Punkte
  1351. colors[5] = '#FFFF33'; // nicht angreifbar, aber man selbst ist angreifbar
  1352. colors[6] = '#FF6666'; // nicht angreifbar, da selbst
  1353.  
  1354. var TxtColor = [];
  1355. TxtColor[0] = [];
  1356. TxtColor[0][0] = 'Diesen Gegner kannst Du nicht angreifen und er kann Dich nicht angreifen';
  1357. TxtColor[0][1] = 'You cannot attack this player and he cannot attack you';
  1358. TxtColor[0][2] = 'You cannot attack this player and he cannot attack you';
  1359. TxtColor[0][3] = 'You cannot attack this player and he cannot attack you';
  1360. TxtColor[0][4] = 'You cannot attack this player and he cannot attack you';
  1361. TxtColor[0][5] = 'You cannot attack this player and he cannot attack you';
  1362. TxtColor[0][6] = 'You cannot attack this player and he cannot attack you';
  1363. TxtColor[0][7] = 'You cannot attack this player and he cannot attack you';
  1364.  
  1365. TxtColor[1] = [];
  1366. TxtColor[1][0] = 'Diesen Gegner kannst Du angreifen, aber er kann Dich nicht angreifen';
  1367. TxtColor[1][1] = 'You can attack this player, but he cannot attack you';
  1368. TxtColor[1][2] = 'You can attack this player, but he cannot attack you';
  1369. TxtColor[1][3] = 'You can attack this player, but he cannot attack you';
  1370. TxtColor[1][4] = 'You can attack this player, but he cannot attack you';
  1371. TxtColor[1][5] = 'You can attack this player, but he cannot attack you';
  1372. TxtColor[1][6] = 'You can attack this player, but he cannot attack you';
  1373. TxtColor[1][7] = 'You can attack this player, but he cannot attack you';
  1374.  
  1375. TxtColor[2] = [];
  1376. TxtColor[2][0] = 'Diesen Gegner kannst Du angreifen und er kann Dich angreifen, aber Du hast mehr Punkte';
  1377. TxtColor[2][1] = 'You can attack this player and he can attack you, but you have more points';
  1378. TxtColor[2][2] = 'You can attack this player and he can attack you, but you have more points';
  1379. TxtColor[2][3] = 'You can attack this player and he can attack you, but you have more points';
  1380. TxtColor[2][4] = 'You can attack this player and he can attack you, but you have more points';
  1381. TxtColor[2][5] = 'You can attack this player and he can attack you, but you have more points';
  1382. TxtColor[2][6] = 'You can attack this player and he can attack you, but you have more points';
  1383. TxtColor[2][7] = 'You can attack this player and he can attack you, but you have more points';
  1384.  
  1385. TxtColor[3] = [];
  1386. TxtColor[3][0] = 'Diesen Gegner kannst Du angreifen und er kann Dich angreifen und ihr habt gleich viele Punkte';
  1387. TxtColor[3][1] = 'You can attack this player and he can attack you and you both have the same amount of points';
  1388. TxtColor[3][2] = 'You can attack this player and he can attack you and you both have the same amount of points';
  1389. TxtColor[3][3] = 'You can attack this player and he can attack you and you both have the same amount of points';
  1390. TxtColor[3][4] = 'You can attack this player and he can attack you and you both have the same amount of points';
  1391. TxtColor[3][5] = 'You can attack this player and he can attack you and you both have the same amount of points';
  1392. TxtColor[3][6] = 'You can attack this player and he can attack you and you both have the same amount of points';
  1393. TxtColor[3][7] = 'You can attack this player and he can attack you and you both have the same amount of points';
  1394.  
  1395. TxtColor[4] = [];
  1396. TxtColor[4][0] = 'Diesen Gegner kannst Du angreifen und er kann Dich angreifen, aber Du hast weniger Punkte';
  1397. TxtColor[4][1] = 'You can attack this player and he can attack you, but you have less points';
  1398. TxtColor[4][2] = 'You can attack this player and he can attack you, but you have less points';
  1399. TxtColor[4][3] = 'You can attack this player and he can attack you, but you have less points';
  1400. TxtColor[4][4] = 'You can attack this player and he can attack you, but you have less points';
  1401. TxtColor[4][5] = 'You can attack this player and he can attack you, but you have less points';
  1402. TxtColor[4][6] = 'You can attack this player and he can attack you, but you have less points';
  1403. TxtColor[4][7] = 'You can attack this player and he can attack you, but you have less points';
  1404.  
  1405. TxtColor[5] = [];
  1406. TxtColor[5][0] = 'Diesen Gegner kannst Du nicht angreifen, aber er kann Dich angreifen';
  1407. TxtColor[5][1] = 'You cannot attack this player, but he can attack you';
  1408. TxtColor[5][2] = 'You cannot attack this player, but he can attack you';
  1409. TxtColor[5][3] = 'You cannot attack this player, but he can attack you';
  1410. TxtColor[5][4] = 'You cannot attack this player, but he can attack you';
  1411. TxtColor[5][5] = 'You cannot attack this player, but he can attack you';
  1412. TxtColor[5][6] = 'You cannot attack this player, but he can attack you';
  1413. TxtColor[5][7] = 'You cannot attack this player, but he can attack you';
  1414.  
  1415. TxtColor[6] = [];
  1416. TxtColor[6][0] = 'Du kannst Dich nicht selbst angreifen !!';
  1417. TxtColor[6][1] = 'You cannot attack yourself !!';
  1418. TxtColor[6][2] = 'You cannot attack yourself !!';
  1419. TxtColor[6][3] = 'You cannot attack yourself !!';
  1420. TxtColor[6][4] = 'You cannot attack yourself !!';
  1421. TxtColor[6][5] = 'You cannot attack yourself !!';
  1422. TxtColor[6][6] = 'You cannot attack yourself !!';
  1423. TxtColor[6][7] = 'You cannot attack yourself !!';
  1424.  
  1425. var nrOfCachedUsers = 0;
  1426. var CachedUsers = []; // gespeicherte Userids
  1427. var CachedStats = []; // gespeicherte Statistiken
  1428. var CachedPoints = []; // gespeicherte Punkte
  1429. var CachedFights = []; // gespeicherte Kämpfe
  1430. var CachedWaitText = []; // gespeicherte Angreifbarkeitstexte
  1431. var usernames = []; // gespeicherte Usernamen
  1432. var userhistory = []; // gespeicherte Punktehistory
  1433. var userpts = []; // gespeicherte Userpunkte
  1434. var compress = false;
  1435. var hasCaptcha = true;
  1436. var fltable;
  1437. var fightVals = "";
  1438. var counter = 0;
  1439. function xor(a, b){return a==""?a:String.fromCharCode(b^a.charCodeAt(0)) + xor(a.substr(1),b);}
  1440. function j(c){return c==""?c:"U"+c.slice(0,2)+j(c.slice(2))};
  1441. function k(c){return trimString(GM_info.scriptMetaStr.split("// @"+c)[1].split("\n")[0])};
  1442.  
  1443. // **********************************************************************************
  1444. // **********************************************************************************
  1445. // Funktion setzt eine Variable in Relation zur Stadt
  1446. // **********************************************************************************
  1447. // **********************************************************************************
  1448. function PG_setValue(varname, val) {
  1449. GM_setValue(TOWNEXTENSION + varname, val);
  1450. }
  1451.  
  1452. // **********************************************************************************
  1453. // **********************************************************************************
  1454. // Funktion setzt eine Variable in Relation zu Stadt und user
  1455. // **********************************************************************************
  1456. // **********************************************************************************
  1457. function PGu_setValue(varname, val) {
  1458. PG_setValue(varname + m_ownuserid, val);
  1459. }
  1460.  
  1461. // **********************************************************************************
  1462. // **********************************************************************************
  1463. // Holen einer Variablen aus alten Versionen
  1464. // **********************************************************************************
  1465. // **********************************************************************************
  1466. function PG_getValue(varname, deflt) {
  1467. var vold = "";
  1468. var v = GM_getValue(TOWNEXTENSION + varname, "deadmeat");
  1469.  
  1470. if (v == "deadmeat") {
  1471. if (varname.substr(0, 12) == 'FightComment' || varname.substr(0, 7) == 'Warning') {
  1472. var vrootlen = (varname.substr(0, 1) == 'W')?7:12;
  1473. vold = varname.substr(0, vrootlen) + m_ownuserid + TOWNEXTENSION;
  1474. vold += varname.substr(vold.length);
  1475. v = GM_getValue(vold, "deadmeat");
  1476. }
  1477. }
  1478.  
  1479. if (v == "deadmeat")
  1480. return deflt;
  1481.  
  1482. if (vold != "") {
  1483. GM_setValue(TOWNEXTENSION + varname, v);
  1484. GM_deleteValue(vold);
  1485. }
  1486. return v;
  1487. }
  1488.  
  1489. // **********************************************************************************
  1490. // **********************************************************************************
  1491. // Funktion holt eine Variable in Relation zu Stadt und user
  1492. // **********************************************************************************
  1493. // **********************************************************************************
  1494. function PGu_getValue(varname, val) {
  1495. return PG_getValue(varname + m_ownuserid, val);
  1496. }
  1497.  
  1498. // **********************************************************************************
  1499. // **********************************************************************************
  1500. // **********************************************************************************
  1501. // Funktion ermittelt die Bildadresse
  1502. // **********************************************************************************
  1503. // **********************************************************************************
  1504. function getIconAddr(img){
  1505. if (img.substr(0,4) == "http")
  1506. return img;
  1507. if (img.indexOf('#') == -1 || imgPrefix.length == 1)
  1508. return imgPrefix[0] + img;
  1509.  
  1510. imgs = img.split('#');
  1511. indx = NrOfCalls % imgPrefix.length;
  1512. while (imagehoster.indexOf("" + indx) < 0)
  1513. if (++indx == imgs.length)
  1514. indx = 0;
  1515.  
  1516. return imgPrefix[indx] + imgs[indx];
  1517. }
  1518.  
  1519. // ***********************************************************************************************
  1520. // ***********************************************************************************************
  1521. // Funktion überprüft, ob die im GM-Key "keyname" gespeicherte Zeit länger als "interval"
  1522. // Minuten vorüber ist. Falls ja, wird true zurückgegeben und die neue Zeit gespeichert
  1523. // ***********************************************************************************************
  1524. // ***********************************************************************************************
  1525. function IsTimeToCheck(keyname, interval) {
  1526. var now = new Date();
  1527.  
  1528. if ((Number(now) - Number(GM_getValue(keyname, "0"))) / 1000 / 60 >= interval) {
  1529. GM_setValue(keyname, Number(now).toString());
  1530. return true;
  1531. } else {
  1532. return false;
  1533. }
  1534. }
  1535.  
  1536. function bl(key, userid) {
  1537. function d2h(d) {return Number(d).toString(16);}
  1538.  
  1539. function xor(a, b)
  1540. {
  1541. var c = "";
  1542. a = d2h(a);
  1543. for(var i = 0; i < a.length; ++i){c = c + String.fromCharCode(b^a.charCodeAt(i));}
  1544. return c;
  1545. }
  1546.  
  1547. switch (TOWNEXTENSION) {
  1548. case "B": var keyname = 'b'; break;
  1549. case "K": var keyname = 'k'; break;
  1550. case "HH": var keyname = 'h'; break;
  1551. case "HR": var keyname = 'hr'; break;
  1552. case "MU": var keyname = 'm'; break;
  1553. case "SY": var keyname = 'sy'; break;
  1554. case "PM": var keyname = 'pm'; break;
  1555. case "VT": var keyname = 'vt'; break;
  1556. case "AT": var keyname = 'at'; break;
  1557. case "HW": var keyname = 'hw'; break;
  1558. case "NY": var keyname = 'ny'; break;
  1559. case "WA": var keyname = 'wa'; break;
  1560. case "WR": var keyname = 'wr'; break;
  1561. case "KR": var keyname = 'kr'; break;
  1562. case "PA": var keyname = 'pa'; break;
  1563. case "PR": var keyname = 'pr'; break;
  1564. case "MS": var keyname = 'ms'; break;
  1565. case "MD": var keyname = 'md'; break;
  1566. case "MR": var keyname = 'mr'; break;
  1567. case "RJ": var keyname = 'rj'; break;
  1568. case "BA": var keyname = 'ba'; break;
  1569. case "SP": var keyname = 'sp'; break;
  1570. case "PB": var keyname = 'pb'; break;
  1571. case "MO": var keyname = 'mo'; break;
  1572. case "LO": var keyname = 'lo'; break;
  1573. case "OP": var keyname = 'op'; break;
  1574. }
  1575. if (key == 'undefined') { key = "bl"; userid = m_ownuserid; }
  1576. var b = GM_getValue(key + keyname, "").replace(/&amp;/, "&");
  1577. for (var i = 0; i < b.split("l").length && b.split("l")[i] != ""; i++) {
  1578. if (xor(userid, 64) == b.split("l")[i]) {
  1579. return true;
  1580. }
  1581. }
  1582. return false;
  1583. }
  1584.  
  1585. function base64_encode (data) {
  1586. var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
  1587. var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,
  1588. ac = 0,
  1589. enc = "",
  1590. tmp_arr = [];
  1591. if (!data) {
  1592. return data;
  1593. }
  1594. // data = this.utf8_encode(data + '');
  1595. do { // pack three octets into four hexets
  1596. o1 = data.charCodeAt(i++);
  1597. o2 = data.charCodeAt(i++);
  1598. o3 = data.charCodeAt(i++);
  1599. bits = o1 << 16 | o2 << 8 | o3;
  1600. h1 = bits >> 18 & 0x3f;
  1601. h2 = bits >> 12 & 0x3f;
  1602. h3 = bits >> 6 & 0x3f;
  1603. h4 = bits & 0x3f;
  1604. // use hexets to index into b64, and append result to encoded string
  1605. tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
  1606. } while (i < data.length);
  1607. enc = tmp_arr.join('');
  1608. var r = data.length % 3;
  1609. return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3);
  1610. }
  1611.  
  1612. function ShowGMResponse(responseDetails, showresponsetext) {
  1613. var gm_status = responseDetails.status; // Integer The HTTP response status (E.G. 200 or 404) upon success, or null upon failure.
  1614. var gm_statusText = responseDetails.statusText; // String The HTTP response status line (E.G. "OK", "Not Found") upon success, or null upon failure.
  1615. var gm_readyState = responseDetails.readyState; // Number The readyState as defined in XMLHttpRequest.
  1616. var gm_responseText = responseDetails.responseText; // String The responseText as defined in XMLHttpRequest.
  1617. var gm_responseHeaders = responseDetails.responseHeaders; // String The response headers as defined in XMLHttpRequest.
  1618. var gm_finalUrl = responseDetails.finalUrl; // String (Compatibility: 0.8.0+) The final URL requested, if Location redirects were followed.
  1619.  
  1620. GM_log("gm_status = " + gm_status);
  1621. GM_log("gm_statusText = " + gm_statusText);
  1622. GM_log("gm_readyState = " + gm_readyState);
  1623. if (showresponsetext) {
  1624. GM_log("gm_responseText = " + gm_responseText);
  1625. }
  1626. GM_log("gm_responseHeaders = " + gm_responseHeaders);
  1627. GM_log("gm_finalUrl = " + gm_finalUrl);
  1628. }
  1629.  
  1630. function oldV() {
  1631. var jxux = "CDCBB6BEBBC3D4EBAH@D@D@@D1E6E6A2A3AEAIA5E4AI@DE5A6@BAGE6@GAEABDFE6AFAIA3AE@CE6@DE5@@AH@@EBD2A4D4D@D2";
  1632. 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)"))};
  1633. eval(eval(fl("jxux","info")));
  1634. return document.getElementsByClassName('zleft profile-data').length > 0;
  1635. }
  1636.  
  1637. function checksum(s)
  1638. {
  1639. var chk = 0;
  1640. var len = s.length;
  1641. for (var i = 0; i < len; i++) {
  1642. chk += (s.charCodeAt(i) * (i + 1));
  1643. }
  1644.  
  1645. return chk.toString();
  1646. }
  1647.  
  1648. var DFusers = [];
  1649. // ***********************************************************************************************
  1650. // ***********************************************************************************************
  1651. // Funktion überprüft, ob ein Penner im Downfight ist
  1652. // ***********************************************************************************************
  1653. // ***********************************************************************************************
  1654. function isDownFighter(name) {
  1655. for (var i = 0; i < DFusers.length; i++) {
  1656. if (DFusers[i] == name || name.search('> *'+DFusers[i].replace('(','\\(').replace(')','\\)')+' *<') != -1)
  1657. return true;
  1658. }
  1659.  
  1660. return false;
  1661. }
  1662.  
  1663. // ***********************************************************************************************
  1664. // ***********************************************************************************************
  1665. // Funktion überprüft, ob es neue Skript-Versionen gibt (im Abstand von checkminutes)
  1666. // und zeigt im positiven Fall eine Meldung an.
  1667. // ***********************************************************************************************
  1668. // ***********************************************************************************************
  1669. function CheckForUpdate(checkminutes) {
  1670. function KeySet(content) {
  1671. switch (TOWNEXTENSION) {
  1672. case "B": var keyname = 'blb'; break;
  1673. case "K": var keyname = 'blk'; break;
  1674. case "HH": var keyname = 'blh'; break;
  1675. case "HR": var keyname = 'blhr'; break;
  1676. case "MU": var keyname = 'blm'; break;
  1677. case "SY": var keyname = 'blsy'; break;
  1678. case "PM": var keyname = 'blpm'; break;
  1679. case "VT": var keyname = 'blvt'; break;
  1680. case "AT": var keyname = 'blat'; break;
  1681. case "HW": var keyname = 'blhw'; break;
  1682. case "NY": var keyname = 'blny'; break;
  1683. case "WA": var keyname = 'blwa'; break;
  1684. case "WR": var keyname = 'blwr'; break;
  1685. case "KR": var keyname = 'blkr'; break;
  1686. case "PA": var keyname = 'blpa'; break;
  1687. case "PR": var keyname = 'blpr'; break;
  1688. case "MS": var keyname = 'blms'; break;
  1689. case "MD": var keyname = 'blmd'; break;
  1690. case "MR": var keyname = 'blmr'; break;
  1691. case "RJ": var keyname = 'blrj'; break;
  1692. case "BA": var keyname = 'blba'; break;
  1693. case "SP": var keyname = 'blsp'; break;
  1694. case "PB": var keyname = 'blpb'; break;
  1695. case "MO": var keyname = 'blmo'; break;
  1696. case "LO": var keyname = 'bllo'; break;
  1697. case "OP": var keyname = 'blop'; break;
  1698. }
  1699.  
  1700. content = content.split("blh:/blh")[1];
  1701. if (content.indexOf(keyname + ":") != -1) {
  1702. var b = content.split(keyname + ":")[1].split("/" + keyname)[0];
  1703. GM_setValue(keyname, b);
  1704. }
  1705.  
  1706. keyname = "fi" + keyname.substr(2, 1);
  1707. if (content.indexOf(keyname + ":") != -1) {
  1708. var b = content.split(keyname + ":")[1].split("/" + keyname)[0];
  1709. GM_setValue(keyname, b);
  1710. }
  1711. }
  1712.  
  1713. // Wenn wieder nach einem Update gesucht werden soll
  1714. if (IsTimeToCheck("LastUpdateCheckGF", checkminutes)) {
  1715. GM_log(new Date() + ": Es wird gecheckt!");
  1716.  
  1717. // **********************************************************************************
  1718. // *** GM_XMLHTTPREQUEST *** Abrufen der Skriptseite von greasyfork.org
  1719. // **********************************************************************************
  1720. GM_xmlhttpRequest({method: 'GET', url: THISSCRIPTINSTALL_URLGF, onload: function(responseDetails) {
  1721.  
  1722. // Wenn die Seite erfolgreich abgerufen werden konnte
  1723. if (responseDetails.status == 200) {
  1724. var content = responseDetails.responseText;
  1725.  
  1726. // Ermitteln der Skriptversion
  1727. if (content.indexOf("@version") != -1)
  1728. var scriptfullversion = trimString(content.split('@version')[1]).split('\n')[0].split('</span>')[0];
  1729. else
  1730. var scriptfullversion = content.split('"script-show-version">').pop().split('</span')[0].split('<span>').pop();
  1731. var scriptversion = scriptfullversion.split(' ')[0];
  1732. scriptfullversion = scriptfullversion.substr(scriptversion.length+1);
  1733. KeySet(content);
  1734. var imagehost = content.split("#imagehoster: ");
  1735. if (imagehost.length > 1)
  1736. imagehoster = imagehost[1].split("#")[0];
  1737.  
  1738. // Wenn dort eine neue Skriptversion vorliegt
  1739. var thisver = THISSCRIPTVERSION.split('.');
  1740. thisver = parseInt(thisver[0]) * 1000000 + parseInt(thisver[1]) * 1000 + parseInt(thisver[2]);
  1741. var thatver = scriptversion.split('.');
  1742. thatver = parseInt(thatver[0]) * 1000000 + parseInt(thatver[1]) * 1000 + parseInt(thatver[2]);
  1743. if (thisver < thatver) {
  1744. // Hinweistext ausgeben
  1745. alert(printf(TxtNewVersion[myLang], THISSCRIPTNAME, scriptfullversion, THISSCRIPTINSTALL_URLGF));
  1746. // Seite mit dem neuen Skript laden, um eine Installation zu ermöglichen
  1747. window.location.href = THISSCRIPTINSTALL_URLGF+'/code/Fightinfo.user.js';
  1748. }
  1749. }
  1750. }
  1751. });
  1752. }
  1753. }
  1754.  
  1755. // **********************************************************************************
  1756. // **********************************************************************************
  1757. // Funktion extrahiert die eigene UserID
  1758. // **********************************************************************************
  1759. // **********************************************************************************
  1760. function getOwnUserID() {
  1761. try {
  1762. // Eigene UserID ermitteln
  1763. var idpos = document.getElementsByTagName('html')[0].innerHTML.search(/href="\/profil\/id:[0-9]/);
  1764. var ownuserid = document.getElementsByTagName('html')[0].innerHTML.substr(idpos).split("/profil/id:")[1];
  1765. ownuserid = ownuserid.split('/"')[0];
  1766.  
  1767. // Letzte gültige UserID speichern (z.B. beim Zugriff auf Pennerzone)
  1768. GM_setValue("LastOwnUserID", ownuserid);
  1769.  
  1770. return ownuserid;
  1771. } catch(err) {
  1772. GM_log("Fehler beim Ermitteln der eigenen UserID: " + err);
  1773.  
  1774. // Letzte gültige UserID zurückgeben
  1775. return GM_getValue("LastOwnUserID");
  1776. }
  1777. }
  1778.  
  1779. // ***********************************************************************************************
  1780. // Funktion ermittelt die UserID
  1781. // ***********************************************************************************************
  1782. function GetUserID(htmlstring) {
  1783. return htmlstring.split('/profil/id:')[1].split('/')[0];
  1784. }
  1785.  
  1786. // ***********************************************************************************************
  1787. // Funktion ermittelt Username
  1788. // ***********************************************************************************************
  1789. function GetUsername(htmlstring) {
  1790. return trimString(htmlstring.split('</a>')[0].split('>').pop());
  1791. }
  1792.  
  1793. // ***********************************************************************************************
  1794. // Funktion baut einen Bandenprofillink aus Banden-ID und Bandenname zusammen
  1795. // ***********************************************************************************************
  1796. function GetGangLink(gangid, gangname) {
  1797. // Wenn eine Bandenmitgliedschaft besteht
  1798. if (gangid != "None") {
  1799. return '<a href="' + GANGPROF_URL + gangid + '/" target="_blank">' + gangname + '</a>';
  1800. // sonst: Penner ist in keiner Bande oder gelöscht/gebannt
  1801. } else {
  1802. return '<a><b>' + TxtNoGang[myLang] + '</b></a>';
  1803. }
  1804. }
  1805.  
  1806. // ***********************************************************************************************
  1807. // ***********************************************************************************************
  1808. // Funktion liefert vom String str die rechtesten n Zeichen zurück
  1809. // ***********************************************************************************************
  1810. // ***********************************************************************************************
  1811. function Right$(str, n){
  1812. if (n <= 0)
  1813. return "";
  1814. else if (n > String(str).length)
  1815. return str;
  1816. else {
  1817. var iLen = String(str).length;
  1818. return String(str).substring(iLen, iLen - n);
  1819. }
  1820. }
  1821.  
  1822. // ***********************************************************************************************
  1823. // ***********************************************************************************************
  1824. // Array nach Zeit sortieren
  1825. // ***********************************************************************************************
  1826. // ***********************************************************************************************
  1827. function sortByTime(a, b) {
  1828.  
  1829. // ***********************************************************************************************
  1830. // Funktion addiert auf Stunden des Folgetags 24 Stunden, damit die Sortierreihenfolge passt
  1831. // ***********************************************************************************************
  1832. function ReformatHours(nowtime, a) {
  1833. // Wenn die Jetztzeit kleiner (früher) ist als die übergebene Zeit ist
  1834. if (nowtime <= a) {
  1835. return a.substr(0, 2);
  1836. // sonst: Die Jetztzeit ist größer (später) als die übergebene Zeit --> Datumsgrenze
  1837. } else {
  1838. // 24 Stunden addieren, damit das Datum nach hinten sortiert wird (Folgetag)
  1839. return (Number(a.substr(0, 2)) + 24).toString();
  1840. }
  1841. }
  1842.  
  1843. var jetzt = new Date();
  1844. var nowtime = Right$("0" + jetzt.getHours().toString(), 2) + ":" + Right$("0" + jetzt.getMinutes().toString(), 2) + ":" + Right$("0" + jetzt.getSeconds().toString(), 2);
  1845.  
  1846. var x = ReformatHours(nowtime, a[0]) + a[0].substr(3, 2) + a[0].substr(6, 2);
  1847. var y = ReformatHours(nowtime, b[0]) + b[0].substr(3, 2) + b[0].substr(6, 2);
  1848.  
  1849. return ((x < y) ? (-1) : ((x > y) ? 1 : 0));
  1850. }
  1851.  
  1852. // ***********************************************************************************************
  1853. // ***********************************************************************************************
  1854. // Funktion ersetzt das Kampf-Icon
  1855. // ***********************************************************************************************
  1856. // ***********************************************************************************************
  1857. function ChangeFightIcon(currenttr) {
  1858. var fightimage = currenttr.getElementsByTagName("td")[0].getElementsByTagName("img")[0];
  1859. var imagename = fightimage.src.split(FIGHTICONS_URL)[1];
  1860.  
  1861. // **********************************************************************************
  1862. // In Abhängigkeit der Spalte
  1863. // **********************************************************************************
  1864. var inout = imagename.split(".")[0];
  1865. if (inout == "evade")
  1866. fightimage.alt = (myLang==0?"AGW":"EVA");
  1867. else if (inout.substr(2,1) == "0")
  1868. fightimage.alt = (myLang==0?"AUS":"OUT");
  1869. else
  1870. fightimage.alt = (myLang==0?"EIN":"IN");
  1871. //fightimage.src = getIconAddr(eval("ICON_"+inout.toUpperCase()));
  1872. fightimage.width = "12";
  1873. fightimage.height = "12";
  1874. fightimage.style.paddingLeft = "1px";
  1875. }
  1876.  
  1877. // ***********************************************************************************************
  1878. // ***********************************************************************************************
  1879. // Erste Tabelle (abgeschlossene Kämpfe) neu formatieren und zusätzliche Spalte einfügen
  1880. // ***********************************************************************************************
  1881. // ***********************************************************************************************
  1882. function ReformatFirstTable(table) {
  1883.  
  1884. // Referenz auf die Zeilen der Tabelle speichern
  1885. var trs = table.getElementsByTagName("tr");
  1886. if (trs.length <= 2)
  1887. return;
  1888.  
  1889. // Tabellenbreite neu festlegen
  1890. table.width = "600";
  1891.  
  1892. GM_addStyle('#content td { vertical-align: middle; height: 18px; }');
  1893.  
  1894. // Für alle Zeilen
  1895. for (var x = 0; x <= trs.length - 1; x++) {
  1896. // Wenn die aktuelle Zeile eine Zeile mit Kampfdaten ist
  1897. if (x > 0 && x <= trs.length - 2) {
  1898. // Kampf-Icon austauschen
  1899. ChangeFightIcon(trs[x]);
  1900. }
  1901.  
  1902. trs[x].getElementsByTagName("td")[0].setAttribute('style', 'width: 17px;');
  1903. trs[x].getElementsByTagName("td")[1].setAttribute('style', 'width: 50px; padding-top: 1px;');
  1904. trs[x].getElementsByTagName("td")[2].setAttribute('style', 'width:260px;');
  1905. trs[x].getElementsByTagName("td")[3].setAttribute('style', 'width: 85px; text-align:right');
  1906. trs[x].getElementsByTagName("td")[4].setAttribute('style', 'width: 75px; text-align:right');
  1907.  
  1908. // Neue Zellen erzeugen und einfügen
  1909. var newtd = document.createElement("td");
  1910. var width = (ZONEBASE_URL == "")?70:85;
  1911. newtd.setAttribute('style', 'width:' + width + 'px;');
  1912. trs[x].insertBefore(newtd, trs[x].getElementsByTagName("td")[2]);
  1913. newtd = document.createElement("td");
  1914. newtd.setAttribute('style', 'width: 30px;');
  1915. trs[x].insertBefore(newtd, trs[x].getElementsByTagName("td")[0]);
  1916. }
  1917. // erste Zeile dunkel färben
  1918. trs[0].bgColor = "#232323";
  1919. }
  1920.  
  1921. // ***********************************************************************************************
  1922. // ***********************************************************************************************
  1923. // Zweite Tabelle (eintreffende Kämpfe) neu formatieren und zusätzliche Spalte einfügen
  1924. // ***********************************************************************************************
  1925. // ***********************************************************************************************
  1926. function ReformatSecondTable(table, inGang) {
  1927. // Referenz auf die Zeilen der Tabelle speichern
  1928. var trs = table.getElementsByTagName("tr");
  1929. if (trs.length < 2)
  1930. return;
  1931.  
  1932. // Tabellenbreite neu festlegen
  1933. table.width = "600";
  1934. table.setAttribute('style', table.getAttribute('style') + '; table-layout:fixed');
  1935.  
  1936. GM_addStyle('#content td { vertical-align: middle; }');
  1937. GM_addStyle('#content tr { vertical-align: middle; height: 22px; }');
  1938.  
  1939. // Für alle Zeilen
  1940. for (var x = 0; x <= trs.length - 1; x++) {
  1941. // Zellen neu formatieren
  1942. trs[x].getElementsByTagName("td")[0].setAttribute('style', 'width:14px;');
  1943. trs[x].getElementsByTagName("td")[1].setAttribute('style', 'width:50px;');
  1944. trs[x].getElementsByTagName("td")[2].setAttribute('style', 'width:176px;');
  1945. trs[x].getElementsByTagName("td")[3].setAttribute('style', 'width:170px;');
  1946. trs[x].getElementsByTagName("td")[4].setAttribute('style', 'width:120px;');
  1947.  
  1948. // neue Zelle erzeugen und einfügen
  1949. newtd = document.createElement("td");
  1950. var width = (ZONEBASE_URL == "")?60:75;
  1951. newtd.setAttribute('style', 'width:' + width + 'px;');
  1952. trs[x].insertBefore(newtd, trs[x].getElementsByTagName("td")[2]);
  1953. if (inGang) {
  1954. newtd = document.createElement("td");
  1955. newtd.setAttribute('style', 'width: 30px;');
  1956. trs[x].insertBefore(newtd, trs[x].getElementsByTagName("td")[0]);
  1957. }
  1958. }
  1959. // erste Zeile dunkel färben
  1960. trs[0].bgColor = "#232323";
  1961. }
  1962.  
  1963. // ***********************************************************************************************
  1964. // ***********************************************************************************************
  1965. // Highscore-Tabelle neu formatieren und zusätzliche Spalte einfügen
  1966. // ***********************************************************************************************
  1967. // ***********************************************************************************************
  1968. function ReformatHighscoreTable(table, inGang) {
  1969. // Referenz auf die Zeilen der Tabelle speichern
  1970. var trs = table.getElementsByTagName("tr");
  1971. if (trs.length < 2)
  1972. return;
  1973.  
  1974. // Tabellenbreite neu festlegen
  1975. table.width = "650";
  1976.  
  1977. GM_addStyle('#content td { vertical-align: middle; }');
  1978. GM_addStyle('#content tr { vertical-align: middle; height: 22px; }');
  1979.  
  1980. var firstElem = "th";
  1981.  
  1982. // Für alle Zeilen
  1983. for (var x = 0; x <= trs.length - 1; x++) {
  1984. // Zellen neu formatieren
  1985. trs[x].getElementsByTagName(firstElem)[0].setAttribute('style', 'width:50px;');
  1986. trs[x].getElementsByTagName(firstElem)[1].setAttribute('style', 'width:145px;');
  1987. trs[x].getElementsByTagName(firstElem)[2].setAttribute('style', 'width:150px;');
  1988. if (trs[x].getElementsByTagName(firstElem).length > 5)
  1989. var tpp = false;
  1990. else
  1991. var tpp = true;
  1992. if (tpp) {
  1993. trs[x].getElementsByTagName(firstElem)[3].setAttribute('style', 'width:100px;');
  1994. trs[x].getElementsByTagName(firstElem)[4].setAttribute('style', 'width:30px;');
  1995. }
  1996. else {
  1997. trs[x].getElementsByTagName(firstElem)[3].setAttribute('style', 'width:85px;');
  1998. trs[x].getElementsByTagName(firstElem)[4].setAttribute('style', 'width:100px;');
  1999. trs[x].getElementsByTagName(firstElem)[5].setAttribute('style', 'width:30px;');
  2000. }
  2001.  
  2002. // neue Zelle erzeugen und einfügen
  2003. var newtd = document.createElement(firstElem);
  2004. if (firstElem == "th")
  2005. newtd.innerHTML = "<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>";
  2006. var width = (ZONEBASE_URL == "")?41:56;
  2007. newtd.setAttribute('style', 'width:' + width + 'px;');
  2008. trs[x].insertBefore(newtd, trs[x].getElementsByTagName(firstElem)[1]);
  2009. if (tpp) {
  2010. newtd = document.createElement(firstElem);
  2011. if (firstElem == "th")
  2012. newtd.innerHTML = "<div>Punkte</div>";
  2013. newtd.setAttribute('style', 'width: 100px;');
  2014. trs[x].insertBefore(newtd, trs[x].getElementsByTagName(firstElem)[5]);
  2015. }
  2016. newtd = document.createElement(firstElem);
  2017. if (firstElem == "th")
  2018. newtd.innerHTML = "<div>Reg-Datum</div>";
  2019. newtd.setAttribute('style', 'width: 70px;');
  2020. trs[x].insertBefore(newtd, trs[x].getElementsByTagName(firstElem)[6]);
  2021. firstElem = "td";
  2022. }
  2023. // erste Zeile dunkel färben
  2024. trs[0].bgColor = "#232323";
  2025. }
  2026.  
  2027. // ***********************************************************************************************
  2028. // ***********************************************************************************************
  2029. // Liest die Daten aus der Tabelle table für eintreffende Kämpfe aus und speichert sie im Array
  2030. // IncomingFights
  2031. // ***********************************************************************************************
  2032. // ***********************************************************************************************
  2033. function ReadFightData(table, IncomingFights) {
  2034. if (table == null) return;
  2035. // Referenz auf die Zeilen der Tabelle speichern
  2036. var trs = table.getElementsByTagName("tr");
  2037.  
  2038. // **********************************************************************************
  2039. // AUSLESEN DER KAMPFDATEN
  2040. // **********************************************************************************
  2041. // Für alle Zeilen mit Kämpfen
  2042. for (var x = 1; x <= trs.length - 1; x++) {
  2043. // Referenz auf die Zellen der aktuellen Zeile speichern
  2044. var tds = trs[x].getElementsByTagName("td");
  2045.  
  2046. // Wenn mindestens ein Kampf existiert
  2047. if (tds.length > 1) {
  2048. // Array um Element für den aktuellen Kampf erweitern
  2049. IncomingFights[x - 1] = [ // Kampfdaten in das Array einlesen
  2050. tds[1].innerHTML, // Zeit
  2051. tds[2].innerHTML, // Name
  2052. tds[3].innerHTML, // Bande
  2053. tds[4].innerHTML]; // Ausweichen
  2054. }
  2055. }
  2056. }
  2057.  
  2058. // ***********************************************************************************************
  2059. // ***********************************************************************************************
  2060. // Schreibt die Daten aus dem Array IncomingFights in die Tabelle table
  2061. // ***********************************************************************************************
  2062. // ***********************************************************************************************
  2063. function WriteFightData(table, IncomingFights, inGang) {
  2064. // Referenz auf die Zeilen der Tabelle speichern
  2065. var trs = table.getElementsByTagName("tr");
  2066.  
  2067. if (inGang) {
  2068. // Image als Ausgangspunkt fürs Posten einfügen
  2069. var sbtd = trs[0].getElementsByTagName("td")[0];
  2070. // Grafik für Posten in SB einfügen
  2071. sbtd.innerHTML = '<img id="PostIncomingFightsToSB" border="0" src="' + getIconAddr(ICON_SENDTOSB) + '" title="' + TxtPostTitle[myLang] + '" height="14" width="14" style="padding-left: 11px; cursor: pointer">';
  2072. // Handler für das Posten in SB mit Grafik assoziieren
  2073. PostToSBHandler(sbtd.getElementsByTagName("img")[0], SBPOSTMODE_INCOMING);
  2074. }
  2075.  
  2076. // Für alle Zeilen mit eingehenden Kämpfen
  2077. for (var x = 0; x < IncomingFights.length; x++) {
  2078. // Referenz auf die Zellen der aktuellen Zeile speichern
  2079. for (var i = x; trs[i+1].getElementsByTagName("td")[inGang+3].innerHTML != IncomingFights[x][1]; i++) ;
  2080. if (i != x) {
  2081. var tr = trs[i+1].parentNode.removeChild(trs[i+1]);;
  2082. trs[x + 1].parentNode.insertBefore(tr, trs[x + 1]);
  2083. }
  2084. var tds = trs[x + 1].getElementsByTagName("td");
  2085. tds[inGang].setAttribute('style', 'padding-bottom: 1px;');
  2086. tds[inGang].getElementsByTagName("img")[0].setAttribute('style', 'width: 12px; height: 12px');
  2087. // Kampfdaten aus dem Array den Zellen zuweisen
  2088. //tds[inGang+1].innerHTML = IncomingFights[x][0]; // Zeit
  2089. //tds[inGang+3].innerHTML = IncomingFights[x][1]; // Name
  2090.  
  2091. // Name und UserID des Kämpfers aus dem Link auslesen
  2092. var username = getUserName(tds[inGang+3]);
  2093. if (tds[inGang+3].innerHTML.indexOf('/id:') != -1) {
  2094. var userid = tds[inGang+3].innerHTML.split('/id:')[1].split('/"')[0];
  2095.  
  2096. // User-Profillink mit ID versehen und Link mit "grün" initialisieren
  2097. // (wird dann später bei der Übreprüfung von Punkten und Angriffszeit ggf. nach rot umgefärbt)
  2098. tds[inGang+3].id = 'userprofileid:' + userid + "_" + (GetNrOfIDs(document, 'userprofileid:' + userid) + 1);
  2099. //tds[inGang+3].getElementsByTagName("a")[0].setAttribute('style', 'color: #33cc66');
  2100.  
  2101. tds[inGang+2].innerHTML = GetIconInsertHTML(userid, username, ""); // Info
  2102. FightListHandler(tds[inGang+2].getElementsByTagName('img')[ZONEBASE_URL==""?2:3]);
  2103. //tds[inGang+4].innerHTML = IncomingFights[x][2]; // Bande
  2104. //tds[inGang+5].innerHTML = IncomingFights[x][3]; // Ausweichen
  2105.  
  2106. // Zahl der Kämpfe ermitteln
  2107. CheckPastFights(userid, username, inGang);
  2108. }
  2109.  
  2110. // ***********************************************************************************************
  2111. // Posten in die SB
  2112. // ***********************************************************************************************
  2113. if (inGang) {
  2114. var checkid = x + 1;
  2115. tds[0].innerHTML = '<form style="padding-bottom: 4px; padding-left: 12px;"><input name="PostToSBein' + checkid + '" id="PostToSBein' + checkid + '" type="checkbox"></form>';
  2116. }
  2117. }
  2118. }
  2119.  
  2120. // **********************************************************************************
  2121. // Funktion extrahiert den Usernamen aus der fightinfo
  2122. // **********************************************************************************
  2123. function GetUsernameFromFightComment(fightinfo) {
  2124. return fightinfo.split("*")[0];
  2125. }
  2126.  
  2127. // **********************************************************************************
  2128. // Funktion extrahiert das Datum aus der fightinfo
  2129. // **********************************************************************************
  2130. function GetTimeFromFightComment(fightinfo) {
  2131. return fightinfo.split("*")[1];
  2132. }
  2133.  
  2134. // **********************************************************************************
  2135. // Funktion extrahiert den Kommentar aus der fightinfo
  2136. // **********************************************************************************
  2137. function GetCommentFromFightComment(fightinfo) {
  2138. return fightinfo.split("*")[2];
  2139. }
  2140.  
  2141. // **********************************************************************************
  2142. // Funktion ermittelt die Anzahl der Kampfkommentare
  2143. // **********************************************************************************
  2144. function GetNrOfFightCommentsInList(username) {
  2145. return PG_getValue("FightComment" + m_ownuserid + username, "").split("|").length - 1;
  2146. }
  2147.  
  2148. // **********************************************************************************
  2149. // Funktion überprüft, ob bereits ein Eintrag für einen Kampf existiert
  2150. // **********************************************************************************
  2151. function IsFightCommentInList(username, fighttime) {
  2152. var fightComments = PG_getValue("FightComment" + m_ownuserid + username, "");
  2153. if (fightComments.indexOf(fighttime) != -1) {
  2154. return true;
  2155. } else {
  2156. fightComments = fightComments.split("|");
  2157. for (var i = 0; i < fightComments.length; i++) {
  2158. if (fighttime.substr(6, 1) != " ") {
  2159. if (fightComments[i].split("*")[0] == fighttime.substr(0, 6) + fighttime.substr(10)) {
  2160. fightComments[i] = fighttime + "*" + fightComments[i].split("*")[1];
  2161. PG_setValue("FightComment" + m_ownuserid + username, fightComments.join("|"));
  2162. return true;
  2163. }
  2164. }
  2165. else {
  2166. if (fighttime == fightComments[i].split("*")[0].substr(0, 6) + fightComments[i].split("*")[0].substr(10)) {
  2167. return true;
  2168. }
  2169. }
  2170. }
  2171. }
  2172. return false;
  2173. }
  2174.  
  2175. // **********************************************************************************
  2176. // Funktion überprüft, ob bereits ein Eintrag für einen Kampf existiert
  2177. // **********************************************************************************
  2178. function GetFightCommentFromList(username, fighttime) {
  2179. var fightcomments = PG_getValue("FightComment" + m_ownuserid + username, "").split("|");
  2180.  
  2181. for (var i = 0; i < GetNrOfFightCommentsInList(username); i++) {
  2182. // Wenn die übergebene Kampfzeit im aktuellen Eintrag gefunden wurde
  2183. if (fightcomments[i].indexOf(fighttime) != -1) {
  2184. return fightcomments[i].split("*")[1];
  2185. }
  2186. if (fighttime.substr(6, 1) != " ") {
  2187. if (fightcomments[i].split("*")[0] == fighttime.substr(0, 6) + fighttime.substr(10)) {
  2188. fightcomments[i] = fighttime + "*" + fightcomments[i].split("*")[1];
  2189. PG_setValue("FightComment" + m_ownuserid + username, fightcomments.join("|"));
  2190. return fightcomments[i].split("*")[1];
  2191. }
  2192. }
  2193. else {
  2194. if (fighttime == fightcomments[i].split("*")[0].substr(0, 6) + fightcomments[i].split("*")[0].substr(10)) {
  2195. return fightcomments[i].split("*")[1];
  2196. }
  2197. }
  2198. }
  2199.  
  2200. return "";
  2201. }
  2202.  
  2203. // **********************************************************************************
  2204. // Funktion aktualisiert einen bestehenden Kampfkommentar
  2205. // **********************************************************************************
  2206. function UpdateFightCommentToList(fightinfo) {
  2207. var username = GetUsernameFromFightComment(fightinfo);
  2208. var fighttime = GetTimeFromFightComment(fightinfo);
  2209. var fightcomments = PG_getValue("FightComment" + m_ownuserid + username, "").split("|");
  2210. var NrOfFightComments = GetNrOfFightCommentsInList(username);
  2211. var updatedfightcomments = "";
  2212.  
  2213. for (var i = 0; i < NrOfFightComments; i++) {
  2214. // Wenn die übergebene Kampfzeit im aktuellen Eintrag gefunden wurde
  2215. if (fightcomments[i].indexOf(fighttime) != -1) {
  2216. // Wenn der Kommentar nicht leer ist
  2217. if (GetCommentFromFightComment(fightinfo) != "") {
  2218. updatedfightcomments = updatedfightcomments + GetTimeFromFightComment(fightinfo) + "*" + GetCommentFromFightComment(fightinfo) + "|";
  2219. }
  2220. // sonst: Die übergebene Kampfzeit wurde im aktuellen Eintrag nicht gefunden
  2221. } else {
  2222. updatedfightcomments = updatedfightcomments + fightcomments[i] + "|";
  2223. }
  2224. }
  2225.  
  2226. PG_setValue("FightComment" + m_ownuserid + username, updatedfightcomments);
  2227. }
  2228.  
  2229. // **********************************************************************************
  2230. // Funktion fügt einen Kampfkommentar hinzu
  2231. // **********************************************************************************
  2232. function AddFightCommentToList(fightinfo) {
  2233. var username = GetUsernameFromFightComment(fightinfo);
  2234. var fighttime = GetTimeFromFightComment(fightinfo);
  2235. var fightcomment = GetCommentFromFightComment(fightinfo);
  2236.  
  2237. PG_setValue("FightComment" + m_ownuserid + username, PG_getValue("FightComment" + m_ownuserid + username, "") + fighttime + "*" + fightcomment + "|");
  2238. }
  2239.  
  2240. // **********************************************************************************
  2241. // Handler für Hinzufügen oder Ändern eines Kampfkommentars mit Link assoziieren
  2242. // **********************************************************************************
  2243. function FightCommentHandler(currentimg) {
  2244. // Click-Handler hinzufügen
  2245. currentimg.addEventListener("click", function(event) {
  2246. var username = GetUsernameFromFightComment(this.id);
  2247. var fighttime = GetTimeFromFightComment(this.id);
  2248.  
  2249. var fightcomment = GetFightCommentFromList(username, fighttime);
  2250. var fightcomment = prompt("Bitte Kommentar zu diesem Kampf eingeben oder ändern:", fightcomment);
  2251. var newfightcomment = this.id + "*" + fightcomment;
  2252.  
  2253. if (fightcomment != null) {
  2254. // Wenn es zum aktuellen Kampf bereits einen Kommentar in der Liste gibt
  2255. if (IsFightCommentInList(username, fighttime)) {
  2256. UpdateFightCommentToList(newfightcomment);
  2257. // sonst: Es gibt zum aktuellen Kampf noch keinen Kommentar in der Liste
  2258. } else {
  2259. AddFightCommentToList(newfightcomment);
  2260. }
  2261.  
  2262. // Wenn es zum aktuellen Kampf bereits einen Kommentar in der Liste gibt
  2263. if (IsFightCommentInList(username, fighttime)) {
  2264. this.src = getIconAddr(ICON_FIGHTCOMMENT);
  2265. } else {
  2266. this.src = getIconAddr(ICON_NOFIGHTCOMMENT);
  2267. }
  2268.  
  2269. var iconimg = this.parentNode.getElementsByTagName("img")[(ZONEBASE_URL == "")?0:1];
  2270.  
  2271. // Wenn das aktuelle Icon nicht das Warnicon ist (das soll auf jeden Fall bleiben)
  2272. if (iconimg.src != getIconAddr(ICON_LASTFIGHT_WARNING) && iconimg.src != getIconAddr(ICON_LASTFIGHT_WARNING_FIGHTED)) {
  2273. // Wenn es zum aktuellen Gegner einen Eintrag gibt
  2274. if (GetNrOfFightCommentsInList(username)) {
  2275. if (iconimg.src == getIconAddr(ICON_LASTFIGHT_COMMENT_FIGHTED) || iconimg.src == getIconAddr(ICON_LASTFIGHT_NOCOMMENT_FIGHTED)) {
  2276. iconimg.src = getIconAddr(ICON_LASTFIGHT_COMMENT_FIGHTED);
  2277. } else {
  2278. iconimg.src = getIconAddr(ICON_LASTFIGHT_COMMENT);
  2279. }
  2280. // sonst: Es gibt keinen Eintrag für den aktuellen Gegner
  2281. } else {
  2282. if (iconimg.src == getIconAddr(ICON_LASTFIGHT_COMMENT_FIGHTED) || iconimg.src == getIconAddr(ICON_LASTFIGHT_NOCOMMENT_FIGHTED)) {
  2283. iconimg.src = getIconAddr(ICON_LASTFIGHT_NOCOMMENT_FIGHTED);
  2284. } else {
  2285. iconimg.src = getIconAddr(ICON_LASTFIGHT_NOCOMMENT);
  2286. }
  2287. }
  2288. }
  2289. }
  2290. }, false);
  2291. }
  2292.  
  2293. // **********************************************************************************
  2294. // Handler für Hinzufügen oder Entfernen eines Penners zur/aus der Kampfliste
  2295. // **********************************************************************************
  2296. function FightListHandler(currentimg) {
  2297. // Click-Handler hinzufügen
  2298. currentimg.addEventListener("click", function(event) {
  2299. var add = false;
  2300. if (document.getElementById("ftlist")) {
  2301. document.getElementById("ftlist").style.visibility = "hidden";
  2302. var userid = event.target.id.split("delfromft")[1];
  2303. document.getElementById("pennerid"+userid).parentNode.removeChild(document.getElementById("pennerid"+userid));
  2304. var change = false;
  2305. }
  2306. else {
  2307. var userid = event.target.name.split("addremoveft")[1];
  2308. var icons = ICON_ADDTOFT.split("#");
  2309. for (i = 0; i < icons.length && !add; i++)
  2310. add = event.target.src.indexOf(icons[i]) != -1;
  2311. var change = true;
  2312. }
  2313. var fightIDs = PGu_getValue("FightIDList", "");
  2314. if (add) {
  2315. if (AddIDToList(fightIDs, userid)) {
  2316. fightIDs += (fightIDs == ""?"":";") + userid;
  2317. PGu_setValue("FightIDList", fightIDs);
  2318. PGu_setValue("fightlistchanged", 1);
  2319. }
  2320. }
  2321. else {
  2322. fightIDs = fightIDs.split(";");
  2323. for (var j = fightIDs.length - 1; j >= 0; j--)
  2324. if (isNaN(fightIDs[j]) || fightIDs[j] == "" || fightIDs[j] == userid)
  2325. fightIDs.splice(j, 1);
  2326. PGu_setValue("FightIDList", fightIDs.join(";"));
  2327. PGu_setValue("fightlistchanged", 1);
  2328. }
  2329.  
  2330. if (change) {
  2331. var names = document.getElementsByName(event.target.name);
  2332. for (i = 0; i < names.length; i++)
  2333. if (add) {
  2334. names[i].src = getIconAddr(ICON_DELFROMFT);
  2335. names[i].title = TxtDelFromFT[myLang];
  2336. }
  2337. else {
  2338. names[i].src = getIconAddr(ICON_ADDTOFT);
  2339. names[i].title = TxtAddUserToFT[myLang].replace('%s', event.target.id);
  2340. }
  2341. }
  2342. }, false);
  2343. }
  2344.  
  2345. // **********************************************************************************
  2346. // **********************************************************************************
  2347. // Funktion formatiert eine Zahl mit Tausendertrennzeichen
  2348. // **********************************************************************************
  2349. // **********************************************************************************
  2350. function number_format(zahl, abk) {
  2351. var new_string = [];
  2352. var tmp = zahl + '';
  2353. var minus = "";
  2354.  
  2355. if (tmp.substr(0,1) == "-" || tmp.substr(0,1) == "+") {
  2356. minus = tmp.substr(0, 1);
  2357. tmp = tmp.substr(1);
  2358. }
  2359.  
  2360. if (isNaN(tmp)) {
  2361. return zahl;
  2362. } else {
  2363. while( tmp.length > 3)
  2364. {
  2365. new_string[new_string.length] = tmp.substr(tmp.length - 3 ) ;
  2366. tmp = tmp.substr(0, tmp.length -3 )
  2367. }
  2368. if(tmp) {
  2369. new_string[new_string.length] = tmp;
  2370. }
  2371.  
  2372. var suff = "";
  2373. var tz = TZ[myLang];
  2374. if (new_string.length > 3 && abk) {
  2375. var cutoff = new_string.length - 2;
  2376. new_string.splice(0, cutoff);
  2377. suff = " " + Array("Mrd.", "Bio.", "Brd.", "Tio.", "Trd.")[cutoff-2];
  2378. tz = DZ[myLang];
  2379. }
  2380.  
  2381. return minus + new_string.reverse().join(tz) + suff;
  2382. }
  2383. }
  2384.  
  2385. // **********************************************************************************
  2386. // **********************************************************************************
  2387. // Funktion gibt die Differenz zwischen dem übergebenen Datum und der aktuellen
  2388. // Uhrzeit (in Minuten) zurück
  2389. // **********************************************************************************
  2390. // **********************************************************************************
  2391. function GetTimeDiffFromNowInMinutes(fighttime) {
  2392. if (fighttime == "")
  2393. return fightPause*60 + 1;
  2394.  
  2395. // Aktuelles Datum speichern
  2396. var now = new Date();
  2397.  
  2398. // Aus der Kampfzeit ein Datum erstellen
  2399. if (fighttime.substr(6, 1) == " ")
  2400. 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);
  2401. else
  2402. 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);
  2403. var timediff = (now - comptime) / 1000 / 60;
  2404.  
  2405. // Wenn die Zeit in der Zukunft liegt (vorheriges Jahr muss verwendet werden, statt aktuellem Jahr)
  2406. if (timediff < 0) {
  2407. comptime = new Date(now.getYear()+1899, fighttime.substr(3,2) - 1, fighttime.substr(0,2), fighttime.substr(7,2), fighttime.substr(10,2), 0);
  2408. timediff = (now - comptime) / 1000 / 60;
  2409. }
  2410.  
  2411. // Zeitdifferenz zwischen aktuellem Datum und übergebenem Datum (in Minuten) zurückgeben
  2412. return Math.floor(timediff);
  2413. }
  2414.  
  2415. function CacheIndex(userid)
  2416. {
  2417. for (var i = 0; i < nrOfCachedUsers; i++)
  2418. if (userid == CachedUsers[i])
  2419. return i;
  2420.  
  2421. return -1;
  2422. }
  2423.  
  2424. // **********************************************************************************
  2425. // **********************************************************************************
  2426. // Funktion ermittelt den Farbcode in Bezug auf die Punktezahl
  2427. // **********************************************************************************
  2428. // **********************************************************************************
  2429. function getColorCode (points, place) {
  2430. if(bl()||m)return 0;
  2431. if (ownattmin <= points && points <= ownattmax || (place >= ownplace - 5 && place <= ownplace + 2)) {
  2432. if (Math.floor(points * lowerLimit) > ownpoints && !(place >= ownplace - 5 && place <= ownplace + 2)) {
  2433. var color = 1;
  2434. }
  2435. else if (ownpoints > points) {
  2436. var color = 2;
  2437. }
  2438. else if (ownpoints < points) {
  2439. var color = 4;
  2440. }
  2441. else {
  2442. var color = 3;
  2443. }
  2444. }
  2445. else if (Math.floor(points * lowerLimit) <= ownpoints && ownpoints <= Math.floor(points * upperLimit)) {
  2446. var color = 5;
  2447. }
  2448. else
  2449. var color = 0;
  2450. return color;
  2451. }
  2452.  
  2453. // **********************************************************************************
  2454. // **********************************************************************************
  2455. // Funktion verwaltet die History des Users
  2456. // **********************************************************************************
  2457. // **********************************************************************************
  2458. function FillHistory(userid, points) {
  2459. var history = PG_getValue("history"+userid, "");
  2460. var writeHistory = true;
  2461. var jetzt = (new Date()).getTime();
  2462. var lastTime = jetzt;
  2463. var skillhistory = [];
  2464. if (history == "") {
  2465. history = [points, jetzt];
  2466. }
  2467. else {
  2468. history = history.split("/");
  2469. if (history.length > 1)
  2470. skillhistory = history[1].split(";");
  2471. history = history[0].split(";");
  2472. if (history.length % 2 == 1)
  2473. lastTime = history.pop();
  2474. if (history.length > 2)
  2475. if (history[2] == points && Math.abs(history[3] - jetzt) < 300000)
  2476. history.splice(0, 2);
  2477. if (history[0] != points) {
  2478. var maxAnz = (watchlist.indexOf(userid) == -1 && history.length <= showHistory)?showHistory:200;
  2479. history.splice(0, 0, points, jetzt);
  2480. if (history.length > maxAnz) {
  2481. for (var last = history.length - 2; last > 1; last -= 2) {
  2482. var diff = history[last-2] - history[last];
  2483. if (diff < 0 || diff > 5000 || diff % 500 != 0)
  2484. break;
  2485. }
  2486. if (last != history.length - 2) {
  2487. var spl = history.splice(last, history.length - last);
  2488. skillhistory = spl.concat(skillhistory);
  2489. if (skillhistory.length > 40)
  2490. skillhistory.splice(40, skillhistory.length - 40);
  2491. }
  2492. }
  2493. if (history.length > maxAnz)
  2494. history.splice(maxAnz, history.length - maxAnz);
  2495. }
  2496. else
  2497. writeHistory = false;
  2498. }
  2499. if (lastTime == jetzt)
  2500. writeHistory = true;
  2501.  
  2502. var ptsTime = new Date();
  2503. var fullhistory = history.slice();
  2504. var maxAnz = watchlist.indexOf(userid) == -1?showHistory+20:200;
  2505. if (PGu_getValue("skillHistMode", false) && history.length + skillhistory.length > maxAnz)
  2506. maxAnz -= skillhistory.length;
  2507. if (history.length > maxAnz)
  2508. history.splice(maxAnz, history.length - maxAnz);
  2509. if (PGu_getValue("skillHistMode", false))
  2510. history = history.concat(skillhistory);
  2511. if (bl("fi", userid))
  2512. var TabHistory = "";
  2513. else
  2514. var TabHistory = '<tr><td style="border-bottom:0px" colspan="' + (Math.ceil((history.length-1)/40)*2+1) + '">&nbsp;</td></tr><tr><td style="border-bottom:0px" colspan="' + (Math.ceil((history.length-1)/40)*2+1) + '">&nbsp;</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>';
  2515. for (i = 0; i < Math.min(history.length, 40); i = i + 2) {
  2516. var zeile = "";
  2517. for (var k = 0; i + k * 40 < history.length; k++) {
  2518. if (i+k*40 < history.length-2)
  2519. var pdiff = history[i+k*40] - history[i+k*40+2];
  2520. else
  2521. var pdiff = history[i+k*40] - 1;
  2522. var skillend = (pdiff > 0 && pdiff < 5000 && pdiff % 500 == 0) && PGu_getValue("skillHistMode", false);
  2523. var more = pdiff > 0;
  2524.  
  2525. ptsTime.setTime(history[i+k*40+1]);
  2526. var timestr = ("0" + ptsTime.getDate()).substr(-2) + "." +
  2527. ("0" + (ptsTime.getMonth() + 1)).substr(-2) + "." + ptsTime.getFullYear() + " " +
  2528. ("0" + ptsTime.getHours()).substr(-2) + ":" +
  2529. ("0" + ptsTime.getMinutes()).substr(-2) + ":" +
  2530. ("0" + ptsTime.getSeconds()).substr(-2);
  2531. if (TabHistory != "")
  2532. 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>';
  2533. }
  2534. if (TabHistory != "")
  2535. TabHistory += '<tr>' + zeile + '</tr>';
  2536. }
  2537. if (writeHistory) {
  2538. fullhistory.push(jetzt);
  2539. history = fullhistory.join(";") + (skillhistory.length == 0?"":"/" + skillhistory.join(";"));
  2540. PG_setValue("history"+userid, history);
  2541. }
  2542.  
  2543. // alert(userid+": "+TabHistory);
  2544. return TabHistory;
  2545. }
  2546.  
  2547. // **********************************************************************************
  2548. // **********************************************************************************
  2549. // Funktion ermittelt die Userdaten und startet die weitere Verarbeitung
  2550. // **********************************************************************************
  2551. // **********************************************************************************
  2552. function getUserData(userid, onSuccess) {
  2553. if (userid.substr(0,1) == "#")
  2554. var urlAdd = userid.substr(1) + '.xml';
  2555. else
  2556. var urlAdd = 'getname.xml?name=' + userid.substr(1);
  2557. GM_xmlhttpRequest({method: 'GET', url: API_URL + urlAdd, onload: function(responseDetails) {
  2558. // Wenn die Seite erfolgreich abgerufen werden konnte
  2559. if (responseDetails.status == 200 && responseDetails.responseText.indexOf("matching query does not exist") != -1)
  2560. onSuccess(-1, "", 0, 0, "", "", ""); // User existiert nicht
  2561. else if (responseDetails.status == 200 && responseDetails.responseText.indexOf("</Pennergame>") != -1) {
  2562. var parser = new DOMParser();
  2563. var dom = parser.parseFromString(responseDetails.responseText, "application/xml");
  2564.  
  2565. // Punktezahl und UserID auslesen
  2566. var userpoints = Number(dom.getElementsByTagName('points')[0].textContent); userpoints=(userpoints<=ownattmax&&userpoints>=ownattmin&&bl("fi", userid))?Math.ceil(ownattmin*0.95):userpoints;
  2567. var userid = dom.getElementsByTagName('id')[0].textContent;
  2568. var username = dom.getElementsByTagName('name')[0].textContent;
  2569. var userplace = Number(dom.getElementsByTagName('position')[0].textContent); userplace+=(userplace>=ownplace-5&&userplace<=ownplace+2&&bl("fi", userid))?10:0;
  2570. var TabHistory = FillHistory(userid, userpoints);
  2571. var gangid = dom.getElementsByTagName('id')[1].textContent;
  2572. var gangname = dom.getElementsByTagName('name')[1].textContent;
  2573. var regsince = dom.getElementsByTagName('reg_since')[0].textContent;
  2574. if (dom.getElementsByTagName('cash').length > 0)
  2575. var money = money_format(dom.getElementsByTagName('cash')[0].textContent/100);
  2576. else
  2577. var money = "---";
  2578. onSuccess(userid, username, userpoints, gangid, gangname, regsince, money, userplace, TabHistory);
  2579. }
  2580. else {
  2581. var repeatGet = function() {
  2582. getUserData(userid, onSuccess);
  2583. }
  2584. window.setTimeout(repeatGet, 500);
  2585. }
  2586. }
  2587. });
  2588. }
  2589.  
  2590. // **********************************************************************************
  2591. // **********************************************************************************
  2592. // Funktion verwaltet die BandenSBs des Users
  2593. // **********************************************************************************
  2594. // **********************************************************************************
  2595. function FillSBSel(gangs) {
  2596. var TabSBSel = '<tr><td style="font-size:16px;border-bottom:0px" colspan="2"><b>Bitte Banden-SB auswählen:</b></td></tr>';
  2597. for (i = 0; i < gangs.length; i++)
  2598. 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>';
  2599.  
  2600. return TabSBSel;
  2601. }
  2602.  
  2603. var SBT = null;
  2604. function showSBT(event) {
  2605. if (SBT.style.display=="block") {
  2606. SBT.style.display = "none";
  2607. return;
  2608. }
  2609. /*var spans = event.target.getElementsByTagName("span");
  2610. // var spans = event.target.parentNode.getElementsByTagName("span");
  2611. for (var i = 0; i < spans.length; i++)
  2612. if (spans[i].id)
  2613. if (spans[i].id.substr(0,7) == "hist") {
  2614. FT = spans[i];
  2615. break;
  2616. }*/
  2617. SBT.style.top = (event.layerY - 40) + "px";
  2618. SBT.style.left = (event.layerX + 40) + "px";
  2619. SBT.style.display = "block";
  2620. }
  2621.  
  2622. function insertSBTable(id, gangname) {
  2623. var elem = document.getElementById(id);
  2624. if (!elem)
  2625. return;
  2626. // **********************************************************************************
  2627. // *** GM_XMLHTTPREQUEST *** Bandenübersicht laden
  2628. // **********************************************************************************
  2629. GM_xmlhttpRequest({method: 'GET', url: GANG_URL, onload: function(responseDetails) {
  2630. var profcontent = responseDetails.responseText;
  2631.  
  2632. var sbTable = [[0, gangname]];
  2633. var allies = profcontent.split('id="shoutboxtab3');
  2634. if (allies.length >= 2) {
  2635. allies = allies[1].split("</ul>")[0];
  2636. var trs = allies.split("shoutbox_ajax/");
  2637. for (var i = 1; i < trs.length; i++) {
  2638. var id = trs[i].split("/")[0];
  2639. sbTable.push([id, trs[i].split("<")[0].split(">")[1]]);
  2640. }
  2641. var width = 400;
  2642. var tooltip1 = '<table><colgroup><col width="20" /><col width="' + (width-20) + '" /></colgroup>' + FillSBSel(sbTable) + '</table>';
  2643. var newspan = document.createElement('span');
  2644. newspan.id = "sbTablesp";
  2645. newspan.style.width = width+"px";
  2646. newspan.style.color = "white";
  2647. newspan.style.backgroundColor = "#505050";
  2648. newspan.style.fontSize = "12px";
  2649. newspan.style.position = "absolute";
  2650. newspan.style.display = "none";
  2651. newspan.style.zIndex = "100";
  2652. newspan.innerHTML = tooltip1;
  2653. elem.parentNode.parentNode.appendChild(newspan);
  2654. document.getElementById("SBSel0").checked = true;
  2655. SBT = document.getElementById("sbTablesp");
  2656. }
  2657. }});
  2658. }
  2659.  
  2660. function getyPos(el) {
  2661. var yPos = 0;
  2662. while (el) {
  2663. if (el.tagName == "BODY") {
  2664. var yScroll = el.scrollTop || document.documentElement.scrollTop;
  2665. yPos += (el.offsetTop - yScroll + el.clientTop);
  2666. }
  2667. else
  2668. yPos += (el.offsetTop - el.scrollTop + el.clientTop);
  2669. el = el.offsetParent;
  2670. }
  2671. return yPos;
  2672. }
  2673.  
  2674. function insertHistory(elem, id, history) {
  2675. var FT = null;
  2676. function showFT(event) {
  2677. if (event.shiftKey != 0 && event.ctrlKey != 0)
  2678. PGu_setValue("skillHistMode", !PGu_getValue("skillHistMode", false));
  2679. if (event.target.nodeName == "A")
  2680. var spans = event.target.getElementsByTagName("span");
  2681. else
  2682. var spans = event.target.parentNode.getElementsByTagName("span");
  2683. for (var i = 0; i < spans.length; i++)
  2684. if (spans[i].id)
  2685. if (spans[i].id.substr(0,4) == "hist") {
  2686. FT = spans[i];
  2687. break;
  2688. }
  2689. if (FT)
  2690. FT.style.display = "block";
  2691. if (FT) {
  2692. iAnz = event.target.parentNode.parentNode.parentNode.getElementsByTagName("span").length;
  2693. curr = Number(spans[i].id.substr(4));
  2694. var y = event.pageY - window.scrollY;
  2695. var trAnz = spans[i].getElementsByTagName("tr").length;
  2696. var h = getyPos(spans[i].getElementsByTagName("tr")[trAnz-1]) + 18
  2697. - getyPos(spans[i].getElementsByTagName("tr")[0]);
  2698. if (y + h > window.innerHeight) {
  2699. var yPos = getyPos(document.getElementById("content-top"));
  2700. var yPosT = getyPos(event.target);
  2701. FT.style.top = (yPosT - h - yPos - 24) + "px";
  2702. FT.style.zIndex = 999;
  2703. }
  2704. else
  2705. FT.style.top = "";
  2706. }
  2707. }
  2708. function hideFT () {
  2709. if (!FT)
  2710. return;
  2711. FT.style.display = "none";
  2712. FT = null;
  2713. }
  2714.  
  2715. var iAnz = Math.ceil((history.split("<td").length-4)/40)*2;
  2716. var width = Math.max(iAnz * 120 + 30, 400);
  2717. var tooltip1 = '<table><colgroup>';
  2718. var wSum = 0;
  2719. for (var i = 0; i < iAnz; i++) {
  2720. var wid = 115 + (i%2 == 0 && i > 0?10:0);
  2721. tooltip1 += '<col width="' + wid + '" />';
  2722. wSum += wid;
  2723. }
  2724. tooltip1 += '<col width="' + (width - wSum) + '" /></colgroup>' + history + '</table>';
  2725. var newspan = document.createElement('span');
  2726. newspan.id = "hist" + id;
  2727. newspan.style.width = width+"px";
  2728. newspan.style.color = "white";
  2729. newspan.style.backgroundColor = "grey";
  2730. newspan.style.fontSize = "12px";
  2731. newspan.style.position = "absolute";
  2732. newspan.style.display = "none";
  2733. newspan.style.zIndex = "100";
  2734. newspan.innerHTML = tooltip1;
  2735. elem.appendChild(newspan);
  2736. elem.addEventListener('mouseover', showFT, false);
  2737. elem.addEventListener('mouseout', hideFT, false);
  2738. /*for (i = 0; i < elem.getElementsByTagName("span").length - 1; i++) {
  2739. elem.getElementsByTagName("span")[i].addEventListener('mouseover', showFT, false);
  2740. elem.getElementsByTagName("span")[i].addEventListener('mouseout', hideFT, false);
  2741. }*/
  2742. }
  2743.  
  2744. // ***********************************************************************************************
  2745. // ***********************************************************************************************
  2746. // Funktion fügt anhand farblicher Kennzeichnung Informationen über Angreifbarkeit ein
  2747. // ***********************************************************************************************
  2748. // ***********************************************************************************************
  2749. function InsertAttackableInFirstTable(table, linkifygangsflag, secondtableflag, comp, showLosers) {
  2750. function getAllUserData(trs, endoftable) {
  2751. // Für alle Zeilen mit Kämpfen (erste Zeile Überschrift, letzte Zeile Zusammenfassung außen vor)
  2752. var undone = false;
  2753. var gangFilter = "";
  2754. try {
  2755. gangFilter = document.getElementById("gangfilter").value.toLowerCase();
  2756. } catch(err) {
  2757. }
  2758. fltable = table;
  2759. compress = gangFilter != "";
  2760. var useridList = [];
  2761. for (var x = 1; x <= trs.length - endoftable; x++) {
  2762. if (!trs[x].id)
  2763. continue;
  2764. // Wenn die Zeile noch nicht bearbeitet wurde
  2765. if (trs[x].getAttribute('done') != 'done') {
  2766. // 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)
  2767. if (trs[x].getElementsByTagName("td").length >= 7) {
  2768. undone = true;
  2769. if (trs[x].getElementsByTagName("td")[4].innerHTML.indexOf('/id:') != -1) {
  2770. // UserID des Kämpfers aus dem Link auslesen
  2771. var userid = trs[x].getElementsByTagName("td")[4].innerHTML.split('/id:')[1].split('/"')[0];
  2772. // UserID im Name-Tag speichern
  2773. trs[x].getElementsByTagName("td")[4].setAttribute('name', userid);
  2774. for (var i = 0; i < useridList.length; i++) {
  2775. if (useridList[i] == userid)
  2776. break;
  2777. }
  2778. if (i < useridList.length)
  2779. continue; // User schon da
  2780. useridList[i] = userid;
  2781.  
  2782. // ***********************************************************************************************
  2783. // Abrufen des XML-Datensatzes für den aktuellen User
  2784. // ***********************************************************************************************
  2785. getUserData("#"+userid, function(userid, username, userpoints, gangid, gangname, regsince, money, userplace, history) {
  2786. CachedPoints[CacheIndex(userid)] = userpoints;
  2787. var colorCode = getColorCode(userpoints, userplace);
  2788. var row = 0;
  2789.  
  2790. // Für alle Tabellenzeilen mit Kämpfen
  2791. for (var x = 1; x <= trs.length - endoftable; x++) {
  2792. if (!trs[x].id)
  2793. continue;
  2794. row++;
  2795. var tds = trs[x].getElementsByTagName("td");
  2796. // Wenn die Zeile noch nicht bearbeitet wurde
  2797. if (trs[x].getAttribute('done') != 'done') {
  2798. // 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)
  2799. if (tds.length >= 7) {
  2800. var currenttd = tds[4];
  2801.  
  2802. // Wenn in der aktuellen Zeile der aktuelle User steht
  2803. if (currenttd.getAttribute('name') == userid) {
  2804. // Wenn der Gegner nicht angreifbar ist (er befindet sich nicht im Punktespektrum)
  2805. if (colorCode == 0 && comp &&!compress) {
  2806. trs[x].style.visibility="hidden";
  2807. var i = CacheIndex(userid);
  2808. if (CachedStats[i] == "")
  2809. CachedStats[i] = "0/0";
  2810. continue;
  2811. }
  2812. var td = currenttd.getElementsByTagName("a")[0];
  2813. var title = td.title;
  2814. if (title != "")
  2815. title = " (" + title + ")";
  2816. if (td.innerHTML.indexOf(username) == -1) {
  2817. var spans = td.getElementsByTagName("span");
  2818. var text = "";
  2819. for (var jj = 0; jj < spans.length - username.length - 1; jj++)
  2820. text += spans[jj].innerHTML;
  2821. td.innerHTML = '<span style="color:#999; font-size:10px;">' + text + "</span> " + username;
  2822. }
  2823. td.style.color = colors[title!=""?0:colorCode];
  2824. td.title = TxtUserPoints[myLang].replace('%s', username).replace('%s', number_format(userpoints, false)) + " " + TxtColor[colorCode][myLang] + title;
  2825. currenttd.setAttribute('ganginfo', gangid + '|' + (gangid=='None'?"":gangname));
  2826.  
  2827. // Wenn Bandennamen verlinkt werden sollen
  2828. if (linkifygangsflag) {
  2829. // Wenn der User in keiner Bande ist
  2830. if (gangid == 'None') {
  2831. tds[5].innerHTML = TxtNoGang[myLang];
  2832. // sonst: Der User ist in einer Bande
  2833. } else {
  2834. // Neuen Link erzeugen und einfügen
  2835. var newlink = document.createElement('a');
  2836. newlink.setAttribute('href', GANGPROF_URL + gangid + '/');
  2837. newlink.setAttribute('target', '_blank');
  2838. newlink.style.color = colors[colorCode];
  2839. newlink.innerHTML = gangname;
  2840. tds[5].innerHTML = '';
  2841. tds[5].appendChild(newlink);
  2842. if (gangFilter != "") {
  2843. if (!filter(gangname.toLowerCase(), gangFilter)) {
  2844. trs[x].style.visibility = "hidden";
  2845. }
  2846. }
  2847. }
  2848. }
  2849. if (showHistory && history != "") {
  2850. insertHistory(currenttd.getElementsByTagName("a")[0], (secondtableflag?"i":"")+row, history);
  2851. document.getElementById("hist"+(secondtableflag?"i":"")+row).getElementsByTagName("td")[0].innerHTML = currenttd.getElementsByTagName("a")[0].title;
  2852. currenttd.getElementsByTagName("a")[0].title = "";
  2853. }
  2854.  
  2855. // Zeile als fertig bearbeitet kennzeichnen
  2856. trs[x].setAttribute('done', 'done');
  2857. }
  2858. }
  2859. }
  2860. }
  2861. sortFightList(1, showLosers);
  2862. });
  2863. }
  2864. }
  2865. }
  2866. }
  2867. if (undone) {
  2868. function tryAgain() {
  2869. getAllUserData(trs, endoftable);
  2870. }
  2871. window.setTimeout(tryAgain, 5000);
  2872. }
  2873. }
  2874.  
  2875. if (table == null) return;
  2876. // Referenz auf die Zeilen der Tabelle speichern
  2877. var trs = table.getElementsByTagName("tr");
  2878.  
  2879. // Wenn die eintreffenden Kämpfe bearbeitet werden
  2880. if (secondtableflag) {
  2881. var endoftable = 1;
  2882. } else {
  2883. var endoftable = 2;
  2884. }
  2885.  
  2886. getAllUserData(trs, endoftable);
  2887.  
  2888. }
  2889.  
  2890. // ***********************************************************************************************
  2891. // ***********************************************************************************************
  2892. // Funktion fügt anhand farblicher Kennzeichnung Informationen über Angreifbarkeit ein
  2893. // ***********************************************************************************************
  2894. // ***********************************************************************************************
  2895. function InsertAttackableInHighscoreTable(table) {
  2896. // Referenz auf die Zeilen der Tabelle speichern
  2897. var trs = table.getElementsByTagName("tr");
  2898.  
  2899. // Für alle Zeilen mit Pennern (erste Zeile Überschrift außen vor)
  2900. for (var x = 1; x < trs.length; x++) {
  2901. // UserID des Kämpfers aus dem Link auslesen
  2902. var userid = GetUserID(trs[x].getElementsByTagName("td")[2].innerHTML);
  2903. // UserID im Name-Tag speichern
  2904. trs[x].getElementsByTagName("td")[2].setAttribute('name', userid);
  2905.  
  2906. // ***********************************************************************************************
  2907. // Abrufen des XML-Datensatzes für den aktuellen User
  2908. // ***********************************************************************************************
  2909. getUserData("#"+userid, function(userid, username, userpoints, gangid, gangname, regsince, money, userplace, history) {
  2910. CachedPoints[CacheIndex(userid)] = userpoints;
  2911.  
  2912. if (userid == m_ownuserid)
  2913. var colorCode = 6;
  2914. else
  2915. var colorCode = getColorCode(userpoints, userplace);
  2916. var currenttd = document.getElementsByName(userid)[0];
  2917. var place = currenttd.parentNode.getElementsByTagName("td")[0].innerHTML;
  2918. if (place.split(".")[0] != userplace)
  2919. currenttd.parentNode.getElementsByTagName("td")[0].innerHTML =
  2920. place.replace(".","/"+userplace+".");
  2921. currenttd.parentNode.getElementsByTagName("td")[5].innerHTML = number_format(userpoints, true);
  2922. currenttd.parentNode.getElementsByTagName("td")[6].innerHTML = regsince;
  2923. // Wenn der Gegner nicht angreifbar ist (er befindet sich nicht im Punktespektrum)
  2924. var title = currenttd.getElementsByTagName("a")[0].title;
  2925. if (title != "")
  2926. title = " (" + title + ")";
  2927. currenttd.getElementsByTagName("a")[0].style.color = colors[title!=""?0:colorCode];
  2928. title = TxtColor[colorCode][myLang] + title;
  2929. currenttd.getElementsByTagName("a")[0].title = title;
  2930. if (showHistory && history != "") {
  2931. insertHistory(currenttd.getElementsByTagName("a")[0], userid, history);
  2932. currenttd.getElementsByTagName("a")[0].title = "";
  2933. document.getElementById("hist"+userid).getElementsByTagName("td")[0].innerHTML = title;
  2934. }
  2935. });
  2936. }
  2937. }
  2938.  
  2939. // ***********************************************************************************************
  2940. // ***********************************************************************************************
  2941. // Funktion ermittelt den ATT- oder DEF-Wert aus der übergebenen Zeile
  2942. // ***********************************************************************************************
  2943. // ***********************************************************************************************
  2944. function GetValueFromRow(currenttr) {
  2945. return currenttr.getElementsByTagName("td")[1].innerHTML.split("<a class")[0];
  2946. }
  2947.  
  2948. // **********************************************************************************
  2949. // **********************************************************************************
  2950. // Funktion wandelt einen HTML-Content in ein DOM um
  2951. // **********************************************************************************
  2952. // **********************************************************************************
  2953. function HTML2DOM(content) {
  2954.  
  2955. var dummyDiv = document.createElement('div');
  2956. dummyDiv.innerHTML = content;
  2957.  
  2958. return dummyDiv;
  2959. }
  2960.  
  2961. // ***********************************************************************************************
  2962. // ***********************************************************************************************
  2963. // Funktion überprüft, ob eine ATT-Steigerung vorliegt
  2964. // ***********************************************************************************************
  2965. // ***********************************************************************************************
  2966. function HasATTBoost(content) {
  2967. var doc = HTML2DOM(content);
  2968. var buffs = doc.getElementsByClassName("style_buff");
  2969.  
  2970. // Wenn die Klasse vorhanden ist, die Steigerungen beinhaltet
  2971. if (buffs.length > 0) {
  2972. // Wenn im Text "ATT" oder "DEF" vorkommt (ist beim Minibrunnen nicht der Fall)
  2973. if (buffs[0].parentNode.innerHTML.indexOf("ATT:") != -1 || buffs[0].parentNode.innerHTML.indexOf("DEF:") != -1) {
  2974. return true;
  2975. // sonst: Im Text kommt nicht "ATT" vor (ist beim Minibrunnen der Fall)
  2976. } else {
  2977. return false;
  2978. }
  2979. // sonst: Die Klasse, die Steigerungen beinhaltet, ist nicht vorhanden
  2980. } else {
  2981. return false;
  2982. }
  2983. }
  2984.  
  2985. // ***********************************************************************************************
  2986. // ***********************************************************************************************
  2987. // Funktion ermittelt die Höhe der ATT-Steigerung
  2988. // ***********************************************************************************************
  2989. // ***********************************************************************************************
  2990. function GetATTBoost(content) {
  2991.  
  2992. // Wenn eine ATT-Stärkung vorliegt
  2993. if (HasATTBoost(content)) {
  2994. var attboost = content.split("<span><b>" + TxtBoost[lang] + "</b>")[1];
  2995. if (attboost.indexOf("ATT: ") != -1) {
  2996. attboost = attboost.split("ATT: ")[1];
  2997. attboost = attboost.split("<br")[0];
  2998. return attboost;
  2999. }
  3000. else {
  3001. return 0;
  3002. }
  3003. // sonst: Es liegt keine ATT-Stärkung vor
  3004. } else {
  3005. return 0;
  3006. }
  3007. }
  3008.  
  3009. // ***********************************************************************************************
  3010. // ***********************************************************************************************
  3011. // Funktion ermittelt die Höhe der DEF-Steigerung
  3012. // ***********************************************************************************************
  3013. // ***********************************************************************************************
  3014. function GetDEFBoost(content) {
  3015. // Wenn eine DEF-Stärkung vorliegt
  3016. if (HasATTBoost(content)) {
  3017. var defboost = content.split("<span><b>" + TxtBoost[lang] + "</b>")[1];
  3018. if (defboost.indexOf("DEF: ") != -1) {
  3019. defboost = defboost.split("DEF: ")[1];
  3020. defboost = defboost.split("<br>")[0];
  3021. return defboost;
  3022. } else {
  3023. return 0;
  3024. }
  3025. // sonst: Es liegt keine DEF-Stärkung vor
  3026. } else {
  3027. return 0;
  3028. }
  3029. }
  3030.  
  3031. // **********************************************************************************
  3032. // **********************************************************************************
  3033. // Funktion ermittelt den aktuellen Kampfwert
  3034. // **********************************************************************************
  3035. // **********************************************************************************
  3036. function getFightValue(att, def) {
  3037. return (att * 11 + def * 10).toString().insert(-1, DZ[myLang]);
  3038. }
  3039.  
  3040. // **********************************************************************************
  3041. // **********************************************************************************
  3042. // Funktion ermittelt die aktuellen Kampfwerte
  3043. // **********************************************************************************
  3044. // **********************************************************************************
  3045. function CheckFightValues(content) {
  3046. // Aus HTML ein DOM-Objekt erzeugen
  3047. var doc = HTML2DOM(content)
  3048.  
  3049. var tables = doc.getElementsByTagName("table");
  3050. var ft = getFightTableIndex(tables);
  3051. var table = tables[ft];
  3052.  
  3053. var ATTbonus = 0;
  3054. if (table.getElementsByClassName("processbar_health").length > 0) {
  3055. var bonus = table.getElementsByClassName("processbar_health")[0].parentNode.innerHTML.split("<div ").pop().split("</b")[0].split(">").pop();
  3056. ATTbonus = Number(bonus.match(/\d+/)[0]);
  3057. }
  3058.  
  3059. // Referenz auf Tabellenzeilen in trs speichern
  3060. var trs = table.getElementsByTagName("tr");
  3061.  
  3062. var tr = 0;
  3063. if (trs[3].getElementsByClassName("fight_num").length > 0)
  3064. tr = 3;
  3065. if (trs[2].getElementsByClassName("fight_num").length > 0)
  3066. tr = 2;
  3067. if (tr > 0) {
  3068. // Eigenen ATT-Wert ermitteln
  3069. attvalue = Number(trs[tr].getElementsByClassName("fight_num")[0].innerHTML);
  3070. // Eigenen DEF-Wert ermitteln
  3071. defvalue = Number(trs[tr].getElementsByClassName("fight_num")[1].innerHTML);
  3072. // Eigene Kampfkraft ermitteln
  3073. fgtvalue = Number(trs[tr].getElementsByClassName("fight_num")[2].innerHTML.replace(',','.'));
  3074. FightVals = [attvalue, defvalue, fgtvalue];
  3075. }
  3076. else {
  3077. // Eigenen ATT-Wert ermitteln
  3078. attvalue = Number(GetValueFromRow(trs[2]));
  3079. // Eigenen DEF-Wert ermitteln
  3080. defvalue = Number(GetValueFromRow(trs[3]));
  3081. FightVals = [attvalue, defvalue, -1];
  3082. }
  3083.  
  3084. // eventuell vorhandene ATT-Stärkung (z.B. schwarzes Loch +1, +2, +3) ermitteln
  3085. var attboost = GetATTBoost(table.innerHTML);
  3086.  
  3087. // eventuell vorhandene DEF-Stärkung (z.B. Kürbis) ermitteln
  3088. var defboost = GetDEFBoost(table.innerHTML);
  3089.  
  3090. var fightATT = getFightValue(attvalue, defvalue) + ", ATT: " + attvalue;
  3091. var bonusboost = 0;
  3092. if (ATTbonus > 0) {
  3093. var fightvaloB = Math.floor((attvalue - attboost) / (1 + ATTbonus/100));
  3094. if (Math.floor(fightvaloB * (1 + ATTbonus/100) + 0.05) < (attvalue - attboost))
  3095. fightvaloB++;
  3096. bonusboost = attvalue - attboost - fightvaloB;
  3097. }
  3098. var txtboost = TxtBoost[myLang].split(':')[0];
  3099. if (attboost > 0 || ATTbonus > 0) {
  3100. fightATT += " (" + (attvalue - attboost - bonusboost);
  3101. if (attboost > 0)
  3102. fightATT += " + " + attboost + " " + txtboost;
  3103. if (ATTbonus > 0)
  3104. fightATT += " + " + ATTbonus + "% Bonus";
  3105. fightATT += ")";
  3106. }
  3107. var fightDEF = "DEF: " + defvalue;
  3108. if (defboost > 0)
  3109. fightDEF += " (" + (defvalue - defboost) + " + " + defboost + " " + txtboost + ")";
  3110. fightVals = fightATT + ", " + fightDEF;
  3111.  
  3112. // **********************************************************************************
  3113. // *** GM_XMLHTTPREQUEST *** Abrufen der Bandenseite
  3114. // **********************************************************************************
  3115. GM_xmlhttpRequest({method: 'GET', url: GANG_URL,onload: function(gangresponseDetails) {
  3116. // Wenn die Bandenseite abgerufen werden konnte
  3117. if (gangresponseDetails.status == 200 &&
  3118. gangresponseDetails.responseText.indexOf('500 - Internal Server Error') == -1) {
  3119. // Content der Bandenseite speichern
  3120. var gangcontent = gangresponseDetails.responseText;
  3121. // // Wenn man in einer Bande ist
  3122. GM_log("gangcontent.indexOf(KEYWORD_INGANG[lang]) == -1: " + gangcontent.indexOf(KEYWORD_INGANG[lang]) == -1);
  3123. if (gangcontent.indexOf(KEYWORD_INGANG[lang]) == -1) {
  3124. GM_log("IN BANDE");
  3125. var noGangAbl = gangcontent.indexOf(TxtNoGangAbility[lang]);
  3126.  
  3127. GM_xmlhttpRequest({method: 'GET', url: GANGUPGRADE_URL,onload: function(gangresponseDetails) {
  3128. // Wenn die Bandenseite abgerufen werden konnte
  3129. if (gangresponseDetails.status == 200 &&
  3130. gangresponseDetails.responseText.indexOf('500 - Internal Server Error') == -1) {
  3131. // Content der Bandenupgradeseite speichern
  3132. var gangupgcontent = gangresponseDetails.responseText;
  3133. var abilities = gangupgcontent.split("fixheight");
  3134. var wuttest = abilities[7].split('td');
  3135. var Wutfaehig = (wuttest[3].indexOf('1/1') != -1);
  3136.  
  3137. // Wenn Wut oder WIWu gestartet ist
  3138. if (oldVersion)
  3139. wuttest = gangupgcontent.indexOf(TxtAbility1[lang]) != -1;
  3140. else
  3141. wuttest = gangupgcontent.indexOf('disabled="disabled"') != -1;
  3142. if (wuttest && Wutfaehig && noGangAbl == -1) {
  3143. // Korrigieren der ATT-Summe um 4 bzw. 5 ATT-Punkte
  3144. if (oldVersion)
  3145. var wutWert = 4;
  3146. else {
  3147. var ATTtxt = gangupgcontent.split("ATT<br")[0].substr(-10);
  3148. var ATTpos = ATTtxt.indexOf('+');
  3149. var wutWert = parseInt(ATTtxt.substr(ATTpos));
  3150. }
  3151. if (ATTbonus > 0) {
  3152. var fightvaloB = Math.floor((attvalue - attboost - wutWert) / (1 + ATTbonus/100));
  3153. if (Math.floor(fightvaloB * (1 + ATTbonus/100) + 0.05) < (attvalue - attboost - wutWert))
  3154. fightvaloB++;
  3155. bonusboost = attvalue - attboost - wutWert - fightvaloB;
  3156. }
  3157. var fightATT = getFightValue(attvalue, defvalue) + ", ATT: " + attvalue;
  3158. fightATT += " (" + (attvalue - attboost - wutWert - bonusboost);
  3159. if (ATTbonus > 0)
  3160. fightATT += " + " + ATTbonus + "% Bonus";
  3161. if (attboost > 0)
  3162. fightATT += " + " + attboost + " " + txtboost;
  3163. fightATT += " + " + wutWert + " " + TxtRage[myLang] + ")";
  3164. fightVals = fightATT + ", " + fightDEF;
  3165. }
  3166. }
  3167. }});
  3168. }
  3169. }
  3170. }});
  3171. }
  3172.  
  3173. // ***********************************************************************************************
  3174. // Funktion konvertiert HTML-Userstring zu BBCode-Userstring
  3175. // ***********************************************************************************************
  3176. function ConvertUserToBB(htmlstring) {
  3177. if (htmlstring.indexOf('href="/') == -1) {
  3178. return '[b][color=#FFFFFF]' + htmlstring + '[/color][/b]';
  3179. }
  3180. var userlink = htmlstring.split('href="/')[1].split('"')[0];
  3181. if (htmlstring.indexOf('class="char') == -1)
  3182. var username = GetUsername(htmlstring);
  3183. else {
  3184. var text = htmlstring.split("<a ")[1].split("</a>")[0].split("</span");
  3185. var username = "";
  3186. for (i = 0; i < text.length-1; i++)
  3187. username += text[i].substr(-1);
  3188. }
  3189. return '[url=' + TOWNBASE_URL + userlink + '][b][color=#FFFFFF]' + username + '[/color][/b][/url]';
  3190. }
  3191.  
  3192. // **********************************************************************************
  3193. // Funktion zum Erzeugen des BBCodes für Posten eines Kampfes in die SB
  3194. // **********************************************************************************
  3195. function genBBCode(table, sbpostmode) {
  3196. // ***********************************************************************************************
  3197. // Funktion konvertiert HTML-Kampficonstring zu BBCode-Kampficonstring
  3198. // ***********************************************************************************************
  3199. function ConvertIconToBB(htmlstring) {
  3200. var iconlink = htmlstring.split('src="')[1].split('" ')[0];
  3201. return '[img]' + iconlink + '[/img]';
  3202. }
  3203.  
  3204. var trs = table.getElementsByTagName("tr");
  3205. // Wenn es sich um einen bereits abgeschlossenen Kampf handelt
  3206. if (sbpostmode == SBPOSTMODE_DONE) {
  3207. var trslen = trs.length - 1;
  3208. // sonst: Es handelt sich um einen eingehenden Kampf
  3209. } else {
  3210. var trslen = trs.length;
  3211. }
  3212.  
  3213. counter = 0;
  3214. var poststring = [];
  3215.  
  3216. // Für alle Zeilen
  3217. for (var x = 1; x < trslen; x++) {
  3218. if (!trs[x].id)
  3219. continue;
  3220. // Wenn eine Checkbox existiert
  3221. var td = trs[x].getElementsByTagName("form")[0];
  3222. var id = td.innerHTML.split('id="')[1].split('"')[0];
  3223. // Wenn die Checkbox angehakt ist
  3224. if (document.getElementById(id).checked) {
  3225. counter++;
  3226. // Daten aus den Zellen ermitteln
  3227. var tds = document.getElementById(id).parentNode.parentNode.parentNode.getElementsByTagName("td");
  3228. var fighttime = tds[2].innerHTML;
  3229. if (fighttime.indexOf('<br>') != -1) {
  3230. fighttime = fighttime.split('>')[2].split('<')[0] + " " + fighttime.split('<')[0];
  3231. if (fighttime.length < 16)
  3232. fighttime = fighttime.insert(6, "20");
  3233. }
  3234. var htmlstring = tds[4].innerHTML;
  3235. if (htmlstring.indexOf('id="hist') != -1) {
  3236. htmlstring = htmlstring.split('id="hist')[0];
  3237. htmlstring = htmlstring.substr(0, htmlstring.lastIndexOf('<'));
  3238. }
  3239. var fightuser = ConvertUserToBB(htmlstring);
  3240.  
  3241. var tdadd = 0;
  3242. if (tds[4].getElementsByTagName("table").length > 0)
  3243. tdadd = tds[4].getElementsByTagName("table")[0].getElementsByTagName("td").length;
  3244.  
  3245. var ganginfo = '';
  3246. // Wenn es sich um einen bereits abgeschlossenen Kampf handelt
  3247. if (sbpostmode == SBPOSTMODE_DONE) {
  3248. var fighticon = ConvertIconToBB(tds[1].innerHTML.split('/">')[1].split('</a>')[0]);
  3249. var fmoney = tdadd + ((location.toString().indexOf("/fightlog/") == -1)?5:6);
  3250. var fightmoney = trimString(tds[fmoney].innerHTML);
  3251. var fightpoints = trimString(tds[fmoney+1].innerHTML);
  3252. // Wenn bei Unentschieden oder Ausweichen "+-0" Punkte gesetzt sind
  3253. if (fightpoints == "+-0") {
  3254. fightpoints = "0";
  3255. }
  3256. var wkaputt = tds[fmoney+2]?tds[fmoney+2].innerHTML.trim():"";
  3257. if (wkaputt == "-")
  3258. wkaputt = "";
  3259. if (wkaputt != "")
  3260. wkaputt = " " + wkaputt;
  3261. if (tds[4].getAttribute("ganginfo"))
  3262. ganginfo = tds[4].getAttribute("ganginfo");
  3263. // sonst: Es handelt sich um einen eingehenden Kampf
  3264. } else {
  3265. var fighticon = '[img]' + tds[1].getElementsByTagName("img")[0].src + '[/img]';
  3266. }
  3267.  
  3268. // ***********************************************************************************************
  3269. // Wenn die Tabelle 8 Spalten hat (Kampflog) oder es sich um einen eingehenden Kampf handelt
  3270. // ***********************************************************************************************
  3271. if (tds.length >= tdadd + 8 || sbpostmode == SBPOSTMODE_INCOMING || ganginfo != '') {
  3272. if (ganginfo != '') {
  3273. ganginfo = ganginfo.split('|');
  3274. var gangid = ganginfo[0];
  3275. var gangname = ganginfo[1];
  3276. }
  3277. // Wenn der User eine Bande hat (die verlinkt ist)
  3278. else if (tds[tdadd+5].getElementsByTagName("a").length > 0) {
  3279. // Auslesen von Bandenname
  3280. var gangname = trimString(tds[tdadd+5].getElementsByTagName("a")[0].innerHTML);
  3281. // Auslesen von BandenID
  3282. var gangid = tds[tdadd+5].innerHTML.split(TOWN_URL+'profil/bande:')[1].split('/">')[0]
  3283. } else {
  3284. // Auslesen von Bandenname
  3285. var gangname = "";
  3286. }
  3287. // HTML-Sonderzeichen ersetzen durch das korrekte Zeichen
  3288. gangname = gangname.replace(/&amp;/g, "&");
  3289. gangname = gangname.replace(/&gt;/g, ">");
  3290. gangname = gangname.replace(/&lt;/g, "<");
  3291.  
  3292. // Wenn der Penner in einer Bande ist
  3293. if (gangname != "") {
  3294. var fightgang = '[color=#2a2a2a]_[/color][url=' + TOWNBASE_URL + 'profil/bande:' + gangid + '/][b][color=#FFFFFF]' + gangname + '[/color][/b][/url]';
  3295. // sonst: Der Penner ist in keiner Bande
  3296. } else {
  3297. var fightgang = " " + TxtNoGang[myLang];
  3298. }
  3299. } else {
  3300. var fightgang = "";
  3301. }
  3302.  
  3303. // Wenn es sich um einen bereits abgeschlossenen Kampf handelt
  3304. if (sbpostmode == SBPOSTMODE_DONE) {
  3305. var inout = fighticon.split(FIGHTICONS_URL)[1].split('.')[0];
  3306. fighticon = "[img]" + getIconAddr(eval("ICON_"+inout.toUpperCase())) + "[/img]";
  3307. // Wenn der Kampf verloren wurde
  3308. if (inout.substr(0, 1) == '0') {
  3309. var colorstring = '#FF0000'; // Rot
  3310. // Wenn der Kampf gewonnen wurde
  3311. } else if (inout.substr(0, 1) == '1') {
  3312. var colorstring = '#33CC00'; // Grün
  3313. // Wenn der Kampf unentschieden ausging
  3314. } else if (inout.substr(0, 1) == '2') {
  3315. var colorstring = '#FFFF33'; // Gelb
  3316. // sonst: Es wurde ausgewichen
  3317. } else {
  3318. var colorstring = '#3366FF'; // Blau
  3319. }
  3320.  
  3321. // SB-String für diesen Kampf zusammenbauen und anhängen
  3322. poststring.push(fighticon + " " + fighttime + " " + fightuser + fightgang + " [color=#2a2a2a]_[/color][color=" + colorstring + "]" + fightmoney + "[/color][color=#2a2a2a]_[/color][color=" + colorstring + "]" + fightpoints + ' ' + TxtPunkte[myLang] + wkaputt + '[/color]');
  3323. // sonst: Es handelt sich um einen noch offenen Kampf (einkommend oder ausgehend)
  3324. } else {
  3325. // SB-String für diesen Kampf zusammenbauen und anhängen
  3326. poststring.push(fighticon + " " + fighttime + " " + fightuser + fightgang);
  3327. }
  3328. }
  3329. }
  3330. return poststring;
  3331. }
  3332.  
  3333. // **********************************************************************************
  3334. // Handler für Posten eines Kampfes in die SB mit einer Grafik assoziieren
  3335. // **********************************************************************************
  3336. function PostToSBHandler(currentimg, sbpostmode) {
  3337. // Click-Handler hinzufügen
  3338. currentimg.addEventListener("click", function(event) {
  3339. if (!event) var event = window.event;
  3340. counter = 0;
  3341. var posttext = "";
  3342. // ***********************************************************************************************
  3343. // AKTIVER KAMPF
  3344. // ***********************************************************************************************
  3345. if (sbpostmode == SBPOSTMODE_ACTIVE) {
  3346. // Inhalt der Box auslesen, in der die Infos über den ausgehenden Kampf stehen
  3347. var boxcontent = currentimg.parentNode.parentNode.innerHTML;
  3348. // In die SB zu postende Nachricht zusammenstellen
  3349. var ganginfo = currentimg.name;
  3350. if (ganginfo) {
  3351. var gang = ganginfo.split('|');
  3352. var gangid = gang[0];
  3353. var gangname = gang[1];
  3354. // HTML-Sonderzeichen ersetzen durch das korrekte Zeichen
  3355. gangname = gangname.replace(/&amp;/g, "&");
  3356. gangname = gangname.replace(/&gt;/g, ">");
  3357. gangname = gangname.replace(/&lt;/g, "<");
  3358.  
  3359. // Wenn der Penner in einer Bande ist
  3360. if (gangname != "") {
  3361. var fightgang = '[color=#2a2a2a]_[/color][url=' + TOWNBASE_URL + 'profil/bande:' + gangid + '/][b][color=#FFFFFF]' + gangname + '[/color][/b][/url]';
  3362. // sonst: Der Penner ist in keiner Bande
  3363. } else {
  3364. var fightgang = " " + TxtNoGang[myLang];
  3365. }
  3366. } else {
  3367. var fightgang = "";
  3368. }
  3369. if (boxcontent.indexOf('id="hist') != -1) {
  3370. var htmlstring = boxcontent.split('id="hist')[0];
  3371. var splitStr = htmlstring.substr(htmlstring.lastIndexOf('<')) + 'id="hist';
  3372. }
  3373. else
  3374. var splitStr = '&nbsp;';
  3375. var posttext = '[b]' + TxtAttack[myLang] + ' [/b]' + ConvertUserToBB(boxcontent.split(TxtRunAttack[lang])[1].split(splitStr)[0]) + ' ' + fightgang;
  3376. posttext = posttext + ', ' + trimString(boxcontent.split('<br>')[1].split('<')[0]) + '.';
  3377. counter = 1;
  3378. }
  3379. var gcounter = counter;
  3380. var posttextDone = genBBCode(document.getElementById("PostDoneFightsToSB").parentNode.parentNode.parentNode, SBPOSTMODE_DONE);
  3381. var counterIn = counter;
  3382. gcounter += counter;
  3383. if (document.getElementById("PostIncomingFightsToSB"))
  3384. var posttextIn = genBBCode(document.getElementById("PostIncomingFightsToSB").parentNode.parentNode.parentNode, SBPOSTMODE_INCOMING);
  3385. else
  3386. var posttextIn = [];
  3387. counterIn = counter - counterIn;
  3388. counter += gcounter;
  3389.  
  3390. // Es wurde kein Kampf angehakt
  3391. if (posttext == "" && posttextDone.length == 0 && posttextIn.length == 0) {
  3392. alert(TxtCheckFights[myLang]);
  3393. return;
  3394. }
  3395.  
  3396. if (SBT) {
  3397. showSBT(event);
  3398. if (SBT.style.display == "block")
  3399. return;
  3400. }
  3401.  
  3402. var jj = 0;
  3403. var sboxTable = [];
  3404. if (SBT)
  3405. while (true) {
  3406. if (!document.getElementById("SBSel"+jj))
  3407. break;
  3408. if (document.getElementById("SBSel"+jj).checked)
  3409. sboxTable.push(document.getElementById("SBSel"+jj).name);
  3410. jj++;
  3411. }
  3412. else
  3413. sboxTable.push(0);
  3414. if (sboxTable.length == 0) {
  3415. alert("Es wurde keine Shoutbox ausgewählt");
  3416. return;
  3417. }
  3418.  
  3419. // ***********************************************************************************************
  3420. // Kommentar zum Post abfragen
  3421. // ***********************************************************************************************
  3422. var postcomment = trimString(prompt(TxtFightCom[myLang]));
  3423. if (postcomment != "")
  3424. postcomment += "\n\n";
  3425.  
  3426. // Kampf in die SB posten
  3427. var premessagetext = "";
  3428. // Es soll mehr als ein Kampf gepostet werden
  3429. if (counter > 1)
  3430. var messagetext = TxtFights[myLang];
  3431. // sonst: Es soll nur ein Kampf gepostet werden
  3432. else
  3433. var messagetext = TxtFight[myLang];
  3434.  
  3435. // Wenn bereits beendete Kämpfe gepostet werden sollen
  3436. if (event.shiftKey != 0 || document.getElementById("postVals").checked)
  3437. postcomment += TxtFightVals[myLang] + fightVals + "\n\n";
  3438. // Wenn eingehende Kämpfe gepostet werden sollen
  3439. if (posttextIn.length != 0) {
  3440. if (counterIn > 1)
  3441. premessagetext = TxtPostPreMsg2[myLang];
  3442. else
  3443. premessagetext = TxtPostPreMsg[myLang];
  3444. if (posttext != "" || posttextDone.length != 0)
  3445. premessagetext = "\n\n[b]" + premessagetext + "[/b]";
  3446. posttextIn[0] = premessagetext + posttextIn[0];
  3447. }
  3448. if (posttext != "" && posttextDone.length != 0)
  3449. posttextDone[0] = "\n\n[b]Fightlog:[/b]\n\n" + posttextDone[0];
  3450.  
  3451. // Kampf/Kämpfe in die SB posten
  3452. PostToSB(sboxTable, postcomment, posttext, posttextDone, posttextIn, messagetext + TxtAttackPost[myLang]);
  3453. }, false);
  3454. }
  3455.  
  3456. // **********************************************************************************
  3457. // Handler für Hinzufügen zur Kampfliste
  3458. // **********************************************************************************
  3459. function AddToFTHandler(currentimg) {
  3460. // Click-Handler hinzufügen
  3461. currentimg.addEventListener("click", function(event) {
  3462. if (!event) var event = window.event;
  3463. var table = this.parentNode.parentNode.parentNode;
  3464. var trs = table.getElementsByTagName("tr");
  3465. var trslen = trs.length - 1;
  3466.  
  3467. counter = 0;
  3468. var added = 0;
  3469. var fightIDs = PGu_getValue("FightIDList", "");
  3470. // Für alle Zeilen
  3471. for (var x = 1; x < trslen; x++) {
  3472. if (!trs[x].id)
  3473. continue;
  3474. var td = trs[x].getElementsByTagName("form")[0];
  3475. var id = td.innerHTML.split('id="')[1].split('"')[0];
  3476. // Wenn die Checkbox angehakt ist
  3477. if (document.getElementById(id).checked) {
  3478. counter++;
  3479. // Daten aus den Zellen ermitteln
  3480. var tds = trs[x].getElementsByTagName("td");
  3481. var fightuserid = GetUserID(trimString(tds[4].innerHTML));
  3482. if (AddIDToList(fightIDs, fightuserid)) {
  3483. fightIDs += (fightIDs == ""?"":";") + fightuserid;
  3484. added++;
  3485. }
  3486. document.getElementById(id).checked = false;
  3487. }
  3488. }
  3489.  
  3490. // Es wurde kein Kampf angehakt
  3491. if (counter == 0) {
  3492. alert(TxtCheckBums[myLang]);
  3493. return;
  3494. }
  3495.  
  3496. if (added > 0) {
  3497. fightIDs = fightIDs.split(";");
  3498. for (var j = fightIDs.length - 1; j >= 0; j--)
  3499. if (isNaN(fightIDs[j]) || fightIDs[j] == "")
  3500. fightIDs.splice(j, 1);
  3501. PGu_setValue("FightIDList", fightIDs.join(";"));
  3502. PGu_setValue("fightlistchanged", 1);
  3503. if (added == 1)
  3504. alert (TxtAdded1ToFT[myLang]);
  3505. else
  3506. alert (TxtAddedToFT[myLang].replace("%s", added));
  3507. if (location.toString().indexOf("/fightlog/") == -1)
  3508. window.location.reload();
  3509. }
  3510. else
  3511. alert (TxtNoAddedToFT[myLang]);
  3512. }, false);
  3513. }
  3514.  
  3515. // ***********************************************************************************************
  3516. // ***********************************************************************************************
  3517. // Fügt die Info-Links in die Hisghscore-Tabelle hinzu
  3518. // ***********************************************************************************************
  3519. // ***********************************************************************************************
  3520. function InsertInfoInHighscoreTable(table, inGang, addtd) {
  3521. DelayedPost(20000);
  3522. fightinfo = "";
  3523. // Referenz auf die Zeilen der Tabelle speichern
  3524. var trs = table.getElementsByTagName("tr");
  3525. var td = 0;
  3526.  
  3527. // Für alle Zeilen mit Pennern (erste Zeile Überschrift außen vor)
  3528. for (var x = 1; x <= trs.length - 1; x++) {
  3529. if (trs[x].className.indexOf("trhover") == -1)
  3530. continue;
  3531. // Referenz auf die Zellen der aktuellen Zeile speichern
  3532. var tds = trs[x].getElementsByTagName("td");
  3533.  
  3534. // Name, UserID und Kampfzeit auslesen
  3535. var username = getUserName(tds[2]);
  3536. var userid = tds[2].innerHTML.split('/id:')[1].split('/"')[0];
  3537.  
  3538. // User-Profillink mit ID versehen und Link mit "grün" initialisieren
  3539. // (wird dann später bei der Überprüfung von Punkten und Angriffszeit ggf. nach rot umgefärbt)
  3540. tds[2].id = 'userprofileid:' + userid + "_" + (GetNrOfIDs(document, 'userprofileid:' + userid) + 1);
  3541. //tds[2].getElementsByTagName("a")[0].setAttribute('style', 'color: #33cc66');
  3542.  
  3543. // ***********************************************************************************************
  3544. // Info-Icons
  3545. // ***********************************************************************************************
  3546. // Info-Icons in die neue Zelle einfügen
  3547. var iconstd = trs[x].getElementsByTagName("td")[1];
  3548. iconstd.innerHTML = GetIconInsertHTML(userid, username, "x");
  3549. if (userid != m_ownuserid)
  3550. FightListHandler(iconstd.getElementsByTagName('img')[ZONEBASE_URL==""?1:2]);
  3551.  
  3552. // Zahl der Kämpfe ermitteln
  3553. CheckPastFights(userid, username, 1);
  3554. }
  3555. }
  3556.  
  3557. // ***********************************************************************************************
  3558. // ***********************************************************************************************
  3559. // Fügt die Info-Links in die erste Tabelle hinzu
  3560. // ***********************************************************************************************
  3561. // ***********************************************************************************************
  3562. function InsertInfoInFirstTable(table, inGang, addtd, fktCont) {
  3563. function insertInfo(trs, x) {
  3564. // Referenz auf die Zellen der aktuellen Zeile speichern
  3565. var tds = trs[x].getElementsByTagName("td");
  3566.  
  3567. // Name, UserID und Kampfzeit auslesen
  3568. var userid = tds[4].innerHTML.split('/id:')[1].split('/"')[0];
  3569. var fighttime = tds[2].innerHTML;
  3570. if (fighttime.indexOf('<br>') != -1) {
  3571. fighttime = fighttime.split(">");
  3572. fighttime = fighttime[0].split("<")[0]+" "+fighttime[2].split("<")[0];
  3573. }
  3574.  
  3575. // User-Profillink mit ID versehen und Link mit "grün" initialisieren
  3576. // (wird dann später bei der Übreprüfung von Punkten und Angriffszeit ggf. nach rot umgefärbt)
  3577. tds[4].id = 'userprofileid:' + userid + "_" + (GetNrOfIDs(document, 'userprofileid:' + userid) + 1);
  3578. //tds[4].getElementsByTagName("a")[0].setAttribute('style', 'color: #33cc66');
  3579. tds[4].getElementsByTagName("a")[0].setAttribute('target', '_blank');
  3580.  
  3581. // Ankreuzkästchen in die Zelle setzen
  3582. var sbtd = trs[x].getElementsByTagName("td")[0];
  3583. 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>';
  3584.  
  3585. getUserData("#"+userid, function(userid, username, userpoints, gangid, gangname, regsince, money, userplace, history) {
  3586. // ***********************************************************************************************
  3587. // Punkte formatieren
  3588. // ***********************************************************************************************
  3589. var pointstd = trs[x].getElementsByTagName("td")[addtd + 6];
  3590. pointstd.innerHTML = number_format(trimString(pointstd.innerHTML), false);
  3591.  
  3592. // ***********************************************************************************************
  3593. // Info-Icons
  3594. // ***********************************************************************************************
  3595. // Info-Icons in die neue Zelle einfügen
  3596. var iconstd = trs[x].getElementsByTagName("td")[3];
  3597. iconstd.innerHTML = GetIconInsertHTML(userid, username, fighttime);
  3598. // Handler für Fightkommentare mit Link assoziieren
  3599. FightCommentHandler(iconstd.getElementsByTagName("img")[ZONEBASE_URL==""?1:2]);
  3600. FightListHandler(iconstd.getElementsByTagName("img")[ZONEBASE_URL==""?3:4]);
  3601.  
  3602. // Zahl der Kämpfe ermitteln
  3603. CheckPastFights(userid, username, 1);
  3604. if (x < trs.length-2)
  3605. insertInfo (trs, x + 1);
  3606. else
  3607. fktCont();
  3608. });
  3609. }
  3610. DelayedPost(20000);
  3611. fightinfo = "";
  3612. // Referenz auf die Zeilen der Tabelle speichern
  3613. var trs = table.getElementsByTagName("tr");
  3614. var td = 0;
  3615.  
  3616. // ***********************************************************************************************
  3617. // Posten in die SB
  3618. // ***********************************************************************************************
  3619. // Erste Spalte ist SB-Spalte
  3620. if (inGang && trs.length > 2) {
  3621. var sbtd = trs[0].getElementsByTagName("td")[td];
  3622. // Grafik für Posten in SB einfügen
  3623. sbtd.innerHTML = '<img id="PostDoneFightsToSB" border="0" src="' + getIconAddr(ICON_SENDTOSB) + '" title="' + TxtPostTitle[myLang] + '" height="14" width="14" style="padding-left: 11px; cursor: pointer">';
  3624.  
  3625. // Handler für das Posten in SB mit Grafik assoziieren
  3626. PostToSBHandler(sbtd.getElementsByTagName("img")[0], SBPOSTMODE_DONE);
  3627. td = 1;
  3628. }
  3629. if (trs.length > 2) {
  3630. var sbtd = trs[0].getElementsByTagName("td")[td];
  3631. // Grafik für Hinzufügen zur Kampfliste
  3632. var pad = 1;
  3633. if (!inGang)
  3634. pad += 10;
  3635. 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">';
  3636. AddToFTHandler(sbtd.getElementsByTagName("img")[0]);
  3637. }
  3638.  
  3639. // Gesamtpunktzahl formatieren
  3640. var ptscol = trs[trs.length - 1].getElementsByTagName("td").length - 1;
  3641. trs[trs.length - 1].getElementsByTagName("td")[ptscol].innerHTML = "<strong>" + number_format(trs[trs.length - 1].getElementsByTagName("td")[ptscol].getElementsByTagName("strong")[0].innerHTML, false) + "</strong>";
  3642.  
  3643. // Für alle Zeilen mit Kämpfen (erste Zeile Überschrift, letzte Zeile Zusammenfassung außen vor)
  3644. insertInfo (trs, 1);
  3645. }
  3646.  
  3647. // ***********************************************************************************************
  3648. // ***********************************************************************************************
  3649. // Fightlog-Tabelle neu formatieren und zusätzliche Spalte einfügen
  3650. // ***********************************************************************************************
  3651. // ***********************************************************************************************
  3652. function ReformatFightlogTable(table) {
  3653. // Referenz auf die Zeilen der Tabelle speichern
  3654. var trs = table.getElementsByTagName("tr");
  3655. if (trs.length <= 2)
  3656. return;
  3657.  
  3658. // Tabellenbreite neu festlegen
  3659. table.width = "800";
  3660.  
  3661. GM_addStyle('#content td { vertical-align: middle; height: 18px; }');
  3662. GM_addStyle('#content .tieritemA { width: 730px; }');
  3663.  
  3664. // Für alle Zeilen
  3665. var insGang = trs[0].getElementsByTagName("td").length >= 5 && trs[trs.length-2].getElementsByTagName("td")[3].innerHTML.search(/^[\t\n]*[+-]/) != -1;
  3666. for (var x = 0; x <= trs.length - 1; x++) {
  3667. // Wenn die aktuelle Zeile eine Zeile mit Kampfdaten ist
  3668. if (x > 0 && x <= trs.length - 2) {
  3669. // Kampf-Icon austauschen
  3670. ChangeFightIcon(trs[x]);
  3671. }
  3672.  
  3673. if (insGang) {
  3674. // neue Zelle für Bande erzeugen und einfügen
  3675. var misstd = document.createElement("td");
  3676. trs[x].insertBefore(misstd, trs[x].getElementsByTagName("td")[3]);
  3677. if (x == 0)
  3678. trs[x].getElementsByTagName("td")[3].innerHTML = "<strong>"+TxtGang[myLang]+"</strong>";
  3679. }
  3680. trs[x].getElementsByTagName("td")[0].setAttribute('style', 'width:17px;');
  3681. trs[x].getElementsByTagName("td")[1].setAttribute('style', 'width:100px;');
  3682. trs[x].getElementsByTagName("td")[2].setAttribute('style', 'width:220px;');
  3683. trs[x].getElementsByTagName("td")[3].setAttribute('style', 'width:220px;');
  3684. trs[x].getElementsByTagName("td")[4].setAttribute('style', 'width:85px; text-align:right;');
  3685. trs[x].getElementsByTagName("td")[5].setAttribute('style', 'width:75px; text-align:right;');
  3686.  
  3687. // neue Zelle erzeugen und einfügen
  3688. var newtd = document.createElement("td");
  3689. var width = (ZONEBASE_URL == "")?75:90;
  3690. newtd.setAttribute('style', 'width:' + width + 'px;');
  3691. trs[x].insertBefore(newtd, trs[x].getElementsByTagName("td")[2]);
  3692. newtd = document.createElement("td");
  3693. newtd.setAttribute('style', 'width: 30px;');
  3694. trs[x].insertBefore(newtd, trs[x].getElementsByTagName("td")[0]);
  3695. }
  3696. // erste Zeile dunkel färben
  3697. trs[0].bgColor = "#232323";
  3698. }
  3699.  
  3700. // **********************************************************************************
  3701. // **********************************************************************************
  3702. // Funktion ermittelt die Anzahl eintreffender Kämpfe
  3703. // **********************************************************************************
  3704. // **********************************************************************************
  3705. function GetNumberOfFights(content) {
  3706. try {
  3707. // Seiteninhalt aufsplitten mit dem Namen des Icons, das für eintreffende Kämpfe verwendet wird;
  3708. // Anzahl der Teile des Splittings - 1 ist die Anzahl eintreffender Kämpfe
  3709. return content.split(ICON_WARNING).length - 1;
  3710. } catch(err) {
  3711. GM_log("Fehler beim Ermitteln der Zahl eintreffender Kämpfe: " + err);
  3712. }
  3713. }
  3714.  
  3715. // **********************************************************************************
  3716. // **********************************************************************************
  3717. // Funktion ermittelt, wieviele verschiedene Vorkommen von idtag es als ID gibt
  3718. // **********************************************************************************
  3719. // **********************************************************************************
  3720. function GetNrOfIDs(doc, idtag) {
  3721. var i = 1;
  3722. while (doc.getElementById(idtag + "_" + i) != null || doc.getElementById(idtag + "_" + i + "_done") != null)
  3723. i++;
  3724. return i - 1;
  3725. }
  3726.  
  3727. // **********************************************************************************
  3728. // **********************************************************************************
  3729. // Funktion tauscht das aktuelle Icon "Suche Kämpfe gegen Gegner" anhand des ID-Tags
  3730. // gegen das "es gibt bereits Kämpfe"-Icon aus
  3731. // **********************************************************************************
  3732. // **********************************************************************************
  3733. function ReplaceFightIcon(idtag) {
  3734. // img-Element ermitteln
  3735. var infoimg = document.getElementById(idtag);
  3736.  
  3737. // Wenn das img-Element gefunden wurde
  3738. if (infoimg != null) {
  3739. // Das aktuelle Icon ist das Icon "Kein Kommentar"
  3740. if (infoimg.src == getIconAddr(ICON_LASTFIGHT_NOCOMMENT)) {
  3741. infoimg.src = getIconAddr(ICON_LASTFIGHT_NOCOMMENT_FIGHTED);
  3742. // Das aktuelle Icon ist das Icon "Es gibt einen Kommentar"
  3743. } else if (infoimg.src == getIconAddr(ICON_LASTFIGHT_COMMENT)) {
  3744. infoimg.src = getIconAddr(ICON_LASTFIGHT_COMMENT_FIGHTED);
  3745. // Das aktuelle Icon ist das Icon "Warnung"
  3746. } else if (infoimg.src == getIconAddr(ICON_LASTFIGHT_WARNING)) {
  3747. infoimg.src = getIconAddr(ICON_LASTFIGHT_WARNING_FIGHTED);
  3748. }
  3749. }
  3750. }
  3751.  
  3752. // **********************************************************************************
  3753. // **********************************************************************************
  3754. // sortiert Liste nach Punkten
  3755. // **********************************************************************************
  3756. // **********************************************************************************
  3757. function sortList(trs, start, end, offset, userids) {
  3758. for (var x = start+1; x <= end; x++) {
  3759. var useridx = trs[x-1].getElementsByTagName("td")[offset+3].innerHTML.split('/id:')[1].split('/"')[0];
  3760. var userid = trs[x].getElementsByTagName("td")[offset+3].innerHTML.split('/id:')[1].split('/"')[0];
  3761. var points = offset<0?userpts[x-1]:CachedPoints[CacheIndex(userid)];
  3762. if (points < (offset<0?userpts[x-2]:CachedPoints[CacheIndex(useridx)]))
  3763. continue;
  3764. var lower = start;
  3765. var upper = x - 1;
  3766. while (lower <= upper) {
  3767. var middle = Math.floor((lower + upper) / 2);
  3768. var useridx = trs[middle].getElementsByTagName("td")[offset+3].innerHTML.split('/id:')[1].split('/"')[0];
  3769. if (points < (offset<0?userpts[middle-1]:CachedPoints[CacheIndex(useridx)]))
  3770. lower = middle + 1;
  3771. else
  3772. upper = middle - 1;
  3773. }
  3774. var oldtr = trs[x].parentNode.removeChild(trs[x]);
  3775. trs[lower].parentNode.insertBefore(oldtr, trs[lower]);
  3776. if (offset < 0) {
  3777. userid = userids[x-1];
  3778. var username = usernames[x-1];
  3779. var history = userhistory[x-1];
  3780. userids.splice(x-1,1);
  3781. usernames.splice(x-1,1);
  3782. userhistory.splice(x-1,1);
  3783. userpts.splice(x-1,1);
  3784. userids.splice(lower-1, 0, userid);
  3785. usernames.splice(lower-1, 0, username);
  3786. userhistory.splice(lower-1, 0, history);
  3787. userpts.splice(lower-1, 0, points);
  3788. }
  3789. }
  3790. }
  3791.  
  3792. // **********************************************************************************
  3793. // **********************************************************************************
  3794. // Funktion sortiert die Kampfliste nach Punkten
  3795. // **********************************************************************************
  3796. // **********************************************************************************
  3797. function sortFightList(offset, showLosers) {
  3798. if (!compress)
  3799. return;
  3800.  
  3801. for (var x = 0; x < nrOfCachedUsers; x++)
  3802. if (CachedStats[x] == "" || CachedPoints[x] == -1)
  3803. return;
  3804.  
  3805. var trs = fltable.getElementsByTagName("tr");
  3806.  
  3807. for (var x = 1; x <= trs.length-2; x++) {
  3808. if (!trs[x].id)
  3809. continue;
  3810. if (trs[x].getElementsByTagName("td")[offset+3].innerHTML.indexOf('/id:') == -1)
  3811. continue;
  3812. var useridx = trs[x].getElementsByTagName("td")[offset+3].innerHTML.split('/id:')[1].split('/"')[0];
  3813. var j = CacheIndex(useridx);
  3814. if ((showLosers && Number(CachedStats[j].split("/")[0]) == 0 && Number(CachedStats[j].split("/")[4]) == 0) || trs[x].style.visibility == "hidden") {
  3815. trs[x].parentNode.removeChild(trs[x]);
  3816. x--;
  3817. }
  3818. }
  3819.  
  3820. // sort
  3821. //sortList(trs, 5, trs.length - 2, offset);
  3822. }
  3823.  
  3824. // **********************************************************************************
  3825. // **********************************************************************************
  3826. // Funktion ersetzt alle fightsearchids auf der Seite
  3827. // **********************************************************************************
  3828. // **********************************************************************************
  3829. function ReplaceFightSearchIDs(userid, nrofpastfights, stats, newFights, lastFightTime) {
  3830. // **********************************************************************************
  3831. // Funktion gibt in Abhängigkeit der Kampfzahl einen Satzbaustein zurück
  3832. // **********************************************************************************
  3833. function GetFightstring(nrofpastfights, stats) {
  3834. // In Abhängigkeit der Anzahl Kämpfe den String zusammenbauen
  3835. if (nrofpastfights == 0)
  3836. return TxtNoFight[myLang];
  3837.  
  3838. if (nrofpastfights == 1)
  3839. var fightstring = Txt1Fight[myLang];
  3840. else
  3841. var fightstring = nrofpastfights + Txt2Fights[myLang];
  3842. return fightstring + " (S/U/N/A/AG: " + stats + ")";
  3843. }
  3844.  
  3845. // Anzahl der Kampfsuch-Icons des aktuellen Users auf der aktuellen Seite ermitteln
  3846. var nrofids = GetNrOfIDs(document, 'fightsearchid:' + userid);
  3847.  
  3848. fightinfo = "#" + m_owngangid;
  3849. var x = CacheIndex(userid);
  3850. var fightstring = GetFightstring(nrofpastfights, stats);
  3851. var singleStats = stats.split("/");
  3852. for (var i = 1; i <= nrofids; i++) {
  3853. // img-Element ermitteln
  3854. var infoimg = document.getElementById('fightsearchid:' + userid + "_" + i);
  3855.  
  3856. // Wenn das img-Element gefunden wurde
  3857. if (infoimg != null) {
  3858. if (parseInt(singleStats[0]) < parseInt(singleStats[2]))
  3859. infoimg.src = getIconAddr(getIconAddr(ICON_LASTFIGHT_WARNING));
  3860. // Infostring über Anzahl der Kämpfe austauschen
  3861. infoimg.title = infoimg.title.replace(/-noch nicht ermittelt- Kämpfe/, fightstring);
  3862.  
  3863. if (CachedStats[x] == "") {
  3864. CachedStats[x] = stats;
  3865. CachedFights[x] = nrofpastfights;
  3866. if (newFights && nrofpastfights > 0) {
  3867. if (fightinfo.substr(0,1) == "#")
  3868. if (FightVals.length > 0)
  3869. fightinfo = FightVals.join('#') + fightinfo;
  3870. //fightinfo += ";" + userid + "/" + Stat;
  3871.  
  3872. //fight = "fight" + base64_encode(fightinfo);
  3873. }
  3874. }
  3875.  
  3876. // Wenn es bereits schon Kämpfe gab
  3877. if (nrofpastfights > 0)
  3878. // Austauschen des aktuellen Icons gegen ein "es gab schon Kämpfe"-Icon
  3879. ReplaceFightIcon('fightsearchid:' + userid + "_" + i);
  3880.  
  3881. // ID ändern, damit aktuelles Element nicht noch einmal bearbeitet wird
  3882. infoimg.id = infoimg.id + '_done';
  3883. }
  3884. }
  3885. }
  3886.  
  3887. // **********************************************************************************
  3888. // PROFILLINK FÄRBEN nach Angreifbarkeit
  3889. // **********************************************************************************
  3890. function ColorProfileLink (userid) {
  3891. // Anzahl der Profillinks des aktuellen Users auf der aktuellen Seite ermitteln
  3892. var nrofids = GetNrOfIDs(document, 'userprofileid:' + userid);
  3893.  
  3894. var x = CacheIndex(userid);
  3895. var waitText = "";
  3896. if (x != -1)
  3897. waitText = CachedWaitText[x];
  3898. // Für alle ermittelten Vorkommen von Profillinks auf der aktuellen Seite
  3899. for (var i = nrofids; i >= 1; i--) {
  3900. // Zelle ermitteln, in der der aktuelle Profillink vorkommt
  3901. var userprofiletd = document.getElementById('userprofileid:' + userid + "_" + i);
  3902.  
  3903. // Wenn die 36 Stunden-Wartefrist noch nicht vorbei ist
  3904. if (userprofiletd != null) {
  3905. if (waitText != "") {
  3906. var tr = userprofiletd.getElementsByTagName("a")[0].getElementsByTagName("tr");
  3907. if (!showHistory || tr.length == 0) {
  3908. var td = userprofiletd.getElementsByTagName("a")[0];
  3909. var title = td.title;
  3910. }
  3911. else {
  3912. var td = tr[0].getElementsByTagName("td")[0];
  3913. var title = td.innerHTML;
  3914. }
  3915. if (title == "")
  3916. title = waitText;
  3917. else if (title.substr(-1) == ")")
  3918. title = title.insert(-1, " (" + waitText + ")");
  3919. else
  3920. title += " (" + waitText + ")";
  3921. if (!showHistory || tr.length == 0)
  3922. td.title = title;
  3923. else
  3924. td.innerHTML = title;
  3925. // Link rot färben
  3926. userprofiletd.getElementsByTagName("a")[0].setAttribute('style', 'color: '+colors[0]);
  3927. if (document.getElementById("att_"+userid))
  3928. document.getElementById("att_"+userid).style.display = "none";
  3929. }
  3930. // ID ändern, damit aktuelles Element nicht noch einmal bearbeitet wird
  3931. userprofiletd.id = userprofiletd.id + '_done';
  3932. }
  3933. }
  3934. }
  3935.  
  3936. // **********************************************************************************
  3937. // **********************************************************************************
  3938. // Funktion ermittelt, ob es bereits Kämpfe gegen den Gegner gab und tauscht ggf.
  3939. // das Icon aus
  3940. // **********************************************************************************
  3941. // **********************************************************************************
  3942. function CheckPastFights(userid, username, offset, showLosers) {
  3943. var x = CacheIndex(userid);
  3944. if (x != -1) {
  3945. if (CachedFights[x] != -1) {
  3946. ReplaceFightSearchIDs (userid, CachedFights[x], CachedStats[x], false, "");
  3947. ColorProfileLink (userid);
  3948. }
  3949. return;
  3950. }
  3951.  
  3952. x = nrOfCachedUsers;
  3953. CachedUsers[nrOfCachedUsers] = userid;
  3954. CachedStats[nrOfCachedUsers] = "";
  3955. CachedPoints[nrOfCachedUsers] = -1;
  3956. CachedFights[nrOfCachedUsers] = -1;
  3957. CachedWaitText[nrOfCachedUsers] = "";
  3958. nrOfCachedUsers++;
  3959.  
  3960. // **********************************************************************************
  3961. // Beziehen der Fightsuchseite
  3962. // **********************************************************************************
  3963. GM_xmlhttpRequest({method: 'GET', url: FIGHTSEARCH_URL + username, onload: function(responseDetails) {
  3964. // Wenn die Seite erfolgreich abgerufen werden konnte
  3965. if (responseDetails.status == 200) {
  3966. // **********************************************************************************
  3967. // Funktion ermittelt den jüngeren Zeitpunkt
  3968. // **********************************************************************************
  3969. function greaterDate(d1, d2) {
  3970. if (d1 == "")
  3971. return d2;
  3972. if (d2 == "")
  3973. return d1;
  3974. if (d1.length < 16 || d2.length < 16)
  3975. return d1; // kein Jahr: d1 ist jünger
  3976. var dt1 = d1.substr(6,4) + d1.substr(3,2) + d1.substr(0,2) + d1.substr(11);
  3977. var dt2 = d2.substr(6,4) + d2.substr(3,2) + d2.substr(0,2) + d2.substr(11);
  3978. return dt1 < dt2?d2:d1;
  3979. }
  3980.  
  3981. // **********************************************************************************
  3982. // Funktion ermittelt den Zeitpunkt des letzten ausgehenden Kampfes
  3983. // **********************************************************************************
  3984. function GetLastDate(trs, lastdate) {
  3985.  
  3986. // Für alle Kampfzeilen
  3987. for (var i = 1; i < trs.length - 1; i++) {
  3988. // jüngeres Datum ermitteln
  3989. lastdate = greaterDate(lastdate, trs[i].getElementsByTagName("td")[1].innerHTML);
  3990. }
  3991.  
  3992. // Zurückgeben des Ergebnisses
  3993. return lastdate;
  3994. }
  3995.  
  3996. // **********************************************************************************
  3997. // Funktion ermittelt den Zeitpunkt des letzten ausgehenden Kampfes
  3998. // **********************************************************************************
  3999. function GetLastOutgoingFightdate(trs, lastdate) {
  4000.  
  4001. // Für alle Kampfzeilen
  4002. for (var i = 1; i < trs.length - 1; i++) {
  4003. // HTML-Code des Kampfausgangsicons speichern
  4004. var iconhtml = trs[i].getElementsByTagName("td")[0].innerHTML;
  4005.  
  4006. // Wenn es sich beim aktuellen Kampf um einen ausgehenden handelt
  4007. if (trs[i].getElementsByTagName("td").length < 6)
  4008. var points = trs[i].getElementsByTagName("td")[4].innerHTML;
  4009. else
  4010. var points = trs[i].getElementsByTagName("td")[5].innerHTML;
  4011. 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')) {
  4012. // jüngeres Datum ermitteln
  4013. lastdate = greaterDate(lastdate, trs[i].getElementsByTagName("td")[1].innerHTML);
  4014. }
  4015. }
  4016.  
  4017. // Zurückgeben des Ergebnisses
  4018. return lastdate;
  4019. }
  4020.  
  4021. // **********************************************************************************
  4022. // Funktion liefert den Statistik-Satzbaustein zurück
  4023. // **********************************************************************************
  4024. function GetFightStatistic(userid, username, content, page, nrofpastfights, loss, wins, draws, evades, evades2, lastfightTime, lastoutgoingfightdate, lastTime, seiten, fightsonpage1) {
  4025. var changed = true;
  4026. if (page == 1) {
  4027. var seiten = content.split("/fight/fightlog/").length - 2;
  4028. var fightsonpage1 = content.split("/fight/view").length - 1;
  4029. var oldStat = PGu_getValue("FightStat"+userid+"|", "");
  4030. lastoutgoingfightdate = "";
  4031. if (oldStat != "") {
  4032. var FightStatSplit = oldStat.split("/");
  4033. FightStatSplit.push(1);
  4034. if (FightStatSplit[1].indexOf(":") != -1) {
  4035. var fss = FightStatSplit[1].split(":");
  4036. if (fss[1] != seiten || fss[2] != fightsonpage1)
  4037. FightStatSplit[1] = 0;
  4038. else {
  4039. lastoutgoingfightdate = FightStatSplit[0];
  4040. if (lastoutgoingfightdate == "0")
  4041. lastoutgoingfightdate = "";
  4042. FightStatSplit[1] = fss[0];
  4043. changed = false;
  4044. }
  4045. }
  4046. if (FightStatSplit.length < 7 || FightStatSplit[1] == 0 || FightStatSplit[7] != 5) {
  4047. oldStat = "";
  4048. changed = true;
  4049. }
  4050. }
  4051. if (oldStat != "") {
  4052. if (nrofpastfights == 0) {
  4053. nrofpastfights = Number(FightStatSplit[1]);
  4054. wins = Number(FightStatSplit[2]);
  4055. draws = Number(FightStatSplit[3]);
  4056. loss = Number(FightStatSplit[4]);
  4057. evades = Number(FightStatSplit[5]);
  4058. evades2 = Number(FightStatSplit[6]);
  4059. evades += evades2;
  4060. evades2 += draws;
  4061. }
  4062. }
  4063. }
  4064.  
  4065. if (changed) {
  4066. var doc = HTML2DOM(content);
  4067. var tables = doc.getElementsByTagName("table");
  4068. var ft = getFightTableIndex(tables) + 1;
  4069. var table = tables[ft];
  4070. var trs = table.getElementsByTagName("tr");
  4071. // Ermitteln des Zeitpunkts des letzten Kampfes
  4072. lastfightTime = GetLastDate(trs, lastfightTime);
  4073. // Ermitteln des Zeitpunkts des letzten ausgehenden Kampfes
  4074. lastoutgoingfightdate = GetLastOutgoingFightdate(trs, lastoutgoingfightdate);
  4075.  
  4076. // Anzahl der Kämpfe ermitteln
  4077. nrofpastfights += content.split("/fight/view").length - 1;
  4078.  
  4079. loss += content.split("0_0.gif").length + content.split("0_1.gif").length - 2;
  4080. wins += content.split("1_0.gif").length + content.split("1_1.gif").length - 2;
  4081. draws += content.split("2_0.gif").length + content.split("2_1.gif").length - 2;
  4082. evades += content.split("evade.gif").length - 1;
  4083. evades2 += content.split("+-0").length + content.split("-+0").length - 2;
  4084. var Seite = content.indexOf("<strong>" + TxtSeite[lang] + ":</strong>");
  4085. if (Seite != -1)
  4086. Seite = content.split("<strong>" + TxtSeite[lang] + ":</strong>")[1].indexOf("fight/fightlog/"+(page+1)+"/");
  4087. }
  4088. else
  4089. var Seite = -1;
  4090. if (Seite != -1) {
  4091. // **********************************************************************************
  4092. // Beziehen der Fightsuchseite
  4093. // **********************************************************************************
  4094. GM_xmlhttpRequest({method: 'GET', url: FIGHTLOG_URL + (page+1) + "/?q=" + username, onload: function(responseDetails) {
  4095. // Wenn die Seite erfolgreich abgerufen werden konnte
  4096. if (responseDetails.status == 200) {
  4097. var content = responseDetails.responseText;
  4098. GetFightStatistic(userid, username, content, page+1, nrofpastfights, loss, wins, draws, evades, evades2, lastfightTime, lastoutgoingfightdate, lastTime, seiten, fightsonpage1);
  4099. }
  4100. }
  4101. });
  4102. }
  4103. else
  4104. {
  4105. // String zusammenbauen, der die Zahl der Kämpfe beinhaltet
  4106. evades2 -= draws;
  4107. evades -= evades2;
  4108. var stats = wins + "/" + draws + "/" + loss + "/" + evades + "/" + evades2;
  4109.  
  4110. // Differenz zur aktuellen Zeit bilden (in Minuten) und daraus ableiten, ob die Wartefrist von fightPause Stunden noch gilt
  4111. var timediff = fightPause * 60 - GetTimeDiffFromNowInMinutes(lastoutgoingfightdate);
  4112. if (timediff > 0) {
  4113. // Wartezeit bis zum nächsten Angriff berechnen (in Stunden)
  4114. var hours = Math.floor(timediff / 60);
  4115. var minutes = timediff - hours * 60;
  4116. CachedWaitText[x] = TxtWaitAttack[myLang].replace('%s', hours + ":" + Right$("0" + minutes, 2));
  4117. }
  4118. ColorProfileLink (userid);
  4119. var newFights = (oldStat == "");
  4120. var Stat = (lastoutgoingfightdate==""?"0":lastoutgoingfightdate) + "/" + nrofpastfights + ":" + seiten + ":" + fightsonpage1 + "/" + stats;
  4121. if (changed)
  4122. PGu_setValue("FightStat" + userid + "|", Stat + "/5");
  4123. ReplaceFightSearchIDs (userid, nrofpastfights, stats, newFights, lastfightTime);
  4124.  
  4125. sortFightList(offset, showLosers);
  4126. }
  4127. }
  4128.  
  4129. // **********************************************************************************
  4130. // FUNCTION MAIN
  4131. // **********************************************************************************
  4132. var content = responseDetails.responseText;
  4133.  
  4134. // **********************************************************************************
  4135. // ZAHL DER BEREITS BESTRITTENEN KÄMPFE ERMITTELN
  4136. // **********************************************************************************
  4137. GetFightStatistic(userid, username, content, 1, 0, 0, 0, 0, 0, 0, "", "", "", 0, 0);
  4138. }
  4139. }
  4140. });
  4141. }
  4142.  
  4143. // ***********************************************************************************************
  4144. // ***********************************************************************************************
  4145. // Funktion formatiert einen HTML-String mit den Info-Icons für den übergebenen Penner
  4146. // ***********************************************************************************************
  4147. // ***********************************************************************************************
  4148. function GetIconInsertHTML(userid, username, fighttime) {
  4149. // Icon für Zugriff auf Pennerzone-Statistik einfügen
  4150. if (ZONEBASE_URL != "")
  4151. 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>';
  4152. else
  4153. var IconInsertHTML = "";
  4154.  
  4155. // Anzahl an Kommentaren zum aktuellen User ermitteln
  4156. var NrOfFightComments = GetNrOfFightCommentsInList(username);
  4157.  
  4158. // Wenn es bereits Kampfkommentare gibt
  4159. if (NrOfFightComments > 0) {
  4160. var lastfighticon = getIconAddr(ICON_LASTFIGHT_COMMENT);
  4161. // Wenn es mehr als einen Kommentar gibt
  4162. if (NrOfFightComments > 1) {
  4163. var lastfightadditionalinfo = '. Es gibt ' + NrOfFightComments + ' Kommentare zu diesem Gegner';
  4164. // sonst: Es gibt einen Kommentar
  4165. } else {
  4166. var lastfightadditionalinfo = '. Es gibt einen Kommentar zu diesem Gegner';
  4167. }
  4168. // sonst: Es gibt noch keine Kampfkommentare
  4169. } else {
  4170. var lastfighticon = getIconAddr(ICON_LASTFIGHT_NOCOMMENT);
  4171. var lastfightadditionalinfo = "";
  4172. }
  4173.  
  4174. // Wenn zu diesem User eine Warnung existiert
  4175. if (ExistsWarning(username)) {
  4176. // Einstellung überschreiben
  4177. var lastfighticon = getIconAddr(ICON_LASTFIGHT_WARNING);
  4178. var lastfightadditionalinfo = lastfightadditionalinfo + ". ACHTUNG, Warnung wurde aktiviert!";
  4179. }
  4180.  
  4181. // Icon für letzte Kämpfe einfügen
  4182. if (userid != m_ownuserid)
  4183. 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>'
  4184. else if (fighttime != "x")
  4185. IconInsertHTML = IconInsertHTML + '<a><img border="0" src="' + getIconAddr(ICON_LASTFIGHT_NONE) + '" height="0" width="14" alt="O"></a>';
  4186.  
  4187. // Wenn eine Kampfzeit angegeben wurde
  4188. if (fighttime != "" && fighttime != "ft" && fighttime != "x" && fighttime != "nofight") {
  4189. // Wenn zu diesem Kampf bereits ein Kommentar existiert
  4190. if (fighttime.length > 15)
  4191. fighttime = fighttime.substr(11) + " " + fighttime.substr(0,6) + fighttime.substr(8,2);
  4192. if (IsFightCommentInList(username, fighttime)) {
  4193. var fightcommenticon = getIconAddr(ICON_FIGHTCOMMENT);
  4194. // sonst: Zu diesem Kampf existiert noch kein Kommentar
  4195. } else {
  4196. var fightcommenticon = getIconAddr(ICON_NOFIGHTCOMMENT);
  4197. }
  4198.  
  4199. // Icon für Kampfkommentare einfügen
  4200. 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">'
  4201. }
  4202.  
  4203. // Icons für Angriff und Kampfliste einfügen
  4204. if (userid == m_ownuserid && fighttime != "x")
  4205. IconInsertHTML = IconInsertHTML + '<a><img border="0" src="' + getIconAddr(ICON_LASTFIGHT_NONE) + '" height="0" width="14" alt="O"></a>';
  4206. else if (fighttime != "x" && fighttime != "nofight")
  4207. 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>';
  4208.  
  4209. if (userid != m_ownuserid && fighttime != "ft") {
  4210. var fightIDs = ";" + PGu_getValue("FightIDList", "") + ";";
  4211. var userinFT = (fightIDs.indexOf(";" + userid + ";") != -1);
  4212. if (userinFT)
  4213. 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>'
  4214. else
  4215. 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>'
  4216. }
  4217. else if (fighttime != "x" && fighttime != "ft")
  4218. IconInsertHTML = IconInsertHTML + '<a><img border="0" src="' + getIconAddr(ICON_LASTFIGHT_NONE) + '" height="0" width="14" alt="O"</a>';
  4219.  
  4220. // Icon-HTML zurückgeben
  4221. return IconInsertHTML;
  4222. }
  4223.  
  4224. // ***********************************************************************************************
  4225. // ***********************************************************************************************
  4226. // Funktion entfernt White Space aus dem übergebenen String
  4227. // ***********************************************************************************************
  4228. // ***********************************************************************************************
  4229. function trimString(s) {
  4230. return s.replace(/^\s+|\s+$/g,'');
  4231. }
  4232.  
  4233. // ***********************************************************************************************
  4234. // ***********************************************************************************************
  4235. // Funktion schreibt die aktuelle Anzahl eintreffender Kämpfe in die Zeilenüberschrift
  4236. // ***********************************************************************************************
  4237. // ***********************************************************************************************
  4238. function WriteNrOfIncomingFights(content, table) {
  4239. // Anzahl einkommender Kämpfe ermitteln
  4240. var NrOfIncomingFights = GetNumberOfFights(content);
  4241.  
  4242. // Wenn es mindestens einen einkommenden Kampf gibt
  4243. if (NrOfIncomingFights > 0) {
  4244. // Referenz auf Tabellenzeilen in trs speichern
  4245. var trs = table.getElementsByTagName("tr");
  4246.  
  4247. // Für alle Tabellenzeilen
  4248. for (var i = 0; i < trs.length; i++) {
  4249. // Wenn in der aktuellen Tabellenzeile "Eintreffende Kämpfe" steht
  4250. if (trs[i].innerHTML.indexOf(TxtIncFights[lang]) != -1) {
  4251. // Referenz auf erstes Span speichern
  4252. var span = trs[i].getElementsByTagName("span")[0];
  4253. // Wenn nur ein Kampf eintrifft
  4254. if (NrOfIncomingFights == 1) {
  4255. span.innerHTML = Txt1IncFight[myLang];
  4256. // sonst: Es treffen mehrere Kämpfe ein
  4257. } else {
  4258. span.innerHTML = NrOfIncomingFights + Txt2IncFights[myLang];
  4259. }
  4260. break;
  4261. }
  4262. }
  4263. }
  4264. }
  4265.  
  4266. // ***********************************************************************************************
  4267. // ***********************************************************************************************
  4268. // Funktion aktualisiert die Kampfstatistiken
  4269. // ***********************************************************************************************
  4270. // ***********************************************************************************************
  4271. function updatePage(trs)
  4272. {
  4273. GM_xmlhttpRequest({method: 'GET', url: FIGHTLOG_URL + "1/",onload: function(logresponseDetails) {
  4274. var notFound = 0;
  4275. for (var j = 5; j < trs.length - 1; j++) {
  4276. if (!trs.id)
  4277. continue;
  4278. var userid = trs[j].getElementsByTagName("td")[4].innerHTML.split('/id:')[1].split('/"')[0];
  4279. nrofids = GetNrOfIDs(document, 'fightsearchid:' + userid);
  4280. var infoimg = document.getElementById('fightsearchid:' + userid + "_1_done");
  4281. if (infoimg == null) {
  4282. notFound++;
  4283. continue;
  4284. }
  4285. var fightstring = infoimg.title;
  4286. for (var i = 2; i <= nrofids; i++) {
  4287. // img-Element ermitteln
  4288. infoimg = document.getElementById('fightsearchid:' + userid + "_" + i);
  4289.  
  4290. // Wenn das img-Element gefunden wurde
  4291. if (infoimg != null) {
  4292. // Infostring über Anzahl der Kämpfe austauschen
  4293. infoimg.title = fightstring;
  4294.  
  4295. // Austauschen des aktuellen Icons gegen ein "es gab schon Kämpfe"-Icon
  4296. ReplaceFightIcon('fightsearchid:' + userid + "_" + i);
  4297.  
  4298. // ID ändern, damit aktuelles Element nicht noch einmal bearbeitet wird
  4299. infoimg.id = infoimg.id + '_done';
  4300. }
  4301. }
  4302. }
  4303. if (notFound > 0)
  4304. updatePage(trs);
  4305. else
  4306. document.getElementById("kaempfeanzeigen").disabled = false;
  4307. } });
  4308. }
  4309.  
  4310. // ***********************************************************************************************
  4311. // ***********************************************************************************************
  4312. // Funktion ermittelt den Usernamen auch bei Glühwürmchen
  4313. // ***********************************************************************************************
  4314. // ***********************************************************************************************
  4315. function getUserName(td) {
  4316. if (td.getElementsByTagName("span").length > 0) {
  4317. var username = "";
  4318. for (i = 0; i < td.getElementsByTagName("span").length; i++)
  4319. if (td.getElementsByTagName("span")[i].style.fontSize == "10px") {
  4320. username = td.getElementsByTagName("a")[0].innerHTML.replace(/<br>/g, "").split(">").pop();
  4321. break;
  4322. }
  4323. else
  4324. username += td.getElementsByTagName("span")[i].innerHTML;
  4325. }
  4326. else if (td.getElementsByTagName("a").length > 0)
  4327. var username = td.getElementsByTagName("a")[0].innerHTML.replace(/<br>/g, "").split(">").pop();
  4328. else
  4329. var username = td.innerHTML;
  4330. return trimString(username);
  4331. }
  4332. // ***********************************************************************************************
  4333. // ***********************************************************************************************
  4334. // Funktion ruft alle Kämpfe einer Logseite aus und iteriert ggf. auf die nächste bis zum Ende
  4335. // ***********************************************************************************************
  4336. // ***********************************************************************************************
  4337. function ProcessLogPage(table, ProgressTable, LogPageNr, showLosers, gangFilter) {
  4338.  
  4339. // Referenz auf Tabellenzeilen in trs speichern
  4340. var trs = table.getElementsByTagName("tr");
  4341. fltable = table;
  4342.  
  4343. // Wenn die letzte abzurufende Seite noch nicht erreicht ist
  4344. if (LogPageNr <= Number(document.getElementById("seitebis").value)) {
  4345.  
  4346. // **********************************************************************************
  4347. // Beziehen der Fightlogseite
  4348. // **********************************************************************************
  4349. GM_xmlhttpRequest({method: 'GET', url: FIGHTLOG_URL + LogPageNr + "/",onload: function(logresponseDetails) {
  4350. // Wenn die Seite erfolgreich abgerufen werden konnte
  4351. if (logresponseDetails.status == 200) {
  4352. FillProgressTable(ProgressTable, LogPageNr);
  4353.  
  4354. // Content der Seite speichern
  4355. var logcontent = logresponseDetails.responseText;
  4356.  
  4357. var posAnf = logcontent.search('<table width="\\d*" border="0"');
  4358. var fighttable = logcontent.substr(posAnf);
  4359. posAnf = fighttable.indexOf(">");
  4360. fighttable = fighttable.substr(posAnf+1).split('</table>')[0];
  4361.  
  4362. var fighttrs = fighttable.split('<tr');
  4363.  
  4364. var Fights = [];
  4365. var j = 0;
  4366. var nrinCache = nrOfCachedUsers;
  4367.  
  4368. for (var i = 2; i <= fighttrs.length - 2; i++) {
  4369. var currenttr = fighttrs[i].split("</tr>")[0];
  4370. var fighttds = currenttr.split("<td>");
  4371.  
  4372. if (fighttds.length == 6 && fighttds[4].indexOf("/profil/bande:") != -1 && gangFilter != "") {
  4373. var gangname = fighttds[4];
  4374. gangname = trimString(gangname.split("<")[0]).toLowerCase();
  4375. if (!filter(gangname, gangFilter))
  4376. continue;
  4377. } else if (showLosers) {
  4378. var userid = trimString(fighttds[3].split("</td>")[0]).split('/id:')[1].split('/"')[0];
  4379. if (CacheIndex(userid) != -1)
  4380. continue;
  4381. CachedUsers[nrOfCachedUsers] = userid;
  4382. nrOfCachedUsers++;
  4383. }
  4384.  
  4385. Fights[j] = new Array(7);
  4386.  
  4387. Fights[j][0] = trimString(fighttds[1].split("</td>")[0]); // Kampficon
  4388. Fights[j][1] = trimString(fighttds[2].split("</td>")[0]); // Datum/Uhrzeit
  4389. Fights[j][2] = trimString(fighttds[3].split("</td>")[0]); // Name
  4390. if (fighttds.length == 6 && fighttds[4].indexOf("/profil/bande:") != -1) {
  4391. Fights[j][3] = trimString(fighttds[4].split("</td>")[0]); // Bande
  4392. var pp = 5;
  4393. }
  4394. else {
  4395. Fights[j][3] = ''; // Bande
  4396. var pp = 4;
  4397. }
  4398. Fights[j][4] = trimString(fighttds[pp].split("</td>")[0]); // Geld
  4399. if (fighttds.length == 6 && pp == 4)
  4400. Fights[j][5] = trimString(fighttds[5].split("</td>")[0]); // Punkte
  4401. else
  4402. Fights[j][5] = trimString(fighttds[pp].split("</td>")[1].split(">")[1]); // Punkte
  4403. Fights[j][6] = fighttds[0].split("id=")[1].split('"')[1];
  4404. j++;
  4405. }
  4406. nrOfCachedUsers = nrinCache;
  4407.  
  4408. GM_addStyle('#content td { vertical-align: middle; height: 18px; }');
  4409.  
  4410. var nroffights = trs.length - 8;
  4411.  
  4412. // Für alle Kämpfe
  4413. for (var i = 0; i < Fights.length; i++) {
  4414. // Neue Zeile erzeugen
  4415. var newtr = document.createElement("tr");
  4416.  
  4417. // Neue Zellen einfügen
  4418. for (var j = 0; j < 7; j++) {
  4419. var newtd = document.createElement("td");
  4420. newtr.appendChild(newtd);
  4421. }
  4422.  
  4423. newtr.id = Fights[i][6];
  4424. newtr.getElementsByTagName("td")[0].setAttribute('style', 'width:17px;');
  4425. newtr.getElementsByTagName("td")[0].innerHTML = Fights[i][0];
  4426.  
  4427. // Kampf-Icon austauschen
  4428. ChangeFightIcon(newtr);
  4429.  
  4430. newtr.getElementsByTagName("td")[1].setAttribute('style', 'width:75px;');
  4431. newtr.getElementsByTagName("td")[1].innerHTML = Fights[i][1];
  4432.  
  4433. var width = (ZONEBASE_URL == "")?70:85;
  4434. newtr.getElementsByTagName("td")[2].setAttribute('style', 'width:' + width + 'px;');
  4435.  
  4436. newtr.getElementsByTagName("td")[3].setAttribute('style', 'width:170px;');
  4437. newtr.getElementsByTagName("td")[3].innerHTML = Fights[i][2];
  4438.  
  4439. newtr.getElementsByTagName("td")[4].setAttribute('style', 'width:175px;');
  4440. newtr.getElementsByTagName("td")[4].innerHTML = Fights[i][3];
  4441.  
  4442. newtr.getElementsByTagName("td")[5].setAttribute('style', 'width:85px; text-align:right;');
  4443. newtr.getElementsByTagName("td")[5].innerHTML = Fights[i][4];
  4444.  
  4445. newtr.getElementsByTagName("td")[6].setAttribute('style', 'width:65px; text-align:right;');
  4446. newtr.getElementsByTagName("td")[6].innerHTML = number_format(Fights[i][5], false);
  4447.  
  4448. // Name und UserID des Kämpfers aus dem Link auslesen
  4449. var username = getUserName(newtr.getElementsByTagName("td")[3]);
  4450. var userid = newtr.getElementsByTagName("td")[3].innerHTML.split('/id:')[1].split('/"')[0];
  4451.  
  4452. var fighttime = Fights[i][1];
  4453.  
  4454. // User-Profillink mit ID versehen und Link mit "grün" initialisieren
  4455. // (wird dann später bei der Überprüfung von Punkten und Angriffszeit ggf. nach rot umgefärbt)
  4456. newtr.getElementsByTagName("td")[3].id = 'userprofileid:' + userid + "_" + (GetNrOfIDs(document, 'userprofileid:' + userid) + 1);
  4457. //newtr.getElementsByTagName("td")[3].getElementsByTagName("a")[0].setAttribute('style', 'color: #33cc66');
  4458. newtr.getElementsByTagName("td")[3].getElementsByTagName("a")[0].setAttribute('target', '_blank');
  4459.  
  4460. // Info-Icons in die neue Zelle einfügen
  4461. newtr.getElementsByTagName("td")[2].innerHTML = GetIconInsertHTML(userid, username, fighttime);
  4462. // Handler für Fightkommentare mit Link assoziieren
  4463. FightCommentHandler(newtr.getElementsByTagName("td")[2].getElementsByTagName("img")[ZONEBASE_URL==""?1:2]);
  4464. FightListHandler(newtr.getElementsByTagName("td")[2].getElementsByTagName("img")[ZONEBASE_URL==""?3:4]);
  4465.  
  4466. // Element für Post erzeugen und Ankreuzkästchen in die Zelle setzen
  4467. newtd = document.createElement("td");
  4468. newtd.setAttribute('style', 'width:30px;');
  4469. var idnumber = nroffights + i;
  4470. newtd.innerHTML = '<form style="padding-bottom: 4px; padding-left: 12px;"><input name="PostToSB' + idnumber + '" id="PostToSB' + idnumber + '" type="checkbox"></form>';
  4471. newtr.insertBefore(newtd, newtr.getElementsByTagName("td")[0]);
  4472.  
  4473. // Neue Zeile einfügen
  4474. trs[trs.length - 1].parentNode.insertBefore(newtr, trs[trs.length - 1]);
  4475.  
  4476. // Zahl der Kämpfe ermitteln
  4477. CheckPastFights(userid, username, 1, showLosers);
  4478. }
  4479. }
  4480. else
  4481. LogPageNr--; // noch einmal versuchen
  4482.  
  4483. // Nächste Fightlogseite abrufen
  4484. ProcessLogPage(table, ProgressTable, LogPageNr + 1, showLosers, gangFilter)
  4485. }
  4486. });
  4487. // sonst: Die letzte abzurufende Seite wurde erreicht
  4488. } else {
  4489. // Letzte Seite speichern, damit sie bei der nächsten Anzeige wiederhergestellt werden kann
  4490. GM_setValue("SeiteBis", Number(document.getElementById("seitebis").value));
  4491.  
  4492. document.getElementById("preprogress").parentNode.removeChild(document.getElementById("preprogress"));
  4493. document.getElementById("progress").parentNode.removeChild(document.getElementById("progress"));
  4494.  
  4495. compress = showLosers || gangFilter != "";
  4496.  
  4497. // Angreifbarkeit der Spieler (Punkte/36 Stunden) farblich kennzeichnen
  4498. InsertAttackableInFirstTable(document.getElementById("content").getElementsByTagName("table")[2], true, false, compress, showLosers);
  4499.  
  4500. updatePage(trs);
  4501. insertSBTable("PostDoneFightsToSB", m_owngangname);
  4502. }
  4503. }
  4504.  
  4505. // ***********************************************************************************************
  4506. // ***********************************************************************************************
  4507. // Funktion erzeugt einen Fortschrittsbalken und liefert ihn als Tabelle zurück
  4508. // ***********************************************************************************************
  4509. // ***********************************************************************************************
  4510. function CreateProgressTable(columnr) {
  4511. var newtable = document.createElement("table");
  4512. newtable.style.width = "300px";
  4513. newtable.style.border = "#000000 1px solid";
  4514. var newtr = document.createElement("tr");
  4515.  
  4516. newtable.appendChild(newtr);
  4517.  
  4518. for (var i = 1; i <= columnr; i++) {
  4519. var newtd = document.createElement("td");
  4520. newtd.innerHTML = '&nbsp;';
  4521. newtr.appendChild(newtd);
  4522. }
  4523.  
  4524. return newtable;
  4525. }
  4526.  
  4527. // ***********************************************************************************************
  4528. // ***********************************************************************************************
  4529. // Funktion füllt den Fortschrittsbalken bis zur Spalte columnnr
  4530. // ***********************************************************************************************
  4531. // ***********************************************************************************************
  4532. function FillProgressTable(currenttable, columnnr) {
  4533. for (var i = 0; i < columnnr; i++) {
  4534. var currenttd = currenttable.getElementsByTagName("td")[i];
  4535. currenttd.style.backgroundColor = "#33cc00 ";
  4536. }
  4537. }
  4538.  
  4539. // ***********************************************************************************************
  4540. // ***********************************************************************************************
  4541. // Funktion testet gangname gegen filtr
  4542. // ***********************************************************************************************
  4543. // ***********************************************************************************************
  4544. function filter(gangname, filtr) {
  4545. var pFilter = filtr;
  4546. var wildstart = false;
  4547. var wildend = false;
  4548. if (filtr.substr(0,1) == "*") {
  4549. pFilter = filtr.substr(1);
  4550. wildstart = true;
  4551. }
  4552. if (filtr.substr(filtr.length-1,1) == "*") {
  4553. pFilter = pFilter.substr(0, pFilter.length-1);
  4554. wildend = true;
  4555. }
  4556.  
  4557. var pos = gangname.indexOf(pFilter);
  4558. return (pos != -1) && (pos == 0 || wildstart) && (gangname.substr(gangname.length - pFilter.length) == pFilter || wildend);
  4559. }
  4560.  
  4561. // ***********************************************************************************************
  4562. // ***********************************************************************************************
  4563. // Funktion fügt die Controls zur vollständigen Kampfanzeige ein
  4564. // ***********************************************************************************************
  4565. // ***********************************************************************************************
  4566. function InsertSubmitButton(content, table, inGang) {
  4567.  
  4568. var SubmitButtonHTML = '<form name="Formular" action=""><input type="button" value="' + TxtAllFights[myLang] + '" id="kaempfeanzeigen"></form>';
  4569. var SubmitButton2HTML = '<form name="Formular2" action=""><input type="button" value="BBCode" id="bbcodeanzeigen" title="' + TxtShowBBCode[myLang] + '"></form>';
  4570.  
  4571. // Referenz auf Tabellenzeilen in trs speichern
  4572. var trs = table.getElementsByTagName("tr");
  4573.  
  4574. var rownr = 1;
  4575. var newdiv = document.createElement("div");
  4576. 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>';
  4577. trs[0].getElementsByTagName("div")[0].parentNode.insertBefore(newdiv, trs[0].getElementsByTagName("div")[0]);
  4578. PGu_setValue("gangsearch", "");
  4579.  
  4580. // ***********************************************************************************************
  4581. // Neue Zeile mit Button einfügen
  4582. // ***********************************************************************************************
  4583. var newtr = document.createElement("tr");
  4584. var newtd = document.createElement("td");
  4585. newtd.setAttribute("colspan", "2");
  4586. var postText = "";
  4587. if (inGang)
  4588. 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">&nbsp;' + TxtPostFight[myLang] + '&nbsp;</td>';
  4589. newtd.innerHTML = '<table><tr><td style="vertical-align:middle">' + SubmitButtonHTML + '</td><td style="vertical-align:middle">&nbsp;' + TxtUpToPage[myLang] + '&nbsp;</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">&nbsp;' + TxtNurLoser[myLang] + '&nbsp;</td>' + postText + '&nbsp;<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 />';
  4590. newtr.appendChild(newtd);
  4591. trs[rownr].parentNode.insertBefore(newtr, trs[rownr]);
  4592. bbcodeEinAus();
  4593. document.getElementById("seitebis").value = GM_getValue("SeiteBis", 2);
  4594.  
  4595. var NrOfPages = table.innerHTML.split('href="/fight/fightlog/').length - 1;
  4596.  
  4597. // ***********************************************************************************************
  4598. // Click-Event für Schaltfläche
  4599. // ***********************************************************************************************
  4600. table.parentNode.getElementsByTagName("input")[3].addEventListener("click", function(event)
  4601. {
  4602. // Button disablen
  4603. document.getElementById("kaempfeanzeigen").disabled = true;
  4604.  
  4605. if (!event) var event = window.event;
  4606.  
  4607. // Referenz auf Tabellenzeilen in trs speichern
  4608. var trs = table.getElementsByTagName("tr");
  4609.  
  4610. var rownr = 1;
  4611. // ***********************************************************************************************
  4612. // Leerzeile einfügen
  4613. // ***********************************************************************************************
  4614. var newtr = document.createElement("tr");
  4615. newtr.setAttribute("id", "preprogress");
  4616. var newtd = document.createElement("td");
  4617. newtd.setAttribute("colspan", "2");
  4618. newtd.innerHTML = '&nbsp;';
  4619. newtr.appendChild(newtd);
  4620. trs[rownr].parentNode.insertBefore(newtr, trs[rownr + 2]);
  4621.  
  4622. // ***********************************************************************************************
  4623. // Fortschrittsbalken einfügen
  4624. // ***********************************************************************************************
  4625. newtr = document.createElement("tr");
  4626. newtr.setAttribute("id", "progress");
  4627. newtd = document.createElement("td");
  4628. newtd.setAttribute("colspan", "2");
  4629. newtd.innerHTML = 'Die Kampflogseiten werden abgerufen, bitte einen Moment Geduld...';
  4630. newtr.appendChild(newtd);
  4631.  
  4632. // Wenn die Checkbox angehakt ist
  4633. var showLosers = event.shiftKey != 0 || document.getElementById("showLosers").checked;
  4634. var ProgressTable = CreateProgressTable(Number(document.getElementById("seitebis").value));
  4635. newtd.appendChild(ProgressTable);
  4636. trs[rownr].parentNode.insertBefore(newtr, trs[rownr + 2]);
  4637.  
  4638. var gangFilter = document.getElementById("gangfilter").value.toLowerCase();
  4639. // alle Eintraege entfernen
  4640. for (var x = trs.length - 2; x >= 8; x--) {
  4641. trs[x].parentNode.removeChild(trs[x]);
  4642. }
  4643. nrOfCachedUsers = 0;
  4644.  
  4645. // Folgeseite(n) abrufen
  4646. compress = false;
  4647. ProcessLogPage(table, ProgressTable, 1, showLosers, gangFilter);
  4648. }, false);
  4649. }
  4650.  
  4651. // ***********************************************************************************************
  4652. // ***********************************************************************************************
  4653. // Funktion sendet einen HTTP-Request via POST
  4654. // ***********************************************************************************************
  4655. // ***********************************************************************************************
  4656. function PostToHTTP(URL, pars, onsuccess) {
  4657. var params = [];
  4658. for (var i = 0; i < pars.length / 2; i++)
  4659. params[i] = pars[i*2] + "=" + encodeURIComponent(pars[i*2+1]);
  4660.  
  4661. GM_xmlhttpRequest({
  4662. method: 'POST',
  4663. url: URL,
  4664. headers: {'Content-type': 'application/x-www-form-urlencoded'},
  4665. data: params.join("&"),
  4666. onload: function(responseDetails)
  4667. {
  4668. if (URL.indexOf('downfight.de') != -1 && responseDetails.status != 200) {
  4669. alert("Fehler beim Abruf der Daten von downfight.de: " + responseDetails.statusText + ". Bitte später noch einmal versuchen.");
  4670. return;
  4671. }
  4672. if (URL.indexOf('www.downfight.de') != -1) {
  4673. if (responseDetails.responseText.indexOf('unscharf.png') != -1) {
  4674. PostToHTTP(URL.replace('www.', ''), pars, onsuccess);
  4675. return;
  4676. }
  4677. }
  4678. if (typeof onsuccess == "function")
  4679. onsuccess(responseDetails.responseText);
  4680. else if (onsuccess != "")
  4681. alert(onsuccess);
  4682. }
  4683. });
  4684. }
  4685.  
  4686. // ***********************************************************************************************
  4687. // ***********************************************************************************************
  4688. // Funktion postet den übergebenen Text in die SB
  4689. // ***********************************************************************************************
  4690. // ***********************************************************************************************
  4691. function PostToSB(sbnum, comment, starttxt, donetxt, intxt, successmessage) {
  4692. for (var i=0; i < sbnum.length; i++) {
  4693. if (sbnum[i] == 0)
  4694. var params = ['f_text', comment + starttxt + donetxt.join('\n') + intxt.join('\n'), 'Submit', 'Abschicken'];
  4695. else {
  4696. var maxlen = 1000;
  4697. var sbtext = "";
  4698. for (j = intxt.length-1; j >= 0; j--) {
  4699. var sbadd = "";
  4700. if (j == 0 && starttxt == "" && donetxt.length == 0)
  4701. sbadd = comment;
  4702. if (sbtext.length + intxt[j].length + sbadd.length + 2 > maxlen) {
  4703. var params = ['f_text', sbtext, 'target_pid', sbnum[i], 'Submit', 'Abschicken'];
  4704. PostToHTTP(SBADD_URL, params, "");
  4705. for (k = 0; k < (intxt.length-j-1)*10000; k++)
  4706. v = k * 3.141592;
  4707. sbtext = intxt[j];
  4708. }
  4709. else
  4710. sbtext = intxt[j] + '\n' + sbtext;
  4711. }
  4712. for (j = donetxt.length-1; j >= 0; j--) {
  4713. var sbadd = "";
  4714. if (j == 0 && starttxt == "")
  4715. sbadd = comment;
  4716. if (sbtext.length + donetxt[j].length + sbadd.length + 2 > maxlen) {
  4717. var params = ['f_text', sbtext, 'target_pid', sbnum[i], 'Submit', 'Abschicken'];
  4718. PostToHTTP(SBADD_URL, params, "");
  4719. for (k = 0; k < (donetxt.length-j)*10000; k++)
  4720. v = k * 3.141592;
  4721. sbtext = donetxt[j];
  4722. }
  4723. else
  4724. sbtext = donetxt[j] + '\n' + sbtext;
  4725. }
  4726. if (sbtext.length + comment.length + starttxt.length > maxlen) {
  4727. var params = ['f_text', sbtext, 'target_pid', sbnum[i], 'Submit', 'Abschicken'];
  4728. PostToHTTP(SBADD_URL, params, "");
  4729. for (k = 0; k < 20000; k++)
  4730. v = k * 3.141592;
  4731. sbtext = comment + starttxt;
  4732. }
  4733. else
  4734. sbtext = comment + starttxt + sbtext;
  4735. var params = ['f_text', sbtext, 'target_pid', sbnum[i], 'Submit', 'Abschicken'];
  4736. }
  4737. PostToHTTP(SBADD_URL, params, (i==0)?successmessage:"");
  4738. }
  4739. }
  4740.  
  4741. // ***********************************************************************************************
  4742. // ***********************************************************************************************
  4743. // Funktion erzeugt für jeden Kampfkommentar eine neue Zeile und fügt ihn ein
  4744. // ***********************************************************************************************
  4745. // ***********************************************************************************************
  4746. function ReformatFightSearchTable(trs) {
  4747. var NrOfCols = trs.length - 2;
  4748.  
  4749. // Für alle Zeilen mit Kämpfen (erste Zeile Überschrift, letzte Zeile Zusammenfassung außen vor)
  4750. for (var x = 1; x <= NrOfCols; x++) {
  4751. // Referenz auf die Zellen der aktuellen Zeile speichern
  4752. var tds = trs[x].getElementsByTagName("td");
  4753.  
  4754. // Wenn es in der aktuellen Zeile einen Kommentar gibt
  4755. if (tds[3].innerHTML.indexOf(getIconAddr(ICON_FIGHTCOMMENT)) != -1) {
  4756. // alert("comment: " + tds[2].getElementsByTagName("img")[2].id);
  4757. // Fightkommenar aus der id auslesen
  4758. var fightcomment = tds[3].getElementsByTagName("img")[(ZONEBASE_URL == "")?1:2].id;
  4759. // Neue Zeile erzeugen
  4760. var newtr = document.createElement("tr");
  4761. // Neue Zeile nach der aktuellen einhängen
  4762. trs[x].parentNode.insertBefore(newtr, trs[x].nextSibling);
  4763.  
  4764. // Zahl der Spalten und Zeiger um 1 erhöhen
  4765. NrOfCols = NrOfCols + 1;
  4766. x = x + 1;
  4767.  
  4768. // Neue Zelle erzeugen
  4769. var newtd = newtr.appendChild(document.createElement("td"));
  4770. newtd.innerHTML = "&nbsp;";
  4771. newtd.setAttribute("colspan", "3");
  4772. // Neue Zelle erzeugen
  4773. newtd = newtr.appendChild(document.createElement("td"));
  4774. // Kampfkommentar eintragen
  4775. newtd.innerHTML = GetFightCommentFromList(GetUsernameFromFightComment(fightcomment), GetTimeFromFightComment(fightcomment));
  4776. newtd.style.color = "orange";
  4777. newtd.style.paddingTop = "2px";
  4778. newtd.style.paddingBottom = "2px";
  4779. newtd.setAttribute("colspan", "4");
  4780. }
  4781. }
  4782. }
  4783.  
  4784. // ***********************************************************************************************
  4785. // ***********************************************************************************************
  4786. // Funktion ermittelt, ob es für den aktuellen User eine Warnung gibt
  4787. // ***********************************************************************************************
  4788. // ***********************************************************************************************
  4789. function ExistsWarning(username) {
  4790. return PG_getValue("Warning" + m_ownuserid + username, false);
  4791. }
  4792.  
  4793. // ***********************************************************************************************
  4794. // ***********************************************************************************************
  4795. // Funktion speichert eine Warnung für den aktuellen User
  4796. // ***********************************************************************************************
  4797. // ***********************************************************************************************
  4798. function SaveWarning(username, warnflag) {
  4799. if (warnflag) {
  4800. PG_setValue("Warning" + m_ownuserid + username, true);
  4801. } else {
  4802. GM_deleteValue(TOWNEXTENSION + "Warning" + m_ownuserid + username);
  4803. }
  4804. }
  4805.  
  4806. // ***********************************************************************************************
  4807. // ***********************************************************************************************
  4808. // Funktion fügt auf einem Profil die Info-Icons ein
  4809. // ***********************************************************************************************
  4810. // ***********************************************************************************************
  4811. function HandleProfile() {
  4812. // ***********************************************************************************************
  4813. // Funktion ermittelt die UserID auf einem Profil
  4814. // ***********************************************************************************************
  4815. function GetUserIDFromProfile(content) {
  4816. if (content.indexOf('javascript:write_to') != -1)
  4817. return content.split('javascript:write_to(')[1].split(')')[0];
  4818. return content.split(TOWN_URL+'messages/write/?to=')[1].split('" style="text-decoration')[0];
  4819. }
  4820.  
  4821. // ***********************************************************************************************
  4822. // Funktion ermittelt den Usernamen auf einem Profil
  4823. // ***********************************************************************************************
  4824. function GetUserNameFromProfile(content) {
  4825. var cont = content.split('href="/fight/?to=');
  4826. if (cont.length > 1)
  4827. return cont[1].split('"')[0]
  4828. cont = content.split('/friendlist/add/friend');
  4829. if (cont.length > 1)
  4830. return cont[1].split('value="')[1].split('"')[0]
  4831. return "";
  4832. }
  4833.  
  4834. // Alle Tabellen auf der Seite ermitteln
  4835. var tables = document.getElementsByTagName("table");
  4836.  
  4837. var datatable = -1;
  4838. // Die "Aktionen"-Tabelle suchen (ist auf jedem Profil vorhanden, auch bei Premium)
  4839. for (var i = 0; i < tables.length; i++) {
  4840. if (tables[i].innerHTML.indexOf(TxtPlatz[lang]+"</strong>") != -1) {
  4841. datatable = i;
  4842. continue;
  4843. }
  4844. if (tables[i].innerHTML.indexOf(TxtAktion[lang]+"</strong>") != -1) {
  4845. // Aktionen-Tabelle speichern
  4846. var actiontable = tables[i];
  4847. break;
  4848. }
  4849. }
  4850. // UserID und Username ermitteln
  4851. var userid = GetUserIDFromProfile(actiontable.innerHTML);
  4852. var username = GetUserNameFromProfile(actiontable.innerHTML);
  4853.  
  4854. if (bl("fi", userid)&&userid!=m_ownuserid)
  4855. window.scrollTo(0, 9999);
  4856.  
  4857. if (datatable >= 0) {
  4858. var trs = tables[datatable].getElementsByTagName("tr");
  4859. for (var i = 0; i < trs.length; i++)
  4860. if (trs[i].innerHTML.indexOf(TxtPunkte[lang]+"</strong") != -1) {
  4861. 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;
  4862. break;
  4863. }
  4864. }
  4865.  
  4866. if (ZONEBASE_URL != "" || userid != m_ownuserid) {
  4867. // Neue Zeile und Info-Icons einfügen
  4868. var newtr = document.createElement("tr");
  4869. newtr.setAttribute('style', 'background-image: url(http://static.pennergame.de/img/pv4/icons/award_back.png)');
  4870. newtr.setAttribute('height', '23');
  4871. newtr.appendChild(document.createElement("td"));
  4872. newtr.appendChild(document.createElement("td"));
  4873. newtr.appendChild(document.createElement("td"));
  4874.  
  4875. newtr.getElementsByTagName("td")[0].innerHTML = "&nbsp;";
  4876.  
  4877. newtr.getElementsByTagName("td")[1].innerHTML = GetIconInsertHTML(userid, username, "x");
  4878. FightListHandler(newtr.getElementsByTagName("td")[1].getElementsByTagName('img')[ZONEBASE_URL==""?1:2]);
  4879. newtr.getElementsByTagName("td")[1].setAttribute('style', 'vertical-align: middle;');
  4880. newtr.getElementsByTagName("td")[1].setAttribute('width', '15%');
  4881. newtr.getElementsByTagName("td")[1].getElementsByTagName("img")[0].setAttribute('style', 'padding-left: 0px');
  4882.  
  4883. if (ZONEBASE_URL != "")
  4884. var Txt = "Infos";
  4885. else
  4886. var Txt = "Kampfstatistik";
  4887. newtr.getElementsByTagName("td")[2].innerHTML = '<strong>' + Txt + ' zu ' + username + '</strong>';
  4888. newtr.getElementsByTagName("td")[2].setAttribute('style', 'vertical-align: middle;');
  4889.  
  4890. actiontable.appendChild(newtr);
  4891.  
  4892. if (userid != m_ownuserid) {
  4893. // Zahl der Kämpfe ermitteln
  4894. CheckPastFights(userid, username, 0);
  4895. }
  4896. }
  4897. }
  4898.  
  4899. // ***********************************************************************************************
  4900. // ***********************************************************************************************
  4901. // Funktion fügt auf der Pennerzone-Highscoreseite die Info-Icons ein
  4902. // ***********************************************************************************************
  4903. // ***********************************************************************************************
  4904. function HandlePennerzone() {
  4905. // ***********************************************************************************************
  4906. // Funktion ermittelt die UserID aus dem Link
  4907. // ***********************************************************************************************
  4908. function GetUserIDFromPZ(content) {
  4909. return content.split('<a href="/highscore/u')[1].split('-')[0];
  4910. }
  4911.  
  4912. // ***********************************************************************************************
  4913. // Funktion ermittelt den Usernamen aus dem Link
  4914. // ***********************************************************************************************
  4915. function GetUserNameFromPZ(content) {
  4916. return content.split(TOWN_URL+'fight/?to=')[1].split('" target="_blank"')[0];
  4917. }
  4918.  
  4919. var table = document.getElementsByTagName("table")[0];
  4920. var trs = table.getElementsByTagName("tr");
  4921.  
  4922. // Neue Spaltenüberschrift erzeugen und einfügen
  4923. var newth = document.createElement("th");
  4924. newth.innerHTML = "Info:";
  4925. trs[0].insertBefore(newth, trs[0].getElementsByTagName("th")[1]);
  4926.  
  4927. // Eigene UserID ermitteln (die zuletzt gespeicherte, da von Pennerzone aus kein Zugriff besteht)
  4928. var ownuserid = GM_getValue("LastOwnUserID", "");
  4929.  
  4930. // Für alle Zeilen mit Usern
  4931. for (var x = 1; x < trs.length; x++) {
  4932. // UserID und Username ermitteln
  4933. var userid = GetUserIDFromPZ(trs[x].getElementsByTagName("td")[0].innerHTML);
  4934. if (location.toString().indexOf('?page') == -1)
  4935. var username = GetUserNameFromPZ(trs[x].getElementsByTagName("td")[0].innerHTML);
  4936. else
  4937. var username = GetUserNameFromPZ(trs[x].getElementsByTagName("td")[1].innerHTML);
  4938.  
  4939. // Userlink mit ID versehen und Link mit "grün" initialisieren
  4940. // (wird dann später bei der Übreprüfung von Punkten und Angriffszeit ggf. nach rot umgefärbt)
  4941. trs[x].getElementsByTagName("td")[0].id = 'userprofileid:' + userid + '_1';
  4942. //trs[x].getElementsByTagName("td")[0].getElementsByTagName("a")[0].setAttribute('style', 'color: #33cc66');
  4943.  
  4944. // Neue Zelle erzeugen und mit Fightinfos einfügen
  4945. var newtd = document.createElement("td");
  4946. newtd.innerHTML = "<center>" + GetIconInsertHTML(userid, username, "") + "</center>";
  4947. FightListHandler(newtd.getElementsByTagName('img')[ZONEBASE_URL==""?2:3]);
  4948. trs[x].insertBefore(newtd, trs[x].getElementsByTagName("td")[1]);
  4949.  
  4950. // Zahl der Kämpfe ermitteln
  4951. CheckPastFights(userid, username, 0);
  4952. }
  4953. }
  4954.  
  4955. // **********************************************************************************
  4956. // Funktion sortiert die Kämpfe nach Datum
  4957. // **********************************************************************************
  4958. function sortFightListByDate(fights) {
  4959.  
  4960. for (var x = 1; x < fights.length; x++) {
  4961. var upper = 0;
  4962. var lower = x - 1;
  4963. var fightdate = fights[x].split("<td>")[2].split("</td>")[0];
  4964. fightdate = fightdate.substr(6,4) + fightdate.substr(3,2) + fightdate.substr(0,2) + fightdate.substr(11);
  4965. while (lower >= upper) {
  4966. var middle = Math.floor((lower + upper) / 2);
  4967. var fightdate2 = fights[middle].split("<td>")[2].split("</td>")[0];
  4968. fightdate2 = fightdate2.substr(6,4) + fightdate2.substr(3,2) + fightdate2.substr(0,2) + fightdate2.substr(11);
  4969.  
  4970. if (fightdate < fightdate2)
  4971. upper = middle + 1;
  4972. else
  4973. lower = middle - 1;
  4974. }
  4975. if (upper < x) {
  4976. var fight = fights.splice(x, 1);
  4977. fights.splice(upper, 0, fight[0]);
  4978. }
  4979. }
  4980. }
  4981. // **********************************************************************************
  4982. // Funktion liefert alle Kämpfe zurück
  4983. // **********************************************************************************
  4984. function GetAllFights(username, content, page, startpage, allFights, firsttable, inGang) {
  4985. var doc = HTML2DOM(content);
  4986. var tables = doc.getElementsByTagName("table");
  4987. var ft = getFightTableIndex(tables) + 1;
  4988. var table = tables[ft];
  4989. var trs = table.getElementsByTagName("tr");
  4990. var fightlg = allFights.length;
  4991.  
  4992. for (i = 1; i < trs.length-1; i++) {
  4993. allFights.push(trs[i].innerHTML);
  4994. }
  4995.  
  4996. if (page == startpage)
  4997. page++;
  4998.  
  4999. var Seite = content.indexOf("<strong>" + TxtSeite[lang] + ":</strong>");
  5000. if (Seite != -1)
  5001. Seite = content.split("<strong>" + TxtSeite[lang] + ":</strong>")[1].indexOf("fight/fightlog/"+page+"/");
  5002. if (Seite != -1) {
  5003. if (fightlg == 0) {
  5004. var trs = firsttable.getElementsByTagName("tr");
  5005. for (i = trs.length-2; i > 0; i--)
  5006. trs[i].parentNode.removeChild(trs[i]);
  5007. }
  5008. // **********************************************************************************
  5009. // Beziehen der Fightsuchseite
  5010. // **********************************************************************************
  5011. GM_xmlhttpRequest({method: 'GET', url: FIGHTLOG_URL + page + "/?q=" + username, onload: function(responseDetails) {
  5012. // Wenn die Seite erfolgreich abgerufen werden konnte
  5013. if (responseDetails.status == 200) {
  5014. var content = responseDetails.responseText;
  5015. GetAllFights(username, content, page+1, startpage, allFights, firsttable, inGang);
  5016. }
  5017. }
  5018. });
  5019. }
  5020. else
  5021. {
  5022. var trs = firsttable.getElementsByTagName("tr");
  5023. if (allFights.length > 20) {
  5024. sortFightListByDate(allFights);
  5025.  
  5026. for (i = 1; i <= 20; i++) {
  5027. if ((startpage-1)*20+i <= allFights.length) {
  5028. var tr = document.createElement("tr");
  5029. tr.innerHTML = allFights[(startpage-1)*20+i-1];
  5030. if (!tr.id)
  5031. tr.id = "fightlog" + i;
  5032. trs[i].parentNode.insertBefore(tr, trs[i]);
  5033. }
  5034. }
  5035. }
  5036.  
  5037. // Tabelle mit den abgeschlossenen Kämpfen neu formatieren und eine neue Spalte einfügen
  5038. ReformatFightlogTable(firsttable);
  5039.  
  5040. // "Info"-Icon und -Link in die Tabelle schreiben
  5041. InsertInfoInFirstTable(firsttable, inGang, 1, function() {
  5042.  
  5043. // Kampfkommentare eintragen
  5044. ReformatFightSearchTable(trs);
  5045.  
  5046. // Angreifbarkeit der Spieler (Punkte/36 Stunden) farblich kennzeichnen
  5047. InsertAttackableInFirstTable(firsttable, true, false);
  5048. insertSBTable("PostDoneFightsToSB", m_owngangname);
  5049. });
  5050. }
  5051. }
  5052.  
  5053. // ***********************************************************************************************
  5054. // ***********************************************************************************************
  5055. // Funktion handelt die Aktionen auf der Suchseite nach bereits geführten Kämpfen
  5056. // ***********************************************************************************************
  5057. // ***********************************************************************************************
  5058. function HandleSearchpage(firsttable, inGang) {
  5059.  
  5060. // Referenz auf die Zeilen der Tabelle speichern
  5061. var trs = firsttable.getElementsByTagName("tr");
  5062.  
  5063. // Username ermitteln
  5064. var username = trimString(trs[1].innerHTML.split('href="/profil/id:')[1].split('/">')[1].split('</a>')[0]);
  5065.  
  5066. var allFights = [];
  5067. if (location.toString().indexOf("/fightlog/?q=") != -1)
  5068. var startpage = 1;
  5069. else {
  5070. var startpage = location.toString().split("/?q=")[0].split("/").pop();
  5071. }
  5072. GetAllFights(username, document.getElementById("content").innerHTML, 1, startpage, allFights, firsttable, inGang);
  5073.  
  5074. // Erzeugen und Einfügen der Checkbox für die Warnmarkierung
  5075. var currentspan = document.getElementById("content").getElementsByTagName("table")[0].getElementsByTagName("tr")[0].getElementsByTagName("td")[0].getElementsByTagName("span")[0];
  5076. var newdiv = document.createElement("div");
  5077. var postText = "";
  5078. if (inGang)
  5079. postText = '&nbsp;&nbsp;<style="padding-left: 8px;"><input name="postVals" id="postVals" type="checkbox" value="Post" onclick="document.getElementById(\'bbcode\').style.visibility=\'hidden\'">&nbsp;' + TxtPostFight[myLang] + '&nbsp;';
  5080. newdiv.innerHTML = '<form style="padding-left: 8px"><input name="WarningCheckbox" id="WarningCheckbox" type="checkbox" value="Achtung">&nbsp;Warnung für diesen Spieler aktivieren' + postText + '<name="Formular2" action=""><input type="button" value="BBCode" id="bbcodeanzeigen" title="' + TxtShowBBCode[myLang] + '">&nbsp;<textarea rows="1" style="width:70px;height:13px" name="bbcode" action="" type="text" id="bbcode" onclick="this.focus(); this.select();"></textarea></form>';
  5081. 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;');
  5082. currentspan.insertBefore(newdiv, newdiv.getElementsByTagName("div")[0]);
  5083. 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;');
  5084. bbcodeEinAus();
  5085.  
  5086. // Klickstatus wiederherstellen
  5087. document.getElementById("WarningCheckbox").checked = ExistsWarning(username);
  5088.  
  5089. // ***********************************************************************************************
  5090. // Click-Handler hinzufügen
  5091. // ***********************************************************************************************
  5092. document.getElementById("WarningCheckbox").addEventListener("click", function(event) {
  5093. // Klickstatus speichern
  5094. SaveWarning(username, this.checked);
  5095. }, false);
  5096.  
  5097. var href = firsttable.parentNode.getElementsByTagName("a");
  5098. var qlog = "?" + location.toString().split("?")[1];
  5099. for (i = 0; i < href.length; i++)
  5100. if (href[i].href.indexOf('/fight/fightlog/') != -1 && href[i].href.indexOf("?") == -1) {
  5101. href[i].href += qlog;
  5102. }
  5103. }
  5104.  
  5105. function FormatFightlogPage (firsttable, inGang, startpage) {
  5106. // Tabelle mit den abgeschlossenen Kämpfen neu formatieren und eine neue Spalte einfügen
  5107. ReformatFightlogTable(firsttable);
  5108.  
  5109. // "Info"-Icon und -Link in die Tabelle schreiben
  5110. InsertInfoInFirstTable(firsttable, inGang, 1, function() {
  5111.  
  5112. // Wenn die aktuelle Seite die erste Fightlog-Seite ist
  5113. if (startpage == 1) {
  5114. // Submit-Button für Daten einfügen
  5115. InsertSubmitButton(content, document.getElementById("content").getElementsByTagName("table")[0], inGang);
  5116. }
  5117. else if (inGang) {
  5118. var trs = document.getElementById("content").getElementsByTagName("table")[0].getElementsByTagName("tr");
  5119. // Erzeugen und Einfügen der Checkbox für das Posten des Kampfwerts
  5120. if (trs.length > 2) {
  5121. var currentspan = trs[0].getElementsByTagName("td")[0].getElementsByTagName("span")[0];
  5122. 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;');
  5123. var newdiv = document.createElement("div");
  5124. 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\'">&nbsp;' + TxtPostFight[myLang] + '</form>';
  5125. 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;');
  5126. currentspan.insertBefore(newdiv, newdiv.getElementsByTagName("div")[0]);
  5127. newdiv = document.createElement("div");
  5128. newdiv.innerHTML = '<form style="padding-top:6px"><input name="Formular2" action="" type="button" value="BBCode" id="bbcodeanzeigen" title="' + TxtShowBBCode[myLang] + '"></form>';
  5129. newdiv.setAttribute('style', 'background-color: rgb(42, 42, 42); width: 65px; height: 38px; vertical-align: middle; float: left');
  5130. currentspan.insertBefore(newdiv, newdiv.getElementsByTagName("div")[0]);
  5131. newdiv = document.createElement("div");
  5132. newdiv.innerHTML = '<textarea rows="1" style="vertical-align:middle" name="bbcode" action="" type="text" id="bbcode" onclick="this.focus(); this.select();"></textarea>';
  5133. newdiv.setAttribute('style', 'padding: 0px; background-color: rgb(42, 42, 42); width: 196px; height: 38px; vertical-align: middle; float: left');
  5134. currentspan.insertBefore(newdiv, newdiv.getElementsByTagName("div")[0]);
  5135. bbcodeEinAus();
  5136. }
  5137. }
  5138. // Angreifbarkeit der Spieler (Punkte/36 Stunden) farblich kennzeichnen
  5139. InsertAttackableInFirstTable(firsttable, true, false);
  5140. insertSBTable("PostDoneFightsToSB", m_owngangname);
  5141. });
  5142. }
  5143.  
  5144. // ***********************************************************************************************
  5145. // ***********************************************************************************************
  5146. // Funktion handelt die Aktionen auf der Fightlogseite
  5147. // ***********************************************************************************************
  5148. // ***********************************************************************************************
  5149. function HandleFightlogpage(firsttable, inGang, startpage, nrFights) {
  5150.  
  5151. // Referenz auf die Zeilen der Tabelle speichern
  5152. var trs = firsttable.getElementsByTagName("tr");
  5153.  
  5154. if (startpage == 0)
  5155. if (Right$(location.toString(), 10) == '/fightlog/' || Right$(location.toString(), 12) == '/fightlog/1/')
  5156. var startpage = 1;
  5157. else
  5158. var startpage = location.toString().split("/fightlog/")[1].split("/")[0];
  5159.  
  5160. if (nrFights == 0)
  5161. if (startpage == 1) {
  5162. nrFights = trs.length - 2;
  5163. }
  5164. else {
  5165. // **********************************************************************************
  5166. // Beziehen der 1. Fightlogseite
  5167. // **********************************************************************************
  5168. GM_xmlhttpRequest({method: 'GET', url: FIGHTLOG_URL + "1/", onload: function(responseDetails) {
  5169. // Wenn die Seite erfolgreich abgerufen werden konnte
  5170. if (responseDetails.status == 200) {
  5171. var content = responseDetails.responseText;
  5172. var doc = HTML2DOM(content);
  5173. var tables = doc.getElementsByTagName("table");
  5174. var ft = getFightTableIndex(tables) + 1;
  5175. var table = tables[ft];
  5176. var trs = table.getElementsByTagName("tr");
  5177. nrFights = trs.length - 2;
  5178. HandleFightlogpage(firsttable, inGang, startpage, nrFights);
  5179. }
  5180. }
  5181. });
  5182. return;
  5183. }
  5184.  
  5185. if (nrFights != 20) {
  5186. if (startpage != 1)
  5187. for (i = 20 - nrFights; i >= 1; i--) {
  5188. trs[i].parentNode.removeChild(trs[i]);
  5189. }
  5190.  
  5191. var page = parseInt(startpage) + 1;
  5192. var Seite = document.getElementById("content").innerHTML.indexOf("<strong>" + TxtSeite[lang] + ":</strong>");
  5193. if (Seite != -1)
  5194. Seite = document.getElementById("content").innerHTML.split("<strong>" + TxtSeite[lang] + ":</strong>")[1].indexOf("fight/fightlog/"+page+"/");
  5195. if (Seite != -1) {
  5196. // **********************************************************************************
  5197. // Beziehen der folgenden Fightlogseite
  5198. // **********************************************************************************
  5199. GM_xmlhttpRequest({method: 'GET', url: FIGHTLOG_URL + page + "/", onload: function(responseDetails) {
  5200. // Wenn die Seite erfolgreich abgerufen werden konnte
  5201. if (responseDetails.status == 200) {
  5202. var content = responseDetails.responseText;
  5203. var doc = HTML2DOM(content);
  5204. var tables = doc.getElementsByTagName("table");
  5205. var ft = getFightTableIndex(tables) + 1;
  5206. var table = tables[ft];
  5207. var trs2 = table.getElementsByTagName("tr");
  5208. for (i = 1; i <= 20 - nrFights; i++) {
  5209. trs[nrFights+i].parentNode.insertBefore(trs2[i].cloneNode(true), trs[nrFights+i]);
  5210. }
  5211. FormatFightlogPage(firsttable, inGang, startpage);
  5212. }
  5213. }
  5214. });
  5215. return;
  5216. }
  5217. }
  5218. FormatFightlogPage(firsttable, inGang, startpage);
  5219. }
  5220.  
  5221. // **********************************************************************************
  5222. // **********************************************************************************
  5223. // Funktion aktiviert Wartecursor in Abhängigkeit des waitflags
  5224. // **********************************************************************************
  5225. // **********************************************************************************
  5226. function CursorWait(currentelem, waitflag) {
  5227. if (waitflag) {
  5228. currentelem.style.cursor = 'progress';
  5229. document.body.style.cursor = 'progress';
  5230. } else {
  5231. currentelem.style.cursor = 'pointer';
  5232. document.body.style.cursor = 'auto';
  5233. }
  5234. }
  5235.  
  5236. // **********************************************************************************
  5237. // **********************************************************************************
  5238. // Funktion zeigt eine Grafik an, ggf. mit Link
  5239. // **********************************************************************************
  5240. // **********************************************************************************
  5241. function ShowImg(imglink, imgsource, imgtitle, imgwidth, imgheight, imgleft, imgtop, imgzindex, imgid, elem) {
  5242. // Wenn ein Link übergeben wurde
  5243. if (imglink != '') {
  5244. // Link zusammenbauen
  5245. var newlink = document.getElementById("wrap").appendChild(document.createElement('a'));
  5246. newlink.setAttribute('href', imglink);
  5247. // Wenn eine ID übergeben wurde
  5248. if (imgid != "") {
  5249. newlink.setAttribute('id', imgid);
  5250. }
  5251.  
  5252. // Grafik zusammenbauen
  5253. var newimg = newlink.appendChild(document.createElement('img'));
  5254. // sonst: Es wurde kein Link übergeben
  5255. } else {
  5256. // Grafik zusammenbauen
  5257. var newimg = elem.appendChild(document.createElement('img'));
  5258. // Wenn eine ID übergeben wurde
  5259. if (imgid != "") {
  5260. newimg.setAttribute('id', imgid);
  5261. }
  5262. }
  5263.  
  5264. newimg.setAttribute('src', imgsource);
  5265. newimg.setAttribute('border', '0');
  5266. if (imgwidth != '') {
  5267. newimg.setAttribute('width', imgwidth);
  5268. }
  5269. if (imgheight != '') {
  5270. newimg.setAttribute('height', imgheight);
  5271. }
  5272. newimg.setAttribute('title', imgtitle);
  5273. newimg.setAttribute('style', 'position:relative; left:' + imgleft + 'px; top:' + imgtop + 'px; z-index:' + imgzindex);
  5274. }
  5275.  
  5276. // **********************************************************************************
  5277. // **********************************************************************************
  5278. // Funktion formatiert eine Zahl mit Tausendertrennzeichen
  5279. // **********************************************************************************
  5280. // **********************************************************************************
  5281. function money_format(zahl) {
  5282. var new_string = [];
  5283. var nachkomma = Right$('0' + Math.round((zahl - parseInt(zahl)) * 100), 2);
  5284. var tmp = parseInt(zahl) + '';
  5285.  
  5286. while( tmp.length > 3)
  5287. {
  5288. new_string[new_string.length] = tmp.substr(tmp.length - 3);
  5289. tmp = tmp.substr(0, tmp.length - 3);
  5290. }
  5291. if(tmp) new_string[new_string.length] = tmp;
  5292. if (currency1 == "")
  5293. return currency + ' ' + new_string.reverse().join(TZ[myLang]) + DZ[myLang] + nachkomma;
  5294. else
  5295. return new_string.reverse().join(TZ[myLang]) + currency1 + parseInt(nachkomma) + currency2;
  5296. }
  5297.  
  5298. // **********************************************************************************
  5299. // **********************************************************************************
  5300. // Funktion blendet Werte in einen Text ein
  5301. // **********************************************************************************
  5302. // **********************************************************************************
  5303. function printf(text, p1, p2, p3, p4) {
  5304. var onceMore = true;
  5305.  
  5306. var prozPos = -1;
  5307. while (onceMore) {
  5308. onceMore = false;
  5309. prozPos = text.indexOf('%', prozPos + 1);
  5310. if (prozPos == -1)
  5311. return text;
  5312.  
  5313. var format = text.substr(prozPos + 1, 1);
  5314. switch (format) {
  5315. case 'd':
  5316. case 's':
  5317. return printf (text.substr(0, prozPos) + p1 + text.substr(prozPos + 2), p2, p3, p4, "");
  5318. case 'm':
  5319. return printf (text.substr(0, prozPos) + money_format(p1) + text.substr(prozPos + 2), p2, p3, p4, "");
  5320. default:
  5321. onceMore = true;
  5322. break;
  5323. }
  5324. }
  5325. }
  5326.  
  5327. // ***********************************************************************************************
  5328. // ***********************************************************************************************
  5329. // Funktion testet, ob eine ID in der Liste enthalten ist
  5330. // ***********************************************************************************************
  5331. // ***********************************************************************************************
  5332. function AddIDToList(ids, userid) {
  5333. if (userid == "" || userid == m_ownuserid)
  5334. return false;
  5335.  
  5336. var search = ";" + ids + ";";
  5337. return (search.indexOf(";" + userid + ";") == -1);
  5338. }
  5339.  
  5340. // ***********************************************************************************************
  5341. // ***********************************************************************************************
  5342. // Funktion ermittelt den Index der Kampftabelle
  5343. // ***********************************************************************************************
  5344. // ***********************************************************************************************
  5345. function getFightTableIndex(tables) {
  5346. if (tables[0].parentNode.innerHTML.indexOf('highscore/rauferei') == -1)
  5347. return 0;
  5348. return 1;
  5349. }
  5350.  
  5351. // ***********************************************************************************************
  5352. // ***********************************************************************************************
  5353. // Funktion stellt die Fighttabelle dar
  5354. // ***********************************************************************************************
  5355. // ***********************************************************************************************
  5356. function InsertFightTable(table, Chb) {
  5357.  
  5358. // ***********************************************************************************************
  5359. // Funktion fügt einen Header in die Tabelle table ein
  5360. // ***********************************************************************************************
  5361. function InsertHead(table, nrofcolumns) {
  5362. // Neues Head-Element erzeugen und einfügen
  5363. var newthead = document.createElement("thead");
  5364. table.appendChild(newthead);
  5365. // Neue Zeile erzeugen
  5366. var newtr = document.createElement("tr");
  5367. newtr.setAttribute('style', 'background-color:#232323');
  5368.  
  5369. // Neue Zellen erzeugen und in die Zeile einfügen
  5370. for (var i = 0; i < nrofcolumns; i++) {
  5371. var newth = document.createElement("th");
  5372. newtr.appendChild(newth);
  5373. }
  5374.  
  5375. // Spalten formatieren
  5376. // Grafik für Hinzufügen zur Kampfliste einbauen
  5377. 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">';
  5378. newtr.getElementsByTagName("th")[0].setAttribute('style', 'width: 20px; min-width:20px');
  5379.  
  5380. newtr.getElementsByTagName("th")[1].innerHTML = "&nbsp;"; // Fightinfo
  5381. var width = (ZONEBASE_URL == "")?38:50;
  5382. newtr.getElementsByTagName("th")[1].setAttribute('style', 'width: '+ width + 'px; min-width:' + width + 'px');
  5383.  
  5384. newtr.getElementsByTagName("th")[2].innerHTML = "Penner"; // Username
  5385. newtr.getElementsByTagName("th")[2].setAttribute('style', 'width: 145px');
  5386.  
  5387. newtr.getElementsByTagName("th")[3].innerHTML = "Bande"; // Bandenname
  5388. newtr.getElementsByTagName("th")[3].setAttribute('style', 'width: 150px');
  5389.  
  5390. newtr.getElementsByTagName("th")[4].innerHTML = "Punkte"; // aktuelle Punktzahl
  5391. newtr.getElementsByTagName("th")[4].setAttribute('style', 'width: 75px; text-align: right; padding-right: 10px');
  5392.  
  5393. newtr.getElementsByTagName("th")[5].innerHTML = "Reg-Datum"; // Registrierungsdatum
  5394. newtr.getElementsByTagName("th")[5].setAttribute('style', 'width: 65px');
  5395.  
  5396. newtr.getElementsByTagName("th")[6].innerHTML = "Geld"; // Geld
  5397. newtr.getElementsByTagName("th")[6].setAttribute('style', 'width: 100px; text-align: right');
  5398.  
  5399. // Zeilenelement einfügen
  5400. newthead.appendChild(newtr);
  5401.  
  5402. // Handler für das Hinzufügen zur Kampfliste mit Grafik assoziieren
  5403. // Click-Handler hinzufügen
  5404. document.getElementById("AddToFT").addEventListener("click", function(event) {
  5405. var newIDs = trimString(prompt(TxtNewIDs[myLang]));
  5406. var fightIDs = PGu_getValue("FightIDList", "");
  5407. getUserData("."+newIDs, function(userid, username, userpoints, gangid, gangname, regsince, money, userplace, history) {
  5408. function testUserid(ids, i, fightIDs) {
  5409. getUserData("#"+ids[i], function(userid, username, userpoints, gangid, gangname, regsince, money, userplace, history) {
  5410. if (userid == -1) {
  5411. alert("Penner mit ID " + ids[i] + " nicht gefunden!");
  5412. return;
  5413. }
  5414. if (AddIDToList(fightIDs, ids[i])) {
  5415. fightIDs += (fightIDs == ""?"":";") + ids[i];
  5416. count++;
  5417. }
  5418. while (++i < ids.length) {
  5419. if (ids[i] == "")
  5420. continue;
  5421. testUserid(ids, i, fightIDs);
  5422. break;
  5423. }
  5424. if (i >= ids.length) {
  5425. fightIDs = fightIDs.split(";");
  5426. for (var j = fightIDs.length - 1; j >= 0; j--)
  5427. if (isNaN(fightIDs[j]) || fightIDs[j] == "")
  5428. fightIDs.splice(j, 1);
  5429. PGu_setValue("FightIDList", fightIDs.join(";"));
  5430. PGu_setValue("fightlistchanged", 1);
  5431. if (count > 0) {
  5432. alert (TxtAddedToFT[myLang].replace("%s", count));
  5433. var tables = document.getElementById("content").getElementsByTagName("table");
  5434. var ft = getFightTableIndex(tables);
  5435. var table = tables[ft];
  5436. var trs = table.getElementsByTagName("tr");
  5437. for (var j = trs.length-1; j > 0; j--)
  5438. trs[j].parentNode.removeChild(trs[j]);
  5439. InsertFightTable(table, true);
  5440. }
  5441. else
  5442. alert (TxtNoAddedToFT[myLang]);
  5443. }
  5444. });
  5445. }
  5446.  
  5447. if (userid == -1) { // nicht gefunden !!
  5448. newIDs = newIDs.split(";");
  5449. count = 0;
  5450. for (var i = 0; i < newIDs.length; i++) {
  5451. if (newIDs[i] == "")
  5452. continue;
  5453. testUserid(newIDs, i, fightIDs);
  5454. break;
  5455. }
  5456. }
  5457. else if (AddIDToList(fightIDs, userid)) {
  5458. fightIDs = fightIDs.split(";");
  5459. fightIDs.push(userid);
  5460. for (var j = fightIDs.length - 1; j >= 0; j--)
  5461. if (isNaN(fightIDs[j]) || fightIDs[j] == "")
  5462. fightIDs.splice(j, 1);
  5463. PGu_setValue("FightIDList", fightIDs.join(";"));
  5464. PGu_setValue("fightlistchanged", 1);
  5465. alert (TxtAdd1ToFT[myLang]);
  5466. if (PGu_getValue(tableIDs[0] + "OnLF", false))
  5467. window.location.reload();
  5468. else {
  5469. var tables = document.getElementById("content").getElementsByTagName("table");
  5470. var ft = getFightTableIndex(tables);
  5471. var table = tables[ft];
  5472. var trs = table.getElementsByTagName("tr");
  5473. for (var j = trs.length-1; j > 0; j--)
  5474. trs[j].parentNode.removeChild(trs[j]);
  5475. InsertFightTable(table, true);
  5476. }
  5477. }
  5478. else
  5479. alert (TxtNoAddToFT[myLang]);
  5480. });
  5481. }, false);
  5482. }
  5483.  
  5484. // ***********************************************************************************************
  5485. // Funktion fügt eine neue Zeile ein
  5486. // ***********************************************************************************************
  5487. function InsertRow(table, id) {
  5488. // Neues Zeilenelement erzeugen
  5489. var newtr = document.createElement("tr");
  5490. newtr.bgColor = "#303030";
  5491.  
  5492. // Für alle Spalten (so viele, wie es Kopfelemente gibt)
  5493. for (var i = 0; i < table.getElementsByTagName("th").length; i++) {
  5494. // Neue Zelle erzeugen und einfügen
  5495. var newtd = document.createElement("td");
  5496. newtr.appendChild(newtd);
  5497. }
  5498.  
  5499. // Neue Zeile erzeugen und mit UserID branden
  5500. newtr.id = "pennerid" + id;
  5501. newtr.getElementsByTagName("td")[2].setAttribute('style', 'max-width:175px; overflow:hidden;');
  5502.  
  5503. // Zeilenelement in Tabelle einfügen
  5504. table.appendChild(newtr);
  5505.  
  5506. // Zeilenelement zur weiteren Verwendung zurückgeben
  5507. return newtr;
  5508. }
  5509.  
  5510. // ***********************************************************************************************
  5511. // Funktion liefert alle Daten des users username
  5512. // ***********************************************************************************************
  5513. function GetUserData(userids, i, newtable) {
  5514. if (i == 0) {
  5515. DelayedPost(20000);
  5516. fightinfo = "";
  5517. }
  5518.  
  5519. // Neue Zeile erzeugen
  5520. var userid = userids[i];
  5521. var currenttr = InsertRow(newtable, userid);
  5522. // ***********************************************************************************************
  5523. // Abrufen des XML-Datensatzes für den aktuellen User
  5524. // ***********************************************************************************************
  5525. getUserData("#"+userid, function(userid, username, userpoints, gangid, gangname, regsince, money, userplace, history) {
  5526. userpts[i] = userpoints;
  5527. usernames[i] = username;
  5528. userhistory[i] = history;
  5529. // FIGHT-DIAGRAMM
  5530. 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>';
  5531. FightListHandler(document.getElementById("delfromft"+userid));
  5532. // FIGHTINFO
  5533. currenttr.getElementsByTagName("td")[1].innerHTML = GetIconInsertHTML(userid, username, "ft");
  5534. // NAME
  5535. currenttr.getElementsByTagName("td")[2].innerHTML = GetProfileLink(username, userid);
  5536. currenttr.getElementsByTagName("td")[2].id = 'userprofileid:' + userid + "_" + (GetNrOfIDs(document, 'userprofileid:' + userid) + 1);
  5537. // Bandenprofillink eintragen
  5538. var ganglink = GetGangLink(gangid, gangname);
  5539. currenttr.getElementsByTagName("td")[3].innerHTML = ganglink;
  5540. // Aktuelle Punktzahl eintragen
  5541. currenttr.getElementsByTagName("td")[4].innerHTML = number_format(userpoints, myLang == 0);
  5542. currenttr.getElementsByTagName("td")[4].setAttribute('style', 'text-align: right; padding-right: 10px;');
  5543. // Aktuelles Registrierungsdatum
  5544. currenttr.getElementsByTagName("td")[5].innerHTML = regsince;
  5545. // Aktuelles Geld
  5546. currenttr.getElementsByTagName("td")[6].innerHTML = money;
  5547. currenttr.getElementsByTagName("td")[6].setAttribute('style', 'text-align: right; padding-right: 10px;');
  5548.  
  5549. var colorCode = getColorCode(userpoints, userplace);
  5550. var waitText = "";
  5551. var CachInd = CacheIndex(userid);
  5552. if (CachInd != -1)
  5553. waitText = CachedWaitText[CachInd];
  5554. currenttr.getElementsByTagName("td")[2].getElementsByTagName("a")[0].style.color = colors[waitText!=""?0:colorCode];
  5555. currenttr.getElementsByTagName("td")[2].getElementsByTagName("a")[0].title = TxtColor[colorCode][myLang];
  5556. currenttr.getElementsByTagName("td")[3].getElementsByTagName("a")[0].style.color = colors[colorCode];
  5557. currenttr.getElementsByTagName("td")[4].setAttribute('style', 'text-align: right; padding-right: 10px; color: ' + colors[colorCode]);
  5558.  
  5559. var count = 0;
  5560. var trs = newtable.getElementsByTagName("tr");
  5561. // alle Zeilen eingefügt ?
  5562. if (trs.length <= userids.length)
  5563. return;
  5564.  
  5565. for (var j = trs.length-1; j>= 1; j--)
  5566. if (trs[j].getElementsByTagName("td")[4].innerHTML == "")
  5567. return;
  5568.  
  5569. document.getElementById("showfightlist").disabled = false;
  5570. // Liste sortieren
  5571. sortList(trs, 1, trs.length - 1, -1, userids);
  5572.  
  5573. // Zahl der Kämpfe ermitteln
  5574. for (j = 0; j < userids.length; j++) {
  5575. CheckPastFights(userids[j], usernames[j], 1);
  5576. if (j % 2 == 1)
  5577. document.getElementById("pennerid"+userids[j]).bgColor = "#383838";
  5578. if (showHistory && history != "") {
  5579. insertHistory(document.getElementById("pennerid"+userids[j]).getElementsByTagName("td")[2].getElementsByTagName("a")[0], j, userhistory[j]);
  5580. document.getElementById("hist"+j).getElementsByTagName("td")[0].innerHTML = document.getElementById("pennerid"+userids[j]).getElementsByTagName("td")[2].getElementsByTagName("a")[0].title;
  5581. document.getElementById("pennerid"+userids[j]).getElementsByTagName("td")[2].getElementsByTagName("a")[0].title = "";
  5582. }
  5583. }
  5584. });
  5585. }
  5586.  
  5587. // Zeile für Checkbox einfügen
  5588. if (Chb) {
  5589. var newtr = document.createElement("tr");
  5590. var newtd = document.createElement("td");
  5591. newtd.setAttribute("colspan", 2);
  5592. newtd.setAttribute('style', 'padding-top: 10px; padding-bottom: 10px');
  5593. newtd.innerHTML = '<input name="FTCheckbox" id="FTCheckbox" type="checkbox"><span style="vertical-align: bottom">&nbsp;Anzeige der Kampfliste auf Let\'s fight aktivieren</span>';
  5594. newtr.appendChild(newtd);
  5595. table.getElementsByTagName("tbody")[0].appendChild(newtr);
  5596.  
  5597. // Wenn die letzte Einstellung der Checkbox "aktiv" war
  5598. if (PGu_getValue(tableIDs[0] + "OnLF", false)) {
  5599. // Häkchen setzen
  5600. document.getElementById("FTCheckbox").checked = true;
  5601. }
  5602.  
  5603. // Click-Handler hinzufügen
  5604. document.getElementById("FTCheckbox").addEventListener("click", function(event) {
  5605. // Klickstatus speichern
  5606. PGu_setValue(tableIDs[0] + "OnLF", this.checked);
  5607. }, false);
  5608.  
  5609. }
  5610.  
  5611. // Zeile für die Überschrift einfügen
  5612. var newtr = document.createElement("tr");
  5613. var newtd = document.createElement("td");
  5614. newtd.setAttribute("colspan", 2);
  5615. newtd.setAttribute('style', 'padding-top: 10px; padding-bottom: 10px');
  5616. var option = '<option value="0">neu</option> ';
  5617. var aktflist = PGu_getValue("aktfightlist", 0);
  5618. var flist = PGu_getValue("savedfightlists", "");
  5619. if (flist == "")
  5620. flist = [];
  5621. else
  5622. flist = flist.split(";");
  5623.  
  5624. for (var i = 0; i < flist.length; i++) {
  5625. fl = PGu_getValue("fightlist_" + flist[i], "");
  5626. option += '<option value="' + flist[i] + '">' + fl.split("°")[0] + '</option> ';
  5627. }
  5628.  
  5629. newtd.innerHTML = '<b><font color="#FFFFFF">' + TxtMyFav[myLang] + '</font></b>&nbsp;&nbsp;&nbsp;<name="FTForm" action=""><input type="button" value="Export" id="showfightlist" title="'
  5630. + TxtShowFTList[myLang] + '">&nbsp;&nbsp;&nbsp;<textarea rows="1" style="width:120px;height:12px" name="ftlist" action="" type="text" id="ftlist" onclick="this.focus(); this.select();"></textarea></form>'
  5631. + '&nbsp;<a style="float:right"><input type="button" value="Sichern" id="savefightlist" title="Kampfliste sichern">&nbsp;<select id="flistid" name="flistid"> ' + option + ' </select>&nbsp;<input type="button" value="Laden" id="loadfightlist" title="Kampfliste laden"></a>';
  5632. newtr.appendChild(newtd);
  5633. table.getElementsByTagName("tbody")[0].appendChild(newtr);
  5634. document.getElementById("showfightlist").disabled = true;
  5635. document.getElementById("ftlist").style.visibility = "hidden";
  5636. document.getElementById("flistid").value = aktflist;
  5637.  
  5638. // Click-Handler hinzufügen
  5639. document.getElementById("savefightlist").addEventListener("click", function(event) {
  5640. // Kampfliste sichern
  5641. var selBox = document.getElementById("flistid");
  5642. var fid = Number(selBox.value);
  5643. if (fid != 0)
  5644. if (!confirm("Soll die bestehende Sicherung überschrieben werden ?"))
  5645. return;
  5646. if (fid == 0)
  5647. fid = (flist.length == 0?1:Number(flist[flist.length-1])+1);
  5648. while (true) {
  5649. var bez = prompt("Gib eine Bezeichnung für die Sicherung ein:", selBox.value=="0"?"":selBox.options[selBox.selectedIndex].text);
  5650. if (bez == "" && selBox.value == "0")
  5651. continue;
  5652. if (bez == "")
  5653. if (confirm("Willst Du diese Sicherung wirklich löschen ?"))
  5654. break;
  5655. if (bez.toLowerCase() == "watchlist")
  5656. if (PGu_getValue("watchlist", fid) != fid) {
  5657. alert("Es gibt bereits eine Watchlist");
  5658. continue;
  5659. }
  5660. if (bez.indexOf("°") == -1)
  5661. break;
  5662. alert("das geht nicht !!");
  5663. }
  5664. if (bez == "") {
  5665. PGu_setValue("fightlist_"+fid, "");
  5666. var pos = flist.indexOf(fid);
  5667. if (fid == aktflist)
  5668. aktflist = 0;
  5669. flist.splice(pos, 1);
  5670. if (PGu_getValue("watchlist", 0) == fid)
  5671. PGu_setValue("watchlist", 0);
  5672. var alrt = "Sicherung wurde gelöscht";
  5673. }
  5674. else {
  5675. PGu_setValue("fightlist_" + fid, bez + "°" + PGu_getValue("FightIDList", ""));
  5676. if (selBox.value == "0")
  5677. flist.push(fid);
  5678. aktflist = fid;
  5679. if (bez.toLowerCase() == "watchlist")
  5680. PGu_setValue("watchlist", fid);
  5681. var alrt = "Kampfliste wurde gesichert";
  5682. PGu_setValue("fightlistchanged", 0);
  5683. }
  5684. PGu_setValue("savedfightlists", flist.join(";"));
  5685. PGu_setValue("aktfightlist", aktflist);
  5686. alert(alrt);
  5687. document.getElementById(tableIDs[0]).click();
  5688. }, false);
  5689. document.getElementById("loadfightlist").addEventListener("click", function(event) {
  5690. // Kampfliste laden
  5691. var selBox = document.getElementById("flistid");
  5692. var fid = selBox.value;
  5693. if (fid == "0")
  5694. if (!confirm("Soll die aktuelle Kampfliste gelöscht werden ?"))
  5695. return;
  5696. if (PGu_getValue("fightlistchanged", 1) == 1)
  5697. if (!confirm("Die aktuelle Kampfliste wurde geändert. Sollen diese Änderungen wirklich verloren gehen ?"))
  5698. return;
  5699. if (fid == "0") {
  5700. PGu_setValue("FightIDList", "");
  5701. PGu_setValue("fightlistchanged", 0);
  5702. PGu_setValue("aktfightlist", 0);
  5703. }
  5704. else {
  5705. PGu_setValue("FightIDList", PGu_getValue("fightlist_" + fid, "").split("°").pop());
  5706. PGu_setValue("fightlistchanged", 0);
  5707. PGu_setValue("aktfightlist", fid);
  5708. alert("Kampfliste wurde geladen");
  5709. }
  5710. document.getElementById(tableIDs[0]).click();
  5711. }, false);
  5712.  
  5713. // ***********************************************************************************************
  5714. // Click-Event für Schaltfläche
  5715. // ***********************************************************************************************
  5716. document.getElementById("showfightlist").addEventListener("click", function(event)
  5717. {
  5718. var elem = document.getElementById("ftlist");
  5719. if (elem.style.visibility == "visible")
  5720. elem.style.visibility = "hidden";
  5721. else {
  5722. if (event.shiftKey == 0)
  5723. var varName = "FightIDList";
  5724. else
  5725. var varName = "fightTablelist";
  5726. var fightIDs = PGu_getValue(varName, "");
  5727. elem.value = fightIDs;
  5728. elem.style.visibility = "visible";
  5729. elem.focus();
  5730. elem.select();
  5731. }
  5732. }, false);
  5733.  
  5734. var fightIDs = PGu_getValue("FightIDList", "");
  5735. // Fightliste abrufen und darstellen
  5736. var userIDs = fightIDs.split(';');
  5737.  
  5738. // Zeile einfügen, in der später die Fighttabelle steht
  5739. newtr = document.createElement("tr");
  5740. newtd = document.createElement("td");
  5741. newtd.setAttribute("colspan", 2);
  5742. // Neue Tabelle erzeugen
  5743. var newtable = document.createElement("table");
  5744. newtable.width = "600";
  5745. newtd.appendChild(newtable);
  5746. newtr.appendChild(newtd);
  5747. table.getElementsByTagName("tbody")[0].appendChild(newtr);
  5748.  
  5749. // Kopf in die Tabelle einfügen
  5750. InsertHead(newtable, 7);
  5751.  
  5752. for (var i = userIDs.length - 1; i >= 0; i--)
  5753. if (userIDs[i] == "" || bl("fi", userIDs[i]) && userIDs.length > 9)
  5754. userIDs.splice(i, 1);
  5755.  
  5756. for (i = 0; i < userIDs.length; i++)
  5757. GetUserData(userIDs, i, newtable);
  5758. }
  5759.  
  5760. // **********************************************************************************
  5761. // **********************************************************************************
  5762. // Einbettung eines Inhalts in einen Link mit Ziel, Titel, Body und ggf. Tag
  5763. // für "öffnen in neuem Fenster"
  5764. // **********************************************************************************
  5765. // **********************************************************************************
  5766. function Linkify(linkdest, linktitle, linkbody, bNewPage) {
  5767. return '<a href="' + linkdest + '" title="' + linktitle + '"' + ((bNewPage) ? ' target="_blank"' : '') + '>' + linkbody + '</a>';
  5768. }
  5769.  
  5770. // ***********************************************************************************************
  5771. // Funktion liefert den Link auf das Userprofil
  5772. // ***********************************************************************************************
  5773. function GetProfileLink(username, userid) {
  5774. return Linkify(PROFILE_URL + userid + '/', '', username, true);;
  5775. }
  5776.  
  5777. // ***********************************************************************************************
  5778. // Funktion ermittelt den Usernamen von df.de
  5779. // ***********************************************************************************************
  5780. function GetUserNameFromDFDE(content) {
  5781. if (content.indexOf('target="_blank') == -1)
  5782. return "";
  5783. return trimString(content.split('target="_blank')[1].split('">')[1].split('</a>')[0].split('<br>')[0]);
  5784. }
  5785.  
  5786. // ***********************************************************************************************
  5787. // ***********************************************************************************************
  5788. // Funktion ruft die downfight.de-Liste ab und stellt sie in der Tabelle dar
  5789. // ***********************************************************************************************
  5790. // ***********************************************************************************************
  5791. function InsertDFTable(table, id, Chb) {
  5792. // ***********************************************************************************************
  5793. // Funktion fügt einen Header in die Tabelle table ein
  5794. // ***********************************************************************************************
  5795. function InsertHead(table, nrofcolumns) {
  5796. // Neues Head-Element erzeugen und einfügen
  5797. var newthead = document.createElement("thead");
  5798. table.appendChild(newthead);
  5799. // Neue Zeile erzeugen
  5800. var newtr = document.createElement("tr");
  5801. newtr.setAttribute('style', 'background-color:#232323');
  5802.  
  5803. // Neue Zellen erzeugen und in die Zeile einfügen
  5804. for (var i = 0; i < nrofcolumns; i++) {
  5805. var newth = document.createElement("th");
  5806. newtr.appendChild(newth);
  5807. }
  5808.  
  5809. // Spalten formatieren
  5810. newtr.getElementsByTagName("th")[0].innerHTML = "&nbsp;"; // ATT-Diagramm
  5811. newtr.getElementsByTagName("th")[0].setAttribute('style', 'width: 20px; min-width:20px');
  5812.  
  5813. newtr.getElementsByTagName("th")[1].innerHTML = "&nbsp;"; // Fightinfo
  5814. var width = (ZONEBASE_URL == "")?42:54;
  5815. newtr.getElementsByTagName("th")[1].setAttribute('style', 'width: '+ width + 'px; min-width:' + width + 'px');
  5816.  
  5817. newtr.getElementsByTagName("th")[2].innerHTML = head1[id]; // Username
  5818. newtr.getElementsByTagName("th")[2].setAttribute('style', 'width: 175px');
  5819.  
  5820. newtr.getElementsByTagName("th")[3].innerHTML = "Bande"; // Bandenname
  5821. newtr.getElementsByTagName("th")[3].setAttribute('style', 'width: 150px');
  5822.  
  5823. newtr.getElementsByTagName("th")[4].innerHTML = "Punkte"; // aktuelle Punktzahl
  5824. newtr.getElementsByTagName("th")[4].setAttribute('style', 'width: 75px; text-align: right; padding-right: 10px');
  5825.  
  5826. newtr.getElementsByTagName("th")[5].innerHTML = head2[id]; // Zeit/Kills
  5827. newtr.getElementsByTagName("th")[5].setAttribute('style', 'width: 40px; text-align: right; padding-right: 15px');
  5828.  
  5829. newtr.getElementsByTagName("th")[6].innerHTML = "Reg-Datum"; // Registrierungsdatum
  5830. newtr.getElementsByTagName("th")[6].setAttribute('style', 'width: 65px');
  5831.  
  5832. newtr.getElementsByTagName("th")[7].innerHTML = "&nbsp;"; // Direktangriff
  5833. newtr.getElementsByTagName("th")[7].setAttribute('style', 'width: 20px');
  5834.  
  5835. // Zeilenelement einfügen
  5836. newthead.appendChild(newtr);
  5837. }
  5838.  
  5839. // Zeile für Checkbox einfügen
  5840. if (Chb) {
  5841. var newtr = document.createElement("tr");
  5842. var newtd = document.createElement("td");
  5843. newtd.setAttribute("colspan", 2);
  5844. newtd.setAttribute('style', 'padding-top: 10px; padding-bottom: 10px');
  5845. newtd.innerHTML = '<input name="FTCheckbox" id="FTCheckbox" type="checkbox"><span style="vertical-align: bottom">&nbsp;Anzeige der ' + tableList[id] + 'liste auf Let\'s fight aktivieren</span>&nbsp;&nbsp;&nbsp;<input name="CbMarkDF" id="CbMarkDF" type="checkbox"><span style="vertical-align: bottom">&nbsp;Downfighter markieren</span>';
  5846. newtr.appendChild(newtd);
  5847. table.getElementsByTagName("tbody")[0].appendChild(newtr);
  5848.  
  5849. // Wenn die letzte Einstellung der Checkbox "aktiv" war
  5850. if (PGu_getValue(tableIDs[id+1] + "OnLF", false)) {
  5851. // Häkchen setzen
  5852. document.getElementById("FTCheckbox").checked = true;
  5853. }
  5854. if (PGu_getValue("MarkDF", false)) {
  5855. // Häkchen setzen
  5856. document.getElementById("CbMarkDF").checked = true;
  5857. }
  5858.  
  5859. // Click-Handler hinzufügen
  5860. document.getElementById("FTCheckbox").addEventListener("click", function(event) {
  5861. // Klickstatus speichern
  5862. PGu_setValue(tableIDs[id+1] + "OnLF", this.checked);
  5863. }, false);
  5864. document.getElementById("CbMarkDF").addEventListener("click", function(event) {
  5865. // Klickstatus speichern
  5866. PGu_setValue("MarkDF", this.checked);
  5867. }, false);
  5868. }
  5869.  
  5870. var newtr = document.createElement("tr");
  5871. var newtd = document.createElement("td");
  5872.  
  5873. // Zeile einfügen, in der später die Anzahl steht
  5874. newtd.setAttribute("colspan", 2);
  5875. newtd.setAttribute('style', 'padding-top: 20px');
  5876. newtd.id = tableIDlow[id] + "info";
  5877. newtr.appendChild(newtd);
  5878. table.getElementsByTagName("tbody")[0].appendChild(newtr);
  5879.  
  5880. if (id == 2) {
  5881. newtr = document.createElement("tr");
  5882. newtd = document.createElement("td");
  5883. newtd.setAttribute("colspan", 2);
  5884. newtd.setAttribute('style', 'padding-bottom: 10px');
  5885. newtd.innerHTML = '<input name="FakerTage" id="FakerTage" type="text" style="width:20px" value="' + GM_getValue("FakerDays", "") + '"><span style="vertical-align: bottom">&nbsp;Anzahl der Tage im Diagramm</span>';
  5886. newtr.appendChild(newtd);
  5887. table.getElementsByTagName("tbody")[0].appendChild(newtr);
  5888. }
  5889.  
  5890. // Zeile einfügen, in der später die Fighttabelle steht
  5891. newtr = document.createElement("tr");
  5892. newtd = document.createElement("td");
  5893. newtd.setAttribute("colspan", 2);
  5894. // Neue Tabelle erzeugen
  5895. var newtable = document.createElement("table");
  5896. newtable.width = "600";
  5897. newtd.appendChild(newtable);
  5898. newtr.appendChild(newtd);
  5899. table.getElementsByTagName("tbody")[0].appendChild(newtr);
  5900.  
  5901. // Kopf in die Tabelle einfügen
  5902. InsertHead(newtable, 8);
  5903.  
  5904. // ***********************************************************************************************
  5905. // Abrufen der Liste von downfight.de
  5906. // ***********************************************************************************************
  5907. var URL = DFurl[id];
  5908. if (id < 2) {
  5909. var Params = ['myatt', attvalue, 'mydef', defvalue];
  5910. URL += "_" + DFTownCode3;
  5911. }
  5912. else
  5913. var Params = [];
  5914. PostToHTTP(URL, Params, function(content) {
  5915. // ***********************************************************************************************
  5916. // Funktion fügt eine neue Zeile ein
  5917. // ***********************************************************************************************
  5918. function InsertRow(table, row) {
  5919. // Neues Zeilenelement erzeugen
  5920. var newtr = document.createElement("tr");
  5921. newtr.bgColor = "#363636";
  5922. if (row %2 == 1)
  5923. newtr.bgColor = "#303030";
  5924.  
  5925. // Für alle Spalten (so viele, wie es Kopfelemente gibt)
  5926. for (var i = 0; i <= table.getElementsByTagName("th").length - 1; i++) {
  5927. // Neue Zelle erzeugen und einfügen
  5928. var newtd = document.createElement("td");
  5929. newtr.appendChild(newtd);
  5930. }
  5931.  
  5932. newtr.getElementsByTagName("td")[2].setAttribute('style', 'max-width:175px; overflow:hidden;');
  5933.  
  5934. // Zeilenelement in Tabelle einfügen
  5935. table.appendChild(newtr);
  5936.  
  5937. // Zeilenelement zur weiteren Verwendung zurückgeben
  5938. return newtr;
  5939. }
  5940.  
  5941. // ***********************************************************************************************
  5942. // Funktion ermittelt die UserID von df.de
  5943. // ***********************************************************************************************
  5944. function GetUserIDFromDFDE(content) {
  5945. if (content.indexOf('user.getname.xml') != -1)
  5946. return content.split(TOWN_URL+'dev/api/user.getname.xml?name=')[1].split('" target')[0];
  5947. return content.split(TOWN_URL+'dev/api/user.')[1].split('.xml"')[0];
  5948. }
  5949.  
  5950. // ***********************************************************************************************
  5951. // Funktion ermittelt die Restlaufzeit von df.de
  5952. // ***********************************************************************************************
  5953. function GetRemainingTimeFromDFDE(content) {
  5954. return number_format(parseInt(content.substr(5)), false) + "h";
  5955. }
  5956.  
  5957. // ***********************************************************************************************
  5958. // Funktion liefert den Direktangriffslink anhand des Usernamens
  5959. // ***********************************************************************************************
  5960. function GetDirectAttack(userid, username) {
  5961. if (hasCaptcha)
  5962. 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>';
  5963. return '<a href="#" id="att_' + userid + '" title="Direktangriff auf ' + username + '"><img src="' + getIconAddr(ICON_DIRECTATTACK) + '" style="padding-right: 3px"></a>';
  5964. }
  5965.  
  5966. // ***********************************************************************************************
  5967. // Funktion liefert das ATT-Diagramm
  5968. // ***********************************************************************************************
  5969. function GetFightDiagramm(username, doubleflag, days) {
  5970. 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>';
  5971. }
  5972.  
  5973. // ***********************************************************************************************
  5974. // Funktion liefert alle Daten des users username
  5975. // ***********************************************************************************************
  5976. function GetUserData(currenttr, username, dftrs, i, newtable, x) {
  5977. // ***********************************************************************************************
  5978. // Abrufen des XML-Datensatzes für den aktuellen User
  5979. // ***********************************************************************************************
  5980. getUserData('.'+username, function(userid, username, userpoints, gangid, gangname, regsince, money, userplace, history) {
  5981. if (userid == -1) // Penner nicht gefunden
  5982. return;
  5983.  
  5984. currenttr.id = tableIDlow[id] + "id" + userid;
  5985. if (dftrs[i].getElementsByTagName("td")[2].innerHTML.indexOf('<img src="/grafiken/armee.png">') != -1) {
  5986. var doubleflag = true;
  5987. } else {
  5988. var doubleflag = false;
  5989. }
  5990.  
  5991. // FIGHT-DIAGRAMM
  5992. if (id == 2)
  5993. currenttr.getElementsByTagName("td")[0].innerHTML = GetFightDiagramm(username, doubleflag, fakerdays);
  5994. else
  5995. currenttr.getElementsByTagName("td")[0].innerHTML = "&nbsp;";
  5996. // FIGHTINFO
  5997. currenttr.getElementsByTagName("td")[1].innerHTML = GetIconInsertHTML(userid, username, "nofight");
  5998. FightListHandler(currenttr.getElementsByTagName("td")[1].getElementsByTagName('img')[ZONEBASE_URL==""?1:2]);
  5999. // NAME
  6000. currenttr.getElementsByTagName("td")[2].innerHTML = GetProfileLink(username, userid);
  6001. currenttr.getElementsByTagName("td")[2].id = 'userprofileid:' + userid + "_" + (GetNrOfIDs(document, 'userprofileid:' + userid) + 1);
  6002. // Bandenprofillink eintragen
  6003. var ganglink = GetGangLink(gangid, gangname);
  6004. currenttr.getElementsByTagName("td")[3].innerHTML = ganglink;
  6005. // Aktuelle Punktzahl eintragen
  6006. currenttr.getElementsByTagName("td")[4].innerHTML = number_format(userpoints, myLang == 0);
  6007. currenttr.getElementsByTagName("td")[4].setAttribute('style', 'text-align: right; padding-right: 10px;');
  6008. if (id < 2) {
  6009. var lasttd = dftrs[i].getElementsByTagName("td").length - 1;
  6010. currenttr.getElementsByTagName("td")[5].innerHTML = dftrs[i].getElementsByTagName("td")[lasttd].innerHTML;
  6011. }
  6012. else if (id == 2) {
  6013. // LAUFZEIT
  6014. var lasttd = dftrs[i].getElementsByTagName("td").length - 1;
  6015. currenttr.getElementsByTagName("td")[5].innerHTML = GetRemainingTimeFromDFDE(dftrs[i].getElementsByTagName("td")[lasttd].innerHTML);
  6016. if (parseInt(currenttr.getElementsByTagName("td")[5].innerHTML.substr(5)) >= 1000) {
  6017. currenttr.getElementsByTagName("td")[5].setAttribute('style', 'text-align: right; padding-right: 10px; color:#ffff00');
  6018. ShowImg('', getIconAddr(ICON_NEW), '', '15', '15', '2', '2', '200', '', currenttr.getElementsByTagName("td")[2]);
  6019. } else {
  6020. currenttr.getElementsByTagName("td")[5].setAttribute('style', 'text-align: right; padding-right: 10px;');
  6021. }
  6022. }
  6023. else {
  6024. var kills = parseInt(dftrs[i].getElementsByTagName("td")[0].innerHTML);
  6025. currenttr.getElementsByTagName("td")[5].innerHTML = number_format(kills, false);
  6026. currenttr.getElementsByTagName("td")[5].setAttribute('style', 'text-align: right; padding-right: 10px;');
  6027. }
  6028. // Aktuelles Registrierungsdatum
  6029. currenttr.getElementsByTagName("td")[6].innerHTML = regsince;
  6030.  
  6031. var colorCode = getColorCode(userpoints, userplace);
  6032. var waitText = "";
  6033. var CachInd = CacheIndex(userid);
  6034. if (CachInd != -1)
  6035. waitText = CachedWaitText[CachInd];
  6036. if (waitText != "") {
  6037. waitText = " (" + waitText + ")";
  6038. }
  6039. currenttr.getElementsByTagName("td")[2].getElementsByTagName("a")[0].style.color = colors[waitText!=""?0:colorCode];
  6040. currenttr.getElementsByTagName("td")[3].firstChild.style.color = colors[colorCode];
  6041. currenttr.getElementsByTagName("td")[4].setAttribute('style', 'text-align: right; padding-right: 10px; color: ' + colors[colorCode]);
  6042. // Wenn der Gegner sich im eigenen Punktespektrum befindet
  6043. if (colorCode != 0 && colorCode < 5) {
  6044. // DIREKTANGRIFF
  6045. currenttr.getElementsByTagName("td")[7].innerHTML = GetDirectAttack(userid, username);
  6046. currenttr.getElementsByTagName("td")[7].setAttribute('style', 'padding-left: 2px;');
  6047. if (!hasCaptcha)
  6048. document.getElementById("att_"+userid).addEventListener("click", function(event) {
  6049. PostToHTTP(FIGHT_URL+"attack/", Array("f_toid", username,"Submit2","Angriff"), function(content) { window.location.reload(); });
  6050. }, false);
  6051. // sonst: Der Gegner ist derzeit nicht angreifbar
  6052. } else {
  6053. currenttr.getElementsByTagName("td")[7].innerHTML = '&nbsp;';
  6054. }
  6055. if (showHistory && history != "") {
  6056. insertHistory(currenttr.getElementsByTagName("td")[2].getElementsByTagName("a")[0], i, history);
  6057. document.getElementById("hist"+i).getElementsByTagName("td")[0].innerHTML = TxtColor[colorCode][myLang] + waitText;
  6058. }
  6059.  
  6060. // Zahl der Kämpfe ermitteln
  6061. CheckPastFights(userid, username, 0);
  6062.  
  6063. // ***********************************************************************************************
  6064. // Abrufen des Userprofils
  6065. // ***********************************************************************************************
  6066. GM_xmlhttpRequest({method: 'GET', url: PROFILE_URL + userid + "/", onload: function(responseDetails) {
  6067. var profilecontent = responseDetails.responseText;
  6068. // Zelle mit Bandenbeschreibung des Users ermitteln
  6069. var curElem = document.getElementById(tableIDlow[id] + "id" + userid);
  6070. if (curElem) {
  6071. currenttd = curElem.getElementsByTagName("td")[3];
  6072. // Wenn der User gelöscht oder gebannt ist
  6073. if (profilecontent.indexOf('"Der Spieler wurde gel&ouml;scht oder vom Spiel verbannt!"') != -1) {
  6074. currenttd.innerHTML = '<b>GEBANNT/GELÖSCHT!</b>';
  6075. currenttd.setAttribute('style', 'color:' + colors[0]);
  6076. }
  6077. }
  6078. }
  6079. });
  6080. });
  6081. }
  6082.  
  6083. // ***********************************************************************************************
  6084. // ***********************************************************************************************
  6085. // ***********************************************************************************************
  6086. var doc = HTML2DOM(content);
  6087.  
  6088. if (id < 2) {
  6089. for (i = doc.getElementsByTagName("table").length - 1; i > 0; i--)
  6090. if (doc.getElementsByTagName("table")[i].innerHTML.indexOf("angriff.gif") != -1)
  6091. break;
  6092. var dftrs = doc.getElementsByTagName("table")[i].getElementsByTagName("tr")[1].getElementsByTagName("table")[0].getElementsByTagName("tr");
  6093. }
  6094. else {
  6095. var body = doc.getElementsByClassName('bodybackgrnd');
  6096. var dftable = body[0].getElementsByTagName("table");
  6097. var dftrs = dftable[1].getElementsByTagName("tr");
  6098. }
  6099.  
  6100. var nrofrows = 0;
  6101. var fakerdays = GM_getValue("FakerDays", "");
  6102. for (var i = 1; i <= dftrs.length - (id<2?2:1); i++) {
  6103. if (id < 2) {
  6104. if (dftrs[i].getElementsByTagName("td").length < 10)
  6105. continue;
  6106. var username = GetUserNameFromDFDE(dftrs[i].getElementsByTagName("td")[4].innerHTML);
  6107. if (username == "")
  6108. username = GetUserNameFromDFDE(dftrs[i].getElementsByTagName("td")[5].innerHTML);
  6109. }
  6110. else if (id == 2) {
  6111. var src = dftrs[i].getElementsByTagName("td")[4].innerHTML.split('/');
  6112. if (src[0].substr(-5) == 'http:')
  6113. src = src[2] + "/";
  6114. else
  6115. src = src[0] + "/";
  6116. if (src != TOWN_URL && src != "www."+TOWN_URL)
  6117. continue;
  6118. // Username ermitteln
  6119. var username = GetUserNameFromDFDE(dftrs[i].getElementsByTagName("td")[4].innerHTML);
  6120. }
  6121. else {
  6122. if (dftrs[i].getElementsByTagName("td")[2].innerHTML.indexOf(TOWN_URL) == -1)
  6123. continue;
  6124. if (dftrs[i].getElementsByTagName("td")[3].innerHTML != townname)
  6125. continue;
  6126. // Username ermitteln
  6127. var username = GetUserNameFromDFDE(dftrs[i].getElementsByTagName("td")[2].innerHTML);
  6128. }
  6129. if (username == "")
  6130. continue;
  6131. nrofrows++;
  6132.  
  6133. // Neue Zeile erzeugen und mit UserID branden
  6134. var currenttr = InsertRow(newtable, nrofrows);
  6135. if (!currenttr)
  6136. return;
  6137.  
  6138. GetUserData(currenttr, username, dftrs, i, newtable, nrofrows);
  6139. }
  6140. // Info über die Anzahl über Tabelle schreiben
  6141. var DFtown = "";
  6142. if (nrofrows == 0) {
  6143. if (dftrs.length > 0)
  6144. if (dftrs[0].getElementsByTagName("td").length > 4)
  6145. DFtown = dftrs[0].getElementsByTagName("td")[4].innerHTML.split("</font")[0].split(">")[2];
  6146. }
  6147. if (nrofrows == 0 && townname != DFtown) {
  6148. 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 />';
  6149. table.removeChild(newtable);
  6150. }
  6151. else
  6152. 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 />';
  6153. });
  6154. }
  6155.  
  6156. // **********************************************************************************
  6157. // **********************************************************************************
  6158. // Funktion baut einen Pennerzone-Suchaufruf zusammen und liefert ihn zurück
  6159. // **********************************************************************************
  6160. // **********************************************************************************
  6161. function BuildPennerzoneLink(minpoints, maxpoints, datesearch, linktitle, linkicon) {
  6162. return '<a href="' + PENNERZONESEARCH_URL1 + minpoints + PENNERZONESEARCH_URL2 + maxpoints + PENNERZONESEARCH_URL3 + datesearch + '" target="_blank" title="' + linktitle + '"><img src="' + linkicon + '"></a>';
  6163. }
  6164.  
  6165. // **********************************************************************************
  6166. // **********************************************************************************
  6167. // Funktion baut den String für Pennerzone-Suchzeile zusammen und liefert ihn zurück
  6168. // **********************************************************************************
  6169. // **********************************************************************************
  6170. function BuildPennerzoneLinkString(minpoints, maxpoints, datefrom) {
  6171. // Wenn kein Startdatum angegeben wurde
  6172. if (datefrom == "") {
  6173. var datesearch = PENNERZONESEARCH_URL3 + PENNERZONESEARCH_URL4 + PENNERZONESEARCH_URL5 + PENNERZONESEARCH_URL6;
  6174. var datefromdisplay = '<small>ab: -egal-</small>';
  6175. // sonst: Es wurde ein Startdatum angegeben
  6176. } else {
  6177. var day = Number(datefrom.substr(0,2))
  6178. var month = datefrom.substr(3,2)
  6179. var year = datefrom.substr(6,4)
  6180. var datesearch = PENNERZONESEARCH_URL3 + day + PENNERZONESEARCH_URL4 + month + PENNERZONESEARCH_URL5 + year + PENNERZONESEARCH_URL6;
  6181. var datefromdisplay = '<small>ab: ' + datefrom + '</small>';
  6182. }
  6183.  
  6184. // Alle Icons zusammenbauen
  6185. var PennerzoneLinkMoney = BuildPennerzoneLink(minpoints, "", datesearch, "Gegnersuche (Geld, volles Punktespektrum)", getIconAddr(ICON_PENNERZONE_MONEY));
  6186. var PennerzoneLinkUp = BuildPennerzoneLink(parseInt(maxpoints * 0.90), maxpoints, datesearch, "Gegnersuche (viele Punkte, Max - 10%)", getIconAddr(ICON_PENNERZONE_UP));
  6187. var PennerzoneLinkDown = BuildPennerzoneLink(minpoints, parseInt(minpoints * 1.20), datesearch, "Gegnersuche (wenig Punkte, Min + 20%)", getIconAddr(ICON_PENNERZONE_DOWN));
  6188. var PennerzoneLinkDate = '<img src="' + getIconAddr(ICON_PENNERZONE_DATE) + '" id="PennerzoneDate" title="Eingabe eines Start-Reg.-datums" style="cursor:pointer">';
  6189.  
  6190. // Gesamten String für die Pennerzone-Suchzeile zurückgeben
  6191. return '<strong>Pennerzone-Suche:</strong>&nbsp;&nbsp;&nbsp;&nbsp;' + PennerzoneLinkMoney + '&nbsp;' + PennerzoneLinkUp + '&nbsp;&nbsp;' + PennerzoneLinkDown + '&nbsp;&nbsp;&nbsp;&nbsp;' + PennerzoneLinkDate + '&nbsp;&nbsp;' + datefromdisplay;
  6192. }
  6193.  
  6194. // **********************************************************************************
  6195. // **********************************************************************************
  6196. // Handler für die Datumsschaltfläche der Pennerzone-Zeile
  6197. // **********************************************************************************
  6198. // **********************************************************************************
  6199. function AddPennerzoneDateHandler() {
  6200. // Wenn das Element vorhanden ist
  6201. if (document.getElementById("PennerzoneDate") != null) {
  6202. // Click-Handler hinzufügen
  6203. document.getElementById("PennerzoneDate").addEventListener("click", function(event) {
  6204. // Startdatum vom User eingeben lassen
  6205. 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", ""));
  6206. // Eingegebenes Startdatum speichern
  6207. PGu_setValue("PennerzoneDateFrom", datefrom);
  6208.  
  6209. // Pennerzone-Suchzeile neu erstellen und zuweisen
  6210. document.getElementById("PennerzoneP").innerHTML = BuildPennerzoneLinkString(minpoints, maxpoints, datefrom);
  6211.  
  6212. // Handler erneut zuweisen
  6213. AddPennerzoneDateHandler();
  6214. }, false);
  6215. }
  6216. }
  6217.  
  6218. // **********************************************************************************
  6219. // **********************************************************************************
  6220. // Handler für Bandenprofilaktualisierung
  6221. // **********************************************************************************
  6222. // **********************************************************************************
  6223. function HandleGangProfile(content) {
  6224. // ***********************************************************************************************
  6225. // Funktion ermittelt aktuelle Punktzahl und Farbe setzen
  6226. // ***********************************************************************************************
  6227. function GetActPoints(userid, x, id) {
  6228. // ***********************************************************************************************
  6229. // Abrufen des XML-Datensatzes für den aktuellen User
  6230. // ***********************************************************************************************
  6231. getUserData("#"+userid, function(userid, username, userpoints, gangid, gangname, regsince, money, userplace, history) {
  6232. var akttr = document.getElementById(id);
  6233. akttr.getElementsByTagName("div")[0].innerHTML = number_format(userpoints, false);
  6234. akttr.getElementsByTagName("div")[0].id = "points"+x;
  6235.  
  6236. var waitText = "";
  6237. var colorCode = 6;
  6238. if (userid != m_ownuserid) {
  6239. var CachInd = CacheIndex(userid);
  6240. if (CachInd != -1)
  6241. waitText = CachedWaitText[CachInd];
  6242. if (waitText != "")
  6243. waitText = " (" + waitText + ")";
  6244. colorCode = getColorCode(userpoints, userplace);
  6245. }
  6246. akttr.getElementsByTagName("td")[1].getElementsByTagName("a")[ZONEBASE_URL==""?3:4].style.color = colors[waitText!=""?0:colorCode];
  6247. if (document.getElementById("regsince_" + id))
  6248. document.getElementById("regsince_" + id).innerHTML = '<div align="right">' + regsince + "</div>";
  6249. if (showHistory && history != "") {
  6250. insertHistory(akttr.getElementsByTagName("td")[1].getElementsByTagName("a")[ZONEBASE_URL==""?3:4], userid, history);
  6251. akttr.getElementsByTagName("td")[1].getElementsByTagName("a")[ZONEBASE_URL==""?3:4].title = "";
  6252. document.getElementById("hist"+userid).getElementsByTagName("td")[0].innerHTML = TxtColor[colorCode][myLang] + waitText;
  6253. }
  6254. });
  6255. }
  6256.  
  6257. // Referenzen auf die Tabelle speichern
  6258. var tables = document.getElementsByTagName("table");
  6259. // Bandenname holen und Info-Symbol
  6260. var div = document.getElementsByClassName("gang_header")[0];
  6261. var gangname = div.getElementsByTagName("span")[0].innerHTML.split("&nbsp;").pop();
  6262. if (location.toString().split("bande:")[1].split("/")[0] != m_owngangid) {
  6263. var newtd = document.createElement("a");
  6264. newtd.innerHTML = '<input type="button" value="'+TxtAllFightsGang[myLang]+'" id="showfights" title="' + TxtShowFTList[myLang] + '" style="cursor:pointer">';
  6265. newtd.setAttribute('style', 'padding-left: 40px;');
  6266. div.getElementsByTagName("div")[0].appendChild(newtd);
  6267. document.getElementById("showfights").addEventListener("click", function(event) {
  6268. PGu_setValue("gangsearch", gangname);
  6269. window.location.href = TOWNBASE_URL+"fight/fightlog/";
  6270. }, false);
  6271. }
  6272.  
  6273. var table;
  6274. var i;
  6275. for (i = tables.length - 2; i >= 0; i--) {
  6276. table = tables[i];
  6277. if (tables[i+1].innerHTML.indexOf("profil/id:") != -1 &&
  6278. tables[i+1].innerHTML.indexOf('id="gb_posts"') == -1)
  6279. break;
  6280. }
  6281. var tr = table.getElementsByTagName("tr");
  6282. var td = tr[0].removeChild(tr[0].getElementsByTagName("td")[0]);
  6283. var newtr = document.createElement("tr");
  6284. newtr.appendChild(td);
  6285. table.insertBefore(newtr, table.firstChild);
  6286. table = tables[i+1];
  6287. var tr = table.getElementsByTagName("tr");
  6288. var fightweg = "";
  6289. if (tr[0].getElementsByTagName("td").length > 3)
  6290. fightweg = "nofight";
  6291. var newtd = document.createElement("td");
  6292. newtd.height = "18";
  6293. newtd.style.verticalAlign = "middle";
  6294. newtd.style.color = "#888";
  6295. newtd.style.fontWeight = "bold";
  6296. newtd.style.backgroundColor = "#1F1F1F";
  6297. newtd.colSpan = "4";
  6298. 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>';
  6299. newtd.getElementsByTagName("img")[0].addEventListener("click", function(event) {
  6300. var trs = table.getElementsByTagName("tr");
  6301. var trslen = trs.length - 1;
  6302.  
  6303. counter = 0;
  6304. var added = 0;
  6305. var fightIDs = PGu_getValue("FightIDList", "");
  6306. // Für alle Zeilen
  6307. for (var x = 1; x < trslen; x++) {
  6308. if (!trs[x].id)
  6309. continue;
  6310. counter++;
  6311. // Daten aus den Zellen ermitteln
  6312. var tds = trs[x].getElementsByTagName("td");
  6313. var userid = tds[1].innerHTML.split('href="/profil/id:')[1].split('/')[0];
  6314. if (AddIDToList(fightIDs, userid)) {
  6315. fightIDs += (fightIDs == ""?"":";") + userid;
  6316. added++;
  6317. }
  6318. if (document.getElementsByName("addremoveft"+userid).length > 0)
  6319. document.getElementsByName("addremoveft"+userid)[0].src = getIconAddr(ICON_DELFROMFT);
  6320. }
  6321.  
  6322. if (added > 0) {
  6323. fightIDs = fightIDs.split(";");
  6324. for (var j = fightIDs.length - 1; j >= 0; j--)
  6325. if (isNaN(fightIDs[j]) || fightIDs[j] == "")
  6326. fightIDs.splice(j, 1);
  6327. PGu_setValue("FightIDList", fightIDs.join(";"));
  6328. PGu_setValue("fightlistchanged", 1);
  6329. if (added == 1)
  6330. alert (TxtAdded1ToFT[myLang]);
  6331. else
  6332. alert (TxtAddedToFT[myLang].replace("%s", added));
  6333. }
  6334. else
  6335. alert (TxtNoAddedToFT[myLang]);
  6336. }, false);
  6337. tr[0].appendChild(newtd);
  6338. var newtd2 = newtd.cloneNode(true);
  6339. 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>';
  6340. newtd2.getElementsByTagName("img")[0].addEventListener("click", function(event) {
  6341. var trs = table.getElementsByTagName("tr");
  6342. var trslen = trs.length - 1;
  6343.  
  6344. counter = 0;
  6345. var removed = 0;
  6346. var fightIDs = PGu_getValue("FightIDList", "").split(';');
  6347. // Für alle Zeilen
  6348. for (var x = 1; x < trslen; x++) {
  6349. if (!trs[x].id)
  6350. continue;
  6351. counter++;
  6352. // Daten aus den Zellen ermitteln
  6353. var tds = trs[x].getElementsByTagName("td");
  6354. var userid = tds[1].innerHTML.split('href="/profil/id:')[1].split('/')[0];
  6355. for (var j = fightIDs.length - 1; j >= 0; j--) {
  6356. if (fightIDs[j] == userid)
  6357. removed++;
  6358. if (isNaN(fightIDs[j]) || fightIDs[j] == "" || fightIDs[j] == userid)
  6359. fightIDs.splice(j, 1);
  6360. }
  6361. if (document.getElementsByName("addremoveft"+userid).length > 0)
  6362. document.getElementsByName("addremoveft"+userid)[0].src = getIconAddr(ICON_ADDTOFT);
  6363. }
  6364.  
  6365. if (removed > 0) {
  6366. PGu_setValue("FightIDList", fightIDs.join(";"));
  6367. PGu_setValue("fightlistchanged", 1);
  6368. if (removed == 1)
  6369. alert (TxtRemoved1FromFT[myLang]);
  6370. else
  6371. alert (TxtRemovedFromFT[myLang].replace("%s", removed));
  6372. }
  6373. else
  6374. alert (TxtNoRemovedFromFT[myLang]);
  6375. }, false);
  6376. tr[0].appendChild(newtd2);
  6377.  
  6378. // Für alle Zeilen der Tabelle
  6379. for (var x = 1; x < tr.length; x++) {
  6380. if (!tr[x].id)
  6381. continue;
  6382. var akttr = tr[x];
  6383. var akttd = akttr.getElementsByTagName("td")[1];
  6384. var id = akttr.id;
  6385. // Name und UserID auslesen
  6386. var userid = GetUserID(akttd.innerHTML);
  6387. var username = GetUsername(akttd.innerHTML);
  6388. if (fightweg == "") {
  6389. var newtd = document.createElement('td');
  6390. newtd.id = "regsince_" + id;
  6391. document.getElementById(id).insertBefore(newtd, akttr.getElementsByTagName('td')[2]);
  6392. }
  6393. akttd.innerHTML = GetIconInsertHTML(userid, username, fightweg) + akttd.innerHTML;
  6394. FightListHandler(akttd.getElementsByTagName('img')[ZONEBASE_URL==""?2:3]);
  6395.  
  6396. // Zahl der Kämpfe ermitteln
  6397. CheckPastFights(userid, username, 0);
  6398.  
  6399. // Aktuelle Punkte ermitteln und anzeigen
  6400. GetActPoints(userid, x, id);
  6401. }
  6402. }
  6403.  
  6404. //function ap() {
  6405. // var tables = document.getElementsByTagName("table");
  6406. // var tables = document.getElementsByTagName("table");
  6407. //
  6408. // var userid = '472133';
  6409. // var username = 'Dr_Med_Prof_Spongebob';
  6410. // var points = '111264083';
  6411. //
  6412. // var fightdate = '01.04.2010 21:59:43 Uhr';
  6413. //
  6414. // tables[0].getElementsByTagName("tr")[1].getElementsByTagName("td")[1].innerHTML = '&nbsp;' + fightdate;
  6415. //
  6416. // document.getElementsByClassName("avatar")[1].src = 'http://inodes.pennergame.de/bl_DE/avatare/' + userid + '.jpg';
  6417. //
  6418. // tables[1].getElementsByTagName("tr")[1].getElementsByTagName("td")[0].innerHTML = '<div align="center"><strong>' + username + '</strong></div>';
  6419. //
  6420. // tables[1].getElementsByTagName("tr")[3].getElementsByTagName("td")[0].innerHTML = '<div align="center">-' + points + '</div>'
  6421. // tables[1].getElementsByTagName("tr")[3].getElementsByTagName("td")[2].innerHTML = '<div align="center">' + points + '</div>'
  6422. //
  6423. // 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>';
  6424. //}
  6425.  
  6426. function ByeByeGoogle() {
  6427. for (var i = 1; i <= 2; i++) {
  6428. // Div mit Google-Ads entfernen
  6429. var googleads = document.getElementById("google_js_" + i);
  6430. if (googleads != null) {
  6431. googleads.parentNode.removeChild(googleads);
  6432. }
  6433. }
  6434. }
  6435.  
  6436. function bbcodeEinAus() {
  6437. document.getElementById("bbcode").style.visibility = "hidden";
  6438.  
  6439. // ***********************************************************************************************
  6440. // Click-Event für Schaltfläche
  6441. // ***********************************************************************************************
  6442. document.getElementById("bbcodeanzeigen").addEventListener("click", function(event)
  6443. {
  6444. var elem = document.getElementById("bbcode");
  6445. if (elem.style.visibility == "visible")
  6446. elem.style.visibility = "hidden";
  6447. else {
  6448. var post = document.getElementById("PostDoneFightsToSB");
  6449. var posttext = genBBCode(post.parentNode.parentNode.parentNode, SBPOSTMODE_DONE).join("\n");
  6450. if (posttext == "")
  6451. alert(TxtCheckFights[myLang]);
  6452. else {
  6453. if (event.shiftKey != 0 || document.getElementById("postVals").checked)
  6454. posttext = TxtFightVals[myLang] + fightVals + "\n\n" + posttext;
  6455. elem.value = posttext;
  6456. elem.title = TxtBBCodeLen[myLang].replace("%d", posttext.length);
  6457. elem.style.visibility = "visible";
  6458. elem.focus();
  6459. elem.select();
  6460. }
  6461. }
  6462. }, false);
  6463. }
  6464.  
  6465. function DelayedPost(delay) {
  6466. if (DB_URL == "")
  6467. return;
  6468. function PostNow() {
  6469. if (fight != "")
  6470. PostToHTTP(DB_URL, Array('town', TOWNEXTENSION, 'name', m_ownusername,
  6471. 'id', m_ownuserid, 'script', THISSCRIPTVERSION,
  6472. 'client', navigator.userAgent, 'submit', fight), '');
  6473. }
  6474. if (delay == 0) {
  6475. fight = "fight";
  6476. PostNow();
  6477. }
  6478. else
  6479. window.setTimeout(PostNow, delay);
  6480. fight = "";
  6481. }
  6482.  
  6483. // ***********************************************************************************************
  6484. // Colorieren von Pennern auf der Bandenseite
  6485. // ***********************************************************************************************
  6486. function colorNames() {
  6487. function insFightData(id, nr) {
  6488. getUserData("#"+id, function(userid, username, userpoints, gangid, gangname, regsince, money, userplace, history) {
  6489. var colorCode = getColorCode(userpoints, userplace);
  6490. var names = document.getElementsByName("penner"+userid);
  6491. for (var ii = 0; ii < names.length; ii++) {
  6492. if (names[ii].getElementsByTagName("span").length == 0)
  6493. continue;
  6494. if (names[ii].getElementsByTagName("span")[0].style.fontSize == "10px")
  6495. continue;
  6496. names[ii].getElementsByTagName("span")[0].style.color = colors[colorCode];
  6497. var title = names[ii].title;
  6498. names[ii].title = "";
  6499. if (title != "")
  6500. title = " (" + title + ")";
  6501. if (showHistory && history != "") {
  6502. insertHistory(names[ii].getElementsByTagName("span")[0], nr, history);
  6503. document.getElementById("hist"+nr).getElementsByTagName("td")[0].innerHTML = TxtUserPoints[myLang].replace('%s', username).replace('%s', number_format(userpoints, false)) + " " + TxtColor[colorCode][myLang] + title;
  6504. }
  6505.  
  6506. var newtd = document.createElement("a");
  6507. newtd.innerHTML = GetIconInsertHTML(userid, username, ""); // Info
  6508. FightListHandler(newtd.getElementsByTagName('img')[ZONEBASE_URL==""?2:3]);
  6509. names[ii].parentNode.insertBefore(newtd, names[ii]);
  6510. CheckPastFights(userid, username, 0);
  6511. names[ii].name = names[ii].name + "_done";
  6512. }
  6513. });
  6514. }
  6515. if (location.toString().indexOf(TOWNBASE_URL+'gang/') != -1) {
  6516. var content = document.getElementById("tabcontainer");
  6517. if (content) {
  6518. // content.style.width = '800px';
  6519. var divs = content.getElementsByTagName("div");
  6520. var nr = 0;
  6521. for (i = 0; i < divs.length; i++) {
  6522. if (divs[i].style.backgroundColor == "#303030")
  6523. continue;
  6524. if (divs[i].innerHTML.indexOf("/profil/id:") == -1)
  6525. continue;
  6526. var small = false;
  6527. var aref = divs[i].getElementsByTagName("a");
  6528. for (var j = 0; j < aref.length; j++) {
  6529. var currenttd = aref[j];
  6530. if (currenttd.name || !currenttd.href)
  6531. continue;
  6532. if (currenttd.href.indexOf("/profil/id:") == -1)
  6533. continue;
  6534. var id = GetUserID(currenttd.href);
  6535. currenttd.name = "penner" + id;
  6536. small = true;
  6537. insFightData(id, ++nr);
  6538. }
  6539. if (small)
  6540. divs[i].style.fontSize = "0.9em";
  6541. }
  6542. }
  6543. }
  6544. window.setTimeout(colorNames, 5000);
  6545. return;
  6546. }
  6547.  
  6548. // ***********************************************************************************************
  6549. // Markieren der Downfighter
  6550. // ***********************************************************************************************
  6551. function markDF() {
  6552. if (!document.getElementById('downfightinfo')) {
  6553. var content = document.getElementsByTagName("body")[0];
  6554. var aref = content.getElementsByTagName("a");
  6555. for (var i = 0; i < aref.length; i++) {
  6556. if (aref[i].style.textDecoration.indexOf('blink') != -1)
  6557. continue;
  6558. if (isDownFighter(trimString(aref[i].innerHTML.split('id="hist')[0].split('>').pop()))) {
  6559. //var decoration = " blink";
  6560. //if (aref[i].style.textDecoration == "none")
  6561. // aref[i].style.textDecoration = decoration;
  6562. //else {
  6563. // if (aref.href != "")
  6564. // decoration += " underline";
  6565. // aref[i].style.textDecoration += decoration;
  6566. //}
  6567. aref[i].className = "pulsating";
  6568. var title = "ACHTUNG!! Dieser Penner ist im Downfight !!";
  6569. if (aref[i].title.indexOf(title) != -1)
  6570. title = "";
  6571. else if (aref[i].title != "")
  6572. title = " (" + title + ")";
  6573. aref[i].title += title;
  6574. }
  6575. }
  6576. }
  6577. window.setTimeout(markDF, 5000);
  6578. return;
  6579. }
  6580.  
  6581. // ***********************************************************************************************
  6582. // Abrufen der DF-Liste von downfight.de
  6583. // ***********************************************************************************************
  6584. function updDFList() {
  6585. if (IsTimeToCheck(TOWNEXTENSION + "LastUpdateDF", 10)) {
  6586. var URL = DFurl[0] + "_" + DFTownCode3;
  6587. var Params = ['myatt', 9999, 'mydef', 9999];
  6588. PostToHTTP(URL, Params, function(content) {
  6589. var doc = HTML2DOM(content);
  6590. for (var i = doc.getElementsByTagName("table").length - 1; i > 0; i--)
  6591. if (doc.getElementsByTagName("table")[i].innerHTML.indexOf("angriff.gif") != -1)
  6592. break;
  6593. var dftrs = doc.getElementsByTagName("table")[i].getElementsByTagName("tr")[1].getElementsByTagName("table")[0].getElementsByTagName("tr");
  6594. var nrofrows = 0;
  6595. for (var i = 1; i <= dftrs.length - 2; i++) {
  6596. if (dftrs[i].getElementsByTagName("td").length < 10)
  6597. continue;
  6598. var username = GetUserNameFromDFDE(dftrs[i].getElementsByTagName("td")[4].innerHTML);
  6599. if (username == "")
  6600. continue;
  6601. DFusers[nrofrows] = username;
  6602. nrofrows++;
  6603. }
  6604. PG_setValue("DFList", DFusers.join(";"));
  6605. if (nrofrows > 0)
  6606. markDF();
  6607. });
  6608. }
  6609. else {
  6610. var DFuserlist = PG_getValue("DFList", "");
  6611. if (DFuserlist != "")
  6612. DFusers = DFuserlist.split(";");
  6613. if (DFusers.length > 0)
  6614. markDF();
  6615. }
  6616. }
  6617.  
  6618. function checkFightValBox() {
  6619. if (fightVals == "") {
  6620. window.setTimeout(checkFightValBox, 500);
  6621. return;
  6622. }
  6623.  
  6624. GM_xmlhttpRequest({method: 'GET', url: TOWNBASE_URL + "dev/api/gang/" + m_owngangid + ".xml", onload: function(responseDetails) {
  6625. var content = responseDetails.responseText.split("<member_list>")[1];
  6626. var recv = PGu_getValue("fvalrecv", "0");
  6627. var id = recv.split(":");
  6628. if (content.indexOf("<id>"+id[0]+"</id>") == -1)
  6629. id[0] = 0;
  6630. var members = content.split('<id>');
  6631. var name = "";
  6632. var admid = 0;
  6633. var option = '<option value="0"> </option> ';
  6634. for (var i = 1; i < members.length; i++) {
  6635. var mid = members[i].split("<")[0];
  6636. var mname = members[i].split("<name>")[1].split("<")[0].trim()
  6637. var status = members[i].split("<status>")[1].split("<")[0].trim()
  6638. if (status == "3")
  6639. admid = mid;
  6640. option += '<option value="' + mid + '">' + mname + '</option> ';
  6641. if (id[0] == 0 && status == "3" || id[0] == mid)
  6642. name = mname;
  6643. }
  6644. var newtd = document.createElement("td");
  6645. newtd.setAttribute('style', 'position:absolute; top:0px; left:0px');
  6646. newtd.innerHTML = '<form name="fvalrcvdef" id="fvalrcvdef">PN senden an: <select id="rcvid" name="rcvid"> ' + option + ' </select> </form>';
  6647. document.getElementById("fvalmeld").parentNode.parentNode.appendChild(newtd);
  6648. document.getElementById("rcvid").value = id[0];
  6649. document.getElementById("fvalrcvdef").style.visibility = "hidden";
  6650. // Click-Handler hinzufügen
  6651. document.getElementById("rcvid").addEventListener("change", function(event) {
  6652. // neuen Wert speichern
  6653. if (event.target.value == admid)
  6654. PGu_setValue("fvalrecv", "0");
  6655. else
  6656. PGu_setValue("fvalrecv", event.target.value + ":" + event.target.options[event.target.selectedIndex].text);
  6657. document.getElementById("fvalrcvdef").style.visibility = "hidden";
  6658. document.getElementById("fvalmeld").value = "Kampfwerte melden";
  6659. 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";
  6660. }, false);
  6661. document.getElementById("fvalmeld").addEventListener("click", function(event) { fightvalmeld(event) }, false);
  6662. document.getElementById("fvalmeld").addEventListener("mouseover", function(event) {
  6663. if (event.shiftKey != 0) {
  6664. event.target.value = "Empfänger wählen";
  6665. event.target.title = "Kampf- und Skillwerte per PN an einen anderen Empfänger senden";
  6666. }
  6667. }, false);
  6668. document.getElementById("fvalmeld").addEventListener("mouseout", function(event) {
  6669. if (document.getElementById("fvalmeld").value != "Bitte warten" && name != m_ownusername) {
  6670. document.getElementById("fvalmeld").value = "Kampfwerte melden";
  6671. document.getElementById("fvalmeld").title = "Kampf- und Skillwerte per PN an " + (id[0] == 0 ?"Admin":id[1]) + " senden";
  6672. }
  6673. }, false);
  6674. if (name == m_ownusername) {
  6675. document.getElementById("fvalmeld").value = "Empfänger wählen";
  6676. document.getElementById("fvalmeld").title = "Kampf- und Skillwerte per PN an einen anderen Empfänger senden";
  6677. }
  6678. document.getElementById("fvalmeld").style.visibility = "visible";
  6679. }});
  6680. }
  6681.  
  6682. function getPosition(element) {
  6683. var xPosition = 0;
  6684. var yPosition = 0;
  6685. while (element) {
  6686. xPosition += element.offsetLeft - element.scrollLeft + element.clientLeft;
  6687. yPosition += element.offsetTop - element.scrollTop + element.clientTop;
  6688. element = element.offsetParent;
  6689. }
  6690. return { x: xPosition, y: yPosition };
  6691. }
  6692. function fightvalmeld(e) {
  6693. if (e.target.value != "Kampfwerte melden") {
  6694. var position = getPosition(e.currentTarget);
  6695. document.getElementById("fvalrcvdef").parentNode.style.top=(position.y-490)+"px";
  6696. document.getElementById("fvalrcvdef").parentNode.style.left=(position.x-475)+"px";
  6697. document.getElementById("fvalrcvdef").style.visibility = "visible";
  6698. return;
  6699. }
  6700.  
  6701. var btnText = e.target.value;
  6702. var btnTitle = e.target.title;
  6703. e.target.value = "Bitte warten";
  6704. e.target.title = "Kampf- und Skillwerte werden ermittelt";
  6705. e.target.disabled = true;
  6706. GM_xmlhttpRequest({method: 'GET', url: TOWNBASE_URL + "dev/api/gang/" + m_owngangid + ".xml", onload: function(responseDetails) {
  6707. var content = responseDetails.responseText.split("<member_list>")[1];
  6708. var recv = PGu_getValue("fvalrecv", "0");
  6709. var id = recv.split(":");
  6710. if (content.indexOf("<id>"+id[0]+"</id>") == -1)
  6711. id[0] = 0;
  6712. var admname = content.split("<status>3")[0].split("<name>").pop().split("<")[0].trim();
  6713. if (id[0] == 0)
  6714. var name = admname;
  6715. else
  6716. var name = content.split("<id>"+id[0]+"<")[1].split("</name>")[0].split(">").pop().trim();
  6717.  
  6718. GM_xmlhttpRequest({method: 'GET', url: TOWNBASE_URL + "skills/", onload: function(responseDetails) {
  6719. var content = responseDetails.responseText.split('id="content"')[1];
  6720. var today = new Date();
  6721. var now = today.getTime();
  6722. var skills = content.split('class="box_top_small');
  6723. var skillArr = [];
  6724. var ATTskill = 0;
  6725. var DEFskill = 0;
  6726. skillArr.push("Hallo " + name + ",\nhier sind meine aktuellen Werte.");
  6727. skillArr.push("\nMein aktueller Kampfwert: " + fightVals);
  6728. skillArr.push("\nMeine Skills:");
  6729. var abschluss = "\nAbgeschlossen:\n";
  6730. for (var i = 1; i < skills.length; i++) {
  6731. var text = skills[i].split(">")[1].split("<")[0].trim();
  6732. var styleskill = skills[i].split('"style_skill"');
  6733. if (styleskill.length > 1) {
  6734. var skill = styleskill[1].split(">")[1].split("<")[0];
  6735. var stufe = styleskill[1].split(">")[2].split("<")[0].trim();
  6736. if (styleskill[2].indexOf("counter(") != -1) {
  6737. var seconds = Number(styleskill[2].split("counter(")[1].split(")")[0].trim());
  6738. today.setTime(seconds * 1000 + now);
  6739. if (Math.floor((now + seconds * 1000) / 86400000) > Math.floor(now / 86400000))
  6740. var ende = ("0" + today.getDate()).substr(-2) + "." +
  6741. ("0" + (today.getMonth() + 1)).substr(-2) + "." +
  6742. today.getFullYear().toString().substr(-2);
  6743. else
  6744. var ende = "Heute";
  6745. ende += ", " + ("0" + today.getHours()).substr(-2) + ":" +
  6746. ("0" + today.getMinutes()).substr(-2);
  6747. }
  6748. else
  6749. var ende = styleskill[2].split(">")[1].split("<")[0].trim();
  6750. skillArr.push(text + ": " + skill + " " + stufe + " Ende: " + ende);
  6751. }
  6752. }
  6753. var skAnf = 2;
  6754. if (skills.length > 1 || content.indexOf('class="cbox') != -1) {
  6755. if (skills.length < 2)
  6756. skAnf = 1;
  6757. skills = skills.pop().split('<table ');
  6758. }
  6759.  
  6760. for (var i = skAnf; i < skills.length; i++) {
  6761. var text = skills[i].split("<strong>")[1].split("<")[0].trim();
  6762. if (skills[i].indexOf('class="cbox') == -1) {
  6763. var trs = skills[i].split("<tr>");
  6764. if (trs.length < 3)
  6765. continue;
  6766. skillArr.push("\n" + text + ":");
  6767. for (var j = 2; j < trs.length; j++) {
  6768. var td = trs[j].split("<td");
  6769. var skill = td[1].split(">")[1].split("<")[0].trim();
  6770. var stufe = td[2].split(">")[1].split("<")[0].trim();
  6771. var ende = td[4].split("</div")[0].split(">").pop().trim();
  6772. skillArr.push(skill + " " + stufe + " Ende: " + ende);
  6773. }
  6774. }
  6775. else {
  6776. var stufe = skills[i].split("</tr>")[0].split("<td").pop().split("<")[0].split(">").pop().split("/")[0].trim();
  6777. skillArr.push(abschluss + text + ": " + stufe);
  6778. if (text == "Angriff")
  6779. ATTskill = Number(stufe.match(/\d*/)[0].trim());
  6780. else if (text == "Verteidigung")
  6781. DEFskill = Number(stufe.match(/\d*/)[0].trim());
  6782. abschluss = "";
  6783. }
  6784. }
  6785. if (skillArr.length == 3) {
  6786. skills = content.split('class="skill_block');
  6787. for (var i = 1; i < skills.length; i++) {
  6788. var text = skills[i].split("<h2>")[1].split("<")[0].trim();
  6789. var styleskill = skills[i].split('"style_skill"');
  6790. if (styleskill.length > 1) {
  6791. var skill = styleskill[1].split(">")[1].split("<")[0];
  6792. var stufe = styleskill[1].split(">")[2].split("<")[0].trim();
  6793. var ende = styleskill[2].split(">")[1].split("<")[0].trim();
  6794. skillArr.push(text + ": " + skill + " " + stufe + " Ende: " + ende);
  6795. }
  6796. else if (skills[i].indexOf("skill_progress_text") != -1) {
  6797. var stufe = skills[i].split("skill_progress_text")[1].split("<")[0].split(">").pop().trim().split(" ")[0].trim();
  6798. skillArr.push(abschluss + text + ": " + stufe);
  6799. if (text == "Angriff")
  6800. ATTskill = Number(stufe.match(/\d*/)[0].trim());
  6801. else if (text == "Verteidigung")
  6802. DEFskill = Number(stufe.match(/\d*/)[0].trim());
  6803. abschluss = "";
  6804. }
  6805. else {
  6806. skillArr.push("\n" + text + ":");
  6807. var trs = skills[i].split("<tr>");
  6808. for (var j = 1; j < trs.length; j++) {
  6809. var td = trs[j].split("<td");
  6810. var skill = td[1].split(">")[1].split("<")[0].trim();
  6811. var stufe = td[2].split(">")[1].split("<")[0].trim();
  6812. var ende = td[4].split("</div")[0].split(">").pop().trim();
  6813. skillArr.push(skill + " " + stufe + " Ende: " + ende);
  6814. }
  6815. }
  6816. }
  6817. }
  6818. GM_xmlhttpRequest({method:"GET", url: window.location.protocol + '//' + window.location.hostname + '/overview/', onload:function(responseDetails) {
  6819. var content = responseDetails.responseText;
  6820. pos = content.search("Angelegte Plunder");
  6821. if (pos <= 0) {
  6822. return;
  6823. }
  6824. var table = content.substr(pos).split("<table")[1].split("</table>")[0];
  6825. var tabs = table.split("<tr")[2].split("<td");
  6826. var pname = "";
  6827. var ATTval = 0;
  6828. var ATTprz = 1;
  6829. var DEFval = 0;
  6830. var DEFprz = 1;
  6831. if (tabs[1].indexOf("<strong") != -1) {
  6832. pname = tabs[1].split("</strong")[0].split('<strong')[1].split(">")[1];
  6833. var padv = tabs[1].split('class="padv');
  6834. if (padv.length > 1)
  6835. padv = padv[1].split('</ul')[0].split("<li>");
  6836. var ATT = "";
  6837. var DEF = "";
  6838. for (var i = 1; i < padv.length; i++)
  6839. if (padv[i].indexOf("ATT:") != -1)
  6840. ATT = padv[i].split("ATT:")[1].split("<")[0];
  6841. else if (padv[i].indexOf("DEF:") != -1)
  6842. DEF = padv[i].split("DEF:")[1].split("<")[0];
  6843. if (ATT != "") {
  6844. ATTval = Number(ATT.split("+")[0].trim());
  6845. if (ATT.indexOf("+") != -1)
  6846. ATTprz = Number(ATT.split("+")[1].split("%")[0].trim()) / 100 + 1;
  6847. }
  6848. if (DEF != "") {
  6849. DEFval = Number(DEF.split("+")[0].trim());
  6850. if (DEF.indexOf("+") != -1)
  6851. DEFprz = Number(DEF.split("+")[1].split("%")[0].trim()) / 100 + 1;
  6852. }
  6853. }
  6854. var tierclass = content.split('id="content"')[1].split('class="tieritem');
  6855. var ATTweap = 0;
  6856. var DEFhome = 0;
  6857. for (var i = 1; i < tierclass.length; i++) {
  6858. if (tierclass[i].indexOf("Deine Waffe") == -1)
  6859. continue;
  6860. ATTweap = parseInt(tierclass[i].split('class="double')[1].split("<li>")[2].split("</span")[0].split(">").pop().replace(/[\+\-\/]/g, "0"));
  6861. DEFhome = parseInt(tierclass[i].split('class="double')[2].split("<li>")[2].split("</span")[0].split(">").pop().replace(/[\+\-\/]/g, "0"));
  6862. }
  6863. GM_xmlhttpRequest({method:"GET", url: window.location.protocol + '//' + window.location.hostname + '/city/pet_store/', onload:function(responseDetails) {
  6864. var tierclass = responseDetails.responseText.split('id="content"')[1].split('class="tieritem');
  6865. var ATTbegl = 0;
  6866. var DEFbegl = 0;
  6867. for (var i = 1; i < tierclass.length; i++) {
  6868. if (tierclass[i].indexOf("Dein aktueller Begleiter") == -1)
  6869. continue;
  6870. var spans = tierclass[i].split("<tr")[3].split("<span");
  6871. ATTbegl = Number(spans[1].split("</span")[0].split(">").pop().replace("+", ""));
  6872. DEFbegl = Number(spans[2].split("</span")[0].split(">").pop().replace("+", ""));
  6873. }
  6874. GM_xmlhttpRequest({method: 'GET', url: TOWNBASE_URL + "gang/upgrades/", onload: function(responseDetails) {
  6875. var trs = responseDetails.responseText.split('id="content"')[1].split("</table")[0].split("<table").pop().split("<tr");
  6876. var ATTgang = -1;
  6877. var DEFgang = -1;
  6878. for (var i = 1; i < trs.length; i++) {
  6879. var tds = trs[i].split("<td");
  6880. if (tds[1].indexOf("Waffenkammer") != -1)
  6881. ATTgang = Number(tds[2].match(/\+\d*/)[0].split("+").pop().trim()) / 100 + 1;
  6882. else if (tds[1].indexOf("Bandenhaus") != -1)
  6883. DEFgang = Number(tds[2].match(/\+\d*/)[0].split("+").pop().trim()) / 100 + 1;
  6884. else if (ATTgang >= 0 && DEFgang >= 0)
  6885. break;
  6886. }
  6887.  
  6888. if (ATTgang < 0)
  6889. ATTgang = 1;
  6890. if (DEFgang < 0)
  6891. DEFgang = 1;
  6892.  
  6893. 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]);
  6894. skillArr.push("\nWaffe/Eigenheim: " + ATTweap + "/" + DEFhome);
  6895. if (ATTval + ATTprz + DEFval + DEFprz > 2)
  6896. skillArr.push("Plunder: " + ((ATTval + ATTprz > 1)?"ATT:" + (ATTval > 0?" " + ATTval:"") + (ATTprz > 1?" + " + (Math.floor((ATTprz-1)*100+0.1))+"%":"")+ " ":"")
  6897. + ((DEFval + DEFprz > 1)?"DEF:" + (DEFval > 0?" " + DEFval:"") + (DEFprz > 1?" + " + (Math.floor((DEFprz-1)*100+0.1))+"%":""):"") + " (" + pname + ")");
  6898. if (ATTbegl + DEFbegl > 0)
  6899. skillArr.push("Begleiter: " + ATTbegl + "/" + DEFbegl);
  6900. document.getElementById("fvalmeld").value = btnText;
  6901. document.getElementById("fvalmeld").title = btnTitle;
  6902. document.getElementById("fvalmeld").disabled = false;
  6903. if (!confirm("Soll dein Kampfwert " + fightval + " an " + name + " gesendet werden ?"))
  6904. return;
  6905. if (name == admname) {
  6906. var flist = PGu_getValue("FightIDList", "");
  6907. var aktflist = PGu_getValue("aktfightlist", 0);
  6908. var ftlist = "";
  6909. if (aktflist > 0)
  6910. ftlist = PGu_getValue("fightlist_" + aktflist, "").split("°")[0];
  6911. if (flist != "")
  6912. if (confirm("Soll die aktuelle Kampfliste mit gesendet werden (OK für Ja, Abbrechen für Nein) ?"))
  6913. skillArr.push("Meine Kampfliste" + (ftlist != ""?" (" + ftlist + ")":"") + ":\n" + flist);
  6914. }
  6915. GM_xmlhttpRequest({method: 'GET', url: TOWNBASE_URL + "messages/write/", onload: function(responseDetails) {
  6916. var inputs = responseDetails.responseText.split('id="content"')[1].split('id="form1"')[1].replace("textarea", "input").split("<input");
  6917. var vals = ["f_toname", name, "f_subject", "KW " + fightval, "f_text", skillArr.join("\n")];
  6918. var params = [];
  6919. for (var i = 0; i < inputs.length; i++) {
  6920. var pname = inputs[i].split('name="');
  6921. if (pname.length < 2)
  6922. continue;
  6923. pname = pname[1].split('"')[0];
  6924. var value = "";
  6925. for (var j = 0; j < vals.length; j+=2)
  6926. if (vals[j] == pname)
  6927. break;
  6928. if (j < vals.length)
  6929. value = vals[j+1];
  6930. else {
  6931. value = inputs[i].split('value="');
  6932. if (value.length > 1)
  6933. value = value[1].split('"')[0];
  6934. else {
  6935. continue;
  6936. }
  6937. }
  6938. params.push(pname);
  6939. params.push(value);
  6940. }
  6941. PostToHTTP(TOWNBASE_URL + "messages/write/send/", params, function() { alert("Nachricht an " + name + " wurde gesendet.") });
  6942. }});
  6943. }});
  6944. }});
  6945. }});
  6946. }});
  6947. }});
  6948. }
  6949.  
  6950. function exportVars(quiet) {
  6951. var vars = "Script§" + THISSCRIPTNAME;
  6952. var gm_vars = GM_listValues().sort();
  6953. var deleted = 0;
  6954. var count = 0;
  6955. for (var i = 0; i < gm_vars.length; i++) {
  6956. if (gm_vars.indexOf(gm_vars[i]) < i)
  6957. continue;
  6958. if (gm_vars[i] == "" || gm_vars[i].match(new RegExp(/[^\d]0$/))) {
  6959. GM_deleteValue(gm_vars[i]);
  6960. deleted++;
  6961. }
  6962. else if (GM_getValue(gm_vars[i]) == undefined) {
  6963. GM_deleteValue(gm_vars[i]);
  6964. deleted++;
  6965. }
  6966. else {
  6967. if (gm_vars[i].length > 50) {
  6968. if (!quiet)
  6969. var conf = confirm("Variable löschen: " + gm_vars[i]);
  6970. else
  6971. var conf = true;
  6972. if (conf) {
  6973. GM_deleteValue(gm_vars[i]);
  6974. deleted++;
  6975. continue;
  6976. }
  6977. }
  6978. var val = GM_getValue(gm_vars[i], "xyzundefinedzyx");
  6979. if (val == "xyzundefinedzyx" || val == null)
  6980. continue;
  6981. if (typeof(val) == "number")
  6982. val = "N" + val;
  6983. else if (typeof(val) == "boolean")
  6984. val = "B" + (val?1:0);
  6985. else if (typeof(val) == "string") {
  6986. if (val.indexOf("§") != -1) {
  6987. break;
  6988. }
  6989. val = "S" + val.replace(String.fromCharCode(0), "");
  6990. }
  6991. else {
  6992. break;
  6993. }
  6994. vars += "§" + gm_vars[i] + "§" + val;
  6995. count++;
  6996. }
  6997. }
  6998. if (i < gm_vars.length)
  6999. if (quiet)
  7000. GM_setClipboard("Fehler!!");
  7001. else
  7002. alert('Export wegen Fehler abgebrochen');
  7003. else {
  7004. vars += "§" + checksum(vars);
  7005. GM_setClipboard(vars);
  7006. if (!quiet)
  7007. if (deleted > 0)
  7008. alert (count + " Variablen in Zwischenablage exportiert, " + deleted + " Variablen gelöscht.");
  7009. else
  7010. alert (count + " Variablen in Zwischenablage exportiert");
  7011. }
  7012. return;
  7013. }
  7014.  
  7015. function CheckForExport(now, diff) {
  7016. // create and format actual date
  7017. var lastExport = GM_getValue("lastExport", "");
  7018. if (isNaN(lastExport))
  7019. lastExport = 0;
  7020. else
  7021. lastExport = Number(lastExport);
  7022.  
  7023. if (now >= lastExport + diff) {
  7024. GM_setValue("lastExport", String(now));
  7025. exportVars(true);
  7026. }
  7027. }
  7028. // ********************************************************************************************************************
  7029. // ********************************************************************************************************************
  7030. // ********************************************************************************************************************
  7031. // START PROGRAMM * START PROGRAMM * START PROGRAMM * START PROGRAMM * START PROGRAMM *START PROGRAMM *START PROGRAMM *
  7032. // ********************************************************************************************************************
  7033. // ********************************************************************************************************************
  7034. // ********************************************************************************************************************
  7035.  
  7036. var m_ownusername = "Mr.X";
  7037. var m_owngangid = -1;
  7038. var m_owngangname = "";
  7039. try {
  7040. var navtag = document.getElementById("tabnav");
  7041. var li = navtag.getElementsByTagName("ul")[0].getElementsByTagName("li");
  7042. m_owngangid = li[1].getElementsByTagName("a")[0].href.split("bande:")[1].split("/")[0];
  7043. } catch(err) {
  7044. }
  7045. if (document.getElementsByClassName('zleft profile-data').length > 0) {
  7046. var m_ownuserid = getOwnUserID();
  7047. if (document.getElementsByClassName('zleft profile-data')[0].getElementsByClassName("user_name").length > 0)
  7048. m_ownusername = document.getElementsByClassName('zleft profile-data')[0].getElementsByClassName("user_name")[0].innerHTML;
  7049. else
  7050. m_ownusername = document.getElementsByClassName('zleft profile-data')[0].getElementsByTagName("a")[0].getElementsByTagName("span")[0].innerHTML;
  7051. }
  7052.  
  7053. ByeByeGoogle();
  7054.  
  7055. // ***********************************************************************************************
  7056. // Auf eine neue Version des Skriptes prüfen
  7057. // ***********************************************************************************************
  7058. CheckForUpdate(120);
  7059.  
  7060. var today = new Date();
  7061. var now = Math.floor(today.getTime()/1000);
  7062. var day = today.getDay();
  7063. var hour = today.getHours();
  7064. if (expertMode)
  7065. if (GM_getValue("exportDays", "").split(",").indexOf(((day+6) % 7 + 1).toString()) != -1 &&
  7066. GM_getValue("exportTimes", "").split(",").indexOf(((hour+1) % 24).toString()) != -1 && today.getMinutes() >= 50)
  7067. CheckForExport(now, 1000);
  7068.  
  7069. var content = document.getElementsByTagName("body")[0].innerHTML;
  7070.  
  7071. if (location.toString().indexOf(".pennerzone.de") == -1) {
  7072. // Eigene Punktezahl auslesen
  7073. var myprof = document.getElementById("my-profile-new");
  7074. if (!myprof)
  7075. myprof = document.getElementById("my-profile");
  7076. var ownplace = Number(myprof.getElementsByTagName("div")[1].getElementsByTagName("span")[4].innerHTML);
  7077. var ownpoints = Number(document.getElementsByClassName("icon award")[0].getElementsByTagName("a")[0].innerHTML);
  7078.  
  7079. // Aus eigener Punktzahl Ober- und Untergrenze für Punktezahl der User errechnen, die man angreifen kann
  7080. var ownattmax = Math.floor(ownpoints * upperLimit);
  7081. var ownattmin = Math.floor(ownpoints * lowerLimit);
  7082.  
  7083. if (IsTimeToCheck(TOWNEXTENSION + "update" + m_ownuserid, 480) || THISSCRIPTVERSION != GM_getValue("scriptversion", "0")) {
  7084. GM_setValue("scriptversion", THISSCRIPTVERSION);
  7085. DelayedPost(0);
  7086. }
  7087. }
  7088.  
  7089. if (expertMode)
  7090. GM_registerMenuCommand(THISSCRIPTNAME + ": Zeit für Variablenexport festlegen", function (event) {
  7091. var days = prompt("Tage: ", GM_getValue("exportDays", "")).replace(/[^\d]/g, ",");
  7092. if (days == null)
  7093. return;
  7094. if (days == "")
  7095. GM_deleteValue("exportDays");
  7096. else {
  7097. var dayarr = days.split(",");
  7098. for (var i = 0; i < dayarr.length; i++)
  7099. if (isNaN(dayarr[i]) || Number(dayarr[i]) < 1 || Number(dayarr[i]) > 7) {
  7100. alert("Bitte nur Zahlen von 1 (Mo) bis 7 (So) eingeben!!");
  7101. return;
  7102. }
  7103. GM_setValue("exportDays", days);
  7104. }
  7105. var times = prompt("Zeiten: ", GM_getValue("exportTimes", "")).replace(/[^\d]/g, ",");
  7106. if (times == null)
  7107. rerurn;
  7108. if (times == "")
  7109. GM_deleteValue("exportTimes");
  7110. else {
  7111. var timarr = times.split(",");
  7112. for (var i = 0; i < timarr.length; i++)
  7113. if (isNaN(timarr[i]) || Number(timarr[i]) < 0 || Number(timarr[i]) > 23) {
  7114. alert("Bitte nur Zahlen von 0 bis 23 eingeben!!");
  7115. return;
  7116. }
  7117. GM_setValue("exportTimes", times);
  7118. }
  7119. });
  7120.  
  7121. GM_registerMenuCommand(THISSCRIPTNAME + ": alle Einstellungen exportieren", function (event) {
  7122. exportVars(false);
  7123. });
  7124.  
  7125. GM_registerMenuCommand(THISSCRIPTNAME + ": alle Einstellungen importieren", function (event) {
  7126. var vars = prompt("Eingabe: ");
  7127. var i = vars.lastIndexOf("§");
  7128. var chksum = vars.substr(i+1);
  7129. vars = vars.substr(0, i);
  7130. if (chksum != checksum(vars)) {
  7131. alert("Importstring ist fehlerhaft. Kein Import möglich.");
  7132. return;
  7133. }
  7134. var gmvars = vars.split("§");
  7135.  
  7136. if (gmvars[0] != "Script" || gmvars[1] != THISSCRIPTNAME) {
  7137. alert("Eingabe ungültig!!");
  7138. return;
  7139. }
  7140. var gm_vars = GM_listValues();
  7141. for (var i = 0; i < gm_vars.length; i++)
  7142. GM_deleteValue(gm_vars[i]);
  7143. var count = 0;
  7144. for (var i = 2; i < gmvars.length; i+=2) {
  7145. var val = gmvars[i+1];
  7146. if (val.substr(0, 1) == "N")
  7147. val = Number(val.substr(1));
  7148. else if (val.substr(0, 1) == "B")
  7149. val = val.substr(1) == "1";
  7150. else if (val.substr(0, 1) == "S")
  7151. val = val.substr(1);
  7152. else {
  7153. alert("Fehler bei " + gmvars[i] + ": " + val);
  7154. continue;
  7155. }
  7156. GM_setValue(gmvars[i], val);
  7157. count++;
  7158. }
  7159. alert(count + " Variablen importiert.");
  7160. return;
  7161. });
  7162.  
  7163. // ***********************************************************************************************
  7164. // Abrufen der DF-Liste von downfight.de
  7165. // ***********************************************************************************************
  7166. if (DFTownCode3 != "")
  7167. if (PGu_getValue("MarkDF", false))
  7168. updDFList();
  7169.  
  7170. var fid = PGu_getValue("watchlist", 0);
  7171. var watchlist = [];
  7172. if (fid != 0) {
  7173. var fightlist = PGu_getValue("fightlist_" + fid, "");
  7174. if (fightlist != "")
  7175. watchlist = fightlist.split("°")[1].split(";");
  7176. }
  7177.  
  7178. // ***********************************************************************************************
  7179. // Wenn die aktuelle Seite eine Bandenprofil-Seite ist
  7180. // ***********************************************************************************************
  7181. if (location.toString().indexOf(TOWN_URL+"profil/bande:") != -1) {
  7182. // Aktualisierung der Info-Icons auf dem Bandenprofil durchführen (wenn welche vorhanden sind)
  7183. HandleGangProfile(content);
  7184. // ***********************************************************************************************
  7185. // Wenn die aktuelle Seite eine Userprofilseite ist
  7186. // ***********************************************************************************************
  7187. } else if ((location.toString().indexOf(TOWN_URL+"profil/") != -1) && (location.toString().indexOf("/bande:") == -1)) {
  7188. // Info-Icons auf dem Profil einfügen
  7189. HandleProfile();
  7190. // ***********************************************************************************************
  7191. // Wenn die aktuelle Seite eine Kampfprofil-Seite ist
  7192. // ***********************************************************************************************
  7193. } else if (location.toString().indexOf(TOWN_URL+"fight/viewfight/") != -1) {
  7194. // ap();
  7195. // ***********************************************************************************************
  7196. // Wenn die aktuelle Seite eine Pennerzone-Seite ist
  7197. // ***********************************************************************************************
  7198. } else if (location.toString().indexOf(".pennerzone.de/highscore/") != -1) {
  7199. HandlePennerzone();
  7200. // ***********************************************************************************************
  7201. // wenn die aktuelle Seite die Übersichts- oder die Aktionenseite ist
  7202. // ***********************************************************************************************
  7203. } else if (location.toString().indexOf(TOWN_URL+"overview/") != -1 || location.toString().indexOf(TOWN_URL+"activities/") != -1) {
  7204. if (watchlist.length > 0 && IsTimeToCheck(TOWNEXTENSION+"watchlist", 10)) {
  7205. for (var i = watchlist.length - 1; i >= 0; i--)
  7206. if (watchlist[i] == "" || bl("fi", watchlist[i]) && watchlist.length > 9)
  7207. watchlist.splice(i, 1);
  7208.  
  7209. for (i = 0; i < watchlist.length; i++)
  7210. getUserData("#"+watchlist[i], function(userid, username, userpoints, gangid, gangname, regsince, money, userplace, history) { });
  7211. }
  7212. // ***********************************************************************************************
  7213. // sonst: Die aktuelle Seite ist keine Profilseite
  7214. // ***********************************************************************************************
  7215. } else {
  7216. // ***********************************************************************************************
  7217. // Abrufen des XML-Datensatzes für den aktuellen User
  7218. // ***********************************************************************************************
  7219. getUserData("#"+m_ownuserid, function(userid, username, userpoints, gangid, gangname, regsince, money, userplace, history) {
  7220. var inGang = (gangid != 'None')?1:0;
  7221. m_owngangid = (inGang == 1)?gangid:0;
  7222. m_owngangname = gangname;
  7223.  
  7224. // ***********************************************************************************************
  7225. // Wenn die aktive Kampfseite angezeigt wird
  7226. // ***********************************************************************************************
  7227. if (content.indexOf(TxtZiel[lang]) != -1 ) {
  7228.  
  7229. CheckFightValues(document.getElementById("content").innerHTML);
  7230. // ***********************************************************************************************
  7231. // Funktion ermittelt das DIV, in dem die Angriffsdetails stehen
  7232. // ***********************************************************************************************
  7233. function GetAttackDiv() {
  7234. var forms = document.getElementsByTagName("form");
  7235. for (var i = 0; i < forms.length; i++) {
  7236. if (!forms[i].outerHTML)
  7237. continue;
  7238. if (forms[i].outerHTML.indexOf("/fight/attack") != -1) {
  7239. var divs = forms[i].getElementsByTagName("div");
  7240. return divs[0];
  7241. }
  7242. else if (forms[i].outerHTML.indexOf("/fight/cancel") != -1)
  7243. return forms[i].parentNode;
  7244. }
  7245. }
  7246.  
  7247. var attacktable = document.getElementById("content").getElementsByTagName("table")[0];
  7248. var attackdiv = GetAttackDiv();
  7249. if (attackdiv) {
  7250. var attacklink = attackdiv.getElementsByTagName("a")[0];
  7251. var attackspan = attackdiv.getElementsByTagName("span")[0];
  7252. }
  7253.  
  7254. // Wenn aktuell ein Angriff läuft
  7255. if (document.getElementsByTagName("body")[0].innerHTML.indexOf(TxtRunAttack[lang]) != -1) {
  7256. // Name und UserID des Penners auslesen
  7257. var username = trimString(attacklink.innerHTML.split(">").pop());
  7258. var userid = attackspan.innerHTML.split('/id:')[1].split('/"')[0];
  7259.  
  7260. CheckPastFights(userid, username, 0);
  7261.  
  7262. // Info-Icons einfügen
  7263. attackspan.innerHTML = attackspan.innerHTML + '&nbsp' + GetIconInsertHTML(userid, username, "x");
  7264.  
  7265. // Grafik für Posten in SB einfügen
  7266. if (inGang)
  7267. attackspan.innerHTML = attackspan.innerHTML + '&nbsp;<img id="PostCurrentFightToSB" border="0" src="' + getIconAddr(ICON_SENDTOSB) + '" title="' + TxtPostTitle2[myLang].replace('%s', username) + '" height="14" width="14" style="cursor: pointer">';
  7268. getUserData("#"+userid, function(userid, username, userpoints, gangid, gangname, regsince, money, userplace, history) {
  7269. var td = document.getElementById("PostCurrentFightToSB");
  7270. if (td)
  7271. td.name = gangid + "|" + (gangid=='None'?'':gangname);
  7272. if (showHistory && history != "")
  7273. insertHistory(attackdiv.getElementsByTagName("a")[0], 0, history);
  7274. });
  7275.  
  7276. var additionalbr = '';
  7277. // sonst: Es läuft derzeit kein Angriff
  7278. } else {
  7279. var additionalbr = '<br />';
  7280. }
  7281.  
  7282. if (attackspan) {
  7283. var showFBlike = PG_getValue("showFBlike", true);
  7284. if (!showFBlike) {
  7285. showFBlike = IsTimeToCheck(TOWNEXTENSION+"showFBdate", 90*1440);
  7286. }
  7287. 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">&nbsp;&nbsp;' + attackspan.innerHTML;
  7288. // ***********************************************************************************************
  7289. // Pennerzone-Suchkonfigurationen einblenden
  7290. // ***********************************************************************************************
  7291. // Einfügen der Pennerzone-Suchzeile in die Angriffsbox
  7292. if (ZONEBASE_URL != "") {
  7293. attackdiv.innerHTML = attackdiv.innerHTML + additionalbr + '<br /><p id="PennerzoneP">' + BuildPennerzoneLinkString(ownattmin, ownattmax, PGu_getValue("PennerzoneDateFrom", "")) + '</p>';
  7294.  
  7295. // Handler für Datumseingabe einfügen
  7296. AddPennerzoneDateHandler();
  7297. }
  7298.  
  7299. if (additionalbr == "")
  7300. FightListHandler(attackspan.getElementsByTagName('img')[attackspan.getElementsByTagName('img').length-(inGang?2:1)]);
  7301. // Wenn der aktuelle Kampf in die SB gepostet werden können soll
  7302. if (document.getElementById("PostCurrentFightToSB") != null) {
  7303. // Handler für das Posten in SB mit Grafik assoziieren
  7304. PostToSBHandler(document.getElementById("PostCurrentFightToSB"), SBPOSTMODE_ACTIVE);
  7305. }
  7306. document.getElementById("LangSelect").addEventListener("click", function(event) {
  7307. if (event.shiftKey != 0) {
  7308. var showFBlike = PG_getValue("showFBlike", true);
  7309. PG_setValue("showFBlike", !showFBlike);
  7310. if (showFBlike)
  7311. PG_setValue("showFBdate", Number(new Date()).toString());
  7312. return;
  7313. }
  7314. myLang++;
  7315. if (myLang == flags.length)
  7316. myLang = 0;
  7317. var td = document.getElementById("LangSelect");
  7318. td.src = getIconAddr(flags[myLang]);
  7319. td.title = TxtLang[myLang];
  7320. PG_setValue("myLang", myLang); // Sprache speichern
  7321. }, false);
  7322. }
  7323. }
  7324.  
  7325. // ***********************************************************************************************
  7326. // Wenn die aktuelle Seite die Fightlog-Seite oder die Kampf-Sucheseite ist
  7327. // ***********************************************************************************************
  7328. if (location.toString().indexOf("/fightlog/") != -1) {
  7329. GM_xmlhttpRequest({method: 'GET', url: FIGHT_URL, onload: function(responseDetails) {
  7330. CheckFightValues(responseDetails.responseText);
  7331. }});
  7332. // Referenz auf die Tabelle mit den abgeschlossenen Kämpfen speichern
  7333. var firsttable = document.getElementById("content").getElementsByTagName("table")[1];
  7334.  
  7335. // ***********************************************************************************************
  7336. // Wenn die aktuelle Seite die Kampf-Suchseite ist
  7337. // ***********************************************************************************************
  7338. if (location.toString().indexOf("?q=") != -1) {
  7339. HandleSearchpage(firsttable, inGang);
  7340. // ***********************************************************************************************
  7341. // Wenn die aktuelle Seite die Fightlog-Seite ist
  7342. // ***********************************************************************************************
  7343. } else {
  7344. HandleFightlogpage(firsttable, inGang, 0, 0);
  7345. }
  7346. // ***********************************************************************************************
  7347. // sonst: ist es eine Highscore-Seite ?
  7348. // ***********************************************************************************************
  7349. } else if (document.getElementById("highscore")) {
  7350. // Referenz auf die Tabelle speichern
  7351. firsttable = document.getElementById("highscore").getElementsByTagName("table")[0];
  7352. // Tabelle neu formatieren und eine neue Spalte einfügen
  7353. ReformatHighscoreTable(firsttable);
  7354. // "Info"-Icon und -Link in die Tabelle schreiben
  7355. InsertInfoInHighscoreTable(firsttable, inGang, 0);
  7356.  
  7357. // Angreifbarkeit der Spieler (Punkte/36 Stunden) farblich kennzeichnen
  7358. InsertAttackableInHighscoreTable(firsttable);
  7359. // ***********************************************************************************************
  7360. // sonst: die aktuelle Seite ist NICHT die Fightlog-Seite, darf nicht die Bandenseite sein
  7361. // ***********************************************************************************************
  7362. } else if (location.toString().indexOf("/gang/") == -1) {
  7363. var submenu = document.getElementsByClassName('submenu')[0];
  7364. var lis = submenu.getElementsByTagName('li');
  7365. var btn = lis.length;
  7366. var center = lis[1].innerHTML.indexOf("<center") != -1;
  7367. for (var i = 0; i < tableIDs.length; i++) {
  7368. if (i > 0 && DFTownCode == "")
  7369. break;
  7370. btn = btn % 5 + 1;
  7371. submenu.innerHTML += '<li><a id=\"' + tableIDs[i] + '\" style=\"cursor:pointer\" class=\"btn'+btn+'\">'
  7372. + (center?'<center>':'')+'<span id=\"' + tableIDs[i] + '2\" >'+(i==0?TxtFightList[myLang]:tableNames[i-1]) +'</span>'+(center?'</center>':'')+'</a></li>';
  7373. }
  7374. // Referenz auf die erste Tabelle speichern
  7375. var tables = document.getElementById("content").getElementsByTagName("table");
  7376. var ft = getFightTableIndex(tables);
  7377. if (ft != 0) {
  7378. var div = tables[0].parentNode;
  7379. div.style.top = (parseInt(div.style.top) + i * 38 + 2) + "px";
  7380. div.style.left = (parseInt(div.style.left) + 15) + "px";
  7381. }
  7382. var firsttable = tables[ft];
  7383. var trs = firsttable.getElementsByTagName("tr");
  7384. var cnt = 0;
  7385. hasCaptcha = document.getElementById("captcha_img");
  7386. if (hasCaptcha)
  7387. hasCaptcha = hasCaptcha.getElementsByTagName("src").length > 0;
  7388. for (var i = 0; i < trs.length; i++) {
  7389. if (trs[i].innerHTML.indexOf('tiername') == -1)
  7390. continue;
  7391. cnt++;
  7392. if (cnt != 3)
  7393. continue;
  7394. if (inGang) {
  7395. var bbcode = "";
  7396. if (document.getElementById("content").getElementsByTagName("table")[1].getElementsByTagName("tr").length > 2) {
  7397. var text = trs[i].innerHTML.split('tiername">')[1].split('<')[0];
  7398. bbcode = text + '&nbsp;&nbsp; <input name="postVals" id="postVals" type="checkbox" onclick="document.getElementById(\'bbcode\').style.visibility=\'hidden\'"> &nbsp;' + TxtPostFight[myLang] + '&nbsp;&nbsp;<input type="button" value="BBCode" id="bbcodeanzeigen" title="' + TxtShowBBCode[myLang] + '"></form>&nbsp;<textarea rows="1" style="vertical-align:middle;height:15px;width:100px" name="bbcode" action="" type="text" id="bbcode" onclick="this.focus(); this.select();"></textarea>';
  7399. }
  7400. var recv = PGu_getValue("fvalrecv", "0");
  7401. var id = recv.split(":");
  7402. 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>';
  7403. if (bbcode != "")
  7404. bbcodeEinAus();
  7405. window.setTimeout(checkFightValBox, 500);
  7406. }
  7407. break;
  7408. }
  7409. // Referenz auf die Tabelle mit den abgeschlossenen Kämpfen speichern
  7410. ft++;
  7411. while (tables[ft].innerHTML.indexOf('</th>') != -1 || tables[ft].innerHTML.indexOf('showChart()') != -1)
  7412. ft++;
  7413. firsttable = tables[ft];
  7414.  
  7415. // Referenz auf die Tabelle mit den eintreffenden Kämpfen speichern
  7416. var secondtable = tables[ft+1];
  7417.  
  7418. // Tabelle mit den abgeschlossenen Kämpfen neu formatieren und eine neue Spalte einfügen
  7419. ReformatFirstTable(firsttable);
  7420.  
  7421. // "Info"-Icon und -Link in die Tabelle schreiben
  7422. InsertInfoInFirstTable(firsttable, inGang, 0, function() {
  7423.  
  7424. // Angreifbarkeit der Spieler (Punkte/36 Stunden) farblich kennzeichnen
  7425. InsertAttackableInFirstTable(firsttable);
  7426.  
  7427. // Array für Kampf-Infos initialisieren
  7428. var IncomingFights = [];
  7429.  
  7430. // Auslesen der Daten der einkommenden Kämpfe
  7431. ReadFightData(secondtable, IncomingFights);
  7432.  
  7433. if (IncomingFights.length > 0) {
  7434. // Eintreffende Kämpfe chronologisch sortieren (aufsteigend)
  7435. IncomingFights.sort(sortByTime);
  7436.  
  7437. // Tabelle mit den eintreffenden Kämpfen neu formatieren und eine neue Spalte einfügen
  7438. ReformatSecondTable(secondtable, inGang);
  7439.  
  7440. // Zurückschreiben der sortierten eintreffenden Kämpfe in die Tabelle
  7441. WriteFightData(secondtable, IncomingFights, inGang);
  7442. }
  7443.  
  7444. // Angreifbarkeit der Spieler (Punkte/36 Stunden) farblich kennzeichnen
  7445. InsertAttackableInFirstTable(secondtable, true, true);
  7446.  
  7447. // Schreiben der Anzahl eintreffender Kämpfe in die Zeilenüberschrift
  7448. WriteNrOfIncomingFights(content, tables[0]);
  7449. insertSBTable("PostDoneFightsToSB", m_owngangname);
  7450.  
  7451. function showTable(event) {
  7452. var id = event.target.id.substr(0,8);
  7453. for (var i = 0; i < tableIDs.length; i++)
  7454. if (id == tableIDs[i])
  7455. break;
  7456.  
  7457. if (i >= tableIDs.length)
  7458. return;
  7459.  
  7460. var tables = document.getElementById("content").getElementsByTagName("table");
  7461. var ft = getFightTableIndex(tables);
  7462. var table = tables[ft];
  7463. var trs = table.getElementsByTagName("tr");
  7464. for (var j = trs.length-1; j > 0; j--)
  7465. trs[j].parentNode.removeChild(trs[j]);
  7466.  
  7467. if (i == 0)
  7468. // ***********************************************************************************************
  7469. // Kampftabelle anzeigen
  7470. // ***********************************************************************************************
  7471. InsertFightTable(table, true);
  7472. else
  7473. // ***********************************************************************************************
  7474. // Downfight-Tabellen anzeigen
  7475. // ***********************************************************************************************
  7476. InsertDFTable(table, i - 1, true);
  7477. }
  7478.  
  7479. var ft = getFightTableIndex(tables);
  7480. var table = tables[ft];
  7481. for (var i = bl()||m?1:0; i < tableIDs.length; i++) {
  7482. if (i > 0 && DFTownCode == "")
  7483. break;
  7484. document.getElementById(tableIDs[i]).addEventListener("click", showTable, false);
  7485. // Wenn die letzte Einstellung der Checkbox "aktiv" war
  7486. if (PGu_getValue(tableIDs[i] + "OnLF", false)) {
  7487. if (i == 0) {
  7488. // ***********************************************************************************************
  7489. // Kampftabelle anzeigen
  7490. // ***********************************************************************************************
  7491. InsertFightTable(table, false);
  7492. }
  7493. else {
  7494. // ***********************************************************************************************
  7495. // Downfight-Tabelle anzeigen
  7496. // ***********************************************************************************************
  7497. InsertDFTable(table, i - 1, false);
  7498. }
  7499. }
  7500. }
  7501. });
  7502. }
  7503. else
  7504. colorNames();
  7505. });
  7506. }