Да, примерно так. Когда переменная stop будет равна 1, тогда цикл оборвётся в нужном месте, и все смогут пользоваться гарнизоном как обычно.
stop = 0;
function enabling()
while 1 do
SetObjectEnabled('garrison', nil);
Trigger(4, 'garrison', 'kvest');
repeat
sleep(1);
until GetCurrentPlayer() ~= 1 or stop == 1;
SetObjectEnabled('garrison', 1);
Trigger(4, 'garrison', nil);
repeat
sleep(1);
until GetCurrentPlayer() == 1 or stop == 1;
if stop == 1 then
break;
end;
end;
end;