· 6 years ago · Feb 03, 2020, 08:04 PM
1// ==UserScript==
2// @name Deffinfo2
3// @author Boggler, Skype: boggler2306 - Timo fix
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
16//var api = typeof unsafeWindow != 'undefined' ? unsafeWindow.ScriptAPI: window.ScriptAPI;
17//api.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 console.log(defence[j].length)
616 for (var k = 1; k <= 12; k++) {
617 defence[j][k - 1] += parseInt(cells[k].textContent);
618 players[playernr][k + 1] += parseInt(cells[k].textContent);
619
620 gesamt[k] += parseInt(cells[k].textContent);
621 }
622
623 }
624 }
625 }
626
627 //Erzeugt die Tabelle und listet die einzelnen gedefften Doerfer auf
628 function display() {
629 //Einheitentabelle erstellen
630 var div = document.getElementById("paged_view_content");
631 var stat = createElement('table', {
632 id: 'Statistik',
633 style: 'width:100%'
634 });
635 var div2 = createElement('div', {
636 style: 'width:100%;display:none',
637 id: 'exportbereich',
638 rows: '10'
639 }, '<br><b>Tabelle in BB-Code (für Forum etc.):</b><br><textarea style="width:100%" id="Exportfeld" rows="10"></textarea>');
640
641 //Behebt den Fehler, dass nichts angezeigt wird, wenn man in einer einzelnen Gruppe Doerfer filtert (leere Eintraege ausblendet)
642 try {
643 div.insertBefore(stat, document.forms[document.forms.length - 2]);
644 div.insertBefore(div2, document.forms[document.forms.length - 2]);
645 } catch(e) {
646 div.insertBefore(stat, document.forms[document.forms.length - 1]);
647 div.insertBefore(div2, document.forms[document.forms.length - 1]);
648 }
649 //Einheiten je nach Welttyp
650 var units = new Array('spear', 'sword', 'axe', 'spy', 'light', 'heavy', 'ram', 'catapult', 'knight', 'snob');
651 if (bogen)
652 var units = new Array('spear', 'sword', 'axe', 'archer', 'spy', 'light', 'marcher', 'heavy', 'ram', 'catapult', 'knight', 'snob');
653 //Export-"Button"
654 var thead = createElement('thead', {});
655 var tr = createElement('tr', {});
656 var th = createElement('th', {
657 style: 'text-align:center',
658 colspan: '2'
659 }, 'Spieler [<a id="exportieren">Export</a>]');
660 tr.appendChild(th);
661 var th = createElement('th', {
662 style: 'text-align:center'
663 });
664 var img = createElement('img', {
665 src: image_base + '/command/support.png'
666 });
667 th.appendChild(img);
668 tr.appendChild(th);
669 var th = createElement('th', {
670 style: 'text-align:center'
671 });
672 var a = createElement('a', {
673 href: '/game.php?village=' + villageid + '&screen=settings'
674 }, 'Deffs');
675 th.appendChild(a);
676 tr.appendChild(th);
677 for (i = 0; i < units.length; i++) {
678 units[i] = image_base + '/unit/unit_' + units[i] + '.png';
679 }
680 for (i = 0; i < units.length; i++) {
681 var th = createElement('th', {
682 style: 'text-align:center'
683 });
684 var img = createElement('img', {
685 src: units[i]
686 });
687 th.appendChild(img);
688 tr.appendChild(th);
689 }
690 thead.appendChild(tr);
691
692 document.getElementById('Statistik').appendChild(thead);
693 //Statistiken ueber einzelne Spieler einfuegen
694 for (i = 0; i < players.length; i++) {
695 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]);
696 var tr = createElement('tr', {});
697 var td = createElement('td', {
698 style: 'text-align:center'
699 }, '<input type="checkbox" name="indenstats" value="' + players[i][0].split('>')[1].split('<')[0] + '">');
700
701 tr.appendChild(td);
702 var td = createElement('td', {
703 style: 'text-align:center'
704 }, players[i][0]);
705 tr.appendChild(td);
706 var td = createElement('td', {
707 style: 'text-align:center'
708 }, players[i]['anzahl'] + ' in ' + players[i][1] + ' Dörfern');
709 tr.appendChild(td);
710 var td = createElement('td', {
711 style: 'text-align:center'
712 }, deffzahl);
713 tr.appendChild(td);
714 var b = (bogen) ? 13: 11;
715 for (a = 2; a <= b; a++) {
716
717 var td = createElement('td', {
718 style: 'text-align:center'
719 }, players[i][a])
720 tr.appendChild(td);
721
722 }
723 document.getElementById('Statistik').appendChild(tr);
724 }
725
726 //Gesamtwerte einfuegen
727 var tr = createElement('tr', {});
728 var th = createElement('th', {
729 style: 'text-align:center',
730 colspan: '2'
731 }, '<strong>Gesamt (' + players.length + ')</strong>')
732 tr.appendChild(th);
733 var th = createElement('th', {
734 style: 'text-align:center'
735 }, gesamt[0] + ' in ' + villages.length + ' Dörfern')
736 tr.appendChild(th);
737 if (bogen) {
738 var th = createElement('th', {
739 style: 'text-align:center'
740 }, 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]))
741 tr.appendChild(th);
742 } else {
743 var th = createElement('th', {
744 style: 'text-align:center'
745 }, deffanzahl(gesamt[1], gesamt[2], gesamt[3], 0, gesamt[4], gesamt[5], 0, gesamt[6], gesamt[7], gesamt[8], gesamt[9], gesamt[10]))
746 tr.appendChild(th);
747 }
748 var b = (bogen) ? 13: 11;
749 for (a = 1; a < b; a++) {
750
751 var th = createElement('th', {
752 style: 'text-align:center'
753 }, gesamt[a])
754 tr.appendChild(th);
755
756 }
757 document.getElementById('Statistik').appendChild(tr);
758
759 //Bei Klick auf den Exportieren-"Button"
760 document.getElementById('exportieren').addEventListener('click', function exporten() {
761 //Tabellenkopf
762 var text = '[table][**]Spieler[||]Unterstuetzungen[||]Deffs[||][unit]spear[/unit][||][unit]sword[/unit][||][unit]axe[/unit][||]';
763
764 if (bogen)
765 text += '[unit]archer[/unit][||]';
766 text += '[unit]spy[/unit][||][unit]light[/unit][||]';
767 if (bogen)
768 text += '[unit]marcher[/unit][||]';
769 text += '[unit]heavy[/unit][||][unit]ram[/unit][||][unit]catapult[/unit][||]';
770 if (paladin)
771 text += '[unit]knight[/unit][||]';
772 text += '[unit]snob[/unit][/**]';
773 //Spieler und unterstuetzte Einheiten
774 for (i = 0; i < players.length; i++) {
775 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]);
776
777 var text1 = '[*][player]' + players[i][0].split('>')[1].split('<')[0] + '[/player][|]' + players[i]['anzahl'] + ' in ' + players[i][1] + ' Doerfern' + '[|]' + deffzahl;
778 var b = (bogen) ? 13: 11;
779 for (a = 2; a <= b; a++) {
780
781 text1 += '[|]' + String(players[i][a]);
782
783 }
784 text += text1 + '[/*]';
785 }
786 //Gesamte Unterstuetzung
787 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]);
788 var text1 = '[**]Gesamt (' + players.length + ')[||]' + gesamt[0] + ' in ' + villages.length + ' Doerfern[||]' + deffzahl;
789 var b = (bogen) ? 13: 11;
790 for (a = 1; a < b; a++) {
791
792 text1 += '[||]' + gesamt[a];
793
794 }
795 //Einzelne gedeffte Doerfer mit Truppen
796 text += text1 + '[/**][/table]' + '\r\n\r\nGedeffte Doerfer:\r\n';
797 text += '[table][**]Dorf[||]Spieler[||][unit]spear[/unit][||][unit]sword[/unit][||][unit]axe[/unit][||]';
798
799 if (bogen)
800 text += '[unit]archer[/unit][||]';
801 text += '[unit]spy[/unit][||][unit]light[/unit][||]';
802 if (bogen)
803 text += '[unit]marcher[/unit][||]';
804 text += '[unit]heavy[/unit][||][unit]ram[/unit][||][unit]catapult[/unit][||]';
805 if (paladin)
806 text += '[unit]knight[/unit][||]';
807 text += '[unit]snob[/unit][||]Deffs[/**]';
808 for (var i = 0; i < villages.length; i++) {
809
810 var newCell = document.createElement('td');
811 if (villages1[i][i].split('<a')[1].split('(')[villages1[i][i].split('<a')[1].split('(').length - 1].split(')')[0].length == 0) {
812 koord = villages1[i][i].split('<a')[1].split('(')[villages1[i][i].split('<a')[1].split('(').length - 2].split(')')[0];
813 } else {
814 koord = villages1[i][i].split('<a')[1].split('(')[villages1[i][i].split('<a')[1].split('(').length - 1].split(')')[0];
815 }
816 text += '[*][coord]' + koord + '[/coord][|][player]' + villages1[i]['name'] + '[/player]';
817 for (var j = 0; j <= defence[i].length; j++) {
818 switch (j) {
819
820 case defence[i].length:
821
822 if (storage.getValue('deffscript' + welt + '_bogen', true) && storage.getValue('deffscript' + welt + '_paladin', true)) {
823
824 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]);
825 } else if (storage.getValue('deffscript' + welt + '_bogen', true) && !storage.getValue('deffscript' + welt + '_paladin', true)) {
826 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]);
827 } else if (!storage.getValue('deffscript' + welt + '_bogen', true) && storage.getValue('deffscript' + welt + '_paladin', true)) {
828 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]);
829 } else {
830 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]);
831 }
832
833 break;
834
835 default:
836 text += '[|]' + String(defence[i][j]);
837 break;
838 }
839 }
840 text += '[/*]';
841
842 }
843 text += '[/table]';
844
845 document.getElementById('exportbereich').style.display = '';
846 document.getElementById('Exportfeld').value = text;
847
848 }, false);
849
850 //Einzelne gedeffte Doerfer aufzaehlen
851 var newTable = createElement('table', {
852 class: 'vis',
853 style: 'min-width:950px',
854 id: 'einzeldoerfer'
855 });
856 var tables = document.getElementsByTagName('table');
857 var headerRow = document.getElementById('units_table').getElementsByTagName('tr')[0].cloneNode(true);
858 headerRow.id = 'headerRow';
859 newTable.appendChild(headerRow);
860 for (var i = 0; i < villages.length; i++) {
861 var newRow = document.createElement('tr');
862 var newCell = document.createElement('td');
863 var checkBox = createElement('input', {
864 type: 'checkbox',
865 id: villages[i],
866 });
867 checkBox.alt = villages1[i]['name'];
868 newCell.appendChild(checkBox);
869 newCell.innerHTML += "<a href=" + links[i] + ">" + villages[i] + "</a>";
870 newRow.appendChild(newCell);
871
872 //Truppen einer Einheit anzeigen
873 for (var j = 0; j <= defence[i].length; j++) {
874 switch (j) {
875 //Deffzahl
876 case defence[i].length:
877 var troopCell = document.createElement('td');
878 if (storage.getValue('deffscript' + welt + '_bogen', true) && storage.getValue('deffscript' + welt + '_paladin', true)) {
879 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]);
880 } else if (storage.getValue('deffscript' + welt + '_bogen', true) && !storage.getValue('deffscript' + welt + '_paladin', true)) {
881 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]);
882 } else if (!storage.getValue('deffscript' + welt + '_bogen', true) && storage.getValue('deffscript' + welt + '_paladin', true)) {
883 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]);
884 } else {
885 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]);
886 }
887 newRow.appendChild(troopCell);
888 break;
889 //Untertuetzung einer Einheit
890 default:
891 var troopCell = document.createElement('td');
892 if (defence[i][j] == 0)
893 troopCell.className = "hidden";
894 troopCell.innerHTML = defence[i][j];
895 newRow.appendChild(troopCell);
896 break;
897 }
898 }
899 newTable.appendChild(newRow);
900 }
901 //Beim Checken einer Checkbox, die passenden Doerfer und Unterstuetzungen auch checken
902 div.insertBefore(newTable, document.forms[document.forms.length - 2]);
903 var eventname = (navigator.userAgent.indexOf('Firefox') > 0) ? 'mouseup': 'click';
904 window.addEventListener(eventname, function(event) {
905 if (event.target.type == "checkbox") {
906 //Beim Checken einer Checkbox aus der Doerferliste
907 var rows = document.getElementsByTagName('tr');
908 for (var i = 1; i < rows.length - 1; i++) {
909 try {
910 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') {
911 rows[i].getElementsByTagName("input")[0].checked = event.target.checked;
912 }
913 } catch(e) {}
914 }
915 //Beim Checken einer Checkbox aus der Spielertabelle
916 var boxes = document.getElementById('einzeldoerfer').getElementsByTagName('input');
917 if (event.target.name == 'indenstats') {
918 for (i = 0; i < boxes.length; i++) {
919 if (boxes[i].alt == event.target.value) {
920 boxes[i].checked = event.target.checked;
921 }
922 }
923 }
924 }
925 }, true);
926 }
927
928 summarize();
929 display();
930
931 //Hochkopierter Button, um Truppen zurueckzuziehen
932 document.getElementById('headerRow').removeChild(document.getElementById('headerRow').getElementsByTagName('th')[1]);
933 document.getElementById('headerRow').innerHTML = document.getElementById('headerRow').innerHTML.replace('Aktion', '<a href="/game.php?village=' + villageid + '&screen=settings">Deffs</a>'); (function() {
934 var button = document.getElementsByName("submit_units_back")[0];
935 var table = document.getElementById("units_table");
936 var newButton = createElement('input', {
937 type: 'submit',
938 value: 'Zurueckziehen'
939 });
940 table.childNodes[1].childNodes[1].childNodes[1].appendChild(newButton);
941 newButton.addEventListener("click", function() {
942 button.click();
943 }, false);
944 })();
945
946 break;
947 /*
948 *
949 * Uebersicht->Truppen->Verteidigung
950 *
951 */
952 case 'units&type=support_detail':
953
954 //Infos auslesen & Arrays erzeugen
955 var spieler = new Array();
956 var gesamt = new Array();
957 var spielernr = new Array();
958 spielernr[0] = new Array();
959 spielernr[1] = new Array();
960
961 //Liest die Unterstuetzungstruppen aus und schreibt Werte in die Arrays
962 function zusammenrechnen(i, row) {
963 //a oder b Zeile
964 var rownr = (row == 'row_a') ? 0: 1;
965 //Name des Unterstuetzenden Spielers
966 try {
967 if(navigator.userAgent.indexOf('Firefox') < 0){
968 var name = '<a href="' + table.getElementsByClassName(row)[i].getElementsByTagName('a')[2].href + '">' + table.getElementsByClassName(row)[i].getElementsByTagName('a')[2].innerHTML + '</a>';
969 var nameklartext = table.getElementsByClassName(row)[i].getElementsByTagName('a')[2].innerHTML;
970 }else{
971 var name = '<a href="' + table.getElementsByClassName(row)[i].getElementsByTagName('a')[1].href + '">' + table.getElementsByClassName(row)[i].getElementsByTagName('a')[1].innerHTML + '</a>';
972 var nameklartext = table.getElementsByClassName(row)[i].getElementsByTagName('a')[1].innerHTML;
973
974 }
975
976 } catch(e) {
977 name = '<a href="/game.php?screen=info_player&id=' + spielerid + '">' + spielername + '</a>';
978 nameklartext = spielername;
979 }
980 //Prueft ob und an welcher Stelle der Spieler im Array gespeichert ist bzw schreibt ihn rein
981 for (a = 0; a <= spieler.length; a++) {
982 switch (a) {
983 case spieler.length:
984 if (spielernr[rownr][i] == null) {
985 spieler[a] = new Array();
986 spieler[a][0] = name;
987 spielernr[rownr][i] = a;
988 }
989 break;
990
991 default:
992 if (spieler[a][0] == name && spielernr[rownr][i] == null) {
993 spielernr[rownr][i] = a;
994 }
995 break;
996
997 }
998
999 }
1000 spieler[spielernr[rownr][i]][42] = nameklartext;
1001 table.getElementsByClassName(row)[i].getElementsByTagName('input')[0].src = nameklartext;
1002
1003 //Truppen auslesen, in Spieler- und Gesamtarray speichern
1004 var b = (bogen) ? 13: 11;
1005 for (zelle = 2; zelle <= b; zelle++) {
1006
1007 try {
1008 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);
1009 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);
1010 } catch(e) {}
1011
1012 }
1013
1014 //Unterstuetzungszahl erhoehen
1015 spieler[spielernr[rownr][i]][1] = (spieler[spielernr[rownr][i]][1] == null) ? 1: spieler[spielernr[rownr][i]][1] + 1;
1016 gesamt[1] = (gesamt[1] == null) ? 1: gesamt[1] + 1;
1017 }
1018
1019 //Funktion fuer a- und b-Zeilen ausfuehren
1020 for (i = 0; i < table.getElementsByClassName('row_a').length; i++) {
1021 zusammenrechnen(i, 'row_a');
1022 }
1023 for (i = 0; i < table.getElementsByClassName('row_b').length; i++) {
1024 zusammenrechnen(i, 'row_b');
1025 }
1026
1027 //Zaehlen, in wievielen Doerfern Unterstuetzungen stehen
1028 var gedefftedoerfer = 0;
1029 for (i = 0; i < document.getElementById('units_table').getElementsByClassName('row_a').length; i++) {
1030 if (document.getElementById('units_table').getElementsByClassName('row_a')[i].previousSibling.previousSibling.className == ' units_away') {
1031 gedefftedoerfer++;
1032 }
1033 }
1034 for (i = 0; i < document.getElementById('units_table').getElementsByClassName('row_b').length; i++) {
1035 if (document.getElementById('units_table').getElementsByClassName('row_b')[i].previousSibling.previousSibling.className == ' units_away') {
1036 gedefftedoerfer++;
1037 }
1038 }
1039
1040 //Tabelle erzeugen
1041 var div = document.getElementById("paged_view_content");
1042 var stat = createElement('table', {
1043 id: 'Statistik',
1044 style: 'width:100%'
1045 });
1046 var div2 = createElement('div', {
1047 style: 'width:100%;display:none',
1048 id: 'exportbereich',
1049 rows: '10'
1050 }, '<br><b>Tabelle in BB-Code (für Forum etc.):</b><br><textarea style="width:100%" id="Exportfeld" rows="10"></textarea>');
1051 //Behebt den Fehler, dass nichts angezeigt wird, wenn man in einer einzelnen Gruppe Doerfer filtert (leere Eintraege ausblendet)
1052 try {
1053 div.insertBefore(stat, document.forms[document.forms.length - 2]);
1054 div.insertBefore(div2, document.forms[document.forms.length - 2]);
1055 } catch(e) {
1056 div.insertBefore(stat, document.forms[document.forms.length - 1]);
1057 div.insertBefore(div2, document.forms[document.forms.length - 1]);
1058 }
1059 //Einheiten je nach Welttyp
1060 var units = new Array('spear', 'sword', 'axe', 'spy', 'light', 'heavy', 'ram', 'catapult', 'knight', 'snob');
1061 if (bogen)
1062 var units = new Array('spear', 'sword', 'axe', 'archer', 'spy', 'light', 'marcher', 'heavy', 'ram', 'catapult', 'knight', 'snob');
1063
1064 var thead = createElement('thead', {});
1065 var tr = createElement('tr', {});
1066 var th = createElement('th', {
1067 style: 'text-align:center',
1068 colspan: '2'
1069 }, 'Spieler [<a id="exportieren">Export</a>]');
1070 tr.appendChild(th);
1071 var th = createElement('th', {
1072 style: 'text-align:center'
1073 });
1074 var img = createElement('img', {
1075 src: image_base + '/command/support.png'
1076 });
1077 th.appendChild(img);
1078 tr.appendChild(th);
1079 var th = createElement('th', {
1080 style: 'text-align:center'
1081 });
1082 var a = createElement('a', {
1083 href: '/game.php?village=' + villageid + '&screen=settings'
1084 }, 'Deffs');
1085 th.appendChild(a);
1086 tr.appendChild(th);
1087 for (i = 0; i < units.length; i++) {
1088 units[i] = image_base + '/unit/unit_' + units[i] + '.png';
1089 }
1090 for (i = 0; i < units.length; i++) {
1091 var th = createElement('th', {
1092 style: 'text-align:center'
1093 });
1094 var img = createElement('img', {
1095 src: units[i]
1096 });
1097 th.appendChild(img);
1098 tr.appendChild(th);
1099 }
1100 thead.appendChild(tr);
1101
1102 document.getElementById('Statistik').appendChild(thead);
1103 //Statistiken ueber einzelne Spieler einfuegen
1104 for (i = 0; i < spieler.length; i++) {
1105 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]);
1106 var tr = createElement('tr', {});
1107 var td = createElement('td', {
1108 style: 'text-align:center'
1109 }, '<input type="checkbox" name="indenstats" alt="' + spieler[i][42] + '">');
1110 tr.appendChild(td);
1111
1112 var td = createElement('td', {
1113 style: 'text-align:center'
1114 }, spieler[i][0])
1115 tr.appendChild(td);
1116 var td = createElement('td', {
1117 style: 'text-align:center'
1118 }, spieler[i][1])
1119 tr.appendChild(td);
1120 var td = createElement('td', {
1121 style: 'text-align:center'
1122 }, deffzahl)
1123 tr.appendChild(td);
1124 var b = (bogen) ? 13: 11;
1125 for (a = 2; a <= b; a++) {
1126
1127 var td = createElement('td', {
1128 style: 'text-align:center'
1129 }, spieler[i][a])
1130 tr.appendChild(td);
1131
1132 }
1133 document.getElementById('Statistik').appendChild(tr);
1134 }
1135
1136 //Gesamtwerte einfuegen
1137 var tr = createElement('tr', {});
1138 var th = createElement('th', {
1139 style: 'text-align:center',
1140 colspan: '2'
1141 }, '<strong>Gesamt (' + spieler.length + ')</strong>')
1142 tr.appendChild(th);
1143 var gedefftedoerfer = (navigator.userAgent.indexOf('Firefox') > 0) ? gedefftedoerfer + 1: gedefftedoerfer
1144 var th = createElement('th', {
1145 style: 'text-align:center'
1146 }, gesamt[1] + ' in ' + gedefftedoerfer + ' Dörfern')
1147 tr.appendChild(th);
1148 if (bogen) {
1149 var th = createElement('th', {
1150 style: 'text-align:center'
1151 }, 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]))
1152 tr.appendChild(th);
1153 } else {
1154 var th = createElement('th', {
1155 style: 'text-align:center'
1156 }, deffanzahl(gesamt[2], gesamt[3], gesamt[4], 0, gesamt[5], gesamt[6], 0, gesamt[7], gesamt[8], gesamt[9], gesamt[10], gesamt[11]))
1157 tr.appendChild(th);
1158 }
1159 var b = (bogen) ? 13: 11;
1160 for (a = 2; a <= b; a++) {
1161
1162 var th = createElement('th', {
1163 style: 'text-align:center'
1164 }, gesamt[a])
1165 tr.appendChild(th);
1166
1167 }
1168 document.getElementById('Statistik').appendChild(tr);
1169
1170 //Beim Klick auf den Export-"Button"
1171 document.getElementById('exportieren').addEventListener('click', function exporten() {
1172 //Tabellenkopf
1173 var text = '[table][**]Spieler[||]Verteidigung[||]Deffs[||][unit]spear[/unit][||][unit]sword[/unit][||][unit]axe[/unit][||]';
1174 if (bogen)
1175 text += '[unit]archer[/unit][||]';
1176 text += '[unit]spy[/unit][||][unit]light[/unit][||]';
1177 if (bogen)
1178 text += '[unit]marcher[/unit][||]';
1179 text += '[unit]heavy[/unit][||][unit]ram[/unit][||][unit]catapult[/unit][||]';
1180 if (paladin)
1181 text += '[unit]knight[/unit][||]';
1182 text += '[unit]snob[/unit][/**]';
1183 //Pro Spieler den Namen, die unterstuetzten Truppen, Deffzahlen etc einfuegen
1184 for (i = 0; i < spieler.length; i++) {
1185 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]);
1186
1187 var text1 = '[*][player]' + spieler[i][0].split('>')[1].split('<')[0] + '[/player][|]' + spieler[i][1] + '[|]' + deffzahl;
1188 var b = (bogen) ? 13: 11;
1189 for (a = 2; a <= b; a++) {
1190
1191 text1 += '[|]' + spieler[i][a];
1192
1193 }
1194 text += text1 + '[/*]';
1195 }
1196 //Gesamtdeffzahl, Unterstuetzungen etc. einfuegen
1197 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]);
1198 var text1 = '[**]Gesamt (' + spieler.length + ')[||]' + gesamt[1] + ' in ' + gedefftedoerfer + ' Doerfern[||]' + deffzahl;
1199 var b = (bogen) ? 13: 11;
1200 for (a = 2; a <= b; a++) {
1201
1202 text1 += '[||]' + gesamt[a];
1203
1204 }
1205
1206 text += text1 + '[/**][/table]';
1207 document.getElementById('exportbereich').style.display = '';
1208 document.getElementById('Exportfeld').value = text;
1209
1210 }, false);
1211
1212 //Beim Checken einer Checkbox die zugehoerigen Checkboxen in den anderen Bereichen auch anhaken
1213 var eventname = (navigator.userAgent.indexOf('Firefox') > 0) ? 'mouseup': 'click';
1214 window.addEventListener(eventname, function(event) {
1215 if (event.target.type == "checkbox") {
1216 var rows = document.getElementById('units_table').getElementsByTagName('tr');
1217 for (var i = 1; i < rows.length - 1; i++) {
1218 try {
1219 if (rows[i].getElementsByTagName('input')[0].src.split('/')[3] == event.target.alt && event.target.name == 'indenstats') {
1220 rows[i].getElementsByTagName('input')[0].checked = event.target.checked;
1221 }
1222 } catch(e) {}
1223 }
1224 }
1225 }, true);
1226
1227 break;
1228 /*
1229 *
1230 * Versammlungsplatz->Truppen
1231 *
1232 */
1233 case 'units':
1234 var table = document.getElementById('units_home');
1235 var bereiche = new Array();
1236 bereiche[0] = new Array();
1237 bereiche[1] = new Array();
1238 bereiche[2] = new Array();
1239 var villages = new Array();
1240
1241 //Deffzahlen auslesen
1242 function auslesen(a) {
1243 b = bereiche[a];
1244 if (bogen && paladin) {
1245 for (i = 1; i < 13; i++) {
1246 b[i] = Number(b[0][i].innerHTML);
1247 }
1248 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]);
1249 } else if (bogen && !paladin) {
1250 for (i = 1; i < 12; i++) {
1251 b[i] = Number(b[0][i].innerHTML);
1252 }
1253 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]);
1254 } else if (!bogen && paladin) {
1255 for (i = 1; i < 11; i++) {
1256 b[i] = Number(b[0][i].innerHTML);
1257 }
1258 return deffanzahl(b[1], b[2], b[3], 0, b[4], b[5], 0, b[6], b[7], b[8], b[9], b[10]);
1259 } else if (!bogen && !paladin) {
1260 for (i = 1; i < 10; i++) {
1261 b[i] = Number(b[0][i].innerHTML);
1262 }
1263 return deffanzahl(b[1], b[2], b[3], 0, b[4], b[5], 0, b[6], b[7], b[8], 0, b[9]);
1264 }
1265
1266 }
1267
1268 //Um die Herkunftsdoerfer nach Entfernung zu sortieren
1269 function sortieren() {
1270 if (villages.length > 3) {
1271 villages.sort(function(a, b) {
1272 return (villages[2]['distance'] > villages[3]['distance']) ? a.distance - b.distance: b.distance - a.distance
1273 });
1274 for (i = 2; i < villages.length; i++) {
1275 table.getElementsByTagName('tr')[i].innerHTML = villages[i - 2]['code'];
1276 }
1277 }
1278 }
1279 //Nur, wenn das Dorf wirklich unterstuetzt wird
1280 if (table.getElementsByTagName('tr').length > 3) {
1281
1282 bereiche[0][0] = table.getElementsByTagName('tr')[1].getElementsByTagName('td');
1283 table.getElementsByTagName('tr')[1].getElementsByTagName('td')[0].innerHTML = 'Aus diesem Dorf (' + auslesen(0) + ' Deffs)';
1284 try {
1285 bereiche[1][0] = table.getElementsByTagName('tr')[table.getElementsByTagName('tr').length - 2].getElementsByTagName('th');
1286 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)';
1287 } catch(e) {}
1288 bereiche[2][0] = table.getElementsByTagName('tr')[table.getElementsByTagName('tr').length - 1].getElementsByTagName('th');
1289 table.getElementsByTagName('tr')[table.getElementsByTagName('tr').length - 1].getElementsByTagName('th')[0].innerHTML = 'Insgesamt (' + auslesen(2) + ' Deffs)';
1290
1291 //Eigene Koordinaten fuer Entfernungsberechnung auslesen
1292 var ownx = document.getElementsByTagName('html')[0].innerHTML.split('"coord":"')[1].split('|')[0];
1293 var owny = document.getElementsByTagName('html')[0].innerHTML.split('"coord":"')[1].split('|')[1].split('"')[0];
1294
1295 //Fuer jede Zeile zusaetzliche Zellen einfuegen
1296 for (i = 0; i < table.getElementsByTagName('tr').length - 1; i++) {
1297 switch (i) {
1298 case 0:
1299 var th = createElement('th', {}, '<a>Entfernung</a>');
1300 th.addEventListener('click', sortieren, false);
1301 table.getElementsByTagName('tr')[0].insertBefore(th, table.getElementsByTagName('tr')[0].getElementsByTagName('th')[1]);
1302 break;
1303 case 1:
1304 var td = createElement('td', {
1305 style: 'text-align:center',
1306 class: 'unit-item hidden'
1307 }, '0');
1308 table.getElementsByTagName('tr')[1].insertBefore(td, table.getElementsByTagName('tr')[1].getElementsByTagName('td')[1]);
1309 break;
1310 default:
1311 try {
1312 table.getElementsByTagName('tr')[i].getElementsByTagName('td')[0].style = 'min-width:250px';
1313 var x = table.getElementsByTagName('tr')[i].getElementsByTagName('td')[0].innerHTML.split('(')[1].split('|')[0];
1314 var y = table.getElementsByTagName('tr')[i].getElementsByTagName('td')[0].innerHTML.split('|')[1].split(')')[0];
1315 var td = createElement('td', {
1316 style: 'text-align:center',
1317 class: 'unit-item hidden'
1318 }, village_distance(ownx, x, owny, y));
1319 table.getElementsByTagName('tr')[i].insertBefore(td, table.getElementsByTagName('tr')[i].getElementsByTagName('td')[1]);
1320 villages[i] = {};
1321 villages[i]['distance'] = village_distance(ownx, x, owny, y);
1322 villages[i]['code'] = table.getElementsByTagName('tr')[i].innerHTML;
1323 } catch(e) {}
1324 break;
1325 }
1326 }
1327 var th = document.createElement('th');
1328 table.getElementsByTagName('tr')[table.getElementsByTagName('tr').length - 1].insertBefore(th, table.getElementsByTagName('tr')[table.getElementsByTagName('tr').length - 1].getElementsByTagName('th')[1]);
1329 var th = document.createElement('th');
1330 table.getElementsByTagName('tr')[table.getElementsByTagName('tr').length - 2].insertBefore(th, table.getElementsByTagName('tr')[table.getElementsByTagName('tr').length - 2].getElementsByTagName('th')[1]);
1331 }
1332 break;
1333 /*
1334 *
1335 * Dorfansicht
1336 *
1337 */
1338 case 'overview':
1339
1340 //Truppen auslesen
1341 var bereich = document.getElementsByTagName('body')[0].innerHTML.split('<div id="show_units" class="vis moveable widget">')[1].split('<td><a href="')[0];
1342
1343 var sp = (bereich.indexOf('unit_spear.png?') < 0) ? 0: Number(bereich.split('unit_spear.png?')[1].split("</strong>")[0].split('<strong>')[1]);
1344 var sw = (bereich.indexOf('unit_sword.png?') < 0) ? 0: Number(bereich.split('unit_sword.png?')[1].split("</strong>")[0].split('<strong>')[1]);
1345 var ax = (bereich.indexOf('unit_axe.png?') < 0) ? 0: Number(bereich.split('unit_axe.png?')[1].split("</strong>")[0].split('<strong>')[1]);
1346 var bo = (bereich.indexOf('unit_archer.png?') < 0) ? 0: Number(bereich.split('unit_archer.png?')[1].split("</strong>")[0].split('<strong>')[1]);
1347 var spy = (bereich.indexOf('unit_spy.png?') < 0) ? 0: Number(bereich.split('unit_spy.png?')[1].split("</strong>")[0].split('<strong>')[1]);
1348 var lk = (bereich.indexOf('unit_light.png?') < 0) ? 0: Number(bereich.split('unit_light.png?')[1].split("</strong>")[0].split('<strong>')[1]);
1349 var bb = (bereich.indexOf('unit_marcher.png?') < 0) ? 0: Number(bereich.split('unit_marcher.png?')[1].split("</strong>")[0].split('<strong>')[1]);
1350 var sk = (bereich.indexOf('unit_heavy.png?') < 0) ? 0: Number(bereich.split('unit_heavy.png?')[1].split("</strong>")[0].split('<strong>')[1]);
1351 var ra = (bereich.indexOf('unit_ram.png?') < 0) ? 0: Number(bereich.split('unit_ram.png?')[1].split("</strong>")[0].split('<strong>')[1]);
1352 var ka = (bereich.indexOf('unit_catapult.png?') < 0) ? 0: Number(bereich.split('unit_catapult.png?')[1].split("</strong>")[0].split('<strong>')[1]);
1353 var pa = (bereich.indexOf('unit_knight.png?') < 0) ? 0: Number(bereich.split('unit_knight.png?')[1].split("</strong>")[0].split('<strong>')[1]);
1354 var ag = (bereich.indexOf('unit_snob.png?') < 0) ? 0: Number(bereich.split('unit_snob.png?')[1].split("</strong>")[0].split('<strong>')[1]);
1355 //Deffanzahl berechnen und einfuegen
1356 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)';
1357
1358 break;
1359
1360}