From 73c796b5ad972ef45a8effa7bb3677fb6a6e7d11 Mon Sep 17 00:00:00 2001
From: anima
Date: Thu, 12 Nov 2026 20:18:08 +0100
Subject: [PATCH] init code
---
js/03.mage.js | 4 ++
js/04.prist.js | 4 ++
js/05.paladin.js | 4 ++
js/06.ranger.js | 4 ++
js/07.rouge.js | 4 ++
js/08.warrior.js | 4 ++
js/09.merchant.js | 2 +
js/10.general.js | 45 ++++++++++++
js/11.fight.js | 0
js/12.int-base.js | 0
js/13.dex-base.js | 0
js/14.str-base.js | 0
js/15.range.js | 0
js/16.meele.js | 0
js/21.items.js | 154 +++++++++++++++++++++++++++++++++++++++++
js/22.npc.js | 7 ++
js/91.utils_default.js | 44 ++++++++++++
17 files changed, 276 insertions(+)
create mode 100644 js/03.mage.js
create mode 100644 js/04.prist.js
create mode 100644 js/05.paladin.js
create mode 100644 js/06.ranger.js
create mode 100644 js/07.rouge.js
create mode 100644 js/08.warrior.js
create mode 100644 js/09.merchant.js
create mode 100644 js/10.general.js
create mode 100644 js/11.fight.js
create mode 100644 js/12.int-base.js
create mode 100644 js/13.dex-base.js
create mode 100644 js/14.str-base.js
create mode 100644 js/15.range.js
create mode 100644 js/16.meele.js
create mode 100644 js/21.items.js
create mode 100644 js/22.npc.js
create mode 100644 js/91.utils_default.js
diff --git a/js/03.mage.js b/js/03.mage.js
new file mode 100644
index 0000000..b7edbf9
--- /dev/null
+++ b/js/03.mage.js
@@ -0,0 +1,4 @@
+load_code('general')
+load_code('fight')
+load_code('int-base')
+load_code('range')
\ No newline at end of file
diff --git a/js/04.prist.js b/js/04.prist.js
new file mode 100644
index 0000000..b7edbf9
--- /dev/null
+++ b/js/04.prist.js
@@ -0,0 +1,4 @@
+load_code('general')
+load_code('fight')
+load_code('int-base')
+load_code('range')
\ No newline at end of file
diff --git a/js/05.paladin.js b/js/05.paladin.js
new file mode 100644
index 0000000..b7edbf9
--- /dev/null
+++ b/js/05.paladin.js
@@ -0,0 +1,4 @@
+load_code('general')
+load_code('fight')
+load_code('int-base')
+load_code('range')
\ No newline at end of file
diff --git a/js/06.ranger.js b/js/06.ranger.js
new file mode 100644
index 0000000..b7edbf9
--- /dev/null
+++ b/js/06.ranger.js
@@ -0,0 +1,4 @@
+load_code('general')
+load_code('fight')
+load_code('int-base')
+load_code('range')
\ No newline at end of file
diff --git a/js/07.rouge.js b/js/07.rouge.js
new file mode 100644
index 0000000..b7edbf9
--- /dev/null
+++ b/js/07.rouge.js
@@ -0,0 +1,4 @@
+load_code('general')
+load_code('fight')
+load_code('int-base')
+load_code('range')
\ No newline at end of file
diff --git a/js/08.warrior.js b/js/08.warrior.js
new file mode 100644
index 0000000..b7edbf9
--- /dev/null
+++ b/js/08.warrior.js
@@ -0,0 +1,4 @@
+load_code('general')
+load_code('fight')
+load_code('int-base')
+load_code('range')
\ No newline at end of file
diff --git a/js/09.merchant.js b/js/09.merchant.js
new file mode 100644
index 0000000..05ee7bf
--- /dev/null
+++ b/js/09.merchant.js
@@ -0,0 +1,2 @@
+load_code('general')
+load_code('items')
\ No newline at end of file
diff --git a/js/10.general.js b/js/10.general.js
new file mode 100644
index 0000000..2a05285
--- /dev/null
+++ b/js/10.general.js
@@ -0,0 +1,45 @@
+// =========================>
+// Default Loop Configs
+// =========================>
+load_code("utils_default")
+
+const attackLoop = new ToggleLoop({
+ id: "AttkLoop",
+ label: "AutoAttk",
+ fn: auto_attck,
+ top: false,
+ interval: 1000 / 4,
+});
+
+
+// =========================>
+// functions
+// =========================>
+async function auto_attck () {
+ use_hp_or_mp();
+ loot();
+
+ if( character.rip || is_moving(character) ) return;
+
+ var target=get_targeted_monster();
+ if(!target) {
+ target=get_nearest_monster({min_xp:100,max_att:120});
+ if(target) change_target(target);
+ else {
+ set_message("No Monsters");
+ return;
+ }
+ }
+
+ if(!is_in_range(target)) {
+ move(
+ character.x+(target.x-character.x)/2,
+ character.y+(target.y-character.y)/2
+ );
+ // Walk half the distance
+ }
+ else if(can_attack(target)) {
+ set_message("Attacking");
+ attack(target);
+ }
+}
\ No newline at end of file
diff --git a/js/11.fight.js b/js/11.fight.js
new file mode 100644
index 0000000..e69de29
diff --git a/js/12.int-base.js b/js/12.int-base.js
new file mode 100644
index 0000000..e69de29
diff --git a/js/13.dex-base.js b/js/13.dex-base.js
new file mode 100644
index 0000000..e69de29
diff --git a/js/14.str-base.js b/js/14.str-base.js
new file mode 100644
index 0000000..e69de29
diff --git a/js/15.range.js b/js/15.range.js
new file mode 100644
index 0000000..e69de29
diff --git a/js/16.meele.js b/js/16.meele.js
new file mode 100644
index 0000000..e69de29
diff --git a/js/21.items.js b/js/21.items.js
new file mode 100644
index 0000000..14312d9
--- /dev/null
+++ b/js/21.items.js
@@ -0,0 +1,154 @@
+// =========================>
+// config
+// =========================>
+var send_target = "AnimaLucri"
+
+// =========================>
+// 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, 6, 0.4)
+ await do_combine(item, 3, 0.4)
+ }
+ } 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);
+ });
+ }
+ }
+ }
+}
+
diff --git a/js/22.npc.js b/js/22.npc.js
new file mode 100644
index 0000000..4d5e2b4
--- /dev/null
+++ b/js/22.npc.js
@@ -0,0 +1,7 @@
+function find_npc_by_name(npc) {
+ for (const [key, value] of Object.entries( G.npcs )) {
+ if ( value.name == npc) {
+ return find_npc(key)
+ }
+ }
+}
\ No newline at end of file
diff --git a/js/91.utils_default.js b/js/91.utils_default.js
new file mode 100644
index 0000000..bc7584d
--- /dev/null
+++ b/js/91.utils_default.js
@@ -0,0 +1,44 @@
+class ToggleLoop {
+ constructor({ id, label, fn, interval, top=true, onColor = "#00AA00", offColor = "#AA0000" }) {
+ this.id = id;
+ this.label = label;
+ this.fn = fn;
+ this.interval = interval;
+ this.onColor = onColor;
+ this.offColor = offColor;
+ this.loopId = null;
+
+ this.render();
+ var btn_fn = add_bottom_button
+ if ( top ) { btn_fn = add_top_button }
+ btn_fn(this.id, `${this.label}: AUS`, () => this.toggle());
+ }
+
+ get running() {
+ return this.loopId !== null;
+ }
+
+ start() {
+ if (this.running) return;
+ this.loopId = setInterval(this.fn, this.interval);
+ this.render();
+ }
+
+ stop() {
+ if (!this.running) return;
+ clearInterval(this.loopId);
+ this.loopId = null;
+ this.render();
+ }
+
+ toggle() {
+ this.running ? this.stop() : this.start();
+ }
+
+ render() {
+ try {
+ set_button_value(this.id, `${this.label}: ${this.running ? "AN" : "AUS"}`);
+ set_button_color(this.id, this.running ? this.onColor : this.offColor);
+ } catch (e) {}
+ }
+}
\ No newline at end of file