Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * @filename DupeRerollRare.js
- * @author Walla + Kolbot + maulepan + sithy
- */
- function DupeReroll() {
- var helper = Config.DupeReroll.Helper;
- var opener = Config.DupeReroll.Opener;
- var baseid = Config.DupeReroll.Classid;
- var quality = Config.DupeReroll.Quality;
- var craftList = Config.DupeReroll.craftList;
- var runeList = Config.DupeReroll.runeList;
- var i, k, j, l, items, npc, tick, trader, wp, allitems, string, newitem, result, string, cycles, scroll, dupeN = 1;
- var end = false;
- var list = [];
- var usedGems = [];
- var seconds = 0;
- var minutes = 0;
- var blockStatus = false, dropInventory = false, tradeAccepted = false, leave = false;
- function doReroll(bquality, bid){
- if(bquality === 6){
- Town.move("stash");
- delay(20);
- Town.openStash();
- while (!end) {
- allitems = me.findItems(-1, 0); // get all items
- list = []; //empty list
- for (k = 0; k < allitems.length; k += 1) { // search for a rare item
- if (allitems[k].classid === bid && allitems[k].quality === 6) { // find a rare item
- list.push(allitems[k]); // push into the item list
- break; // stop searching
- }
- }
- for (k = 0; k < allitems.length; k += 1) { // search for a ring
- if (allitems[k].classid === 522 && allitems[k].quality === 7) { // find a ring
- list.push(allitems[k]); // push into the item list
- break; // stop searching
- }
- }
- for (k = 0; k < allitems.length; k += 1) { // search for a perf skull
- if (allitems[k].classid === 601) { // find a perf skull
- list.push(allitems[k]); // push into the item list
- break; // stop searching
- }
- }
- if(list.length == 3) {
- // If cube isn't open, attempt to open stash (the function returns true if stash is already open)
- if ((!getUIFlag(0x1a) && !Town.openStash()) || !emptyCube()) {
- print("could not open stash");
- }
- i = -1;
- string = "transmute: "
- while (list.length) {
- string += (list[0].name + (list.length > 1 ? " + " : ""));
- Storage.Cube.MoveTo(list[0]);
- list.shift();
- }
- if (!openCube()) {
- print("could not open stash");
- }
- if(!getParty(helper)) {
- print("The Trader is not in the game anymore.");
- } else {
- transmute();
- cycles += 1;
- }
- delay(700 + me.ping);
- print("Cubing: " + string);
- //D2Bot.printToConsole(string + ";5");
- newitem = me.findItems(-1, -1, 6);
- if (newitem) {
- for (j = 0; j < newitem.length; j += 1) {
- result = Pickit.checkItem(newitem[j]);
- switch (result.result) {
- case 0:
- //Misc.logItem("Not kept", newitem[j]);
- break;
- case 1:
- Misc.logItem("Cubing kept", newitem[j]);
- newitem[j].drop();
- break;
- }
- }
- }
- if (!emptyCube()) {
- break;
- }
- }
- else {
- end = true;
- }
- }
- while (getUIFlag(0x1A) || getUIFlag(0x19)) {
- me.cancel();
- delay(300);
- }
- end = false;
- }
- if(bquality === 4){
- Town.move("stash");
- delay(20);
- Town.openStash();
- while (!end) {
- allitems = me.findItems(-1, 0); // get all items
- list = []; //empty list
- usedGems = [];
- for (k = 0; k < allitems.length; k += 1) { // search for a magic item
- if (allitems[k].classid === bid && allitems[k].quality === 4) { // find a magic item item
- list.push(allitems[k]); // push into the item list
- break; // stop searching
- }
- }
- for (k = 0; k < allitems.length; k += 1) { // search for perf Gem
- if ([561, 566, 571, 576, 581, 586].indexOf(allitems[k].classid) > -1) { // find a perf gem
- list.push(allitems[k]); // push into the item list
- allitems.splice(k, 1);
- break; // stop searching
- }
- }
- for (k = 0; k < allitems.length; k += 1) { // search for perf Gem
- if ([561, 566, 571, 576, 581, 586].indexOf(allitems[k].classid) > -1) { // find a perf gem
- list.push(allitems[k]); // push into the item list
- allitems.splice(k, 1);
- break; // stop searching
- }
- }
- for (k = 0; k < allitems.length; k += 1) { // search for perf Gem
- if ([561, 566, 571, 576, 581, 586].indexOf(allitems[k].classid) > -1) { // find a perf gem
- list.push(allitems[k]); // push into the item list
- allitems.splice(k, 1);
- break; // stop searching
- }
- }
- if(list.length == 4) {
- // If cube isn't open, attempt to open stash (the function returns true if stash is already open)
- if ((!getUIFlag(0x1a) && !Town.openStash()) || !emptyCube()) {
- print("could not open stash");
- }
- i = -1;
- string = "transmute: "
- while (list.length) {
- string += (list[0].name + (list.length > 1 ? " + " : ""));
- Storage.Cube.MoveTo(list[0]);
- list.shift();
- }
- if (!openCube()) {
- print("could not open stash");
- }
- if(!getParty(helper)) {
- print("The Trader is not in the game anymore.");
- } else {
- transmute();
- cycles += 1;
- }
- delay(700 + me.ping);
- print("Cubing: " + string);
- //D2Bot.printToConsole(string + ";5");
- newitem = me.findItems(-1, -1, 6);
- if (newitem) {
- for (j = 0; j < newitem.length; j += 1) {
- result = Pickit.checkItem(newitem[j]);
- switch (result.result) {
- case 0:
- //Misc.logItem("Not kept", newitem[j]);
- break;
- case 1:
- Misc.logItem("Cubing kept", newitem[j]);
- newitem[j].drop();
- break;
- }
- }
- }
- if (!emptyCube()) {
- break;
- }
- }
- else {
- end = true;
- }
- }
- while (getUIFlag(0x1A) || getUIFlag(0x19)) {
- me.cancel();
- delay(300);
- }
- end = false;
- }
- if(bquality === 8){
- Town.move("stash");
- delay(20);
- Town.openStash();
- while (!end) {
- allitems = me.findItems(-1, 0); // get all items
- list = []; //empty list
- for (k = 0; k < allitems.length; k += 1) { // search for a magic item
- if (allitems[k].classid === bid && allitems[k].quality === 4) { // find a magic item item
- list.push(allitems[k]); // push into the item list
- break; // stop searching
- }
- }
- for (l = 0; l < craftList.length; l +=1){
- for (k = 0; k < allitems.length; k += 1) {
- if (allitems[k].classid === craftList[l]) { // find a ingridient
- list.push(allitems[k]); // push into the item list
- allitems.splice(k, 1);
- break; // stop searching
- }
- }
- }
- if(list.length == craftList.length + 1) {
- // If cube isn't open, attempt to open stash (the function returns true if stash is already open)
- if ((!getUIFlag(0x1a) && !Town.openStash()) || !emptyCube()) {
- print("could not open stash");
- }
- i = -1;
- string = "transmute: "
- while (list.length) {
- string += (list[0].name + (list.length > 1 ? " + " : ""));
- Storage.Cube.MoveTo(list[0]);
- list.shift();
- }
- if (!openCube()) {
- print("could not open stash");
- }
- if(!getParty(helper)) {
- print("The Trader is not in the game anymore.");
- } else {
- transmute();
- cycles += 1;
- }
- delay(700 + me.ping);
- print("Cubing: " + string);
- //D2Bot.printToConsole(string + ";5");
- newitem = me.findItems(-1, -1, 6);
- if (newitem) {
- for (j = 0; j < newitem.length; j += 1) {
- result = Pickit.checkItem(newitem[j]);
- switch (result.result) {
- case 0:
- //Misc.logItem("Not kept", newitem[j]);
- break;
- case 1:
- Misc.logItem("Cubing kept", newitem[j]);
- newitem[j].drop();
- break;
- }
- }
- }
- if (!emptyCube()) {
- break;
- }
- }
- else {
- end = true;
- }
- }
- while (getUIFlag(0x1A) || getUIFlag(0x19)) {
- me.cancel();
- delay(300);
- }
- end = false;
- }
- if(bquality === 9){
- Town.move("stash");
- delay(20);
- Town.openStash();
- while (!end) {
- allitems = me.findItems(-1, 0); // get all items
- list = []; //empty list
- for (k = 0; k < allitems.length; k += 1) { // search for a base item
- if (allitems[k].classid === bid && allitems[k].quality <= 3 && !allitems[k].getFlag(0x4000000)){ // find a base item
- list.push(allitems[k]); // push into the item list
- break; // stop searching
- }
- }
- for (l = 0; l < runeList.length; l +=1){
- for (k = 0; k < allitems.length; k += 1) {
- if (allitems[k].classid === runeList[l]) { // find a ingridient
- list.push(allitems[k]); // push into the item list
- allitems.splice(k, 1);
- break; // stop searching
- }
- }
- }
- if(list.length == runeList.length + 1) {
- // If cube isn't open, attempt to open stash (the function returns true if stash is already open)
- if ((!getUIFlag(0x1a) && !Town.openStash())) {
- print("could not open stash");
- }
- i = -1;
- if(!getParty(helper)) {
- print("The Trader is not in the game anymore.");
- } else {
- for(k = 1; k <= runeList.length; k +=1){
- socketItem(list[0], list[k]);
- }
- }
- delay(700 + me.ping);
- //D2Bot.printToConsole(string + ";5");
- result = Pickit.checkItem(list[0]);
- switch (result.result) {
- case 0:
- //Misc.logItem("Not kept", list[0]);
- break;
- case 1:
- Misc.logItem("Runeword kept", list[0]);
- list[0].drop();
- break;
- }
- cycles += 1;
- }
- else {
- end = true;
- }
- }
- while (getUIFlag(0x1A) || getUIFlag(0x19)) {
- me.cancel();
- delay(300);
- }
- end = false;
- }
- if(bquality !== 6 && bquality !== 4 && bquality !== 8 && bquality !== 9){
- throw new Error("Only Magic, Rare, Runeword and Crafted Items are supported in the script.");
- return false;
- }
- return true;
- }
- function socketItem(base, rune) {
- var s, tick;
- if (!rune.toCursor()) {
- return false;
- }
- for (s = 0; s < 3; s += 1) {
- clickItem(0, base.x, base.y, base.location);
- tick = getTickCount();
- while (getTickCount() - tick < 2000) {
- if (!me.itemoncursor) {
- delay(300);
- return true;
- }
- delay(10);
- }
- }
- return false;
- }
- function openCube() {
- var p, tick,
- cube = me.getItem(549);
- if (!cube) {
- return false;
- }
- for (p = 0; p < 3; p += 1) {
- cube.interact();
- tick = getTickCount();
- while (getTickCount() - tick < 1000) {
- if (getUIFlag(0x1A)) {
- delay(500);
- return true;
- }
- delay(10);
- }
- }
- return false;
- }
- function emptyCube() {
- var cube = me.getItem(549),
- citems = me.findItems(-1, -1, 6);
- if (!cube) {
- return false;
- }
- if (!citems) {
- return true;
- }
- while (citems.length) {
- if (Storage.Inventory.CanFit(citems[0])) {
- Storage.Inventory.MoveTo(citems[0]);
- } else {
- return false;
- }
- citems.shift();
- }
- return true;
- }
- while(true){
- this.PacketReceived = function(bytes) {
- switch(bytes[0]) {
- case 0x78:
- tradeAccepted = true;
- print("Trade Accepted = True");
- break;
- }
- };
- this.PacketSent = function(bytes) {
- switch (bytes[0]) {
- case 0x30:
- if (blockStatus) {
- print("[Blocked] 0x30");
- return true;
- }
- break;
- }
- return false;
- };
- this.LeaveHandler = function(user, msg) {
- if (user === opener) {
- if (msg === "leave!") {
- leave = true;
- }
- }
- };
- addEventListener("gamepacket", this.PacketReceived);
- addEventListener("gamepacketsent", this.PacketSent);
- addEventListener("chatmsg", this.LeaveHandler);
- // Check act
- delay(2000);
- if (me.area !== 40) {
- print("Not in act 2. Changing acts.");
- if (me.area !== 1) {
- Pather.useWaypoint(1);
- }
- Town.move("warriv");
- npc = getUnit(1, "warriv");
- if (!npc || !npc.openMenu()) {
- showConsole();
- throw new Error("Act change failed.");
- return false;
- }
- Misc.useMenu(0x0D36);
- delay(1000 + me.ping * 2);
- while (!me.area) {
- delay(250);
- }
- if (me.area !== 40) {
- showConsole();
- throw new Error("Act change failed.");
- return false;
- }
- print("Act change done.");
- }
- // Start blocking 0x30
- blockStatus = true;
- // Wait to begin
- delay(2000);
- Town.move("jerhyn");
- npc = getUnit(1, "jerhyn");
- if (!npc || !npc.openMenu()) {
- showConsole();
- throw new Error("Couldn't access Jerhyn.");
- return false;
- }
- delay(200);
- me.cancel();
- delay(50);
- // Stop blocking 0x30
- blockStatus = false;
- print("pathern-move");
- Pather.moveTo(me.x - 20, me.y);
- print("pathern-move-end");
- Town.move("waypoint");
- delay(1500);
- wp = getUnit(2, "waypoint");
- if (!wp) {
- print("Couldn't reach waypoint.");
- }
- sendPacket(1, 0x49, 4, wp.gid, 1, 0, 1, 0, 1, 0, 1, 0);
- print("send wp packet");
- delay(200);
- tick = getTickCount();
- do {
- trader = getUnit(0, helper);
- // If Helper can't be found in 15s, leave.
- if (getTickCount() - tick >= 15000) {
- print("Couldn't find Helper.");
- }
- delay(100);
- } while (!trader);
- while (!getUIFlag(0x17)) {
- trader.interact();
- delay(250);
- }
- while (!(getUIFlag(0x17) && tradeAccepted)) {
- delay(300);
- print("Trade not Accepted");
- }
- tradeAccepted = false;
- // Close trade window
- // Tp Stuck?
- allitems = me.findItems(-1, 0, 5);
- for (k = 0; k < allitems.length; k += 1) { // search for a scroll
- if (allitems[k].classid === 529) { // find a scroll of town protal
- say("tptrick");
- while((getUIFlag(0x17))){
- acceptTrade();
- delay(1000);
- }
- delay(2000);
- say("closetrade");
- delay(1000);
- return true;
- }
- }
- allitems = me.findItems(-1, 0); // get all items
- for (k = 0; k < allitems.length; k += 1) { // search for a scroll
- if (allitems[k].classid === 529) { // find a scroll of town protal
- scroll = allitems[k]; // push into the item list
- break; // stop searching
- }
- }
- Storage.TradeScreen.MoveTo(scroll);
- acceptTrade();
- getPacket(1, 0x77, 1, 0x0C);
- print("Closed Trade window");
- delay(100);
- // Move out of town.
- Pather.moveToExit(41, true);
- delay(50);
- // Move back to town.
- Pather.moveToExit(40, true);
- delay(500);
- if(!me.inTown) {
- Pather.moveToExit(40, true);
- delay(500);
- }
- if(!me.inTown) {
- say("closetrade");
- D2Bot.printToConsole("Failed to go back to town.");
- delay(2000);
- return true;
- }
- Town.move("waypoint");
- delay(50);
- Pather.useWaypoint(1);
- delay(200);
- Town.move("stash");
- delay(200);
- cycles += 1;
- doReroll(quality, baseid);
- say("accept");
- delay(1000);
- doReroll(quality, baseid);
- delay(200);
- say("closetrade");
- dupeN += 1;
- seconds = Math.round(((getTickCount() - me.gamestarttime) / 1000));
- minutes = Math.floor(seconds / 60);
- seconds = seconds - minutes * 60;
- seconds = (seconds < 10 ? "0" + seconds : seconds);
- D2Bot.printToConsole("Run duration is " + minutes + ":" + seconds + " minutes and I rolled " + cycles + " times.");
- say("Starting Dupe #" + dupeN)
- say("Credits To Abelcustoms")
- }
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement