Here is a solution to Lore using an item script

Have the script Lorable.itemScript witht the following code
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

Code
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
Code
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.