• 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 --->
Resource icon

Macro - Summon SNACKS (1 Viewer) 1.32

Download
Joined
Oct 4, 2019
RedCents
7,503¢
drwhomphd submitted a new resource:

Summon SNACKS - Snaccccckkkkksssss

This macro is a very simple macro that you would run on a Magician. If I expanded the logic you could certainly run it on a Cleric or any other character that can summon food and drink. The magician will summon food and drink for each member of the group and hand it to them.

Limitation: Does not take into account fizzles. Assumes your group is spread out enough so that trades can work.

View attachment 18732

Read more about this resource...
 
drwhomphd updated Summon SNACKS with a new update entry:

Version 1.1 - Minor Fixes/Enahncements

Unloads mq2cast if it was only loaded by Summon Snacks
Makes sure the remote character accepts the trade request via a Dannet or EQBC message depending on which mq2 plugin is loaded
Added preliminary fizzle checking that should re-cast the summon spell if it fizzles (unchecked)


To Do:
There's still an occasional bug that needs to be squashed for the item to be traded isn't found in time and a -1 item not found error is displayed.

Read the rest of this update entry...
 
In anticipation of the new TLP and wanting to summon food and drink for a group with a cleric - I have revised this macro to work with Level 3 and Level 8 Cleric spells which summon a single item, this will now repeat the spell to summon any multiple you set, 5, 10, 20 etc. Summons food and hands it out, then summons water.

As before, it doesn't handle fizzles and wont handle out of mana either. With the fizzles, if you have it set to summon 5 of each and it gets at least one cast off, you wont have a problem. If fizzles are causing a problem for you I'd suggest changing in the code below -recast|${HowMany} to -maxtries|20 - That will keep casting the spell 20 times till it succeeds once but you will now only be handing out one of each food and drink. Enjoy

EDIT: Code updated below, now handles out of mana because a level 8 cleric can't summon enough food and drink for a 6-man group in one run of the macro. I can't get it to handle fizzles and I've already spent more time on this that it's worth, I recommend setting it to summon at least 3, if it can get at least one spell off the fizzles shouldn't cause a problem, if it does start looping the itemnotify error after a fizzle you can just manually cast the spell and the macro will continue cycling through each group member. Sorry the macro is a bit of a frankenstein now with debug echo's but this version is working better now and tested on a level 8 cleric. Didn't want to leave the previous version which was broken and waste peoples time. After all this I am now thinking if you're in a town it might be better to just get to a merchant and do the following LOL /autoloot buy "Iron Ration" 20

Anyway, will bw useful if you're out grinding, hope it's of some use.



INI:
| Revision of the SummonSnacks Macro - will summon food/drink for each group member,
| and hand out that food and drink to the group.
| Requirements: A character that can summon food, mq2cast
| With suggestions from CWTN, Sic, MaxD, wired420, exspes, and the RG Discord.
| Set spells used depending on level:
| Summon Food
| Summon Drink
| Set HowMany to give to each character

|To Do:
| Remove Bool and Ifs from delay conditions -- !${TLO.Here} will work
| Make sure toons are in the zone: /if (!${Spawn[id ${Group.Member[${i}].ID}]}) /continue
| Make sure folks aren't dead: 
| Doesn't handle fizzles
| Doesn't handle out of mana

| Changelog:
| 05/26/2020 
|   * Code changed to allow for low level spells which need to be repeated, does bread first then water
|   * New int variable HowMany sets number of each food and drink to give to each group member
|   * New string variable GemSlot for slot to mem spell in


| 12/15/2019:
|   * Added unloading of mq2cast and mq2yes if it was loaded
|   * Added mq2yes functionality to make sure group member takes the stinking food -- works with dannet or eqbc
|   * Added preliminary fizzle checking

