• You've discovered RedGuides, an EverQuest multi-boxing and scripting community 🧙‍♀️⚙️. We want you to play several EQ characters at once, come join us and say hello! 👋

  • A TLP without truebox has thawed (Very Vanilla ready)
    Frostreaver

Idea - Auto Spellgem population?!?!

Razkle

Single-handedly keeping Daybreak in business
Creator
Joined
Mar 27, 2014
RedCents
3,453¢
I noticed that if I am missing a spell and I have MiscGem=12 set in my kiss then it will memorize that spell in that gem, my question is this. Can we start adding a macro to the ini area that will mem the appropriate spells in the right gem slots and or tell us if we are missing a spell or AA from a lineup?

This would be for ALL gem slots not just #12 as above but all 12 of them!

and example would be (made up the spellnames)

Rich (BB code):
if MiscGem=1<> Flamespear then MiscGem=1=flamespear
if MiscGem=2<> Icespear then MiscGem=2=Icemespear
if MiscGem=3<> Waterspear then MiscGem=3=Waterspear
if MiscGem=4<> Rockspear then MiscGem=4=rockspear
if MiscGem=5<> Airspear then MiscGem=5=airspear
if MiscGem=6<> Lightningspear then MiscGem=6=Lightningspear

This way you can run this mac once and your toon is set and ready for the INI that kissassist needs. I know its a little work up front but it would be awesome!

If I can get the code or example of code to do this I will convert some of the ini's data to load the 100 level ones at least.
 
Trying to figure the 800 millions ways people do their spell gems is impossible. I had a rigid spell gem system in shambot and people complained about it all the time. Kiss= keep it simple stupid. Kiss runs thinking you have all the spells you need mem'd heals, dps, what ever and uses the misc gem for memming buffs and stuff as you need them. Feel free to hack Kiss to mem what and where you need.
 
Those people were just stupid then cause I am all kinds of excited to make this work! Do you have the .mac structure I can play with for a mac to "swap" my spell gems 1-12 ( I can think of ALOT of uses for this actually!)
 
Would something like this work?

Rich (BB code):
Sub Main
   /declare      i          int       outer 0
   /declare      debug      string    outer
   /declare      mspell[12] string    outer

   /varset       mspell[1] NULL
   /varset       mspell[2] NULL
   /varset       mspell[3] NULL
   /varset       mspell[4] NULL
   /varset       mspell[5] NULL
   /varset       mspell[6] NULL
   /varset       mspell[7] NULL
   /varset       mspell[8] NULL
   /varset       mspell[9] NULL
   /varset       mspell[10] NULL
   /varset       mspell[11] NULL
   /varset       mspell[12] NULL

| - Detect AA spell gems
| ################## Setup AA Extra gem slot variables 

    /if (${Me.AltAbility[Mnemonic Retention]}>=3)   /multiline ;    /declare  Gem9  int outer 1   
    /if (${Me.AltAbility[Mnemonic Retention]}>=9)   /multiline ;    /declare  Gem10 int outer 1  
    /if (${Me.AltAbility[Mnemonic Retention]}>=15)  /multiline ;    /declare  Gem11 int outer 1   
    /if (${Me.AltAbility[Mnemonic Retention]}>=21)  /multiline ;    /declare  Gem12 int outer 1 


   /call memSpell
/return
 
Sub memSpell
     /echo Memming spells. Hang on. 
     |/declare i int local 
     /for i 1 to 12   
     /if (${debug}) /echo debug: Sub memSpells ${mspell[${i}]}
        /if (${mspell[${i}].Equal[NULL]}) /goto :SkipMem
        /if ((!${Gem9} && ${i}==9) || (!${Gem10} && ${i}==10) || (!${Gem11} && ${i}==11) || (!${Gem12} && ${i}==12)) /goto :SkipMem
        /if (!${Me.Book[${mspell[${i}]}]}) {
           /echo Can't memorize ${mspell[${i}]} in >> Gem ${i} << Spelling error or not in my spellbook.
           /echo Setting spell value set to NULL
           /varset mspell[${i}] NULL
           /goto :SkipMem
        }
        /if (${Me.Gem[${i}].Name.NotEqual[${mspell[${i}]}]} || ${Me.Gem[${i}].ID}<1) {
           /if (!${Me.Sitting}) /sit 
           /echo Memorizing Spell ${mspell[${i}]} in Gem ${i}
           /memspell ${i} "${mspell[${i}]}"
           /delay 15s ${Me.Gem[${i}].Name.Equal[${mspell[${i}]}]}
        }
   :SkipMem
     /next i
     /if (${Window[SpellBookWnd].Open}) /windowstate SpellBookWnd close 
     /echo Spells are memmed. 
     /if (${Me.Sitting}) /stand
