What I'm saying in the first post is that the dialog topics have the conditions shown (using GetQuestVariable). They are not tests in a script, so I can't show it.
My point is that the only way I can get the result I'm seeing is if a script is changing the variables at the same time the topics are being added to the display (which is very likely, given how this works), and the last one evaluated first.
But if you want a piece of code to chew on, this is what's running while it all happens:
if (AmberItem == 1) ; set by dialog when you tell her you have something for her If < player has any of the many amber cuirasses> set CuirassRef to set Cuirass to 1 endif ... same logic to set Sword and Shield ... set AmberItem to 0 ; indicates that check has been made, and she can ask again laterendif
The dialog topic that sets AmberItem to 1 has the goodbye flag, so that the script has the opportunity to run and set the three variables. However, it appears that the script is still running that check when I activate her again to continue the conversation. The next topic is a "What do you have for me?" with the four other topics as its choices. If I add a condition of "GetQuestVariable AmberItem == 0" to it, to ensure the script finished, it may or may not appear. Without it, I get the original problem.
So now it will have to be the same check in OnActivate to delay the start of the conversation until the script completes. It's very annoying that a script can't start until dialog completes, but dialog can start while a script is active. (Well a result script can run during dialog, but that can't have variables, so it doesn't help).
After examining the options here, it probably wouldn't help to sequence the topics in any way, as any incomplete state of the script will cause issues somewhere in the dialog. My only choice is likely to be the OnActivate fix.