Sub Main

    /declare FoodSpell string outer Summon Food
    /declare DrinkSpell string outer Summon Drink
    /declare HowMany int outer 3
    /declare GemSlot string outer gem8
    /declare LoadedMQ2Cast bool local FALSE
    /declare LoadedMQ2Yes bool local FALSE
    /declare TellCMD string local
    

    | Load mq2cast if it's not loaded
    /if (!${Bool[${Plugin[mq2cast]}]}) {
        /echo "Loading MQ2Cast"
        /plugin mq2cast noauto
        /varset LoadedMQ2Cast TRUE
    } 

    | Load mq2yes if it's not loaded
    | /if (!${Bool[${Plugin[mq2yes]}]}) {
    |    /echo "Loading MQYes"
    |    /plugin mq2yes noauto
    |    /varset LoadedMQYes TRUE
    | } 

    /echo \atStarting Summoning
    /echo \atSaving Current Spells
    /sss summonsnacks_backup

    | Get Size of Group as we'll need to summon food and drink for each
    | ${Group.Member[0]} will always be you
    
    |DO BREAD FIRST

    /declare i int local 1
    /for i 1 to ${Group.Members}
        
        /target id ${Group.Member[${i}].ID}

        /if (${Bool[${DanNet.Name}]}) {
            /varset TellCMD /noparse /dt ${Group.Member[${i}].Name} /nomodkey /notify Tradewnd TRDW_Trade_Button leftmouseup
            | /echo Set TellCMD to ${TellCMD}
        } else {
            /varset TellCMD /noparse /bct ${Group.Member[${i}].Name} /nomodkey /notify Tradewnd TRDW_Trade_Button leftmouseup
            | /echo Set TellCMD to ${TellCMD}
        }

        /delay 1s ${Cast.Ready}
        /echo Summoning Food for ${Group.Member[${i}]}
        /call CastAndDelay 1

        | 2 seconds is a magic additional delay for this to work
        /delay 2s
        /call AutoInvAndDelay
        
        | Navigate to my group member and delay further action until the Navigation stops
        /echo Too far away from ${Target.Name}, moving closer
        /nav id ${Group.Member[${i}].ID} |log=off dist=5
        /delay 10s ${Navigation.Active}
        /delay 1s ${Cast.Ready}

        | Pickup the bread, wait until the bread is picked up, click on the target to trade, wait until the bread is dropped in the trade window,
        | and finally click yes on the trade. Do the same for the water
        /echo Handing ${Target.Name} food
        /while (!${Cursor.ID}) {
            /itemnotify "Summoned: Black Bread" leftmouseup 
            /delay 10
        }
        /click left target
        /delay 5s !${Cursor.ID}
        /notify GiveWnd GVW_Give_Button leftmouseup
        |Delay until trade says yes
        /docommand ${TellCMD}
        /delay 5s !${Window[TradeWnd]}
             
        /delay 1s ${Cast.Ready}
        
    /next i
    |END for

 |DO DRINK NOW
    
    /for i 1 to ${Group.Members}
        
        /target id ${Group.Member[${i}].ID}

        /if (${Bool[${DanNet.Name}]}) {
            /varset TellCMD /noparse /dt ${Group.Member[${i}].Name} /nomodkey /notify Tradewnd TRDW_Trade_Button leftmouseup
            | /echo Set TellCMD to ${TellCMD}
        } else {
            /varset TellCMD /noparse /bct ${Group.Member[${i}].Name} /nomodkey /notify Tradewnd TRDW_Trade_Button leftmouseup
            | /echo Set TellCMD to ${TellCMD}
        }


        /delay 1s ${Cast.Ready}
        /echo Summoning Drink for ${Group.Member[${i}]}
        /call CastAndDelay 2

        | 2 seconds is a magic additional delay for this to work
        /delay 2s
        /call AutoInvAndDelay
        
        | Navigate to my group member and delay further action until the Navigation stops
        /echo Too far away from ${Target.Name}, moving closer
        /nav id ${Group.Member[${i}].ID} |log=off dist=5
        /delay 10s ${Navigation.Active}
        /delay 1s ${Cast.Ready}
            
        /echo Handing ${Target.Name} water
        /while (!${Cursor.ID}) {
            /itemnotify "Summoned: Globe of Water" leftmouseup
            /delay 10
        }
        /click left target
        /delay 5s !${Cursor.ID}
        /notify GiveWnd GVW_Give_Button leftmouseup
        |Delay until trade says yes
        /docommand ${TellCMD}
        /delay 5s !${Window[TradeWnd].Open}

        /delay 1s ${Cast.Ready}
        
    /next i
    |END for
    
    /delay 3s
    | Now summon for yourself
    /echo Summoning myself food.
    /call CastAndDelay 1
    | 2 seconds is a magic additional delay for this to work
    /delay 2s
    /call AutoInvAndDelay

    /echo Summoning myself water.
    /call CastAndDelay 2
    | 2 seconds is a magic additional delay for this to work
    /delay 2s
    /call AutoInvAndDelay


    | Start doing cleanup for the macro to include reloading original spells and unloading loaded plugins
    /echo \atLoading Old Spells and deleting backup list
    /ssm summonsnacks_backup
    /ssd summonsnacks_backup

    /if (${LoadedMQ2Cast}) /plugin mq2cast unload noauto
    | /if (${LoadedMQ2YEs}) /plugin mq2yes unload noauto
