· 6 years ago · Apr 01, 2020, 04:35 PM
1// ==UserScript==
2// @name Deffinfo neu
3// @author Boggler, Skype: boggler2306, Timmon zeile 548
4// @version 2.21
5// @description Zaehlt auf der Seite >Truppen-Verteidigung< die Unterstuetzungen jedes Spielers zusammen und bietet eine Funktion um diese zu exportieren und die Truppen spielerweise zurueckzuschicken, fasst auf der Seite >Truppen-Unterstuetzungen< die Truppen ausserhalb Doerfer- und Spielerweise zusammen (auch hier kann man die Infos exportieren und Spieler/Doerferweise Truppen abziehen) und zeigt auf den Seiten >Uebersicht-Truppen-Im Dorf<, >Versammlungsplatz-Truppen< und in der Dorfansicht an, wieviele Truppen im Dorf sind oder zum Dorf laufen. Auf der VP-Seite >Truppen< wird zusaetzlich die Entfernung zum Herkunftsdorf jeder Unterstuetzung eingefuegt und man kann die Doerfer danach sortieren.
6// @include https://de*.die-staemme.de/game.php*screen=settings*
7// @include https://de*.die-staemme.de/game.php*mode=units*
8// @include https://de*.die-staemme.de/game.php*view*screen=report*
9// @include https://de*.die-staemme.de/game.php*screen=overview
10// @include https://de*.die-staemme.de/game.php*screen=overview*t=*
11// @include https://de*.die-staemme.de/game.php*t=*screen=overview*
12// @exclude https://de*.die-staemme.de/game.php*mode=notify*
13// @license Creative Commons by-nc-sa
14// ==/UserScript==
15//Script registrieren
16var api = typeof unsafeWindow != 'undefined' ? unsafeWindow.ScriptAPI: window.ScriptAPI;
17api.register('170-Deffinfo', true, 'Boggler', 'Support-nur-ueber-Skype--boggler2306@trash-mail.com');
18
19// Storage-Klasse von Hypix
20var storage = new Storage("prefix", false);
21function Storage(prefix, forceGM) {
22 var gm = typeof(unsafeWindow) != "undefined" && navigator.userAgent.indexOf("Firefox") > -1
23 var win = gm ? unsafeWindow: window;
24 var ls = false;
25 var intGetValue;
26 var intSetValue;
27 var prefix = prefix;
28 try {
29 ls = typeof(win.localStorage) != "undefined";
30 } catch(e) {}
31 if (!ls && !gm)
32 throw ("Keine geeignete Speichermöglichgkeit gefunden");
33 if (forceGM && gm || !ls) {
34 if (gm) {
35 prefix = prefix + "_" + document.location.host.split('.')[0];
36 intSetValue = function(key, value) {
37 GM_setValue(prefix + "_" + key, value);
38 };
39 intGetValue = function(key, defaultValue) {
40 return GM_getValue(prefix + "_" + key, defaultValue);
41 }
42 this.deleteValue = function(key) {
43 GM_deleteValue(prefix + "_" + key);
44 }
45 this.listValues = function(re) {
46 var allkeys = GM_listValues();
47 var serverKeys = [];
48 var rePrefix = new RegExp("^" + prefix + "_(.*)$");
49 if (typeof(re) != "undefined")
50 var reKey = new RegExp(re);
51 for (var i = 0; i < allkeys.length; i++) {
52 var res = allkeys[i].match(rePrefix);
53 if (res) {
54 if (reKey) {
55 res = res[1].match(reKey);
56 if (res)
57 serverKeys.push(res);
58 } else
59 serverKeys.push(res[1]);
60 }
61 }
62 return serverKeys;
63 }
64 }
65 } else if (ls) {
66 intSetValue = function(key, value) {
67 localStorage.setItem(prefix + "_" + key, value);
68 };
69 intGetValue = function(key, defaultValue) {
70 var value = localStorage.getItem(prefix + "_" + key);
71 if (value)
72 return value;
73 else
74 return defaultValue;
75 };
76 this.deleteValue = function(key) {
77 localStorage.removeItem(prefix + "_" + key);
78 }
79 this.listValues = function(re) {
80 var keys = [];
81 var rePrefix = new RegExp("^" + prefix + "_(.*)$");
82 if (typeof(re) != "undefined")
83 var reKey = new RegExp(re);
84 for (var i = 0; i < win.localStorage.length; i++) {
85 var res = localStorage.key(i).match(rePrefix);
86 if (res) {
87 if (reKey) {
88 res = res[1].match(reKey);
89 if (res)
90 keys.push(res);
91 } else
92 keys.push(res[1]);
93 }
94 }
95 return keys;
96 }
97 }
98 this.clear = function(re) {
99 var keys = this.listValues(re);
100 for (var i = 0; i < keys.length; i++)
101 this.deleteValue(keys[i]);
102 }
103 this.setValue = function(key, value) {
104 switch (typeof(value)) {
105 case "object":
106 case "function":
107 intSetValue(key, "j" + JSON.stringify(value));
108 break;
109 case "number":
110 intSetValue(key, "n" + value);
111 break;
112 case "boolean":
113 intSetValue(key, "b" + (value ? 1: 0));
114 break;
115 case "string":
116 intSetValue(key, "s" + value);
117 break;
118 case "undefined":
119 intSetValue(key, "u");
120 break;
121 }
122 }
123 this.getValue = function(key, defaultValue) {
124 var str = intGetValue(key);
125 if (typeof(str) != "undefined") {
126 switch (str[0]) {
127 case "j":
128 return JSON.parse(str.substring(1));
129 case "n":
130 return parseFloat(str.substring(1));
131 case "b":
132 return str[1] == "1";
133 case "s":
134 return str.substring(1);
135 default:
136 this.deleteValue(key);
137 }
138 }
139 return defaultValue;
140 }
141 this.getString = function(key) {
142 return intGetValue(key);
143 }
144 this.setString = function(key, value) {
145 intSetValue(key, value);
146 }
147}
148/*
149 *
150 * Allgemeine Definitionen
151 *
152 */
153
154//Gibt bei gegebenen Truppen und gespeichertem Deffmuster die Deffanzahl zurueck
155function deffanzahl(sp, sw, ax, bo, spy, lk, bb, sk, ra, ka, pa, ag) {
156 var deffzahl = 0;
157
158 AllgZ = sp * deffallg[0] + sw * deffallg[1] + ax * deffallg[2] + bo * deffallg[3] + spy * deffallg[4] + lk * deffallg[5] + bb * deffallg[6] + sk * deffallg[7] + ra * deffallg[8] + ka * deffallg[9] + pa * deffallg[10] + ag * deffallg[11];
159 KavZ = sp * deffkav[0] + sw * deffkav[1] + ax * deffkav[2] + bo * deffkav[3] + spy * deffkav[4] + lk * deffkav[5] + bb * deffkav[6] + sk * deffkav[7] + ra * deffkav[8] + ka * deffkav[9] + pa * deffkav[10] + ag * deffkav[11];
160 BogZ = sp * deffbog[0] + sw * deffbog[1] + ax * deffbog[2] + bo * deffbog[3] + spy * deffbog[4] + lk * deffbog[5] + bb * deffbog[6] + sk * deffbog[7] + ra * deffbog[8] + ka * deffbog[9] + pa * deffbog[10] + ag * deffbog[11];
161
162 AllgZ = AllgZ / allgwert;
163 KavZ = KavZ / kavwert;
164 BogZ = BogZ / bogwert;
165 deffzahl = (bogen) ? AllgZ + KavZ + BogZ: AllgZ + KavZ;
166 deffzahl = (bogen) ? deffzahl / 3: deffzahl / 2;
167 deffzahl = deffzahl * 100;
168 deffzahl = Math.round(deffzahl);
169 deffzahl = deffzahl / 100;
170 return deffzahl;
171}
172
173//Funktionen zum Berechnen der Entfernung zwischen zwei Doerfern
174function hypot(x, y) {
175 return Math.sqrt(x * x + y * y) || 0;
176}
177function village_distance(x1, x2, y1, y2) {
178 var distance = Math.round(hypot(x1 - x2, y1 - y2) * 100);
179 var distance = distance / 100;
180 return distance;
181}
182
183//erzeugt ein DOM-Element und f�gt Attribute und Anzeigetext an
184function createElement(type, attributes, html) {
185 var node = document.createElement(type);
186 for (var attr in attributes)
187 if (attributes.hasOwnProperty(attr)) {
188 node.setAttribute(attr, attributes[attr]);
189 }
190 if (html != null) {
191 node.innerHTML = html;
192 }
193 return node;
194}
195
196//Allgemeine Infos ueber Spieler, Dorf und Welt auslesen
197var spielername = document.getElementsByTagName('html')[0].innerHTML.split('"name":"')[1].split('"')[0];
198var spielerid = document.getElementsByTagName('html')[0].innerHTML.split('"id":"')[1].split('"')[0];
199var welt = document.location.href.split('https://')[1].split('.')[0];
200var villageid = Number(document.location.href.split('village=')[1].split('&')[0]);
201/*var spielername = game_data.player.name;
202var spielerid = game_data.player.id;
203var welt = game_data.world;
204var villageid = game_data.village.id;
205alert(welt+spielername+spielerid+'__'+villageid);*/
206var table = document.getElementById('units_table');
207try {
208 var bogen = table.innerHTML.indexOf('archer') > 0;
209 var paladin = table.innerHTML.indexOf('knight') > 0;
210 storage.setValue('deffscript' + welt + '_bogen', bogen);
211 storage.setValue('deffscript' + welt + '_paladin', paladin);
212 var dorfzahl = Number(table.innerHTML.split('Dorf (')[1].split(')')[0]);
213} catch(e) {}
214
215//Deffwerte und BH-Plaetze aller Einheiten definieren
216var deffallg = new Array(15, 50, 10, 50, 2, 30, 40, 200, 20, 100, 250, 100)
217 var deffkav = new Array(45, 15, 5, 40, 1, 40, 30, 80, 50, 50, 400, 50)
218 var deffbog = new Array(20, 40, 10, 5, 2, 30, 50, 180, 20, 100, 150, 100)
219 var bhplaetze = new Array(1, 1, 1, 1, 2, 4, 5, 6, 5, 8, 10, 100);
220var bhplaetze1 = new Array(1, 1, 1, 2, 4, 6, 5, 8, 10, 100);
221
222//Falls nicht vorhanden, Standardwerte fuer das Deffmuster setzen
223if (bogen) {
224 var einedeff = new Array(6000, 6000, 0, 8001, 129, 0, 0, 0, 0, 50);
225 if (storage.getValue('deffscript' + welt + '_allgwert', 'nv') == 'nv')
226 storage.setValue('deffscript' + welt + '_allgwert', 795308);
227 if (storage.getValue('deffscript' + welt + '_kavwert', 'nv') == 'nv')
228 storage.setValue('deffscript' + welt + '_kavwert', 682669);
229 if (storage.getValue('deffscript' + welt + '_bogwert', 'nv') == 'nv')
230 storage.setValue('deffscript' + welt + '_bogwert', 405263);
231} else {
232 var einedeff = new Array(10000, 10000, 0, 100, 0, 0, 0, 50);
233 if (storage.getValue('deffscript' + welt + '_allgwert', 'nv') == 'nv')
234 storage.setValue('deffscript' + welt + '_allgwert', 655200);
235 if (storage.getValue('deffscript' + welt + '_kavwert', 'nv') == 'nv')
236 storage.setValue('deffscript' + welt + '_kavwert', 602600);
237 if (storage.getValue('deffscript' + welt + '_bogwert', 'nv') == 'nv')
238 storage.setValue('deffscript' + welt + '_bogwert', 605200);
239}
240for (i = 0; i < einedeff.length; i++) {
241 if (storage.getValue('deffscript' + welt + '_einedeff_' + i, 'nicht vorhanden') == 'nicht vorhanden')
242 storage.setValue('deffscript' + welt + '_einedeff_' + i, einedeff[i]);
243}
244
245//Gespeicherte Standardwerte auslesen
246var bogen = storage.getValue('deffscript' + welt + '_bogen', true);
247var paladin = storage.getValue('deffscript' + welt + '_paladin', true);
248var allgwert = storage.getValue('deffscript' + welt + '_allgwert', 795308);
249var kavwert = storage.getValue('deffscript' + welt + '_kavwert', 682669);
250var bogwert = storage.getValue('deffscript' + welt + '_bogwert', 405263);
251
252//Auslesen, auf welcher Seite man sich befindet
253var url = document.location.href;
254var mode;
255//Dorfansicht
256if (url.match(/screen=overview/g) != null && url.match(/screen=overview_villages/g) == null)
257 mode = 'overview';
258//Einstellungen
259if (url.match(/screen=settings/g) != null)
260 mode = 'settings';
261//Truppen-Verteidigung
262if (url.match(/mode=units/g) != null && url.match(/type=support_detail/g) != null)
263 mode = 'units&type=support_detail';
264//Truppen-Im Dorf
265if (url.match(/mode=units/g) != null && url.match(/type=there/g) != null)
266 mode = 'units&type=there';
267//Truppen-Unterstuetzungen
268if (url.match(/mode=units/g) != null && url.match(/type=away_detail/g) != null)
269 mode = 'units&type=away_detail';
270//Versammlungsplatz-Truppen
271if (url.match(/mode=units/g) != null && url.match(/screen=place/g) != null)
272 mode = 'units';
273
274switch (mode) {
275 /*
276 *
277 * Einstellungen
278 *
279 */
280 case 'settings':
281 //Speichert in die Felder eingegebene Werte, wird beim Start und wird bei jeder Aenderung aufgerufen
282 function changed() {
283 var bh = (bogen) ? bhplaetze: bhplaetze1;
284 var einedeffallg = 0;
285 var einedeffkav = 0;
286 var einedeffbog = 0;
287 var einedeffbh = 0;
288 for (i = 0; i < 14; i++) {
289 try {
290 einedeffallg = einedeffallg + Number(document.getElementById('trp' + i).value) * deffallg[i];
291 einedeffkav = einedeffkav + Number(document.getElementById('trp' + i).value) * deffkav[i];
292 einedeffbog = einedeffbog + Number(document.getElementById('trp' + i).value) * deffbog[i];
293 einedeffbh = einedeffbh + Number(document.getElementById('trp' + i).value) * bh[i];
294 storage.setValue('deffscript' + welt + '_einedeff_' + i, document.getElementById('trp' + i).value);
295 } catch(e) {}
296 }
297 document.getElementById('deffallg').value = einedeffallg;
298 document.getElementById('deffkav').value = einedeffkav;
299 try {
300 document.getElementById('deffbog').value = einedeffbog;
301 } catch(e) {}
302 document.getElementById('deffbh').value = einedeffbh;
303 storage.setValue('deffscript' + welt + '_allgwert', einedeffallg);
304 storage.setValue('deffscript' + welt + '_kavwert', einedeffkav);
305 storage.setValue('deffscript' + welt + '_bogwert', einedeffbog);
306
307 }
308 //Einheitentypen fuer Tabelle je nach Welttyp bestimmen
309 var units = new Array('spear', 'sword', 'axe', 'spy', 'light', 'heavy', 'ram', 'catapult');
310 if (bogen)
311 var units = new Array('spear', 'sword', 'axe', 'archer', 'spy', 'light', 'marcher', 'heavy', 'ram', 'catapult');
312
313 //Links fuer Einheitensymbole zusammenstellen
314 for (i = 0; i < units.length; i++) {
315 units[i] = image_base + '/unit/unit_' + units[i] + '.png';
316 }
317 units[units.length] = image_base + '/unit/Def.png';
318 units[units.length] = image_base + '/unit/Def_cav.png';
319 if (bogen)
320 units[units.length] = image_base + '/unit/Def_archer.png';
321
322 //div-Kontainer und Tabelle erzeugen
323 var settings = createElement('div', {
324 id: 'deffsettings'
325 });
326
327 var table = createElement('table', {
328 class: 'vis overview_table',
329 style: 'min-width:950px'
330 });
331
332 var thead = createElement('thead');
333 var tr = createElement('tr');
334
335 tr.appendChild(createElement('th', {
336 style: 'text-align:center'
337 }, 'Deffvorgabe'));
338 for (i = 0; i < units.length; i++) {
339 var th = createElement('th', {
340 style: 'text-align:center'
341 });
342 var img = createElement('img', {
343 src: units[i]
344 });
345 th.appendChild(img);
346 tr.appendChild(th);
347 }
348 tr.appendChild(createElement('th', {
349 style: 'text-align:center'
350 }, 'BH-Plätze'));
351 thead.appendChild(tr);
352 table.appendChild(thead);
353
354 //Eingabefelder + Inhalt einfuegen
355 var tr = createElement('tr', {});
356 tr.appendChild(createElement('td', {}, 'für eine Deff'));
357 var anzahl = (bogen) ? 10: 8;
358
359 for (i = 0; i < anzahl; i++) {
360 var td = createElement('td', {
361 style: 'text-align:center'
362 });
363 var input = createElement('input', {
364 size: '3',
365 type: 'text',
366 value: storage.getValue('deffscript' + welt + '_einedeff_' + i, '0'),
367 id: 'trp' + i,
368 name: 'einedeff'
369 });
370 input.addEventListener('keyup', changed, false);
371 td.appendChild(input);
372 tr.appendChild(td);
373
374 }
375
376 var td = createElement('td', {
377 style: 'text-align:center'
378 });
379 var input = createElement('input', {
380 size: '10',
381 type: 'text',
382 id: 'deffallg',
383 disabled: true
384 });
385 td.appendChild(input);
386 tr.appendChild(td);
387
388 var td = createElement('td', {
389 style: 'text-align:center'
390 });
391 var input = createElement('input', {
392 size: '10',
393 type: 'text',
394 id: 'deffkav',
395 disabled: true
396 });
397 td.appendChild(input);
398 tr.appendChild(td);
399 if (bogen) {
400 var td = createElement('td', {
401 style: 'text-align:center'
402 });
403 var input = createElement('input', {
404 size: '10',
405 type: 'text',
406 id: 'deffbog',
407 disabled: true
408 });
409 td.appendChild(input);
410 tr.appendChild(td);
411 }
412
413 var td = createElement('td', {
414 style: 'text-align:center'
415 });
416 var input = createElement('input', {
417 size: '5',
418 type: 'text',
419 id: 'deffbh',
420 disabled: true
421 });
422 td.appendChild(input);
423 tr.appendChild(td);
424
425 table.appendChild(tr);
426 settings.appendChild(createElement('br', {}));
427 var h3 = createElement('h3', {});
428
429 h3.appendChild(createElement('a', {
430 href: 'https://forum.die-staemme.de/showthread.php?169850'
431 }, 'Deffinfo'));
432
433 settings.appendChild(h3);
434 settings.appendChild(table);
435
436 document.getElementsByClassName('vis settings')[0].parentNode.appendChild(settings);
437
438 changed();
439
440 break;
441 /*
442 *
443 * Uebersicht->Truppen->Im Dorf
444 *
445 */
446 case 'units&type=there':
447
448 for (i = 1; i <= dorfzahl; i++) {
449 var bereich = document.getElementsByTagName('body')[0].innerHTML.split('<!-- troop data -->')[i].split('</tr>')[0];
450 var sp = Number(bereich.split('<td class="unit-')[1].split('">')[1].split("</td>")[0]);
451 var sw = Number(bereich.split('<td class="unit')[2].split('">')[1].split("</td>")[0]);
452 var ax = Number(bereich.split('<td class="unit')[3].split('">')[1].split("</td>")[0]);
453 if (bogen && paladin) {
454 var bo = Number(bereich.split('<td class="unit')[4].split('">')[1].split("</td>")[0]);
455 var spy = Number(bereich.split('<td class="unit')[5].split('">')[1].split("</td>")[0]);
456 var lk = Number(bereich.split('<td class="unit')[6].split('">')[1].split("</td>")[0]);
457 var bb = Number(bereich.split('<td class="unit')[7].split('">')[1].split("</td>")[0]);
458 var sk = Number(bereich.split('<td class="unit')[8].split('">')[1].split("</td>")[0]);
459 var ra = Number(bereich.split('<td class="unit')[9].split('">')[1].split("</td>")[0]);
460 var ka = Number(bereich.split('<td class="unit')[10].split('">')[1].split("</td>")[0]);
461 var pa = Number(bereich.split('<td class="unit')[11].split('">')[1].split("</td>")[0]);
462 var ag = Number(bereich.split('<td class="unit')[12].split('">')[1].split("</td>")[0]);
463 } else if (bogen && !paladin) {
464 var bo = Number(bereich.split('<td class="unit')[4].split('">')[1].split("</td>")[0]);
465 var spy = Number(bereich.split('<td class="unit')[5].split('">')[1].split("</td>")[0]);
466 var lk = Number(bereich.split('<td class="unit')[6].split('">')[1].split("</td>")[0]);
467 var bb = Number(bereich.split('<td class="unit')[7].split('">')[1].split("</td>")[0]);
468 var sk = Number(bereich.split('<td class="unit')[8].split('">')[1].split("</td>")[0]);
469 var ra = Number(bereich.split('<td class="unit')[9].split('">')[1].split("</td>")[0]);
470 var ka = Number(bereich.split('<td class="unit')[10].split('">')[1].split("</td>")[0]);
471 var pa = 0;
472 var ag = Number(bereich.split('<td class="unit')[11].split('">')[1].split("</td>")[0]);
473 } else if (!bogen && paladin) {
474 var bo = 0;
475 var spy = Number(bereich.split('<td class="unit')[4].split('">')[1].split("</td>")[0]);
476 var lk = Number(bereich.split('<td class="unit')[5].split('">')[1].split("</td>")[0]);
477 var bb = 0;
478 var sk = Number(bereich.split('<td class="unit')[6].split('">')[1].split("</td>")[0]);
479 var ra = Number(bereich.split('<td class="unit')[7].split('">')[1].split("</td>")[0]);
480 var ka = Number(bereich.split('<td class="unit')[8].split('">')[1].split("</td>")[0]);
481 var pa = Number(bereich.split('<td class="unit')[9].split('">')[1].split("</td>")[0]);
482 var ag = Number(bereich.split('<td class="unit')[10].split('">')[1].split("</td>")[0]);
483 } else {
484 var bo = 0;
485 var spy = Number(bereich.split('<td class="unit')[4].split('">')[1].split("</td>")[0]);
486 var lk = Number(bereich.split('<td class="unit')[5].split('">')[1].split("</td>")[0]);
487 var bb = 0;
488 var sk = Number(bereich.split('<td class="unit')[6].split('">')[1].split("</td>")[0]);
489 var ra = Number(bereich.split('<td class="unit')[7].split('">')[1].split("</td>")[0]);
490 var ka = Number(bereich.split('<td class="unit')[8].split('">')[1].split("</td>")[0]);
491 var pa = 0;
492 var ag = Number(bereich.split('<td class="unit')[9].split('">')[1].split("</td>")[0]);
493 }
494 var villageid = bereich.split('<td><a href="/game.php?village=')[1].split("&")[0];
495
496 document.getElementsByTagName('body')[0].innerHTML = document.getElementsByTagName('body')[0].innerHTML.replace('<a href="/game.php?village=' + villageid + '&screen=place&mode=units">Truppen</a>', '<a href="/game.php?village=' + villageid + '&screen=place&mode=units">Truppen (' + String(deffanzahl(sp, sw, ax, bo, spy, lk, bb, sk, ra, ka, pa, ag)) + ' Deffs)</a>');
497 }
498 break;
499 /*
500 *
501 * Uebersicht->Truppen->Unterstuetzungen
502 *
503 */
504 case 'units&type=away_detail':
505 //Vielen Dank an xXNo M3rcyXx, fuer das Einverstaendnis zur Verwendung des Scriptes >Liste der unterstuetzten Doerfer in der Truppenuebersicht< als Vorlage
506 function trim(str, chars) {
507 return ltrim(rtrim(str, chars), chars);
508 }
509
510 function ltrim(str, chars) {
511 chars = chars || "s";
512 return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
513 }
514
515 function rtrim(str, chars) {
516 chars = chars || "s";
517 return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
518 }
519
520 //Gibt den Index des Arrays zurueck, an dem sich der gesuchte Spieler befindet
521 function findPlayer(array, name) {
522 for (i = 0; i < array.length; i++) {
523 try {
524 if (array[i][0] == name) {
525 return i;
526 break;
527 }
528 } catch(e) {
529 return null;
530 }
531 }
532 }
533
534 var villages = new Array(0);
535 var villages1 = new Array();
536 var defence = new Array(0);
537 var links = new Array(0);
538 var players = new Array();
539 var gesamt = new Array();
540 var b = (bogen) ? 12: 10
541 for (a = 0; a <= b; a++) {
542 gesamt[a] = 0;
543 }
544 var villagesTable = document.getElementById('units_table');
545
546 //Liest Infos ueber gedeffte Doerfer ein
547 function summarize() {
548 villagesTable.deleteRow(0)
549 var rows = villagesTable.getElementsByTagName('tr');
550 for (var i = 1; i < rows.length - 1; i++) {
551 if (rows[i].lastChild.previousSibling.getElementsByTagName('a').length == 0) {
552 //Unterstuetztes Dorf
553 var village = rows[i].getElementsByTagName('span')[0].textContent;
554 var j = 0;
555 //Suche, ob das Dorf bereits in villages[] gespeichert ist
556 for (j = 0; j < villages.length; j++) {
557 if (villages[j] == village)
558 break;
559 }
560 try {
561 //Besitzer des Dorfes herausfinden und speichern
562 if (rows[i].getElementsByTagName('span')[0].getElementsByTagName('a')[1].innerHTML.length == 0) {
563 player = '<a href="' + rows[i].getElementsByTagName('span')[0].getElementsByTagName('a')[2].href + '">' + rows[i].getElementsByTagName('span')[0].getElementsByTagName('a')[2].innerHTML + '</a>';
564 rows[i].getElementsByTagName('span')[0].getElementsByTagName('input')[0].alt = rows[i].getElementsByTagName('span')[0].getElementsByTagName('a')[2].innerHTML;
565 } else {
566 player = '<a href="' + rows[i].getElementsByTagName('span')[0].getElementsByTagName('a')[1].href + '">' + rows[i].getElementsByTagName('span')[0].getElementsByTagName('a')[1].innerHTML + '</a>';
567 rows[i].getElementsByTagName('span')[0].getElementsByTagName('input')[0].alt = rows[i].getElementsByTagName('span')[0].getElementsByTagName('a')[1].innerHTML;
568 }
569 } catch(e) {
570 player = '<a href="/game.php?village=' + villageid + '&id=' + spielerid + '&screen=info_player">' + spielername + '</a>';
571 rows[i].getElementsByTagName('span')[0].getElementsByTagName('input')[0].alt = spielername;
572 }
573 //Index des Spielers in players[] definieren
574 var playernr = findPlayer(players, player);
575 //Wenn der Spieler noch nicht angelegt ist, das Array erzeugen
576 if (playernr == null) {
577 playernr = players.length;
578 players[playernr] = new Array();
579 players[playernr][0] = player;
580 for (var d = 0; d <= rows[0].getElementsByTagName('th').length - 3; d++) {
581 players[playernr][d + 1] = 0;
582 }
583 players[playernr]['anzahl'] = 0;
584 }
585 //Wenn das Dorf noch nicht in villages[] vorhanden ist, Dorf eintragen
586 if (j == villages.length) {
587 villages[j] = village;
588 villages1[j] = new Array();
589 villages1[j][j] = rows[i].getElementsByTagName('span')[0].innerHTML;
590 //Besitzername in Klartext zusammen mit dem Dorf speichern
591 try {
592 if (navigator.userAgent.indexOf('Firefox') > 0) {
593 var player1 = rows[i].getElementsByTagName('span')[0].getElementsByTagName('a')[1].innerHTML;
594 } else {
595 var player1 = rows[i].getElementsByTagName('span')[0].getElementsByTagName('a')[2].innerHTML;
596 }
597 } catch(e) {
598 var player1 = spielername;
599 }
600 villages1[j]['name'] = player1;
601 //Array fuer die Einheiten erstellen
602 defence[j] = new Array(0);
603 for (k = 0; k < rows[0].getElementsByTagName('th').length - 3; k++)
604 defence[j][k] = 0;
605 links[j] = rows[i].getElementsByTagName('a')[0];
606 //Anzahl an gedefften Doerfern je Spieler erhoehen
607 players[playernr][1] = players[playernr][1] + 1;
608 }
609 //Anzahl an gedefften Doerfern erhoehen
610 players[playernr]['anzahl'] = players[playernr]['anzahl'] + 1;
611
612 //Jede Einheit einer Unterstuertzung dem Dorfarray, Spielerarray und Gesamtarray hinzufuegen
613 cells = rows[i].getElementsByTagName('td');
614 gesamt[0] += 1;
615 for (var k = 1; k <= defence[j].length; k++) {
616 defence[j][k - 1] += parseInt(cells[k].textContent);
617 players[playernr][k + 1] += parseInt(cells[k].textContent);
618 gesamt[k] += parseInt(cells[k].textContent);
619 }
620
621 }
622 }
623 }
624
625 //Erzeugt die Tabelle und listet die einzelnen gedefften Doerfer auf
626 function display() {
627 //Einheitentabelle erstellen
628 var div = document.getElementById("paged_view_content");
629 var stat = createElement('table', {
630 id: 'Statistik',
631 style: 'width:100%'
632 });
633 var div2 = createElement('div', {
634 style: 'width:100%;display:none',
635 id: 'exportbereich',
636 rows: '10'
637 }, '<br><b>Tabelle in BB-Code (für Forum etc.):</b><br><textarea style="width:100%" id="Exportfeld" rows="10"></textarea>');
638
639 //Behebt den Fehler, dass nichts angezeigt wird, wenn man in einer einzelnen Gruppe Doerfer filtert (leere Eintraege ausblendet)
640 try {
641 div.insertBefore(stat, document.forms[document.forms.length - 2]);
642 div.insertBefore(div2, document.forms[document.forms.length - 2]);
643 } catch(e) {
644 div.insertBefore(stat, document.forms[document.forms.length - 1]);
645 div.insertBefore(div2, document.forms[document.forms.length - 1]);
646 }
647 //Einheiten je nach Welttyp
648 var units = new Array('spear', 'sword', 'axe', 'spy', 'light', 'heavy', 'ram', 'catapult', 'knight', 'snob');
649 if (bogen)
650 var units = new Array('spear', 'sword', 'axe', 'archer', 'spy', 'light', 'marcher', 'heavy', 'ram', 'catapult', 'knight', 'snob');
651 //Export-"Button"
652 var thead = createElement('thead', {});
653 var tr = createElement('tr', {});
654 var th = createElement('th', {
655 style: 'text-align:center',
656 colspan: '2'
657 }, 'Spieler [<a id="exportieren">Export</a>]');
658 tr.appendChild(th);
659 var th = createElement('th', {
660 style: 'text-align:center'
661 });
662 var img = createElement('img', {
663 src: image_base + '/command/support.png'
664 });
665 th.appendChild(img);
666 tr.appendChild(th);
667 var th = createElement('th', {
668 style: 'text-align:center'
669 });
670 var a = createElement('a', {
671 href: '/game.php?village=' + villageid + '&screen=settings'
672 }, 'Deffs');
673 th.appendChild(a);
674 tr.appendChild(th);
675 for (i = 0; i < units.length; i++) {
676 units[i] = image_base + '/unit/unit_' + units[i] + '.png';
677 }
678 for (i = 0; i < units.length; i++) {
679 var th = createElement('th', {
680 style: 'text-align:center'
681 });
682 var img = createElement('img', {
683 src: units[i]
684 });
685 th.appendChild(img);
686 tr.appendChild(th);
687 }
688 thead.appendChild(tr);
689
690 document.getElementById('Statistik').appendChild(thead);
691 //Statistiken ueber einzelne Spieler einfuegen
692 for (i = 0; i < players.length; i++) {
693 deffzahl = (bogen) ? deffanzahl(players[i][2], players[i][3], players[i][4], players[i][5], players[i][6], players[i][7], players[i][8], players[i][9], players[i][10], players[i][11], players[i][12], players[i][13]) : deffanzahl(players[i][2], players[i][3], players[i][5], 0, players[i][6], players[i][8], 0, players[i][9], players[i][10], players[i][11], players[i][12], players[i][13]);
694 var tr = createElement('tr', {});
695 var td = createElement('td', {
696 style: 'text-align:center'
697 }, '<input type="checkbox" name="indenstats" value="' + players[i][0].split('>')[1].split('<')[0] + '">');
698 tr.appendChild(td);
699 var td = createElement('td', {
700 style: 'text-align:center'
701 }, players[i][0]);
702 tr.appendChild(td);
703 var td = createElement('td', {
704 style: 'text-align:center'
705 }, players[i]['anzahl'] + ' in ' + players[i][1] + ' Dörfern');
706 tr.appendChild(td);
707 var td = createElement('td', {
708 style: 'text-align:center'
709 }, deffzahl);
710 tr.appendChild(td);
711 var b = (bogen) ? 13: 11;
712 for (a = 2; a <= b; a++) {
713
714 var td = createElement('td', {
715 style: 'text-align:center'
716 }, players[i][a])
717 tr.appendChild(td);
718
719 }
720 document.getElementById('Statistik').appendChild(tr);
721 }
722
723 //Gesamtwerte einfuegen
724 var tr = createElement('tr', {});
725 var th = createElement('th', {
726 style: 'text-align:center',
727 colspan: '2'
728 }, '<strong>Gesamt (' + players.length + ')</strong>')
729 tr.appendChild(th);
730 var th = createElement('th', {
731 style: 'text-align:center'
732 }, gesamt[0] + ' in ' + villages.length + ' Dörfern')
733 tr.appendChild(th);
734 if (bogen) {
735 var th = createElement('th', {
736 style: 'text-align:center'
737 }, deffanzahl(gesamt[1], gesamt[2], gesamt[3], gesamt[4], gesamt[5], gesamt[6], gesamt[7], gesamt[8], gesamt[9], gesamt[10], gesamt[11], gesamt[12]))
738 tr.appendChild(th);
739 } else {
740 var th = createElement('th', {
741 style: 'text-align:center'
742 }, deffanzahl(gesamt[1], gesamt[2], gesamt[3], 0, gesamt[4], gesamt[5], 0, gesamt[6], gesamt[7], gesamt[8], gesamt[9], gesamt[10]))
743 tr.appendChild(th);
744 }
745 var b = (bogen) ? 13: 11;
746 for (a = 1; a < b; a++) {
747
748 var th = createElement('th', {
749 style: 'text-align:center'
750 }, gesamt[a])
751 tr.appendChild(th);
752
753 }
754 document.getElementById('Statistik').appendChild(tr);
755
756 //Bei Klick auf den Exportieren-"Button"
757 document.getElementById('exportieren').addEventListener('click', function exporten() {
758 //Tabellenkopf
759 var text = '[table][**]Spieler[||]Unterstuetzungen[||]Deffs[||][unit]spear[/unit][||][unit]sword[/unit][||][unit]axe[/unit][||]';
760
761 if (bogen)
762 text += '[unit]archer[/unit][||]';
763 text += '[unit]spy[/unit][||][unit]light[/unit][||]';
764 if (bogen)
765 text += '[unit]marcher[/unit][||]';
766 text += '[unit]heavy[/unit][||][unit]ram[/unit][||][unit]catapult[/unit][||]';
767 if (paladin)
768 text += '[unit]knight[/unit][||]';
769 text += '[unit]snob[/unit][/**]';
770 //Spieler und unterstuetzte Einheiten
771 for (i = 0; i < players.length; i++) {
772 deffzahl = (bogen) ? deffanzahl(players[i][2], players[i][3], players[i][4], players[i][5], players[i][6], players[i][7], players[i][8], players[i][9], players[i][10], players[i][11], players[i][12], players[i][13]) : deffanzahl(players[i][2], players[i][3], players[i][5], 0, players[i][6], players[i][8], 0, players[i][9], players[i][10], players[i][11], players[i][12], players[i][13]);
773
774 var text1 = '[*][player]' + players[i][0].split('>')[1].split('<')[0] + '[/player][|]' + players[i]['anzahl'] + ' in ' + players[i][1] + ' Doerfern' + '[|]' + deffzahl;
775 var b = (bogen) ? 13: 11;
776 for (a = 2; a <= b; a++) {
777
778 text1 += '[|]' + String(players[i][a]);
779
780 }
781 text += text1 + '[/*]';
782 }
783 //Gesamte Unterstuetzung
784 deffzahl = (bogen) ? deffanzahl(gesamt[1], gesamt[2], gesamt[3], gesamt[4], gesamt[5], gesamt[6], gesamt[7], gesamt[8], gesamt[9], gesamt[10], gesamt[11], gesamt[12]) : deffanzahl(gesamt[1], gesamt[2], gesamt[3], 0, gesamt[4], gesamt[5], 0, gesamt[6], gesamt[7], gesamt[8], gesamt[9], gesamt[10]);
785 var text1 = '[**]Gesamt (' + players.length + ')[||]' + gesamt[0] + ' in ' + villages.length + ' Doerfern[||]' + deffzahl;
786 var b = (bogen) ? 13: 11;
787 for (a = 1; a < b; a++) {
788
789 text1 += '[||]' + gesamt[a];
790
791 }
792 //Einzelne gedeffte Doerfer mit Truppen
793 text += text1 + '[/**][/table]' + '\r\n\r\nGedeffte Doerfer:\r\n';
794 text += '[table][**]Dorf[||]Spieler[||][unit]spear[/unit][||][unit]sword[/unit][||][unit]axe[/unit][||]';
795
796 if (bogen)
797 text += '[unit]archer[/unit][||]';
798 text += '[unit]spy[/unit][||][unit]light[/unit][||]';
799 if (bogen)
800 text += '[unit]marcher[/unit][||]';
801 text += '[unit]heavy[/unit][||][unit]ram[/unit][||][unit]catapult[/unit][||]';
802 if (paladin)
803 text += '[unit]knight[/unit][||]';
804 text += '[unit]snob[/unit][||]Deffs[/**]';
805 for (var i = 0; i < villages.length; i++) {
806
807 var newCell = document.createElement('td');
808 if (villages1[i][i].split('<a')[1].split('(')[villages1[i][i].split('<a')[1].split('(').length - 1].split(')')[0].length == 0) {
809 koord = villages1[i][i].split('<a')[1].split('(')[villages1[i][i].split('<a')[1].split('(').length - 2].split(')')[0];
810 } else {
811 koord = villages1[i][i].split('<a')[1].split('(')[villages1[i][i].split('<a')[1].split('(').length - 1].split(')')[0];
812 }
813 text += '[*][coord]' + koord + '[/coord][|][player]' + villages1[i]['name'] + '[/player]';
814 for (var j = 0; j <= defence[i].length; j++) {
815 switch (j) {
816
817 case defence[i].length:
818
819 if (storage.getValue('deffscript' + welt + '_bogen', true) && storage.getValue('deffscript' + welt + '_paladin', true)) {
820
821 text += '[|]' + deffanzahl(defence[i][0], defence[i][1], defence[i][2], defence[i][3], defence[i][4], defence[i][5], defence[i][6], defence[i][7], defence[i][8], defence[i][9], defence[i][10], defence[i][11]);
822 } else if (storage.getValue('deffscript' + welt + '_bogen', true) && !storage.getValue('deffscript' + welt + '_paladin', true)) {
823 text += '[|]' + deffanzahl(defence[i][0], defence[i][1], defence[i][2], defence[i][3], defence[i][4], defence[i][5], defence[i][6], defence[i][7], defence[i][8], defence[i][9], 0, defence[i][10]);
824 } else if (!storage.getValue('deffscript' + welt + '_bogen', true) && storage.getValue('deffscript' + welt + '_paladin', true)) {
825 text += '[|]' + deffanzahl(defence[i][0], defence[i][1], defence[i][2], 0, defence[i][3], defence[i][4], 0, defence[i][5], defence[i][6], defence[i][7], defence[i][8], defence[i][9]);
826 } else {
827 text += '[|]' + deffanzahl(defence[i][0], defence[i][1], defence[i][2], 0, defence[i][3], defence[i][4], 0, defence[i][5], defence[i][6], defence[i][7], 0, defence[i][8]);
828 }
829
830 break;
831
832 default:
833 text += '[|]' + String(defence[i][j]);
834 break;
835 }
836 }
837 text += '[/*]';
838
839 }
840 text += '[/table]';
841
842 document.getElementById('exportbereich').style.display = '';
843 document.getElementById('Exportfeld').value = text;
844
845 }, false);
846
847 //Einzelne gedeffte Doerfer aufzaehlen
848 var newTable = createElement('table', {
849 class: 'vis',
850 style: 'min-width:950px',
851 id: 'einzeldoerfer'
852 });
853 var tables = document.getElementsByTagName('table');
854 var headerRow = document.getElementById('units_table').getElementsByTagName('tr')[0].cloneNode(true);
855 headerRow.id = 'headerRow';
856 newTable.appendChild(headerRow);
857 for (var i = 0; i < villages.length; i++) {
858 var newRow = document.createElement('tr');
859 var newCell = document.createElement('td');
860 var checkBox = createElement('input', {
861 type: 'checkbox',
862 id: villages[i],
863 });
864 checkBox.alt = villages1[i]['name'];
865 newCell.appendChild(checkBox);
866 newCell.innerHTML += "<a href=" + links[i] + ">" + villages[i] + "</a>";
867 newRow.appendChild(newCell);
868
869 //Truppen einer Einheit anzeigen
870 for (var j = 0; j <= defence[i].length; j++) {
871 switch (j) {
872 //Deffzahl
873 case defence[i].length:
874 var troopCell = document.createElement('td');
875 if (storage.getValue('deffscript' + welt + '_bogen', true) && storage.getValue('deffscript' + welt + '_paladin', true)) {
876 troopCell.innerHTML = deffanzahl(defence[i][0], defence[i][1], defence[i][2], defence[i][3], defence[i][4], defence[i][5], defence[i][6], defence[i][7], defence[i][8], defence[i][9], defence[i][10], defence[i][11]);
877 } else if (storage.getValue('deffscript' + welt + '_bogen', true) && !storage.getValue('deffscript' + welt + '_paladin', true)) {
878 troopCell.innerHTML = deffanzahl(defence[i][0], defence[i][1], defence[i][2], defence[i][3], defence[i][4], defence[i][5], defence[i][6], defence[i][7], defence[i][8], defence[i][9], 0, defence[i][10]);
879 } else if (!storage.getValue('deffscript' + welt + '_bogen', true) && storage.getValue('deffscript' + welt + '_paladin', true)) {
880 troopCell.innerHTML = deffanzahl(defence[i][0], defence[i][1], defence[i][2], 0, defence[i][3], defence[i][4], 0, defence[i][5], defence[i][6], defence[i][7], defence[i][8], defence[i][9]);
881 } else {
882 troopCell.innerHTML = deffanzahl(defence[i][0], defence[i][1], defence[i][2], 0, defence[i][3], defence[i][4], 0, defence[i][5], defence[i][6], defence[i][7], 0, defence[i][8]);
883 }
884 newRow.appendChild(troopCell);
885 break;
886 //Untertuetzung einer Einheit
887 default:
888 var troopCell = document.createElement('td');
889 if (defence[i][j] == 0)
890 troopCell.className = "hidden";
891 troopCell.innerHTML = defence[i][j];
892 newRow.appendChild(troopCell);
893 break;
894 }
895 }
896 newTable.appendChild(newRow);
897 }
898 //Beim Checken einer Checkbox, die passenden Doerfer und Unterstuetzungen auch checken
899 div.insertBefore(newTable, document.forms[document.forms.length - 2]);
900 var eventname = (navigator.userAgent.indexOf('Firefox') > 0) ? 'mouseup': 'click';
901 window.addEventListener(eventname, function(event) {
902 if (event.target.type == "checkbox") {
903 //Beim Checken einer Checkbox aus der Doerferliste
904 var rows = document.getElementsByTagName('tr');
905 for (var i = 1; i < rows.length - 1; i++) {
906 try {
907 if ((rows[i].getElementsByTagName("td")[rows[i].getElementsByTagName('td').length - 1].textContent != "Wojska") && trim(rows[i].getElementsByTagName('span')[0].textContent) == event.target.id || rows[i].getElementsByTagName('span')[0].innerHTML.split('value="')[1].split('"')[0] == event.target.value && event.target.name == 'indenstats') {
908 rows[i].getElementsByTagName("input")[0].checked = event.target.checked;
909 }
910 } catch(e) {}
911 }
912 //Beim Checken einer Checkbox aus der Spielertabelle
913 var boxes = document.getElementById('einzeldoerfer').getElementsByTagName('input');
914 if (event.target.name == 'indenstats') {
915 for (i = 0; i < boxes.length; i++) {
916 if (boxes[i].alt == event.target.value) {
917 boxes[i].checked = event.target.checked;
918 }
919 }
920 }
921 }
922 }, true);
923 }
924
925 summarize();
926 display();
927
928 //Hochkopierter Button, um Truppen zurueckzuziehen
929 document.getElementById('headerRow').removeChild(document.getElementById('headerRow').getElementsByTagName('th')[1]);
930 document.getElementById('headerRow').innerHTML = document.getElementById('headerRow').innerHTML.replace('Aktion', '<a href="/game.php?village=' + villageid + '&screen=settings">Deffs</a>'); (function() {
931 var button = document.getElementsByName("submit_units_back")[0];
932 var table = document.getElementById("units_table");
933 var newButton = createElement('input', {
934 type: 'submit',
935 value: 'Zurueckziehen'
936 });
937 table.childNodes[1].childNodes[1].childNodes[1].appendChild(newButton);
938 newButton.addEventListener("click", function() {
939 button.click();
940 }, false);
941 })();
942
943 break;
944 /*
945 *
946 * Uebersicht->Truppen->Verteidigung
947 *
948 */
949 case 'units&type=support_detail':
950
951 //Infos auslesen & Arrays erzeugen
952 var spieler = new Array();
953 var gesamt = new Array();
954 var spielernr = new Array();
955 spielernr[0] = new Array();
956 spielernr[1] = new Array();
957
958 //Liest die Unterstuetzungstruppen aus und schreibt Werte in die Arrays
959 function zusammenrechnen(i, row) {
960 //a oder b Zeile
961 var rownr = (row == 'row_a') ? 0: 1;
962 //Name des Unterstuetzenden Spielers
963 try {
964 if(navigator.userAgent.indexOf('Firefox') < 0){
965 var name = '<a href="' + table.getElementsByClassName(row)[i].getElementsByTagName('a')[2].href + '">' + table.getElementsByClassName(row)[i].getElementsByTagName('a')[2].innerHTML + '</a>';
966 var nameklartext = table.getElementsByClassName(row)[i].getElementsByTagName('a')[2].innerHTML;
967 }else{
968 var name = '<a href="' + table.getElementsByClassName(row)[i].getElementsByTagName('a')[1].href + '">' + table.getElementsByClassName(row)[i].getElementsByTagName('a')[1].innerHTML + '</a>';
969 var nameklartext = table.getElementsByClassName(row)[i].getElementsByTagName('a')[1].innerHTML;
970
971 }
972
973 } catch(e) {
974 name = '<a href="/game.php?screen=info_player&id=' + spielerid + '">' + spielername + '</a>';
975 nameklartext = spielername;
976 }
977 //Prueft ob und an welcher Stelle der Spieler im Array gespeichert ist bzw schreibt ihn rein
978 for (a = 0; a <= spieler.length; a++) {
979 switch (a) {
980 case spieler.length:
981 if (spielernr[rownr][i] == null) {
982 spieler[a] = new Array();
983 spieler[a][0] = name;
984 spielernr[rownr][i] = a;
985 }
986 break;
987
988 default:
989 if (spieler[a][0] == name && spielernr[rownr][i] == null) {
990 spielernr[rownr][i] = a;
991 }
992 break;
993
994 }
995
996 }
997 spieler[spielernr[rownr][i]][42] = nameklartext;
998 table.getElementsByClassName(row)[i].getElementsByTagName('input')[0].src = nameklartext;
999
1000 //Truppen auslesen, in Spieler- und Gesamtarray speichern
1001 var b = (bogen) ? 13: 11;
1002 for (zelle = 2; zelle <= b; zelle++) {
1003
1004 try {
1005 spieler[spielernr[rownr][i]][zelle] = (spieler[spielernr[rownr][i]][zelle] == null) ? Number(table.getElementsByClassName(row)[i].getElementsByTagName('td')[zelle - 1].innerHTML) : Number(spieler[spielernr[rownr][i]][zelle]) + Number(table.getElementsByClassName(row)[i].getElementsByTagName('td')[zelle - 1].innerHTML);
1006 gesamt[zelle] = (gesamt[zelle] == null) ? Number(table.getElementsByClassName(row)[i].getElementsByTagName('td')[zelle - 1].innerHTML) : gesamt[zelle] + Number(table.getElementsByClassName(row)[i].getElementsByTagName('td')[zelle - 1].innerHTML);
1007 } catch(e) {}
1008
1009 }
1010
1011 //Unterstuetzungszahl erhoehen
1012 spieler[spielernr[rownr][i]][1] = (spieler[spielernr[rownr][i]][1] == null) ? 1: spieler[spielernr[rownr][i]][1] + 1;
1013 gesamt[1] = (gesamt[1] == null) ? 1: gesamt[1] + 1;
1014 }
1015
1016 //Funktion fuer a- und b-Zeilen ausfuehren
1017 for (i = 0; i < table.getElementsByClassName('row_a').length; i++) {
1018 zusammenrechnen(i, 'row_a');
1019 }
1020 for (i = 0; i < table.getElementsByClassName('row_b').length; i++) {
1021 zusammenrechnen(i, 'row_b');
1022 }
1023
1024 //Zaehlen, in wievielen Doerfern Unterstuetzungen stehen
1025 var gedefftedoerfer = 0;
1026 for (i = 0; i < document.getElementById('units_table').getElementsByClassName('row_a').length; i++) {
1027 if (document.getElementById('units_table').getElementsByClassName('row_a')[i].previousSibling.previousSibling.className == ' units_away') {
1028 gedefftedoerfer++;
1029 }
1030 }
1031 for (i = 0; i < document.getElementById('units_table').getElementsByClassName('row_b').length; i++) {
1032 if (document.getElementById('units_table').getElementsByClassName('row_b')[i].previousSibling.previousSibling.className == ' units_away') {
1033 gedefftedoerfer++;
1034 }
1035 }
1036
1037 //Tabelle erzeugen
1038 var div = document.getElementById("paged_view_content");
1039 var stat = createElement('table', {
1040 id: 'Statistik',
1041 style: 'width:100%'
1042 });
1043 var div2 = createElement('div', {
1044 style: 'width:100%;display:none',
1045 id: 'exportbereich',
1046 rows: '10'
1047 }, '<br><b>Tabelle in BB-Code (für Forum etc.):</b><br><textarea style="width:100%" id="Exportfeld" rows="10"></textarea>');
1048 //Behebt den Fehler, dass nichts angezeigt wird, wenn man in einer einzelnen Gruppe Doerfer filtert (leere Eintraege ausblendet)
1049 try {
1050 div.insertBefore(stat, document.forms[document.forms.length - 2]);
1051 div.insertBefore(div2, document.forms[document.forms.length - 2]);
1052 } catch(e) {
1053 div.insertBefore(stat, document.forms[document.forms.length - 1]);
1054 div.insertBefore(div2, document.forms[document.forms.length - 1]);
1055 }
1056 //Einheiten je nach Welttyp
1057 var units = new Array('spear', 'sword', 'axe', 'spy', 'light', 'heavy', 'ram', 'catapult', 'knight', 'snob');
1058 if (bogen)
1059 var units = new Array('spear', 'sword', 'axe', 'archer', 'spy', 'light', 'marcher', 'heavy', 'ram', 'catapult', 'knight', 'snob');
1060
1061 var thead = createElement('thead', {});
1062 var tr = createElement('tr', {});
1063 var th = createElement('th', {
1064 style: 'text-align:center',
1065 colspan: '2'
1066 }, 'Spieler [<a id="exportieren">Export</a>]');
1067 tr.appendChild(th);
1068 var th = createElement('th', {
1069 style: 'text-align:center'
1070 });
1071 var img = createElement('img', {
1072 src: image_base + '/command/support.png'
1073 });
1074 th.appendChild(img);
1075 tr.appendChild(th);
1076 var th = createElement('th', {
1077 style: 'text-align:center'
1078 });
1079 var a = createElement('a', {
1080 href: '/game.php?village=' + villageid + '&screen=settings'
1081 }, 'Deffs');
1082 th.appendChild(a);
1083 tr.appendChild(th);
1084 for (i = 0; i < units.length; i++) {
1085 units[i] = image_base + '/unit/unit_' + units[i] + '.png';
1086 }
1087 for (i = 0; i < units.length; i++) {
1088 var th = createElement('th', {
1089 style: 'text-align:center'
1090 });
1091 var img = createElement('img', {
1092 src: units[i]
1093 });
1094 th.appendChild(img);
1095 tr.appendChild(th);
1096 }
1097 thead.appendChild(tr);
1098
1099 document.getElementById('Statistik').appendChild(thead);
1100 //Statistiken ueber einzelne Spieler einfuegen
1101 for (i = 0; i < spieler.length; i++) {
1102 deffzahl = (bogen) ? deffanzahl(spieler[i][2], spieler[i][3], spieler[i][4], spieler[i][5], spieler[i][6], spieler[i][7], spieler[i][8], spieler[i][9], spieler[i][10], spieler[i][11], spieler[i][12], spieler[i][13]) : deffanzahl(spieler[i][2], spieler[i][3], spieler[i][4], 0, spieler[i][5], spieler[i][6], 0, spieler[i][7], spieler[i][8], spieler[i][9], spieler[i][10], spieler[i][11]);
1103 var tr = createElement('tr', {});
1104 var td = createElement('td', {
1105 style: 'text-align:center'
1106 }, '<input type="checkbox" name="indenstats" alt="' + spieler[i][42] + '">');
1107 tr.appendChild(td);
1108
1109 var td = createElement('td', {
1110 style: 'text-align:center'
1111 }, spieler[i][0])
1112 tr.appendChild(td);
1113 var td = createElement('td', {
1114 style: 'text-align:center'
1115 }, spieler[i][1])
1116 tr.appendChild(td);
1117 var td = createElement('td', {
1118 style: 'text-align:center'
1119 }, deffzahl)
1120 tr.appendChild(td);
1121 var b = (bogen) ? 13: 11;
1122 for (a = 2; a <= b; a++) {
1123
1124 var td = createElement('td', {
1125 style: 'text-align:center'
1126 }, spieler[i][a])
1127 tr.appendChild(td);
1128
1129 }
1130 document.getElementById('Statistik').appendChild(tr);
1131 }
1132
1133 //Gesamtwerte einfuegen
1134 var tr = createElement('tr', {});
1135 var th = createElement('th', {
1136 style: 'text-align:center',
1137 colspan: '2'
1138 }, '<strong>Gesamt (' + spieler.length + ')</strong>')
1139 tr.appendChild(th);
1140 var gedefftedoerfer = (navigator.userAgent.indexOf('Firefox') > 0) ? gedefftedoerfer + 1: gedefftedoerfer
1141 var th = createElement('th', {
1142 style: 'text-align:center'
1143 }, gesamt[1] + ' in ' + gedefftedoerfer + ' Dörfern')
1144 tr.appendChild(th);
1145 if (bogen) {
1146 var th = createElement('th', {
1147 style: 'text-align:center'
1148 }, deffanzahl(gesamt[2], gesamt[3], gesamt[4], gesamt[5], gesamt[6], gesamt[7], gesamt[8], gesamt[9], gesamt[10], gesamt[11], gesamt[12], gesamt[13]))
1149 tr.appendChild(th);
1150 } else {
1151 var th = createElement('th', {
1152 style: 'text-align:center'
1153 }, deffanzahl(gesamt[2], gesamt[3], gesamt[4], 0, gesamt[5], gesamt[6], 0, gesamt[7], gesamt[8], gesamt[9], gesamt[10], gesamt[11]))
1154 tr.appendChild(th);
1155 }
1156 var b = (bogen) ? 13: 11;
1157 for (a = 2; a <= b; a++) {
1158
1159 var th = createElement('th', {
1160 style: 'text-align:center'
1161 }, gesamt[a])
1162 tr.appendChild(th);
1163
1164 }
1165 document.getElementById('Statistik').appendChild(tr);
1166
1167 //Beim Klick auf den Export-"Button"
1168 document.getElementById('exportieren').addEventListener('click', function exporten() {
1169 //Tabellenkopf
1170 var text = '[table][**]Spieler[||]Verteidigung[||]Deffs[||][unit]spear[/unit][||][unit]sword[/unit][||][unit]axe[/unit][||]';
1171 if (bogen)
1172 text += '[unit]archer[/unit][||]';
1173 text += '[unit]spy[/unit][||][unit]light[/unit][||]';
1174 if (bogen)
1175 text += '[unit]marcher[/unit][||]';
1176 text += '[unit]heavy[/unit][||][unit]ram[/unit][||][unit]catapult[/unit][||]';
1177 if (paladin)
1178 text += '[unit]knight[/unit][||]';
1179 text += '[unit]snob[/unit][/**]';
1180 //Pro Spieler den Namen, die unterstuetzten Truppen, Deffzahlen etc einfuegen
1181 for (i = 0; i < spieler.length; i++) {
1182 deffzahl = (bogen) ? deffanzahl(spieler[i][2], spieler[i][3], spieler[i][4], spieler[i][5], spieler[i][6], spieler[i][7], spieler[i][8], spieler[i][9], spieler[i][10], spieler[i][11], spieler[i][12], spieler[i][13]) : deffanzahl(spieler[i][2], spieler[i][3], spieler[i][4], 0, spieler[i][5], spieler[i][6], 0, spieler[i][7], spieler[i][8], spieler[i][9], spieler[i][10], spieler[i][11]);
1183
1184 var text1 = '[*][player]' + spieler[i][0].split('>')[1].split('<')[0] + '[/player][|]' + spieler[i][1] + '[|]' + deffzahl;
1185 var b = (bogen) ? 13: 11;
1186 for (a = 2; a <= b; a++) {
1187
1188 text1 += '[|]' + spieler[i][a];
1189
1190 }
1191 text += text1 + '[/*]';
1192 }
1193 //Gesamtdeffzahl, Unterstuetzungen etc. einfuegen
1194 deffzahl = (bogen) ? deffanzahl(gesamt[2], gesamt[3], gesamt[4], gesamt[5], gesamt[6], gesamt[7], gesamt[8], gesamt[9], gesamt[10], gesamt[11], gesamt[12], gesamt[13]) : deffanzahl(gesamt[2], gesamt[3], gesamt[4], 0, gesamt[5], gesamt[6], 0, gesamt[7], gesamt[8], gesamt[9], gesamt[10], gesamt[11]);
1195 var text1 = '[**]Gesamt (' + spieler.length + ')[||]' + gesamt[1] + ' in ' + gedefftedoerfer + ' Doerfern[||]' + deffzahl;
1196 var b = (bogen) ? 13: 11;
1197 for (a = 2; a <= b; a++) {
1198
1199 text1 += '[||]' + gesamt[a];
1200
1201 }
1202
1203 text += text1 + '[/**][/table]';
1204 document.getElementById('exportbereich').style.display = '';
1205 document.getElementById('Exportfeld').value = text;
1206
1207 }, false);
1208
1209 //Beim Checken einer Checkbox die zugehoerigen Checkboxen in den anderen Bereichen auch anhaken
1210 var eventname = (navigator.userAgent.indexOf('Firefox') > 0) ? 'mouseup': 'click';
1211 window.addEventListener(eventname, function(event) {
1212 if (event.target.type == "checkbox") {
1213 var rows = document.getElementById('units_table').getElementsByTagName('tr');
1214 for (var i = 1; i < rows.length - 1; i++) {
1215 try {
1216 if (rows[i].getElementsByTagName('input')[0].src.split('/')[3] == event.target.alt && event.target.name == 'indenstats') {
1217 rows[i].getElementsByTagName('input')[0].checked = event.target.checked;
1218 }
1219 } catch(e) {}
1220 }
1221 }
1222 }, true);
1223
1224 break;
1225 /*
1226 *
1227 * Versammlungsplatz->Truppen
1228 *
1229 */
1230 case 'units':
1231 var table = document.getElementById('units_home');
1232 var bereiche = new Array();
1233 bereiche[0] = new Array();
1234 bereiche[1] = new Array();
1235 bereiche[2] = new Array();
1236 var villages = new Array();
1237
1238 //Deffzahlen auslesen
1239 function auslesen(a) {
1240 b = bereiche[a];
1241 if (bogen && paladin) {
1242 for (i = 1; i < 13; i++) {
1243 b[i] = Number(b[0][i].innerHTML);
1244 }
1245 return deffanzahl(b[1], b[2], b[3], b[4], b[5], b[6], b[7], b[8], b[9], b[10], b[11], b[12]);
1246 } else if (bogen && !paladin) {
1247 for (i = 1; i < 12; i++) {
1248 b[i] = Number(b[0][i].innerHTML);
1249 }
1250 return deffanzahl(b[1], b[2], b[3], b[4], b[5], b[6], b[7], b[8], b[9], b[10], 0, b[11]);
1251 } else if (!bogen && paladin) {
1252 for (i = 1; i < 11; i++) {
1253 b[i] = Number(b[0][i].innerHTML);
1254 }
1255 return deffanzahl(b[1], b[2], b[3], 0, b[4], b[5], 0, b[6], b[7], b[8], b[9], b[10]);
1256 } else if (!bogen && !paladin) {
1257 for (i = 1; i < 10; i++) {
1258 b[i] = Number(b[0][i].innerHTML);
1259 }
1260 return deffanzahl(b[1], b[2], b[3], 0, b[4], b[5], 0, b[6], b[7], b[8], 0, b[9]);
1261 }
1262
1263 }
1264
1265 //Um die Herkunftsdoerfer nach Entfernung zu sortieren
1266 function sortieren() {
1267 if (villages.length > 3) {
1268 villages.sort(function(a, b) {
1269 return (villages[2]['distance'] > villages[3]['distance']) ? a.distance - b.distance: b.distance - a.distance
1270 });
1271 for (i = 2; i < villages.length; i++) {
1272 table.getElementsByTagName('tr')[i].innerHTML = villages[i - 2]['code'];
1273 }
1274 }
1275 }
1276 //Nur, wenn das Dorf wirklich unterstuetzt wird
1277 if (table.getElementsByTagName('tr').length > 3) {
1278
1279 bereiche[0][0] = table.getElementsByTagName('tr')[1].getElementsByTagName('td');
1280 table.getElementsByTagName('tr')[1].getElementsByTagName('td')[0].innerHTML = 'Aus diesem Dorf (' + auslesen(0) + ' Deffs)';
1281 try {
1282 bereiche[1][0] = table.getElementsByTagName('tr')[table.getElementsByTagName('tr').length - 2].getElementsByTagName('th');
1283 table.getElementsByTagName('tr')[table.getElementsByTagName('tr').length - 2].getElementsByTagName('th')[0].innerHTML = '<input name="all" type="checkbox" class="selectAll" onclick="selectAll(this.form, this.checked)" /> Von außerhalb (' + auslesen(1) + ' Deffs)';
1284 } catch(e) {}
1285 bereiche[2][0] = table.getElementsByTagName('tr')[table.getElementsByTagName('tr').length - 1].getElementsByTagName('th');
1286 table.getElementsByTagName('tr')[table.getElementsByTagName('tr').length - 1].getElementsByTagName('th')[0].innerHTML = 'Insgesamt (' + auslesen(2) + ' Deffs)';
1287
1288 //Eigene Koordinaten fuer Entfernungsberechnung auslesen
1289 var ownx = document.getElementsByTagName('html')[0].innerHTML.split('"coord":"')[1].split('|')[0];
1290 var owny = document.getElementsByTagName('html')[0].innerHTML.split('"coord":"')[1].split('|')[1].split('"')[0];
1291
1292 //Fuer jede Zeile zusaetzliche Zellen einfuegen
1293 for (i = 0; i < table.getElementsByTagName('tr').length - 1; i++) {
1294 switch (i) {
1295 case 0:
1296 var th = createElement('th', {}, '<a>Entfernung</a>');
1297 th.addEventListener('click', sortieren, false);
1298 table.getElementsByTagName('tr')[0].insertBefore(th, table.getElementsByTagName('tr')[0].getElementsByTagName('th')[1]);
1299 break;
1300 case 1:
1301 var td = createElement('td', {
1302 style: 'text-align:center',
1303 class: 'unit-item hidden'
1304 }, '0');
1305 table.getElementsByTagName('tr')[1].insertBefore(td, table.getElementsByTagName('tr')[1].getElementsByTagName('td')[1]);
1306 break;
1307 default:
1308 try {
1309 table.getElementsByTagName('tr')[i].getElementsByTagName('td')[0].style = 'min-width:250px';
1310 var x = table.getElementsByTagName('tr')[i].getElementsByTagName('td')[0].innerHTML.split('(')[1].split('|')[0];
1311 var y = table.getElementsByTagName('tr')[i].getElementsByTagName('td')[0].innerHTML.split('|')[1].split(')')[0];
1312 var td = createElement('td', {
1313 style: 'text-align:center',
1314 class: 'unit-item hidden'
1315 }, village_distance(ownx, x, owny, y));
1316 table.getElementsByTagName('tr')[i].insertBefore(td, table.getElementsByTagName('tr')[i].getElementsByTagName('td')[1]);
1317 villages[i] = {};
1318 villages[i]['distance'] = village_distance(ownx, x, owny, y);
1319 villages[i]['code'] = table.getElementsByTagName('tr')[i].innerHTML;
1320 } catch(e) {}
1321 break;
1322 }
1323 }
1324 var th = document.createElement('th');
1325 table.getElementsByTagName('tr')[table.getElementsByTagName('tr').length - 1].insertBefore(th, table.getElementsByTagName('tr')[table.getElementsByTagName('tr').length - 1].getElementsByTagName('th')[1]);
1326 var th = document.createElement('th');
1327 table.getElementsByTagName('tr')[table.getElementsByTagName('tr').length - 2].insertBefore(th, table.getElementsByTagName('tr')[table.getElementsByTagName('tr').length - 2].getElementsByTagName('th')[1]);
1328 }
1329 break;
1330 /*
1331 *
1332 * Dorfansicht
1333 *
1334 */
1335 case 'overview':
1336
1337 //Truppen auslesen
1338 var bereich = document.getElementsByTagName('body')[0].innerHTML.split('<div id="show_units" class="vis moveable widget">')[1].split('<td><a href="')[0];
1339
1340 var sp = (bereich.indexOf('unit_spear.png?') < 0) ? 0: Number(bereich.split('unit_spear.png?')[1].split("</strong>")[0].split('<strong>')[1]);
1341 var sw = (bereich.indexOf('unit_sword.png?') < 0) ? 0: Number(bereich.split('unit_sword.png?')[1].split("</strong>")[0].split('<strong>')[1]);
1342 var ax = (bereich.indexOf('unit_axe.png?') < 0) ? 0: Number(bereich.split('unit_axe.png?')[1].split("</strong>")[0].split('<strong>')[1]);
1343 var bo = (bereich.indexOf('unit_archer.png?') < 0) ? 0: Number(bereich.split('unit_archer.png?')[1].split("</strong>")[0].split('<strong>')[1]);
1344 var spy = (bereich.indexOf('unit_spy.png?') < 0) ? 0: Number(bereich.split('unit_spy.png?')[1].split("</strong>")[0].split('<strong>')[1]);
1345 var lk = (bereich.indexOf('unit_light.png?') < 0) ? 0: Number(bereich.split('unit_light.png?')[1].split("</strong>")[0].split('<strong>')[1]);
1346 var bb = (bereich.indexOf('unit_marcher.png?') < 0) ? 0: Number(bereich.split('unit_marcher.png?')[1].split("</strong>")[0].split('<strong>')[1]);
1347 var sk = (bereich.indexOf('unit_heavy.png?') < 0) ? 0: Number(bereich.split('unit_heavy.png?')[1].split("</strong>")[0].split('<strong>')[1]);
1348 var ra = (bereich.indexOf('unit_ram.png?') < 0) ? 0: Number(bereich.split('unit_ram.png?')[1].split("</strong>")[0].split('<strong>')[1]);
1349 var ka = (bereich.indexOf('unit_catapult.png?') < 0) ? 0: Number(bereich.split('unit_catapult.png?')[1].split("</strong>")[0].split('<strong>')[1]);
1350 var pa = (bereich.indexOf('unit_knight.png?') < 0) ? 0: Number(bereich.split('unit_knight.png?')[1].split("</strong>")[0].split('<strong>')[1]);
1351 var ag = (bereich.indexOf('unit_snob.png?') < 0) ? 0: Number(bereich.split('unit_snob.png?')[1].split("</strong>")[0].split('<strong>')[1]);
1352 //Deffanzahl berechnen und einfuegen
1353 document.getElementById('show_units').getElementsByTagName('h4')[0].innerHTML = '<img style="float: right; cursor: pointer;" onclick="return VillageOverview.toggleWidget( \'show_units\', this );" src="graphic/minus.png" /> Einheiten (' + String(deffanzahl(sp, sw, ax, bo, spy, lk, bb, sk, ra, ka, pa, ag)) + ' Deffs)';
1354
1355 break;
1356
1357}