Twilight Forums

Idle chat for wannabe heroes
It is currently Wed Oct 22, 2014 8:33 am

All times are UTC - 7 hours




Post new topic Reply to topic  [ 353 posts ]  Go to page Previous  1 ... 3, 4, 5, 6, 7, 8, 9  Next
Author Message
 Post subject:
PostPosted: Tue Jan 13, 2009 6:01 am 
Offline
User avatar

Joined: Mon Jun 02, 2008 11:28 am
Posts: 119
It looks right except the TAG POS=2 at the start. My iMacros casts the 2 gadgeteer self-casts and MD, and has TAG POS=1 on each line, even though the MD control appears to be the 2nd element in the frame. Maybe change the 2 to a 1 and see what it does.

I guess you'll have tried re-recording the macro; maybe try re-recording it and casting the buffs in a different order (self-casts then buff).


Top
 Profile  
 
 Post subject:
PostPosted: Tue Jan 13, 2009 10:18 pm 
Offline
User avatar

Joined: Thu Sep 06, 2007 10:56 pm
Posts: 1466
Location: Berkeley when at school, San Diego when at home
Hmm. This is sorta weird. Right now I have it set to cast Bio and then the others, but it just casts Bio once and casts Vim 7 times and then ends. It seems impossible to make it cast multiple auras.

I'd like to reinstate my request for a skill macro script. :/

EDIT: This is with TAG POS=1 like you did. So.

_________________
Image
Vote for TH on global rankings!


Top
 Profile  
 
 Post subject:
PostPosted: Wed Jan 14, 2009 12:43 pm 
Offline
User avatar

Joined: Mon Jun 02, 2008 11:28 am
Posts: 119
The casting only 1 of 1 of the buffs makes me think it's confused about which input box is which and putting the number in the wrong 1, and the non-casting of the 2 others is... mysterious. If you record a macro with only 1 cast of each buff, does it work? Just a thought.


Top
 Profile  
 
 Post subject: Re: Greasemonkey
PostPosted: Sat Jul 25, 2009 3:43 pm 
Offline

Joined: Mon Nov 03, 2008 12:54 am
Posts: 732
Someone suggested it add chat, so I tried to write a script that adds a link to the MD in the top pane. I totally stole the Rest link script. But still, the problem is, it includes user ID and I can't find a way to get that from the top pane, and I don't know enough to get it from another pane.
Anyway, if you don't mind kludging around here it is, just change the ID to your ID.

Edit: I created a script that solves this problem. See here
Code:
// ==UserScript==
// @name   MD Link
// @namespace   http://www.twilightheroes.com/forums/
// @description   Adds a link to MD after the link to Full Inventory.
// @include   *twilightheroes.com/header.php
// ==/UserScript==

for (var i = 0; i < document.getElementsByTagName('a').length; i++) {
   if (document.getElementsByTagName('a')[i].href.indexOf("inventory.php") != -1) {
      var inventoryLink = document.getElementsByTagName('a')[i];
   }
}

var addLinks = document.createElement('a');
addLinks.href = "memento-show.php?charid=14240";
addLinks.style.color = "#CCCCCC";
addLinks.target = "main";
addLinks.innerHTML = "MD";

var spacer = document.createTextNode(' - ');

inventoryLink .parentNode.insertBefore(addLinks, inventoryLink .nextSibling);
inventoryLink .parentNode.insertBefore(spacer, inventoryLink.nextSibling);


Last edited by Muhandes on Thu Nov 19, 2009 9:03 am, edited 1 time in total.

Top
 Profile  
 
 Post subject: Re: Greasemonkey
PostPosted: Tue Jul 28, 2009 11:40 pm 
Offline
User avatar

Joined: Thu Sep 06, 2007 10:56 pm
Posts: 1466
Location: Berkeley when at school, San Diego when at home
Not sure if ClownHammer and Co. is still around, but, if there was a way to have monster specific actions, that'd be great. So like if I met a gangster in red, maybe I'd use a spell instead. And if I can't, then just attack or something. I primarily want it so I can use items on specific monsters.

_________________
Image
Vote for TH on global rankings!


Top
 Profile  
 
 Post subject: Re: Greasemonkey
PostPosted: Wed Aug 05, 2009 7:06 am 
Offline

Joined: Mon Nov 03, 2008 12:54 am
Posts: 732
Is there anyone around here that can still help writing scripts? There are some simple things I would like to add to Continuous Attack which will make it a valuable spading tool.
For instance, I noticed it already differentiates between combat and non-combat adventures, so just keeping tag of how many times each was encountered would be very helpful.


Top
 Profile  
 
 Post subject: Re: Greasemonkey
PostPosted: Sat Aug 08, 2009 6:34 pm 
Offline

Joined: Mon Nov 19, 2007 6:29 pm
Posts: 1832
Location: Florida
He wants to know how many of each encounter (combat or not) he gets. Like, each enemy/non-com shows up and says encountered x times. For percentage stuffs.


Top
 Profile  
 
 Post subject: Re: Greasemonkey
PostPosted: Sun Aug 09, 2009 12:42 am 
Offline

Joined: Mon Nov 03, 2008 12:54 am
Posts: 732
Of course, I want EVERYTHING. But starting from simple to more complicated, each step would be useful on its own.

1. A simple counter of combat/non-combat. I looked at the code and this is already detected and there are empty if clauses where I could increment the counters. But since I have zero experience in javascript I don't know how to display these counters. I don't mind any reasonable solution for where/how they are displayed and where/how to reset them.
2. Find the exact adventure and displaying counters how many times each occur. For non-combats this shouldn't be too hard as the adventure name can serve as key. For combats everything after "You are fighting" can serve as key.
3. For each adventure, displaying item and chip drop statistics. This will probably require much more work parsing the drops.

As mentioned above, even step 1, which I could implement if I knew how to display things, would start the usefulness of this as a spading tool.


Top
 Profile  
 
 Post subject: Re: Greasemonkey
PostPosted: Sun Aug 09, 2009 1:07 am 
Offline

Joined: Mon Nov 19, 2007 6:29 pm
Posts: 1832
Location: Florida
This would be much more easily done in a bot like in perl or php... JS kinda sucks... But overall the methods aren't that dissimilar in any of the languages, you've just got language limitations to deal with in JS. Technically, with a few modifications, the phpbot can already do what you want it to do. But the phpbot's got several bugs in it, so >.>


Top
 Profile  
 
 Post subject: Re: Greasemonkey
PostPosted: Sun Aug 09, 2009 5:15 am 
Offline

Joined: Mon Nov 03, 2008 12:54 am
Posts: 732
Satan wrote:
This would be much more easily done in a bot like in perl or php... JS kinda sucks... But overall the methods aren't that dissimilar in any of the languages, you've just got language limitations to deal with in JS. Technically, with a few modifications, the phpbot can already do what you want it to do. But the phpbot's got several bugs in it, so >.>


One problem is that the phpbot is non-interactive. In many cases I see a problem in the spade run very early and I can stop it before 300 turns are wasted. At the current turn/day this is an issue. Perhaps it can be made more verbose and more interactive?
Then there is the issue of the bugs you mentioned.
I am also a bit worried about sending my password, though this might be just lack of knowledge of how it is done.

Bottom line, I don't really mind if the tool is JS or phpbot, as long as it does what is required.

Edit: After posting this I realized one other problem. The code for phpbot isn't open. Would you be willing to reveal it?


Top
 Profile  
 
 Post subject: Re: Greasemonkey
PostPosted: Sun Aug 09, 2009 5:12 pm 
Offline

Joined: Mon Nov 19, 2007 6:29 pm
Posts: 1832
Location: Florida
Muhandes wrote:
Satan wrote:
This would be much more easily done in a bot like in perl or php... JS kinda sucks... But overall the methods aren't that dissimilar in any of the languages, you've just got language limitations to deal with in JS. Technically, with a few modifications, the phpbot can already do what you want it to do. But the phpbot's got several bugs in it, so >.>


One problem is that the phpbot is non-interactive. In many cases I see a problem in the spade run very early and I can stop it before 300 turns are wasted. At the current turn/day this is an issue. Perhaps it can be made more verbose and more interactive?
Then there is the issue of the bugs you mentioned.
I am also a bit worried about sending my password, though this might be just lack of knowledge of how it is done.

Bottom line, I don't really mind if the tool is JS or phpbot, as long as it does what is required.

Edit: After posting this I realized one other problem. The code for phpbot isn't open. Would you be willing to reveal it?


