// ==UserScript==
// @name Pfandflaschensammler
// @namespace http://userscripts.org/scripts/show/85124
// @author lmk (wieder lauffaehig gemacht und erweitert von We1hnachtsmann)
// @license GPL version 3 or any later version; http://www.gnu.org/copyleft/gpl.html
// @copyright (c) 2009, lmk.
// @description Nach beendetem Pfandflaschensammeln wird ein Hinweis auf der zuletzt geoeffneten Seite ausgegeben und es kann zur Pfandflaschensammelseite weitergeleitet werden.
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_xmlhttpRequest
// @grant GM_deleteValue
// @grant GM_listValues
// @include http://*.pennergame.de/*
// @include http://pennergame.de/*
// @include http://*.dossergame.co.uk/*
// @include http://dossergame.co.uk/*
// @include http://*.menelgame.pl/*
// @include http://menelgame.pl/*
// @include http://*.bumrise.com/*
// @include http://bumrise.com/*
// @include http://*.clodogame.fr/*
// @include http://clodogame.fr/*
// @include http://*.mendigogame.es/*
// @include http://mendigogame.es/*
// @include http://*.mendigogame.com/*
// @include http://mendigogame.com/*
// @include http://*.faveladogame.com/*
// @include http://faveladogame.com/*
// @include http://*.bomzhuj.ru/*
// @include http://bomzhuj.ru/*
// @exclude http://*board.pennergame.de/*
// @exclude http://mobile.pennergame.de/*
// @version 2.5.10 Unnötige Aufrufe der Eventseite abgestellt
// @downloadURL none
// ==/UserScript==
// @version 2.5.9 Automatik funktionierte nicht mehr
// @version 2.5.8 Probleme mit Event-Seite behoben
// @version 2.5.7 Vatikan: Flaschenverkauf bei Überschreiten eines maximalen Füllgrads
// @version 2.5.6 Adventsspiel: Plätzchenklau, Korrektur
// @version 2.5.5 Adventsspiel: Plätzchenklau
// @version 2.5.4 Fehler bei Erkennung eines vorhandenen Updates behoben
// @version 2.5.3 Erkennung des beendeten Minigames fehlerhaft; Sammelmarken einlösen
// @version 2.5.2 automatischer Aufruf der Event-Seite falls nötig
// @version 2.5.1 erste Version Vatikan und neues Rentier-Spiel
// @version 2.4.3 Korrekturen; Gehalt automatisch abholen
// @version 2.4.2 Erweiterungen und Korrekturen für Eckfahnenspiel 2014
// @version 2.4.1 Wechsel auf greasyfork.org; Verbrechensstart erweitert
// @version 2.3.34 Anpassungen für Sommergame 2014 (Zollbeamter)
// @version 2.3.33 noch eine Korrektur zu Anpassungen für Ostergame 2014
// @version 2.3.32 Korrektur zu Anpassungen für Ostergame 2014
// @version 2.3.31 Anpassungen für Ostergame 2014
// @version 2.3.30 Fehler bei Anpassung an neues Karnevalgame behoben
// @version 2.3.29 Anpassung an neues Karnevalgame
// @version 2.3.28 kleine Korrektur: bei automatischen Verbrechen kam u.U. eine Abfrage
// @version 2.3.27 2. Korrektur zu Anpassungen an Xmas-Minigame 2013
// @version 2.3.26 Korrektur zu Anpassungen an Xmas-Minigame 2013
// @version 2.3.25 Anpassungen an Xmas-Minigame 2013
// @version 2.3.24 Skript lief nicht mehr richtig
// @version 2.3.23 Checkbox auf Login-Seite fehlte
// @version 2.3.22 Fehler im letzten Update behoben
// @version 2.3.21 Anpassung wegen anderen Aufbaus der Counter; Beseitigung von Fehlermeldungen
// @version 2.3.20 Erweiterung um Minispiel Piratenschatz
// @version 2.3.19 Erweiterung um Minispiel Zollkontrolle
// @version 2.3.18 Erweiterung um Kofferpackspiel
// @version 2.3.17 kein automatisches Wiedereinloggen, wenn explizit ausgeloggt wurde
// @version 2.3.16 automatisches Wiedereinloggen
// @version 2.3.15 Korrektur wegen Stadtfeind
// @version 2.3.14 Testmeldung entfernt
// @version 2.3.13 kleinere Erweiterungen; Reparatur nach Totalausfall
// @version 2.3.12 Korrektur wegen Stadtfeind
// @version 2.3.11 noch einmal Updateverfahren korrigiert
// @version $Id: pfandflaschensammler.user.js 84 2015-02-13 07:39:15Z mkl $
/* Automatic click on "start collecting" | Automatischer Klick auf "Sammeln" */
var autoSubmit = true; //false;
/* Alert messages */
var msgDone1 = "Das Pfandflaschensammeln wurde beendet."; // "Collecting done";
var msgDone2 = "Klicke auf OK um die Aktionsseite zu " + unescape("%F6") + "ffnen."; // "Click ok to open actions-page";
var msgAttackEnemy = "Es wurde ein Angriff auf den Stadtfeind Nr. 1 gestartet. Seite aktualisieren ?";
/* Captcha select title*/
var strTime = "Zeit: "; // "Time: ";
var intervalTime = 4000;
var done = " -/-"; // text after counter reached 0:00
var done0 = "00:00"; // alternative text after counter reached 0:00
var time = String(new Date().getTime());
var counter = done;
var fcounter = done;
var nameTime = "time";
var nameLastCollectTime = "LastCollectTime";
var checkInterval;
var TOWNEXTENSION = window.location.host;
var m_ownuserid;
var THISSCRIPTVERSION = GM_info.script.version.match(/[\d\.]*/)[0];
var THISSCRIPTNAME = GM_info.script.name;
var THISSCRIPTINSTALL_URLGF = "https://greasyfork.org/scripts/1049-pfandflaschensammler";
var language = document.getElementsByName("language")[0].content;
// Version ermitteln
var oldVersion = 1;
if (!document.getElementById("login")) {
var host = location.toString();
var pos = host.lastIndexOf("//") + 2;
host = host.substr(pos);
pos = host.indexOf("/");
host = host.substr(0, pos);
GM_setValue("ErrorCounter_" + host, GM_getValue("ErrorCounter_" + host, 0) + 1);
oldVersion = 0;
setTimeout(reload, 10000);
}
else
doTheAction();
// **********************************************************************************
// **********************************************************************************
// Funktion extrahiert die eigene UserID
// **********************************************************************************
// **********************************************************************************
function getOwnUserID() {
// Eigene UserID ermitteln
var ownuserid = document.getElementById('my-profile').innerHTML.split('href="/profil/id:')[1];
ownuserid = ownuserid.split('/"')[0];
return ownuserid;
}
// Holen einer Variablen mit User-Id
function PGu_getValue(varname, deflt) {
return GM_getValue(TOWNEXTENSION + varname + m_ownuserid, deflt);
}
// Setzen einer Variablen mit User-Id
function PGu_setValue(varname, value) {
GM_setValue(TOWNEXTENSION + varname + m_ownuserid, value);
}
// Leschen einer Variablen mit User-Id
function PGu_delete(varname) {
GM_deleteValue(TOWNEXTENSION + varname + m_ownuserid);
}
// ***********************************************************************************************
// ***********************************************************************************************
// formats a date into the format "YYYY-MM-DD"
// ***********************************************************************************************
// ***********************************************************************************************
function FormatDate(DateToFormat) {
var year = DateToFormat.getFullYear();
var month = DateToFormat.getMonth() + 101 + "";
var day = DateToFormat.getDate() + 100 + "";
return year + "-" + month.slice(1) + "-" + day.slice(1);
}
// **********************************************************************************
// **********************************************************************************
// returns the promille value
// **********************************************************************************
// **********************************************************************************
function GetPromille(doc) {
var promille = doc.getElementsByClassName("icon beer")[0].getElementsByTagName("a")[0];
promille = Number(promille.innerHTML.trim().substr(0, 6).trim());
return promille;
}
// ***********************************************************************************************
// ***********************************************************************************************
// check for a new script version and display a message, if there is one
// ***********************************************************************************************
// ***********************************************************************************************
function CheckForUpdate() {
// create and format actual date
var today = new Date();
var tagesdatum = FormatDate(today);
// if not searched for a new version of the script today
if (GM_getValue("LastUpdateCheckGF","") != tagesdatum) {
// **********************************************************************************
// *** GM_XMLHTTPREQUEST *** Abrufen der Skriptseite von greasyfork.org
// **********************************************************************************
GM_xmlhttpRequest({method: 'GET',
url: THISSCRIPTINSTALL_URLGF,
headers:{ "Accept":"text/javascript; charset=UTF-8" },
overrideMimeType:"application/javascript; charset=UTF-8",
onload:function(responseDetails) {
// Wenn die Seite erfolgreich abgerufen werden konnte
if (responseDetails.status == 200) {
var content = responseDetails.responseText;
// Ermitteln der Skriptversion
if (content.indexOf("@version") != -1)
var scriptfullversion = content.split('@version')[1].trim().split('\n')[0];
else
var scriptfullversion = content.split('"script-show-version">').pop().split('').pop();
var scriptversion = scriptfullversion.split(' ')[0];
scriptfullversion = scriptfullversion.substr(scriptversion.length+1);
// if there is a new version of the script
if (scriptversion != THISSCRIPTVERSION) {
// build the message
var alerttext = "Es gibt eine neue Version des Skriptes '" + THISSCRIPTNAME + "':\n\n" + scriptfullversion + "\n\nDie neue Version kann Fehlerbehebungen und/oder neue Funktionen beinhalten.\nHier gibt es weitere Infos über die neue Version:\n\n" + THISSCRIPTINSTALL_URLGF + "\n\nEine Aktualisierung ist empfehlenswert und kann direkt anschließend durchgeführt werden.\n\nHinweis: Die überprüfung auf neue Versionen wird nur einmal pro Tag durchgeführt."
// display the message
alert(alerttext);
// load the page with the new script for installation
window.location.href = THISSCRIPTINSTALL_URLGF+'/code/Pfandflaschensammler.user.js';
}
}
}
});
// memorize the new date
GM_setValue("LastUpdateCheckGF", tagesdatum)
}
}
// ***********************************************************************************************
// ***********************************************************************************************
// check for new minigame
// ***********************************************************************************************
// ***********************************************************************************************
function CheckNewMinigame() {
var today = new Date();
var timeout = PGu_getValue("minigame_wait", -1) - today.getTime();
if (timeout < 2000)
timeout = 2000;
var enemy = document.getElementById("enemy_info");
if (enemy) {
var einfo = document.getElementById("wrap").innerHTML.split("#enemy_info").pop();
if (einfo.indexOf("window.location") == -1)
return;
var addr = einfo.split("location")[1].split('"')[1];
var tagesdatum = FormatDate(today);
if (tagesdatum == PGu_getValue("minigame_date", "xx") && PGu_getValue("minigame_noon", "xx") != tagesdatum) {
if (today.getHours() > 12) {
PGu_setValue("minigame_noon", tagesdatum);
PGu_setValue("minigame_date", "xx");
}
}
if (PGu_getValue("minigame_date", "xx") != tagesdatum ||
PGu_getValue("minigame_success", 0) == 0)
if (window.location.pathname.indexOf(addr) == -1 && PGu_getValue("minigame_wait", -1) <= today.getTime()) {
GM_xmlhttpRequest({method:"GET", url: 'http://' + window.location.host + addr, onload:function(responseDetails) {
var content = responseDetails.responseText;
var pos = content.indexOf('href="javascript:minigame_show');
if (pos == -1) {
PGu_setValue("minigame_date", tagesdatum);
if (today.getHours() > 12)
PGu_setValue("minigame_noon", tagesdatum);
}
else
window.location.href = window.location.protocol + '//' + window.location.host + addr;
}});
return;
}
}
if (document.getElementById("display"))
if (document.getElementById("display").getElementsByClassName("cbox").length > 0)
timeout = DoNewMinigame();
else if (document.getElementById("display").getElementsByClassName("modal_close").length == 0 ||
document.getElementById("display").style.display == "none") {
var today = new Date();
var tagesdatum = FormatDate(today);
if (PGu_getValue("minigame_date", "xx") != tagesdatum ||
PGu_getValue("minigame_success", 0) == 0) {
var pos = document.getElementById("content").innerHTML.indexOf("minigame_show");
if (pos != -1)
pos = document.getElementById("content").innerHTML.indexOf("minigame_show", pos+1);
if (pos != -1)
unsafeWindow.minigame_show();
else {
PGu_setValue("minigame_date", tagesdatum);
if (today.getHours() > 12)
PGu_setValue("minigame_noon", tagesdatum);
}
}
}
window.setTimeout(CheckNewMinigame, timeout);
}
// ***********************************************************************************************
// ***********************************************************************************************
// play the new minigame
// ***********************************************************************************************
// ***********************************************************************************************
function DoNewMinigame () {
var today = new Date();
var tagesdatum = FormatDate(today);
var tbl = document.getElementById("display").getElementsByClassName("cbox")[0];
if (tbl.innerHTML.indexOf("_success.png") != -1 || tbl.innerHTML.indexOf("minigame_count") == -1) {
PGu_setValue("minigame_success", 1);
PGu_setValue("minigame_date", tagesdatum);
PGu_setValue("minigame_noon", tagesdatum);
if (today.getHours() < 12)
var to = 43500;
else
var to = 86400;
to = (to - today.getHours()*3600-today.getMinutes()*60-today.getSeconds()) * 1000;
PGu_setValue("minigame_wait", to.toString());
return to;
}
var trs = tbl.getElementsByTagName("tr");
for (j = 0; j < trs.length; j++)
if (trs[j].innerHTML.indexOf("minigame_count") != -1)
break;
if (j == trs.length)
return 0;
PGu_setValue("minigame_date", tagesdatum);
if (today.getHours() > 12)
PGu_setValue("minigame_noon", tagesdatum);
if (trs[j].innerHTML.indexOf("minigame_countdown") != -1) {
var span = trs[j].getElementsByTagName("span");
var seks = 0;
if (span.length > 0)
for (jj = 0; jj < 1; jj++) {
var timer = span[jj].innerHTML;
if (timer == done) {
seks = 0;
}
else if (timer.indexOf(":") != -1) {
var time = timer.split(":");
seks = (parseInt(time[0])*60 + parseInt(time[1])) * 1000;
}
}
if (seks == 0) {
unsafeWindow.minigame_show();
seks = 2000;
}
var time = Number(new Date().getTime()) + seks;
PGu_setValue("minigame_wait", String(time));
return seks;
}
if (trs[j].style.background.indexOf("_success.png") != -1 || trs[j].style.background.indexOf("_unsuccess.png") != -1 || trs[j].style.background.indexOf("_normal.png") != -1 ||
trs[j].style.background.indexOf("_success.jpg") != -1 || trs[j].style.background.indexOf("_unsuccess.jpg") != -1 || trs[j].style.background.indexOf("_normal.jpg") != -1) {
var success = PGu_getValue("minigame_success", 0);
if (success == 1) {
if (trs[j].style.background.indexOf("_success.png") == -1 ||
trs[j].innerHTML.indexOf("minigame_count") != -1) {
PGu_setValue("minigame_value", -1);
PGu_setValue("minigame_success", 0);
success = 0;
}
else
return (86400-today.getHours()*3600-today.getMinutes()*60-today.getSeconds()) * 1000;
}
if (success == 0) {
if (trs[j].style.background.indexOf("_success.png") != -1 ||
trs[j].innerHTML.indexOf("minigame_count") == -1) {
PGu_setValue("minigame_success", 1);
PGu_setValue("minigame_date", tagesdatum);
PGu_setValue("minigame_noon", tagesdatum);
return (86400-today.getHours()*3600-today.getMinutes()*60-today.getSeconds()) * 1000;
}
else {
var nextValue = PGu_getValue("minigame_value", -1) + 1;
PGu_setValue("minigame_value", nextValue);
document.getElementById("minigame_count").innerHTML = nextValue%10+1;
var sub = trs[j].innerHTML.split("minigame_try('")[1].split("'")[0];
unsafeWindow.minigame_try(sub);
}
}
}
return 2000;
}
// ***********************************************************************************************
// ***********************************************************************************************
// check for minigame and play it
// ***********************************************************************************************
// ***********************************************************************************************
function CheckMinigame () {
if (window.location.pathname.indexOf("/activities/") == -1)
return;
var minigames = new Array("halloween", "summer13", "event/aug13_2");
var tbl = document.getElementsByTagName("table");
for (i = 0; i < tbl.length; i++) {
for (var tk = 0; tk < minigames.length; tk++)
if (tbl[i].innerHTML.indexOf("/" + minigames[tk] + "/") != -1)
break;
var trs = tbl[i].getElementsByTagName("tr");
for (j = 0; j < trs.length; j++) {
for (var k = 0; k < minigames.length; k++)
if (trs[j].innerHTML.indexOf("/" + minigames[k] + "/") != -1)
break;
if (tk < minigames.length || k < minigames.length) {
var seks = 0;
if (j + 1 < trs.length) {
var span = trs[j+1].getElementsByTagName("span");
if (span.length > 0)
for (jj = 0; jj < 1; jj++) {
var timer = span[jj].innerHTML;
if (timer == done) {
seks = 0;
}
else if (timer.indexOf(":") != -1) {
var time = timer.split(":");
seks = parseInt(time[0])*60 + parseInt(time[1]);
}
}
}
if (seks > 0) {
checkInt = window.setTimeout(CheckMinigame,seks*1000);
return;
}
else if (trs[j].style.background.indexOf("/success.jpg") != -1 || trs[j].style.background.indexOf("/fail.jpg") != -1 || trs[j].style.background.indexOf("/normal.jpg") != -1) {
var success = PGu_getValue("minigame_success", 0);
if (success == 1) {
if (trs[j].style.background.indexOf("/success.jpg") == -1) {
PGu_setValue("minigame_value", -1);
PGu_setValue("minigame_success", 0);
success = 0;
}
else
checkInt = window.setTimeout(reload, 300000);
}
if (success == 0) {
if (trs[j].style.background.indexOf("/success.jpg") != -1) {
PGu_setValue("minigame_success", 1);
}
else {
var options = trs[j].innerHTML.split('