// =========================> // config // =========================> var send_target = "AnimaLucri" var upgrade_level = 6 var upgrade_chance = 0.4 var compound_level = 3 var compound_chance = 0.4 // =========================> // loop config // =========================> load_code("utils_default") const craftLoop = new ToggleLoop({ id: "UpgradeLoop", label: "AutoUpgrade", fn: auto_upgrade, interval: 30000, }); // =========================> // buttons // =========================> // add_top_button("autocraft", "AutoCraft", main); add_top_button("itemsendall", "Send Items", send_all_items_to); // =========================> // functions // =========================> load_code("npc") async function auto_upgrade() { target = find_npc_by_name("Cue") diff = 500 if ( ( character.x + diff > target.x ) && ( character.x - diff < target.x ) && ( character.y + diff > target.y ) && ( character.y - diff < target.y ) ) { var level_items = count_level_items() for (let item in level_items) { await do_upgrade(item, upgrade_level, upgrade_chance) await do_combine(item, compound_level, compound_chance) } } else { await smart_move(target) } } async function send_all_items_to() { for ( let i = 0; i < 42; i++ ) { if (character.items[i]) { if ( G.items[ character.items[i].name ].upgrade || G.items[ character.items[i].name ].compound ) { send_item(send_target, i) } } } send_gold(send_target, 100000000) } function count_level_items() { // count all items in inventory they have a level let inventar = {} for (let item of character.items) { if ( item == null ) { continue; } if (! ("level" in item) ) { continue; } if ( item.name in inventar ) { inventar[item.name]++ } else { inventar[item.name] = 1 } } if ( debug ) console.log ( "count_level_items(): ", inventar ) return inventar } function locate_all_item(name) { let slots = {} for (var i = 0; i < character.items.length; i++) { if (character.items[i] && character.items[i].name == name) { slots[i] = character.items[i] }; } if ( debug ) console.log ( "locate_all_item(): ", slots ) return slots } function locate_all_item_by_level(name, level) { let slots = {} for (var i = 0; i < character.items.length; i++) { if ( character.items[i] == null ) { continue; } if ( ! ("level" in character.items[i]) ) { continue; } if ( ( character.items[i] && character.items[i].name == name ) && ( character.items[i].level == level) ) { slots[i] = character.items[i] }; } if ( debug ) console.log ( "locate_all_item_by_level(): ", slots ) return slots } async function do_upgrade(item, level = 5, min_change = 0.5) { if ( ! G.items[item].upgrade ) { return; } for (let lv = 0; lv < level; lv++) { var slots = locate_all_item_by_level(item, lv) for ( let index in slots ) { var upgrade_scroll = "scroll0" if ( lv >= 5 ) { upgrade_scroll = "scroll1" } if ( locate_item(upgrade_scroll) == -1 ) { await buy(upgrade_scroll) } var preview = await upgrade( index, locate_item(upgrade_scroll), null, true ) if ( preview.chance >= min_change ) { await upgrade( index, locate_item(upgrade_scroll)).then(function(data){ if(data.success) game_log("I have a +"+data.level+" "+item+" now!"); else game_log("Rip " + item); }); } } } } async function do_combine(item, level = 5, min_change = 0.5) { if ( ! G.items[item].compound ) { return; } for (let lv = 0; lv < level; lv++) { var slots = locate_all_item_by_level(item, lv) const keys = Object.keys(slots).map(Number); if ( keys.length <= 3 ) { continue; } for ( let i = 0; i + 2 < keys.length; i += 3) { var upgrade_scroll = "cscroll0" if ( lv >= 5 ) { upgrade_scroll = "cscroll1" } if ( locate_item(upgrade_scroll) == -1 ) { await buy(upgrade_scroll) } var preview = await compound( keys[i], keys[i+1], keys[i+2], locate_item(upgrade_scroll), null, true ) if ( preview.chance >= min_change ) { await compound( keys[i], keys[i+1], keys[i+2], locate_item(upgrade_scroll) ).then(function(data){ if(data.success) game_log("I have a +"+data.level+" "+item+" now!"); else game_log("Rip " + item); }); } } } }