You don't need to worry about sending the password. The password isn't stored, it's forwarded directly from my server to Ryme's for login, so no one sees it. As for making the phpbot code open, can't do that. It has code for IP tracking measures and the quest stuff, which is part of my agreement with Ryme to have it available for other players. If it was open, other people could just host it themselves and remove those parts rather easily.


Top
 Profile  
 
 Post subject: Re: Greasemonkey
PostPosted: Mon Aug 10, 2009 9:36 am 
Offline
User avatar

Joined: Sat Apr 07, 2007 6:48 pm
Posts: 477
Location: Also Through The Dimensional Gate
Counting how many times you get each adventure and how many time you get each item is very similar codewise. However, I don't think anyone has even begun doing either of those two things for phpbot. I might be willing to take a look this week. Sate, please send me the code when you've got a sec.

Combat and non-combat is much easier to do, and I think I could easily add it in if I can get a copy of the current code from Sate (actually, he could probably do it in the time it would take him to send the code to me and then take my code and update the site).

_________________
Image


Top
 Profile  
 
 Post subject: Re: Greasemonkey
PostPosted: Mon Aug 10, 2009 5:53 pm 
Offline

Joined: Mon Nov 19, 2007 6:29 pm
Posts: 1832
Location: Florida
When we renovated Olaf's phpbot code, I added in item tracking. Although I should probably make a separate array for tracking by encounter. Probably can do that via the array we'd have to make for tracking encounters, so no big deal, either. I'll send the code as soon as I remember your email address >.>


Top
 Profile  
 
 Post subject: Re: Greasemonkey
PostPosted: Fri Sep 04, 2009 4:11 pm 
Offline

Joined: Tue Feb 12, 2008 1:22 pm
Posts: 1359
Anyone know how to edit the autoattack script so that it can throw a star before attacking to death?


Top
 Profile  
 
 Post subject: Re: Greasemonkey
PostPosted: Fri Sep 04, 2009 7:49 pm 
Offline
User avatar

Joined: Thu Sep 06, 2007 10:56 pm
Posts: 1466
Location: Berkeley when at school, San Diego when at home
My request would fulfill yours, for sure.

_________________
Image
Vote for TH on global rankings!


Top
 Profile  
 
 Post subject: Re: Greasemonkey
PostPosted: Thu Sep 24, 2009 9:14 pm 
Offline
User avatar

Joined: Sun Apr 08, 2007 1:01 am
Posts: 4567
Location: the Conservatory with the lead pipe
I have a working copy. Possibly messy as hell, but here you go:

Code:
// ==UserScript==
// @name           Twilight Heros Adventure Script
// @namespace      www.twilightheroes.com
// @description    Autoadventureing for TH.
// @include        http://www.twilightheroes.com/fight.php*
// ==/UserScript==

function Select_Value_Set(SelectName, Value) {
  var SelectObject = document.getElementById(SelectName);
  for(index = 0;
    index < SelectObject.length;
    index++) {
   if(SelectObject[index].value == Value)
     SelectObject.selectedIndex = index;
   }
}

function Select_Value_Set_Name(SelectName,which, Value) {
  var SelectObject = document.getElementsByName(SelectName)[which];
  var found = false;
  for(index = 0;
    index < SelectObject.length;
    index++) {
   if(SelectObject[index].value == Value)
     SelectObject.selectedIndex = index;
     found = true;
   }
   return found;
}

