Instructions:
-
Project 1999: Download Windows P99, Unzip it and run EQTool.exe
-
Linux Project 1999 Download Linux P99, Unzip it and run EQTool.exe
- The program runs in the system tray. Look there to reopen spells window or settings! Program will check for updates on startup and self update if required, but if you want to check for a new Update, use the menu in the system tray!
- User Defined Triggers are now supported!
- p99 middlemand ported from https://github.com/Zaela/p99-login-middlemand is now supported!
- Random rolls show up in the triggers window.
- See others on the map in real time. Also support for NParse map location sharing automatically if location sharing is set to everyone.
- Kael faction pull timer Automatically added for everyone regardless of what zone you are in.
- Kill timer detection: When you kill a mob sometimes you miss the slain message. Now, when you miss the slain message, if you get either an exp message or a faction message a timer will appear correctly. Since it is unknown what the name of the mob is that died when you received a faction message only, the name of the timer is 'Faction Slain Guess' and 'Experience Slain Guess'.
- Detect EQ directory location instead of user required to enter it.
- Detect Spells cast on others (this is a best guess as I am reading the log file so chloroplast and Regrowth of the growth have the same message)
- Filter spells show by class
- Remove Spells from List if "Worn off message occurs"
- Mob Info Window gives details about mobs that you con in game.
- Automatically remove dead npc/player from the spell list.
- Auto detect level and class!
- DPS is trailing 12 second average.
- Show fight Session data for comparisons.
- The following spells have counters that are automatically tracked:
Mana Seive
LowerElement (Flux Staff Effect)
Concussion
Flame Lick
Cinder Jolt
Jolt. - The following Audio/Visual alerts are available:
Enrage
Levitate fading
invis fading
FTE
Charm Break
Failed Feign
Group Invite
Dragon Roar
Root Break
Resists
and CH CHain - Timers on map for easy TOD tracking!
- All Melee disciplines show in the cooldown section of the timers window.
- Pricing information in Mob info window.
- Save spells cast on you when you log out so when you log back in they resume counter!
- Raid Mod Detection: When the program detects that you are in a raid, the triggers window gets slimmed down. It will switch to show information specific to your class. For example, if you are a cleric, it will only show buffs that clerics can cast on others and your buffs. This makes the window actually useful on raids now. When raid mode is detected, the color of the triggers window switches to red indicated it is on. There is a checkbox in the settings window to disable this functionality.
- Maps
- Automatic self update.
- Automatic self update.
- Custom Map loading: If you have a folder called maps this will be checked for map files first. If no map files are found, the program will fallback to the built in map files. You can add your overrides for zone files. If you are making changes, you need to clear the cache files. There is a button in the settings -> map tab to clear these. Or you can delete the cachemaps folder.
- Custom Timers
- TAG is optional and can be used to filter out other chains that are going on. For example, if you TAG is CA, it will only show chains that have that TAG in it.
- POSITION must be 3 in length (Unless Ramp chain, in which case code looks for RAMP[NUMBER]), and follow a format of: 001-999; or AAA-ZZZ
- The characters " ch " must be present in the line, capitalization doesnt matter.
- All instances of TAG are stripped out of text. The characters " ch " are stripped out. The first group of 3 characters that are either all the same letter or a number are assigned as the position.
- All instances of Position are stripped out of the text. All non alphanumeric are stripped out of the text. What remains is the target.
Chain position MUST BE 3 in length and letters must all be the same, for example: 001; or 013; or aaa; or QQQ.
Ramp chain format is special and RAMP1 through RAMP999 are allowed. The following are included in tests that are supported, This is not all the possible ways, but to show examples of what i have support for!
- Curaja shouts, 'GG 014 CH -- Wreckognize'
- Hanbox shouts, 'GG 001 CH -- Beefwich'
- Hanbox shouts, 'GG 001 CH --Beefwich'
- Hanbox shouts, 'GG 001 CH --Beefwich 001'
- Wartburg says out of character, 'CA 004 CH -- Sam'
- Wartburg says out of character, '004 CH - Sam'
- Hanbox tells the guild, 'GG 001 CH --Beefwich'
- You say out of character, 'CA 002 CH -- Aaryk'
- Windarie auctions, '111 --- CH << Mandair >> --- 111'
- Mutao auctions, '777 CH <>> Mandair <<> 777'
- Mutao auctions, 'AAA CH <>> Mandair <<> AAA'
- Mutao auctions, 'GGG AAA CH <>> Mandair <<> AAA'
- Mutao auctions, 'BBB CH <>> Mandair <<> BB'
- Mutao auctions, 'AAA CH <>> Mandair <<>'
- Hanbox shouts, 'CA RAMP1 CH --Beefwich'
- Hanbox shouts, 'RAMP2 CH --Beefwich'
- Hanbox shouts, 'CH - name - 001'
- PigParse now has the ability to accept user-defined triggers for text and audible alerts!
- The triggers are maintained in text file "UserTriggers.txt"
- "UserTriggers.txt" is located in whatever directory "EqTool.exe" was installed in.
- PigParse will auto-create that file if it is not present, with some handy starter kit triggers
#
# comment line: hashtag # in first column
# field separator symbol: semi-colon ;
#
# fields:
# triggerID int unique value for this trigger
# triggerEnabled int 1/0 boolean enable/disable this trigger
# triggerName string descriptive name
# searchText string pattern to match (can be regular expression)
# textEnabled int 1/0 boolean enable/disable text alerts
# displayText string text to be displayed when this trigger finds a matching line in the log
# audioEnabled int 1/0 boolean enable/disable audible text-to-speech alerts
# audioText string text to be spoken when this trigger finds a matching line in the log
#
# triggerID;triggerEnabled;triggerName;searchText;textEnabled;displayText;audioEnabled;audioText
#
100;1;Spell Interrupted;^Your spell is interrupted.;1;Spell Interrupted;1;Interrupted
101;1;Spell Fizzle;^Your spell fizzles!;1;Spell Fizzles;1;Fizzle
This file can be edited as desired. What if you don't wish to receive the audio alert when you experience a spell fizzle? Simple, edit the file, find the line for "Spell Fizzle", and change the 1 in the "audioEnabled" field (the 7th one) to a 0. Example:
101;1;Spell Fizzle;^Your spell fizzles!;1;Spell Fizzles;0;Fizzle
Or if you just wish to disable that entire trigger, you could change the 1 in the "triggerEnabled" field (the 2nd one) to a 0:
101;0;Spell Fizzle;^Your spell fizzles!;1;Spell Fizzles;1;Fizzle
The real utility from this feature comes with the ability to add your own triggers. Let's say you have a good friend, Brad, who you would like to be sure you get an extra alert any time Brad sends you a tell.
Brad tells you,'Let's camp the birds in SK'
You could edit the "UserTriggers.txt" file, and add a new trigger that might look like this:
1000;1;Brad;Brad tells you;1;Brad wants something;1;Brad tell
Now, any time the phrase "Brad tells you" shows up in the log file, you will get a text alert saying "Brad wants something" as well as a text-to-speech audible alert of "Brad tell". Note that there is nothing magic about the value in that first "triggerID" field, other than it should be a unique number from the other triggers.
Let's do a more complex example. Suppose you are a wily enchanter who likes to charm backstabbing mobs for added DPS, and you'd like to set up an alert for mobs that are backstabbing, so you can identify then charm them. Actually, it turns out that there is already just such a trigger in the starter kit set of triggers, but let's pretend that isn't true, and create one as a learning example.
Here's a sample line from the log file:
An undead barkeep backstabs YOU for 145 points of damage.
Let's set up a trigger for that line. Our first problem, how to set up a trigger that will match that line, regardless of who is doing the backstabbing, who is getting backstabbed, and for how many points of damage? To answer that, we need to create some general pattern-matching text. PigParse understands and uses the full set of regular expressions for searching text, and if you happen to know and understand regular expressions, you can absolutely key them into the search field and it will work. But real regular expressions can be less than user-friendly, so let's make use of PigParse simplified regular expression capability. It is best shown with an example:
Line from the log file: An undead barkeep backstabs YOU for 145 points of damage.
searchText that will match: {backstabber} backstabs {target} for {damage} points of damage.
Now let's edit "UserTriggers.txt" and add our new trigger. Note that the simplified regular expression fields can also be used in the text and audible alerts:
1002;1;Backstabber;^{backstabber} backstabs {target} for {damage} points of damage.;1;Backstabber = {backstabber};1;Backstabber
-
All below commands work in tells (keep them private!) or regular say (share with your friends!)
/t PigTimer-duration
/t PigTimer-duration-label
or
/say PigTimer-duration
/say PigTimer-duration-label
where
"PigTimer" is the identifying marker
"duration" can be in time formats:
hh:mm:ss
mm:ss
seconds
"label" can contain any character, number, or underscore, but cannot have blank spaces
"PigTimer", "duration", and "label" should be separated by a - dash
This can be in a tell (that only you will see), or in any visible channel (which others see).
Examples:
PigTimer-30 30 second timer, with no label
PigTimer-10-TenSeconds 10 second timer, with label
PigTimer-10:00-TenMinutes 10 minute timer, with label
PigTimer-10:00:00-TenHours 10 hour timer, with label
PigTimer-120-description 120 second timer, with label 'description'
PigTimer-6:40-Guard_George 6 minutes 40 second timer, with label 'Guard_George'
PigTimer-1:02:00-LongTimer 1 hour, 2 minute timer, with label 'LongTimer'
- Ignore it and download!
- Press More info and "Run anyway"
- In the above image, you are running the exe from INSIDE the zip. You must first EXTRACT the exe, then you can run it!
- EQTool was unable to automatically detect your P99 install folder. You must specify it yourself!
- EQTool detected that eq logging is turned off. You must click enable logging. This will turn on EQ's logging which is where EQTool gets information from.
- If you cast spells eqtool will automatically detect your class and level once you start casting spells.
- You should still enter your class and level. It helps ensure calculations on spell durations are accurate.
- Great, goto settings and make sure the box is checked; 'Only show spells that effect you'.
- Great, goto settings and make sure that cleric is the only class selected in the "Other Spells" section.
- You need to type /loc into chat so that your location is feed to the log file.
- Normally, players create a hotkey that is bound to their movement keys. Then add a /loc so that each time you move, the macro for /loc is called.
- I set up my movement keys 'a' and 'd' to activate my hotbar 1 macro which has a /loc in it.
- Goto the system tray, click the pig icon and goto check for updates.
- Updates are checked for every timee the application starts as well.
- If an update is available it will download and start the new version. The old version will be deleted.
- This program reads your log file. So, if you were too far away to see the 'slain' message, then there is no way for EQTool to know the npc is dead.
Why do the see spell effects for others even though I checked the box 'Only show spells that effect you?'
- EQTool will ALWAYS show detrimental spell effects on everyone. The reason is that EQTool CANNOT tell the difference between an NPC and a PC. This means that in order to show spell effects on NPC, like slow/tash, etc, i must show ALL detrimental spell effects on all NPS/PC alike.
- This can happen for many reasons. The most common being that they left the group and you want to remove them from the list.
- Click the Trashcan next to the next and that NPC/Player will be removed from the list. This is a one-time action and if you cast on them again, they will reappear.
- Every time a message for the enchanter Mana sieve spell is encountered, the counter is incremented.
- So, if you are in range of the sieve messages, you will have an accurate count in the Trigger list.
- The first row is the saved fight data which shows all-time-best DPS, Biggest hit and Total Damage.
- Current Session is best DPS, Biggest hit and Total Damage, except the timeframe starts since you have logged on.
- Last Session is the old session data. You can use this to compare weapon swapping and differnt setups.
- Turn on others hits in your eqsettings!
- Right click in the map and a menu will appear, add the time, and press add.
- You can move the timer around by dragging it.
- You can delete the timer by right clicking over it and clicking the delete option.
- Timer color starts at Green and changes to Red the closer it gets to zero time remaining. Timers will last for 4 minutes after the time has expired then automatically remove themselves.