Go to Page... |
Compatibility: | Endless Archive (9.2.5) base-game patch (9.1.5) |
Updated: | 10/29/23 01:07 PM |
Created: | 11/03/15 08:20 PM |
Monthly downloads: | 8,311 |
Total downloads: | 1,080,175 |
Favorites: | 694 |
MD5: |
Developers.What does it do?
Allows you to add messages to the games notification area.
How do I use it?
Register the library in your code file:How do I create a Message?
Lua Code:
local libNotification = LibNotification
After your addon is initialized call the libraries CreateProvider() function.
Lua Code:
local provider = libNotification:CreateProvider()
The provider will have a notifications table. This is where you put your messages.
Lua Code:
provider.notifications
Other Information
Messages need to be written in a certain format, the following is an example:
Warning: Spoiler
Lua Code:
local msg = { dataType = NOTIFICATIONS_ALERT_DATA, secsSinceRequest = ZO_NormalizeSecondsSince(0), note = "Use it wisely", message = "Add custom notification messages", heading = "LibNotifications", texture = "/esoui/art/miscellaneous/eso_icon_warning.dds", shortDisplayText = "Custom Notification", controlsOwnSounds = true, keyboardAcceptCallback = OnKeyboardAccept, keyboardDeclineCallback = OnKeyboardDecline, gamepadAcceptCallback = OnGamepadAccept, gamepadDeclineCallback = OnGamepadDecline, data = {}, -- Place any custom data you want to store here }
So what do all of those keys do?
dataType's and what buttons are available with them:
NOTIFICATIONS_REQUEST_DATA -- note, accept (checkmark), & decline (x) buttons
NOTIFICATIONS_WAITING_DATA -- shows a spinning wheel (no message text, note, accept, or decline)
NOTIFICATIONS_ALERT_DATA -- note & delete (x) buttons
secsSinceRequest: Is used for sorting the notifications (in descending order). You should use ZO_NormalizeSecondsSince(0), which is the seconds since login. This will keep the notifications in order, newest notifications on top. Note since it sorts in descending order the keyName is misleading. Its not really the seconds since request, ZOS named it, not me.
note: In keyboard mode this is the tooltip text for the note button. If you leave out the note, the note button will be hidden automatically. In gamepad mode it is just displayed as text after the message. See gamepad picture for an example.
message: The message text to be displayed.
heading: In keyboard mode this is the heading text to be displayed (next to the icon). In gamepad mode this is used as a category header for all messages displayed by your provider. See gamepad picture for an example. *Warning: You can NOT display more than one heading/category at a time in gamepad mode (without creating multiple providers). In gamepad mode the category heading will be named after this key/value from the FIRST msg in your list. Changing the heading name on other messages in your notifications table will do nothing, unless you delete the first message and some other message becomes the first in the list. Then that heading will be used. This is not my doing, this is the way ZOS wrote the gamepad notification system.
texture: The texture to be displayed. In keyboard mode it is 32 x 32.
shortDisplayText: Only used in gamepad mode. This is the text that is displayed under the category/heading, next to the texture, for your message. See gamepad picture for an example.
controlsOwnSounds: When false the game will automatically play the SOUNDS.ACCEPT, SOUNDS.DECLINE sounds when the buttons are clicked. When set to true no sounds will be played so that you can play your own click sounds.
The reason for separate keyboard/gamepad callbacks is because sometimes different code needs to be run for keyboard/gamepad mode. If your code can use the same callback for both just set the keyboard/gamepad callbacks to the same callback function.
keyboardAcceptCallback: Accept callback function for keyboard mode.
keyboardDeclineCallback: Decline callback function for keyboard mode.
gamepadAcceptCallback: Accept callback function for gamepad mode.
gamepadDeclineCallback: Decline callback function for gamepad mode.
data = {} There are other key/value pairs that are used by the game inside the message table. To avoid interfering with key names used by the game place any custom data you want to store with your message in this table.
Create your messages and add them to your provider notifications table:
It is up to you to add & remove your messages from the notifications table when you are done with them.Lua Code:
table.insert(provider.notifications, msg)
WARNING:
The table must be numerically indexed & there can be no missing indices. I recommend using table.insert() & table.remove() for adding/removing messages
After you are done making changes Adding/Removing messages, call the update function:
Lua Code:
provider:UpdateNotifications()Try not to call this anymore than necessary.
It fires off ALL of the BuildNotificationList functions for every notification provider in the game!
Just In case anyone needs to know for creating/selecting icons. The icon on the keyboard rowControl is 32 x 32.
The code can be found on github: https://github.com/sirinsidiator/ESO-LibNotification.
r10--
- removed LibStub support
- switched to semantic versioning
- updated for Secret of the Telvanni
r9--
- fixed incorrect string id for gamepad notification header (Thanks ZOSDanBatson!)
- updated for Markarth
r8--
- added LICENSE and put the code on github
r7--
- updated for Harrowstorm and Greymoor
- added a second global variable "LibNotification" to match the ingame addon name
r6--
- updated for Dragonhold
- made LibStub dependency optional (it's now recommended to use the LibNotifications global variable to access it)
- fixed typo in "keyboardDeclineCallback" (was "keybaordDeclineCallback" before. The incorrect spelling still works, but I recommend you fix it in your addons!)
- added IsLibrary flag to manifest
r5--
- updated for Murkmire
- switched to standalone package structure (developers: make sure you remove it from the manifest and change to DependsOn!)
- permanently fixed the errors that occur when ZOS adds new notification types (thanks Chip for making these tables global!)
r4--
- updated for Summerset
r3--
- updated for Morrowind
r2--
- updated for Homestead
Version 1.2--
- updated for Dark Brotherhood
- gamepad support seems to be broken and will be updated in a future version
Gamepad Support Added
WARNING: In order to add support for notifications in gamepad mode the entire library was rewritten. There have been some changes to the required structure of the message table. Please read the new instructions for creating a message table on the addons main page.
WARNING: To avoid errors if you wish to store extra data with your message store all of your custom data in a data table inside the message table. Read the new instructions for creating a message table on the addons main page.
File Name |
Version |
Size |
Uploader |
Date |
10 |
5kB |
sirinsidiator |
12/23/20 10:47 AM |
|
9 |
5kB |
sirinsidiator |
05/28/20 03:16 PM |
|
8 |
2kB |
sirinsidiator |
04/24/20 03:16 PM |
|
7 |
2kB |
sirinsidiator |
09/29/19 02:43 PM |
|
6 |
2kB |
sirinsidiator |
09/22/18 12:28 PM |
|
5 |
4kB |
sirinsidiator |
05/21/18 02:39 AM |
|
4 |
4kB |
sirinsidiator |
05/23/17 02:25 AM |
|
3 |
4kB |
sirinsidiator |
02/14/17 11:15 AM |
|
2 |
4kB |
sirinsidiator |
06/11/16 01:58 AM |
|
1.2 |
2kB |
circonian |
11/06/15 09:17 PM |
|
1.1 |
1kB |
circonian |
11/04/15 07:39 PM |
|
1.0 |
1kB |
circonian |
11/03/15 08:20 PM |
Comment Options |
11/04/15, 02:49 AM | |
Minor issue
Ok, here's a minor bug/imperfection I found so far :
When there is no acceptCallback or declineCallback function defined it correctly hides the relative button, but the keybind options are still displayed and working. Edit: data.index on line 17 seems to be nil always. Is that code junk from a previous version or something that is necessary for specific cases? I thought I could use it in the callback functions to remove the correct notification. Edit 2: Here's (probably) the first add-on using this library: Friend Removed Notification
Last edited by CaptainBlagbird : 11/04/15 at 05:10 PM.
|
|
|
CaptainBlagbird |
View Public Profile |
Send a private message to CaptainBlagbird |
Find More Posts by CaptainBlagbird |
Add CaptainBlagbird to Your Buddy List |
circonian |
View Public Profile |
Send a private message to circonian |
Send email to circonian |
Find More Posts by circonian |
Add circonian to Your Buddy List |
11/04/15, 07:53 PM | ||
|
Re: Minor issue
|
|
|
circonian |
View Public Profile |
Send a private message to circonian |
Send email to circonian |
Find More Posts by circonian |
Add circonian to Your Buddy List |
11/05/15, 01:53 AM | |||
Re: Re: Minor issue
Example with 5 notifications (1=first added notification, 5=last): Visual order: 3 4 1 2 5 (top to bottom) Order of the controls (ZO_NotificationsList347Row*): 3 1 4 2 5 (top to bottom) Example with 2 notifications (1=first added notification, 2=second): Visual order: 1 2 (top to bottom) Order of the controls (ZO_NotificationsList347Row*): 1 3 (top to bottom) I don't know if Zenimax does this for a reason, or if they have a bug in their code..
EDIT Noticed another bug: When there are already custom notifications pending and an official notification is added (only tested with guild MotD), then the number near the icon in the chat window is reset to 1 (or probably as many official notifications as added). When a new custom one then is added the number is again displayed correctly. But on removing an official notification, it is again wrongly 0. Also when there are both custom and official notifications (only tested with guild MotD) and any notification is removed, the notification-added-sound is played (probably because the notifications are added again in BuildNotificationList())
Last edited by CaptainBlagbird : 11/05/15 at 04:12 AM.
|
|||
|
CaptainBlagbird |
View Public Profile |
Send a private message to CaptainBlagbird |
Send email to CaptainBlagbird |
Find More Posts by CaptainBlagbird |
Add CaptainBlagbird to Your Buddy List |
11/05/15, 02:36 AM | |
|
This is awesome! Thanks circonian and all the others who tested and invented the idea (@CaptainBlagbird e.g.).
It will help to keep messages clear in the notification area without spamming the game too much with onscreen messages (in some cases like friends addons, guild addons, etc.). Especially the callback functions will help to "show the error place/react on the particular case directly" and I like this a lot as you could "collect some messages" and work on them later on (after you finished your current dungeon e.g.). I'll try it out, thanks again.
Last edited by Baertram : 11/05/15 at 02:36 AM.
|
|
Baertram |
View Public Profile |
Send a private message to Baertram |
Send email to Baertram |
Find More Posts by Baertram |
Add Baertram to Your Buddy List |
11/05/15, 04:06 PM | ||||
|
Re: Re: Re: Minor issue
Lua Code:
However, if you add more than one message at the same time the precision is not great enough to keep them in the proper sort order, so keep that in mind. As for the control number, you can never count on (know) what that number will be. The controls come from a virtual control pool. When a row control is needed it checks the pool. If a free control exists it grabs it, if not it creates a new one. When your done with a control it gets released back into the pool. When a new one is needed it grabs one from the free pool (or creates another if there is no free control), exc...exc.... For this reason the order/number of the controls that you will get is not possible to determine. The number for the control you will get is based off of whichever controls are free. This way the game does not have to keep creating new controls for every single notification. The game does the same with a lot of controls. WARNING: This also means DO NOT modify any part of the row control object or save anything to it (like rowControl.xxxx). If you do those changes will remain every time that control is reused and it will mess up everyone elses notifications. If you have some reason for wanting a custom row control let me know & I can add the ability for you to create & use your own custom row controls.
That count code is handled by the games notification manager, I don't see anything wrong with the zos code. Hopefully, if I'm lucky, I can find someone to send me notifications later when I get home & I'll see if I can't figure out whats causing it.
Last edited by circonian : 11/05/15 at 04:28 PM.
|
|||
|
circonian |
View Public Profile |
Send a private message to circonian |
Send email to circonian |
Find More Posts by circonian |
Add circonian to Your Buddy List |
11/05/15, 11:53 PM | ||
|
Re: Re: Re: Minor issue
The BuildNotificationList is getting run for both the keyboard & gamepad notification managers, which I did not expect. I expected only the manager for the mode you were in (keyboard/gamepad) would run, but it doesn't work that way. The keyboard one runs first, but then the gamepad one runs, which LibNotifications does not have a provider for, so that 0's the count back out because the messages do not exist in the gamepad notification manager. That seems like a bug to me. I don't know why they would run the BuildNotificationList() for both managers, it should only run for the mode your in. Not to mention the way its calculating & setting the notification count, twice, using different sets of providers. I guess they just assumed all notifications would always exist in both managers. It looks like I'm going to have to build a notification provider for the gamepad and find a way to manage both of them at the same time so addons don't have to handle both of the providers. That might take a while. It will have to wait until tomorrow night when I get home from work.
Last edited by circonian : 11/05/15 at 11:56 PM.
|
|
|
circonian |
View Public Profile |
Send a private message to circonian |
Send email to circonian |
Find More Posts by circonian |
Add circonian to Your Buddy List |
11/06/15, 06:29 PM | |
|
WARNING:
I know this was just released, but due to some requests, some problems, & to enable the ability to add notifications for gamepad mode as well there will be an update soon that will require some very minor changes on the part of any addon using this library. Since there is little work required for your addon to use the library it wont be a big deal, but since I know it is coming I thought I would make a post warning you about it. The next update (coming soon: tonight/tomorrow as soon as I finish rewriting it & test it) will very likely change the required structure of the message table.
Last edited by circonian : 11/06/15 at 06:29 PM.
|
|
circonian |
View Public Profile |
Send a private message to circonian |
Send email to circonian |
Find More Posts by circonian |
Add circonian to Your Buddy List |
11/06/15, 09:30 PM | |
|
Added support for gamepad notifications. Notifications will now show up in both keyboard & gamepad mode.
You don't have to do anything extra for gamepad notifications, the library handles both the keyboard & gamepad providers for you. BUT, the message table has changed slightly. The message table changes were done for gamepad support, to allow the use of different types of row controls, & to prevent future problems. Please read the NEW instructions I posted on how to create a message table on the main page. If you have any questions or problems just let me know. Posted Version 1.2
Last edited by circonian : 11/06/15 at 09:41 PM.
|
|
circonian |
View Public Profile |
Send a private message to circonian |
Send email to circonian |
Find More Posts by circonian |
Add circonian to Your Buddy List |
11/06/15, 09:46 PM | ||
|
|
|
|
circonian |
View Public Profile |
Send a private message to circonian |
Send email to circonian |
Find More Posts by circonian |
Add circonian to Your Buddy List |
11/07/15, 03:12 PM | ||||
I've updated my add-on with the new library version.
Last edited by CaptainBlagbird : 11/07/15 at 03:14 PM.
|
||||
|
CaptainBlagbird |
View Public Profile |
Send a private message to CaptainBlagbird |
Send email to CaptainBlagbird |
Find More Posts by CaptainBlagbird |
Add CaptainBlagbird to Your Buddy List |
11/07/15, 03:39 PM | |
I'm still a little bit confused about the order. I'm using secsSinceRequest as recommended, I don't use sortKey or sortIndex as they are only for internal sorting, right?
I noticed the list getting unsorted while there is a MotD pending: imgur album I see that ZO_GuildMotDProvider is the only official provider that doesn't use secsSinceRequest so I guess that's the reason. But I haven't tested with other official notifications yet. I don't care much about the list not being sorted correctly, but I wanted to point it out to you.
Last edited by CaptainBlagbird : 11/07/15 at 03:42 PM.
|
|
|
CaptainBlagbird |
View Public Profile |
Send a private message to CaptainBlagbird |
Send email to CaptainBlagbird |
Find More Posts by CaptainBlagbird |
Add CaptainBlagbird to Your Buddy List |
11/07/15, 04:02 PM | |||||
|
You are correct that they could have just checked if they were in gamepad mode & handled it all in a single accept/decline callback, but I guess they didn't want to have to do that so they created separate providers so that keyboard/gamepad mode would have unique callbacks. Which is also why I followed suit & added separate accept/decline callbacks for keyboard/gamepad mode. |
||||
|
circonian |
View Public Profile |
Send a private message to circonian |
Send email to circonian |
Find More Posts by circonian |
Add circonian to Your Buddy List |
11/07/15, 06:08 PM | ||
|
You said you "Removed a custom notification (#2)" and it is true that the notification with the heading Added #2 has disappeared, but I also notice that the message text associated with every notification has changed & no longer matches the heading. ONLY removing a notification would not change the heading/text of the other notifications so clearly something else has happened here. The sort problem does indeed exist, but something else is also going on in your test example. You are indeed correct about the MotD though, the fact that the sort key is missing from the MotD message table is what is messing up the entire sort. http://www.esoui.com/forums/showthread.php?p=24187#post24187 If you want to test it yourself, just add that key to the MotD BuildNotificationList function (dump this in your code file)
Warning: Spoiler
Lua Code:
and that will fix the sort problem. Hopefully they'll fix it though.
Last edited by circonian : 11/07/15 at 06:29 PM.
|
|
|
circonian |
View Public Profile |
Send a private message to circonian |
Send email to circonian |
Find More Posts by circonian |
Add circonian to Your Buddy List |
11/07/15, 06:54 PM | |||
|
|||
|
CaptainBlagbird |
View Public Profile |
Send a private message to CaptainBlagbird |
Send email to CaptainBlagbird |
Find More Posts by CaptainBlagbird |
Add CaptainBlagbird to Your Buddy List |