Welcome to Very Vanilla - bind fixed edition!
This is an alpha compile, not ready for normal use. While it will greatly reduce CPU usage and improve macro performance, it will also break many macros.
If you have time, please help us out by testing your favorite macros and reporting any issues.
This is an alpha compile, not ready for normal use. While it will greatly reduce CPU usage and improve macro performance, it will also break many macros.
If you have time, please help us out by testing your favorite macros and reporting any issues.
to fix an old macro add the word #warning at the top of the macro, like where #turbo is
typing /invoke ${Macro.Undeclared} while a macro is running will also display a list of all errors
18 Sep 2017 by eqmule
Fixed an infinite loop bug and a variable parse bug in Eval functions. -cred bug report: creamo
Eval functions that take multiple arguments MUST separate those with comma(s) from now on
Example: (run with a cleric, war or shaman)
Rich (BB code):Sub Main /declare c_argueString string outer shm clr war /declare ChatSender string local ${Me} /if (!${checkbot["shm war clr", ${ChatSender}]}) { <-NOTE the COMMA /echo ${Time} Only Func3: FALSE, this should be TRUE } else { /echo ${Time} Only Func3: TRUE, this should be TRUE } /return Sub checkbot(selectedBots, chatSender) /declare botSelected bool local FALSE /echo ${Time} in Sub checkbot selectedBots=${selectedBots} chatSender=${chatSender} /if (${Select[${Me.Class.ShortName},${selectedBots}]}) /varset botSelected TRUE /return ${botSelected}
17 Sep 2017 by eqmule
- Fixed ${Me.GukEarned}, ${Me.MMEarned}, ${Me.RujEarned}, ${Me.TakEarned}, ${Me.MirEarned} and ${Me.LDoNPoints}
- Added a new TLO PointMercant it only have one member : Item which is a pPointMerchantItemType.
The pPointMerchantitemType has the following members: Name, ItemID, Price, ThemeID, IsStackable, IsLore, RaceMask, ClassMask, bCanUse
Usage:
/echo ${PointMercant} returns true if the LDON Mercant window is open and FALSE if not.
/echo ${PointMercant.Item[1].Price} OR /echo ${PointMercant.Item[Ebon Hammer].Price}
returns the Price for index 1 or whatever index Ebon Hammer is in if you do it by name.
etc.
15 Sep 2017 starring rswiders as "the captain", eqmule as "crew member number 6" and special guest star: eqholic
- Updated to handle the new SPA's
- Fixed a bug in /next not taking its argument into account for nested for loops.
- Fix for labels
- Fixed the CSIDLWND struct (the SIDL define...) so since we have never had this right it was time, but note that
if your plugin uses stuff like: pwnd->SidlText and its NOT an actual CSidlScreenWnd then you need to change it to whatever window it actually is.
I guess questions about this should be directed to me (eqmule)
plugins changed outside of core are attached here:
http://www.macroquest2.com/phpBB3/viewtopic.php?f=29&t=11451&p=174467#p174467
MQ2AutoAccept,MQ2Rez
14 Sep 2017 by redguides
- Please report broken macros in the macro forum, this update will break many.
- New Plugin! MQ2FindItem (Sym) - type "/finditem name" with a merchant window open, and it will select that item.
- KissAssist 10.0.5 (Maskoi, TreeHuginDruid, ctaylor22) - Updated for new bind/warning changes
- Ninjadvloot 6.0.7 (Maskoi) - Updated for new bind/warning changes
14 Sep 2017 by eqmule
- Updated for TEST
- Fixed ${Familiar[x].} it will return familiars and not illusions now...
-
- Fixed a bunch of window structs that we where completely misusing anyway.
this could require some plugin changes, contact me for help if you get errors.
-
- Fix: Variables that are undeclared but supplied as paramters now default to an actual NULL or 0 not the string "NULL"
-
- Inspecting the Blessed Spiritstaff of the Heyokah will no longer ctd you.
- Added Math.Clamp ${Math.Clamp[Min, N, Max]} will clamp N between Min and Max. - cred derple
Example:
${Math.Clamp[1, 15, 30]} => 15
${Math.Clamp[20, 15, 30]} => 20
${Math.Clamp[1, 15, 10]} => 10
Practical usage:
/bct ranger //stick id ${Target.ID} ${Math.Clamp[25,${Target.Distance},150]}
this will make your ranger stay put if he is already between 25-150 meters away
otherwise it will move him at most 150 away and at least 25 away.
12 Sep 2017 by eqmule and eqholic
All plugin sources for this zip are attached to this post:
http://www.macroquest2.com/phpBB3/viewtopic.php?f=29&t=11451&p=174415#p174415
Changed MQ2MoveUtils to save stuff faster.
MQ2ChatWnd got a new tlo /echo ${ChatWnd.Title}
MQ2ChatWnd got a new command /setchattitle
MQ2Melee updated - it has flags for down and holyshits called downflag0-60 and holyflag0-60
you SHOULD set those flag to 2 if you parse ANY macro variables.
Example:
MQ2Hud now updated with a new type HUDTYPE_MACRO which is 16Rich (BB code):downflag0=2 downshit0=/if (${Macro.Paused}) /echo ${Macro} is PAUSED!
This means you can now set the type to any combination of 1 2 4 8 and 16
see http://www.macroquest2.com/wiki/index.php/MQ2HUD for more info.
Basically using a hud that tries to parse variables that are used in macros, before they are declared will fail.
This new flag lets mq2hud know to not even try unless its set.
Adding events from a macro will now also automatically /declare variable as outer if used.
Example: #Event Burn "[MQ2] |${BurnText}|"
As you can see this event uses the variable ${BurnText} and it will therefor /declare it as well.
This means you can remove /declare BurnText in your Sub Main since adding the event did it for you already.
Added ${Macro.IsOuterVariable[xxx]} which returns TRUE/FALSE, it checks if a outer variable exists. (read is declared)
I would recommend NOT using this in macros unless its for debug purposes because it can get quickly get expensive in terms of cpu cycles.
Added ${Macro.IsTLO[xxx]} which returns TRUE/FALSE, it checks if a Top Level Object exists. This should be faster than checking if a plugin is loaded. *should*
Usage:
Rich (BB code):/if (${Macro.IsTLO[Melee]}) { /echo yes there is a Melee Top Level Object loaded... /echo this means I CAN actually do stuff with it without it throwing the Undeclared warning: /delay 25 !${Melee.Combat} } else { /echo no there is no such TLO, maybe you should load mq2melee? /end }
07 Sep 2017 by eqmule
- using namespace std; has been removed from mq2main.h
THIS MEANS your plugins will ERROR!
To fix: Find #include "../MQ2Plugin.h" in your plugin and add using namespace std; under it.
Example:
- The reason for that change is that right now we litter ALL projects with the std namespace and it is just not good.Rich (BB code):#include "../MQ2Plugin.h" using namespace std;
Let everyone that needs that namespace use it in their own projects from now on.
-
- #bind(s) are now fixed and won't screw up the macrostack anymore.
- Todays update is significant because I rebuilt the macro engine to improve performance,
it was well overdue. The biggest change is that gMacroBlock is now a map.
- Undeclared Variables are no longer tolerated, and the macroengine will not run at optimal speed
if they exist. I have added a TLO to check for them because of this and a new macro keyword #warning as well
so there is no good reason to run old macros where these kinds of variables hog cpu power:
AGAIN: IMPORTANT: Undeclared variables will slow down macro performance a LOT if they are used over and over, so, fix your macros.
-
- The Macro TLO has a new method: .Undeclared
Usage: /invoke ${Macro.Undeclared} and it will list all undeclared variables.
- New macro keyword: #warning
add it at the top of your macro, and you will get warnings if there are undeclared variables used in it.
-
- /while loops can now be nested inside /while and /for loops.
- /continue and /break should work properly inside /for loops now.
- /break works in /while loops now.
- /for loops can now have nested /for loops inside them
-
- Updated MQ2Rez and MQ2Cast to not hog the cpu looking up windows over and over.
- Other stuff to optimize and cut down on cpu intensive tasks.
Files changed outside of core:
\MQ2Cast\MQ2Cast.cpp
\MQ2Rez\MQ2Rez.cpp
01 Sep 2017 by eqmule
- You can now call functions inside if statements in your macros - cred eqholic
Example:
Rich (BB code):Sub Testsub /echo Enter Testsub /return Hello world /return Sub Testargs(int arg1,int arg2) /if (${arg1} > ${arg2}) { /return Testargs: ${arg1} > ${arg2} } else { /return Testargs: ${arg1} <= ${arg2} } /return Sub IsHuuge(int arg1) /echo IsHuuge ${arg1} ? /if (${arg1} > 1000) { /echo TRUE /return TRUE } else { /echo FALSE /return FALSE } /return Sub Main /echo ${Testsub} /echo ${Testargs[10 9]} /if (${IsHuuge[2000]} && !${IsHuuge[1]}) /echo Huuge and smaaal /return
Attachments
Last edited:

