Главная | Регистрация | Вход Приветствую Вас Гость | RSS
Меню
Мини-чат
категории раздела
SA:MP [0]
Скриптинг [16]
Модинг [0]
Прохождение [0]
Секреты [1]
Разное [0]
часики
Наш опрос
нежен ли дополнительный сервер сайту?
1. конечно
2. и этого места хватит
3. когда кончется тогда и решим
Всего ответов: 2
Главная » Статьи » Скриптинг

Статья «Экспресс-курс программирования в Sanny Builder»
Длинные-предлинные железнодорожные составы, гравитационные игры, спидометры и прочие датчики, возможность проигрывания своих любимых MP3-композиций... И все это, вы не поверите, в GTA: SA. Да-да, вы не ослышались. Все перечисленное на самом деле можно реализовать в GTA: SA при помощи свежеиспеченного редактора скриптов и миссий, в частности — крайне шустрой и компактной утилиты с кодовым названием Sanny Builder (аббревиатура — SB). SB — это вам не SAMB, который вот уже как полтора года не обновляется, а мощный программный комплекс, позволяющий полностью раскрыть потенциал игрового движка GTA: San Andreas.
В сегодняшней статье мы изучим синтаксис SB, а также познакомимся с уникальной библиотекой CLEO, с появлением которой стало возможным создание автономных скриптовых модификаций для GTA: SA. Данный материал призван в первую очередь помочь «билдерщикам» перейти с SAMB на новую платформу, т.е. на SB.

Синтаксис и пунктуация

При написании любой скриптовой конструкции в SB необходимо соблюдать ряд элементарных, но вместе с тем очень и очень важных правил. В противном случае компилятор, встроенный в SB, не поймет, что же вы хотели сказать, и откажется переводить модифицированный вами scm-файл в формат, понятный игре.
Так вот. При объявлении новых переменных в SB вовсе не обязательно указывать так называемые опкоды, как в SAMB: 0004: $var = 0. Можно переписать данную запись в более простом и читабельном виде:
$var = 0
Где $ — значок, обозначающий тип переменной, var — название переменной, а 0 — ее значение. Хорошим тоном при объявлении переменных в SB является указание их типа — целые, вещественные, короткие и т.д. Все дело в том, что в некоторых случаях компилятору не удается распознать тип заданной вами переменной, а следовательно — скомпилировать SCM-файлы. Дабы помочь программе распознать тип заданной вами переменной, старайтесь использовать следующую конструкцию:
var
$parameter1: Integer
$parameter2: Float
end
Из этого примера нетрудно заметить, что переменная $parameter1 объявлена в виде целочисленной, а $parameter2 — в качестве дробной или вещественной.

Так, что у нас там дальше по списку? Точно — массивы. Напомним, что создание записей такого типа в SAMB было практически невозможным: сложно, долго, не всегда и не у всех работает. То ли дело SB — в данной среде объявление массивов практически не отличается от инициализации одиночных переменных:
Var
<array_name>: array <size> of <type>
End
Т.е. также задаем имя массива (<array_name>), число переменных (<size>) и тип структуры (<type>), например:
Var
$Igromania_array: array 7 of Float
End
Для обращения к элементам массива в SB используется команда вида:
<Name> [<element>] += 100.0
Где <Name> — название массива, в нашем случае $Igromania_array, <element> — порядковый номер элемента массива, скажем 5.
При необходимости вы можете присвоить какое-либо значение элементу массива и при помощи следующей команды:
f<name> [number] = 5
Здесь f — указатель на тип массива (f — в случае, если массив представляет собой совокупность вещественных переменных, i — целых, s — строковых), <name> — имя массива, скажем $Igromania_array, number — порядковый номер элемента массива, 5 — присваиваемое значение.
Далее по списку — объявление различных констант. Останавливаться на этом пункте мы, пожалуй, не будем — приведем лишь пример инициализации простейшей константы в редакторе миссий:
CONST
<name> = <value>
Из этого примера нетрудно заметить, что любая константа должна заключаться между строк CONST и END. <name> — имя константы, например Igrostroy, <value> — ее значение, скажем 170.

