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 Thu Feb 22, 2018 9:31 pm


All times are UTC [ DST ]





Post new topic Reply to topic  [ 4753 posts ]  Go to page Previous  1 ... 313, 314, 315, 316, 317
Author Message
 Post subject: Re: Official kolbot Support Thread
PostPosted: Tue Jul 11, 2017 1:14 am 
 
User
User

Joined: Mon Jun 06, 2011 3:07 am
My key CSV's keep telling me that they key was for a different game
how do i fix this


Get keys for the right game?


yes they are the keys im using through Etal at the moment:
they work if used as INSTALLED Keys

but that means i gottahave installations for Each key... which is how i have it on etal for the same reason the d2keyMPQ says same thing when loaded

Top
 Profile  
 Post subject: Re: Official kolbot Support Thread
PostPosted: Tue Jul 11, 2017 1:15 am 
 
D2BS Dev
D2BS Dev
User avatar

Joined: Sun Jun 22, 2008 7:00 pm
My key CSV's keep telling me that they key was for a different game
how do i fix this


Get keys for the right game?


yes they are the keys im using through Etal at the moment:
they work if used as INSTALLED Keys

but that means i gottahave installations for Each key... which is how i have it on etal for the same reason the d2keyMPQ says same thing when loaded


using raw key loading should work for you, do your cdkeys load properly in the "add key" dialog?

_________________
NipCheck -- An offline .nip checker
PhotoGrid Sharp -- An image collage maker with formatting features
d2bot# with kolbot -- For live support: irc://irc.synirc.net/d2bs

Top
 Profile  
 Post subject: Re: Official kolbot Support Thread
PostPosted: Tue Jul 11, 2017 1:17 am 
 
User
User

Joined: Mon Jun 06, 2011 3:07 am
My key CSV's keep telling me that they key was for a different game
how do i fix this


Get keys for the right game?


yes they are the keys im using through Etal at the moment:
they work if used as INSTALLED Keys

but that means i gottahave installations for Each key... which is how i have it on etal for the same reason the d2keyMPQ says same thing when loaded


using raw key loading should work for you, do your cdkeys load properly in the "add key" dialog?

they seemed to? im on the IRC can you help me there? ill load up Teamviewer if needbe

Top
 Profile  
 Post subject: Re: Official kolbot Support Thread
PostPosted: Tue Jul 11, 2017 10:14 am 
 
User
User

Joined: Mon Aug 24, 2009 5:19 pm
Quote:
The version you downloaded is only for 1.14d, it does not have the 1.13d d2bs.dll, d2m.dll

If you want to use version hack, you need to get the files from the link you posted, and get the 1.13d d2m.dll (this can be found in the branch patch-113d branch in the github link.

Unless there is some reason you need 1.13d, I would recommend just upgrading to 1.14d.


oh wow.
thanks man! Works perfect now

Top
 Profile  
 Post subject: Re: Official kolbot Support Thread
PostPosted: Tue Jul 11, 2017 5:13 pm 
 
User
User

Joined: Mon Aug 24, 2009 5:19 pm
How do i prevent my enchant bot to give out waypoints?
Just disable it i mean, so only cows and enchant

Top
 Profile  
 Post subject: Re: Official kolbot Support Thread
PostPosted: Tue Jul 25, 2017 7:11 pm 
 
User
User

Joined: Fri Feb 17, 2006 1:24 am
@emagel you can just delete out the command in the Char config :)

   Scripts.Enchant = true;
      Config.Enchant.Triggers = ["chant", "cows", "", "timeleft", "givegold", "takegold", "ngvote", ""]; // Chat commands for enchant, cow level and waypoint giving etc...
      //Config.Enchant.Triggers = ["chant", "cows", "wps", "time left", "givegold", "takegold", "ngvote", "stats"]; // Empty "" for DISABLE the function.
      Config.Enchant.GetLeg = false; // Get Wirt's Leg from Tristram. If set to false, it will check for the leg in town.
      Config.Enchant.UseLogs = false; // Loging?
         Config.Enchant.LogName = "XVDHFFGGF"; //name of chanter used for logging
      Config.Enchant.AutoChant = false; // Automatically enchant nearby players and their minions
      Config.Enchant.GameLength = 13; // Game length in minutes
      Config.Enchant.GoldDrop = 5000; // Gold she drops when users use givegold cmd   
      Config.Enchant.NGVLength = 5; // Minutes that must pass before allowing people to vote for next game     
      Config.Enchant.JoinMsg  = "Enchant by XVDHFFGGF"; // Join msg LEAVE BLANK TO DISABLE
      Config.Enchant.EndMsg  = ""; // endgame msg LEAVE BLANK TO DISABLE
      Config.Enchant.GiveRc = false; // Do you want to give/take raven claws.
         Config.Enchant.GRC = "grabrc"; // Command used to grab raven claw
         Config.Enchant.DRC = "droprc"; // Command used to grab raven claw
         Config.Enchant.LastRc = "Last raven claw was used by "; // Msg calling out last person that used a rc if she is out
         Config.Enchant.NoRc = "No raven claws available if you want you can bring me some.";   //Msg used if no raven claw is avaliable
         Config.Enchant.HaveRc = "Enjoy the raven claw please return it when you are finished.";  //Msg used if a raven claw is dropped
         Config.Enchant.ThanksRc = "Thanks for returning the raven claw";  // Msg used when a user donates raven claw
      Config.Enchant.Rusher = false;  //Do you want to rush?
         Config.Enchant.Andy = "rush andariel";
         Config.Enchant.Staff = "rush staff";
         Config.Enchant.Amulet = "rush amulet";
         Config.Enchant.Summoner = "rush summoner";
         Config.Enchant.Duri = "rush duriel";
         Config.Enchant.Trav = "rush travincal";
         Config.Enchant.Meph = "rush mephisto";
         Config.Enchant.Diablo = "rush diablo";         

btw, this is the extended Enchant from magace (OfChant)

1) Now my question, is there a way, when i login to a mule by myself to press a desired key, that the logged items for that char will be updated???
2) And it would be cool, if you can add a function that makes "pause every XX games for YY seconds" --> im a Classic player, so this will be much better than shedule and it should not be hard to implement such code, aint?!?

Greetings

Top
 Profile  
 Post subject: Re: Official kolbot Support Thread
PostPosted: Sun Aug 06, 2017 3:12 am 
 
User
User

Joined: Fri Jun 04, 2010 3:02 am
Can someone tell me why kolbot is not able to run more than one instance?

Im getting "Only 1 diablo II may run at a time"

didnt this have native multi client support? or am i doing something wrong?

game version - 1.14d, no version spoof
kolbot version - 17.7.10.100

fixed - thanks dzik
Quote:
go to d2bs folder and delete d2m.dll file