/return

Sub CastAndDelay(summonwhat)
/echo castanddelay sub called
/declare MyCastCounter int local 0
/declare MyManaRequired int local  0 

    :dowhile 

    /if (${Cast.Result.Equal[CAST_FIZZLE]}) {
        /echo caught a fizzle
            
    }

    /call AutoInvAndDelay
        /delay 5s ${Cast.Ready}

    |SUMMON FOOD        
    /if (${summonwhat} == 1 && ${Cast.Status.Equal[I]}) {
        /echo summon ${summonwhat}  and ${Cast.Status}
        /varset MyCastCounter 0
        /echo casting spell with ${HowMany} recasts
        /casting "${FoodSpell}"|${GemSlot} -recast|${HowMany}
        /echo delaying 1s ${Cast.Result}
        /delay 1s
        /echo continuing...

        |count the successes
        /if (${Cast.Result.Equal[CAST_SUCCESS]}) {
            /echo idle - spell succeeded to start casting, incrementing counter from ${MyCastCounter}
            /varcalc MyCastCounter ${MyCastCounter}+1
               
        }

          | If OutofMana - calculate how much mana needed, and med till you have it
        /if (${Cast.Result.Equal[CAST_OUTOFMANA]}) {
        /echo idle - out of mana
                |how much mana do I need - spell mana times how many casts I need to made            
                /varcalc MyManaRequired ${Spell[${FoodSpell}].Mana}*(${HowMany}-${MyCastCounter})
                /echo need ${MyManaRequired} mana - medding - have ${Me.CurrentMana} now
                /ECHO delaying 2s
                /delay 2s
                /echo sitting now to med
                /if (!${Me.Sitting}) /sit
                :keepmedding

                /if (${Me.CurrentMana} < ${MyManaRequired}) /goto :keepmedding
                /echo mana reached required level - casting spell with (${HowMany}-${MyCastCounter}) recasts
                /casting "${FoodSpell}"|${GemSlot} -recast|(${HowMany}-${MyCastCounter})
        | /varset Cast.Result 0        
        }
        /echo setting summonwhat to 0
        /varset summonwhat 0
    }


    |SUMMON DRINK        
    /if (${summonwhat} == 2 && ${Cast.Status.Equal[I]}) {
        /echo summon ${summonwhat}  and ${Cast.Status}
        /varset MyCastCounter 0
        /echo casting spell with ${HowMany} recasts
        /casting "${DrinkSpell}"|${GemSlot} -recast|${HowMany}
        /echo delaying 1s ${Cast.Result}
        /delay 1s
        /echo continuing...

        |count the successes
        /if (${Cast.Result.Equal[CAST_SUCCESS]}) {
            /echo idle - spell succeeded to start casting, incrementing counter from ${MyCastCounter}
            /varcalc MyCastCounter ${MyCastCounter}+1
               
        }

          | If OutofMana - calculate how much mana needed, and med till you have it
        /if (${Cast.Result.Equal[CAST_OUTOFMANA]}) {
        /echo idle - out of mana
                |how much mana do I need - spell mana times how many casts I need to made            
                /varcalc MyManaRequired ${Spell[${DrinkSpell}].Mana}*(${HowMany}-${MyCastCounter})
                /echo need ${MyManaRequired} mana - medding - have ${Me.CurrentMana} now
                /ECHO delaying 2s
                /delay 2s
                /echo sitting now to med
                /if (!${Me.Sitting}) /sit
                :keepmedding

                /if (${Me.CurrentMana} < ${MyManaRequired}) /goto :keepmedding
                /echo mana reached required level - casting spell with (${HowMany}-${MyCastCounter}) recasts
                /casting "${DrinkSpell}"|${GemSlot} -recast|(${HowMany}-${MyCastCounter})
        | /varset Cast.Result 0        
        }
        /echo setting summonwhat to 0
        /varset summonwhat 0
    }
    
    
    |count the successes
    /if (${Cast.Result.Equal[CAST_SUCCESS]} && !${Cast.Status.Equal[C]} && !${Cast.Status.Equal[M]}) {
        /echo not idle - spell succeeded to start casting and is now not in progress or memming, incrementing counter from ${MyCastCounter}
        /varcalc MyCastCounter ${MyCastCounter}+1

    }
    




    }
    |/echo delaying 2s and checking cast status, if casting or memorizing or not ready to cast - keep looping
    |/delay 2s
        /if (${Cast.Status.Equal[C]} || ${Cast.Status.Equal[M]} || !${Cast.Ready}) /goto :dowhile
    /autoinv
    
