a) mal aus der Hüfte geschossen:
Code:
Scriptname myCharismaTeachingBook

; speichert, ob das Buch schon mal geöffnet wurde
short doOnce

Begin OnAvtivate

; beim 1. Öffnen: Erhöhe Charisma
if (doOnce == 0)
	player.modAV Charisma 2
	set doOnce to 1
enddif

; Buch "aktivieren" öffnet es
activate

end
Einziges Problem: Wenn du mehrere von den Büchern im Spiel verteilst, wird jedes das Charisma erhöhen. Das kann man aber auch umgehen, indem man die doOnce-Variable in eine Dummy-Quests verpackt.

Evtl. muß ein ähnliches Skript in einen OnEquipp-Block. Ich bin nicht sicher, ob das Auswählen des Buchs im Inventar als "Activate" oder "Equip" gilt.

b) ist schwieriger zu realisieren. Evtl. mit einem Skript, daß in der GameMode-Sektion eine Variable prüft, die im OnActivate-Block gesetzt wird. Das klappt aber z.B. dann nicht richtig, wenn der Spieler das Buch schon im Inventar hat.

c) ist afaik nicht drin. So etwas wie "OnHover" kenne ich nicht.