Page 60 of 369

Re: Legends of Idleon

Posted: Fri Jul 30, 2021 8:01 am
by D4C
Is there a way to rollback your vials levels? I was using the cauldroncommand, and I accidentally went a bit too far with one vial, and now the costs are showing up as NANB. I'm pretty sure there's a way to lower a specific vial level with the console, but I don't know how to lol.

Re: Legends of Idleon

Posted: Fri Jul 30, 2021 9:55 pm
by idlefencing
hey so i tried unpacking the app.asar, i added the consoleinject and tried to repack but now the game wont open and im not sure what ive done wrong

Re: Legends of Idleon

Posted: Sat Jul 31, 2021 12:35 am
by subjectification
Is it possible to extract the formula for afk gains from the js file? Might be useful if you don't want to make things ultra easy but want to know how to optimise your build.

Re: Legends of Idleon

Posted: Sat Jul 31, 2021 2:29 pm
by andre420
Any Infos after the Update? c:

Re: Legends of Idleon

Posted: Sat Jul 31, 2021 3:59 pm
by walkerofthevalley
Creater0822 wrote:
Tue Jul 20, 2021 9:24 pm
alocmey123 wrote:
Tue Jul 20, 2021 6:33 pm
Creater0822 wrote:
Sun Jul 18, 2021 5:54 pm


I honestly haven't tried changing it into a bigger number. I outright changed the curse into None instead, so that it doesn't tamper with the afk time at all.
I tried to follow your guy's instructions and it didn't work. What number am I supposed to change in that string of numbers? Sorry for the trouble!!!

I tried changing the number 600 to 60000 but it didn't work. Tried changing it None and it didn't work as well.
The relevant piece of code reads like this:

Code: Select all

"Unending_Energy +{%_Class_and_Skill_EXP Max_AFK_time_is_now_10_hours._Use_this_prayer_sparingly. 30 10 1 600 51 0".split(" "),
As seen, this singular string is split into an Array of strings by a single whitespace " ", which is how we distinguish the parameters. As we can see, the first element is the Prayer's name, followed by the second element being its bonus. The third element is the curse, e.g. Max_AFK_time_is_now_10_hours._Use_this_prayer_sparingly.. This is the string segment that you'd like to change into None._Even_curses_need_time_off_every_now_and_then.
Is this still working? Tried to re-apply after update and its limiting my afk time to 10 hours now :(

Re: Legends of Idleon

Posted: Sun Aug 01, 2021 5:46 pm
by salmon85
Looks like Lavaflames banning people from discord now.


You were banned from Legends of IdleOn! | verified loser

He's a tad slow at getting around to it, not played the game in weeks.

Re: Legends of Idleon

Posted: Sun Aug 01, 2021 11:29 pm
by chrisdab
I have been trying out the tools from iBelg and Creater0822. I have a request that is not really a cheat, but Lavaflame hasn't added a hotkey for auto-combat. He has hotkeys for inventory, map, talents and others, but I have a need to micromanage my colosseum combat and having to mouse click to turn on and off auto-combat isn't working for me. I this an option that can be added?

Re: Legends of Idleon

Posted: Tue Aug 03, 2021 7:47 pm
by Creater0822
Hell yeah everybody, I'm semi-back with a brand new cheat that is currently unfinished yet.
So some of you may remember the first generation Idleon console, which was in-game through the keybind `.

Through a similar fashion I've come up with this following piece of code that needs to be added to Z.js similarly:

Code: Select all

this.addAnyKeyPressedListener((function(e, t) {
    if (e.keyCode === 65 && b.engine.getGameAttribute("MenuType") === 6) { // Key A
        const EquipOrd = b.engine.getGameAttribute("displayData").h["PlayerEquipmentOrder"][0];
        EquipOrd[1] = "EquipmentSword3";
    }
})), this.addAnyKeyPressedListener((function(e, t) {
    if (e.keyCode === 83 && b.engine.getGameAttribute("MenuType") === 6) { // Key S
        const EquipOrd = b.engine.getGameAttribute("displayData").h["PlayerEquipmentOrder"][0];
        EquipOrd[1] = "EquipmentBows8";
    }
})), this.addAnyKeyPressedListener((function(e, t) {
    if (e.keyCode === 68 && b.engine.getGameAttribute("MenuType") === 6) { // Key D
        const EquipOrd = b.engine.getGameAttribute("displayData").h["PlayerEquipmentOrder"][0];
        EquipOrd[1] = "EquipmentWands7";
    }
}))
With this code added to Z.js you can perform instant weapon switching with the keys A, S and D (respectively Scythe, Bow, Staff), if your action bar is visible, hence MenuType equals 6. And yes, this does work mid-combat.

But indeed, this methodology is both unfinished and imperfect, and here are the reasons why:
  1. As you can see, I'm directly modifying the equipped weapon id, which does not change item-specific properties such as upgrade stone stats etc.. So that may indeed cause a bug associated to the methodology. Therefore, this honestly does not equal a True item switcher, such as for instance switching with any real item inside inventory slot 1 on key pressing, it ain't that...
  2. This method requires pre-editing Z.js and I have not yet found a way to dynamically add keybinds into the game from the external-console.
And so... Here are my long-term goals/ambitions, which I may not necessarily want to complete (depending on how much time it takes me)
  • A True item switcher: For instance by having let's say the first three inventory slots reserved for weapons: And upon pressing the right key, the weapon along with all of its item properties are switched correctly.
  • A dynamic syntax compatible with the external console, here's an ambitious example: One cheat command that initializes reading the config.json file. And in that json file, the user can write down the keycode for the keyboard button thathe/she wants to keybind, along with a weapon Id (obviously through a syntax imagined by me). And so it's then dynamically registered into the already-running game upon running the command.
How can you help me & what needs to be researched?
So far I know these things:
  • The keybind code resides in ["scripts.ActorEvents_93"], and I have not found a way to add/register a new key into the running game through the external console.
  • Idk if there's even a way in JavaScript to write that I want to execute a addAnyKeyPressedListener() within that object, and/or explicitly adding code to a function without altering anything else (e.g. assuming everything else a 100% black-box), through a Proxy handler.
  • I also still don't know the exact location to find the code for item switching yet, so I cannot do things fully vanilla-properly yet. One way I could still manage a True item switcher, is by statically swapping the item Id and item properties of both the weapon slot and a pre-chosen inventory slot. This should theoretically work as long as I carefully program it through the usage of JSON.parse(JSON.stringify()) which creates deep copies, but if I can make use of the game's native methodology I'd much rather pick that.
Either way... If anybody knows something about these specific things, please do let me know :D

Re: Legends of Idleon

Posted: Tue Aug 03, 2021 9:37 pm
by Creater0822
Quick update release: Imperfect key-bound item switcher

How to:
  1. Traditionally extract Z.js and beautify with VS Code (or any other beautifer)
  2. Search for u["scripts.ActorEvents_93"] and scroll a bit down to where you see init: function (). Between the brackets of this init function is where you paste the following code:

    Code: Select all

    this.addAnyKeyPressedListener((function(e, t) {
        if ( (e.keyCode === 65 || e.keyCode === 83 || e.keyCode === 68) && b.engine.getGameAttribute("MenuType") === 6) { // Key A
            let index;
            const EquipOrd = b.engine.getGameAttribute("EquipmentOrder")[0];
            const EquipMap = b.engine.getGameAttribute("EquipmentMap")[0];
    
            switch(e.keyCode) {
    			case 65: index = 0; break;
    			case 83: index = 1; break;
    			case 68: index = 2; break;
    			default: break;
    		}
            EquipOrd[1] = b.engine.getGameAttribute("InventoryOrder")[index];
            EquipMap[1] = b.engine.getGameAttribute("ItemMap")[index];
        }
    }))
    
  3. Careful that you copy/paste it correctly and don't forget to add a comma between these function calls. But that's it!!
Yes, this is the exact same method as integrating iBelg's original in-game console (which some people might remember).

What it does:
When your ability bar is visible (e.g. the bottom interface with combat abilities you can press) the keys A, S and D become hotkeys that allow you to change weapons with whatever are on your first, second and third inventory slots (even works mid-combat). For example have Deuscythe in slot 1, Blackhole Bow in slot 2 and Grey Gatsby in slot 3 (it's highly recommended to lock these inventory slots). Finally it's recommended to have NOTHING equipped on your weapon slot, because it will be overwritten.

When you press these keybinds A, S or D, the code internally overwrites your weapon slot with the item id and properties in those inventory slots (it doesn't truly swap to that physical item). This way you're basically creating a clone of the actual weapons that are still in your inventory.

Warning:
I have not programmed a dummy proof mechanic to prevent the switching in case you have a non-weapon item in one of those inventory slots, in which case it'll most likely crash (haven't tried that out myself, and likely never will xD).

Update 1:
Yeah yeah!! My code has improved: I've combined the three keybinds into a singular addAnyKeyPressedListener, ez-game!!

Even more: I've got a true switch simulation code working, which actually allows you to switch item between inventory and weapon slot, and here's the code:

Code: Select all

// True switch simulation
this.addAnyKeyPressedListener((function(e, t) {
    if ( (e.keyCode === 65 || e.keyCode === 83 || e.keyCode === 68) && b.engine.getGameAttribute("MenuType") === 6) { // Key A
        let index;
        // Shallow copy
        const EquipOrd = b.engine.getGameAttribute("EquipmentOrder")[0];
        const EquipMap = b.engine.getGameAttribute("EquipmentMap")[0];
        // Deep copy
        const InvOrd = z.deepCopyList(b.engine.getGameAttribute("InventoryOrder"));
        const InvMap = z.deepCopyList(b.engine.getGameAttribute("ItemMap"));

        switch(e.keyCode) {
			case 65: index = 0; break;
			case 83: index = 1; break;
			case 68: index = 2; break;
			default: break;
		}
        b.engine.getGameAttribute("InventoryOrder")[index] = EquipOrd[1];
        b.engine.getGameAttribute("ItemMap")[index] = EquipMap[1];

        EquipOrd[1] = InvOrd[index];
        EquipMap[1] = InvMap[index];
    }
}))
But here's the deal:
First off this obviously ain't accomplished through the native game methodology, but still just some simple object re-writing. However once I've nailed the code I immediately realized that yeah... I have made just that. But when you're item switching, the actual weapons will obviously not stay on the same slot (which in contrary was the case with the shallow weapon copy method).
TLDR: Now I'm actually starting to like the shallow weapon copy much more than actually weapon switching.

All that remains now:
  1. I obviously want to have a way to have these keybind extensions addable from the external console.
  2. Then I'd go my way designing a nice syntax for my config.json to further extend the fun of custom keybinding.
  3. And of course I'd then dummy-proof it so that non-weapons cannot be written to the weapon slot.

Re: Legends of Idleon

Posted: Wed Aug 04, 2021 1:33 am
by Gibsonsg
I'm only knowledgeable in js, so I dunno, but why can't the injection process modify the Z.js? Why do we need to supply a modified version for the shadowban and now keybinds? I'd assume you can still access the code from Z.js? You could just inject your edits on the fly?

Re: Legends of Idleon

Posted: Wed Aug 04, 2021 3:40 pm
by Creater0822
Gibsonsg wrote:
Wed Aug 04, 2021 1:33 am
I'm only knowledgeable in js, so I dunno, but why can't the injection process modify the Z.js? Why do we need to supply a modified version for the shadowban and now keybinds? I'd assume you can still access the code from Z.js? You could just inject your edits on the fly?
That's a good question, I'll start things off with the generalized state of where we currently are.

The first thing to understand is how iBelg's tool functions with the game:
So this game Idleon is basically a web-based game that loads and runs a webpage full of javascripts, including ofc Z.js. With that said, LegendsOfIdleon.exe is actually just a small user agent built from Electron.

And so, iBelg's injector basically executes this user agent whilst at the same time HTTP intercepting the Z.js file. Upon interception, whatever is inside cheats.js is then added to this live-version of Z.js. The exact location within Z.js is obviously pinpointed through Regex, so that cheats.js is added to the correct line where it should work.

Now back to the topic, I'm honestly not sure if I fully understand your question, but I'm assuming that you're asking whether you can dynamically inject code at any time while the game's already running. (Feel free to correct me if I misinterpreted it)
So assuming that to be the question, the answer is: No you cannot do that. The code from cheats.js has to be added to Z.js prior to the game being fully loaded.

Due to this nature, iBelg's tool has to be rebuild with the addition of more replacements, in case you'd like to use his tool instead of making raw changes to the Z.js code inside app.asar. Thanks to the variety of cheating capabilities given by the external console, we often don't need raw editing anymore (as long as we have the JavaScript skills to back it up).

The unban methodology is different however, as we'd absolutely want the source code to already-never flip the shadowing variables before the game's been loaded. That's why for this particular thing we do have to perform a raw edit. So since this particular cheat requires raw editing, I opted for the expansion to InjectCheatsF2, which indeed lets iBelg's tool replace the code for us (just to skip the hassle of manually editing every new patch). Moreover, the injection process has a larger likelihood to failure against a beautified Z.js.

Lastly about unbanning came my choice to expand the tool with config.json, where my reason is the very-slim chance that the unban modifications can potentially yield some harm. So I've included the non-unban option as default for anybody that aims to safely cheat without ever being shadow banned, as my shadow-unban does not truly unban the account (just un-hides).

Alright, long story already, but here's the final topic e.g. keybinds:
The reason that I'm doing raw editing for the keybind cheats, is simply because I lack the skills to code the same thing as a console cheat yet.

Re: Legends of Idleon

Posted: Sat Aug 07, 2021 3:58 pm
by IntoTheRuins
Hey guys,

I'm interested in making a script for the fishing minigame.
The script would simply need to know the length (start and end) of where the fish can spawn, and then you hover your mouse over the fish you want to catch and run a calculation where it determines the amount of power required to reach that location.
Unfortunately, I run into an two issues: the formula I have for determining the time to click and hold the mouse button to raise the power gauge is screen size-dependent and when I click on the fish location to run the script, it always overshoots by a constant value.
Have any of you guys attempted a script for the fishing minigame? What was your approach to the time_click and fish distance issue?

Python code below

import keyboard
import pyautogui as gui
import time


def getMouseX():
return gui.position()[0]

def click():
gui.click()

def getStartAndEnd():
while(True):
key=keyboard.read_key()
if(key == 'a'):
x=getMouseX()
elif(key == 'd'):
y=getMouseX()
else:
break
return x,y

def getFishPosition():
key=keyboard.read_key()
if(key == 's'):
return getMouseX()
else:
return None


def calculateClickTime(fishDist):
return ((3*pow(10,-6)*pow(fishDist,3))+(1.6391*fishDist)-(1*pow(10,-9)*pow(fishDist,4))-(.0026*pow(fishDist,2))+246.06)
# ((-1*10**-9)*(fishDist**4))+((3*10**-6)*(fishDist**3))-((0.0026)*(fishDist**2))+(1.6391*fishDist)+246.06
# (-.0004*(fishDist)**2)+(1.0094*fishDist)+288.21

if __name__=='__main__':
start,end=getStartAndEnd()
tot=end-start

# PLAY GAME
while(True):
# STEP 1: Press 's' for fish location
fishDist=getFishPosition()
if fishDist is None:
break
else:
fishDist=abs(fishDist-tot)
print(fishDist)

# STEP 2: Calculate fish distance
clickTime = calculateClickTime(fishDist)/1000
print(clickTime)

# STEP 3: RUN CLICK FUNCTION
#gui.click(duration=clickTime)
gui.mouseDown()
time.sleep(clickTime)
gui.mouseUp()

Re: Legends of Idleon

Posted: Sat Aug 07, 2021 9:50 pm
by Creater0822
IntoTheRuins wrote:
Sat Aug 07, 2021 3:58 pm
Hey guys,

I'm interested in making a script for the fishing minigame.
The script would simply need to know the length (start and end) of where the fish can spawn, and then you hover your mouse over the fish you want to catch and run a calculation where it determines the amount of power required to reach that location.
Unfortunately, I run into an two issues: the formula I have for determining the time to click and hold the mouse button to raise the power gauge is screen size-dependent and when I click on the fish location to run the script, it always overshoots by a constant value.
Have any of you guys attempted a script for the fishing minigame? What was your approach to the time_click and fish distance issue?

Python code below

Code: Select all

import keyboard
import pyautogui as gui
import time


def getMouseX():
    return gui.position()[0]
   
def click():
    gui.click()

def getStartAndEnd():
    while(True):
        key=keyboard.read_key()
        if(key == 'a'):
            x=getMouseX()
        elif(key == 'd'):
            y=getMouseX()
        else:
            break
    return x,y

def getFishPosition():
    key=keyboard.read_key()
    if(key == 's'):
        return getMouseX()
    else:
        return None
    

def calculateClickTime(fishDist):
    return ((3*pow(10,-6)*pow(fishDist,3))+(1.6391*fishDist)-(1*pow(10,-9)*pow(fishDist,4))-(.0026*pow(fishDist,2))+246.06)
# ((-1*10**-9)*(fishDist**4))+((3*10**-6)*(fishDist**3))-((0.0026)*(fishDist**2))+(1.6391*fishDist)+246.06
    # (-.0004*(fishDist)**2)+(1.0094*fishDist)+288.21

if __name__=='__main__':
    start,end=getStartAndEnd()
    tot=end-start
    
    # PLAY GAME
    while(True):
        # STEP 1: Press 's' for fish location
        fishDist=getFishPosition()
        if fishDist is None:
            break
        else:    
            fishDist=abs(fishDist-tot)
        print(fishDist)
        
        # STEP 2: Calculate fish distance
        clickTime = calculateClickTime(fishDist)/1000
        print(clickTime)
        
        # STEP 3: RUN CLICK FUNCTION
        #gui.click(duration=clickTime)
        gui.mouseDown()
        time.sleep(clickTime)
        gui.mouseUp()
Interesting Python script (nice to quick-discover packages this way :D ), but yeah... If you're aiming to use external scripts, you'll probably require some shape or form of image recognition. Or at least I for one as Noob in the botting departion would think so, yeah yeah!! Either way, this one's quite interesting despite that I'm most likely not going to grind out a fishing cheat.

Edit: I changed your code highlight into a coed block in my quote, just so that this thread page is less scrolly :D

Re: Legends of Idleon

Posted: Sun Aug 08, 2021 9:23 am
by Shiwo
does this still work?? i cant seem to find the app file and the zjs file at all

edit:nvm i am just blind

Re: Legends of Idleon

Posted: Mon Aug 09, 2021 2:21 pm
by QwertyQWOP
I'm using ibelg's/creator's console and I'm trying to drop, specifically, event cards, is there a specific place I need to use the search command to find the id names for cards?