// ==UserScript==
// @name OGame DataProcessing
// @namespace http://tampermonkey.net/
// @version 1.25.10
// @description Allows you to quickly and conveniently view all information about the player/alliance through the search by Name/ID/Coodinates gamer and Name/ID/Tag of the alliance respectively. Highlights activity on planets and moons
// @author mentor-27
// @website https://github.com/mentor-27
// @license Apache2.0
// @match *.ogame.gameforge.com/game/index.php*
// ==/UserScript==
function checkIfWindowIsFrame() {
if (window.frameElement) return false
}
checkIfWindowIsFrame();
let opacityTimer;
if (localStorage.getItem("probesToSpy") == null) localStorage.setItem("probesToSpy", "5");
let universeId = location.href.match(/s(\d{3})/)[1];
async function getData(url) {
const resp = await fetch(url);
let text = await resp.text();
return new window.DOMParser().parseFromString(text, "text/xml");
}
let fetchedPlayerData,
fetchedUniverse,
fetchedPlayers,
fetchedAlliances,
fetchedPlayersHighscores = [],
fetchedAlliancesHighscores = [];
let playerData = {},
universe = [],
players = [],
alliances = []
// playersHighscores = [],
// alliancesHighscores = [];
getData(
`https://s${universeId}-ru.ogame.gameforge.com/api/playerData.xml?id=${unsafeWindow.playerId}`
).then((resp) => {
fetchedPlayerData = resp;
});
getData(`https://s${universeId}-ru.ogame.gameforge.com/api/universe.xml`).then(
(resp) => {
fetchedUniverse = resp.querySelectorAll("planet");
}
);
getData(`https://s${universeId}-ru.ogame.gameforge.com/api/players.xml`).then(
(resp) => {
fetchedPlayers = resp.querySelectorAll("player");
}
);
getData(`https://s${universeId}-ru.ogame.gameforge.com/api/alliances.xml`).then(
(resp) => {
fetchedAlliances = resp.querySelectorAll("alliance");
}
);
for (let i = 0; i < 8; i++) {
getData(
`https://s${universeId}-ru.ogame.gameforge.com/api/highscore.xml?category=1&type=${i}`
).then((resp) => {
fetchedPlayersHighscores[i] = resp.querySelectorAll("player");
});
getData(
`https://s${universeId}-ru.ogame.gameforge.com/api/highscore.xml?category=2&type=${i}`
).then((resp) => {
fetchedAlliancesHighscores[i] = resp.querySelectorAll("alliance");
});
}
function fnCreateElement(tag, attributes = {}, content = null) {
const elem = document.createElement(tag);
if (Object.keys(attributes).length !== 0) {
for (let key in attributes) elem.setAttribute(key, attributes[key]);
}
if (content) elem.innerText = content;
return elem;
}
const dataPanelStyle = fnCreateElement("style", { type: "text/css" });
dataPanelStyle.innerHTML = `
#dataWrapper {
position: fixed;
display: block;
background: url(https://gf3.geo.gfsrv.net/cdnea/bd764e9b39a1a48ad708039fda1bde.gif) repeat-y;
width: 222px;
height: fit-content;
max-width: 222px;
z-index: 2;
transition: opacity 2s;
transition-timing-function: cubic-bezier(0, .75, .5, 1);
z-index: 3000;
}
#dataHeader {
cursor: grab;
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: 4;
}
#dataIconBoxType {
display: flex;
position: relative;
left: 44px;
transition: left .5s;
z-index: 3;
}
#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: calc(100vh - 250px);
overflow-y: overlay;
}
.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 {
cursor: default;
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;
transition: all .3s;
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-evenly;
font-weight: bold;
height: fit-content;
padding: 2px 3px 3px;
position: relative;
word-break: break-word;
}
.posSpan {
background: #00000040;
border-radius: 5px;
font-size: 7px;
padding: 2px 3px;
}
.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;
height: fit-content;
max-height: 400px;
margin: 5px 0;
overflow-y: overlay;
overflow-x: hidden;
}
#dataPlanets::-webkit-scrollbar,
#dataPlayers::-webkit-scrollbar,
#dataResponseBlock::-webkit-scrollbar {
background: #0d1014;
box-shadow: inset 0 0 5px black;
width: 2px;
}
#dataPlanets::-webkit-scrollbar-thumb,
#dataPlayers::-webkit-scrollbar-thumb,
#dataResponseBlock::-webkit-scrollbar-thumb {
background: #28333e;
border: 1px solid #3c4c5d;
}
#dataPlanets::-webkit-scrollbar-thumb:hover,
#dataPlayers::-webkit-scrollbar-thumb:hover,
#dataResponseBlock::-webkit-scrollbar-thumb:hover {
background: #323f4e;
}
#dataContentCaption {
color: #6F9FC8;
font: bold 10px/27px Verdana,Arial,Helvetica,sans-serif;
margin: 0;
}
#dataInput {
width: 80%;
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;
padding-right: 24px;
padding-left: 6px;
}
#dataInpClrBtn {
color: grey;
cursor: pointer;
display: inline-block;
font-family: Verdana;
font-size: 16px;
font-weight: bold;
line-height: 14px;
position: absolute;
right: 16px;
top: 33px;
transform: rotate(45deg);
transition: color .3s, transform .15s;
}
#dataInpClrBtn:hover {
color: white;
top: 34px;
transform: rotate(225deg);
}
#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%;
}
.dataResponseLines::before {
background: linear-gradient(#00000000, #00000000);
}
.playersBlock {
display: flex;
align-items: center;
justify-content: space-around;
}
#allianceName {
color: #ffffff;
cursor: pointer;
transition: all .3s;
}
#allianceName:hover {
color: #80ffff;
text-shadow: 0 0 3px 1px #ffffff;
}
#dataSetBut {
background: url("https://gf2.geo.gfsrv.net/cdn16/1bcb107d4cdd48d0878fe850157e46.png");
background-size: 110px 10px;
cursor: pointer;
display: block;
height: 10px;
position: absolute;
right: -16px;
top: 10px;
transition: filter .15s;
width: 10px;
}
#dataSetBut:hover {
filter: brightness(1.5);
}
#dataSetCloseBut {
background: url("https://gf3.geo.gfsrv.net/cdneb/f5f81e8302aaad56c958c033677fb8.png");
background-position: -206px 0;
cursor: pointer;
display: block;
height: 17px;
position: absolute;
right: 10px;
top: 10px;
width: 17px;
}
#dataSetCloseBut:hover {
background-position: -206px -17px;
}
#dataSettings {
background: #000000e0;
border: 2px solid #171d23;
border-radius: 10px;
display: none;
flex-direction: column;
align-items: center;
justify-content: center;
height: 50%;
margin: 0 9.5%;
opacity: 0;
padding: 30px 0;
position: absolute;
top: 20%;
transition: opacity .3s;
width: 80%;
z-index: 5;
}
#dataSProbeNumCap {
color: #6F9FC8;
font: bold 10px Verdana,Arial,Helvetica,sans-serif;
height: 45px;
margin: 0;
text-align: center;
width: 150px;
}
#dataSProbeNum {
background: -webkit-linear-gradient(top, rgb(14, 17, 23) 0px, rgb(35, 43, 51) 100%) !important;
border-color: rgb(58, 72, 86) !important;
border-image: initial !important;
border-radius: 3px;
border-style: solid !important;
border-width: 1px !important;
box-shadow: none !important;
color: rgb(187, 187, 187) !important;
font: bold 12px Verdana, Arial, Helvetica, sans-serif;
height: 18px;
line-height: 23px !important;
outline: none;
text-align: center;
width: 30%;
}
`;
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",
title: "Формат координат:\n1:256:8\n1 256 8\n1.256.8",
});
const dataInput = fnCreateElement("input", {
id: "dataInput",
type: "text",
autocomplete: "off",
});
const dataInpClrBtn = fnCreateElement("div", { id: "dataInpClrBtn" }, '+');
const dataResponseBlock = fnCreateElement("div", { id: "dataResponseBlock" });
const dataFooter = fnCreateElement("div", { id: "dataFooter" });
const dataSetBut = fnCreateElement("div", { id: "dataSetBut" });
const dataSetCloseBut = fnCreateElement("div", { id: "dataSetCloseBut" });
const dataSettings = fnCreateElement("div", { id: "dataSettings" });
const dataSProbeNumCap = fnCreateElement("p", { id: "dataSProbeNumCap" }, 'Количество зондов для шпионажа:');
const dataSProbeNum = fnCreateElement("input", {
id: "dataSProbeNum",
type: "text",
value: localStorage.getItem("probesToSpy"),
});
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;
}
let stopper = false;
document.body.appendChild(dataPanelStyle);
document.body.appendChild(dataWrapper);
dataWrapper.appendChild(dataSettings);
dataSettings.appendChild(dataSetCloseBut);
dataSettings.appendChild(dataSProbeNumCap);
dataSettings.appendChild(dataSProbeNum);
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);
dataIconBoxTypeSmall.appendChild(dataSetBut);
dataWrapper.appendChild(dataBackground);
dataBackground.appendChild(dataRequestBlock);
dataBackground.appendChild(dataResponseBlock);
dataRequestBlock.appendChild(dataContentCaption);
dataContentCaption.innerText =
localStorage.getItem("currCapt") || "Имя/ID игрока/Координаты:";
dataRequestBlock.appendChild(dataInput);
dataRequestBlock.appendChild(dataInpClrBtn);
dataWrapper.appendChild(dataFooter);
dataWrapper.style.left =
localStorage.getItem("dataWrapperLeft") == null
? "5px"
: localStorage.getItem("dataWrapperLeft");
dataWrapper.style.top =
localStorage.getItem("dataWrapperTop") == null
? "60px"
: localStorage.getItem("dataWrapperTop");
function getCoords(elem) {
let box = elem.getBoundingClientRect();
return {
left: box.left,
top: box.top,
};
}
dataHeader.onmousedown = (e) => {
let coords = getCoords(dataWrapper);
let shiftX = e.clientX - coords.left;
let shiftY = e.clientY - coords.top;
dataHeader.style.cursor = "grabbing";
moveAt(e);
function moveAt(e) {
dataWrapper.style.left = e.clientX - shiftX + "px";
dataWrapper.style.top = e.clientY - shiftY + "px";
}
document.onmousemove = (e) => moveAt(e);
dataHeader.onmouseup = function () {
localStorage.setItem("dataWrapperLeft", getCoords(dataWrapper).left + "px");
localStorage.setItem("dataWrapperTop", getCoords(dataWrapper).top + "px");
dataHeader.removeAttribute("style");
document.onmousemove = null;
dataHeader.onmouseup = null;
};
};
dataHeader.ondragstart = () => false;
dataSetBut.onclick = (e) => {
e.stopPropagation();
dataSettings.style.display = "flex";
setTimeout(() => {
dataSettings.style.opacity = "1";
}, 0);
};
dataSetCloseBut.onclick = (e) => {
e.stopPropagation();
dataSettings.style.opacity = "0";
setTimeout(() => {
dataSettings.style.display = "none";
}, 300);
};
dataSProbeNum.oninput = () => {
if (dataSProbeNum.value === "") dataSProbeNum.value = "1";
dataSProbeNum.value = dataSProbeNum.value.replace(/\D/g, "");
localStorage.setItem("probesToSpy", dataSProbeNum.value);
};
dataSProbeNum.onwheel = (e) => {
e.preventDefault();
if (e.deltaY < 0) dataSProbeNum.value = +dataSProbeNum.value + 1;
else dataSProbeNum.value = +dataSProbeNum.value - 1;
localStorage.setItem("probesToSpy", dataSProbeNum.value);
};
let iframeBlock = fnCreateElement("iframe", {
style: "display: block; position: absolute; visibility: hidden;",
});
document.body.insertAdjacentElement("afterbegin", iframeBlock);
iframeBlock.src = `https://s${universeId}-ru.ogame.gameforge.com/game/index.php?page=ingame&component=galaxy&galaxy=1&system=1`;
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";
}, 10000);
};
dataInput.onblur = dataWrapper.onmouseout;
function clearResponseBlock() {
dataResponseBlock.innerHTML = "";
}
dataInpClrBtn.onclick = () => {
stopper = true;
dataInput.value = "";
dataInput.focus();
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");
}
clearResponseBlock();
};
document.addEventListener('readystatechange', () => {
// playerData <
playerData.id = window.playerId;
playerData.name = window.playerName;
playerData.serverId = fetchedPlayerData
.querySelector("playerData")
.getAttribute("serverId");
playerData.planets = [];
playerData.alliance = {};
for (let item of fetchedPlayerData.querySelectorAll("planet")) {
playerData.planets.push({
id: item.id,
name: item.attributes.name.value,
coords: {
raw: item.attributes.coords.value,
gal: item.attributes.coords.value.match(/^\d/g)[0],
sys: item.attributes.coords.value.match(/:(\d{1,3}):/)[1],
pos: item.attributes.coords.value.match(/\d{1,2}$/g)[0],
},
});
}
// > playerData
// universe <
fetchedUniverse.forEach((planet, i) => {
universe[i] = {
id: planet.id,
player: planet.attributes.player.value,
name: planet.attributes.name.value,
coords: {
raw: planet.attributes.coords.value,
gal: planet.attributes.coords.value.match(/^\d/g)[0],
sys: planet.attributes.coords.value.match(/:(\d{1,3}):/)[1],
pos: planet.attributes.coords.value.match(/\d{1,2}$/g)[0],
},
moon: planet.firstChild && {
id: planet.firstChild.attributes.id.value,
name: planet.firstChild.attributes.name.value,
size: planet.firstChild.attributes.size.value,
},
};
});
// > universe
// players <
fetchedPlayers.forEach((item, i) => {
players[i] = {
id: item.id,
name: item.attributes.name.value,
status: item.attributes.status && item.attributes.status.value,
alliance: {},
planets: universe.filter((planet) => planet.player === item.id),
};
});
// > players
// alliances <
fetchedAlliances.forEach((item, i) => {
alliances[i] = {
id: item.id,
name: item.attributes.name.value,
tag: item.attributes.tag.value,
founder: players.find(
(player) => player.id === item.attributes.founder.value
),
foundDate: new Date(+item.attributes.foundDate.value * 1000),
players: [],
homePage: item.attributes.homepage && item.attributes.homepage.value,
logo: item.attributes.logo && item.attributes.logo.value,
};
item.childNodes.forEach((elem) =>
alliances[i].players.push(
...players.filter((player) => player.id === elem.id)
)
); // players for alliance
});
// > alliances
// players highscores <
// console.log(fetchedPlayersHighscores[0][0]);
// > players highscores
// linking data <
playerData.alliance = alliances.filter(
(alliance) => alliance.id === fetchedPlayerData.querySelector("alliance")?.id
)[0];
universe.forEach((planet) => {
let tempPlrId = Array.from(fetchedUniverse).filter(
(elem) => elem.id === planet.id
)[0].attributes.player.value;
planet.player = players.filter((player) => player.id === tempPlrId)[0];
});
players.forEach((player) => {
let currentAllianceId = Array.from(fetchedAlliances).filter(
(alliance) =>
alliance.id ===
Array.from(alliance.childNodes).filter((plr) => plr.id === player.id)[0]
?.parentNode.id
)[0]?.id;
player.alliance = alliances.filter(
(alliance) => alliance.id === currentAllianceId
)[0];
});
// > linking data
// console.log('playerData', playerData);
// console.log('universe', universe);
// console.log('players', players);
// console.log('alliances', alliances);
if (dataRBPlayer.checked) {
dataInput.value = localStorage.getItem("playerInput");
if (localStorage.getItem("playerDataShown") === "true")
createLineDetails(
players.filter((player) => player.name === dataInput.value)[0],
1
);
else fillSearchResult(players, 1);
} else if (dataRBAlliance.checked) {
dataInput.value = localStorage.getItem("allianceInput");
if (localStorage.getItem("allianceDataShown") === "true") {
let currentAlliance = alliances.filter(
(alliance) => alliance.name === dataInput.value
)[0];
let currentPlayers = currentAlliance.players;
let currentFounder = currentAlliance.founder.name;
createLineDetails(currentAlliance, 2, currentPlayers, currentFounder);
} else fillSearchResult(alliances, 2);
}
dataIBCPlayer.onclick = (e) => {
e.stopPropagation();
dataRBPlayer.checked = true;
dataContentCaption.innerText = "Имя/ID игрока/Координаты:";
localStorage.setItem("currCapt", "Имя/ID игрока/Координаты:");
localStorage.setItem("playerInputChecked", "true");
localStorage.setItem("allianceInputChecked", "false");
dataInput.value = localStorage.getItem("playerInput");
clearResponseBlock();
if (localStorage.getItem("playerDataShown") === "true") {
createLineDetails(
players.filter((player) => player.name === dataInput.value)[0],
1
);
}
else fillSearchResult(players, 1);
dataInput.focus();
};
dataIBCAlliance.onclick = (e) => {
e.stopPropagation();
dataRBAlliance.checked = true;
dataContentCaption.innerText = "Название/тэг/ID альянса:";
localStorage.setItem("currCapt", "Название/тэг/ID альянса:");
localStorage.setItem("allianceInputChecked", "true");
localStorage.setItem("playerInputChecked", "false");
dataInput.value = localStorage.getItem("allianceInput");
clearResponseBlock();
if (localStorage.getItem("allianceDataShown") === "true") {
let currentAlliance = alliances.filter(
(alliance) => alliance.name === dataInput.value
)[0];
let currentPlayers = currentAlliance.players;
let currentFounder = currentAlliance.founder.name;
createLineDetails(currentAlliance, 2, currentPlayers, currentFounder);
} else fillSearchResult(alliances, 2);
dataInput.focus();
};
dataInput.oninput = () => {
if (dataRBPlayer.checked) {
localStorage.setItem("playerInput", dataInput.value);
localStorage.setItem("playerDataShown", "false");
fillSearchResult(players, 1);
} else if (dataRBAlliance.checked) {
localStorage.setItem("allianceInput", dataInput.value);
localStorage.setItem("allianceDataShown", "false");
fillSearchResult(alliances, 2);
}
};
function fillSearchResult(data, mode) {
let regExp = new RegExp(dataInput.value, "gi");
let cordsExp = /^(\d)[\s:.](\d{1,3})[\s:.]([1-9][0-6]?)$/;
let resArray = [];
switch (mode) {
case 1:
data.forEach((item) => {
if (item.name.match(regExp) || item.id.match(regExp))
resArray.push(item.name);
});
if (dataInput.value.match(cordsExp)) {
let currentCoords = `${dataInput.value.match(cordsExp)[1]}:${dataInput.value.match(cordsExp)[2]
}:${dataInput.value.match(cordsExp)[3]}`;
let currentPlayer = universe.filter(
(planet) => planet.coords.raw === currentCoords
)[0]?.player;
currentPlayer
? resArray.push(
data.filter((item) => item.id === currentPlayer.id)[0]?.name
)
: (resArray = []);
createRespLines(resArray); // array of string
break;
}
createRespLines(resArray); // array of string
break;
case 2:
data.forEach((item) => {
if (
item.name.match(regExp) ||
item.tag.match(regExp) ||
item.id.match(regExp)
)
resArray.push(item.name);
});
createRespLines(resArray); // array of string
break;
}
}
function createRespLines(arr) {
clearResponseBlock();
let u = [];
for (let i in arr) {
u[i] = fnCreateElement("div", { class: "dataResponseLines" }, arr[i]);
let status = players.filter((player) => player.name === arr[i])[0]?.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].onclick = (e) => {
dataInput.value = e.target.innerText;
if (dataRBPlayer.checked) {
localStorage.setItem("playerInput", dataInput.value);
localStorage.setItem("playerDataShown", "true");
clearResponseBlock();
let currentPlayer = players.filter(
(player) => player.name === e.target.innerText
)[0];
createLineDetails(currentPlayer, 1);
} else if (dataRBAlliance.checked) {
localStorage.setItem("allianceInput", dataInput.value);
localStorage.setItem("allianceDataShown", "true");
let currentAlliance = alliances.filter(
(alliance) => alliance.name === e.target.innerText
)[0];
let currentPlayers = currentAlliance.players;
let currentFounder = currentAlliance.founder.name;
clearResponseBlock();
createLineDetails(currentAlliance, 2, currentPlayers, currentFounder);
}
};
dataInput.value !== ""
? dataResponseBlock.appendChild(u[i])
: clearResponseBlock();
}
}
function showAlliance(handler) {
dataInput.value = handler.target.innerText;
dataContentCaption.innerText = "Название/тэг/ID альянса:";
localStorage.setItem("currCapt", "Название/тэг/ID альянса:");
localStorage.setItem("allianceInputChecked", "true");
localStorage.setItem("playerInputChecked", "false");
localStorage.setItem("allianceInput", dataInput.value);
localStorage.setItem("allianceDataShown", "true");
let currentAlliance = alliances.filter(
(alliance) => alliance.name === handler.target.innerText
)[0];
let currentPlayers = currentAlliance.players;
let currentFounder = currentAlliance.founder.name;
clearResponseBlock();
createLineDetails(currentAlliance, 2, currentPlayers, currentFounder);
}
function createLineDetails(obj, mode, allys = null, founder = null) {
stopper = false;
let bevel = fnCreateElement("div", { id: "bevel", class: "bevel" });
dataResponseBlock.appendChild(bevel);
if (mode === 1) {
let playerIdBlock = fnCreateElement("div", {
id: "playerIdBlock",
style: "cursor: default;",
});
playerIdBlock.innerHTML = `<p>ID: <span style="color: white;">${obj.id}</span></p>`;
bevel.appendChild(playerIdBlock);
if (obj.alliance?.id) {
let allianceLabel = fnCreateElement("div", {
id: "allianceLabel",
style: "display: flex; justify-content: center;",
});
let allianceSign = fnCreateElement("div", {
id: "allianceSign",
style: "cursor: default; margin-right: 4px;",
}, "Альянс:");
let allianceName = fnCreateElement("div", {
id: "allianceName",
title: `ID: ${obj.alliance.id}\nТег: ${obj.alliance.tag}`,
}, obj.alliance.name);
allianceName.onclick = (e) => {
dataRBAlliance.checked = true;
showAlliance(e);
};
allianceLabel.appendChild(allianceSign);
allianceLabel.appendChild(allianceName);
bevel.appendChild(allianceLabel);
}
let playerInfoBlock = fnCreateElement("div", { 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.id}"]`)
.getAttribute("position")}</span> место</p>
<p><span>${data
.querySelector(`player[id="${obj.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.id}"]`)
.getAttribute("ships");
if (shipsAmount)
playerInfoBlock.insertAdjacentHTML(
"afterend",
`<p style="cursor: default; padding-top: 3px;">Корабли: <span style="color: white;">${shipsAmount.toLocaleString()}</span></p>`
);
else
playerInfoBlock.insertAdjacentHTML(
"afterend",
'<p style="padding-top: 3px;">Нет кораблей</p>'
);
});
let planetsBlock = fnCreateElement("div", { 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.id}"]`);
planetsBlock.insertAdjacentHTML(
"afterbegin",
`<p style="cursor: default; margin: 3px 0;">Количество планет ${planets.length}:</p>`
);
for (let i = 0; i < planets.length; i++) {
p[i] = fnCreateElement("div", { class: "dataPlanetList" });
let dataBlock = fnCreateElement("div", { class: "dataBlock" });
pt[i] = fnCreateElement("div", { class: "planetDataIcon" });
pAS[i] = fnCreateElement("span", { class: "pActSign" });
let pSpyBtn = fnCreateElement("div", { class: "pSpyBtn" });
pSpyBtn.title = "Шпионаж";
pSpyBtn.onclick = (e) => {
let cords;
let probeNum = +localStorage.getItem("probesToSpy");
cords = e.target.parentNode.nextSibling.textContent;
sendShipsWithPopup(
6,
+cords.split(":")[0],
+cords.split(":")[1],
+cords.split(":")[2],
0,
probeNum
);
};
let pAtkBtn = fnCreateElement("div", { class: "pAtkBtn" });
pAtkBtn.title = "Атака";
pAtkBtn.onclick = (e) => {
let cords;
cords = e.target.parentNode.nextSibling.textContent;
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 = fnCreateElement("div", { class: "pTrpBtn" });
pTrpBtn.title = "Транспорт";
pTrpBtn.onclick = (e) => {
let cords;
cords = e.target.parentNode.nextSibling.textContent;
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] = fnCreateElement("span", {
class: "cordsBlock",
title: "Удерживайте Ctrl или Alt для открытия в новом окне",
});
mn[i] = fnCreateElement("div", { class: "moonIcon" });
mAS[i] = fnCreateElement("span", { class: "mActSign" });
let mTrpBtn = fnCreateElement("div", { class: "mTrpBtn" });
mTrpBtn.title = pTrpBtn.title;
mTrpBtn.onclick = (e) => {
let cords;
cords = e.target.parentNode.previousSibling.textContent;
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 = fnCreateElement("div", { class: "mAtkBtn" });
mAtkBtn.title = pAtkBtn.title;
mAtkBtn.onclick = (e) => {
let cords;
cords = e.target.parentNode.previousSibling.textContent;
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 = fnCreateElement("div", { class: "mSpyBtn" });
mSpyBtn.title = pSpyBtn.title;
mSpyBtn.onclick = (e) => {
let cords;
let probeNum = +localStorage.getItem("probesToSpy");
cords = e.target.parentNode.previousSibling.textContent;
sendShipsWithPopup(
6,
+cords.split(":")[0],
+cords.split(":")[1],
+cords.split(":")[2],
3,
probeNum
);
};
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].firstElementChild.getAttribute(
"name"
)}\nID: ${planets[i].firstElementChild.id}\nДиаметр: ${planets[
i
].firstElementChild.getAttribute("size")} км`;
else mn[i].classList.add("noMoonIcon");
crd[i].onmouseup = (e) => {
e.stopPropagation();
let url = `https://s${universeId}-ru.ogame.gameforge.com/game/index.php?page=ingame&component=galaxy&galaxy=${e.target.textContent.match(/^\d/)[0]
}&system=${e.target.textContent.match(/:(\d{1,3}):/)[1]}`;
if (e.metaKey || e.ctrlKey) window.open(url);
else if (e.button === 0) location.href = url;
};
planetsBlock.appendChild(p[i]);
}
async function getSysData(ifrm, gal, sys) {
let resp = await ifrm.contentWindow.$.post(
ifrm.contentWindow.galaxyContentLink,
{ galaxy: gal, system: sys },
ifrm.contentWindow.renderContentGalaxy
);
let data = JSON.parse(resp);
return data.system.galaxyContent;
}
if (!window.frameElement) {
for (let i = 0; i < p.length; i++) {
let galaxy = obj.planets[i].coords.gal;
let system = obj.planets[i].coords.sys;
let position = obj.planets[i].coords.pos;
getSysData(iframeBlock, galaxy, system).then((sysData) => {
let currentPlanet = sysData[position - 1].planets[0];
if (currentPlanet.activity.showActivity) {
if (currentPlanet.activity.idleTime <= 15)
pt[i].classList.add("nowActive");
else {
pt[i].classList.add("min15Active");
pAS[i].innerText = currentPlanet.activity.idleTime;
}
} else pt[i].classList.add("nowInactive");
let currentMoon = sysData[position - 1].planets.filter(
(planet) => planet.planetType === 3
)[0];
if (currentMoon) {
mn[i].classList.remove("noMoonIcon");
if (!currentMoon.activity.showActivity)
mn[i].classList.add("nowInactive");
else if (currentMoon.activity.idleTime <= 15)
mn[i].classList.add("nowActive");
else if (currentMoon.activity.idleTime > 15) {
mn[i].classList.add("min15Active");
mAS[i].innerText = currentMoon.activity.idleTime;
}
}
});
}
}
});
} else if (mode === 2) {
let allianceInfoBlock = fnCreateElement("div", {
id: "allianceInfoBlock",
});
allianceInfoBlock.innerHTML = `<p>ID: <span style="color: white;">${obj.id}</span></p>\n<p>Тег: <span style="color: white;">${obj.tag}</span></p>`;
let dataPlayers = fnCreateElement("div", { id: "dataPlayers" });
bevel.appendChild(allianceInfoBlock);
bevel.appendChild(dataPlayers);
dataPlayers.insertAdjacentHTML(
"afterbegin",
`<p style="margin: 3px 0;">Количество игроков ${allys.length}:</p>`
);
let u = [];
for (let i = 0; i < allys.length; i++) {
u[i] = fnCreateElement("div", { class: "dataPlayersList" });
let dataBlock = fnCreateElement("div", { class: "dataBlock" });
u[i].appendChild(dataBlock);
if (allys[i].name === founder) u[i].classList.add("alFounder");
let status = players.filter((player) => player.id === allys[i].id)[0]
.status;
if (status) {
if (status.match(/a/)) dataBlock.style.color = "#f48406";
else if (status.match(/b/))
dataBlock.style.textDecoration = "line-through";
else if (status.match(/v/)) dataBlock.style.color = "aqua";
else if (status.match(/i/)) dataBlock.style.color = "#7e7e7e";
else if (status.match(/I/)) dataBlock.style.color = "#5f5f5f";
}
getData(
`https://s${universeId}-ru.ogame.gameforge.com/api/players.xml`
).then((data1) => {
getData(
`https://s${universeId}-ru.ogame.gameforge.com/api/highscore.xml?category=1&type=0`
).then((data2) => {
let pos = data2.querySelector(`player[id="${allys[i].id}"]`);
pos == null ? (pos = "-") : (pos = pos.getAttribute("position"));
dataBlock.innerHTML = `<span class="posSpan">${pos != null ? pos : "x"
}</span>${data1
.querySelector(`player[id="${allys[i].id}"]`)
.getAttribute("name")}`;
});
});
u[i].onclick = (e) => {
e.stopPropagation();
localStorage.setItem("playerInput", e.target.firstChild.nextSibling.textContent);
dataIBCPlayer.click();
dataInput.oninput();
};
let playersBlock = fnCreateElement("div", {
id: "playersBlock",
class: "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(
"ru"
)}</span> очков</p></div>`
);
allianceInfoBlock.appendChild(hs[i]);
});
}
}
}
});