Top
 Profile  
 Post subject: Re: Official kolbot Support Thread
PostPosted: Thu Aug 17, 2017 7:02 pm 
 
User
User

Joined: Thu Apr 28, 2011 11:41 am
Hey there!

Im running into a weird issue with the automuling.

It says:

syntaxerror: missing: after property id kolbot.

Below is my current mule config however i feel like i miss something.

var AutoMule = {
   Mules: {
      "Mule1":  {
         muleProfile: "mule",  // The name of mule profile in d2bot#. It will be started and stopped when needed.
         accountPrefix: "accountprefix",  // Account prefix. Numbers added automatically when making accounts.
         accountPassword: "password",  // Account password.
         charPrefix: "charprefix",  // Character prefix. Suffix added automatically when making characters.
         realm: "europe", // Available options: "useast", "uswest", "europe", "asia"
         expansion: true,
         ladder: true,
         hardcore: false,

         // Game name and password of the mule game. Never use the same game name as for mule logger.
         muleGameName: ["game", "password"], // ["gamename", "password"]

         // List of profiles that will mule items. Example: enabledProfiles: ["profile 1", "profile 2"],
         enabledProfiles: ["test","ctrpo"],

         // Stop a profile prior to muling. Useful when running 8 bots without proxies.
         stopProfile: "test","ctrpo",

         // Trigger muling at the end of a game if used space in stash and inventory is equal to or more than given percent.
         usedStashTrigger: 90,
         usedInventoryTrigger: 90,

         // Mule items that have been stashed at some point but are no longer in pickit.
         muleOrphans: true
      }
   },

   /** Torch/Anni mules
      - Torch is muled in OrgTorch script after finishing uber Tristram successfully or when starting OrgTorch script with a Torch already on the character.
      - Anni is muled after successfully killing Diablo in Palace Cellar level 3 using Config.KillDclone option or KillDClone script.
         If a profile is listed in Torch/Anni mule's enabledProfiles list, it will also do a check to mule Anni at the end of each game.
         Anni that is in locked inventory slot will not be muled.

      * Each mule will hold either a Torch or an Anni, but not both. As soon as the current mule has either one, a new one will be created.
   */
   TorchAnniMules: {
      "":  {
         muleProfile: "",  // The name of mule profile in d2bot#. It will be started and stopped when needed.
         accountPrefix: "",  // Account prefix. Numbers added automatically when making accounts.
         accountPassword: "",  // Account password.
         charPrefix: "",  // Character prefix. Suffix added automatically when making characters.
         realm: "", // Available options: "useast", "uswest", "europe", "asia"
         expansion: true,
         ladder: true,
         hardcore: false,

         // Game name and password of the mule game. Never use the same game name as for mule logger.
         muleGameName: ["", ""], // ["gamename", "password"]

         // List of profiles that will mule items. Example: enabledProfiles: ["profile 1", "profile 2"],
         enabledProfiles: [""],

         // Stop a profile prior to muling. Useful when running 8 bots without proxies.
         stopProfile: ""
      }
//##########################################################################################
   },

   inGame: false,
   check: false,
   torchAnniCheck: false,

   // *** Master functions ***
   getInfo: function () {
      var i, j, info;

      for (i in this.Mules) {
         if (this.Mules.hasOwnProperty(i)) {
            for (j = 0; j < this.Mules[i].enabledProfiles.length; j += 1) {
               if (this.Mules[i].enabledProfiles[j].toLowerCase() === me.profile.toLowerCase()) {
                  if (!info) {
                     info = {};
                  }

                  info.muleInfo = this.Mules[i];
               }
            }
         }
      }

      for (i in this.TorchAnniMules) {
         if (this.TorchAnniMules.hasOwnProperty(i)) {
            for (j = 0; j < this.TorchAnniMules[i].enabledProfiles.length; j += 1) {
               if (this.TorchAnniMules[i].enabledProfiles[j].toLowerCase() === me.profile.toLowerCase()) {
                  if (!info) {
                     info = {};
                  }

                  info.torchMuleInfo = this.TorchAnniMules[i];
               }
            }
         }
      }

      return info;
   },

   muleCheck: function () {
      var info = this.getInfo();

      if (info && info.hasOwnProperty("muleInfo") && info.muleInfo.hasOwnProperty("usedStashTrigger") && info.muleInfo.hasOwnProperty("usedInventoryTrigger") &&
            Storage.Inventory.UsedSpacePercent() >= info.muleInfo.usedInventoryTrigger && Storage.Stash.UsedSpacePercent() >= info.muleInfo.usedStashTrigger &&
               this.getMuleItems().length > 0) {
         D2Bot.printToConsole("MuleCheck triggered!", 7);

         return true;
      }

      return false;
   },

   getMule: function () {
      var info;

      info = this.getInfo();

      if (info) {
         if (this.check && info.hasOwnProperty("muleInfo")) {
            return info.muleInfo;
         }

         if (this.torchAnniCheck && info.hasOwnProperty("torchMuleInfo")) {
            return info.torchMuleInfo;
         }
      }

      return false;
   },

   outOfGameCheck: function () {
      if (!this.check && !this.torchAnniCheck) {
         return false;
      }

      var i, control, muleObj,
         stopCheck = false,
         muleInfo = {status: ""},
         failCount = 0;

      muleObj = this.getMule();

      if (!muleObj) {
         return false;
      }

      function MuleCheckEvent(mode, msg) {
         if (mode === 10) {
            muleInfo = JSON.parse(msg);
         }
      }

      addEventListener("copydata", MuleCheckEvent);
      D2Bot.printToConsole("Starting " + (this.torchAnniCheck === 2 ? "anni" : this.torchAnniCheck === 1 ? "torch" : "")  + " mule profile: " + muleObj.muleProfile, 7);

MainLoop:
      while (true) {
         // If nothing received our copy data start the mule profile
         if (!sendCopyData(null, muleObj.muleProfile, 10, JSON.stringify({profile: me.profile, mode: this.torchAnniCheck || 0}))) {
            D2Bot.start(muleObj.muleProfile);
         }

         delay(1000);

         switch (muleInfo.status) {
         case "loading":
            if (!stopCheck && muleObj.stopProfile && me.profile.toLowerCase() !== muleObj.stopProfile.toLowerCase()) {
               D2Bot.stop(muleObj.stopProfile);

               stopCheck = true;
            }

            failCount += 1;

            break;
         case "busy":
         case "begin":
            D2Bot.printToConsole("Mule profile is busy.", 9);

            break MainLoop;
         case "ready":
            control = getControl(6, 652, 469, 120, 20);

            if (control) {
               delay(200);
               control.click();
            }

            delay(2000);

            this.inGame = true;
            me.blockMouse = true;

            try {
               joinGame(muleObj.muleGameName[0], muleObj.muleGameName[1]);
            } catch (joinError) {

            }

            me.blockMouse = false;

            // Untested change 11.Feb.14.
            for (i = 0; i < 8; i += 1) {
               delay(1000);

               if (me.ingame && me.gameReady) {
                  break MainLoop;
               }
            }

            break;
         default:
            failCount += 1;

            break;
         }

         if (failCount >= 60) {
            D2Bot.printToConsole("No response from mule profile.", 9);

            break;
         }
      }

      removeEventListener("copydata", MuleCheckEvent);

      while (me.ingame) {
         delay(1000);
      }

      this.inGame = false;
      this.check = false;
      this.torchAnniCheck = false;

      // No response - stop mule profile
      if (failCount >= 60) {
         D2Bot.stop(muleObj.muleProfile);
         delay(1000);
      }

      if (stopCheck && muleObj.stopProfile) {
         D2Bot.start(muleObj.stopProfile);
      }

      return true;
   },

   inGameCheck: function () {
      var muleObj, tick, info,
         timeout = 150 * 1000, // Ingame mule timeout
         status = "muling";

      // Single player
      if (!me.gamename) {
         return false;
      }

      info = this.getInfo();

      // Profile is not a part of AutoMule
      if (!info) {
         return false;
      }

      // Profile is not in mule or torch mule game
      if (!((info.hasOwnProperty("muleInfo") && me.gamename.toLowerCase() === info.muleInfo.muleGameName[0].toLowerCase()) ||
            (info.hasOwnProperty("torchMuleInfo") && me.gamename.toLowerCase() === info.torchMuleInfo.muleGameName[0].toLowerCase()))) {
         return false;
      }

      function DropStatusEvent(mode, msg) {
         if (mode === 10) {
            switch (JSON.parse(msg).status) {
            case "report": // reply to status request
               sendCopyData(null, muleObj.muleProfile, 12, JSON.stringify({status: status}));

               break;
            case "quit": // quit command
               status = "quit";

               break;
            }
         }
      }

      function MuleModeEvent(msg) {
         switch (msg) {
         case "2":
            AutoMule.torchAnniCheck = 2;

            break;
         case "1":
            AutoMule.torchAnniCheck = 1;

            break;
         case "0":
            AutoMule.check = true;

            break;
         }
      }

      addEventListener("copydata", DropStatusEvent);
      addEventListener("scriptmsg", MuleModeEvent);
      scriptBroadcast("getMuleMode");
      delay(500);

      if (!this.check && !this.torchAnniCheck) {
         print("Error - Unable to determine mule mode");
         quit();

         return false;
      }

      muleObj = this.getMule();
      me.maxgametime = 0;

      if (!Town.goToTown(1)) {
         print("Error - Failed to go to Act 1");
         quit();

         return false;
      }

      sendCopyData(null, muleObj.muleProfile, 11, "begin");

      if (this.torchAnniCheck === 2) {
         print("ÿc4AutoMuleÿc0: In anni mule game.");
         D2Bot.updateStatus("AutoMule: In game.");
         this.dropCharm(true);
      } else if (this.torchAnniCheck === 1) {
         print("ÿc4AutoMuleÿc0: In torch mule game.");
         D2Bot.updateStatus("AutoMule: In game.");
         this.dropCharm(false);
      } else {
         print("ÿc4AutoMuleÿc0: In mule game.");
         D2Bot.updateStatus("AutoMule: In game.");
         this.dropStuff();
      }

      status = "done";
      tick = getTickCount();

      while (true) {
         if (status === "quit") {
            break;
         }

         if (getTickCount() - tick > timeout) {
            D2Bot.printToConsole("Mule didn't rejoin. Picking up items.", 9);

            Misc.useItemLog = false; // Don't log items picked back up in town.

            Pickit.pickItems();

            break;
         }

         delay(500);
      }

      removeEventListener("copydata", DropStatusEvent);
      D2Bot.stop(muleObj.muleProfile);
      delay(1000);

      if (muleObj.stopProfile) {
         D2Bot.start(muleObj.stopProfile);
      }

      if (getScript("AnniStarter.dbj")) {
         scriptBroadcast("exit");
      }

      delay(2000);
      quit();
      //delay(10000);

      return true;
   },

   dropStuff: function () {
      if (!Town.openStash()) {
         return false;
      }

      var i,
         items = this.getMuleItems();

      if (!items || items.length === 0) {
         return false;
      }

      D2Bot.printToConsole("AutoMule: Transfering items.", 7);

      for (i = 0; i < items.length; i += 1) {
         items[i].drop();
      }

      delay(1000);
      me.cancel();

      return true;
   },

   // get a list of items to mule
   getMuleItems: function () {
      var item, items, info;

      info = this.getInfo();

      if (!info || !info.hasOwnProperty("muleInfo")) {
         return false;
      }

      item = me.getItem(-1, 0);
      items = [];

      if (item) {
         do {
            if (Town.ignoredItemTypes.indexOf(item.itemType) === -1 &&
                  (Pickit.checkItem(item).result > 0 || (item.location === 7 && info.muleInfo.hasOwnProperty("muleOrphans") && info.muleInfo.muleOrphans)) &&
                  item.classid !== 549 && // Don't drop Horadric Cube
                  (item.classid !== 603 || item.quality !== 7) && // Don't drop Annihilus
                  (item.classid !== 604 || item.quality !== 7) && // Don't drop Hellfire Torch
                  (item.location === 7 || (item.location === 3 && !Storage.Inventory.IsLocked(item, Config.Inventory))) && // Don't drop items in locked slots
                  ((!TorchSystem.getFarmers() && !TorchSystem.isFarmer()) || [647, 648, 649].indexOf(item.classid) === -1) && // Don't drop Keys if part of TorchSystem
                  !this.cubingIngredient(item) && !this.runewordIngredient(item) && !this.utilityIngredient(item)) { // Don't drop Runeword/Cubing/CraftingSystem ingredients
               items.push(copyUnit(item));
            }
         } while (item.getNext());
      }

      return items;
   },

   utilityIngredient: function (item) {
      return CraftingSystem.validGids.indexOf(item.gid) > -1;
   },

   // check if an item is a cubing ingredient
   cubingIngredient: function (item) {
      var i;

      for (i = 0; i < Cubing.validIngredients.length; i += 1) {
         if (item.gid === Cubing.validIngredients[i].gid) {
            return true;
         }
      }

      return false;
   },

   // check if an item is a runeword ingrediend - rune, empty base or bad rolled base
   runewordIngredient: function (item) {
      if (Runewords.validGids.indexOf(item.gid) > -1) {
         return true;
      }

      if (!this.baseGids) {
         var i, base;

         this.baseGids = [];

         for (i = 0; i < Config.Runewords.length; i += 1) {
            base = Runewords.getBase(Config.Runewords[i][0], Config.Runewords[i][1]) || Runewords.getBase(Config.Runewords[i][0], Config.Runewords[i][1], true);

            if (base) {
               this.baseGids.push(base.gid);
            }
         }
      }

      if (this.baseGids.indexOf(item.gid) > -1) {
         return true;
      }

      return false;
   },

   dropCharm: function (dropAnni) {
      if (!Town.openStash()) {
         return false;
      }

      var item;

      if (dropAnni) {
         item = me.findItem(603, 0, -1, 7);

         if (item && !Storage.Inventory.IsLocked(item, Config.Inventory)) {
            D2Bot.printToConsole("AutoMule: Transfering Anni.", 7);
            item.drop();
            delay(1000);
            me.cancel();

            return true;
         }

         return false;
      }

      item = me.findItem(604, 0, -1, 7);

      if (item) {
         D2Bot.printToConsole("AutoMule: Transfering Torch.", 7);
         item.drop();
         delay(1000);
         me.cancel();

         return true;
      }

      me.cancel();

      return true;
   },

   // *** Mule functions ***
   getMaster: function (info) {
      var i, j, k, muleObj;

      muleObj = info.mode === 1 ? this.TorchAnniMules : this.Mules;

      for (i in muleObj) {
         if (muleObj.hasOwnProperty(i)) {
            for (j in muleObj[i]) {
               if (muleObj[i].hasOwnProperty(j) && j === "enabledProfiles") {
                  for (k = 0; k < muleObj[i][j].length; k += 1) {
                     if (muleObj[i][j][k].toLowerCase() === info.profile.toLowerCase()) {
                        return {
                           profile: muleObj[i][j][k],
                           mode: info.mode
                        };
                     }
                  }
               }
            }
         }
      }

      return false;
   },

   getMuleObject: function (mode, master) {
      var i, mule;

      mode = mode || 0;
      mule = mode > 0 ? this.TorchAnniMules : this.Mules;

      for (i in mule) {
         if (mule.hasOwnProperty(i)) {
            if (mule[i].muleProfile && mule[i].enabledProfiles &&
                  mule[i].muleProfile.toLowerCase() === me.profile.toLowerCase() && mule[i].enabledProfiles.indexOf(master) > -1) {
               return mule[i];
            }
         }
      }

      return false;
   },

   getMuleFilename: function (mode, master) {
      var i, mule, jsonObj, jsonStr, file;

      mode = mode || 0;
      mule = mode > 0 ? this.TorchAnniMules : this.Mules;

      // Iterate through mule object
      for (i in mule) {
         if (mule.hasOwnProperty(i)) {
            // Mule profile matches config
            if (mule[i].muleProfile && mule[i].muleProfile.toLowerCase() === me.profile.toLowerCase() && mule[i].enabledProfiles.indexOf(master) > -1) {
               file = mode === 0 ? "logs/AutoMule." + i + ".json" : "logs/TorchMule." + i + ".json";

               // If file exists check for valid info
               if (FileTools.exists(file)) {
                  try {
                     jsonStr = FileTools.readText(file);
                     jsonObj = JSON.parse(jsonStr);

                     // Return filename containing correct mule info
                     if (mule[i].accountPrefix && jsonObj.account && jsonObj.account.match(mule[i].accountPrefix)) {
                        return file;
                     }
                  } catch (e) {
                     print(e);
                  }
               } else {
                  return file;
               }
            }
         }
      }

      // File exists but doesn't contain valid info - remake
      FileTools.remove(file);

      return file;
   }
};


