New Brigand Script

Coladar

Member
First of all, if the trouble I had just getting the files uploaded is an indication of my luck with this script now that I feel it's suitable for release, I'm in trouble. The brigand_CARoutines? That was too large to be uploaded as an xml file, so I had to change it to .iss to get around the restriction. Hopefully I don't piss Amadeus off by doing so, but it's a required part of the script. But change that to .xml and put in your UI directory. And instead of making a reply to post the spell and UI "brigand.xml" files seperately without changing the filename, I changed the file name. So put the BrigandREMOVESPELLS.xml in your spells directory and brigandREMOVEUI.xml in your UI directory, removing the caps shit. BrigandCharConfig.xml... If you want the fairly decent CARoutine I decided on for my character, and most of the other ideal class settings for this script, open that and your character's current config file up. Then just cut and paste, overwriting your character's current brigand settings, beginning with <set name"brigand> and ending with the first </set> after that. You can also change the Brigand file version near the top of eq2bot.iss to 20100521 since I'm limited to uploading 5 files.

This is a fairly long post, but since I've spent two months of the time I'd have spent playing EQ2 doing this, I think I'm allowed one. I would just like to say, if you use the script and see any options/changes/things to be removed etc., just let me know. I'd really like to see the Brigand script be considered as "done" as the Illy, Fury and SK, and while I'm certain that this particular version of it isn't there yet, hopefully it can get there with some decent feedback. That said, this version does at least add a ton of great features, but just might not be as fluid in casting CAs as the old script. But it's been so long since I ran the old script, two months, that it might be my imagination. That's why feedback would be appreciated.

Alright, now on to the script itself. So as a project to learn how to script for ISXEQ2, I decided to essentially erase 95% of the old Brigand script and totally redo it. I have no programming or scripting experience of any kind save writing some very basic HTML, which I last did about... 15 years ago. So coming into this I was beyond clueless. I've tested almost everything in the script, and everything I did works perfectly.

I'd really appreciate some insight into what, if any, mistakes I made. I did a bunch of really great pieces (To pat myself on the back a bit.), but I feel like I may have put the puzzle together incorrectly. I'd really like some thoughts from anyone of the handful that have done the other class scripts that have a Brig to see if I'm wrong about the fluidity of the CAs when using the CA Routines. If it doesn't work as good as you'd like, check back after I get some advice from someone who knows what they're doing.

I'll get to the individual pieces I put in place, to give an idea of the script.

CA Routines: This is the main part of the script, and I'm just not sure how it's going to end up working out in the end. It's been so long since I used the old script I could be imagining any kinks with having to call a function for each individual CA. I did throw together in five minutes a "classic" callup of CAs that bypasses this, so if you don't check any of the three CA Routine boxes, you'll get a fairly average combat routine regardless. If the CA Routine thing doesn't work out, I'll spend some time getting that "classic" callup done justice.

Why I went with this CA Routine option is due to two reasons. Brigands are one of those classes that have different abilities that you use, and in different orders, on an almost mob-to-mob basis. Solo, you want walk the plank, rear attacks intermixed with stuns. With Dance of Metal, that throws another wrench into just one "perfect" casting order. Caster in the group? Focus on debuffs of dispatch+debilitate. No caster? Focus on dispatch+murderous rake. Bottom line, doing things the way every other class script is done where you can't change the order without editing the script, and certainly not just by checking a box, made this seem like something I wanted to try. And I intended from the very first minute to make this script with the intention of other people using it, thus the crazy amount of options I put in, and thought this was an ideal option for considering other people with different playstyles will use this script.

How this actually works in the end I'm up in the air on and it might be completely removed later on. I tried just calling up each CA Routine in order, but then when one of the earlier ones that was ready to reuse wouldn't get cast until the entire thing had been run through. So now it's calling up 12131241235 instead of just 12345. If there's a better solution or that doesn't end up working out perfectly either, well, this is the major part of the script I could use some advice/tips on.

