-with flexible send command to bots (/all, /me, /tar, /group, /<class name>)
-with flexible command syntax (ex /stick, /stick<option>, /stick <option>
Generally option use for most functions:
without option (just the cmd) = launch just one time the cmd
on = cmd is always maintain in full automatic
off = cmd is stopped
You can find the draft of all commands at this @ https://github.com/moguay/mq2-thf-macro ... ommands.md
Significantly reduces the number of aliases, increases the options possibilities (generic and specific), while remaining compatible with other code.
Good headache for those who seeks to understand a little.
Exemple with sticking cmd :
Code: Select all
/stickme (stick all bots to the senders command)
/all /stick (same with flex analysis)
/all /stickme (same with flex analysis)
/all /stick me (same with flex analysis)
/all /stick (stick all bots)
/tar /stick (stick target)
/rog /stick (stick rogues)
/group /stick (stick group)
Exemple for self command :
Code: Select all
/me /buff (self buffing)
/me /buffon (self buffing automatic)
/me /buffoff (disable self buff)
The Draft of this new EQBC event CODE with just /stick command
Code: Select all
Sub Event_EQBC_NEW(EQBCSay,EQBCSender,EQBCCommand)
/if (!${Bool[${EQBCCommand.Token[1, ]}]}) /return
/if (${EQBCCommand.Token[1, ].Count[:]} == 3) {
/if (!${Bool[${EQBCCommand.Token[2, ]}]}) /return
/declare i int local
/declare ME_CLASS string local ${Me.Class.ShortName}
/declare ME_NAME string local ${Me.CleanName}
/declare ME_ZONE string local ${Zone.ID}
/declare ME_POS string local ${Me.Y},${Me.X},${Me.Z},${Me.Heading.Degrees}
/declare ME_TYPE string local target
/declare CLASS_LIST string local war|clr|pal|rng|shd|dru|mnk|brd|rog|shm|nec|wiz|mag|enc|bst|ber
/declare hold_LIST string local 1|1|0|1
/declare dps_LIST string local 0|0|LOW|MAX
| NEW EQBC
/declare ParamCount int local 1
/declare WHO string local ${EQBCSender}
/declare FOR string local ${EQBCCommand.Token[${ParamCount}, ].Token[1,:]}
/declare TARGET int local ${Int[${EQBCCommand.Token[${ParamCount}, ].Token[2,:]}]}
/declare ZONE int local ${Int[${EQBCCommand.Token[${ParamCount}, ].Token[3,:]}]}
/declare POS string local ${EQBCCommand.Token[${ParamCount}, ].Token[4,:]}
/varset EQBCCommand ${EQBCCommand.Right[-${Int[${Math.Calc[${EQBCCommand.Token[1, ].Length}+1]}]}]}
/declare CMD string local ${EQBCCommand.Token[${ParamCount}, ]}
/declare ARG string local
:ARGLoop
/varcalc ParamCount ${ParamCount}+1
/if (${Bool[${EQBCCommand.Token[${ParamCount}, ]}]}) {
/varset ARG ${ARG}|${EQBCCommand.Token[${ParamCount}, ]}|
/goto :ARGLoop
}
| Exclude not in the same zone
/if (!${Select[${CMD},rez,accept,zone,form,finditem,eq]} && !${Select[${ARG},it]} && ${ZONE}!=${ME_ZONE}) /return
/if (!${FOR.Equal[ALL]} && !${FOR.Equal[${Me.CleanName}]}) {
| Exclude if not the classes
/if (${CLASS_LIST.Find[${FOR}]} && !${FOR.Equal[${Me.Class.ShortName}]}) {
/return
| Exclude not in group
} else /if (${FOR.Equal[group]}) {
| Find if in group
/for i 0 to ${Group.Members}
/if (${Spawn[PC =${Group.Member[${i}].CleanName}].ID}!=${Spawn[PC =${EQBCSender}].ID} || ${Spawn[PC =${EQBCSender}].Distance} > 300) /return
/next i
| Exclude if not target
} else /if (${FOR.Equal[tar]} && ${TARGET}!=${Me.ID}) {
/return
}
}
/if (${Bool[${ARG}]}) {
/for i 1 to ${Math.Calc[${CLASS_LIST.Count[|]} + 1]}
| Exclude if not the classes arg option
/if (!${ARG.Find[|but|]}) {
/if (${ARG.Find[|${CLASS_LIST.Arg[${i},|]}|]} && !${Me.Class.ShortName.Equal[${CLASS_LIST.Arg[${i},|]}]}) /return
} else {
/if (${ARG.Find[|${CLASS_LIST.Arg[${i},|]}|]} && ${Me.Class.ShortName.Equal[${CLASS_LIST.Arg[${i},|]}]}) /return
}
/next i
}
|| Move commands
/if (${Select[${CMD.Find[stick]},1,2]}) {
/if ((${CMD.Find[me]} || ${CMD.Find[on]} || ${Select[${ARG.Arg[1,|]},NULL,on,me]}) && ${ZONE}==${ME_ZONE} && ${WHO.NotEqual[${Me.CleanName}]}) {
/multiline ; /docommand /${echo} -Sticking to [ ${Spawn[PC =${WHO}].CleanName} ];/squelch /face ID ${Spawn[PC =${WHO}].ID} fast;/squelch /stick ID ${Spawn[PC =${WHO}].ID} 10 moveback behindonce
/timed 10 /if (${Stick.Status.Equal[OFF]}) /bct ${WHO} NOT Sticking to [ ${Spawn[PC =${WHO}].CleanName} - ${Spawn[PC =${WHO}].Distance} - ${Spawn[PC =${WHO}].LineOfSight} - ${Zone.Name} ]
} else /if ((${CMD.Find[off]} || ${ARG.Arg[1,|].Equal[off]}) && ${ZONE}==${ME_ZONE}) {
/squelch /stick off
/docommand /${echo} -STICK: off
}
}
|| Etc ...
/return
The code for defined and update MQ2 aliases
Code: Select all
|** AUTO REDEFINE ALIASES **|
/if (!${Ini[..\MacroQuest.ini,Aliases,/me].Replace[$,].Replace[{,].Replace[},].Find[Me.CleanName:If]}) {
/noparse /alias /me /bct ${Me.CleanName} ${Me.CleanName}:${If[${Target.ID},${Target.ID},]}:${Zone.ID}:${Me.Y.Int},${Me.X.Int},${Me.Z.Int},${Me.Heading.Degrees.Int}
}
/if (!${Ini[..\MacroQuest.ini,Aliases,/all].Replace[$,].Replace[{,].Replace[},].Find[all:If]}) {
/noparse /alias /all /bc all:${If[${Target.ID},${Target.ID},]}:${Zone.ID}:${Me.Y.Int},${Me.X.Int},${Me.Z.Int},${Me.Heading.Degrees.Int}
}
/if (!${Ini[..\MacroQuest.ini,Aliases,/group].Replace[$,].Replace[{,].Replace[},].Find[group:If]}) {
/noparse /alias /group /bc group:${If[${Target.ID},${Target.ID},]}:${Zone.ID}:${Me.Y.Int},${Me.X.Int},${Me.Z.Int},${Me.Heading.Degrees.Int}
}
/if (!${Ini[..\MacroQuest.ini,Aliases,/tar].Replace[$,].Replace[{,].Replace[},].Find[tar:If]}) {
/noparse /alias /tar /bc tar:${If[${Target.ID},${Target.ID},]}:${Zone.ID}:${Me.Y.Int},${Me.X.Int},${Me.Z.Int},${Me.Heading.Degrees.Int}
}
/if (!${Ini[..\MacroQuest.ini,Aliases,/war].Replace[$,].Replace[{,].Replace[},].Find[war:If]}) {
/noparse /alias /war /bc war:${If[${Target.ID},${Target.ID},]}:${Zone.ID}:${Me.Y.Int},${Me.X.Int},${Me.Z.Int},${Me.Heading.Degrees.Int}
}
/if (!${Ini[..\MacroQuest.ini,Aliases,/clr].Replace[$,].Replace[{,].Replace[},].Find[clr:If]}) {
/noparse /alias /clr /bc clr:${If[${Target.ID},${Target.ID},]}:${Zone.ID}:${Me.Y.Int},${Me.X.Int},${Me.Z.Int},${Me.Heading.Degrees.Int}
}
/if (!${Ini[..\MacroQuest.ini,Aliases,/pal].Replace[$,].Replace[{,].Replace[},].Find[pal:If]}) {
/noparse /alias /pal /bc pal:${If[${Target.ID},${Target.ID},]}:${Zone.ID}:${Me.Y.Int},${Me.X.Int},${Me.Z.Int},${Me.Heading.Degrees.Int}
}
/if (!${Ini[..\MacroQuest.ini,Aliases,/rng].Replace[$,].Replace[{,].Replace[},].Find[rng:If]}) {
/noparse /alias /rng /bc rng:${If[${Target.ID},${Target.ID},]}:${Zone.ID}:${Me.Y.Int},${Me.X.Int},${Me.Z.Int},${Me.Heading.Degrees.Int}
}
/if (!${Ini[..\MacroQuest.ini,Aliases,/shd].Replace[$,].Replace[{,].Replace[},].Find[shd:If]}) {
/noparse /alias /shd /bc shd:${If[${Target.ID},${Target.ID},]}:${Zone.ID}:${Me.Y.Int},${Me.X.Int},${Me.Z.Int},${Me.Heading.Degrees.Int}
}
/if (!${Ini[..\MacroQuest.ini,Aliases,/dru].Replace[$,].Replace[{,].Replace[},].Find[dru:If]}) {
/noparse /alias /dru /bc dru:${If[${Target.ID},${Target.ID},]}:${Zone.ID}:${Me.Y.Int},${Me.X.Int},${Me.Z.Int},${Me.Heading.Degrees.Int}
}
/if (!${Ini[..\MacroQuest.ini,Aliases,/mnk].Replace[$,].Replace[{,].Replace[},].Find[mnk:If]}) {
/noparse /alias /mnk /bc mnk:${If[${Target.ID},${Target.ID},]}:${Zone.ID}:${Me.Y.Int},${Me.X.Int},${Me.Z.Int},${Me.Heading.Degrees.Int}
}
/if (!${Ini[..\MacroQuest.ini,Aliases,/brd].Replace[$,].Replace[{,].Replace[},].Find[brd:If]}) {
/noparse /alias /brd /bc brd:${If[${Target.ID},${Target.ID},]}:${Zone.ID}:${Me.Y.Int},${Me.X.Int},${Me.Z.Int},${Me.Heading.Degrees.Int}
}
/if (!${Ini[..\MacroQuest.ini,Aliases,/rog].Replace[$,].Replace[{,].Replace[},].Find[rog:If]}) {
/noparse /alias /rog /bc rog:${If[${Target.ID},${Target.ID},]}:${Zone.ID}:${Me.Y.Int},${Me.X.Int},${Me.Z.Int},${Me.Heading.Degrees.Int}
}
/if (!${Ini[..\MacroQuest.ini,Aliases,/shm].Replace[$,].Replace[{,].Replace[},].Find[shm:If]}) {
/noparse /alias /shm /bc shm:${If[${Target.ID},${Target.ID},]}:${Zone.ID}:${Me.Y.Int},${Me.X.Int},${Me.Z.Int},${Me.Heading.Degrees.Int}
}
/if (!${Ini[..\MacroQuest.ini,Aliases,/nec].Replace[$,].Replace[{,].Replace[},].Find[nec:If]}) {
/noparse /alias /nec /bc nec:${If[${Target.ID},${Target.ID},]}:${Zone.ID}:${Me.Y.Int},${Me.X.Int},${Me.Z.Int},${Me.Heading.Degrees.Int}
}
/if (!${Ini[..\MacroQuest.ini,Aliases,/wiz].Replace[$,].Replace[{,].Replace[},].Find[wiz:If]}) {
/noparse /alias /wiz /bc wiz:${If[${Target.ID},${Target.ID},]}:${Zone.ID}:${Me.Y.Int},${Me.X.Int},${Me.Z.Int},${Me.Heading.Degrees.Int}
}
/if (!${Ini[..\MacroQuest.ini,Aliases,/mag].Replace[$,].Replace[{,].Replace[},].Find[mag:If]}) {
/noparse /alias /mag /bc mag:${If[${Target.ID},${Target.ID},]}:${Zone.ID}:${Me.Y.Int},${Me.X.Int},${Me.Z.Int},${Me.Heading.Degrees.Int}
}
/if (!${Ini[..\MacroQuest.ini,Aliases,/enc].Replace[$,].Replace[{,].Replace[},].Find[enc:If]}) {
/noparse /alias /enc /bc enc:${If[${Target.ID},${Target.ID},]}:${Zone.ID}:${Me.Y.Int},${Me.X.Int},${Me.Z.Int},${Me.Heading.Degrees.Int}
}
/if (!${Ini[..\MacroQuest.ini,Aliases,/bst].Replace[$,].Replace[{,].Replace[},].Find[bst:If]}) {
/noparse /alias /bst /bc bst:${If[${Target.ID},${Target.ID},]}:${Zone.ID}:${Me.Y.Int},${Me.X.Int},${Me.Z.Int},${Me.Heading.Degrees.Int}
}
/if (!${Ini[..\MacroQuest.ini,Aliases,/ber].Replace[$,].Replace[{,].Replace[},].Find[ber:If]}) {
/noparse /alias /ber /bc ber:${If[${Target.ID},${Target.ID},]}:${Zone.ID}:${Me.Y.Int},${Me.X.Int},${Me.Z.Int},${Me.Heading.Degrees.Int}
}
/if (!${Ini[..\MacroQuest.ini,Aliases,/stop].Replace[$,].Replace[{,].Replace[},].Find[all::]}) {
/alias /stop /bc all::${Zone.ID}: off
}