Below is the other mule file however i'm not sure if and what to edit this does not state in the current guide.

var StarterConfig = {
   SwitchKeyDelay: 0, // Seconds to wait before switching a used/banned key or after realm down
   RealmDownDelay: 3, // Minutes to wait after getting Realm Down message
   UnableToConnectDelay: 5, // Minutes to wait after Unable To Connect message
   CDKeyInUseDelay: 5, // Minutes to wait before connecting again if CD-Key is in use.
   ConnectingTimeout: 20, // Seconds to wait before cancelling the 'Connecting...' screen
   PleaseWaitTimeout: 10, // Seconds to wait before cancelling the 'Please Wait...' screen
   WaitInLineTimeout: 60 // Seconds to wait before cancelling the 'Waiting in Line...' screen
};


var master, gameInfo, connectFail, makeAcc, joinInfo,
   muleMode, muleFilename, muleObj, handle,
   makeNext = false,
   status = "loading",
   masterStatus = {
      status: ""
   };

// Mule Data object manipulates external mule datafile
var MuleData = {
   // create a new mule datafile
   create: function () {
      var obj, string;

      obj = {
         account: "",
         accNum: 0,
         character: "",
         charNum: 0,
         fullChars: [],
         torchChars: []
      };

      string = JSON.stringify(obj);

      FileTools.writeText(muleFilename, string);
   },

   // read data from the mule datafile and return the data object
   read: function () {
      var obj, string;

      string = FileTools.readText(muleFilename);
      obj = JSON.parse(string);

      return obj;
   },

   // write a data object to the mule datafile
   write: function (obj) {
      var string;

      string = JSON.stringify(obj);

      FileTools.writeText(muleFilename, string);
   }
};

