// ==UserScript== // @name TMVN Players Scout // @namespace https://trophymanager.com // @version 3 // @description Trophymanager: synthesize scout information, calculate skill peak // @include https://trophymanager.com/players/* // @exclude https://trophymanager.com/players/ // @exclude https://trophymanager.com/players/compare/* // @grant none // @downloadURL none // ==/UserScript== (function () { 'use strict'; const SCOUT_RELIABLE_SKILL = { SENIORS: 19, YOUTHS: 19, DEVELOPMENT: 19, PHYSICAL: 20, TACTICAL: 20, TECHNICAL: 20, PSYCHOLOGY: 19 }; const PEAK_PHYSICAL_TEXT = { SPLENDID: ' - Splendid physique', GOOD: ' - Good physique', OK: ' - Ok physique', WEAK: ' - Somewhat weak physique' } const PEAK_PHYSICAL_LEVEL = { SPLENDID: 4, GOOD: 3, OK: 2, WEAK: 1 } const PEAK_TACTICAL_TEXT = { SPLENDID: ' - Splendid tactical ability', GOOD: ' - Good tactical ability', OK: ' - Ok tactical ability', POOR: ' - Poor tactical ability' } const PEAK_TACTICAL_LEVEL = { SPLENDID: 4, GOOD: 3, OK: 2, POOR: 1 } const PEAK_TECHNICAL_TEXT = { SPLENDID: ' - Splendid technical ability', GOOD: ' - Good technical ability', OK: ' - Ok technical ability', POOR: ' - Poor technical ability' } const PEAK_TECHNICAL_LEVEL = { SPLENDID: 4, GOOD: 3, OK: 2, POOR: 1 } const OUTFIELD_PEAK_PHYSICAL_SKILL_SUM = [64, 70, 74, 80]; const OUTFIELD_PEAK_TACTICAL_SKILL_SUM = [64, 70, 74, 80]; const OUTFIELD_PEAK_TECHNICAL_SKILL_SUM = [96, 105, 111, 120]; const GK_PEAK_PHYSICAL_SKILL_SUM = [64, 70, 74, 80]; const GK_PEAK_TACTICAL_SKILL_SUM = [50, 55, 60]; const GK_PEAK_TECHNICAL_SKILL_SUM = [68, 74, 80]; const OUTFIELD_SPECIALITY = ['', 'Strength', 'Stamina', 'Pace', 'Marking', 'Tackling', 'Workrate', 'Positioning', 'Passing', 'Crossing', 'Technique', 'Heading', 'Finishing', 'Longshots', 'SetPieces']; const OUTFIELD_SPECIALITY_PHYSICAL_INDEX = [1, 2, 3, 11]; const OUTFIELD_SPECIALITY_TACTICAL_INDEX = [4, 5, 6, 7]; const OUTFIELD_SPECIALITY_TECHNICAL_INDEX = [8, 9, 10, 12, 13, 14]; const GK_SPECIALITY = ['', 'Strength', 'Stamina', 'Pace', 'Handling', 'OneOnOnes', 'Reflexes', 'AerialAbility', 'Jumping', 'Communication', 'Kicking', 'Throwing']; const GK_SPECIALITY_PHYSICAL_INDEX = [1, 2, 3, 8]; const GK_SPECIALITY_TACTICAL_INDEX = [5, 7, 9]; const GK_SPECIALITY_TECHNICAL_INDEX = [4, 6, 10, 11]; const BLOOM_STATUS_TEXT = { IN_LATE_BLOOM: 'In his late bloom', IN_MIDDLE_BLOOM: 'In the middle of his bloom', IN_START_BLOOM: 'Starting to bloom', NOT_YET_LATE_BLOOMER: 'Not bloomed - Late bloomer', NOT_YET_NORMAL_BLOOMER: 'Not bloomed: Normal bloomer', NOT_YET_EARLY_BLOOMER: 'Not bloomed: Early bloomer', BLOOMED: 'Bloomed' } const BLOOM_STATUS_COLOR = { IN_LATE_BLOOM: 'Darkred', IN_MIDDLE_BLOOM: 'Black', IN_START_BLOOM: 'Orange', NOT_YET_BLOOM: 'Yellow', NOT_YET_LATE_BLOOMER: 'Blue', NOT_YET_NORMAL_BLOOMER: 'Aqua', NOT_YET_EARLY_BLOOMER: 'White', BLOOMED: 'Darkgray' } const DEVELOPMENT_STATUS_TEXT = { MOSTLY_AHEAD: 'Mostly ahead', MIDDLE: 'Middle', MOSTLY_DONE: 'Mostly done', DONE: 'Done' } const DEVELOPMENT_STATUS_COLOR = { MOSTLY_AHEAD: 'Darkred', MIDDLE: 'Black', MOSTLY_DONE: 'Yellow', DONE: 'Darkgray' } const TI_CLASS = { LEVEL_1: 25, LEVEL_2: 20, LEVEL_3: 15, LEVEL_4: 10, LEVEL_5: 5, LEVEL_6: 0, LEVEL_7: -10 } const SCOUT_LEVEL_COLOR = ['White', 'Aqua', 'Blue', 'Yellow', 'Black', 'Darkred']; const PERCENT_PEAK_COLOR = ['White', 'Aqua', 'Blue', 'Yellow', 'Black', 'Darkred']; const SCOUT_TABLE_TITLE = { PHYSICAL: 'Physical scout: 4 level, higher is better', TACTICAL: 'Tactical scout: 4 level, higher is better', TECHNICAL: 'Technique scout: 4 level, higher is better', LEADERSHIP: 'Leadership scout: 20 point, higher is better', PROFESSIONALISM: 'Professionalism scout: 20 point, higher is better', AGGRESSION: 'Aggression scout: 20 point, smaller is better', LAS: 'Last age scout', TI: 'TI' } const LOCAL_STORAGE_KEY_VALUE = 'TMVN_SCRIPT_PLAYER_TRAIN_RELIABLE_INFO'; const GK_POSITION_TO_CHECK = 'GK'; const SCOUT_TABLE_BODY_ID = 'tmvn_script_scout_table_body'; ; var playerId; var player = {}; var scoutMap = new Map(); var reportObj = {}; present(); function present() { playerId = location.href.split('/')[4]; if (playerId != '') { if (playerId.endsWith('#')) { playerId = playerId.substring(0, playerId.length - 1); } try { $('.banner_placeholder.rectangle')[0].parentNode.removeChild($('.banner_placeholder.rectangle')[0]); } catch (err) {} updateReliableSkillScount(); //update before query scout data addNewStyle('.border {border-right:1px solid #41631F !important;}'); $.ajaxSetup({ async: false }); getPlayerSkill(playerId); $.ajaxSetup({ async: true }); if (reportObj.LastAgeScout == undefined) return; //not found any scout report let scoutReport = "
" + "
" + "

