Tank (Rescues)/Mage (Glance+Auto-Buff) Sets + Misc

Scripts and support for your favorite MUD client.
Ifin
Sojourner
Posts: 171
Joined: Mon Nov 14, 2005 11:43 pm

Tank (Rescues)/Mage (Glance+Auto-Buff) Sets + Misc

Postby Ifin » Fri Apr 14, 2006 1:17 am

It took awhile to play a class and then think of tools that might be helpful. This is just some scripts that I wrote up to help me out, thought I'd pass on some knowledge to help out w/those newer to classes still around since I spent a good deal of time writing them and more beneficial to do a short write-up and more people can use.

All my sets might not be 100% complete (ie evil classes, or all the stand trigs etc.) but you can fill them in yourself.

Yeah trigs don't make 100% of a player, but if used right can make things easier and just remember, the computer responds faster than you can for all you purists.

I'll start with my rescue trigger set. It's split up into two parts, a part to control the list and also the rescue trig set.

I believe you can just copy and paste each whole section of the code into your zMud status line to implement.

Thanks to Torir (who doesn't play anymore) for help when I started devloping these stuff.


Rescue Triggers

* Has a command to automatically fill a tank and rescue list into 4 categories: Tanks, Primary Rescues (Enchanter + Priests), Secondary Rescues (Mages), and Final Rescues (Rogues + Rangers).
* Displays the rescue list in a rescue window so you know who's in your group and what your rescue list contains.
* Can easily add/delete/glance members in each separate group
* Prioritizes rescuing, only sends out 1 rescue/time so doesn't over-lag, minimizes look on switches


Implementation:

* On switches performs a look and adds people to 3 separate rescue lists based on priority. On look finishing, fires off one rescue based on lists.
* On "switches" does a look and sets @haslooked to "true" so doesn't do any looks until it sees that the look has completed off line "Room size".
* Removes all instances of rescuee from rescue list when no mobs are on it (so at most 1 unintended rescue). Removes one occurance of rescuee on each successful rescue by yourself.
* If no-one in rescue queue and mob your engaged with switches to a non-tank, fires off a rescue immediately. Otherwise adds to rescue queue.


Improvements or tweaks too lazy to make:

* The reduction of switches is based on "Room size" which not everyone might have toggled on - can change to "Exits" which everyone should have displayed.
* Can remove people from lists on other people's successful rescues.
* Can not perform a look on group switches (who targets anymore? haha) To implement this, it's something like instead of triggering look off switches, you trigger off of "{@groupList} switches". Then the argument is #IF (%1 == "") {} { <Put in the rest of the switches code in here> }
* Import some of my mage triggers so updates Tank buffs in status window as well as conditions.


Example of how lists look in status window:

Tanks (1)
-----------
Hartor

Primary Rescues (1)
-----------------------
Ifin

Secondary Rescues (2)
---------------------------
Ifinien
Ifinian

Final Rescues (1)
--------------------
Hartar


List Control Part

"afill" - automatically does a "tog pag;who ingroup sort;tog pag" to fill in the list.
- "adt/adp/ads/adf <player>" - add someone to Tank/Primary/Secondary/Final rescue list.
- "dlt/dlp/dls/dlf <player>" - deletes some from " ".
- "glt/glp/gls/glf/glm" - glances a particular group (or last one @maintank)
- "mt <player>" - puts someone into @maintank string (usually just use to glance pets).


Code:

Go to "Actions", "Define Status Bar" and in the big "Window" section, put in:

%cr%cr%cr%cr%cr%cr%cr%cr%cr%cr
@STW_List

The %cr's are just to center the list a little bit. Then go to "Windows" and make sure a Status Window is open to see the list displayed.

Below is the auto-group and list maintenance code:


#CLASS {TankClass}
#ALIAS gl {glance %1}
#ALIAS clrall {
#gagon
clrt
clrp
clrs
clrf
#UNVAR grouplist
#gagoff
#SAY All Lists Cleared
clrres
clrstw
}
#ALIAS clrstw {#VAR STW_List {Tanks (0)%{cr}---------%{cr}%{cr}%{cr}Primary Rescues (0)%{cr}-------------------%{cr}%{cr}%{cr}Secondary Rescues (0)%{cr}---------------------%{cr}%{cr}%{cr}Final Rescues (0)%{cr}----------------------%{cr}%{cr}%{cr}%{cr}Total In List: (0)}}
#ALIAS dspall {
#MATH groupnumber %numitems( @listtank)+%numitems( @listprimary)+%numitems( @listsecondary)+%numitems( @listfinal)
#SAY Total Number of Members: @groupnumber
mt
dspt
dspp
dsps
dspf
}
#ALIAS gla {
glt
glp
gls
glf
}
#ALIAS mt {
#IF (%1 = "") {#SAY Main Tank: @maintank} {
#VAR maintank %proper( %1)
#SAY Maintank: %1
}
}
#ALIAS glm {glance @maintank}
#ALIAS afill {
clrall
#T+ AutoFillList
tog pag
who ingroup sort
}
#ALIAS adr {
#ADDITEM rescuelist %proper( %1)
#SA %1 ADDED TO RESCUE LIST
}
#ALIAS clrres {
rescuelist = ""
#echo Rescue list - Cleared.
}
#ALIAS dlr {
#DELITEM rescuelist %proper( %1)
#SA %1 REMOVED FROM RESCUE LIST
}
#ALIAS dspres {
#SA CURRENT RESCUE LIST (%numitems( @rescuelist)):
#forall {@rescuelist} {#sa %{i}}
}
#CLASS 0
#CLASS {TankClass|ListCommands}
#ALIAS ads {
#VAR listName secondary
addmem %1
}
#ALIAS dls {
#VAR listName secondary
dlmem %1
}
#ALIAS clrs {
#VAR listName secondary
clrmem
}
#ALIAS dsps {
#VAR listName secondary
dspmem
}
#ALIAS gls {
#VAR listName secondary
glmem
}
#ALIAS adp {
#VAR listName primary
addmem %1
}
#ALIAS clrp {
#VAR listName primary
clrmem
}
#ALIAS dlp {
#VAR listName primary
dlmem %1
}
#ALIAS dspp {
#VAR listName primary
dspmem
}
#ALIAS glp {
#VAR listName primary
glmem
}
#ALIAS adt {
#VAR listName tank
addmem %1
}
#ALIAS clrt {
#VAR listName tank
clrmem
}
#ALIAS dlt {
#VAR listName tank
dlmem %1
}
#ALIAS dspt {
#VAR listName tank
dspmem
}
#ALIAS glt {
#VAR listName tank
glmem
}
#ALIAS adf {
#VAR listName final
addmem %1
}
#ALIAS clrf {
#VAR listName final
clrmem
}
#ALIAS dlf {
#VAR listName final
dlmem %1
}
#ALIAS glf {
#VAR listName final
glmem
}
#ALIAS dspf {
#VAR listName final
dspmem
}
#CLASS 0
#CLASS {TankClass|ListImplementation}
#ALIAS addmem {
#IF (!%ismember( %proper( %1), @grouplist)) {
#ADDITEM list@listName %proper( %1)
#ADDITEM grouplist %proper( %1)
#IF (@listName = tank) {
#VAR STW_List %insert( %proper( %1)%cr, @STW_List, (%pos( "---------", @STW_List)+10))
#VAR STW_List %replace( @STW_List, Tanks ~(%eval( %numitems( @listTank)-1)~), Tanks ~(%numitems( @listTank)~))
#SA %1 ADDED TO tank LIST
} {
#IF (@listName = primary) {
#VAR STW_List %insert( %proper( %1)%cr, @STW_List, (%pos( "-------------------", @STW_List)+20))
#VAR STW_List %replace( @STW_List, Primary Rescues ~(%eval( %numitems( @listPrimary)-1)~), Primary Rescues ~(%numitems( @listPrimary)~))
#gagon
adr %1
#gagoff
#SA %1 ADDED TO primary rescue LIST
} {
#IF (@listName = secondary) {
#VAR STW_List %insert( %proper( %1)%cr, @STW_List, (%pos( "---------------------", @STW_List)+22))
#VAR STW_List %replace( @STW_List, Secondary Rescues ~(%eval( %numitems( @listSecondary)-1)~), Secondary Rescues ~(%numitems( @listSecondary)~))
#gagon
adr %1
#gagoff
#SA %1 ADDED TO secondary rescue LIST
} {
#IF (@listName = final) {
#VAR STW_List %insert( %proper( %1)%cr, @STW_List, (%pos( "----------------------", @STW_List)+23))
#VAR STW_List %replace( @STW_List, Final Rescues ~(%eval( %numitems( @listFinal)-1)~), Final Rescues ~(%numitems( @listFinal)~))
#gagon
adr %1
#gagoff
#SA %1 ADDED TO final rescue LIST
}
}
}
}
#VAR STW_List %replace( @STW_List, Total In List~: ~(%eval( %numitems( @grouplist)-1)~), Total In List~: ~(%numitems( @grouplist)~))
}
}
#ALIAS clrmem {
#gagon
#forall {@{list@listName}} {dlmem %1}
#UNVAR list@listName = ""
#gagoff
#echo %proper( @listName) list - Cleared.
}
#ALIAS dspmem {
#SA CURRENT %upper( @listName) LIST (%numitems( @{list@listName})):
#forall {@{list@listName}} {#sa %{i}}
}
#ALIAS glmem {#FO @{list@listName} {gl %i}}
#ALIAS dlmem {
#IF (%ismember( %proper( %1), @grouplist)) {
#DELITEM grouplist %proper( %1)
#DELITEM list@listName %proper( %1)
#VAR STW_List %remove( %proper( %1)%cr, @STW_List)
#IF (@listName = tank) {#VAR STW_List %replace( @STW_List, Tanks ~(%eval( %numitems( @listTank)+1)~), Tanks ~(%numitems( @listTank)~))} {#IF (@listName = primary) {#VAR STW_List %replace( @STW_List, Primary Rescues ~(%eval( %numitems( @listPrimary)+1)~), Primary Rescues ~(%numitems( @listPrimary)~))} {#IF (@listName = secondary) {#VAR STW_List %replace( @STW_List, Secondary Rescues ~(%eval( %numitems( @listSecondary)+1)~), Secondary Rescues ~(%numitems( @listSecondary)~))} {#IF (@listName = final) {#VAR STW_List %replace( @STW_List, Final Rescues ~(%eval( %numitems( @listFinal)+1)~), Final Rescues ~(%numitems( @listFinal)~))}}}}
#VAR STW_List %replace( @STW_List, Total In List~: ~(%eval( %numitems( @grouplist)+1)~), Total In List~: ~(%numitems( @grouplist)~))
dlr %1
#SA %1 REMOVED FROM %upper( @listName) LIST
}
}
#CLASS 0
#CLASS {TankClass|AutoFillList} {disable}
#TRIGGER {~[* (*)~] (%w)} {#IF (%ismember( %1, {War|Pal|A~-P}) > 0) {adt %2} {#IF (%ismember( %1, {Enc|Cle|Sha|Dru}) > 0) {adp %2} {#IF (%ismember( %1, {Inv|Ill|Ele|Psi|Lic|Nec}) > 0) {ads %2} {#IF (%ismember( %1, {Rog|Dir|Bar|Ran|Ctr}) > 0) {adf %2}}}}}
#TRIGGER {Total Visible} {
#T- AutoFillList
tog pag
}
#CLASS 0




