// ==UserScript== // @name MZ_Track_Youth_Exchange_Players // @namespace http://tampermonkey.net/ // @version 2.1 // @description Persist player data from Youth Academy page when swapping or rejecting players — experiment // @author You // @match *://www.managerzone.com/?p=youth_academy* // @grant GM_xmlhttpRequest // @license MIT // @downloadURL none // ==/UserScript== (function () { 'use strict'; let username = ''; let nationality = ''; const youthExchangePlayerAge = 16; console.log("Will save youth exchange data to db."); const fetchNationality = (username) => { GM_xmlhttpRequest({ method: "GET", url: `http://www.managerzone.com/xml/manager_data.php?sport_id=1&username=${username}`, onload: function (response) { const parser = new DOMParser(); const xmlDoc = parser.parseFromString(response.responseText, "text/xml"); const countryShortname = xmlDoc.querySelector('UserData') ? xmlDoc.querySelector('UserData').getAttribute('countryShortname') : 'Not found'; getCountryFullName(countryShortname); }, onerror: function () { console.log("Error fetching nationality."); setupRejectExchListeners(); } }); }; const getCountryFullName = (shortName) => { GM_xmlhttpRequest({ method: "GET", url: 'https://gist.githubusercontent.com/douglasdotv/ab34745e73c41fa612913e96a968fba9/raw/b21e8512e6a0ae2fb1f37d2fc547140435932b1d/countries.json', onload: function (response) { const countries = JSON.parse(response.responseText); const country = countries.find(c => c.code === shortName); nationality = country ? country.name : shortName; setupRejectExchListeners(); }, onerror: function () { console.log("Error fetching full country name."); } }); }; const sendDataToAzure = (youthExchangeObj) => { GM_xmlhttpRequest({ method: "POST", url: "https://mziscool.azurewebsites.net/save", headers: { "Content-Type": "application/json" }, data: JSON.stringify(youthExchangeObj), onload: function (response) { console.log(`Youth player data sent. Response code ${response.status}: ${response.responseText}`); }, onerror: function (error) { console.log('Erro ao enviar dados:', error); } }); }; const extractSkillNameAndLevel = (skillString) => { const match = skillString.trim().match(/([HL])(\d+) (.+)/); return match ? { level: parseInt(match[2]), name: match[3] } : { level: 0, name: skillString.trim() }; }; const preparePlayerData = (playerData) => { return { partitionKey: playerData.totalSkillBalls + "Balls", rowKey: playerData.playerID, name: playerData.playerName, age: youthExchangePlayerAge, country: nationality, hp: playerData.hp, firstHpSkill: playerData.firstHpSkill, secondHpSkill: playerData.secondHpSkill, lp: playerData.lp, firstLpSkill: playerData.firstLpSkill, secondLpSkill: playerData.secondLpSkill, trainingSpeed: playerData.trainingSpeed, totalBalls: playerData.totalSkillBalls, owner: username, stats: playerData.stats }; }; const extractPlayerStats = (playerContainer) => { const stats = {}; const skillsNames = [ "Speed", "Stamina", "Play Intelligence", "Passing", "Shooting", "Heading", "Keeping", "Ball Control", "Tackling", "Aerial Passing", "Set Plays", "Experience", "Form" ]; const skillsRows = playerContainer.querySelectorAll('.player_skills tr'); skillsRows.forEach((row, index) => { if (index < skillsNames.length) { const skillValueElement = row.querySelector('.skillval span'); const skillValue = skillValueElement ? parseInt(skillValueElement.textContent.trim()) : 0; const skillName = skillsNames[index]; stats[skillName] = skillValue; } }); return stats; }; const extractPlayerData = () => { const playerContainer = document.getElementById("thePlayers_x"); if (!playerContainer) { console.log("Where is the player?"); return; } GM_xmlhttpRequest({ method: "GET", url: `https://www.managerzone.com/ajax.php?p=players&sub=scout_report&pid=null&sport=soccer`, onload: function (response) { let responseText = response.responseText.replace(/Trzxyvopaxis/g, ''); const parser = new DOMParser(); const doc = parser.parseFromString(responseText, "text/html"); const dataList = doc.querySelectorAll('dl > dd'); const extractSkillsAndPotentials = (skillContainers) => { const skills = { firstHpSkill: "", secondHpSkill: "", firstLpSkill: "", secondLpSkill: "" }; if (skillContainers.length > 1) { const hpSkills = Array.from(skillContainers[0].querySelectorAll('li > span:last-child')).map(span => span.textContent.trim()); const lpSkills = Array.from(skillContainers[1].querySelectorAll('li > span:last-child')).map(span => span.textContent.trim()); if (hpSkills.length >= 2) { skills.firstHpSkill = hpSkills[0]; skills.secondHpSkill = hpSkills[1]; } if (lpSkills.length >= 2) { skills.firstLpSkill = lpSkills[0]; skills.secondLpSkill = lpSkills[1]; } } return skills; }; const skillsAndPotentials = extractSkillsAndPotentials(dataList); const stats = extractPlayerStats(playerContainer); const playerData = { playerID: playerContainer.querySelector('.player_id_span').textContent, playerName: playerContainer.querySelector('.player_name').textContent, hp: dataList[0].querySelectorAll('.lit').length, lp: dataList[1].querySelectorAll('.lit').length, totalSkillBalls: playerContainer.querySelectorAll('tbody > tr')[6].querySelector('.bold').textContent, trainingSpeed: dataList[2].querySelectorAll('.lit').length, stats: stats, ...skillsAndPotentials }; const youthExchangeObj = preparePlayerData(playerData); console.log(youthExchangeObj); sendDataToAzure(youthExchangeObj); }, onerror: function () { console.error("Error fetching player data."); } }); }; const setupRejectExchListeners = () => { setInterval(() => { const rejectButton = document.querySelector('#discard_youth_button'); const exchangeButton = document.querySelector('#exchange_button'); if (rejectButton && !rejectButton.dataset.listenerAdded) { rejectButton.addEventListener('click', extractPlayerData); rejectButton.dataset.listenerAdded = true; } if (exchangeButton && !exchangeButton.dataset.listenerAdded) { exchangeButton.addEventListener('click', extractPlayerData); exchangeButton.dataset.listenerAdded = true; } }, 400); }; window.addEventListener('load', () => { const usernameElement = document.getElementById('header-username'); username = usernameElement ? usernameElement.textContent : 'Unknown'; fetchNationality(username); }); })();