// ==UserScript==
// @name The West Fortbattle Tool
// @namespace westernblumi
// @author westernblumi
// @description Fort battle tools for The West!
// @include https://*.the-west.*/game.php*
// @version 1.11
// @grant none
// @downloadURL none
// ==/UserScript==
// translation: westernblumi(German & English), pepe100(Spanish), Ruslan Jackson(Italiano)
(function(fn) {
var script = document.createElement('script');
script.setAttribute('type', 'application/javascript');
script.textContent = '(' + fn.toString() + ')();';
document.body.appendChild(script);
document.body.removeChild(script);
})(function() {
TWFBTstart = {
version: '1.11',
langs: {
en: {
language: 'English',
aim: 'Aiming',
adventurer: 'Adventurer',
attack: 'Attack',
bonusByClothes: 'Bonus by Clothes',
bonusBySets: 'Bonus by Sets',
bonusBySkill: 'Bonus by skill',
bonusDefault: 'Defaultbonus',
bonusTotal: 'Total',
calcBonus: 'Calculate fort battle bonus',
calculator: 'Calculator',
clear: 'Clear Window',
clothes: 'Clothes',
damage: 'Damage bonus',
defense: 'Defense',
dodge: 'Dodging',
duelist: 'Duelist',
endurance: 'Stamina',
hide: 'Hiding',
leadership: 'Leadership',
lifepoints: 'Lifepoints',
newFormula: 'new formula',
oldFormula: 'old formula',
pa: 'Premium (soldier and worker fort battle bonus)',
pitfall: 'Setting traps',
resistance: 'Resistance',
scriptName: 'The West Fortbattle Tool',
soldier: 'Soldier',
worker: 'Worker',
name: 'Name',
author: 'Author: ',
version: 'Version: ',
update: 'Update',
updateAvailable: 'A new version of the script is available',
showFurtherStatistics: 'Show more statistics',
team: 'Team',
player: 'Player',
playerCount: 'Number of players',
survivingPlayerCount: 'Surviving players',
offlinePlayerCount: 'Offline players',
adventurers: 'Adventurers',
duelists: 'Duelists',
greenhorns: 'Greenhorns',
soldiers: 'Soldiers',
workers: 'Workers',
maxhp: 'Maximum healthpoints',
starthp: 'Health at the start of the battle',
finishedhp: 'Health at the end of the battle',
totalcauseddamage: 'Total damage inflicted',
hitcount: 'Hits',
misscount: 'Misses',
dodgecount: 'Dodges',
takenhits: 'Hits taken',
crithits: 'Critical Hits',
diedwhen: 'Average lifetime',
onlinecount: 'Average online rounds',
takendamage: 'Taken damage',
charlevel: 'Average level',
criticalHits: 'Kritische Treffer',
points: 'Points',
ranking: 'Ranking',
town: 'Town',
attacker: 'Attacker',
defender: 'Defender',
charclass: 'Class',
side: 'Side',
playerName: 'Player name',
offliner: 'Offline players',
totalShots: 'Total shots',
hitPercentage: 'Hits in %',
dodgePercentage: 'Dodges in %',
damagePerHit: 'Damage per hit',
averageWeaponDamage: 'Average weapon damage',
shotsPerPlayer: 'Shots',
order: 'Order of movement',
rank: 'Rank',
weapons: 'Weapons',
weapon: 'Weapon',
damageBuff: 'Damage buff',
noBuff: 'No damage buff',
sectorBonus: 'Sector bonus',
},
de: {
language: 'German (Deutsch)',
aim: 'Zielen',
adventurer: 'Abenteurer',
attack: 'Angriff',
bonusByClothes: 'Bonus durch Bekleidung',
bonusBySets: 'Bonus durch Sets',
bonusBySkill: 'Bonus durch Skillung',
bonusDefault: 'Grundbonus',
bonusTotal: 'Gesamt',
calcBonus: 'Berechne Fortkampf Bonus',
calculator: 'Rechner',
clear: 'Lösche Berechnungen',
clothes: 'Klamotten',
damage: 'Schadensbonus',
defense: 'Verteidigung',
dodge: 'Ausweichen',
duelist: 'Duellant',
endurance: 'Ausdauer',
hide: 'Verstecken',
leadership: 'Leiten',
lifepoints: 'Lebenspunkte',
newFormula: 'neue Formel',
oldFormula: 'alte Formel',
pa: 'Premium (Soldaten und Arbeiterbonus)',
pitfall: 'Fallen stellen',
resistance: 'Widerstand',
scriptName: 'The West FK Tool',
soldier: 'Soldat',
worker: 'Arbeiter',
name: 'Name',
author: 'Autor: ',
version: 'Version: ',
update: 'Update',
updateAvailable: 'Für das Script ist eine neue Version erhältlich',
showFurtherStatistics: 'Zeige weitere Statistiken',
team: 'Team',
player: 'Spieler',
playerCount: 'Spielerzahl',
survivingPlayerCount: 'Überlebende Spieler',
offlinePlayerCount: 'Offliner',
adventurers: 'Abenteurer',
duelists: 'Duellanten',
greenhorns: 'Grennhorns',
soldiers: 'Soldaten',
workers: 'Arbeiter',
maxhp: 'Maximale Lebenspunkte',
starthp: 'Lebenspunkte am Anfang',
finishedhp: 'Lebenspunkte am Ende',
totalcauseddamage: 'Schaden',
hitcount: 'Treffer',
misscount: 'Fehlschüsse',
dodgecount: 'Ausweicher',
takenhits: 'Eingesteckte Treffer',
crithits: 'Kritische Treffer',
diedwhen: 'Durchschnittliche Lebensdauer',
onlinecount: 'Durchschnittliche Anzahl an Onlinerunden',
takendamage: 'Eingesteckter Schaden',
charlevel: 'Level',
criticalHits: 'Kritische Treffer',
points: 'Punktzahl',
ranking: 'Rangliste',
town: 'Stadt',
attacker: 'Angreifer',
defender: 'Verteidiger',
charclass: 'Klasse',
side: 'Seite',
playerName: 'Spielername',
offliner: 'Offliner',
totalShots: 'Abgegebene Schüsse',
hitPercentage: 'Treffer in %',
dodgePercentage: 'Ausweicher in %',
damagePerHit: 'Schaden pro Treffer',
averageWeaponDamage: 'Durchschnittlicher Waffenschaden',
shotsPerPlayer: 'Abgegebene Schüsse',
order: 'Zugreihenfolge',
rank: 'Rang',
weapons: 'Waffen',
weapon: 'Waffe',
damageBuff: 'Schadensbuff',
noBuff: 'Kein Schadensbuff',
sectorBonus: 'Sektorbonus',
},
es: {
language: 'Español',
aim: 'Apuntar',
adventurer: 'Adventurero',
attack: 'Ataque',
bonusByClothes: 'Bono por Ropas',
bonusBySets: 'Bono por Conjuntos',
bonusBySkill: 'Bono por Habilidad',
bonusDefault: 'Bono por Defecto',
bonusTotal: 'Total',
calcBonus: 'Calcular Bono de Batalla',
calculator: 'Calculadora',
clear: 'Limpiar Ventana',
clothes: 'Ropa',
damage: 'Bono de Daño',
defense: 'Defensa',
dodge: 'Eludir',
duelist: 'Duelista',
endurance: 'Condición',
hide: 'Esconder',
leadership: 'Liderazgo',
lifepoints: 'Puntos de Vida',
newFormula: 'fórmula nueva',
oldFormula: 'fórmula antigua',
pa: 'Premium (bonus Soldado/Trabajador)',
pitfall: 'Poner trampas',
resistance: 'Resistencia',
scriptName: 'The West Fortbattle Tool',
soldier: 'Soldado',
worker: 'Trabajador',
name: 'Nombre',
author: 'Autor: ',
version: 'Versión: ',
update: 'actualizar',
updateAvailable: 'Una nueva versión del script está disponible',
showFurtherStatistics: 'Mostrar más estadísticas',
team: 'Equipo',
player: 'Jugador',
playerCount: 'Número de jugadores',
survivingPlayerCount: 'Jugadores supervivientes',
offlinePlayerCount: 'Jugadores Off',
adventurers: 'Aventureros',
duelists: 'Duelistas',
greenhorns: 'Novatos',
soldiers: 'Soldados',
workers: 'Trabajadores',
maxhp: 'Puntos de salud máximos',
starthp: 'Vida al inicio de la batalla',
finishedhp: 'Vida al final de la batalla',
totalcauseddamage: 'Total daño causado',
hitcount: 'Aciertos realizados',
misscount: 'Fallos',
dodgecount: 'Eludidos',
takenhits: 'Aciertos recibidos',
crithits: 'Críticos',
diedwhen: 'Tiempo de vida promedio',
onlinecount: 'Media de rondas On',
takendamage: 'Daño recibido',
charlevel: 'Nivel medio',
criticalHits: 'Críticos',
points: 'Puntos',
ranking: 'Ranking',
town: 'Ciudad',
attacker: 'Atacante',
defender: 'Defensor',
charclass: 'Clase',
side: 'Lado',
playerName: 'Nombre jugador',
offliner: 'Jugadores Off',
totalShots: 'Total disparos',
hitPercentage: '% Aciertos',
dodgePercentage: '% Eludidos',
damagePerHit: 'Daño por acierto',
averageWeaponDamage: 'Daño medio arma',
shotsPerPlayer: 'Disparos',
order: 'Orden de movimientos',
rank: 'Rango',
weapons: 'Armas',
weapon: 'Arma',
damageBuff: 'Damage buff',
noBuff: 'No damage buff',
sectorBonus: 'Sector bonus',
},
it: {
language: 'Italiano',
aim: 'Mira',
adventurer: 'Avventuriero',
attack: 'Attaco',
bonusByClothes: 'Bonus dei Vestiti',
bonusBySets: 'Bonus dei Set Sets',
bonusBySkill: 'Bonus delle skill',
bonusDefault: 'Bonus di default',
bonusTotal: 'Totale',
calcBonus: 'Calcola il bonus batalgie forti',
calculator: 'Calcolatrice',
clear: 'Axxera Finestra',
clothes: 'Vestiti',
damage: 'Bonus danni',
defense: 'Bonus difesa',
dodge: 'Schivata',
duelist: 'Duellante',
endurance: 'Robustezza',
hide: 'Nascosto',
leadership: 'Commando',
lifepoints: 'Punti vita',
newFormula: 'nuova formula',
oldFormula: 'vecchia formula',
pa: 'Premium (Bonus bataglia forte per il soldato e lavoratore)',
pitfall: 'Trappole',
resistance: 'Resistenza',
scriptName: 'The West Tool per le Batagli Forti',
soldier: 'Soldato',
worker: 'Lavoratore',
name: 'Nome',
author: 'Autore: ',
version: 'Versione: ',
update: 'Aggiorna',
updateAvailable: 'Una nuova versione dello script è gia disponibile',
showFurtherStatistics: 'Show more statistics',
team: 'Team',
player: 'Player',
playerCount: 'Number of players',
survivingPlayerCount: 'Surviving players',
offlinePlayerCount: 'Offline players',
adventurers: 'Adventurers',
duelists: 'Duelists',
greenhorns: 'Greenhorns',
soldiers: 'Soldiers',
workers: 'Workers',
maxhp: 'Maximum healthpoints',
starthp: 'Health at the start of the battle',
finishedhp: 'Health at the end of the battle',
totalcauseddamage: 'Total damage inflicted',
hitcount: 'Hits',
misscount: 'Misses',
dodgecount: 'Dodges',
takenhits: 'Hits taken',
crithits: 'Critical Hits',
diedwhen: 'Average lifetime',
onlinecount: 'Average online rounds',
takendamage: 'Taken damage',
charlevel: 'Average level',
criticalHits: 'Kritische Treffer',
points: 'Points',
ranking: 'Ranking',
town: 'Town',
attacker: 'Attacker',
defender: 'Defender',
charclass: 'Class',
side: 'Side',
playerName: 'Player name',
offliner: 'Offline players',
totalShots: 'Total shots',
hitPercentage: 'Hits in %',
dodgePercentage: 'Dodges in %',
damagePerHit: 'Damage per hit',
averageWeaponDamage: 'Average weapon damage',
shotsPerPlayer: 'Shots',
order: 'Order of movement',
rank: 'Rank',
weapons: 'Weapons',
weapon: 'Weapon',
damageBuff: 'Damage buff',
noBuff: 'No damage buff',
sectorBonus: 'Sector bonus',
},
}
};
TWFBT = {
name: 'The West Fortbattle Tool',
author: 'westernblumi',
minGame: '2.4',
maxGame: Game.version.toString(),
website: 'https://greasyfork.org/de/scripts/22880-the-west-fortbattle-tool',
updateUrl: 'https://raw.githack.com/westernblumi/thewest/master/skriptUpdater.js',
side: 'attack',
pa: false,
characterClass: Character.charClass,
formula: 'newFormula',
Images: {
settings: 'data:image/jpeg;base64,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',
charClasses: 'data:image/png;base64,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',
},
updateLang: function() {
var lg = TWFBTstart.langs;
TWFBT.lang = lg[Game.locale.substr(0, 2)] ? Game.locale.substr(0, 2) : 'en';
TWFBTlang = lg[TWFBT.lang];
},
};
TWFBT.updateLang();
TWFBT.Skript = {
init: function() {
console.log('SUCCESSFULL LAUNCH OF The West Fortbattle Tool');
TWFBT['Calculator'].init();
TWFBT['Statistics'].init();
TWFBT['PreBattleChars'].init();
var menuContainer = $('
').css('background-image', 'url(' + TWFBT.Images.settings + ')').css('background-position', '0px 0px').mouseenter(function() {
$(this).css('background-position', '-25px 0px');
}).mouseleave(function() {
$(this).css('background-position', '0px 0px');
});
$('#ui_menubar').append($('').append(menuContainer).append(''));
},
};
TWFBT.GUI = {
openTWFBTWindow: function() {
TWFBT.GUI.open();
TWFBT.GUI.calcSkill();
},
open: function() {
TWFBT.GUI.window = wman.open('TWFBT', TWFBTlang.scriptName, 'noreload').setMiniTitle(TWFBTlang.scriptName).setMaxSize(1268, 838);
TWFBT.GUI.window.addTab(TWFBTlang.calculator, 'TWFBTCalcSkill', TWFBT.GUI.calcSkill);
},
getDefault: function(tab) {
TWFBT.GUI.window.setResizeable(false).setSize(748, 471).clearContentPane().removeClass('nocloseall').setTitle('TWFBTCalcSkill');
TWFBT.GUI.window.dontCloseAll = false;
$(TWFBT.GUI.window.getContentPane()).css('margin-top', '0px');
var wnd = TWFBT.GUI.window.getMainDiv();
$('.textart_title', wnd).css('display', '');
TWFBT.GUI.window.activateTab(tab);
},
calcSkill: function() {
TWFBT.GUI.getDefault('TWFBTCalcSkill');
TWFBT.GUI.window.setTitle(TWFBTlang.scriptName);
var featScroll = new west.gui.Scrollpane();
$(featScroll.getMainDiv()).css({
'margin-top': '10px'
});
var calcButton = new west.gui.Button(TWFBTlang.calcBonus, function() {
TWFBT.Calculator.calcSkills();
});
var clearButton = new west.gui.Button(TWFBTlang.clear, function() {
clearTable();
});
var paCheckbox = new west.gui.Checkbox().setLabel(TWFBTlang.pa).setSelected(Premium.hasBonus('character'));
TWFBT.pa = Premium.hasBonus('character');
paCheckbox.setCallback(function() {
TWFBT.pa = paCheckbox.isSelected();
}.bind(this));
var charClassBox = new west.gui.Combobox();
charClassBox.addItem('adventurer', TWFBTlang.adventurer);
charClassBox.addItem('duelist', TWFBTlang.duelist);
charClassBox.addItem('worker', TWFBTlang.worker);
charClassBox.addItem('soldier', TWFBTlang.soldier);
charClassBox.select(Character.charClass);
TWFBT.characterClass = Character.charClass;
charClassBox.addListener(function(val) {
TWFBT.characterClass = val;
});
var modeBox = new west.gui.Combobox();
modeBox.addItem('attack', TWFBTlang.attack);
modeBox.addItem('defense', TWFBTlang.defense);
modeBox.addListener(function(val) {
TWFBT.side = val;
});
featScroll.appendContent(modeBox.getMainDiv());
featScroll.appendContent(' ');
featScroll.appendContent(paCheckbox.getMainDiv());
featScroll.appendContent(' ');
featScroll.appendContent(charClassBox.getMainDiv());
featScroll.appendContent('
');
featScroll.appendContent(calcButton.getMainDiv());
featScroll.appendContent(clearButton.getMainDiv());
featScroll.appendContent('');
$(TWFBT.GUI.window.getContentPane()).append(featScroll.getMainDiv());
var clearTable = function() {
$('#TWFBTCalculatorTable').empty();
}
},
};
TWFBT.Calculator = {
init: function() {
},
resetValues: function() {
TWFBT.Calculator.values = {
offense: 0,
defense: 0,
offense_skillwithbonus: 0,
defense_skillwithbonus: 0,
offense_defaultbonus: 25,
defense_defaultbonus: 10,
offense_fortbattlebonus: 0,
defense_fortbattlebonus: 0,
offense_setbonus: 0,
defense_setbonus: 0,
damage: '',
damageSector: 0,
damageMin: 0,
damageMax: 0,
resistance: 0,
resistanceSkill: 0,
lifepoints: 0,
};
},
calcSkills: function() {
this.resetValues();
var side_skill = this.getSideSkill(TWFBT.side);
var soldierBonus = this.getSoldierBonus(TWFBT.pa, TWFBT.characterClass);
this.calcSkillWithBonus(side_skill, soldierBonus);
this.calcClothBonus();
TWFBT.Calculator.values.lifepoints = Character.maxHealth;
TWFBT.Calculator.values.resistanceSkill = Math.round(300 * CharacterSkills.getSkill(side_skill).getPointsWithBonus() / Character.maxHealth);
this.addBonusesTogether();
var workerBonus = this.getWorkerBonus(TWFBT.pa, TWFBT.characterClass);
TWFBT.Calculator.values.offense *= workerBonus;
TWFBT.Calculator.values.defense *= workerBonus;
var min = TWFBT.Calculator.values.damageMin + TWFBT.Calculator.values.damageSector + ((TWFBT.Calculator.values.damageMin + TWFBT.Calculator.values.damageSector) * CharacterSkills.getSkill('leadership').getPointsWithBonus() / Character.maxHealth);
var max = TWFBT.Calculator.values.damageMax + TWFBT.Calculator.values.damageSector + ((TWFBT.Calculator.values.damageMax + TWFBT.Calculator.values.damageSector) * CharacterSkills.getSkill('leadership').getPointsWithBonus() / Character.maxHealth);
TWFBT.Calculator.values.damage = Math.round(min).toString() + '-' + Math.round(max).toString();
this.prettifyResults();
window.setTimeout(function() {
TWFBT.Calculator.showData(side_skill);
}, 1000);
},
calcClothBonus: function() {
var sets = {};
for (item in Wear.wear) {
if (Wear.wear.hasOwnProperty(item)) {
var item_obj = Wear.wear[item].obj;
TWFBT.Calculator.values.defense_fortbattlebonus += item_obj.bonus.fortbattle.defense;
TWFBT.Calculator.values.defense_fortbattlebonus += item_obj.bonus.fortbattlesector.defense;
TWFBT.Calculator.values.offense_fortbattlebonus += item_obj.bonus.fortbattle.offense;
TWFBT.Calculator.values.offense_fortbattlebonus += item_obj.bonus.fortbattlesector.offense;
//TWFBT.Calculator.values.damage += item_obj.bonus.fortbattlesector.damage;
TWFBT.Calculator.values.damageSector += item_obj.bonus.fortbattlesector.damage;
if(item_obj.type === 'left_arm') {
TWFBT.Calculator.values.damageMax = item_obj.getDamage(Character).max;
TWFBT.Calculator.values.damageMin = item_obj.getDamage(Character).min;
}
TWFBT.Calculator.values.resistance += item_obj.bonus.fortbattle.resistance;
for (j = 0; j < item_obj.bonus.item.length; j++) {
switch (item_obj.bonus.item[j].name) {
case 'offense':
TWFBT.Calculator.values.offense_fortbattlebonus += item_obj.bonus.item[j].value;
break;
case 'defense':
TWFBT.Calculator.values.defense_fortbattlebonus += item_obj.bonus.item[j].value;
break;
case 'damage':
//TWFBT.Calculator.values.damage += item_obj.bonus.item[j].value;
TWFBT.Calculator.values.damageSector += item_obj.bonus.fortbattlesector.damage;
break;
}
}
//Collect all set information
if (item_obj.set != null) {
if (sets[item_obj.set] == undefined) {
sets[item_obj.set] = 1;
} else {
sets[item_obj.set] += 1;
}
}
}
}
//Calc set bonus
for (var set in sets) {
if (sets.hasOwnProperty(set)) {
var setbonusArray = [0, 0, 0, 0];
setbonusArray = this.getSetBonus(set, sets[set]);
TWFBT.Calculator.values.offense_setbonus += setbonusArray[0];
TWFBT.Calculator.values.defense_setbonus += setbonusArray[1];
//TWFBT.Calculator.values.damage += setbonusArray[2];
TWFBT.Calculator.values.damageSector += setbonusArray[2];
TWFBT.Calculator.values.resistance += setbonusArray[3];
}
}
},
getSetBonus: function(set, quantity) {
var bonusResultArray = {
offense: 0,
defense: 0,
damage: 0,
resistance: 0
};
var bonuses = west.storage.ItemSetManager._setList[set].getMergedStages(quantity);
for (var i = 0; i < bonuses.length; i++) {
if (bonuses[i].key == 'level') {
if (bonuses[i].bonus.name == 'damage') {
bonusResultArray['damage'] += bonuses[i].bonus.value * Character.level;
} else {
bonusResultArray[bonuses[i].name] += bonuses[i].bonus.value * Character.level;
}
} else {
bonusResultArray[bonuses[i].name] += bonuses[i].value;
}
}
return [bonusResultArray['offense'], bonusResultArray['defense'], bonusResultArray['damage'], bonusResultArray['resistance']];
},
getSideSkill: function(side) {
if (side == 'attack') {
return 'hide';
} else {
return 'pitfall';
}
},
calcSkillWithBonus: function(side_skill, soldierBonus) {
TWFBT.Calculator.values.defense_skillwithbonus = Math.pow(CharacterSkills.getSkill(side_skill).getPointsWithBonus(), 0.6) +
Math.pow(CharacterSkills.getSkill('dodge').getPointsWithBonus(), 0.5) +
Math.pow(CharacterSkills.getSkill('leadership').getPointsWithBonus() * soldierBonus, 0.5);
TWFBT.Calculator.values.offense_skillwithbonus = Math.pow(CharacterSkills.getSkill(side_skill).getPointsWithBonus(), 0.6) +
Math.pow(CharacterSkills.getSkill('aim').getPointsWithBonus(), 0.5) +
Math.pow(CharacterSkills.getSkill('leadership').getPointsWithBonus() * soldierBonus, 0.5);
},
getSoldierBonus: function(pa, characterClass) {
var soldierBonus = 1;
if (pa && characterClass == 'soldier') {
soldierBonus = 1.5;
} else if (characterClass == 'soldier') {
soldierBonus = 1.25;
}
return soldierBonus;
},
getWorkerBonus: function(pa, characterClass) {
var workerBonus = 1;
if (pa && characterClass == 'worker') {
workerBonus = 1.4;
} else if (characterClass == 'worker') {
workerBonus = 1.2;
}
return workerBonus;
},
prettifyResults: function() {
for (var value in TWFBT.Calculator.values) {
if (TWFBT.Calculator.values.hasOwnProperty(value) && value != 'damage') {
TWFBT.Calculator.values[value] = Math.floor(TWFBT.Calculator.values[value] * 100) / 100;
}
}
},
addBonusesTogether: function() {
TWFBT.Calculator.values.offense += TWFBT.Calculator.values.offense_defaultbonus;
TWFBT.Calculator.values.defense += TWFBT.Calculator.values.defense_defaultbonus;
TWFBT.Calculator.values.offense += TWFBT.Calculator.values.offense_fortbattlebonus;
TWFBT.Calculator.values.defense += TWFBT.Calculator.values.defense_fortbattlebonus;
TWFBT.Calculator.values.offense += TWFBT.Calculator.values.offense_skillwithbonus;
TWFBT.Calculator.values.defense += TWFBT.Calculator.values.defense_skillwithbonus;
TWFBT.Calculator.values.offense += TWFBT.Calculator.values.offense_setbonus;
TWFBT.Calculator.values.defense += TWFBT.Calculator.values.defense_setbonus;
TWFBT.Calculator.values.resistance += TWFBT.Calculator.values.resistanceSkill;
},
showData: function(side_skill) {
var content = $('
');
content.append('' + TWFBTlang[TWFBT.side] + ' | ');
$('#TWFBTCalculatorTable').append(content);
var content = $('' +
TWFBTlang.leadership + ' | ' +
TWFBTlang[side_skill] + ' | ' +
TWFBTlang.aim + ' | ' +
TWFBTlang.dodge + ' | ' +
TWFBTlang.bonusBySkill + ' | ' +
TWFBTlang.bonusByClothes + ' | ' +
TWFBTlang.bonusBySets + ' | ' +
TWFBTlang.bonusDefault + ' | ' +
TWFBTlang.bonusTotal + ' |
');
$('#TWFBTCalculatorTable').append(content);
content = $('
');
content.append('' + CharacterSkills.getSkill('leadership').getPointsWithBonus() + ' | ');
content.append('' + CharacterSkills.getSkill(side_skill).getPointsWithBonus() + ' | ');
content.append('' + CharacterSkills.getSkill('aim').getPointsWithBonus() + ' | ');
content.append('' + CharacterSkills.getSkill('dodge').getPointsWithBonus() + ' | ');
content.append('' + TWFBT.Calculator.values.offense_skillwithbonus + ' ' + TWFBT.Calculator.values.defense_skillwithbonus + ' | ');
content.append('' + TWFBT.Calculator.values.offense_fortbattlebonus + ' ' + TWFBT.Calculator.values.defense_fortbattlebonus + ' | ');
content.append('' + TWFBT.Calculator.values.offense_setbonus + ' ' + TWFBT.Calculator.values.defense_setbonus + ' | ');
content.append('' + TWFBT.Calculator.values.offense_defaultbonus + ' ' + TWFBT.Calculator.values.defense_defaultbonus + ' | ');
content.append('' + TWFBT.Calculator.values.offense + ' ' + TWFBT.Calculator.values.defense + ' | ');
$('#TWFBTCalculatorTable').append(content);
content = $('
');
content.append('' + TWFBTlang.damage + ' | ' + TWFBT.Calculator.values.damage + ' (' + TWFBT.Calculator.values.damageSector + ' ' + TWFBTlang.sectorBonus + ') | ' +
'' + TWFBTlang.resistance + ' | ' + TWFBT.Calculator.values.resistance + ' | ' +
'' + TWFBTlang.lifepoints + ' | ' + TWFBT.Calculator.values.lifepoints + ' | ');
$('#TWFBTCalculatorTable').append(content);
content = $('
');
var item_string = '';
for (item in Wear.wear) {
if (Wear.wear.hasOwnProperty(item)) {
var item_obj = Wear.wear[item].obj;
var popup = new ItemPopup(item_obj, {
character: {
level: Character.level
}
}).popup;
item_string += '';
}
}
content.append('' + TWFBTlang.clothes + ' | ' + item_string + ' | ');
$('#TWFBTCalculatorTable').append(content);
},
};
TWFBT.Statistics = {
openStatsGUIOpen: function() {
TWFBT.Statistics.openStatsGUI();
TWFBT.Statistics.showTeamStatsTab();
},
openStatsGUI: function() {
TWFBT.Statistics.window = wman.open('TWFBT_2', TWFBTlang.scriptName, 'noreload').setMiniTitle(TWFBTlang.scriptName).setMaxSize(1268, 838);
TWFBT.Statistics.window.addTab(TWFBTlang.team, 'TWFBTTesterTab1', TWFBT.Statistics.showTeamStatsTab);
TWFBT.Statistics.window.addTab(TWFBTlang.player, 'TWFBTTesterTab2', TWFBT.Statistics.showPerPlayerStatsTab);
TWFBT.Statistics.window.addTab(TWFBTlang.ranking, 'TWFBTTesterTab3', TWFBT.Statistics.showRankingTab);
TWFBT.Statistics.window.addTab(TWFBTlang.order, 'TWFBTTesterTab4', TWFBT.Statistics.showOrderTab);
TWFBT.Statistics.window.addTab(TWFBTlang.weapons, 'TWFBTTesterTab5', TWFBT.Statistics.showWeaponsTab);
},
getDefault: function(tab) {
TWFBT.Statistics.window.setResizeable(false).setSize(748, 471).clearContentPane().removeClass('nocloseall').setTitle('TWFBTCalcSkill');
TWFBT.Statistics.window.dontCloseAll = false;
$(TWFBT.Statistics.window.getContentPane()).css('margin-top', '0px');
var wnd = TWFBT.Statistics.window.getMainDiv();
$('.textart_title', wnd).css('display', '');
TWFBT.Statistics.window.activateTab(tab);
},
showTeamStatsTab: function() {
TWFBT.Statistics.getDefault('TWFBTTesterTab1');
TWFBT.Statistics.window.setTitle(TWFBTlang.scriptName);
var featScroll = new west.gui.Scrollpane();
$(featScroll.getMainDiv()).css({
'margin-top': '5px'
});
featScroll.appendContent(TWFBT.Statistics.getProgressBar(TWFBT.Statistics.stats.attacker_count, TWFBT.Statistics.stats.defender_count, TWFBTlang.playerCount));
featScroll.appendContent(TWFBT.Statistics.getProgressBarWithStats(TWFBT.Statistics.getOffliner()));
featScroll.appendContent(TWFBT.Statistics.getProgressBarWithStats(TWFBT.Statistics.getSurvivingPlayer()));
featScroll.appendContent(TWFBT.Statistics.getProgressBarWithStats(TWFBT.Statistics.getValueSums('totalcauseddamage')));
featScroll.appendContent(TWFBT.Statistics.getProgressBarWithStats(TWFBT.Statistics.getTotalShots()));
featScroll.appendContent(TWFBT.Statistics.getProgressBarWithStats(TWFBT.Statistics.getValueSums('crithits')));
featScroll.appendContent(TWFBT.Statistics.getProgressBarWithStats(TWFBT.Statistics.getValueSums('maxhp')));
featScroll.appendContent(TWFBT.Statistics.getProgressBarWithStats(TWFBT.Statistics.getValueSums('starthp')));
featScroll.appendContent(TWFBT.Statistics.getProgressBarWithStats(TWFBT.Statistics.getValueSums('finishedhp')));
featScroll.appendContent(TWFBT.Statistics.getProgressBarWithSingleStat(TWFBT.Statistics.getHitPercentage('attacker')));
featScroll.appendContent(TWFBT.Statistics.getProgressBarWithSingleStat(TWFBT.Statistics.getHitPercentage('defender')));
featScroll.appendContent(TWFBT.Statistics.getProgressBarWithSingleStat(TWFBT.Statistics.getDodgePercentage('attacker')));
featScroll.appendContent(TWFBT.Statistics.getProgressBarWithSingleStat(TWFBT.Statistics.getDodgePercentage('defender')));
featScroll.appendContent(TWFBT.Statistics.getProgressBarWithStats(TWFBT.Statistics.getValueSums('hitcount')));
featScroll.appendContent(TWFBT.Statistics.getProgressBarWithStats(TWFBT.Statistics.getValueSums('misscount')));
featScroll.appendContent(TWFBT.Statistics.getProgressBarWithStats(TWFBT.Statistics.getValueSums('dodgecount')));
featScroll.appendContent(TWFBT.Statistics.getProgressBarWithStats(TWFBT.Statistics.getValueSums('takenhits')));
featScroll.appendContent(TWFBT.Statistics.getProgressBarWithStats(TWFBT.Statistics.getCharClasses('adventurers')));
featScroll.appendContent(TWFBT.Statistics.getProgressBarWithStats(TWFBT.Statistics.getCharClasses('duelists')));
featScroll.appendContent(TWFBT.Statistics.getProgressBarWithStats(TWFBT.Statistics.getCharClasses('soldiers')));
featScroll.appendContent(TWFBT.Statistics.getProgressBarWithStats(TWFBT.Statistics.getCharClasses('workers')));
featScroll.appendContent(TWFBT.Statistics.getProgressBarWithStats(TWFBT.Statistics.getCharClasses('greenhorns')));
var buffs = TWFBT.Statistics.getBuffs();
for(buff in buffs[0]){
if(buffs[0].hasOwnProperty(buff)){
if(buff != '0-0'){
featScroll.appendContent(TWFBT.Statistics.getProgressBar(buffs[0][buff], buffs[1][buff], TWFBTlang.damageBuff+ ' +' + buff));
} else {
featScroll.appendContent(TWFBT.Statistics.getProgressBar(buffs[0][buff], buffs[1][buff], TWFBTlang.noBuff));
}
}
}
$(TWFBT.Statistics.window.getContentPane()).append(featScroll.getMainDiv());
},
showPerPlayerStatsTab: function() {
TWFBT.Statistics.getDefault('TWFBTTesterTab2');
TWFBT.Statistics.window.setTitle(TWFBTlang.scriptName);
var featScroll = new west.gui.Scrollpane();
$(featScroll.getMainDiv()).css({
'margin-top': '5px'
});
featScroll.appendContent(TWFBT.Statistics.getProgressBarWithStats(TWFBT.Statistics.getAverage('charlevel')));
featScroll.appendContent(TWFBT.Statistics.getProgressBarWithStats(TWFBT.Statistics.getAverage('maxhp')));
featScroll.appendContent(TWFBT.Statistics.getProgressBarWithStats(TWFBT.Statistics.getAverage('starthp')));
featScroll.appendContent(TWFBT.Statistics.getProgressBarWithStats(TWFBT.Statistics.getAverage('finishedhp')));
featScroll.appendContent(TWFBT.Statistics.getProgressBarWithStats(TWFBT.Statistics.getAverage('totalcauseddamage')));
featScroll.appendContent(TWFBT.Statistics.getProgressBarWithStats(TWFBT.Statistics.getDamagerPerHit()));
featScroll.appendContent(TWFBT.Statistics.getProgressBarWithStats(TWFBT.Statistics.getAverageWeaponDamage()));
featScroll.appendContent(TWFBT.Statistics.getProgressBarWithStats(TWFBT.Statistics.getAverageLifetime()));
featScroll.appendContent(TWFBT.Statistics.getProgressBarWithStats(TWFBT.Statistics.getAverageOnlineTime()));
featScroll.appendContent(TWFBT.Statistics.getProgressBarWithStats(TWFBT.Statistics.getShotsPerPlayer()));
featScroll.appendContent(TWFBT.Statistics.getProgressBarWithStats(TWFBT.Statistics.getAverage('takendamage')));
featScroll.appendContent(TWFBT.Statistics.getProgressBarWithStats(TWFBT.Statistics.getAverage('hitcount')));
featScroll.appendContent(TWFBT.Statistics.getProgressBarWithStats(TWFBT.Statistics.getAverage('dodgecount')));
$(TWFBT.Statistics.window.getContentPane()).append(featScroll.getMainDiv());
},
showRankingTab: function() {
TWFBT.Statistics.showRanking('points_desc');
},
showRanking: function(sort){
TWFBT.Statistics.getDefault('TWFBTTesterTab3');
TWFBT.Statistics.window.setTitle(TWFBTlang.scriptName);
var currArray = TWFBT.Statistics.getPlayerRanking();
switch(sort) {
case "takenhits" : currArray.sort(this.sortByTakenHits); break;
case "takenhits_desc" : currArray.sort(this.sortByTakenHits).reverse(); break;
case "dodgecount" : currArray.sort(this.sortByDodgeCount); break;
case "dodgecount_desc" : currArray.sort(this.sortByDodgeCount).reverse(); break;
case "totalcauseddamage" : currArray.sort(this.sortByTotalCausedDamage); break;
case "totalcauseddamage_desc" : currArray.sort(this.sortByTotalCausedDamage).reverse(); break;
case "charclass" : currArray.sort(this.sortByCharclass); break;
case "charclass_desc" : currArray.sort(this.sortByCharclass).reverse(); break;
case "side" : currArray.sort(this.sortBySide); break;
case "side_desc" : currArray.sort(this.sortBySide).reverse(); break;
case "points" : currArray.sort(this.sortByRankingValue); break;
case "points_desc" : currArray.sort(this.sortByRankingValue).reverse(); break;
case "name_desc" : currArray.sort(this.sortByName).reverse(); break;
case "name" :
default : sort = "name"; currArray.sort(this.sortByName);
}
var thName = $(''+TWFBTlang.playerName+'').click(function(){ TWFBT.Statistics.showRanking(sort == 'name_desc' ? 'name' : 'name_desc'); return false; });
var thPoints = $(''+TWFBTlang.points+'').click(function(){ TWFBT.Statistics.showRanking(sort == 'points_desc' ? 'points' : 'points_desc'); return false; });
var thSide = $(''+TWFBTlang.side+'').click(function(){ TWFBT.Statistics.showRanking(sort == 'side_desc' ? 'side' : 'side_desc'); return false; });
var thCharclass = $(''+TWFBTlang.charclass+'').click(function(){ TWFBT.Statistics.showRanking(sort == 'charclass_desc' ? 'charclass' : 'charclass_desc'); return false; });
var thTotalCausedDamage = $(TWFBT.Statistics.getReportIcon(TWFBTlang.totalcauseddamage, '0 -51px')).click(function(){ TWFBT.Statistics.showRanking(sort == 'totalcauseddamage_desc' ? 'totalcauseddamage' : 'totalcauseddamage_desc'); return false; });
var thTakenHits = $(TWFBT.Statistics.getReportIcon(TWFBTlang.takenhits, '0 -102px')).click(function(){ TWFBT.Statistics.showRanking(sort == 'takenhits_desc' ? 'takenhits' : 'takenhits_desc'); return false; });
var thDodgeCount = $(TWFBT.Statistics.getReportIcon(TWFBTlang.dodgecount, '0 -153px')).click(function(){ TWFBT.Statistics.showRanking(sort == 'dodgecount_desc' ? 'dodgecount' : 'dodgecount_desc'); return false; });
var mytable = new west.gui.Table().setId('TWFBT_ranking_table')
.addColumn("TWFBT_ranking_name")
.addColumn("TWFBT_ranking_points")
.addColumn("TWFBT_ranking_side")
.addColumn("TWFBT_ranking_charclass")
.addColumn("TWFBT_ranking_totalcauseddamage")
.addColumn("TWFBT_ranking_takenhits")
.addColumn("TWFBT_ranking_dodgecount")
.appendToCell("head", "TWFBT_ranking_name", thName)
.appendToCell("head", "TWFBT_ranking_points", thPoints)
.appendToCell("head", "TWFBT_ranking_side", thSide)
.appendToCell("head", "TWFBT_ranking_charclass", thCharclass)
.appendToCell("head", "TWFBT_ranking_totalcauseddamage", thTotalCausedDamage)
.appendToCell("head", "TWFBT_ranking_takenhits", thTakenHits)
.appendToCell("head", "TWFBT_ranking_dodgecount", thDodgeCount);
var charclasses = {
'-1': 'greenhorn',
'0': 'adventurer',
'1': 'duelist',
'2': 'worker',
'3': 'soldier',
};
$.each(currArray, function(index, player_obj) {
mytable.appendRow(null, 'TWFBTRankingRow_'+index)
.appendToCell(-1, "TWFBT_ranking_name", ''+player_obj.name+'')
.appendToCell(-1, "TWFBT_ranking_points", player_obj.formulaValue)
.appendToCell(-1, "TWFBT_ranking_side", ''+TWFBTlang[player_obj.side]+'
')
.appendToCell(-1, "TWFBT_ranking_charclass", '
')
.appendToCell(-1, "TWFBT_ranking_totalcauseddamage", player_obj.totalcauseddamage)
.appendToCell(-1, "TWFBT_ranking_takenhits", player_obj.takenhits)
.appendToCell(-1, "TWFBT_ranking_dodgecount", player_obj.dodgecount)
});
var styling = $('').text('.remove-link { width:20px; } .TWFBT_ranking_name { width:190px; padding-left: 5px;} .TWFBT_ranking_points { text-align:center; width:80px; } .TWFBT_ranking_side { text-align:center; width:120px; } .TWFBT_ranking_charclass { text-align:center; width:60px; } .TWFBT_ranking_totalcauseddamage { text-align:center; width:80px; } .TWFBT_ranking_dodgecount { text-align:center; width:70px; } .TWFBT_ranking_takenhits { text-align:center; width:60px; }');
$('head').append(styling);
$(TWFBT.Statistics.window.getContentPane()).empty();
$(TWFBT.Statistics.window.getContentPane()).append(mytable.getMainDiv());
$('#TWFBT_ranking_table').css({'margin-top': '5px'});
$('#TWFBT_ranking_table > div.trows > div.tbody > div.tw2gui_scrollpane').css({'height': '290px'});
},
showOrderTab: function() {
TWFBT.Statistics.getDefault('TWFBTTesterTab4');
TWFBT.Statistics.window.setTitle(TWFBTlang.scriptName);
var currArray = TWFBT.Statistics.getOrderOfMovement();
/*var thName = $(''+TWFBTlang.playerName+'').click(function(){ TWFBT.Statistics.showRanking(sort == 'name' ? 'name_desc' : 'name'); return false; });
var thPoints = $(''+TWFBTlang.points+'').click(function(){ TWFBT.Statistics.showRanking(sort == 'points' ? 'points_desc' : 'points'); return false; });
var thSide = $(''+TWFBTlang.side+'').click(function(){ TWFBT.Statistics.showRanking(sort == 'side' ? 'side_desc' : 'side'); return false; });
var thCharclass = $(''+TWFBTlang.charclass+'').click(function(){ TWFBT.Statistics.showRanking(sort == 'charclass' ? 'charclass_desc' : 'charclass'); return false; });
var thTotalCausedDamage = $(getReportIcon(TWFBTlang.totalcauseddamage, '0 -51px')).click(function(){ TWFBT.Statistics.showRanking(sort == 'totalcauseddamage' ? 'totalcauseddamage_desc' : 'totalcauseddamage'); return false; });
var thTakenHits = $(getReportIcon(TWFBTlang.takenhits, '0 -102px')).click(function(){ TWFBT.Statistics.showRanking(sort == 'takenhits' ? 'takenhits_desc' : 'takenhits'); return false; });
var thDodgeCount = $(getReportIcon(TWFBTlang.dodgecount, '0 -153px')).click(function(){ TWFBT.Statistics.showRanking(sort == 'dodgecount' ? 'dodgecount_desc' : 'dodgecount'); return false; });
*/
var mytable = new west.gui.Table().setId('TWFBT_order_table')
.addColumn("TWFBT_order_rank1")
.addColumn("TWFBT_order_name1")
.addColumn("TWFBT_order_rank2")
.addColumn("TWFBT_order_name2")
.appendToCell("head", "TWFBT_order_rank1", TWFBTlang.rank)
.appendToCell("head", "TWFBT_order_name1", TWFBTlang.attacker)
.appendToCell("head", "TWFBT_order_rank2", TWFBTlang.rank)
.appendToCell("head", "TWFBT_order_name2", TWFBTlang.defender)
$.each(currArray, function(index, player_obj) {
mytable.appendRow(null, 'TWFBTOrderRow_'+index)
.appendToCell(-1, "TWFBT_order_rank1", player_obj.rank1)
.appendToCell(-1, "TWFBT_order_name1", ''+player_obj.player1+'')
.appendToCell(-1, "TWFBT_order_rank2", player_obj.rank2)
.appendToCell(-1, "TWFBT_order_name2", ''+player_obj.player2+'')
});
var styling = $('').text('.remove-link { width:20px; } .TWFBT_order_rank1 { width:50px; text-align: center;} .TWFBT_order_rank2 { width:50px; text-align: center;} .TWFBT_order_name1 { width:195px;} .TWFBT_order_name2{ width:195px;}');
$('head').append(styling);
$(TWFBT.Statistics.window.getContentPane()).empty();
$(TWFBT.Statistics.window.getContentPane()).append(mytable.getMainDiv());
$('#TWFBT_order_table').css({'margin-top': '5px', 'width': '523px', 'margin-Left': '87px',});
$('#TWFBT_order_table > div.trows > div.tbody > div.tw2gui_scrollpane').css({'height': '290px'});
},
showWeaponsTab: function() {
TWFBT.Statistics.getDefault('TWFBTTesterTab5');
TWFBT.Statistics.window.setTitle(TWFBTlang.scriptName);
var currArray = TWFBT.Statistics.getWeapons();
var mytable = new west.gui.Table().setId('TWFBT_weapons_table')
.addColumn("TWFBT_weapons_attacker")
.addColumn("TWFBT_weapons_defener")
.addColumn("TWFBT_weapons_id")
.appendToCell("head", "TWFBT_weapons_attacker", TWFBTlang.attacker)
.appendToCell("head", "TWFBT_weapons_defener", TWFBTlang.defender)
.appendToCell("head", "TWFBT_weapons_id", TWFBTlang.weapon)
$.each(currArray, function(index, object) {
var item = ItemManager.get(object.weaponId);
var popup = new ItemPopup(item,{
character:{level: 150}
}).popup
mytable.appendRow(null, 'TWFBTWeaponsRow_'+index)
.appendToCell(-1, "TWFBT_weapons_attacker", (object.attackerWeaponsAmount != undefined ? ''+object.attackerWeaponsAmount+'
' : ''))
.appendToCell(-1, "TWFBT_weapons_defener", (object.defenderWeaponsAmount != undefined ? ''+object.defenderWeaponsAmount+'
' : ''))
.appendToCell(-1, "TWFBT_weapons_id", '
'+item.item_level)
});
var styling = $('').text('.TWFBT_weapons_attacker { width:100px; text-align: center;} .TWFBT_weapons_defener { width:100px; text-align: center;} .TWFBT_weapons_id { width:400px;}');
$('head').append(styling);
$(TWFBT.Statistics.window.getContentPane()).empty();
$(TWFBT.Statistics.window.getContentPane()).append(mytable.getMainDiv());
$('#TWFBT_weapons_table').css({'margin-top': '5px',});
$('#TWFBT_weapons_table > div.trows > div.tbody > div.tw2gui_scrollpane').css({'height': '290px'});
},
sortByName: function(a, b) { return a.name.toLowerCase().localeCompare(b.name.toLowerCase()); },
sortByRankingValue: function(a, b) { return a.formulaValue - b.formulaValue; },
sortBySide: function(a, b) { return a.side - b.side; },
sortByCharclass: function(a, b) { return a.charclass - b.charclass; },
sortByTotalCausedDamage: function(a, b) { return a.totalcauseddamage - b.totalcauseddamage; },
sortByTakenHits: function(a, b) { return a.takenhits - b.takenhits; },
sortByDodgeCount: function(a, b) { return a.dodgecount - b.dodgecount; },
init: function() {
FortOverviewWindow.RecentBattles._initContent_backup = FortOverviewWindow.RecentBattles._initContent;
FortOverviewWindow.RecentBattles._initContent = function () {
FortOverviewWindow.RecentBattles._initContent_backup.call(this);
if($('.graveyardtable > tbody > tr:nth-child(3) > td').attr("colspan") != 8){
for(var i=2; i< $(".graveyardtable > tbody > tr").length; i+=2){
var href = $('.graveyardtable > tbody > tr:nth-child('+i+') > td:nth-child(2) > a').attr('href');
if(href != undefined){
var regex = new RegExp('\,[0-9]+');
var battle_id = href.match(regex)[0].substr(1);
$('.graveyardtable > tbody > tr:nth-child('+i+')').append(' | ');
$('.graveyardtable > tbody > tr:nth-child('+(i+1)+') > td').attr("colspan", "8");
}
}
}
};
FortOverviewWindow.createContent_backup = FortOverviewWindow.createContent;
FortOverviewWindow.createContent = function (tab, options) {
FortOverviewWindow.createContent_backup.call(this, tab, options);
};
FortOverviewWindow.RecentBattles._init_backup = FortOverviewWindow.RecentBattles.init;
FortOverviewWindow.RecentBattles.init = function () {
FortOverviewWindow.RecentBattles._init_backup.call(this);
};
/*CemeteryWindow.backup_showStatUpdateTable = CemeteryWindow.showStatUpdateTable;
CemeteryWindow.showStatUpdateTable = function(data) {
CemeteryWindow.backup_showStatUpdateTable.call(this, data);
TWFBT.Statistics.stats = data;
$('div.footer').append(' - '+TWFBTlang.showFurtherStatistics+'');
};*/
TWFBT.Statistics.getAverage = function(label) {
var valueSumAttacker = 0;
for (x = 0; x < TWFBT.Statistics.stats.attacker_count; x++) {
valueSumAttacker += TWFBT.Statistics.stats.result.attackerlist[x][label];
}
var valueSumDefender = 0;
for (x = 0; x < TWFBT.Statistics.stats.defender_count; x++) {
valueSumDefender += TWFBT.Statistics.stats.result.defenderlist[x][label];
}
var averageAttacker = valueSumAttacker / TWFBT.Statistics.stats.attacker_count;
var averageDefender = valueSumDefender / TWFBT.Statistics.stats.defender_count;
return [Math.round(averageAttacker), Math.round(averageDefender), label];
};
TWFBT.Statistics.getAverageLifetime = function(){
var valueSumAttacker = 0;
for (x = 0; x < TWFBT.Statistics.stats.attacker_count; x++) {
var diedwhen = TWFBT.Statistics.stats.result.attackerlist[x].diedwhen;
if(diedwhen > 0){
valueSumAttacker += diedwhen;
} else if(diedwhen == 0){
valueSumAttacker += TWFBT.Statistics.stats.result.roundsplayed;
}
}
var valueSumDefender = 0;
for (x = 0; x < TWFBT.Statistics.stats.defender_count; x++) {
var diedwhen = TWFBT.Statistics.stats.result.defenderlist[x].diedwhen;
if(diedwhen > 0){
valueSumDefender += diedwhen;
} else if(diedwhen == 0){
valueSumDefender += TWFBT.Statistics.stats.result.roundsplayed;
}
}
var averageAttacker = valueSumAttacker / TWFBT.Statistics.stats.attacker_count;
var averageDefender = valueSumDefender / TWFBT.Statistics.stats.defender_count;
return [Math.round(averageAttacker), Math.round(averageDefender), 'diedwhen'];
};
TWFBT.Statistics.getAverageOnlineTime = function(){
var valueSumAttacker = 0;
var onlineAttackerCount = 0;
for (x = 0; x < TWFBT.Statistics.stats.attacker_count; x++) {
var onlinecount = TWFBT.Statistics.stats.result.attackerlist[x].onlinecount;
if(onlinecount > 0){
valueSumAttacker += onlinecount;
onlineAttackerCount++;
}
}
var valueSumDefender = 0;
var onlineDefenderCount = 0;
for (x = 0; x < TWFBT.Statistics.stats.defender_count; x++) {
var onlinecount = TWFBT.Statistics.stats.result.defenderlist[x].onlinecount;
if(onlinecount > 0){
valueSumDefender += onlinecount;
onlineDefenderCount++;
}
}
var averageAttacker = valueSumAttacker / onlineAttackerCount;
var averageDefender = valueSumDefender / onlineDefenderCount;
return [Math.round(averageAttacker), Math.round(averageDefender), 'onlinecount'];
};
TWFBT.Statistics.getAveragePositionChanges = function(){
};
TWFBT.Statistics.getAverageWeaponDamage = function(){
var minDamage = TWFBT.Statistics.getValueSums('weaponmindmg');
var maxDamage = TWFBT.Statistics.getValueSums('weaponmaxdmg');
var averageAttacker = (minDamage[0] + maxDamage[0]) / 2;
var averageDefender = (minDamage[1] + maxDamage[1]) / 2;
return [Math.round(averageAttacker/TWFBT.Statistics.stats.attacker_count), Math.round(averageDefender/TWFBT.Statistics.stats.defender_count), 'averageWeaponDamage'];
};
TWFBT.Statistics.getBuffs = function(){
var weaponContainerAttacker = {'0-0': 0, '20-40': 0, '25-25': 0, '25-75': 0, '20-60': 0, '40-60': 0, '30-30': 0, '40-40': 0, '50-50': 0, '60-60': 0, '75-75': 0, '100-100': 0,};
var weaponContainerDefender = {'0-0': 0, '20-40': 0, '25-25': 0, '25-75': 0, '20-60': 0, '40-60': 0, '30-30': 0, '40-40': 0, '50-50': 0, '60-60': 0, '75-75': 0, '100-100': 0,};
for (x = 0; x < TWFBT.Statistics.stats.attacker_count; x++) {
var attacker = TWFBT.Statistics.stats.result.attackerlist[x];
var weapon = ItemManager.get(attacker.weaponid);
if(weapon == undefined){
console.log(attacker.name +' ' +attacker.weaponid);
}
var damage = weapon.getDamage();
var groundDamage = TWFBT.Statistics.getGroundDamage(attacker.charlevel, weapon.bonus.item, weapon.getItemLevel());
var damageMin = attacker.weaponmindmg-(damage.min+groundDamage);
var damageMax = attacker.weaponmaxdmg-(damage.max+groundDamage);
if(weaponContainerAttacker[damageMin + '-' + damageMax] == undefined){
damageMin--;
damageMax--;
}
weaponContainerAttacker[damageMin + '-' + damageMax] += 1;
}
for (x = 0; x < TWFBT.Statistics.stats.defender_count; x++) {
var defender = TWFBT.Statistics.stats.result.defenderlist[x];
var weapon = ItemManager.get(defender.weaponid);
var damage = weapon.getDamage();
var groundDamage = TWFBT.Statistics.getGroundDamage(defender.charlevel, weapon.bonus.item, weapon.getItemLevel());
var damageMin = defender.weaponmindmg-(damage.min+groundDamage);
var damageMax = defender.weaponmaxdmg-(damage.max+groundDamage);
if(weaponContainerDefender[damageMin + '-' + damageMax] == undefined){
damageMin--;
damageMax--;
}
weaponContainerDefender[damageMin + '-' + damageMax] += 1;
}
return [weaponContainerAttacker, weaponContainerDefender];
};
TWFBT.Statistics.getCharClasses = function(label) {
var charclass = '';
switch (label) {
case 'adventurers':
charclass = 0;
break;
case 'duelists':
charclass = 1;
break;
case 'workers':
charclass = 2;
break;
case 'soldiers':
charclass = 3;
break;
case 'greenhorns':
charclass = -1;
break;
}
var valueSumAttacker = 0;
for (x = 0; x < TWFBT.Statistics.stats.attacker_count; x++) {
if (TWFBT.Statistics.stats.result.attackerlist[x].charclass == charclass) {
valueSumAttacker++;
}
}
var valueSumDefender = 0;
for (x = 0; x < TWFBT.Statistics.stats.defender_count; x++) {
if (TWFBT.Statistics.stats.result.defenderlist[x].charclass == charclass) {
valueSumDefender++;
}
}
return [valueSumAttacker, valueSumDefender, label];
};
TWFBT.Statistics.getDamagerPerHit = function(){
var totalDamage = TWFBT.Statistics.getValueSums('totalcauseddamage');
var totalHits = TWFBT.Statistics.getValueSums('hitcount');
return [Math.round(totalDamage[0]/totalHits[0]),Math.round(totalDamage[1]/totalHits[1]), 'damagePerHit'];
};
TWFBT.Statistics.getDodgePercentage = function(side){
var valueSum = TWFBT.Statistics.getValueSums('dodgecount');
var totalShots = TWFBT.Statistics.getTotalShots();
if(side == 'attacker'){
return [valueSum[0],totalShots[1], 'dodgePercentage', 'red'];
} else {
return [valueSum[1],totalShots[0], undefined, 'blue'];
}
};
TWFBT.Statistics.getGroundDamage = function(charLevel, itemArray, itemLevel){
for (var x = 0; x < itemArray.length; x++) {
if(itemArray[x].bonus.type == 'damage'){
return Math.floor(charLevel * itemArray[x].bonus.value * (1 + itemLevel/10));
}
}
return 0;
};
TWFBT.Statistics.getHitPercentage = function(side){
var valueSum = TWFBT.Statistics.getValueSums('hitcount');
var totalShots = TWFBT.Statistics.getTotalShots();
if(side == 'attacker'){
return [valueSum[0],totalShots[0], 'hitPercentage', 'red'];
} else {
return [valueSum[1],totalShots[1], undefined, 'blue'];
}
};
TWFBT.Statistics.getOffliner = function(){
var sumOfflineAttacker = 0;
for (x = 0; x < TWFBT.Statistics.stats.attacker_count; x++) {
if(TWFBT.Statistics.stats.result.attackerlist[x].onlinecount == 0){
sumOfflineAttacker++;
}
}
var sumOfflineDefender = 0;
for (x = 0; x < TWFBT.Statistics.stats.defender_count; x++) {
if(TWFBT.Statistics.stats.result.defenderlist[x].onlinecount == 0){
sumOfflineDefender++;
}
}
return [sumOfflineAttacker, sumOfflineDefender, 'offliner'];
};
TWFBT.Statistics.getOrderOfMovement = function(){
var container = [];
for (x = 0; x < TWFBT.Statistics.stats.attacker_count || x < TWFBT.Statistics.stats.defender_count; x++) {
var player1 = '', id1 = '', rank1 = '';
if(x < TWFBT.Statistics.stats.attacker_count){
player1 = TWFBT.Statistics.stats.result.attackerlist[x].name;
id1 = TWFBT.Statistics.stats.result.attackerlist[x].westid;
rank1 = x+1;
}
var player2 = '', id2 = '', rank2 = '';
if(x < TWFBT.Statistics.stats.defender_count){
player2 = TWFBT.Statistics.stats.result.defenderlist[x].name;
id2 = TWFBT.Statistics.stats.result.defenderlist[x].westid;
rank2 = x+1;
}
var object = {'rank1': rank1, 'player1': player1, 'id1': id1, 'rank2': rank2, 'player2': player2, 'id2': id2,};
container.push(object);
}
return container;
};
TWFBT.Statistics.getPercentage = function(label, total){
var valueSum = getValueSums(label);
return TWFBT.Statistics.getSingleStatProgressBar(valueSum[0],total[0], label, 'red') + getSingleStatProgressBar(valueSum[1],total[1], '', 'blue');
};
TWFBT.Statistics.getPercentageProgressBar = function(value, max, label, color) {
var progress = new west.gui.Progressbar(value, max);
progress.setTextOnly(true);
progress.setColor(color);
progress.showPercentOnly(true);
if(label != undefined){
progress.setLabel(label);
}
return progress.getMainDiv();
};
TWFBT.Statistics.getPlayerRanking = function() {
var players = [];
for (x = 0; x < TWFBT.Statistics.stats.attacker_count; x++) {
var player = TWFBT.Statistics.stats.result.attackerlist[x];
var adventurerBonus = 1;
if(player.charclass == 0){
adventurerBonus = 1.75;
}
var value = (player.totalcauseddamage / 200) + (player.takenhits + player.dodgecount) * adventurerBonus;
player.formulaValue = Math.round(value * 100) / 100;
player.side = 'attacker';
players.push(player);
}
for (x = 0; x < TWFBT.Statistics.stats.defender_count; x++) {
var player = TWFBT.Statistics.stats.result.defenderlist[x];
var adventurerBonus = 1;
if(player.charclass == 0){
adventurerBonus = 1.75;
}
var value = (player.totalcauseddamage / 200) + (player.takenhits + player.dodgecount) * adventurerBonus;
player.formulaValue = Math.round(value * 100 ) / 100;
player.side = 'defender';
players.push(player);
}
return players;
};
TWFBT.Statistics.getProgressBar = function(att, deff, label) {
var progress;
if(att == 0 && deff == 0){
progress = new west.gui.Progressbar(0, 1);
} else {
progress = new west.gui.Progressbar(att, att + deff);
}
progress.setTextOnly(true);
progress.setLabel(label);
if(att > deff){
progress.setColor('red');
} else if(att < deff){
progress.setColor('blue');
progress.setDirection('rtl');
progress.setValue(deff);
}
var obj = progress.getMainDiv();
obj[0].childNodes[1].childNodes[3].innerText = format_number(att) +' / ' + format_number(deff);
return obj;
};
TWFBT.Statistics.getProgressBarWithSingleStat = function(values) {
var percentage = (values[0] / values[1]) * 100;
return TWFBT.Statistics.getPercentageProgressBar(Math.round(percentage), 100, TWFBTlang[values[2]],values[3]);
};
TWFBT.Statistics.getProgressBarWithStats = function(values) {
return TWFBT.Statistics.getProgressBar(values[0], values[1], TWFBTlang[values[2]]);
};
TWFBT.Statistics.getReportIcon = function(tooltip, backgroundPosition){
var icon = document.createElement('div');
icon.style.width = '16px';
icon.style.height = '16px';
icon.style.display = 'inline-block';
icon.style.background = "url('https://westzzs.innogamescdn.com/images/fort/battle/report_icons.png')";
icon.title = tooltip;
icon.style.backgroundPosition = backgroundPosition;
return icon
};
TWFBT.Statistics.getShotsPerPlayer = function(){
var totalShots = TWFBT.Statistics.getTotalShots();
return [Math.round(totalShots[0]/TWFBT.Statistics.stats.attacker_count),Math.round(totalShots[1]/TWFBT.Statistics.stats.defender_count),'shotsPerPlayer'];
};
TWFBT.Statistics.getSurvivingPlayer = function() {
var valueSumAttacker = 0;
for (x = 0; x < TWFBT.Statistics.stats.attacker_count; x++) {
if (TWFBT.Statistics.stats.result.attackerlist[x].diedwhen == 0) {
valueSumAttacker++;
}
}
var valueSumDefender = 0;
for (x = 0; x < TWFBT.Statistics.stats.defender_count; x++) {
if (TWFBT.Statistics.stats.result.defenderlist[x].diedwhen == 0) {
valueSumDefender++;
}
}
return [valueSumAttacker, valueSumDefender, 'survivingPlayerCount'];
};
TWFBT.Statistics.getTotalShots = function(){
var sumHits = TWFBT.Statistics.getValueSums('hitcount');
var sumMisses = TWFBT.Statistics.getValueSums('misscount');
return [sumHits[0]+sumMisses[0],sumHits[1]+sumMisses[1], 'totalShots'];
};
TWFBT.Statistics.getStatsAndLog = function(battle_id){
Ajax.remoteCallMode('fort_battleresultpage', 'get_battle', {
battle_id : battle_id,
}, function (data) {
TWFBT.Statistics.stats = data.stats;
TWFBT.Statistics.openStatsGUIOpen();
});
};
TWFBT.Statistics.getValueSums = function(label){
var sumAttacker = 0;
for (x = 0; x < TWFBT.Statistics.stats.attacker_count; x++) {
sumAttacker += TWFBT.Statistics.stats.result.attackerlist[x][label];
}
var sumDefender = 0;
for (x = 0; x < TWFBT.Statistics.stats.defender_count; x++) {
sumDefender += TWFBT.Statistics.stats.result.defenderlist[x][label];
}
return [sumAttacker, sumDefender, label];
};
TWFBT.Statistics.getWeapons = function(){
var weaponContainer = {};
var weaponContainerAttacker = {};
for (x = 0; x < TWFBT.Statistics.stats.attacker_count; x++) {
var weaponid = TWFBT.Statistics.stats.result.attackerlist[x].weaponid;
if (weaponContainerAttacker[weaponid] == undefined) {
weaponContainerAttacker[weaponid] = 1;
weaponContainer[weaponid] = 1;
} else {
weaponContainerAttacker[weaponid] += 1;
}
}
var weaponContainerDefender = {};
for (x = 0; x < TWFBT.Statistics.stats.defender_count; x++) {
var weaponid = TWFBT.Statistics.stats.result.defenderlist[x].weaponid;
if (weaponContainerDefender[weaponid] == undefined) {
weaponContainerDefender[weaponid] = 1;
weaponContainer[weaponid] = 1;
} else {
weaponContainerDefender[weaponid] += 1;
}
}
var resultContainer = [];
for(weaponid in weaponContainer){
if (weaponContainer.hasOwnProperty(weaponid)) {
var attackerWeaponsAmount = weaponContainerAttacker[weaponid];
var defenderWeaponsAmount = weaponContainerDefender[weaponid];
var object = {'attackerWeaponsAmount': attackerWeaponsAmount, 'defenderWeaponsAmount': defenderWeaponsAmount, 'weaponId': weaponid,};
resultContainer.push(object);
}
}
return resultContainer;
};
},
};
TWFBT.PreBattleChars = {
init: function() {
FortBattleWindow.renderChars_backup = FortBattleWindow.renderChars;
FortBattleWindow.renderChars = function (data) {
if (data)
if (!this.preBattle.setPlayerlist(data.playerlist, true))
return;
elsedata = this.preBattle.battleData.playerlist;
$('.otherchar', this.battlegroundEl).remove();
var playerlist = this.preBattle.battleData.playerlist;
for (var i in playerlist) {
if (!playerlist.hasOwnProperty(i))
continue;
var player = playerlist[i];
if (player.player_id == Character.playerId || player.idx < 0)
continue;
var el = $('.cell-' + player.idx, this.battlegroundEl);
if (!el.children().filter('.otherchar').length) {
$(el).append(getCharDiv(player.class));
}
}
};
var getCharDiv = function (charClass) {
var icon = document.createElement('div');
icon.style.opacity = 1;
icon.style.filter = "alpha(opacity=100)";
icon.style.width = '15px';
icon.style.height = '15px';
icon.style.position = 'absolute';
icon.style.background = 'url(' + TWFBT.Images.charClasses + ')';
icon.style.zIndex = '1';
switch (charClass) {
case 'adventurer':
icon.style.backgroundPosition = '0px -15px';
break;
case 'duelist':
icon.style.backgroundPosition = '0px -30px';
break;
case 'worker':
icon.style.backgroundPosition = '0px -45px';
break;
case 'soldier':
icon.style.backgroundPosition = '0px -60px';
break;
case 'greenhorn':
icon.style.backgroundPosition = '0px 0px';
break;
}
return icon;
}
}
};
TWFBT.Updater = function() {
$.getScript(TWFBT.updateUrl, function() {
if (scriptUpdate.TWFBT > TWFBTstart.version) {
var updateMessage = new west.gui.Dialog(TWFBTlang.update + ': ' + TWFBT.name, '' + TWFBTlang.updateAvailable + '
v' + scriptUpdate.TWFBT + ':
' + scriptUpdate.TWFBTNew + '', west.gui.Dialog.SYS_WARNING).addButton(TWFBTlang.update, function() {
updateMessage.hide();
location.href = TWFBT.website + '/code.user.js';
}).addButton('cancel').show();
}
});
};
setTimeout(TWFBT.Updater, 4000);
TWFBT.Skript.init();
});