Dogenator, очевидно, нужно проверить корректность функции GetTownRace:
1. Имя городов точно 'player_1' и 'player_2'?
2. Раса которая вам нужна точно имеет идентификатор 1? А что именно возвращает данная функция? По документации вроде как RaceID, где 1 это RACE_RANDOM_TYPE, но сам я не использовал её, точно не уверен. Вообще юзать числа вместо понятных идентификаторов это путь к отладочному аду. Можно написать в консоли print(GetTownRace ('player_1')) и посмотреть что она реально вернула.
sleep() в данном скрипте используется без надобности. Два основных случая его применения, это:
1. Почти все функции работающие с объектами карты (с монстрами, строениями, героями и т.д.) исполняются условно говоря не мгновенно. Например вы хотите повесить обработчик касания на вражеского героя. Для этого надо обязательно выключить стандартный обработчик и только потом повесить свой, таковы правила игры. Но если написать:
SetObjectEnabled(hero, nil); -- выключение стандартного триггера касания героя
Trigger(HERO_TOUCH_TRIGGER, hero, func); -- установка своего триггера касания
То работать не будет, так как SetObjectEnabled(hero, nil); выполняется не мгновенно и не успеет выполниться до триггера (это упрощённое объяснение, причины конечно чуть другие). Так вот, в таких случаях всегда надо использовать sleep():
SetObjectEnabled(hero, nil); -- выключение стандартного триггера касания героя
sleep(1); -- минимальная задержка, обычно 1 хватает
Trigger(HERO_TOUCH_TRIGGER, hero, func); -- установка своего триггера касания
2. И конечно когда делаются всякие анимации, эффекты, всплывающие сообщения на карте, с помощью sleep() выставляются для них задержки.