Below is the Rescue Script code:


#CLASS {Auto-Rescue} {disable}
#TRIGGER {* fighting *({@rescuelist})*} {
#IF (%1 != "") {
#IF (@rescuequeue = "") {#VAR startRescues "yes"}
#VAR rescuequeue %additem( %proper( %1), @rescuequeue)
}
}
#TRIGGER {T: ({@rescuelist})} {#IF (%1 != "") {#IF (@rescuequeue = "") {
#VAR currentrescue %1
#VAR rescuequeue %additem( %proper( %1), @rescuequeue)
resc %1
} {#IF (%ismember( %1, @rescuequeue) = 0) {#VAR rescuequeue %additem( %proper( %1), @rescuequeue)}}}} "" {nocr|prompt}
#TRIGGER {Banzai! To the rescue...} {
#VAR rescuequeue %delItem( @currentrescue, @rescuequeue)
#VAR currentrescue ""
#IF (@rescuequeue != "") {
#VAR currentrescue ""
#FORALL @listprimary {#IF (%ismember( %i, @rescuequeue) > 0) {#VAR currentrescue %i}}
#IF (@currentrescue = "") {#FORALL @listsecondary {#IF (%ismember( %i, @rescuequeue) > 0) {#VAR currentrescue %i}}}
#IF (@currentrescue = "") {#VAR currentrescue %item( @rescuequeue, 1)}
resc @currentrescue
}
}
#TRIGGER {You fail the rescue.} {resc @currentrescue}
#TRIGGER {But nobody is fighting} {
#DELITEM rescuequeue @currentrescue
#VAR currentrescue ""
#IF (@rescuequeue != "") {
#VAR currentrescue ""
#FORALL @listprimary {#IF (%ismember( %i, @rescuequeue) > 0) {#VAR currentrescue %i}}
#IF (@currentrescue = "") {#FORALL @listsecondary {#IF (%ismember( %i, @rescuequeue) > 0) {#VAR currentrescue %i}}}
#IF (@currentrescue = "") {#VAR currentrescue %item( @rescuequeue, 1)}
resc @currentrescue
}
}
#TRIGGER {Who do you want to rescue?} {
#DELITEM rescuequeue @currentrescue
#VAR currentrescue ""
#IF (@rescuequeue != "") {
#VAR currentrescue ""
#FORALL @listprimary {#IF (%ismember( %i, @rescuequeue) > 0) {#VAR currentrescue %i}}
#IF (@currentrescue = "") {#FORALL @listsecondary {#IF (%ismember( %i, @rescuequeue) > 0) {#VAR currentrescue %i}}}
#IF (@currentrescue = "") {#VAR currentrescue %item( @rescuequeue, 1)}
resc @currentrescue
}
}
#TRIGGER {{Maybe you should get on your feet first?|Maybe you should get up off your knees first?|Sorry, you can't do that while laying around.}} {
st
#IF (@currentrescue != "") {resc @currentrescue}
}
#TRIGGER {^~<} {
#IF (@startRescues = "yes") {
#VAR startRescues = "no"
#VAR currentrescue ""
#FORALL @listprimary {#IF (%ismember( %i, @rescuequeue) > 0) {#VAR currentrescue %i}}
#IF (@currentrescue = "") {#FORALL @listsecondary {#IF (%ismember( %i, @rescuequeue) > 0) {#VAR currentrescue %i}}}
#IF (@currentrescue = "") {#VAR currentrescue %item( @rescuequeue, 1)}
resc @currentrescue
}
} "" {nocr|prompt}
#CLASS 0
#CLASS {Auto-Rescue|SwitchesTrig} {disable}
#TRIGGER {switches targets..} {
#IF (@haslooked != "true") {
look
#VAR haslooked true
}
}
#TRIGGER {Room size:} {#UNVAR haslooked}
#TRIGGER {With an arcane motion of its hand, a * gates in someone!} {
#IF (@haslooked != "true") {
look
#VAR haslooked true
}
}
#CLASS 0
#CLASS {Auto-Rescue|HitAutoResc}
#TRIGGER {* {beat|beats|choke|chokes|touch|touches|hit|hits|slash|slashes|crush|crushes|misses|whip|whips|pierce|pierces|smash|smashes|sting|stings|drain|drains|strike|strikes|pummel|pummels|pound|pounds|claw|claws|nip|nips|burn|burns|bite|bites} ({@rescuelist})*} {#IF (%1 != "") {#IF (@rescuequeue = "") {
#VAR currentrescue %1
#VAR rescuequeue %additem( %proper( %1), @rescuequeue)
resc %1
} {#VAR rescuequeue %additem( %proper( %1), @rescuequeue)}}}
#TRIGGER {* enshrouds ({@RescueList}) in a mist of blood with its deadly burn!} {#IF (%1 != "") {#IF (@rescuequeue = "") {
#VAR currentrescue %1
#VAR rescuequeue %additem( %proper( %1), @rescuequeue)
resc %1
} {#VAR rescuequeue %additem( %proper( %1), @rescuequeue)}}}
#TRIGGER {* lands a mighty * on ({@rescuelist})!} {#IF (%1 != "") {#IF (@rescuequeue = "") {
#VAR currentrescue %1
#VAR rescuequeue %additem( %proper( %1), @rescuequeue)
resc %1
} {#VAR rescuequeue %additem( %proper( %1), @rescuequeue)}}}
#TRIGGER {({@rescuelist}) is nearly slain by the force of} {#IF (%1 != "") {#IF (@rescuequeue = "") {
#VAR currentrescue %1
#VAR rescuequeue %additem( %proper( %1), @rescuequeue)
resc %1
} {#VAR rescuequeue %additem( %proper( %1), @rescuequeue)}}}
#TRIGGER {({@RescueList}) gasps from * awesome} {#IF (%1 != "") {#IF (@rescuequeue = "") {
#VAR currentrescue %1
#VAR rescuequeue %additem( %proper( %1), @rescuequeue)
resc %1
} {#VAR rescuequeue %additem( %proper( %1), @rescuequeue)}}}
#TRIGGER {({@RescueList}) staggers from a fearsome} {#IF (%1 != "") {#IF (@rescuequeue = "") {
#VAR currentrescue %1
#VAR rescuequeue %additem( %proper( %1), @rescuequeue)
resc %1
} {#VAR rescuequeue %additem( %proper( %1), @rescuequeue)}}}
#TRIGGER {* tried to backstab ({@RescueList}), but nearly cuts} {#IF (%1 != "") {#IF (@rescuequeue = "") {
#VAR currentrescue %1
#VAR rescuequeue %additem( %proper( %1), @rescuequeue)
resc %1
} {#VAR rescuequeue %additem( %proper( %1), @rescuequeue)}}}
#TRIGGER {* places * in the back of ({@RescueList})} {#IF (%1 != "") {#IF (@rescuequeue = "") {
#VAR currentrescue %1
#VAR rescuequeue %additem( %proper( %1), @rescuequeue)
resc %1
} {#VAR rescuequeue %additem( %proper( %1), @rescuequeue)}}}
#CLASS 0



How I use:

* I usually check the option to always have these folders off when zMud starts. I have a button and an alias to turn on/off the rescue list folders.
* When group is done forming, type "afill" to auto fill list.
* Manually add hidden/shapechanged/ld/etc. players to specific lists using "adt/adp/ads/adf" commands.
* I delete myself from tank list "dlt hartor" b/c my own buffs are kept on my status line.
* Before charging/during fights use "glt" to glance the tanks to see if any need rescuing.



Other Misc Stuff:

Bash Trigs:

Just a very quick set I made to auto-mate some bashing.

** Keep in a folder usually off and remember to turn off after you're done w/auto-bash mode. It cuts down on the spam you need to see so you don't bash while mob is on ground and have higher chance of missing.

* "LazyBash" folder just sends a bash whenever it sees something in room stand up. This is good for single mob fights, as 99% of the time the only thing on ground and would stand is the mob.

* "TargBash" folder is for targetted bashing. This only works if you know a portion of the mob's name on stand and have its unique name.

"TargBash":

- Mobs can look different in different movements. For example:

1) In room: "A wizard stands here grinning."
2) While standing: "Mike the evil wizard clambers to his feet."
3) Keywords: Mike, Wizard, Man

