DoOnce is better for scripts that are attached to objects? StopQuest is the better method for quests that run at start-up?
Object scripts run every frame in GameMode and cannot be stopped entirely, however their 'expense' can be reduced after they've done their thing.
Spoiler scn ObjectSCPTInt bDoOnceBegin GameMode If bDoOnce Return Else ;Do 'expensive stuff Set bDoOnce to 1 EndIfEnd
Quest scripts can be stopped altogether, so...
Spoiler scn QuestSCPTInt bDoOnceBegin GameMode ;Do 'expensive stuff StopQuest QUSTEnd
...Is much like...
Spoiler scn QuestSCPTInt bDoOnceBegin GameMode If bDoOnce StopQuest Else ;Do 'expensive stuff Set bDoOnce to 1 EndIfEnd
...but the latter is more concise and will end sooner.
Since we can control how often a quest script runs, it can be useful to separate 'fast' and 'slow' code...
Spoiler scn QuestSCPTInt bQuickeningBegin GameMode If (bQuickening != Criterion) Set bQuickening to (bQuickening == 0) If bQuickening SetQuestDelay QUST 0 Else SetQuestDelay QUST .01 EndIf ElseIf bQuickening ;Fast Code Else ;Slow Code EndIfEnd