kolton / d2bot-with-kolbot

d2bot game manager by D3STROY3R with kolbot libs by kolton for d2bs
345 stars 334 forks source link

Adding teleport charges to Pather.js ? #1682

Open Spoofzor opened 5 years ago

Spoofzor commented 5 years ago

Hello all. I'm here again with a new issue that it seems I'm unable to solve on my own.

I'm attempting to add recognition of teleport charges in Pather.js (for my pala who doesn't have enigma, but functionality for both so I don't have to undo changes later)

I've seen some very helpful commits and issues, but still am not able to get this working. I saw the addition of chargedskill functions in Prototypes.js but can't stop getting errors when attempting to run the bot.

in Pather.js, I added the last OR condition: useTeleport: function () { return this.teleport && !me.getState(139) && !me.getState(140) && !me.inTown && ((me.classid === 1 && me.getSkill(54, 1)) || me.getStat(97, 54) || me.castChargedSkill(54)); }

Error Error in xxxxxx (prototypes.js #1204) stats[204] is undefined

in Prototypes.js lines 1135 to 1253 (end) https://pastebin.com/k9KmNzWt Error occurs on line 70 for this paste

I wasn't sure of the syntax on line 1204: stats = stats[204].filter(validCharge); where stats[204] is undefined and results in error

/edit I suspect that the addition I made to Pather.js is not valid and thus results in the error.

DarkHorseDre commented 5 years ago

bro, plz paste into pastebin.com or similar and link to it to avoid flooding the page in non syntax-highlighted blocks of text - many people wont read it. youre referencing line numbers which are lost on this page - they are maintained on paste sites.

check this PR for casting charged skills - mainly added for buffs but can be used for any skill https://github.com/kolton/d2bot-with-kolbot/pull/1523

Spoofzor commented 5 years ago

@DarkHorseDre Coding Crusader! My hero

Fair enough. I have a large monitor, so I hadn't considered the inconvenience. Done. Link is in my original post as well. https://pastebin.com/k9KmNzWt : error comes from line 70

I had looked over #1523 and while it was helpful, it doesn't quite enable a solution for my issue. Although, I admit, the function castChargedSkill() in Prototypes.js is the backbone of my effort.

Pather.js doesn't consider teleport charges when determining if teleport is possible or not - which is what I'm attempting to do.

I imagine I need to "add teleport charges" to the logical expresion for the useTeleport function in Pather.js , and then I'll need to castChargedSkill in place of casting the skill teleport. I might even need to keep track of the number of charges used to ensure the bot towns/repairs before running out of charges.

Thoughts? I'll keep trying.

DarkHorseDre commented 5 years ago

lol no crusader, just helping you out - you know it makes sense ;) (proportion of monitor for code no matter the size for a large block vs 1 line link is a no brainer ;) )

Times past for me to check your code so just had a cold glimpse at pather.js - yes pather.js uses getskill like the other scripts before casting. getskill (id,0) looks at hard points, so you're right to look for both.

there are two getskills:

this.useTeleport = this.teleport && !me.getState(139) && !me.getState(140) && !me.inTown &&
                            ((me.classid === 1 && me.getSkill(54, 1)) || me.getStat(97, 54));

and