/return

I haven't got to test this but, all you should have to do is change the mspell[??] NULL to mspell[??] Spell Name. I think that should work.

The code is not mine the memSpell routine was stolen from shambot.mac

Ctaylor
 
EQ has a in game spell/song list you can make a Kiss spell list for all your toons. then a you can add a line to your kissassist hotbutton like:

/pause 30, /memspellset kiss
/mac kissassist <toonnamehere> 95
 
And; say, I know a few folks who are using the lack of this functionality as a feature. That is to say: One may change their spell set, without changing their ini, to alter the character's behavior on-the-fly.
 
I think I saw in today's patch notes that the number of saved spell sets will increase to 30. This is good news.
 
Could add in a simple toggle flag for spell gems, that those who want to use it set it to 1 those that don't 0, default it to zero and no one 'should' complain.. though someone always seems to complain.
 
That's a good idea. Have a standard Spellset name Like maybe KissAss or something along those lines then put a flag in the General section to LoadSpeLLSet Then those who want to use it can save the spellset. I know I would use it.
 
I am not going to add spell gems memming to Kiss. I will add the spellset thing though UseSpellset=1|Kiss

UseSpellset=0/1|Kiss - On/Off|Spell Set Name
 
That's what my last comment was referring too. Someway to have Kissassist load a SAVED SpellSet. Either have a Static spellset name or let it be dynamic and let the user choose. I know what I will call mine ;-).
 
That could be nifty. Any chance of a /command or chat event to switch spell sets via event?
 
Wouldn't work because you would to load a different ini and I am not doing that either lol
 
The different spell sets would be nice, as I change out my spell sets for my bard... either DPS (for my wizard folks) or Melee (for my tanks folks). I don't change out my spells much for my SK or wizard though.
 
AWESOME! elegant, perfect!

I am not going to add spell gems memming to Kiss. I will add the spellset thing though UseSpellset=1|Kiss

UseSpellset=0/1|Kiss - On/Off|Spell Set Name
 
I coded my KA to mem the maximum number of spells it finds setup within the ini file. What I coded is, read ini, list spells setup, find what spells on list are memorized allready and memorize the other spells in gems which are not occupied by spells setup for KA. I also included a way to tell KA not to touch certain spellgems. Let me check my files and I ll post the code to be added.

Crystane.

- - - Updated - - -

Okay found the code, this will not touch spell gems which are setup on any bardtwists or which you setup within your ini, e.g. "MKSnotouchGems=10 11 12" wont mem spells into 10, 11 or 12

Enjoy Crystane.

Rich (BB code):
|---Add at the end of General

	/call LoadIni General MemKissHelp			string		"Usage: "MemKissSpellsOn=1" mems max # of spells from ini if not memorized"
	
	/call LoadIni General MemKissSpellsOn		int			1
	
	/call LoadIni General MKSnotouchHelp		string		"Usage: "MKSnotouchGems=10 11 12" | =NULL if all avail ;tells MemKissSpells to not touch certain Spells in gem # e.g. 10 11 and 12"

	/call LoadIni General MKSnotouchGems		string		NULL

|---Add just before Mainloop

	/call MemKissSpells

|---Add these 2 subs at the end of macro
	