- Maybe there might be 10 other wizards in room, but Mike has a unique name and stand line that contains "Mike". To set up targetted bashing, you must specify keyword and a portion of the stand line using "stbs". For example:

"stbs mike mike" or "stbs man mike the evil" or "stbs man the evil"

The first example will send "bash mike" and the last two "bash man".

The first example matches "mike", 2nd "mike the evil" and 3rd "the evil". The most efficient is the 1st example, since only Mike will contain "mike" in the stand-line of the mob.

A zone example is Izan's, your assigned to bash Jeseba, you can just turn on folder, "stbs jeseba jeseba". You have to send out the 1st bash, but after that the trigs will take over on Jeseba standing up and re-bash.


Improvements:
* I think when you bash a mob it has the exact same line as when it stands (ie "You send Mike the evil wizard sprawling."). Therefore in the folder, you can have a trigger to capture the standline portion and only have to specify the keyword. Something like:

- The alias to set-up would only be "stbs <keyword>" ie "stbs mike".
- A trigger like #TRIG (You send (*) sprawling.) {#VAR bashline "%1"}
- Another trigger for if you missed the first bash. I forget if it says the mob you missed, but if it doesn't, then it would probably be safer the first way. Though if you miss a bash it shouldn't auto-rebash cuz' maybe you'd have to flee then.

Now you have the keyword stored, but it'll pick up the stand line (in var @bashLine sorry a lil confusing I know) automatically and match it.


#CLASS {Bashing}
#ALIAS stbs {
#var bashtarget %1
#VAR bashline "%-2"
#SAY Bashing: @bashtarget || Bashline: @bashline
}
#CLASS 0
#CLASS {Bashing|LazyBash} {disable}
#TRIGGER {{clambers|rises} to} {bash}
#TRIGGER {staggers about, but manages to get} {bash}
#CLASS 0
#CLASS {Bashing|TargBash} {disable}
#TRIGGER {*@bashline* {clambers|rises|staggers about, but manages} to} {bash @bashtarget}
#TRIGGER {*@bashline* staggers about, but manages to} {bash @bashtarget}
#TRIGGER {Looking panicked, a *@bashline* scrambles madly to his feet!} {}
#CLASS 0



Warriors really take no thought to play. :p
Last edited by Ifin on Wed Aug 02, 2006 12:22 pm, edited 6 times in total.
Disoputlip
Sojourner
Posts: 956
Joined: Thu Feb 21, 2002 6:01 am
Location: Copenhagen

Postby Disoputlip » Fri Apr 14, 2006 3:38 pm

Haven't tried it yet, but the rescue thing looks like something I want to try.

I can see one of the triggers works on Room size, since I don't have that togged on then I'm gonna change it to Exits: just wanted to post it if anyone is getting problems.
Ifin
Sojourner
Posts: 171
Joined: Mon Nov 14, 2005 11:43 pm

Postby Ifin » Fri Apr 14, 2006 10:57 pm

Playing enchanter can be fun sometimes, though IMHO it got to be a grind if all you do is chant, and you see people AFK in zones while you're busting your ass.

Anyways, here's my chanter list maintenance set, though 90% of a chanter is figuring out timings and making decisions on what to cast when, the bulk of my chanter trigs just cut through the SPAM when glancing (player) targets by outputting buffs to the status window.


Enchanter Glance Triggers

* Auto-fills group list into 4 different categories: Tanks, Mages, Priests, and Rogues (Rangers/Bards fall in here)
* Has commands to easily add/delete/glance people from each list.
* Displays and updates buffs each group member has in color-coded format. Buffs are: Dragonscales, Stone Skin, Blur, Major Globe of Invulnerability, and Haste.
* Group auto-buffer works off of these lists (posted in a later msg).


Implementation:

* Updates "in"-buff when it sees 1) spell finished on player in room 2) on glance
* Updates "out"-buff when 1) group-member gsays a "short-handed version" of the buff name 2) on glance (except haste)

"short-handed" buff names are "scale" "blur" "stone" "globe" and "haste". This is because spell out messages vary so much, but 99% of them include those words. Also, a significant people don't even say the word "out". Also, 99% of the time people won't say those words unless they are asking for the spell (and hence are un-spelled).


Improvements that can be made:

* Figure out some way to delete all the variables it creates for each person you group with after group is done. No big deal though.
* Maybe 3% of the time it doesn't update a single person when you use the group-glance (glt/glp/glmg/glro) alias. Not sure exactly why, but glancing the person twice by themself usually solves the problem.
* Add a haste-timer to auto-matically out-buff haste.
* Separate Rogues into Melee and Archery. This is more so for the auto-buffer set which I'm too lazy to tweak (ie only those in melee need to be auto-globed/hasted)
* Add easy alias to put in-buff on people who are perm-hasted.


Example of how list looks in status window:

Tanks (1)
-----------
Hartor - DS - SS - BL - glb - hs

Priests (0)
------------

Mages (3)
-----------
Ifin - DS - SS - bl - glb - hs
Ifinien - ds - ss - bl - glb - hs
Ifinein - ds - ss - bl - glb - hs

Rogues (1)
-------------
Hartar - ds - ss - bl - GLB - HS

Total In List: (5)


Colors: green for all out-buffs, DS - white, SS - grey, BL - blue, GLB - red, HS - red.


List Controls:
- "afill" - auto-fills lists
- "clrall" - clear all the lists
- "adt/adp/admg/adro <player>" - add a player to Tank/Priest/Mage/Rogue list.
- "dlt/dlp/dlmg/dlro <player>" - deletes a player from " " list.
- "glt/glp/glmg/glro" - glances all players in " " list.
- "mt <player>" - puts a player into @mainTank var


Code:


Go to "Actions", "Define Status Bar" and in the big "Window" section, put in:

%cr
@STW_Buffs
%cr



Below is the auto-group and list maintenance code.

**** Important: You must copy and paste each portion (class) separately into the zMud command line. If blue lines show up in your zMud window when you copy/paste and press enter, you did it wrong.



#CLASS {TrackClass}
#ALIAS glm {glance @maintank}
#ALIAS mt {#IF (%1 = "") {#SAY Main Tank: @maintank} {#VAR maintank %proper( %1);#SAY Maintank: %1}}
#ALIAS dspall {#MATH groupnumber %numitems( @listtank)+%numitems( @listpriest)+%numitems( @listmage)+1;#SAY Total Number of Members: @groupnumber;mt;dspt;dspp;dspmg;dspro}
#ALIAS clrall {#gagon;clrt;clrp;clrmg;clrro;#UNVAR grouplist;#gagoff;#SAY All Lists Cleared;clrstw}
#ALIAS clrstw {#VAR STW_Buffs {Main Tank%{cr}---------%{cr}%{cr}%{cr}Tanks (0)%{cr}----------%{cr}%{cr}%{cr}Priests (0)%{cr}-----------%{cr}%{cr}%{cr}Mages (0)%{cr}------------%{cr}%{cr}%{cr}Rogues (0)%{cr}-------------%{cr}%{cr}%{cr}%{cr}Total In List: (0)}}
#ALIAS gl {glance %1}
#ALIAS afill {clrall;#T+ AutoFillList;tog pag;who ingroup sort}
#ALIAS gla {glt;glp;glmg;glro}
#TRIGGER {({@grouplist}) {is in an excellent condition|has a few scratches|has some small wounds and bruises|has quite a few wounds|has some big nasty wounds and scratches|looks pretty hurt|is in awful condition}} {#VAR glancename %1;#VAR BF_temp {%ansi( bold, cyan)%proper( %1)%ansi( green) - ds-ss-bl-glb};#PRI {#T+ GlanceCap}}
#CLASS 0