function generateStratList () {
   var stratList = new Array();
   //List of attack types, any string Specification string. Each attack is seperated by a semicolon and if there is a skill use the id follows the S.
   //A = normal attack
   //S:ID = use a skill with the appropriate ID following the colon
   //IS:ID = perform the attack a specific number of times and then just use attack. Right now IS must be the only option if its being used so you can't
   //    put something like 'IS:152;A;IS:133' since you wouldn't know which IS block
   stratList['TK To Death'] = 'S:153';
   stratList['Attack then TK To Death'] = 'A;S:153';
   stratList['MJ to Death'] = 'S:156';
   stratList['PB, Mj to Death'] = 'S:163;S:156';
   stratList['Telek for '] = 'IS:153';
   stratList['MindJab for '] = 'IS:156';
   stratList['Psionic Blast for '] = 'IS:163';
   stratList['Stun Gas for '] = 'IS:101';
   stratList['Bovine Charge for '] = 'IS:52';
   stratList['Electric Net for '] = 'IS:109';
   stratList['Firestorm for '] = 'IS:12';
   stratList['Groundquake for '] = 'IS:4';
   stratList['Ice Bolt for '] = 'IS:3';
   stratList['Lightning Bolt for '] = 'IS:6';
   stratList['Shock Grenade for '] = 'IS:113';
   stratList['Throw Sparks for '] = 'IS:1';
   stratList['Tornadoe for '] = 'IS:9';
   stratList['Rhino Trample for '] = 'IS:60';
   
   var htmlStrat = '\n<SELECT id="Strat" onchange="updateAttackControls();">';
   htmlStrat += '<OPTION VALUE="A">Attack Only</OPTION>';
   for (keys in stratList) {
      htmlStrat += '<OPTION VALUE="'+stratList[keys]+'">'+keys+'</OPTION>';
   }
   
   htmlStrat += '</SELECT>';
   htmlStrat += '\n<script>function updateAttackControls() {               '+
      '\nvar strat = document.getElementById(\'Strat\');         '+
      '\nvar actionstuff = strat[strat.selectedIndex].value.split(\';\');   '+
      '\nvar possible = actionstuff[0].split(\':\');         '+
      '\nif (possible[0] == \'IS\') {               '+
      '\n   document.getElementById(\'control\').innerHTML = \'<input type="text" maxlength="5" size="2" id="maxAttacks"> rounds then attack.\';   '+
      '\n   } else {                     '+
      '\n   document.getElementById(\'control\').innerHTML = \'\';   '+
      '\n   }                        '+
      '\n} '+
      '</script>                        '+
         '';
   return htmlStrat;
}

function updateAttackControls() {               
   var strat = document.getElementById('Strat');         
   var actionstuff = strat[strat.selectedIndex].value.split(';');   
   var possible = actionstuff[0].split(':');         
   if (possible[0] == 'IS') {
      var currentRound = (GM_getValue('roundNumber',0) < 0? 0:GM_getValue('roundNumber',0));
      var attacksLeft = GM_getValue('maxAttacks',0) - (currentRound);
      attacksLeft = (attacksLeft < 0?0:attacksLeft);
      document.getElementById('control').innerHTML = '<input type="text" maxlength="5" size="2" id="maxAttacks" '+(GM_getValue('maxAttacks',0)!=0?'value="'+GM_getValue('maxAttacks',0)+'"':'value="0"')+'> rounds then attack.'+
                        ' <br> rounds for skill use left : '+attacksLeft;   
   } else {                     
      document.getElementById('control').innerHTML = '';   
   }                        
}
function stepToNextRound() {
   //we havent won and we are still running
   var nonComName = getNonCombatName();
   GM_log(' in the step to Next round the noncom name is '+nonComName);
   var nextButton = getNextButton(nonComName);
   GM_log('found the button '+nextButton);
   //Save the strat to use
   var strat = document.getElementById('Strat');
   GM_setValue('selectedStrat',strat[strat.selectedIndex].value);
   GM_log('Selected Strategy is '+strat[strat.selectedIndex].value);
   nextButton.click();
}

function stepToNextCombat() {
   //window.location = 'http://www.twilightheroes.com/fight.php?location=22';
   var searchy = find('.//td[contains(.,"Patrol again")]');
   if (searchy != null) {
      var linkk = find('.//a',searchy);
      window.location = linkk;
      //GM_log(" found element "+linkk);
      //GM_log(" found element "+searchy);
      
      //Save the strat to use
      var strat = document.getElementById('Strat');
      GM_setValue('selectedStrat',strat[strat.getSelectedIndex].value);
      
   }
   
}

function endOfTurn() {
   //window.location = 'http://www.twilightheroes.com/fight.php?location=22';
   var searchy = find('.//td[contains(.,"Patrol again")]');
   if (searchy != null) {
      var linkk = find('.//a',searchy);
//GM_log('end of adventure');      

      if (linkk != null) {
//GM_log('end of adventure2');      
         return true;
      }

   }

   return false;
}

function idEncounter() {
   var combatIndicator = find('.//h1[1]');
   var nonCombatIndicator = find('.//h2[1]');
   
   var type = null;
   if (combatIndicator != null) {
      GM_log(" found type combat "+combatIndicator.innerHTML);
      if ('Combat!' == combatIndicator.innerHTML) {
         type = 'combat'
      }
   }
   if (nonCombatIndicator != null) {
      if (endOfTurn()) {
         GM_log(" found type non-combat "+nonCombatIndicator.innerHTML);
         type='non-combat';
      } else {
         GM_log(" found type choice-non-combat "+nonCombatIndicator.innerHTML);
         type='choice-non-combat';
      }
   }
   return type;
}

