• Hallo Besucher!

    Du bist neu im Forum? Dann registriere dich hier, um Diskussionen beizutreten oder eigene Themen zu erstellen. Für die Registrierung ist es erforderlich, dass du einen Spielaccount bei Die Stämme hast.

    Andernfalls kannst du dich hier direkt einloggen.

    Falls du dein Passwort vergessen hast, kannst du hier ein neues Passwort anfordern.

Truppenzähler für Truppen die im Bau sind

DeletedUser

Gast
Gibt es ein Tool oder Skript mit dem man Truppenzählen kann die in Produktion sind?
Macht es einen Unterschied ob man auf .de Welten spielt oder auf .ch Welten?
mfg
 

DeletedUser61033

Gast
bei einem dorf oder für mehrere?
mit pa isses kein problem, für 1 dorf, ohne pa dürfte es nur mit viel klickerei funzen
für mehrere dörfer gehts nur mit pa und sehr ungenau

weiß nich wies auf .ch aussieht, aber dürfte eigentlich nix ändern
 
Zuletzt bearbeitet von einem Moderator:

DeletedUser63425

Gast
rekrutierungssübersicht, findest du z.B in der klassischen dorfübersicht, und kannst es ja dann in die schnellleiste packen.
 

DeletedUser64750

Gast
Es gibt doch ein Truppenzähler!

Allerdings ignoriert er sich in produktion befindliche Truppen:mrgreen:
 

DeletedUser

Gast
also mit js lassen sich problemlos die truppen in produktion errechnen, das script vom sofasitzverein macht ja genau das^^
 

DeletedUser

Gast
also mit js lassen sich problemlos die truppen in produktion errechnen, das script vom sofasitzverein macht ja genau das^^

Wollt ich grade sagen^^
Check doch mal Sofa's Code da müsste das drinne sein
was du brauchst ;-)

greez ELBT
 

DeletedUser

Gast
Code:
(function() {
  var check_group = false;
  var trans = {
    'village': 'Dorf',
    'group_all': ' >alle< '
  };

  function get_element_childs(node) {
    var element_childs = [];
    for(var i = 0, len = node.childNodes.length; i < len; ++i) {
      if (node.childNodes[i].nodeType == 1) {
        element_childs.push(node.childNodes[i]);
      }
    }
    return element_childs;
  }

  function check_overview() {
    var url = location.href + '';
    if (url.search(/screen=overview_villages&mode=prod/) == -1) {
      return false;
    }

    if (!check_group) {
      return true;
    }
    
    var strongs = document.getElementsByTagName('strong');
    for (var i = 0, len = strongs.length; i < len; ++i) {
      if (strongs[i].firstChild.nodeValue == trans['group_all']) {
        return true;
      }
    }
    
    return false;
  }
  
  function find_tbody() {
    var ths = document.getElementsByTagName('th');
    for (var i = 0, len = ths.length; i < len; ++i) {
      if (ths[i].firstChild.nodeValue == 'Dorf') {
        return ths[i].parentNode.parentNode;
      }
    }
  }

  function generate_unit_prod_dom(unit_prod) {
    var table = document.createElement('table');
    var heading_row = document.createElement('tr');
    var unit_row = document.createElement('tr');
    table.appendChild(heading_row);
    table.appendChild(unit_row);
    for (var unit in unit_prod) {
      var th = document.createElement('th');
      var img = document.createElement('img');
      img.setAttribute('src', 'graphic/unit/unit_' + unit + '.png');
      th.appendChild(img);
      heading_row.appendChild(th);

      var td = document.createElement('td');
      var text = document.createTextNode(unit_prod[unit]);
      td.appendChild(text);
      unit_row.appendChild(td);
    }

    return table;
  }

  if (!check_overview()) {
    if (check_group) {
      location.href = 'game.php?screen=overview_villages&mode=prod&group=0';
    } else {
      location.href = 'game.php?screen=overview_villages&mode=prod';
    }
    return;
  }
  
  var unit_prod = {};
  var tbody = find_tbody();
  var rows = get_element_childs(tbody);
  for (var i = 1, len = rows.length; i < len; i++) {
    var images = get_element_childs(get_element_childs(rows[i])[7]);
    for (var j = 0, lenj = images.length; j < lenj; ++j) {
      var img = images[j];
      var matches = /unit_(\w+)\.png/.exec(img.getAttribute('src'));
      var cnt = img.getAttribute('title').split('-');
      var unit_name = matches[1];
      if (typeof(unit_prod[unit_name]) == 'undefined') {
        unit_prod[unit_name] = 0;
      }
      unit_prod[unit_name] += parseInt(cnt[0], 10);
    }
  }
  
  tbody.parentNode.parentNode.insertBefore(generate_unit_prod_dom(unit_prod), tbody.parentNode);
})();
Bitteschön! Zu der Variable check_group: Wenn false, dann zählt er abhängig von der ausgewählten Gruppe. Sollte es auf true sein, so wird die auf die Gruppe auf "alle" gesetzt um alle die Produktion in allen Dörfern zu zählen. Das Script zählt auf der Produktionsseite, sollte diese nicht angewählt sein, wählt das Script sie an, danach muss es jedoch erneut gestartet werden. Gleiches gilt, falls check_group auf true ist und nicht "alle" ausgewählt ist.