Aggro Mode: Added a dropdown box to pick between casting evades, taunts, or none at all. I'm trying, and again, this might get removed later, to use ThreatToMe and ThreatToNext in addition to whether the mob is targeting you or not. It seems to work fairly well, and allows you to not wait until the mob is already beating your ass down to evade, or your healer is dead if you're tanking.

2nd MT: I added an option to be a 2nd MT. Basically this is going to cast taunts even if you are in evade mode when the MT dies. If anyone ever takes to redoing/messing around with a Scout/Fighter script, there are probably far worse things to add than this. Always nice to have the option to have a backup tank.

Poisons: You no longer have to edit the file to change poisons. It looks in your inventory, and whatever poisons are there you can select from a drop-down box.

Rob: This is something I spent two weeks on. As simple as it turned out, that might seem laughable. This is something essential to a Brig that the old script really, really didn't handle well simply because it is so difficult to handle. Since Rob doesn't return true for IsReady unless you are invis, it causes problems. My second to last final option was to put them all on timers, but then for the "Always Cast Rob" option, I found TimeUntilReady, allowing me to bypass the problem with Rob only being ready when invis. You'll have options to Never Cast, Always Cast, Cast Every 22 seconds (Roughly when the Str Debuff fades), When Boot Dagger is Ready (30 seconds or so) or once per encounter (Every 15 seconds and only if the mob is over 80% health.)

Also added a dropdown box to select the invis spell to use. If Boot Dagger, it'll case Boot Dagger, or if that's not ready Sneak. If Sneak, Sneak then Boot Dagger. If Shadow Slip, Shadow Slip, then Boot Dagger, then Sneak.

Beg For Mercy: This is something I don't even know if the old script had in it. This is also the second huge time consumer for me since it was the first big thing I tried scripting, and was a headache not so much figuring out how to get it to work as simply how I would the spell into the script. It's one that figuring out how and when to cast for a script took a huge amount of time trying to determine. In the end I added three checkboxes to cast BfM: On group member at ** health, on a second group member at ** health, and on MT at ** health. Note, this spell won't cast on any fighter class, so the MT is only if you have a scout MT. The first two have dropdown boxes of group members, and all three allow you to enter whatever % health that they have to be below for you to cast BfM on them.

I'll mention a couple other things: I added announces, group and raid, for debuffs (Dispatch, Debilitate, Murderous Rake, Cornered.) Put in *two* checkboxes for Ranged Attacks. One to only use Ranged Attacks, and one to use Ranged Attacks at all. Since sometimes I don't keep up my ammo and constantly get the message telling me I'm out of ammo, I thought it nice to be able to shut that off without having to go into the script and remove /auto 2. Added snare mode, which lets you pick between the three snares and will cast whenever your target doesn't have a snare on them. Added a stun checkbox, which will cast Cheap Shot whenever a mob is not stunned and Cheap Shot is ready. Totally ripped off CAPilot's Auto-Attack Timer from the Dirge script, which was such an amazing idea on his part that it should be an option in all Scout scripts. Finally, put in the choice to prevent wasting the Brig's major debuffs when a mob is almost dead. Won't cast them below 10% for epics, 20% for heroics and 30% for solo mobs, but will always cast for named.

If I did something boneheaded or just incredibly wrong in the script, go easy on me. I'll repeat again, I have no programming experience, so I'm just happythat the script turned out as well as it did is a good thing despite any errors I might have made. And one final time, constructive criticism/ideas would be greatly appreciated. Enjoy!
 

Attachments

Pluto

Member
Has anyone had a chance to look over this new script? I use it now when I run my brig and it does a MUCH better job than the svn script. I'm more curious to see if anyone that has a better understanding of the coding itself has taken any time to look it over. I'd like to try to tackle a new swash script but I'd like to see if anyone has any input on this script before I try to use it as a base for another.
 

4control

Active Member
I ran it for a couple days with my 90 Brig in a 4-box team. I had some trouble with it and ended up going back to my old version for the time being.