moveToUnit: function (unit, offX, offY, clearPath, pop) {
        this.useTeleport = this.teleport && !me.getState(139) && !me.getState(140) && !me.inTown &&
                            ((me.classid === 1 && me.getSkill(54, 1)) || me.getStat(97, 54));

notice the classid check - you gotta factor this in for non sorcs using tele amu. (it checks that char is sorc with tele hard skill OR the char has oskill tele from enigma - no charged skill check unless you use 54,1 which I think you did).

also note that if packet casting is enabled it doesn't use the castskill command. actually, packet casting from amu could be simpler in general?..

note that I dont think you can setskill the traditional way so just do it the new way as per the pr.

Some changes were made to the original code for it to be submitted. try this line when calling:

me.finditem(/*itemidforamu*/).castChargedskill(54);
Spoofzor commented 5 years ago

In my Pather.js only useTeleport has a getSkill check:

useTeleport: function () { return this.teleport && !me.getState(139) && !me.getState(140) && !me.inTown && ((me.classid === 1 && me.getSkill(54, 1)) || me.getStat(97, 54)); },

While both moveTo and moveToUnit does not:

var useTeleport = this.useTeleport();

So, I believe I only need to edit the original useTeleport function? MoveTo and MoveToUnit would then call useTeleport like usual and thus, my edited version.

so me.classid == 1 && me.getSkill(54, 1) is checking for sorc class and hard point into Tele and me.getStat(97, 54) is checking armor slot? or specifically enigma runeword? for teleport oskill

@DarkHorseDre What do you mean? by:

no charged skill check unless you use 54,1

... .castChargedSkill(54, 1) are not valid arguments so it returns an error

I'm having trouble finding out the amulet slot, or the item id of my amulet, but I feel like it should not be that difficult. I've seen 12 and 520, but I believe those are types and classID respectively and not relevant here. Is there a simple way to find it? Searching didn't yield any applicable results.

Also, when trying ... || me.findItem(...).castChargedSkill(54) in useTeleport function I receive the error me.findItem(...).castChargedSkill(54) is not a function

I feel like I can't use item.castChargedSkill() as part of the logical statement in useTeleport, but I'm not sure what else to try.

DarkHorseDre commented 5 years ago

oops no no i was referring to getskills 2nd and 3rd param -

getSkill(skill, hand) -> real skill / perm skill from item getSkill(skill, hand, false) -> real skill / perm skill from item or charge skill getSkill(skill, hand, true) -> charge skill only the PR with castskill should have something in there for correctly assessing skills - its been a while since I tried (and failed) getting this to work.

you can test to see if it sees the skill with getskill, but ultimately the code in the PR will show you one way to do it, so just use it

you tried to use castchargedskill in a way I did not suggest - the very last line of my previous post is the line the PR author suggested using.

finding amulet slot = dont, the PR code does this. dont reinvent the wheel. reuse.

itemid of amu (the only thing you need) - its probably in the PR code as IIRC the PR works out the slot the skill resides in order to cast the skill.

Spoofzor commented 5 years ago

oops no no i was referring to getskills 2nd and 3rd param -

getSkill(skill, hand) -> real skill / perm skill from item getSkill(skill, hand, false) -> real skill / perm skill from item or charge skill getSkill(skill, hand, true) -> charge skill only the PR with castskill should have something in there for correctly assessing skills - its been a while since I tried (and failed) getting this to work.

you can test to see if it sees the skill with getskill, but ultimately the code in the PR will show you one way to do it, so just use it

I see what you mean now with the params. getSkill(54, 1, true) does not return an error, even appears to be return true, but does not select skill

you tried to use castchargedskill in a way I did not suggest - the very last line of my previous post is the line the PR author suggested using.

finding amulet slot = dont, the PR code does this. dont reinvent the wheel. reuse.

itemid of amu (the only thing you need) - its probably in the PR code as IIRC the PR works out the slot the skill resides in order to cast the skill.

That was my understanding also. The code SHOULD detect my items with charges BUT again my original error shows up stats[204] is undefined = there are no entries in the array stats after being filtered for charged items = no items with charges detected -- I believe.

I might be misunderstanding you, and my experience with javascript is slowly moving away from non-existent, so I definitely appreciate your patience.

Addition: I've setup a character in single player to test this on. I imported or created everything in a character/item editor (Hero Editor), so there is a chance the IDs are off or something?

The amulet in testing and on live b.net is an "Amulet of Teleportation" Magical Amulet, Level 2 teleport, 25 charges.

I've also added an if-statement to var useTeleport in Pather.js to handle when I no longer need the TeleAmmy:

//in my config under General Config I added Config.TeleAmmy = true;
useTeleport: function () {
        if(!Config.TeleAmmy){
                        //Original code, unaltered when Config.TeleAmmy = false;
            return this.teleport && !me.getState(139) && !me.getState(140) && !me.inTown && ((me.classid === 1 && me.getSkill(54, 1)) || me.getStat(97, 54));
        }else{
                        //My addition, only attempt to use charges of teleport when Config.TeleAmmy = true;
            return this.teleport && !me.getState(139) && !me.getState(140) && !me.inTown && (/*I have no idea what else to try here*/);
        }
    },

My head is starting to hurt, but I am not yet discouraged! I'd like to get this working for future ladder resets before enigma is easier to get. Not to mention if other people could utilize this - should we get it working.

DarkHorseDre commented 5 years ago

no bro, GET and SET do what they say. the existing code checks you have the skill before casting - you see this when attacking or precasting.

setskill selects the skills in skill slot for casting - the whole issue here is that you cant do that with charged skills using setskill, so Jaenster kindly provided a method.

where'd you get stats[204] from and what you trying to do with it?

haha don't be discouraged! plus I only know of js what I learned whilst reading kolton code (it makes sense over time) and hacking around. the true masters help me out a lot - but you gotta pay attention to detail.

it's at this point I'll ask the bear to come out of the woods and help out with his creation as I cant test it anytime soon (he knows I have a ton of issues of my own to sort) - eh @jaenster? alstublieft (,")

Spoofzor commented 5 years ago

no bro, GET and SET do what they say. the existing code checks you have the skill before casting - you see this when attacking or precasting.

I see, yes. That makes sense :) Thank you for clarifying.

setskill selects the skills in skill slot for casting - the whole issue here is that you cant do that with charged skills using setskill, so Jaenster kindly provided a method.

castChargedSkill()? or am I missing something

where'd you get stats[204] from and what you trying to do with it?

Prototypes.js, where function castChargedSkill() is defined. This function is in the pastebin link in my original post and my first comment. I also noted the line where the error occurs with a comment. Line 70 in the paste, line 1204 in Prototypes.js

when I attempt to use me.castChargedSkill(...);

if (this === me) { // Called the function the unit, me.
        if (!skillId) {
            throw Error('Must supply skillId on me.castChargedSkill');
        }

        chargedItems = [];

        this.getItems(-1) // Item must be in inventory, or a charm in inventory
            .filter(item => item && (item.location === 1 || (item.location === 3 && item.itemType === 82)))
            .forEach(function (item) {
                let stats = item.getStat(-2);

                if (!stats.hasOwnProperty(204)) {
                    stats = stats[204].filter(validCharge); // ERROR error: stats[204] is undefined
                    stats.length && chargedItems.push({
                        charge: stats.first(),
                        item: item
                    });
                }
            });

        if (chargedItems.length === 0) {
            throw Error("Don't have the charged skill (" + skillId + "), or not enough charges");
        }

        chargedItem = chargedItems.sort((a, b) => a.charge.level - b.charge.level).first().item;

        return chargedItem.castChargedSkill.apply(chargedItem, args);
    }

Error occurs because "stats[204] is undefined" which I take to mean that the array of stats for each item -- stats -- never contains any entries in the index [204] ; Which I take to mean that the code doesn't find any charged items

haha don't be discouraged! plus I only know of js what I learned whilst reading kolton code (it makes sense over time) and hacking around. the true masters help me out a lot - but you gotta pay attention to detail.

it's at this point I'll ask the bear to come out of the woods and help out with his creation as I cant test it anytime soon (he knows I have a ton of issues of my own to sort) - eh @jaenster? alstublieft (,")

Part of me wanted to figure it out without papa bear jaenster, but I have to acknowledge my own inadequacy here. Of course, I will keep trying to beat him to the punch! I feel like I am getting nearer all the time, but still cannot get this to work.

In addition to the logical check in useTeleport, I have attempted to add the actual casting portion:

teleportTo: function (x, y, maxRange) {
        var i, tick;

        if (maxRange === undefined) {
            maxRange = 5;
        }

MainLoop:
        for (i = 0; i < 3; i += 1) {
            if (Config.PacketCasting) {
                Skill.setSkill(54, 0);
                Packet.castSkill(0, x, y);
            } else {
                if(!Config.TeleAmmy){
                    Skill.cast(54, 0, x, y);
                }else{
                    me.castChargedSkill(54, x, y);
                }
            }

            tick = getTickCount();

            while (getTickCount() - tick < Math.max(500, me.ping * 2 + 200)) {
                if (getDistance(me.x, me.y, x, y) < maxRange) {
                    return true;
                }

                delay(10);
            }
        }

        return false;
    },

But pesky stats[204] is undefined persists.

jaenster commented 5 years ago

I might made a typo in the charged skills 🤔

Spoofzor commented 5 years ago

I might made a typo in the charged skills 🤔

Oh? Well.. I don't know if this makes me feel better or worse! hahah Anything specific you are willing to share?

I don't mind looking for a needle in a haystack, but I would enjoy a smaller haystack 😃

vegazbabz commented 5 years ago

Any news/clue? 😃 Thanks!

Spoofzor commented 5 years ago

Any news/clue? 😃 Thanks!

Nothing new from me. I couldn't figure it out, and have since got an Enigma. So, it is no longer necessary for me. I would still like to find a solution, in order to utilize this for future characters or ladder resets.

Unless @jaenster or @DarkHorseDre have anything new, and hopefully less cryptic, to add... I've got nothing. 🖍

ckelly44 commented 5 years ago

Any news/clue? 😃 Thanks!

Nothing new from me. I couldn't figure it out, and have since got an Enigma. So, it is no longer necessary for me. I would still like to find a solution, in order to utilize this for future characters or ladder resets.

Unless @jaenster or @DarkHorseDre have anything new, and hopefully less cryptic, to add... I've got nothing. 🖍

Try taking the ! out of the condition at line 1203 in Prototypes.js so it reads if (stats.hasOwnProperty(204)) {

Fittycal commented 5 years ago

I am trying to switch weapons to a teleport staff with charges only when pathing since I don't have an enigma yet. Someone please straighten me out but I am guessing the Pather.js file needs edited. Would the below work for what I am needing?

useTeleport: function () {
                Attack.weaponSwitch(Attack.getSecondarySlot() ^ 2);
        return this.teleport && !me.getState(139) && !me.getState(140) && !me.inTown && ((me.classid === 1 && me.getSkill(54, 1)) || me.getStat(97, 54));
    },
croboy commented 5 years ago

Hi All

I'm trying to get my Paladin to cast Life Tap from my Marrowalk boots in Ubers, and I'm getting the same "stats[204] is undefined" error :(

The boots are always on, so the charge should always exist. Is there anything else i need to do, other than add this into my Paladin.js?

if (unit.classid === 242 && unit.getState != 58) { me.castChargedSkill(82, unit.x, unit.y); }

Don't know what else I need to do, any help would be greatly appreciated.

ckelly44 commented 5 years ago

Hi All

I'm trying to get my Paladin to cast Life Tap from my Marrowalk boots in Ubers, and I'm getting the same "stats[204] is undefined" error :(

The boots are always on, so the charge should always exist. Is there anything else i need to do, other than add this into my Paladin.js?

if (unit.classid === 242 && unit.getState != 58) { me.castChargedSkill(82, unit.x, unit.y); }

Don't know what else I need to do, any help would be greatly appreciated.

It appears that two changes are required in prototypes.js, found in libs/common. Prototypes.js#1187 Change to: if (this !== me && this.type !== 4) {

Prototypes.js#1203 Change to: if (stats.hasOwnProperty(204)) {

croboy commented 5 years ago

Hi All I'm trying to get my Paladin to cast Life Tap from my Marrowalk boots in Ubers, and I'm getting the same "stats[204] is undefined" error :( The boots are always on, so the charge should always exist. Is there anything else i need to do, other than add this into my Paladin.js? if (unit.classid === 242 && unit.getState != 58) { me.castChargedSkill(82, unit.x, unit.y); } Don't know what else I need to do, any help would be greatly appreciated.

It appears that two changes are required in prototypes.js, found in libs/common. Prototypes.js#1187 Change to: if (this !== me && this.type !== 4) {

Prototypes.js#1203 Change to: if (stats.hasOwnProperty(204)) {

Hey buddy

Thanks for the reply, really appreciate you taking the time to show me those 2 changes. I have adjusted my Prototypes.js, but now I get the error: "Don't have the charged skill 82 or not enough charges"

But Marrowwalk comes with Life Tap charged skill, and it has charges left, I just checked.

I've checked, 82 is Life Tap, and it has charges. What else could be the issue? :(

ckelly44 commented 5 years ago

No problem. First, this... if (unit.classid === 242 && unit.getState != 58) { needs to be changed to this.. if (unit.classid === 242 && !unit.getState(58)) {

Can you show me the command you added? And have you changed anything else?

croboy commented 5 years ago

This is what I added to Paladin.js if (unit.classid === 242 && unit.getState != 58) { me.castChargedSkill(82, unit.x, unit.y); } Nothing else has been added.

Then the two changes in the Prototypes.js

I can amend the getstate part in Paladin.js, but the error mentions it cant find Life Tap (82)?

Maybe there is an easier way to test if it can activate that skill? Like in town make the bot switch to Life Tap then to Vigor just to test if it can see the skill?

ckelly44 commented 5 years ago

You're correct, what I mentioned will not fix that error, but it will prevent it from repeatedly casting after each of your attacks. 10 charges will vanish in an instant this way.

If you'd like an easier approach I suggest running Normal Mephisto and watching it fail in real-time.

Please post your prototypes.js and paladin.js. I'm using the line you provided and the changes I mentioned and it's working fine for me on Mephisto :/

croboy commented 5 years ago

@ckelly44 are you using a fresh copy of kolbot?

I'm not home at the moment, just at work. Could you maybe provide your working Prototypes.js? I have a feeling it's something not right in my prototypes.js, but I've only changed the 2 lines you've mentioned earlier. If you could paste yours that would be amazing.

When I get home I'll post up my paladin.js and prototypes.js. Thanks again for everything so far.

jaenster commented 5 years ago

This is what I added to Paladin.js if (unit.classid === 242 && unit.getState != 58) { me.castChargedSkill(82, unit.x, unit.y); } Nothing else has been added.

Then the two changes in the Prototypes.js

I can amend the getstate part in Paladin.js, but the error mentions it cant find Life Tap (82)?

Maybe there is an easier way to test if it can activate that skill? Like in town make the bot switch to Life Tap then to Vigor just to test if it can see the skill?

unit.getState != 58 ^ this isnt a valid line

croboy commented 5 years ago

Thanks for all your help guys, i just deleted my Prototypes.js and my Paladin.js

Redownloaded it via SVN, then modified those 2 lines in prototypes, and added my code into Paladin.js and now its working!! :) so happy

vegazbabz commented 5 years ago

@croboy did you just put: if (unit.classid === 242 && !unit.getState(58)) { me.castChargedSkill(82, unit.x, unit.y); }

In your char.js at a random place?

And then just changed line 1187 and 1203 in prototypes.js?

croboy commented 5 years ago

Hey mate

That was what i was using for testing with normal Meph. I think Uber meph is like classid 705? You can find the monster ID's in Orgtorch script.

Yep, I just added that line into my Paladin.js, and changed those 2 lines in Prototypres.js. This is where i added it in Paladin.js https://github.com/kolton/d2bot-with-kolbot/blob/33b7aee1ec1298277125678b30b0373704d216a8/d2bs/kolbot/libs/common/Attacks/Paladin.js#L53

Let me know if you need any help

vegazbabz commented 5 years ago

Hey mate

That was what i was using for testing with normal Meph. I think Uber meph is like classid 705? You can find the monster ID's in Orgtorch script.

Yep, I just added that line into my Paladin.js, and changed those 2 lines in Prototypres.js. This is where i added it in Paladin.js https://github.com/kolton/d2bot-with-kolbot/blob/33b7aee1ec1298277125678b30b0373704d216a8/d2bs/kolbot/libs/common/Attacks/Paladin.js#L53

Let me know if you need any help

Thanks a lot! It is working now. However, it would be nice to for instance always be able to cast Oak Sage from HOTO, and recast if killed, and not only doing that for specific monsters. Can anyone help?

croboy commented 5 years ago

Hey mate That was what i was using for testing with normal Meph. I think Uber meph is like classid 705? You can find the monster ID's in Orgtorch script. Yep, I just added that line into my Paladin.js, and changed those 2 lines in Prototypres.js. This is where i added it in Paladin.js https://github.com/kolton/d2bot-with-kolbot/blob/33b7aee1ec1298277125678b30b0373704d216a8/d2bs/kolbot/libs/common/Attacks/Paladin.js#L53

Let me know if you need any help

Thanks a lot! It is working now. However, it would be nice to for instance always be able to cast Oak Sage from HOTO, and recast if killed, and not only doing that for specific monsters. Can anyone help?

You'd probably have to add it into Precast.js and see how Battle orders works, because im pretty sure BO checks to see if you are in a buffed state, and if not, it will cast it right? Just copy that code and replace with oak sage instead of BO.

I was thinking about adding that, but only 25 charges of level 4 oak sage, level 4 dies so easily, and you'd end up having to repair your Hoto every run, and if you run out of gold, will your bot stop? might not be worth it. let me know if you work it out, id be keen to try it out aswell and see what happens with repair costs etc

croboy commented 5 years ago

There is a state for Oak sage (149)

Just add this in your attack if (me.getSkill(226, 1) && !me.getState(149)) { me.castChargedSkill(226); } } Not sure if me.getskill will detect oak sage via charges??

If it does, it would ALWAYS cast Oak Sage if oak sage is dead. So mid battle if you're getting owned and oak dies it will switch attack to cast it lol.

You could add that mine into your Precast AND your Paladin.js and it will cast it if needed during Battle Orders, and also during battle if it dies, but again, charges will go down quickly

Kosoleld commented 4 years ago

Hey mate That was what i was using for testing with normal Meph. I think Uber meph is like classid 705? You can find the monster ID's in Orgtorch script. Yep, I just added that line into my Paladin.js, and changed those 2 lines in Prototypres.js. This is where i added it in Paladin.js https://github.com/kolton/d2bot-with-kolbot/blob/33b7aee1ec1298277125678b30b0373704d216a8/d2bs/kolbot/libs/common/Attacks/Paladin.js#L53

Let me know if you need any help

Thanks a lot! It is working now. However, it would be nice to for instance always be able to cast Oak Sage from HOTO, and recast if killed, and not only doing that for specific monsters. Can anyone help?

I wrote this for both oak sage & heart of wolverine (for wisp projector), here's my function https://pastebin.com/C9WnEUy5

you need to add it to misc > misc and then also add a call to the function into town check like this:

    castWisp: function() { --Goes above town check--
        ---its code here---
    }, --you need a **comma** here or it won't work--
    townCheck: function () { --Function name, find this in misc--
        this.castWisp();
                ----Rest of the original code----
    },

Then you need to add Config.Wisp to your config.js file. Just add it between any of the other non-group variables, example:

    LifeChicken: 0, --Already exists--
    Wisp: "",  --Added--
    ManaChicken: 0,  --Already exists--

Then you want to go to the character's config and choose which one they use, heart of wolverine or oak sage, so add to your character's config file: Config.Wisp = "Heart of Wolverine"; or Config.Wisp = "Oak Sage";

DarkHorseDre commented 4 years ago

@Kosoleld - ive not followed the thread lately but why wouldnt you add the cast of oak to precast so it recasts whenever the getskill/minion check failed?

Kosoleld commented 4 years ago

@DarkHorseDre Yeah makes more sense in precast tbh, I needed something where it will be doing it often enough to recast the wisps when they get killed, which is quite often. Where would you put it in precast so that it gets procced often?

DarkHorseDre commented 4 years ago

My code is old and modified, so looking at the current version: https://github.com/kolton/d2bot-with-kolbot/blob/master/d2bs/kolbot/libs/common/Precast.js

line 293 casts oak sage (for druid only).

What we want is any class to cast if they have the item, a lot like CTA battle orders and shout.

I dont have time to check how you guys have accomplished casting oak sage from items, but one way is to follow the cta conventions: checkcta(inc wep switch), havecta, precastcta

and then do similar, psuedo: if item with oaksage (226) check if oak sage state is active (state 149) check if charges cast(226)

does that work?

croboy commented 4 years ago

Hey mate That was what i was using for testing with normal Meph. I think Uber meph is like classid 705? You can find the monster ID's in Orgtorch script. Yep, I just added that line into my Paladin.js, and changed those 2 lines in Prototypres.js. This is where i added it in Paladin.js https://github.com/kolton/d2bot-with-kolbot/blob/33b7aee1ec1298277125678b30b0373704d216a8/d2bs/kolbot/libs/common/Attacks/Paladin.js#L53

Let me know if you need any help

I do all of them, but i have an error Mephisto (prototypes.js line 1204):stats[204].filter is not a function

how can i solve it?

just I paste in paladin.js 53line if (unit.classid === 242 && !unit.getState(58)) { me.castChargedSkill(82, unit.x, unit.y); } and modified Prototypes.js thoes two lines

I can't solve this problem ... my characters already put on marrowwalker

can you help me? or can you share the files? Sorry ..

Hey buddy,

Can you start from scratch and explain what you want to do, with what character, and what issue you are facing?

I haven't looked at D2Bot in a couple years, but I did manage to get everything working back then when I was commented on this thread, and I'm happy to help.

DarkHorseDre commented 4 years ago

Yo - someone recently got casting oak sage charged skill recently and updated a thread - you could use that to cast any charged skill - have a search, I think its a closed topic. I added the last comment to modify part of the fix.

DarkHorseDre commented 4 years ago

Yo - someone recently got casting oak sage charged skill recently and updated a thread - you could use that to cast any charged skill - have a search, I think its a closed topic. I added the last comment to modify part of the fix.

I did everything... but I have same error

i think that it can't find item(marrowwalk) I showed "Add the ability to use charged skills easily" this one and followed it but i have a same error and i saw your comment everything but nothing is different..

it's very hard.... I am half abandoned...

think you should create your own issue for this - lifetap for marrowwalk means you have to cast on your merc/yourself, whereas oak sage is slightly easier as you can cast on any location. teleport is more complicated as you have to get the bot to locate and use that skill for teleporting..

I just pointed out that the other thread (you can search) shows how to cast a charged skill.. but of course you would then need to get it to work according to the skill and the activity, as above.

DarkHorseDre commented 4 years ago

thanks for the advice to me First, I have to make my issue. I didn't know that it was my first time

and I need to study more about my problem

np - just create the issue stating what you want to do and people can chip in with help

Kosoleld commented 4 years ago

@DarkHorseDre @joba1995 Need any help? Add me on discord. Kosoleld#2612

DarkHorseDre commented 4 years ago

@Kosoleld thanks bro - think joba and those guys will - I could make this work but don't wanna open that can of worms right now :)