// ==UserScript== // @name OGame DataProcessing // @namespace http://tampermonkey.net/ // @version 0.9 // @description Allows you to quickly and conveniently view all information about the player/alliance through the search by Name/ID gamer and Name/ID/ Tag of the alliance respectively. Highlights activity on planets and moons // @author Alexander Bulgakov // @match *.ogame.gameforge.com/game/index.php?page=* // @icon https://www.google.com/s2/favicons?sz=64&domain=gameforge.com // @grant none // @downloadURL none // ==/UserScript== let opacityTimer let universeId = +location.href.match(/s(\d{3})/)[1] function sendSpy(order, galaxy, system, planet, planettype, shipCount) { let params = { mission: order, galaxy: galaxy, system: system, position: planet, type: planettype, shipCount: shipCount, token: window.token } window.$.ajax(window.miniFleetLink, { data: params, dataType: 'json', type: 'POST', success: function (data) { window.token = data.newAjaxToken; window.updateOverlayToken('phalanxSystemDialog', data.newAjaxToken); window.updateOverlayToken('phalanxDialog', data.newAjaxToken); if (data.response.success) { window.fadeBox(data.response.message + ' ' + data.response.coordinates.galaxy + ':' + data.response.coordinates.system + ':' + data.response.coordinates.position, !data.response.success); } else { window.fadeBox(data.response.message, true); } } }); } function fnCreateElement(tag, attributes = {}) { const elem = document.createElement(tag) if (Object.keys(attributes).length != 0) { for (let key in attributes) elem.setAttribute(key, attributes[key]) } return elem } // icons url: https://gf3.geo.gfsrv.net/cdne9/1fd57fa51cdb81035382943e635348.gif const dataPanelStyle = fnCreateElement('style', {type: 'text/css'}) dataPanelStyle.innerHTML = ` #dataWrapper { position: fixed; display: block; float: right; background: url(https://gf3.geo.gfsrv.net/cdnea/bd764e9b39a1a48ad708039fda1bde.gif) repeat-y; top: 60px; right: 100px; width: fit-content; height: fit-content; max-width: 222px; z-index: 1; transition: all .3s; } #dataHeader { position: relative; display: flex; flex-direction: row; align-content: space-around; justify-content: space-evenly; align-items: center; background: url("https://gf1.geo.gfsrv.net/cdnfe/b9de2f5b06c823d628d22c4067ee35.gif") no-repeat; background-size: 222px 40px; height: 40px; width: 222px; } #dataIconBoxCategory { display: flex; position: relative; left: 35px; z-index: 2; } #dataIconBoxType { display: flex; position: relative; left: 44px; transition: left .5s; z-index: 1; } #dataIconBoxTypeSmall { display: flex; position: relative; left: -30px; z-index: 0; } .dataIcon { position: relative; background: url("https://gf3.geo.gfsrv.net/cdne9/1fd57fa51cdb81035382943e635348.gif"); background-size: 129.6px 43.2px; height: 21.6px; width: 21.6px; margin: 2.2px 1.5px 0px; border-radius: 3px; cursor: pointer; opacity: 1; left: 0; transition-property: opacity, left; transition-duration: .2s; } #dataIBCPlayer:hover, #dataRBPlayer:checked ~ #dataIBCPlayer { background-position: 0px 21.6px; box-shadow: 0px 0px 4px #0bf; } #dataRBPlayer:checked ~ #dataIBCPlayer::after, #dataRBAlliance:checked ~ #dataIBCAlliance::after, #dataRBPoints:checked ~ #dataIBTPoints::after, #dataRBEconomics:checked ~ #dataIBTEconomics::after, #dataRBResearch:checked ~ #dataIBTResearch::after, #dataRBWeapons:checked ~ #dataIBTWeapons::after { border-bottom: 1px solid; content: ''; display: block; margin: 0 auto; position: relative; top: 23px; width: 16px; } #dataRBPlayer:checked ~ #dataIBCPlayer::after { border-color: #0bf; } #dataRBAlliance:checked ~ #dataIBCAlliance::after { border-color: #0fc; } #dataRBPoints:checked ~ #dataIBTPoints::after { border-color: #ff0; } #dataRBEconomics:checked ~ #dataIBTEconomics::after { border-color: #fff; } #dataRBResearch:checked ~ #dataIBTResearch::after { border-color: #af0; } #dataRBWeapons:checked ~ #dataIBTWeapons::after { border-color: #f20; } #dataIBCAlliance { background-position-x: -21.6px; } #dataIBCAlliance:hover, #dataRBAlliance:checked ~ #dataIBCAlliance { background-position: -21.6px 21.6px; box-shadow: 0px 0px 4px #0fc; } #dataIBTPoints { background-position-x: -43.2px; } #dataIBTPoints:hover, #dataRBPoints:checked ~ #dataIBTPoints { background-position: -43.2px 21.6px; box-shadow: 0px 0px 4px #ff0; } #dataIBTEconomics { background-position-x: -108px; } #dataIBTEconomics:hover, #dataRBEconomics:checked ~ #dataIBTEconomics { background-position: -108px 21.6px; box-shadow: 0px 0px 4px #fff; } #dataIBTResearch{ background-position-x: -86.4px; } #dataIBTResearch:hover, #dataRBResearch:checked ~ #dataIBTResearch { background-position: -86.4px 21.6px; box-shadow: 0px 0px 4px #af0; } #dataIBTWeapons { background-position-x: -64.8px; } #dataIBTWeapons:hover, #dataRBWeapons:checked ~ #dataIBTWeapons { background-position: -64.8px 21.6px; box-shadow: 0px 0px 4px #f20; } .dataIcon_small { display: inline-block; position: relative; background: url("https://gf1.geo.gfsrv.net/cdnc4/6f6b7e29edf86992b7e7162f23789a.png"); background-size: 133px 17px; height: 17px; width: 17px; margin: 3px 1.5px 0px; border-radius: 1px; cursor: pointer; } #dataIBTsCollected { background-position-x: 0px; opacity: 0; } #dataIBTsCollected:hover, #dataRBCollected:checked ~ #dataIBTsCollected { background-position-x: -66.5px; box-shadow: 0px 0px 4px #f20; } #dataRBCollected:checked ~ #dataIBTsCollected::after, #dataRBDestroyed:checked ~ #dataIBTsDestroyed::after, #dataRBLost:checked ~ #dataIBTsLost::after, #dataRBHonor:checked ~ #dataIBTsHonor::after { border-bottom: 1px solid #f20; content: ''; display: block; margin: 0 auto; position: relative; top: 20.5px; width: 12.5px; } #dataIBTsDestroyed { background-position-x: -33.05px; opacity: 0; } #dataIBTsDestroyed:hover, #dataRBDestroyed:checked ~ #dataIBTsDestroyed { background-position-x: -99.55px; box-shadow: 0px 0px 4px #f20; } #dataIBTsLost { background-position-x: -16.5px; opacity: 0; } #dataIBTsLost:hover, #dataRBLost:checked ~ #dataIBTsLost { background-position-x: -83px; box-shadow: 0px 0px 4px #f20; } #dataIBTsHonor { background-position-x: -49.5px; opacity: 0; } #dataIBTsHonor:hover, #dataRBHonor:checked ~ #dataIBTsHonor { background-position-x: -116px; box-shadow: 0px 0px 4px #f20; } #dataBackground { position: relative; display: flex; justify-content: center; flex-direction: column; background: -webkit-linear-gradient(top, #171d23 0%, #101419 100%); border: 1px solid #171d23; border-radius: 3px; margin: 2px 15px -13px; padding: 0px 10px 10px; min-height: 50px; height: fit-content; text-align: center; transition: height .3s; } #dataRequestBlock { margin: 0px 0px 10px; } #dataResponseBlock { height: fit-content; display: flex; flex-direction: column; align-items: center; max-height: ${window.innerHeight - 250}px; overflow-y: auto; overflow-x: hidden; } #dataResponseBlock::-webkit-scrollbar { background: #0d1014; border-radius: 4px; box-shadow: inset 0 0 5px black; width: 8px; } #dataResponseBlock::-webkit-scrollbar-thumb { background: #28333e; border: 1px solid #3c4c5d; border-radius: 4px; } #dataResponseBlock::-webkit-scrollbar-thumb:hover { background: #323f4e; } .dataResponseLines::before { background: linear-gradient(#00000000, #00000000); } .dataResponseLines { width: 140px; line-height: 17px; margin: 1px 5px; background: #243342; border-bottom: solid 1px #6f9fc8; border-left: solid 1px #104c71; border-radius: 0px 6px 0px 8px; color: white; font-family: Verdana; font-size: 11px; padding: 0 0 2px 1px; cursor: pointer; transition: background .15s; } .dataResponseLines:hover { background: #4ca1af; } .dataHs { display: flex; justify-content: flex-start; margin-left: 4px; padding: 2px 0; text-align: left; border-bottom: 1px solid #283840; align-items: center; flex-direction: row; width: 95%; } .dataHs span { color: white; } .dataImg1 { display: block; position: relative; background: url("https://gf3.geo.gfsrv.net/cdne9/1fd57fa51cdb81035382943e635348.gif"); background-size: 121.5px 40.5px; height: 20.25px; width: 20.25px; margin: 0 5px; } .dataImg2 { display: block; position: relative; background: url("https://gf3.geo.gfsrv.net/cdne7/882b3dfe72735e799afcff6e107f73.png"); background-size: 280px 20.25px; height: 20.25px; width: 20.25px; margin: 0 5px; } .imgType0 { background-position-x: -40.5px; } .imgType1 { background-position-x: -101.25px; } .imgType2 { background-position-x: -81px; } .imgType3 { background-position-x: -60.75px; } .imgType4 { background-position-x: -19.65px; } .imgType5 { background-position-x: 0px; } .imgType6 { background-position-x: -39.3px; } .imgType7 { background-position-x: -58.85px; } .dataPlanetList { background: linear-gradient(135deg, #323c4c 0%,#3a4759 12%,#435166 25%,#2f3247 39%,#1d232c 50%,#000000 51%,#0b0d11 60%,#1c222b 76%,#12161c 91%,#0c0f13 100%); border-radius: 12px; display: block; font-family: Verdana, Geneva, Tahoma, sans-serif; height: fit-content; margin: 2px 5px; padding: 3px; position: relative; text-align: center; width: 100px; } .dataPlanetList:first-of-type { background: linear-gradient(135deg, #959595 0%,#0d0d0d 46%,#010101 50%,#0a0a0a 53%,#4e4e4e 76%,#383838 87%,#1b1b1b 100%); } .dataPlayersList { background: linear-gradient(135deg, #323c4c 0%,#3a4759 12%,#435166 25%,#2f3247 39%,#1d232c 50%,#000000 51%,#0b0d11 60%,#1c222b 76%,#12161c 91%,#0c0f13 100%); border-radius: 12px; display: block; font-family: Verdana, Geneva, Tahoma, sans-serif; height: fit-content; margin: 2px 5px; padding: 3px; position: relative; text-align: center; width: 100px; color: white; font-size: 11px; cursor: pointer; } .dataPlayersList:hover { background: linear-gradient(135deg, #f2f6f8 0%,#d8e1e7 50%,#b5c6d0 51%,#e0eff9 100%); } .dataBlock { background: #00000080; border-radius: 9px; box-shadow: 0 0 5px #00000080 inset; color: white; display: flex; align-items: center; flex-direction: row; justify-content: space-around; font-weight: bold; height: fit-content; padding: 2px 3px 3px; position: relative; word-break: break-word; } .planetDataIcon { background: linear-gradient(135deg, #f2f6f8 0%,#d8e1e7 50%,#b5c6d0 51%,#e0eff9 100%); border-radius: 7px; display: flex; align-items: center; justify-content: space-around; left: 4px; height: 14px; width: 14px; position: absolute; transition: all .3s; } .planetDataIcon:hover { box-shadow: 0 0 5px 0 #000000; left: -30px; width: 48px; } .pSpyBtn, .mSpyBtn, .pAtkBtn, .mAtkBtn, .pTrpBtn, .mTrpBtn { border-radius: 5px; box-shadow: 0 0 3px 1px #00000080; cursor: pointer; height: 10px; opacity: 0; transition: all .2s; width: 10px; font-size: 8px; line-height: 10px; } .pSpyBtn, .mSpyBtn { background: linear-gradient(135deg, #fceabb 0%,#fccd4d 50%,#f8b500 51%,#fbdf93 100%); color: #886400; } .pAtkBtn, .mAtkBtn { background: linear-gradient(135deg, #feccb1 0%,#f17432 50%,#ea5507 51%,#fb955e 100%); color: #772c04; } .pTrpBtn, .mTrpBtn { background: linear-gradient(135deg, #9dd53a 0%,#a1d54f 50%,#80c217 51%,#7cbc0a 100%); color: #3d5e06; } .pSpyBtn::before, .mSpyBtn::before { content: 'S'; } .pAtkBtn::before, .mAtkBtn::before { content: 'A'; } .pTrpBtn::before, .mTrpBtn::before { content: 'T'; } .pSpyBtn:hover, .mSpyBtn:hover, .pAtkBtn:hover, .mAtkBtn:hover, .pTrpBtn:hover, .mTrpBtn:hover { box-shadow: 0 0 3px 1px #ffffff; } .cordsBlock { cursor: pointer; font-size: 11px; line-height: 10px; padding: 2px 3px; transition: all .3s; border-top: 1px solid transparent; border-bottom: 1px solid transparent; } .cordsBlock:hover { border-top: 1px solid #d1d7e1; border-bottom: 1px solid #d1d7e1; } .moonIcon { background: linear-gradient(135deg, #f2f6f8 0%,#d8e1e7 50%,#b5c6d0 51%,#e0eff9 100%); border-radius: 7px; display: flex; align-items: center; justify-content: space-around; right: 4px; height: 14px; transition: box-shadow .3s; width: 14px; position: absolute; transition: all .3s; } .moonIcon.noMoonIcon:hover .mSpyBtn, .moonIcon.noMoonIcon:hover .mAtkBtn, .moonIcon.noMoonIcon:hover .mTrpBtn { display: none; } .planetDataIcon:hover .pSpyBtn, .planetDataIcon:hover .pAtkBtn, .planetDataIcon:hover .pTrpBtn, .moonIcon:hover:not(.noMoonIcon) .mSpyBtn, .moonIcon:hover:not(.noMoonIcon) .mAtkBtn, .moonIcon:hover:not(.noMoonIcon) .mTrpBtn { display: block; opacity: 1; } .moonIcon:hover:not(.noMoonIcon) { box-shadow: 0 0 5px 0 #000000; right: -30px; width: 48px; } .pActSign, .mActSign { color: #886400; display: block; font-family: Verdana, Geneva, Tahoma, sans-serif; font-size: 8px; position: absolute; } .planetDataIcon:hover .pActSign, .moonIcon:hover .mActSign { display: none; } .noMoonIcon { background: #60606060 !important; border-radius: 7px; box-shadow: 0 0 4px #00000080 inset; display: flex; align-items: center; justify-content: space-around; right: 4px; height: 14px; width: 14px; position: absolute; } .nowActive { background: linear-gradient(135deg, #feccb1 0%,#f17432 50%,#ea5507 51%,#fb955e 100%); } .min15Active { background: linear-gradient(135deg, #fceabb 0%,#fccd4d 50%,#f8b500 51%,#fbdf93 100%); } .nowInactive { background: linear-gradient(135deg, #9dd53a 0%,#a1d54f 50%,#80c217 51%,#7cbc0a 100%); } .alFounder { background: linear-gradient(135deg, #959595 0%,#0d0d0d 46%,#010101 50%,#0a0a0a 53%,#4e4e4e 76%,#383838 87%,#1b1b1b 100%); } #dataPlanets, #dataPlayers { display: flex; flex-direction: column; align-items: center; margin: 5px 0; } #dataContentCaption { color: #6F9FC8; font: bold 11px/27px Verdana,Arial,Helvetica,sans-serif; } #dataInput { width: 90%; text-align: center; font-size: 12px; color: rgb(187, 187, 187) !important; box-shadow: none !important; line-height: 23px !important; border-width: 1px !important; border-style: solid !important; border-color: rgb(58, 72, 86) !important; border-image: initial !important; border-radius: 3px; background: -webkit-linear-gradient(top, rgb(14, 17, 23) 0px, rgb(35, 43, 51) 100%) !important; outline: none; } #dataInpClrBtn { color: grey; cursor: pointer; display: inline-block; font-family: Verdana; font-size: 16px; font-weight: bold; line-height: 14px; position: absolute; right: 17px; top: 33px; transform: rotate(45deg); transition: color .3s; } #dataInpClrBtn:hover { color: white; } #dataFooter { background: url("https://gf3.geo.gfsrv.net/cdn23/174d5c09f617701fcaf1664a414869.gif") no-repeat; height: 21px; width: 222px; } input[type="radio"] { display: none; } .bevel { background: #0d1014; border: solid 1px #1e262e; border-radius: 4px; box-shadow: 0 0 5px black inset; color: #b8b8b8; display: block; font-size: 9px; height: fit-content; margin: 3px 0px 5px; padding: 4px; position: relative; width: 90%; } .playersBlock { display: flex; align-items: center; justify-content: space-around; } ` const dataWrapper = fnCreateElement('div', {id: 'dataWrapper'}) //, style: 'opacity: .5;' const dataHeader = fnCreateElement('div', {id: 'dataHeader'}) const dataRBPlayer = fnCreateElement('input', {id: 'dataRBPlayer', type: 'radio', name: 'category', infoCategory: '1'}) const dataRBAlliance = fnCreateElement('input', {id: 'dataRBAlliance', type: 'radio', name: 'category', infoCategory: '2'}) const dataRBPoints = fnCreateElement('input', {id: 'dataRBPoints', type: 'radio', name: 'type', infoType: '0'}) const dataRBEconomics = fnCreateElement('input', {id: 'dataRBEconomics', type: 'radio', name: 'type', infoType: '1'}) const dataRBResearch = fnCreateElement('input', {id: 'dataRBResearch', type: 'radio', name: 'type', infoType: '2'}) const dataRBWeapons = fnCreateElement('input', {id: 'dataRBWeapons', type: 'radio', name: 'type', infoType: '3'}) const dataRBCollected = fnCreateElement('input', {id: 'dataRBCollected', type: 'radio', name: 'type', infoType: '5'}) const dataRBDestroyed = fnCreateElement('input', {id: 'dataRBDestroyed', type: 'radio', name: 'type', infoType: '6'}) const dataRBLost = fnCreateElement('input', {id: 'dataRBLost', type: 'radio', name: 'type', infoType: '4'}) const dataRBHonor = fnCreateElement('input', {id: 'dataRBHonor', type: 'radio', name: 'type', infoType: '7'}) const dataIconBoxCategory = fnCreateElement('div', {id: 'dataIconBoxCategory'}) const dataIBCPlayer = fnCreateElement('div', {id: 'dataIBCPlayer', class: 'dataIcon', onclick: 'dataRBPlayer.click()'}) const dataIBCAlliance = fnCreateElement('div', {id: 'dataIBCAlliance', class: 'dataIcon', onclick: 'dataRBAlliance.click()'}) const dataIconBoxType = fnCreateElement('div', {id: 'dataIconBoxType'}) const dataIBTPoints = fnCreateElement('div', {id: 'dataIBTPoints', class: 'dataIcon', onclick: 'dataRBPoints.click()'}) const dataIBTEconomics = fnCreateElement('div', {id: 'dataIBTEconomics', class: 'dataIcon', onclick: 'dataRBEconomics.click()'}) const dataIBTResearch = fnCreateElement('div', {id: 'dataIBTResearch', class: 'dataIcon', onclick: 'dataRBResearch.click()'}) const dataIBTWeapons = fnCreateElement('div', {id: 'dataIBTWeapons', class: 'dataIcon', onclick: 'dataRBWeapons.click()'}) const dataIconBoxTypeSmall = fnCreateElement('div', {id: 'dataIconBoxTypeSmall'}) const dataIBTsCollected = fnCreateElement('div', {id: 'dataIBTsCollected', class: 'dataIcon_small', onclick: 'dataRBCollected.click()'}) const dataIBTsDestroyed = fnCreateElement('div', {id: 'dataIBTsDestroyed', class: 'dataIcon_small', onclick: 'dataRBDestroyed.click()'}) const dataIBTsLost = fnCreateElement('div', {id: 'dataIBTsLost', class: 'dataIcon_small', onclick: 'dataRBLost.click()'}) const dataIBTsHonor = fnCreateElement('div', {id: 'dataIBTsHonor', class: 'dataIcon_small', onclick: 'dataRBHonor.click()'}) const dataBackground = fnCreateElement('div', {id: 'dataBackground'}) const dataRequestBlock = fnCreateElement('div', {id: 'dataRequestBlock'}) const dataContentCaption = fnCreateElement('h3', {id: 'dataContentCaption'}) const dataInput = fnCreateElement('input', {id: 'dataInput', type: 'text'}) const dataInpClrBtn = fnCreateElement('div', {id: 'dataInpClrBtn'}) const dataResponseBlock = fnCreateElement('div', {id: 'dataResponseBlock'}) const dataFooter = fnCreateElement('div', {id: 'dataFooter'}) if (localStorage.getItem('playerInputChecked') == null) localStorage.setItem('playerInputChecked', 'true') else if (localStorage.getItem('playerInputChecked') == 'true') { dataRBPlayer.checked = true dataRBAlliance.checked = false } else if (localStorage.getItem('allianceInputChecked') == 'true') { dataRBAlliance.checked = true dataRBPlayer.checked = false } if (dataRBPlayer.checked) { dataInput.value = localStorage.getItem('playerInput') if (localStorage.getItem('playerDataShown') == 'true') { getData(`https://s${universeId}-ru.ogame.gameforge.com/api/players.xml`) .then(data => { let playerId = data.querySelector(`player[name="${dataInput.value}"]`).id getData(`https://s${universeId}-ru.ogame.gameforge.com/api/playerData.xml?id=${playerId}`) .then(data => { createLineDetails(data, 1, null) }) }) } else { getData(`https://s${universeId}-ru.ogame.gameforge.com/api/players.xml`) .then(data => { fillSearchResult(data, 1) }) } } else if (dataRBAlliance.checked) { dataInput.value = localStorage.getItem('allianceInput') if (localStorage.getItem('allianceDataShown') == 'true') { getData(`https://s${universeId}-ru.ogame.gameforge.com/api/alliances.xml`) .then(data => { let alliance = data.querySelector(`alliance[name="${dataInput.value}"]`); let players = alliance.querySelectorAll('player') let founder = alliance.getAttribute('founder') createLineDetails(alliance, 2, players, founder) }) } else { getData(`https://s${universeId}-ru.ogame.gameforge.com/api/alliances.xml`) .then(data => { fillSearchResult(data, 2) }) } } document.body.appendChild(dataPanelStyle) document.body.appendChild(dataWrapper) dataWrapper.appendChild(dataHeader) dataHeader.appendChild(dataIconBoxCategory) dataIconBoxCategory.appendChild(dataRBPlayer) dataIconBoxCategory.appendChild(dataIBCPlayer) dataIconBoxCategory.appendChild(dataRBAlliance) dataIconBoxCategory.appendChild(dataIBCAlliance) dataHeader.appendChild(dataIconBoxType) dataIconBoxType.appendChild(dataRBPoints) dataIconBoxType.appendChild(dataIBTPoints) dataIconBoxType.appendChild(dataRBEconomics) dataIconBoxType.appendChild(dataIBTEconomics) dataIconBoxType.appendChild(dataRBResearch) dataIconBoxType.appendChild(dataIBTResearch) dataIconBoxType.appendChild(dataRBWeapons) dataIconBoxType.appendChild(dataIBTWeapons) dataHeader.appendChild(dataIconBoxTypeSmall) dataIconBoxTypeSmall.appendChild(dataRBCollected) dataIconBoxTypeSmall.appendChild(dataIBTsCollected) dataIconBoxTypeSmall.appendChild(dataRBDestroyed) dataIconBoxTypeSmall.appendChild(dataIBTsDestroyed) dataIconBoxTypeSmall.appendChild(dataRBLost) dataIconBoxTypeSmall.appendChild(dataIBTsLost) dataIconBoxTypeSmall.appendChild(dataRBHonor) dataIconBoxTypeSmall.appendChild(dataIBTsHonor) dataWrapper.appendChild(dataBackground) dataBackground.appendChild(dataRequestBlock) dataBackground.appendChild(dataResponseBlock) dataRequestBlock.appendChild(dataContentCaption) dataContentCaption.innerText = localStorage.getItem('currCapt') || 'Имя/ID игрока' dataRequestBlock.appendChild(dataInput) dataRequestBlock.appendChild(dataInpClrBtn) dataInpClrBtn.innerText = '+' dataWrapper.appendChild(dataFooter) dataIBCPlayer.onclick = () => { dataRBPlayer.checked = true; dataContentCaption.innerText = 'Имя/ID игрока:' localStorage.setItem('currCapt', 'Имя/ID игрока:') localStorage.setItem('playerInputChecked', 'true') localStorage.setItem('allianceInputChecked', 'false') dataInput.value = localStorage.getItem('playerInput') while (dataResponseBlock.firstChild || dataInput.value.length < 3) { dataResponseBlock.removeChild(dataResponseBlock.firstChild) } if (localStorage.getItem('playerDataShown') == 'true') { getData(`https://s${universeId}-ru.ogame.gameforge.com/api/players.xml`) .then(data => { let playerId = data.querySelector(`player[name="${dataInput.value}"]`).id getData(`https://s${universeId}-ru.ogame.gameforge.com/api/playerData.xml?id=${playerId}`) .then(data => { createLineDetails(data, 1, null) }) }) } else { getData(`https://s${universeId}-ru.ogame.gameforge.com/api/players.xml`) .then(data => { fillSearchResult(data, 1) }) } } dataIBCAlliance.onclick = () => { dataRBAlliance.checked = true; dataContentCaption.innerText = 'Название/тэг/ID альянса:' localStorage.setItem('currCapt', 'Название/тэг/ID альянса:') localStorage.setItem('allianceInputChecked', 'true') localStorage.setItem('playerInputChecked', 'false') dataInput.value = localStorage.getItem('allianceInput') while (dataResponseBlock.firstChild || dataInput.value.length < 3) { dataResponseBlock.removeChild(dataResponseBlock.firstChild) } if (localStorage.getItem('allianceDataShown') == 'true') { getData(`https://s${universeId}-ru.ogame.gameforge.com/api/alliances.xml`) .then(data => { let alliance = data.querySelector(`alliance[name="${dataInput.value}"]`); let players = alliance.querySelectorAll('player') let founder = alliance.getAttribute('founder') createLineDetails(alliance, 2, players, founder) }) } else { getData(`https://s${universeId}-ru.ogame.gameforge.com/api/alliances.xml`) .then(data => { fillSearchResult(data, 2) }) } } let flag = 0 dataIBTWeapons.onclick = () => { dataRBWeapons.checked = true if (flag == 0) { dataIBTPoints.style.opacity = 0 dataIBTEconomics.style.opacity = 0 dataIBTResearch.style.opacity = 0 setTimeout(() => { dataIconBoxType.style.left = '-29.75px' dataIBTsCollected.style.transition = 'opacity .2s .2s' dataIBTsCollected.style.opacity = 1 dataIBTsDestroyed.style.transition = 'opacity .2s .15s' dataIBTsDestroyed.style.opacity = 1 dataIBTsLost.style.transition = 'opacity .2s .1s' dataIBTsLost.style.opacity = 1 dataIBTsHonor.style.transition = 'opacity .2s .05s' dataIBTsHonor.style.opacity = 1 dataIBTPoints.style.visibility = 'hidden' dataIBTEconomics.style.visibility = 'hidden' dataIBTResearch.style.visibility = 'hidden' flag = 1 }, 200) } else if (flag == 1) { dataIconBoxType.style.left = '44px' dataIBTsCollected.style.transition = 'opacity .2s .05s' dataIBTsCollected.style.opacity = 0 dataIBTsDestroyed.style.transition = 'opacity .2s .1s' dataIBTsDestroyed.style.opacity = 0 dataIBTsLost.style.transition = 'opacity .2s .15s' dataIBTsLost.style.opacity = 0 dataIBTsHonor.style.transition = 'opacity .2s .2s' dataIBTsHonor.style.opacity = 0 flag = 0 setTimeout(() => { dataIBTPoints.style.visibility = 'visible' dataIBTEconomics.style.visibility = 'visible' dataIBTResearch.style.visibility = 'visible' dataIBTPoints.style.opacity = 1 dataIBTEconomics.style.opacity = 1 dataIBTResearch.style.opacity = 1 }, 400); } } // dataWrapper.onmouseover = () => { // dataWrapper.style.opacity = '1' // clearTimeout(opacityTimer) // } // dataWrapper.onclick = dataWrapper.onmouseover // dataWrapper.oninput = dataWrapper.onmouseover // dataWrapper.onmouseout = () => { // opacityTimer = setTimeout(() => { // dataWrapper.style.opacity = '.5' // }, 5000) // } // dataInput.onblur = dataWrapper.onmouseout async function getData(url) { const resp = await fetch(url) let text = await resp.text() let parsed = new window.DOMParser().parseFromString(text, 'text/xml') return parsed } dataInput.oninput = () => { if (dataRBPlayer.checked) { localStorage.setItem('playerInput', dataInput.value) localStorage.setItem('playerDataShown', 'false') getData(`https://s${universeId}-ru.ogame.gameforge.com/api/players.xml`) .then(data => { fillSearchResult(data, 1) }) } else if (dataRBAlliance.checked) { localStorage.setItem('allianceInput', dataInput.value) localStorage.setItem('allianceDataShown', 'false') getData(`https://s${universeId}-ru.ogame.gameforge.com/api/alliances.xml`) .then(data => { fillSearchResult(data, 2) }) } } dataInpClrBtn.onclick = () => { delete iframeBlock dataInput.value = '' if (dataRBPlayer.checked) { localStorage.setItem('playerInput', dataInput.value) localStorage.setItem('playerDataShown', 'false') } else if (dataRBAlliance.checked) { localStorage.setItem('allianceInput', dataInput.value) localStorage.setItem('allianceDataShown', 'false') } while (dataResponseBlock.firstChild || dataInput.value.length < 3) { dataResponseBlock.removeChild(dataResponseBlock.firstChild) } } function fillSearchResult(data, mode) { let regExp = new RegExp(dataInput.value, 'gi') let resArray = [] let dataSet = [] switch (mode) { case 1: dataSet = data.querySelectorAll('player') dataSet.forEach(item => { if (item.getAttribute('name').match(regExp) || item.id.match(regExp)) resArray.push(item.getAttribute('name')) }) return createRespLines(resArray) case 2: dataSet = data.querySelectorAll('alliance') dataSet.forEach(item => { if (item.getAttribute('name').match(regExp) || item.getAttribute('tag').match(regExp) || item.id.match(regExp)) resArray.push(item.getAttribute('name')) }) return createRespLines(resArray) } } function createRespLines(arr) { while (dataResponseBlock.firstChild || dataInput.value.length < 3) { dataResponseBlock.removeChild(dataResponseBlock.firstChild) } let u = [] for (let i in arr) { u[i] = document.createElement('div') u[i].classList.add('dataResponseLines') getData(`https://s${universeId}-ru.ogame.gameforge.com/api/players.xml`) .then(data => { let status = data.querySelector(`player[name="${arr[i]}"]`).getAttribute('status') if (status) { if (status.match(/a/)) u[i].style.color = '#f48406' else if (status.match(/b/)) u[i].style.textDecoration = 'line-through' else if (status.match(/v/)) u[i].style.color = 'aqua' else if (status.match(/i/)) u[i].style.color = '#7e7e7e' else if (status.match(/I/)) u[i].style.color = '#5f5f5f' } }) u[i].innerHTML = arr[i] u[i].onclick = event => { dataInput.value = event.target.innerText let playerId, alliance if (dataRBPlayer.checked) { localStorage.setItem('playerInput', dataInput.value) localStorage.setItem('playerDataShown', 'true') getData(`https://s${universeId}-ru.ogame.gameforge.com/api/players.xml`) .then(data => { playerId = data.querySelector(`player[name="${event.target.innerText}"]`).id getData(`https://s${universeId}-ru.ogame.gameforge.com/api/playerData.xml?id=${playerId}`) .then(data => { createLineDetails(data, 1, null) }) }) } else if (dataRBAlliance.checked) { localStorage.setItem('allianceInput', dataInput.value) localStorage.setItem('allianceDataShown', 'true') getData(`https://s${universeId}-ru.ogame.gameforge.com/api/alliances.xml`) .then(data => { alliance = data.querySelector(`alliance[name="${event.target.innerText}"]`); let players = alliance.querySelectorAll('player') let founder = alliance.getAttribute('founder') createLineDetails(alliance, 2, players, founder) }) } } dataResponseBlock.appendChild(u[i]) } } async function getHighscore(url) { const resp = await fetch(url) let text = await resp.text() let parsed = new window.DOMParser().parseFromString(text, 'text/xml') return parsed } let iframeBlock = document.createElement('iframe') iframeBlock.style.cssText = 'display: block; position: absolute;' document.body.insertAdjacentElement('afterbegin', iframeBlock) iframeBlock.style.visibility = 'hidden' function createLineDetails(obj, mode, alComp = null, founder = null) { while (dataInput.value.length < 3 || dataResponseBlock.firstChild) { dataResponseBlock.removeChild(dataResponseBlock.firstChild) } let bevel = document.createElement('div') bevel.id = 'bevel' bevel.classList.add('bevel') dataResponseBlock.appendChild(bevel) if (mode == 1) { let playerIdBlock = document.createElement('div') playerIdBlock.id = 'playerIdBlock' playerIdBlock.innerHTML = `