// stash picked items
function stashItems() {
   var i,
      items = me.getItems();

   for (i = 0; i < items.length; i += 1) {
      if (items[i].mode === 0 && items[i].location === 3) {
         Storage.Stash.MoveTo(items[i]);
      }
   }

   return true;
}

// pick items from ground
function pickItems() {
   var i, items, canFit, item,
      rval = "fail",
      list = [];

   while (!me.name || !me.gameReady) {
      if (!me.ingame) {
         return rval;
      }

      delay(100);
   }

   //delay(1000);

   for (i = 0; i < 100; i += 1) {
      items = me.findItems(-1, 0, 3);

      if (items) {
         break;
      }

      delay(100);
   }

   if (items) {
      for (i = 0; i < items.length; i += 1) {
         if (items[i].mode === 0 && items[i].location === 3 && Town.ignoredItemTypes.indexOf(items[i].itemType) > -1  // drop trash (id/tp scroll primarily)
               && (muleMode === 0 || items[i].classid !== 530)) { // don't drop ID scroll with torch/anni mules
            try {
               items[i].drop();
            } catch (dropError) {
               print("Failed to drop an item.");
            }
         }
      }
   }

   while (me.gameReady) {
      if (masterStatus.status === "done") {
         item = getUnit(4);

         if (item) {
            do {
               if (getDistance(me, item) < 20 && [3, 5].indexOf(item.mode) > -1 && Town.ignoredItemTypes.indexOf(item.itemType) === -1) { // don't pick up trash
                  list.push(copyUnit(item));
               }
            } while (item.getNext());
         }

         // If and only if there is nothing left are we "done"
         if (list.length === 0) {
            rval = "done";

            break;
         }

         while (list.length > 0) {
            item = list.shift();
            canFit = Storage.Inventory.CanFit(item);

            // Torch handling
            if (muleMode > 0 && item.classid === 604 && item.quality === 7 && !Pickit.canPick(item)) {
               D2Bot.printToConsole("Mule already has a Torch.", 7);

               rval = "next";
            }

            // Anni handling
            if (muleMode > 0 && item.classid === 603 && item.quality === 7 && !Pickit.canPick(item)) {
               D2Bot.printToConsole("Mule already has an Anni.", 7);

               rval = "next";
            }

            if (!canFit) {
               stashItems();

               canFit = Storage.Inventory.CanFit(item);
            }

            if (canFit) {
               Pickit.pickItem(item);
            } else {
               rval = "next";
            }
         }

         if (rval === "next") {
            break;
         }
      } else {
         sendCopyData(null, master, 10, JSON.stringify({status: "report"}));
         //D2Bot.shoutGlobal("report", 0);
      }

      delay(500);
   }

   return rval;
}

