// ==UserScript==
// @name TC
// @namespace http://userscripts.org/scripts/show/36651
// @description Um simples addon de utilitarios para o jogo The Crims
// @include *.thecrims.com/*
// ==/UserScript==
//<![CDATA[
/*
* Remover todos os nos filhos de um no pai
* @param DOMNodeElement fatherNode - O No pai
* @return void
*/
document.removeAllElementsFromFather = function(fatherNode) {
if (fatherNode.childNodes.length > 0) {
for (i = fatherNode.childNodes.length-1; i > 0; i--) {
fatherNode.removeChild(fatherNode.childNodes[i]);
}
}
};
/*
* Obter todos os elementos de tag LI
* Retorna uma colecao de objetos HTMLLIListElement
*/
document.list = ((document.getElementsByTagName('li')) ? document.getElementsByTagName('li') : undefined);
/*
* Adicionar novos estilos no documento
* @param string string - Regras CSS
* @return void
*/
document.addCSS = function(string) {
var newCSS = document.createElement('style');
newCSS.type = 'text/css';
newCSS.innerHTML = string;
document.getElementsByTagName('head')[0].appendChild(newCSS);
};
//Remover a propaganda no canto superior direito da pagina localizada em seu header
document.removeAllElementsFromFather(document.getElementById('header'));
/*
* Objeto TheCrims
* Utilizado para controlar todas as informacoes do jogo em si
*/
theCrims = function() {
//Localizacao atual
this.page = document.location.pathname.toLowerCase().substring(1);
//Informacoes
this.username = '';
this.res = 0;
this.inte = 0;
this.str = 0;
this.chr = 0;
this.tol = 0;
this.money = 0;
this.armor = 0;
this.armPower = 0;
this.armorName = '';
//Poder solo em cada dificuldade
this.safeSoloPower = 0;
this.normalSoloPower = 0;
this.riskySoloPower = 0;
this.dangerSoloPower = 0;
/*
* Metodo para checar se o jogador esta logado no site
* @param void
* @return bool - Verdadeiro se estiver ou Falso caso nao esteja
*/
this.isLogged = function() {
var link = document.links;
var found = true;
for (i = 0; i < link.length; i++) {
if (link[i].href.match(/lostpassword.php/)) { found = false; }
}
return found;
};
/*
* Metodo para obter informacoes do jogador
* @param void
* @return void
*/
this.getInformation = function() {
var stats = new Array();
var obj = document.getElementsByTagName('span');
var x = 0;
for (i = 0; i < obj.length; i++) {
if (obj[i].className == 'menuyellowtext') {
stats[x] = obj[i].innerHTML;
x++;
}
}
var armorName = document.list[15].lastChild.nodeValue;
switch (armorName.toLowerCase()) {
case 'fraldinha':{
this.armor = 1;
break;
}
case 'jaqueta de couro':{
this.armor = 2;
break;
}
case 'colete brilhante metálico':{
this.armor = 3;
break;
}
case 'colete corporal':{
this.armor = 4;
break;
}
case 'jaqueta nano de fibra':{
this.armor = 5;
break;
}
case 'colete nomex de aço':{
this.armor = 6;
break;
}
default:this.armor = 0;
}
this.armorName = armorName;
this.username = stats[0];
this.res = parseInt(stats[2]);
this.inte = parseInt(stats[3]);
this.str = parseInt(stats[5]);
this.chr = parseInt(stats[4]);
this.tol = parseInt(stats[6]);
this.money = parseInt(stats[7].substring(1).replace(/,/g, ''));
if (this.page == 'armsdealer.php') {
var table = document.getElementsByTagName('table');
for (z = 0; z < table.length; z++) {
if (table[z].className == 'black_table') {
var tr = table[z].getElementsByTagName('tbody')[0].getElementsByTagName('tr');
var td = tr[tr.length-1].childNodes;
var val = td[5].innerHTML;
GM_setValue("playerPower",val);
this.armPower = val;
break;
}
}
}
else { this.armPower = GM_getValue("playerPower"); }
};
/*
* Metodo para exibir um alerta com as informacoes do jogador
* @param void
* @return void
*/
this.alertInfo = function() {
alert("Username: "+tc.username+"\n"+
"Respect: "+tc.res+"\n"+
"Intelligence: "+tc.inte+"\n"+
"Strength: "+tc.str+"\n"+
"Charisma: "+tc.chr+"\n"+
"Tolerance: "+tc.tol+"\n"+
"Money: "+tc.money+"\n"+
"Armor: "+tc.armorName+"\n"
);
};
/*
* Metodo para calcular o suborno necessario para sair da prisao
* Formula: Round ( respeito * 505 )
* @param void
* @return int - O resultado do calculo
*/
this.calcBribe = function() { return Math.round(this.res * 0.5055) * 1000; };
/*
* Metodo para calcular a quantidade de predios que o jogador pode possuir
* Formula: round ( ( (2 * Inteligencia + Resistencia - 1) + 1)? / 2)
* @param void
* @return int - O resultado do calculo
*/
this.calcMaxBuilding = function() { return Math.floor((Math.sqrt(2 * (this.inte + this.tol) - 1) + 1) / 2); };
/*
* Metodo para calcular o poder do jogador baseado em suas informacoes
* IMPORTANTE: E NECESSARIO O JOGADOR ACESSAR A PAGINA DE ARMAS PARA ATUALIZAR O SEU DANO MINIMO
* Formula do poder do jogador: (intelligence + strength + tolerance/2)/3
* Formula do poder da arma: (weapon damage * accuracy/10) +- some random parts + armor
*
* Niveis de poder
* - seguro : 85%
* - Normal : 90%
* - Arriscado : 100%
* - Perigoso : 102%
*
* @param int newWeaponDamage - Dano minimo da arma
* @param int newArmor - Resistencia da armadura
* @return void
*/
this.calculatePower = function(newWeaponDamage, newArmor) {
var armorTolerance = new Array(0, 8, 32, 120, 400, 1200, 2000);
var weaponDamage;
var armor;
if (newWeaponDamage) { weaponDamage = newWeaponDamage; }
else { weaponDamage = this.weaponDamage; }
if (newArmor) { armor = newArmor; }
else { armor = this.armorNumber; }
var playerPower = ((this.inte + this.str + this.tol / 2) / 3);
var weaponPower = ((10 * weaponDamage) / 10 + armorTolerance[armor]);
this.safeSoloPower = Math.round((playerPower + weaponPower) * 0.85 );
this.normalSoloPower = Math.round((playerPower + weaponPower) * 0.9 );
this.riskySoloPower = Math.round((playerPower + weaponPower) * 1 );
this.dangerSoloPower = Math.round((playerPower + weaponPower) * 1.02);
};
/*
* Metodo para indicar o que voce pode roubar (SOLO) baseado em seu poder
* @param int yourPower - O seu poder
* @return string - O nome do estabelecimento
*/
this.calcWhatRobb = function(yourPower) {
var key = 0;
var difficulty = new Array(
3,10,15,25,40,45,55,65,
70,100,170,250,300,370,480,570,
640,770,880,980,1150,1430,2700,3200
);
var places = new Array(
'Loja de 1,99','Velhinha na rua','Rádio de carro','Táxi','Jogo de cartas',
'Roubar uma casa','Posto de gasolina','Cinema','Tabacaria','Carrefour',
'Sequestro','Joalheria','Depósito de segurança','Banco pequeno',
'Chefe local da máfia','Concessionária','Paypal','Bandidos locais',
'Traficante local','Cassino','Boate','Casas bahia','Museu nacional',
'Russo'
);
for (i = 0; i < difficulty.length; i++) {
if (yourPower >= difficulty[i]) { key = i; }
}
return places[key];
};
/*
* Metodo para indicar o que voce pode roubar (GANGUE) baseado em seu poder
* @param int yourPower - O seu poder
* @return string - O nome do estabelecimento
*/
this.calcWhatGG = function(yourPower) {
var key = 0;
var difficulty = new Array(70,160,300,900,2000,2500,4500,8000,15000);
var places = new Array(
'Supermercado','Banco','Carro-forte','Reserva federal',
'Banco central','Estoque no mercado','Al Capone','Palácio de fuckingham',
'Fort knox'
);
for (i = 0; i < difficulty.length; i++) {
if (yourPower >= difficulty[i]) { key = i; }
}
return places[key];
};
/*
* Metodo para exibir informacoes detalhadas de todos os estabelecimentos
* que voce pode roubar tanto SOLO quanto GANGUE
* @param automatic
* @return void
*/
this.getAllRobbInfo = function(ev) {
var difficulty = new Array(
3,10,15,25,40,45,55,65,
70,100,170,250,300,370,480,570,
640,770,880,980,1150,1430,2700,3200
);
var places = new Array(
'Loja de 1,99','Velhinha na rua','Rádio de carro','Táxi','Jogo de cartas',
'Roubar uma casa','Posto de gasolina','Cinema','Tabacaria','Carrefour',
'Sequestro','Joalheria','Depósito de segurança','Banco pequeno',
'Chefe local da máfia','Concessionária','Paypal','Bandidos locais',
'Traficante local','Cassino','Boate','Casas bahia','Museu nacional',
'Russo'
);
var stamina = new Array(5,10,10,10,10,12,14,15,16,18,20,25,27,30,35,40,45,50,60,65,70,75,80,80);
var robbImages = new Array('<img src="http://img238.imageshack.us/img238/7551/yesut3.gif">','<img src="http://img238.imageshack.us/img238/5720/nopu3.gif">');
if (!document.getElementById('robbInfoBlock')) {
var block = document.createElement('div');
block.id = 'robbInfoBlock';
var infoOutput = '<table id="robbTable">'+
'<tr>'+
' <td rowspan="4"><img height="40" width="80" alt="" src="http://img90.imageshack.us/img90/2393/singlerobbxi9.gif"/></td>'+
' <td rowspan="4">Dificuldade</td>'+
' <td rowspan="4">Estamina</td>'+
' <td colspan="4"><strong>Crimes solo</strong></td>'+
'</tr>'+
'<tr>'+
' <td>Seguro</td>'+
' <td>Normal</td>'+
' <td>Arriscado</td>'+
' <td>Perigoso</td>'+
'</tr>'+
'<tr>'+
' <td>85%</td>'+
' <td>90%</td>'+
' <td>100%</td>'+
' <td>102%</td>'+
'</tr>'+
'<tr>'+
' <td>'+sp+'</td>'+
' <td>'+np+'</td>'+
' <td>'+rp+'</td>'+
' <td>'+dp+'</td>'+
'</tr>';
for (i = 0; i < places.length; i++) {
infoOutput += '<tr>'+
' <td>'+places[i]+'</td>'+
' <td>'+difficulty[i]+'</td>'+
' <td>'+stamina[i]+'%</td>'+
' <td>'+(sp >= difficulty[i] ? robbImages[0] : robbImages[1])+'</td>'+
' <td>'+(np >= difficulty[i] ? robbImages[0] : robbImages[1])+'</td>'+
' <td>'+(rp >= difficulty[i] ? robbImages[0] : robbImages[1])+'</td>'+
' <td>'+(dp >= difficulty[i] ? robbImages[0] : robbImages[1])+'</td>'+
'</tr>';
}
infoOutput += '</table>';
block.innerHTML = infoOutput;
document.body.appendChild(block);
}
else { document.body.removeChild(document.getElementById('robbInfoBlock')); }
};
/*
* Metodo para adicionar um bloco na pagina com as informacoes capturadas
* @param void
* @return void
*/
this.output = function() {
var block = document.createElement('div');
block.id = 'outputBlock';
var header = document.createElement('div');
header.id = 'headerBlock';
header.innerHTML = 'Informações sobre '+this.username;
var conteiner = document.createElement('div');
conteiner.id = 'conteinerBlock';
block.appendChild(header);
block.appendChild(conteiner);
conteiner.innerHTML = '- Qtd máxima de prédios: <span class="menuyellowtext">'+this.calcMaxBuilding()+'</span><br />'+
'- Preço de suborno: <span class="menuyellowtext">$'+this.calcBribe()+'</span><br />'+
'<div class="robbBlock">'+
' - Seu poder e Roubo solo<br/>'+
' (Seguro): '+
' <span class="menuyellowtext">'+this.safeSoloPower+'</span> [<span class="robbPlaces">'+this.calcWhatRobb(this.safeSoloPower)+'</span>]<br />'+
' (Normal): '+
' <span class="menuyellowtext">'+this.normalSoloPower+'</span> [<span class="robbPlaces">'+this.calcWhatRobb(this.normalSoloPower)+'</span>]<br />'+
' (Arriscado): '+
' <span class="menuyellowtext">'+this.riskySoloPower+'</span> [<span class="robbPlaces">'+this.calcWhatRobb(this.riskySoloPower)+'</span>]<br />'+
' (Perigoso): '+
' <span class="menuyellowtext">'+this.dangerSoloPower+'</span> [<span class="robbPlaces">'+this.calcWhatRobb(this.dangerSoloPower)+'</span>]<br /><br />'+
'</div>'+
'<div class="robbBlock">'+
' - Roubo gangue<br/>'+
' (Seguro): '+
' [<span class="robbPlaces">'+this.calcWhatGG(this.safeSoloPower)+'</span>]<br />'+
' (Normal): '+
' [<span class="robbPlaces">'+this.calcWhatGG(this.normalSoloPower)+'</span>]<br />'+
' (Arriscado): '+
' [<span class="robbPlaces">'+this.calcWhatGG(this.riskySoloPower)+'</span>]<br />'+
' (Perigoso): '+
' [<span class="robbPlaces">'+this.calcWhatGG(this.dangerSoloPower)+'</span>]<br /><br />'+
'</div>'+
'<div id="robbButton" style="clear: both; margin-left: 10px;"><span style="cursor: pointer; border: 1px solid #383838; background-color: #000; color: #fff; padding: 1px;">+ Detalhes</span></div>'+
'<div class="robbMessage">Para atualizar o seu poder, acesse a página <span style="color: #fff">Negociante de armas</span></div>';
document.getElementById('header').appendChild(block);
};
/* Inicializacao */
if (this.isLogged()) {
this.getInformation();
this.calculatePower(this.armPower,this.armor);
this.output();
var sp = this.safeSoloPower;
var np = this.normalSoloPower;
var rp = this.riskySoloPower;
var dp = this.dangerSoloPower;
document.getElementById('robbButton').addEventListener('click',this.getAllRobbInfo,true);
}
return this;
};
//Aplicando novos estilos
document.addCSS('div#outputBlock {'+
'background: #464646;'+
'border-style: none solid solid;'+
'border-width: medium 1px 1px;'+
'border-color: #666;'+
'position: relative;'+
'left: 374px;'+
'width: 440px;'+
'height: 150px;'+
'top: 1px;'+
'}');
document.addCSS('div#outputBlock #headerBlock {'+
'background: #000;'+
'border: 1px solid #666;'+
'width: 420px;'+
'padding: 2px;'+
'margin: 0 auto;'+
'color: #fff;'+
'}');
document.addCSS('div#outputBlock #conteinerBlock {'+
'background: #6c6c6c;'+
'border: 1px solid #383838;'+
'width: 420px;'+
'height: 120px;'+
'padding: 2px;'+
'margin: 0 auto;'+
'}');
document.addCSS('div#outputBlock .robbBlock {'+
'float: left;'+
'}');
document.addCSS('.robbPlaces {'+
'color: #FFCC66;'+
'font: 10px verdana,arial,sans-serif'+
'}');
document.addCSS('div#outputBlock .robbMessage {'+
'clear: both;'+
'margin-left: 2px;'+
'font: bold 9px verdana;'+
'color: #e80000;'+
'}');
document.addCSS('#robbInfoBlock {'+
'left: 378px;'+
'position: absolute;'+
'top: 155px;'+
'}');
document.addCSS('#robbTable {'+
'color: white;'+
'font: 11px Tahoma,Arial,Helvetica,sans-serif;'+
'background-color: #2B2B2B;'+
'border: 1px solid #6F6F6F;'+
'text-align: center;'+
'width: 450px;'+
'}');
document.addCSS('#robbTable td {'+
'border-bottom: 1px solid #404040;'+
'padding: 1px 4px;'+
'text-align: center;'+
'}');
var tc = new theCrims();
//]]>