Greasy Fork

OGame DataProcessing

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

目前为 2022-09-03 提交的版本。查看 最新版本

// ==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
// ==/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 = `<p>ID: <span style="color: white;">${obj.querySelector('playerData').id}</span></p>`
        bevel.appendChild(playerIdBlock)
        if (obj.querySelector('alliance')) {
            let allianceSign = document.createElement('div')
            allianceSign.id = 'allianceSign'
            allianceSign.innerHTML = `<p>Альянс: <span style="color: white; cursor: pointer;" title="ID: ${obj.querySelector('alliance').id}\nТег: ${obj.querySelector('alliance tag').textContent}">${obj.querySelector('alliance name').textContent}</span></p>`
            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', `<div style="display: flex; flex-direction: column;"><p><span>${data.querySelector(`player[id="${obj.querySelector('playerData').getAttribute('id')}"]`).getAttribute('position')}</span> место</p>
                        <p><span>${(+data.querySelector(`player[id="${obj.querySelector('playerData').getAttribute('id')}"]`).getAttribute('score')).toLocaleString()}</span> очков</p></div>`)
                    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', `<p style="padding-top: 3px;">Корабли:&nbsp;<span style="color: white;">${shipsAmount.toLocaleString()}</span></p>`)
                else playerInfoBlock.insertAdjacentHTML('afterend', '<p style="padding-top: 3px;">Нет кораблей</p>')
            })
        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', `<p style="margin: 3px 0;">Количество планет ${planets.length}:</p>`)
                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 = `<p>ID: <span style="color: white;">${obj.id}</span></p>\n<p>Тег: <span style="color: white;">${obj.getAttribute('tag')}</span></p>`
        let dataPlayers = document.createElement('div')
        dataPlayers.id = 'dataPlayers'
        bevel.appendChild(allianceInfoBlock)
        bevel.appendChild(dataPlayers)
        dataPlayers.insertAdjacentHTML('afterbegin', `<p style="margin: 3px 0;">Количество игроков ${alComp.length}:</p>`)
        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', `<div style="display: flex; flex-direction: column;"><p><span>${data.querySelector(`alliance[id="${obj.id}"]`).getAttribute('position')}</span> место</p>
                        <p><span>${(+data.querySelector(`alliance[id="${obj.id}"]`).getAttribute('score')).toLocaleString()}</span> очков</p></div>`)
                    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
// }