// master/mule communication function
function ReceiveCopyData(mode, msg) {
   var obj, masterInfo;

   switch (msg) {
   case "Handle":
      handle = mode;

      break;
   }

   // mode check instead of msg check because of crashes
   switch (mode) {
   case 1: // JoinInfo
      //print("Got Join Info");

      joinInfo = JSON.parse(msg);

      break;
   case 2: // game info
      print("Recieved Game Info");

      gameInfo = JSON.parse(msg);

      break;
   case 3: // request game
      break;
   case 4:
      // Heartbeat ping
      if (msg === "pingreq") {
         sendCopyData(null, me.windowtitle, 4, "pingrep");
      }

      break;
   // automule specific
   case 10: // mule request
      obj = JSON.parse(msg);

      if (!master) {
         masterInfo = AutoMule.getMaster(obj);

         if (masterInfo) {
            master = masterInfo.profile;
            muleMode = masterInfo.mode;
         }
      } else {
         if (obj.profile === master) {
            sendCopyData(null, master, 10, JSON.stringify({status: status}));
         } else {
            sendCopyData(null, obj.profile, 10, JSON.stringify({status: "busy"}));
         }
      }

      break;
   case 11: // begin item pickup
      status = "begin";

      break;
   case 12: // get master's status
      masterStatus = JSON.parse(msg);

      break;
   }
}

// set next account - increase account number in mule datafile
function nextAccount() {
   var obj = MuleData.read();

   obj.accNum = obj.accNum + 1;
   obj.account = muleObj.accountPrefix + obj.accNum;
   obj.character = "";
   obj.charNum = 0;
   obj.fullChars = [];
   obj.torchChars = [];

   MuleData.write(obj);

   return obj.account;
}

// set next character - increase character number in mule datafile
function nextChar() {
   var i, num,
      charSuffix = "",
      charNumbers = "abcdefghijklmnopqrstuvwxyz",
      obj = MuleData.read();

   /*if (getLocation() === 12) {
      obj.charNum = ControlAction.getCharacters().length;
   }*/

   // dirty
   if (obj.charNum > 25) {
      obj.charNum = 0;
   }

   num = obj.accNum.toString();

   for (i = 0; i < num.length; i += 1) {
      charSuffix += charNumbers[parseInt(num[i], 10)];
   }

   charSuffix += charNumbers[obj.charNum];
   obj.charNum = obj.charNum + 1;
   obj.character = muleObj.charPrefix + charSuffix;

   MuleData.write(obj);

   return obj.character;
}

function locationTimeout(time, location) {
   var endtime = getTickCount() + time;

   while (getLocation() === location && endtime > getTickCount()) {
      delay(500);
   }

   return (getLocation() !== location);
}

function ingameTimeout(time) {
   var tick = getTickCount();

   while (getTickCount() - tick < time) {
      if (me.ingame && me.gameReady) {
         return true;
      }

      if (getLocation() === 28) { // game doesn't exist, might need more locs
         break;
      }

      delay(100);
   }

   return me.ingame && me.gameReady;
}

function timeoutDelay(text, time) {
   var endTime = getTickCount() + time;

   while (getTickCount() < endTime) {
      D2Bot.updateStatus(text + " (" + Math.floor((endTime - getTickCount()) / 1000) + "s)");
      delay(500);
   }
}

function updateCount() {
   D2Bot.updateCount();
   delay(1000);
   ControlAction.click(6, 264, 366, 272, 35);

   var info,
      obj = MuleData.read();

   info = {
      realm: muleObj.realm,
      account: obj.account,
      password: muleObj.accountPassword
   };

   ControlAction.loginAccount(info);
   delay(1000);
   ControlAction.click(6, 33, 572, 128, 35);
}

function checkAnniTorch() {
   while (!me.gameReady) {
      delay(500);
   }

   return me.findItem(603, 0, -1, 7) || me.findItem(604, 0, -1, 7);
}

function foreverAlone() {
   var party = getParty();

   if (party) {
      do {
         if (party.name !== me.name) {
            return false;
         }
      } while (party.getNext());
   }

   return true;
}

include("json2.js");
include("oog.js");
include("automule.js");
include("mulelogger.js");
include("torchsystem.js");
include("NTItemParser.dbl");
include("common/attack.js");
include("common/storage.js");
include("common/pickit.js");
include("common/town.js");
include("common/pather.js");
include("common/misc.js");
include("common/config.js");
include("common/prototypes.js");
include("common/collmap.js");

addEventListener("copydata", ReceiveCopyData);

