• You've discovered RedGuides 📕 an EverQuest multi-boxing community 🛡️🧙🗡️. We want you to play several EQ characters at once, come join us and say hello! 👋
  • IS THIS SITE UGLY? Change the look. To dismiss this notice, click the X --->

Question - macro creation help (1 Viewer)

Joined
Mar 12, 2019
RedCents
2,291¢
OK, so here I go... lol
So I was looking for a shrink mac but really couldn't find one that did what I wanted to do for things really larger then a single group. I've been using MQ2/RG for some time and figured what the hell lets see if I can do something that meets what I want to do. jesus - as a person who knows nothing about coding these thing, the start is rough. Hoping I can get a bit of guidance here. So let me set the stage on what I am thinking. By no means is anything set in stone. Again this is just how I feel the outcome would look like. Doesn't mean it has to be.

I'm thinking the macro flow would look something like this:
Copy a list of all the people you want your shrink'r to shrink.ini file
Shrink.ini
INI:
[charlist]
char1=1
char2=2
char3=3

now into the macro and this is where i am really getting hung up.
I can call the name if the charlist by doing the

INI:
    /echo ${Ini[shrink.ini,charlist]}

and it will output char1|char2|char3||

So I think I am on the right track there but when I start to put this into a if statement, though it errors out on me. I think where I need to go with this is to say, if charlist, char1 then do something and loop that for each line in the ini

so I fumbled through a few things but I think I might be close with the below...

INI:
/if (${Ini[shrink.ini,charlist]}) {
        /echo Casting shrink on ${Ini[shrink.ini,charlist]}
        /delay 10s
        /casting "Shrink" gem1

    }