function getNonCombatName() {
   
   var nonCombatIndicator = find('.//h2[1]');
   
   var nonname;
   if (nonCombatIndicator != null) {
      
      nonname = nonCombatIndicator.innerHTML;
   }
   GM_log(" found type choice-non-combat "+nonname);
   return nonname;
}   

function getNextButton(nonCombatName) {
GM_log('Non combat name '+nonCombatName);
var nonComChoice = new Array();

//Config the choice combats
//
//nonComChoice["Crime Never Sleeps ... or Does It?"+"choice"] = "1"; //Pick up Litter
//nonComChoice["Crime Never Sleeps ... or Does It?"+"choice"] = "2"; //Catch up with friend
nonComChoice["Crime Never Sleeps ... or Does It?"+"choice"] = "3"; //Keep Walking

nonComChoice["Crime Never Sleeps ... or Does It?"+"submitvalue"] = "Make your choice"; //Pick up Litter

nonComChoice["Pick Yer Poison"+"choice"] = "1"; //caffeine
//nonComChoice["Pick Yer Poison"+"choice"] = "2"; //PP
//nonComChoice["Pick Yer Poison"+"choice"] = "3"; //SFA

nonComChoice["Pick Yer Poison"+"submitvalue"] = "What do you do?";

//nonComChoice["Gotta Move Quick"+"choice"] = "3"; //???
nonComChoice["Gotta Move Quick"+"choice"] = "4"; //backpack
//nonComChoice["Gotta Move Quick"+"choice"] = "5"; //unlock rooftops/nothing?

nonComChoice["Gotta Move Quick"+"submitvalue"] = "Think Fast!"

nonComChoice["Glove Slap, Baby"+"choice"] = "1"; //fight knight
//nonComChoice["Glove Slap, Baby"+"choice"] = "2"; //work the rep
//nonComChoice["Glove Slap, Baby"+"choice"] = "3"; //KFC

nonComChoice["Glove Slap, Baby"+"submitvalue"] = "What do you do?"; //

nonComChoice["A Dilemma of the Horns"+"choice"] = "6"; // money/rep
//nonComChoice["A Dilemma of the Horns"+"choice"] = "7"; //item
//nonComChoice["A Dilemma of the Horns"+"choice"] = "8"; //squat

nonComChoice["A Dilemma of the Horns"+"submitvalue"] = "What do you do?"; //

nonComChoice["Intermission"+"choice"] = "1"; // Exit stage left
//nonComChoice["Intermission"+"choice"] = "2"; //Exit stage right
//nonComChoice["Intermission"+"choice"] = "3"; //Exit fourth wall

nonComChoice["Intermission"+"submitvalue"] = "Pick Your Exit";

///nonComChoice["Shipping Clerk"+"choice"] = "1"; // lousy caf
//nonComChoice["Shipping Clerk"+"choice"] = "2"; //money/rep
nonComChoice["Shipping Clerk"+"choice"] = "3"; //xp

nonComChoice["Shipping Clerk"+"submitvalue"] = "What do you do?";

nonComChoice["Two Paths Diverged in a Prehistoric Wood"+"choice"] = "1"; // pegasus - or fight if the option doesn't exist
//nonComChoice["Two Paths Diverged in a Prehistoric Wood"+"choice"] = "2"; //lame item
//nonComChoice["Two Paths Diverged in a Prehistoric Wood"+"choice"] = "3"; //lame item 2

nonComChoice["Two Paths Diverged in a Prehistoric Wood"+"submitvalue"] = "What do you do?";

//Castle Non combats
nonComChoice["Forgot to Mention the Crystal Skulls"+"choice"] = "5";
//nonComChoice["Forgot to Mention the Crystal Skulls"+"choice"] = "6";
//nonComChoice["Forgot to Mention the Crystal Skulls"+"choice"] = "7";
nonComChoice["Forgot to Mention the Crystal Skulls"+"submitvalue"] = "Make your choice";

//nonComChoice["Behind Door Number Three ..."+"choice"] = "1"; //Grab Nearest
//nonComChoice["Behind Door Number Three ..."+"choice"] = "2"; //Investigate
//nonComChoice["Behind Door Number Three ..."+"choice"] = "3"; //Check the experimental
nonComChoice["Behind Door Number Three ..."+"choice"] = "4"; //Forget
nonComChoice["Behind Door Number Three ..."+"submitvalue"] = "Go with the plan";

var nextButton;
if (nonCombatName != null) {
GM_log(" non combat value is "+nonComChoice[nonCombatName+"choice"]);
var radiochoice = find('.//input[@type="radio" and @name="choice" and @value="'+nonComChoice[nonCombatName+"choice"]+'"]');
var radiosetchoice = find('.//input[@type="radio" and @name="choice" and @value="4"]');
if (radiosetchoice != null) {
radiosetchoice.checked=true;}
else{
//GM_log('attempting to use this choice '+radiochoice.value);
if (radiochoice != null) {
radiochoice.checked=true;}}
nextButton=find('.//input[@type="submit" and @value="'+nonComChoice[nonCombatName+"submitvalue"]+'"]');
GM_log(" Found noncombat button "+nextButton);
} else {
//Handle combat options
var strategy = GM_getValue('selectedStrat','A').split(';');
var round = (GM_getValue('roundNumber', 0)>=strategy.length?strategy.length-1:GM_getValue('roundNumber', 0));
GM_log("round option "+strategy[round]);
var selectedAction = strategy[round].split(':');
//GM_log("round option option "+selectedAction[0]+' With option '+selectedAction[1]);
if (selectedAction[0]=='A') {
nextButton=find('.//input[@type="submit" and contains(@value,"Attack")]');}
else if (selectedAction[0]=='S') {
nextButton=find('.//input[@type="submit" and contains(@value,"Skill")]');
if (!Select_Value_Set_Name('pickwhich',0,selectedAction[1])) {
//If there is no action to select then fall back to attack
nextButton=find('.//input[@type="submit" and contains(@value,"Attack")]');} }
else if (selectedAction[0]=='IS') {
var currentRound = (GM_getValue('roundNumber',0) < 0? 0:GM_getValue('roundNumber',0));
var attacksLeft = GM_getValue('maxAttacks',0) - (currentRound);
if (attacksLeft > 0) {
nextButton=find('.//input[@type="submit" and contains(@value,"Skill")]');
if (!Select_Value_Set_Name('pickwhich',0,selectedAction[1])) {
//If there is no action to select then fall back to attack
nextButton=find('.//input[@type="submit" and contains(@value,"Attack")]');}}
else {
nextButton=find('.//input[@type="submit" and contains(@value,"Attack")]');}}
else if (selectedAction[0]=='I') {
nextButton=find('.//input[@type="submit" and contains(@value,"Item")]');
if (!Select_Value_Set_Name('pickwhich',1,selectedAction[1])) {
//If there is no action to select then fall back to attack
nextButton=find('.//input[@type="submit" and contains(@value,"Attack")]');}}}
return nextButton;}