function main() {
   while (!handle) {
      delay(100);
   }

   DataFile.updateStats("handle", handle);
   D2Bot.init();
   load("tools/heartbeat.js");

   while (!gameInfo) {
      D2Bot.requestGameInfo();
      delay(500);
   }

   if (gameInfo.rdBlocker) {
      D2Bot.printToConsole("You must disable RD Blocker for Mule Logger to work properly. Stopping.");
      D2Bot.stop(me.profile, true);

      return;
   }

   D2Bot.updateRuns(); // we need the mule to swap keys somehow after all
   delay(1000);

   // Wait for master before login = give room to determine muling mode (normal or torch)
   while (!master) {
      delay(100);
   }

   print("Master found: " + master);

   muleObj = AutoMule.getMuleObject(muleMode, master);
   muleFilename = AutoMule.getMuleFilename(muleMode, master);

   print("Mule filename: " + muleFilename);

   var obj, tick,
      inGame = false;

   try {
      // ugly solution to uglier problem - pickItem area update
      if (!FileTools.exists("data/" + me.profile + ".json")) {
         DataFile.create();
      }

      // create mule datafile if it doesn't exist
      if (!FileTools.exists(muleFilename)) {
         MuleData.create();
      }

      obj = MuleData.read();

      if (obj.account && obj.account.indexOf(muleObj.accountPrefix) < 0) {
         MuleData.create();
      }
   } catch (e) {
      print("Caught exception creating data files.");
      print(e);
      D2Bot.printToConsole("DataFileException: " + e.message + " (" + e.fileName.substring(e.fileName.lastIndexOf("\\") + 1, e.fileName.length) + " #" + e.lineNumber + ")");
   }

   while (true) {
      try {
         if (me.ingame && me.gameReady) {
            if (!inGame) {
               if (status !== "begin") {
                  status = "ready";
               }

               D2Bot.updateStatus("In " + (muleMode === 2 ? "anni" : muleMode === 1 ? "torch" : "") + " mule game.");
               D2Bot.printToConsole("In " + (muleMode === 2 ? "anni" : muleMode === 1 ? "torch" : "") + " mule game.", 7);
               Storage.Init();

               inGame = true;
            }

            tick = getTickCount();

            while (getTickCount() - tick < 60000) {
               if (status === "begin") {
                  break;
               }

               delay(100);
            }

            //print("Delay: " + (getTickCount() - tick));

            if (status !== "begin") {
               D2Bot.printToConsole("Nobody joined - stopping.", 9);
               D2Bot.stop(me.profile, true);
            }

            me.overhead("begin");

            switch (pickItems()) {
            // done picking, tell the master to leave game and kill mule profile
            case "done":
               MuleLogger.logChar();

               obj = MuleData.read();

               if (checkAnniTorch()) {
                  obj.torchChars.push(me.name);
               }

               MuleData.write(obj);
               D2Bot.printToConsole("Done muling.", 7);
               sendCopyData(null, master, 10, JSON.stringify({status: "quit"}));
               //delay(500);
               D2Bot.stop(me.profile, true);

               return;
            // can't fit more items, get to next character or account
            case "next":
               MuleLogger.logChar();
               //delay(500);

               makeNext = true;
               obj = MuleData.read();

               if (checkAnniTorch()) {
                  obj.torchChars.push(me.name);
               }

               obj.fullChars.push(me.name);
               MuleData.write(obj);
               nextChar();
               D2Bot.printToConsole("Mule full, getting next character.", 7);
               quit();

               // TODO: see whether a for loop is better
               while (me.ingame) {
                  delay(100);
               }

               break;
            case "fail":
               // Try again
               break;
            }
         }

         if (!me.ingame) {
            delay(1000);
            locationAction(getLocation());
         }
      } catch (e2) {
         print("Caught an exception in the main loop.");
         print(e2);
         D2Bot.printToConsole("MainLoopException: " + e2.message + " (" + e2.fileName.substring(e2.fileName.lastIndexOf("\\") + 1, e2.fileName.length) + " #" + e2.lineNumber + ")");
      }

      delay(100);
   }
}