#CLASS {TrackClass|GlanceCap} {disable}
#TRIGGER {blurred and difficult to make out!} {#VAR BF_temp %replace( @BF_temp, bl, %ansi( bold, blue)BL%ansi( green))}
#TRIGGER {to be made of stone!} {#VAR BF_temp %replace( @BF_temp, ss, %ansi( bold, black)SS%ansi( green))}
#TRIGGER {body is covered in dragon scales!} {#VAR BF_temp %replace( @BF_temp, ds, %ansi( bold, white)DS%ansi( green))}
#TRIGGER {encased in a shimmering globe!} {#VAR BF_temp %replace( @BF_temp, glb, %ansi( bold, red)GLB%ansi( green))}
#TRIGGER {<} {#T- GlanceCap;#VAR STW_Buffs %replace( @STW_Buffs, @{BF_@glanceName}, @BF_temp);#VAR BF_@glanceName @BF_temp} "" {nocr|prompt}
#CLASS 0



#CLASS {TrackClass|ListImplementation}
#ALIAS addmem {#IF (!%ismember( %proper( %1), @grouplist)) {#ADDITEM list@listName %proper( %1);#ADDITEM grouplist %proper( %1);#VAR BF_%1 {%ansi( bold, cyan)%proper( %1)%ansi( green) - ds-ss-bl-glb-hs%{cr}};#IF (@listName = tank) {#VAR STW_Buffs %insert( "@{BF_%1}", @STW_Buffs, (%pos( "----------", @STW_Buffs)+11));#VAR STW_Buffs %replace( @STW_Buffs, Tanks ~(%eval( %numitems( @listTank)-1)~), Tanks ~(%numitems( @listTank)~))} {#IF (@listName = priest) {#VAR STW_Buffs %insert( "@{BF_%1}", @STW_Buffs, (%pos( "-----------", @STW_Buffs)+12));#VAR STW_Buffs %replace( @STW_Buffs, Priests ~(%eval( %numitems( @listPriest)-1)~), Priests ~(%numitems( @listPriest)~))} {#IF (@listName = mage) {#VAR STW_Buffs %insert( "@{BF_%1}", @STW_Buffs, (%pos( "------------", @STW_Buffs)+13));#VAR STW_Buffs %replace( @STW_Buffs, Mages ~(%eval( %numitems( @listMage)-1)~), Mages ~(%numitems( @listMage)~))} {#IF (@listName = rogue) {#VAR STW_Buffs %insert( "@{BF_%1}", @STW_Buffs, (%pos( "-------------", @STW_Buffs)+14));#VAR STW_Buffs %replace( @STW_Buffs, Rogues ~(%eval( %numitems( @listRogue)-1)~), Rogues ~(%numitems( @listRogue)~))}}}};#VAR BF_%1 {%ansi( bold, cyan)%proper( %1)%ansi( green) - ds-ss-bl-glb};#VAR STW_Buffs %replace( @STW_Buffs, Total In List~: ~(%eval( %numitems( @grouplist)-1)~), Total In List~: ~(%numitems( @grouplist)~));#SA %1 ADDED TO %upper( @listName) LIST}}
#ALIAS clrmem {#gagon;#forall {@{list@listName}} {dlmem %1};#UNVAR list@listName = "";#gagoff;#echo %proper( @listName) list - Cleared.}
#ALIAS dspmem {#SA CURRENT %upper( @listName) LIST (%numitems( @{list@listName})):;#forall {@{list@listName}} {#sa %{i}}}
#ALIAS dlmem {#IF (%ismember( %proper( %1), @grouplist)) {#DELITEM grouplist %proper( %1);#DELITEM list@listName %proper( %1);#VAR STW_Buffs %remove( %concat( @{BF_%1}, -hs%cr), @STW_Buffs);#VAR STW_Buffs %remove( %concat( @{BF_%1}, -%ansi( bold, red)HS%ansi( green)%{cr}), @STW_Buffs);#UNVAR BF_%1;#IF (@listName = tank) {#VAR STW_Buffs %replace( @STW_Buffs, Tanks ~(%eval( %numitems( @listTank)+1)~), Tanks ~(%numitems( @listTank)~))} {#IF (@listName = priest) {#VAR STW_Buffs %replace( @STW_Buffs, Priests ~(%eval( %numitems( @listPriest)+1)~), Priests ~(%numitems( @listPriest)~))} {#IF (@listName = mage) {#VAR STW_Buffs %replace( @STW_Buffs, Mages ~(%eval( %numitems( @listMage)+1)~), Mages ~(%numitems( @listMage)~))} {#IF (@listName = rogue) {#VAR STW_Buffs %replace( @STW_Buffs, Rogues ~(%eval( %numitems( @listRogue)+1)~), Rogues ~(%numitems( @listRogue)~))}}}};#VAR STW_Buffs %replace( @STW_Buffs, Total In List~: ~(%eval( %numitems( @grouplist)+1)~), Total In List~: ~(%numitems( @grouplist)~));#SA %1 REMOVED FROM %upper( @listName) LIST}}
#ALIAS glmem {#FO @{list@listName} {gl %i}}
#CLASS 0



#CLASS {TrackClass|ListCommands}
#ALIAS admg {#VAR listName mage;addmem %1}
#ALIAS dlmg {#VAR listName mage;dlmem %1}
#ALIAS clrmg {#VAR listName mage;clrmem}
#ALIAS dspmg {#VAR listName mage;dspmem}
#ALIAS glmg {#VAR listName mage;glmem}
#ALIAS adp {#VAR listName priest;addmem %1}
#ALIAS clrp {#VAR listName priest;clrmem}
#ALIAS dlp {#VAR listName priest;dlmem %1}
#ALIAS dspp {#VAR listName priest;dspmem}
#ALIAS glp {#VAR listName priest;glmem}
#ALIAS adt {#VAR listName tank;addmem %1}
#ALIAS clrt {#VAR listName tank;clrmem}
#ALIAS dlt {#VAR listName tank;dlmem %1}
#ALIAS dspt {#VAR listName tank;dspmem}
#ALIAS glt {#VAR listName tank;glmem}
#ALIAS adro {#VAR listName rogue;addmem %1}
#ALIAS clrro {#VAR listName rogue;clrmem}
#ALIAS dlro {#VAR listName rogue;dlmem %1}
#ALIAS glro {#VAR listName rogue;glmem}
#ALIAS dspro {#VAR listName rogue;dspmem}
#CLASS 0



#CLASS {TrackClass|AutoFillList} {disable}
#TRIGGER {~[%d (*)~] (%w)} {#IF (%ismember( %1, {War|Pal|A-P}) > 0) {adt %2} {#IF (%ismember( %1, {Cle|Sha|Dru}) > 0) {adp %2} {#IF (%ismember( %1, {Inv|Enc|Ill|Ele|Psi|Lic|Nec}) > 0) {admg %2} {#IF (%ismember( %1, {Rog|Dir|Bar|Ran|Ctr}) > 0) {adro %2}}}}}
#TRIGGER {Total Visible} {#T- AutoFillList;tog pag}
#CLASS 0



#CLASS {TrackClass|ConstantSTW}
#CLASS 0



#CLASS {TrackClass|CastCap}
#TRIGGER {({@grouplist}) starts to move with uncanny speed!} {#VAR STW_Buffs %replace( @STW_Buffs, %concat( @{BF_%1}, "-hs"), %concat( @{BF_%1}, "-%ansi( bold, red)HS%ansi( green)"))}
#TRIGGER {({@grouplist}) group-says '*haste*'} {#VAR STW_Buffs %replace( @STW_Buffs, %concat( @{BF_%1}, -%ansi( bold, red)HS%ansi( green)), %concat( @{BF_%1}, "-hs"))}
#TRIGGER {({@grouplist})'s skin transforms into hard-plated dragon scales.} {#VAR STW_Buffs %replace( @STW_Buffs, @{BF_%1}, %replace( @{BF_%1}, ds, %ansi( bold, white)DS%ansi( green)));#VAR BF_%1 %replace( @{BF_%1}, ds, %ansi( bold, white)DS%ansi( green))}
#TRIGGER {({@grouplist})'s form becomes blurred and difficult to make out!} {#VAR STW_Buffs %replace( @STW_Buffs, @{BF_%1}, %replace( @{BF_%1}, bl, %ansi( bold, blue)BL%ansi( green)));#VAR BF_%1 %replace( @{BF_%1}, bl, %ansi( bold, blue)BL%ansi( green))}
#TRIGGER {({@grouplist}) begins to shimmer.} {#VAR STW_Buffs %replace( @STW_Buffs, @{BF_%1}, %replace( @{BF_%1}, glb, %ansi( bold, red)GLB%ansi( green)));#VAR BF_%1 %replace( @{BF_%1}, glb, %ansi( bold, red)GLB%ansi( green))}
#TRIGGER {({@grouplist})'s skin seems to turn to stone.} {#VAR STW_Buffs %replace( @STW_Buffs, @{BF_%1}, %replace( @{BF_%1}, ss, %ansi( bold, black)SS%ansi( green)));#VAR BF_%1 %replace( @{BF_%1}, ss, %ansi( bold, black)SS%ansi( green))}
#TRIGGER {({@grouplist}) group-says '*blur*'} {#VAR STW_Buffs %replace( @STW_Buffs, @BF_%1, %replace( @{BF_%1}, %ansi( bold, blue)BL, bl));#VAR BF_%1 %replace( @{BF_%1}, %ansi( bold, blue)BL, bl)}
#TRIGGER {({@grouplist}) group-says '*scale*'} {#VAR STW_Buffs %replace( @STW_Buffs, @BF_%1, %replace( @{BF_%1}, %ansi( bold, white)DS, ds));#VAR BF_%1 %replace( @{BF_%1}, %ansi( bold, white)DS, ds)}
#TRIGGER {({@grouplist}) group-says '*globe*'} {#VAR STW_Buffs %replace( @STW_Buffs, @BF_%1, %replace( @{BF_%1}, %ansi( bold, red)GLB, glb));#VAR BF_%1 %replace( @{BF_%1}, %ansi( bold, red)GLB, glb)}
#TRIGGER {({@grouplist}) group-says '*stone*'} {#VAR STW_Buffs %replace( @STW_Buffs, @BF_%1, %replace( @{BF_%1}, %ansi( bold, black)SS, ss));#VAR BF_%1 %replace( @{BF_%1}, %ansi( bold, black)SS, ss)}
#CLASS 0