Und nun nochmal das Script komprimiert direkt zum Einfügen in die Schnellleiste:
Code:
javascript:(function(){var check_group=false;var trans={'village':'Dorf','group_all':' >alle< '};function get_element_childs(node){var element_childs=[];for(var i=0,len=node.childNodes.length;i<len;++i){if(node.childNodes[i].nodeType==1){element_childs.push(node.childNodes[i]);}}return element_childs;}function check_overview(){var url=location.href+'';if(url.search(/screen=overview_villages&mode=prod/)==-1){return false;}if(!check_group){return true;}var strongs=document.getElementsByTagName('strong');for(var i=0,len=strongs.length;i<len;++i){if(strongs[i].firstChild.nodeValue==trans['group_all']){return true;}}return false;}function find_tbody(){var ths=document.getElementsByTagName('th');for(var i=0,len=ths.length;i<len;++i){if(ths[i].firstChild.nodeValue=='Dorf'){return ths[i].parentNode.parentNode;}}}function generate_unit_prod_dom(unit_prod){var table=document.createElement('table');var heading_row=document.createElement('tr');var unit_row=document.createElement('tr');table.appendChild(heading_row);table.appendChild(unit_row);for(var unit in unit_prod){var th=document.createElement('th');var img=document.createElement('img');img.setAttribute('src','graphic/unit/unit_'+unit+'.png');th.appendChild(img);heading_row.appendChild(th);var td=document.createElement('td');var text=document.createTextNode(unit_prod[unit]);td.appendChild(text);unit_row.appendChild(td);}return table;}if(!check_overview()){if(check_group){location.href='game.php?screen=overview_villages&mode=prod&group=0';}else{location.href='game.php?screen=overview_villages&mode=prod';}return;}var unit_prod={};var tbody=find_tbody();var rows=get_element_childs(tbody);for(var i=1,len=rows.length;i<len;i++){var images=get_element_childs(get_element_childs(rows[i])[7]);for(var j=0,lenj=images.length;j<lenj;++j){var img=images[j];var matches=/unit_(\w+)\.png/.exec(img.getAttribute('src'));var cnt=img.getAttribute('title').split('-');var unit_name=matches[1];if(typeof(unit_prod[unit_name])=='undefined'){unit_prod[unit_name]=0;}unit_prod[unit_name]+=parseInt(cnt[0],10);}}tbody.parentNode.parentNode.insertBefore(generate_unit_prod_dom(unit_prod),tbody.parentNode);})();

-edit-
Dieses Skript stelle ich privat zur Verfügung, daher kein offizieller Support seitens InnoGames.
 
Zuletzt bearbeitet von einem Moderator:

DeletedUser

Gast
ich weiss nicht ob du das zu support zählst:

auf welchen welten funktioniert das?
auf s13 öffnet sich bei mir nur n neuer tab und das wars :p

(brauch das skript nicht unbedingt, wollte es nur mal ausprobieren und hab dies festgestellt)
 

DeletedUser

Gast
Eigentlich sollte das weltenunabhängig sein.

Welcher Browser (inkl. Versionsnummer)? Schonmal probiert evt. zum Schluss an die Funktion noch rein "return false;" ranzumachen?

Getestet hab ich es nur in Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9) Gecko/2008060309 Firefox/3.0 und auf meinem lokalen Testserver (Einstellungen sind dort gemischt und entsprechen keiner bestimmten Welt, sollte aber für den Inhalt der Produktionsübersicht nicht relevant sein).

In Opera funktioniert es schonmal nicht, warum auch immer. Ich untersuche das morgen mal genauer.

Und zum Support: Kein offizieller Support heißt ja nicht, das ich generell keinen Support gebe. Nur der Support ist dann von mir als private Person und nicht von mir als Angestellter von InnoGames.

-edit-

