Warum nicht? Dürfte die effizienteste Lösung sein. Der Code für die Events muss dabei nicht im Scripteditor stehen, sondern kann auch woanders hin. Du liest den Programmcode zur Laufzeit ein, packst ihn in irgendeine Methode und führst den Code dann per eval aus.
Beispiel:
Code:
module EventCodes
  @codes = 0
  def self.define_event_code code
    @codes += 1
    eval "def self.event_code_#{@codes}(npc); #{code}; end"
    @codes
  end

  def self.execute id, npc
    send :"event_code_#{id}", npc
  end

end

# beim Betreten der Map/Laden des NPCs
mein_npc.event_code_id = EventCodes.define_event_code "irgendein_event_code"

# beim Aktivieren des NPCs
EventCodes.execute mein_npc.event_code_id, mein_npc