// ==UserScript== // @name MZ_Track_Youth_Exchange_Players // @namespace http://tampermonkey.net/ // @version 2.0 // @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) => { console.log(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) => { const hpSkillsArray = playerData.hpSkills.split(","); const lpSkillsArray = playerData.lpSkills.split(","); const firstHpSkill = extractSkillNameAndLevel(hpSkillsArray[0]); const secondHpSkill = hpSkillsArray.length > 1 ? extractSkillNameAndLevel(hpSkillsArray[1]) : { level: 0, name: "" }; const firstLpSkill = extractSkillNameAndLevel(lpSkillsArray[0]); const secondLpSkill = lpSkillsArray.length > 1 ? extractSkillNameAndLevel(lpSkillsArray[1]) : { level: 0, name: "" }; return { partitionKey: playerData.totalSkillBalls + "Balls", rowKey: playerData.playerID, name: playerData.playerName, age: youthExchangePlayerAge, country: nationality, hp: firstHpSkill.level, firstHpSkill: firstHpSkill.name, secondHpSkill: secondHpSkill.name, lp: firstLpSkill.level, firstLpSkill: firstLpSkill.name, secondLpSkill: secondLpSkill.name, totalBalls: playerData.totalSkillBalls, owner: username }; }; const extractPlayerData = () => { const playerContainer = document.getElementById("thePlayers_x"); if (!playerContainer) { console.log("Player container not found."); return; } try { const playerName = playerContainer.querySelector('.player_name').textContent || 'Unknown'; const playerID = playerContainer.querySelector('.player_id_span').textContent || 'Unknown'; const hpSkills = playerContainer.querySelector('[id^="GM_scout_"]').textContent.match(/\[H\d [^\]]+\]/) || ['H0 Unknown']; const lpSkills = playerContainer.querySelector('[id^="GM_scout_"]').textContent.match(/\[L\d [^\]]+\]/) || ['L0 Unknown']; const totalSkillBalls = playerContainer.querySelectorAll('tbody > tr')[6].querySelector('.bold').textContent || 'Unknown'; const playerData = { playerID: playerID, playerName: playerName, hpSkills: hpSkills[0].replace(/\[|\]/g, ''), lpSkills: lpSkills[0].replace(/\[|\]/g, ''), totalSkillBalls: totalSkillBalls }; const youthExchangeObj = preparePlayerData(playerData); sendDataToAzure(youthExchangeObj); } catch (error) { console.error("Error extracting player data: ", error); } }; 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; } }, 333); }; window.addEventListener('load', () => { const usernameElement = document.getElementById('header-username'); username = usernameElement ? usernameElement.textContent : 'Unknown'; fetchNationality(username); }); })();