Show TrExMa Skill on Transfer List

By Mike Cornell Last update Nov 9, 2007 — Installed 7,349 times.
// ==UserScript==
// @name           Show TrExMa Skill on Transfer List
// @namespace      http://twofourone.blogspot.com
// @description    Shows the Value as computed by TrExMa on the Transfer List
// @include        http://trophymanager.com/transform.php?*
// ==/UserScript==

// Array to setup the weights of particular skills for each player's actual ability
// This is the direct weight to be given to each skill.
// Array maps to these skills:
//               [Str,Sta,Pac,Mar,Tac,Wor,Pos,Pas,Cro,Tec,Hea,Fin,Lon,Set]
var positions = [[  1,  3,  1,  1,  1,  3,  3,  2,  2,  2,  1,  3,  3,  3], // DC
                 [  2,  3,  1,  1,  1,  3,  3,  2,  2,  2,  2,  3,  3,  3], // DL
                 [  2,  3,  1,  1,  1,  3,  3,  2,  2,  2,  2,  3,  3,  3], // DR
                 [  1,  2,  2,  1,  1,  1,  1,  1,  2,  2,  1,  3,  3,  3], // DMC
                 [  2,  3,  1,  1,  1,  3,  3,  2,  2,  2,  2,  3,  3,  3], // DML
                 [  2,  3,  1,  1,  1,  3,  3,  2,  2,  2,  2,  3,  3,  3], // DMR
                 [  2,  2,  3,  1,  1,  1,  1,  1,  3,  1,  2,  3,  3,  3], // MC 
                 [  2,  2,  1,  1,  1,  1,  1,  1,  1,  1,  2,  3,  3,  3], // ML
                 [  2,  2,  1,  1,  1,  1,  1,  1,  1,  1,  2,  3,  3,  3], // MR
                 [  2,  3,  3,  2,  2,  1,  1,  1,  3,  1,  2,  1,  1,  3], // OMC
                 [  2,  2,  1,  3,  3,  2,  2,  3,  1,  1,  2,  2,  2,  3], // OML
                 [  2,  2,  1,  3,  3,  2,  2,  3,  1,  1,  2,  2,  2,  3], // OMR
                 [  1,  2,  2,  3,  3,  2,  2,  3,  3,  2,  1,  1,  1,  3]];// FC
                 
//               [Str,Sta,Pac,Han,One,Ref,Ari,Jum,Com,Kic,Thr] 
var gkSkills =   [  2,  3,  2,  1,  2,  1,  2,  2,  3,  3,  3];             // GK                
				 
// Weights need to total 100
var weights = [[85,12, 3],  // DC
               [70,25, 5],  // DL
               [70,25, 5],  // DR
               [90,10, 0],  // DMC
               [50,40,10],  // DML
               [50,40,10],  // DMR
               [85,12, 3],  // MC               
               [90, 7, 3],  // ML
               [90, 7, 3],  // MR
               [90,10, 0],  // OMC
               [60,35, 5],  // OML
               [60,35, 5],  // OMR
               [80,18, 2]]; // FC
// At this point, distribution is unimportant.
var gkWeights =[50, 42, 8]; // GK

var positionNames = ["DC", "DL", "DR", "DMC", "DML", "DMR", "MC", "ML", "MR", "OMC", "OML", "OMR", "FC"];               

// positionIndex is the array of skill priority for this player.
// skills is an array of skills for each user
document.calculateSkill = function(skills, skillRankings, skillWeights) {

  var totSkill = 0;
  for (var i=0; i< skillRankings.length; i++) {

    totSkill += skills[i]*document.calculateSkillWeight(skillRankings, skillWeights, i);
  }
  
 totSkill = totSkill / 200; 
 totSkill = Math.round(totSkill*100)/100;

 return totSkill;
};

document.calculateSkillWeight  = function(positionWeightLevels, weights, index) {
  var weight = 0;
  weight = weights[positionWeightLevels[index] - 1] / document.numberAtWeight(positionWeightLevels, positionWeightLevels[index]) * 10;
  return weight;
};

document.numberAtWeight = function(positionWeightLevels, value) {
  var count = 0;
  for (var i=0; i< positionWeightLevels.length; i++) {
    if (positionWeightLevels[i] == value) {
     count++;
    }
  }
  return count;
};

document.getElementsByClassName = function(cl) {
  var retnode = [];
  var myclass = new RegExp('\\b'+cl+'\\b');
  var elem = this.getElementsByTagName('*');
  for (var i = 0; i < elem.length; i++) {
    var classes = elem[i].className;
    if (myclass.test(classes)) retnode.push(elem[i]);
  }
  return retnode;
};

document.getPlayerTable = function() {
  var contentDivs = document.getElementsByClassName("content");
  var playerTable = contentDivs[0].getElementsByTagName("TABLE");
  return playerTable[0];
};

document.findPositionIndex = function(position) {
 var index = -1;
 if (position.toUpperCase().indexOf("GK") == 0) {
 	index = 99;
 } else {
   for (var k=0; k< positionNames.length; k++) {
     if (position.toUpperCase().indexOf(positionNames[k]) == 0) {
       index = k;
       k = positionNames.length;
     }
   }
 }
 return index;
};

document.getSkills = function(tableData) {
  var skillArray = [];
  for (var l = 2; l < tableData.length - 2; l++) {
  	if (tableData[l].innerHTML.indexOf("img") > 0) {
	  skillArray.push(20);
	} else {
      skillArray.push(tableData[l].innerHTML);
	}
  }
  return skillArray;
};

document.presentPlayerSkill = function(playerRow) {
  var tableData = playerRow.getElementsByTagName("TD");  
  if (tableData.length > 1) {
    var skills = document.getSkills(tableData);
    var playersPositions = tableData[1].innerHTML.split(" ");
	for (var z = 0; z < playersPositions.length; z++) {
	  if (playersPositions[z].length == 0) {
	  	playersPositions.splice(z, 1);
		z--;
	  }
	}
    for (var j = 0; j < playersPositions.length; j++) {
      var positionIndex = document.findPositionIndex(playersPositions[j]);
	  var positionSkill = 0;
	  if (positionIndex > -1) {
	    if (positionIndex == 99) {
	  	  // GK
		  positionSkill = document.calculateSkill(skills, gkSkills, gkWeights);
	    } else {
		  positionSkill = document.calculateSkill(skills, positions[positionIndex], weights[positionIndex]);
		}
        var cell = document.createElement("td");
		cell.style.borderLeft = "1px solid white";
		cell.style.paddingRight = "4px";
		cell.style.paddingLeft = "4px";
        cell.innerHTML = positionSkill;
        playerRow.appendChild(cell); 
	  }
	}
	if (playersPositions.length < 2) {
      var cell = document.createElement("td");
      cell.style.borderLeft = "1px solid white";
      cell.innerHTML = "N/A";
      playerRow.appendChild(cell);	
    }
  }
};

document.createTitle = function(titleRow) {
   var cell = document.createElement("th");
   cell.innerHTML = "SK1";
   cell.className = "headingtransform";
   cell.rowSpan = 2;
   cell.style.border = "1px solid white";
   titleRow.appendChild(cell);
   var cell2 = cell.cloneNode(true);
   cell2.innerHTML = "SK2";
   titleRow.appendChild(cell2);
};

(function() {
  var playerTable = document.getPlayerTable();
  var playerRows = playerTable.getElementsByTagName("TR");
  document.createTitle(playerRows[0]);
  for (var i = 2; i < playerRows.length; i++) {
    document.presentPlayerSkill(playerRows[i]);
  }
})();