My biggest issue was that it performed really sluggishly for me. My dps dropped pretty significantly. Some of the problem may have been zone related. Most of my testing was done in The Hole, where my other bots have acted oddly before. I'm hoping to test it some more in the next few days.

I have to commend Coladar for his effort...it's obvious that a lot of work went into his script. There's some really good ideas in here, some of which I've borrowed for my own script. I really like the poisons interface and the options for Rob.

I don't know if you've experieced anything like this or not Coladar...Every few encounters, it seems like the script doesn't recognize the end of combat. My brig won't resume autofollow and ignores new combat encounters...just stands there. Maybe getting stuck in a loop somewhere? I have to shut down EQ2bot to get him back to normal.

As far as performance, it seemed to take a long time for my Brig to join combat, and seemed to pause frequently for reasons I haven't determined yet. I had my assist threshold set to 99, tried with/without the AA timer, and with/without "Don't Waste..." option. Most of the time I was watching him during the pauses, he didn't have a target. Even manually re-acquiring target didn't work.

As I said, my bots have acted strangely in The Hole before, and some of my issues may have been related to that.

I understand why you did the CA setup the way you did, and it's handy to have an interface to the scripting order/preferences. I'm wondering if it's just too cumbersome in the heat of combat, though. I'll give some more feedback when I've had a chance to play with it some more in different zones.

In my own modification of the base script, I broke the combat function into 2 main 'if' statements - one for group/raid and one for solo/tank. That let me set up combat routines that cover most situations well enough that I don't need to mess with the script very often. It was nice to have the ability to change things up in your GUI, though.
 

Kannkor

Ogre
Has anyone had a chance to look over this new script? I use it now when I run my brig and it does a MUCH better job than the svn script. I'm more curious to see if anyone that has a better understanding of the coding itself has taken any time to look it over. I'd like to try to tackle a new swash script but I'd like to see if anyone has any input on this script before I try to use it as a base for another.
From a coding point of view, there are many ways to get to the same results.

I applaud anyone who makes the effort to make scripts better.. Unfortunately the way he got the results (again, from a coding point of view) is quite ugly..

There are 10000 (yes, 10 thousand) lines of code that aren't needed. They are repeating the exact same thing.

The Brigand.iss file is 14000 lines long. From skimming it, it looked like it could be under 2000 quite easily. (I think it could be under 1000).

On that note, I'd like to add, if you are learning how to code/script, feel free to ask questions. If you find yourself copy/pasting chunks of code, chances are there is an easier way of doing it (re-using your code).

In the end, it's what do you want it for. If you don't care how it works and you are just using it, nothing wrong with it.

If you want to use it as a base to make another script, that's fine too, but I urge you when you get to repeating code, you ask for some assistance.

Many coders hang out in IRC. If you are working on something and have questions, or want to see if there is a better way of doing something, come ask. We won't do it for you, but we will point you in the right direction.
 

Coladar

Member
I ran it for a couple days with my 90 Brig in a 4-box team. I had some trouble with it and ended up going back to my old version for the time being.

My biggest issue was that it performed really sluggishly for me. My dps dropped pretty significantly. Some of the problem may have been zone related. Most of my testing was done in The Hole, where my other bots have acted oddly before. I'm hoping to test it some more in the next few days.

I have to commend Coladar for his effort...it's obvious that a lot of work went into his script. There's some really good ideas in here, some of which I've borrowed for my own script. I really like the poisons interface and the options for Rob.

I don't know if you've experieced anything like this or not Coladar...Every few encounters, it seems like the script doesn't recognize the end of combat. My brig won't resume autofollow and ignores new combat encounters...just stands there. Maybe getting stuck in a loop somewhere? I have to shut down EQ2bot to get him back to normal.


As far as performance, it seemed to take a long time for my Brig to join combat, and seemed to pause frequently for reasons I haven't determined yet. I had my assist threshold set to 99, tried with/without the AA timer, and with/without "Don't Waste..." option. Most of the time I was watching him during the pauses, he didn't have a target. Even manually re-acquiring target didn't work.

