Blizzhackers

Home of the Dupe since 2001

* Login   * Register    * FAQ    * Search

Join us on IRC: #bh@irc.synirc.net (or Mibbit Web IRC)


It is currently Tue Oct 17, 2017 12:58 am


All times are UTC [ DST ]





Post new topic Reply to topic  [ 4 posts ] 
Author Message
 Post subject: barb bo a runner multiple times in one run
PostPosted: Fri Jun 09, 2017 5:28 pm 
 
User
User

Joined: Tue Jul 06, 2004 7:47 pm
EDIT: i modified the BattleOrdersMe code so that it will call again if the first time didn't work, and then quit after not getting BO for the second time. if you want your bot to continue to run after missing BO, replace the quit(); on line 47 with return true;

i wrote a script to make my barb BO my pali multiple times during his run. i'm sharing it with you.

i don't know how to make a script run more than once in a single run, so i made copies A, B, C, etc. so that it runs again. you too can add multiple in a run by doing a few things:
1. make a copy of BattleOrdersMe.js and rename it to BattleOrdersMeX.js where X = A, B, C, etc.
2. edit the copy in notepad (or similar text editor) and change line 7 to match the filename, e.g. function BattleOrdersMeA() {
3. add the line Scripts.BattleOrdersMeX = true; into your character config at the place where you want.
4. make as many copies as you like, be sure to make them each unique.

now to the good part. make a blank text file and rename it to BattleOrdersMe.js and place it in your kolbot/libs/bots folder. copy and paste the following:
/**
*   @filename   BattleOrdersMe.js
*   @author      onthos
*   @desc      get BO at catacombs 2
*/

function BattleOrdersMe() {

   var callMe = "bo me",
       sendMe = "there ya go",
       hasSent = false,
       calledTwice = false,
       tick;


   addEventListener("chatmsg",

      function (nick, msg) {
         if (msg === sendMe) {
            hasSent = true;
         }
      });

   Town.doChores();

   try {
      Pather.useWaypoint(35, true); // catacombs
   } catch (wperror) {
      showConsole();
      print("ÿc1Failed to take waypoint.");
      quit();
   }

   Pather.moveTo(me.x + 6, me.y + 6);

   say(callMe);

   tick = getTickCount();

   while(!hasSent) {
      if ( (getTickCount() - tick) > 10000) {
         if (!calledTwice) {
            say(callMe);
            calledTwice = true;
         } else if (calledTwice && !hasSent && (getTickCount() - tick) > 20000) {
            print("ÿc1Failed to get BO.");
            quit();
         }
      }
      delay(2000);
   }
   
   return true;
}


make another blank text file and rename it to BattleOrdersYou.js and place it in the same bots folder. copy and paste the following:
/**
*   @filename   BattleOrdersYou.js
*   @author      onthos
*   @desc      give BO at catacombs 2 when called
*/

function BattleOrdersYou() {

   var callMe = "bo me",
       sendMe = "there ya go",
       hasCalled = false;

   addEventListener("chatmsg",

      function (nick, msg) {
         if (msg === callMe) {
            hasCalled = true;
         }
      });

   Town.doChores();

   try {
      Pather.useWaypoint(35, true); // catacombs
   } catch (wperror) {
      showConsole();
      print("ÿc1Failed to take waypoint.");
      quit();
   }

   Pather.moveTo(me.x + 6, me.y + 6);

   while (true) {
      if (hasCalled) {
         Precast.doPrecast(true);
         say(sendMe);
         hasCalled = false;
      }
      delay(1000);
   }

   return true;
}


add the line Scripts.BattleOrdersYou = true; to your barb config below the useraddon line. add the line Scripts.BattleOrdersMe = true; in between the scripts when you want to get bo. most likely you will have BattleOrdersMe before every area script and then BattleOrdersMeX later in the run in various places.


Last edited by onthos on Sun Jun 11, 2017 5:42 pm, edited 3 times in total.
Top
 Profile  
 Post subject: Re: barb bo a runner multiple times in one run
PostPosted: Fri Jun 09, 2017 7:37 pm 
 
User
User

Joined: Tue Jun 05, 2012 7:10 am
You can make them the same script and just add a config.barb = ""
then if profile is barb, bo, if profile is not barb, receive bo.

also instead of doing x y z, you can run the same script multiple times.. OR you can just have your main script monitor when bo runs out, then send a message to your barb running the bo script to meet in cata 2 for bo.

Top
 Profile  
 Post subject: Re: barb bo a runner multiple times in one run
PostPosted: Fri Jun 09, 2017 8:18 pm 
 
User
User

Joined: Tue Jul 06, 2004 7:47 pm
i tried putting the same script in my pali config multiple times, but when it got to it the 2nd time it didn't run.

also, i couldn't figure out how the config.battleordersme.something worked, i would get an error when i used config variables that way so i made them separate scripts.

how can i run the same script multiple times?

EDIT: i found this post regarding multiples of the same script. this is the same way i realized it, but i will try to consolidate the script into one single and not split it.

later... i figure i will keep it as two scripts, since this way it is easier to make copies of the BattleOrdersMe without having to change a "Mode" variable name for every script. maybe i could write it so that they all share a config variable, but it is fine the way it is.

Top
 Profile  
 Post subject: Re: barb bo a runner multiple times in one run
PostPosted: Tue Jun 13, 2017 12:47 pm 
 
User
User

Joined: Wed Oct 01, 2003 10:24 pm
Using ingame chat is just asking for a ban!

To accomplish re-BO I modified the TownChicken.js toolsthread. It's not quite as fleshed out as your script, and requires you to hardcode the barbs name on line 34: var boGiver = "DollsAPoppin" - change this to your BO barbs name.

I didn't want to add a seperate config value, so I just hardcoded the name


Setup your regular BO settings in your character config and whenever BO is not active each character will individually query the barb for a new BO.

Meant for use with HC - replace your TownChicken.js with this and don't forget to change the barbs name on line 34 or add a new config value to each of your non-BOers with the BOers name.


/**
*   @filename   TownChicken.js
*   @author      kolton
*   @desc      handle town chicken
*/

js_strict(true);

include("json2.js");
include("NTItemParser.dbl");
include("OOG.js");
include("Gambling.js");
include("CraftingSystem.js");
include("common/Attack.js");
include("common/Cubing.js");
include("common/Config.js");
include("common/CollMap.js");
include("common/Loader.js");
include("common/Misc.js");
include("common/Pickit.js");
include("common/Pather.js");
include("common/Precast.js");
include("common/Prototypes.js");
include("common/Runewords.js");
include("common/Storage.js");
include("common/Town.js");

function main() {
   var townCheck = false;
   var lastArea = 0;
   var lastAct = 0;
   var forceGiveBO = false;
   var boReceiver = "";
   var boGiver = "DollsAPoppin";

   this.togglePause = function () {
      var i,   script,
         scripts = ["default.dbj", "tools/antihostile.js", "tools/rushthread.js", "tools/CloneKilla.js"];

      for (i = 0; i < scripts.length; i += 1) {
         script = getScript(scripts[i]);

         if (script) {
            if (script.running) {
               if (i === 0) { // default.dbj
                  print("c1Pausing.");
               }

               script.pause();
            } else {
               if (i === 0) { // default.dbj
                  if (!getScript("tools/clonekilla.js")) { // resume only if clonekilla isn't running
                     print("c2Resuming.");
                     script.resume();
                  }
               } else {
                  script.resume();
               }
            }
         }
      }

      return true;
   };
   this.scriptsOff = function () {
      var i,   script,
         scripts = ["default.dbj", "tools/antihostile.js", "tools/rushthread.js", "tools/CloneKilla.js"];

      for (i = 0; i < scripts.length; i += 1) {
         script = getScript(scripts[i]);

         if (script) {
            if (script.running) {
               if (i === 0) { // default.dbj
                  print("c1Pausing.");
               }

               script.pause();
            }
         }
      }

      return true;
   };
   this.scriptsOn = function () {
      var i,   script,
         scripts = ["default.dbj", "tools/antihostile.js", "tools/rushthread.js", "tools/CloneKilla.js"];

      for (i = 0; i < scripts.length; i += 1) {
         script = getScript(scripts[i]);

         if (script) {
            if (!script.running) {
               if (i === 0) { // default.dbj
                  if (!getScript("tools/clonekilla.js")) { // resume only if clonekilla isn't running
                     print("c2Resuming.");
                     script.resume();
                  }
               } else {
                  script.resume();
               }
            }
         }
      }

      return true;
   };
   this.giveBO = function () {
      var players = getUnit(0);
      if(players) {
         do {  // give bo clause
               if(me.area == 35) {
                  //Pather.moveTo(me.x + 6, me.y + 6);
                  if (Misc.getNearbyPlayerCount() > 1) {
                     if (getTickCount() - tick >= failTimer * 1000) {
                        showConsole();
                        print("c1BO timeout fail.");
                        quit();
                     }
                     while(players.getState(32) == false) {
                        Precast.doPrecast(true);
                        delay(1000);
                     }
                  }
               }
         } while (players.getNext());
         return true;
       }
       return false;
      
   };
   this.returnToScriptsArea = function () {
      var actArea = [1,1,40,75,103,109];
      Pather.useWaypoint(actArea[lastAct], true);
      while(me.area !== actArea[lastAct]) {
         delay(50);
      }
      var portal = Pather.getPortal(lastArea, me.name);
      if(portal) {
         if(portal.objtype === lastArea && portal.objtype !== 35) {
            Pather.usePortal(lastArea, me.name);
         }
      }
   };
   addEventListener("scriptmsg",
      function (msg) {
         if (msg === "townCheck") {
            if (me.area === 136) {
               print("Can't tp from uber trist.");
            } else {
               townCheck = true;
            }
         }
         if(msg === "actCheck") {
            lastAct = 0;
            lastArea = 0;
            while(lastAct === 0) {
               lastAct = me.act;
               lastArea = me.area;
            }
            print("saving our act " + lastAct + " and area " + lastArea);
         }
         
      });
      
      addEventListener("copydata", function(mode, msg) {
         if(mode === 101 && me.classid === 4 && !forceGiveBO) {
            forceGiveBO = true;//someone has requested BO, set forceBO check to true
            boReceiver = msg;
            print("receiving message givemebo");
         }
      });

   // Init config and attacks
   D2Bot.init();
   Config.init();
   Pickit.init();
   Attack.init();
   Storage.Init();
   CraftingSystem.buildLists();
   Runewords.init();
   Cubing.init();

   print("c2TownChicken thread loaded.");

   while (true) {
      if(me.name !== "autoblizz" && me.name !== "autoautoauto") { // hardcoded bots not to request BO
         if (Config.BattleOrders.Mode === 0 && forceGiveBO) { // give BO
            print("c1Pausing. c2BO Request");
            var thisScript = getScript(true);
            thisScript.send("actCheck");
            if(thisScript.running) {
               this.scriptsOff();
            }
            Town.goToTown();
            if(me.inTown) {
               try {
                  Pather.useWaypoint(35, true); // catacombs
               } catch (wperror) {
                  showConsole();
                  print("c1Failed to take waypoint.");
                  quit();
               }
            }
            while(me.area !== 35) {
               delay(50);
            }
            if(this.giveBO()) {
               delay(1000);
               // return to last area
               this.returnToScriptsArea();
               if(me.area === lastArea) {
                  this.scriptsOn();
               }
               forceGiveBO = false;
            }
         }
         
         if(me.getState(32) == false && Config.BattleOrders.Mode === 1) { // receive BO clause
            print("c1Pausing. c2RequestingBO");
            var thisScript = getScript(true);
            thisScript.send("actCheck");
            forceGiveBO = true;
            this.scriptsOff();
            Town.goToTown();
            var
               ticks = getTickCount(),
               ftjTimer = 30;// Get BO
               
               while(me.getState(32) == false) {
                  if(Misc.inMyParty(boGiver)) { // hardcoded name of your BO barb
                     break;
                  }
                     delay(200);
                     if (getTickCount() - ticks >= ftjTimer * 1000) {
                           showConsole();
                           print("c1No barb in party, BO fail");
                           quit();
                        }
               }
            
            if (me.inTown) {
               try {
                  Pather.useWaypoint(35, true); // catacombs
               } catch (wperror) {
                  showConsole();
                  print("c1Failed to take waypoint.");
                  quit();
               }
            }

            var i,
               tick = getTickCount(),
               failTimer = 60;// Get BO
               
            if(me.area === 35) {
               Pather.moveTo(me.x + 6, me.y + 6)
               while(me.getState(32) == false) {
                  sendCopyData(null,"barb",101,"givemebo");
                  delay(1000);
                  if (getTickCount() - tick >= failTimer * 1000) {
                        showConsole();
                        print("c1BO timeout fail.");
                        quit();
                     }
               }
                     
               if (me.getState(32) == true) {   
                  delay(1000);
                  // go back to last area by returning to our previous act and taking our own TP.
                  this.returnToScriptsArea();
                  if(me.area === lastArea) {
                     this.scriptsOn();
                  }
                  forceGiveBO = false;
               }
            }
                     
                  

            
         }
      }
         if (!me.inTown && (townCheck ||
            (Config.TownHP > 0 && me.hp < Math.floor(me.hpmax * Config.TownHP / 100)) ||
            (Config.TownMP > 0 && me.mp < Math.floor(me.mpmax * Config.TownMP / 100)))) {
            this.togglePause();

            while (!me.gameReady) {
               delay(100);
            }

            try {
               me.overhead("Going to town");
               Town.visitTown();
            } catch (e) {
               Misc.errorReport(e, "TownChicken.js");
               scriptBroadcast("quit");

               return;
            } finally {
               this.togglePause();

               townCheck = false;
            }
         }

         delay(50);
      
   }
}

Top
 Profile  
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 4 posts ] 

All times are UTC [ DST ]


Who is online

Users browsing this forum: No registered users and 9 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:  
cron