You seem to have some confusion with statenames.
IF ~~ QUEST3.0
SAY ~text~
IF ~~ THEN EXIT
END
This is shorthand for:
IF ~~ BEGIN QUEST3.0
SAY ~text~
IF ~~ THEN EXIT
END
Giving us the statename QUEST3.0. However with this:
CHAIN
IF Quest2.9 THEN ~_BNPC3~ AliceAnswers
~Hey, I can help too - I'm Alice!~
== ~_BNPC1~ ~no way, you slell funny~
== ~_BMONTAR~ ~And I want to fry it up for dinner anyways..~
EXTERN ~_BMONTAR~ Quest3.0
CHAIN
IF Quest3.0 THEN ~_BMONTAR~ DinnerTime
~after all, it is time to eat.~
== ~_BALICE~ ~don't you want to go on?~
== ~_BMONTAR~ ~NO.~
DO ~SetGlobal ("Dinner","LOCALS",1)~
EXIT
You have 'CHAIN IF Quest2.9 THEN ~_BNPC3~ AliceAnswers'. In this I'm not sure what you're trying to do. What should go between 'CHAIN IF' and 'THEN filename' are the conditions for the block to run (in tildes) e.g. CHAIN IF ~True()~ THEN ~_BNPC3~ AliceAnswers or if you don't want any conditions: CHAIN ~_BNPC3~ AliceAnswers, which I think is what you want here.
In these examples your statenames are AliceAnswers and DinnerTime but you've got with Quest2.9 and Quest3.0 sitting where the requirements should be, so I think you're kind of confused.
The structure for CHAIN (slightly simplified) is:
CHAIN [ IF stateTriggerString THEN ] entryFilename entryLabel
chainText list
chainEpilogue
The red square brackets represent optional coding, in this case the conditions. Conditions would only be there if this CHAIN was the start of the dialogue. entryLabel is our statement, if that makes sense to you, as I think you've got the syntax kind of confused in your head.
Edit: So my guess at what you wanted is:
CHAIN
IF ~somestartingconditions~ THEN ~_BNPC3~ Quest2.9
~Hey, I can help too - I'm Alice!~
== ~_BNPC1~ ~no way, you slell funny~
== ~_BMONTAR~ ~And I want to fry it up for dinner anyways..~
EXTERN ~_BMONTAR~ Quest3.0
CHAIN ~_BMONTAR~ Quest2.9
~after all, it is time to eat.~
== ~_BALICE~ ~don't you want to go on?~
== ~_BMONTAR~ ~NO.~
DO ~SetGlobal ("Dinner","LOCALS",1)~
EXIT
Although I don't know if Quest2.9 is the start of the dialogue, so I've left 'IF ~somestartingconditions~ THEN' in there. If its not, just remove it.