function locationAction(location) {
   var i, obj, info, control, string, text;

MainSwitch:
   switch (location) {
   case 1:
   case 3:
      D2Bot.updateStatus("Lobby");

      if (makeNext) {
         ControlAction.click(6, 693, 490, 80, 20);

         break;
      }

      if (!ControlAction.click(6, 652, 469, 120, 20)) { // Join
         break;
      }

      if (!locationTimeout(5000, location)) { // in case join button gets bugged
         if (!ControlAction.click(6, 533, 469, 120, 20)) { // Create
            break;
         }

         if (!ControlAction.click(6, 652, 469, 120, 20)) { // Join
            break;
         }
      }

      break;
   case 4: // Create Game
      D2Bot.updateStatus("Creating Game");

      control = getControl(1, 657, 342, 27, 20);

      if (control && control.disabled === 5) {
         ControlAction.click(6, 431, 341, 15, 16); // remove level restriction
      }

      delay(2000);
      createGame(muleObj.muleGameName[0], muleObj.muleGameName[1]);
      ingameTimeout(5000);

      break;
   case 2: // Waiting In Line
      D2Bot.updateStatus("Waiting...");
      locationTimeout(StarterConfig.WaitInLineTimeout * 1e3, location);
      ControlAction.click(6, 433, 433, 96, 32);

      break;
   case 5: // Join Game
      D2Bot.updateStatus("Join Game");
      D2Bot.requestGame(master);
      delay(100);

      if (joinInfo && joinInfo.gameName !== "" && joinInfo.inGame) {
         joinGame(joinInfo.gameName, joinInfo.gamePass);
      } else {
         joinGame(muleObj.muleGameName[0], muleObj.muleGameName[1]);
      }

      ingameTimeout(5000);
      print("Ingame timeout done.");

      break;
   case 6: // Ladder
      break;
   case 7: // Channel List
      break;
   case 8: // menu
   case 9: // login
      if (makeNext) {
         makeNext = false;
      }

      obj = MuleData.read();

      if (!obj.account || obj.account.indexOf(muleObj.accountPrefix) < 0) {
         nextAccount();

         obj = MuleData.read();
      }

      info = {
         realm: muleObj.realm,
         account: obj.account,
         password: muleObj.accountPassword
      };

      if (makeAcc) {
         ControlAction.makeAccount(info);
         //FileTools.writeText("mules/" + info.account + ".txt", "");
         D2Bot.printToConsole("Made account: " + info.account, 7);

         makeAcc = false;

         break;
      }

      ControlAction.loginAccount(info);

      break;
   case 10: // Login Error
      string = "";
      text = ControlAction.getText(4, 199, 377, 402, 140);

      if (text) {
         for (i = 0; i < text.length; i += 1) {
            string += text[i];

            if (i !== text.length - 1) {
               string += " ";
            }
         }

         switch (string) {
         case getLocaleString(5207):
            D2Bot.updateStatus("Invalid Password");
            D2Bot.printToConsole("Invalid Password");

            break;
         case getLocaleString(5208):
            ControlAction.click(6, 335, 412, 128, 35);

            makeAcc = true;

            break MainSwitch;
         case getLocaleString(5202): // cd key intended for another product
         case getLocaleString(10915): // lod key intended for another product
            D2Bot.updateStatus("Invalid CDKey");
            D2Bot.printToConsole("Invalid CDKey: " + gameInfo.mpq, 6);
            D2Bot.CDKeyDisabled();

            if (gameInfo.switchKeys) {
               ControlAction.timeoutDelay("Key switch delay", StarterConfig.SwitchKeyDelay * 1000);
               D2Bot.restart(true);
            } else {
               D2Bot.stop(me.profile, true);
            }

            break;
         case getLocaleString(5199):
            D2Bot.updateStatus("Disabled CDKey");
            D2Bot.printToConsole("Disabled CDKey: " + gameInfo.mpq, 6);
            D2Bot.CDKeyDisabled();

            if (gameInfo.switchKeys) {
               ControlAction.timeoutDelay("Key switch delay", StarterConfig.SwitchKeyDelay * 1000);
               D2Bot.restart(true);
            } else {
               D2Bot.stop(me.profile, true);
            }

            break;
         case getLocaleString(10913):
            D2Bot.updateStatus("Disabled LoD CDKey");
            D2Bot.printToConsole("Disabled LoD CDKey: " + gameInfo.mpq, 6);
            D2Bot.CDKeyDisabled();

            if (gameInfo.switchKeys) {
               ControlAction.timeoutDelay("Key switch delay", StarterConfig.SwitchKeyDelay * 1000);
               D2Bot.restart(true);
            } else {
               D2Bot.stop(me.profile, true);
            }

            break;
         case getLocaleString(5347):
            D2Bot.updateStatus("Disconnected");
            D2Bot.printToConsole("Disconnected");
            ControlAction.click(6, 335, 412, 128, 35);

            break MainSwitch;
         default:
            D2Bot.updateStatus("Login Error");
            D2Bot.printToConsole("Login Error - " + string);

            if (gameInfo.switchKeys) {
               ControlAction.timeoutDelay("Key switch delay", StarterConfig.SwitchKeyDelay * 1000);
               D2Bot.restart(true);
            } else {
               D2Bot.stop(me.profile, true);
            }

            break;
         }
      }

      ControlAction.click(6, 335, 412, 128, 35);

      while (true) {
         delay(1000);
      }

      break;
   case 11: // Unable To Connect
      D2Bot.updateStatus("Unable To Connect");

      if (connectFail) {
         timeoutDelay("Unable to Connect", StarterConfig.UnableToConnectDelay * 6e4);

         connectFail = false;
      }

      if (!ControlAction.click(6, 335, 450, 128, 35)) {
         break;
      }

      connectFail = true;

      break;
   case 13: // Realm Down - Character Select screen
      D2Bot.updateStatus("Realm Down");
      delay(1000);

      if (!ControlAction.click(6, 33, 572, 128, 35)) {
         break;
      }

      updateCount();
      timeoutDelay("Realm Down", StarterConfig.RealmDownDelay * 6e4);
      D2Bot.CDKeyRD();

      if (gameInfo.switchKeys) {
         D2Bot.printToConsole("Realm Down - Changing CD-Key");
         timeoutDelay("Key switch delay", StarterConfig.SwitchKeyDelay * 1000);
         D2Bot.restart(true);
      } else {
         D2Bot.restart();
      }

      break;
   case 14: // Character Select / Main Menu - Disconnected
      D2Bot.updateStatus("Disconnected");
      delay(500);
      ControlAction.click(6, 351, 337, 96, 32);

      break;
   case 18: // splash
      ControlAction.click();

      break;
   case 12: // char select
   case 15: // new character (selected)
   case 29: // new character (list)
   case 42: // empty char screen
      string = "";
      text = ControlAction.getText(4, 45, 318, 531, 140);

      if (text) {
         for (i = 0; i < text.length; i += 1) {
            string += text[i];

            if (i !== text.length - 1) {
               string += " ";
            }
         }

         if (string === getLocaleString(11161)) { // CDKey disabled from realm play
            D2Bot.updateStatus("Realm Disabled CDKey");
            D2Bot.printToConsole("Realm Disabled CDKey: " + gameInfo.mpq, 6);
            D2Bot.CDKeyDisabled();

            if (gameInfo.switchKeys) {
               ControlAction.timeoutDelay("Key switch delay", StarterConfig.SwitchKeyDelay * 1000);
               D2Bot.restart(true);
            } else {
               D2Bot.stop(me.profile, true);
            }
         }
      }

      // Single Player screen fix
      // TODO: see if this is still needed. d2bs doesn't load scripts twice anymore
      if (getLocation() === 12 && !getControl(4, 626, 100, 151, 44)) {
         ControlAction.click(6, 33, 572, 128, 35);

         break;
      }

      // Can't create character, button greyed out = high likelyhood of realm down
      if (getLocation() === 42 && getControl(6, 33, 528, 168, 60).disabled === 4) {
         D2Bot.updateStatus("Realm Down");
         delay(1000);

         if (!ControlAction.click(6, 33, 572, 128, 35)) {
            break;
         }

         updateCount();
         timeoutDelay("Realm Down", StarterConfig.RealmDownDelay * 6e4);
         D2Bot.CDKeyRD();

         if (gameInfo.switchKeys) {
            D2Bot.printToConsole("Realm Down - Changing CD-Key");
            timeoutDelay("Key switch delay", StarterConfig.SwitchKeyDelay * 1000);
            D2Bot.restart(true);
         } else {
            D2Bot.restart();
         }
      }

      obj = MuleData.read();

      if (makeNext) {
         if (obj.fullChars.length === 8 || (muleMode > 0 && obj.torchChars.length === 8)) {
            ControlAction.click(6, 33, 572, 128, 35);
            nextAccount();

            break;
         }

         makeNext = false;
      }

      if (!obj.character || obj.character.indexOf(muleObj.charPrefix) < 0) {
         nextChar();

         obj = MuleData.read();
      }

      info = {
         account: obj.account,
         charName: obj.character,
         ladder: muleObj.ladder,
         hardcore: muleObj.hardcore,
         expansion: muleObj.expansion,
         charClass: "amazon"
      };

      if (muleMode > 0 && obj.torchChars.indexOf(info.charName) > -1) {
         nextChar();

         break;
      }

      if (ControlAction.findCharacter(info)) {
         ControlAction.loginCharacter(info);
      } else {
         if (ControlAction.getCharacters().length >= 8) { // premade account that's already full
            ControlAction.click(6, 33, 572, 128, 35);
            nextAccount();

            break;
         }

         if (!ControlAction.makeCharacter(info)) {
            // TODO: check if acc is full and cancel location 15 and 29 if true
            nextChar();

            break;
         }

         D2Bot.printToConsole("Made character: " + info.charName, 7);
      }

      break;
   case 16: // Character Select - Please Wait popup
      if (!locationTimeout(StarterConfig.PleaseWaitTimeout * 1e3, location)) {
         ControlAction.click(6, 351, 337, 96, 32);
      }

      break;
   case 17: // Lobby - Lost Connection - just click okay, since we're toast anyway
      delay(1000);
      ControlAction.click(6, 351, 337, 96, 32);

      break;
   case 19: // Login - Cdkey In Use
      D2Bot.printToConsole(gameInfo.mpq + " is in use by " + ControlAction.getText(4, 158, 310, 485, 40), 6);
      D2Bot.CDKeyInUse();

      if (gameInfo.switchKeys) {
         ControlAction.timeoutDelay("Key switch delay", StarterConfig.SwitchKeyDelay * 1000);
         D2Bot.restart(true);
      } else {
         ControlAction.click(6, 335, 450, 128, 35);
         ControlAction.timeoutDelay("CD-Key in use", StarterConfig.CDKeyInUseDelay * 6e4);
      }

      break;
   case 20: // Single Player - Select Difficulty
      break;
   case 21: // Main Menu - Connecting
      if (!locationTimeout(StarterConfig.ConnectingTimeout * 1e3, location)) {
         ControlAction.click(6, 330, 416, 128, 35);
      }

      break;
   case 22: // Login - Invalid Cdkey (classic or xpac)
      text = ControlAction.getText(4, 162, 270, 477, 50);
      string = "";

      if (text) {
         for (i = 0; i < text.length; i += 1) {
            string += text[i];

            if (i !== text.length - 1) {
               string += " ";
            }
         }
      }

      switch (string) {
      case getLocaleString(10914):
         D2Bot.printToConsole(gameInfo.mpq + " LoD key in use by " + ControlAction.getText(4, 158, 310, 485, 40), 6);
         D2Bot.CDKeyInUse();

         if (gameInfo.switchKeys) {
            ControlAction.timeoutDelay("Key switch delay", StarterConfig.SwitchKeyDelay * 1000);
            D2Bot.restart(true);
         } else {
            ControlAction.click(6, 335, 450, 128, 35);
            ControlAction.timeoutDelay("LoD key in use", StarterConfig.CDKeyInUseDelay * 6e4);
         }

         break;
      default:
         if (gameInfo.switchKeys) {
            D2Bot.printToConsole("Invalid CD-Key");
            ControlAction.timeoutDelay("Key switch delay", StarterConfig.SwitchKeyDelay * 1000);
            D2Bot.restart(true);
         } else {
            ControlAction.click(6, 335, 450, 128, 35);
            ControlAction.timeoutDelay("Invalid CD-Key", StarterConfig.CDKeyInUseDelay * 6e4);
         }

         break;
      }

      break;
   case 23: // Character Select - Connecting
      if (!locationTimeout(StarterConfig.ConnectingTimeout * 1e3, location)) {
         ControlAction.click(6, 33, 572, 128, 35);
      }

      break;
   case 24: // Server Down - not much to do but wait..
      break;
   case 25: // Lobby - Please Wait
      if (!locationTimeout(StarterConfig.PleaseWaitTimeout * 1e3, location)) {
         ControlAction.click(6, 351, 337, 96, 32);
      }

      break;
   case 26: // game already exists
      ControlAction.click(6, 652, 469, 120, 20); // Join

      break;
   case 27: // Gateway Select
      ControlAction.click(6, 436, 538, 96, 32);

      break;
   case 28: // Lobby - Game Does Not Exist
      ControlAction.click(6, 533, 469, 120, 20);

      break;
   case 30: // charname already exists
      ControlAction.click(6, 351, 337, 96, 32);
      ControlAction.click(6, 33, 572, 128, 35);

      break;
   case 38: // Game is full
      break; // not sure how/if to handle
   }
}