Opera ist doof. DOM-Standard sagt, element.ELEMENT_NODE (da jedes Element auch eine Node ist) muss da sein. Opera scheint da anderer Meinung zu sein. tr.ELEMENT_NODE bzw. img.ELEMENT_NODE sind undefined. Laut Opera Specs soll Opera aber ELEMENT_NODE unterstützen. Tut es aber nicht. Wer weiß, was ich falsch mache, kann sich ja mal melden. Man könnte auch element.ELEMENT_NODE einfach durch 1 ersetzen, aber das möchte ich nicht, nur weil ein Browser mich da ärgern will.

Und zum öffnen im neuen Tab: Evt. das Häkchen bei "Im neuen Fenster öffnen" aktiviert?

-edit2-
Nun aktualisierte Version, die auch in Opera läuft.
 
Zuletzt bearbeitet von einem Moderator:

DeletedUser

Gast
Meinetwegen auch für die Rekrutierungsübersicht:
Code:
(function() {
  var trans = {
    'training': 'Ausbildung'
  };

  var units = {
    'Speerträger': 'spear',
    'Schwertkämpfer': 'sword'
  };

  function get_element_childs(node) {
    var element_childs = [];
    for(var i = 0, len = node.childNodes.length; i < len; ++i) {
      if (node.childNodes[i].nodeType == 1) {
        element_childs.push(node.childNodes[i]);
      }
    }
    return element_childs;
  }

  function check_train() {
    var url = location.href + '';
    if (url.search(/screen=train/) == -1) {
      return false;
    }
    
    return true;
  }
  
  function find_tbodies() {
    var tbodies = [];
    var ths = document.getElementsByTagName('th');
    for (var i = 0, len = ths.length; i < len; ++i) {
      if (ths[i].firstChild.nodeValue == trans['training']) {
        tbodies.push(ths[i].parentNode.parentNode);
      }
    }
    return tbodies;
  }

  function generate_unit_prod_dom(unit_prod) {
    var table = document.createElement('table');
    var heading_row = document.createElement('tr');
    var unit_row = document.createElement('tr');
    table.appendChild(heading_row);
    table.appendChild(unit_row);
    for (var unit in unit_prod) {
      var th = document.createElement('th');
      var img = document.createElement('img');
      img.setAttribute('src', 'graphic/unit/unit_' + unit + '.png');
      th.appendChild(img);
      heading_row.appendChild(th);

      var td = document.createElement('td');
      var text = document.createTextNode(unit_prod[unit]);
      td.appendChild(text);
      unit_row.appendChild(td);
    }

    return table;
  }

  function build_unit_regexp()
  {
    var unit_regexp = '(\\d+)\\s';
    var tmp = [];
    for (unit in units) {
      tmp.push(unit);
    }
    return new RegExp(unit_regexp + '(' + tmp.join('|') + ')')
  }

  if (!check_train()) {
    location.href = 'game.php?screen=train';
    return;
  }


  var unit_regexp = build_unit_regexp();
  var unit_prod = {};
  var tbodies = find_tbodies();
  var unit_prod = {};
  for (var tbi = 0; tbi < tbodies.length; ++tbi) {
    var rows = get_element_childs(tbodies[tbi]);
    for (var rowsi = 1; rowsi < rows.length; ++rowsi) {
      var matches = unit_regexp.exec(get_element_childs(rows[rowsi])[0].firstChild.nodeValue);
      if (matches !== null) {
      	var unit_name = units[matches[2]];
      	if (typeof(unit_prod[unit_name]) == 'undefined') {
      		unit_prod[unit_name] = 0;
      	}
      	unit_prod[unit_name] += parseInt(matches[1], 10);
      }
    }
  }
  tbodies[0].parentNode.parentNode.insertBefore(generate_unit_prod_dom(unit_prod), tbodies[0].parentNode);
})();