How I Use:
* I type "afill" to fill in group list when group done forming.
* Use "adt/adp/admg/adt <player>" to add anon/etc. people.
* "mt <maintank>" so I can glance him separate using "glm" command from time to time.
* Use "glt/glp/glmg/glro" as needed to glance the groups I want to see.



Below is an Auto-Buffer that works based on the group lists created above. I don't really use it except for certain situations so never "fixed" it.

Auto-Buffer

* Only implemented for tanks and rogue lists.
* Auto puts up 1) scales+blurs or 2) scales+blurs+globes on players in Tank list. If option 1, will always put up scales first then blurs. If 2) will always put up scales first, then alternate blurs and globes.
* Auto puts up globes+hastes on players in Rogue list.


Implementation:

* Searches the player's buff-line variable to see if specified buff is out, and if it is "pushes" buff command into variable "BFCOM". Takes commands from "BFCOM" as each spell completes.
* If player not in room or spell not memmed, will skip to next player/spell.
* Script stops if a spell fails in cast (dragonscales in this case)


Improvements or tweaks that can be made:

* Finish writing script for Priest and Mage types (good for when chanter sitting out and just keeping spells up on everyone going in). Should specify either to put up just scales or scale+blur.
* Rogues don't work b/c lumped in people who might not need globe/haste.


Commands:

- "bft" - auto buffs tanks w/scales+blurs
- "bft x" - the x is any char after "bft". Auto-buffs tanks w/scales+blurs+globes.
- "bfro" - auto buffs Rogue list with globes+haste


Code:


#CLASS {BuffClass}
#ALIAS bft {
#UNVAR BFCOM
#gag
#FORALL @listTank {
#IF ((%pos( ds, @{BF_%i}) > 0) AND (%pos( ss, @{BF_%i}) > 0)) {#VAR BFCOM %push( "c 'dragonscale'%i", @BFCOM)}
#IF (%1 = "") {} {#IF (%pos( glb, @{BF_%i}) > 0) {#VAR BFCOM %additem( "c 'globe of invul'%i", @BFCOM)}}
#IF (%pos( bl, @{BF_%i}) > 0) {#VAR BFCOM %additem( "c 'blur'%i", @BFCOM)}
}
#IF (%numitems( @BFCOM) != 0) {
#T+ AutoBF
#SEND %pop( BFCOM)
} {#T- AutoBF}
}
#ALIAS bfs {
#T- AutoBF
#UNVAR BFCOM
#gag
}
#ALIAS bfro {
#UNVAR BFCOM
#gag
#FORALL @listRogue {
#IF (%pos( glb, @{BF_%i}) > 0) {#VAR BFCOM %additem( "c 'globe of invul'%i", @BFCOM)}
#IF (%pos( %concat( @{BF_%1}, "-hs"), @STW_Buffs) > 0) {#VAR BFCOM %push( "c 'haste'%i", @BFCOM)}
}
#IF (%numitems( @BFCOM) != 0) {
#T+ AutoBF
#SEND %pop( BFCOM)
} {#T- AutoBF}
}
#CLASS 0
#CLASS {BuffClass|AutoBF} {disable}
#TRIGGER {You complete your spell...} {#IF (%numitems( @BFCOM) != 0) {#SEND %pop( BFCOM)}}
#TRIGGER {You don't have that spell memorized.} {#IF (%numitems( @BFCOM) != 0) {#SEND %pop( BFCOM)}}
#TRIGGER {Nobody here by that name.} {#IF (%numitems( @BFCOM) != 0) {#SEND %pop( BFCOM)}}
#CLASS 0



How I use:

* So constantly glancing tanks should keep tank buffs up to date when in battle. If tanks seem to handle battle, doesn't really matter who you re-buff first so can just use "bft" and it'll hit the tanks that need spells.
* In situations when chanter is sitting out buffing, I put everyone going in on Tank list to keep everyone scaled+blur. With time stop+good prioritizing, should be able to keep up to 11 people always scaled/blur on spell runs.


When NOT to use:

* If tanking is lopsided and scales fall at same time for two tanks, don't use auto-buff but manually hit the tank tanking more.
* Do not use auto-buff to put up spells on tanks initially in zones. Scales and blurs should always be staggered so they do not fall on same tick.


Feel free to ask me if you have any questions on how to get this set working or use it while chanting.
Last edited by Ifin on Thu Aug 03, 2006 2:50 am, edited 2 times in total.
Disoputlip
Sojourner
Posts: 956
Joined: Thu Feb 21, 2002 6:01 am
Location: Copenhagen

Postby Disoputlip » Mon Apr 17, 2006 8:40 pm

I stole your rescue script and totally redid it, but I think the spirit is the same, works great.

The bash trigger you posted seems to be annoying though. here is one I wrote that doesn't fire all the time:


Code: Select all

#CLASS {bash}
#TRIGGER {@bashtarget {rises|clambers} to {his|her|its} feet.} {bash}
#TRIGGER {scrambles madly to {his|her|its} feet!} {bash}
#TRIGGER {Your bash at (*) sends {him|her|it} sprawling.} {#var bashtarget {%1}}
#TRIGGER {As (*) avoids your bash, you topple over and fall to the ground.} {#var bashtarget {%1}}
#TRIGGER {avoids your bash,} {stand;bash}
#TRIGGER {@bashtarget staggers about, but manages to get to his feet.} {bash}
#CLASS 0
Ifin
Sojourner
Posts: 171
Joined: Mon Nov 14, 2005 11:43 pm

Postby Ifin » Tue Apr 18, 2006 4:10 am

Yeah, I haven't really worked on my warrior set much after I started playing mages. But as for the bash trigger, my logic and situations as I understand is different.

For one, always have something to toggle on/off the folders.

For the LazyBash, as stated it should only be used when fighting one mob in the room that needs to be bashed. This is b/c 99.9% of the time, only that mob will be on the ground (since the only thing you need to do is bash him), and so only his stand prompts will cause "bash" by itself to fire.

You have to have a 2nd set for targetted bashing though, and it doesn't work in all situations, maybe 60% of the time, when it's pretty unique mobs instead of "5.priest" that you'll have to bash.

You have to set a keyword, as <long mob name> rises/clambers etc. is not the same or captureable as the keyword, ie "A high mage of bloodstone rises to their feet." whereas one of the keywords is "mage".