//GM_log("encounter is "+idEncounter());
//idEncounter();
var imageTD = find('.//img[@border="3"]/..');
if (imageTD) {

   var victory = /Victory!/;
   var loss = / /;
   //GM_log(imageTD.tagName);
   var last = find('./*[last()]',imageTD);
   //GM_log(last.tagName);
   var weWon = victory.exec(document.body.innerHTML);
   
   var advTable = document.createElement("table");
   var advRow = document.createElement("tr");
   var advCell = document.createElement("td");
   var buttontype= null;
   var displayRound = null;
   
   if (endOfTurn()) {
      //clean up from a victory
      //GM_setValue('running',false);

      GM_setValue('turnsLeft',GM_getValue('turnsLeft',0)-1);

      var round = GM_getValue('roundNumber',-1)+1;
      displayRound= round;
      GM_setValue('roundNumber', -1);
      if (GM_getValue('running',false)&&(GM_getValue('turnsLeft',false) > 0)){
         //Victory and we need to patrol again, find the hyperlink and navigate to it.
         GM_setValue('delayID',setTimeout(stepToNextCombat,30));      
      } else {
         //at the end of the turns.
         GM_setValue('running',false);
      }

   } else {
      //Update the round count

      var round = GM_getValue('roundNumber',-1)+1;
      //GM_log('round '+round);
      GM_setValue('roundNumber', round);      
      displayRound= GM_getValue('roundNumber', -1);      
      
   }
   
   if (GM_getValue('turnsLeft',false) <= 0) {
      GM_setValue('running',false);
   }
   
   if (GM_getValue('running',false)) {
      buttontype = '<br><input type="button" id="stop" value="Stop">';   
   } else {
      buttontype = '<br><input type="button" id="start" value="Click to Start">';
   
   }
   advCell.innerHTML= 'Battle Computer : Combat Round '+displayRound +
   '<br> <input type="text" maxlength="5" id="turns" value="'+(GM_getValue('turnsLeft',false)?GM_getValue('turnsLeft',false):'0')+
   '">'+generateStratList()+'<div id="control"></div>'+
   buttontype;
   advRow.insertBefore(advCell,null);
   advTable.insertBefore(advRow,null);
   imageTD.insertBefore(advTable,null);
   Select_Value_Set('Strat',GM_getValue('selectedStrat','A')); //Default to attack if theres no selected strat.
   updateAttackControls();
   //(weWon?weWon[0]:'');


   if (document.getElementById("start")) {
      document.getElementById("start").addEventListener("click",rockIt,true);
   }
   if (document.getElementById("stop")) {
      document.getElementById("stop").addEventListener("click",shutDown,true);
   }
   
   if ((weWon == null)&&(GM_getValue('running',false))) {
      GM_setValue('delayID',setTimeout(stepToNextRound,20));
   }
}

