Here is a solution to Lore using an item script
Have the script Lorable.itemScript witht the following code
INIT
ITEM:__Me
EXTERN FIXEDSTRING:%LoreText="NoLore"
EXTERN FLOAT:%TimeDisplayed=7.0
INT:%Unlocked=0
EVENTS
EVENT LoreRequest
ON
OnUseItem(_,__Me)
ACTIONS
IF "c1"
IsEqual(%Unlocked, 1)
THEN
DisplayText(__Me, %LoreText, %TimeDisplayed)
ENDIF
This will display a text when you use the item with the script attached. You can define which text is displayed by when attaching the Script to the item there is a box on the far right that will have a variable named LoreText. Change that to whatever text key you want to display (as defined in Translated String Key)
The next issue is unlocking it this can be done in a few ways. Use a skill that applies any potion on an item (is skill properties use: Consume,100,0,<Some Potion defined in potion stats>)and add the following code to the Lorable.itemScript
EVENT UnlockMethod1
ON
OnItemStatus(__Me, CONSUME)
ACTIONS
Set(%Unlocked, 1)
DisplayText(__Me, %LoreText, %TimeDisplayed)
This will both unlock and display the LoreText when first applied upon. However this will activate whenever someone applies a potion to the item.
Another Solution is to have the potion be put on the Character itself and whenever that character uses a Lorable item with the potion bonus on, it will unlock it. (look at stats of shouts for ways to do this nicely).
Include the following in Lorable.itemScript. <Name of Potion> should be the name of the potion u are trying to detect
EVENT UnlockMethod2
VARS
CHARACTER:_Char
ON
OnUseItem(_Char,__Me)
ACTIONS
IF "c1"
CharacterHasStatus(_Char, CONSUME, "<Name of Potion>")
THEN
Set(%Unlocked, 1)
DisplayText(__Me, %LoreText, %TimeDisplayed)
ENDIF
You could also unlock them by using story scripts but that requires each Lorable to be Global - a bad practice.
An issue with the current code is each item would have to be unlocked separately. If you want all similar items to be unlocked at the same time I would advise setting a global event unique to that set of Lorable items (use another EXTERN Variable). Then check for the global event instead of the local variable Unlocked.