I suppose you can dynamically capture their stand line after your first attempt, instead of triggering off *@bashline* (where you would look first into the room to find one of the keywords), you set @bashline to what you have (#TRIGGER {Your bash at (*) sends {him|her|it} sprawling.}, etc.).

But keyword you still should provide, as you should be "bash keyword" instead of just "bash", in case another mob rescues your target, or most likely you won't even be targetting your target if you're going into a room with tanks b/c you wouldn't be "switch"ing opponents as a warrior.

Example (not exactly in game but takes into account what you may see):
How mob looks just standing in room: A wizard stands here grinning crazily.
Mob keywords (whatever): Mike, wizard, man
Bashline: Your bash at Mike the grey wizard sends him sprawling.
Standline: "Mike the grey wizard" clambers to his feet. (I think this is the same as the bashline part, though haven't bashed in awhile so not sure).

Intention of my set: "stbs mike mike", would have to have previous experience of mob (which you should if you're using auto-bashing), 1st word is keyword, 2nd "mike" is part of the standline.

Updated: Set Your bash at (*) ... automatically to @bashline.
Then you just have to define mob keyword and start a bash to start trigs.
Ifin
Sojourner
Posts: 171
Joined: Mon Nov 14, 2005 11:43 pm

Postby Ifin » Tue Apr 18, 2006 4:15 am

My group glance/buff sets modified for illusionist.

Most of the boring work of illusionist is just displacing everyone at beginning, and since everyone should always be displaced there should be a way to keep track of everyone easily.

I see so many new illusionists who don't keep group displaced. The main purpose of an illusionist IS to keep the whole group displaced - which prevents 1 hit deaths on weaker group members. In my style, it's more important to keep group displaced than tanks in 90% of zoning. Tanks can handle most big fights w/just scale+blur, and if not, then yes illu should focus on tank displaces. But all it takes might be one hit on non-tanks and they die. This is what displace - a very long lasting spell - is supposed to help prevent.


Illusionist Glance + Auto-Buff Triggers

* First part is standard auto-list filler and separates into 4 categories: Tanks/Mages/Priest/Rogues. Categories don't matter as much to illu's, but is useful to see what kind of classes you have in group.
* Commands to add/delete people from each category.
* Displays group and buff status for displace in status window.
* 2nd part of this set has an auto-buffer for displaces.


Implementation:

* Updates "in"-displace when sees finish casting or on glance.
* Updates "out"-displace when group member gsays "displace" or on glance.


Improvements that can be made:

* None that I can think of for its function. Just keeps track of displaces and even auto-displaces groups with an alias.


Example of how list looks in status window:

Tanks (1)
-----------
Hartor - DSP

Priests (0)
------------

Mages (2)
------------
Ifin - dsp
Ifinien - DSP

Rogues (1)
-------------
Hartar - dsp

Total In List: (4)


Colors: green for out-buff, grey for in-buff


List Controls:
- "afill"
- "clrall"
- "adt/admg/adp/adro <player>"
- "dlt/dlmg/dlp/dlro <player>"
- "glt/glp/glmg/glro"


Code:


Go to "Actions", "Define Status Bar" and in the big "Window" section, put in:

%cr
@STW_Buffs
%cr



Below is the auto-group and list maintenance code.

**** Important: You must copy and paste each portion (class) separately into the zMud command line. If blue lines show up in your zMud window when you copy/paste and press enter, you did it wrong.




#CLASS {TrackClass}
#ALIAS glm {glance @maintank}
#ALIAS mt {#IF (%1 = "") {#SAY Main Tank: @maintank} {#VAR maintank %proper( %1);#SAY Maintank: %1}}
#ALIAS dspall {#MATH groupnumber %numitems( @listtank)+%numitems( @listpriest)+%numitems( @listmage)+1;#SAY Total Number of Members: @groupnumber;mt;dspt;dspp;dspmg;dspro}
#ALIAS clrall {#gagon;clrt;clrp;clrmg;clrro;#UNVAR grouplist;#gagoff;#SAY All Lists Cleared;clrstw}
#ALIAS clrstw {#VAR STW_Buffs {Main Tank%{cr}---------%{cr}%{cr}%{cr}Tanks (0)%{cr}----------%{cr}%{cr}%{cr}Priests (0)%{cr}-----------%{cr}%{cr}%{cr}Mages (0)%{cr}------------%{cr}%{cr}%{cr}Rogues (0)%{cr}-------------%{cr}%{cr}%{cr}%{cr}Total In List: (0)}}
#ALIAS gl {glance %1}
#ALIAS afill {clrall;#T+ AutoFillList;tog pag;who ingroup sort}
#ALIAS gla {glt;glp;glmg;glro}
#TRIGGER {({@grouplist}) {is in an excellent condition|has a few scratches|has some small wounds and bruises|has quite a few wounds|has some big nasty wounds and scratches|looks pretty hurt|is in awful condition}} {#VAR glancename %1;#VAR BF_temp {%ansi( bold, cyan)%proper( %1)%ansi( green) - dsp};#PRI {#T+ GlanceCap}}
#CLASS 0



#CLASS {TrackClass|GlanceCap} {disable}
#TRIGGER {form is displaced, and difficult to track!} {#VAR BF_temp %replace( @BF_temp, dsp, %ansi( bold, magneta)DSP%ansi( green))}
#TRIGGER {<} {#T- GlanceCap;#VAR STW_Buffs %replace( @STW_Buffs, @{BF_@glanceName}, @BF_temp);#VAR BF_@glanceName @BF_temp} "" {nocr|prompt}
#CLASS 0



#CLASS {TrackClass|ListImplementation}
#ALIAS addmem {#IF (!%ismember( %proper( %1), @grouplist)) {#ADDITEM list@listName %proper( %1);#ADDITEM grouplist %proper( %1);#VAR BF_%1 {%ansi( bold, cyan)%proper( %1)%ansi( green) - dsp%{cr}};#IF (@listName = tank) {#VAR STW_Buffs %insert( "@{BF_%1}", @STW_Buffs, (%pos( "----------", @STW_Buffs)+11));#VAR STW_Buffs %replace( @STW_Buffs, Tanks ~(%eval( %numitems( @listTank)-1)~), Tanks ~(%numitems( @listTank)~))} {#IF (@listName = priest) {#VAR STW_Buffs %insert( "@{BF_%1}", @STW_Buffs, (%pos( "-----------", @STW_Buffs)+12));#VAR STW_Buffs %replace( @STW_Buffs, Priests ~(%eval( %numitems( @listPriest)-1)~), Priests ~(%numitems( @listPriest)~))} {#IF (@listName = mage) {#VAR STW_Buffs %insert( "@{BF_%1}", @STW_Buffs, (%pos( "------------", @STW_Buffs)+13));#VAR STW_Buffs %replace( @STW_Buffs, Mages ~(%eval( %numitems( @listMage)-1)~), Mages ~(%numitems( @listMage)~))} {#IF (@listName = rogue) {#VAR STW_Buffs %insert( "@{BF_%1}", @STW_Buffs, (%pos( "-------------", @STW_Buffs)+14));#VAR STW_Buffs %replace( @STW_Buffs, Rogues ~(%eval( %numitems( @listRogue)-1)~), Rogues ~(%numitems( @listRogue)~))}}}};#VAR BF_%1 {%ansi( bold, cyan)%proper( %1)%ansi( green) - dsp};#VAR STW_Buffs %replace( @STW_Buffs, Total In List~: ~(%eval( %numitems( @grouplist)-1)~), Total In List~: ~(%numitems( @grouplist)~));#SA %1 ADDED TO %upper( @listName) LIST}}
#ALIAS clrmem {#gagon;#forall {@{list@listName}} {dlmem %1};#UNVAR list@listName = "";#gagoff;#echo %proper( @listName) list - Cleared.}
#ALIAS dspmem {#SA CURRENT %upper( @listName) LIST (%numitems( @{list@listName})):;#forall {@{list@listName}} {#sa %{i}}}
#ALIAS dlmem {#IF (%ismember( %proper( %1), @grouplist)) {#DELITEM grouplist %proper( %1);#DELITEM list@listName %proper( %1);#VAR STW_Buffs %remove( @{BF_%1}%{cr} , @STW_Buffs);#UNVAR BF_%1;#IF (@listName = tank) {#VAR STW_Buffs %replace( @STW_Buffs, Tanks ~(%eval( %numitems( @listTank)+1)~), Tanks ~(%numitems( @listTank)~))} {#IF (@listName = priest) {#VAR STW_Buffs %replace( @STW_Buffs, Priests ~(%eval( %numitems( @listPriest)+1)~), Priests ~(%numitems( @listPriest)~))} {#IF (@listName = mage) {#VAR STW_Buffs %replace( @STW_Buffs, Mages ~(%eval( %numitems( @listMage)+1)~), Mages ~(%numitems( @listMage)~))} {#IF (@listName = rogue) {#VAR STW_Buffs %replace( @STW_Buffs, Rogues ~(%eval( %numitems( @listRogue)+1)~), Rogues ~(%numitems( @listRogue)~))}}}};#VAR STW_Buffs %replace( @STW_Buffs, Total In List~: ~(%eval( %numitems( @grouplist)+1)~), Total In List~: ~(%numitems( @grouplist)~));#SA %1 REMOVED FROM %upper( @listName) LIST}}
#ALIAS glmem {#FO @{list@listName} {gl %i}}
#CLASS 0



#CLASS {TrackClass|ListCommands}
#ALIAS admg {#VAR listName mage;addmem %1}
#ALIAS dlmg {#VAR listName mage;dlmem %1}
#ALIAS clrmg {#VAR listName mage;clrmem}
#ALIAS dspmg {#VAR listName mage;dspmem}
#ALIAS glmg {#VAR listName mage;glmem}
#ALIAS adp {#VAR listName priest;addmem %1}
#ALIAS clrp {#VAR listName priest;clrmem}
#ALIAS dlp {#VAR listName priest;dlmem %1}
#ALIAS dspp {#VAR listName priest;dspmem}
#ALIAS glp {#VAR listName priest;glmem}
#ALIAS adt {#VAR listName tank;addmem %1}
#ALIAS clrt {#VAR listName tank;clrmem}
#ALIAS dlt {#VAR listName tank;dlmem %1}
#ALIAS dspt {#VAR listName tank;dspmem}
#ALIAS glt {#VAR listName tank;glmem}
#ALIAS adro {#VAR listName rogue;addmem %1}
#ALIAS clrro {#VAR listName rogue;clrmem}
#ALIAS dlro {#VAR listName rogue;dlmem %1}
#ALIAS glro {#VAR listName rogue;glmem}
#ALIAS dspro {#VAR listName rogue;dspmem}
#CLASS 0



#CLASS {TrackClass|AutoFillList} {disable}
#TRIGGER {~[%d (*)~] (%w)} {#IF (%ismember( %1, {War|Pal|A-P}) > 0) {adt %2} {#IF (%ismember( %1, {Cle|Sha|Dru}) > 0) {adp %2} {#IF (%ismember( %1, {Inv|Enc|Ill|Ele|Psi|Lic|Nec}) > 0) {admg %2} {#IF (%ismember( %1, {Rog|Dir|Bar|Ran|Ctr}) > 0) {adro %2}}}}}
#TRIGGER {Total Visible} {#T- AutoFillList;tog pag}
#CLASS 0

#CLASS {TrackClass|ConstantSTW}
#CLASS 0

#CLASS {TrackClass|CastCap}
#TRIGGER {({@grouplist})'s form is displaced.} {#VAR STW_Buffs %replace( @STW_Buffs, @{BF_%1}, %replace( @{BF_%1}, dsp, %ansi( bold, magneta)DSP%ansi( green)));#VAR BF_%1 %replace( @{BF_%1}, dsp, %ansi( bold, magneta)DSP%ansi( green))}
#TRIGGER {({@grouplist}) group-says '*disp*'} {#VAR STW_Buffs %replace( @STW_Buffs, @BF_%1, %replace( @{BF_%1}, %ansi( bold, magneta)DSP, dsp));#VAR BF_%1 %replace( @{BF_%1}, %ansi( bold, magneta)DSP, dsp)}
#CLASS 0



Auto-Displacer

* "bft/bfp/bfmg/bfro" to displace different groups

* Should add a "bfa" to do whole group, but that's just ultra-laziness


Code:



#CLASS {BuffClass}
#ALIAS bft {
#UNVAR BFCOM
#gag
#FORALL @listTank {
#IF (%pos( dsp, @{BF_%i}) > 0) {
#SAY @{BF_%i}
#VAR BFCOM %additem( "c 'displa'%i", @BFCOM)
}
}
#IF (%numitems( @BFCOM) != 0) {
#T+ AutoBF
#SEND %pop( BFCOM)
} {#T- AutoBF}
}
#ALIAS bfs {
#T- AutoBF
#UNVAR BFCOM
#gag
}
#ALIAS bfp {
#UNVAR BFCOM
#gag
#FORALL @listPriest {#IF (%pos( dsp, @{BF_%i}) > 0) {#VAR BFCOM %additem( "c 'displa'%i", @BFCOM)}}
#IF (%numitems( @BFCOM) != 0) {
#T+ AutoBF
#SEND %pop( BFCOM)
} {#T- AutoBF}
}
#ALIAS bfmg {
#UNVAR BFCOM
#gag
#FORALL @listMage {#IF (%pos( dsp, @{BF_%i}) > 0) {#VAR BFCOM %additem( "c 'displa'%i", @BFCOM)}}
#IF (%numitems( @BFCOM) != 0) {
#T+ AutoBF
#SEND %pop( BFCOM)
} {#T- AutoBF}
}
#ALIAS bfro {
#UNVAR BFCOM
#gag
#FORALL @listRogue {#IF (%pos( dsp, @{BF_%i}) > 0) {#VAR BFCOM %additem( "c 'displa'%i", @BFCOM)}}
#IF (%numitems( @BFCOM) != 0) {
#T+ AutoBF
#SEND %pop( BFCOM)
} {#T- AutoBF}
}
#CLASS 0
#CLASS {BuffClass|AutoBF} {disable}
#TRIGGER {You complete your spell...} {#IF (%numitems( @BFCOM) != 0) {#SEND %pop( BFCOM)}}
#TRIGGER {You don't have that spell memorized.} {#IF (%numitems( @BFCOM) != 0) {#SEND %pop( BFCOM)}}
#TRIGGER {Nobody here by that name.} {#IF (%numitems( @BFCOM) != 0) {#SEND %pop( BFCOM)}}
#CLASS 0



