IkariamPredict

By lavelas Last update Jul 28, 2008 — Installed 3,979 times.
// ==UserScript==
// @name           IkariamPredict
// @version        1.0.3
// @namespace      http://diveintogreasemonkey.org/download/
// @description    Predicts Icariam (browser based game) aspects
// @include        http://*.ikariam.*/index.php?view=townHall&id=*&position=0
// @author         Maxim Kurilov aka lavelas
// ==/UserScript==

/*
Скрипт позволяет предскать некоторые параметры роста в Ikariam.

Changelog:
v 1.0.4	Время теперь выводится в тексте ратуши
v 1.0.3	Поддержка английского языка
v 1.0.2	Багфиксы, обработка бесконечного времени
v 1.0.1	Выводит время до заполнения ратуши в удобном виде: дни, часы, минуты
v 1.0	Начальная версия. Предсказывает только время роста населения до максимального значения (по ратуше). Учитывает замедление роста из-за падения сатисфакции. Время показывается во всплывающей подсказке при наведении на цифру максимального населения в здании ратуши.
*/

function predictPopulationOverfull() {
	var divCityOverview, curPopulation, maxPopulation, curPopulationGrowth, timeLeftEx;
	var lang = (navigator.language == "ru")?"ru":"en";
	
	divCityOverview = document.getElementById('CityOverview');
	if (divCityOverview) {
		curPopulation		= Number(divCityOverview.childNodes[3].childNodes[3].childNodes[1].childNodes[1].textContent);
		maxPopulation		= Number(divCityOverview.childNodes[3].childNodes[3].childNodes[1].childNodes[3].textContent);
		curPopulationGrowth	= Number(divCityOverview.childNodes[3].childNodes[3].childNodes[3].childNodes[3].textContent);
		if (curPopulation > 0 && maxPopulation > 0 && curPopulationGrowth > 0 && curPopulationGrowth / 0.02 + curPopulation >= maxPopulation) {
			timeLeftEx = 0;
			for (i = curPopulation; i < maxPopulation; i++) {
				timeLeftEx = timeLeftEx + 1 / (curPopulationGrowth - 0.02 * (i - curPopulation));
			};
		} else {
			timelLeftEx = Infinity;
		}
		var parentNode = divCityOverview.childNodes[3].childNodes[3];
		var newNode = parentNode.childNodes[3].cloneNode(true);
		var insertedElement = parentNode.appendChild(newNode);
		insertedElement.style.position = "relative";
		insertedElement.style.top = "74px";
		insertedElement.innerHTML = msg_TimeLeft[lang] + timeRealToString(timeLeftEx, lang);
		//divCityOverview.childNodes[3].childNodes[3].childNodes[1].childNodes[3].title  = msg_TimeLeft[lang] + timeRealToString(timeLeftEx, lang);
	};
};

function timeRealToString(rTime, lang) {
	var sDays, sHours, sMinutes, sResult;
	if (isFinite(rTime)) {
		sDays = Math.floor(rTime / 24);
		sHours = Math.floor(rTime - sDays * 24);
		sMinutes = Math.floor((rTime - sDays * 24 - sHours) * 60);
		sResult = (sDays == 0)?"":String(sDays) + msg_Days[lang];
		sResult += (sHours == 0)?"":String(sHours) + msg_Hours[lang];
		sResult += sMinutes + msg_Minutes[lang];
	} else {
		sResult = msg_Never[lang];
	}
	return sResult;
};

var msg_TimeLeft = new Object;
var msg_Days = new Object;
var msg_Hours = new Object;
var msg_Minutes = new Object;
var msg_Never = new Object;

msg_TimeLeft["ru"] = "Переполнение: ";
msg_TimeLeft["en"] = "Full in: ";
msg_Days["ru"] = "д. ";
msg_Days["en"] = "d. ";
msg_Hours["ru"] = "ч. ";
msg_Hours["en"] = "h. ";
msg_Minutes["ru"] = "мин. ";
msg_Minutes["en"] = "min. ";
msg_Never["ru"] = "никогда";
msg_Never["en"] = "never";

predictPopulationOverfull();