Top
 Profile  
 Post subject: Re: Official kolbot Support Thread
PostPosted: Mon Aug 28, 2017 9:47 am 
 
User
User

Joined: Mon Aug 24, 2009 5:19 pm
I have a problem with pickit.

I get this error:
Pickit error! Line # 395 Entry: [Type] == Orb && [Quality] == Rare # (([SorceressSkills]+[SkillFireball] >= 5) + && [SkillMeteor] >= 1) || (([SorceressSkills]+[SkillFireball] >= 5) && [SkillFirebolt] >= 1)) && [FCR] >= 20 (kolton.nip


This is what it looks like inside the koltonnip
[Type] == Orb && [Quality] == Magic # (([LightningSkillTab]+[SkillLightning] >= 5) || ([LightningSkillTab]+[SkillChainLightning] >= 5)) && [SkillLightningMastery] >= 1 && [FCR] >= 20


What is wrong with that? :S
Please help me fix it :P

Top
 Profile  
 Post subject: Re: Official kolbot Support Thread
PostPosted: Mon Aug 28, 2017 10:29 am 
 
User
User

Joined: Mon Aug 24, 2009 5:19 pm
ah shit, it still happens :(

Top
 Profile  
 Post subject: Re: Official kolbot Support Thread
PostPosted: Thu Oct 12, 2017 5:31 am 
 
User
User

Joined: Wed Oct 11, 2017 5:04 am
I'm wanting to setup my mfhelper to take tp's / kill bosses without chat spamming.

I was told instead of having the leader spam "Kill 243" into chat, that d2bs can communicate to each other from d2bs instead of chat.

addEventListener('copydata', ReceiveCopyData); this is suppose to be for mfhelper profile correct? not 100% sure

but I think the one made for leader such as mephisto needs a function with multiple lines?

starts off with function ReceiveCopyData(msgID, msg) {

after that, I don't have a clue on what to do.

any help on this I would highly appreciate!


var inputMode = 1337, // some number of your choice
inputMsg = "hej"; // some message

sendCopyData(null, profileName, inputMode, inputMsg);

addEventListener('copydata', // for recipient
function receiveCopyData(mode, msg) {
if (mode === inputMode && msg === inputMsg) { // check input data (msg) & mode
doSomething();
}
}
);


Ok I notice I'm going to have to figure out how to use this.

I don't know exactly what to do and If this is made for only 1 profile (mf leader) to make this work or if this is for both (leader / helper)?

If someone could give me an example I would appreciate it.


Last edited by ReDRuM711 on Sat Nov 11, 2017 8:09 am, edited 1 time in total.
Top
 Profile  
 Post subject: Re: Official kolbot Support Thread
PostPosted: Sun Nov 05, 2017 1:45 pm 
 
User
User

Joined: Wed Oct 11, 2017 5:04 am
no support ?

Top
 Profile  
 Post subject: Re: Official kolbot Support Thread
PostPosted: Sat Nov 11, 2017 8:11 am 
 
User
User

Joined: Wed Oct 11, 2017 5:04 am
viewtopic.php?f=209&t=545302&p=4709446#p4709446

Still trying.

Top
 Profile  
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 4753 posts ]  Go to page Previous  1 ... 313, 314, 315, 316, 317

All times are UTC [ DST ]


Who is online

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