How I use:

* So again, "afill" to fill in group list. Then add/delete players as needed in groups.
* When zone starting, "bft" "bfp" "bfmg" "bfro" as needed to put up displace on whole group.
* Use auto-buffer to re-displace people as needed.


When not to use:

* Perhaps you don't need to always displace tanks if scales+blur holding up, but definitely rest of group. In this instance, you would manually displace a tank if you anticipate his scale or blur falling or immediately when it falls, in order to "bridge" the spells with a displace.
* Also as mentioned before, 90% of time I would rather displace a non-tank than a tank. Except when just scales+blur aren't holding up. Then I would switch to solo keeping track of tank displaces.


If you need help on getting this set to work or using while Illu feel free to send me a tell.
Last edited by Ifin on Thu Aug 03, 2006 2:52 am, edited 2 times in total.
Ifin
Sojourner
Posts: 171
Joined: Mon Nov 14, 2005 11:43 pm

Postby Ifin » Tue Apr 18, 2006 4:20 am

Misc Enchanter stuff to make life easier. This is mainly just to demonstrate different scripting methods and I may be missing including some alias' that are in different folders, so use and adapt with caution.

* Most of these sets require several defined variables that you can set through alias' to function:

1) "tgt <mob>" - sets a a mob target (ie "tgt cyclops")
2) "spl <spell>" - sets a spell to cast (ie "spl needle sw")
3) "num <#>" - not always used, but specify how many of the same "type" mobs there are (ie ferns pop 2 at a time so I do "num 2". This is so my trigs will start killing at 2.fern (and go numerically down to 1.), so even if it pops, spells will be cast at right fern)
4) "xtra <dir>" - not really used, but specifies an extra direction to go after fleeing (ie again for ferns, where if fighting south ferns after flee I would go east as well).



Base Folder

#CLASS {SpellHelpers}
#ALIAS spl {#IF (%1 = "") {#VAR sspell ""} {#IF (%2 = "") {#VAR sspell %1} {#VAR sspell "%1 %2"}};#SAY Target: @starget || Spell: @sspell || Number: @snumber}
#ALIAS tgt {#IF (%1 = "") {#VAR starget ""} {#VAR starget %1};#SAY Target: @starget || Spell: @sspell || Number: @snumber}
#ALIAS sgo {#T+ AutoNuke;#IF (@starget = "") {c '@sspell'} {c '@sspell' @starget}}
#ALIAS chks {#SAY Target: @starget || Spell: @sspell || Number: @snumber}
#ALIAS sss {#T- AutoNuke;#T- AutoDebuff;#T- AutoSpellRun;#T- ASRNuke;#T- ASRBuff;#SAY Auto-Killing Stopped}
#ALIAS fgo {#T+ AutoSpellRun;#T+ ASRNuke;#IF (@snumber = "") {c '@sspell' @starget} {#VAR curnum @snumber;c '@sspell' @curnum.@starget}}
#ALIAS fff {#T- AutoSpellRun;#T- ASRNuke;#T- ASRBuff;#SAY Auto-Killing Stopped}
#ALIAS num {#IF (%1 = "") {#VAR snumber ""} {#VAR snumber %1};#SAY Target: @starget || Spell: @sspell || Number: @snumber}
#ALIAS xtra {#IF (%1 = "") {#VAR sxtra ""} {#VAR sxtra %1};#SAY Extra Dir is: @sxtra}
#ALIAS rpt {#IF (%1 = "") {} {#VAR repeatSpl %1;#IF (%2 = "") {#VAR repeatSpl2 ""} {#VAR repeatSpl2 %2}};#SAY Repeating Spell is: @repeatSpl, @repeatSpl2}
#ALIAS ssgo {#T+ AutoDebuff;#IF (@starget = "") {c '@sspell'} {c '@sspell' @starget}}
#ALIAS sab {sss;fff;abort;flea}
#CLASS 0


Auto-Repeat a spell w/Time Stop

* "rpt <spell> <function>" - repeats <spell> with <function> after it. For example "rpt gate smoke" would keep doing "c 'gate'smoke".


#CLASS {SpellHelpers|RepeatSpell}
#TRIGGER {Your studies are complete.} {stand;#IF (@timestop = "") {ts} {#IF (@repeatSpl2 = "") {c '@repeatSpl'} {c '@repeatSpl'@repeatSpl2}}}
#TRIGGER {You complete your spell...} {#IF (@timestop = "") {ts} {#IF (@repeatSpl2 = "") {c '@repeatSpl'} {c '@repeatSpl'@repeatSpl2}}}
#TRIGGER {You don't have that spell} {memo}
#TRIGGER {You lost your concentration!} {memo}
#CLASS 0