ID: ${obj.querySelector('playerData').id}

` bevel.appendChild(playerIdBlock) if (obj.querySelector('alliance')) { let allianceSign = document.createElement('div') allianceSign.id = 'allianceSign' allianceSign.innerHTML = `

Альянс: ${obj.querySelector('alliance name').textContent}

` bevel.appendChild(allianceSign) } let playerInfoBlock = document.createElement('div') playerInfoBlock.id = 'dataStats' bevel.appendChild(playerInfoBlock) let hs = [], imgs = [] for (let i = 0; i < 8; i++) { getData(`https://s${universeId}-ru.ogame.gameforge.com/api/highscore.xml?category=1&type=${i}`) .then(data => { hs[i] = fnCreateElement('div', {class: `dataHs hsType${i}`}) imgs[i] = i < 4 ? fnCreateElement('div', {class: `dataImg1 imgType${i}`}) : fnCreateElement('div', {class: `dataImg2 imgType${i}`}) hs[i].appendChild(imgs[i]) hs[i].insertAdjacentHTML('beforeend', `

${data.querySelector(`player[id="${obj.querySelector('playerData').getAttribute('id')}"]`).getAttribute('position')} место

${(+data.querySelector(`player[id="${obj.querySelector('playerData').getAttribute('id')}"]`).getAttribute('score')).toLocaleString()} очков

