Prat 3.0
In loving memory of Jon Akthar (Sylvanaar)
Hello WoW community, I'm LuciferCatnip, Sylvanaar was my coworker and my mentor. It goes without saying that Jon was an amazingly talented individual. He always seemed to know everything... but he once said to me "It's not about knowing the answers, it's about asking the right questions", he always challenged me to ask me the right questions until I would arrive at the answer on my own terms. Jon was also a champion of the open source movement, and so with special thanks to Gil from Curseforge as well as Sylvanaar's family, there's no better way to honor Sylvanaar's legacy than to keep his project going strong in the community.
If you'd like to help maintain Prat, please reach out to MysticalOS or LuciferCatnip directly. Thank you so much.
About
Prat-3.0 is a chat enhancement addon for World of Warcraft.
It is made up of 30+ smaller "modules" which each provide additional functionality, and can be enabled or disabled individually.
In game, type /prat for a menu. Or use the icon on one of the many data broker hosts.
Prat has just about every feature you can think of, and then some. Really. When I get some more time, I'll try and put together a full list (Even I have lost count)
(Thanks to Dreamsight for this partial list)
- Sync your chat settings across your account (Beta)
- AI powered spam filter (Beta)
- Change arrows, buttons, mouse scroll for chat scroll, scroll speed
- you can add player color per channel, color per level, color per class
- timestamps (styled)
- whether to show timestamp (what format the timestamp should be in)
- whether to show players level
- you can select the option for channel "stickys" (last channel you used you auto use when hitting enter, that sort of thing – or last thing someone said)
- change the looks of the chat's editbox - as well as where it appears (you can even undock it and move it to where you'd like it to be)
- chat fading, fading delay
- You can change the font to a list of fonts, add an outline to it, monochrome it (if you don’t mind messing with files a bit you could probably even add other fonts to that list)
- change the chat frame/chat box appearance
- Keep chat history between game sessions
- Set channel abbreviations
- set brackets and color(or something instead of brackets)round player/lvl
- alt invite option (press keyboard “alt” button and click on the player’s name to auto inv them)
- raid icon
- invite links - click them to invite the person
- URL copying
- Full chat copying + copy button
- Click timestamp to copy line
- Configurable alerts when your name or other word is mentioned
- enables tell target /tt which whispers your target
- Alias options - make macros into short commands
- See names of players Alt characters
- change chat sounds (incoming and outgoing as well as per channel)
- Achievements info and grats
- Full chat search and search box
- Customizable filters for advanced users
- Show item icon next to item links and player class icon next to player names
- Icon-only options for newcomers chat
- Optional flashing or font color change for chat tabs when a new message comes in.
You can enable/disable all Prat modules - don't have to have the ones you don't use running
While trying to reduce resource utilization, it is also important to note that some people prefer the features, and don't care that an addon uses 500k more.
sod update 5 lua error on login
2x ...Blizzard_ChatFrameBase/Classic/FloatingChatFrame.lua:975: attempt to index local 'self' (a nil value)
[string "@Blizzard_ChatFrameBase/Classic/FloatingChatFrame.lua"]:975: in function <...Blizzard_ChatFrameBase/Classic/FloatingChatFrame.lua:970>
[string "=[C]"]: in function `FCF_SetChatWindowFontSize'
[string "@Prat-3.0-3.9.58/modules/Font.lua"]:765: in function `SetFontSize'
[string "@Prat-3.0-3.9.58/modules/Font.lua"]:753: in function `ConfigureAllChatFrames'
[string "@Prat-3.0-3.9.58/modules/ChatFrames.lua"]:636: in function <Prat-3.0/modules/ChatFrames.lua:630>
[string "=(tail call)"]: ?
[string "=[C]"]: in function `FloatingChatFrame_UpdateBackgroundAnchors'
[string "@Blizzard_CombatLog/Classic/Blizzard_CombatLog.lua"]:3345: in function <...ns/Blizzard_CombatLog/Classic/Blizzard_CombatLog.lua:3331>
[string "@Blizzard_CombatLog/Classic/Blizzard_CombatLog.lua"]:3399: in function `FCF_DockUpdate'
[string "@Blizzard_UIParentPanelManager/Classic/UIParentPanelManager_Shared.lua"]:1039: in function `UIParentManageFramePositions'
[string "@Blizzard_UIParentPanelManager/Classic/UIParentPanelManager_Shared.lua"]:328: in function <...PanelManager/Classic/UIParentPanelManager_Shared.lua:315>
[string "=[C]"]: in function `SetAttribute'
Editbox goes back to it's default position after rl/restart. I can make it go back to the position I set it in by setting it to another mode and settings it back to freefloat locked but it's annoying AF to do every time.
I'm having an issue where Prat doesn't remember the settings for a tab I created. I made a tab for party/raid/instance and any time I log out, switch characters or reload my ui the tab defaults to a state where it those chat types aren't shown. Am I missing a setting somewhere? Please help.
Please tell me how can I disable chat tab flashing on certain tabs and how to add a possibility for a whisper tab. Been looking for settings for around 15 minutes and cannot find anything.
Could use a small update to include player levels above 70 for WW. Shift-clicking will display the correct level, but not in front of their names by default.
Why is my name green? And why is there no option anywhere to change that?
Is there a way to use the search function to look for only posts made by myself? or by usename? I tried to do this using just the first three letters of my toon's name (Jor) and it found 1 entry by another user named Jorvic but nothing by me. Unsure how this is supposed to work but a filter for just things I have said and no one else would be rad. Getting a random warning from blizzard about conduct on the game when I havent said anything i could see as warranting it is just baffling. If I could pull up what I alone said I could at least figure out what might have been the post.
Is there a way to save the positions of the various chat windows I have pulled out and use those locations on other characters? It seems that window position remains defined per-character no matter what I do. I'd like to move a window (not the default wow chat window) and then have it moved on all of my other characters too.
The latest version continues with the problems with the text scale, it continues to reset to scale 12 in any situation (opening a whisper, /reload, entering another character, etc).
feature request- a chat timeout timer, for channels that have one so we know when we can type again. yeah, I know but still would be neat! XD
62x Prat-3.0-3.9.55/modules/PlayerNames.lua:1366: attempt to index local 'Name' (a nil value)
[string "@Prat-3.0-3.9.55/modules/PlayerNames.lua"]:1366: in function `?'
Locals:
self = <table> {
modules = <table> {
}
Classes = <table> {
}
defaultModuleState = true
Subgroups = <table> {
}
hooks = <table> {
}
db = <table> {
}
enabledState = true
PL = <table> {
}
defaultModuleLibraries = <table> {
}
pluginopts = <table> {
}
NEEDS_INIT = true
baseName = "Prat-3.0"
name = "Prat_PlayerNames"
orderedModules = <table> {
}
Levels = <table> {
}
moduleName = "PlayerNames"
}
Name = nil
Class = nil
Level = nil
_ = nil
(for index) = 1
(for limit) = 244
(for step) = 1
i = 1
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = "attempt to index local 'Name' (a nil value)"
In reply to cpljaide: getting the same error here as well
78x Prat-3.0-3.9.55/modules/PlayerNames.lua:1366: attempt to index local 'Name' (a nil value)
[string "@Prat-3.0-3.9.55/modules/PlayerNames.lua"]:1366: in function `?'
[string "@Altoholic/Libs/CallbackHandler-1.0-8/CallbackHandler-1.0.lua"]:109: in function <...lic/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua:109>
[string "=[C]"]: ?
[string "@Altoholic/Libs/CallbackHandler-1.0-8/CallbackHandler-1.0.lua"]:19: in function <...lic/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua:15>
[string "@Altoholic/Libs/CallbackHandler-1.0-8/CallbackHandler-1.0.lua"]:54: in function `Fire'
[string "@Scrap/libs/AceEvent-3.0-4/AceEvent-3.0.lua"]:120: in function <...faceScrap/libs/AceEvent-3.0/AceEvent-3.0.lua:119>
Locals:
self = <table> {
modules = <table> {
}
Classes = <table> {
}
defaultModuleState = true
Subgroups = <table> {
}
hooks = <table> {
}
db = <table> {
}
enabledState = true
PL = <table> {
}
defaultModuleLibraries = <table> {
}
pluginopts = <table> {
}
baseName = "Prat-3.0"
name = "Prat_PlayerNames"
orderedModules = <table> {
}
Levels = <table> {
}
moduleName = "PlayerNames"
}
Name = nil
Class = nil
Level = nil
_ = nil
(for index) = 1
(for limit) = 962
(for step) = 1
i = 1
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = "attempt to index local 'Name' (a nil value)"
Hi,
First of all, great addon!
I am playing WoW Classic Era Version 1.15.3.
Is it possible to only display the "Show Social Menu" Button under "Buttons" without needing to also "Show Arrows"?
Additionally it would be awesome if you could move the "Show Social Menu" Button along the chat frame to the desired position.
Would be awesome.
Thanks a lot in advance!
Hello.
Is there any fix for scaling text itself ? I set 14 and still getting 12 in my party window.
Thanks
Czecher
The latest retail version (3.9.55) can throw an error in the PlayerNames module:
```
PlayerNames.lua:1366: attempt to index local 'Name' (a nil value)
```
As a simple fix, I added a nil check to updateGuild:
```
function module:updateGuild()
if IsInGuild() then
self.GuildRoster()
local Name, Class, Level, _
for i = 1, GetNumGuildMembers(true) do
Name, _, _, Level, _, _, _, _, _, _, Class = GetGuildRosterInfo(i)
if Name ~= nil then
local plr, svr = Name:match("([^%-]+)%-?(.*)")
self:addName(plr, nil, Class, Level, nil, "GUILD")
self:addName(plr, svr, Class, Level, nil, "GUILD")
end
end
end
end
```
In reply to ratbastaayyyyy: Thank you very much.
Right now the text scaling resets every time you do /reload, enter a new character, open a new whisper, etc, it's honestly quite annoying.
hello reporting, i am getting this Lua error
1x ...Blizzard_ChatFrameBase/Classic/FloatingChatFrame.lua:973: attempt to index local 'self' (a nil value)
[string "@Blizzard_ChatFrameBase/Classic/FloatingChatFrame.lua"]:973: in function <...Blizzard_ChatFrameBase/Classic/FloatingChatFrame.lua:968>
[string "=[C]"]: in function `FCF_SetChatWindowFontSize'
[string "@Prat-3.0-3.9.54/modules/Font.lua"]:765: in function `SetFontSize'
[string "@Prat-3.0-3.9.54/modules/Font.lua"]:753: in function `ConfigureAllChatFrames'
[string "@Prat-3.0-3.9.54/modules/ChatFrames.lua"]:636: in function <Prat-3.0/modules/ChatFrames.lua:630>
[string "=(tail call)"]: ?
[string "=[C]"]: ?
[string "=[C]"]: in function `FloatingChatFrame_UpdateBackgroundAnchors'
[string "@Blizzard_CombatLog/Wrath/Blizzard_CombatLog.lua"]:3349: in function <...dOns/Blizzard_CombatLog/Wrath/Blizzard_CombatLog.lua:3335>
[string "@Blizzard_CombatLog/Wrath/Blizzard_CombatLog.lua"]:3404: in function `FCF_DockUpdate'
[string "@Blizzard_UIParentPanelManager/Classic/UIParentPanelManager_Shared.lua"]:1039: in function `UIParentManageFramePositions'
[string "@Blizzard_UIParentPanelManager/Classic/UIParentPanelManager_Shared.lua"]:328: in function <...PanelManager/Classic/UIParentPanelManager_Shared.lua:315>
[string "=[C]"]: in function `SetAttribute'
[string "@Blizzard_UIParentPanelManager/Classic/UIParentPanelManager_Shared.lua"]:1049: in function `UIParent_ManageFramePositions'
[string "@Blizzard_BuffFrame/Classic/BuffFrame.lua"]:379: in function `BuffFrame_UpdateAllBuffAnchors'
[string "@Blizzard_BuffFrame/Classic/BuffFrame.lua"]:120: in function `BuffFrame_Update'
[string "@Blizzard_SettingsDefinitions_Frame/Classic/InterfaceOverrides.lua"]:103: in function <...ingsDefinitions_Frame/Classic/InterfaceOverrides.lua:102>
[string "=[C]"]: ?
[string "@Blizzard_SharedXML/CallbackRegistry.lua"]:178: in function <...rfaceBlizzard_SharedXML/CallbackRegistry.lua:177>
[string "=[C]"]: ?
[string "@Blizzard_SharedXML/CallbackRegistry.lua"]:181: in function `TriggerEvent'
[string "@Blizzard_SharedXML/CvarUtil.lua"]:114: in function <Blizzard_SharedXML/CvarUtil.lua:106>
Locals:
self = nil
chatFrame = ChatFrame3 {
onDisplayRefreshedCallbacks = <table> {
}
RefreshIfNecessary = <function> defined =[C]:-1
OnPostShow = <function> defined =[C]:-1
CalculateLineAlphaValueFromTimestamp = <function> defined =[C]:-1
isLayoutDirty = true
oldestFadingLineTimestamp = 203251.464000
tellTimer = 203251.464000
isDisplayDirty = true
GetFading = <function> defined =[C]:-1
IsTextCopyable = <function> defined =[C]:-1
shouldFadeAfterInactivity = true
SetIndentedWordWrap = <function> defined =[C]:-1
GetJustifyV = <function> defined =[C]:-1
SetFont = <function> defined =[C]:-1
GetMaxLines = <function> defined =[C]:-1
GetIndentedWordWrap = <function> defined =[C]:-1
buttonSide = "left"
GetFont = <function> defined =[C]:-1
SetMaxLines = <function> defined =[C]:-1
CalculateSelectingCharacterIndicesForVisibleLine = <function> defined =[C]:-1
PageUp = <function> defined =[C]:-1
RefreshDisplay = <function> defined =[C]:-1
SetFontObject = <function> defined =[C]:-1
textIsCopyable = false
SetOnScrollChangedCallback = <function> defined =[C]:-1
CalculateNumVisibleLines = <function> defined =[C]:-1
overrideFadeTimestamp = 0
MarkDisplayDirty = <function> defined =[C]:-1
GetMessageInfo = <function> defined =[C]:-1
GetOnScrollChangedCallback = <function> defined =[C]:-1
AtTop = <function> defined =[C]:-1
GetFontObject = <function> defined =[C]:-1
fontStringPool = <table> {
}
CanEffectivelyFade = <function> defined =[C]:-1
print = <function> defined @Prat-3.0/services/print.lua:47
OnPreSizeChanged = <function> defined =[C]:-1
GetScrollOffset = <function> defined =[C]:-1
GetSpacing = <function> defined =[C]:-1
OnPreLoad = <function> defined =[C]:-1
SetSpacing = <function> defined =[C]:-1
name = "Voice"
CalculateLineSpacing = <function> defined =[C]:-1
AddMessage = <function> defined =[C]:-1
InitializeFontableFrame = <function> defined =[C]:-1
GetShadowColor = <function> defined =[C]:-1
isUninteractable = false
SetOnTextCopiedCallback = <function> defined =[C]:-1
originalShow = <function> defined =[C]:-1
AcquireFontString = <function> defined =[C]:-1
minimizeButton = ChatFrame3MinimizeButton {
}
TransformMessages = <function> defined =[C]:-1
AtBottom = <function> defined =[C]:-1
buttonFrame = ChatFrame3ButtonFrame {
}
HasFontObject = <function> defined =[C]:-1
GetOnTextCopiedCallback = <function> defined =[C]:-1
SetFading = <function> defined =[C]:-1
OnPostHide = <function> defined =[C]:-1
alternativeDefaultLanguage = "Orcish"
isInitialized = 1
ScrollByAmount = <function> defined =[C]:-1
GetInsertMode = <function> defined =[C]:-1
SetTimeVisible = <function> defined =[C]:-1
hasOwnFontObject = true
Clear = <function> defined =[C]:-1
oldAlpha = 0
channelList = <table> {
}
GetTimeVisible = <function> defined =[C]:-1
MarkLayoutDirty = <function> defined =[C]:-1
AddOnDisplayRefreshedCallback = <function> defined =[C]:-1
SetTextCopyable = <function> defined =[C]:-1
Show = <function> defined @Blizzard_FrameXMLBase/Classic/FrameLocks.lua:135
BackFillMessage = <function> defined =[C]:-1
UnpackageEntry = <function> defined =[C]:-1
FontStringContainer = Frame {
}
SetShadowOffset = <function> defined =[C]:-1
messageTypeList = <table> {
}
flashTimer = 0
timeVisibleSecs = 60
PackageEntry = <function> defined =[C]:-1
MakeFontObjectCustom = <function> defined =[C]:-1
fontObject = table: 000001E75E420310 {
}
SetInsertMode = <function> defined =[C]:-1
originalHide = <function> defined =[C]:-1
ScrollDown = <function> defined =[C]:-1
zoneChannelList = <table> {
}
SetScrollOffset = <function> defined =[C]:-1
insertMode = 2
ResetSelectingText = <function> defined =[C]:-1
Hide = <function> defined @Blizzard_FrameXMLBase/Classic/FrameLocks.lua:131
GetTextColor = <function> defined =[C]:-1
defaultLanguage = "Orcish"
CallOnDisplayRefreshed = <function> defined =[C]:-1
dbg = <function> defined @Prat-3.0/services/print.lua:51
customEventHandler = <function> defined @Blizzard_Ch
First off, great addon. Thank you!
I have a question: I can't seem to get the chatframe to have colors and be interactive, like shown in image #7 of the screenshots. My regulard chat windows are fine and have the features that Prat adds (e.g. copy URL). However, the chatframe (the pop-up where you can see history) is just plain white text on dark backgroun. I can't seem to make it color-coded. Is there an option to turn that on?
Also, is there a way to open chatframe for whispers that were closed? I used to use elephant. It has a list of tabs for each type of chat (instance, guild, whisper, etc.) that you can go to see chat history of a specific type. Is there something like that in Prat?
Any help is greatly appreciated. Thank you!
is there a way to filter loot in chat, make it that i see only what i loot, not the entire raid?