function find(xp,location) {
   if(!location)location = document;
   var temp = document.evaluate(xp, location, null, XPathResult.FIRST_ORDERED_NODE_TYPE,null);
   return temp.singleNodeValue;
}

function rockIt() {
   if (document.getElementById("turns").value <=0) return false;
   GM_setValue("running", true);
   
   var strat = document.getElementById('Strat');
   GM_setValue('selectedStrat',strat[strat.selectedIndex].value);
   GM_setValue('turnsLeft',document.getElementById("turns").value);
   if (document.getElementById("maxAttacks")) {
      GM_setValue('maxAttacks',document.getElementById("maxAttacks").value);
   }
   //GM_setValue("turns_left", document.getElementById("turns").value-1);
   //document.getElementsByName("heads")[0].click();
   var attackButton = find('.//input[@type="submit" and contains(@value,"Attack")]');
   //var attackButton =
   if (endOfTurn()) {
      stepToNextCombat();
   }
   else if (attackButton) {
      attackButton.click();
      
   }
}

function shutDown() {
   //if (document.getElementById("turns").value <=0) return false;
   GM_setValue("running", false);
   
   var strat = document.getElementById('Strat');
   GM_setValue('selectedStrat',strat[strat.selectedIndex].value);
   //GM_setValue("turns_left", document.getElementById("turns").value-1);
   //document.getElementsByName("heads")[0].click();
   if (GM_getValue('delayID')) {
      clearTimeout(GM_getValue('delayID'));
   }
}      


   

_________________
Image
The churches are empty / The priest has gone home / And we are left standing / Together alone
--October Project: "Dark Time"


Top
 Profile  
 
 Post subject: Re: Greasemonkey
PostPosted: Fri Sep 25, 2009 2:53 am 
Offline

Joined: Mon Nov 03, 2008 12:54 am
Posts: 732
I had to turn off all other scripts to make this work, but now it does and it's very fine.


Top
 Profile  
 
 Post subject: Re: Greasemonkey
PostPosted: Fri Sep 25, 2009 4:23 am 
Offline
User avatar

Joined: Sun Apr 08, 2007 1:01 am
Posts: 4567
Location: the Conservatory with the lead pipe
Well... you need to turn off other combat scripts. Outfit Manager, XP Status, and SellCube Items all play nicely with it. Actually, now that I think about it, so does Stationary Combat Buttons.

_________________
Image
The churches are empty / The priest has gone home / And we are left standing / Together alone
--October Project: "Dark Time"


Top
 Profile  
 
 Post subject: Re: Greasemonkey
PostPosted: Sat Sep 26, 2009 11:04 am 
Offline

Joined: Mon Nov 03, 2008 12:54 am
Posts: 732
I had to turn off Stationary Combat Buttons, Choice Selection Saver, Continuous Attack, so far, as expected, but also the wikifier, which I wasn't expecting.


