There are 78 previous versions of this script.
Add Syntax Highlighting (this will take a few seconds, probably freezing your browser while it works)
// ==UserScript==
// @name stnkvcmls Ikariam CR Converter
// @namespace
// @version 1.0.5
// @description Converts combat reports for Ikariam browser game
// @license GNU GPL v3 (http://www.gnu.org/copyleft/gpl.html)
// @include http://s*.ikariam.*/*
// @exclude
// @exclude
// @require http://code.jquery.com/jquery-1.7.1.min.js
// @require http://stnkvcmls.googlecode.com/hg/ikariam_converter/stn_cr_con_data.js
// @require http://stnkvcmls.googlecode.com/hg/ikariam_converter/stn_cr_con_settings.js
// @require http://stnkvcmls.googlecode.com/hg/ikariam_converter/jquery.event.drag-1.5.min.js
// @history 1.0.5 Feature: Added new units (for 0.4.5).
// @history 1.0.5 BugFix: Fixed bug where no units were shown.
// @history 1.0.4 BugFix: Fixed bug when defender has units only in last row.
// @history 1.0.3 BugFix: Minor bugfixes.
// @history 1.0.3 BugFix: Fixed bug when there's only allied troops in town.
// @history 1.0.2 Feature: Added button for manual script update.
// @history 1.0.2 BugFix: Unable to use converter settings on small resolutions or small window size.
// @history 1.0.1 BugFix: For some reason, parsing attacker/defenders units isnt working. Back to old code.
// @history 1.0.1 BugFix: Can not convert when there's more then 7 types of units.
// @history 1.0.1 BugFix: Can not convert when there's no defenders.
// @history 1.0.0 Feature: Changed interface.
// @history 1.0.0 Feature: Some changes to the engine.
// @history 1.0.0 Feature: Added color changing option.
// @history 1.0.0 Feature: Changed updater script.
// @history 1.0.0 Feature: Send report with bbcode ingame.
// @history 1.0.0 Feature: Total and round damage in detailed report.
// ==/UserScript==
const lang = getLang();
const crConvVersion = "1.0.5";
//ScriptUpdater.check(58998, crConvVersion);
var settings = new Settings();
var textArea;
reportElements = {
type: null,
for_near: null,
place: null,
time: null,
attackers: [],
defenders: [],
cities: { attackers: [], defenders: []},
units: {codes: [], attackers: [], defenders: []},
winners: [],
losers: [],
loot: [],
lootTotal: 0,
isThereLoot: false
}
reports = {
bbcode: "",
plaintext: "",
htmlcode: ""
}
damageDetail = {
attacker: [],
defender: []
}
setGMValues();
setTabEvents = function(){
$("div.tab_inactive").click(function (){
if($(this).attr('class') != 'tab tab_active'){
$('div.tab_active').removeClass('tab_active').addClass('tab_inactive');
$(this).removeClass('tab_inactive').addClass('tab_active').css('color','#542c0f');
setTabEvents();
}
})
}
setOtherEvents = function(){
$('div#bbcode').click(function (){
if($('#wrap1').css('display') == 'none'){
$('#wrap2').fadeOut(500);
$('#wrap1 #stnkvcmlsTextArea').val(reports.bbcode);
$('#wrap1').fadeIn(500);
}
else{
$('#wrap1').fadeOut(500);
$('#wrap2 #stnkvcmlsTextArea').val(reports.bbcode);
$('#wrap2').fadeIn(500);
}
});
$('div#plaintext').click(function (){
if($('#wrap1').css('display') == 'none'){
$('#wrap2').fadeOut(500);
$('#wrap1 #stnkvcmlsTextArea').val(reports.plaintext);
$('#wrap1').fadeIn(500);
}
else{
$('#wrap1').fadeOut(500);
$('#wrap2 #stnkvcmlsTextArea').val(reports.plaintext);
$('#wrap2').fadeIn(500);
}
});
$('div#htmlcode').click(function (){
if($('#wrap1').css('display') == 'none'){
$('#wrap2').fadeOut(500);
$('#wrap1 #stnkvcmlsTextArea').val(reports.htmlcode);
$('#wrap1').fadeIn(500);
}
else{
$('#wrap1').fadeOut(500);
$('#wrap2 #stnkvcmlsTextArea').val(reports.htmlcode);
$('#wrap2').fadeIn(500);
}
});
$('#wrap1 #stnkvcmlsTextArea').click(function (){
$(this).select();
});
$('#wrap2 #stnkvcmlsTextArea').click(function (){
$(this).select();
});
$('div#bbcode').hover(function(){
if($(this).attr('class') != 'tab tab_active') $(this).css('color','#FF9933');
},function(){
$(this).css('color','#542c0f');
});
$('div#plaintext').hover(function(){
if($(this).attr('class') != 'tab tab_active') $(this).css('color','#FF9933');
},function(){
$(this).css('color','#542c0f');
});
$('div#htmlcode').hover(function(){
if($(this).attr('class') != 'tab tab_active') $(this).css('color','#FF9933');
},function(){
$(this).css('color','#542c0f');
});
$('#settings').click(function (){
settings.show(this);
});
$('#settings').hover(function (){
$(this).css('color','#FF9933');
},function (){
$(this).css('color','#542c0f');
});
$('#update').click(update);
$('#update').hover(function (){
$(this).css('color','#FF9933');
},function (){
$(this).css('color','#542c0f');
});
}
update = function(){
//ScriptUpdater.forceNotice(58998, crConvVersion);
}
createTextArea = function(){
if( language[lang] == null ){
alert("Language is not suported. Visit http://userscripts.org/scripts/show/58998 .");
return 0;
}
GM_addStyle(
'#buttons { width: 656px; height: 22px; background-color: #FDF7DD; margin-left: 9px; padding-top: 10px; }' +
'#reportDiv p{ font-size: 14px; font-weight: bold; color: #542C32; background-color: #FDF7DD; }' +
'.tab{ padding: 4px 10px; background-color: #FDF7DD; height: 14px; /*width: 80px;*/ text-align: center; cursor: pointer; font-weight: bold;}' +
'.tab_inactive{ background-color: #FDF7DD; float: left; }' +
'.tab_active{ background-color: #FEDC9C; float: left; }' +
'#stnkvcmlsTextArea{ border: solid 2px #FEDC9C; width: 648px; height: 150px; overflow: auto; background-color:#FDF7DD; display: block; margin: 0 auto; }' +
'#preview{ border: solid 2px #FEDC9C; width: 642px; margin: 0 auto; padding: 5px;}'+
'#update{ float: right; cursor: pointer; }'
);
$("div#mainview").append(
'<div id="reportDiv" class=contentBox01h>' +
'<h3 class=header> stnkvcmls Ikariam CR Converter: Greasemonkey Edition, '+language[lang].version+' '+crConvVersion+
'<div id=update>'+language[lang].update+'</div></h3>'+
'<div class=content>'+
'<div id="buttons"> '+
'<div class="tab tab_active" id=bbcode> '+language[lang].bbcode+' </div>'+
'<div class="tab tab_inactive" id=plaintext> '+language[lang].plaintext+' </div>'+
'<div class="tab tab_inactive" id=htmlcode> '+language[lang].htmlcode+' </div>'+
'<div class=tab style="float: right;" id="settings"> '+language[lang].settings+' </div>' +
'</div> '+
'<div style="position: relative; margin-left: 9px; height: 170px;">'+
'<div id=wrap1 style="display: none; position: absolute; top: 0; left: 0; z-index: 90000;"><textarea id="stnkvcmlsTextArea" style="" name="text2" id="text2" value=""> </textarea><br></div>'+
'<div id=wrap2 style="display: block; position: absolute; top: 0; left: 0; z-index: 90001;"><textarea id="stnkvcmlsTextArea" style="" name="text2" id="text2" value=""> </textarea><br></div>'+
'</div>'+
'<div id="preview"></div><br>'+
'</div>'+
'<div class=footer></div>'+
'</div>'
);
setTabEvents();
setOtherEvents();
textArea = $('#wrap2 #stnkvcmlsTextArea');
parseReport();
settings.init(convertReport);
}
preview = function(){
var par = $("div#preview");
par.html(bbcode2html(textArea.val()));
}
parseReport = function(){
textArea.val("");
var tmp = $("#troopsReport h3.header")[0];
/* battle type */
tmp2 = tmp.childNodes[0].nodeValue;
if( tmp2.indexOf(language[lang].battleLand) != -1) reportElements.type = language[lang].battleLand;
else reportElements.type = language[lang].battleSea;
/* for_near / place */
if( (i = tmp2.indexOf(language[lang].forCity)) != -1) reportElements.for_near = language[lang].forCity;
else{
reportElements.for_near = language[lang].nearCity;
i = tmp2.indexOf(language[lang].nearCity);
}
reportElements.place = tmp2.substring( i + reportElements.for_near.length + 1, tmp2.length - 1);
/* time */
reportElements.time = "[" + $('span.date').html().substring( 1, $('span.date').html().length - 1) + "]";
tmp = $("div.attacker")
if( tmp.html() == $("div.textgreen").html()) attackersReport = 1;
else attackersReport = 0;
/* attacker */
tmp = $('div.attacker span').text().split(',');
i = 0;
for(var el in tmp){
if(( k = tmp[el].indexOf(language[lang].from)) != -1){
reportElements.attackers.push(tmp[el].substring(0,k));
if(reportElements.cities.attackers[i] == null) reportElements.cities.attackers[i] = new Array();
reportElements.cities.attackers[i].push(tmp[el].substring(k+language[lang].from.length));
i++;
}
else{
reportElements.cities.attackers[i-1].push(tmp[el]);
}
}
/* defender */
tmp = $('div.defender span').text().split(',');
i = 0;
for(var el in tmp){
if(( k = tmp[el].indexOf(language[lang].from)) != -1){
reportElements.defenders.push(tmp[el].substring(0,k));
if(reportElements.cities.defenders[i] == null) reportElements.cities.defenders[i] = new Array();
reportElements.cities.defenders[i].push(tmp[el].substring(k+language[lang].from.length));
i++;
}
else{
reportElements.cities.defenders[i-1].push(tmp[el]);
}
}
/* units */
var unitCodes = $("td.headline");
k = 0;
for( i = 0; i < unitCodes.length; i++ ){
if(unitCodes[i].childNodes[0] != null && unitCodes[i].childNodes[0].nodeName == "DIV")
{
reportElements.units.codes[k] = unitCodes[i].childNodes[0].className.substring(unitCodes[i].childNodes[0].className.indexOf("s") + 1);
k++;
}
}
/* attacker */
var units1 = $("tr.textgreen");
var units2 = $("tr.textred");
var uNum = 0;
textArea.value = "";
k = 0;
var no_def = 1;
for( i = 0; i < units1.length; i++ ){
var tr = units1[i];
if( tr.childNodes[1].childNodes[0].nodeValue != language[lang].alliedTroops) no_def = 0;
}
for( i = 0; i < units1.length; i++ ){
var tr = units1[i];
textArea.value += "\n";
if( tr.childNodes[1].childNodes[0].nodeValue == language[lang].alliedTroops && no_def == 0) k = uNum;
uNum = k;
for( j = 3; j < tr.childNodes.length; j+= 2){
var td = tr.childNodes[j];
var left = 0;
var lost = 0;
if(td.childNodes.length != 0 ){
if( reportElements.units.attackers[k] == null ) reportElements.units.attackers[k] = { left: 0, lost: 0 };
if( reportElements.units.defenders[k] == null ) reportElements.units.defenders[k] = { left: 0, lost: 0 };
if(td.childNodes.length == 1) tmp2 = td.childNodes[0].nodeValue.replace( /\s/g, "" );
else tmp2 = td.childNodes[1].childNodes[0].nodeValue.replace( /\s/g, "" );
if( tmp2 != "-" ){
left = parseFloat(tmp2.substring(0,tmp2.indexOf("(")));
if( left < 0 ){
left = 0;
tmp2 = tmp2.substring(1);
}
lost = parseFloat(tmp2.substring(tmp2.indexOf("-")+1,tmp2.indexOf(")")));
}
textArea.value += i + " " + reportElements.units.codes[k] + ": " + left + "(-" + lost + ")\n";
if( attackersReport == 1 ){
reportElements.units.attackers[k].left += left;
reportElements.units.attackers[k].lost += lost;
}
else{
reportElements.units.defenders[k].left += left;
reportElements.units.defenders[k].lost += lost;
}
k++;
}
}
}
/* if there's no units (eaven -) in all but last row */
k = 0;
var line = $("tr.line");
var n = 0;
for( i = 0; i < line.length; i++ ){
var tmp = line[i].previousSibling.previousSibling.className;
if( tmp != "textgreen" && tmp != "textred" ){
for( k = 0; k < 7; k++ ){
if( reportElements.units.defenders[k] == null ) reportElements.units.defenders[k] = { left: 0, lost: 0 };
}
n = k;
}
}
/* defender */
no_def = 1;
for( i = 0; i < units2.length; i++ ){
var tr = units2[i];
if( tr.childNodes[1].childNodes[0].nodeValue != language[lang].alliedTroops) no_def = 0;
}
for( i = 0; i < units2.length; i++ ){
var tr = units2[i];
textArea.value += "\n";
if( tr.childNodes[1].childNodes[0].nodeValue == language[lang].alliedTroops && no_def == 0) k = uNum;
uNum = k;
for( j = 3; j < tr.childNodes.length; j+= 2){
var td = tr.childNodes[j];
var left = 0;
var lost = 0;
if(td.childNodes.length != 0 ){
if( reportElements.units.attackers[k] == null ) reportElements.units.attackers[k] = { left: 0, lost: 0 };
if( reportElements.units.defenders[k] == null ) reportElements.units.defenders[k] = { left: 0, lost: 0 };
if(td.childNodes.length == 1) tmp2 = td.childNodes[0].nodeValue.replace( /\s/g, "" );
else tmp2 = td.childNodes[1].childNodes[0].nodeValue.replace( /\s/g, "" );
if( tmp2 != "-" ){
left = parseFloat(tmp2.substring(0,tmp2.indexOf("(")));
if( left < 0 ){
left = 0;
tmp2 = tmp2.substring(1);
}
lost = parseFloat(tmp2.substring(tmp2.indexOf("-")+1,tmp2.indexOf(")")));
}
textArea.value += i + " " + reportElements.units.codes[k] + ": " + left + "(-" + lost + ")\n";
if( attackersReport == 0 ){
reportElements.units.attackers[k].left += left;
reportElements.units.attackers[k].lost += lost;
}
else{
reportElements.units.defenders[k].left += left;
reportElements.units.defenders[k].lost += lost;
}
k++;
}
}
}
/*$("#troopsReport table.overview tr").each(function() {
if ($(this).find("th div").size() > 0) {
unitSide = reportElements.units.attackers;
unitCountStart = reportElements.units.codes.length;
$(this).find("th div").each(function() { reportElements.units.codes.push($(this).attr('class').substring($(this).attr('class').indexOf('s')+1)); });
}
else if ($(this).find("td[colspan='8'][class^='col1 nobg']").size() == 1) unitSide = reportElements.units.defenders;
else if ($(this).find("td.numbers").size() == reportElements.units.codes.length) {
unitCount = unitCountStart;
$(this).find("td.numbers").each(function() {
var details = $(this).text();
if (details.indexOf("(") != -1) {
if (unitSide[unitCount] == null) { unitSide[unitCount] = { left: 0, lost: 0 } }
unitSide[unitCount].left += parseInt(details.substr(0, details.indexOf('(')).replace(/\s+/, ''));
unitSide[unitCount].lost += parseInt(details.substr(details.indexOf('(') + 2).replace(/\s+/, '').replace(/\)/, ''));
}
else if (unitSide[unitCount] == null) unitSide[unitCount] = { left: 0, lost: 0 };
unitCount++
});
}
}); */
/* winners */
tmp = $("div.winners");
if( tmp[0] != null ){
tmp2 = tmp[0].childNodes[2].nodeValue;
reportElements.winners = tmp2.replace(/^\s+/, '').replace(/\s+$/, '').split(", ");
}
/* losers */
tmp = $("div.losers");
if( tmp[0] != null ){
tmp2 = tmp[0].childNodes[2].nodeValue;
reportElements.losers = tmp2.split(", ");
}
/* loot */
isThereLoot = false;
$("ul.resources").each(function(){
if( $(this).parent().attr("id") != "cityResources" ){
isThereLoot = true;
var length = $(this).contents().length;
var par = $(this).parent();
var length2 = par.contents().length;
var index;
if( length2 == 2 ) index = findInArray(reportElements.winners, par.contents()[0].nodeValue);
else if( length2 == 4 ) index = findInArray(reportElements.winners, par.contents()[2].nodeValue);
else if( length2 == 6 ) index = findInArray(reportElements.winners, par.contents()[3].childNodes[0].nodeValue);
var res = 0;
for( var i = 0; i < length; i++ ){
if( $(this).contents()[i].className == "wood" ) res = 0;
else if( $(this).contents()[i].className == "wine" ) res = 1;
else if( $(this).contents()[i].className == "marble" ) res = 2;
else if( $(this).contents()[i].className == "glass" ) res = 3;
else if( $(this).contents()[i].className == "sulfur" ) res = 4;
if(reportElements.loot[index] == null) reportElements.loot[index] = new Array();
reportElements.loot[index][res] = $(this).contents()[i].childNodes[1].nodeValue;
reportElements.lootTotal += parseInt($(this).contents()[i].childNodes[1].nodeValue);
}
}
});
convertReport();
}
convertReport = function(){
var line = "";
var i;
var font = "[font='Courier New, Courier, mono']";
options[lang] = eval(GM_getValue("options_"+lang, null));
colors = eval(GM_getValue("colors_"+lang,null));
for(i = 0; i < 50; i++) line += "-";
if(reportElements.units.defenders == ""){
for(i = 0; i < reportElements.units.codes.length; i++){
reportElements.units.defenders[i] = {left: 0, lost: 0 };
}
}
/* battle for - city */
var textBattleFor = "[size=10][color=" + colors.text + "]" + line + "[/color][/size]" + "\n";
if(options[lang].cities == true) textBattleFor += "[b][size=12][color=" + colors.title + "]" + reportElements.type + " " + reportElements.for_near + " " + reportElements.place + "[/color][/size][/b]";
else textBattleFor += "[b][size=12][color=" + colors.title + "]" + reportElements.type + "[/color][/size][/b]";
textBattleFor += "\n";
/* battle for - time/date */
textBattleFor += "[b][size=12][color=" + colors.otherNumbers + "]" + reportElements.time + "[/color][/size][/b]";
textBattleFor += "\n" + "[size=10][color=" + colors.text + "]" + line + "[/color][/size]" + "\n";
/* attacker */
var counter = 0;
var attacker;
if(reportElements.attackers.length > 1) attacker = language[lang].attackers;
else attacker = language[lang].attacker;
var textAttacker = "[size=10][color=" + colors.title + "]" + attacker + ":[/color]" + "\n";
for(i = 0; i < reportElements.attackers.length; i++){
var length = reportElements.cities.attackers[i].length;
counter += reportElements.attackers[i].length;
if(counter > 45) { textAttacker += "\n"; counter -= 45; }
textAttacker += "[color=" + colors.attacker + "]" + reportElements.attackers[i];
if(options[lang].cities == true){
counter += language[lang].from.length;
if(counter > 45) { textAttacker += "\n"; counter -= 45; }
textAttacker += language[lang].from;
for(j = 0; j < length; j++){
counter += reportElements.cities.attackers[i][j].length;
if(counter > 45) { textAttacker += "\n"; counter -= 45; }
textAttacker += reportElements.cities.attackers[i][j];
if(j != length-1) { textAttacker += ", "; counter += 2; }
}
}
if(i < reportElements.attackers.length-1) { textAttacker += "; "; counter += 2; }
textAttacker += "[/color]";
}
textAttacker += "\n[color=" + colors.text + "]" + line + "[/color][/size]" + "\n";
/* defender */
counter = 0;
var defender;
if(reportElements.defenders.length > 1) defender = language[lang].defenders;
else defender = language[lang].defender;
var textDefender = "[size=10][color=" + colors.title + "]" + defender + ":[/color]" + "\n";
for(i = 0; i < reportElements.defenders.length; i++){
var length = reportElements.cities.defenders[i].length;
counter += reportElements.defenders[i].length;
if(counter > 45) { textDefender += "\n"; counter -= 45; }
textDefender += "[color=" + colors.defender + "]" + reportElements.defenders[i];
if(options[lang].cities == true){
counter += language[lang].from.length;
if(counter > 45) { textDefender += "\n"; counter -= 45; }
textDefender += language[lang].from;
for(j = 0; j < length; j++){
counter += reportElements.cities.defenders[i][j].length;
if(counter > 45) { textDefender += "\n"; counter -= 45; }
textDefender += reportElements.cities.defenders[i][j];
if(j != length-1) { textDefender += ", "; counter += 2; }
}
}
if(i < reportElements.defenders.length-1) { textDefender += "; "; counter += 2; }
textDefender += "[/color]";
}
textDefender += "\n[color=" + colors.text + "]" + line + "[/color][/size]" + "\n";
/* attacker.........defender */
var dots = "";
while(50 - attacker.length - dots.length > defender.length) dots += ".";
var textUnits = "[size=10][color=" + colors.attacker + "]" + attacker + "[/color]" +
"[color=#F6EBBD]" + dots +"[/color]" +
"[color=" + colors.defender + "]" + defender + "[/color]" + "\n";
/* units */
var units = new Array();
var textUnitsTmp = new Array();
units[0] = new Array(); units[1] = new Array();
textUnitsTmp[0] = new Array(); textUnitsTmp[1] = new Array();
var unitsTmp = "";
for(i = 0; i < reportElements.units.codes.length; i++){
units[0][i] = reportElements.units.attackers[i].left + " [-" + reportElements.units.attackers[i].lost + "]";
textUnitsTmp[0][i] = "[color=" + colors.attackerUnits + "]" + reportElements.units.attackers[i].left + "[/color][color=" + colors.deadUnits + "] [-" + reportElements.units.attackers[i].lost + "][/color]";
if(units[0][i] == "0 [-0]"){ units[0][i] = ""; textUnitsTmp[0][i] = "";}
units[1][i] = reportElements.units.defenders[i].left + " [-" + reportElements.units.defenders[i].lost + "]";
textUnitsTmp[1][i] = "[color=" + colors.defenderUnits + "]" + reportElements.units.defenders[i].left + "[/color][color=" + colors.deadUnits + "] [-" + reportElements.units.defenders[i].lost + "][/color]";
if(units[1][i] == "0 [-0]"){ units[1][i] = ""; textUnitsTmp[1][i] = "";}
}
for(i = 0; i < reportElements.units.codes.length; i++){
unitsTmp = unitsLang[lang][codeToName(parseInt(reportElements.units.codes[i]))];
var l = unitsTmp.length;
dots = "";
while(25-l/2-units[0][i].length - dots.length > 0) dots += ".";
unitsTmp = units[0][i] + dots + unitsTmp;
textUnits += textUnitsTmp[0][i] + "[color=#F6EBBD]" + dots +"[/color][color=" + colors.text + "]" + unitsLang[lang][codeToName(parseInt(reportElements.units.codes[i]))] + "[/color]";
dots = "";
while(unitsTmp.length + units[1][i].length + dots.length < 50) dots += ".";
unitsTmp += dots + units[1][i];
textUnits += "[color=#F6EBBD]" + dots +"[/color]" + textUnitsTmp[1][i] + "\n";
}
textUnits += "[color=" + colors.text + "]" + line + "[/color][/size]" + "\n";
/* winners */
var textWinner = "";
var textLoser = "";
if(reportElements.winners[0] != null){
var winColor;
if( findInArray(reportElements.attackers, reportElements.winners[0]) != -1 ) winColor = colors.attacker;
else winColor = colors.defender;
counter = 0;
textWinner = "[size=10][color=" + colors.title + "]";
if( reportElements.winners.length > 1 ) textWinner += language[lang].winners;
else textWinner += language[lang].winner;
textWinner += "[/color][color=" + winColor + "]\n";
for(i = 0; i < reportElements.winners.length; i++){
counter += reportElements.winners[i].length;
if( counter > 45 ) { textWinner += "\n"; counter -= 45; }
textWinner += reportElements.winners[i];
if(i < reportElements.winners.length-1) { textWinner += ", "; counter += 2; }
}
textWinner += "[/color]\n" + "[color=" + colors.text + "]" + line + "[/color][/size]" + "\n";
}
/* losers */
if(reportElements.losers[0] != null){
var loseColor;
if( findInArray(reportElements.attackers, reportElements.losers[0]) != -1 ) loseColor = colors.attacker;
else loseColor = colors.defender;
counter = 0;
textLoser = "[size=10][color=" + colors.title + "]";
if( reportElements.losers.length > 1 ) textLoser += language[lang].losers;
else textLoser += language[lang].loser;
textLoser += "[/color][color=" + loseColor + "]\n";
for(i = 0; i < reportElements.losers.length; i++){
counter += reportElements.losers[i].length;
if( counter > 45 ) { textLoser += "\n"; counter -= 45; }
textLoser += reportElements.losers[i];
if(i < reportElements.losers.length-1) { textLoser += ", "; counter += 2; }
}
textLoser += "[/color]\n" + "[color=" + colors.text + "]" + line + "[/color][/size]" + "\n";
}
/* loot */
var textLoot = ""
if( options[lang].loot == true && isThereLoot == true ){
textLoot = "[size=10][color=" + colors.title + "]" + language[lang].loot + "[/color]\n";
var lootTmp = "";
var lootNumTmp = 0;
for(i = 0; i < reportElements.attackers.length; i++){
for( j = 0; j < 5; j++) if( reportElements.loot[i] != null ) break;
if( j != 5 ){
textLoot += "[color=" + colors.attacker + "]" + reportElements.attackers[i] + "[/color]\n";
for(j = 0; j < 5; j++){
if(reportElements.loot[i][j] != null){
if( j == 0 ) lootTmp = language[lang].wood;
else if( j == 1 ) lootTmp = language[lang].wine;
else if( j == 2 ) lootTmp = language[lang].marble;
else if( j == 3 ) lootTmp = language[lang].glass;
else if( j == 4 ) lootTmp = language[lang].sulphur;
lootNumTmp = reportElements.loot[i][j];
dots = "";
while( 50 - lootTmp.length - dots.length > lootNumTmp.length ) dots += ".";
textLoot += "[color=" + colors.text + "]" + lootTmp + "[/color][color=#F6EBBD]" + dots +
"[/color][color=" + colors.otherNumbers + "]" + lootNumTmp + "[/color]\n";
}
}
}
}
textLoot += "[color=" + colors.text + "]" + line + "[/color][/size]" + "\n";
}
/* calculate damage */
var damageAttacker = 0;
var damageDefender = 0;
var tmpInt = "";
var tmpInt2 = 0;
for(i = 0; i < 22; i++){
if(reportElements.units.codes[i] != null){
tmpInt = codeToName(parseInt(reportElements.units.codes[i]));
tmpInt2 = (unitsCost[tmpInt].wood + unitsCost[tmpInt].luxuryGoods)*reportElements.units.attackers[i].lost;
damageAttacker += tmpInt2;
tmpInt2 = (unitsCost[tmpInt].wood + unitsCost[tmpInt].luxuryGoods)*reportElements.units.defenders[i].lost;
damageDefender += tmpInt2;
}
}
if(options[lang].damage == "GeneralsA" ){
damageAttacker /= 50;
damageDefender /= 50;
}
else if(options[lang].damage == "GeneralsAL"){
damageAttacker = (damageAttacker - reportElements.lootTotal) / 50;
damageDefender = (damageDefender + reportElements.lootTotal) / 50;
}
else if(options[lang].damage == "ResourcesAL"){
damageAttacker -= reportElements.lootTotal;
damageDefender += reportElements.lootTotal;
}
damageAttacker = parseInt(damageAttacker);
damageDefender = parseInt(damageDefender);
var damageTotal = damageAttacker + damageDefender + '';
damageAttacker += '';
damageDefender += '';
/* damage */
var textDamage = "[size=10][color=" + colors.title + "]" + language[lang].damageR + "[/color]\n";
var tmp = "";
if(reportElements.attackers.length > 1) tmp = language[lang].attackers;
else tmp = language[lang].attacker;
dots = "";
while(50 - tmp.length - dots.length > damageAttacker.length) dots += ".";
textDamage += "[color=" + colors.text + "]" + tmp + "[/color][color=#F6EBBD]" + dots +
"[/color][color=" + colors.otherNumbers + "]" + damageAttacker + "[/color]\n";
if(reportElements.defenders.length > 1) tmp = language[lang].defenders;
else tmp = language[lang].defender;
dots = "";
while(50 - tmp.length - dots.length > damageDefender.length) dots += ".";
textDamage += "[color=" + colors.text + "]" + tmp + "[/color][color=#F6EBBD]" + dots +
"[/color][color=" + colors.otherNumbers + "]" + damageDefender + "[/color]\n";
textDamage += "[color=" + colors.title + "]" + language[lang].damageT + "[/color]\n" +
"[color=" + colors.otherNumbers + "]" + damageTotal + "[/color]\n";
textDamage += "[color=" + colors.text + "]" + line + "[/color][/size]" + "\n";
var bbCodeText = "";
var plainTextText = "";
var htmlCodeText = "";
var finishedBattle = "";
if( reportElements.winners[0] == null && reportElements.losers[0] == null ) finishedBattle = "\n" + language[lang].finishedBattle + "\n";
bbCodeText = "[align=" + options[lang].align + "]" + font +
textBattleFor +
textAttacker +
textDefender +
textUnits +
textLoot +
textWinner +
textLoser +
textDamage +
finishedBattle +
"\n\n\n[b][i][color=#999999]" + language[lang].created +
"\n [url='http://userscripts.org/scripts/show/58998']stnkvcmls\' Ikariam CR Converter: Greasemonkey Edition\n" +
language[lang].version + " " + crConvVersion + "[/url]" + "[/i][/b]" +
"[/font][/align]";
plainTextText = bbCodeText;
var k = 0;
do{
i = plainTextText.indexOf("]", k);
if(i != -1){
j = plainTextText.indexOf("[", k);
if((plainTextText[j+1] < '0' || plainTextText[j+1] > '9') && plainTextText[j+1] != '-')
plainTextText = plainTextText.substring(0, j) + plainTextText.substring(i+1);
else k = i + 1;
}
}while(i != -1);
reports.bbcode = bbCodeText;
reports.plaintext = plainTextText;
reports.htmlcode = bbcode2html(bbCodeText);
textArea.val(bbCodeText);
preview();
}
codeToName = function(code){
switch(code){
case 301: return "slinger";
case 302: return "swordsman";
case 303: return "hoplite";
case 304: return "marksman";
case 305: return "mortar";
case 306: return "catapult";
case 307: return "batteringRam";
case 308: return "steamGiant";
case 309: return "balloonBombardier";
case 310: return "cook";
case 311: return "doctor";
case 312: return "gyrocopter";
case 313: return "archer";
case 314: return "wall";
case 315: return "spearThrower";
case 316: return "barbarianAxeSwinger";
case 210: return "ramShip";
case 211: return "lightvessel";
case 212: return "divingBoat";
case 213: return "ballistaShip";
case 214: return "catapultShip";
case 215: return "mortarShip";
case 216: return "paddleWheelRam";
}
return 0;
}
findInArray = function(array, item){
if( item != null)
for( var i = 0; i < array.length; i++){
if( item.indexOf(array[i]) != -1 ) return i;
}
return -1;
}
bbcode2html = function(text){
var i;
var j;
while(text.indexOf("[font") != -1){
i = text.indexOf("[font='Courier New, Courier, mono']");
if(i != -1) text = text.replace("[font='Courier New, Courier, mono']","<span style='font-family: Courier New, Courier, mono'>");
else text = text.replace(/\[font=[^\]]+\][^\[]+\[\/font\]/,"");
}
text = text.replace(/\[\/font\]/g,"</span>");
while(text.indexOf("[size=") != -1){
i = text.indexOf("[size=10]");
j = text.indexOf("[size=12]");
if(i != -1) text = text.replace("[size=10]","<span style='font-size: 10'>");
else if(j != -1) text = text.replace("[size=12]","<span style='font-size: 12'>");
else text = text.replace(/\[size=[^\]]+\][^\[]+\[\/size\]/,"");
}
text = text.replace(/\[\/size\]/g,"</span>");
while(text.indexOf("[color=") != -1){
i = text.search(/\[color=#([0-9A-Fa-f]{6})\]/);
if(i != -1){
var tmp = text.substring(i,i+15);
tmp = tmp.replace("[color=","<span style='color:").replace("]","'>");
text = text.replace(/\[color=#([0-9A-Fa-f]{6})\]/,tmp);
}
else text = text.replace(/\[color=[^\]]+\][^\[]+\[\/color\]/,"<span>");
}
text = text.replace(/\[\/color\]/g,"</span>");
text = text.replace(/\[align=Left\]/g,"<div style='text-align: left'>");
text = text.replace(/\[align=Center\]/g,"<div style='text-align: center'>");
text = text.replace(/\[align=Right\]/g,"<div style='text-align: right'>");
text = text.replace(/\[align=[^\]]+\][^\[]+\[\/align\]/g,"");
var br = "<br>";
if($("body").attr("id") == "militaryAdvisorReportView" ) br = "";
text = text.replace("[url='http://userscripts.org/scripts/show/58998']stnkvcmls' Ikariam CR Converter: Greasemonkey Edition" + br + "\n" +
language[lang].version + " " + crConvVersion + "[/url]","<a href="+"'http://userscripts.org/scripts/show/58998'>stnkvcmls\' Ikariam CR Converter: Greasemonkey Edition\n" +
language[lang].version + " " + crConvVersion+"</a>");
text = text.replace(/\[url=[^\]]+\][^\[]+\[\/url\]/g,"");
while(text.indexOf("\n") != -1) text = text.replace("\n","<br>");
while(text.indexOf("[b]") != -1) text = text.replace("[b]","<b>");
while(text.indexOf("[/b]") != -1) text = text.replace("[/b]","</b>");
while(text.indexOf("[i]") != -1) text = text.replace("[i]","<i>");
while(text.indexOf("[/i]") != -1) text = text.replace("[/i]","</i>");
text = text.replace(/\[[^0-9-][^\]]+\]/g,"");
//^((?!\[[0-9]{2}.[0-9]{2}.[0-9]{4} [0-9]{1,2}:[0-9]{2}:[0-9]{2}\]).)*$
/*j = -2;
while(true){
j = text.indexOf("]", j+2)-1;
if(j == -2) break;
i = j;
var tmp = text[i];
while(text[i] != '[' && i > 1) i--;
var tmp2 = text[i+1];
if((tmp >= '0' && tmp <= '9') && (tmp2 == '-' || (tmp2 >= '0' && tmp2 <= '9'))){
}
else
if(text[i+1] != '/')
text = text.substring(0,j+1) + "'>" + text.substring(j+2);
}
/*text = text.replace("[font='","<span style='font-family: ");
text = text.replace("[/font]","</span>");
while(text.indexOf("[size=") != -1){
text = text.replace("[size=","<span style='font-size:");
text = text.replace("[/size]","</span>");
}
while(text.indexOf("[color=") != -1){
text = text.replace("[color=","<span style='color:");
text = text.replace("[/color]","</span>");
}
text = text.replace(/\[align=+\]/,"<div style='text-align: "+options[lang].align+">");
text = text.replace("[/align]","</div>");
text = text.replace("[url='http://userscripts.org/scripts/show/58998']stnkvcmls\' Ikariam CR Converter: Greasemonkey Edition\n" +
language[lang].version + " " + crConvVersion+"]","<a href="+"'http://userscripts.org/scripts/show/58998']stnkvcmls\' Ikariam CR Converter: Greasemonkey Edition\n" +
language[lang].version + " " + crConvVersion+">");
//text = text.replace("[/url]","</a>");*/
text = text.replace(/<br><br>/g,"<br>");
//text = text.replace(/</g,'<').replace(/>/g,'>');
return text;
}
detailedReportDamage = function(){
var damageAtt = 0.0;
var damageDef = 0.0;
var ulClassArray = new Array("special", "airfighter", "air", "flankLeft", "flankRight", "main", "longRange", "artillery");
damageDetail = eval(GM_getValue("damageDetail", null));
var rnd = $(".roundNo").html();
i = 0;
while(isNaN(rnd[i])) i++;
j = i;
while(!isNaN(rnd[j])) j++;
rnd = parseInt(rnd.substring(i, j+1));
damageDetail['attacker'][rnd-1] = 0;
damageDetail['defender'][rnd-1] = 0;
for(i = 0; i < 8; i++){
var tmp = $("div#fieldAttacker > ul." + ulClassArray[i] + " > li");
for(j = 0; j < tmp.length; j++){
if(tmp[j].innerHTML.indexOf("<div") != -1){
if(tmp[j].childNodes[0].className != "empty"){
var tmp2 = tmp[j].childNodes[1].innerHTML;
var lost = parseInt(tmp2.substring(tmp2.indexOf("-")+1, tmp2.indexOf(")")));
var unit = codeToName(parseInt(tmp[j].childNodes[0].className.substring(1)));
damageDetail.attacker[rnd-1] += (unitsCost[unit].wood + unitsCost[unit].luxuryGoods)*lost;
}
}
}
}
for(i = 0; i < 8; i++){
var tmp = $("div#fieldDefender > ul." + ulClassArray[i] + " > li");
for(j = 0; j < tmp.length; j++){
if(tmp[j].innerHTML.indexOf("<div") != -1){
if(tmp[j].childNodes[0].className != "empty"){
var tmp2 = tmp[j].childNodes[1].innerHTML;
var lost = parseInt(tmp2.substring(tmp2.indexOf("-")+1, tmp2.indexOf(")")));
var unit = codeToName(parseInt(tmp[j].childNodes[0].className.substring(1)));
damageDetail.defender[rnd-1] += (unitsCost[unit].wood + unitsCost[unit].luxuryGoods)*lost;
}
}
}
}
options[lang] = eval(GM_getValue("options_"+lang, null));
if(options[lang].damage == "GeneralsA" ){
damageDetail.attacker[rnd-1] = damageDetail.attacker[rnd-1] / 50;
damageDetail.defender[rnd-1] = damageDetail.defender[rnd-1] / 50;
}
var totalAtt = 0;
var totalDef = 0;
for(i = 0; i < rnd; i++){
if(!isNaN(damageDetail.attacker[i])) totalAtt += damageDetail.attacker[i];
if(!isNaN(damageDetail.attacker[i])) totalDef += damageDetail.defender[i];
}
GM_setValue("damageDetail", damageDetail.toSource());
$('span#rndAtt').html(parseInt(damageDetail.attacker[rnd-1]));
$('span#ttlAtt').html(parseInt(totalAtt));
$('span#rndDef').html(parseInt(damageDetail.defender[rnd-1]));
$('span#ttlDef').html(parseInt(totalDef));
}
if($("body").attr("id") == "militaryAdvisorReportView" ){
createTextArea();
}
else if( $("body").attr("id") == "diplomacyAdvisor" || $("body").attr("id") == "diplomacyAdvisorOutBox"){
$("td.msgText div").each(function() {
$(this).html(bbcode2html($(this).html()));
});
}
else if($("body").attr("id") == "militaryAdvisorDetailedReportView"){
var att = $('ul.special')[0];
var top = 155;
if(att == null){ att = $('ul.air')[0]; top = 205; }
var divAtt = document.createElement("div");
divAtt.innerHTML = language[lang].damage + ": <span style='position: absolute; top: 18px; left: 3px; width: 95%'>" + language[lang].round +
": <span id='rndAtt'> </span></span> <span style='position:absolute; left: 3px; top: 33px; width: 95%;'>" + language[lang].total + ": <span id='ttlAtt'></span></span>";
divAtt.style.cssText = "position: absolute; top: "+top+"px; left: 170px; width: 154px; height: 45px; background: #FFF3DB; opacity: 0.7; padding: 3px;";
att.parentNode.insertBefore(divAtt,att);
var def = $('ul.special')[0];
top = 340;
if(def == null){ def = $('ul.air')[0]; top = 360; }
var divDef = document.createElement("div");
divDef.innerHTML = language[lang].damage + ": <span style='position: absolute; top: 18px; left: 3px; width: 95%'>" + language[lang].round +
": <span id='rndDef'> </span></span> <span style='position:absolute; left: 3px; top: 33px; width: 95%;'>" + language[lang].total + ": <span id='ttlDef'></span></span>";
divDef.style.cssText = "position: absolute; top: "+top+"px; left: 170px; width: 154px; height: 45px; background: #FFF3DB; opacity: 0.7; padding: 3px;";
def.parentNode.insertBefore(divDef,def);
detailedReportDamage();
}
else if($("body").attr("id") != "militaryAdvisorDetailedReportView"){
if(GM_getValue("damageDetail", null) != null) GM_setValue("damageDetail", damageDetail.toSource());
}