`) playerInfoBlock.appendChild(hs[i]) }) } getData(`https://s${universeId}-ru.ogame.gameforge.com/api/highscore.xml?category=1&type=3`) .then(data => { let shipsAmount = +data.querySelector(`player[id="${obj.querySelector('playerData').id}"]`).getAttribute('ships') if (shipsAmount) playerInfoBlock.insertAdjacentHTML('afterend', `

Корабли: ${shipsAmount.toLocaleString()}

`) else playerInfoBlock.insertAdjacentHTML('afterend', '

Нет кораблей

') }) let planetsBlock = document.createElement('div') planetsBlock.id = 'dataPlanets' bevel.appendChild(planetsBlock) getData(`https://s${universeId}-ru.ogame.gameforge.com/api/universe.xml`) .then(data => { let p = [], pt = [], mn = [], crd = [], pAS = [], mAS = [] let planets = data.querySelectorAll(`planet[player="${obj.querySelector('playerData').getAttribute('id')}"]`) planetsBlock.insertAdjacentHTML('afterbegin', `

Количество планет ${planets.length}:

`) for (let i = 0; i < planets.length; i++) { p[i] = document.createElement('div') p[i].classList.add('dataPlanetList') let dataBlock = document.createElement('div') dataBlock.classList.add('dataBlock') pt[i] = document.createElement('div') pt[i].classList.add('planetDataIcon') pAS[i] = document.createElement('span') pAS[i].classList.add('pActSign') let pSpyBtn = document.createElement('div') pSpyBtn.classList.add('pSpyBtn') pSpyBtn.title = 'Шпионаж' pSpyBtn.onclick = event => { let cords cords = event.target.parentNode.nextSibling.innerText sendSpy(6, +cords.split(':')[0], +cords.split(':')[1], +cords.split(':')[2], 1, 10) } let pAtkBtn = document.createElement('div') pAtkBtn.classList.add('pAtkBtn') pAtkBtn.title = 'Атака' pAtkBtn.onclick = event => { let cords cords = event.target.parentNode.nextSibling.innerText location.href = `https://s${universeId}-ru.ogame.gameforge.com/game/index.php?page=ingame&component=fleetdispatch&galaxy=${cords.split(':')[0]}&system=${cords.split(':')[1]}&position=${cords.split(':')[2]}&type=1&mission=1` } let pTrpBtn = document.createElement('div') pTrpBtn.classList.add('pTrpBtn') pTrpBtn.title = 'Транспорт' pTrpBtn.onclick = event => { let cords cords = event.target.parentNode.nextSibling.innerText location.href = `https://s${universeId}-ru.ogame.gameforge.com/game/index.php?page=ingame&component=fleetdispatch&galaxy=${cords.split(':')[0]}&system=${cords.split(':')[1]}&position=${cords.split(':')[2]}&type=1&mission=3` } crd[i] = document.createElement('span') crd[i].classList.add('cordsBlock') mn[i] = document.createElement('div') mn[i].classList.add('moonIcon') mAS[i] = document.createElement('span') mAS[i].classList.add('mActSign') let mTrpBtn = document.createElement('div') mTrpBtn.classList.add('mTrpBtn') mTrpBtn.title = pTrpBtn.title mTrpBtn.onclick = event => { let cords cords = event.target.parentNode.previousSibling.innerText location.href = `https://s${universeId}-ru.ogame.gameforge.com/game/index.php?page=ingame&component=fleetdispatch&galaxy=${cords.split(':')[0]}&system=${cords.split(':')[1]}&position=${cords.split(':')[2]}&type=3&mission=3` } let mAtkBtn = document.createElement('div') mAtkBtn.classList.add('mAtkBtn') mAtkBtn.title = pAtkBtn.title mAtkBtn.onclick = event => { let cords cords = event.target.parentNode.previousSibling.innerText location.href = `https://s${universeId}-ru.ogame.gameforge.com/game/index.php?page=ingame&component=fleetdispatch&galaxy=${cords.split(':')[0]}&system=${cords.split(':')[1]}&position=${cords.split(':')[2]}&type=3&mission=1` } let mSpyBtn = document.createElement('div') mSpyBtn.classList.add('mSpyBtn') mSpyBtn.title = pSpyBtn.title mSpyBtn.onclick = event => { let cords cords = event.target.parentNode.previousSibling.innerText sendSpy(6, +cords.split(':')[0], +cords.split(':')[1], +cords.split(':')[2], 1, 10) } p[i].appendChild(dataBlock) dataBlock.appendChild(pt[i]) pt[i].appendChild(pTrpBtn) pt[i].appendChild(pAtkBtn) pt[i].appendChild(pSpyBtn) pt[i].appendChild(pAS[i]) dataBlock.appendChild(crd[i]) dataBlock.appendChild(mn[i]) mn[i].appendChild(mAS[i]) mn[i].appendChild(mSpyBtn) mn[i].appendChild(mAtkBtn) mn[i].appendChild(mTrpBtn) crd[i].innerText = planets[i].getAttribute('coords') pt[i].title = `Имя: ${planets[i].getAttribute('name')}\nID: ${planets[i].id}` if (planets[i].hasChildNodes()) mn[i].title = `Имя: ${planets[i].firstChild.getAttribute('name')}\nID: ${planets[i].firstChild.id}\nДиаметр: ${planets[i].firstChild.getAttribute('size')} км` else mn[i].classList.add('noMoonIcon') crd[i].onclick = event => { event.stopPropagation() location.href = `https://s${universeId}-ru.ogame.gameforge.com/game/index.php?page=ingame&component=galaxy&galaxy=${event.target.innerText.match(/(\d):(\d{1,3}):\d{1,2}/)[1]}&system=${event.target.innerText.match(/(\d):(\d{1,3}):\d{1,2}/)[2]}` } planetsBlock.appendChild(p[i]) } if (!window.frameElement) { for (let i = 0; i < p.length; i++) { let galaxy = p[i].innerText.match(/(\d):(\d{1,3}):\d{1,2}/)[1] let system = p[i].innerText.match(/(\d):(\d{1,3}):\d{1,2}/)[2] let position = p[i].innerText.match(/\d:\d{1,3}:(\d{1,2})/)[1] setTimeout(() => { iframeBlock.src = `https://s${universeId}-ru.ogame.gameforge.com/game/index.php?page=ingame&component=galaxy&galaxy=${galaxy}&system=${system}` iframeBlock.onload = () => { let tempPage = iframeBlock.contentDocument setTimeout(() => { if (tempPage.querySelector(`#galaxyRow${position} div.cellPlanet div.activity`)) { if (tempPage.querySelector(`#galaxyRow${position} div.cellPlanet div.activity`).innerText.replace(/\s/g, '') == '') pt[i].classList.add('nowActive') else { pt[i].classList.add('min15Active') pAS[i].innerText = tempPage.querySelector(`#galaxyRow${position} div.cellPlanet div.activity`).innerText.replace(/\D/g) } } else pt[i].classList.add('nowInactive') if (tempPage.querySelector(`#galaxyRow${position} div.cellMoon`).hasChildNodes()) { mn[i].classList.remove('noMoonIcon') if (!tempPage.querySelector(`#galaxyRow${position} div.cellMoon div.activity`)) mn[i].classList.add('nowInactive') else if (tempPage.querySelector(`#galaxyRow${position} div.cellMoon div.activity`).innerText.replace(/\s/g, '') == '') mn[i].classList.add('nowActive') else if (tempPage.querySelector(`#galaxyRow${position} div.cellMoon div.activity`).innerText.replace(/\D/g, '').match(/\d\d/)) { mn[i].classList.add('min15Active') mAS[i].innerText = tempPage.querySelector(`#galaxyRow${position} div.cellMoon div.activity`).innerText.replace(/\D/g) } } }, 1000) } }, i * 2000) } } }) } else if (mode ==2) { let allianceInfoBlock = document.createElement('div') allianceInfoBlock.id = 'allianceInfoBlock' allianceInfoBlock.innerHTML = `