Simple Auto-Nuking

* If "tgt" is blank, will just cast spell defined using "spl". If "tgt" is specified, will cast at the target.
* "sgo" to just keep casting the spell (ie I use just for needle swarm when offensiving and someone safe is tanking)
* "sss" to turn off folder
* Folder also turns off when out of the spell.


#CLASS {SpellHelpers|AutoNuke} {disable}
#TRIGGER {You complete your spell...} {#IF (@starget = "") {c '@sspell'} {c '@sspell' @starget}}
#TRIGGER {You don't have that spell memorized.} {#T- AutoNuke}
#TRIGGER {Nobody here by that name.} {#T- AutoNuke}
#TRIGGER {Who should the spell be cast upon?} {#T- AutoNuke}
#CLASS 0



Auto-Runs against mob w/flee in-and-out + scale + blur

* Makes a spell run against mob specified by "tgt" and using spell "spl". "num" can also be used.
* Usually I use this after I blind a mob.
* Will keep scales + blur up on self. Will cast the spell at the mob, flee out, go back in room and repeat.
* "fgo" to start runs.
* "fff" to end runs.


#CLASS {SpellHelpers|AutoSpellRun}
#TRIGGER {You receive your share of experience.} {fff}
#TRIGGER {< (%d)h} {#IF (%1 < 100) {fff;abort;flea}} "" {disable}
#TRIGGER {You lost your concentration!} {ds me}
#CLASS 0

#CLASS {SpellHelpers|AutoSpellRun|ASRNuke} {disable}
#TRIGGER {Nobody here} {#MATH curnum @curnum-1;#IF (@curnum > 0) {c '@sspell' @curnum.@starget}}
#TRIGGER {You complete your} {flea}
#TRIGGER {You flee} {#IF (@spDS = "ds") {#T- ASRNuke;#T+ ASRBuff;dsme} {#IF (@spBL = "bl") {#T- ASRNuke;#T+ ASRBuff;blrme} {opflee;#IF (@snumber = "") {c '@sspell' @starget} {#VAR curnum @snumber;c '@sspell' @curnum.@starget}}}}
#TRIGGER {You don't have that spell} {#T+ ASRBuff;#T- ASRNuke;flea;#IF (@sxtra != "") {e}}
#CLASS 0

#CLASS {SpellHelpers|AutoSpellRun|ASRBuff} {disable}
#TRIGGER {You complete your} {#WA 200;#IF (@spDS = "ds") {dsme} {#IF (@spBL = "bl") {blrme} {#T+ ASRNuke;#T- ASRBuff;#IF (@sxtra != "") {w};opflee;#IF (@snumber = "") {c '@sspell' @starget} {#VAR curnum @snumber;c '@sspell' @curnum.@starget}}}}
#TRIGGER {Your studies are complete.} {st;#IF (@spDS = "ds") {dsme} {#IF (@spBL = "bl") {blrme} {#T+ ASRNuke;#T- ASRBuff;#IF (@sxtra != "") {w};opflee;#IF (@snumber = "") {c '@sspell' @starget} {#VAR curnum @snumber;c '@sspell' @curnum.@starget}}}}
#TRIGGER {You don't have that} {memo}
#CLASS 0



Auto-Debuff

* Just simple class based on auto-spell that will keep casting a debuff and rememming in the same room until the debuff hits.
* Only defined for feeblemind, ray of enfeeblement, and stumble/fumble (forget which one).


#CLASS {SpellHelpers|AutoDebuff} {disable}
#TRIGGER {You complete your spell...} {#IF (@starget = "") {c '@sspell'} {c '@sspell' @starget}}
#TRIGGER {You don't have that spell memorized.} {memo}
#TRIGGER {Nobody here by that name.} {#T- AutoDebuff}
#TRIGGER {Who should the spell be cast upon?} {#T- AutoDebuff}
#TRIGGER {looks really dumb..} {abort;#T- AutoDebuff}
#TRIGGER {Your studies are complete.} {st;ssgo}
#TRIGGER {pales, and seems to sag.} {abort;#T- AutoDebuff}
#TRIGGER {limbs lose their careful precision of movement.} {abort;#T- AutoDebuff}
#CLASS 0
Last edited by Ifin on Wed Aug 02, 2006 12:14 pm, edited 1 time in total.
Disoputlip
Sojourner
Posts: 956
Joined: Thu Feb 21, 2002 6:01 am
Location: Copenhagen

Postby Disoputlip » Tue Apr 18, 2006 1:28 pm

Yes, my bash trigger was not for zonage.
Ifin
Sojourner
Posts: 171
Joined: Mon Nov 14, 2005 11:43 pm

Postby Ifin » Sat Jun 24, 2006 12:20 am

From a fresh install I imported the trigs I posted and discovered that it didn't pop up on a status window, so people might have thought my stuff doesn't work.

Not to delve into it since I don't really feel like figuring it out completely, but you have you create a "new status window", name it whatever you want, and put the variable "@STW_List" there for the warrior trigs, and "@STW_Buffs" for the mage lists.

There might be some other stuff but I don't have the rest of my commands handy atm, but in case people wanted to see what my scripts really looked like.
Ifin
Sojourner
Posts: 171
Joined: Mon Nov 14, 2005 11:43 pm

Postby Ifin » Sun Jul 30, 2006 8:49 pm

This is a simple script for calling out what mob you're targetting w/spells. This is my pwb one, but I think it's helpful to be followed for stuff like silence etc., esp when zoning and no one really knows which one you just silenced.

Basically you create an alias for spells and records the mob (ie mob, 2.mob). Instead of just doing "pwb" you should use a target so it can get which #.mob you're targetting. If you're in a fight and just use "pwb", it won't specify which mob.


#ALIAS {pwb} {c 'power word blind' %1;#IF (%1 = "") {#VA pwbmob ""} {#VA pwbmob %1}}
#ALIAS {fbl} {c 'feeblem' %1;#IF (%1 = "") {#VA fblmob ""} {#VA fblmob %1}}

#TRIGGER {(*) is temporarily blinded by your word!} {
#IF (@pwbmob = "") {gsa %1 is now Temporarily Blind (5 min)} {gsa %1 (@pwbmob) is now Temporarily Blind (5 min)}
#ALARM +290 {#SAY PWB Out (%1, <@pwbmob>) in 10 Secs}
#ALARM +300 {#SAY PWB Out (%1, <@pwbmob>)}
}
#TRIGGER {(*) won't be seeing much in the near future..} {#IF (@pwbmob = "") {gsa %1 is now Permanently Blind} {gsa %1 (@pwbmob) is now Permanently Blind}}
#TRIGGER {(*) looks really dumb..} {
#IF (@fblmob = "") {gsa %1 has been Feebleminded} {gsa %1 (@fblmob) has been Feebleminded}
#VAR fblmob ""
}


Included a feeblemind example too. Also has a timer that shows up for yourself in a #SAY when pwb about to run out (when it says out, actually in next tick). Can put in a separate folder to make it neat.
Gormal
Sojourner
Posts: 3917
Joined: Tue Feb 13, 2001 6:01 am
Location: A Whale's Vagina
Contact:

Postby Gormal » Sat Apr 12, 2008 8:25 pm

Great rescue triggers, you have to change "Players Visible" to "Players online" to reflect the somewhat recent changes for it to turn itself off correctly.
Vari
Sojourner
Posts: 18
Joined: Sat Oct 04, 2003 8:05 pm

Re: Tank (Rescues)/Mage (Glance+Auto-Buff) Sets + Misc

Postby Vari » Tue Apr 15, 2008 3:41 pm

Hey Gormal,
#TRIGGER {Total Visible} is that what your talking about when you say "Players Visible" to "Players online", I can not for the life of me find Players Visible in the triggers set.
Vari
AKA Christina
Gormal
Sojourner
Posts: 3917
Joined: Tue Feb 13, 2001 6:01 am
Location: A Whale's Vagina
Contact:

Re: Tank (Rescues)/Mage (Glance+Auto-Buff) Sets + Misc

Postby Gormal » Tue Apr 15, 2008 6:08 pm

Yeah that's what I meant:P I just went off of memory since I fixed it during Tiamat and posted afterwards. Thanks.
Vari
Sojourner
Posts: 18
Joined: Sat Oct 04, 2003 8:05 pm

Re: Tank (Rescues)/Mage (Glance+Auto-Buff) Sets + Misc

Postby Vari » Tue Apr 15, 2008 8:23 pm

Gormal, was it adding members to your rescue list when you typed in who ingame?
Vari
AKA Christina
Gormal
Sojourner
Posts: 3917
Joined: Tue Feb 13, 2001 6:01 am
Location: A Whale's Vagina
Contact:

Re: Tank (Rescues)/Mage (Glance+Auto-Buff) Sets + Misc

Postby Gormal » Wed Apr 16, 2008 1:46 am

Yes, because of the change made to the wholist it wouldn't shut itself off. Now it does and its great. You also must have roomsize on for the trigger to function.

Return to “MUD Client Help”

Who is online

Users browsing this forum: No registered users and 7 guests