Here's a script that I did a year back that does this.

Init section

Code
DB_AngeredSpirit("Aeril_WW_AngeredSpirit","Evil NPC","Aeril_WW_AngrySpirit");
DB_GaervConvinced("Aeril_WW_GaervSolution",CHARACTER_Aeril_SpiritOfTheForest,TRIGGER_Aeril_WW_DialogTrigger,"Aeril_TD_GaervWisp");
DB_GaervSpiritDrinks("Aeril_WW_GaervSpiritDrinks");
DB_GaervPlayerSpiritBottomsUp(CHARACTER_Aeril_GaervTable,"WaitForScreen","Aeril_WW_GaervSitDown",TRIGGER_Aeril_WW_GaervChairPlayer);
DB_GaervSitCount(0);

DB_GaervSpiritChairStartsDialog(ITEM_FUR_GaervChair2,"Aeril_TD_GaervWispTable",CHARACTER_Aeril_GaervTable,CHARACTER_Aeril_SpiritTable);

DB_GaervSpirit(CHARACTER_Aeril_Gaerv);
DB_GaervSpirit(CHARACTER_Aeril_SpiritOfTheForest);

DB_GaervSpiritDrinksItems(ITEM_FUR_GaervChair1);
DB_GaervSpiritDrinksItems(ITEM_FUR_GaervChair2);
DB_GaervSpiritDrinksItems(ITEM_FUR_GaervChair3);
DB_GaervSpiritDrinksItems(ITEM_CON_GaervCup1);
DB_GaervSpiritDrinksItems(ITEM_CON_GaervCup2);
DB_GaervSpiritDrinksItems(ITEM_CON_GaervCup3);
DB_GaervSpiritDrinksItems(ITEM_FUR_GaervLiquor);
DB_GaervSpiritDrinksItems(ITEM_FUR_GaervRoundTable);
ProcSetItemsOnStage(0);

DB_GaervSpiritTable(CHARACTER_Aeril_GaervTable);
DB_GaervSpiritTable(CHARACTER_Aeril_SpiritTable);
ProcSetDrinkGaervSpiritOnStage(0);

DB_SpiritSummons(CHARACTER_Aeril_WW_Summon1,TRIGGER_Aeril_WW_SpiritSummonSpawn1);
DB_SpiritSummons(CHARACTER_Aeril_WW_Summon2,TRIGGER_Aeril_WW_SpiritSummonSpawn2);
DB_SpiritSummons(CHARACTER_Aeril_WW_Summon3,TRIGGER_Aeril_WW_SpiritSummonSpawn3);
DB_SpiritSummons(CHARACTER_Aeril_WW_Summon4,TRIGGER_Aeril_WW_SpiritSummonSpawn4);
ProcSetSpiritSummonsOnStage(0);

DB_CharacterGain(CHARACTER_Aeril_WW_Summon1,0.10);
DB_CharacterGain(CHARACTER_Aeril_WW_Summon1,0.10);
DB_CharacterGain(CHARACTER_Aeril_WW_Summon1,0.10);
DB_CharacterGain(CHARACTER_Aeril_WW_Summon1,0.10);
DB_CharacterGain(CHARACTER_Aeril_SpiritOfTheForest,0.20);


DB_JournalAdd("Aeril_WW_WispCompromise","Aeril_TheWoodOrTheWisps",0);
DB_JournalUpdate("Aeril_WW_WispCompromise","Aeril_TheWoodOrTheWisps","Update1",0);
DB_JournalUpdate("Aeril_WW_GaervTroubles","Aeril_TheWoodOrTheWisps","Update2",0);
DB_JournalUpdate("Aeril_WW_GaervBarter","Aeril_TheWoodOrTheWisps","Update3",0);
DB_JournalUpdate("Aeril_WW_GaervArrow","Aeril_TheWoodOrTheWisps","Update4",0);
DB_JournalUpdate("Aeril_WW_GaervCrafting","Aeril_TheWoodOrTheWisps","Update5",0);


DB_JournalUpdate("Aeril_WW_AngeredSpirit","Aeril_TheWoodOrTheWisps","Update6",0);
DB_JournalUpdate("Aeril_WW_WispLeaveForest","Aeril_TheWoodOrTheWisps","Update7",0);



Code section

Code

//BEGIN Anger Wisp
IF
	DialogCharacterEventSet(_Flag,_Character,_DialogInstance)
