For #1, what you could do is have your skill give your character a temporary (and large) buff to Perception for 1 second/round, which should cause any hidden objects nearby to show up. Make sure to give such a skill a huge AP cost so that it can only be used outside of combat.
For #2, I believe CharacterUsedSkillInTrigger is what you're looking to use if the objects you're getting info on are stationary and won't be moving at all. If your skill is named "SKILL_Lore", for example, it might look something like this (if I recall the code correctly)
IF
CharacterUsedSkillInTrigger(_, "SKILL_Lore", _Trigger)
THEN
DisplayLore(_Trigger);
PROC
DisplayLore((TRIGGER)_Trigger)
AND
ItemIsInTrigger(_item, _Trigger)
AND
DB_ItemLoreText(_item, _text)
THEN
ItemDisplayText(_item, _text);
(I don't recall if itemisintrigger is an actual function, but you just need something that links the item to the trigger).
For #3, I'm not sure of how that can be done at all.
The syntax for the characterusedskillintrigger is CharacterUsedSkillInTrigger(
CHARACTER _Character,
STRING _Skill,
STRING _SkillElement,
TRIGGER _Trigger
)
So _Skill should be the thing that's written after new entry in the skilldata.txt file? Ie if i want to check if the character uses the blind spell in the trigger i'll use "target_blind" or should i just type "blind"? _SkillElement i'm not familiar with either, is that something that can be found in the skilldata file?
As for the bump in perception, i recon you need to be able to somehow set the amount of perception needed for a certain item to show, haven't seen how to do this though but it seems like a perfect idea.