|-----------------------------------------------------------------------------
| SUB: MemKissSpells to get needed Spells loaded
| ----------------------------------------------------------------------------
	Sub MemKissSpells
	/if (${Debug}) /echo  MemKissSpells: Enter Me.Class - ${Me.Class} MiscGem set to - ${Me.Gem[${MiscGem}]}
	/echo Memming max # of spells as setup in ini, NoTouchGems and Bardtwistgems will remain
	/if (!${MemKissSpellsOn}) /return
	|Wanted to safe old spellset but it does not work anymore /safespellset NormalSet
	|Getting rid of the Spell in MiscGem until better logic found to handle it
	/if (${Me.Gem[${MiscGem}].ID}) {
		/varcalc MiscGem ${MiscGem}-1
		/delay 2
		/nomodkey /notify CastSpellWnd CSPW_Spell${MiscGem} rightmouseup
		/delay 10 ${Me.Gem[${MiscGem}].ID}<1
		/varcalc MiscGem ${MiscGem}+1
	}
	/declare i		int		local
    /declare j		int		local
    /declare k		int		local
    /declare l		int		local
    /declare m		int		local

	|Checking for Slots avail
	/declare AvSlots int local 8
	/if (${Me.AltAbility[Mnemonic Retention]}>=21) {
		/varset AvSlots 12
	} else /if (${Me.AltAbility[Mnemonic Retention]}>9) {
		/varset AvSlots 11
	} else /if (${Me.AltAbility[Mnemonic Retention]}>3) {
		/varset AvSlots 10
	} else /if (${Me.AltAbility[Mnemonic Retention]}>0) /varset AvSlots 9

	|Sorting Gems not to touch, Bardtwists included
	/declare Notouchgems[${AvSlots}] string local AVAILABLE
	/varset Notouchgems[${MiscGem}] ${MiscGem}
	/declare NTGtempstring string local NULL
	/varset NTGtempstring ${MKSnotouchGems} ${TwistWhat} ${MeleeTwistWhat}
	/declare TempArg string local NULL
	|/echo NTGtempstring ${NTGtempstring}
	/varset i 1
	/for j 1 to 40
		/varset TempArg ${NTGtempstring.Arg[${j}, ]}
		|/echo TempArg ${j} ${TempArg}
		/if (${TempArg.Equal[NULL]}) {
			/varcalc i ${i}+1
			/if (${i}>=4) /goto :notouchset
			/goto :skipnull1
		}
		/for k 1 to ${Notouchgems.Size}
			/if (${NTGtempstring.Arg[${j}, ].Equal[${k}]}) /varset Notouchgems[${k}] ${TempArg}
			|/echo ${NTGtempstring.Arg[${j}, ].Equal[${k}]} k ${k} Equal NTGtempstring.Arg[${j}, ] ${NTGtempstring.Arg[${j}, ]}
		/next k
		:skipnull1
	/next j
	:notouchset

	|Gathering spells possibly to be memmed
	/declare ArrayNames[7] string local
	/varset ArrayNames[1] Aggro
	/varset ArrayNames[2] Heals
	/varset ArrayNames[3] DPS
	/varset ArrayNames[4] AE
	/varset ArrayNames[5] Cures
	/varset ArrayNames[6] Buffs
	/varset ArrayNames[7] Burn
	/declare Spellnmbrs int local 5
	/for i 1 to ${ArrayNames.Size}
		/varcalc Spellnmbrs ${Spellnmbrs}+${${ArrayNames[${i}]}.Size}
		/if (${Debug}) {
			/echo ${Spellnmbrs}+${${ArrayNames[${i}]}.Size}
			/delay 5
		}
	/next i
	/declare SpellsToConsider[${Spellnmbrs}] string local NULL
	/declare CleanSpellName string local NULL
	/varset i 1
	/if (${Bool[${MezSpell}]}) {
		/varset CleanSpellName ${MezSpell.Arg[1,|]}
		/if (${Me.AltAbility[${CleanSpellName}]}<1 && !${Me.AltAbilityReady[${CleanSpellName}]} && ${Me.Book[${CleanSpellName}]}) {
			/if (${Me.Gem[${CleanSpellName}]}) {
				/varset Notouchgems[${Me.Gem[${CleanSpellName}]}] ${Me.Gem[${CleanSpellName}]}
			} else {
				/varset SpellsToConsider[${i}] ${CleanSpellName}
				/varcalc i ${i}+1
			}
		}
	}
	/if (${Bool[${MezAESpell}]}) {
		/varset CleanSpellName ${MezAESpell.Arg[1,|]}
		/if (${Me.AltAbility[${CleanSpellName}]}<1 && !${Me.AltAbilityReady[${CleanSpellName}]} && ${Me.Book[${CleanSpellName}]}) {
			/if (${Me.Gem[${CleanSpellName}]}) {
				/varset Notouchgems[${Me.Gem[${CleanSpellName}]}] ${Me.Gem[${CleanSpellName}]}
			} else {
				/varset SpellsToConsider[${i}] ${CleanSpellName}
				/varcalc i ${i}+1
			}
		}
	}
	/if (${Bool[${AutoRezWith}]}) {
		/varset CleanSpellName ${AutoRezWith.Arg[1,|]}
		/if (${Me.AltAbility[${CleanSpellName}]}<1 && !${Me.AltAbilityReady[${CleanSpellName}]} && ${Me.Book[${CleanSpellName}]}) {
			/if (${Me.Gem[${CleanSpellName}]}) {
				/varset Notouchgems[${Me.Gem[${CleanSpellName}]}] ${Me.Gem[${CleanSpellName}]}
			} else {
				/varset SpellsToConsider[${i}] ${CleanSpellName}
				/varcalc i ${i}+1
			}
		}
	}
	/if (${Bool[${PullWith}]}) {
		/varset CleanSpellName ${PullWith.Arg[1,|]}
		/if (${Me.AltAbility[${CleanSpellName}]}<1 && !${Me.AltAbilityReady[${CleanSpellName}]} && ${Me.Book[${CleanSpellName}]}) {
			/if (${Me.Gem[${CleanSpellName}]}) {
				/varset Notouchgems[${Me.Gem[${CleanSpellName}]}] ${Me.Gem[${CleanSpellName}]}
			} else {
				/varset SpellsToConsider[${i}] ${CleanSpellName}
				/varcalc i ${i}+1
			}
		}
	}
	/if (${Bool[${GoMSpell}]}) {
		/varset CleanSpellName ${GoMSpell.Arg[1,|]}
		/if (${Me.AltAbility[${CleanSpellName}]}<1 && !${Me.AltAbilityReady[${CleanSpellName}]} && ${Me.Book[${CleanSpellName}]}) {
			/if (${Me.Gem[${CleanSpellName}]}) {
				/varset Notouchgems[${Me.Gem[${CleanSpellName}]}] ${Me.Gem[${CleanSpellName}]}
			} else {
				/varset SpellsToConsider[${i}] ${CleanSpellName}
				/varcalc i ${i}+1
			}
		}
	}
	/for j 1 to ${ArrayNames.Size}
		/for k 1 to ${${ArrayNames[${j}]}.Size}
			/varset CleanSpellName ${ArrayNames[${j}]}[${k}]
			/if (${Debug}) {
				/echo ${ArrayNames[${j}]}  k ${k} ${${ArrayNames[${j}]}[${k}]} j ${j}
				/delay 2
			}
			/if (${Bool[${${ArrayNames[${j}]}[${k}]}]}) {
				/varset CleanSpellName ${${ArrayNames[${j}]}[${k}]}
				/varset CleanSpellName ${CleanSpellName.Arg[1,|]}
				/varset TempArg ${CleanSpellName.Arg[2,|]}
				/if (${Debug}) /echo ${CleanSpellName} j ${j} k ${k}
				/if (${Me.AltAbility[${CleanSpellName}]}<1 && !${Me.AltAbilityReady[${CleanSpellName}]} && ${Me.Book[${CleanSpellName}]}) {
					/if (${Me.Gem[${CleanSpellName}]}) {
						/varset Notouchgems[${Me.Gem[${CleanSpellName}]}] ${Me.Gem[${CleanSpellName}]}
					} else {
						/for l 1 to ${Spellnmbrs}
							/if (!${Bool[${SpellsToConsider[${l}]}]}) /goto :skipnull
							/if (${SpellsToConsider[${l}].Equal[${CleanSpellName}]}) /goto :skipdbl
						/next l
						:skipnull
						/varset SpellsToConsider[${i}] ${CleanSpellName}
						/varcalc i ${i}+1
						:skipdbl
					}
				}
			}
		/next k
	/next j
	
	|Sorting the spells considered for memorization in order highest to lowest RecastTime, hopefully spells with fast recast will be covered by MiscGem later
	|Also memming spells right away in order
	/varset i 1
	/declare SpellsToMem[${AvSlots}] string local NULL
	/for j 1 to ${SpellsToConsider.Size}
		/if (${Bool[${SpellsToConsider[${j}]}]}) /varcalc i ${i}+1
	/next j
	/varset m 10000
	/varset l 0
	/for k 1 to ${AvSlots}
		/for j 1 to ${i}
			|/echo ${m}>${Spell[${SpellsToConsider[${j}]}].RecastTime}>${l}
			/if (${m}>${Spell[${SpellsToConsider[${j}]}].RecastTime}>${l}) {
				/varset SpellsToMem[${k}] ${SpellsToConsider[${j}]}
				/varset l ${Spell[${SpellsToMem[${k}]}].RecastTime}
			}
		/next j
		/if (${Me.Book[${SpellsToMem[${k}]}]}) /varset m ${Spell[${SpellsToMem[${k}]}].RecastTime}
		/varset l 0
		|/if (${Me.Book[${SpellsToMem[${k}]}]}) /goto :spellmemfinished
		|/echo i ${i} j ${j} AvSlots ${AvSlots} SpellsToMem[${k}] ${SpellsToMem[${k}]}
		/for j 1 to ${AvSlots}
			|/if (${Notouchgems[${j}].Equal[AVAILABLE]}) /echo  Notouchgems[${j}].Equal[AVAILABLE] ${Notouchgems[${j}].Equal[AVAILABLE]} &&  Me.Book[${SpellsToMem[${k}]}] ${Me.Book[${SpellsToMem[${k}]}]}
			/if (${Notouchgems[${j}].Equal[AVAILABLE]} && ${Me.Book[${SpellsToMem[${k}]}]}) {
				|/echo memming j ${j} spell "${SpellsToMem[${k}]}"
				/call MemSlot ${j} "${SpellsToMem[${k}]}"
				|/echo Notouchgems[${j}] ${Notouchgems[${j}]} Me.Gem[${SpellsToMem[${k}]}] ${Me.Gem[${SpellsToMem[${k}]}]}
				/if (${Bool[${Me.Gem[${SpellsToMem[${k}]}]}]}) {
					/varset Notouchgems[${j}] ${Me.Gem[${SpellsToMem[${k}]}]}
					/goto :spellmemmed
				}
			}
		/next j
		:spellmemmed
	/next k
	:spellmemfinished
	/if (${Debug}) {
		/echo MemKissSpells: Leave
		|/for i 1 to ${AvSlots}
		|	/echo Notouchgems[${i}] ${Notouchgems[${i}]}
		|	/if (${Bool[${SpellsToConsider[${i}]}]}) /echo SpellsToConsider[${i}] ${SpellsToConsider[${i}]}
		|	/if (${Bool[${SpellsToMem[${i}]}]}) /echo SpellsToMem[${i}] ${SpellsToMem[${i}]}
		|	/delay 1
		|/next i
	}
	/return
	
	Sub MemSlot(int MemSlot,string ToMemSpell)
	/if (${Debug}) /echo MemSlot: Enter, Trying to mem spell ${ToMemSpell}.
	/if (${Bool[${Me.Gem[${ToMemSpell}]}]}) {
		/nomodkey /notify CastSpellWnd CSPW_Spell${Math.Calc[${MemSlot}-1]} rightmouseup
		/delay 10 !${Bool[${Me.Gem[${MemSlot}]}]}
	}
	/if (${Bool[${Me.Standing}]} && !${Me.Mount.ID}) {
		/sit
		/delay 15 !${Me.Standing}
	}
	:memretry
	/delay 5
	/if (${Bool[${Plugin[mq2instantmem]}]}) {
		/memspell ${MemSlot} "${ToMemSpell}"
	} else {
		/memorize "${ToMemSpell}" ${MemSlot}
	}
	/delay 30 ${Me.Gem[${MemSlot}].Name.Find[${ToMemSpell}]}
	/if (${Me.Gem[${MemSlot}].Name.Find[${ToMemSpell}]}<1) /if (!${Bool[${twice}]}) {
		/delay 15
		/declare twice bool local TRUE
		/goto :memretry
	}
	/if (${Debug}) /echo MemSlot: Leave
	/return

PS: Maskoi I need to have a word with you.
 
Idea - Auto Spellgem population?!?!

Users who are viewing this thread

Back
Top
Cart