Komprimiert:
Code:
javascript:(function(){var trans={'training':'Ausbildung'};var units={'Speerträger':'spear','Schwertkämpfer':'sword'};function get_element_childs(node){var element_childs=[];for(var i=0,len=node.childNodes.length;i<len;++i){if(node.childNodes[i].nodeType==1){element_childs.push(node.childNodes[i]);}}return element_childs;}function check_train(){var url=location.href+'';if(url.search(/screen=train/)==-1){return false;}return true;}function find_tbodies(){var tbodies=[];var ths=document.getElementsByTagName('th');for(var i=0,len=ths.length;i<len;++i){if(ths[i].firstChild.nodeValue==trans['training']){tbodies.push(ths[i].parentNode.parentNode);}}return tbodies;}function generate_unit_prod_dom(unit_prod){var table=document.createElement('table');var heading_row=document.createElement('tr');var unit_row=document.createElement('tr');table.appendChild(heading_row);table.appendChild(unit_row);for(var unit in unit_prod){var th=document.createElement('th');var img=document.createElement('img');img.setAttribute('src','graphic/unit/unit_'+unit+'.png');th.appendChild(img);heading_row.appendChild(th);var td=document.createElement('td');var text=document.createTextNode(unit_prod[unit]);td.appendChild(text);unit_row.appendChild(td);}return table;}function build_unit_regexp(){var unit_regexp='(\\d+)\\s';var tmp=[];for(unit in units){tmp.push(unit);}return new RegExp(unit_regexp+'('+tmp.join('|')+')')}if(!check_train()){location.href='game.php?screen=train';return;}var unit_regexp=build_unit_regexp();var unit_prod={};var tbodies=find_tbodies();var unit_prod={};for(var tbi=0;tbi<tbodies.length;++tbi){var rows=get_element_childs(tbodies[tbi]);for(var rowsi=1;rowsi<rows.length;++rowsi){var matches=unit_regexp.exec(get_element_childs(rows[rowsi])[0].firstChild.nodeValue);if(matches!==null){var unit_name=units[matches[2]];if(typeof(unit_prod[unit_name])=='undefined'){unit_prod[unit_name]=0;}unit_prod[unit_name]+=parseInt(matches[1],10);}}}tbodies[0].parentNode.parentNode.insertBefore(generate_unit_prod_dom(unit_prod),tbodies[0].parentNode);})();

Wichtig: Die Liste der Einheiten muss noch ergänzt werden, ich war zu faul dazu. Siehe Object units.
Zum komprimieren hab ich http://fmarcia.info/jsmin/test.html verwendet.

Bezüglich Support etc. gilt gleiches wie beim vorigen Script.
 

DeletedUser61033

Gast
Vielen Dank, is bestimmt sehr nützlich :)
 
Zuletzt bearbeitet von einem Moderator:

DeletedUser

Gast
erstmal sorry dass ich mich erst jetzt wieder melde, hab irgendwie verpeilt, dass hier shcon ne antwort steht -.-*

Welcher Browser (inkl. Versionsnummer)? Schonmal probiert evt. zum Schluss an die Funktion noch rein "return false;" ranzumachen?

browser ist ff 2.0.0.14; aktualisierung auf ff3 werd ich erst machen, wenn so manche plugins auch fuer ff3 angepasst wurden. ^^

das mit dem neuen fenster hat sich erledigt, ich trottel hab aus versehen nen alten eintrag genommen, weil meine schnelleiste schon zu voll war und hab vergessen, dass häkchen rauszunehmen -.-* (wer denkt denn daran :p)

nichts desto trotz, kann ich die truppen die im bau sind nicht aus der rekübersicht auslesen... :(
es tut sich einfach nichts, auch nicht mit der aktuellen version.
"return false;" hinten anzuhängen hat nix geholfen, da tut sich genausowenig :/
 

DeletedUser

Gast
Du hast auch das richtige Skript?

Für das Auslesen aus der Produktionsübersicht (Übersichten->Produktionsübersicht) das erste Skript. Für das Auslesen aus der Rekrutierungsübersicht (Dorfübersicht->Einheiten->rekrutieren) das zweite Skript. Bitte beachte, dass beim zweiten Skript noch die Liste der Einheiten entsprechend ergänzt werden muss, da sind im Moment nur Speerträger und Schwertkämpfer drin. Ergänzen inklusive Mehrzahl und Einzahl ('Katapult': 'catapult', 'Katapulte': 'catapult').
 

DeletedUser

Gast
danke dir vielmals für deine geduld und deine erklärungen :)
lesen soll doch wirlich bilden; sollte ich mir mal zu herzen nehmen ^^

habs jetzt angepasst und es funktioniert nun einwandfrei :D
b(^_^)d
 

DeletedUser

Gast
da ich per PN darum gebeten wurde hier nochmal der komplette code für die Rekrutierungsübersicht:

