• 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

Question - New to KissAssist - Some questions and observations

WhoDunIt

New member
Joined
Mar 4, 2018
RedCents
Hey guys,

I have just started using KissAssist a few days ago (after a 15 year MacroQuest hiatus!) and I have a few questions/observations/issues:


1) If any character goes into it's 'medding phase' i.e. you see 'Medding until Mana 100%' in the log - there seems to be no active logic which will pull the character out of this 'medding phase' until the mana actually reaches 100%. For example, my cleric won't heal, nor will the chanter do his mezzing duties.

Looking at the code, this looks like it's actually intended behaviour (which I have a hard time believing/understanding!). Lines 3051->3078 looks to be the part the logic is stuck in:

Rich (BB code):
:wait_for_resume
                    /doevents
                    /if (${ReturnToCamp} && ${Math.Distance[${CampYLoc},${CampXLoc}]} > 15) {
                        /call DoWeMove 0 dowemed
                    }
                    /if (!${Me.Mount.ID} && ${Me.Standing}) /sit                    
                    /if (${Debug}) /echo \atDEBUG ${MedStat} ${MedStat1} ${MedStat2} \agLine#: ${Macro.CurLine}
                    |/delay 10
                    |/call CheckCasting 50
                    /delay 10
                    /if (!${MedCombat}) {
                        /call WaitSubs
                        /if (${AggroTargetID}) {
                            /call CheckForCombat 0 DoWeMed
                            /if (${Med2On}) /varset MedStat ${MedStat1}
                            /varset Medding 0
                            /if (${IAmABard}) {
                                /while (${Me.BardSongPlaying}) {
                                    /if (${Twist}) /squelch /twist off
                                    /stopsong
                                    /delay 10
                                }
                            }
                            /return
                        }
                    }
                /if (${MedForceOn} && (!${Group.MainAssist.ID} || !${Group.MainAssist.Sitting})) /varset MedForceOn 0
                /if (${Me.Pct${MedStat}}<100 || ${MedForceOn}) /goto :wait_for_resume

It looks like if you have MedCombat=1, then the character just gets stuck medding and completely ignores all their other duties. Maybe i'm not fully understanding the purpose of the MedCombat=1 flag. If someone could explain it I'd appreciate it.


2) It appears to me that if my Enchanter is mezzing mobs, he will not med in between the spell casts. Ideally I want my guys with their butts on the floor at every sensible moment (Maybe the importance of this will reduce when I get high enough for mount medding?)

3) Relates to point (1), but when my Mage is in the 'medding back to 100%' phase, he wont automatically send the pet at the assist target. I have to do it manually.

I am a developer by profession so I will be doing my best to delve into the code and figure out the issues myself - but if anyone can share their knowledge it'd be much appreciated.

Happy to post the ini's if it'll help - but I think the only thing relevant to my issues above is that I have:
MedStart=95
MedCombat=1

Cheers!
 
medcombat=1
means they med through combat ignoring what is going on till they full on mana again.
its not a good setting for say chanters and clerics to use.

set there medstart=95
and medcombat=0

and they will med between pulls.
but be ready in combat if needed.

i too would prefer medcombat=1 meant they sat down after a few seconds in combat to med, since i play on progression.
but was not out of combat till they was full mana.
 
Hi Kaen,

Thanks for that info. So to expand a bit more on MedCombat...

So if I set MedCombat=0 (on my Ench/Cleric), does this mean that these character will *never* med during combat? They'll just stand up like dummies the whole time? When im playing I want to just manually play the MA and chain pull mobs myself - this would mean these characters would never med!

I have a really hard time believing that such a mature and full featured set of code would behave in this way... I'm convinced I must be missing something.
 
nope, thats how it works

i added a timer to mine, that if 0 i will sit and med, and is reset in the casting sub

so anytime my guys stand up to cast, the timer will start, and count down to 0, and when it reaches 0 they will sit unless they doign oither things.
 