ID: ${obj.id}

\n

Тег: ${obj.getAttribute('tag')}

` let dataPlayers = document.createElement('div') dataPlayers.id = 'dataPlayers' bevel.appendChild(allianceInfoBlock) bevel.appendChild(dataPlayers) dataPlayers.insertAdjacentHTML('afterbegin', `

Количество игроков ${alComp.length}:

`) let u = [] for (let i = 0; i < alComp.length; i++) { u[i] = document.createElement('div') u[i].classList.add('dataPlayersList') let dataBlock = document.createElement('div') dataBlock.classList.add('dataBlock') u[i].appendChild(dataBlock) if (alComp[i].id == founder) u[i].classList.add('alFounder') getData(`https://s${universeId}-ru.ogame.gameforge.com/api/players.xml`) .then(data => { let status = data.querySelector(`player[id="${alComp[i].id}"]`).getAttribute('status') if (status) { if (status.match(/a/)) u[i].style.color = '#f48406' else if (status.match(/v/)) u[i].style.color = 'aqua' else if (status.match(/i/)) u[i].style.color = '#7e7e7e' else if (status.match(/I/)) u[i].style.color = '#5f5f5f' } dataBlock.innerText = data.querySelector(`player[id="${alComp[i].id}"]`).getAttribute('name') }) u[i].onclick = event => { event.stopPropagation() dataIBCPlayer.click() dataInput.value = event.target.innerText dataInput.oninput() } let playersBlock = document.createElement('div') playersBlock.id = 'playersBlock' playersBlock.classList.add('playersBlock') playersBlock.appendChild(u[i]) dataPlayers.appendChild(playersBlock) } let hs = [], imgs = [] for (let i = 0; i < 8; i++) { getData(`https://s${universeId}-ru.ogame.gameforge.com/api/highscore.xml?category=2&type=${i}`) .then(data => { hs[i] = fnCreateElement('div', {class: `dataHs hsType${i}`}) imgs[i] = i < 4 ? fnCreateElement('div', {class: `dataImg1 imgType${i}`}) : fnCreateElement('div', {class: `dataImg2 imgType${i}`}) hs[i].appendChild(imgs[i]) hs[i].insertAdjacentHTML('beforeend', `

${data.querySelector(`alliance[id="${obj.id}"]`).getAttribute('position')} место

${(+data.querySelector(`alliance[id="${obj.id}"]`).getAttribute('score')).toLocaleString()} очков

`) allianceInfoBlock.appendChild(hs[i]) }) } } } // let xhr = new XMLHttpRequest() // xhr.open('GET', `https://s${universeId}-ru.ogame.gameforge.com/game/index.php?page=ingame&component=galaxy&galaxy=2&system=128`) // xhr.send() // xhr.onload = event => { // if (xhr.status == 200) { // let parsed = new window.DOMParser().parseFromString(xhr.response, 'text/html') // console.log(parsed) // } // } // async function getXMLData(url) { // let resp = await fetch(url) // let text = await resp.text() // let parsed = new window.DOMParser().parseFromString(text, 'text/xml') // return parsed // }