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
Stan na
// ==UserScript==
// @name OGame DataProcessing
// @namespace http://tampermonkey.net/
// @version 1.11.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
if (localStorage.getItem('probesToSpy') == null) localStorage.setItem('probesToSpy', '5')
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
}
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);
}
#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: ${window.innerHeight - 250}px;
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:hover {
background: grey;
border: 1px solid #283840;
border-radius: 5px;
overflow: hidden;
padding: 5px;
width: fit-content; */
}
.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;
}
#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%;
}
.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;
width: 10px;
}
#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') }) //, onkeyup: 'this.value = this.value.replace(/\\D/g, \'\')'
window.onresize = () => {
dataResponseBlock.style.maxHeight = `${window.innerHeight - 250}px`
}
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(dataSettings)
dataSProbeNumCap.innerText = 'Количество зондов для шпионажа:'
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)
dataInpClrBtn.innerText = '+'
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 = function (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 = function (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 = function () {
return false
}
dataSetBut.onclick = event => {
event.stopPropagation()
dataSettings.style.display = 'flex'
setTimeout(() => {
dataSettings.style.opacity = '1'
}, 0)
}
dataSetCloseBut.onclick = event => {
event.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 = event => {
event.preventDefault()
if (event.deltaY < 0) dataSProbeNum.value = +dataSProbeNum.value + 1
else dataSProbeNum.value = +dataSProbeNum.value - 1
localStorage.setItem('probesToSpy', dataSProbeNum.value)
}
dataIBCPlayer.onclick = event => {
event.stopPropagation()
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 = event => {
event.stopPropagation()
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)
})
}
}
let stopper = false
dataInpClrBtn.onclick = () => {
stopper = true
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 cordsExp = /(\d)[\s:\.](\d{1,3})[\s:\.](\d{1,2})/
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'))
})
if (dataInput.value.match(cordsExp)) {
let curCords = `${dataInput.value.match(cordsExp)[1]}:${dataInput.value.match(cordsExp)[2]}:${dataInput.value.match(cordsExp)[3]}`
console.log(curCords)
getData(`https://s${universeId}-ru.ogame.gameforge.com/api/universe.xml`)
.then(data1 => {
let playerId = data1.querySelector(`planet[coords="${curCords}"]`).getAttribute('player')
getData(`https://s${universeId}-ru.ogame.gameforge.com/api/players.xml`)
.then(data2 => {
resArray.push(data2.querySelector(`player[id="${playerId}"]`).getAttribute('name'))
return createRespLines(resArray)
})
})
}
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] = fnCreateElement('div', { class: '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])
}
}
let iframeBlock = fnCreateElement('iframe', { style: 'display: block; position: absolute; visibility: hidden;' })
document.body.insertAdjacentElement('afterbegin', iframeBlock)
function showAlliance(handler) {
dataInput.value = event.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')
getData(`https://s${universeId}-ru.ogame.gameforge.com/api/alliances.xml`)
.then(data => {
let alliance = data.querySelector(`alliance[name="${handler.target.innerText}"]`);
let players = alliance.querySelectorAll('player')
let founder = alliance.getAttribute('founder')
createLineDetails(alliance, 2, players, founder)
})
}
function createLineDetails(obj, mode, alComp = null, founder = null) {
stopper = false
while (dataInput.value.length < 3 || dataResponseBlock.firstChild) {
dataResponseBlock.removeChild(dataResponseBlock.firstChild)
}
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.querySelector('playerData').id}</span></p>`
bevel.appendChild(playerIdBlock)
if (obj.querySelector('alliance')) {
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.querySelector('alliance').id}\nТег: ${obj.querySelector('alliance tag').textContent}` })
allianceSign.textContent = 'Альянс:'
allianceName.textContent = obj.querySelector('alliance name').textContent
allianceName.onclick = event => {
dataRBAlliance.checked = true
showAlliance(event)
}
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.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="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.querySelector('playerData').getAttribute('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 = event => {
let cords
let probeNum = +localStorage.getItem('probesToSpy')
cords = event.target.parentNode.nextSibling.innerText
sendSpy(6, +cords.split(':')[0], +cords.split(':')[1], +cords.split(':')[2], 1, probeNum)
}
let pAtkBtn = fnCreateElement('div', { class: '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 = fnCreateElement('div', { class: '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] = fnCreateElement('span', { class: 'cordsBlock' })
mn[i] = fnCreateElement('div', { class: 'moonIcon' })
mAS[i] = fnCreateElement('span', { class: 'mActSign' })
let mTrpBtn = fnCreateElement('div', { class: '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 = fnCreateElement('div', { class: '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 = fnCreateElement('div', { class: 'mSpyBtn' })
mSpyBtn.title = pSpyBtn.title
mSpyBtn.onclick = event => {
let cords
let probeNum = +localStorage.getItem('probesToSpy')
cords = event.target.parentNode.previousSibling.innerText
sendSpy(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].firstChild.getAttribute('name')}\nID: ${planets[i].firstChild.id}\nДиаметр: ${planets[i].firstChild.getAttribute('size')} км`
else mn[i].classList.add('noMoonIcon')
crd[i].onmouseup = event => {
event.stopPropagation()
let url = `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]}`
if (event.metaKey || event.ctrlKey) window.open(url)
else if (event.button == 0) location.href = url
}
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}/)[1]
let position = p[i].innerText.match(/\d:\d{1,3}:(\d{1,2})/)[1]
setTimeout(() => {
if (!stopper) {
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')
let pTime = tempPage.querySelector(`#galaxyRow${position} div.cellPlanet div.activity`).innerText.replace(/\D/g)
pAS[i].innerText = pTime.match(/\d\d/)[0]
}
} 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')
let mTime = tempPage.querySelector(`#galaxyRow${position} div.cellMoon div.activity`).innerText.replace(/\D/g)
mAS[i].innerText = mTime.match(/\d\d/)[0]
}
}
}, 1000)
}
}
}, i * 2000)
}
}
})
}
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.getAttribute('tag')}</span></p>`
let dataPlayers = fnCreateElement('div', { 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] = fnCreateElement('div', { class: 'dataPlayersList' })
let dataBlock = fnCreateElement('div', { class: '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(data1 => {
let status = data1.querySelector(`player[id="${alComp[i].id}"]`).getAttribute('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/highscore.xml?category=1&type=0`)
.then(data2 => {
let pos = data2.querySelector(`player[id="${alComp[i].id}"]`)
pos == null ? pos = '-' : pos = pos.getAttribute('position')
dataBlock.innerHTML = `<span class="posSpan">${pos != null ? pos : 'x'}</span> ${data1.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 = 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()}</span> очков</p></div>`)
allianceInfoBlock.appendChild(hs[i])
})
}
}
}