GetStage gibt die höchste erreichte Stage aus. Ganz egal ob die gerade erreicht wurde, oder schon vor Tagen.

Da ich davon ausgehe, dass die Vanilla-Quest noch eine höhere Stage als 10 hat solltest du entweder >= als Vergleichsoperator verwenden, oder die Funktion GetStageDone zu rate ziehen.


Einzige Alternative zu Gamemode währe in deinem Fall MenuMode. So groß ist der Unterschied aber auch nicht.
Code:
scn 'scriptname'

Begin GameMode
	if ( GetStageDone 'Questname', 10 )
		player.additem 'EditorID eines Objektes' 1
		SetStage 'Questname2' 10
		StopQuest 'Questname dieser Quest'
	endif
End
Außerdem sind Script bei Oblivion performance-technisch das geringste Problem. Und dadurch, dass die Quest nach Erfüllung der Aufgabe beendet/gestoppt wird hat sie keinerlei Auswirkungen mehr.

Ich würde dir eher empfehlen das ganze über Conditions bei der zu startenden Quest zu regeln.