[edit] Beat by povuholo. I'll leave my long-winded explanation anyway. [/edit]
What povuholo said - you're fine either way in this specific instance. The difference between GetStage and GetStageDone is slightly different than you've stated, however, so maybe this will help you or somebody (hence the overbroad description here) in the future:
- Both can be used anywhere. Completed quests, uncompleted quests, dialogue, whatever. The game will remember what stage you last completed even if the quest is completed, so no real difference in the way you said*.
- GetStageDone looks at a single quest stage to see if it's been completed.
- GetStage looks to see if the current stage is equal, greater, or lesser than the one specified in the GetStage check.
Here's the big difference. Let's say you have a quest with stages 10, 20, 30, and 40.
GetStageDone == 20 will only be true if you set the stage to 20 at some point via Setstage. What this means, in terms of complex quests, is that if you were, say, at stage 10 and then setstage to 30, GetStageDone == 20 would NOT be true. If they later go back and fulfill the requirements for stage 20 and get the setstage, then GetStageDone == 20 would be true. OTOH, if they get the setstage to 20, then move on to stages 30 or 40, GetStageDone == 20 is still true, because it got completed at some point.
GetStage == 20 is only true when and only when the current stage is 20. Once you move to stage 10 or stage 30, it stops being true.
GetStage > 20 is only true when the stage is greater than 20, which means if the current stage is 30 or 40. Setstage back to 10, it stops being true. GetStage < 20, >= 20, and <= 20 work the same way. GetStage != 20 would be true anywhere besides if the current stage is 20, but would be true again if you moved from 20 to 30.
Which is to say that you'd be fine using either GetStageDone == 15, GetStage == 15, GetStage > 10, or GetStage >= 15, although I'd personally use GetStage == 15 for a completed quest like that.
* - Big completed/not completed differences are the completed checkbox, which moves the quest to the completed part of the journal, and the StopQuest function, which stops the dialogue and quest script from running, which is important to keep old quest scripts dead, although you can still reference variables and stages from them. Note also the generous use of quests labeled FIN by vanilla for post-quest dialogue for those precise reasons.
That was probably way more than you wanted to know, but HTH.
[more edit]
By the way, one thing I noticed once that I haven't had the chance to test yet is that there is one problem with getstage, which is that it doesn't return the current stage, but the highest stage. Meaning that if you'd advance the quest from 10 to 20, and then from 20 to 15, the game would still think that the current stage is 20 so any dialogue with the "getstage QuestID == 15" condition wouldn't show. Has anyone else experienced this?
Yes, although it's been long enough I can't remember if it was consistent about it, and if I remember correctly, it worked fine enough when moving between stages via setstage in the CS, but setstage via the console wouldn't move back at all ever, although that may be a different issue. I generally work around it via generous use of quest script variables and GetStageDone checks as appropriate.