Amazing! I would of thought the capability to sit down after casting a spell (in combat) would have been right at the top of the feature list when the developers were creating version 1.0. The code handles some flat our crazy edge cases (clearly 1000's of man hours have gone into the development), yet it misses this most basic feature? My mind is absolutely blown. My pet peeve in EQ was watching people standing around when they could be medding in group. Now my bots are doing it too! Argh, get your butts to the floor people!

Again thank you for your information, and for confirming you have 'fixed' this locally. If you are able to share your implementation (or slightly more detailed pseudo-code...I havent done much MQ2 development in years!) - I would greatly appreciate it.
 
at the beginning with the other declares, i set up my timer
Rich (BB code):
/declare tickyboi				timer		outer		6s

then in the combat sub:
Rich (BB code):
/if (${Me.Moving}) /varset tickyboi ${tickyboi.OriginalValue}
/if (!${MeleeOn} && ${tickyboi}==0 && ${Me.Standing} && ${Me.Class.PureCaster} && !${Me.Mount.ID} && !${Me.Casting.ID} && ${Me.TargetOfTarget.ID} != ${Me.ID}) {
	/sit
}
just before this line:
Rich (BB code):
/if (${Spawn[${MyTargetID}].Type.NotEqual[Corpse]}) {

and then the last line in sub castwhat.
Rich (BB code):
/varset tickyboi ${tickyboi.OriginalValue}


its not 100% fool proof but it does work as i want it.
 
Hey Kaen,

Thanks for the code. I'll give this a try later. From a quick look, your code fix wont cause my Enchanter to sit down while he is 'doing mez stuff' (This is one particular issue which really annoys me - If he's mezzing a bunch of mobs he starts to run oom - whereas if he was sitting between casts he could mez them indefinitely). I am considering trying to fix this issue by sticking the 'sit down' logic at the end of the CastSpell Sub (So regardless of what spell is being cast, they will sit straight down after). My only concern is how to handle agro issues (i.e. not sitting if anything is hitting them) ... I'll need to play some more with this!
 
checking the mez code

Rich (BB code):
|Chanter mez code
/if (${Me.Class.Name.Equal[Enchanter]}) {
     /while (1) {
     /call CastWhat "${MezSpell}" ${MobID} Mez 0
     /varcalc MezFail ${MezFail}+1
     /if (${Macro.Return.Equal[CAST_SUCCESS]}) {
          /if (!${ReMez})  /call BroadCast ${IRCOn} ${EQBCOn} g "JUST MEZZED -> ${MezSpell} on ${Spawn[${MobID}].CleanName}:${MobID}"
          /if (${ReMez})  /call BroadCast ${IRCOn} ${EQBCOn} g "JUST REMEZZED -> ${MezSpell} on ${Spawn[${MobID}].CleanName}:${MobID}"
          /varcalc MezCount[${TimerNum}] ${MezCount[${TimerNum}]}+1
          /varcalc MezTimer${TimerNum} ((${Spell[${MezSpell}].Duration.TotalSeconds}+${MezMod})*10)*.90
          /if (${DebugMez}) /echo DEBUGMEZ MezTimer${TimerNum} ${MezTimer${TimerNum}} Line#: ${Macro.CurLine}
     } else /if (${Macro.Return.Equal[CAST_RESIST]} && ${MezFail}<2) {
          /call BroadCast ${IRCOn} ${EQBCOn} g "MEZ Resisted -> ${Spawn[${MobID}].CleanName} <- ID:${MobID}"
          /continue
     } else /if (${Macro.Return.Equal[CAST_IMMUNE]}) {
          /if (!${MezImmuneIDs.Find[|${Target.ID}]}) /call AddMezImmune ${Target.ID}
     }
          /break
}

the mez routine also calls castwhat but i think i gonna try and move my sitting code to before the /while(1) { line in the combat subsee how that goes, and maybe a 6 second timer is not enough, hmm lets do 9s
 
and the hitting if things are hitting them i am thinking bout popping a tickyboi into the routeine that collects dps information.

find the event called event_gothit
find this section:
Rich (BB code):
        /varset GotHitToggle 0
        /doevents flush GotHit
    /return

make it look like this:
Rich (BB code):
		/varset tickyboi ${tickyboi.OriginalValue}
        /varset GotHitToggle 0
        /doevents flush GotHit
    /return
 
adding an option that would sit a character down even if in combat would really help, especially on progression, thank you
 
it would, but we would have to ask ctaylor to properly implement it.
 
I have attached a modified version of 10.2.5 which includes the capability for your casters to sit down in combat. When using this, ensure you have all your casters to MedCombat=0

For modified parts look for bits like:
Rich (BB code):
|WhoDunIt MOD START
/varset ButtToFloorTimer ${ButtToFloorTimer.OriginalValue}
|WhoDunIt MOD END

The implementation is simple: after casting a spell, a timer is set (by default to 1 second). After this timer gets to zero, the character will sit down (the next time /doevents is called). As suggested by Kaen above, I also use the GotHit event to ensure characters dont try to sit down for a few seconds after being hit.

After running this for a few hours tonight, it's like night and day in terms of medding efficiency. I no longer feel like i'm grouping with a bunch of dumb humans who refuse to med :xd:. I'm just left wondering how this facility isn't in the core script (And I do hope it's included in a future release, and made configurable - and re-implemented by someone who has been coding MQ2 for more than 1 day :D )
 

Attachments

Question - New to KissAssist - Some questions and observations

Users who are viewing this thread

Back
Top
Cart