MQ2EmuCharacters v1.0 » Deprecated
Deprecated
This plugin was drastically rewritten. Since the changes were so extensive and the nature of this plugin is that it urges large amounts of customization it seemed important to preserve this old documentation for those that might be hesitant to upgrade. For those that might feel that way I'd urge you to backup your old files, and give it a shot. I think you'll be happy once you get all your customizations ported over. The new documentation is in progress here: MQ2EmuCharacters v2.0
Overview
MQ2EmuCharacters gives you a way to graphically interact with your toons in the NetBots/EQBC link. There is an individual window(pod) for each character with globally or per-character customizable buttons, progress/hp/mana/etc bars, and labels. You set these pods up in an ini file using 4 obejects and their properties.
Objects
Objects are added by listing a name for them in the Button.Names, Label.Names, and Bar.Names settings in the ini file. For example a setting of "Label.Names=Top Bottom" would make two labels name top and bottom. Their font size Could then be set with a "Top.CaptionFontSize=1". The Pod objects "Names" property is derived from the list of names Netbots uses. That is to say it is automatic. The four objects properties are as follows.
Pods
This refers to the small windows that get tiled for each character. Since there is only 1 pod per character the "Pod" name is static and there is no list of pod names. Meaning Pod.Names does NOT exist.
Properties:
Pod.OnClick
Pod.Color
Pod.ToolTip
Pod.ToolTipColor
Pod.TopNext
Pod.LeftNext
Pod.Height
Pod.Width
Buttons
These are a sub object of pods.
Properties:
name.Caption
name.CaptionLeft
name.CaptionTop
name.CaptionFontSize
name.CaptionColor
name.OnClick
name.ToolTip
name.ToolTipColor
name.Top
name.Left
name.Height
name.Width
Bars
These are a sub object of pods.
Properties:
name.Percent
name.Color
name.OnClick
name.ToolTip
name.ToolTipColor
name.Top
name.Left
name.Height
name.Width
Labels
These are a sub object of pods.
Properties:
name.Caption
name.CaptionColor
name.Left
name.Top
name.CaptionFontSize
Object Properties Explained
P - means this property is parsed as a variable. Much like MQ2Hud properties.
Caption P
This is the string of text that will be displayed for buttons/labels. A label with a caption property of "${Character}" would make the label display the name of the character the pod belongs to.
Format:
name.Caption=<string>
Parameters:
${Character} - this characters name
Example:
Button1.Caption=My name is ${Character}
CaptionColor P
This is the color of the string of text that will be displayed for buttons/labels. A label with a caption property of "255 255 0 0" would make the label display as red.
Format:
name.CaptionColor=<alpha> <red> <green> <blue>
Parameters:
${Character} - this characters name
Example:
Button1.CaptionColor=${If[${NetBots[${Character}].State.Equal[SIT]},255 255 0 0,255 255 255 255]}
CaptionLeft
This is a pixel value of where the left edge of the caption will appear. For Labels this value will be relative to the pod, meaning a 10 will place it 10 pixels to the left of the left edge of the bod. For a Button this value is relative to the left edge of the button.
Format:
name.CaptionLeft=<int>
Parameters:
NONE - this property is NOT parsed.
Example:
Button1.CaptionLeft=3
CaptionTop
This is a pixel value of where the top edge of the caption will appear. For Labels this value will be relative to the pod, meaning a 10 will place it 10 pixels below the top edge of the bod. For a Button this value is relative to the top edge of the button.
Format:
name.CaptionTop=<int>
Parameters:
NONE - this property is NOT parsed.
Example:
Button1.CaptionTop=3
CaptionFontSize
This is what size the font should be for the caption. You probably want to only use font sizes 1-3 but more are available.
Format:
name.CaptionFontSize=<int>
Parameters:
NONE - this property is NOT parsed.
Example:
Button1.CaptionFontSize=1
OnClick P
This is a command that will be executed when the object is clicked. It is important to note that it is parsed BEFORE it is executed. This means you can nest commands into variables. For example if we set a button OnClick to, "/bct ${Character} //attack ${If[${NetBots[${Character}].Attacking},off,on]}" it will execute a /attack on, or /attack off depending on if they are attacking.
Format:
name.OnClick=<command string>
Parameters:
${Character} - this characters name
${Left} - TRUE/FALSE the mouse was left clicked
${Right} - TRUE/FALSE the mouse was right clicked
${Alt} - TRUE/FALSE the mouse was alt clicked
${Ctrl} - TRUE/FALSE the mouse was ctrl clicked
${Shift} - TRUE/FALSE the mouse was shift clicked
Example:
Button1.OnClick=/bct ${Character} //attack ${If[${NetBots[${Character}].Attacking},off,on]}
ToolTip P
This is the string of text that will be displayed when the mouse hovers over an object. A Bar with a ToolTip property of "${NetBots[${Character}].PctEndurance}%" would make the ToolTip display the percentage of endurance.
Format:
name.ToolTip=<string>
Parameters:
${Character} - this characters name
Example:
Button1.ToolTip=This makes ${Character} sit
ToolTipColor P
This is the color of the string of text that will be displayed for on objects tooltip. A object with a ToolTipColor of "255 255 0 0" would display as red.
Format:
name.ToolTipColor=<alpha> <red> <green> <blue>
Parameters:
${Character} - this characters name
Example:
Button1.ToolTipColor=${If[${NetBots[${Character}].State.Equal[SIT]},255 255 0 0,255 255 255 255]}
Top
This is a pixel value of where the top edge of the object will appear in relation to the pod, meaning a 10 will place it 10 pixels from the edge of the characters pod.
Format:
name.Top=<int>
Parameters:
NONE - this property is NOT parsed.
Example:
Button1.Top=30
Left
This is a pixel value of where the left edge of the object will appear in relation to the pod, meaning a 10 will place it 10 pixels from the edge of the characters pod.
Format:
name.Left=<int>
Parameters:
NONE - this property is NOT parsed.
Example:
Button1.Left=10
Height
This is how tall, in pixels the object will be.
Format:
name.Height=<int>
Parameters:
NONE - this property is NOT parsed.
Example:
Button1.Height=15
Width
This is how wide, in pixels the object will be.
Format:
name.Width=<int>
Parameters:
NONE - this property is NOT parsed.
Example:
Button1.Width=19
TopNext
This property is unique to the Pod Object. It represents, in pixels, where the top of the NEXT pod will start. For example, maudigans pod is 50px tall and 100px wide. If I wanted the pods to tile down the screen I would set this property equal to 55, and the pods would move 55 pixels down the screen for each pod this would leave a 5 pixel gap between pods.
Format:
Pod.TopNext=<int>
Parameters:
NONE - this property is NOT parsed.
Example:
Pod.TopNext=55
LeftNext
This property is unique to the Pod Object. It represents, in pixels, where the left edge of the NEXT pod will start. For example, maudigans pod is 50px tall and 100px wide. If I wanted the pods to tile across the screen I would set this property equal to 105, and the pods would move 105 pixels across the screen for each pod this would leave a 5 pixel gap between pods.
Format:
Pod.LeftNext=<int>
Parameters:
NONE - this property is NOT parsed.
Example:
Pod.LeftNext=55
Percent P
This should be a value of 0-100 representing the percentage width of a bar. For example a bar with a width of 110, and a Percent of of 50 would show up as 55 pixels wide.
Format:
name.Percent=<0-100>
Parameters:
${Character} - this characters name
Example:
Bar1.Percent=${NetBots[${Character}].TargetHP}
Color P
This is the color of the pod or bar object. It is similar to the CaptionColor property but it has an additional parameter to detect if the mouse is over it. A bar with the color of "255 0 0 255" would show up as blue.
Format:
name.Color=<alpha> <red> <green> <blue>
Parameters:
${Character} - this characters name
${MouseOver} - TRUE/FALSE if the mouse is over this object
Example:
Bar1.Color=${If[${MouseOver},255 180 0 0,155 180 0 0]}
[Maudigan] vs [Default]
You can set custom values for a particular characters pod. Any object settings that fall under [Default] can be placed under a section named after the character to redefine those settings for that one character. For example:
Macro
This example would make Talra's Bar2 display as a blue mana bar. While everyone else defers to [default] and perhaps gets a stamina bar. You can even add/remove buttons/bars/labels by adding or removing parameters from the Bar.Names, Button.Names, and Label.Names. For example:
Macro
This example would give Talras an additional bar, Bar4 that is 1 pixel tall, green, and displays pet life. Since he lists no properties for bar1, bar2, and bar3 it will automatically defer to [Default] and grab those values from there making bar1-3 identical to everyone elses. To remove a bar, talras could simple set bar names equal to "Bar1 Bar2" and then it wont load Bar3.
[Settings]
Format:
ini
Example:
Ini
/reloadpods
If you've made changes to the INI file and would like to refresh your layout/commands/etc simple type this command to reparse the ini file.
Move Button
In the top left corner (by default) there is a purple bubble. It's a button. To use it mouse down and drag the UI around the screen. It will save it's location on the screen in the ini file. Right now this is a global setting. It will effect the location (on load) of all characters on that PC.
UI Files
You must copy the files from the Macroquest UIFiles folder, to your everquests uifiles/default folder. If you did this BEFORE starting everquest, and you had mq2emucharacters loaded it should just work. If you copied the files after everquest loaded, or didn't have the plugin loaded on startup then you will need to do a "/loadskin default"
Dependencies
EQBCServer.exe
This requires the eqbcserver compiled on or after 26 september 2010
MQ2EQBC
This requires the mq2eqbc.dll compiled on or after 26 september 2010
MQ2NetBots
This requires the mq2netbots.dll compiled on or after 26 september 2010. Netbots send/grab must also be turned on.
MQ2EmuArt
This requires the mq2emuart.dll compiled on or after 26 september 2010
MQ2EmuMouseAPI
This requires the mq2emumouseapi.dll compiled on or after 6 july 2011
Gold Membership
This does require a gold membership to use. Because of this you'll need to have MQ2VMQNet Loaded, and have type /login <user> <pass>, or have set your user and pass in the VMQNet INI file for autologin. You can sign up for membership here.
Limitations
Not available on SoF
This was added to Titanium on 7 July 2011. It can now be used on Titanium, Seeds of Destruction, and Underfoot.
Troubleshooting
My pods dont show up
1. Make sure mq2emuart is loaded
2. Make sure mq2emucharacters is loaded
3. Make sure you are logged in using /login <username> <password>
4. Make sure you and your other characters are connected to EQBCServer
5. Make sure you and your other characters netbots grab/send are on.
5. reload mq2emucharacters using /plugin mq2emucharacters unload, then /plugin mq2emucharacters
6. Make sure your UI files loaded, /loadskin default
Full INI example
Macro
Last edited by Maudigan on Sat May 07, 2016 10:20 am; edited 17 times in total
Sun Jan 16, 2011 1:41 pm
Project Lead
there gonna be an option's for group commands?. like for instance all names have a button on them witch places them in a "Melee" channel then another attached to the group window that lets you attack, then of corse one to make them follow you?. all the neat things we already do :P
Sun Jan 16, 2011 6:25 pm
You can pretty much do whatever you want, there are very few limitations. I don't use mq2melee but if you post some example commands I can show you how to implement it.
Sun Jan 16, 2011 6:37 pm
Project Lead
I'm in front of the PC now so I can be a little more detailed. I'm not sure on the meele thing, sorvani might know more since he uses it, and i'm not sure what you mean about the group thing. For the follow it would look something like this:
So we parse the ${Character} first. That is to say if you click on Maudigan's button1 the ${Character} evaluates to "Maudigan", if you click on Cantarb's button it evaluates to "Cantarb". So we get:
Then the ${If} evaluates. If Cantarb is in zone with the toon doing the clicking we get the evaluation of
if cantarb isn't in the same zone we get
Once all that parsing is done that command gets executed, so If cantarb is in zone it sends him a command to target you by your ID, and then turn netfollow on, it would work equally well with /stick, or /follow. If Cantarb isn't in zone it pops a message up on the clickers screen telling them such.
It can be peculiar to wrap your head around sometimes, I had difficulty trying to write a help file for it, it's kind of one of those ones that you just have to see it work to get it.
EDIT: it might be worth noting that becoming familiar with this setup will be beneficial for those that have a gold membership as I really like how amazingly dynamic and powerful it is and intend on implementing a system like this in all future plugins that have a GUI.
Macro
So we parse the ${Character} first. That is to say if you click on Maudigan's button1 the ${Character} evaluates to "Maudigan", if you click on Cantarb's button it evaluates to "Cantarb". So we get:
Macro
Then the ${If} evaluates. If Cantarb is in zone with the toon doing the clicking we get the evaluation of
Macro
if cantarb isn't in the same zone we get
Macro
Once all that parsing is done that command gets executed, so If cantarb is in zone it sends him a command to target you by your ID, and then turn netfollow on, it would work equally well with /stick, or /follow. If Cantarb isn't in zone it pops a message up on the clickers screen telling them such.
It can be peculiar to wrap your head around sometimes, I had difficulty trying to write a help file for it, it's kind of one of those ones that you just have to see it work to get it.
EDIT: it might be worth noting that becoming familiar with this setup will be beneficial for those that have a gold membership as I really like how amazingly dynamic and powerful it is and intend on implementing a system like this in all future plugins that have a GUI.
Last edited by Maudigan on Sun Feb 20, 2011 12:30 pm; edited 1 time in total
Sun Jan 16, 2011 9:23 pm
Project Lead
i don't like mq2melee honestly i use eqbcc with muliline so melee's would look like
keeps it simple (well simple to me anyways)
edit if i sound goofy or anything its cus i haven't been to bed in 46 hours heading to bed now
Macro
keeps it simple (well simple to me anyways)
edit if i sound goofy or anything its cus i haven't been to bed in 46 hours heading to bed now
Mon Jan 17, 2011 4:59 am
Not using a plugin to handle things it is designed to handle means doing a lot of work that you would not otherwise need to do, but the choice is yours.
Here are some example buttons functions for everyone. Some of these are in the default INI already, just spelling them out here for people to see. All of these examples say "Button1" you will obviously need to change that to be whichever button you put this on.
More to come.
_________________
Sorvani
Here are some example buttons functions for everyone. Some of these are in the default INI already, just spelling them out here for people to see. All of these examples say "Button1" you will obviously need to change that to be whichever button you put this on.
Macro
More to come.
_________________
Sorvani
Mon Jan 17, 2011 10:40 am
Senior Project Member
If you are having trouble getting this to display, set ShowInBackground equal to "1", there may be a bug causing it to not recognize when EQ is the foreground window.
Tue Jan 18, 2011 1:11 pm
Project Lead
I haven't tested this out; I wrote it out on paper at work. It should change a characters name based on their distance from you, from green to yellow, then to red at around 500 distance max, beyond that it should stay red.
and the same with an InZone check, they will be grey if not in zone with you.
Macro
and the same with an InZone check, they will be grey if not in zone with you.
Macro
Last edited by Maudigan on Sun Feb 20, 2011 12:29 pm; edited 1 time in total
Thu Jan 20, 2011 10:38 am
Project Lead
Setup a progress bar to show a toons distance from you:
Again, I haven't tested this but the idea is you get the distance divided by 5. So a distance of 500 would be a 100% full bar, a distance of 50 would be a 10% full bar. A distance of 1000 would be a 200% bar, the plugin will automatically truncate this down to 100 when it is parsed. If you want 100% to be 300 units away... change that 5 to a 3.
Macro
Again, I haven't tested this but the idea is you get the distance divided by 5. So a distance of 500 would be a 100% full bar, a distance of 50 would be a 10% full bar. A distance of 1000 would be a 200% bar, the plugin will automatically truncate this down to 100 when it is parsed. If you want 100% to be 300 units away... change that 5 to a 3.
Thu Jan 20, 2011 10:56 am
Project Lead
custom buttons
to customize the buttons and bars for each toon. It tooks to me like you replace [${character}] with [${toon_name}] then you type in what ever code you want in the box for example
Button2_Caption=on
Button2_CaptionColor=255 110 255 110
Button2_CaptionLeft=4
Button2_CaptionTop=3
Button2_CaptionFontSize=1
Button2_OnClick=${If[${NetBots[${toon_name}].InZone},/bct ${toon_name} //multiline ; //casting 0069 1 -maxtries|5,/popup ${toon_name} isn't in the zone]}
Button2_ToolTip=Make ${toon_name} follow me.
Button2_ToolTipColor=255 255 255 255
Button2_Top=46
Button2_Left=26
Button2_Height=15
Button2_Width=19
but i'm not sure what to put here
Button2_ToolTip=Make ${toon_name} follow me.
or what else im missing
would you then cut and past the whole file for each toon you want to customize and put them all in the same mq2emucharacters file.
to attatch a macro would you type the macro here or just the command?
Mon May 09, 2011 6:28 am
You can literally type in the toon name, or leave it as ${Character} (it's case sensitive). ${Character} is replaced by the toons name, but it is done automatically by the plugin. So you would want:
OR, if you want the plugin to handle it:
You could cut and paste all of the stuff, or individual parts. For example, if Hawkhunters's section was verbatim like the example above then only button 2 would change, and all the other buttons would inherit the old default settings.
I'm not totally sure what you mean. If you have a macro that makes your toons follow, and to initiate that action you do "/g Hawkhunter FOLLOWME!", then you would put that command on a button:
The macro otherwise runs independantly of this plugin. Think of them as just glorified hotkeys, similar to what EQ normally provides, just enhanced.
Also, you used underscores, "Button2_Caption", that was how it worked on the original release, it's been changed to "Button2.Caption" to be more similar to object oriented programming languages.
Macro
OR, if you want the plugin to handle it:
Macro
would you then cut and past the whole file for each toon you want to customize and put them all in the same mq2emucharacters file.
You could cut and paste all of the stuff, or individual parts. For example, if Hawkhunters's section was verbatim like the example above then only button 2 would change, and all the other buttons would inherit the old default settings.
to attatch a macro would you type the macro here or just the command?
I'm not totally sure what you mean. If you have a macro that makes your toons follow, and to initiate that action you do "/g Hawkhunter FOLLOWME!", then you would put that command on a button:
Macro
The macro otherwise runs independantly of this plugin. Think of them as just glorified hotkeys, similar to what EQ normally provides, just enhanced.
Also, you used underscores, "Button2_Caption", that was how it worked on the original release, it's been changed to "Button2.Caption" to be more similar to object oriented programming languages.
Mon May 09, 2011 7:42 am
Project Lead
missing UI files
i just down loaded the new gold underfoot download.
and mq2emucharacters did not display! tried the setbackground = 1
/loadskin default and a bunch of other stuff in the end i noticed that the MQUI-Master.xml file was not in the UIfile folder. so you may want to check it. I reloaded old gold underfoot and it works fine of course the master is in there.
Sat May 14, 2011 1:10 am