Движемся дальше. Давайте теперь посмотрим, как происходит постановка различных условий и проверка их выполнения в SB. Помнится, в SAMB для объявления какого-либо условия нужно было внедрить в определенном месте конструкцию следующего вида:
00D6: if 21
8118: NOT actor $my_act dead
8119: NOT car $my_car wrecked
004D: jump if false JJBlock1
0002: jump JJNext
Согласитесь, не очень удобно. Sanny Builder же предлагает несколько способов постановки условий. Наиболее простой и удобный из них:
if
$var1 > 0
jf @LabelX
Первый операнд указывает на то, что выполняется постановка условия. Важное примечание. Если вам нужно, чтобы одновременно выполнялось несколько условий, — скажем, два, три или все 99, — просто добавьте к ключевому слову if через пробел слово and. Например, конструкция с проверкой на 3 условия будет выглядеть следующим образом:
if and
$var1 > 0
$var2 < 0
$var3 > 0
jf @LabelX
При желании вы можете поэкспериментировать с использованием условных операторов IF..THEN..END и IF..THEN..ELSE..END.
Помимо условного оператора if, в SB реализована поддержка и других операторов цикла — скажем, for, while, repeat. Прямо, как и во всех серьезных языках программирования высокого уровня. Приведем примеры использования каждого из них:
FOR $MyCounter = 1 to $final
$value+= 30
End
Поясним действие данной связки команд. Для значения $MyCounter, равного 1, до цифрового значения, заключенного в переменную с кодовым названием $final, прибавить к параметру $value цифру 30. Понятное дело, цикл будет повторяться до тех пор, пока значение атрибута $MyCounter не станет равным $final.
Аналогичным образом производится организация цикла с употреблением оператора while:
$var = 4
While $var<10
inc($var)
end
Данный фрагмент кода приложения будет работать по следующей схеме — до тех пор, пока значение $var<10, будет выполняться команда inc($var) и цикл будет повторяться.
Ну и при помощи оператора Repeat...until можно сконструировать цикл, тело которого выполнится хотя бы один раз, независимо от наложенных условий:
REPEAT
wait 10
07F5: car 4@ control_hydraulics 0.0 0.0 1000.0 1000.0
$Timer -= 1
UNTIL $Timer <= 1
В данном примере программа сначала выполнит команду 07F5: car 4@ control_hydraulics 0.0 0.0 1000.0 1000.0, а лишь затем — проверку условия.
Итак. С объявлением переменных и констант разобрались, массивы инициализировать научились, по циклам и условиям пробежались. Далее на повестке дня — комментирование фрагментов кода. В SAMB для вставки своего авторского комментария требовалось внедрить в нужном месте символ «;» и после него напечатать произвольный текст. В SB же комментирование блоков выполнено на манер профессиональных языков программирования. Т.е. для блокировки целой строки вам нужно вбить в самом ее начале два «слэша» вида //, например:
// Игроманский мод 2007. Best of the best.
Если вы хотите вмонтировать свой комментарий, например, посередине строки между какими-то командами, просто заключите текст подписи между фигурными скобками , скажем:
car 153@ Игрострой — формат C: stopped
Примечательно то, что, используя второй способ комментирования, можно «вывести из игры» не только одну строку, но и какую-либо цельную скриптовую конструкцию. Для этого всего лишь нужно поставить открывающую фигурную скобку в начале одной строки, а закрывающую — в конце какой-либо из нижестоящих строк, например:
:COPCAR_16679
if
81AF: not car 153@ sphere 0 in_sphere 150@ 151@ 152@ radius 4.0 4.0 4.0
else_jump @COPCAR_16742
Car.StorePos(153@, 150@, 151@, 152@)
154@ = 0
Из других правил скриптописания в SB. Не нужно ставить символ точки с запятой в конце строки, как в SAMB, где выполнение данного действия (т.е. постановки символа ; в конце строки) было жизненно необходимо. При объявлении потока (мода), а также в различных переходах в SB вместо символа английского фунта JJ необходимо использовать литеру @, например:
create_thread_wb @X_thread
jump @Label1
gosub @Mod2
Далее. Все локальные переменные содержат значок @ в конце, а не в самом начале, как в SAMB. Ну и, наконец, ключевые слова... Что, уже догадались? Совершенно верно — все типовые команды (опкоды, ответственные за создание авто, персонажей на карте, расстановку чекпойнтов, вооружения, команды для создания взрывов, затемнения экрана и далее, и далее) в SB можно прописывать по тексту без указания кода команды. Т.е, скажем, вместо команды 0001: wait 0 ms в SB вы можете написать просто — wait 0 ms. Минусов у такого подхода нет вовсе, а вот сколько плюсов! Главное достоинство такой записи команд — нет необходимости запоминать различные циферки, нужные лишь компилятору.

CLEO — ключ к независимости

Ключевая особенность SB — возможность создания обособленных (читай: внешних) скриптовых дополнений благодаря уникальной библиотеке CLEO третьего поколения. Это означает, что конечному пользователю, т.е. геймеру, больше не придется заменять оригинальные файлы, начинать игру сначала и все в таком духе. Достаточно всего лишь положить файл со скриптовым модом или миссией в специальный каталог с игрой! В Sanny Builder предусмотрено несколько способов создания CLEO-скриптов. Мы рассмотрим наиболее простой из них.

Первым делом щелкните левой копкой мышки по кнопке CLEO в строке состояния в нижней части редактора для установки необходимых компонентов. В открывшемся окне внимательно ознакомьтесь с текстом лицензионного соглашения, после чего щелкните по кнопке инсталляции библиотеки CLEO 3. Далее создайте новый документ в SB и вживите в самое начало файла следующую директиву: $CLEO. Наконец, наберите в текстовом поле программы произвольный скрипт и скомпилируйте файл при помощи горячей клавиши F6 на клавиатуре. SB автоматически сохранит ваш скриптовый мод в виде независимого дополнения в директорию \CLEO установленной GTA: San Andreas. Вам лишь останется опробовать свежеиспеченную модификацию непосредственно в игре. Внимание, внимание! При написании автономных миссий в Sanny Builder, использующих библиотеку CLEO (прим. — которая, к слову, была разработана создателем SB — Seemann'ом), указывайте в начале файла директиву $CLEO .cm вместо $CLEO.

* * *

Время подводить итоги. Сегодня мы рассмотрели синтаксис Sanny Builder, а также научились создавать автономные или независимые скриптовые моды при помощи уникальной библиотеки компонентов CLEO третьего поколения. Полученных знаний вам вполне хватит, чтобы с легкостью перейти на данную «платформу» со сдавшего свои позиции SAMB или же освоить SB с чистого листа. Ну а если возникнут вопросы — как и всегда, пишите на почтовый ящик gamedev@igromania.ru, который работает 24 часа в сутки, семь дней в неделю, 365 дней в году.

Источник: http://хз

Категория: Скриптинг | Добавил: SysAdmin (23.07.2008) | Автор: Эдуард Клишин E W
Просмотров: 4009 | Комментарии: 1 | Рейтинг: 3.0/2
Всего комментариев: 1
1 MaZaHaKa  
0

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Мини-профиль

Гость !


Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
поисковик
Интеллектуальная поисковая система Nigma.ru
Добавь Нас!
баннеры
Google-Add.com - Открытый Каталог Сайтов
[AR]clan ©2025