Top
 Profile  
 
 Post subject: Re: Greasemonkey
PostPosted: Sat Sep 26, 2009 2:40 pm 
Offline
User avatar

Joined: Mon Oct 27, 2008 11:13 pm
Posts: 1034
Location: RP Channel... we have cake!!
how can I install those "improved" adventure scripts?

_________________
Image
Top 10 on the Total Post list


Top
 Profile  
 
 Post subject: Re: Greasemonkey
PostPosted: Tue Sep 29, 2009 12:00 am 
Offline

Joined: Mon Nov 03, 2008 12:54 am
Posts: 732
Thanks for posting it.

Can you add the other choice adventures please? I noticed specifically that "Just Deserts" is missing.


Top
 Profile  
 
 Post subject: Re: Greasemonkey
PostPosted: Tue Sep 29, 2009 4:46 am 
Offline

Joined: Mon Nov 03, 2008 12:54 am
Posts: 732
Turns is the one thing I have the most plenty of. Here's a copypasta of Just Deserts. Let me know if you need any other adventure.

Code:
<HTML><head><link rel='stylesheet' href='includes/style.css'><script type='text/javascript'>if (self.location == top.location)
top.location.href = 'index2.php';</script><script language=Javascript src='http://www.twilightheroes.com/scripts/popup.js'></script></head><BODY>
<table border=0 cellspacing=0 cellpadding=4 width='100%'><tr valign=top><td width='100%'><h2>Just Deserts</h2><font class='text'>

From the air you can reach farther into the desert than you ever have before. This perspective allows you to see all kinds of things that you've never noticed before, even in the dark. It's dim, but there's some ambient light from the city and night sky. You find yourself intrigued by a strange circular crater near the base of an old volcano. In fact, is that a glint of metal? Could something have crashed there? The crater looks old--really old--but you decide to investigate it anyway.<BR><BR>It takes a while to track down the metal that you saw, and when you do you're disappointed to find that it's just the burnt-out shell of a car amid a pile of other litter. You pick up a loose hubcap, rotating it in your hands as you look around. Something still doesn't feel right about the crater; your sense of something out of place is jangling like a spider's web reacting to the footfall of an insect. You can't figure out what's bothering you, though.

<BR><BR>What do you do?<form action=fight.php method=post><input type=radio name=choice value='1' checked> See if there's anything good in the car.<BR><input type=radio name=choice value='2'> Spend a few minutes cleaning up the area. <BR><input type=radio name=choice value='3'> See how far you can toss the hubcap.<BR><input type=submit value='Take Action'></form>




</td><td align=center><img src='images/foes/burned-car.jpg' height=200 width=200 border=3><BR><b></b></td></tr></table><script type='text/javascript'>top.nav.location='nav.php';</script>

</font>

</BODY>
</HTML>


Top
 Profile  
 
 Post subject: Re: Greasemonkey
PostPosted: Tue Sep 29, 2009 6:40 pm 
Offline
User avatar

Joined: Thu Sep 06, 2007 10:56 pm
Posts: 1466
Location: Berkeley when at school, San Diego when at home
You know, you should probably update the Choice Selection Saver script instead of combining both. It'd be easier to manage, not to mention you don't have to keep adding on choices. Just add code to look for the 4th choice and you're done.

_________________
Image
Vote for TH on global rankings!


Top
 Profile  
 
 Post subject: Re: Greasemonkey
PostPosted: Tue Sep 29, 2009 7:58 pm 
Offline
User avatar

Joined: Thu Sep 06, 2007 10:56 pm
Posts: 1466
Location: Berkeley when at school, San Diego when at home
Why use 2? So that you don't fuck up the giant one?

Seriously, as a coder, I wouldn't put everything in one file. I'd separate it in a way that's logical. Not saying that sticking it together is BAD, but I think it'd be much easier and better managing two separate but modular scripts.

Also, IIRC, the Selection Saver works for ALL choice adventures without the need of updating it. So literally all you'd have to do is catch the 4th option. Much easier to manage a completed script and less code in the other script, right?

_________________
Image
Vote for TH on global rankings!


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 353 posts ]  Go to page Previous  1 ... 3, 4, 5, 6, 7, 8, 9  Next

All times are UTC - 7 hours


Who is online

Users browsing this forum: No registered users and 3 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group