As I said, my bots have acted strangely in The Hole before, and some of my issues may have been related to that.

I understand why you did the CA setup the way you did, and it's handy to have an interface to the scripting order/preferences. I'm wondering if it's just too cumbersome in the heat of combat, though. I'll give some more feedback when I've had a chance to play with it some more in different zones.

In my own modification of the base script, I broke the combat function into 2 main 'if' statements - one for group/raid and one for solo/tank. That let me set up combat routines that cover most situations well enough that I don't need to mess with the script very often. It was nice to have the ability to change things up in your GUI, though.
To be honest, I've been playing Battlegrounds the past week since I'd spent two months on this script instead of playing EQ2, and have started playing catch up with what I've missed/stopped doing when I started the script. So I haven't been running this finished version that much since I posted it. That said, I did encounter the script not recognizing the end of combat. It seemed like it had something to do with the AE spells, as everything else was fine but I was just permacasting AE spells. I assumed it had to do with running a mob.Count and getting trues for mobs above me that weren't aggro, so I added if ${AutoAttack} to the AE spells to prevent this. If it's still looping, my guess is it's due to the CA Routines and possibily running through a million call CA1 call CA2 etcs.

As Kannkor said, this script *is* incredibly messy. I'll be the first to admit that. Everything works the way it should, but unfortunately the mess is probably causing a few problems of it's own. Performance wise with joining combat, I've noticed no problems and there really shouldn't be an issue here. That's all called up from the EQ2Bot.iss, and I haven't touched any of that. I've got a feeling it's your zone/whatever, because there is nothing I could remotely imagine that would cause it to delay joining combat.

Kannkor, you mentioned things I could have done to mitigate the absurd length and repetitiveness of the script. Obviously there are three big areas, and ones I'd really appreciate your insight on to cut down on the size and bulk of the script.
The first is the running of all the CA Routines. Obviously there has to be some way other than having each ability have a, for example, call Backstab 81 times for each CA routine 1-27, and the first set, A set and B set. I just have no idea how to do so. The same goes for the UI. Instead of repeating each CA for each individual dropbox, there must be some way to cut that down.

The last thing I'd ask advice on is what I suspect is causing *some* of 4Control's problems. The calling of the CARoutines themselve. Like I said in the first post, calling 12345 didn't work, so I went with call 1 2 1 3 1 2 4 1 2 3 5 etc. This obviously makes a huge mess, but was the only way I figured out to stick with it keeping the CA Routines and not having one of your main CAs sit ready while you're casting your worst spell. I'm still not sure the CA Routines were an amazing idea, and where 90% of the trouble with this script, however small or large that really is, resides. Take away those an all the repeating code you're talking about is gone. Take away the CA Routines and this script works 100%, and isn't nearly as sloppily coded; probably half the problems 4Control mentioned are gone with them out of the script. But damn it, I really do like the idea of them and changing CARoutines in between fights without closing EQ2bot, and I've yet to experience a big enough bug with them to make me want to take them out totally.

Bottom line, I wouldn't suggest using this as a base for your script yet, Pluto. I genuinely believe I've created an excellent class script that would be a perfect base for a Swash. It's just my coding inexperience means this needs "cleaning up", as I admitted when I posted the script a week ago, before it's 100%.
 

Kannkor

Ogre
Kannkor, you mentioned things I could have done to mitigate the absurd length and repetitiveness of the script. Obviously there are three big areas, and ones I'd really appreciate your insight on to cut down on the size and bulk of the script.
The first is the running of all the CA Routines. Obviously there has to be some way other than having each ability have a, for example, call Backstab 81 times for each CA routine 1-27, and the first set, A set and B set. I just have no idea how to do so. The same goes for the UI. Instead of repeating each CA for each individual dropbox, there must be some way to cut that down.

