temnyrizar, можно вот так сделать. Перед функцией впишем переменную с числом, когда функция запустится - она проиграет сцену, выдаст msgbox, квест, а после заполнит переменную числом, с которым эта часть кода функции больше не станет срабатывать т.к. условие не выполняется:
golemhouse_scene = 0
function golemhouse()
if golemhouse_scene == 0 then
StartDialogScene("/DialogScenes/DefiantMage/S1/DialogScene.xdb#xpointer(/DialogScene)");
MessageBox(quest1);
SetObjectiveState("sec1", OBJECTIVE_ACTIVE, p1);
golemhouse_scene = 1
end
local gems = GetPlayerResource(p1, GEM)
if gremlins >= 1000 and gems >= 100 then
QuestionBox(pyramidpath, "yes", "no");
end
end