/return

Sub AutoInvAndDelay()
    /while (${Cursor.ID} && ${Me.FreeInventory}) {
        /autoinv
    }
/return
 
Last edited:
Updated my post above with revised code, now handles out of mana situation as a level 8 cleric doesn't have enough mana to reliably summon food and drink for an entire 6 man in one run of the macro. Will med when out of mana and continue.
 
Updated my post above with revised code, now handles out of mana situation as a level 8 cleric doesn't have enough mana to reliably summon food and drink for an entire 6 man in one run of the macro. Will med when out of mana and continue.

Thank you @methodx -- I'll test out and update the original when I get the chance. For whatever reason I didn't catch this when it was first posted. My apologies.
 
When I run this macro, it gets stuck on the "Quantity" window when trying to pick up the summoned food/drink. Any ideas?
 
When I run this macro, it gets stuck on the "Quantity" window when trying to pick up the summoned food/drink. Any ideas?
really need a /nomodkey /shiftkey on the /itemnotify "Summoned: Black Bread" leftmouseup to be /nomodkey /shiftkey /itemnotify "Summoned: Black Bread" leftmouseup


but there are also other things wrong with this macro - like mq2yes not being a plugin anymore
 
I've updated this macro a little for myself, I've added a check for a CWTN class plugin, and pause it before trying to give food, since that can mess with targeting.
I've added /nomodkey /shiftkey to /itemnotify and changed the handing to a party member from /click left target to /usetarget, which seems a bit more reliable.
I've added a simple check if a group member is a mercenary, so it wont try to give them snacks anymore.

I also duplicated a delay that was in the food section to the water section, since that missing seemed to cause some hiccups.

This seems to work pretty well for my 3 box shaman.
 

Attachments

  • SummonSnacks.mac
    8.6 KB · Views: 0
Macro - Summon SNACKS

Users who are viewing this thread

Back
Top