В этих статьях я попытаюсь объяснить, как создавать cleo-скрипты в Sanny Builder'е 3... Здесь разобраться будет легче тем, кто в школе на уроках информатики изучал основы программирования (QBasic и Free Pascal – или устаревший Turbo Pascal). В любом случае, в этой статье я попытаюсь дать базовые понятия о том, что дают на этих самых уроках – что такое переменная, каких она бывает типов и т.д. В общем, кому хватает (или хватило) школы могут благополучно на этом прекратить чтение этой статьи… Начну я с того, что такое переменная. Традиционно, переменную представляют в виде «ящика», в который «кладется» некоторое значение. Строго говоря, переменная имеет свой (всегда уникальный) идентификатор и значение (то что «кладут»). По идентификатору происходит обращение к этой переменной, а значение в ней может перезаписываться… Эти значения бывают разных типов. Когда говорят о типе переменной, подразумевают тип значения в этой переменной. Так вот, переменные делятся на следующие типы: 1.) Целочисленные (Integer). Принимают, как не трудно догадаться, положительные и отрицательные целые значения. 2.) Вещественные (Float). Числа с дробной частью, дробная часть отделяется от целой точкой: например, 5.624. 3.) Строковые (String). Значения строковых переменных представляют собой последовательность символов, отделяются двойными кавычками (строка переменной длины variable-length string) или одинарными (строка фиксированной длины fixed-length string – содержит до 15 символов, - если символов меньше, остаток заполняется символами NULL). Например, “STRING” или ‘STRING’. 4.) Так называемые хэндлы (Handle): обобщают в себе переменные, ссылающиеся на классы: актеров (Actor), машины (Car), объекты (Object), игрока (Player)… Переменные описанных выше типов объявлять не обязательно, но вы можете это сделать конструкцией: Code Var <идентификатор переменной> : <ее тип> End Нажатие ctrl + space в Sanny Builder’е отображает список всех типов. 5.) Массивы (Array). Содержат в себе несколько значений одного и того же типа. Обращение к этим переменным происходит по идентификатору массива и номера значения в нем.. Объявление массива в Sanny Builder'е обязательно: Code Var <идентификатор массива> : Array XX of <тип> End *XX здесь – количество значений содержащихся в массиве. Проще всего к значениям в массиве обращаться следующим образом: , здесь 0 – это номер элемента в массиве. Вместо ноля может стоять любое другое целое число, а также переменная целочисленного типа. В последнем случае обращение происходит к элементу массива под номером, равным значению в этой переменной. Двумерных, трехмерных и т.д массивов в скриптинге GTA я не встречал... 6.)логический (или булев) тип данных (Boolean). Может принимать всего 2 значения - True или False (соответсвенно "правда" или "ложь"). Значение булева типа True заменяется единицей, False - нулем. В языке программирования Sanny Builder'а переменная не может содержать значение булева типа, и следует присваивать эти значения напрямую. Так например в кострукции: Code Player.CanMove($PLAYER_CHAR) = True Игрок получает способность двигаться. В этом типе данных следует обратить внимание на существование булевых (или логических) операторов: 1) оператор коньюнкции (логическое "И", and), 2) оператор дизьюнкции (логическое "ИЛИ", or), 3) оператор отрицания (логическое "НЕ", not). Эти операторы используются с двумя или более значениями булева типа, и в конструкции с ними тоже возвращают значение True или False Например, в импликации (конструкции условия) Code if and <condition 1> >condition 2> ... <condition N> jf @label условие будет выполнено тогда и только тогда, когда будут выполнены все условия, входящие в импликацию (т.е оператору If будет возвращено значение True). Пока можете особо не зацикливаться на этом типе данных, если не понимаете, - все станет намного яснее, когда я буду объяснять о практическом его использовании в условиях и циклах. Вот, вроде и все типы данных, используемые в скриптинге... Что важно здесь уяснить - работать с переменными определенного типа надо как с переменными определенного типа, четко понимая, чего вы хотите добиться. Можно не уделять даже внимания умным словам, которые я тут понаписал - я их дал чисто для ликбеза (ликвидации безграмотности)... Идем дальше... Все переменные в скриптинге GTA делятся на локальные и на глобальные. Что важно, использование глобальных переменных в cleo приводит к конфликтам, поэтому, по меньшей мере, не рекомендуется использовать их при написании cleo-скрипта. Обращение к локальным переменным происходит следующим образом: 0@, 1@, 2@,... Как видите, идентификатор состоит из цифр и отделяется знаком @... Локальные переменные действуют только в пределах одного потока (в нашем случае – cleo-скрипта). В скриптах с расширением .cs число локальных переменных ограничено: от 0@ до 33@. Если вы хотите использовать больше переменных, сохраняйте скрипт в формате Custom Mission (с расширением .cm). К слову, напишу как сохранять скрипт в формате CLEO. Делается это просто – при помощи директив: нужно в шапке скрипта (то есть в самом начале, первой строчкой) написать Code {$CLEO <расширение файла>} Например: или Все - компилятор прочтет эту директиву и сохранит ваш скрипт в нужном формате... Подробнее о директивах потом… Обращение к глобальным переменным: $var_1 Идентификатор может состоять из букв латинского алфавита, цифр и знака подчеркивания. Обратите внимание, что знак доллара (говорящий программе что это не что иное как глобальная переменная) ставится в начале идентификатора. Когда мы вводим этот знак $ с клавиатуры, Sanny Builder выводит список всех использовавшихся в некоторой окрестности скрипта глобальных переменных. Эта окрестность небольшая - так что не удивляйтесь если в этом списке вдруг не окажется нужная вам переменная. Как уже говорилось, использование глобальных переменных в CLEO проиводит к конфликтам (если кто-то хочет подробнее узнать, почему это так - идем сюда или сюда), но ничто не мешает использовать глобальные переменные, описанные в файле CustomVariables.ini или цифровые, если вы точно знаете на что ссылаются эти переменные в main.scm. В первую очередь это относится к переменным: $ONMISSION - значение этой переменной равно 1, если игрок выполняет какую-либо миссию, и 0 - если нет (при этом когда $ONMISSION равна 1, запрещено сохраняться и начинать новые миссии) $PLAYER_ACTOR - в эту переменную записан актер - Карл $PLAYER_CHAR - а в этой игрок (не путать с предыдущим - игрок и актер - разные типы переменных) ну, и некоторые другие... На этом я заканчиваю свою первую статью – знаю, она получилась слишком занудной, но совершенно необходимой для того, чтобы научиться писать cleo-скрипты…
Источник: http://Собственные скромные познания, а также справка Sanny Builder'а v3.04, написанная yelmi |