Лоли Никита,
тоже проверьте свои end'ы, там что-то явно не то. Если судить по эндам, ваша функция заканчиается перед строкой
local p2 = GetObjectiveState ('qwert3', 1);
И к чему тогда объявление этой кучи локальных переменных?
Также, я не в курсе, но точно ли если писать if в одну строку, как у вас:
if p2 == OBJECTIVE_COMPLETED then opr= opr+1
То end после этого не нужен?
В любом случае после последнего elseif, а именно в конце кода, end требуется. Это не считая end'а, который закрывает всю функцию, и сейчас не там стоит.
В качестве рекомендации, переменные лучше называть более понятно, это не только нам на форуме облегчит, но и сами путаться не будете. Лучше длинное название, немного времени потеряется на печать, много времени приобретёте при отладке.
То же с пробелами. Если на форуме оно отображается верно (с тем исключением, что форум звёздочек понаставил), очень рекомендую отступы соблюдать как положено. А то у вас хаос полнейший, понятно, что интуитивно вы эти end'ы не расставите, без подробного счёта.