- // ==UserScript==
- // @name The West Fortbattle Tool
- // @namespace The West Fortbattle Tool
- // @author westernblumi (updated by Tom Robert)
- // @description Fort battle tools for The West!
- // @include https://*.the-west.*/game.php*
- // @version 1.20
- // @grant 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 () {
- TWFBT = {
- version: '1.20',
- name: 'TW Fortbattle Tool',
- website: '//gf.qytechs.cn/scripts/22880',
- url: '//tomrobert.safe-ws.de/',
- langs: {
- en: {
- 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',
- damageBonus: 'Damage',
- defense: 'Defense',
- newFormula: 'new formula',
- oldFormula: 'old formula',
- pa: 'Premium (soldier and worker fort battle bonus)',
- pitfall: 'Setting traps',
- resistance: 'Resistance',
- scriptName: 'The West Fortbattle Tool',
- showFurtherStatistics: 'Show more statistics',
- team: 'Team',
- player: 'Player',
- playerCount: 'Number of players',
- survivingPlayerCount: 'Surviving players',
- offlinePlayerCount: 'Offline players',
- 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: 'Critical hits',
- 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',
- timeOfDeath: 'Time of death',
- round: 'Round',
- kos: 'KO\'s',
- damage: 'Damage',
- lifepointsAtRoundEnd: 'Lifepoints at the end of the round',
- passedOutDuringFight: 'Enemys passed out during that round',
- rounds: 'Rounds',
- importBattle: 'Import battle',
- importSuccessfull: 'Import successfull',
- importError: 'Import not successfull, the text contains errors',
- exportBattle: 'Export battle',
- overview: 'Overview',
- exportWeapons: 'Export weapons',
- exportRanking: 'Export ranking',
- exportOrderOfMovement: 'Export order of movement',
- exportTimeOfDeath: 'Export time of death',
- statistic: 'Statistic',
- pasteExport: 'Paste the text you got at the battle export',
- exportRounds: 'Export rounds',
- export: 'Export',
- exportBattleDescription: 'Here you can export the battle and e.g. import it at a later time',
- exportSingleStatisticDescription: 'Here you can export various statastics for using it in Excel',
- playdeadcount: 'Active adventurer bonus (invisibility)',
- },
- de: {
- attack: 'Angriff',
- bonusByClothes: 'Bonus durch Kleidung',
- bonusBySets: 'Bonus durch Sets',
- bonusBySkill: 'Bonus durch Skillung',
- bonusDefault: 'Grundbonus',
- bonusTotal: 'Gesamt',
- calcBonus: 'Berechne Fortkampfbonus',
- calculator: 'Rechner',
- clear: 'Lösche Berechnungen',
- clothes: 'Kleidung',
- damageBonus: 'Schaden',
- defense: 'Verteidigung',
- newFormula: 'neue Formel',
- oldFormula: 'alte Formel',
- pa: 'Premium (Soldaten und Arbeiterbonus)',
- pitfall: 'Fallen stellen',
- resistance: 'Widerstand',
- scriptName: 'The West FK Tool',
- showFurtherStatistics: 'Zeige weitere Statistiken',
- team: 'Team',
- player: 'Spieler',
- playerCount: 'Spielerzahl',
- survivingPlayerCount: 'Überlebende Spieler',
- offlinePlayerCount: 'Offliner',
- 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',
- timeOfDeath: 'Todeszeitpunkt',
- round: 'Runde',
- kos: 'KO\'s',
- damage: 'Schaden',
- lifepointsAtRoundEnd: 'Lebenspunkte am Ende der Runde',
- passedOutDuringFight: 'Ko geschossen in dieser Runde',
- rounds: 'Runden',
- importBattle: 'Kampf importieren',
- importSuccessfull: 'Das Importieren war erfolgreich',
- importError: 'Das Importieren war nicht möglich, da der Text fehlerhaft ist',
- exportBattle: 'Kampf exportieren',
- overview: 'Übersicht',
- exportWeapons: 'Waffen exportieren',
- exportRanking: 'Rangliste exportieren',
- exportOrderOfMovement: 'Zugreihenfolge exportieren',
- exportTimeOfDeath: 'Todeszeitpunkte exportieren',
- statistic: 'Statistik',
- pasteExport: 'Füge hier den Text ein, den du beim Exportieren erhalten hast',
- exportRounds: 'Runden exportieren',
- export: 'Export',
- exportBattleDescription: 'Hier kannst du den Kampf exportieren und z.B. für den FK Player verwenden oder ihn später wieder Importieren',
- exportSingleStatisticDescription: 'Hier kannst du verschiedenen Einzelstatistiken exportieren und in Excel verwenden',
- playdeadcount: 'Aktiver Abenteurer-Bonus (Ghost)',
- },
- es: {
- 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',
- damageBonus: 'Daño',
- defense: 'Defensa',
- newFormula: 'fórmula nueva',
- oldFormula: 'fórmula antigua',
- pa: 'Premium (bonus Soldado/Trabajador)',
- pitfall: 'Poner trampas',
- resistance: 'Resistencia',
- scriptName: 'The West Fortbattle Tool',
- showFurtherStatistics: 'Mostrar más estadísticas',
- team: 'Equipo',
- player: 'Jugador',
- playerCount: 'Número de jugadores',
- survivingPlayerCount: 'Jugadores supervivientes',
- offlinePlayerCount: 'Jugadores Off',
- 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: 'Buff de Daño',
- noBuff: 'Sin Buff de Daño',
- sectorBonus: 'Bonus de Sector',
- timeOfDeath: 'Hora de la muerte',
- round: 'Ronda',
- kos: 'Desmayos',
- damage: 'Daño',
- lifepointsAtRoundEnd: 'Puntos de vida al final de la ronda',
- passedOutDuringFight: 'Enemigos desmayados durante esa ronda',
- rounds: 'Rondas',
- importBattle: 'Importar batalla',
- importSuccessfull: 'Importación correcta',
- importError: 'Importación incorrecta, el texto contiene errores',
- exportBattle: 'Exportar batalla',
- overview: 'Resumen',
- exportWeapons: 'Exportar armas',
- exportRanking: 'Exportar clasificación',
- exportOrderOfMovement: 'Exportar orden de movimientos',
- exportTimeOfDeath: 'Exportar Hora de la muerte',
- statistic: 'Estadística',
- pasteExport: 'Paste the text you got at the battle export',
- exportRounds: 'Exportar rondas',
- export: 'Exportar',
- exportBattleDescription: 'Aquí puedes exportar la batalla para, por ejemplo, importarla más tarde',
- exportSingleStatisticDescription: 'Aquí puedes exportar varias estadísticas para usarlas en Excel',
- playdeadcount: 'Bono de aventurero activo (Invisibilidad)',
- },
- it: {
- language: 'Italiano',
- 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',
- damageBonus: 'Danno',
- defense: 'Bonus difesa',
- 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',
- showFurtherStatistics: 'Show more statistics',
- team: 'Team',
- player: 'Player',
- playerCount: 'Number of players',
- survivingPlayerCount: 'Surviving players',
- offlinePlayerCount: 'Offline players',
- 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',
- timeOfDeath: 'Time of death',
- round: 'Round',
- kos: 'KO\'s',
- damage: 'Damage',
- lifepointsAtRoundEnd: 'Lifepoints at the end of the round',
- passedOutDuringFight: 'Enemys passed out during that round',
- rounds: 'Rounds',
- importBattle: 'Import battle',
- importSuccessfull: 'Import successfull',
- importError: 'Import not successfull, the text contains errors',
- exportBattle: 'Export battle',
- overview: 'Overview',
- exportWeapons: 'Export weapons',
- exportRanking: 'Export ranking',
- exportOrderOfMovement: 'Export order of movement',
- exportTimeOfDeath: 'Export time of death',
- statistic: 'Statistic',
- pasteExport: 'Paste the text you got at the battle export',
- exportRounds: 'Export rounds',
- export: 'Export',
- exportBattleDescription: 'Here you can export the battle and e.g. import it at a later time',
- exportSingleStatisticDescription: 'Here you can export various statastics for using it in Excel',
- playdeadcount: 'Active adventurer bonus (invisibility)',
- },
- },
- side: 'attack',
- formula: 'newFormula',
- Images: {
- settings: 'data:image/jpeg;base64,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',
- charClasses: 'data:image/png;base64,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',
- },
- updateLang: function () {
- var lgs = TWFBT.langs,
- lg = [localStorage.getItem('scriptsLang'), Game.locale.substr(0, 2)];
- TWFBT.lang = lgs[lg[0]] ? lg[0] : lgs[lg[1]] ? lg[1] : 'en';
- TWFBTlang = lgs[TWFBT.lang];
- },
- };
- TWFBT.updateLang();
- TWFBT.Skript = {
- init: function () {
- TWFBT.Statistics.init();
- TWFBT.PreBattleChars.init();
- var styling = $('<style>').text('.TWFBT_left { position: relative; left: 28px; top: 20px;} .TWFBT_textarea {left: 20px; top: 25px;} .TWFBT_button {left: 25px; top: 30px;}');
- $('head').append(styling);
- var menuContainer = $('<div class="menulink" onClick="TWFBT.GUI.openTWFBTWindow();" title="' + TWFBTlang.scriptName + '">').css('background-image', 'url(' + TWFBT.Images.settings + ')').css('background-position', '0px 0px').on("mouseenter", function () {
- $(this).css('background-position', '-25px 0px');
- }).on('mouseleave', function () {
- $(this).css('background-position', '0px 0px');
- });
- $('#ui_menubar').append($('<div id="TWFBT_menubutton" class="ui_menucontainer">').append(menuContainer).append('<div class="menucontainer_bottom">'));
- },
- };
- var charclasses = {
- '-1': 'greenhorn',
- '0': 'adventurer',
- '1': 'duelist',
- '2': 'worker',
- '3': 'soldier',
- };
- TWFBT.GUI = {
- openTWFBTWindow: function () {
- TWFBT.GUI.open();
- TWFBT.GUI.calcSkill();
- },
- open: function () {
- TWFBT.GUI.window = wman.open('TWFBT', TWFBTlang.scriptName, 'noreload nocloseall').setMiniTitle(TWFBT.name);
- TWFBT.GUI.window.dontCloseAll = true;
- TWFBT.GUI.window.addTab(TWFBTlang.calculator, 'TWFBTCalcSkill', TWFBT.GUI.calcSkill);
- TWFBT.GUI.window.addTab(TWFBTlang.importBattle, 'TWFBTBattleImporterTab', TWFBT.GUI.showBattleImporter);
- },
- getDefault: function (tab) {
- TWFBT.GUI.window.clearContentPane().activateTab(tab);
- },
- showBattleImporter: function () {
- TWFBT.GUI.getDefault('TWFBTBattleImporterTab');
- var input = new west.gui.Textarea().setId("TWFBTbattleImporterInput").setWidth(635).setHeight(260);
- var importButton = new west.gui.Button(TWFBTlang.importBattle, function () {
- try {
- TWFBT.Statistics.stats.result = JSON.parse(input.getContent());
- MessageSuccess(TWFBTlang.importSuccessfull).show();
- TWFBT.Statistics.openStatsGUIOpen();
- } catch (err) {
- MessageError(TWFBTlang.importError).show();
- }
- }).getMainDiv();
- $(importButton).addClass("TWFBT_button");
- $(TWFBT.GUI.window.getContentPane()).append($("<span class='TWFBT_left strong'>" + TWFBTlang.pasteExport + ":<br></span>"),
- input.getMainDiv().addClass('TWFBT_textarea'), importButton);
- },
- calcSkill: function () {
- TWFBT.GUI.getDefault('TWFBTCalcSkill');
- var featScroll = new west.gui.Scrollpane();
- $(featScroll.getMainDiv()).css({
- 'margin-top': '10px'
- });
- var calcButton = new west.gui.Button(TWFBTlang.calcBonus, function () {
- TWFBT.Calculator.getLoader();
- });
- var clearButton = new west.gui.Button(TWFBTlang.clear, function () {
- clearTable();
- });
- if (TWFBT.pa === undefined)
- TWFBT.pa = Premium.hasBonus('character');
- if (TWFBT.characterClass === undefined)
- TWFBT.characterClass = Character.charClass;
- var paCheckbox = new west.gui.Checkbox().setLabel(TWFBTlang.pa).setCallback(function (t) {
- TWFBT.pa = t;
- }).setSelected(TWFBT.pa, 1);
- var charClassBox = new west.gui.Combobox();
- for (var p in charclasses) {
- p = charclasses[p];
- charClassBox.addItem(p, Game.InfoHandler.getLocalString4Charclass(p));
- }
- charClassBox.addListener(function (val) {
- TWFBT.characterClass = val;
- }).select(TWFBT.characterClass);
- var modeBox = new west.gui.Combobox()
- .addItem('attack', TWFBTlang.attack)
- .addItem('defense', TWFBTlang.defense)
- .addListener(function (val) {
- TWFBT.side = val;
- }).select(TWFBT.side);
- featScroll.appendContent([modeBox.getMainDiv(), ' ',
- paCheckbox.getMainDiv(), ' ',
- charClassBox.getMainDiv(), '<br>',
- calcButton.getMainDiv(),
- clearButton.getMainDiv(), '<table border="1" id="TWFBTCalculatorTable"></table>']);
- $(TWFBT.GUI.window.getContentPane()).append(featScroll.getMainDiv());
- var clearTable = function () {
- $('#TWFBTCalculatorTable').empty();
- };
- },
- };
- TWFBT.Calculator = {
- resetValues: function () {
- TWFBT.Calculator.values = {
- offense_defaultbonus: 25,
- defense_defaultbonus: 10,
- offense_fortbattlebonus: 0,
- defense_fortbattlebonus: 0,
- offense_setbonus: 0,
- defense_setbonus: 0,
- damageSector: 0,
- resistance: 0,
- };
- },
- getLoader: function () {
- if (!window.BattleCalc)
- $.getScript('//tw-calc.net/js/battle-calculator-core.js', function () {
- TWFBT.Calculator.calcSkills();
- }).fail(function () {
- alert('TWFBT error: ' + JSON.stringify(arguments))
- });
- else
- this.calcSkills();
- },
- calcSkills: function () {
- this.resetValues();
- if (!BattleCalc.getItemBonus_twfbt) {
- BattleCalc.getItemBonus_twfbt = BattleCalc.getItemBonus;
- BattleCalc.getItemBonus = function () {
- var b = BattleCalc.getItemBonus_twfbt.apply(this, arguments),
- tcv = TWFBT.Calculator.values;
- tcv.offense_fortbattlebonus += b.offense || 0;
- tcv.defense_fortbattlebonus += b.defense || 0;
- tcv.damageSector += b.damage || 0;
- tcv.resistance += b.resistance || 0;
- return b;
- };
- BattleCalc.getSetBonus_twfbt = BattleCalc.getSetBonus;
- BattleCalc.getSetBonus = function () {
- var c = BattleCalc.getSetBonus_twfbt.apply(this, arguments),
- tcw = TWFBT.Calculator.values;
- tcw.offense_setbonus += c.offense || 0;
- tcw.defense_setbonus += c.defense || 0;
- tcw.damageSector += c.damage || 0;
- tcw.resistance += c.resistance || 0;
- return c;
- };
- }
- this.input = {
- charClass: TWFBT.characterClass,
- premium: TWFBT.pa,
- level: Character.level,
- skills: {
- health: CharacterSkills.skills.health.getPointsWithBonus(),
- leadership: CharacterSkills.skills.leadership.getPointsWithBonus(),
- pitfall: CharacterSkills.skills.pitfall.getPointsWithBonus(),
- hide: CharacterSkills.skills.hide.getPointsWithBonus(),
- dodge: CharacterSkills.skills.dodge.getPointsWithBonus(),
- aim: CharacterSkills.skills.aim.getPointsWithBonus()
- },
- map_position: 0,
- bonus: {}
- };
- this.result = BattleCalc.coreCalc(this.input, 1);
- this.showData();
- },
- showData: function () {
- var CSkN = CharacterSkills.keyNames,
- trs = this.result[TWFBT.side],
- tv = this.values,
- side = TWFBT.side == 'attack' ? 'hide' : 'pitfall';
- content = $('<tr></tr>');
- content.append('<th colspan="9">' + TWFBTlang[TWFBT.side] + '</th>');
- $('#TWFBTCalculatorTable').append(content);
- content = $('<tr><th>' +
- CSkN.leadership + '</th><th>' +
- CSkN[side] + '</th><th>' +
- CSkN.aim + '</th><th>' +
- CSkN.dodge + '</th><th>' +
- TWFBTlang.bonusBySkill + '</th><th>' +
- TWFBTlang.bonusByClothes + '</th><th>' +
- TWFBTlang.bonusBySets + '</th><th>' +
- TWFBTlang.bonusDefault + '</th><th>' +
- TWFBTlang.bonusTotal + '</th></tr>');
- $('#TWFBTCalculatorTable').append(content);
- content = $('<tr></tr>');
- content.append('<td align="center">' + this.input.skills.leadership + '</td>' +
- '<td align="center">' + this.input.skills[side] + '</td>' +
- '<td align="center">' + this.input.skills.aim + '</td>' +
- '<td align="center">' + this.input.skills.dodge + '</td>' +
- '<td align="center">' + Math.round((trs.hit - tv.offense_defaultbonus - tv.offense_setbonus - tv.offense_fortbattlebonus) * 100) / 100 + '<br>' + Math.round((trs.dodge - tv.defense_defaultbonus - tv.defense_setbonus - tv.defense_fortbattlebonus) * 100) / 100 + '</td>' +
- '<td align="center">' + tv.offense_fortbattlebonus + '<br>' + tv.defense_fortbattlebonus + '</td>' +
- '<td align="center">' + tv.offense_setbonus + '<br>' + tv.defense_setbonus + '</td>' +
- '<td align="center">' + tv.offense_defaultbonus + '<br>' + tv.defense_defaultbonus + '</td>' +
- '<td align="center">' + trs.hit + '<br>' + trs.dodge + '</td>');
- $('#TWFBTCalculatorTable').append(content);
- content = $('<tr></tr>');
- content.append('<th>' + TWFBTlang.damageBonus + '</th><td align="center" style="vertical-align:middle;" colspan="2">' + this.result.damage + '<br>(' + tv.damageSector + ' ' + TWFBTlang.sectorBonus + ')</td>' +
- '<th colspan="2">' + TWFBTlang.resistance + '</th><td align="center" style="vertical-align:middle;">' + trs.resistance + '<br>(' + tv.resistance + ' ' + TWFBTlang.clothes + ')</td>' +
- '<th colspan="2">' + CSkN.health + '</th><td align="center" style="vertical-align:middle;">' + this.result.health + '</td>');
- $('#TWFBTCalculatorTable').append(content);
- content = $('<tr></tr>');
- var item_string = '';
- for (var item in Wear.wear) {
- var item_obj = Wear.wear[item].obj;
- var popup = new ItemPopup(item_obj, {
- character: {
- level: Character.level
- }
- }).popup;
- item_string += '<a class="itemlink hasMousePopup" href="javascript:void(0)" title="' + popup.getXHTML().escapeHTML() + '">' + item_obj.name + '<img width="15" height="15" src="' + item_obj.image + '"> </a>';
- }
- content.append('<th>' + TWFBTlang.clothes + '</th><td align="left" colspan="8">' + item_string + '</td>');
- $('#TWFBTCalculatorTable').append(content);
- },
- };
- TWFBT.Statistics = {
- openStatsGUIOpen: function () {
- TWFBT.Statistics.openStatsGUI();
- TWFBT.Statistics.showOverviewTab();
- },
- openStatsGUI: function () {
- TWFBT.Statistics.window = wman.open('TWFBT_2', TWFBTlang.scriptName, 'noreload').setMiniTitle(TWFBT.name)
- .addTab(TWFBTlang.overview, 'TWFBTOverviewTab', TWFBT.Statistics.showOverviewTab)
- .addTab(TWFBTlang.team, 'TWFBTTesterTab1', TWFBT.Statistics.showTeamStatsTab)
- .addTab(TWFBTlang.player, 'TWFBTTesterTab2', TWFBT.Statistics.showPerPlayerStatsTab)
- .addTab(TWFBTlang.ranking, 'TWFBTTesterTab3', TWFBT.Statistics.showRankingTab)
- .addTab(TWFBTlang.order, 'TWFBTTesterTab4', TWFBT.Statistics.showOrderTab)
- .addTab(TWFBTlang.weapons, 'TWFBTTesterTab5', TWFBT.Statistics.showWeaponsTab)
- .addTab(TWFBTlang.timeOfDeath, 'TWFBTTesterTab6', TWFBT.Statistics.showTimeOfDeathTab)
- .addTab(TWFBTlang.rounds, 'TWFBTTesterTab7', TWFBT.Statistics.showRoundStatsTab);
- },
- getDefault: function (tab) {
- TWFBT.Statistics.window.clearContentPane().activateTab(tab);
- },
- showOverviewTab: function () {
- TWFBT.Statistics.getDefault('TWFBTOverviewTab');
- var showTeamStatsButton = new west.gui.Button(TWFBTlang.team, TWFBT.Statistics.showTeamStatsTab).getMainDiv(),
- showPerPlayerStatsButton = new west.gui.Button(TWFBTlang.player, TWFBT.Statistics.showPerPlayerStatsTab).getMainDiv(),
- showRankingButton = new west.gui.Button(TWFBTlang.ranking, TWFBT.Statistics.showRankingTab).getMainDiv(),
- showOrderButton = new west.gui.Button(TWFBTlang.order, TWFBT.Statistics.showOrderTab).getMainDiv(),
- showWeaponsButton = new west.gui.Button(TWFBTlang.weapons, TWFBT.Statistics.showWeaponsTab).getMainDiv(),
- showTimeOfDeathButton = new west.gui.Button(TWFBTlang.timeOfDeath, TWFBT.Statistics.showTimeOfDeathTab).getMainDiv(),
- showRoundStatsButton = new west.gui.Button(TWFBTlang.rounds, TWFBT.Statistics.showRoundStatsTab).getMainDiv(),
- input = new west.gui.Textarea().setId("TWFBTbattleExporterInput").setWidth(450).setHeight(200),
- exportAllButton = new west.gui.Button(TWFBTlang.exportBattle, function () {
- TWFBT.Statistics.exportFunction(input, JSON.stringify(TWFBT.Statistics.stats.result));
- }).getMainDiv(),
- exportRankingButton = new west.gui.Button(TWFBTlang.exportRanking, function () {
- TWFBT.Statistics.exportFunction(input, TWFBT.Statistics.exportRankingStatistics());
- }).getMainDiv(),
- exportOrderOfMovementButton = new west.gui.Button(TWFBTlang.exportOrderOfMovement, function () {
- TWFBT.Statistics.exportFunction(input, TWFBT.Statistics.exportOrderOfMovementStatistics());
- }).getMainDiv(),
- exportWeaponsButton = new west.gui.Button(TWFBTlang.exportWeapons, function () {
- TWFBT.Statistics.exportFunction(input, TWFBT.Statistics.exportWeaponStatistics());
- }).getMainDiv(),
- exportTimeOfDeathButton = new west.gui.Button(TWFBTlang.exportTimeOfDeath, function () {
- TWFBT.Statistics.exportFunction(input, TWFBT.Statistics.exportTimeOfDeathStatistics());
- }).getMainDiv(),
- exportRoundsButton = new west.gui.Button(TWFBTlang.exportRounds, function () {
- TWFBT.Statistics.exportFunction(input, TWFBT.Statistics.exportRoundStatistics());
- }).getMainDiv();
- $(TWFBT.Statistics.window.getContentPane()).append($("<span class='TWFBT_left strong'>" + TWFBTlang.statistic + ' ' + TWFBTlang.overview + ":<br></span>"), showTeamStatsButton, showPerPlayerStatsButton, showRankingButton, showOrderButton, '<br><br>', showWeaponsButton, showTimeOfDeathButton, showRoundStatsButton, '<br><br>', $("<span class='TWFBT_left strong'>" + TWFBTlang.export + ":<br></span>"), "<span class='TWFBT_left'>" + TWFBTlang.exportBattleDescription + ":<br></span>", exportAllButton, "<br><br><br><span class='TWFBT_left'>" + TWFBTlang.exportSingleStatisticDescription + ":<br></span>", exportRankingButton, exportOrderOfMovementButton, exportWeaponsButton, '<br><br>', exportTimeOfDeathButton, exportRoundsButton);
- $('.TWFBT_2 .tw2gui_button').addClass("TWFBT_button");
- },
- showTeamStatsTab: function () {
- var that = TWFBT.Statistics;
- that.getDefault('TWFBTTesterTab1');
- var featScroll = new west.gui.Scrollpane();
- $(featScroll.getMainDiv()).css({
- 'margin-top': '5px'
- });
- featScroll.appendContent([that.getProgressBar(that.stats.result.attackerlist.length, that.stats.result.defenderlist.length, TWFBTlang.playerCount),
- that.getPBv(that.getOffliner()),
- that.getPBv(that.getSurvivingPlayer()),
- that.getPBv(that.getValueSums('totalcauseddamage')),
- that.getPBv(that.getTotalShots()),
- that.getPBv(that.getValueSums('crithits')),
- that.getPBv(that.getValueSums('playdeadcount')),
- that.getPBv(that.getValueSums('maxhp')),
- that.getPBv(that.getValueSums('starthp')),
- that.getPBv(that.getValueSums('finishedhp')),
- that.getProgressBarWithSingleStat(that.getHitPercentage('attacker')),
- that.getProgressBarWithSingleStat(that.getHitPercentage('defender')),
- that.getProgressBarWithSingleStat(that.getDodgePercentage('attacker')),
- that.getProgressBarWithSingleStat(that.getDodgePercentage('defender')),
- that.getPBv(that.getValueSums('hitcount')),
- that.getPBv(that.getValueSums('misscount')),
- that.getPBv(that.getValueSums('dodgecount')),
- that.getPBv(that.getValueSums('takenhits')),
- that.getPBv(that.getCharClasses(0)),
- that.getPBv(that.getCharClasses(1)),
- that.getPBv(that.getCharClasses(2)),
- that.getPBv(that.getCharClasses(3)),
- that.getPBv(that.getCharClasses(-1))]);
- var buffs = that.getBuffs();
- for (var buff in buffs[0])
- if (buffs[0].hasOwnProperty(buff))
- if (buff != '0-0')
- featScroll.appendContent(that.getProgressBar(buffs[0][buff], buffs[1][buff], TWFBTlang.damageBuff + ' +' + buff));
- else
- featScroll.appendContent(that.getProgressBar(buffs[0][buff], buffs[1][buff], TWFBTlang.noBuff));
- $(that.window.getContentPane()).append(featScroll.getMainDiv());
- },
- showPerPlayerStatsTab: function () {
- var that = TWFBT.Statistics;
- that.getDefault('TWFBTTesterTab2');
- var featScroll = new west.gui.Scrollpane();
- $(featScroll.getMainDiv()).css({
- 'margin-top': '5px'
- });
- featScroll.appendContent([that.getPBv(that.getAverage('charlevel')),
- that.getPBv(that.getAverage('maxhp')),
- that.getPBv(that.getAverage('starthp')),
- that.getPBv(that.getAverage('finishedhp')),
- that.getPBv(that.getAverage('totalcauseddamage')),
- that.getPBv(that.getDamagerPerHit()),
- that.getPBv(that.getAverageWeaponDamage()),
- that.getPBv(that.getAverageLifetime()),
- that.getPBv(that.getAverageOnlineTime()),
- that.getPBv(that.getShotsPerPlayer()),
- that.getPBv(that.getAverage('takendamage')),
- that.getPBv(that.getAverage('hitcount')),
- that.getPBv(that.getAverage('dodgecount'))]);
- $(that.window.getContentPane()).append(featScroll.getMainDiv());
- },
- showRankingTab: function () {
- TWFBT.Statistics.showRanking('points_desc');
- },
- showRanking: function (sort) {
- var that = TWFBT.Statistics;
- that.getDefault('TWFBTTesterTab3');
- var currArray = that.getPlayerRanking();
- switch (sort) {
- case "takenhits":
- currArray.sort(that.sortByTakenHits);
- break;
- case "takenhits_desc":
- currArray.sort(that.sortByTakenHits).reverse();
- break;
- case "dodgecount":
- currArray.sort(that.sortByDodgeCount);
- break;
- case "dodgecount_desc":
- currArray.sort(that.sortByDodgeCount).reverse();
- break;
- case "totalcauseddamage":
- currArray.sort(that.sortByTotalCausedDamage);
- break;
- case "totalcauseddamage_desc":
- currArray.sort(that.sortByTotalCausedDamage).reverse();
- break;
- case "charclass":
- currArray.sort(that.sortByCharclass);
- break;
- case "charclass_desc":
- currArray.sort(that.sortByCharclass).reverse();
- break;
- case "side":
- currArray.sort(that.sortBySide);
- break;
- case "side_desc":
- currArray.sort(that.sortBySide).reverse();
- break;
- case "points":
- currArray.sort(that.sortByRankingValue);
- break;
- case "points_desc":
- currArray.sort(that.sortByRankingValue).reverse();
- break;
- case "name_desc":
- currArray.sort(that.sortByName).reverse();
- break;
- //case "name":
- default:
- sort = "name";
- currArray.sort(that.sortByName);
- }
- var thName = $('<a>' + TWFBTlang.playerName + '</a>').click(function () {
- that.showRanking(sort == 'name_desc' ? 'name' : 'name_desc');
- return false;
- });
- var thPoints = $('<a>' + TWFBTlang.points + '</a>').click(function () {
- that.showRanking(sort == 'points_desc' ? 'points' : 'points_desc');
- return false;
- });
- var thSide = $('<a>' + TWFBTlang.side + '</a>').click(function () {
- that.showRanking(sort == 'side_desc' ? 'side' : 'side_desc');
- return false;
- });
- var thCharclass = $('<a>' + TWFBTlang.charclass + '</a>').click(function () {
- that.showRanking(sort == 'charclass_desc' ? 'charclass' : 'charclass_desc');
- return false;
- });
- var thTotalCausedDamage = $(that.getReportIcon(TWFBTlang.totalcauseddamage, '0 -51px')).click(function () {
- that.showRanking(sort == 'totalcauseddamage_desc' ? 'totalcauseddamage' : 'totalcauseddamage_desc');
- return false;
- });
- var thTakenHits = $(that.getReportIcon(TWFBTlang.takenhits, '0 -102px')).click(function () {
- that.showRanking(sort == 'takenhits_desc' ? 'takenhits' : 'takenhits_desc');
- return false;
- });
- var thDodgeCount = $(that.getReportIcon(TWFBTlang.dodgecount, '0 -153px')).click(function () {
- that.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);
- $.each(currArray, function (index, player_obj) {
- mytable.appendRow(null, 'TWFBTRankingRow_' + index)
- .appendToCell(-1, "TWFBT_ranking_name", '<a href="#" onClick="PlayerProfileWindow.open(' + player_obj.westid + ');">' + player_obj.name + '</a>')
- .appendToCell(-1, "TWFBT_ranking_points", player_obj.formulaValue)
- .appendToCell(-1, "TWFBT_ranking_side", '<div style="color: ' + (player_obj.side == 'attacker' ? 'red' : 'blue') + ';">' + TWFBTlang[player_obj.side] + '</div>')
- .appendToCell(-1, "TWFBT_ranking_charclass", '<img title="' + Game.InfoHandler.getLocalString4Charclass(charclasses[player_obj.charclass]) + '" src="images/class_choose/class_' + charclasses[player_obj.charclass] + '.png">')
- .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 = $('<style>').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);
- $(that.window.getContentPane()).empty();
- $(that.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 () {
- var that = TWFBT.Statistics;
- that.getDefault('TWFBTTesterTab4');
- var currArray = that.getOrderOfMovement();
- /*var thName = $('<a>'+TWFBTlang.playerName+'</a>').click(function(){ TWFBT.Statistics.showRanking(sort == 'name' ? 'name_desc' : 'name'); return false; });
- var thPoints = $('<a>'+TWFBTlang.points+'</a>').click(function(){ TWFBT.Statistics.showRanking(sort == 'points' ? 'points_desc' : 'points'); return false; });
- var thSide = $('<a>'+TWFBTlang.side+'</a>').click(function(){ TWFBT.Statistics.showRanking(sort == 'side' ? 'side_desc' : 'side'); return false; });
- var thCharclass = $('<a>'+TWFBTlang.charclass+'</a>').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_attackerRank")
- .addColumn("TWFBT_order_attackerName")
- .addColumn("TWFBT_order_defenderRank")
- .addColumn("TWFBT_order_defenderName")
- .appendToCell("head", "TWFBT_order_attackerRank", TWFBTlang.rank)
- .appendToCell("head", "TWFBT_order_attackerName", TWFBTlang.attacker)
- .appendToCell("head", "TWFBT_order_defenderRank", TWFBTlang.rank)
- .appendToCell("head", "TWFBT_order_defenderName", TWFBTlang.defender);
- $.each(currArray, function (index, player_obj) {
- mytable.appendRow(null, 'TWFBTOrderRow_' + index)
- .appendToCell(-1, "TWFBT_order_attackerRank", player_obj.attackerRank)
- .appendToCell(-1, "TWFBT_order_attackerName", '<a href="#" onClick="PlayerProfileWindow.open(' + player_obj.attackerId + ');">' + player_obj.attackerName + '</a>')
- .appendToCell(-1, "TWFBT_order_defenderRank", player_obj.defenderRank)
- .appendToCell(-1, "TWFBT_order_defenderName", '<a href="#" onClick="PlayerProfileWindow.open(' + player_obj.defenderId + ');">' + player_obj.defenderName + '</a>');
- });
- var styling = $('<style>').text('.remove-link { width:20px; } .TWFBT_order_attackerRank { width:50px; text-align: center;} .TWFBT_order_defenderRank { width:50px; text-align: center;} .TWFBT_order_attackerName { width:195px;} .TWFBT_order_defenderName{ width:195px;}');
- $('head').append(styling);
- $(that.window.getContentPane()).empty();
- $(that.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 () {
- var that = TWFBT.Statistics;
- that.getDefault('TWFBTTesterTab5');
- var currArray = that.getWeapons();
- var mytable = new west.gui.Table().setId('TWFBT_weapons_table')
- .addColumn("TWFBT_weapons_attacker")
- .addColumn("TWFBT_weapons_defender")
- .addColumn("TWFBT_weapons_id")
- .appendToCell("head", "TWFBT_weapons_attacker", TWFBTlang.attacker)
- .appendToCell("head", "TWFBT_weapons_defender", 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", '<div style="color: red;font-weight: bold;">' + (object.attackerWeaponsAmount || '') + '</div>')
- .appendToCell(-1, "TWFBT_weapons_defender", '<div style="color: blue;font-weight: bold;">' + (object.defenderWeaponsAmount || '') + '</div>')
- .appendToCell(-1, "TWFBT_weapons_id", '<a class="itemlink hasMousePopup" href="javascript:void(0)" title="' + popup.getXHTML().escapeHTML() + '">' + item.name + ' <img width="26" height="26" src="' + item.image + '"></a> <img width="15" height="12" src="images/items/item_level.png"> ' + item.item_level);
- });
- var styling = $('<style>').text('.TWFBT_weapons_attacker { width:100px; text-align: center;} .TWFBT_weapons_defender { width:100px; text-align: center;} .TWFBT_weapons_id { width:400px;}');
- $('head').append(styling);
- $(that.window.getContentPane()).empty();
- $(that.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'
- });
- },
- showTimeOfDeathTab: function () {
- var that = TWFBT.Statistics;
- that.getDefault('TWFBTTesterTab6');
- var currArrays = that.getTimeOfDeath(),
- attacker = currArrays[0],
- defender = currArrays[1],
- row,
- mytable = new west.gui.Table().setId('TWFBT_timeOfDeath_table')
- .addColumn("TWFBT_timeOfDeath_attacker")
- .addColumn("TWFBT_timeOfDeath")
- .addColumn("TWFBT_timeOfDeath_defender")
- .appendToCell("head", "TWFBT_timeOfDeath_attacker", TWFBTlang.attacker)
- .appendToCell("head", "TWFBT_timeOfDeath", TWFBTlang.round)
- .appendToCell("head", "TWFBT_timeOfDeath_defender", TWFBTlang.defender);
- for (var round = 1; round <= that.stats.result.roundsplayed; round++) {
- //row = mytable.appendRow(null, 'TWFBT_timeOfDeath_table'+(round-1) + ' highlight_row');
- row = mytable.appendRow(null, 'TWFBT_timeOfDeath_table_row');
- if (attacker[round])
- row.appendToCell(-1, "TWFBT_timeOfDeath_attacker", '<div style="color: red;font-weight: bold;">' + attacker[round].length + ' ' + TWFBTlang.kos + '</div>');
- else
- row.appendToCell(-1, "TWFBT_timeOfDeath_attacker", '');
- row.appendToCell(-1, "TWFBT_timeOfDeath", round);
- if (defender[round])
- row.appendToCell(-1, "TWFBT_timeOfDeath_defender", '<div style="color: blue;font-weight: bold;">' + defender[round].length + ' ' + TWFBTlang.kos + '</div>');
- else
- row.appendToCell(-1, "TWFBT_timeOfDeath_defender", '');
- var attackCounter = (!attacker[round]) ? 0 : attacker[round].length,
- defenderCounter = (!defender[round]) ? 0 : defender[round].length;
- for (var i = 0; i < Math.max(attackCounter, defenderCounter); i++) {
- row = mytable.appendRow(null, 'TWFBT_timeOfDeath_table' + (round - 1));
- if (attacker[round] && attacker[round][i])
- row.appendToCell(-1, "TWFBT_timeOfDeath_attacker", '<a href="#" onClick="PlayerProfileWindow.open(' + attacker[round][i].westid + ');">' + attacker[round][i].name + '</a>');
- else
- row.appendToCell(-1, "TWFBT_timeOfDeath_attacker", '');
- row.appendToCell(-1, "TWFBT_timeOfDeath", '');
- if (defender[round] && defender[round][i])
- row.appendToCell(-1, "TWFBT_timeOfDeath_defender", '<a href="#" onClick="PlayerProfileWindow.open(' + defender[round][i].westid + ');">' + defender[round][i].name + '</a>');
- else
- row.appendToCell(-1, "TWFBT_timeOfDeath_defender", '');
- }
- }
- var styling = $('<style>').text('.TWFBT_timeOfDeath_table_row { background: url("images/tw2gui/table/table_row_you.png") repeat scroll transparent !important;} .TWFBT_timeOfDeath { width:50px; text-align: center;} .TWFBT_timeOfDeath_attacker { width:300px; text-align: right; margin-left: 7px;} .TWFBT_timeOfDeath_defender { width:300px; margin-right: 7px;}');
- $('head').append(styling);
- $(that.window.getContentPane()).empty().append(mytable.getMainDiv());
- $('#TWFBT_timeOfDeath_table').css({
- 'margin-top': '5px',
- });
- $('#TWFBT_timeOfDeath_table > div.trows > div.tbody > div.tw2gui_scrollpane').css({
- 'height': '290px'
- });
- },
- showRoundStatsTab: function () {
- var that = TWFBT.Statistics;
- that.getDefault('TWFBTTesterTab7');
- var currArrays = that.getRoundStatistics(),
- attacker = currArrays[0],
- defender = currArrays[1],
- row,
- mytable = new west.gui.Table().setId('TWFBT_roundStats_table')
- .addColumn("TWFBT_roundStats_attacker")
- .addColumn("TWFBT_roundStats_round")
- .addColumn("TWFBT_roundStats_defender")
- .appendToCell("head", "TWFBT_roundStats_attacker", TWFBTlang.attacker)
- .appendToCell("head", "TWFBT_roundStats_round", TWFBTlang.round)
- .appendToCell("head", "TWFBT_roundStats_defender", TWFBTlang.defender);
- for (var round = 2; round <= that.stats.result.roundsplayed; round++) {
- row = mytable.appendRow(null, 'TWFBT_roundStats_table_row_highlighted')
- .appendToCell(-1, "TWFBT_roundStats_attacker", '')
- .appendToCell(-1, "TWFBT_roundStats_round", round)
- .appendToCell(-1, "TWFBT_roundStats_defender", '');
- row = mytable.appendRow(null, 'TWFBT_roundStats_table' + (round - 2))
- .appendToCell(-1, "TWFBT_roundStats_attacker", attacker[round].damage)
- .appendToCell(-1, "TWFBT_roundStats_round", TWFBTlang.damage)
- .appendToCell(-1, "TWFBT_roundStats_defender", defender[round].damage);
- row = mytable.appendRow(null, 'TWFBT_roundStats_table' + (round - 1))
- .appendToCell(-1, "TWFBT_roundStats_attacker", attacker[round].hits)
- .appendToCell(-1, "TWFBT_roundStats_round", TWFBTlang.hitcount)
- .appendToCell(-1, "TWFBT_roundStats_defender", defender[round].hits);
- row = mytable.appendRow(null, 'TWFBT_roundStats_table' + (round - 1))
- .appendToCell(-1, "TWFBT_roundStats_attacker", (attacker[round].shots - attacker[round].hits))
- .appendToCell(-1, "TWFBT_roundStats_round", TWFBTlang.misscount)
- .appendToCell(-1, "TWFBT_roundStats_defender", (defender[round].shots - defender[round].hits));
- row = mytable.appendRow(null, 'TWFBT_roundStats_table' + (round - 1))
- .appendToCell(-1, "TWFBT_roundStats_attacker", attacker[round].kos)
- .appendToCell(-1, "TWFBT_roundStats_round", TWFBTlang.passedOutDuringFight)
- .appendToCell(-1, "TWFBT_roundStats_defender", defender[round].kos);
- row = mytable.appendRow(null, 'TWFBT_roundStats_table' + (round - 1))
- .appendToCell(-1, "TWFBT_roundStats_attacker", attacker[round].lps)
- //.appendToCell(-1, "TWFBT_roundStats_attacker", that.getPercentageProgressBar(attacker[round].lps, attacker[2].lps + defender[2].damage, undefined, 'red'))
- .appendToCell(-1, "TWFBT_roundStats_round", TWFBTlang.lifepointsAtRoundEnd)
- .appendToCell(-1, "TWFBT_roundStats_defender", defender[round].lps - attacker[round].damage);
- //.appendToCell(-1, "TWFBT_roundStats_defender", that.getPercentageProgressBar(defender[round].lps-attacker[round].damage, defender[2].lps, undefined, 'blue'));
- }
- var styling = $('<style>').text('.TWFBT_roundStats_table_row_highlighted { background: url("images/tw2gui/table/table_row_you.png") repeat scroll transparent !important;} .TWFBT_roundStats_round { width:250px; text-align: center;} .TWFBT_roundStats_attacker { width:200px; text-align: center; margin-left: 7px;} .TWFBT_roundStats_defender { width:200px; margin-right: 7px; text-align: center;}');
- $('head').append(styling);
- $(that.window.getContentPane()).empty().append(mytable.getMainDiv());
- $('#TWFBT_roundStats_table').css({
- 'margin-top': '5px',
- });
- $('#TWFBT_roundStats_table > div.trows > div.tbody > div.tw2gui_scrollpane').css({
- 'height': '290px'
- });
- },
- exportFunction: function (input, content) {
- input.setContent(content);
- new west.gui.Dialog('Export', input.getMainDiv())
- .setModal(true, true, {
- bg: "images/curtain_bg.png",
- opacity: 0.7
- })
- .show();
- },
- 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_twfbt = FortOverviewWindow.RecentBattles._initContent;
- FortOverviewWindow.RecentBattles._initContent = function () {
- FortOverviewWindow.RecentBattles._initContent_twfbt.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) {
- var regex = new RegExp('\,[0-9]+');
- var battle_id = href.match(regex)[0].substr(1);
- $('.graveyardtable > tbody > tr:nth-child(' + i + ')').append('<td><a href="#" onClick="TWFBT.Statistics.getStatsAndLog(' + battle_id + ');" title="' + TWFBTlang.showFurtherStatistics + '"><img width="15" height="15" src="images/icons/sword.png"></a></td>');
- $('.graveyardtable > tbody > tr:nth-child(' + (i + 1) + ') > td').attr("colspan", "8");
- }
- }
- }
- };
- this.exportRankingStatistics = function () {
- var resultArray = this.getPlayerRanking();
- resultArray.sort(this.sortByRankingValue).reverse();
- var text = TWFBTlang.rank + '\t' + TWFBTlang.playerName + '\t' + TWFBTlang.points + '\t' + TWFBTlang.side + '\t' + TWFBTlang.charclass + '\t' + TWFBTlang.totalcauseddamage + '\t' + TWFBTlang.takendamage + '\t' + TWFBTlang.dodgecount + '\n';
- $.each(resultArray, function (index, player_obj) {
- text += (index + 1) + '\t' + player_obj.name + '\t' + player_obj.formulaValue + '\t' + TWFBTlang[player_obj.side] + '\t' + Game.InfoHandler.getLocalString4Charclass(charclasses[player_obj.charclass]) + '\t' + player_obj.totalcauseddamage + '\t' + player_obj.takenhits + '\t' + player_obj.dodgecount + '\n';
- });
- return text;
- };
- this.exportOrderOfMovementStatistics = function () {
- var resultArray = this.getOrderOfMovement();
- var text = TWFBTlang.round + '\t' + TWFBTlang.attacker + '\t' + TWFBTlang.defender + '\n';
- $.each(resultArray, function (index, round_obj) {
- text += round_obj.attackerRank + '\t' + round_obj.attackerName + '\t' + round_obj.defenderName + '\n';
- });
- return text;
- };
- this.exportWeaponStatistics = function () {
- var resultArray = this.getWeapons();
- var text = TWFBTlang.weapon + '\t' + TWFBTlang.attacker + '\t' + TWFBTlang.defender + '\t' + '\n';
- for (var i = 0; i < resultArray.length; i++) {
- text += resultArray[i].weaponId + '\t';
- if (resultArray[i].attackerWeaponsAmount)
- text += resultArray[i].attackerWeaponsAmount + '\t';
- else
- text += '0\t';
- if (resultArray[i].defenderWeaponsAmount)
- text += resultArray[i].defenderWeaponsAmount + '\t';
- else
- text += '0\t';
- text += '\n';
- }
- return text;
- };
- this.exportTimeOfDeathStatistics = function () {
- var currArrays = this.getTimeOfDeath(),
- attacker = currArrays[0],
- defender = currArrays[1],
- text = TWFBTlang.round + '\t' + TWFBTlang.attacker + '\t' + TWFBTlang.defender + '\t' + '\n';
- for (var round = 1; round <= this.stats.result.roundsplayed; round++) {
- //var row = mytable.appendRow(null, 'TWFBT_timeOfDeath_table'+(round-1) + ' highlight_row');
- text += round + '\t';
- var attackCounter = !attacker[round] ? 0 : attacker[round].length;
- var defenderCounter = !defender[round] ? 0 : defender[round].length;
- for (var i = 0; i < Math.max(attackCounter, defenderCounter); i++) {
- if (attacker[round] && attacker[round][i])
- text += attacker[round][i].name + ',';
- if (defender[round] && defender[round][i])
- text += defender[round][i].name + ',';
- }
- text += '\n';
- }
- return text;
- };
- this.exportRoundStatistics = function () {
- var currArrays = this.getRoundStatistics(),
- attacker = currArrays[0],
- defender = currArrays[1],
- text = TWFBTlang.round + '\t' + TWFBTlang.attacker + ' ' + TWFBTlang.damage + '\t' + TWFBTlang.attacker + ' ' + TWFBTlang.hitcount + '\t' +
- TWFBTlang.attacker + ' ' + TWFBTlang.misscount + '\t' + TWFBTlang.attacker + ' ' + TWFBTlang.passedOutDuringFight + '\t' + TWFBTlang.attacker + ' ' + TWFBTlang.lifepointsAtRoundEnd + '\t' +
- TWFBTlang.defender + ' ' + TWFBTlang.damage + '\t' + TWFBTlang.defender + ' ' + TWFBTlang.hitcount + '\t' +
- TWFBTlang.defender + ' ' + TWFBTlang.misscount + '\t' + TWFBTlang.defender + ' ' + TWFBTlang.passedOutDuringFight + '\t' + TWFBTlang.defender + ' ' + TWFBTlang.lifepointsAtRoundEnd + '\t' + '\n';
- for (var round = 2; round <= this.stats.result.roundsplayed; round++) {
- text += round + '\t' + attacker[round].damage + '\t' + attacker[round].hits + '\t' + (attacker[round].shots - attacker[round].hits) + '\t' + attacker[round].kos + '\t' + attacker[round].lps + '\t' +
- defender[round].damage + '\t' + defender[round].hits + '\t' + (defender[round].shots - defender[round].hits) + '\t' + defender[round].kos + '\t' + (defender[round].lps - attacker[round].damage) + '\n';
- }
- return text;
- };
- this.getRoundStatistics = function () {
- var round,
- defenderStatsByRounds = {},
- attackerStatsByRounds = {},
- log = this.stats.result.log;
- for (var i = 0; i < log.length; i += 2) {
- switch (log[i]) {
- case 0: //Roundstart
- round = log[i + 1];
- defenderStatsByRounds[round] = {
- damage: 0,
- hits: 0,
- shots: 0,
- kos: 0,
- lps: 0,
- };
- attackerStatsByRounds[round] = {
- damage: 0,
- hits: 0,
- shots: 0,
- kos: 0,
- lps: 0,
- };
- break;
- case 1:
- if (log[i + 2] == 3) {
- if (TWFBT.Statistics.defenderList[log[i + 1]]) // id = defender id
- defenderStatsByRounds[round].lps += log[i + 3];
- else //id = attacker id
- attackerStatsByRounds[round].lps += log[i + 3];
- } else if (log[i + 4] == 3) {
- if (TWFBT.Statistics.defenderList[log[i + 1]]) // id = defender id
- defenderStatsByRounds[round].lps += log[i + 5];
- else //id = attacker id
- attackerStatsByRounds[round].lps += log[i + 5];
- }
- for (var j = 2; j < 15; j += 2) {
- if (log[i + j] == 5)
- if (TWFBT.Statistics.defenderList[log[i + 1]]) // id = defender id
- defenderStatsByRounds[round].shots++;
- else //id = attacker id
- attackerStatsByRounds[round].shots++;
- if (log[i + j] == 6)
- if (TWFBT.Statistics.defenderList[log[i + 1]]) // id = defender id
- defenderStatsByRounds[round].kos++;
- else //id = attacker id
- attackerStatsByRounds[round].kos++;
- if (log[i + j] == 7 || log[i + j] == 6)
- if (TWFBT.Statistics.defenderList[log[i + 1]]) { // id = defender id
- defenderStatsByRounds[round].damage += log[i + j + 1];
- defenderStatsByRounds[round].hits++;
- } else { //id = attacker id
- attackerStatsByRounds[round].damage += log[i + j + 1];
- attackerStatsByRounds[round].hits++;
- }
- }
- break;
- }
- }
- return [attackerStatsByRounds, defenderStatsByRounds];
- };
- this.getTimeOfDeath = function () {
- var valuesAttacker = {};
- for (var x = 0; x < this.stats.result.attackerlist.length; x++) {
- var diedwhen = this.stats.result.attackerlist[x].diedwhen;
- if (diedwhen) {
- if (!valuesAttacker[diedwhen])
- valuesAttacker[diedwhen] = [];
- valuesAttacker[diedwhen].push(this.stats.result.attackerlist[x]);
- }
- }
- var valuesDefender = {};
- for (var y = 0; y < this.stats.result.defenderlist.length; y++) {
- var diedwhe = this.stats.result.defenderlist[y].diedwhen;
- if (diedwhe) {
- if (!valuesDefender[diedwhe])
- valuesDefender[diedwhe] = [];
- valuesDefender[diedwhe].push(this.stats.result.defenderlist[y]);
- }
- }
- return [valuesAttacker, valuesDefender];
- };
- this.getAverage = function (label) {
- var valueSumAttacker = 0;
- for (x = 0; x < this.stats.result.attackerlist.length; x++)
- valueSumAttacker += this.stats.result.attackerlist[x][label];
- var valueSumDefender = 0;
- for (x = 0; x < this.stats.result.defenderlist.length; x++)
- valueSumDefender += this.stats.result.defenderlist[x][label];
- var averageAttacker = valueSumAttacker / this.stats.result.attackerlist.length;
- var averageDefender = valueSumDefender / this.stats.result.defenderlist.length;
- return [Math.round(averageAttacker), Math.round(averageDefender), label];
- };
- this.getAverageLifetime = function () {
- var valueSumAttacker = 0;
- for (x = 0; x < this.stats.result.attackerlist.length; x++) {
- var diedwhen = this.stats.result.attackerlist[x].diedwhen;
- if (diedwhen > 0)
- valueSumAttacker += diedwhen;
- else if (diedwhen == 0)
- valueSumAttacker += this.stats.result.roundsplayed;
- }
- var valueSumDefender = 0;
- for (x = 0; x < this.stats.result.defenderlist.length; x++) {
- var diedwhe = this.stats.result.defenderlist[x].diedwhen;
- if (diedwhe > 0)
- valueSumDefender += diedwhe;
- else if (diedwhe == 0)
- valueSumDefender += this.stats.result.roundsplayed;
- }
- var averageAttacker = valueSumAttacker / this.stats.result.attackerlist.length;
- var averageDefender = valueSumDefender / this.stats.result.defenderlist.length;
- return [Math.round(averageAttacker), Math.round(averageDefender), 'diedwhen'];
- };
- this.getAverageOnlineTime = function () {
- var valueSumAttacker = 0;
- var onlineAttackerCount = 0;
- for (x = 0; x < this.stats.result.attackerlist.length; x++) {
- var onlinecount = this.stats.result.attackerlist[x].onlinecount;
- if (onlinecount > 0) {
- valueSumAttacker += onlinecount;
- onlineAttackerCount++;
- }
- }
- var valueSumDefender = 0;
- var onlineDefenderCount = 0;
- for (x = 0; x < this.stats.result.defenderlist.length; x++) {
- var onlinecoun = this.stats.result.defenderlist[x].onlinecount;
- if (onlinecoun > 0) {
- valueSumDefender += onlinecoun;
- onlineDefenderCount++;
- }
- }
- var averageAttacker = valueSumAttacker / onlineAttackerCount;
- var averageDefender = valueSumDefender / onlineDefenderCount;
- return [Math.round(averageAttacker), Math.round(averageDefender), 'onlinecount'];
- };
- this.getAverageWeaponDamage = function () {
- var minDamage = this.getValueSums('weaponmindmg'),
- maxDamage = this.getValueSums('weaponmaxdmg'),
- averageAttacker = (minDamage[0] + maxDamage[0]) / 2,
- averageDefender = (minDamage[1] + maxDamage[1]) / 2;
- return [Math.round(averageAttacker / this.stats.result.attackerlist.length), Math.round(averageDefender / this.stats.result.defenderlist.length), 'averageWeaponDamage'];
- };
- this.getBuffs = function () {
- var buffs = {},
- loadBuffs = function (ad) {
- var side = ad ? 'attack' : 'defend',
- list = TWFBT.Statistics.stats.result[side + 'erlist'];
- for (var x of list) {
- var weapon = ItemManager.get(x.weaponid),
- damage = weapon.getDamage(),
- groundDamage = TWFBT.Statistics.getGroundDamage(x.charlevel, weapon.bonus.item, weapon.getItemLevel()),
- buff = Math.round((x.weaponmindmg - damage.min - groundDamage) / 5) * 5 + '-' + Math.round((x.weaponmaxdmg - damage.max - groundDamage) / 5) * 5;
- if (!buffs[buff])
- buffs[buff] = [0, 0];
- buffs[buff][ad]++;
- }
- },
- weaponContainer = [{}, {}
- ];
- loadBuffs(0);
- loadBuffs(1);
- var sorted = Object.keys(buffs).sort(function (a, b) {
- return a > b ? 1 : -1;
- });
- for (var i of sorted) {
- weaponContainer[0][i] = buffs[i][0];
- weaponContainer[1][i] = buffs[i][1];
- }
- return weaponContainer;
- };
- this.getCharClasses = function (id) {
- var valueSumAttacker = 0;
- for (x = 0; x < this.stats.result.attackerlist.length; x++)
- if (this.stats.result.attackerlist[x].charclass == id)
- valueSumAttacker++;
- var valueSumDefender = 0;
- for (x = 0; x < this.stats.result.defenderlist.length; x++)
- if (this.stats.result.defenderlist[x].charclass == id)
- valueSumDefender++;
- return [valueSumAttacker, valueSumDefender, Game.InfoHandler.getLocalString4Charclass(charclasses[id])];
- };
- this.getDamagerPerHit = function () {
- var totalDamage = this.getValueSums('totalcauseddamage');
- var totalHits = this.getValueSums('hitcount');
- return [Math.round(totalDamage[0] / totalHits[0]), Math.round(totalDamage[1] / totalHits[1]), 'damagePerHit'];
- };
- this.getDodgePercentage = function (side) {
- var valueSum = this.getValueSums('dodgecount');
- var totalShots = this.getTotalShots();
- if (side == 'attacker')
- return [valueSum[0], totalShots[1], 'dodgePercentage', 'red'];
- else
- return [valueSum[1], totalShots[0], undefined, 'blue'];
- };
- this.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;
- };
- this.getHitPercentage = function (side) {
- var valueSum = this.getValueSums('hitcount');
- var totalShots = this.getTotalShots();
- if (side == 'attacker')
- return [valueSum[0], totalShots[0], 'hitPercentage', 'red'];
- else
- return [valueSum[1], totalShots[1], undefined, 'blue'];
- };
- this.getOffliner = function () {
- var sumOfflineAttacker = 0;
- for (x = 0; x < this.stats.result.attackerlist.length; x++)
- if (this.stats.result.attackerlist[x].onlinecount == 0)
- sumOfflineAttacker++;
- var sumOfflineDefender = 0;
- for (x = 0; x < this.stats.result.defenderlist.length; x++)
- if (this.stats.result.defenderlist[x].onlinecount == 0)
- sumOfflineDefender++;
- return [sumOfflineAttacker, sumOfflineDefender, 'offliner'];
- };
- this.getOrderOfMovement = function () {
- var container = [];
- for (x = 0; x < this.stats.result.attackerlist.length || x < this.stats.result.defenderlist.length; x++) {
- var attackerName = '',
- attackerId = '',
- attackerRank = '';
- if (x < this.stats.result.attackerlist.length) {
- attackerName = this.stats.result.attackerlist[x].name;
- attackerId = this.stats.result.attackerlist[x].westid;
- attackerRank = x + 1;
- }
- var defenderName = '',
- defenderId = '',
- defenderRank = '';
- if (x < this.stats.result.defenderlist.length) {
- defenderName = this.stats.result.defenderlist[x].name;
- defenderId = this.stats.result.defenderlist[x].westid;
- defenderRank = x + 1;
- }
- var object = {
- attackerRank: attackerRank,
- attackerName: attackerName,
- attackerId: attackerId,
- defenderRank: defenderRank,
- defenderName: defenderName,
- defenderId: defenderId,
- };
- container.push(object);
- }
- return container;
- };
- this.getPercentage = function (label, total) {
- var valueSum = getValueSums(label);
- return this.getSingleStatProgressBar(valueSum[0], total[0], label, 'red') + getSingleStatProgressBar(valueSum[1], total[1], '', 'blue');
- };
- this.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)
- progress.setLabel(label);
- return progress.getMainDiv();
- };
- this.getPlayerRanking = function () {
- var players = [],
- player,
- adventurerBonus,
- value;
- for (x = 0; x < this.stats.result.attackerlist.length; x++) {
- player = this.stats.result.attackerlist[x];
- adventurerBonus = 1;
- if (player.charclass == 0)
- adventurerBonus = 1.75;
- 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 < this.stats.result.defenderlist.length; x++) {
- player = this.stats.result.defenderlist[x];
- adventurerBonus = 1;
- if (player.charclass == 0)
- adventurerBonus = 1.75;
- value = (player.totalcauseddamage / 200) + (player.takenhits + player.dodgecount) * adventurerBonus;
- player.formulaValue = Math.round(value * 100) / 100;
- player.side = 'defender';
- players.push(player);
- }
- return players;
- };
- this.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();
- //console.log('att: ' + att + ' deff: ' + deff);
- obj[0].childNodes[1].childNodes[3].innerText = format_number(att) + ' / ' + format_number(deff);
- return obj;
- };
- this.getProgressBarWithSingleStat = function (values) {
- var percentage = (values[0] / values[1]) * 100;
- return this.getPercentageProgressBar(Math.round(percentage), 100, TWFBTlang[values[2]], values[3]);
- };
- this.getPBv = function (values) {
- return this.getProgressBar(values[0], values[1], TWFBTlang[values[2]] || values[2]);
- };
- this.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('images/fort/battle/report_icons.png')";
- icon.title = tooltip;
- icon.style.backgroundPosition = backgroundPosition;
- return icon;
- };
- this.getShotsPerPlayer = function () {
- var totalShots = this.getTotalShots();
- return [Math.round(totalShots[0] / this.stats.result.attackerlist.length), Math.round(totalShots[1] / this.stats.result.defenderlist.length), 'shotsPerPlayer'];
- };
- this.getSurvivingPlayer = function () {
- var valueSumAttacker = 0;
- for (x = 0; x < this.stats.result.attackerlist.length; x++)
- if (this.stats.result.attackerlist[x].diedwhen == 0)
- valueSumAttacker++;
- var valueSumDefender = 0;
- for (x = 0; x < this.stats.result.defenderlist.length; x++)
- if (this.stats.result.defenderlist[x].diedwhen == 0)
- valueSumDefender++;
- return [valueSumAttacker, valueSumDefender, 'survivingPlayerCount'];
- };
- this.getTotalShots = function () {
- var sumHits = this.getValueSums('hitcount');
- var sumMisses = this.getValueSums('misscount');
- return [sumHits[0] + sumMisses[0], sumHits[1] + sumMisses[1], 'totalShots'];
- };
- this.getStatsAndLog = function (battle_id) {
- Ajax.remoteCallMode('fort_battleresultpage', 'get_battle', {
- battle_id: battle_id,
- }, function (data) {
- TWFBT.Statistics.stats = data.stats;
- TWFBT.Statistics.attackerList = {};
- TWFBT.Statistics.defenderList = {};
- for (var x = 0; x < data.stats.defender_count; x++)
- TWFBT.Statistics.defenderList[data.stats.result.defenderlist[x].westid] = data.stats.result.defenderlist[x];
- for (var y = 0; y < data.stats.attacker_count; y++)
- TWFBT.Statistics.attackerList[data.stats.result.attackerlist[y].westid] = data.stats.result.attackerlist[y];
- TWFBT.Statistics.openStatsGUIOpen();
- });
- };
- this.getValueSums = function (label) {
- var sumAttacker = 0;
- for (var x = 0; x < this.stats.result.attackerlist.length; x++)
- sumAttacker += this.stats.result.attackerlist[x][label];
- var sumDefender = 0;
- for (var y = 0; y < this.stats.result.defenderlist.length; y++)
- sumDefender += this.stats.result.defenderlist[y][label];
- return [sumAttacker, sumDefender, label];
- };
- this.getWeapons = function () {
- var weaponContainer = {};
- var weaponContainerAttacker = {},
- weaponid;
- for (x = 0; x < this.stats.result.attackerlist.length; x++) {
- weaponid = this.stats.result.attackerlist[x].weaponid;
- if (!weaponContainerAttacker[weaponid]) {
- weaponContainerAttacker[weaponid] = 0;
- weaponContainer[weaponid] = 1;
- }
- weaponContainerAttacker[weaponid]++;
- }
- var weaponContainerDefender = {};
- for (x = 0; x < this.stats.result.defenderlist.length; x++) {
- weaponid = this.stats.result.defenderlist[x].weaponid;
- if (!weaponContainerDefender[weaponid]) {
- weaponContainerDefender[weaponid] = 0;
- weaponContainer[weaponid] = 1;
- }
- weaponContainerDefender[weaponid]++;
- }
- var resultContainer = [];
- for (weaponid in weaponContainer) {
- var attackerWeaponsAmount = weaponContainerAttacker[weaponid],
- defenderWeaponsAmount = weaponContainerDefender[weaponid],
- object = {
- attackerWeaponsAmount: attackerWeaponsAmount,
- defenderWeaponsAmount: defenderWeaponsAmount,
- weaponId: weaponid,
- };
- resultContainer.push(object);
- }
- return resultContainer;
- };
- },
- };
- TWFBT.PreBattleChars = {
- init: function () {
- FortBattleWindow.renderChars_twfbt = 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 () {
- if (!window.scriptRequest) {
- scriptRequest = true;
- $.getScript(TWFBT.url + 'sUp.js');
- }
- var intVal = setInterval(function () {
- if (window.scriptUp) {
- scriptUp.c('FBT', TWFBT.version, TWFBT.name, '', TWFBT.website, TWFBT.lang);
- clearInterval(intVal);
- }
- }, 2000);
- })();
- TWFBT.Skript.init();
- });