SCOUT REPORT

" + "
" + "
" + "
" + "
" + "
" + "
" + "
" + "
" + "
"; $(".column3_a").append(scoutReport); let scoutReport_content = "
"; $("#scoutReport_content").append(scoutReport_content); let tbody = $('#' + SCOUT_TABLE_BODY_ID)[0]; /*YouthDevelopment*/ let trYouthDevelopment = document.createElement('tr'); trYouthDevelopment.className = 'odd'; let tdYouthDevelopmentLabel = document.createElement('td'); tdYouthDevelopmentLabel.innerText = 'Youth Development [20]: '; let tdYouthDevelopment = document.createElement('td'); colorTd(tdYouthDevelopment, 'Potential', reportObj.YouthDevelopment); tdYouthDevelopment.innerText = reportObj.YouthDevelopment == undefined ? '' : reportObj.YouthDevelopment; trYouthDevelopment.appendChild(tdYouthDevelopmentLabel); trYouthDevelopment.appendChild(tdYouthDevelopment); tbody.appendChild(trYouthDevelopment); /*Recommendation*/ let trRec = document.createElement('tr'); let tdRecLabel = document.createElement('td'); tdRecLabel.innerText = 'Recommendation [5]: '; let tdRec = document.createElement('td'); colorTd(tdRec, 'Rec', reportObj.Rec); tdRec.innerText = reportObj.Rec == undefined ? '' : reportObj.Rec.toFixed(1); trRec.appendChild(tdRecLabel); trRec.appendChild(tdRec); tbody.appendChild(trRec); /*Potential*/ let trPotential = document.createElement('tr'); trPotential.className = 'odd'; let tdPotentialLabel = document.createElement('td'); tdPotentialLabel.innerText = 'Potential [20]: '; let tdPotential = document.createElement('td'); colorTd(tdPotential, 'Potential', reportObj.Potential); tdPotential.innerText = reportObj.Potential == undefined ? '' : reportObj.Potential; trPotential.appendChild(tdPotentialLabel); trPotential.appendChild(tdPotential); tbody.appendChild(trPotential); /*Bloom*/ let trBloomStatus = document.createElement('tr'); let tdBloomStatusLabel = document.createElement('td'); tdBloomStatusLabel.innerText = 'Bloom Status: '; let tdBloomStatus = document.createElement('td'); tdBloomStatus.innerHTML = reportObj.BloomStatus == undefined ? '' : reportObj.BloomStatus; trBloomStatus.appendChild(tdBloomStatusLabel); trBloomStatus.appendChild(tdBloomStatus); tbody.appendChild(trBloomStatus); /*Potential*/ let trDevStatus = document.createElement('tr'); trDevStatus.className = 'odd'; let tdDevStatusLabel = document.createElement('td'); tdDevStatusLabel.innerText = 'Development Status: '; let tdDevStatus = document.createElement('td'); tdDevStatus.innerHTML = reportObj.DevStatus == undefined ? '' : reportObj.DevStatus; trDevStatus.appendChild(tdDevStatusLabel); trDevStatus.appendChild(tdDevStatus); tbody.appendChild(trDevStatus); /*Specialty*/ let trSpecialty = document.createElement('tr'); let tdSpecialtyLabel = document.createElement('td'); tdSpecialtyLabel.innerText = 'Specialty: '; let tdSpecialty = document.createElement('td'); tdSpecialty.innerText = reportObj.Specialty == undefined ? '' : reportObj.Specialty; trSpecialty.appendChild(tdSpecialtyLabel); trSpecialty.appendChild(tdSpecialty); tbody.appendChild(trSpecialty); /*Physical*/ let trPeakPhysical = document.createElement('tr'); trPeakPhysical.className = 'odd'; let tdPeakPhysicalLabel = document.createElement('td'); tdPeakPhysicalLabel.innerText = 'Physical Rate [4]: '; let tdPeakPhysical = document.createElement('td'); colorTd(tdPeakPhysical, 'PeakPhysical', reportObj.PeakPhysical); tdPeakPhysical.innerText = reportObj.PeakPhysical == undefined ? '' : reportObj.PeakPhysical; trPeakPhysical.appendChild(tdPeakPhysicalLabel); trPeakPhysical.appendChild(tdPeakPhysical); tbody.appendChild(trPeakPhysical); /*Tactical*/ let trPeakTactical = document.createElement('tr'); let tdPeakTacticalLabel = document.createElement('td'); tdPeakTacticalLabel.innerText = 'Tactical Rate [4]: '; let tdPeakTactical = document.createElement('td'); colorTd(tdPeakTactical, 'PeakTactical', reportObj.PeakTactical); tdPeakTactical.innerText = reportObj.PeakTactical == undefined ? '' : reportObj.PeakTactical; trPeakTactical.appendChild(tdPeakTacticalLabel); trPeakTactical.appendChild(tdPeakTactical); tbody.appendChild(trPeakTactical); /*Technical*/ let trPeakTechnical = document.createElement('tr'); trPeakTechnical.className = 'odd'; let tdPeakTechnicalLabel = document.createElement('td'); tdPeakTechnicalLabel.innerText = 'Technical Rate [4]: '; let tdPeakTechnical = document.createElement('td'); colorTd(tdPeakTechnical, 'PeakTechnical', reportObj.PeakTechnical); tdPeakTechnical.innerText = reportObj.PeakTechnical == undefined ? '' : reportObj.PeakTechnical; trPeakTechnical.appendChild(tdPeakTechnicalLabel); trPeakTechnical.appendChild(tdPeakTechnical); tbody.appendChild(trPeakTechnical); /*Leadership*/ let trLeadership = document.createElement('tr'); let tdLeadershipLabel = document.createElement('td'); tdLeadershipLabel.innerText = 'Leadership Rate [20]: '; let tdLeadership = document.createElement('td'); colorTd(tdLeadership, 'Leadership', reportObj.Leadership); tdLeadership.innerText = reportObj.Leadership == undefined ? '' : reportObj.Leadership; trLeadership.appendChild(tdLeadershipLabel); trLeadership.appendChild(tdLeadership); tbody.appendChild(trLeadership); /*Profession*/ let trProfession = document.createElement('tr'); trProfession.className = 'odd'; let tdProfessionLabel = document.createElement('td'); tdProfessionLabel.innerText = 'Profession Rate [20]: '; let tdProfession = document.createElement('td'); colorTd(tdProfession, 'Profession', reportObj.Profession); tdProfession.innerText = reportObj.Profession == undefined ? '' : reportObj.Profession; trProfession.appendChild(tdProfessionLabel); trProfession.appendChild(tdProfession); tbody.appendChild(trProfession); /*Aggression*/ let trAggression = document.createElement('tr'); let tdAggressionLabel = document.createElement('td'); tdAggressionLabel.innerText = 'Aggression Rate [20]: '; let tdAggression = document.createElement('td'); colorTd(tdAggression, 'Aggression', reportObj.Aggression); tdAggression.innerText = reportObj.Aggression == undefined ? '' : reportObj.Aggression; trAggression.appendChild(tdAggressionLabel); trAggression.appendChild(tdAggression); tbody.appendChild(trAggression); /*LastAgeScout*/ let trLastAgeScout = document.createElement('tr'); trLastAgeScout.className = 'odd'; let tdLastAgeScoutLabel = document.createElement('td'); tdLastAgeScoutLabel.innerText = 'Last Age Scout: '; let tdLastAgeScout = document.createElement('td'); if (reportObj.LastAgeScout && reportObj.LastAgeScout < Math.floor(player.Age) && (tdBloomStatus.innerText != BLOOM_STATUS_TEXT.BLOOMED || tdDevStatus.innerText != DEVELOPMENT_STATUS_TEXT.DONE)) { tdLastAgeScout.innerHTML = '' + reportObj.LastAgeScout + ''; } else { tdLastAgeScout.innerText = reportObj.LastAgeScout == undefined ? '' : reportObj.LastAgeScout; } trLastAgeScout.appendChild(tdLastAgeScoutLabel); trLastAgeScout.appendChild(tdLastAgeScout); tbody.appendChild(trLastAgeScout); /*PhySum*/ let trPhySum = document.createElement('tr'); let tdPhySumLabel = document.createElement('td'); tdPhySumLabel.innerText = 'Physical Skill Sum: '; let tdPhySum = document.createElement('td'); colorTd(tdPhySum, 'RatioSkillSum', Math.round(player.SkillSum.PhyRatio * 100)); tdPhySum.innerText = player.SkillSum.Phy + ' (' + Math.round(player.SkillSum.PhyRatio * 100) + '%)'; trPhySum.appendChild(tdPhySumLabel); trPhySum.appendChild(tdPhySum); tbody.appendChild(trPhySum); /*TacSum*/ let trTacSum = document.createElement('tr'); trTacSum.className = 'odd'; let tdTacSumLabel = document.createElement('td'); tdTacSumLabel.innerText = 'Tactical Skill Sum: '; let tdTacSum = document.createElement('td'); colorTd(tdTacSum, 'RatioSkillSum', Math.round(player.SkillSum.TacRatio * 100)); tdTacSum.innerText = player.SkillSum.Tac + ' (' + Math.round(player.SkillSum.TacRatio * 100) + '%)'; trTacSum.appendChild(tdTacSumLabel); trTacSum.appendChild(tdTacSum); tbody.appendChild(trTacSum); /*TecSum*/ let trTecSum = document.createElement('tr'); let tdTecSumLabel = document.createElement('td'); tdTecSumLabel.innerText = 'Technical Skill Sum: '; let tdTecSum = document.createElement('td'); colorTd(tdTecSum, 'RatioSkillSum', Math.round(player.SkillSum.TecRatio * 100)); tdTecSum.innerText = player.SkillSum.Tec + ' (' + Math.round(player.SkillSum.TecRatio * 100) + '%)'; trTecSum.appendChild(tdTecSumLabel); trTecSum.appendChild(tdTecSum); tbody.appendChild(trTecSum); /*PhyPeak*/ let trPhyPeak = document.createElement('tr'); trPhyPeak.className = 'odd'; let tdPhyPeakLabel = document.createElement('td'); tdPhyPeakLabel.innerText = 'Physical Peak And Reach: '; let tdPhyPeak = document.createElement('td'); tdPhyPeak.innerHTML = calculateSkillPeak(reportObj, player, 'Physical'); trPhyPeak.appendChild(tdPhyPeakLabel); trPhyPeak.appendChild(tdPhyPeak); tbody.appendChild(trPhyPeak); /*TacPeak*/ let trTacPeak = document.createElement('tr'); let tdTacPeakLabel = document.createElement('td'); tdTacPeakLabel.innerText = 'Tactical Peak And Reach: '; let tdTacPeak = document.createElement('td'); tdTacPeak.innerHTML = calculateSkillPeak(reportObj, player, 'Tactical'); trTacPeak.appendChild(tdTacPeakLabel); trTacPeak.appendChild(tdTacPeak); tbody.appendChild(trTacPeak); /*TecPeak*/ let trTecPeak = document.createElement('tr'); trTecPeak.className = 'odd'; let tdTecPeakLabel = document.createElement('td'); tdTecPeakLabel.innerText = 'Technical Peak And Reach: '; let tdTecPeak = document.createElement('td'); tdTecPeak.innerHTML = calculateSkillPeak(reportObj, player, 'Technical'); trTecPeak.appendChild(tdTecPeakLabel); trTecPeak.appendChild(tdTecPeak); tbody.appendChild(trTecPeak); /*Note*/ let trNote = document.createElement('tr'); let tdNote = document.createElement('td'); tdNote.colSpan = 2; tdNote.innerText = 'Set scout\'s trust level by TMVN Player Train script'; tdNote.style = 'color:Darkgray; font-size:smaller; font-style:italic'; //tdNote.style.color = 'Darkgray'; //tdNote.style.font-size = 'smaller'; //tdNote.style.font-style = 'italic'; trNote.appendChild(tdNote); tbody.appendChild(trNote); } } function calculateSkillPeak(report, player, type) { let peak, ratio, peakColor, ratioColor, reportPeak; if (type == 'Physical' && report.PeakPhysical != undefined) { reportPeak = report.PeakPhysical; if (player.Position != GK_POSITION_TO_CHECK) { peak = OUTFIELD_PEAK_PHYSICAL_SKILL_SUM[report.PeakPhysical - 1]; ratio = Math.round(player.SkillSum.Phy / peak * 100); } else { peak = GK_PEAK_PHYSICAL_SKILL_SUM[report.PeakPhysical - 1]; ratio = Math.round(player.SkillSum.Phy / peak * 100); } } else if (type == 'Tactical' && report.PeakTactical != undefined) { reportPeak = report.PeakTactical; if (player.Position != GK_POSITION_TO_CHECK) { peak = OUTFIELD_PEAK_TACTICAL_SKILL_SUM[report.PeakTactical - 1]; ratio = Math.round(player.SkillSum.Tac / peak * 100); } else { peak = GK_PEAK_TACTICAL_SKILL_SUM[report.PeakTactical - 1]; ratio = Math.round(player.SkillSum.Tac / peak * 100); } } else if (type == 'Technical' && report.PeakTechnical != undefined) { reportPeak = report.PeakTechnical; if (player.Position != GK_POSITION_TO_CHECK) { peak = OUTFIELD_PEAK_TECHNICAL_SKILL_SUM[report.PeakTechnical - 1]; ratio = Math.round(player.SkillSum.Tec / peak * 100); } else { peak = GK_PEAK_TECHNICAL_SKILL_SUM[report.PeakTechnical - 1]; ratio = Math.round(player.SkillSum.Tec / peak * 100); } } let resultText = ''; if (peak != undefined) { peakColor = colorPeak(reportPeak); ratioColor = colorPercent(ratio); resultText = '' + peak + ' (' + ratio + '%)'; } return resultText; } function colorPeak(value) { let color; if (value >= 4) { color = SCOUT_LEVEL_COLOR[5]; } else if (value >= 3) { color = SCOUT_LEVEL_COLOR[3]; } else if (value >= 2) { color = SCOUT_LEVEL_COLOR[1]; } else { color = SCOUT_LEVEL_COLOR[0]; } return color; } function colorPercent(value) { let color; if (value >= 90) { color = PERCENT_PEAK_COLOR[5]; } else if (value >= 80) { color = PERCENT_PEAK_COLOR[4]; } else if (value >= 70) { color = PERCENT_PEAK_COLOR[3]; } else if (value >= 60) { color = PERCENT_PEAK_COLOR[2]; } else if (value >= 50) { color = PERCENT_PEAK_COLOR[1]; } else { color = PERCENT_PEAK_COLOR[0]; } return color; } function getPlayerSkill(playerId) { $.post("//trophymanager.com/ajax/tooltip.ajax.php", { "player_id": playerId }, function (response) { let data = JSON.parse(response); player.Id = playerId; player.Age = data.player.age; //no need month player.Position = data.player.fp; let skill = {}; let skillSum = {}; if (player.Position != GK_POSITION_TO_CHECK) { skill.Strength = getSkill(data.player.skills, 'Strength'); skill.Stamina = getSkill(data.player.skills, 'Stamina'); skill.Pace = getSkill(data.player.skills, 'Pace'); skill.Marking = getSkill(data.player.skills, 'Marking'); skill.Tackling = getSkill(data.player.skills, 'Tackling'); skill.Workrate = getSkill(data.player.skills, 'Workrate'); skill.Positioning = getSkill(data.player.skills, 'Positioning'); skill.Passing = getSkill(data.player.skills, 'Passing'); skill.Crossing = getSkill(data.player.skills, 'Crossing'); skill.Technique = getSkill(data.player.skills, 'Technique'); skill.Heading = getSkill(data.player.skills, 'Heading'); skill.Finishing = getSkill(data.player.skills, 'Finishing'); skill.Longshots = getSkill(data.player.skills, 'Longshots'); skill.SetPieces = getSkill(data.player.skills, 'Set Pieces'); skillSum.Phy = skill.Strength + skill.Stamina + skill.Pace + skill.Heading; skillSum.Tac = skill.Marking + skill.Tackling + skill.Positioning + skill.Workrate; skillSum.Tec = skill.Passing + skill.Crossing + skill.Technique + skill.Finishing + skill.Longshots + skill.SetPieces; skillSum.PhyMax = 80; skillSum.TacMax = 80; skillSum.TecMax = 120; } else { skill.Strength = getSkill(data.player.skills, 'Strength'); skill.Stamina = getSkill(data.player.skills, 'Stamina'); skill.Pace = getSkill(data.player.skills, 'Pace'); skill.Handling = getSkill(data.player.skills, 'Handling'); skill.OneOnOnes = getSkill(data.player.skills, 'One on ones'); skill.Reflexes = getSkill(data.player.skills, 'Reflexes'); skill.AerialAbility = getSkill(data.player.skills, 'Aerial Ability'); skill.Jumping = getSkill(data.player.skills, 'Jumping'); skill.Communication = getSkill(data.player.skills, 'Communication'); skill.Kicking = getSkill(data.player.skills, 'Kicking'); skill.Throwing = getSkill(data.player.skills, 'Throwing'); skillSum.Phy = skill.Strength + skill.Stamina + skill.Pace + skill.Jumping; skillSum.Tac = skill.OneOnOnes + skill.AerialAbility + skill.Communication; skillSum.Tec = skill.Handling + skill.Reflexes + skill.Kicking + skill.Throwing; skillSum.PhyMax = 80; skillSum.TacMax = 60; skillSum.TecMax = 80; } skillSum.PhyRatio = skillSum.Phy / skillSum.PhyMax; skillSum.TacRatio = skillSum.Tac / skillSum.TacMax; skillSum.TecRatio = skillSum.Tec / skillSum.TecMax; player.SkillSum = skillSum; player.Skill = skill; getScoutInfo(playerId); }); } function getSkill(data, skill) { let result; data.forEach(element => { if (element.name == skill) { if (isNaN(element.value)) { if (element.value.indexOf('star_silver') >= 0) { result = 19; } else if (element.value.indexOf('star') >= 0) { result = 20; } } else { result = element.value; } return; } }); return result; } function getScoutInfo(playerId) { $.post("//trophymanager.com/ajax/players_get_info.ajax.php", { "type": "scout", "player_id": playerId }, function (response) { let data = JSON.parse(response); getScout(data); if (data.reports != undefined && data.reports.length > 0) { //array order by date desc for (let i = data.reports.length - 1; i >= 0; i--) { let report = data.reports[i]; if (report.scoutid == '0' && report.scout_name == 'YD') { reportObj.YouthDevelopment = report.old_pot; continue; //with YD only get potential } else if (!scoutMap.has(report.scoutid)) { continue; //scout was not found, so the data is not reliable } let scout = scoutMap.get(report.scoutid); if (reportObj.LastScoutDate == undefined || reportObj.LastScoutDate < new Date(report.done)) { reportObj.LastScoutDate = new Date(report.done); } reportObj.LastAgeScout = Number(report.report_age); if ((Number(scout.youths) >= SCOUT_RELIABLE_SKILL.YOUTHS && Number(scout.development) >= SCOUT_RELIABLE_SKILL.DEVELOPMENT && Number(report.report_age) < 20) || (Number(scout.seniors) >= SCOUT_RELIABLE_SKILL.SENIORS && Number(scout.development) >= SCOUT_RELIABLE_SKILL.DEVELOPMENT && Number(report.report_age) >= 20)) { reportObj.Rec = report.potential / 2; reportObj.Potential = report.old_pot; let startBloomAge = calculateBloomAge(report); if (report.bloom_status_txt == BLOOM_STATUS_TEXT.BLOOMED || (startBloomAge != null && (startBloomAge + 2 < Math.floor(player.Age)))) { reportObj.BloomStatus = '' + BLOOM_STATUS_TEXT.BLOOMED + ''; } else if (startBloomAge != null) { let processBloomAge = startBloomAge + ' - ' + (startBloomAge + 2); if (startBloomAge == Math.floor(player.Age)) { reportObj.BloomStatus = '' + processBloomAge + ''; } else if (startBloomAge + 1 == Math.floor(player.Age)) { reportObj.BloomStatus = '' + processBloomAge + ''; } else if (startBloomAge + 2 == Math.floor(player.Age)) { reportObj.BloomStatus = '' + processBloomAge + ''; } else { reportObj.BloomStatus = '' + processBloomAge + ''; } } else if (report.bloom_status_txt == BLOOM_STATUS_TEXT.NOT_YET_LATE_BLOOMER) { reportObj.BloomStatus = '' + '20/22-23/25' + ''; } else if (report.bloom_status_txt == BLOOM_STATUS_TEXT.NOT_YET_NORMAL_BLOOMER) { reportObj.BloomStatus = '' + '18/19-21/22' + ''; } else { reportObj.BloomStatus = '' + '16/17-19/20' + ''; } if (report.dev_status == DEVELOPMENT_STATUS_TEXT.DONE) { reportObj.DevStatus = '' + report.dev_status + ''; } else if (report.dev_status == DEVELOPMENT_STATUS_TEXT.MOSTLY_DONE) { reportObj.DevStatus = '' + report.dev_status + ''; } else if (report.dev_status == DEVELOPMENT_STATUS_TEXT.MIDDLE) { reportObj.DevStatus = '' + report.dev_status + ''; } else if (report.dev_status == DEVELOPMENT_STATUS_TEXT.MOSTLY_AHEAD) { reportObj.DevStatus = '' + report.dev_status + ''; } else { reportObj.DevStatus = '' + report.dev_status + ''; } } if (Number(scout.physical) >= SCOUT_RELIABLE_SKILL.PHYSICAL) { if (player.Position != GK_POSITION_TO_CHECK) { if (OUTFIELD_SPECIALITY_PHYSICAL_INDEX.includes(Number(report.specialist))) { reportObj.Specialty = OUTFIELD_SPECIALITY[Number(report.specialist)]; } } else { if (GK_SPECIALITY_PHYSICAL_INDEX.includes(Number(report.specialist))) { reportObj.Specialty = GK_SPECIALITY[Number(report.specialist)]; } } switch (report.peak_phy_txt) { case PEAK_PHYSICAL_TEXT.SPLENDID: reportObj.PeakPhysical = PEAK_PHYSICAL_LEVEL.SPLENDID; break; case PEAK_PHYSICAL_TEXT.GOOD: reportObj.PeakPhysical = PEAK_PHYSICAL_LEVEL.GOOD; break; case PEAK_PHYSICAL_TEXT.OK: reportObj.PeakPhysical = PEAK_PHYSICAL_LEVEL.OK; break; case PEAK_PHYSICAL_TEXT.WEAK: reportObj.PeakPhysical = PEAK_PHYSICAL_LEVEL.WEAK; break; } } if (Number(scout.tactical) >= SCOUT_RELIABLE_SKILL.TACTICAL) { if (player.Position != GK_POSITION_TO_CHECK) { if (OUTFIELD_SPECIALITY_TACTICAL_INDEX.includes(Number(report.specialist))) { reportObj.Specialty = OUTFIELD_SPECIALITY[Number(report.specialist)]; } } else { if (GK_SPECIALITY_TACTICAL_INDEX.includes(Number(report.specialist))) { reportObj.Specialty = GK_SPECIALITY[Number(report.specialist)]; } } switch (report.peak_tac_txt) { case PEAK_TACTICAL_TEXT.SPLENDID: reportObj.PeakTactical = PEAK_TACTICAL_LEVEL.SPLENDID; break; case PEAK_TACTICAL_TEXT.GOOD: reportObj.PeakTactical = PEAK_TACTICAL_LEVEL.GOOD; break; case PEAK_TACTICAL_TEXT.OK: reportObj.PeakTactical = PEAK_TACTICAL_LEVEL.OK; break; case PEAK_TACTICAL_TEXT.POOR: reportObj.PeakTactical = PEAK_TACTICAL_LEVEL.POOR; break; } } if (Number(scout.technical) >= SCOUT_RELIABLE_SKILL.TECHNICAL) { if (player.Position != GK_POSITION_TO_CHECK) { if (OUTFIELD_SPECIALITY_TECHNICAL_INDEX.includes(Number(report.specialist))) { reportObj.Specialty = OUTFIELD_SPECIALITY[Number(report.specialist)]; } } else { if (GK_SPECIALITY_TECHNICAL_INDEX.includes(Number(report.specialist))) { reportObj.Specialty = GK_SPECIALITY[Number(report.specialist)]; } } switch (report.peak_tec_txt) { case PEAK_TECHNICAL_TEXT.SPLENDID: reportObj.PeakTechnical = PEAK_TECHNICAL_LEVEL.SPLENDID; break; case PEAK_TECHNICAL_TEXT.GOOD: reportObj.PeakTechnical = PEAK_TECHNICAL_LEVEL.GOOD; break; case PEAK_TECHNICAL_TEXT.OK: reportObj.PeakTechnical = PEAK_TECHNICAL_LEVEL.OK; break; case PEAK_TECHNICAL_TEXT.POOR: reportObj.PeakTechnical = PEAK_TECHNICAL_LEVEL.POOR; break; } } if (Number(scout.psychology) >= SCOUT_RELIABLE_SKILL.PSYCHOLOGY) { reportObj.Leadership = report.charisma; reportObj.Profession = report.professionalism; reportObj.Aggression = report.aggression; } } } }); } function calculateBloomAge(report) { let startBloomAge = null; if (report.bloom_status_txt == BLOOM_STATUS_TEXT.IN_LATE_BLOOM) { startBloomAge = Number(report.report_age) - 2; } else if (report.bloom_status_txt == BLOOM_STATUS_TEXT.IN_MIDDLE_BLOOM) { startBloomAge = Number(report.report_age) - 1; } else if (report.bloom_status_txt == BLOOM_STATUS_TEXT.IN_START_BLOOM) { startBloomAge = Number(report.report_age); } else if (report.bloom_status_txt == BLOOM_STATUS_TEXT.NOT_YET_LATE_BLOOMER && Number(report.report_age) == 21) { startBloomAge = 22; } else if (report.bloom_status_txt == BLOOM_STATUS_TEXT.NOT_YET_NORMAL_BLOOMER && Number(report.report_age) == 18) { startBloomAge = 19; } else if (report.bloom_status_txt == BLOOM_STATUS_TEXT.NOT_YET_EARLY_BLOOMER && Number(report.report_age) == 16) { startBloomAge = 17; } return startBloomAge; } function getScout(data) { for (let propt in data.scouts) { let scout = data.scouts[propt]; scoutMap.set(scout.id, scout); } } function updateReliableSkillScount() { let localStorageData = localStorage.getItem(LOCAL_STORAGE_KEY_VALUE); if (localStorageData !== "" && localStorageData !== undefined && localStorageData !== null) { let reliableSkillScout = JSON.parse(localStorageData); SCOUT_RELIABLE_SKILL.SENIORS = reliableSkillScout.Seniors != undefined ? reliableSkillScout.Seniors : SCOUT_RELIABLE_SKILL.SENIORS; SCOUT_RELIABLE_SKILL.YOUTHS = reliableSkillScout.Youths != undefined ? reliableSkillScout.Youths : SCOUT_RELIABLE_SKILL.YOUTHS; SCOUT_RELIABLE_SKILL.DEVELOPMENT = reliableSkillScout.Development != undefined ? reliableSkillScout.Development : SCOUT_RELIABLE_SKILL.DEVELOPMENT; SCOUT_RELIABLE_SKILL.PSYCHOLOGY = reliableSkillScout.Psychology != undefined ? reliableSkillScout.Psychology : SCOUT_RELIABLE_SKILL.PSYCHOLOGY; SCOUT_RELIABLE_SKILL.PHYSICAL = reliableSkillScout.Physical != undefined ? reliableSkillScout.Physical : SCOUT_RELIABLE_SKILL.PHYSICAL; SCOUT_RELIABLE_SKILL.TACTICAL = reliableSkillScout.Tactical != undefined ? reliableSkillScout.Tactical : SCOUT_RELIABLE_SKILL.TACTICAL; SCOUT_RELIABLE_SKILL.TECHNICAL = reliableSkillScout.Technical != undefined ? reliableSkillScout.Technical : SCOUT_RELIABLE_SKILL.TECHNICAL; } } function addNewStyle(newStyle) { var styleElement = document.getElementById('style_js'); if (!styleElement) { styleElement = document.createElement('style'); styleElement.type = 'text/css'; styleElement.id = 'style_js'; document.getElementsByTagName('head')[0].appendChild(styleElement); } styleElement.appendChild(document.createTextNode(newStyle)); } function colorTd(td, type, value) { if (value) { if (type == 'Rec') { if (value == 5) { td.style.color = SCOUT_LEVEL_COLOR[5]; } else if (value == 4.5) { td.style.color = SCOUT_LEVEL_COLOR[4]; } else { td.style.color = SCOUT_LEVEL_COLOR[Math.round(value) - 1]; } } else if (['Potential', 'Leadership', 'Profession'].includes(type)) { if (value >= 19) { td.style.color = SCOUT_LEVEL_COLOR[5]; } else if (value >= 17) { td.style.color = SCOUT_LEVEL_COLOR[4]; } else if (value >= 13) { td.style.color = SCOUT_LEVEL_COLOR[3]; } else if (value >= 9) { td.style.color = SCOUT_LEVEL_COLOR[2]; } else if (value >= 5) { td.style.color = SCOUT_LEVEL_COLOR[1]; } else { td.style.color = SCOUT_LEVEL_COLOR[0]; } } else if (['PeakPhysical', 'PeakTactical', 'PeakTechnical'].includes(type)) { if (value >= 4) { td.style.color = SCOUT_LEVEL_COLOR[5]; } else if (value >= 3) { td.style.color = SCOUT_LEVEL_COLOR[3]; } else if (value >= 2) { td.style.color = SCOUT_LEVEL_COLOR[1]; } else { td.style.color = SCOUT_LEVEL_COLOR[0]; } } else if (type == 'Aggression') { if (value <= 2) { td.style.color = SCOUT_LEVEL_COLOR[5]; } else if (value <= 4) { td.style.color = SCOUT_LEVEL_COLOR[4]; } else if (value <= 8) { td.style.color = SCOUT_LEVEL_COLOR[3]; } else if (value <= 12) { td.style.color = SCOUT_LEVEL_COLOR[2]; } else if (value <= 16) { td.style.color = SCOUT_LEVEL_COLOR[1]; } else { td.style.color = SCOUT_LEVEL_COLOR[0]; } } else if (['RatioSkillSum', 'SumReachPeak'].includes(type)) { if (value >= 90) { td.style.color = PERCENT_PEAK_COLOR[5]; } else if (value >= 80) { td.style.color = PERCENT_PEAK_COLOR[4]; } else if (value >= 70) { td.style.color = PERCENT_PEAK_COLOR[3]; } else if (value >= 60) { td.style.color = PERCENT_PEAK_COLOR[2]; } else if (value >= 50) { td.style.color = PERCENT_PEAK_COLOR[1]; } else { td.style.color = PERCENT_PEAK_COLOR[0]; } } else if (type == 'Ti') { if (value >= TI_CLASS.LEVEL_1) { td.style.color = APP_COLOR.LEVEL_1; } else if (value >= TI_CLASS.LEVEL_2) { td.style.color = APP_COLOR.LEVEL_2; } else if (value >= TI_CLASS.LEVEL_3) { td.style.color = APP_COLOR.LEVEL_3; } else if (value >= TI_CLASS.LEVEL_4) { td.style.color = APP_COLOR.LEVEL_4; } else if (value >= TI_CLASS.LEVEL_5) { td.style.color = APP_COLOR.LEVEL_5; } else if (value >= TI_CLASS.LEVEL_6) { td.style.color = APP_COLOR.LEVEL_6; } else { td.style.color = APP_COLOR.LEVEL_7; } } } } })();