Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var StarterConfig = {
- MinGameTime: 180, // Minimum game length in seconds. If a game is ended too soon, the rest of the time is waited in the lobby
- CreateGameDelay: 5, // Seconds to wait before creating a new game
- ResetCount: 99, // Reset game count back to 1 every X games.
- CharacterDifference: 99, // Character level difference. Set to false to disable character difference.
- JoinChannel: "", // Name of the channel to join
- FirstJoinMessage: "", // Message to say when first joining a channel, usually ".login"
- AnnounceGames: false, // Announce next game in channel
- ChatActionsDelay: 2, // Seconds to wait in lobby before entering a channel
- SwitchKeys: true, // Set to true to switch keys when they're in use, banned or after realm down
- SwitchKeyDelay: 0, // Seconds to wait before switching a used/banned key or after realm down
- CrashDelay: 60, // Seconds to wait after a d2 window crash
- FTJDelay: 60, // Seconds to wait after failing to create a game
- 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. SwitchKeys overrides this!
- 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
- GameDoesNotExistTimeout: 30 // Seconds to wait before cancelling the 'Game does not exist.' screen
- };
- // No touchy!
- include("json2.js");
- include("OOG.js");
- include("automule.js");
- include("gambling.js");
- load("tools/heartbeat.js");
- var D2BOT_JOIN = 1,
- D2BOT_GAMEINFO = 2,
- D2BOT_REQUESTGAME = 3,
- crashed = false,
- lastGameStatus = "ready",
- chatActionsDone = false,
- connectFail = false,
- firstLogin = false,
- gameCount = DataFile.getStats().runs + 1,
- gamePass = "",
- gameName = "",
- difficulty,
- gameStart,
- isUp = "no",
- nextGame = "",
- muleTrigger = false,
- ingame = false;
- if (!FileTools.exists("data/" + me.profile + ".json")) {
- DataFile.create();
- }
- function ReceiveCopyData(msgID, msg) {
- switch (msgID) {
- case D2BOT_GAMEINFO:
- print("Recieved Game Info");
- [gameName, gamePass, difficulty] = msg.split('/');
- break;
- case D2BOT_JOIN:
- [nextGame, gamePass, isUp] = msg.split('/');
- break;
- case D2BOT_REQUESTGAME:
- D2Bot.joinMe(msg, gameName, gameCount, gamePass, isUp);
- break;
- case 4:
- if (msg === "@error") {
- crashed = true;
- }
- break;
- }
- }
- function timeoutDelay(text, time) {
- var endTime = getTickCount() + time;
- while (getTickCount() < endTime) {
- D2Bot.updateStatus(text + " (" + Math.floor((endTime - getTickCount()) / 1000) + "s)");
- delay(500);
- }
- }
- function locationTimeout(time, location) {
- var endtime = getTickCount() + time;
- while (getLocation() === location && endtime > getTickCount()) {
- delay(500);
- }
- return (getLocation() !== location);
- }
- function updateCount() {
- D2Bot.updateCount();
- delay(1000);
- ControlAction.click(6, 264, 366, 272, 35);
- try {
- login(me.profile);
- } catch (e) {
- }
- delay(1000);
- ControlAction.click(6, 33, 572, 128, 35);
- }
- function ScriptMsgEvent(msg) {
- switch (msg) {
- case "mule":
- muleTrigger = true;
- break;
- }
- }
- function main() {
- addEventListener('copydata', ReceiveCopyData);
- addEventListener('scriptmsg', ScriptMsgEvent);
- delay(rand(2, 3) * 1000);
- D2Bot.requestGameInfo();
- D2Bot.getLastError();
- if (crashed) {
- timeoutDelay("Crash Delay", StarterConfig.CrashDelay * 1e3);
- D2Bot.updateRuns();
- }
- while (true) {
- while (me.ingame) { // returns true before actually in game so we can't only use this check
- if (me.gameReady) { // returns false when switching acts so we can't use while
- isUp = "yes";
- if (!ingame) {
- if (me.gamepassword.toLowerCase() !== gamePass.toLowerCase()) {
- print("leaving game");
- quit();
- }
- print("Updating Status");
- D2Bot.updateStatus("Game: " + me.gamename);
- lastGameStatus = "ingame";
- ingame = true;
- gameStart = getTickCount();
- DataFile.updateStats("runs", gameCount);
- }
- }
- delay(1000);
- }
- isUp = "no";
- locationAction(getLocation());
- delay(1000);
- }
- }
- function locationAction(location) {
- var i, control, string, text, gambleGame;
- MainSwitch:
- switch (location) {
- case 0:
- break;
- case 1: // Lobby
- D2Bot.updateStatus("Lobby");
- if (StarterConfig.JoinChannel !== "") {
- ControlAction.click(6, 27, 480, 120, 20);
- break;
- }
- if (ingame) {
- if (getTickCount() - gameStart < StarterConfig.MinGameTime * 1e3) {
- timeoutDelay("Min game time wait", StarterConfig.MinGameTime * 1e3 + gameStart - getTickCount());
- }
- // ### automule ###
- if (muleTrigger) {
- AutoMule.outOfGameCheck();
- muleTrigger = false;
- break;
- }
- // ### automule end ###
- print("updating runs");
- D2Bot.updateRuns();
- gameCount += 1;
- lastGameStatus = "ready";
- ingame = false;
- }
- // #### experimental gambling system start ####
- gambleGame = Gambling.checkGamblers();
- if (gambleGame && DataFile.getStats().gold > Gambling.minGold) {
- delay(3000);
- joinGame(gambleGame[0], gambleGame[1]);
- delay(1000);
- locationTimeout(5000, location);
- break;
- }
- // #### experimental gambling system end ####
- if (!ControlAction.click(6, 533, 469, 120, 20)) { // Create
- break;
- }
- if (!locationTimeout(5000, location)) { // in case create button gets bugged
- if (!ControlAction.click(6, 652, 469, 120, 20)) { // Join
- break;
- }
- if (!ControlAction.click(6, 533, 469, 120, 20)) { // Create
- break;
- }
- }
- break;
- case 2: // Waiting In Line
- D2Bot.updateStatus("Waiting...");
- locationTimeout(StarterConfig.WaitInLineTimeout * 1e3, location);
- break;
- case 3: // Lobby Chat
- D2Bot.updateStatus("Lobby Chat");
- if (ingame) {
- if (getTickCount() - gameStart < StarterConfig.MinGameTime * 1e3) {
- timeoutDelay("Min game time wait", StarterConfig.MinGameTime * 1e3 + gameStart - getTickCount());
- }
- // ### automule ###
- if (muleTrigger) {
- AutoMule.outOfGameCheck();
- muleTrigger = false;
- break;
- }
- // ### automule end ###
- print("updating runs");
- D2Bot.updateRuns();
- gameCount += 1;
- lastGameStatus = "ready";
- ingame = false;
- }
- // #### experimental gambling system start ####
- gambleGame = Gambling.checkGamblers();
- if (gambleGame && DataFile.getStats().gold > Gambling.minGold) {
- delay(3000);
- joinGame(gambleGame[0], gambleGame[1]);
- delay(1000);
- locationTimeout(5000, location);
- break;
- }
- // #### experimental gambling system end ####
- if (!chatActionsDone) {
- chatActionsDone = true;
- timeoutDelay("Chat delay", StarterConfig.ChatActionsDelay * 1e3);
- say("/j " + StarterConfig.JoinChannel);
- delay(1000);
- if (StarterConfig.FirstJoinMessage !== "") {
- say(StarterConfig.FirstJoinMessage);
- delay(500);
- }
- }
- if (StarterConfig.AnnounceGames) {
- delay(1000);
- say("Next game is " + gameName + gameCount + (gamePass === "" ? "" : "//" + gamePass));
- }
- if (!ControlAction.click(6, 533, 469, 120, 20)) { // Create
- break;
- }
- if (!locationTimeout(5000, location)) { // in case create button gets bugged
- if (!ControlAction.click(6, 652, 469, 120, 20)) { // Join
- break;
- }
- if (!ControlAction.click(6, 533, 469, 120, 20)) { // Create
- break;
- }
- }
- break;
- case 4: // Create Game
- D2Bot.updateStatus("Creating Game");
- control = getControl(1, 657, 342, 27, 20);
- if (typeof StarterConfig.CharacterDifference === "number") {
- if (control.disabled === 4) {
- ControlAction.click(6, 431, 341, 15, 16);
- }
- ControlAction.setText(1, 657, 342, 27, 20, StarterConfig.CharacterDifference.toString());
- } else if (StarterConfig.CharacterDifference === false && control.disabled === 5) {
- ControlAction.click(6, 431, 341, 15, 16);
- }
- if (StarterConfig.ResetCount && gameCount >= StarterConfig.ResetCount) {
- gameCount = 1;
- DataFile.updateStats("runs", gameCount);
- }
- while (!gameName) {
- D2Bot.requestGameInfo();
- delay(500);
- }
- if (lastGameStatus === "pending") {
- D2Bot.printToConsole("Failed to create game");
- timeoutDelay("FTJ delay", StarterConfig.FTJDelay * 1e3);
- gameCount += 1;
- }
- timeoutDelay("Make Game Delay", StarterConfig.CreateGameDelay * 1e3);
- createGame(gameName + gameCount, gamePass, difficulty === "Hell" ? 2 : difficulty === "Nightmare" ? 1 : 0);
- lastGameStatus = "pending";
- locationTimeout(5000, location);
- break;
- case 5: // Join Game
- break;
- case 6: // Ladder
- break;
- case 7: // Channel List
- break;
- case 8: // Main Menu
- case 9: // Login
- case 18: // D2 Splash
- if (firstLogin) { // multiple realm botting fix in case of R/D or disconnect
- ControlAction.click(6, 33, 572, 128, 35);
- }
- if (!firstLogin) {
- firstLogin = true;
- }
- D2Bot.updateStatus("Logging In");
- try {
- login(me.profile);
- } catch (e) {
- print(e);
- }
- 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):
- D2Bot.updateStatus("Invalid Account");
- D2Bot.printToConsole("Invalid Account");
- break;
- case getLocaleString(5199):
- D2Bot.updateStatus("Disabled CDKey");
- D2Bot.printToConsole("Disabled CDKey");
- D2Bot.CDKeyDisabled();
- if (StarterConfig.SwitchKeys) {
- timeoutDelay("Key switch delay", StarterConfig.SwitchKeyDelay * 1000);
- D2Bot.restart(true);
- } else {
- D2Bot.stop();
- }
- 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);
- 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 12: // Character Select
- try {
- login(me.profile);
- } catch (e2) {
- }
- break;
- case 13: // Realm Down - Character Select screen
- D2Bot.printToConsole("step 1");
- D2Bot.updateStatus("Realm Down");
- delay(1000);
- D2Bot.printToConsole("step 2");
- if (!ControlAction.click(6, 33, 572, 128, 35)) {
- break;
- }
- D2Bot.printToConsole("step 3");
- updateCount();
- D2Bot.printToConsole("step 4");
- timeoutDelay("Realm Down", StarterConfig.RealmDownDelay * 6e4);
- D2Bot.printToConsole("step 5");
- D2Bot.CDKeyRD();
- if (StarterConfig.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 15: // New Character
- 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("CD-Key in use by " + ControlAction.getText(4, 158, 310, 485, 40));
- D2Bot.CDKeyInUse();
- if (StarterConfig.SwitchKeys) {
- timeoutDelay("Key switch delay", StarterConfig.SwitchKeyDelay * 1000);
- D2Bot.restart(true);
- } else {
- ControlAction.click(6, 335, 450, 128, 35);
- 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)
- if (StarterConfig.SwitchKeys) {
- D2Bot.printToConsole("Invalid CD-Key");
- timeoutDelay("Key switch delay", StarterConfig.SwitchKeyDelay * 1000);
- D2Bot.restart(true);
- } else {
- ControlAction.click(6, 335, 450, 128, 35);
- timeoutDelay("Invalid CD-Key", StarterConfig.CDKeyInUseDelay * 6e4);
- }
- 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: // Lobby - Game Name Exists
- gameCount += 1;
- delay(500);
- ControlAction.click(6, 533, 469, 120, 20);
- break;
- case 27: // Gateway Select
- break;
- case 28: // Lobby - Game Does Not Exist
- D2Bot.printToConsole("Game doesn't exist");
- lastGameStatus = "ready";
- locationTimeout(StarterConfig.GameDoesNotExistTimeout * 1e3, location);
- break;
- case 38: // Game is full
- D2Bot.printToConsole("Game is full");
- lastGameStatus = "ready";
- delay(500);
- ControlAction.click(6, 652, 469, 120, 20);
- break;
- case 42: // Empty character screen
- delay(1000);
- ControlAction.click(6, 33, 572, 128, 35);
- break;
- default:
- if (location !== undefined) {
- D2Bot.printToConsole("Unhandled location " + location);
- delay(500);
- D2Bot.restart();
- }
- break;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement