217 lines
6.6 KiB
JavaScript

// ==UserScript==
// @name GrepoSimu
// @namespace greposimu
// @version 1.0
// @author Mysaa Java
// @homepage https://greposimu.bernard.com.de
// @updateURL https://greposimu.bernard.com.de/userscript.js
// @downloadURL https://greposimu.bernard.com.de/userscript.js
// @description This script sends information on the town to greposimu
// @include https://*.grepolis.com/game/*
// @exclude view-source://*
// @icon https://greposimu.bernard.com.de/favicon.ico
// ==/UserScript==
function downloadObjectAsJson(exportObj, exportName){
var dataStr = "data:text/json;charset=utf-8," + encodeURIComponent(JSON.stringify(exportObj,null,2));
var downloadAnchorNode = document.createElement('a');
downloadAnchorNode.setAttribute("href", dataStr);
downloadAnchorNode.setAttribute("download", exportName + ".json");
document.body.appendChild(downloadAnchorNode); // required for firefox
downloadAnchorNode.click();
downloadAnchorNode.remove();
}
function getAllFragments() {
out = {}
for(var storename in ITowns){
if(typeof ITowns[storename] === 'object' && "fragments" in ITowns[storename]){
out[storename] = {}
store = ITowns[storename].fragments
for(var townid in store) {
out[storename][townid] = []
for(var i = 0; i < store[townid].models.length;i++){
out[storename][townid].push(store[townid].models[i].attributes)
}
}
}
}
return out
}
function makeObject() {
out = {}
for(var townid in ITowns.towns) {
out[townid] = {}
out[townid].name = ITowns.towns[townid].name
out[townid].points = ITowns.towns[townid].points
out[townid].god = ITowns.towns[townid].god()
out[townid].unitsTotal = ITowns.towns[townid].units()
out[townid].supportTotal = ITowns.towns[townid].unitsSupport()
out[townid].outerTotal = ITowns.towns[townid].unitsOuter()
out[townid].resources = ITowns.towns[townid].resources()
out[townid].buildings = ITowns.towns[townid].getBuildings().getBuildings()
out[townid].researches = ITowns.towns[townid].researches().attributes
out[townid].espstorage = ITowns.towns[townid].getEspionageStorage()
orderz = ITowns.towns[townid].buildingOrders()
out[townid].buildingOrders = []
for(var i = 0; i<orderz.length;i++) {
order = orderz.models[i].attributes
out[townid].buildingOrders.push({
buildingTime: order.building_time,
building: order.building_type,
beginTime: order.created_at,
tearingDown: order.tear_down,
endTime: order.to_be_completed_at,
refund: order.cancel_refund,
cost: {wood: order.wood, stone: order.stone, iron: order.iron}
})
}
recruitments = ITowns.all_remaining_unit_orders.fragments[townid]
out[townid].recruitingOrders = []
for(var i = 0; i<recruitments.models.length; i++) {
order = recruitments.models[i].attributes
out[townid].recruitingOrders.push({
count: order.count,
beginTime: order.created_at,
kind: order.kind,
done: order.parts_done,
refund: order.refund_for_single_unit,
endTime: order.to_be_completed_at,
unit: order.unit_type,
cost: {wood: order.wood, stone: order.stone, iron: order.iron, favor: order.favor}
})
}
castedPowers = ITowns.all_casted_powers.fragments[townid]
out[townid].castedPowers = []
for(var i = 0; i<castedPowers.models.length; i++) {
order = castedPowers.models[i].attributes
out[townid].castedPowers.push({
configuration: order.configuration,
endTime: order.to_be_completed_at,
extended: order.extended,
level: order.level,
originPlayer: order.origin_player_id,
power: order.power_id
})
}
researches = MM.getTownAgnosticCollectionsByName("ResearchOrder")[0].fragments[townid]
out[townid].researchOrders = []
for(var i = 0; i<researches.models.length; i++) {
order = researches.models[i].attributes
out[townid].researchOrders.push({
research: order.research_type,
beginTime: order.created_at,
endTime: order.to_be_completed_at,
refund: order.cancel_refund
})
}
/*
militia = MM.getModels().Militia
if(townid in militia){
out[townid].militia = {
start : militia[townid].attributes.started_at,
end: militia[townid].attributes.finished_at
}
} else {
out[townid].militia = null
}*/
out[townid].militia = null
}
celebrations = MM.getModels().Celebration
outCele = []
for (var i in celebrations) {
outCele.push({
town: celebrations[i].attributes.townid,
type: celebrations[i].attributes.celebration_type,
end: celebrations[i].attributes.finished_at,
})
}
mvts = MM.getModels().MovementsUnits
outMvts = []
for (var i in mvts) {
mvt = mvts[i].attributes
outMvts.push({
arrival: mvt.arrival_at,
cancelableUntil: mvt.cancelable_until,
invisibleUntil: mvt.cap_of_invisibility_effective_until,
destIsAttackSpot: mvt.destination_is_attack_spot,
origIsAttackSpot: mvt.origin_is_attack_spot,
homeId: mvt.home_town_id ,
player: mvt.player_id,
start: mvt.started_at,
targetId: mvt.target_town_id,
type: mvt.type,
})
}
trdz = MM.getModels().Trade
outTrd = []
for (var i in trdz) {
trd = trdz[i].attributes
outTrd.push({
start: trd.started_at,
arrival: trd.arrival_at,
dest: trd.destination_town_id,
destType: trd.destination_town_type,
gold: trd.gold,
stone: trd.stone,
wood: trd.wood,
iron: trd.iron,
orig: trd.origin_town_id,
origType: trd.origin_town_type,
exchange: trd.in_exchange
})
}
fav = MM.getModels().PlayerGods[Object.keys(MM.getModels().PlayerGods)[0]].attributes
outFav = {
aphrodite: fav.aphrodite_favor,
ares: fav.ares_favor,
artemis: fav.artemis_favor,
athena: fav.athena_favor,
fury: fav.fury,
hades: fav.hades_favor,
hera: fav.hera_favor,
poseidon: fav.poseidon_favor,
zeus: fav.zeus_favor
}
utz = MM.getModels().Units
outUts = []
for (var i in utz) {
outUts.push({
orig: utz[i].getOriginTownId(),
curr: utz[i].getCurrentTownId(),
units: utz[i].getUnits(),
sameIsland: utz[i].isSameIsland()
})
}
return {towns: out,celebrations: outCele, movements: outMvts, trades: outTrd, favors: outFav, units: outUts}
}
function greposimu() {
GREPOSIMURL="http://localhost:8080"
$.ajax({
type: 'POST',
crossDomain: true,
contentType : "application/json; charset=utf-8",
data: JSON.stringify(makeObject()),
datatype : "application/json",
url: GREPOSIMURL+'/registerScheduler',
success: function(uuid){
window.open(GREPOSIMURL+'/scheduler/'+uuid, '_blank').focus();
}
})
}
function doc_keyUp(e) {
console.log("Keyup de greposimu")
if (e.keyCode == 79)
greposimu();
}
console.log("GrepoSimu loaded")
document.addEventListener('keyup', doc_keyUp, false)