I've tried the refractor code, it works fine up until the point when it gets stuck whenever it finds something that it shouldn't patch.
Here is the code (copied and pasted plus a PATCH_PRINT) :
PRINT "Patching dialogue files, this will take some time..."
COPY_EXISTING_REGEXP GLOB ~^.+\.dlg$~ ~override~
PATCH_IF ( SOURCE_SIZE > 0x33 ) BEGIN
PATCH_PRINT "%SOURCE_FILE%"
DECOMPILE_DLG_TO_D
REFACTOR_D_TRIGGER CASE_INSENSITIVE EXACT_MATCH ~StateCheck(Myself,STATE_CHARMED)~ ~OR(2)
StateCheck(Myself,STATE_CHARMED)
Global("CHARMED","LOCALS",1)~
COMPILE_D_TO_DLG
END
IF ~StateCheck.Myself.STATE_CHARMED~
BUT_ONLY_IF_IT_CHANGES
And I copied this into ALDETH.dlg's Top Level #26 trigger:
OR(2)
StateCheck(Myself,STATE_CHARMED)
StateCheck(Myself,STATE_CHARMED)
This causes it to go into an endless loop.
-Galactygon