12 Jan 2017 by eqmule
- Updated for TEST
- ZonePoint in the DOORS struct has ben renamed to SpellID
06 Jan 2017 by rswiders
- Updated spell effects display
- Updated buff stacking testing
Moderator: MacroQuest Developers
12 Jan 2017 by eqmule
- Updated for TEST
- ZonePoint in the DOORS struct has ben renamed to SpellID
06 Jan 2017 by rswiders
- Updated spell effects display
- Updated buff stacking testing
donations for this month's patches.13 Jan 2017 by rswiders
- Added SkillBase to character. This will give you the static base maximum for your skills.
- Updated Skill and SkillCap to handle the new TS aas allowing for above the cap values.
13 jan 2017 by eqmule
- Added ${Macro.MemUse} it returns a pIntType letting u know how much memory your macro is using.
its useful if you suspect you have a leak.
- Ok so here is a NEW FEATURE which was brought to us by Brainiac, Thanks Brainiac!
It allows us to extend any existing TLO's in our own plugins.
Example:
You want to add a new member to for example the character TLO
named .CursorKrono which tells you how many Krono you have on your cursor
you could then do /echo ${Me.CursorKrono}
Below is a plugin example for how you would do this: (Code: Select all
tags added for forum post to show up correctly) [CODE] // MQ2ExtensionTest.cpp : Defines the entry point for the DLL application. // // PLUGIN_API is only to be used for callbacks. All existing callbacks at this time // are shown below. Remove the ones your plugin does not use. Always use Initialize // and Shutdown for setup and cleanup, do NOT do it in DllMain. #include "../MQ2Plugin.h" PreSetup("MQ2ExtensionTest"); //---------------------------------------------------------------------------- // test the mq2 datatype extension code class MQ2CharacterExtensionType* pCharExtType = nullptr; class MQ2CharacterExtensionType : public MQ2Type { public: enum ExtensionMembers { CursorKrono = 1, }; MQ2CharacterExtensionType() : MQ2Type("MQ2TestCharacterExtension") { TypeMember(CursorKrono); } bool GETMEMBER() { PMQ2TYPEMEMBER pMember = FindMember(Member); if (!pMember) return false; switch (pMember->ID) { case CursorKrono: { if(PCHARINFO pCharInf = GetCharInfo()) { Dest.DWord = pCharInf->CursorKrono; Dest.Type = pIntType; return true; } } return false; } bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) { return false; } bool FromData(MQ2VARPTR& VarPtr, MQ2TYPEVAR& Source) { if (Source.Type != pCharExtType) return false; VarPtr.Ptr = Source.Ptr; return true; } bool FromString(MQ2VARPTR& VarPtr, PCHAR Source) { return false; } }; PLUGIN_API VOID InitializePlugin(VOID) { pCharExtType = new MQ2CharacterExtensionType; // This is where you add it to an existing TLO // in this case the one named "character" aka our ${Me} tlo... AddMQ2TypeExtension("character", pCharExtType); } PLUGIN_API VOID ShutdownPlugin(VOID) { //dont forget to remove it on plugin shutdown...(aka plugin unload) RemoveMQ2TypeExtension("character", pCharExtType); delete pCharExtType; }
donations for this month's patches.18 Jan 2017 by eqmule
- Updated for LIVE
- Bunch of other stuff, thanks Brainiac for the arrayclass mod
- Exp has been changed to a __int64, because, well it is, and has been for a few years...
donations for this month's patches.19 Jan 2017 by eqmule
- Fixed a bug in the EQINVSLOTWND struct where slots where WORD instead of short
this will take care of any remaining problems with /itemnotify
- stuff in progress, nothing to see here yet...
- Fixed a buffer overflow in the UPCNotificationFlush_Detour -Thanks Maskoi
19 Jan 2017 by rswiders
- Fixed BuffStackTest to correctly test spells with triggering spas.
donations for this month's patches.21 Jan 2017 by eqmule
- Updated for TEST
donations for this month's patches.29 Jan 2017 by eqmule
- I finally had time to sit down and look at the crash reporting
it has been given a major overhaul
you will know what I mean next time you crash.
Please READ the crash message carefully.
Do what it says. Or not.
donations for this month's patches.30 Jan 2017 by eqmule
- Added ${MacroQuest.Build} it returns an int where LIVE = 1 TEST = 2 BETA = 3 and EMU = 4
- Added Start EQBC Server to the tray icon menu.
donations for this month's patches.01 Feb 2017 by eqmule
- Crash handling is now somewhat configurable
See the MQ2CrashCallBack function and GetCrashDialogMessage
donations for this month's patches.03 Feb 2017 by eqmule
- Updated for latest LIVE and TEST patches
donations for this month's patches.03 Feb 2017 by eqmule
- Updated for TEST, yes there was a new patch.
- Fixed a issue that would hang the client and sometimes even crash it.
this should fix the problem with using Untamed Rage on a berserker
as well as other buff stacking check problems.
donations for this month's patches.08 Feb 2017 by eqmule
- Fixed a few places which would use pInvSlotMgr without NULL checking it
- Added .TimeBeenDead to the spawn tlo You can use it to figure out how long a corpse has been dead.
NOTE: The timer is dependant on if you where in the zone when the corpse spawned.
If you enter a zone and check this tlo member it will display the time of the death
as the time you entered the zone.
- Fixed a potential stack corruption in EndMacro
- Updated for TEST
- Made some changes to MacroQuest2.exe to deal with it not detecting eqgame version correctly sometimes.
donations for this month's patches.15 Feb 2017 by eqmule
- Updated for LIVE
- XTARGETDATA has been renamed to XTARGETSLOT
- New include added SharedClasses.h
- the XTARGETSLOT struct has been moved to SharedClasses.h
- Unknown0x4 in the XTARGETSLOT struct has been renamed to XTargetSlotStatus, change plugins accordingly.
- XTarget stuff has gone through a make over, this will break plugins.
Here are ONE example of how to fix this:
MQ2Melee.cpp:
change:toCode: Select all
case XTaggro: { Dest.DWord = true; Dest.Type = pBoolType; if (PCHARINFO pChar = GetCharInfo()) { if (PXTARGETMGR xtm = pChar->pXTargetMgr) { if (PXTARGETARRAY xta = xtm->pXTargetArray) { DWORD x = 0; for (DWORD n = 0; n < xtm->TargetSlots; n++) { if (xta->pXTargetData[n].xTargetType == XTARGET_AUTO_HATER && xta->pXTargetData[n].Unknown0x4) { x++; } } if (x>1) { if (pAggroInfo) { for (DWORD i = 0; i<xtm->TargetSlots; i++) { if (DWORD spID = xta->pXTargetData[i].SpawnID) { if (PSPAWNINFO pSpawn = (PSPAWNINFO)GetSpawnByID(spID)) { if (pTarget && ((PSPAWNINFO)pTarget)->SpawnID == pSpawn->SpawnID) continue; if (pSpawn->Type == SPAWN_NPC && xta->pXTargetData[i].xTargetType == XTARGET_AUTO_HATER) { DWORD agropct = pAggroInfo->aggroData[AD_xTarget1 + i].AggroPct; //WriteChatf("Checking aggro on %s its %d",xta->pXTargetData[i].Name,agropct); if (agropct<100) { Dest.DWord = false; break; } } } } } } } } } }- Good Luck.Code: Select all
case XTaggro: { Dest.DWord = true; Dest.Type = pBoolType; if (PCHARINFO pChar = GetCharInfo()) { if (ExtendedTargetList *xtm = pChar->pXTargetMgr) { DWORD x = 0; for (int n = 0; n < xtm->XTargetSlots.Count; n++) { XTARGETSLOT xts = xtm->XTargetSlots[n]; if (xts.xTargetType == XTARGET_AUTO_HATER && xts.XTargetSlotStatus) { x++; } } if (x > 1) { if (pAggroInfo) { for (int i = 0; i < xtm->XTargetSlots.Count; i++) { XTARGETSLOT xts = xtm->XTargetSlots[i]; if (DWORD spID = xts.SpawnID) { if (PSPAWNINFO pSpawn = (PSPAWNINFO)GetSpawnByID(spID)) { if (pTarget && ((PSPAWNINFO)pTarget)->SpawnID == pSpawn->SpawnID) continue; if (pSpawn->Type == SPAWN_NPC && xts.xTargetType == XTARGET_AUTO_HATER) { DWORD agropct = pAggroInfo->aggroData[AD_xTarget1 + i].AggroPct; //WriteChatf("Checking aggro on %s its %d",xta->pXTargetData[i].Name,agropct); if (agropct < 100) { Dest.DWord = false; break; } } } } } } } } } }
13 Feb 2017 by derple
- Fixed ${Target.Buff[x].Caster} so it takes multiple casters of the same spell into account.
Before this fix, only the first caster of a spell would be returned.
- Added ${Target.MyBuff[x]} it returns a pSpellType
Example Usage:- Added ${Target.MyBuffCount} it returns a int of all buffs YOU have casted on the target.Code: Select all
holyshit0=/if (!${Debuff.Silenced} && ${Me.PctMana} > 10 && ${Target.MyBuff[Envenomed Breath].ID} == NULL && ${Target.CurrentHPs}<95) /casting "Envenomed Breath"
donations for this month's patches.22 Feb 2017 by eqmule
- Tip for macro authors:
- Added FloorZ to the Spawn TLO it returns a float.
FloorZ usage: ok so... eh, spawns are sometimes (always?) "planted" a few inches below or above the floor...
This member represent where the floor is ACTUALLY at.
So if you for example do a /echo ${Target.Z} and it returns 219
and then you do a ${Target.FloorZ} it will return like 216 or something...
Why is this important, well for brainiacs new mq2nav, I discovered that
sometimes, when a spawns z location is outside of the geometry... (above or below)
you cannot just do a /nav target or a /nav locxyz ${Target.X} ${Target.Y} ${Target.Z}
BUT doing a /nav locxyz ${Target.X} ${Target.Y} ${Target.FloorZ} works.
So... this is how you get /nav working correctly with problematic spawns which have their feet outside of the geometry.
donations for this month's patches.
donations for this month's patches.15 Mar 2017 by eqmule
- Updated for LIVE
- Stuff
donations for this month's patches.