AND
	DB_AngeredSpirit(_Flag,_Faction,_DisplayText)
THEN
	DB_DoActionAfterDialogEndedAngerWisp(_DialogInstance,_Character,_Faction,_DisplayText);
	NOT DB_AngeredSpirit(_Flag,_Faction,_DisplayText);

IF 
	DialogEnded(_Dialog,_DialogInstance)
AND
	DB_DoActionAfterDialogEndedAngerWisp(_DialogInstance,_Character,_Faction,_DisplayText)
THEN
	CharacterSetFaction(_Character,_Faction);
	CharacterDisplayText(_Character,_DisplayText);
	ProcSpiritSummons(1);
	NOT DB_DoActionAfterDialogEndedAngerWisp(_DialogInstance,_Character,_Faction);

PROC
	ProcSetSpiritSummonsOnStage((INTEGER)_OnStage)
AND
	DB_SpiritSummons(_Summon,_Trigger)
THEN
	CharacterSetOnStage(_Summon,_OnStage);
	
PROC
	ProcSpiritSummons((INTEGER)_PlayAnimation,(CHARACTER)_Player)
AND
	DB_SpiritSummons(_Summon,_Trigger)
THEN
	ProcAugmentLevel(_Summon,_Player);
	CharacterAppearAtTrigger(_Summon,_Trigger,_PlayAnimation);


//END Anger Wisp

//BEGIN Gaerv Convinced to talk, moves to spirit

IF
	DialogCharacterEventSet(_Flag,_Character,_DialogInstance)
AND
	DB_GaervConvinced(_Flag,_NPC,_Trigger,_Dialog)
THEN
	DB_DoActionAfterDialogEndedMoveGaerv(_DialogInstance,_Character,_NPC,_Flag,_Trigger,_Dialog);
	NOT DB_GaervConvinced(_Flag,_NPC,_Trigger,_Dialog);

IF 
	DialogEnded(_Dialog,_DialogInstance)
AND
	DB_DoActionAfterDialogEndedMoveGaerv(_DialogInstance,_Character,_NPC,_Event,_Trigger,_DialogToLaunch)
THEN
	CharacterMoveToCharacter(_Character,_NPC,0,_Event);
	
IF
	CharacterEvent(_Character,_Event)
AND
	DB_DoActionAfterDialogEndedMoveGaerv(_DialogInstance,_Character,_NPC,_Event,_Trigger,_Dialog)
THEN
	DB_DoActionOnTriggerEnteredMoveGaerv(_Character,_NPC,_Trigger,_Dialog);
	TriggerRegisterForPlayers(_Trigger);
	CharacterFreeze(_Character);
	NOT DB_DoActionAfterDialogEndedMoveGaerv(_DialogInstance,_Character,_NPC,_Event,_Trigger,_Dialog);

IF
	CharacterEnteredTrigger(_Character,_Trigger)
AND
	DB_DoActionOnTriggerEnteredMoveGaerv(_NPC1,_NPC2,_Trigger,_Dialog)
AND
	_Character.isPlayer()
THEN
	CharacterUnfreeze(_NPC1);
	TriggerUnregisterForPlayers(_Trigger);
	ProcDoThreeSpeakerDialog(_Dialog,_NPC1,_NPC2,_Character);
	CharacterLookAtCharacter(_Character,_NPC2,0);
	NOT DB_DoActionOnTriggerEnteredMoveGaerv(_NPC1,_NPC2,_Trigger,_Dialog);

//END Gaerv Convinced to talk, moves to spirit

//BEGIN Gaerv, Spirit BottomsUp!

PROC
	ProcSetItemsOnStage((INTEGER)_OnStage)
AND
	DB_GaervSpiritDrinksItems(_Item)
THEN
	ItemSetOnstage(_Item,_OnStage);

PROC
	ProcSetDrinkGaervSpiritOnStage((INTEGER)_OnStage)
AND
	DB_GaervSpiritTable(_Item)
THEN
	CharacterSetOnStage(_Item,_OnStage);

PROC
	ProcSetGaervSpiritOnStage((INTEGER)_OnStage)
AND
	DB_GaervSpirit(_Character)
THEN
	CharacterSetOnStage(_Character,_OnStage);

IF
	DialogCharacterEventSet(_Flag,_Character,_DialogInstance)
AND
	DB_GaervSpiritDrinks(_Flag)