The last thing I'd ask advice on is what I suspect is causing *some* of 4Control's problems. The calling of the CARoutines themselve. Like I said in the first post, calling 12345 didn't work, so I went with call 1 2 1 3 1 2 4 1 2 3 5 etc.
I just want to point out that I don't use eq2bot and haven't looked at the coding much of it, so I can't really help with eq2bot specifics.

I agree with you 100%, a spell order isn't made up of 12345. It definitely should be 12131241235 (for example etc).

For this example, lets pretend you have 5 combat arts total (the number is moot, the concept is what you want).
When the bot searches for a CA to use, it should start at the top. Is #1 available (available = meeting what ever conditions you want), if so, cast it. The next time it needs to cast a new CA, it starts at the top again. So it would check #1 (it wouldn't be available since it is on reuse), so it would move to CA#2, and so on and so forth.

Currently, you have it calling CA#1, then CA#2 - but checking CA#1. Then it calls CA#3 and checks CA#1 and #2.

In simply form, when the combart art routine is being called you want:
If CA#1 is available
Cast CA#1
elseif CA#2 is available
Cast CA#2
elseif CA#3 is available
Cast CA#3
(etc etc).

You need to use elseif because once it casts 1 spell, it needs to exit the combat routine, then go back into the combat routine to find the next spell (so it rechecks everything).

Make sense?
 

Valerian

ISX Specialist
<snip>
As Kannkor said, this script *is* incredibly messy. I'll be the first to admit that. Everything works the way it should, but unfortunately the mess is probably causing a few problems of it's own.
^ Stopped reading there. APOSTROPHE ABUSE!
 

Pygar

EQ2Bot Specialist
Coladar,

Would you please just give me a detailed description of dps chains / priority casting / etc.

I'll update the bot to match how it should be played.

I appreciate your efforts in making a better one, and I'm sure you've started a learning process you'll have a hard time putting down.

But this script just isn't ready for primetime =)

My own brigand is 80/122, so it just lacks anything to really try to build a bot off of.
 

Coladar

Member
I've run the script a bit more thoroughly and am rather convinced that as much as I still like the idea of redoing your combat order via UI, the actual way it has to be coded for EQ2Bot just leads to too many complications and adds several slight hiccups in combat. That said, two things in reply to previous posts.

Kannkor: That would be ideal, and would solve one hiccup with the usage of the CA Routines. That said, as far as my limited knowledge goes, there's no way to do if CA1.isReady without adding another 10,000 lines of code. Since each calling of a CA could be one of over thirty spells, the only way I know to do so would be to have the:

switch ${CA1}

case 1
if AbilityA.isReady
call AbilityA

case 2
if AbilityB.isReady
call AbilityB

And so on until near infinite. It'd probably add closer to 25,000 lines of code given it isn't just CA 12345 etc. If there is another way to do so without all the repetitive stuff, even though I've made up my mind on the CA Routines just being unworkable, for my own experience I'd really appreciate it you could explain how to do it with far less code versus the way I have above.

Pygar, I've known ever since I started working on it there would be no way my script would be ready for "prime time" for quite a while given my inexperience. That said, the only thing really preventing that from being the case seems to me to be this whole CA Routine quirk I added. While obviously I'm not asking for anything detailed, am I missing something where if I took that out and had it call up the combat section up the way every other script works, that there are still major issues with the script? Because honestly, absolutely no offense to your old script, but I've felt since I started that if you took out the CA Routines, nearly everything else would be improved over the old script both in theory and in function. Odd things such as CA_Pilot's Auto-Attack Timer can be turned off, as can not casting debuffs if a mob gets below % health, etc. Otherwise aside from adding several options and updating the script to work with SF, everything seems to work exactly as it should with no issues, and most importantly almost totally improved over the old script when it comes to the little stuff like Rob, Beg for Mercy. Further, without the CA Routines I didn't add anything so strange or that couldn't be turned off that makes this script that different from yours as far as the fundamentals go.

