В первую очередь стоит отметить, что скрипт — это сценарий (или определённая последовательность), строгое выполнение тех или иных команд в определённой последовательности, которые будут (или же не будут) выполняться, если наступит (или не наступит) определённое действие (попросту говоря, активируется ли та или команда или нет).
Разберём один маленький скриптик — как же он устроен.
dim_flt 20
dim_act 20
dim_frm 20
Это шапка скрипта. Фактически для любого скрипта она одинокова. Советую использовать именно в таком виде, даже если в Вашем варианте нет, например, акторов, или фреймов. И в таком количестве. Впрочем, с количеством проще: используйте ровно столько акторов (персонажей) и фреймов (мест, куда они будут телепортироваться, куда будут идти или ехать), сколько предполагаете задействовать в скрипте, но с небольшим запасом на случай, если будете исправлять скрипт, добавляя новых персонажей, чтобы потом лихорадочно не искать неизвестную, еле заметную ошибочку, из-за которой всё будет как-то не так
findactor 0, "Tommy"
findactor 1, "NULL"
Это список задействованных персонажей (акторов) скрипта. Параметр "NULL" обозначает "нулевой" (это по-немецки) и означает как бы "временный, несуществующий" актор. Таким образом чаще всего показывают для удобства дальнейшего просмотра скрипта, например, актор машины (или персонажа), который (-ая) будет находиться поблизости Томми, если далее в скрипте будет задействована такая команда "findnearactor 0, 1, CAR[Enemy]" (чтобы видно было, что, например, случайная машина из трафика задействована именно под цифрой "1", а не другой).
findframe 0, "Tommy"
Это задействованный список фреймов (в данном случае для Тома).
let flt[0] = 0
Это какой-то параметр, равный нулю, значению которого будет задействовано позднее. В таких случаях настоятельно советую использовать начальные значения параметров, начиная с нулевых, а не сразу с 5 или 10 (не с бухты-барахты, в общем).
label 101
Это первая метка (лэйбл), с неё часто начинается любая основная часть скриптов.
… // какие-то команды:
if flt[0] = 1, -1, 102
Условная команда, указывающая, что при значении равном единице, действие скрипта перейдёт дальше (вниз), а если значение будет иным (в данном случае, равное нулю, т.к. сразу под шапкой скрипта значение параметра было определено именно нулю), то переход в метку 102.
… // какие-то команды в этом скрипте:
let flt[0] = 0
Возвращаем значение, равное нулю, чтобы в следующий раз задействовать метку 102.
goto 101
Этой командой зацикливаем скрипт, таким образом произойдёт переход, возврат к первой метке, в данном случае — к метке 101.
label 102
… // какие-то команды в этом скрипте:
let flt[0] = 1
Теперь ставим значение параметра равным единице, чтобы задействовать то содержание скрипта, что идёт под меткой 101 сразу после проверочной команды "if flt[0] = 1, -1, 102". Таким образом произойдёт переход вниз скрипта, переход дальше по содержанию, а не в метку 102.
goto 101
Этой командой-меткой зацикливаем скрипт в метку 101. Таким образом произойдёт возврат для выполнения повторного действия в данном скрипте.