THEN
	DB_DoActionAfterDrinks(_DialogInstance,_Character);
	NOT DB_GaervSpiritDrinks(_Flag);

IF
	DialogEnded(_Dialog,_DialogInstance)
AND
	DB_DoActionAfterDrinks(_DialogInstance,_Character)
THEN
	FadeToBlack(_Character,1.0,0);
	TimerLaunch(_Dialog,3000);

IF
	TimerFinished(_Event)
AND
	DB_DoActionAfterDrinks(_DialogInstance,_Character)
AND
	DB_GaervPlayerSpiritBottomsUp(_NPC,_TimerEvent,_DisplayText,_Trigger)
THEN
	TimerCancel(_Event);
	ProcSetItemsOnStage(1);
	ProcSetGaervSpiritOnStage(0);
	ProcSetDrinkGaervSpiritOnStage(1);
	CharacterTeleportToTrigger(_Character,_Trigger,"");
	FadeToBlack(_Character,1.0,1);
	TimerLaunch(_TimerEvent,3000);
	NOT DB_DoActionAfterDrinks(_DialogInstance,_Character);

IF
	TimerFinished(_TimerEvent)
AND
	DB_GaervPlayerSpiritBottomsUp(_NPC,_TimerEvent,_DisplayText,_Trigger)
AND
	DB_GaervSitCount(_Count)
AND
	IntegerSum(_Count,1,_Sum)
AND
	_Sum < 5
AND
	DB_NumberString(_Sum,_NumberAsString)
AND
	StringConcatenate(_DisplayText,_NumberAsString,_ResultingDisplayText)
THEN
	NOT DB_GaervSitCount(_Count);
	DB_GaervSitCount(_Sum);
	TimerCancel(_TimerEvent);
	CharacterDisplayText(_NPC,_ResultingDisplayText);
	TimerLaunch(_TimerEvent,6000);

IF
	CharacterUsedItem(_Character,_Item)
AND
	DB_GaervSpiritChairStartsDialog(_Item,_Dialog,_NPC1,_NPC2)
AND
	_Character.isPlayer()
AND
	DB_GaervPlayerSpiritBottomsUp(_N,_TimerEvent,_DT,_T)
THEN
	TimerCancel(_TimerEvent);
	ProcDoThreeSpeakerDialog(_Dialog,_NPC1,_NPC2,_Character);
	NOT DB_GaervSpiritChairStartsDialog(_Item,_Dialog,_NPC1,_NPC2);
	NOT DB_GaervPlayerSpiritBottomsUp(_N,_TimerEvent,_DT,_T);

//END Gaerv, Spirit BottomsUp!




The specific part that you want to check for is when the charater moves in a trigger :
CharacterEnteredTrigger(_Character,_Trigger)


Code
IF 
	DialogEnded(_Dialog,_DialogInstance)
AND
	DB_DoActionAfterDialogEndedMoveGaerv(_DialogInstance,_Character,_NPC,_Event,_Trigger,_DialogToLaunch)
THEN
	CharacterMoveToCharacter(_Character,_NPC,0,_Event);
	
IF
	CharacterEvent(_Character,_Event)
AND
	DB_DoActionAfterDialogEndedMoveGaerv(_DialogInstance,_Character,_NPC,_Event,_Trigger,_Dialog)
THEN
	DB_DoActionOnTriggerEnteredMoveGaerv(_Character,_NPC,_Trigger,_Dialog);
	TriggerRegisterForPlayers(_Trigger);
	CharacterFreeze(_Character);
	NOT DB_DoActionAfterDialogEndedMoveGaerv(_DialogInstance,_Character,_NPC,_Event,_Trigger,_Dialog);

IF
	CharacterEnteredTrigger(_Character,_Trigger)
AND
	DB_DoActionOnTriggerEnteredMoveGaerv(_NPC1,_NPC2,_Trigger,_Dialog)
AND
	_Character.isPlayer()
THEN
	CharacterUnfreeze(_NPC1);
	TriggerUnregisterForPlayers(_Trigger);
	ProcDoThreeSpeakerDialog(_Dialog,_NPC1,_NPC2,_Character);
	CharacterLookAtCharacter(_Character,_NPC2,0);
	NOT DB_DoActionOnTriggerEnteredMoveGaerv(_NPC1,_NPC2,_Trigger,_Dialog);



This script contains more than what you asked but maybe it can help you answer some other questions you might or will have.