So before I bother removing the CA Routines and spending a couple hours lining up the combat section to be like every other EQ2Bot class script, I just want to make sure I'm not missing something major and there are parts to this script other than the CA Routines which are vastly inferior to your old script. Obviously I'm not asking for a line by line review, but just whatever you can recall that you saw other than the CA Routines that made this script seem like it was/would be problematic. Because running the script without the CA Routines checked (i.e. running combat the same way every other script does it.) it seemed to run just as well as the old script as far as a lack of bugs/etc go. To be honest, the things you requested are currently some of the weakest parts of the script since I did go with the CA Routine option and intended the user to set their own combat to their preferences. Thus I didn't exactly focus on improving upon or even testing what I included as a default with the script. If my learning experience script minus CA Routines is still essentially dead in the water, I'll try to get some of the basics together for you to update the old script.

Oh, and Valerian? Thank you ever so much for proving my English teachers were all illiterate since I foolishly wrote it's instead of its. The first two paragraphs and just one serious grammatical error I could find upon second glance. Thank you sir, I have now been totally shamed and shall do the only proper thing given the severity of my grievance. Farewell, cruel world!
 
Last edited:

Valerian

ISX Specialist
Oh, and Valerian? Thank you ever so much for proving my English teachers were all illiterate since I foolishly wrote it's instead of its. The first two paragraphs and just one serious grammatical error I could find upon second glance. Thank you sir, I have now been totally shamed and shall do the only proper thing given the severity of my grievance. Farewell, cruel world!
My work here is done.

If you think I'm a grammar nazi here, you should see me on IRC.
 

Kannkor

Ogre
Kannkor: That would be ideal, and would solve one hiccup with the usage of the CA Routines. That said, as far as my limited knowledge goes, there's no way to do if CA1.isReady without adding another 10,000 lines of code. Since each calling of a CA could be one of over thirty spells, the only way I know to do so would be to have the:

switch ${CA1}

case 1
if AbilityA.isReady
call AbilityA

case 2
if AbilityB.isReady
call AbilityB
Sure...
If ${AbilityA.IsReady} && Flanking.. && power && (etc etc)
Cast AbilityA
elseif ${Abilityb.IsReady} && Flanking.. && power && (etc etc)
cast AbilityB
 

Pygar

EQ2Bot Specialist
Yeah, as Kankor posted, there are more elegant programing logic to get the same thing accomplished in 1/10th the lines of code.

What you have may work, but isn't going to be manageable when the game changes and playstyles adjust.

I'm happy to make a brig script that is maintainable and makes combat decisions as you think they should be done.

I don't ever play my brig though, and am the last one to decide what the priority list of abilities should be under what conditions.
 

Coladar

Member
Revisiojs

A half a year later, I am just popping my head in to see what the state of what I worked several months on came to be. Clearly there were some issues brought up by the amazing devs for ISXEQ2 and EQ2Bot, but I see about 20 downloaded my bits and pieces script. Is anyone still using them, what did you like and what did you not like? Between multiple deaths in the family in a three month span (grandmother and grandfather in three months apart) and just burning out spending 20 hours a day working on this for five days a week, I got burnt the fuck out. Now I want to at least pimp my fucking house to the Halloween maximum, and so get dragged back again since it is such a phenomenal game.

Is anyone still using what I released? At all, just a little bit? Memories from when you did try it? If not, main reasons you quit? If you do use it, or worse, want to use it but something is holding you back, what is it? I still would like to revise this. I feel the meat and potatoes are all there, that it's all *right* it just needs to mesh together better and use more eloquent concise code. I've used it off and on for months and encountered bugs, but nothing that makes it go so far as to be removed in favor of the old script. So thoughts or suggestions from long term users?

I spent a ton of time on this, and feel as I felt months ago that it's closer to being ideal than it is to jut start over from scratch. Advice preventing me having to do is what I am desperately looking for, and you have my eternal gratitude for any help.?

Coladar[/QUOTE]
 
Top Bottom