I also would need to put this in a loop to cycle through the list but one thing at a time I think.
INI:
/declare shrinkee string outer $Ini[shrink.ini,charlist]}
/for shrinkee 0 to 3
/if (${Ini[shrink.ini,charlist]}) {
        /target ${Ini[shrink.ini,charlist]}
        /delay 2s
        /invite
        /echo Casting shrink on ${Ini[shrink.ini,charlist]}
        /delay 2s
        /casting "Shrink" gem1\
        /delay 2s
       /disband
/next shrinkee

Its a mess I know. but I have never done this before so please go easy.. lol again any help is very much appreciated.
 
Last edited by a moderator:
thanks, what I am trying to overcome is being group dependent. my team is 54 stong and I would like a mac that just runs through everyone and shrinks them. So something that is built around a group isn't gonna work or at least is missing a bunch of login I don't yet know about. Which is why I thought it might be possible to grab a list of names from and ini file then loop that through the macro.

idk, I'm definitely open to other suggesting. Just trying to make this as hands off as possible so that I don't have to spend 30min shrinking everyone.
 
Go check out everything labeled "OOG" in MuleAssist. It looks for everything within a certain radius, everyone in Raid, or everyone in a fellowship and then applies the spell.

To address specifics:
/if (${Ini[shrink.ini,charlist]}) { - This will look for a file named shrink.ini, and then will list everything under the header Charlist. However, it returns a string so you can't use it this way in an /if. You need to convert it to a bool or and int. You can append a .Length at the end to check and see if it's populated.

You should be able to /echo ${Ini[shrink.ini,charlist]} and see what it returns. Use this knowledge to determine how you want to interact with your list. However, in the line: /if (${Ini[shrink.ini,charlist]}) - This is going to return everything under the charlist section, so it's not looking line by line, it's getting everything under that section header. Again, /echo that line above to see what the macro is seeing.

You should always /tar id to prevent targeting pets/mounts.

It's gonna take a looooong time to shrink everyone with one toon lol. Make sure you put a delay to see if the person is in group or not.

Trial and error and you'll get there!
 
You have your character list (which is a string) so you can now use the string types on it.

First, you can count how many individual characters by using a .Count on the ini character list you have.

Which means you can use the .Arg to use a for loop to iterate through the list 1 to the .Count
 
A lot clicky shrink items are targetable

So you may be better off just making a group macro that is ran on one person per group. May save a lot of time
 
Correct, you can't shrink out of a group. Also I'm trying to stay old school and creep up through the expansion. I'm just doing classic and kunark content atm and want to try and stay away from anything outside that.

@Rooster yah I don't mind the time it would take. 10 or so extra min is cool in terms of the effort. And on top of this, I'm learning some things so its fun even if it is sort of out there flapping lol....
 
Couple of things.

${Ini[FileName,Section]} will give you a list of "Keys" but will seperate them with | with a trailing | which adds to what you'll see.

So you're output would look like

INI:
char1|char2|char3||

Which means you'd want something like

INI:
/declare Count int local $Ini[shrink.ini,charlist].Count[|]}
/varcalc Count ${count}-1

This will output a count for the number of sections you have. So you could dynamically increase that amount within reason without having to hard code a value. This output however is limited to 2044 characters, which means making the name of the "key" shorter is better.

Then you'd need the "Keys" for that section.

INI:
/declare shrinkee string local ""
/declare i int local 0
/for i 1 to ${Count}
    /varset shrinkee ${Ini[shrink.ini,charlist,char${Count}]}
    /if (${Spawn[pc ${shrinkee}].ID}) {
        /echo Casting shrink on ${shrinkee}
        /casting Shrink targetid|${Spawn[pc ${shrinkee}].ID}
        /delay 2s ${Me.Casting.ID}
        /delay 15s !${Me.Casting.ID}
    } else {
        /echo I couldn't find ${shrinkee}
    }
    /delay 1
/next i
Here is an example. This isn't wholly based on your logic for sure.

So we predeclare an empty string and call it "shrinkee", but inside our loop we will assign it a value with /varset shrinkee and get the entry from the INI for "char#" where shrink.ini is the INI file, charlist is the section, and char${Count} is the "key", which assigns the "value" of the "key" to shrinkee

Then we check the things we need to check as you do about inviting them.

When you invite the character, you need to wait until they are in your group.

INI:
/invite
/delay 10s ${Group.Member[${shrinkee}].ID}

I suppose if you have the autoaccept stuff setup then you won't need to wait in theory. I think the major part of what you're missing here is accessing the information from the INI. Which, hopefully I've explained in a way that you can move forward with your project. If now, follow up questions are welcome.
 
ok this is what I came up with and it seems to do the job. Would love to get any input on things I may have done wrong or could do better. I scalped a good bit of code from the "ShrinkEm Macro" which helped me get pets included into the macro.

INI:
Sub Main

| - Check Class
     /if (${Select[${Me.Class.Name},Warrior, Bard, Beastlord, Berserker, Cleric, Druid, Enchanter, Magician, Monk, Necromancer, Paladin, Ranger, Rogue, Shadow Knight, Wizard]}>=1) {
        /echo You are not a Shaman, ending macro.
        /end
    }
  
/declare Count int outer ${Ini[shrinkall.ini,SG1].Count[|]}
/varcalc Count ${Count}-1
|Outputs the number of characters in your INI file
/echo ${Count} Characters to Shrink...

| Shrink Pets? 1 = Yes 0 = No  
/declare ShrinkPets int outer 1

/call DoMemSpell

/return

Sub DoMemSpell
        /echo  I am ${Me.Name} Memeing Shrink Spell in Gem 1
        /memspell 1 Shrink
        /delay 4s
      
/call DoShrinkself

/return

Sub DoShrinkself
                /tar id ${Me.ID}
                /delay 2s
                /casting Shrink
                /delay 5s          
                /if (${Me.Pet.ID} && ${ShrinkPets} >0) {
                /echo Shrinking ${Me.Name}'s Pet ${Me.Pet.CleanName}
                /target ID ${Me.Pet.ID}
                /casting Shrink
                /delay 6s
                } else {
                /echo I have no pets, moving on to everyone else
                }

/call DoShrink

/return

Sub DoShrink

/declare shrinkee string local ""
/declare i int local 0
/for i 1 to ${Count}
    /varset shrinkee ${Ini[shrinkall.ini,SG1,char${i}]}
    /if (${Spawn[pc ${shrinkee}].ID}) {
        /target ID ${Spawn[pc ${shrinkee}].ID}
        /delay 1s
        /invite
        /delay 4s
        /echo Casting shrink on ${shrinkee}
        /casting Shrink
        /delay 6s
                /if (${Spawn[pc ${shrinkee}].Pet.ID} && ${ShrinkPets} >0) {
                /echo Shrinking ${Spawn[pc ${shrinkee}].Name}'s Pet ${Spawn[pc ${shrinkee}].Pet.CleanName}
                /target ID ${Spawn[pc ${shrinkee}].Pet.ID}
                /casting Shrink
                /delay 6s
                }
        /disband
    } else {
        /echo I couldn't find ${shrinkee}
    }
    /delay 1
/next i
/echo No more dudes to Shrink. Ending

/return

INI File ***
INI:
[SG1]
char1=warriorname
char2=necroname
char3=clericname
char4=driudname
 
Just starting to dip my foot back into this stuff, but wouldn't this work for Ln 4?


| - Check Class
/if !(${Select[${Me.Class.Name},Shaman]}>=1)
/echo You are not a Shaman, ending macro.
/end

My syntax might be off, but "bang" from what I am reading changes true to false.
 
Last edited:
(!${Select[${Me.Class.ShortName},SHM]) or (!${Select[${Me.Class.Name},Shaman]) should do the same as saying if not a shaman

losing the " ! " will say if it is a shaman
(${Select[${Me.Class.ShortName},SHM]) or (${Select[${Me.Class.Name},Shaman])
 
Question - macro creation help

Users who are viewing this thread

Back
Top