Here's a guide that hopefully will help you find everything you need to know regarding tagging incomings, no matter how large, at once.

Before reading on, ensure you have completed the following checklist:

  • Download Opera
  • Set up a Sort Script in your Quickbar
  • Set up a Tagger Script in your Quickbar

To download Opera, click here.

To install Snap Links as an extension, click here.
The Sort Script I use, along with the Tagger Script I use, are both below. Be aware that the Tagger Script may need editing for different world settings, and that with each game update, the scripts are likely to need repair.

I prefer to keep my tagging as short as possible - longer lines tend to slow down defending, and is unnecessary. As such, I only have the unit type, who is attacking, where from, & the send time as part of my tagging method. You can use more/less information, but this is what I consider to be the essentials.


  • Sort Script.

    javascript: /* === CUSTOMIZABLE === */ var vScript={ URLs:[ '', '' ], id:'fnOverviewSorter', config:{}, action:function(){win[](vScript.config);}, runOnce:true }; /* === GENERIC === */'Launcher';{name:'dalesmckay',contact:''}; vScript.version='1.00'; vScript.timeoutMS=3000; vScript.debugEnabled=true; var win=(window.frames.length>0)?window.main:window; win.$(win.document).ready(function(){ function fnDebugLog(msg){if(!vScript.debugEnabled){return;}win.$('body').append(msg);} var isLoaded=false; var ii=0; function fnEmbedScript(){ if(isLoaded){ return; } if(ii>=vScript.URLs.length){ fnDebugLog('(Fail)
    ERROR: No available hosts.

    '); return; } fnDebugLog(((ii>0)?'(Fail)
    ':'')+'Load: '+vScript.URLs[ii]+' ... '); win.$.getScript( vScript.URLs[ii]+'?'+Math.round(Math.random()*1000000), function(){ if(isLoaded){ return; } isLoaded=true; fnDebugLog('(OK)
    '); fnDebugLog('Executing...

    '); win.setTimeout(function(a,b){vScript.action();},200); } ); ii++; if(!isLoaded){ win.setTimeout(function(a,b){fnEmbedScript();},vScript.timeoutMS); } } if(win[]){ if(!vScript.runOnce){ fnDebugLog('Executing...

    '); vScript.action(); } } else{ fnDebugLog(''' - '' v'+vScript.version+'
    '); fnEmbedScript(); } }); void(0);

  • Tagger Script.

    javascript:c='{unit} {player} {coords} {sent}';p=['Scout','LC','HC','Axe','Sword','Ram','***Noble***'];function V(){return 1;}window.onerror=V;function Z(){d=(window.frames.length>0)?window.main.document:document;aid=d.getElementById('editInput').parentNode.innerHTML.match(/id\=(\d+)/)[1];function J(e){vv=e.match(/\d+\|\d+/g);return (vv?vv[vv.length-1].match(/((\d+)\|(\d+))/):null);}function K(e){f=parseInt(e,10);return(f>9?f:'0'+f);}function L(g,e){return g.getElementsByTagName(e);}function N(g){return g.innerHTML;}function M(g){return N(L(g,'a')[0]);}function O(){return k.insertRow(E++);}function W(f){return B.insertCell(f);}function P(g,e){g.innerHTML=e;return g;}function X(e){C=B.appendChild(d.createElement('th'));return P(C,e);}function Y(f){return K(f/U)+':'+K(f%(U)/T )+':'+K(f%T);}U=3600;T=60;R='table';S='width';s=L(document,R);for(j=0;j<s.length;j++){s[j].removeAttribute(S);if(s[j].className=='main'){s=L(L(s[j],'tbody')[0],R);break;}}D=0;for(j=0;j<s.length;j++){s[j].removeAttribute(S);if(s[j].className='vis'){k=s[j];if(t=k.rows){D=t.length;break;}}}for(E=0;E<D;E++){l=t[E];m=(u=l.cells)?u.length:0;if(m){u[m-1].colSpan=5-m;if(N(u[0])=='Arrival:'){Q=new Date(N(u[1]).replace(/<.*/i,''));}else{if(N(u[0])=='Arrival in:'){v=N(u[1]).match(/\d+/ig);}}if(E==1){G=M(u[2]);}if(E==2){w=J(M(u[1]));}if(E==4){x=J(M(u[1]));}}}y=v[0]*U+v[1]*T+v[2]*1;n=w[2]-x[2];o=w[3]-x[3];F=Math.sqrt(n*n+o*o);H=F.toFixed(2);E=D-2;s=L(k,'input');i=s[1];h=s[0];h.size=T;B=O();P(W(0),'Distance:').colSpan=2;P(W(1),H+' Fields').colSpan=2;B=O();X('Unit');X('Sent');X('Duration');X('Name to');c=c.replace(/\{coords\}/i,w[1]).replace(/\{distance\}/i,H).replace(/\{player\}/i,G);for(j in p){z=Math.round([8.99999999928,9.999999998,11.0000000011,18.0000000005,21.9999999993,29.9999999976,34.9999999993][j]*T*F);A=z-y;if(A>0){I=Y(z);B=O();P(W(0),p[j]);P(W(1),A<T&&'just now'||A<U&&Math.floor(A/T)+' mins ago'||Y(A)+' ago');P(W(2),I);C=W(3);q=C.appendChild(i.cloneNode(1));r=C.appendChild(h.cloneNode(1));'I'+j;r.value=c.replace(/\{duration\}/i,I).replace(/\{sent\}/i,new Date(Q.valueOf()-z*1000).toLocaleString().replace(/.\d{4}/i,'').replace(/(\w{3})\w*/i,'$1')).replace(/\{return\}/i,new Date(Q.valueOf()+z*1000).toString().replace(/\w+\s*/i,'').replace(/(\d*:\d*:\d*)(.*)/i,'$1')).replace(/\{unit\}/i,p[j]).replace(/\{attack_id\}/i,aid);q.onmousedown=new Function('h.value=d.getElementById(\'I'+j+'\').value;');}}}Z();

You are now fully set to tag to your heart's content. So, let's cover the method used. This method can be used from 1 to 1.000.000 incoming attacks, so do not worry about the number of incoming.

How To Tag.

Go to the Incoming Overview ingame. Make sure you are not in a specific group of villages.
Next, press F4. This will make the Panels Bar appear. 

If you cannot see this button in the Panels Bar, click the "Plus button", and then select Links.
Click the Links button (pictured above).

Ok, now comes the clever part.
You should see a side bar on the left-hand side with a search box. Type "Attack" in to this. You will end up with a result like this:

Ok. Click and drag slightly off of the Top "Attack", and go down to however many incomings you want to tag, and shift+click on that one to select all. Right-click, and choose "Open all in a background tab".
Note: I would personally never recommend more than 200 in one go, for fear of your Opera crashing. It depends on how strong your computer and internet are - some can only handle 50, others can handle 1000+.

Ok, so you now have a bunch of untagged attacks in your Opera window, all in a bunch of tabs. I would suggest that at this point, you turn on "enable single-key shortcuts" in the Opera preferences relating to Shortcuts, to make this very fast.

Go through each incoming attack pressing 2. Click on your tagging script and then on the attack it must be. If you are active, it should be fairly easy to spot when you were last online, and when the attack therefore must have been sent after. You can use this idea to work out whether an attack is Ram speed or Noble speed, if you are otherwise unsure.

If you are not convinced that you can tag an attack correctly, LEAVE IT OUT FOR NOW. We can use Attack IDs shortly after tagging the remainder.

Ok, so now you've hopefully, within a very short space of time, accurately tagged some/most/all incoming attacks, & can begin defending. If you're completely done tagging, feel free to stop here!


HOWEVER, if you have some attacks that still need to be properly tagged, then we will now use Attack IDs to work out the next ones. So, let's get rid of the tabs. Go to the first tab (with the Incoming Overview), right click on the tab and choose "Close all but Active". You now have 1 tab left open.

Ok, so we now have used one of our two scripts, but have yet to use the second. This is how we will sort by Attack ID. Refresh the overview, and you will find that the incomings you have tagged are now nicely marked. Click the "Sort Script", and you will see a large table appear.

So, click on the down arrow next to Attack ID in the new table that has appeared. They are now sorted in numerical order, newest down to oldest. The earlier the Attack ID, the earlier it was sent (ie, the attacks were sent in this order).

You can see in the above image, that I have failed to tag one attack. However, having Sorted them in to order, I can see that these were all sent in quick succession. As such, I know that the attack was sent by the shown player, between 21:13:33 and 21:14:20 on the 10th of November.. The Attack IDs confirm this:


Now, as I know what time (roughly) the incoming was sent between, I can now go back and check when the attack would have had to have been sent. In this case, the only possible option, owing to such a narrow window and the long-range attack, could be a Ram speed attack. And so I can now tag that correctly.

This is just an example. The further out an attack is sent from, the easier it is to use Attack IDs. The closer an attack is sent from, the closer you will need your Attack ID times, in order to work out the definite type of incoming.

Basically, for Attack IDs, you merely need to work out:

  1. Do you have a specific time period it could have been sent between (ie, 14:00 and 19:00).
  2. What types of attacks could have been sent from the village between those times.
  3. If more than one option, look at how close the Attack ID is to either end. 

If you have 5037 as one Attack ID, for an attack sent at 14:00, and another at 5872 for 19:00, with the unknown incoming having Attack ID of 5718, it is fairly simple to assume that the attack was sent much closer to 19:00 than 14:00, and so it's more likely to be the troop type that would have been sent at that period of time, as opposed to an earlier one.

I hope this guide helps clear up some ideas regarding how to Tag. This should be a method used alongside the following guides:

Approaching Defending: A How To.
Defensive Techniques.

Tagging is a necessary requirement in order to defend effectively. However, Tagging alone will not save you villages.


View All


You must first activate your account before posting.
You must be signed in to post on this wall.