Code:
javascript:(function(){var trans={'training':'Ausbildung'};var units={'Speertr%C3%A4ger':'spear','Schwertk%C3%A4mpfer':'sword','Axtk%C3%A4mpfer':'axe', 'Bogensch%C3%BCtze':'archer', 'Bogensch%C3%BCtzen':'archer','Sp%C3%A4her':'spy','Leichte Kavallerie':'light','Berittener Bogensch%C3%BCtze':'marcher','Berittene Bogensch%C3%BCtzen':'marcher','Schwere Kavallerie':'heavy','Rammbock':'ram','Ramb%C3%B6cke':'ram','Katapult':'catapult','Katapulte':'catapult'};function get_element_childs(node){var element_childs=[];for(var i=0,len=node.childNodes.length;i<len;++i){if(node.childNodes[i].nodeType==1){element_childs.push(node.childNodes[i]);}}return element_childs;}function check_train(){var url=location.href+'';if(url.search(/screen=train/)==-1){return false;}return true;}function find_tbodies(){var tbodies=[];var ths=document.getElementsByTagName('th');for(var i=0,len=ths.length;i<len;++i){if(ths[i].firstChild.nodeValue==trans['training']){tbodies.push(ths[i].parentNode.parentNode);}}return tbodies;}function generate_unit_prod_dom(unit_prod){var table=document.createElement('table');var heading_row=document.createElement('tr');var unit_row=document.createElement('tr');table.appendChild(heading_row);table.appendChild(unit_row);for(var unit in unit_prod){var th=document.createElement('th');var img=document.createElement('img');img.setAttribute('src','graphic/unit/unit_'+unit+'.png');th.appendChild(img);heading_row.appendChild(th);var td=document.createElement('td');var text=document.createTextNode(unit_prod[unit]);td.appendChild(text);unit_row.appendChild(td);}return table;}function build_unit_regexp(){var unit_regexp='(\\d+)\\s';var tmp=[];for(unit in units){tmp.push(unit);}return new RegExp(unit_regexp+'('+tmp.join('|')+')')}if(!check_train()){location.href='game.php?screen=train';return;}var unit_regexp=build_unit_regexp();var unit_prod={};var tbodies=find_tbodies();var unit_prod={};for(var tbi=0;tbi<tbodies.length;++tbi){var rows=get_element_childs(tbodies[tbi]);for(var rowsi=1;rowsi<rows.length;++rowsi){var matches=unit_regexp.exec(get_element_childs(rows[rowsi])[0].firstChild.nodeValue);if(matches!==null){var unit_name=units[matches[2]];if(typeof(unit_prod[unit_name])=='undefined'){unit_prod[unit_name]=0;}unit_prod[unit_name]+=parseInt(matches[1],10);}}}tbodies[0].parentNode.parentNode.insertBefore(generate_unit_prod_dom(unit_prod),tbodies[0].parentNode);})();
 

DeletedUser

Gast
dein neues script funktioniert bei mir (w26) nich...
wobei das erste script ohne probleme läuft ;)
 

DeletedUser

Gast
Welcher Browser (inkl. Versionsnummer)? Hast du die angepasste Version von Sunrune probiert?
 

DeletedUser

Gast
Hast du die angepasste Version von Sunrune probiert?
bei seiner vorherigen hätt ich ja wahrscheinlich selber fehler reingebaut, ausserdem hätt ich dann arbeit gehabt ;)

naja zurück zum thema opera 9.50...

blackmole's version klappt ja herrvoragend, nur das ich es für einzelne dörfer will ;)
 

DeletedUser

Gast
Ich kann das Problem nicht nachvollziehen. Ich hab Sunrunes Version genommen und die geht bei mir in Opera 9.5 einwandfrei.

Irgendwelche Fehlersymptome, die du benennen kannst?
Fehlermeldungen in der Fehlerconsole (Tools->Advanced->Error Console)?
 

DeletedUser

Gast
message: Statement on line 41: Cannot convert undefined or null to Object
td[0].appendChild(link);

die extra zeile fügt er ja auch ohne probleme ein, nur bleibt sie leer...
aber auf die fehlerconsole hätt ich auch früher kommen können ;)
 

DeletedUser

Gast
und nun hab ich wieder einen meiner lustigen momente und nerv hier mal rum :p

da meine schnelleiste doch recht voll ist, wollte ich das skript als GM skript benutzen, sprich eine permanente anzeige im rekrutierungsbildschirm einbaun. *gg*
klappt auch soweit ganz gut, wenn es nur skav, rammen oder kattas zählen muss... bei allen anderen einheiten sind leider umlaute drin, sodass FF oder GM, ka welches von beiden, die entsprechenden mengen nicht auslesen kann :(

was könnte man da machen, damit es auch mit den umlauten funzt?
 

DeletedUser61033

Gast
ä --> %C3%A4 (ã¤)
ö --> %C3%B6 (ã¶)
ü --> %C3%Bc (ã¼)
 
Oben