There are 3 previous versions of this script.
// ==UserScript==
// @name Neopets : Cliffhanger
// @namespace http://gm.wesley.eti.br/neopets
// @description Plays Chiffhanger as much as possible
// @include http://www.neopets.com/games/cliffhanger/cliffhanger.phtml
// @include http://www.neopets.com/games/cliffhanger/cliffhanger.phtml?*
// @include http://www.neopets.com/games/cliffhanger/process_cliffhanger.phtml
// @include http://www.neopets.com/games/cliffhanger/process_cliffhanger.phtml?*
// @require http://www.wesley.eti.br/includes/js/php.js
// @require http://www.wesley.eti.br/includes/js/php2js.js
// @require http://gm.wesley.eti.br/gm_default.js
// @require http://gm.wesley.eti.br/neopets/neopets_default.js
// @require http://gm.wesley.eti.br/neopets/Cliffhanger/cliffhanger_default.js
// @author w35l3y
// @email w35l3y@brasnet.org
// @version 1.0.5
// @copyright w35l3y 2008
// @license GNU GPL
// @homepage http://www.wesley.eti.br
// ==/UserScript==
/**************************************************************************
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
**************************************************************************/
checkForUpdate({
'file':'http://userscripts.org/scripts/source/28760.user.js',
'name':'Neopets : Cliffhanger',
'namespace':'http://gm.wesley.eti.br/neopets',
'version':'1.0.5'
});
(function(){ // script scope
var user = {
interval:GM_getValue('interval', '5000-9000').split('-').array_map(parseInt,array_fill(0,2,10)),
language:GM_getValue('language', ''),
skill:eval(GM_getValue('skill', 'Skill.Hard')),
play:eval(GM_getValue('play', 'Play.AtOnce')), // != Play.LetterByLetter
repeat:GM_getValue('repeat', 10)
};
var script = {
language:Neopets.Language || user.language || "en",
};
var nextAction;
var answers = user.language in Answers && Answers[user.language] || script.language in Answers && Answers[script.language] || Answers["en"];
if (answers.length)
{
var skillLevel = xpath('//form[contains(@action,"process_cliffhanger.phtml")]/input[@name = "game_skill" and @value = "'+user.skill+'"]')[0];
var current = GM_getValue("current",0);
if (!!skillLevel)
{
if (user.repeat == -1 || current < user.repeat)
{
if (user.repeat > 0)
{
GM_setValue("current",++current);
}
skillLevel.click();
nextAction = function(){skillLevel.form.submit();};
}
else if (current == user.repeat)
{
GM_setValue("current",0);
}
}
else
{
var pattern = strip_tags(xpath('//tbody/tr/td[@bgcolor="skyblue" and @colspan = "2" and contains(b/text(),"_")]')[0].innerHTML.replace(/<br>/g,' ')).replace(/\s+/g,'').replace(/_/g,'\\w').replace(/(?: |<br(?: *\/?)>)/g,' ');
pattern = new RegExp("^"+pattern.substr(1,pattern.length-4)+"$","gim");
var x = pattern.exec(answers.join("\n"));
var t = !!x && x.length || 0;
if (t > 1)
{ // there are more than one possible answers
var availableLetters = xpath('//a[contains(@href,"process_cliffhanger.phtml?choice=")]/b');
var letters = {};
var xbreak = false;
for ( var ia = 0 , ta = availableLetters.length ; ia < ta ; ++ia )
{
var item = availableLetters[ia];
var letter = item.innerHTML;
letters[letter] = [0,item.parentNode.href];
for ( var i = 0 ; i < t ; ++i )
{
if (x[i].toUpperCase().indexOf(letter.toUpperCase()) > -1)
{
++letters[letter][0];
}
}
if (letters[letter][0] == t)
{
nextAction = function(){location.replace(letters[letter][1]);};
xbreak = true;
break;
}
}
for ( ; !xbreak && --t ; )
{
for ( l in letters )
{
if (letters[l][0] == t)
{
nextAction = function(){location.replace(letters[l][1]);};
xbreak = true;
break;
}
}
}
if (!xbreak)
{
alert("No answer was found.");
}
}
else if (t == 1)
{ // there is only one possible answer
var txtSolve = xpath('//form[contains(@action,"process_cliffhanger.phtml")]/input[@name = "solve_puzzle"]')[0];
txtSolve.value = x[0];
if (user.play & Play.LetterByLetter&~Play.AtOnce)
{
var availableLetters = xpath('//a[contains(@href,"process_cliffhanger.phtml?choice=")]/b');
for ( var ia = 0 , ta = availableLetters.length ; ia < ta ; ++ia )
{
var item = availableLetters[ia];
var letter = item.innerHTML;
if (x[0].toUpperCase().indexOf(letter.toUpperCase()) > -1)
{
nextAction = function(){location.replace(item.parentNode.href);};
break;
}
}
}
if (!nextAction && user.play & Play.AtOnce)
{
nextAction = function(){txtSolve.form.submit();};
}
}
else
{ // there is no answer
alert("No answer was found.");
}
}
}
else
{
alert("No answer is available");
}
if (!!nextAction)
{
setTimeout(nextAction,randomValue(user.interval));
}
})();
